@usereq/widget 0.2.24 → 1.0.0-experimental.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -145
- package/dist/embed.js +38 -0
- package/dist/embed.js.map +1 -0
- package/dist/embed.mjs +2839 -0
- package/dist/embed.mjs.map +1 -0
- package/package.json +35 -81
- package/dist/widget.js +0 -255
- package/src/chat-widget/chat-widget-appearance.ts +0 -55
- package/src/chat-widget/message-reveal.ts +0 -52
- package/src/chat-widget/stop-confirmation.ts +0 -288
- package/src/custom-element/agent-widget-element.tsx +0 -676
- package/src/embed.ts +0 -8
- package/src/index.ts +0 -9
- package/src/register.ts +0 -15
- package/src/renderer/index.ts +0 -6
- package/src/renderer/widget-runtime.tsx +0 -385
- package/src/runtime/api-origin.ts +0 -29
- package/src/runtime/api.ts +0 -123
- package/src/runtime/bootstrap.ts +0 -366
- package/src/runtime/debug.ts +0 -104
- package/src/runtime/messages.ts +0 -12
- package/src/runtime/session-storage.ts +0 -32
- package/src/runtime/trigger-rule.ts +0 -182
- package/src/shared/shadow-css.ts +0 -15
- package/src/shared/shadow-theme.ts +0 -115
- package/src/shared/stop-confirmation.ts +0 -20
- package/src/shared/widget-config.ts +0 -171
- package/src/styles/widget.css.ts +0 -83
- package/src/types.ts +0 -98
- package/src/vite-env.d.ts +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","names":["l","u","t","i","r","o","e","f","c","a","s","h","p","v","y","d","w","m","k","C","q","D","A","T","j","z","B","u","i","f","n","r"],"sources":["../src/stream.ts","../src/api.ts","../src/guard.ts","../../../node_modules/.bun/preact@10.29.8/node_modules/preact/dist/preact.module.js","../../../node_modules/.bun/preact@10.29.8/node_modules/preact/hooks/dist/hooks.module.js","../src/base.css.ts","../src/storage.ts","../src/events.ts","../src/rules.ts","../src/group.ts","../src/host.ts","../src/appearance.ts","../../../node_modules/.bun/preact@10.29.8/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../src/icons.tsx","../src/surfaces/banner.tsx","../../contracts/src/embed/reveal.ts","../src/chat/use-conversation.ts","../src/drawer.tsx","../../contracts/src/embed/presets.ts","../src/surfaces/chat-shared.ts","../src/surfaces/chat-messenger.tsx","../src/surfaces/chat.tsx","../src/surfaces/exit-popup.tsx","../src/surfaces/testimonial.tsx","../src/surface.tsx","../src/mount.tsx","../src/element.ts","../src/index.ts"],"sourcesContent":["/**\n * A reader for the AI SDK UI-message stream `POST /api/embed/chat` answers\n * with - the wire `useChat` reads, without `ai` on the page. Server-Sent\n * Events, one JSON chunk per `data:` line, `data: [DONE]` at the end\n * (`ai/docs/04-ai-sdk-ui/50-stream-protocol.mdx`). The server writes one\n * text part per paragraph (`text-start` / `text-delta` / `text-end`), so\n * the reply is gathered into that shape: a message id and its paragraphs.\n * Anything else the protocol can carry (reasoning, tools, files) the\n * embed's server never sends and this ignores.\n */\n\nexport interface Reply {\n id: string\n /** The reply's text parts, in order - one per paragraph. */\n parts: string[]\n}\n\ntype Chunk =\n | { type: \"start\"; messageId?: string }\n | { type: \"text-start\"; id: string }\n | { type: \"text-delta\"; id: string; delta: string }\n | { type: \"text-end\"; id: string }\n | { type: \"error\"; errorText: string }\n | { type: \"abort\"; reason?: string }\n | { type: string }\n\nexport async function readReplyStream(\n body: ReadableStream<Uint8Array>\n): Promise<Reply> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = \"\"\n let id = \"\"\n const order: string[] = []\n const texts = new Map<string, string>()\n\n const take = (line: string) => {\n if (!line.startsWith(\"data:\")) return\n const data = line.slice(5).trim()\n if (!data || data === \"[DONE]\") return\n let chunk: Chunk\n try {\n chunk = JSON.parse(data) as Chunk\n } catch {\n return\n }\n switch (chunk.type) {\n case \"start\":\n if (\"messageId\" in chunk && chunk.messageId) id = chunk.messageId\n break\n case \"text-start\":\n if (\"id\" in chunk) {\n order.push(chunk.id)\n texts.set(chunk.id, \"\")\n }\n break\n case \"text-delta\":\n if (\"id\" in chunk && \"delta\" in chunk) {\n texts.set(chunk.id, (texts.get(chunk.id) ?? \"\") + chunk.delta)\n }\n break\n case \"error\":\n throw new Error(\n \"errorText\" in chunk ? chunk.errorText : \"The reply failed.\"\n )\n case \"abort\":\n throw new Error(\"The reply was cut short.\")\n }\n }\n\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n let at: number\n while ((at = buffer.indexOf(\"\\n\")) !== -1) {\n take(buffer.slice(0, at).replace(/\\r$/, \"\"))\n buffer = buffer.slice(at + 1)\n }\n }\n if (buffer) take(buffer)\n\n return {\n id: id || `reply-${Date.now()}`,\n parts: order.map((key) => texts.get(key) ?? \"\"),\n }\n}\n","import type {\n ChatTrigger,\n EmbedEventBatch,\n EmbedKind,\n EventsResponse,\n SessionResponse,\n StartSessionBody,\n} from \"@workspace/contracts/embed\"\n\nimport { readReplyStream, type Reply } from \"./stream\"\n\n/**\n * The four calls the runtime makes (`apps/api`'s `embed` module, plan\n * §1.1). Every one is unauthenticated and origin-gated: the browser sends\n * `Origin` on its own, the server answers 403 `origin_not_allowed` for a\n * page that is not on the owner's verified domains, and the runtime reads\n * that as a JSON error rather than an opaque CORS failure (`app.ts`).\n */\n\nexport interface Api {\n /** The API origin - `https://api.usereq.com`, or the element's `api-url`. */\n base: string\n}\n\n/** What the API says went wrong: its `error.code` and sentence, with the status. */\nexport class ApiError extends Error {\n constructor(\n readonly status: number,\n readonly code: string,\n message: string\n ) {\n super(message)\n }\n}\n\nasync function fail(response: Response): Promise<never> {\n let code = \"request_failed\"\n let message = `The request failed (${response.status}).`\n try {\n const body = (await response.json()) as {\n error?: { code?: string; message?: string }\n }\n if (body.error?.code) code = body.error.code\n if (body.error?.message) message = body.error.message\n } catch {\n // The body was not JSON - the status is all there is to say.\n }\n throw new ApiError(response.status, code, message)\n}\n\nconst json = (body: unknown, headers: Record<string, string> = {}) => ({\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n})\n\n/** `GET /api/embed/{kind}/{id}` - the active snapshot, as JSON, unchecked. */\nexport async function fetchSnapshot(\n api: Api,\n kind: EmbedKind,\n id: string\n): Promise<unknown> {\n const response = await fetch(`${api.base}/api/embed/${kind}/${id}`)\n if (!response.ok) return fail(response)\n return response.json()\n}\n\n/** `POST /api/embed/sessions` - open the conversation, get its Bearer token. */\nexport async function startSession(\n api: Api,\n body: StartSessionBody\n): Promise<SessionResponse> {\n const response = await fetch(`${api.base}/api/embed/sessions`, json(body))\n if (!response.ok) return fail(response)\n return response.json() as Promise<SessionResponse>\n}\n\n/**\n * `POST /api/embed/chat` - ONE new visitor turn under the session's token,\n * answered with the agent's whole reply as an AI SDK UI-message stream. The\n * body arrives once the reply is stored, so this resolves with the reply\n * complete: its id and its paragraphs, for the page to reveal on the\n * contract's cadence.\n */\nexport async function sendTurn(\n api: Api,\n token: string,\n message: { id: string; text: string },\n trigger: ChatTrigger,\n signal: AbortSignal\n): Promise<Reply> {\n const response = await fetch(`${api.base}/api/embed/chat`, {\n ...json(\n {\n message: {\n id: message.id,\n role: \"user\",\n parts: [{ type: \"text\", text: message.text }],\n },\n trigger,\n },\n { Authorization: `Bearer ${token}` }\n ),\n signal,\n })\n if (!response.ok || !response.body) return fail(response)\n return readReplyStream(response.body)\n}\n\n/**\n * `POST /api/embed/events` - a batch, `keepalive` so a flush on `pagehide`\n * outlives the page. The answer is the batch's fate, never a failure the\n * page has to act on; a refused batch is simply dropped.\n */\nexport async function postEvents(\n api: Api,\n batch: EmbedEventBatch\n): Promise<EventsResponse | null> {\n try {\n const response = await fetch(`${api.base}/api/embed/events`, {\n ...json(batch),\n keepalive: true,\n })\n if (!response.ok) return null\n return (await response.json()) as EventsResponse\n } catch {\n return null\n }\n}\n","import type {\n ConfigSnapshotPayload,\n EmbedKind,\n GroupPayload,\n WidgetPayload,\n} from \"@workspace/contracts/embed\"\n\n/**\n * A hand-written shape check on what `GET /api/embed/{kind}/{id}` answered\n * - enough to fail safe on a malformed response, no more. The server\n * already parsed the payload through the CLOSED `configSnapshotPayloadSchema`\n * before serving it (`EmbedService.config`), so this trusts the fields\n * inside and only asks: is this the envelope, with the kind I asked for,\n * carrying an object with an id and a config? Shipping zod (~12KB) to\n * every merchant page for a check the publish already made is the thing\n * this avoids.\n */\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null\n\nfunction isWidget(value: unknown): value is WidgetPayload {\n return (\n isObject(value) &&\n typeof value.id === \"string\" &&\n isObject(value.config) &&\n typeof value.config.type === \"string\" &&\n isObject(value.config.appearance) &&\n Array.isArray(value.rules)\n )\n}\n\nfunction isGroup(value: unknown): value is GroupPayload {\n return (\n isObject(value) &&\n typeof value.id === \"string\" &&\n typeof value.mode === \"string\" &&\n isObject(value.config) &&\n Array.isArray(value.members) &&\n value.members.every((m) => isObject(m) && isWidget(m.widget)) &&\n Array.isArray(value.rules)\n )\n}\n\nexport function guardSnapshot(\n value: unknown,\n kind: \"widget\"\n): Extract<ConfigSnapshotPayload, { kind: \"widget\" }> | null\nexport function guardSnapshot(\n value: unknown,\n kind: \"group\"\n): Extract<ConfigSnapshotPayload, { kind: \"group\" }> | null\nexport function guardSnapshot(\n value: unknown,\n kind: EmbedKind\n): ConfigSnapshotPayload | null\nexport function guardSnapshot(\n value: unknown,\n kind: EmbedKind\n): ConfigSnapshotPayload | null {\n if (!isObject(value) || value.kind !== kind) return null\n if (kind === \"widget\" && isWidget(value.payload)) {\n return value as unknown as ConfigSnapshotPayload\n }\n if (kind === \"group\" && isGroup(value.payload)) {\n return value as unknown as ConfigSnapshotPayload\n }\n return null\n}\n","var n,l,u,t,i,r,o,e,f,c,a,s,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?$(n):null}function I(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=m({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),q(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?$(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,D(i,o,r),u.__e=u.__=null,o.__e!=t&&P(o)}}function P(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),P(n)}function A(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!H.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(H)}function H(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,a){var s,h,p,v,y,_,g=t&&t.__k||w,m=l.length;for(f=T(u,l,g,f,m),s=0;s<m;s++)null!=(p=u.__k[s])&&(h=-1!=p.__i&&g[p.__i]||d,p.__i=s,_=q(n,p,h,i,r,o,e,f,c,a),v=p.__e,p.ref&&h.ref!=p.ref&&(h.ref&&J(h.ref,null,p),a.push(p.ref,p.__c||v,p)),null==y&&null!=v&&(y=v),4&p.__u?(f=j(p,f,n),h.__e&&(h.__e=null)):\"function\"==typeof p.type&&void 0!==_?f=_:v&&(f=v.nextSibling),p.__u&=-7);return u.__e=y,f}function T(n,l,u,t,i){var r,o,e,f,c,a=u.length,s=a,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=x(null,o,null,null,null):g(o)?o=n.__k[r]=x(S,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,s))&&(s--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>a?h--:i<a&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(s)for(r=0;r<a;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=$(e)),K(e,e));return t}function j(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=j(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!l.parentNode&&(l=$(n)),l=u.insertBefore(n.__e,l||null));do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function F(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(g(n)?n.some(function(n){F(n,l)}):l.push(n)),l}function O(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],a=null!=c&&0==(2&c.__u);if(null===c&&null==e||a&&e==c.key&&f==c.type)return u;if(t>(a?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(s,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[a]=t[a]:(u[a]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]<t[a])return;return t(l.event?l.event(u):u)}}}function q(n,u,t,i,r,o,e,f,c,a){var s,h,p,v,y,d,_,k,x,M,I,P,A,H,T,j,F=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(s=l.__b)&&s(u);n:if(\"function\"==typeof F){h=e.length;try{if(x=u.props,M=F.prototype&&F.prototype.render,I=(s=F.contextType)&&i[s.__c],P=s?I?I.props.value:s.__:i,t.__c?k=(p=u.__c=t.__c).__=p.__E:(M?u.__c=p=new F(x,P):(u.__c=p=new C(x,P),p.constructor=F,p.render=Q),I&&I.sub(p),p.state||(p.state={}),p.__n=i,v=p.__d=!0,p.__h=[],p._sb=[]),M&&null==p.__s&&(p.__s=p.state),M&&null!=F.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=m({},p.__s)),m(p.__s,F.getDerivedStateFromProps(x,p.__s))),y=p.props,d=p.state,p.__v=u,v)M&&null==F.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),M&&null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(M&&null==F.getDerivedStateFromProps&&x!==y&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(x,P),u.__v==t.__v||!p.__e&&null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(x,p.__s,P)){u.__v!=t.__v&&(p.props=x,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),w.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&e.push(p),f=$(t);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(x,p.__s,P),M&&null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(y,d,_)})}if(p.context=P,p.props=x,p.__P=n,p.__e=!1,A=l.__r,H=0,M)p.state=p.__s,p.__d=!1,A&&A(u),s=p.render(p.props,p.state,p.context),w.push.apply(p.__h,p._sb),p._sb=[];else do{p.__d=!1,A&&A(u),s=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=m(m({},i),p.getChildContext())),M&&!v&&null!=p.getSnapshotBeforeUpdate&&(_=p.getSnapshotBeforeUpdate(y,d)),T=null!=s&&s.type===S&&null==s.key?E(s.props.children):s,f=L(n,g(T)?T:[T],u,t,i,r,o,e,f,c,a),p.base=u.__e,u.__u&=-161,p.__h.length&&e.push(p),k&&(p.__E=p.__=null)}catch(n){if(e.length=h,u.__v=null,c||null!=o){if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;null!=o&&(o[o.indexOf(f)]=null),u.__e=f}else if(null!=o)for(j=o.length;j--;)b(o[j])}else u.__e=t.__e;null==u.__k&&(u.__k=t.__k||[]),n.then||B(u),l.__e(n,u,t)}}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=G(t.__e,u,t,i,r,o,e,c,a);return(s=l.diffed)&&s(u),128&u.__u?void 0:f}function B(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(B))}function D(n,u,t){for(var i=0;i<t.length;i++)J(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function E(n){return\"object\"!=typeof n||null==n||n.__b>0?n:g(n)?n.map(E):void 0!==n.constructor?null:m({},n)}function G(u,t,i,r,o,e,f,c,a){var s,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(s=0;s<e.length;s++)if((y=e[s])&&\"setAttribute\"in y==!!x&&(x?y.localName==x:3==y.nodeType)){u=y,e[s]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)m===k||c&&u.data==k||(u.data=k);else{if(e=\"textarea\"==x&&null!=k.defaultValue?null:e&&n.call(u.childNodes),!c&&null!=e)for(m={},s=0;s<u.attributes.length;s++)m[(y=u.attributes[s]).name]=y.value;for(s in m)y=m[s],\"dangerouslySetInnerHTML\"==s?p=y:\"children\"==s||s in k||\"value\"==s&&\"defaultValue\"in k||\"checked\"==s&&\"defaultChecked\"in k||N(u,s,null,y,o);for(s in k)y=k[s],\"children\"==s?v=y:\"dangerouslySetInnerHTML\"==s?h=y:\"value\"==s?w=y:\"checked\"==s?_=y:c&&\"function\"!=typeof y||m[s]===y||N(u,s,y,m[s],o);if(h)c||p&&(h.__html==p.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(p&&(u.innerHTML=\"\"),L(\"template\"==t.type?u.content:u,g(v)?v:[v],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&$(i,0),c,a),null!=e)for(s=e.length;s--;)b(e[s]);c&&\"textarea\"!=x||(s=\"value\",\"progress\"==x&&null==w?u.removeAttribute(\"value\"):null!=w&&(w!==u[s]||\"progress\"==x&&!w||\"option\"==x&&w!=m[s])&&N(u,s,w,m[s],o),s=\"checked\",null!=_&&_!=u[s]&&N(u,s,_,m[s],o))}return u}function J(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function K(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||J(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=i.__n=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&K(i[r],u,t||\"function\"!=typeof n.type);t||b(n.__e),n.__c=n.__=n.__e=void 0}function Q(n,l,u){return this.constructor(n,u)}function R(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],q(t,u=(!r&&i||t).__k=k(S,null,[u]),o||d,d,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),D(e,u,f),u.props.children=null}function U(n,l){R(n,l,U)}function W(l,u,t){var i,r,o,e,f=m({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,a=\"__a\"+f,s=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,p=c.__;function s(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,y(D,n)}function y(n,u,i){var o=s(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=!1,i=o.__c.props!==n;if(o.__c.__H.__.some(function(n){if(n.__N){u=!0;var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c){var f=c.call(this,n,t,r);return u?f||i:f}return!u||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function h(n,u){var i=s(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=s(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=s(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=s(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=s(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=s(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),p&&p(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,h as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,y as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/**\n * The static stylesheet every mount adopts into its shadow root: the reset\n * the host page cannot reach, the font stack, the few keyframes. Everything\n * that DEPENDS on the config - colours, radius, offsets - is an inline\n * style on the element, ported from the dashboard preview; the customer's\n * `customCss` and each block's `css` are appended after this, per mount\n * (`mount.ts`), so they win on specificity ties.\n *\n * `--font-display` is read as a custom property because custom properties\n * inherit across the shadow boundary: a page that defines it gets its own\n * display face on a popup's headline, the way the dashboard's mock did.\n */\nexport const BASE_CSS = `\n:host{all:initial;display:contents;font-family:system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;font-size:14px;line-height:1.4;-webkit-font-smoothing:antialiased;color:#15171e}\n:host([hidden]){display:none}\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nbutton{font:inherit;color:inherit;background:none;border:0;cursor:pointer;-webkit-tap-highlight-color:transparent}\ninput{font:inherit;color:inherit;background:none;border:0;outline:0;min-width:0}\ninput::placeholder{color:var(--uq-placeholder,inherit);opacity:1}\ninput:disabled{cursor:not-allowed}\nbutton:disabled{cursor:default}\na{color:inherit;text-decoration:none}\nimg,video{display:block;max-width:100%}\n.uq-fixed{position:fixed;z-index:2147483000}\n.uq-inline{display:block}\n.uq-dots{display:inline-flex;gap:3px;align-items:center;height:10px}\n.uq-dots span{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.35;animation:uq-dot 1.2s infinite ease-in-out}\n.uq-dots span:nth-child(2){animation-delay:.15s}\n.uq-dots span:nth-child(3){animation-delay:.3s}\n@keyframes uq-dot{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:.9;transform:translateY(-2px)}}\n.uq-rise{animation:uq-rise .22s ease-out both}\n@keyframes uq-rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}\n.uq-fade{animation:uq-fade .18s ease-out both}\n@keyframes uq-fade{from{opacity:0}to{opacity:1}}\n.uq-drawer{left:0;right:0;bottom:0;display:flex;flex-direction:column;overflow:hidden;padding-bottom:env(safe-area-inset-bottom);transition:height .28s cubic-bezier(.32,.72,0,1),border-radius .28s ease}\n.uq-drawer-half{height:50%}\n.uq-drawer-full{height:100%}\n.uq-drawer-held{transition:none}\n.uq-grab{flex-shrink:0;height:22px;display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}\n.uq-grab:active{cursor:grabbing}\n.uq-grab span{width:36px;height:4px;border-radius:2px}\n.uq-slide{animation:uq-slide .3s cubic-bezier(.32,.72,0,1) both}\n@keyframes uq-slide{from{transform:translateY(100%)}to{transform:none}}\n@media (prefers-reduced-motion:reduce){.uq-rise,.uq-fade,.uq-slide,.uq-dots span{animation:none}.uq-drawer{transition:none}}\n`\n","/**\n * `localStorage` / `sessionStorage` that never throw: a page in a private\n * window, an iframe with storage partitioned off, or a browser told to\n * block site data raises on the accessor itself. Everything the runtime\n * remembers (the visitor key, a split's bucket, a rule fired once, a\n * sequence's step) is a convenience - it must degrade to \"forgotten\", never\n * to a script error on the customer's page.\n */\n\nexport type Store = \"localStorage\" | \"sessionStorage\"\n\nexport function read(which: Store, key: string): string | null {\n try {\n return window[which].getItem(key)\n } catch {\n return null\n }\n}\n\nexport function write(which: Store, key: string, value: string) {\n try {\n window[which].setItem(key, value)\n } catch {\n // Storage is full or blocked: the value is simply not remembered.\n }\n}\n","import type {\n EMBED_EVENT_TYPES,\n EmbedEvent,\n EmbedKind,\n} from \"@workspace/contracts/embed\"\n\nimport { postEvents, type Api } from \"./api\"\nimport { read, write } from \"./storage\"\n\n/**\n * What the runtime reports back (`POST /api/embed/events`, batched). Each\n * event's `id` is a client-minted uuidv7 and IS the server's dedupe key, so\n * a batch that is retried inserts nothing twice; `occurredAt` is the client\n * clock. Batches go out every `FLUSH_MS`, or at `FLUSH_AT` events, or when\n * the page is hidden - `keepalive` so that last one lands.\n */\n\nconst FLUSH_MS = 2000\nconst FLUSH_AT = 20\nconst BATCH_MAX = 100\n\nexport type EventType = (typeof EMBED_EVENT_TYPES)[number]\n\n/**\n * A uuidv7: 48 bits of ms time, then random, version and variant bits set\n * - the shape `events.id` expects, minted here because a page cannot wait\n * on the server for an id it needs to dedupe against.\n */\nexport function uuidv7(now = Date.now()): string {\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n bytes[0] = (now / 2 ** 40) & 0xff\n bytes[1] = (now / 2 ** 32) & 0xff\n bytes[2] = (now / 2 ** 24) & 0xff\n bytes[3] = (now / 2 ** 16) & 0xff\n bytes[4] = (now / 2 ** 8) & 0xff\n bytes[5] = now & 0xff\n bytes[6] = (bytes[6]! & 0x0f) | 0x70\n bytes[8] = (bytes[8]! & 0x3f) | 0x80\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\")\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`\n}\n\nconst VISITOR_KEY = \"usereq:visitor\"\n\n/**\n * The visitor's key: minted once per browser, kept in `localStorage`, sent\n * as `clientKey` and used to bucket a split. Random - it identifies a\n * browser to itself, nothing about the person.\n */\nexport function visitorKey(): string {\n const stored = read(\"localStorage\", VISITOR_KEY)\n if (stored) return stored\n const minted = uuidv7()\n write(\"localStorage\", VISITOR_KEY, minted)\n return minted\n}\n\nexport interface Reporter {\n report: (\n type: EventType,\n extra?: {\n widgetId?: string\n sessionId?: string\n payload?: Record<string, unknown>\n }\n ) => void\n flush: () => void\n}\n\n/** One reporter per element: it knows which embed the events are about. */\nexport function createReporter(\n api: Api,\n embed: { kind: EmbedKind; id: string }\n): Reporter {\n const queue: EmbedEvent[] = []\n let timer: number | null = null\n const clientKey = visitorKey()\n\n const flush = () => {\n if (timer !== null) {\n window.clearTimeout(timer)\n timer = null\n }\n while (queue.length > 0) {\n const events = queue.splice(0, BATCH_MAX)\n void postEvents(api, { events })\n }\n }\n\n const report: Reporter[\"report\"] = (type, extra = {}) => {\n queue.push({\n id: uuidv7(),\n type,\n embedKind: embed.kind,\n embedId: embed.id,\n widgetId: extra.widgetId,\n sessionId: extra.sessionId,\n clientKey,\n url: window.location.href.slice(0, 2000),\n occurredAt: new Date().toISOString(),\n payload: extra.payload,\n })\n if (queue.length >= FLUSH_AT) flush()\n else if (timer === null) timer = window.setTimeout(flush, FLUSH_MS)\n }\n\n window.addEventListener(\"pagehide\", flush)\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") flush()\n })\n\n return { report, flush }\n}\n","import type {\n Condition,\n RulePayload,\n StringOp,\n TriggerKind,\n} from \"@workspace/contracts/embed\"\n\nimport type { PageContext } from \"./host\"\nimport { read, write } from \"./storage\"\n\n/**\n * A payload's rules, run: they arrive ENABLED and in priority order, and\n * the runtime takes the FIRST whose conditions fit this page, arms its\n * trigger, and fires once the trigger does. One rule at a time: the\n * conditions are decided at load (the path, the utm, the device, the\n * referrer do not change under a page), so the walk is a filter and the\n * winner is the first survivor. A rule marked `once` remembers it fired in\n * `sessionStorage` and steps aside for the visit; the next survivor arms\n * instead. An empty list arms nothing - the surface rests.\n */\n\nconst ONCE_KEY = (ruleId: string) => `usereq:once:${ruleId}`\n\nfunction matchString(op: StringOp, value: string, expected: string): boolean {\n switch (op) {\n case \"is\":\n return value === expected\n case \"starts_with\":\n return value.startsWith(expected)\n case \"contains\":\n return value.includes(expected)\n case \"matches\":\n try {\n return new RegExp(expected).test(value)\n } catch {\n return false\n }\n }\n}\n\nexport function conditionHolds(\n condition: Condition,\n page: PageContext\n): boolean {\n switch (condition.kind) {\n case \"path\":\n // `\"*\"` is \"any page\" - the rule fires everywhere.\n return (\n condition.value === \"*\" ||\n matchString(condition.op, page.path, condition.value)\n )\n case \"utm\":\n return matchString(\n condition.op,\n page.utm[condition.param] ?? \"\",\n condition.value\n )\n case \"device\":\n return page.device === condition.value\n case \"referrer\":\n return matchString(condition.op, page.referrer, condition.value)\n }\n}\n\n/** The first rule whose every condition holds and that has not spent its `once`. */\nexport function firstMatch(\n rules: readonly RulePayload[],\n page: PageContext\n): RulePayload | null {\n for (const rule of rules) {\n if (rule.once && read(\"sessionStorage\", ONCE_KEY(rule.id))) continue\n if (rule.conditions.every((c) => conditionHolds(c, page))) return rule\n }\n return null\n}\n\ntype Disposer = () => void\n\n/**\n * Arm one trigger; `fire` runs once, then the listeners are gone. The\n * disposer tears the trigger down before it fires (the element left the\n * page).\n */\nexport function armTrigger(\n trigger: TriggerKind,\n params: Record<string, unknown>,\n fire: () => void\n): Disposer {\n let done = false\n let cleanup: Disposer = () => {}\n const once = () => {\n if (done) return\n done = true\n cleanup()\n fire()\n }\n\n switch (trigger) {\n case \"page_load\": {\n const timer = window.setTimeout(once, 0)\n cleanup = () => window.clearTimeout(timer)\n break\n }\n case \"time_on_page\": {\n const seconds = Number(params.seconds) || 0\n const timer = window.setTimeout(once, seconds * 1000)\n cleanup = () => window.clearTimeout(timer)\n break\n }\n case \"scroll_depth\": {\n const percent = Number(params.percent) || 0\n const check = () => {\n const root = document.documentElement\n const scrollable = root.scrollHeight - window.innerHeight\n const depth =\n scrollable <= 0 ? 100 : (window.scrollY / scrollable) * 100\n if (depth >= percent) once()\n }\n window.addEventListener(\"scroll\", check, { passive: true })\n cleanup = () => window.removeEventListener(\"scroll\", check)\n check()\n break\n }\n case \"element_click\": {\n const selector = String(params.selector ?? \"\")\n const onClick = (event: Event) => {\n const target = event.target\n if (!(target instanceof Element) || !selector) return\n try {\n if (target.closest(selector)) once()\n } catch {\n // A selector the browser cannot parse never matches.\n }\n }\n document.addEventListener(\"click\", onClick, true)\n cleanup = () => document.removeEventListener(\"click\", onClick, true)\n break\n }\n case \"element_visible\": {\n const selector = String(params.selector ?? \"\")\n let observer: IntersectionObserver | null = null\n const watch = () => {\n let element: Element | null = null\n try {\n element = selector ? document.querySelector(selector) : null\n } catch {\n element = null\n }\n if (!element) return false\n observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) once()\n })\n observer.observe(element)\n return true\n }\n // The element may render after the tag: look again when the DOM is done.\n if (!watch() && document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => void watch(), {\n once: true,\n })\n }\n cleanup = () => observer?.disconnect()\n break\n }\n case \"exit_intent\": {\n // The pointer leaves through the top edge - toward the tabs, the bar.\n const onOut = (event: MouseEvent) => {\n if (event.relatedTarget === null && event.clientY <= 0) once()\n }\n document.addEventListener(\"mouseout\", onOut)\n cleanup = () => document.removeEventListener(\"mouseout\", onOut)\n break\n }\n }\n\n return () => {\n done = true\n cleanup()\n }\n}\n\n/**\n * The whole walk: pick the first fitting rule, arm it, hand the rule over\n * when it fires. Spends the rule's `once` on firing.\n */\nexport function runRules(\n rules: readonly RulePayload[],\n page: PageContext,\n onFire: (rule: RulePayload) => void\n): Disposer {\n const rule = firstMatch(rules, page)\n if (!rule) return () => {}\n return armTrigger(rule.trigger, rule.triggerParams, () => {\n if (rule.once) write(\"sessionStorage\", ONCE_KEY(rule.id), \"1\")\n onFire(rule)\n })\n}\n","import type { GroupPayload, WidgetPayload } from \"@workspace/contracts/embed\"\n\nimport { visitorKey } from \"./events\"\nimport { armTrigger } from \"./rules\"\nimport { read, write } from \"./storage\"\n\n/**\n * Which of a group's members play, by mode (`GROUP_MODE_COPY`):\n *\n * - `split` - ONE member per visitor, chosen by weight and STICKY: the\n * visitor key hashed with the group's public `salt` lands in a bucket,\n * remembered in `localStorage` so the same browser sees the same member\n * on every visit, even after the weights change.\n * - `sequence` - ONE member at a time over a visit: the step is remembered\n * in `sessionStorage` and moves on when the current member's `advanceOn`\n * trigger fires (a member with none is the end of the line).\n * - `parallel` - EVERY member, together.\n */\n\ntype Member = GroupPayload[\"members\"][number]\n\nconst bucketKey = (groupId: string) => `usereq:split:${groupId}`\nconst stepKey = (groupId: string) => `usereq:seq:${groupId}`\n\n/** FNV-1a over the visitor key and the salt: fast, spread, deterministic. */\nfunction hash(input: string): number {\n let h = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i)\n h = Math.imul(h, 0x01000193)\n }\n return h >>> 0\n}\n\nfunction byPosition(members: readonly Member[]): Member[] {\n return [...members].sort((a, b) => a.position - b.position)\n}\n\n/** The split's member for this visitor - the one remembered, else the one the hash picks. */\nexport function splitMember(group: GroupPayload): Member | null {\n const members = byPosition(group.members)\n if (members.length === 0) return null\n\n const remembered = read(\"localStorage\", bucketKey(group.id))\n const kept = remembered\n ? members.find((m) => m.widget.id === remembered)\n : undefined\n if (kept) return kept\n\n const total = members.reduce((sum, m) => sum + m.weight, 0)\n let roll = hash(`${visitorKey()}:${group.config.salt}`) % total\n let chosen = members[members.length - 1]!\n for (const member of members) {\n if (roll < member.weight) {\n chosen = member\n break\n }\n roll -= member.weight\n }\n write(\"localStorage\", bucketKey(group.id), chosen.widget.id)\n return chosen\n}\n\n/** The sequence's current member, by the step this visit is on. */\nexport function sequenceMember(group: GroupPayload): Member | null {\n const members = byPosition(group.members)\n if (members.length === 0) return null\n const step = Number(read(\"sessionStorage\", stepKey(group.id)) ?? 0)\n const index = Number.isFinite(step) ? Math.min(step, members.length - 1) : 0\n return members[index] ?? null\n}\n\n/**\n * Arm the current member's `advanceOn`; when it fires the step moves on and\n * `onAdvance` gets the next member (or nothing, at the end of the line).\n */\nexport function armAdvance(\n group: GroupPayload,\n current: Member,\n onAdvance: (next: Member | null) => void\n): () => void {\n if (!current.advanceOn) return () => {}\n const members = byPosition(group.members)\n const at = members.findIndex((m) => m.widget.id === current.widget.id)\n return armTrigger(current.advanceOn.kind, current.advanceOn.params, () => {\n const next = at + 1 < members.length ? at + 1 : null\n if (next === null) {\n onAdvance(null)\n return\n }\n write(\"sessionStorage\", stepKey(group.id), String(next))\n onAdvance(members[next] ?? null)\n })\n}\n\n/** Every widget the group shows right now, in position order. */\nexport function playingMembers(group: GroupPayload): WidgetPayload[] {\n switch (group.mode) {\n case \"split\": {\n const member = splitMember(group)\n return member ? [member.widget] : []\n }\n case \"sequence\": {\n const member = sequenceMember(group)\n return member ? [member.widget] : []\n }\n case \"parallel\":\n return byPosition(group.members).map((m) => m.widget)\n }\n}\n","/**\n * What the runtime reads off the page it landed on: whether the ground is\n * dark (the adaptive skin, the ink, the card follow it), which device class\n * the visitor is on (a rule's `device` condition), and the URL's parts (its\n * `path` / `utm` / `referrer` conditions, the session's landing data).\n */\n\nexport type Theme = \"light\" | \"dark\"\n\n/**\n * Dark when the page's own background is - sampled from `body`, then `html`\n * - and, when neither paints a colour, from the visitor's colour-scheme\n * preference. A page that paints a photo behind the tag is still a dark\n * ground; `theme=\"dark\"` on the element says so when sampling cannot.\n */\nexport function hostIsDark(forced: Theme | null): boolean {\n if (forced) return forced === \"dark\"\n const painted =\n luminanceOf(getComputedStyle(document.body).backgroundColor) ??\n luminanceOf(getComputedStyle(document.documentElement).backgroundColor)\n if (painted !== null) return painted < 0.5\n return window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ?? false\n}\n\n/** `rgb(…)` / `rgba(…)` -> 0-1 perceived luminance, or null when transparent. */\nfunction luminanceOf(color: string): number | null {\n const match =\n /rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)(?:[,\\s/]+([\\d.]+))?/.exec(color)\n if (!match) return null\n const alpha = match[4] === undefined ? 1 : Number(match[4])\n if (alpha < 0.5) return null\n const [r, g, b] = [Number(match[1]), Number(match[2]), Number(match[3])]\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255\n}\n\nexport type Device = \"mobile\" | \"tablet\" | \"desktop\"\n\n/** Width breaks, the way the dashboard's `mobile` preview is 390 wide. */\nexport function deviceOf(width = window.innerWidth): Device {\n if (width < 640) return \"mobile\"\n if (width < 1024) return \"tablet\"\n return \"desktop\"\n}\n\n/** The page as a rule's conditions and a session's landing data see it. */\nexport function pageContext() {\n const url = new URL(window.location.href)\n const utm: Record<string, string> = {}\n for (const key of [\"source\", \"medium\", \"campaign\", \"term\", \"content\"]) {\n const value = url.searchParams.get(`utm_${key}`)\n if (value) utm[key] = value\n }\n return {\n href: url.href.slice(0, 2000),\n path: url.pathname,\n referrer: document.referrer.slice(0, 2000),\n utm,\n device: deviceOf(),\n }\n}\nexport type PageContext = ReturnType<typeof pageContext>\n","import type { WidgetConfig } from \"@workspace/contracts/embed\"\n\n/**\n * A config's LOOK, as the dashboard preview computes it (`widget-preview.tsx`)\n * - lifted verbatim so the page and the playground cannot disagree on how an\n * appearance becomes colours. Pure: numbers and strings in, strings out.\n *\n * `hexToRgb` / `readableOn` are `@workspace/ui/lib/hex-color` copied, not\n * imported: that package carries React and Tailwind, and this bundle\n * carries neither.\n */\n\n/** `\"#3b46df\"` (or `\"3b46df\"`) -> `{ r, g, b }`, each 0-255. */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } {\n const c = hex.replace(\"#\", \"\")\n return {\n r: parseInt(c.slice(0, 2), 16),\n g: parseInt(c.slice(2, 4), 16),\n b: parseInt(c.slice(4, 6), 16),\n }\n}\n\n/**\n * Black or white, whichever stays legible on `hex`. Uses the perceived-\n * luminance weights (0.299/0.587/0.114); the 0.62 threshold is tuned so a\n * mid-bright accent still gets dark text.\n */\nexport function readableOn(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n return luminance > 0.62 ? \"#15171e\" : \"#ffffff\"\n}\n\n/** The ink triplet for text over a light or a dark ground - `rgb(${ink})`. */\nexport const inkOn = (dark: boolean) => (dark ? \"245,245,241\" : \"21,23,30\")\n\nexport interface Look {\n /** The solid accent hex - borders and text, where translucency reads as broken. */\n accent: string\n /** The accent with its alpha applied - every FILL. */\n accentFill: string\n /** Black or white, whichever reads on the accent. */\n accentText: string\n /** Corner radius, px. */\n rad: number\n /** The chat stream's frosted finish. */\n isGlass: boolean\n /**\n * The chat bubble in Messenger's chrome (`preset: \"facebook-messenger\"`):\n * `chat-messenger.tsx` draws from `MESSENGER`, and the accent, fill and\n * radius here go unused. A preset stored on another variant is inert.\n */\n isMessenger: boolean\n /** The host page reads dark - the ink and the card follow. */\n hostDark: boolean\n /** `r,g,b` for text on the host. */\n ink: string\n /** The card behind a panel, a popup, a testimonial. */\n surfaceBg: string\n /** `bottom-right` / `bottom-left` as the CSS side, with its offset. */\n side: { right: number } | { left: number }\n offsetY: number\n}\n\nexport function lookOf(config: WidgetConfig, hostDark: boolean): Look {\n const a = config.appearance\n const accent = a.accent\n // The accent's opacity from the alpha rail (0-100), applied to FILLS;\n // borders and text keep the solid hex.\n const accentFill = (() => {\n if (a.alpha >= 100) return accent\n const { r, g, b } = hexToRgb(accent)\n return `rgba(${r},${g},${b},${a.alpha / 100})`\n })()\n return {\n accent,\n accentFill,\n accentText: readableOn(accent),\n rad: a.radius,\n isGlass:\n config.type === \"chat\" &&\n config.variant === \"stream\" &&\n a.skin === \"glass\",\n isMessenger:\n config.type === \"chat\" &&\n config.variant === \"bubble\" &&\n config.preset === \"facebook-messenger\",\n hostDark,\n ink: inkOn(hostDark),\n surfaceBg: hostDark ? \"#181b22\" : \"#ffffff\",\n side:\n a.position === \"bottom-right\"\n ? { right: a.offsetX }\n : { left: a.offsetX },\n offsetY: a.offsetY,\n }\n}\n\n/**\n * The customer's class for a named part, from `appearance.parts` - applied\n * beside the runtime's own `uq-*` class so their stylesheet can target it.\n */\nexport function partClass(\n config: WidgetConfig,\n part: string,\n own?: string\n): string {\n const custom = config.appearance.parts[part]\n const classes = [`uq-${part}`]\n if (own) classes.push(own)\n if (custom) classes.push(custom.trim())\n return classes.join(\" \")\n}\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\""\";break;case 38:f=\"&\";break;case 60:f=\"<\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import type { ComponentChildren } from \"preact\"\n\n/**\n * The glyphs the surfaces use, as lucide draws them (lucide-react 1.31,\n * ISC): the exact path data, the same default attributes, `currentColor`\n * so a glyph takes its button's colour. Copied rather than depended on -\n * three icons are a few hundred bytes, the package is not.\n */\n\nfunction Icon({\n size,\n children,\n}: {\n size: number\n children: ComponentChildren\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n )\n}\n\nexport const Sparkles = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\" />\n <path d=\"M20 2v4\" />\n <path d=\"M22 4h-4\" />\n <circle cx=\"4\" cy=\"20\" r=\"2\" />\n </Icon>\n)\n\nexport const ArrowRight = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </Icon>\n)\n\nexport const X = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </Icon>\n)\n\n// -- the Messenger preset's chrome (the preview draws the same lucide set) --\n\nexport const Phone = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\" />\n </Icon>\n)\n\nexport const Video = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5\" />\n <rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\" />\n </Icon>\n)\n\nexport const Info = ({ size }: { size: number }) => (\n <Icon size={size}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </Icon>\n)\n\nexport const ChevronDown = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"m6 9 6 6 6-6\" />\n </Icon>\n)\n\nexport const Minus = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M5 12h14\" />\n </Icon>\n)\n\nexport const Send = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </Icon>\n)\n\nexport const ExternalLink = ({ size }: { size: number }) => (\n <Icon size={size}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </Icon>\n)\n\n/** The Messenger mark on the launcher's badge - a fill glyph, not a stroke. */\nexport const MessengerLogo = ({ size, d }: { size: number; d: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d={d} />\n </svg>\n)\n","import type { WidgetConfig } from \"@workspace/contracts/embed\"\n\nimport { partClass } from \"../appearance\"\nimport { X } from \"../icons\"\nimport type { SurfaceProps } from \"../surface\"\n\n/**\n * The banner: a strip along the top or the bottom of the page in the accent,\n * its line and its CTA - the preview's styles number for number, plus the\n * close the preview has no need of (the `close` part), gone when pinned.\n */\n\ntype BannerConfig = Extract<WidgetConfig, { type: \"banner\" }>\n\nexport function BannerSurface({\n payload,\n look,\n reporter,\n open,\n setOpen,\n pinned,\n}: SurfaceProps) {\n const config = payload.config as BannerConfig\n const { accentFill, accentText, rad } = look\n if (!open) return null\n\n // The preview shows the pill whenever there IS a CTA - a label with no\n // link yet is still the customer's label. Without an href it goes nowhere\n // (`#`, same page), like a popup's CTA block; with one, a new tab.\n const cta = config.cta?.label.trim() ? config.cta : null\n const href = cta?.href.trim() || \"\"\n const edge = config.position === \"bottom\" ? { bottom: 0 } : { top: 0 }\n\n return (\n <div\n class={partClass(config, \"strip\", \"uq-fixed uq-fade\")}\n role=\"region\"\n aria-label=\"Announcement\"\n style={{\n left: 0,\n right: 0,\n ...edge,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 14,\n padding: \"11px 14px\",\n background: accentFill,\n color: accentText,\n }}\n >\n <span\n class={partClass(config, \"text\")}\n style={{ fontSize: 12.5, fontWeight: 500 }}\n >\n {config.text}\n </span>\n {cta && (\n <a\n class={partClass(config, \"cta\")}\n href={href || \"#\"}\n target={href ? \"_blank\" : undefined}\n rel={href ? \"noopener noreferrer\" : undefined}\n onClick={() =>\n reporter.report(\"cta.clicked\", {\n widgetId: payload.id,\n payload: { href },\n })\n }\n style={{\n fontSize: 11.5,\n padding: \"5px 10px\",\n borderRadius: rad,\n border: `1px solid ${accentText}`,\n whiteSpace: \"nowrap\",\n }}\n >\n {cta.label}\n </a>\n )}\n {!pinned && (\n <button\n type=\"button\"\n class={partClass(config, \"close\")}\n onClick={() => setOpen(false)}\n aria-label=\"Close\"\n style={{\n position: \"absolute\",\n right: 10,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: 24,\n height: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: 0.7,\n }}\n >\n <X size={14} />\n </button>\n )}\n </div>\n )\n}\n","/**\n * How a reply arrives on screen. The backend answers whole, not as a token\n * stream, so a client shows the typing dots while the request is out and\n * then reveals the reply's paragraphs one bubble at a time, dots between,\n * the way a person sends successive messages. The cadence is the embed\n * contract's, not one client's: the dashboard console and the widget on a\n * customer's page must feel the same, and the numbers here are `main`'s\n * widget, kept.\n */\nexport const REPLY_REVEAL = {\n /** Dots after the reply is in hand, before its first paragraph shows. */\n holdMs: 1260,\n /** Dots between one paragraph and the next. */\n gapMs: 1520,\n /** Spread on the gap, so a long reply does not tick like a clock. */\n jitterMs: 100,\n} as const\n\n/**\n * When each of `count` paragraphs shows, in ms after the reply arrived -\n * cumulative, so a client sets every timer at once. The first is the hold;\n * each next is a gap after the last, nudged by the jitter. `random` is\n * injectable for a test that wants the schedule exact.\n */\nexport function revealTimes(\n count: number,\n random: () => number = Math.random\n): number[] {\n const times: number[] = []\n let at = 0\n for (let index = 0; index < count; index++) {\n if (index === 0) {\n at += REPLY_REVEAL.holdMs\n } else {\n const jitter = Math.round((random() * 2 - 1) * REPLY_REVEAL.jitterMs)\n at += Math.max(0, REPLY_REVEAL.gapMs + jitter)\n }\n times.push(at)\n }\n return times\n}\n","import { useCallback, useEffect, useRef, useState } from \"preact/hooks\"\n\nimport { revealTimes } from \"@workspace/contracts/embed/reveal\"\nimport type {\n ChatTrigger,\n EmbedKind,\n WidgetPayload,\n} from \"@workspace/contracts/embed\"\n\nimport { ApiError, sendTurn, startSession, type Api } from \"../api\"\nimport { uuidv7 } from \"../events\"\nimport type { PageContext } from \"../host\"\n\n/**\n * One visitor's conversation with a surface's agent - the runtime twin of\n * the dashboard console (`agent-chat.tsx` + `use-reply-reveal.ts`), without\n * `useChat`: the session is minted on the FIRST send (no row for someone\n * who only looks), each turn is `POST /api/embed/chat`, and the reply -\n * which arrives whole - is metered out on the contract's cadence\n * (`REPLY_REVEAL`): dots while the request is out, the first paragraph\n * after the hold, dots again, the next. Stop cancels the request; Retry\n * re-sends the same turn as `regenerate-message`, which the server answers\n * afresh without storing the question twice.\n */\n\nexport interface Turn {\n id: string\n role: \"user\" | \"assistant\"\n /** The turn's paragraphs - one for a visitor, one per paragraph of a reply. */\n parts: string[]\n /** How many of `parts` are on screen; a visitor's turn shows whole. */\n shown: number\n}\n\nexport interface Conversation {\n turns: Turn[]\n /** A request is out, or a reply is still being revealed - the dots show. */\n busy: boolean\n /** What went wrong with the last turn, as a sentence, with Retry beside it. */\n error: string | null\n /** The conversation's id once a session exists - for the events it is about. */\n sessionId: string | null\n send: (text: string) => void\n retry: () => void\n stop: () => void\n}\n\ninterface Session {\n token: string\n conversationId: string\n}\n\nexport function useConversation(\n api: Api,\n payload: WidgetPayload,\n embed: { kind: EmbedKind; id: string },\n page: PageContext\n): Conversation {\n const [turns, setTurns] = useState<Turn[]>([])\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [sessionId, setSessionId] = useState<string | null>(null)\n\n const session = useRef<Session | null>(null)\n const controller = useRef<AbortController | null>(null)\n const timers = useRef<number[]>([])\n const lastSent = useRef<{ id: string; text: string } | null>(null)\n\n const clearTimers = () => {\n for (const timer of timers.current) window.clearTimeout(timer)\n timers.current = []\n }\n useEffect(() => () => clearTimers(), [])\n\n const ensureSession = useCallback(async (): Promise<Session> => {\n if (session.current) return session.current\n const opened = await startSession(api, {\n kind: embed.kind,\n id: embed.id,\n widgetId: embed.kind === \"group\" ? payload.id : undefined,\n landingUrl: page.href,\n referrer: page.referrer || undefined,\n utm: Object.keys(page.utm).length ? page.utm : undefined,\n })\n session.current = {\n token: opened.token,\n conversationId: opened.conversationId,\n }\n setSessionId(opened.conversationId)\n return session.current\n }, [api, embed.kind, embed.id, payload.id, page])\n\n const run = useCallback(\n async (message: { id: string; text: string }, trigger: ChatTrigger) => {\n controller.current?.abort()\n const abort = new AbortController()\n controller.current = abort\n clearTimers()\n setBusy(true)\n setError(null)\n try {\n const { token } = await ensureSession()\n const reply = await sendTurn(api, token, message, trigger, abort.signal)\n if (abort.signal.aborted) return\n const parts = reply.parts.filter((part) => part.trim())\n if (parts.length === 0) {\n throw new Error(\"The agent did not answer. Try again.\")\n }\n // Shown from zero, so the arrival itself never paints; each timer\n // reveals one more paragraph, the last one puts the dots away.\n setTurns((prev) => [\n ...prev,\n { id: reply.id, role: \"assistant\", parts, shown: 0 },\n ])\n timers.current = revealTimes(parts.length).map((at, index) =>\n window.setTimeout(() => {\n setTurns((prev) =>\n prev.map((turn) =>\n turn.id === reply.id ? { ...turn, shown: index + 1 } : turn\n )\n )\n if (index === parts.length - 1) setBusy(false)\n }, at)\n )\n } catch (caught) {\n if (abort.signal.aborted) return\n // A session the server refused (expired, ended) is minted anew on\n // the next send rather than sent again.\n if (\n caught instanceof ApiError &&\n (caught.status === 401 || caught.status === 409)\n ) {\n session.current = null\n }\n setBusy(false)\n // The server's words, or ours; a browser's (\"Failed to fetch\") are\n // for nobody, so a network fault gets a line of its own.\n setError(\n caught instanceof ApiError\n ? caught.message\n : caught instanceof TypeError\n ? \"Could not reach the agent. Try again.\"\n : caught instanceof Error && caught.message\n ? caught.message\n : \"Something went wrong. Try again.\"\n )\n }\n },\n [api, ensureSession]\n )\n\n const send = useCallback(\n (raw: string) => {\n const text = raw.trim().slice(0, 4000)\n if (!text || busy) return\n const message = { id: uuidv7(), text }\n lastSent.current = message\n setTurns((prev) => [\n ...prev,\n { id: message.id, role: \"user\", parts: [text], shown: 1 },\n ])\n void run(message, \"submit-message\")\n },\n [busy, run]\n )\n\n const retry = useCallback(() => {\n if (!lastSent.current || busy) return\n void run(lastSent.current, \"regenerate-message\")\n }, [busy, run])\n\n const stop = useCallback(() => {\n controller.current?.abort()\n controller.current = null\n clearTimers()\n // A reply cut mid-reveal shows whole: it is in hand, the wait is over.\n setTurns((prev) =>\n prev.map((turn) =>\n turn.role === \"assistant\" && turn.shown < turn.parts.length\n ? { ...turn, shown: turn.parts.length }\n : turn\n )\n )\n setBusy(false)\n }, [])\n\n return { turns, busy, error, sessionId, send, retry, stop }\n}\n","import type { ComponentChildren } from \"preact\"\nimport { useEffect, useRef, useState } from \"preact/hooks\"\n\nimport { type Look } from \"./appearance\"\n\n/**\n * The chat on a phone: a sheet up from the bottom edge instead of a card\n * floating beside a launcher there is no room for. It opens at half the\n * screen; a drag on the grab bar takes it to full height or, past the\n * bottom, away; a flick does the same faster. The visitor keeps the page\n * in view at half. The heights are percentages of a fixed element's\n * containing block - the viewport as it is, under a collapsing address\n * bar or a keyboard - not `vh`, which is the largest it ever gets.\n *\n * The snap is decided at release from where the sheet is and how fast it\n * moved: past three quarters is full, under a third is closed, a fast\n * flick wins over position. A pinned surface never closes - the drag\n * down settles at half again.\n */\n\n/** Live, unlike `PageContext.device` (read once) - a rotation re-renders. */\nexport function useMobile(): boolean {\n const query = \"(max-width: 639px)\"\n const [mobile, setMobile] = useState(\n () => window.matchMedia?.(query).matches ?? false\n )\n useEffect(() => {\n const media = window.matchMedia?.(query)\n if (!media) return\n const sync = () => setMobile(media.matches)\n media.addEventListener(\"change\", sync)\n return () => media.removeEventListener(\"change\", sync)\n }, [])\n return mobile\n}\n\ntype Snap = \"half\" | \"full\"\n\n/** A flick this fast (px/ms) decides on its own, whatever the position. */\nconst FLICK = 0.5\nconst MIN_HEIGHT = 120\n\n/** What `100%` on the sheet is: the viewport less any scrollbar. */\nconst viewportHeight = () => document.documentElement.clientHeight\n\nexport function Drawer({\n look,\n pinned,\n onClose,\n children,\n}: {\n look: Look\n /** No close: a drag down settles at half, and there is no way off. */\n pinned: boolean\n onClose: () => void\n children: ComponentChildren\n}) {\n const [snap, setSnap] = useState<Snap>(\"half\")\n /** The height in px while a finger holds it; null between drags. */\n const [held, setHeld] = useState<number | null>(null)\n const sheet = useRef<HTMLDivElement>(null)\n const drag = useRef<{\n startY: number\n startHeight: number\n lastY: number\n lastAt: number\n velocity: number\n } | null>(null)\n\n const onPointerDown = (event: PointerEvent) => {\n const el = sheet.current\n if (!el) return\n ;(event.currentTarget as HTMLElement).setPointerCapture(event.pointerId)\n drag.current = {\n startY: event.clientY,\n startHeight: el.getBoundingClientRect().height,\n lastY: event.clientY,\n lastAt: event.timeStamp,\n velocity: 0,\n }\n setHeld(drag.current.startHeight)\n }\n\n const onPointerMove = (event: PointerEvent) => {\n const d = drag.current\n if (!d) return\n const dt = event.timeStamp - d.lastAt\n if (dt > 0) d.velocity = (event.clientY - d.lastY) / dt\n d.lastY = event.clientY\n d.lastAt = event.timeStamp\n const next = d.startHeight + (d.startY - event.clientY)\n setHeld(Math.max(MIN_HEIGHT, Math.min(viewportHeight(), next)))\n }\n\n const onPointerUp = () => {\n const d = drag.current\n if (!d) return\n drag.current = null\n const height = Math.max(\n MIN_HEIGHT,\n Math.min(viewportHeight(), d.startHeight + (d.startY - d.lastY))\n )\n const vh = viewportHeight()\n // Flicks first: down from full is half, down from half is away, up is full.\n let next: Snap | \"closed\"\n if (d.velocity < -FLICK) next = \"full\"\n else if (d.velocity > FLICK) next = snap === \"full\" ? \"half\" : \"closed\"\n else if (height > vh * 0.75) next = \"full\"\n else if (height < vh * 0.3) next = \"closed\"\n else next = \"half\"\n setHeld(null)\n if (next === \"closed\") {\n if (pinned) setSnap(\"half\")\n else onClose()\n return\n }\n setSnap(next)\n }\n\n const { ink, surfaceBg, rad } = look\n const full = snap === \"full\" && held === null\n const classes = [\n \"uq-fixed uq-drawer uq-slide\",\n full ? \"uq-drawer-full\" : \"uq-drawer-half\",\n held !== null && \"uq-drawer-held\",\n ]\n\n return (\n <div\n ref={sheet}\n class={classes.filter(Boolean).join(\" \")}\n role=\"dialog\"\n aria-modal=\"false\"\n style={{\n height: held !== null ? held : undefined,\n borderRadius: full ? 0 : `${rad}px ${rad}px 0 0`,\n borderTop: `1px solid rgba(${ink},.12)`,\n background: surfaceBg,\n boxShadow: \"0 -12px 40px rgba(0,0,0,.18)\",\n }}\n >\n <div\n class=\"uq-grab\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n aria-label={full ? \"Drag down to shrink or close\" : \"Drag up to expand\"}\n style={{ background: surfaceBg }}\n >\n <span style={{ background: `rgba(${ink},.25)` }} />\n </div>\n {children}\n </div>\n )\n}\n","/**\n * The numbers a chat PRESET draws with (`CHAT_PRESETS`), in one place the\n * dashboard preview and the embed runtime both import - so the surface on a\n * customer's page renders the way the editor promised by construction, not\n * by keeping two copies in step. Pure constants: no zod, no React, nothing\n * the runtime bundle would have to carry.\n *\n * `facebook-messenger` is `main`'s preset carried across (2026-09-05): a\n * self-contained Messenger look - avatar launcher with a badge, a white\n * panel with a plain header, gradient visitor bubbles, an \"Aa\" composer -\n * that ignores the accent, alpha and radius; only placement and the\n * customer's css still apply.\n */\nexport const MESSENGER = {\n /** Solid purple - the launcher badge, the launcher's shadow tint. */\n accent: \"#7B5BFF\",\n /** The visitor's bubbles, the CTA pill, the launcher without an avatar. */\n gradient: \"linear-gradient(135deg,#00B2FF 0%,#006AFF 38%,#8E5BFF 100%)\",\n /** Facebook blue - the call buttons and the send glyph. */\n blue: \"#0084FF\",\n /** The panel's ground and the agent's bubble, on a light and a dark host. */\n surface: { light: \"#ffffff\", dark: \"#242526\" },\n bubble: { light: \"#f5f5f5\", dark: \"#404040\" },\n /** Secondary text - the header buttons, the initials, the composer hint. */\n muted: { light: \"#8e8e8e\", dark: \"#a8a8a8\" },\n border: { light: \"rgba(0,0,0,.1)\", dark: \"rgba(255,255,255,.12)\" },\n\n panelWidth: 372,\n panelHeight: 520,\n panelRadius: 24,\n /** Between the launcher's top and the panel's bottom. */\n panelGap: 14,\n panelShadow: \"0 8px 32px rgba(0,0,0,.16)\",\n\n launcherSize: 60,\n launcherShadow: \"0 6px 20px rgba(123,91,255,.4)\",\n /** The Messenger mark on the launcher's corner - a 24-box fill path. */\n badgeSize: 20,\n logo: \"M12 2C6.48 2 2 6.18 2 11.32c0 2.93 1.45 5.55 3.7 7.27v3.4l3.39-1.86a10.5 10.5 0 0 0 2.91.41c5.52 0 10-4.18 10-9.22S17.52 2 12 2Zm1.06 12.42-2.55-2.72-4.97 2.72 5.46-5.8 2.61 2.72 4.91-2.72-5.46 5.8Z\",\n\n headerAvatar: 40,\n headerButton: 28,\n headerIcon: 18,\n nameFont: 15,\n\n /** Beside the first bubble of an agent's run. */\n avatarSize: 28,\n bubbleRadius: 18,\n bubbleFont: 14,\n bubblePadding: \"6px 12px\",\n bubbleMaxWidth: \"78%\",\n\n ctaShadow: \"0 4px 12px rgba(123,91,255,.32)\",\n\n composerPlaceholder: \"Aa\",\n composerRadius: 24,\n composerHeight: 36,\n sendSize: 36,\n sendIcon: 20,\n} as const\n","import { useEffect, useRef, useState } from \"preact/hooks\"\n\nimport type { WidgetConfig } from \"@workspace/contracts/embed\"\n\n/**\n * What the chat variants (`chat.tsx`) and the Messenger preset\n * (`chat-messenger.tsx`) both lean on: the config type, the composer's\n * rotating hint, the column that follows the newest turn.\n */\n\nexport type ChatConfig = Extract<WidgetConfig, { type: \"chat\" }>\n\nconst SPOTLIGHT_MS = 3600\n\nexport const welcomeOf = (config: ChatConfig) =>\n config.welcome || \"Hi! Ask me anything before you buy.\"\n\n/**\n * The composer's rotating hint: a spotlight every 3.6 s, else the\n * placeholder, else `fallback` - the surface's own resting words.\n */\nexport function useComposerHint(\n config: ChatConfig,\n fallback = \"Type your message…\"\n) {\n const spotlights = config.spotlights.filter((s) => s.trim())\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (spotlights.length < 2) return\n const id = window.setInterval(() => setTick((t) => t + 1), SPOTLIGHT_MS)\n return () => window.clearInterval(id)\n }, [spotlights.length])\n const placeholder = config.placeholder || fallback\n return spotlights.length ? spotlights[tick % spotlights.length]! : placeholder\n}\n\n/** Keeps the newest turn in view as the column grows. */\nexport function useStickToBottom(deps: unknown[]) {\n const column = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const el = column.current\n if (el) el.scrollTop = el.scrollHeight\n }, deps)\n return column\n}\n","import type { ComponentChildren, JSX } from \"preact\"\nimport { useEffect, useRef, useState } from \"preact/hooks\"\n\nimport type { WidgetPayload } from \"@workspace/contracts/embed\"\n// The dedicated entry, like `embed/reveal`: the index would drag zod in.\nimport { MESSENGER as M } from \"@workspace/contracts/embed/presets\"\n\nimport { partClass, type Look } from \"../appearance\"\nimport type { Conversation } from \"../chat/use-conversation\"\nimport { Drawer } from \"../drawer\"\nimport {\n ChevronDown,\n ExternalLink,\n Info,\n MessengerLogo,\n Minus,\n Phone,\n Send,\n Video,\n X,\n} from \"../icons\"\nimport {\n type ChatConfig,\n useComposerHint,\n useStickToBottom,\n welcomeOf,\n} from \"./chat-shared\"\n\n/**\n * The chat bubble in Messenger's chrome (`preset: \"facebook-messenger\"`),\n * the preview's messenger branch (`widget-preview.tsx`) carried over\n * number for number through `MESSENGER`: the avatar launcher with its\n * badge, the 372 x 520 panel with a plain header, grey agent bubbles with\n * the avatar on the first of a run, gradient visitor bubbles, the \"Aa\"\n * composer with a blue paper plane. The accent, alpha and radius are\n * inert; placement, the content and the customer's css still apply, on\n * the same part names as the default bubble. The call and info buttons\n * are the chrome, disabled - not features.\n */\n\ninterface Props {\n payload: WidgetPayload\n config: ChatConfig\n look: Look\n chat: Conversation\n mobile: boolean\n focus: number\n open: boolean\n setOpen: (open: boolean) => void\n pinned: boolean\n onCta: () => void\n}\n\n/** The preset's palette for the host's light or dark. */\nfunction paletteOf(hostDark: boolean) {\n const mode = hostDark ? \"dark\" : \"light\"\n return {\n surface: M.surface[mode],\n bubble: M.bubble[mode],\n muted: M.muted[mode],\n border: M.border[mode],\n }\n}\ntype Palette = ReturnType<typeof paletteOf>\n\nconst round = (\n size: number,\n extra: JSX.CSSProperties = {}\n): JSX.CSSProperties => ({\n width: size,\n height: size,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n ...extra,\n})\n\n/** The agent's face: their picture, else their initial - on grey, or on `fallback`. */\nfunction Avatar({\n payload,\n size,\n font,\n palette,\n fallback,\n}: {\n payload: WidgetPayload\n size: number\n font: number\n palette: Palette\n fallback?: JSX.CSSProperties\n}) {\n const name = payload.agent?.name ?? null\n const url = payload.agent?.avatarUrl ?? null\n if (url) {\n return (\n <img\n src={url}\n alt=\"\"\n width={size}\n height={size}\n style={round(size, { objectFit: \"cover\" })}\n />\n )\n }\n return (\n <span\n style={round(size, {\n background: palette.bubble,\n color: palette.muted,\n fontSize: font,\n fontWeight: 600,\n ...fallback,\n })}\n >\n {name ? name.trim().charAt(0).toUpperCase() : \"A\"}\n </span>\n )\n}\n\n/** One bubble; an agent's first of a run carries the avatar beside it. */\nfunction Bubble({\n text,\n mine,\n runStart,\n look,\n config,\n payload,\n palette,\n children,\n}: {\n text?: string\n mine: boolean\n runStart: boolean\n look: Look\n config: ChatConfig\n payload: WidgetPayload\n palette: Palette\n children?: ComponentChildren\n}) {\n return (\n <div\n class=\"uq-rise\"\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n gap: 6,\n justifyContent: mine ? \"flex-end\" : \"flex-start\",\n marginTop: runStart ? 6 : 2,\n }}\n >\n {!mine &&\n (runStart ? (\n <Avatar\n payload={payload}\n size={M.avatarSize}\n font={12}\n palette={palette}\n />\n ) : (\n <span style={{ width: M.avatarSize, flexShrink: 0 }} />\n ))}\n <div\n class={partClass(config, mine ? \"userMessage\" : \"botMessage\")}\n style={{\n maxWidth: M.bubbleMaxWidth,\n padding: children ? \"8px 12px\" : M.bubblePadding,\n borderRadius: M.bubbleRadius,\n background: mine ? M.gradient : palette.bubble,\n color: mine ? \"#fff\" : `rgb(${look.ink})`,\n fontSize: M.bubbleFont,\n lineHeight: 1.375,\n whiteSpace: \"pre-wrap\",\n overflowWrap: \"anywhere\",\n }}\n >\n {children ?? text}\n </div>\n </div>\n )\n}\n\n/** The panel's chrome, header to composer; `fill` is the phone's sheet. */\nfunction Panel({\n payload,\n config,\n look,\n chat,\n focus,\n onCta,\n mobile,\n fill = false,\n onMinimize,\n onClose,\n}: {\n payload: WidgetPayload\n config: ChatConfig\n look: Look\n chat: Conversation\n focus: number\n onCta: () => void\n mobile: boolean\n fill?: boolean\n onMinimize?: () => void\n onClose?: () => void\n}) {\n const palette = paletteOf(look.hostDark)\n const { surface, bubble, muted, border } = palette\n const hint = useComposerHint(config, M.composerPlaceholder)\n const name = payload.agent?.name ?? null\n const live = Boolean(payload.agent?.live)\n const column = useStickToBottom([chat.turns, chat.busy, chat.error])\n const [value, setValue] = useState(\"\")\n const input = useRef<HTMLInputElement>(null)\n useEffect(() => {\n if (focus > 0) input.current?.focus()\n }, [focus])\n const submit = (event: Event) => {\n event.preventDefault()\n if (!live) return\n chat.send(value)\n setValue(\"\")\n }\n const cta = config.cta?.href?.trim() ? config.cta : null\n\n // The turns as one flat list so an agent's run knows its first bubble.\n const bubbles: { key: string; text: string; mine: boolean }[] = [\n { key: \"welcome\", text: welcomeOf(config), mine: false },\n ]\n for (const turn of chat.turns) {\n if (turn.role === \"user\") {\n bubbles.push({ key: turn.id, text: turn.parts[0] ?? \"\", mine: true })\n } else {\n turn.parts.slice(0, turn.shown).forEach((part, index) => {\n bubbles.push({ key: `${turn.id}:${index}`, text: part, mine: false })\n })\n }\n }\n const last = bubbles[bubbles.length - 1]!\n\n const headerButton = (\n icon: ComponentChildren,\n label: string,\n color: string,\n onClick?: () => void,\n part?: string\n ) => (\n <button\n type=\"button\"\n class={part ? partClass(config, part) : undefined}\n onClick={onClick}\n disabled={!onClick}\n aria-label={label}\n style={round(mobile ? 36 : M.headerButton, {\n color,\n opacity: onClick ? 1 : 0.6,\n })}\n >\n {icon}\n </button>\n )\n const icon = M.headerIcon\n\n return (\n <div\n class={partClass(config, \"panel\")}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n borderRadius: fill ? 0 : M.panelRadius,\n overflow: \"hidden\",\n border: fill ? undefined : `1px solid ${border}`,\n boxShadow: fill ? undefined : M.panelShadow,\n background: surface,\n color: `rgb(${look.ink})`,\n ...(fill\n ? { flex: 1, minHeight: 0 }\n : {\n height: M.panelHeight,\n maxHeight: `calc(100vh - ${look.offsetY + M.launcherSize + M.panelGap + 12}px)`,\n }),\n }}\n >\n <div\n class={partClass(config, \"header\")}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"10px 12px\",\n borderBottom: `1px solid ${border}`,\n }}\n >\n <Avatar\n payload={payload}\n size={M.headerAvatar}\n font={14}\n palette={palette}\n />\n <span\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n }}\n >\n <span\n style={{\n fontSize: M.nameFont,\n fontWeight: 600,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {name ? name.split(\"—\")[0]!.trim() : \"Chat\"}\n </span>\n <span style={{ color: muted, opacity: 0.7, display: \"flex\" }}>\n <ChevronDown size={16} />\n </span>\n </span>\n {headerButton(<Phone size={icon} />, \"Call (unavailable)\", M.blue)}\n {headerButton(\n <Video size={icon} />,\n \"Video call (unavailable)\",\n M.blue\n )}\n {headerButton(<Info size={icon} />, \"Details (unavailable)\", muted)}\n {onMinimize &&\n headerButton(\n <Minus size={icon} />,\n \"Minimize chat\",\n muted,\n onMinimize\n )}\n {onClose &&\n headerButton(\n <X size={icon} />,\n \"Close chat\",\n muted,\n onClose,\n \"close\"\n )}\n </div>\n <div\n ref={column}\n style={{\n flex: 1,\n minHeight: 0,\n padding: \"6px 12px 12px\",\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n {bubbles.map((b, index) => (\n <Bubble\n key={b.key}\n text={b.text}\n mine={b.mine}\n runStart={index === 0 || bubbles[index - 1]!.mine !== b.mine}\n look={look}\n config={config}\n payload={payload}\n palette={palette}\n />\n ))}\n {chat.busy && (\n <Bubble\n mine={false}\n runStart={last.mine}\n look={look}\n config={config}\n payload={payload}\n palette={palette}\n >\n <span class=\"uq-dots\" aria-label=\"Typing\" style={{ gap: 4 }}>\n <span style={{ width: 6, height: 6 }} />\n <span style={{ width: 6, height: 6 }} />\n <span style={{ width: 6, height: 6 }} />\n </span>\n </Bubble>\n )}\n {chat.error && (\n <div\n class=\"uq-error uq-fade\"\n style={{\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n paddingLeft: M.avatarSize + 6,\n fontSize: 12,\n color: muted,\n }}\n >\n <span>{chat.error}</span>\n <button\n type=\"button\"\n onClick={chat.retry}\n style={{\n color: M.blue,\n fontWeight: 500,\n textDecoration: \"underline\",\n }}\n >\n Retry\n </button>\n </div>\n )}\n </div>\n {cta && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"8px 12px\",\n }}\n >\n <a\n class=\"uq-cta\"\n href={cta.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onCta}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"8px 16px\",\n borderRadius: 999,\n background: M.gradient,\n color: \"#fff\",\n fontSize: 14,\n fontWeight: 600,\n boxShadow: M.ctaShadow,\n }}\n >\n {cta.label || \"Learn more\"}\n <ExternalLink size={16} />\n </a>\n </div>\n )}\n <form\n class={partClass(config, \"composer\")}\n onSubmit={submit}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n padding: 8,\n borderTop: `1px solid ${border}`,\n }}\n >\n <input\n ref={input}\n type=\"text\"\n value={value}\n onInput={(event) =>\n setValue((event.target as HTMLInputElement).value)\n }\n placeholder={hint}\n disabled={!live}\n maxLength={4000}\n aria-label=\"Message\"\n autoComplete=\"off\"\n style={{\n flex: 1,\n minHeight: M.composerHeight,\n padding: \"0 12px\",\n borderRadius: M.composerRadius,\n background: bubble,\n color: `rgb(${look.ink})`,\n // 16 on a phone so iOS does not zoom the page into the field.\n fontSize: mobile ? 16 : 14,\n \"--uq-placeholder\": muted,\n }}\n />\n {chat.busy ? (\n <button\n type=\"button\"\n class={partClass(config, \"sendButton\")}\n onClick={chat.stop}\n aria-label=\"Stop\"\n style={round(M.sendSize, { color: M.blue })}\n >\n <span\n style={{\n width: 10,\n height: 10,\n background: \"currentColor\",\n borderRadius: 2,\n }}\n />\n </button>\n ) : (\n <button\n type=\"submit\"\n class={partClass(config, \"sendButton\")}\n disabled={!live || !value.trim()}\n aria-label=\"Send\"\n style={round(M.sendSize, {\n color: M.blue,\n opacity: live && value.trim() ? 1 : 0.5,\n })}\n >\n <Send size={M.sendIcon} />\n </button>\n )}\n </form>\n </div>\n )\n}\n\nexport function Messenger({\n payload,\n config,\n look,\n chat,\n mobile,\n focus,\n open,\n setOpen,\n pinned,\n onCta,\n}: Props) {\n const palette = paletteOf(look.hostDark)\n const { side, offsetY } = look\n const close = pinned ? undefined : () => setOpen(false)\n\n // On a phone the open panel is a sheet (`drawer.tsx`) in the preset's\n // own surface colour and corners; the launcher waits under it.\n if (open && mobile) {\n const sheetLook = {\n ...look,\n surfaceBg: palette.surface,\n rad: M.panelRadius,\n }\n return (\n <Drawer look={sheetLook} pinned={pinned} onClose={() => setOpen(false)}>\n <Panel\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n focus={focus}\n onCta={onCta}\n mobile\n fill\n onClose={close}\n />\n </Drawer>\n )\n }\n\n return (\n <>\n {open && (\n <div\n class=\"uq-fixed uq-rise\"\n style={{\n bottom: offsetY + M.launcherSize + M.panelGap,\n width: M.panelWidth,\n ...side,\n }}\n >\n <Panel\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n focus={focus}\n onCta={onCta}\n mobile={false}\n onMinimize={close}\n onClose={close}\n />\n </div>\n )}\n <button\n type=\"button\"\n class={partClass(config, \"launcher\", \"uq-fixed\")}\n aria-label={open ? \"Close chat\" : \"Open chat\"}\n aria-expanded={open}\n onClick={() => {\n if (open && pinned) return\n setOpen(!open)\n }}\n style={{\n bottom: offsetY,\n ...round(M.launcherSize, { boxShadow: M.launcherShadow }),\n ...side,\n }}\n >\n <Avatar\n payload={payload}\n size={M.launcherSize}\n font={16}\n palette={palette}\n fallback={{ background: M.gradient, color: \"#fff\" }}\n />\n {open ? (\n // Open: the avatar dims under a chevron - \"put it away\".\n <span\n style={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n background: \"rgba(0,0,0,.45)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#fff\",\n }}\n >\n <ChevronDown size={28} />\n </span>\n ) : (\n <span\n style={{\n position: \"absolute\",\n right: -4,\n bottom: -4,\n ...round(M.badgeSize, {\n background: M.accent,\n color: \"#fff\",\n boxShadow: `0 0 0 2px ${palette.surface}`,\n }),\n }}\n >\n <MessengerLogo size={12} d={M.logo} />\n </span>\n )}\n </button>\n </>\n )\n}\n","import type { JSX } from \"preact\"\nimport { useEffect, useRef, useState } from \"preact/hooks\"\n\nimport type { WidgetPayload } from \"@workspace/contracts/embed\"\n\nimport { inkOn, partClass, type Look } from \"../appearance\"\nimport { useConversation, type Conversation } from \"../chat/use-conversation\"\nimport { Drawer, useMobile } from \"../drawer\"\nimport { ArrowRight, Sparkles, X } from \"../icons\"\nimport type { SurfaceProps } from \"../surface\"\nimport { Messenger } from \"./chat-messenger\"\nimport {\n type ChatConfig,\n useComposerHint,\n useStickToBottom,\n welcomeOf,\n} from \"./chat-shared\"\n\n/**\n * The chat surface, in its four variants, with the preview's inline styles\n * (`widget-preview.tsx`) carried over number for number - the bubble, the\n * chatbar, the box and the stream look on a customer's page the way the\n * editor promised. What the preview mocks (three fixed messages, a hint\n * that only rotates) is live here: a real composer, the visitor's turns,\n * the agent's reply revealed a paragraph at a time, the dots between.\n * The bubble under the Messenger preset is `chat-messenger.tsx`.\n */\n\n/** One message bubble - the visitor's (`mine`) or the agent's. */\nfunction Bubble({\n text,\n mine,\n onDark,\n look,\n config,\n children,\n}: {\n text?: string\n mine: boolean\n onDark: boolean\n look: Look\n config: ChatConfig\n children?: JSX.Element\n}) {\n const msgInk = inkOn(onDark)\n const { isGlass, accentFill, accentText, rad } = look\n return (\n <div\n class={partClass(config, mine ? \"userMessage\" : \"botMessage\", \"uq-rise\")}\n style={{\n alignSelf: mine ? \"flex-end\" : \"flex-start\",\n maxWidth: mine ? \"78%\" : \"84%\",\n padding: \"8px 10px\",\n borderRadius: rad,\n background: mine\n ? accentFill\n : isGlass\n ? \"rgba(10,12,18,.42)\"\n : `rgba(${msgInk},${onDark ? 0.1 : 0.06})`,\n color: mine ? accentText : isGlass ? \"#fff\" : `rgb(${msgInk})`,\n backdropFilter: !mine && isGlass ? \"blur(6px)\" : undefined,\n fontSize: 12,\n lineHeight: 1.45,\n textShadow: !mine && isGlass ? \"0 1px 2px rgba(0,0,0,.5)\" : undefined,\n whiteSpace: \"pre-wrap\",\n overflowWrap: \"anywhere\",\n }}\n >\n {children ?? text}\n </div>\n )\n}\n\n/** The agent is typing: three dots in an agent bubble. */\nconst Dots = (props: { onDark: boolean; look: Look; config: ChatConfig }) => (\n <Bubble mine={false} {...props}>\n <span class=\"uq-dots\" aria-label=\"Typing\">\n <span />\n <span />\n <span />\n </span>\n </Bubble>\n)\n\n/** The pill above the composer - opens the CTA's URL in a new tab. */\nfunction CtaPill({\n config,\n look,\n onClick,\n}: {\n config: ChatConfig\n look: Look\n onClick: () => void\n}) {\n const cta = config.cta?.href?.trim() ? config.cta : null\n if (!cta) return null\n return (\n <a\n class=\"uq-cta\"\n href={cta.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onClick}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"9px 12px\",\n borderRadius: look.rad,\n background: look.accentFill,\n color: look.accentText,\n fontSize: 12,\n fontWeight: 500,\n }}\n >\n {cta.label || \"Learn more\"}\n </a>\n )\n}\n\n/** The composer: the hint as placeholder, the arrow as the send button. */\nfunction Composer({\n config,\n look,\n onDark,\n hint,\n chat,\n disabled,\n focus,\n}: {\n config: ChatConfig\n look: Look\n onDark: boolean\n hint: string\n chat: Conversation\n disabled: boolean\n /** Bumped to put the caret in the field - a rule's `autoStart`. */\n focus: number\n}) {\n const cInk = inkOn(onDark)\n const { isGlass, accentFill, accentText, rad } = look\n const [value, setValue] = useState(\"\")\n const input = useRef<HTMLInputElement>(null)\n useEffect(() => {\n if (focus > 0) input.current?.focus()\n }, [focus])\n\n const submit = (event: Event) => {\n event.preventDefault()\n if (disabled) return\n chat.send(value)\n setValue(\"\")\n }\n const hintColor = isGlass\n ? \"rgba(255,255,255,.75)\"\n : `rgba(${cInk},${onDark ? 0.6 : 0.45})`\n\n return (\n <form\n class={partClass(config, \"composer\")}\n onSubmit={submit}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"7px 8px 7px 11px\",\n borderRadius: rad,\n border: isGlass\n ? \"1px solid rgba(255,255,255,.35)\"\n : `1px solid rgba(${cInk},${onDark ? 0.28 : 0.12})`,\n background: isGlass\n ? \"rgba(10,12,18,.3)\"\n : `rgba(${cInk},${onDark ? 0.08 : 0.02})`,\n backdropFilter: isGlass || onDark ? \"blur(6px)\" : undefined,\n }}\n >\n <input\n ref={input}\n type=\"text\"\n value={value}\n onInput={(event) => setValue((event.target as HTMLInputElement).value)}\n placeholder={hint || \"Message…\"}\n disabled={disabled}\n maxLength={4000}\n aria-label=\"Message\"\n autoComplete=\"off\"\n style={{\n flex: 1,\n fontSize: 11.5,\n color: isGlass ? \"#fff\" : `rgb(${cInk})`,\n \"--uq-placeholder\": hintColor,\n }}\n />\n {chat.busy ? (\n <button\n type=\"button\"\n class={partClass(config, \"sendButton\")}\n onClick={chat.stop}\n aria-label=\"Stop\"\n style={{\n width: 24,\n height: 24,\n borderRadius: rad,\n background: accentFill,\n color: accentText,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <span\n style={{\n width: 8,\n height: 8,\n background: \"currentColor\",\n borderRadius: 1,\n }}\n />\n </button>\n ) : (\n <button\n type=\"submit\"\n class={partClass(config, \"sendButton\")}\n disabled={disabled}\n aria-label=\"Send\"\n style={{\n width: 24,\n height: 24,\n borderRadius: rad,\n background: accentFill,\n color: accentText,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <ArrowRight size={13} />\n </button>\n )}\n </form>\n )\n}\n\n/** The welcome, the turns so far, the dots, the error line - in order. */\nfunction Turns({\n welcome,\n chat,\n onDark,\n look,\n config,\n}: {\n welcome: string\n chat: Conversation\n onDark: boolean\n look: Look\n config: ChatConfig\n}) {\n const ink = inkOn(onDark)\n return (\n <>\n <Bubble\n text={welcome}\n mine={false}\n onDark={onDark}\n look={look}\n config={config}\n />\n {chat.turns.map((turn) =>\n turn.role === \"user\" ? (\n <Bubble\n key={turn.id}\n text={turn.parts[0]}\n mine\n onDark={onDark}\n look={look}\n config={config}\n />\n ) : (\n turn.parts\n .slice(0, turn.shown)\n .map((part, index) => (\n <Bubble\n key={`${turn.id}:${index}`}\n text={part}\n mine={false}\n onDark={onDark}\n look={look}\n config={config}\n />\n ))\n )\n )}\n {chat.busy && <Dots onDark={onDark} look={look} config={config} />}\n {chat.error && (\n <div\n class=\"uq-error uq-fade\"\n style={{\n alignSelf: \"flex-start\",\n display: \"flex\",\n gap: 8,\n fontSize: 11.5,\n color: look.isGlass ? \"rgba(255,255,255,.8)\" : `rgba(${ink},.6)`,\n textShadow: look.isGlass ? \"0 1px 2px rgba(0,0,0,.5)\" : undefined,\n }}\n >\n <span>{chat.error}</span>\n <button\n type=\"button\"\n onClick={chat.retry}\n style={{\n color: look.isGlass ? \"#fff\" : look.accent,\n fontWeight: 500,\n textDecoration: \"underline\",\n }}\n >\n Retry\n </button>\n </div>\n )}\n </>\n )\n}\n\n/**\n * The card: header, the message column, the CTA and the composer. `fill`\n * is the phone's sheet (`drawer.tsx`): no card edge, the column takes\n * whatever height the sheet has, and the header carries the close the\n * launcher (under the sheet) can no longer offer.\n */\nfunction Panel({\n payload,\n config,\n look,\n chat,\n shadow,\n hint,\n focus,\n onCta,\n fill = false,\n onClose,\n}: {\n payload: WidgetPayload\n config: ChatConfig\n look: Look\n chat: Conversation\n shadow: boolean\n hint: string\n focus: number\n onCta: () => void\n fill?: boolean\n onClose?: () => void\n}) {\n const { ink, surfaceBg, hostDark, accentFill, accentText, rad } = look\n const name = payload.agent?.name ?? null\n const initial = name ? name.trim().charAt(0).toUpperCase() : \"A\"\n const welcome = welcomeOf(config)\n const column = useStickToBottom([chat.turns, chat.busy, chat.error])\n const live = Boolean(payload.agent?.live)\n\n return (\n <div\n class={partClass(config, \"panel\")}\n style={{\n width: \"100%\",\n borderRadius: fill ? 0 : rad,\n overflow: \"hidden\",\n border: fill ? undefined : `1px solid rgba(${ink},.12)`,\n boxShadow: shadow ? \"0 18px 44px rgba(0,0,0,.16)\" : undefined,\n background: surfaceBg,\n ...(fill\n ? {\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n }\n : {}),\n }}\n >\n <div\n class={partClass(config, \"header\")}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"10px 12px\",\n background: accentFill,\n color: accentText,\n }}\n >\n <span\n style={{\n width: 20,\n height: 20,\n borderRadius: \"50%\",\n background: \"rgba(255,255,255,.25)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 600,\n color: accentText,\n }}\n >\n {initial}\n </span>\n <span style={{ fontSize: 12, fontWeight: 500 }}>\n {name ? name.split(\"—\")[0]!.trim() : \"Chat\"}\n </span>\n <span style={{ marginLeft: \"auto\", fontSize: 10, opacity: 0.8 }}>\n {live ? \"online\" : \"offline\"}\n </span>\n {onClose && (\n <button\n type=\"button\"\n class={partClass(config, \"close\")}\n onClick={onClose}\n aria-label=\"Close chat\"\n style={{\n width: 28,\n height: 28,\n marginRight: -6,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: accentText,\n flexShrink: 0,\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n <div\n ref={column}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 7,\n padding: 12,\n background: surfaceBg,\n maxHeight: fill ? undefined : \"min(58vh, 380px)\",\n flex: fill ? 1 : undefined,\n minHeight: fill ? 0 : undefined,\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n <Turns\n welcome={welcome}\n chat={chat}\n onDark={hostDark}\n look={look}\n config={config}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n padding: \"0 12px 12px\",\n background: surfaceBg,\n }}\n >\n <CtaPill config={config} look={look} onClick={onCta} />\n <Composer\n config={config}\n look={look}\n onDark={hostDark}\n hint={hint}\n chat={chat}\n disabled={!live}\n focus={focus}\n />\n </div>\n </div>\n )\n}\n\ninterface VariantProps {\n payload: WidgetPayload\n config: ChatConfig\n look: Look\n chat: Conversation\n hint: string\n mobile: boolean\n focus: number\n live: boolean\n welcome: string\n onCta: () => void\n}\n\nexport function ChatSurface({\n payload,\n look,\n api,\n embed,\n page,\n reporter,\n open,\n setOpen,\n pinned,\n focus,\n}: SurfaceProps) {\n const config = payload.config as ChatConfig\n const chat = useConversation(api, payload, embed, page)\n const hint = useComposerHint(config)\n const { accentFill, accentText, rad, side, offsetY } = look\n const mobile = useMobile()\n const live = Boolean(payload.agent?.live)\n const welcome = welcomeOf(config)\n\n const onCta = () =>\n reporter.report(\"cta.clicked\", {\n widgetId: payload.id,\n sessionId: chat.sessionId ?? undefined,\n payload: { href: config.cta?.href },\n })\n\n // The preset owns the bubble's whole chrome; the other variants ignore it.\n if (look.isMessenger) {\n return (\n <Messenger\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n mobile={mobile}\n focus={focus}\n open={open}\n setOpen={setOpen}\n pinned={pinned}\n onCta={onCta}\n />\n )\n }\n\n if (config.variant === \"bubble\") {\n // On a phone the open panel is a sheet from the bottom edge and covers\n // the launcher; the sheet's header and its grab bar close it instead.\n if (open && mobile) {\n return (\n <Drawer look={look} pinned={pinned} onClose={() => setOpen(false)}>\n <Panel\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n shadow={false}\n hint={hint}\n focus={focus}\n onCta={onCta}\n fill\n onClose={pinned ? undefined : () => setOpen(false)}\n />\n </Drawer>\n )\n }\n return (\n <>\n {open && (\n <div\n class=\"uq-fixed uq-rise\"\n style={{ bottom: offsetY + 54, width: 296, ...side }}\n >\n <Panel\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n shadow\n hint={hint}\n focus={focus}\n onCta={onCta}\n />\n </div>\n )}\n <button\n type=\"button\"\n class={partClass(config, \"launcher\", \"uq-fixed\")}\n aria-label={open ? \"Close chat\" : \"Open chat\"}\n aria-expanded={open}\n onClick={() => {\n if (open && pinned) return\n setOpen(!open)\n }}\n style={{\n bottom: offsetY,\n width: 44,\n height: 44,\n borderRadius: Math.min(22, rad * 2),\n background: accentFill,\n color: accentText,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n boxShadow: \"0 10px 26px rgba(0,0,0,.24)\",\n ...side,\n }}\n >\n <Sparkles size={20} />\n </button>\n </>\n )\n }\n\n if (config.variant === \"box\") {\n return (\n <div class=\"uq-inline\">\n <Panel\n payload={payload}\n config={config}\n look={look}\n chat={chat}\n shadow={false}\n hint={hint}\n focus={focus}\n onCta={onCta}\n />\n </div>\n )\n }\n\n const variantProps = {\n payload,\n config,\n look,\n chat,\n hint,\n mobile,\n focus,\n live,\n welcome,\n onCta,\n }\n if (config.variant === \"chatbar\") return <Chatbar {...variantProps} />\n return <Stream {...variantProps} />\n}\n\n/** The chatbar: a strip along the bottom; the turns rise above its row once a visitor writes. */\nfunction Chatbar({\n config,\n look,\n chat,\n hint,\n mobile,\n focus,\n live,\n welcome,\n}: VariantProps) {\n const { ink, hostDark, accentFill, accentText, rad } = look\n const column = useStickToBottom([chat.turns, chat.busy, chat.error])\n const started = chat.turns.length > 0\n return (\n <div\n class={partClass(config, \"panel\", \"uq-fixed\")}\n style={{\n left: 0,\n right: 0,\n bottom: 0,\n padding: \"10px 12px\",\n background: hostDark ? \"rgba(24,27,34,.97)\" : \"rgba(255,255,255,.97)\",\n borderTop: `1px solid rgba(${ink},.12)`,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n boxShadow: \"0 -10px 30px rgba(0,0,0,.12)\",\n }}\n >\n {started && (\n <div\n ref={column}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 7,\n maxHeight: \"min(50vh, 320px)\",\n overflowY: \"auto\",\n }}\n >\n <Turns\n welcome={welcome}\n chat={chat}\n onDark={hostDark}\n look={look}\n config={config}\n />\n </div>\n )}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span\n class={partClass(config, \"launcher\")}\n style={{\n width: 26,\n height: 26,\n borderRadius: rad,\n background: accentFill,\n color: accentText,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n <Sparkles size={14} />\n </span>\n <span\n class={partClass(config, \"botMessage\")}\n style={{\n flex: 1,\n minWidth: 0,\n fontSize: 12,\n color: `rgb(${ink})`,\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n }}\n >\n {welcome}\n </span>\n <form\n class={partClass(config, \"composer\")}\n onSubmit={(event) => {\n event.preventDefault()\n const field = (\n event.currentTarget as HTMLFormElement\n ).elements.namedItem(\"message\") as HTMLInputElement | null\n if (!field || !live) return\n chat.send(field.value)\n field.value = \"\"\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 0,\n padding: \"6px 8px 6px 11px\",\n borderRadius: rad,\n border: `1px solid rgba(${ink},.14)`,\n minWidth: mobile ? 0 : 220,\n }}\n >\n <input\n name=\"message\"\n type=\"text\"\n placeholder={hint}\n disabled={!live}\n maxLength={4000}\n aria-label=\"Message\"\n autoComplete=\"off\"\n ref={(el) => {\n if (el && focus > 0) el.focus()\n }}\n style={{\n flex: 1,\n fontSize: 11.5,\n color: `rgb(${ink})`,\n \"--uq-placeholder\": `rgba(${ink},.45)`,\n }}\n />\n <button\n type={chat.busy ? \"button\" : \"submit\"}\n class={partClass(config, \"sendButton\")}\n onClick={chat.busy ? chat.stop : undefined}\n disabled={!live}\n aria-label={chat.busy ? \"Stop\" : \"Send\"}\n style={{\n width: 22,\n height: 22,\n borderRadius: rad,\n background: accentFill,\n color: accentText,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n {chat.busy ? (\n <span\n style={{\n width: 7,\n height: 7,\n background: \"currentColor\",\n borderRadius: 1,\n }}\n />\n ) : (\n <ArrowRight size={12} />\n )}\n </button>\n </form>\n </div>\n </div>\n )\n}\n\n/** The stream: the column floats straight on the host, no card - its ink follows the page. */\nfunction Stream({\n config,\n look,\n chat,\n hint,\n mobile,\n focus,\n live,\n welcome,\n onCta,\n}: VariantProps) {\n const { hostDark, side, offsetY } = look\n // The preview's photo host counts as dark; here the page sample decides.\n const floatDark = hostDark\n const column = useStickToBottom([chat.turns, chat.busy, chat.error])\n return (\n <div\n class={partClass(config, \"panel\", \"uq-fixed\")}\n style={{\n bottom: offsetY,\n width: mobile ? `calc(100% - ${config.appearance.offsetX * 2}px)` : 320,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 7,\n ...side,\n }}\n >\n <div\n ref={column}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 7,\n maxHeight: \"min(60vh, 420px)\",\n overflowY: \"auto\",\n }}\n >\n <Turns\n welcome={welcome}\n chat={chat}\n onDark={floatDark}\n look={look}\n config={config}\n />\n </div>\n <CtaPill config={config} look={look} onClick={onCta} />\n <Composer\n config={config}\n look={look}\n onDark={floatDark}\n hint={hint}\n chat={chat}\n disabled={!live}\n focus={focus}\n />\n </div>\n )\n}\n","import type { WidgetBlock, WidgetConfig } from \"@workspace/contracts/embed\"\n\nimport { partClass, type Look } from \"../appearance\"\nimport { X } from \"../icons\"\nimport type { SurfaceProps } from \"../surface\"\n\n/**\n * The exit popup: a scrim over the page, a card in the middle, the blocks\n * in their order - the preview's styles number for number. Each block\n * carries the customer's `cssClass` beside the runtime's own; its `css`\n * declarations go into the mount's stylesheet under `[data-uq-block=i]`\n * (`mount.ts`), so they apply to that block alone.\n */\n\ntype PopupConfig = Extract<WidgetConfig, { type: \"exit-popup\" }>\n\n/** A media block renders only from a URL the browser can load; a bare storage key stays blank. */\nconst isUrl = (src: string) => /^https?:\\/\\//i.test(src)\n\nfunction Block({\n config,\n block,\n index,\n look,\n onCta,\n}: {\n config: PopupConfig\n block: WidgetBlock\n index: number\n look: Look\n onCta: (href: string) => void\n}) {\n const { ink, accent, accentFill, accentText, rad } = look\n const own = [\"uq-block\", `uq-block-${block.kind}`, block.cssClass.trim()]\n .filter(Boolean)\n .join(\" \")\n const align = \"align\" in block ? block.align : \"center\"\n const hook = { class: own, \"data-uq-block\": index }\n\n switch (block.kind) {\n case \"headline\":\n return (\n <div\n {...hook}\n style={{\n fontFamily: \"var(--font-display, inherit)\",\n fontSize: block.size === \"lg\" ? 21 : block.size === \"sm\" ? 15 : 18,\n fontWeight: 600,\n letterSpacing: \"-0.02em\",\n textAlign: align,\n color: block.color || `rgb(${ink})`,\n }}\n >\n {block.text}\n </div>\n )\n case \"text\":\n return (\n <div\n {...hook}\n style={{\n fontSize: 12.5,\n lineHeight: 1.5,\n textAlign: align,\n color: block.color || `rgba(${ink},.65)`,\n whiteSpace: \"pre-wrap\",\n }}\n >\n {block.text}\n </div>\n )\n case \"media\": {\n if (!block.src || !isUrl(block.src)) return null\n return block.mediaType === \"video\" ? (\n <video\n {...hook}\n src={block.src}\n muted\n loop\n autoPlay\n playsInline\n style={{\n width: \"100%\",\n maxHeight: 200,\n objectFit: \"cover\",\n borderRadius: rad,\n background: \"#000\",\n }}\n />\n ) : (\n <img\n {...hook}\n src={block.src}\n alt={block.alt || \"\"}\n style={{\n width: \"100%\",\n maxHeight: 200,\n objectFit: \"cover\",\n borderRadius: rad,\n }}\n />\n )\n }\n case \"quote\":\n return (\n <div {...hook} style={{ textAlign: \"center\" }}>\n <div\n style={{ fontSize: 13, fontStyle: \"italic\", color: `rgb(${ink})` }}\n >\n “{block.text}”\n </div>\n <div\n style={{ fontSize: 11, color: `rgba(${ink},.55)`, marginTop: 4 }}\n >\n {block.author}\n </div>\n </div>\n )\n case \"cta\":\n return (\n <a\n {...hook}\n class={`${partClass(config, \"cta\")} ${own}`}\n href={block.href || \"#\"}\n target={block.newTab ? \"_blank\" : undefined}\n rel={block.newTab ? \"noopener noreferrer\" : undefined}\n onClick={() => onCta(block.href)}\n style={{\n display: \"block\",\n marginTop: 4,\n padding: \"10px 14px\",\n borderRadius: rad,\n background: block.style === \"outline\" ? \"transparent\" : accentFill,\n border:\n block.style === \"outline\" ? `1px solid ${accent}` : undefined,\n color: block.style === \"outline\" ? accent : accentText,\n fontSize: 13,\n fontWeight: 500,\n textAlign: \"center\",\n }}\n >\n {block.label}\n </a>\n )\n }\n}\n\nexport function ExitPopupSurface({\n payload,\n look,\n reporter,\n open,\n setOpen,\n pinned,\n}: SurfaceProps) {\n const config = payload.config as PopupConfig\n const { ink, surfaceBg, rad } = look\n if (!open) return null\n\n const close = () => {\n if (!pinned) setOpen(false)\n }\n const onCta = (href: string) =>\n reporter.report(\"cta.clicked\", { widgetId: payload.id, payload: { href } })\n\n return (\n <div\n class={partClass(config, \"scrim\", \"uq-fixed uq-fade\")}\n onClick={close}\n style={{\n inset: 0,\n background: \"rgba(8,10,16,.5)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n }}\n >\n <div\n class={partClass(config, \"card\", \"uq-rise\")}\n role=\"dialog\"\n aria-modal=\"true\"\n onClick={(event) => event.stopPropagation()}\n style={{\n position: \"relative\",\n width: \"100%\",\n maxWidth: 340,\n // A tall lineup of blocks scrolls inside the card on a short screen.\n maxHeight: \"calc(100vh - 48px)\",\n overflowY: \"auto\",\n background: surfaceBg,\n borderRadius: rad,\n padding: \"22px 20px\",\n boxShadow: \"0 24px 60px rgba(0,0,0,.3)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n textAlign: \"center\",\n color: `rgb(${ink})`,\n }}\n >\n {!pinned && (\n <button\n type=\"button\"\n class={partClass(config, \"close\")}\n onClick={close}\n aria-label=\"Close\"\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n width: 24,\n height: 24,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: `rgba(${ink},.55)`,\n }}\n >\n <X size={14} />\n </button>\n )}\n {config.blocks.map((block, index) => (\n <Block\n key={index}\n config={config}\n block={block}\n index={index}\n look={look}\n onCta={onCta}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from \"preact/hooks\"\n\nimport type { WidgetConfig } from \"@workspace/contracts/embed\"\n\nimport { partClass } from \"../appearance\"\nimport type { SurfaceProps } from \"../surface\"\n\n/**\n * The testimonial: a card along the bottom, one quote at a time, the dots\n * saying which - the preview's styles number for number, turning on the\n * preview's own clock (a quote every 3.6 s).\n */\n\ntype TestimonialConfig = Extract<WidgetConfig, { type: \"testimonial\" }>\n\nconst TURN_MS = 3600\n\nexport function TestimonialSurface({ payload, look, open }: SurfaceProps) {\n const config = payload.config as TestimonialConfig\n const { ink, accent, surfaceBg, rad } = look\n const quotes = config.quotes\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (quotes.length < 2) return\n const id = window.setInterval(() => setTick((t) => t + 1), TURN_MS)\n return () => window.clearInterval(id)\n }, [quotes.length])\n\n if (!open || quotes.length === 0) return null\n const at = tick % quotes.length\n const quote = quotes[at]!\n\n return (\n <div\n class=\"uq-fixed uq-fade\"\n style={{\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n justifyContent: \"center\",\n padding: 24,\n pointerEvents: \"none\",\n }}\n >\n <figure\n class={partClass(config, \"frame\")}\n style={{\n width: \"100%\",\n maxWidth: 440,\n background: surfaceBg,\n border: `1px solid rgba(${ink},.12)`,\n borderLeft: `3px solid ${accent}`,\n borderRadius: rad,\n padding: \"16px 18px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 9,\n boxShadow: \"0 14px 34px rgba(0,0,0,.12)\",\n pointerEvents: \"auto\",\n }}\n >\n <blockquote\n key={at}\n class={partClass(config, \"quote\", \"uq-fade\")}\n style={{ fontSize: 13.5, lineHeight: 1.55, color: `rgb(${ink})` }}\n >\n “{quote.text || \"…\"}”\n </blockquote>\n <figcaption style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span\n class={partClass(config, \"author\")}\n style={{\n fontFamily: \"monospace\",\n fontSize: 11,\n color: `rgba(${ink},.55)`,\n }}\n >\n {quote.author || \"—\"}\n </span>\n <span\n class={partClass(config, \"dots\")}\n style={{ marginLeft: \"auto\", display: \"flex\", gap: 4 }}\n >\n {quotes.map((_, i) => (\n <span\n key={i}\n style={{\n width: 5,\n height: 5,\n borderRadius: \"50%\",\n background: i === at ? accent : `rgba(${ink},.18)`,\n }}\n />\n ))}\n </span>\n </figcaption>\n </figure>\n </div>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from \"preact/hooks\"\n\nimport type {\n EmbedKind,\n RulePayload,\n WidgetPayload,\n} from \"@workspace/contracts/embed\"\n\nimport type { Api } from \"./api\"\nimport { lookOf, type Look } from \"./appearance\"\nimport type { Reporter } from \"./events\"\nimport type { PageContext } from \"./host\"\nimport { runRules } from \"./rules\"\nimport { BannerSurface } from \"./surfaces/banner\"\nimport { ChatSurface } from \"./surfaces/chat\"\nimport { ExitPopupSurface } from \"./surfaces/exit-popup\"\nimport { TestimonialSurface } from \"./surfaces/testimonial\"\n\n/**\n * One surface on the page: its look, its rules, its open state. The rules\n * say WHEN it appears (`rules.ts`): a surface with rules is not on the\n * page at all until the first match fires, and then it SHOWS - that is\n * what the dashboard's rule sentence promises (\"When …, show <surface>\"),\n * so a firing is the show, and `actionConfig.open` (frozen `false` by the\n * composer) adds nothing to it. What \"shows\" means is the surface's: a\n * chat bubble's panel unfolds, a popup comes up, a banner or a testimonial\n * appears. `autoStart` puts the visitor in the composer, `pinned` takes the\n * close away. With no rules a surface rests - the launcher alone, the\n * strip and the card straight away, the popup only when the visitor moves\n * to leave (its namesake, the default when nothing else is said).\n */\n\nexport interface SurfaceProps {\n payload: WidgetPayload\n look: Look\n api: Api\n /** The tag this surface arrived under - the widget itself, or its group. */\n embed: { kind: EmbedKind; id: string }\n page: PageContext\n reporter: Reporter\n /** The surface is showing (the panel, the popup, the strip, the card). */\n open: boolean\n setOpen: (open: boolean) => void\n /** A rule pinned it: no close, the launcher does not fold it away. */\n pinned: boolean\n /** Bumped when a rule asks to `autoStart` - the composer takes focus. */\n focus: number\n}\n\nexport interface Kick {\n action: RulePayload[\"actionConfig\"]\n n: number\n}\n\n/** Where a surface with no rules starts: the launcher folded, the rest out. */\nfunction restingOpen(payload: WidgetPayload): boolean {\n switch (payload.config.type) {\n case \"chat\":\n case \"exit-popup\":\n return false\n case \"banner\":\n case \"testimonial\":\n return true\n }\n}\n\n/** A popup with nothing said fires on exit intent, once a visit. */\nfunction rulesOf(payload: WidgetPayload): RulePayload[] {\n if (payload.rules.length > 0 || payload.config.type !== \"exit-popup\") {\n return payload.rules\n }\n return [\n {\n id: `default:${payload.id}`,\n trigger: \"exit_intent\",\n triggerParams: {},\n conditions: [],\n once: true,\n actionConfig: { open: false, autoStart: false, pinned: false },\n },\n ]\n}\n\nexport function Surface({\n payload,\n api,\n embed,\n page,\n reporter,\n hostDark,\n kick = null,\n}: {\n payload: WidgetPayload\n api: Api\n embed: { kind: EmbedKind; id: string }\n page: PageContext\n reporter: Reporter\n hostDark: boolean\n /** A group rule's action, handed down when it fires (`n` makes each firing new). */\n kick?: Kick | null\n}) {\n const look = useMemo(\n () => lookOf(payload.config, hostDark),\n [payload, hostDark]\n )\n const rules = useMemo(() => rulesOf(payload), [payload])\n // No rules: on the page from the start. Rules: not until one fires.\n const [shown, setShown] = useState(rules.length === 0)\n const [open, setOpenState] = useState(\n () => rules.length === 0 && restingOpen(payload)\n )\n const [pinned, setPinned] = useState(false)\n const [focus, setFocus] = useState(0)\n const wasOpen = useRef(open)\n\n const setOpen = (next: boolean) => {\n setOpenState(next)\n if (next === wasOpen.current) return\n wasOpen.current = next\n reporter.report(next ? \"surface.opened\" : \"surface.closed\", {\n widgetId: payload.id,\n })\n }\n\n /** A rule fired - its own, or its group's: show, with the flags it carries. */\n const show = ({ autoStart, pinned: pins }: RulePayload[\"actionConfig\"]) => {\n setShown(true)\n setPinned(pins)\n setOpen(true)\n if (autoStart) setFocus((n) => n + 1)\n }\n\n useEffect(\n () =>\n runRules(rules, page, (rule) => {\n reporter.report(\"rule.fired\", {\n widgetId: payload.id,\n payload: { ruleId: rule.id, trigger: rule.trigger },\n })\n show(rule.actionConfig)\n }),\n // Armed once per payload: the rules and the page do not change under a mount.\n [payload.id]\n )\n\n useEffect(() => {\n if (kick) show(kick.action)\n }, [kick])\n\n if (!shown) return null\n\n const props: SurfaceProps = {\n payload,\n look,\n api,\n embed,\n page,\n reporter,\n open,\n setOpen,\n pinned,\n focus,\n }\n switch (payload.config.type) {\n case \"chat\":\n return <ChatSurface {...props} />\n case \"exit-popup\":\n return <ExitPopupSurface {...props} />\n case \"banner\":\n return <BannerSurface {...props} />\n case \"testimonial\":\n return <TestimonialSurface {...props} />\n }\n}\n","import { render as preactRender } from \"preact\"\nimport { useEffect, useState } from \"preact/hooks\"\n\nimport type {\n ConfigSnapshotPayload,\n EmbedKind,\n GroupPayload,\n WidgetPayload,\n} from \"@workspace/contracts/embed\"\n\nimport type { Api } from \"./api\"\nimport { BASE_CSS } from \"./base.css\"\nimport { createReporter, type Reporter } from \"./events\"\nimport { armAdvance, playingMembers, sequenceMember } from \"./group\"\nimport { hostIsDark, pageContext, type Theme } from \"./host\"\nimport { runRules } from \"./rules\"\nimport { Surface, type Kick } from \"./surface\"\n\n/**\n * `render(snapshot, host, options)` - the runtime's one entry: a shadow\n * root on `host`, the base stylesheet plus the customer's CSS adopted into\n * it, the payload rendered inside. The custom elements (`element.ts`) call\n * it with what the API served; the dashboard's playground will call it\n * with the working copy (plan E3), which is why it takes a payload and a\n * host rather than an id.\n */\n\nexport interface MountOptions {\n /** The API origin. Defaults to the one baked at build time. */\n apiUrl?: string\n /** Force the host's darkness rather than sampling the page. */\n theme?: Theme | null\n /** Skip the events batch - a preview mount that must not count. */\n silent?: boolean\n}\n\nexport interface Mount {\n /** Re-render with another payload (the playground's working copy). */\n update: (snapshot: ConfigSnapshotPayload) => void\n unmount: () => void\n}\n\n/** The customer's CSS, scoped: `customCss` as is, each block's `css` under its hook. */\nfunction customCssOf(widget: WidgetPayload): string {\n const parts: string[] = []\n const custom = widget.config.appearance.customCss.trim()\n if (custom) parts.push(custom)\n if (widget.config.type === \"exit-popup\") {\n widget.config.blocks.forEach((block, index) => {\n const css = block.css.trim()\n if (css) {\n parts.push(\n `[data-uq-widget=\"${widget.id}\"] [data-uq-block=\"${index}\"]{${css}}`\n )\n }\n })\n }\n return parts.join(\"\\n\")\n}\n\nfunction widgetsOf(snapshot: ConfigSnapshotPayload): WidgetPayload[] {\n return snapshot.kind === \"widget\"\n ? [snapshot.payload]\n : snapshot.payload.members.map((m) => m.widget)\n}\n\n/** A silent reporter: the playground's mount counts nothing. */\nconst quiet: Reporter = { report: () => {}, flush: () => {} }\n\nfunction GroupApp({\n group,\n ...rest\n}: {\n group: GroupPayload\n api: Api\n embed: { kind: EmbedKind; id: string }\n page: ReturnType<typeof pageContext>\n reporter: Reporter\n hostDark: boolean\n}) {\n // The group's rules say when it plays; with none it plays at once.\n const [playing, setPlaying] = useState(group.rules.length === 0)\n const [kick, setKick] = useState<Kick | null>(null)\n const [members, setMembers] = useState(() => playingMembers(group))\n\n useEffect(\n () =>\n runRules(group.rules, rest.page, (rule) => {\n rest.reporter.report(\"rule.fired\", {\n payload: { ruleId: rule.id, trigger: rule.trigger },\n })\n setPlaying(true)\n setKick((prev) => ({\n action: rule.actionConfig,\n n: (prev?.n ?? 0) + 1,\n }))\n }),\n [group.id]\n )\n\n // A sequence moves on when the current member's advance trigger fires.\n useEffect(() => {\n if (group.mode !== \"sequence\" || !playing) return\n const current = sequenceMember(group)\n if (!current) return\n return armAdvance(group, current, (next) =>\n setMembers(next ? [next.widget] : [])\n )\n }, [group.id, group.mode, playing, members])\n\n if (!playing) return null\n return (\n <>\n {members.map((widget) => (\n <div\n key={widget.id}\n data-uq-widget={widget.id}\n style=\"display:contents\"\n >\n <Surface payload={widget} kick={kick} {...rest} />\n </div>\n ))}\n </>\n )\n}\n\nfunction App({\n snapshot,\n ...rest\n}: {\n snapshot: ConfigSnapshotPayload\n api: Api\n page: ReturnType<typeof pageContext>\n reporter: Reporter\n hostDark: boolean\n}) {\n const embed = { kind: snapshot.kind, id: snapshot.payload.id }\n if (snapshot.kind === \"group\") {\n return <GroupApp group={snapshot.payload} embed={embed} {...rest} />\n }\n return (\n <div data-uq-widget={snapshot.payload.id} style=\"display:contents\">\n <Surface payload={snapshot.payload} embed={embed} {...rest} />\n </div>\n )\n}\n\nexport function render(\n snapshot: ConfigSnapshotPayload,\n host: HTMLElement,\n options: MountOptions = {}\n): Mount {\n const root = host.shadowRoot ?? host.attachShadow({ mode: \"open\" })\n const api: Api = {\n base: (options.apiUrl ?? __USEREQ_API_URL__).replace(/\\/+$/, \"\"),\n }\n const embed = { kind: snapshot.kind, id: snapshot.payload.id }\n const reporter = options.silent ? quiet : createReporter(api, embed)\n const hostDark = hostIsDark(options.theme ?? null)\n const page = pageContext()\n\n // The sheet: the base, then the customer's. A <style> in the root rather\n // than a constructed sheet, so Safari before 16.4 is not left unstyled.\n const style = document.createElement(\"style\")\n root.appendChild(style)\n const target = document.createElement(\"div\")\n target.setAttribute(\"data-uq-root\", \"\")\n target.style.display = \"contents\"\n root.appendChild(target)\n\n const paint = (next: ConfigSnapshotPayload) => {\n style.textContent = [BASE_CSS, ...widgetsOf(next).map(customCssOf)].join(\n \"\\n\"\n )\n preactRender(\n <App\n snapshot={next}\n api={api}\n page={page}\n reporter={reporter}\n hostDark={hostDark}\n />,\n target\n )\n }\n paint(snapshot)\n reporter.report(\"embed.loaded\", {\n payload: { version: snapshot.payload.version },\n })\n\n return {\n update: paint,\n unmount: () => {\n preactRender(null, target)\n reporter.flush()\n style.remove()\n target.remove()\n },\n }\n}\n","import type { EmbedKind } from \"@workspace/contracts/embed\"\n\nimport { ApiError, fetchSnapshot } from \"./api\"\nimport { guardSnapshot } from \"./guard\"\nimport type { Theme } from \"./host\"\nimport { render, type Mount } from \"./mount\"\n\n/**\n * The tags the install snippet writes (`contracts/embed/snippet.ts`):\n * `<usereq-widget widget-id=\"…\">` and `<usereq-group group-id=\"…\">`. On\n * connect each fetches its active snapshot, checks the envelope, and\n * mounts the runtime into its own shadow root; on disconnect it unmounts.\n * Optional attributes: `api-url` (a staging API, the dev host page) and\n * `theme=\"light|dark\"` (when sampling the page's background would lie).\n *\n * Nothing here throws onto the customer's page: a tag with no live\n * snapshot, a page off the verified domains, a network that is down - each\n * is one `console.warn` and an empty element.\n */\n\nconst TAG: Record<EmbedKind, { element: string; attribute: string }> = {\n widget: { element: \"usereq-widget\", attribute: \"widget-id\" },\n group: { element: \"usereq-group\", attribute: \"group-id\" },\n}\n\nfunction warn(message: string) {\n console.warn(`[usereq] ${message}`)\n}\n\nfunction defineEmbed(kind: EmbedKind) {\n const { element, attribute } = TAG[kind]\n if (customElements.get(element)) return\n\n class EmbedElement extends HTMLElement {\n static observedAttributes = [attribute, \"api-url\", \"theme\"]\n\n #mount: Mount | null = null\n #loading = 0\n\n connectedCallback() {\n void this.#load()\n }\n\n disconnectedCallback() {\n this.#mount?.unmount()\n this.#mount = null\n }\n\n attributeChangedCallback(\n _name: string,\n before: string | null,\n after: string | null\n ) {\n if (before !== after && this.isConnected) void this.#load()\n }\n\n async #load() {\n const id = this.getAttribute(attribute)?.trim()\n if (!id) return\n const ticket = ++this.#loading\n this.#mount?.unmount()\n this.#mount = null\n\n const apiUrl = (\n this.getAttribute(\"api-url\") ?? __USEREQ_API_URL__\n ).replace(/\\/+$/, \"\")\n const themeAttr = this.getAttribute(\"theme\")\n const theme: Theme | null =\n themeAttr === \"light\" || themeAttr === \"dark\" ? themeAttr : null\n\n let snapshot\n try {\n const answered = await fetchSnapshot({ base: apiUrl }, kind, id)\n snapshot = guardSnapshot(answered, kind)\n } catch (caught) {\n if (caught instanceof ApiError) {\n warn(`${element} ${id}: ${caught.message} (${caught.code})`)\n } else {\n warn(`${element} ${id}: could not reach ${apiUrl}.`)\n }\n return\n }\n // The attribute changed while the fetch was out: that load owns the element now.\n if (ticket !== this.#loading || !this.isConnected) return\n if (!snapshot) {\n warn(`${element} ${id}: the response was not a ${kind} snapshot.`)\n return\n }\n\n this.#mount = render(snapshot, this, { apiUrl, theme })\n }\n }\n\n customElements.define(element, EmbedElement)\n}\n\n/** Register both tags. Idempotent: a page that loads the script twice gets one definition. */\nexport function defineElements() {\n defineEmbed(\"widget\")\n defineEmbed(\"group\")\n}\n","import { defineElements } from \"./element\"\n\n/**\n * `@usereq/widget@experimental` - the script a customer's page loads. Loading it defines\n * the two tags the install snippet writes; importing it also gives a\n * mount `render` for a page that has the payload in hand.\n */\n\nexport { render } from \"./mount\"\nexport type { Mount, MountOptions } from \"./mount\"\n\ndefineElements()\n"],"x_google_ignoreList":[3,4,12],"mappings":"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"}
|