[{"data":1,"prerenderedAt":2025},["ShallowReactive",2],{"navigation_docs":3,"-docs-storefront-sdk-nuxt-layer-assistant":357,"-docs-storefront-sdk-nuxt-layer-assistant-surround":2020,"docs-site-config":2010},[4,74,135,139,161,195,273],{"title":5,"path":6,"stem":7,"children":8},"Assets API","\u002Fdocs\u002Fassets","docs\u002Fassets\u002Findex",[9,10,32,57],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"page":31},"Getting Started","\u002Fdocs\u002Fassets\u002Fgetting-started","docs\u002Fassets\u002F1.getting-started",[15,19,23,27],{"title":16,"path":17,"stem":18},"Base URL","\u002Fdocs\u002Fassets\u002Fgetting-started\u002Fbase-url","docs\u002Fassets\u002F1.getting-started\u002F1.base-url",{"title":20,"path":21,"stem":22},"Important Notes","\u002Fdocs\u002Fassets\u002Fgetting-started\u002Fimportant-notes","docs\u002Fassets\u002F1.getting-started\u002F2.important-notes",{"title":24,"path":25,"stem":26},"URL Format","\u002Fdocs\u002Fassets\u002Fgetting-started\u002Furl-format","docs\u002Fassets\u002F1.getting-started\u002F3.url-format",{"title":28,"path":29,"stem":30},"Custom Domains","\u002Fdocs\u002Fassets\u002Fgetting-started\u002Fcustom-domains","docs\u002Fassets\u002F1.getting-started\u002F4.custom-domains",false,{"title":33,"path":34,"stem":35,"children":36,"page":31},"Usage","\u002Fdocs\u002Fassets\u002Fusage","docs\u002Fassets\u002F2.usage",[37,41,45,49,53],{"title":38,"path":39,"stem":40},"Transforms","\u002Fdocs\u002Fassets\u002Fusage\u002Ftransforms","docs\u002Fassets\u002F2.usage\u002F1.transforms",{"title":42,"path":43,"stem":44},"Caching","\u002Fdocs\u002Fassets\u002Fusage\u002Fcaching","docs\u002Fassets\u002F2.usage\u002F2.caching",{"title":46,"path":47,"stem":48},"Recipes","\u002Fdocs\u002Fassets\u002Fusage\u002Frecipes","docs\u002Fassets\u002F2.usage\u002F3.recipes",{"title":50,"path":51,"stem":52},"Best Practices","\u002Fdocs\u002Fassets\u002Fusage\u002Fbest-practices","docs\u002Fassets\u002F2.usage\u002F4.best-practices",{"title":54,"path":55,"stem":56},"Reference","\u002Fdocs\u002Fassets\u002Fusage\u002Freference","docs\u002Fassets\u002F2.usage\u002F5.reference",{"title":58,"path":59,"stem":60,"children":61,"page":31},"Integration","\u002Fdocs\u002Fassets\u002Fintegration","docs\u002Fassets\u002F3.integration",[62,66,70],{"title":63,"path":64,"stem":65},"Nuxt","\u002Fdocs\u002Fassets\u002Fintegration\u002Fnuxt","docs\u002Fassets\u002F3.integration\u002F1.nuxt",{"title":67,"path":68,"stem":69},"Next.js","\u002Fdocs\u002Fassets\u002Fintegration\u002Fnextjs","docs\u002Fassets\u002F3.integration\u002F2.nextjs",{"title":71,"path":72,"stem":73},"Plain HTML","\u002Fdocs\u002Fassets\u002Fintegration\u002Fhtml","docs\u002Fassets\u002F3.integration\u002F3.html",{"title":75,"path":76,"stem":77,"children":78},"Avvyr CMS","\u002Fdocs\u002Fcms","docs\u002Fcms\u002Findex",[79,80,92,105,118,131],{"title":75,"path":76,"stem":77},{"title":11,"path":81,"stem":82,"children":83,"page":31},"\u002Fdocs\u002Fcms\u002Fgetting-started","docs\u002Fcms\u002F1.getting-started",[84,88],{"title":85,"path":86,"stem":87},"Quickstart","\u002Fdocs\u002Fcms\u002Fgetting-started\u002Fquickstart","docs\u002Fcms\u002F1.getting-started\u002F1.quickstart",{"title":89,"path":90,"stem":91},"Keys and access","\u002Fdocs\u002Fcms\u002Fgetting-started\u002Fkeys-and-access","docs\u002Fcms\u002F1.getting-started\u002F2.keys-and-access",{"title":93,"path":94,"stem":95,"children":96,"page":31},"Content Model","\u002Fdocs\u002Fcms\u002Fcontent-model","docs\u002Fcms\u002F2.content-model",[97,101],{"title":98,"path":99,"stem":100},"Types and fields","\u002Fdocs\u002Fcms\u002Fcontent-model\u002Ftypes-and-fields","docs\u002Fcms\u002F2.content-model\u002F1.types-and-fields",{"title":102,"path":103,"stem":104},"Entries and publishing","\u002Fdocs\u002Fcms\u002Fcontent-model\u002Fentries-and-publishing","docs\u002Fcms\u002F2.content-model\u002F2.entries-and-publishing",{"title":106,"path":107,"stem":108,"children":109,"page":31},"Delivery","\u002Fdocs\u002Fcms\u002Fdelivery","docs\u002Fcms\u002F3.delivery",[110,114],{"title":111,"path":112,"stem":113},"Delivery API","\u002Fdocs\u002Fcms\u002Fdelivery\u002Fdelivery-api","docs\u002Fcms\u002F3.delivery\u002F1.delivery-api",{"title":115,"path":116,"stem":117},"Preview and live editing","\u002Fdocs\u002Fcms\u002Fdelivery\u002Fpreview","docs\u002Fcms\u002F3.delivery\u002F2.preview",{"title":119,"path":120,"stem":121,"children":122,"page":31},"Frameworks","\u002Fdocs\u002Fcms\u002Fframeworks","docs\u002Fcms\u002F4.frameworks",[123,127],{"title":124,"path":125,"stem":126},"JavaScript client","\u002Fdocs\u002Fcms\u002Fframeworks\u002Fjavascript-client","docs\u002Fcms\u002F4.frameworks\u002F1.javascript-client",{"title":128,"path":129,"stem":130},"Nuxt layer","\u002Fdocs\u002Fcms\u002Fframeworks\u002Fnuxt","docs\u002Fcms\u002F4.frameworks\u002F2.nuxt",{"title":132,"path":133,"stem":134},"Management API","\u002Fdocs\u002Fcms\u002Fmanagement-api","docs\u002Fcms\u002F5.management-api",{"title":136,"path":137,"stem":138},"Early Access","\u002Fdocs\u002Fearly-access","docs\u002Fearly-access",{"title":140,"path":141,"stem":142,"children":143},"Events API","\u002Fdocs\u002Fevents","docs\u002Fevents\u002Findex",[144,145],{"title":140,"path":141,"stem":142},{"title":11,"path":146,"stem":147,"children":148,"page":31},"\u002Fdocs\u002Fevents\u002Fgetting-started","docs\u002Fevents\u002F1.getting-started",[149,153,157],{"title":150,"path":151,"stem":152},"Subscribing","\u002Fdocs\u002Fevents\u002Fgetting-started\u002Fsubscribing","docs\u002Fevents\u002F1.getting-started\u002F1.subscribing",{"title":154,"path":155,"stem":156},"Event Delivery","\u002Fdocs\u002Fevents\u002Fgetting-started\u002Fevent-delivery","docs\u002Fevents\u002F1.getting-started\u002F2.event-delivery",{"title":158,"path":159,"stem":160},"Event Reference","\u002Fdocs\u002Fevents\u002Fgetting-started\u002Fevent-reference","docs\u002Fevents\u002F1.getting-started\u002F3.event-reference",{"title":162,"path":163,"stem":164,"children":165},"Integrations API","\u002Fdocs\u002Fintegrations","docs\u002Fintegrations\u002Findex",[166,167],{"title":162,"path":163,"stem":164},{"title":11,"path":168,"stem":169,"children":170,"page":31},"\u002Fdocs\u002Fintegrations\u002Fgetting-started","docs\u002Fintegrations\u002F1.getting-started",[171,175,179,183,187,191],{"title":172,"path":173,"stem":174},"Why Use It?","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fwhy-integrations-api","docs\u002Fintegrations\u002F1.getting-started\u002F1.why-integrations-api",{"title":176,"path":177,"stem":178},"Use Cases","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fwho-is-it-for","docs\u002Fintegrations\u002F1.getting-started\u002F2.who-is-it-for",{"title":180,"path":181,"stem":182},"Pre-built Connectors","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fpre-built-integrations","docs\u002Fintegrations\u002F1.getting-started\u002F3.pre-built-integrations",{"title":184,"path":185,"stem":186},"Custom Inbound","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fcustom-inbound-api","docs\u002Fintegrations\u002F1.getting-started\u002F4.custom-inbound-api",{"title":188,"path":189,"stem":190},"Event Lifecycle","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fevent-lifecycle","docs\u002Fintegrations\u002F1.getting-started\u002F5.event-lifecycle",{"title":192,"path":193,"stem":194},"API Endpoints","\u002Fdocs\u002Fintegrations\u002Fgetting-started\u002Fmanagement-api-endpoints","docs\u002Fintegrations\u002F1.getting-started\u002F6.management-api-endpoints",{"title":196,"path":197,"stem":198,"children":199},"MCP Server","\u002Fdocs\u002Fmcp","docs\u002Fmcp\u002Findex",[200,201,225,234,244],{"title":196,"path":197,"stem":198},{"title":11,"path":202,"stem":203,"children":204,"page":31},"\u002Fdocs\u002Fmcp\u002Fgetting-started","docs\u002Fmcp\u002F1.getting-started",[205,209,213,217,221],{"title":206,"path":207,"stem":208},"Claude","\u002Fdocs\u002Fmcp\u002Fgetting-started\u002Fclaude","docs\u002Fmcp\u002F1.getting-started\u002F1.claude",{"title":210,"path":211,"stem":212},"Claude Code","\u002Fdocs\u002Fmcp\u002Fgetting-started\u002Fclaude-code","docs\u002Fmcp\u002F1.getting-started\u002F2.claude-code",{"title":214,"path":215,"stem":216},"VS Code","\u002Fdocs\u002Fmcp\u002Fgetting-started\u002Fvscode","docs\u002Fmcp\u002F1.getting-started\u002F3.vscode",{"title":218,"path":219,"stem":220},"Cursor","\u002Fdocs\u002Fmcp\u002Fgetting-started\u002Fcursor","docs\u002Fmcp\u002F1.getting-started\u002F4.cursor",{"title":222,"path":223,"stem":224},"Verify the connection","\u002Fdocs\u002Fmcp\u002Fgetting-started\u002Fverify","docs\u002Fmcp\u002F1.getting-started\u002F5.verify",{"title":226,"path":227,"stem":228,"children":229,"page":31},"Docs Server","\u002Fdocs\u002Fmcp\u002Fdocs-server","docs\u002Fmcp\u002F2.docs-server",[230],{"title":231,"path":232,"stem":233},"Docs server tools","\u002Fdocs\u002Fmcp\u002Fdocs-server\u002Ftools","docs\u002Fmcp\u002F2.docs-server\u002F1.tools",{"title":235,"path":236,"stem":237,"children":238},"API Server","\u002Fdocs\u002Fmcp\u002Fapi-server","docs\u002Fmcp\u002F3.api-server\u002Findex",[239,240],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"Available tools","\u002Fdocs\u002Fmcp\u002Fapi-server\u002Ftools","docs\u002Fmcp\u002F3.api-server\u002F1.tools",{"title":245,"path":246,"stem":247,"children":248,"page":31},"Examples","\u002Fdocs\u002Fmcp\u002Fexamples","docs\u002Fmcp\u002F4.examples",[249,253,257,261,265,269],{"title":250,"path":251,"stem":252},"Exploring an API","\u002Fdocs\u002Fmcp\u002Fexamples\u002Fexploring-an-api","docs\u002Fmcp\u002F4.examples\u002F1.exploring-an-api",{"title":254,"path":255,"stem":256},"Building a Feature","\u002Fdocs\u002Fmcp\u002Fexamples\u002Fbuilding-a-feature","docs\u002Fmcp\u002F4.examples\u002F2.building-a-feature",{"title":258,"path":259,"stem":260},"Understanding Models","\u002Fdocs\u002Fmcp\u002Fexamples\u002Funderstanding-models","docs\u002Fmcp\u002F4.examples\u002F3.understanding-models",{"title":262,"path":263,"stem":264},"Code Review","\u002Fdocs\u002Fmcp\u002Fexamples\u002Fcode-review","docs\u002Fmcp\u002F4.examples\u002F4.code-review",{"title":266,"path":267,"stem":268},"Combining MCP Servers","\u002Fdocs\u002Fmcp\u002Fexamples\u002Fmulti-mcp","docs\u002Fmcp\u002F4.examples\u002F5.multi-mcp",{"title":270,"path":271,"stem":272},"Tips","\u002Fdocs\u002Fmcp\u002Fexamples\u002Ftips","docs\u002Fmcp\u002F4.examples\u002F6.tips",{"title":274,"path":275,"stem":276,"children":277,"page":31},"Storefront SDK","\u002Fdocs\u002Fstorefront-sdk","docs\u002Fstorefront-sdk",[278,290,323,338],{"title":11,"path":279,"stem":280,"children":281,"page":31},"\u002Fdocs\u002Fstorefront-sdk\u002Fgetting-started","docs\u002Fstorefront-sdk\u002F1.getting-started",[282,286],{"title":283,"path":284,"stem":285},"Installation","\u002Fdocs\u002Fstorefront-sdk\u002Fgetting-started\u002Finstallation","docs\u002Fstorefront-sdk\u002F1.getting-started\u002F1.installation",{"title":287,"path":288,"stem":289},"Configuration","\u002Fdocs\u002Fstorefront-sdk\u002Fgetting-started\u002Fconfiguration","docs\u002Fstorefront-sdk\u002F1.getting-started\u002F2.configuration",{"title":291,"path":292,"stem":293,"children":294,"page":31},"Resources","\u002Fdocs\u002Fstorefront-sdk\u002Fresources","docs\u002Fstorefront-sdk\u002F2.resources",[295,299,303,307,311,315,319],{"title":296,"path":297,"stem":298},"Products","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fproducts","docs\u002Fstorefront-sdk\u002F2.resources\u002F1.products",{"title":300,"path":301,"stem":302},"Cart","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fcart","docs\u002Fstorefront-sdk\u002F2.resources\u002F2.cart",{"title":304,"path":305,"stem":306},"Auth","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fauth","docs\u002Fstorefront-sdk\u002F2.resources\u002F3.auth",{"title":308,"path":309,"stem":310},"Checkout & Shipping","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fcheckout-shipping","docs\u002Fstorefront-sdk\u002F2.resources\u002F4.checkout-shipping",{"title":312,"path":313,"stem":314},"Orders, Returns & Reviews","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Forders-returns-reviews","docs\u002Fstorefront-sdk\u002F2.resources\u002F5.orders-returns-reviews",{"title":316,"path":317,"stem":318},"Customer assistant","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fassistant","docs\u002Fstorefront-sdk\u002F2.resources\u002F6.assistant",{"title":320,"path":321,"stem":322},"Products in images","\u002Fdocs\u002Fstorefront-sdk\u002Fresources\u002Fproducts-in-images","docs\u002Fstorefront-sdk\u002F2.resources\u002F7.products-in-images",{"title":128,"path":324,"stem":325,"children":326,"page":31},"\u002Fdocs\u002Fstorefront-sdk\u002Fnuxt-layer","docs\u002Fstorefront-sdk\u002F3.nuxt-layer",[327,331,335],{"title":328,"path":329,"stem":330},"Overview","\u002Fdocs\u002Fstorefront-sdk\u002Fnuxt-layer\u002Foverview","docs\u002Fstorefront-sdk\u002F3.nuxt-layer\u002F1.overview",{"title":332,"path":333,"stem":334},"Composables","\u002Fdocs\u002Fstorefront-sdk\u002Fnuxt-layer\u002Fcomposables","docs\u002Fstorefront-sdk\u002F3.nuxt-layer\u002F2.composables",{"title":316,"path":336,"stem":337},"\u002Fdocs\u002Fstorefront-sdk\u002Fnuxt-layer\u002Fassistant","docs\u002Fstorefront-sdk\u002F3.nuxt-layer\u002F3.assistant",{"title":67,"path":339,"stem":340,"children":341,"page":31},"\u002Fdocs\u002Fstorefront-sdk\u002Fnextjs","docs\u002Fstorefront-sdk\u002F4.nextjs",[342,345,349,353],{"title":328,"path":343,"stem":344},"\u002Fdocs\u002Fstorefront-sdk\u002Fnextjs\u002Foverview","docs\u002Fstorefront-sdk\u002F4.nextjs\u002F1.overview",{"title":346,"path":347,"stem":348},"Hooks","\u002Fdocs\u002Fstorefront-sdk\u002Fnextjs\u002Fhooks","docs\u002Fstorefront-sdk\u002F4.nextjs\u002F2.hooks",{"title":350,"path":351,"stem":352},"Server helpers and proxy","\u002Fdocs\u002Fstorefront-sdk\u002Fnextjs\u002Fserver","docs\u002Fstorefront-sdk\u002F4.nextjs\u002F3.server",{"title":354,"path":355,"stem":356},"Components","\u002Fdocs\u002Fstorefront-sdk\u002Fnextjs\u002Fcomponents","docs\u002Fstorefront-sdk\u002F4.nextjs\u002F4.components",{"id":358,"title":316,"body":359,"description":2008,"extension":2009,"links":2010,"meta":2011,"navigation":976,"path":336,"seo":2018,"stem":337,"__hash__":2019},"docs\u002Fdocs\u002Fstorefront-sdk\u002F3.nuxt-layer\u002F3.assistant.md",{"type":360,"value":361,"toc":1994},"minimark",[362,366,452,457,482,489,493,556,560,768,772,841,844,847,850,1090,1093,1178,1181,1185,1198,1201,1208,1266,1277,1280,1287,1290,1293,1308,1320,1361,1364,1374,1463,1506,1510,1513,1649,1702,1708,1711,1987,1990],[363,364,365],"p",{},"The layer ships the shop's chat as a ready component. Add it once to your layout:",[367,368,373],"pre",{"className":369,"code":370,"language":371,"meta":372,"style":372},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- app\u002Flayouts\u002Fdefault.vue -->\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cslot \u002F>\n    \u003CAvvyrAssistant \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue","",[374,375,376,385,399,410,422,432,442],"code",{"__ignoreMap":372},[377,378,381],"span",{"class":379,"line":380},"line",1,[377,382,384],{"class":383},"sHwdD","\u003C!-- app\u002Flayouts\u002Fdefault.vue -->\n",[377,386,388,392,396],{"class":379,"line":387},2,[377,389,391],{"class":390},"sMK4o","\u003C",[377,393,395],{"class":394},"swJcz","template",[377,397,398],{"class":390},">\n",[377,400,402,405,408],{"class":379,"line":401},3,[377,403,404],{"class":390},"  \u003C",[377,406,407],{"class":394},"div",[377,409,398],{"class":390},[377,411,413,416,419],{"class":379,"line":412},4,[377,414,415],{"class":390},"    \u003C",[377,417,418],{"class":394},"slot",[377,420,421],{"class":390}," \u002F>\n",[377,423,425,427,430],{"class":379,"line":424},5,[377,426,415],{"class":390},[377,428,429],{"class":394},"AvvyrAssistant",[377,431,421],{"class":390},[377,433,435,438,440],{"class":379,"line":434},6,[377,436,437],{"class":390},"  \u003C\u002F",[377,439,407],{"class":394},[377,441,398],{"class":390},[377,443,445,448,450],{"class":379,"line":444},7,[377,446,447],{"class":390},"\u003C\u002F",[377,449,395],{"class":394},[377,451,398],{"class":390},[453,454,456],"h2",{"id":455},"enabling-it","Enabling it",[458,459,460,468,475],"ol",{},[461,462,463,464,467],"li",{},"Give the storefront key the ",[374,465,466],{},"storefront:assistant"," scope.",[461,469,470,471,474],{},"Turn the assistant on for the shop (Management API ",[374,472,473],{},"PUT \u002Fv1\u002Fcustomer-assistant\u002Fsettings",", or in the app).",[461,476,477,478,481],{},"Place ",[374,479,480],{},"\u003CAvvyrAssistant \u002F>"," in the layout.",[363,483,484,485,488],{},"The component asks ",[374,486,487],{},"GET \u002Fassistant\u002Fconfig"," on the client and renders nothing until the shop has the assistant enabled. A key without the scope also renders nothing, so it is safe to ship before the shop turns it on.",[453,490,492],{"id":491},"what-it-does","What it does",[494,495,496,499,502,505,514,517,520,527,534,537,540,543,550,553],"ul",{},[461,497,498],{},"A floating button in the bottom corner (respects the safe area on phones). The panel is a 380 x 600 card on larger screens and full screen below 640 px.",[461,500,501],{},"The shop's greeting as the first message. Answers glide in as they stream, rendered as safe markdown (paragraphs, lists, bold, links; no images, no raw HTML). Links to your own site navigate inside the app.",[461,503,504],{},"A short status line while the assistant looks something up (\"Fetching your order\").",[461,506,507,508,513],{},"Cards the server builds from the shop's own data, so prices and tracking numbers are never made up (see ",[509,510,512],"a",{"href":511},"#cards","Cards",").",[461,515,516],{},"Return cards the shopper approves or declines, with the claim terms and a required checkbox when the shop has terms.",[461,518,519],{},"Suggested questions as chips in an empty chat; tapping one sends it.",[461,521,522,523,513],{},"Photos: when the shop allows them, a photo button in the composer (see ",[509,524,526],{"href":525},"#photos","Photos",[461,528,529,530,513],{},"Sign-in only: when the shop lets only signed-in customers chat, a short \"Sign in to chat\" prompt replaces the composer (see ",[509,531,533],{"href":532},"#signed-in-customers-only","Signed-in customers only",[461,535,536],{},"\"Talk to a human\" (when the shop allows handover) opens a short form: name, e-mail and an optional message. While a person answers, new messages are fetched every 4 seconds while the panel is open.",[461,538,539],{},"A stop button while an answer streams; Enter sends, Shift+Enter adds a line, 1000 characters at most.",[461,541,542],{},"The AI disclosure under the composer: \"You are chatting with an AI assistant. Answers may contain mistakes.\"",[461,544,545,546,549],{},"A reload continues the conversation: its id and secret are kept in ",[374,547,548],{},"sessionStorage"," for the tab.",[461,551,552],{},"Signed-in customers are recognised automatically: the layer's client already carries their token, and the handover form is prefilled.",[461,554,555],{},"Focus stays in the panel while it is open, Escape closes it, and finished answers are announced to screen readers.",[453,557,559],{"id":558},"props","Props",[561,562,563,581],"table",{},[564,565,566],"thead",{},[567,568,569,573,576,579],"tr",{},[570,571,572],"th",{},"Prop",[570,574,575],{},"Type",[570,577,578],{},"Default",[570,580],{},[582,583,584,607,628,654,674,694,724,746],"tbody",{},[567,585,586,592,597,600],{},[587,588,589],"td",{},[374,590,591],{},"locale",[587,593,594],{},[374,595,596],{},"string",[587,598,599],{},"the market's",[587,601,602,603,606],{},"Language of the texts and of the conversation. ",[374,604,605],{},"sv*"," gives Swedish, anything else English.",[567,608,609,614,619,621],{},[587,610,611],{},[374,612,613],{},"texts",[587,615,616],{},[374,617,618],{},"Record\u003Cstring, string>",[587,620],{},[587,622,623,624,627],{},"Override any text. Wins over ",[374,625,626],{},"app.config",".",[567,629,630,635,640,645],{},[587,631,632],{},[374,633,634],{},"launcher",[587,636,637],{},[374,638,639],{},"boolean",[587,641,642],{},[374,643,644],{},"true",[587,646,647,650,651,627],{},[374,648,649],{},"false"," hides the floating button; open the chat yourself with ",[374,652,653],{},"useAssistant().open()",[567,655,656,661,666,671],{},[587,657,658],{},[374,659,660],{},"position",[587,662,663],{},[374,664,665],{},"'bottom-right' | 'bottom-left'",[587,667,668],{},[374,669,670],{},"'bottom-right'",[587,672,673],{},"Corner on larger screens.",[567,675,676,681,685,687],{},[587,677,678],{},[374,679,680],{},"productSku",[587,682,683],{},[374,684,596],{},[587,686],{},[587,688,689,690,627],{},"The product the shopper is looking at. See ",[509,691,693],{"href":692},"#page-context","Page context",[567,695,696,701,705,707],{},[587,697,698],{},[374,699,700],{},"pageType",[587,702,703],{},[374,704,596],{},[587,706],{},[587,708,709,710,713,714,713,717,713,720,723],{},"Lowercase with dashes: ",[374,711,712],{},"product",", ",[374,715,716],{},"category",[374,718,719],{},"cart",[374,721,722],{},"checkout","...",[567,725,726,731,736,739],{},[587,727,728],{},[374,729,730],{},"suggestions",[587,732,733],{},[374,734,735],{},"string[]",[587,737,738],{},"the shop's",[587,740,741,742,745],{},"Questions for this page, shown as chips in an empty chat. Wins over the shop's ",[374,743,744],{},"suggestedQuestions",". At most 6 are shown.",[567,747,748,753,757,765],{},[587,749,750],{},[374,751,752],{},"loginUrl",[587,754,755],{},[374,756,596],{},[587,758,759,761,762],{},[374,760,626],{}," ",[374,763,764],{},"storefront.assistant.loginUrl",[587,766,767],{},"Where \"Sign in\" goes when only signed-in customers may chat.",[453,769,771],{"id":770},"events","Events",[561,773,774,784],{},[564,775,776],{},[567,777,778,781],{},[570,779,780],{},"Event",[570,782,783],{},"Payload",[582,785,786,799,809,819,831],{},[567,787,788,797],{},[587,789,790,793,794],{},[374,791,792],{},"open"," \u002F ",[374,795,796],{},"close",[587,798],{},[567,800,801,806],{},[587,802,803],{},[374,804,805],{},"send",[587,807,808],{},"the message text",[567,810,811,816],{},[587,812,813],{},[374,814,815],{},"handover",[587,817,818],{},"the handover form was sent",[567,820,821,826],{},[587,822,823],{},[374,824,825],{},"proposal",[587,827,828],{},[374,829,830],{},"{ proposal, decision: 'confirm' | 'reject' }",[567,832,833,838],{},[587,834,835],{},[374,836,837],{},"sign-in",[587,839,840],{},"the shopper pressed \"Sign in\"",[453,842,693],{"id":843},"page-context",[363,845,846],{},"The assistant answers better when it knows where the shopper is: on a product page, \"what are the measurements of this one?\" just works. The context goes along when the conversation starts and with every message, so it follows the shopper from page to page.",[363,848,849],{},"The chat usually sits in the layout, which does not know the product. Set the context from the product page instead:",[367,851,853],{"className":369,"code":852,"language":371,"meta":372,"style":372},"\u003C!-- app\u002Fpages\u002Fproducts\u002F[handle].vue -->\n\u003Cscript setup lang=\"ts\">\nconst route = useRoute()\nconst { data: product } = await useProductByHandle(computed(() => route.params.handle as string))\n\nconst assistant = useAssistant()\nwatchEffect(() => assistant.setContext({ productSku: product.value?.sku, pageType: 'product' }))\nonBeforeUnmount(() => assistant.setContext(null))\n\u003C\u002Fscript>\n",[374,854,855,860,888,906,972,978,992,1056,1081],{"__ignoreMap":372},[377,856,857],{"class":379,"line":380},[377,858,859],{"class":383},"\u003C!-- app\u002Fpages\u002Fproducts\u002F[handle].vue -->\n",[377,861,862,864,867,871,874,877,880,884,886],{"class":379,"line":387},[377,863,391],{"class":390},[377,865,866],{"class":394},"script",[377,868,870],{"class":869},"spNyl"," setup",[377,872,873],{"class":869}," lang",[377,875,876],{"class":390},"=",[377,878,879],{"class":390},"\"",[377,881,883],{"class":882},"sfazB","ts",[377,885,879],{"class":390},[377,887,398],{"class":390},[377,889,890,893,897,899,903],{"class":379,"line":401},[377,891,892],{"class":869},"const",[377,894,896],{"class":895},"sTEyZ"," route ",[377,898,876],{"class":390},[377,900,902],{"class":901},"s2Zo4"," useRoute",[377,904,905],{"class":895},"()\n",[377,907,908,910,913,916,919,922,925,928,932,935,938,941,943,946,949,952,954,957,959,962,965,969],{"class":379,"line":412},[377,909,892],{"class":869},[377,911,912],{"class":390}," {",[377,914,915],{"class":394}," data",[377,917,918],{"class":390},":",[377,920,921],{"class":895}," product ",[377,923,924],{"class":390},"}",[377,926,927],{"class":390}," =",[377,929,931],{"class":930},"s7zQu"," await",[377,933,934],{"class":901}," useProductByHandle",[377,936,937],{"class":895},"(",[377,939,940],{"class":901},"computed",[377,942,937],{"class":895},[377,944,945],{"class":390},"()",[377,947,948],{"class":869}," =>",[377,950,951],{"class":895}," route",[377,953,627],{"class":390},[377,955,956],{"class":895},"params",[377,958,627],{"class":390},[377,960,961],{"class":895},"handle ",[377,963,964],{"class":930},"as",[377,966,968],{"class":967},"sBMFI"," string",[377,970,971],{"class":895},"))\n",[377,973,974],{"class":379,"line":424},[377,975,977],{"emptyLinePlaceholder":976},true,"\n",[377,979,980,982,985,987,990],{"class":379,"line":434},[377,981,892],{"class":869},[377,983,984],{"class":895}," assistant ",[377,986,876],{"class":390},[377,988,989],{"class":901}," useAssistant",[377,991,905],{"class":895},[377,993,994,997,999,1001,1003,1006,1008,1011,1013,1016,1019,1021,1024,1026,1029,1032,1035,1038,1041,1043,1046,1048,1051,1054],{"class":379,"line":444},[377,995,996],{"class":901},"watchEffect",[377,998,937],{"class":895},[377,1000,945],{"class":390},[377,1002,948],{"class":869},[377,1004,1005],{"class":895}," assistant",[377,1007,627],{"class":390},[377,1009,1010],{"class":901},"setContext",[377,1012,937],{"class":895},[377,1014,1015],{"class":390},"{",[377,1017,1018],{"class":394}," productSku",[377,1020,918],{"class":390},[377,1022,1023],{"class":895}," product",[377,1025,627],{"class":390},[377,1027,1028],{"class":895},"value",[377,1030,1031],{"class":390},"?.",[377,1033,1034],{"class":895},"sku",[377,1036,1037],{"class":390},",",[377,1039,1040],{"class":394}," pageType",[377,1042,918],{"class":390},[377,1044,1045],{"class":390}," '",[377,1047,712],{"class":882},[377,1049,1050],{"class":390},"'",[377,1052,1053],{"class":390}," }",[377,1055,971],{"class":895},[377,1057,1059,1062,1064,1066,1068,1070,1072,1074,1076,1079],{"class":379,"line":1058},8,[377,1060,1061],{"class":901},"onBeforeUnmount",[377,1063,937],{"class":895},[377,1065,945],{"class":390},[377,1067,948],{"class":869},[377,1069,1005],{"class":895},[377,1071,627],{"class":390},[377,1073,1010],{"class":901},[377,1075,937],{"class":895},[377,1077,1078],{"class":390},"null",[377,1080,971],{"class":895},[377,1082,1084,1086,1088],{"class":379,"line":1083},9,[377,1085,447],{"class":390},[377,1087,866],{"class":394},[377,1089,398],{"class":390},[363,1091,1092],{},"A page that renders the component itself can pass the props instead, together with questions for that page:",[367,1094,1096],{"className":369,"code":1095,"language":371,"meta":372,"style":372},"\u003CAvvyrAssistant\n  :product-sku=\"product.sku\"\n  page-type=\"product\"\n  :suggestions=\"['What are the measurements?', 'When can it be delivered?']\"\n\u002F>\n",[374,1097,1098,1105,1126,1139,1173],{"__ignoreMap":372},[377,1099,1100,1102],{"class":379,"line":380},[377,1101,391],{"class":390},[377,1103,1104],{"class":394},"AvvyrAssistant\n",[377,1106,1107,1110,1113,1115,1117,1119,1121,1123],{"class":379,"line":387},[377,1108,1109],{"class":390},"  :",[377,1111,1112],{"class":869},"product-sku",[377,1114,876],{"class":390},[377,1116,879],{"class":390},[377,1118,712],{"class":895},[377,1120,627],{"class":390},[377,1122,1034],{"class":895},[377,1124,1125],{"class":390},"\"\n",[377,1127,1128,1131,1133,1135,1137],{"class":379,"line":401},[377,1129,1130],{"class":869},"  page-type",[377,1132,876],{"class":390},[377,1134,879],{"class":390},[377,1136,712],{"class":882},[377,1138,1125],{"class":390},[377,1140,1141,1143,1145,1147,1149,1152,1154,1157,1159,1161,1163,1166,1168,1171],{"class":379,"line":412},[377,1142,1109],{"class":390},[377,1144,730],{"class":869},[377,1146,876],{"class":390},[377,1148,879],{"class":390},[377,1150,1151],{"class":895},"[",[377,1153,1050],{"class":390},[377,1155,1156],{"class":882},"What are the measurements?",[377,1158,1050],{"class":390},[377,1160,1037],{"class":390},[377,1162,1045],{"class":390},[377,1164,1165],{"class":882},"When can it be delivered?",[377,1167,1050],{"class":390},[377,1169,1170],{"class":895},"]",[377,1172,1125],{"class":390},[377,1174,1175],{"class":379,"line":424},[377,1176,1177],{"class":895},"\u002F>\n",[363,1179,1180],{},"Props that are not set leave the context alone, so a layout without them never clears what a page set.",[453,1182,1184],{"id":1183},"suggested-questions","Suggested questions",[363,1186,1187,1188,1191,1192,1194,1195,1197],{},"The shop's questions come from ",[374,1189,1190],{},"GET \u002Fassistant\u002Fconfig?locale="," in the chat's language (set in the app, or ",[374,1193,744],{}," in the Management API). The ",[374,1196,730],{}," prop replaces them, for example per page. They show only before the first message.",[453,1199,512],{"id":1200},"cards",[363,1202,1203,1204,1207],{},"The assistant shows products, orders and deliveries as cards instead of writing them out. They arrive with the streamed answer (the ",[374,1205,1206],{},"card"," event) and with messages read back after a reload.",[561,1209,1210,1220],{},[564,1211,1212],{},[567,1213,1214,1217],{},[570,1215,1216],{},"Card",[570,1218,1219],{},"Shows",[582,1221,1222,1236,1246,1256],{},[567,1223,1224,1229],{},[587,1225,1226],{},[374,1227,1228],{},"products",[587,1230,1231,1232,1235],{},"A horizontal row of small cards: image, name, price in the market's currency (",[374,1233,1234],{},"Intl.NumberFormat"," in the chat's language), struck list price when discounted, rating. \"Sign in to see the price\" when the shop hides prices from anonymous visitors. The card links to the product when the shop has a product URL template: same-site links navigate in the app, others open in a new tab.",[567,1237,1238,1243],{},[587,1239,1240],{},[374,1241,1242],{},"order",[587,1244,1245],{},"Order number, date, status, the lines with thumbnails and quantity, total.",[567,1247,1248,1253],{},[587,1249,1250],{},[374,1251,1252],{},"tracking",[587,1254,1255],{},"Per parcel: carrier, tracking number (monospace, easy to copy), shipped date and a \"Track parcel\" link; expected delivery dates.",[567,1257,1258,1263],{},[587,1259,1260],{},[374,1261,1262],{},"return",[587,1264,1265],{},"The return or claim number and its lines, after the shopper approved a return card.",[363,1267,1268,1269,1272,1273,1276],{},"Cards use the same CSS variables as the rest of the chat; ",[374,1270,1271],{},"--avvyr-assistant-card-bg"," sets their background and ",[374,1274,1275],{},"--avvyr-assistant-sale"," the colour of a discounted price.",[453,1278,526],{"id":1279},"photos",[363,1281,1282,1283,1286],{},"When the shop allows photos (",[374,1284,1285],{},"config.attachments.enabled",", set in the app), the composer gets a photo button. The shopper can pick up to 3 images per message (jpeg, png or webp, 5 MB each) or paste one; anything else gets a short message in the chat. The photos show as thumbnails above the text field with a remove button, upload when the message is sent, and a message may be photos only. In the conversation they show as thumbnails on the shopper's bubble; a tap opens the full size.",[363,1288,1289],{},"The server re-encodes the photos without metadata. If the shopper then approves a claim, the conversation's photos move to the return when the shop's return settings take attachments.",[453,1291,533],{"id":1292},"signed-in-customers-only",[363,1294,1295,1296,1299,1300,1303,1304,1307],{},"With ",[374,1297,1298],{},"access: \"signedIn\""," in the shop's settings, the chat shows \"Sign in to chat\" instead of the composer to anonymous visitors. The same happens if the API answers 401 ",[374,1301,1302],{},"SIGN_IN_REQUIRED",". Once the customer is signed in (the layer's ",[374,1305,1306],{},"useAuth()","), the composer comes back.",[363,1309,1310,1311,1313,1314,1316,1317,1319],{},"Point the button at your login page with ",[374,1312,752],{}," (prop or ",[374,1315,626],{},"), listen for ",[374,1318,837],{},", or replace the whole prompt with the slot:",[367,1321,1323],{"className":369,"code":1322,"language":371,"meta":372,"style":372},"\u003CAvvyrAssistant>\n  \u003Ctemplate #sign-in=\"{ close }\">\n    \u003Cp>Sign in to chat with us.\u003C\u002Fp>\n    \u003CNuxtLink to=\"\u002Faccount\u002Flogin\" @click=\"close()\">Sign in\u003C\u002FNuxtLink>\n  \u003C\u002Ftemplate>\n\u003C\u002FAvvyrAssistant>\n",[374,1324,1325,1333,1338,1343,1348,1353],{"__ignoreMap":372},[377,1326,1327,1329,1331],{"class":379,"line":380},[377,1328,391],{"class":390},[377,1330,429],{"class":394},[377,1332,398],{"class":390},[377,1334,1335],{"class":379,"line":387},[377,1336,1337],{"class":895},"  \u003Ctemplate #sign-in=\"{ close }\">\n",[377,1339,1340],{"class":379,"line":401},[377,1341,1342],{"class":895},"    \u003Cp>Sign in to chat with us.\u003C\u002Fp>\n",[377,1344,1345],{"class":379,"line":412},[377,1346,1347],{"class":895},"    \u003CNuxtLink to=\"\u002Faccount\u002Flogin\" @click=\"close()\">Sign in\u003C\u002FNuxtLink>\n",[377,1349,1350],{"class":379,"line":424},[377,1351,1352],{"class":895},"  \u003C\u002Ftemplate>\n",[377,1354,1355,1357,1359],{"class":379,"line":434},[377,1356,447],{"class":390},[377,1358,429],{"class":394},[377,1360,398],{"class":390},[453,1362,1363],{"id":613},"Texts",[363,1365,1366,1367,1370,1371,1373],{},"Built in for Swedish and English. Override per site in ",[374,1368,1369],{},"app.config.ts",", or per language with the ",[374,1372,613],{}," prop:",[367,1375,1378],{"className":1376,"code":1377,"language":883,"meta":372,"style":372},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineAppConfig({\n  storefront: {\n    assistant: {\n      texts: {\n        disclosure: 'Du chattar med vår AI-assistent. Dubbelkolla viktiga besked med kundtjänst.',\n      },\n    },\n  },\n})\n",[374,1379,1380,1396,1406,1415,1424,1441,1446,1451,1456],{"__ignoreMap":372},[377,1381,1382,1385,1388,1391,1393],{"class":379,"line":380},[377,1383,1384],{"class":930},"export",[377,1386,1387],{"class":930}," default",[377,1389,1390],{"class":901}," defineAppConfig",[377,1392,937],{"class":895},[377,1394,1395],{"class":390},"{\n",[377,1397,1398,1401,1403],{"class":379,"line":387},[377,1399,1400],{"class":394},"  storefront",[377,1402,918],{"class":390},[377,1404,1405],{"class":390}," {\n",[377,1407,1408,1411,1413],{"class":379,"line":401},[377,1409,1410],{"class":394},"    assistant",[377,1412,918],{"class":390},[377,1414,1405],{"class":390},[377,1416,1417,1420,1422],{"class":379,"line":412},[377,1418,1419],{"class":394},"      texts",[377,1421,918],{"class":390},[377,1423,1405],{"class":390},[377,1425,1426,1429,1431,1433,1436,1438],{"class":379,"line":424},[377,1427,1428],{"class":394},"        disclosure",[377,1430,918],{"class":390},[377,1432,1045],{"class":390},[377,1434,1435],{"class":882},"Du chattar med vår AI-assistent. Dubbelkolla viktiga besked med kundtjänst.",[377,1437,1050],{"class":390},[377,1439,1440],{"class":390},",\n",[377,1442,1443],{"class":379,"line":434},[377,1444,1445],{"class":390},"      },\n",[377,1447,1448],{"class":379,"line":444},[377,1449,1450],{"class":390},"    },\n",[377,1452,1453],{"class":379,"line":1058},[377,1454,1455],{"class":390},"  },\n",[377,1457,1458,1460],{"class":379,"line":1083},[377,1459,924],{"class":390},[377,1461,1462],{"class":895},")\n",[363,1464,1465,1466,1469,1470,1473,1474,713,1476,713,1479,713,1482,713,1485,713,1488,713,1491,713,1494,713,1497,713,1500,713,1503,627],{},"The keys are those in ",[374,1467,1468],{},"ASSISTANT_TEXTS"," in ",[374,1471,1472],{},"app\u002Flib\u002Fassistant.ts",", for example ",[374,1475,792],{},[374,1477,1478],{},"human",[374,1480,1481],{},"placeholder",[374,1483,1484],{},"disclosure",[374,1486,1487],{},"waiting",[374,1489,1490],{},"activity.order",[374,1492,1493],{},"proposal.confirm",[374,1495,1496],{},"signInTitle",[374,1498,1499],{},"attach",[374,1501,1502],{},"card.track",[374,1504,1505],{},"status.shipped",[453,1507,1509],{"id":1508},"styling","Styling",[363,1511,1512],{},"The component carries its own scoped CSS and is themed with CSS variables, so it works whatever CSS pipeline the site uses:",[367,1514,1518],{"className":1515,"code":1516,"language":1517,"meta":372,"style":372},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",":root {\n  --avvyr-assistant-accent: #0f766e;      \u002F* launcher, send button, user bubbles, primary buttons *\u002F\n  --avvyr-assistant-accent-fg: #ffffff;\n  --avvyr-assistant-bg: #ffffff;\n  --avvyr-assistant-fg: #171717;\n  --avvyr-assistant-muted: #525252;\n  --avvyr-assistant-border: #e5e5e5;\n  --avvyr-assistant-radius: 16px;\n  --avvyr-assistant-font: inherit;\n}\n","css",[374,1519,1520,1529,1548,1563,1576,1590,1604,1618,1631,1643],{"__ignoreMap":372},[377,1521,1522,1524,1527],{"class":379,"line":380},[377,1523,918],{"class":390},[377,1525,1526],{"class":869},"root",[377,1528,1405],{"class":390},[377,1530,1531,1534,1536,1539,1542,1545],{"class":379,"line":387},[377,1532,1533],{"class":895},"  --avvyr-assistant-accent",[377,1535,918],{"class":390},[377,1537,1538],{"class":390}," #",[377,1540,1541],{"class":895},"0f766e",[377,1543,1544],{"class":390},";",[377,1546,1547],{"class":383},"      \u002F* launcher, send button, user bubbles, primary buttons *\u002F\n",[377,1549,1550,1553,1555,1557,1560],{"class":379,"line":401},[377,1551,1552],{"class":895},"  --avvyr-assistant-accent-fg",[377,1554,918],{"class":390},[377,1556,1538],{"class":390},[377,1558,1559],{"class":895},"ffffff",[377,1561,1562],{"class":390},";\n",[377,1564,1565,1568,1570,1572,1574],{"class":379,"line":412},[377,1566,1567],{"class":895},"  --avvyr-assistant-bg",[377,1569,918],{"class":390},[377,1571,1538],{"class":390},[377,1573,1559],{"class":895},[377,1575,1562],{"class":390},[377,1577,1578,1581,1583,1585,1588],{"class":379,"line":424},[377,1579,1580],{"class":895},"  --avvyr-assistant-fg",[377,1582,918],{"class":390},[377,1584,1538],{"class":390},[377,1586,1587],{"class":895},"171717",[377,1589,1562],{"class":390},[377,1591,1592,1595,1597,1599,1602],{"class":379,"line":434},[377,1593,1594],{"class":895},"  --avvyr-assistant-muted",[377,1596,918],{"class":390},[377,1598,1538],{"class":390},[377,1600,1601],{"class":895},"525252",[377,1603,1562],{"class":390},[377,1605,1606,1609,1611,1613,1616],{"class":379,"line":444},[377,1607,1608],{"class":895},"  --avvyr-assistant-border",[377,1610,918],{"class":390},[377,1612,1538],{"class":390},[377,1614,1615],{"class":895},"e5e5e5",[377,1617,1562],{"class":390},[377,1619,1620,1623,1625,1629],{"class":379,"line":1058},[377,1621,1622],{"class":895},"  --avvyr-assistant-radius",[377,1624,918],{"class":390},[377,1626,1628],{"class":1627},"sbssI"," 16px",[377,1630,1562],{"class":390},[377,1632,1633,1636,1638,1641],{"class":379,"line":1083},[377,1634,1635],{"class":895},"  --avvyr-assistant-font",[377,1637,918],{"class":390},[377,1639,1640],{"class":895}," inherit",[377,1642,1562],{"class":390},[377,1644,1646],{"class":379,"line":1645},10,[377,1647,1648],{"class":390},"}\n",[363,1650,1651,1652,713,1654,713,1656,713,1659,713,1662,713,1665,713,1668,713,1671,713,1674,713,1677,713,1680,713,1683,713,1686,713,1689,713,1692,713,1695,713,1698,1701],{},"Also available: ",[374,1653,1271],{},[374,1655,1275],{},[374,1657,1658],{},"--avvyr-assistant-font-size",[374,1660,1661],{},"--avvyr-assistant-user-bg",[374,1663,1664],{},"--avvyr-assistant-user-fg",[374,1666,1667],{},"--avvyr-assistant-staff-bg",[374,1669,1670],{},"--avvyr-assistant-subtle",[374,1672,1673],{},"--avvyr-assistant-link",[374,1675,1676],{},"--avvyr-assistant-error",[374,1678,1679],{},"--avvyr-assistant-shadow",[374,1681,1682],{},"--avvyr-assistant-launcher-bg",[374,1684,1685],{},"--avvyr-assistant-launcher-fg",[374,1687,1688],{},"--avvyr-assistant-launcher-size",[374,1690,1691],{},"--avvyr-assistant-offset",[374,1693,1694],{},"--avvyr-assistant-width",[374,1696,1697],{},"--avvyr-assistant-height",[374,1699,1700],{},"--avvyr-assistant-z"," (default 9998, under the cookie banner).",[453,1703,1705],{"id":1704},"useassistant",[374,1706,1707],{},"useAssistant()",[363,1709,1710],{},"The state behind the component, shared by every caller. Use it for your own button (\"Chat with us\" in the footer) or to build your own chat UI.",[367,1712,1714],{"className":1376,"code":1713,"language":883,"meta":372,"style":372},"const {\n  config,          \u002F\u002F Ref\u003CAssistantConfig | null>\n  enabled,         \u002F\u002F the shop has the chat on\n  canHandover,\n  isOpen,\n  status,          \u002F\u002F 'bot' | 'waiting' | 'human' | 'closed'\n  messages,        \u002F\u002F { key, id, role, content, author, createdAt, live?, cards?, attachments? }[]\n  proposals,\n  streaming,\n  activity,        \u002F\u002F the running tool's kind, or null\n  error,           \u002F\u002F { code, message? } | null\n  suggestedQuestions, \u002F\u002F the shop's, in the chat's language\n  signInRequired,  \u002F\u002F show a sign-in prompt instead of the composer\n  canAttach,       \u002F\u002F the shop takes photos\n  attachments,     \u002F\u002F photos waiting to be sent: { key, name, size, previewUrl }[]\n  uploading,\n  addAttachments,  \u002F\u002F (FileList | File[]) => number added; sets error ATTACHMENT_TYPE \u002F _SIZE \u002F _COUNT\n  removeAttachment, clearAttachments,\n  setContext,      \u002F\u002F ({ productSku?, pageType? } | null)\n  open, close, toggle,\n  send,            \u002F\u002F (text) => Promise\u003Cboolean>; sends the waiting photos too, and the text may then be empty\n  stop,\n  requestHandover, \u002F\u002F ({ name?, email?, message? }) => Promise\u003Cboolean>\n  confirmProposal, \u002F\u002F (id, { termsAccepted? }) => Promise\u003Cboolean>\n  rejectProposal,\n  reset,           \u002F\u002F forget the conversation and start over\n} = useAssistant()\n",[374,1715,1716,1722,1732,1742,1749,1756,1766,1776,1783,1790,1800,1811,1822,1833,1844,1855,1863,1874,1887,1898,1916,1927,1935,1946,1957,1965,1976],{"__ignoreMap":372},[377,1717,1718,1720],{"class":379,"line":380},[377,1719,892],{"class":869},[377,1721,1405],{"class":390},[377,1723,1724,1727,1729],{"class":379,"line":387},[377,1725,1726],{"class":895},"  config",[377,1728,1037],{"class":390},[377,1730,1731],{"class":383},"          \u002F\u002F Ref\u003CAssistantConfig | null>\n",[377,1733,1734,1737,1739],{"class":379,"line":401},[377,1735,1736],{"class":895},"  enabled",[377,1738,1037],{"class":390},[377,1740,1741],{"class":383},"         \u002F\u002F the shop has the chat on\n",[377,1743,1744,1747],{"class":379,"line":412},[377,1745,1746],{"class":895},"  canHandover",[377,1748,1440],{"class":390},[377,1750,1751,1754],{"class":379,"line":424},[377,1752,1753],{"class":895},"  isOpen",[377,1755,1440],{"class":390},[377,1757,1758,1761,1763],{"class":379,"line":434},[377,1759,1760],{"class":895},"  status",[377,1762,1037],{"class":390},[377,1764,1765],{"class":383},"          \u002F\u002F 'bot' | 'waiting' | 'human' | 'closed'\n",[377,1767,1768,1771,1773],{"class":379,"line":444},[377,1769,1770],{"class":895},"  messages",[377,1772,1037],{"class":390},[377,1774,1775],{"class":383},"        \u002F\u002F { key, id, role, content, author, createdAt, live?, cards?, attachments? }[]\n",[377,1777,1778,1781],{"class":379,"line":1058},[377,1779,1780],{"class":895},"  proposals",[377,1782,1440],{"class":390},[377,1784,1785,1788],{"class":379,"line":1083},[377,1786,1787],{"class":895},"  streaming",[377,1789,1440],{"class":390},[377,1791,1792,1795,1797],{"class":379,"line":1645},[377,1793,1794],{"class":895},"  activity",[377,1796,1037],{"class":390},[377,1798,1799],{"class":383},"        \u002F\u002F the running tool's kind, or null\n",[377,1801,1803,1806,1808],{"class":379,"line":1802},11,[377,1804,1805],{"class":895},"  error",[377,1807,1037],{"class":390},[377,1809,1810],{"class":383},"           \u002F\u002F { code, message? } | null\n",[377,1812,1814,1817,1819],{"class":379,"line":1813},12,[377,1815,1816],{"class":895},"  suggestedQuestions",[377,1818,1037],{"class":390},[377,1820,1821],{"class":383}," \u002F\u002F the shop's, in the chat's language\n",[377,1823,1825,1828,1830],{"class":379,"line":1824},13,[377,1826,1827],{"class":895},"  signInRequired",[377,1829,1037],{"class":390},[377,1831,1832],{"class":383},"  \u002F\u002F show a sign-in prompt instead of the composer\n",[377,1834,1836,1839,1841],{"class":379,"line":1835},14,[377,1837,1838],{"class":895},"  canAttach",[377,1840,1037],{"class":390},[377,1842,1843],{"class":383},"       \u002F\u002F the shop takes photos\n",[377,1845,1847,1850,1852],{"class":379,"line":1846},15,[377,1848,1849],{"class":895},"  attachments",[377,1851,1037],{"class":390},[377,1853,1854],{"class":383},"     \u002F\u002F photos waiting to be sent: { key, name, size, previewUrl }[]\n",[377,1856,1858,1861],{"class":379,"line":1857},16,[377,1859,1860],{"class":895},"  uploading",[377,1862,1440],{"class":390},[377,1864,1866,1869,1871],{"class":379,"line":1865},17,[377,1867,1868],{"class":895},"  addAttachments",[377,1870,1037],{"class":390},[377,1872,1873],{"class":383},"  \u002F\u002F (FileList | File[]) => number added; sets error ATTACHMENT_TYPE \u002F _SIZE \u002F _COUNT\n",[377,1875,1877,1880,1882,1885],{"class":379,"line":1876},18,[377,1878,1879],{"class":895},"  removeAttachment",[377,1881,1037],{"class":390},[377,1883,1884],{"class":895}," clearAttachments",[377,1886,1440],{"class":390},[377,1888,1890,1893,1895],{"class":379,"line":1889},19,[377,1891,1892],{"class":895},"  setContext",[377,1894,1037],{"class":390},[377,1896,1897],{"class":383},"      \u002F\u002F ({ productSku?, pageType? } | null)\n",[377,1899,1901,1904,1906,1909,1911,1914],{"class":379,"line":1900},20,[377,1902,1903],{"class":895},"  open",[377,1905,1037],{"class":390},[377,1907,1908],{"class":895}," close",[377,1910,1037],{"class":390},[377,1912,1913],{"class":895}," toggle",[377,1915,1440],{"class":390},[377,1917,1919,1922,1924],{"class":379,"line":1918},21,[377,1920,1921],{"class":895},"  send",[377,1923,1037],{"class":390},[377,1925,1926],{"class":383},"            \u002F\u002F (text) => Promise\u003Cboolean>; sends the waiting photos too, and the text may then be empty\n",[377,1928,1930,1933],{"class":379,"line":1929},22,[377,1931,1932],{"class":895},"  stop",[377,1934,1440],{"class":390},[377,1936,1938,1941,1943],{"class":379,"line":1937},23,[377,1939,1940],{"class":895},"  requestHandover",[377,1942,1037],{"class":390},[377,1944,1945],{"class":383}," \u002F\u002F ({ name?, email?, message? }) => Promise\u003Cboolean>\n",[377,1947,1949,1952,1954],{"class":379,"line":1948},24,[377,1950,1951],{"class":895},"  confirmProposal",[377,1953,1037],{"class":390},[377,1955,1956],{"class":383}," \u002F\u002F (id, { termsAccepted? }) => Promise\u003Cboolean>\n",[377,1958,1960,1963],{"class":379,"line":1959},25,[377,1961,1962],{"class":895},"  rejectProposal",[377,1964,1440],{"class":390},[377,1966,1968,1971,1973],{"class":379,"line":1967},26,[377,1969,1970],{"class":895},"  reset",[377,1972,1037],{"class":390},[377,1974,1975],{"class":383},"           \u002F\u002F forget the conversation and start over\n",[377,1977,1979,1981,1983,1985],{"class":379,"line":1978},27,[377,1980,924],{"class":390},[377,1982,927],{"class":390},[377,1984,989],{"class":901},[377,1986,905],{"class":895},[363,1988,1989],{},"The conversation is created on the first message (or handover), not when the chat opens.",[1991,1992,1993],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .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 .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 .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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":372,"searchDepth":387,"depth":387,"links":1995},[1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007],{"id":455,"depth":387,"text":456},{"id":491,"depth":387,"text":492},{"id":558,"depth":387,"text":559},{"id":770,"depth":387,"text":771},{"id":843,"depth":387,"text":693},{"id":1183,"depth":387,"text":1184},{"id":1200,"depth":387,"text":512},{"id":1279,"depth":387,"text":526},{"id":1292,"depth":387,"text":533},{"id":613,"depth":387,"text":1363},{"id":1508,"depth":387,"text":1509},{"id":1704,"depth":387,"text":1707},"The drop-in chat widget \u003CAvvyrAssistant \u002F> and the useAssistant() composable","md",null,{"questions":2012},{"en":2013},[2014,2015,2016,2017],"How do I add the chat widget to my storefront?","How do I tell the assistant which product the shopper is viewing?","How do I change the colours of the chat widget?","How do I open the chat from my own button?",{"title":316,"description":2008},"h8WJYMoqP5BRDwlvnUDJhmAIDEyAFlTxTyZshLe2shc",[2021,2023],{"title":332,"path":333,"stem":334,"description":2022,"children":-1},"All composables provided by @avvyr\u002Fstorefront-nuxt",{"title":328,"path":343,"stem":344,"description":2024,"children":-1},"What @avvyr\u002Fstorefront-next gives you and how to add it to a Next.js App Router project",1793388941592]