@akropolys/kiku 2.2.7 → 2.2.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akropolys/kiku",
3
- "version": "2.2.7",
3
+ "version": "2.2.10",
4
4
  "description": "The real-time conversational layer for the living web.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  "build:embed": "node scripts/build-embed.mjs"
45
45
  },
46
46
  "peerDependencies": {
47
- "@akropolys/sdk": "^1.13.0",
47
+ "@akropolys/sdk": "^1.13.1",
48
48
  "react": ">=17",
49
49
  "react-dom": ">=17"
50
50
  },
@@ -1,3 +0,0 @@
1
- 'use client';
2
- import{resolveDisplayFields as D}from"@akropolys/sdk";function O(t,e){return t.details??(t.fields?D(t.fields,e).details:[])}function L(t){return t.length?` (${t.map(e=>`${e.label}: ${e.value}`).join(", ")})`:""}function k(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var a=t.length;for(e=0;e<a;e++)t[e]&&(n=k(t[e]))&&(r&&(r+=" "),r+=n)}else for(n in t)t[n]&&(r&&(r+=" "),r+=n);return r}function C(){for(var t,e,n=0,r="",a=arguments.length;n<a;n++)(t=arguments[n])&&(e=k(t))&&(r&&(r+=" "),r+=e);return r}function Y(...t){return C(t)}function X(t){if(typeof t=="string")return{themeAttr:t,vars:void 0};if(!t)return{themeAttr:void 0,vars:void 0};let e={};return t.primaryColor&&(e["--hsk-primary"]=t.primaryColor),t.backgroundColor&&(e["--hsk-bg"]=t.backgroundColor,e["--hsk-chat-bg"]=t.backgroundColor),t.textColor&&(e["--hsk-text"]=t.textColor,e["--hsk-chat-text"]=t.textColor),t.fontFamily&&(e["--hsk-font"]=t.fontFamily),t.fontSize&&(e["--hsk-font-size"]=t.fontSize),t.mobileFontSize&&(e["--hsk-mobile-font-size"]=t.mobileFontSize),t.borderRadius&&(e["--hsk-border-radius"]=t.borderRadius),{themeAttr:void 0,vars:e}}var U="coffee",V=["light","dark","mahogany","blush","coffee","midnight"];function $(t){return typeof t=="string"&&V.includes(t)}function tt(t){if($(t))return t;try{let e=typeof window<"u"?localStorage.getItem("akropolys_theme"):null;if($(e))return e}catch{}return U}var S="hsk-sounds",o=null,m=null;function A(){try{return localStorage.getItem(S)!=="off"}catch{return!0}}function nt(t){try{localStorage.setItem(S,t?"on":"off")}catch{}t&&F()}function F(){if(typeof window>"u")return;try{let e=navigator.audioSession;e&&e.type!=="playback"&&(e.type="playback")}catch{}if(o){o.state==="suspended"&&o.resume().catch(()=>{});return}let t=window.AudioContext||window.webkitAudioContext;if(t)try{o=new t({latencyHint:"interactive"}),m=o.createGain(),m.gain.value=.28,m.connect(o.destination);let e=o.createBuffer(1,1,o.sampleRate),n=o.createBufferSource();n.buffer=e,n.connect(o.destination),n.start(0),o.resume().catch(()=>{})}catch{o=null}}function p(t,e,n,r,a){if(!o||!m)return;let i=o.createOscillator();i.type="sine",i.frequency.setValueAtTime(e,t),i.frequency.exponentialRampToValueAtTime(Math.max(40,e*n),t+r);let s=o.createBiquadFilter();s.type="lowpass",s.Q.value=.9,s.frequency.setValueAtTime(Math.min(18e3,e*7),t),s.frequency.exponentialRampToValueAtTime(Math.max(80,e*1.5),t+r);let c=o.createGain();c.gain.setValueAtTime(1e-4,t),c.gain.exponentialRampToValueAtTime(a,t+.006),c.gain.exponentialRampToValueAtTime(1e-4,t+r),i.connect(s),s.connect(c),c.connect(m),i.start(t),i.stop(t+r+.02)}function T(t,e){if(!o||!m)return;let n=Math.floor(o.sampleRate*.03),r=o.createBuffer(1,n,o.sampleRate),a=r.getChannelData(0);for(let l=0;l<n;l++)a[l]=(Math.random()*2-1)*Math.pow(1-l/n,3);let i=o.createBufferSource();i.buffer=r;let s=o.createBiquadFilter();s.type="bandpass",s.frequency.value=2600,s.Q.value=5;let c=o.createGain();c.gain.value=e,i.connect(s),s.connect(c),c.connect(m),i.start(t)}function rt(){return A()?o?o.state:"unsupported":"off"}function q(t){!o||!m||(p(t,587.33,.985,.16,.38),p(t+.048,739.99,.985,.18,.42),p(t+.096,880,.985,.28,.46),p(t+.105,1174.66,.985,.22,.22),T(t+.096,.16))}function G(t){!o||!m||p(t,659.25,.97,.09,.26)}function ot(t,e=!1){if(!e&&!A()||(F(),!o||!m||o.state==="closed"))return;o.state==="suspended"&&o.resume().catch(()=>{});let n=o.currentTime+.01;switch(t){case"connect":q(n);break;case"heard":G(n);break;case"reply":p(n,440,.94,.13,.5),p(n+.09,660,.94,.16,.42);break;case"interrupt":p(n,520,.62,.17,.4);break;case"send":p(n,300,1.16,.1,.22);break;case"pin":T(n,.35),p(n+.02,880,.97,.07,.22);break}}import{useEffect as R}from"react";var u=new Map;function b(t,e="hsk-font"){let n=5381;for(let r=0;r<t.length;r++)n=(n<<5)+n+t.charCodeAt(r)>>>0;return`${e}-${n.toString(36)}`}function z(t){let e=t.split("?")[0].split("#")[0].split(".").pop()?.toLowerCase();return e==="woff2"?"woff2":e==="woff"?"woff":e==="otf"?"opentype":e==="ttf"?"truetype":""}function x(t){let e=t.trim();return!e||/["'()\\\s]/.test(e)||/^(javascript|vbscript):/i.test(e)?null:e}var P=t=>/["\\{}<>;\n\r]/.test(t)?"":t.trim(),_=/^[Uu]\+[0-9A-Fa-f?]{1,6}(-[0-9A-Fa-f]{1,6})?$/,E=t=>{let e=t.split(",").map(n=>n.trim()).filter(Boolean);return e.length===0||!e.every(n=>_.test(n))?"":e.join(", ")},j=t=>/^\d{3}( \d{3})?$/.test(t)?t:"400";function H(t,e){R(()=>{if(!t||!e||typeof document>"u")return;let n=b(t);if(u.set(t,(u.get(t)??0)+1),!document.getElementById(n)){let r=document.createElement("style");r.id=n,r.textContent=e,document.head.appendChild(r)}return()=>{let r=(u.get(t)??1)-1;if(r>0){u.set(t,r);return}u.delete(t),document.getElementById(n)?.remove()}},[t,e])}function I(t){let e=P(t.family);return e?t.faces.map(n=>{let r=x(n.url);return r?`@font-face{font-family:"${e}";font-style:normal;font-weight:${j(n.weight)};font-display:swap;src:url(${r}) format("woff2");`+(E(n.unicodeRange)?`unicode-range:${E(n.unicodeRange)};`:"")+"}":""}).join(""):""}function at(t){let e=t?.faces??[],n=t&&e.length?I(t):"";H(n?`script|${t.family}|${e.map(r=>r.url).join("|")}`:"",n)}async function ct(t,e=0){if(typeof document>"u"||!("fonts"in document))return;let n=I(t);if(!n)return;let r=`script|${t.family}|${t.faces.map(i=>i.url).join("|")}`;u.set(r,(u.get(r)??0)+1);let a=b(r);if(!document.getElementById(a)){let i=document.createElement("style");i.id=a,i.textContent=n,document.head.appendChild(i)}if(e>0){let i=document.fonts,s=t.family.replace(/^['"]|['"]$/g,""),c=Array.from(i||[]).filter(f=>f.family.replace(/^['"]|['"]$/g,"")===s),l=c.length>0?c.map(f=>f.load().catch(()=>{})):t.faces.map(f=>{let y=x(f.url);if(!y)return Promise.resolve();try{return new window.FontFace(s,`url(${y})`,{weight:j(f.weight),style:"normal"}).load().then(d=>{document.fonts?.add(d)}).catch(()=>{})}catch{return Promise.resolve()}});await Promise.race([Promise.all(l),new Promise(f=>setTimeout(f,e))])}}var B=["400","500","600","700"];function M(t,e){let n=Array.from(new Set(Array.from(Object.values(e).join("")))).join(""),r=t.map(a=>`"${a.replace(/^['"]|['"]$/g,"")}"`).join(", ");return{text:n,stack:r}}function ut(t,e){let n=typeof document<"u"?document.fonts:null,{text:r,stack:a}=M(t,e);if(!n?.check||!r||!a)return!0;try{return B.every(i=>n.check(`${i} 16px ${a}`,r))}catch{return!0}}async function lt(t,e,n){let r=typeof document<"u"?document.fonts:null;if(!r?.load)return;let{text:a,stack:i}=M(t,e);!a||!i||await Promise.race([Promise.all(B.map(s=>r.load(`${s} 16px ${i}`,a).catch(()=>{}))),new Promise(s=>setTimeout(s,n))])}function ft(t){let e=typeof t=="object"&&t?t:void 0,n=P(e?.fontFamily?.split(",")[0].trim().replace(/^['"]|['"]$/g,"")??""),r=typeof e?.fontUrl=="string"?{normal:e.fontUrl}:e?.fontUrl??{},a=r.normal??"",i=r.bold??"",s=r.variable??"";R(()=>{if(!n||!a&&!i&&!s)return;let c=s?[["100 900",s]]:[["400",a],["700",i]],l=[];for(let[d,v]of c){if(!v)continue;let h=x(v);if(!h)continue;let w=z(h);l.push(`@font-face{font-family:"${n}";font-style:normal;font-weight:${d};font-display:swap;src:url(${h})${w?` format("${w}")`:""};}`)}if(l.length===0)return;let f=l.join(""),y=`${n}|${a}|${i}|${s}`,g=b(y,"hsk-host-font");if(u.set(y,(u.get(y)??0)+1),!document.getElementById(g)){let d=document.createElement("style");d.id=g,d.textContent=f,document.head.appendChild(d)}return()=>{let d=(u.get(y)??1)-1;if(d>0){u.set(y,d);return}u.delete(y),document.getElementById(g)?.remove()}},[n,a,i,s])}export{O as a,L as b,Y as c,X as d,tt as e,A as f,nt as g,F as h,rt as i,ot as j,at as k,ct as l,ut as m,lt as n,ft as o};
3
- //# sourceMappingURL=chunk-NRT5W2SK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/cardDetails.ts","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/utils/cn.ts","../src/utils/theme.ts","../src/utils/themePreference.ts","../src/utils/chime.ts","../src/utils/hostFont.ts"],"sourcesContent":["import { resolveDisplayFields, type CardDetail } from '@akropolys/sdk';\n\n// A card's details are the site's chosen cardFields; voice sources arrive with raw fields and are resolved here.\nexport function detailsOf(src: { details?: CardDetail[]; fields?: Record<string, any> }, cardFields: string[]): CardDetail[] {\n return src.details ?? (src.fields ? resolveDisplayFields(src.fields, cardFields).details : []);\n}\n\nexport function detailsText(details: CardDetail[]): string {\n return details.length ? ` (${details.map(d => `${d.label}: ${d.value}`).join(', ')})` : '';\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { clsx, type ClassValue } from \"clsx\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return clsx(inputs);\r\n}\r\n","import type { CSSProperties } from 'react';\r\nimport type { AkropolysTheme } from '@akropolys/sdk';\r\n\r\nexport type ThemeProp = string | AkropolysTheme | undefined;\r\n\r\nexport function resolveTheme(theme: ThemeProp): {\r\n themeAttr: string | undefined;\r\n vars: CSSProperties | undefined;\r\n} {\r\n if (typeof theme === 'string') {\r\n return { themeAttr: theme as any, vars: undefined };\r\n }\r\n if (!theme) {\r\n return { themeAttr: undefined, vars: undefined };\r\n }\r\n const vars: Record<string, string> = {};\r\n if (theme.primaryColor) vars['--hsk-primary'] = theme.primaryColor;\r\n if (theme.backgroundColor) {\r\n vars['--hsk-bg'] = theme.backgroundColor;\r\n vars['--hsk-chat-bg'] = theme.backgroundColor;\r\n }\r\n if (theme.textColor) {\r\n vars['--hsk-text'] = theme.textColor;\r\n vars['--hsk-chat-text'] = theme.textColor;\r\n }\r\n if (theme.fontFamily) vars['--hsk-font'] = theme.fontFamily;\r\n if (theme.fontSize) vars['--hsk-font-size'] = theme.fontSize;\r\n if (theme.mobileFontSize) vars['--hsk-mobile-font-size'] = theme.mobileFontSize;\r\n if (theme.borderRadius) vars['--hsk-border-radius'] = theme.borderRadius;\r\n return { themeAttr: undefined, vars: vars as CSSProperties };\r\n}\r\n","export const DEFAULT_THEME = 'coffee';\r\nconst THEME_IDS = ['light', 'dark', 'mahogany', 'blush', 'coffee', 'midnight'];\r\n\r\nexport function isThemeId(value: unknown): value is string {\r\n return typeof value === 'string' && THEME_IDS.includes(value);\r\n}\r\n\r\nexport function initialTheme(theme: unknown): string {\r\n if (isThemeId(theme)) return theme;\r\n try {\r\n const saved = typeof window !== 'undefined' ? localStorage.getItem('akropolys_theme') : null;\r\n if (isThemeId(saved)) return saved;\r\n } catch { /* Storage can be unavailable in embedded browsers. */ }\r\n return DEFAULT_THEME;\r\n}\r\n","const SOUND_KEY = 'hsk-sounds';\n\nlet ctx: AudioContext | null = null;\nlet master: GainNode | null = null;\n\nexport function soundsEnabled(): boolean {\n try {\n return localStorage.getItem(SOUND_KEY) !== 'off';\n } catch {\n return true;\n }\n}\n\nexport function setSoundsEnabled(on: boolean): void {\n try {\n localStorage.setItem(SOUND_KEY, on ? 'on' : 'off');\n } catch { }\n if (on) primeChimes();\n}\n\nexport function primeChimes(): void {\n if (typeof window === 'undefined') return;\n try {\n const session = (navigator as any).audioSession;\n if (session && session.type !== 'playback') session.type = 'playback';\n } catch { }\n if (ctx) {\n if (ctx.state === 'suspended') ctx.resume().catch(() => {});\n return;\n }\n const AC: typeof AudioContext = (window as any).AudioContext || (window as any).webkitAudioContext;\n if (!AC) return;\n try {\n ctx = new AC({ latencyHint: 'interactive' });\n master = ctx.createGain();\n master.gain.value = 0.28;\n master.connect(ctx.destination);\n const b = ctx.createBuffer(1, 1, ctx.sampleRate);\n const s = ctx.createBufferSource();\n s.buffer = b;\n s.connect(ctx.destination);\n s.start(0);\n ctx.resume().catch(() => {});\n } catch {\n ctx = null;\n }\n}\n\nfunction droplet(at: number, f0: number, glide: number, dur: number, gain: number): void {\n if (!ctx || !master) return;\n const osc = ctx.createOscillator();\n osc.type = 'sine';\n osc.frequency.setValueAtTime(f0, at);\n osc.frequency.exponentialRampToValueAtTime(Math.max(40, f0 * glide), at + dur);\n\n const lp = ctx.createBiquadFilter();\n lp.type = 'lowpass';\n lp.Q.value = 0.9;\n lp.frequency.setValueAtTime(Math.min(18000, f0 * 7), at);\n lp.frequency.exponentialRampToValueAtTime(Math.max(80, f0 * 1.5), at + dur);\n\n const g = ctx.createGain();\n g.gain.setValueAtTime(0.0001, at);\n g.gain.exponentialRampToValueAtTime(gain, at + 0.006);\n g.gain.exponentialRampToValueAtTime(0.0001, at + dur);\n\n osc.connect(lp);\n lp.connect(g);\n g.connect(master);\n osc.start(at);\n osc.stop(at + dur + 0.02);\n}\n\n// Not a tone: a filtered noise burst, so it reads as contact rather than pitch.\nfunction tick(at: number, gain: number): void {\n if (!ctx || !master) return;\n const n = Math.floor(ctx.sampleRate * 0.03);\n const buf = ctx.createBuffer(1, n, ctx.sampleRate);\n const d = buf.getChannelData(0);\n for (let i = 0; i < n; i++) d[i] = (Math.random() * 2 - 1) * Math.pow(1 - i / n, 3);\n\n const src = ctx.createBufferSource();\n src.buffer = buf;\n const bp = ctx.createBiquadFilter();\n bp.type = 'bandpass';\n bp.frequency.value = 2600;\n bp.Q.value = 5;\n const g = ctx.createGain();\n g.gain.value = gain;\n\n src.connect(bp);\n bp.connect(g);\n g.connect(master);\n src.start(at);\n}\n\n/** 'off' | 'unsupported' | AudioContext state - so a silent phone can say why. */\nexport function chimeState(): string {\n if (!soundsEnabled()) return 'off';\n if (!ctx) return 'unsupported';\n return ctx.state;\n}\n\nexport type ChimeEvent = 'reply' | 'interrupt' | 'pin' | 'send' | 'connect' | 'heard';\n\nfunction connectChime(at: number): void {\n if (!ctx || !master) return;\n\n // D5 (587.33 Hz) warm initial chime\n droplet(at, 587.33, 0.985, 0.16, 0.38);\n\n // F#5 (739.99 Hz) ascending major third\n droplet(at + 0.048, 739.99, 0.985, 0.18, 0.42);\n\n // A5 (880.00 Hz) fifth + D6 (1174.66 Hz) high glass shimmer with silky decay\n droplet(at + 0.096, 880.00, 0.985, 0.28, 0.46);\n droplet(at + 0.105, 1174.66, 0.985, 0.22, 0.22);\n\n // Subtle organic acoustic strike transient on the peak note\n tick(at + 0.096, 0.16);\n}\n\nfunction heardChime(at: number): void {\n if (!ctx || !master) return;\n droplet(at, 659.25, 0.97, 0.09, 0.26);\n}\n\n/** force plays even while muted - the toggle has to be able to demonstrate itself. */\nexport function chime(event: ChimeEvent, force = false): void {\n if (!force && !soundsEnabled()) return;\n primeChimes();\n if (!ctx || !master || ctx.state === 'closed') return;\n if (ctx.state === 'suspended') ctx.resume().catch(() => {});\n\n const t = ctx.currentTime + 0.01;\n switch (event) {\n case 'connect':\n connectChime(t);\n break;\n case 'heard':\n heardChime(t);\n break;\n case 'reply':\n droplet(t, 440, 0.94, 0.13, 0.5);\n droplet(t + 0.09, 660, 0.94, 0.16, 0.42);\n break;\n case 'interrupt':\n droplet(t, 520, 0.62, 0.17, 0.4);\n break;\n case 'send':\n droplet(t, 300, 1.16, 0.1, 0.22);\n break;\n case 'pin':\n tick(t, 0.35);\n droplet(t + 0.02, 880, 0.97, 0.07, 0.22);\n break;\n }\n}\n","import { useEffect } from 'react';\r\nimport type { AkropolysTheme, ScriptFont } from '@akropolys/sdk';\r\n\r\nconst MOUNTED = new Map<string, number>();\r\n\r\nfunction styleId(key: string, prefix = 'hsk-font'): string {\r\n let h = 5381;\r\n for (let i = 0; i < key.length; i++) h = ((h << 5) + h + key.charCodeAt(i)) >>> 0;\r\n return `${prefix}-${h.toString(36)}`;\r\n}\r\n\r\nfunction formatFor(url: string): string {\r\n const ext = url.split('?')[0].split('#')[0].split('.').pop()?.toLowerCase();\r\n if (ext === 'woff2') return 'woff2';\r\n if (ext === 'woff') return 'woff';\r\n if (ext === 'otf') return 'opentype';\r\n if (ext === 'ttf') return 'truetype';\r\n return '';\r\n}\r\n\r\nfunction safeUrl(url: string): string | null {\r\n const u = url.trim();\r\n if (!u) return null;\r\n if (/[\"'()\\\\\\s]/.test(u)) return null;\r\n if (/^(javascript|vbscript):/i.test(u)) return null;\r\n return u;\r\n}\r\n\r\nconst safeFamily = (f: string): string => (/[\"\\\\{}<>;\\n\\r]/.test(f) ? '' : f.trim());\r\n\r\nconst RANGE_SEGMENT =/^[Uu]\\+[0-9A-Fa-f?]{1,6}(-[0-9A-Fa-f]{1,6})?$/;\r\n\r\nconst safeRange = (r: string): string => {\r\n const parts = r.split(',').map(s => s.trim()).filter(Boolean);\r\n if (parts.length === 0 || !parts.every(p => RANGE_SEGMENT.test(p))) return '';\r\n return parts.join(', ');\r\n};\r\n\r\nconst safeWeight = (w: string): string => (/^\\d{3}( \\d{3})?$/.test(w) ? w : '400');\r\n\r\nfunction useMountedFaces(key: string, css: string): void {\r\n useEffect(() => {\r\n if (!key || !css || typeof document === 'undefined') return;\r\n const id = styleId(key);\r\n\r\n MOUNTED.set(key, (MOUNTED.get(key) ?? 0) + 1);\r\n if (!document.getElementById(id)) {\r\n const el = document.createElement('style');\r\n el.id = id;\r\n el.textContent = css;\r\n document.head.appendChild(el);\r\n }\r\n\r\n return () => {\r\n const left = (MOUNTED.get(key) ?? 1) - 1;\r\n if (left > 0) { MOUNTED.set(key, left); return; }\r\n MOUNTED.delete(key);\r\n document.getElementById(id)?.remove();\r\n };\r\n }, [key, css]);\r\n}\r\n\r\nfunction scriptFontCSS(font: ScriptFont): string {\r\n const family = safeFamily(font.family);\r\n if (!family) return '';\r\n return font.faces\r\n .map(f => {\r\n const url = safeUrl(f.url);\r\n if (!url) return '';\r\n return `@font-face{font-family:\"${family}\";font-style:normal;` +\r\n `font-weight:${safeWeight(f.weight)};font-display:swap;src:url(${url}) format(\"woff2\");` +\r\n (safeRange(f.unicodeRange) ? `unicode-range:${safeRange(f.unicodeRange)};` : '') + '}';\r\n })\r\n .join('');\r\n}\r\n\r\nexport function useScriptFontFace(font: ScriptFont | null | undefined): void {\r\n const faces = font?.faces ?? [];\r\n const css = font && faces.length ? scriptFontCSS(font) : '';\r\n useMountedFaces(css ? `script|${font!.family}|${faces.map(f => f.url).join('|')}` : '', css);\r\n}\r\n\r\nexport async function preloadScriptFont(font: ScriptFont, timeoutMs = 0): Promise<void> {\r\n if (typeof document === 'undefined' || !('fonts' in document)) return;\r\n const css = scriptFontCSS(font);\r\n if (!css) return;\r\n\r\n const key = `script|${font.family}|${font.faces.map(f => f.url).join('|')}`;\r\n MOUNTED.set(key, (MOUNTED.get(key) ?? 0) + 1);\r\n const id = styleId(key);\r\n if (!document.getElementById(id)) {\r\n const el = document.createElement('style');\r\n el.id = id;\r\n el.textContent = css;\r\n document.head.appendChild(el);\r\n }\r\n\r\n if (timeoutMs > 0) {\r\n const fonts = (document as any).fonts;\r\n const cleanFamily = font.family.replace(/^['\"]|['\"]$/g, '');\r\n const matched = Array.from(fonts || []).filter(\r\n (f: any) => f.family.replace(/^['\"]|['\"]$/g, '') === cleanFamily\r\n ) as any[];\r\n\r\n const loads = matched.length > 0\r\n ? matched.map((f: any) => f.load().catch(() => {}))\r\n : font.faces.map(f => {\r\n const url = safeUrl(f.url);\r\n if (!url) return Promise.resolve();\r\n try {\r\n const face = new (window as any).FontFace(cleanFamily, `url(${url})`, {\r\n weight: safeWeight(f.weight),\r\n style: 'normal',\r\n });\r\n return face.load().then((loaded: any) => {\r\n (document as any).fonts?.add(loaded);\r\n }).catch(() => {});\r\n } catch {\r\n return Promise.resolve();\r\n }\r\n });\r\n\r\n await Promise.race([\r\n Promise.all(loads),\r\n new Promise(resolve => setTimeout(resolve, timeoutMs)),\r\n ]);\r\n }\r\n}\r\n\r\nconst UI_WEIGHTS = ['400', '500', '600', '700'];\r\n\r\nfunction fontQuery(families: string[], strings: Record<string, string>) {\r\n const text = Array.from(new Set(Array.from(Object.values(strings).join('')))).join('');\r\n const stack = families.map(f => `\"${f.replace(/^['\"]|['\"]$/g, '')}\"`).join(', ');\r\n return { text, stack };\r\n}\r\n\r\n// True when every face these strings need is already loaded at every weight the widget draws.\r\nexport function fontsLoadedFor(families: string[], strings: Record<string, string>): boolean {\r\n const fonts = typeof document !== 'undefined' ? (document as any).fonts : null;\r\n const { text, stack } = fontQuery(families, strings);\r\n if (!fonts?.check || !text || !stack) return true;\r\n try {\r\n return UI_WEIGHTS.every(w => fonts.check(`${w} 16px ${stack}`, text));\r\n } catch {\r\n return true;\r\n }\r\n}\r\n\r\n// Loads, at every weight the widget draws, each face these strings need; unicode-range faces load only their slices.\r\nexport async function loadFontsFor(families: string[], strings: Record<string, string>, timeoutMs: number): Promise<void> {\r\n const fonts = typeof document !== 'undefined' ? (document as any).fonts : null;\r\n if (!fonts?.load) return;\r\n const { text, stack } = fontQuery(families, strings);\r\n if (!text || !stack) return;\r\n await Promise.race([\r\n Promise.all(UI_WEIGHTS.map(w => fonts.load(`${w} 16px ${stack}`, text).catch(() => {}))),\r\n new Promise(resolve => setTimeout(resolve, timeoutMs)),\r\n ]);\r\n}\r\n\r\nexport function useHostFontFace(theme: 'light' | 'dark' | AkropolysTheme | undefined): void {\r\n const t = typeof theme === 'object' && theme ? theme : undefined;\r\n const family = safeFamily(t?.fontFamily?.split(',')[0].trim().replace(/^['\"]|['\"]$/g, '') ?? '');\r\n const urls = typeof t?.fontUrl === 'string' ? { normal: t.fontUrl } : (t?.fontUrl ?? {});\r\n const normal = urls.normal ?? '';\r\n const bold = urls.bold ?? '';\r\n const variable = urls.variable ?? '';\r\n\r\n useEffect(() => {\r\n if (!family || (!normal && !bold && !variable)) return;\r\n\r\n const weights: ReadonlyArray<readonly [string, string]> = variable\r\n ? [['100 900', variable]]\r\n : [['400', normal], ['700', bold]];\r\n\r\n const faces: string[] = [];\r\n for (const [weight, raw] of weights) {\r\n if (!raw) continue;\r\n const url = safeUrl(raw);\r\n if (!url) continue;\r\n const fmt = formatFor(url);\r\n faces.push(\r\n `@font-face{font-family:\"${family}\";font-style:normal;font-weight:${weight};` +\r\n `font-display:swap;src:url(${url})${fmt ? ` format(\"${fmt}\")` : ''};}`\r\n );\r\n }\r\n if (faces.length === 0) return;\r\n\r\n const css = faces.join('');\r\n const key = `${family}|${normal}|${bold}|${variable}`;\r\n const id = styleId(key, 'hsk-host-font');\r\n\r\n MOUNTED.set(key, (MOUNTED.get(key) ?? 0) + 1);\r\n if (!document.getElementById(id)) {\r\n const el = document.createElement('style');\r\n el.id = id;\r\n el.textContent = css;\r\n document.head.appendChild(el);\r\n }\r\n\r\n return () => {\r\n const left = (MOUNTED.get(key) ?? 1) - 1;\r\n if (left > 0) { MOUNTED.set(key, left); return; }\r\n MOUNTED.delete(key);\r\n document.getElementById(id)?.remove();\r\n };\r\n }, [family, normal, bold, variable]);\r\n}\r\n"],"mappings":"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","names":["resolveDisplayFields","detailsOf","src","cardFields","detailsText","details","d","r","e","t","f","n","o","clsx","cn","inputs","clsx","resolveTheme","theme","vars","DEFAULT_THEME","THEME_IDS","isThemeId","value","initialTheme","theme","saved","SOUND_KEY","ctx","master","soundsEnabled","setSoundsEnabled","on","primeChimes","session","AC","b","s","droplet","at","f0","glide","dur","gain","osc","lp","g","tick","buf","d","i","src","bp","chimeState","connectChime","heardChime","chime","event","force","t","useEffect","MOUNTED","styleId","key","prefix","h","i","formatFor","url","ext","safeUrl","u","safeFamily","f","RANGE_SEGMENT","safeRange","r","parts","s","p","safeWeight","w","useMountedFaces","css","id","el","left","scriptFontCSS","font","family","useScriptFontFace","faces","preloadScriptFont","timeoutMs","fonts","cleanFamily","matched","loads","loaded","resolve","UI_WEIGHTS","fontQuery","families","strings","text","stack","fontsLoadedFor","loadFontsFor","useHostFontFace","theme","t","urls","normal","bold","variable","weights","weight","raw","fmt"]}
@@ -1,37 +0,0 @@
1
- var En=Object.create;var gt=Object.defineProperty;var Rn=Object.getOwnPropertyDescriptor;var Tn=Object.getOwnPropertyNames;var xn=Object.getPrototypeOf,Pn=Object.prototype.hasOwnProperty;var Re=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ln=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Tn(e))!Pn.call(t,s)&&s!==n&&gt(t,s,{get:()=>e[s],enumerable:!(r=Rn(e,s))||r.enumerable});return t};var D=(t,e,n)=>(n=t!=null?En(xn(t)):{},Ln(e||!t||!t.__esModule?gt(n,"default",{value:t,enumerable:!0}):n,t));var At=Re(xe=>{"use strict";var Mn=Symbol.for("react.transitional.element"),Nn=Symbol.for("react.fragment");function Ct(t,e,n){var r=null;if(n!==void 0&&(r=""+n),e.key!==void 0&&(r=""+e.key),"key"in e){n={};for(var s in e)s!=="key"&&(n[s]=e[s])}else n=e;return e=n.ref,{$$typeof:Mn,type:t,key:r,ref:e!==void 0?e:null,props:n}}xe.Fragment=Nn;xe.jsx=Ct;xe.jsxs=Ct});var je=Re((Nr,_t)=>{"use strict";_t.exports=At()});var $t=Re(w=>{"use strict";var ze=Symbol.for("react.transitional.element"),$n=Symbol.for("react.portal"),Fn=Symbol.for("react.fragment"),Kn=Symbol.for("react.strict_mode"),Dn=Symbol.for("react.profiler"),Vn=Symbol.for("react.consumer"),Hn=Symbol.for("react.context"),jn=Symbol.for("react.forward_ref"),qn=Symbol.for("react.suspense"),Bn=Symbol.for("react.memo"),Pt=Symbol.for("react.lazy"),zn=Symbol.for("react.activity"),Et=Symbol.iterator;function Yn(t){return t===null||typeof t!="object"?null:(t=Et&&t[Et]||t["@@iterator"],typeof t=="function"?t:null)}var Lt={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ut=Object.assign,Ot={};function fe(t,e,n){this.props=t,this.context=e,this.refs=Ot,this.updater=n||Lt}fe.prototype.isReactComponent={};fe.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};fe.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Mt(){}Mt.prototype=fe.prototype;function Ye(t,e,n){this.props=t,this.context=e,this.refs=Ot,this.updater=n||Lt}var Xe=Ye.prototype=new Mt;Xe.constructor=Ye;Ut(Xe,fe.prototype);Xe.isPureReactComponent=!0;var Rt=Array.isArray;function Be(){}var O={H:null,A:null,T:null,S:null},Nt=Object.prototype.hasOwnProperty;function Qe(t,e,n){var r=n.ref;return{$$typeof:ze,type:t,key:e,ref:r!==void 0?r:null,props:n}}function Xn(t,e){return Qe(t.type,e,t.props)}function Je(t){return typeof t=="object"&&t!==null&&t.$$typeof===ze}function Qn(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){return e[n]})}var Tt=/\/+/g;function qe(t,e){return typeof t=="object"&&t!==null&&t.key!=null?Qn(""+t.key):e.toString(36)}function Jn(t){switch(t.status){case"fulfilled":return t.value;case"rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(Be,Be):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e)},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e)})),t.status){case"fulfilled":return t.value;case"rejected":throw t.reason}}throw t}function le(t,e,n,r,s){var o=typeof t;(o==="undefined"||o==="boolean")&&(t=null);var i=!1;if(t===null)i=!0;else switch(o){case"bigint":case"string":case"number":i=!0;break;case"object":switch(t.$$typeof){case ze:case $n:i=!0;break;case Pt:return i=t._init,le(i(t._payload),e,n,r,s)}}if(i)return s=s(t),i=r===""?"."+qe(t,0):r,Rt(s)?(n="",i!=null&&(n=i.replace(Tt,"$&/")+"/"),le(s,e,n,"",function(c){return c})):s!=null&&(Je(s)&&(s=Xn(s,n+(s.key==null||t&&t.key===s.key?"":(""+s.key).replace(Tt,"$&/")+"/")+i)),e.push(s)),1;i=0;var a=r===""?".":r+":";if(Rt(t))for(var u=0;u<t.length;u++)r=t[u],o=a+qe(r,u),i+=le(r,e,n,o,s);else if(u=Yn(t),typeof u=="function")for(t=u.call(t),u=0;!(r=t.next()).done;)r=r.value,o=a+qe(r,u++),i+=le(r,e,n,o,s);else if(o==="object"){if(typeof t.then=="function")return le(Jn(t),e,n,r,s);throw e=String(t),Error("Objects are not valid as a React child (found: "+(e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)+"). If you meant to render a collection of children, use an array instead.")}return i}function Pe(t,e,n){if(t==null)return t;var r=[],s=0;return le(t,r,"","",function(o){return e.call(n,o,s++)}),r}function Gn(t){if(t._status===-1){var e=t._result;e=e(),e.then(function(n){(t._status===0||t._status===-1)&&(t._status=1,t._result=n)},function(n){(t._status===0||t._status===-1)&&(t._status=2,t._result=n)}),t._status===-1&&(t._status=0,t._result=e)}if(t._status===1)return t._result.default;throw t._result}var xt=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)},Wn={map:Pe,forEach:function(t,e,n){Pe(t,function(){e.apply(this,arguments)},n)},count:function(t){var e=0;return Pe(t,function(){e++}),e},toArray:function(t){return Pe(t,function(e){return e})||[]},only:function(t){if(!Je(t))throw Error("React.Children.only expected to receive a single React element child.");return t}};w.Activity=zn;w.Children=Wn;w.Component=fe;w.Fragment=Fn;w.Profiler=Dn;w.PureComponent=Ye;w.StrictMode=Kn;w.Suspense=qn;w.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=O;w.__COMPILER_RUNTIME={__proto__:null,c:function(t){return O.H.useMemoCache(t)}};w.cache=function(t){return function(){return t.apply(null,arguments)}};w.cacheSignal=function(){return null};w.cloneElement=function(t,e,n){if(t==null)throw Error("The argument must be a React element, but you passed "+t+".");var r=Ut({},t.props),s=t.key;if(e!=null)for(o in e.key!==void 0&&(s=""+e.key),e)!Nt.call(e,o)||o==="key"||o==="__self"||o==="__source"||o==="ref"&&e.ref===void 0||(r[o]=e[o]);var o=arguments.length-2;if(o===1)r.children=n;else if(1<o){for(var i=Array(o),a=0;a<o;a++)i[a]=arguments[a+2];r.children=i}return Qe(t.type,s,r)};w.createContext=function(t){return t={$$typeof:Hn,_currentValue:t,_currentValue2:t,_threadCount:0,Provider:null,Consumer:null},t.Provider=t,t.Consumer={$$typeof:Vn,_context:t},t};w.createElement=function(t,e,n){var r,s={},o=null;if(e!=null)for(r in e.key!==void 0&&(o=""+e.key),e)Nt.call(e,r)&&r!=="key"&&r!=="__self"&&r!=="__source"&&(s[r]=e[r]);var i=arguments.length-2;if(i===1)s.children=n;else if(1<i){for(var a=Array(i),u=0;u<i;u++)a[u]=arguments[u+2];s.children=a}if(t&&t.defaultProps)for(r in i=t.defaultProps,i)s[r]===void 0&&(s[r]=i[r]);return Qe(t,o,s)};w.createRef=function(){return{current:null}};w.forwardRef=function(t){return{$$typeof:jn,render:t}};w.isValidElement=Je;w.lazy=function(t){return{$$typeof:Pt,_payload:{_status:-1,_result:t},_init:Gn}};w.memo=function(t,e){return{$$typeof:Bn,type:t,compare:e===void 0?null:e}};w.startTransition=function(t){var e=O.T,n={};O.T=n;try{var r=t(),s=O.S;s!==null&&s(n,r),typeof r=="object"&&r!==null&&typeof r.then=="function"&&r.then(Be,xt)}catch(o){xt(o)}finally{e!==null&&n.types!==null&&(e.types=n.types),O.T=e}};w.unstable_useCacheRefresh=function(){return O.H.useCacheRefresh()};w.use=function(t){return O.H.use(t)};w.useActionState=function(t,e,n){return O.H.useActionState(t,e,n)};w.useCallback=function(t,e){return O.H.useCallback(t,e)};w.useContext=function(t){return O.H.useContext(t)};w.useDebugValue=function(){};w.useDeferredValue=function(t,e){return O.H.useDeferredValue(t,e)};w.useEffect=function(t,e){return O.H.useEffect(t,e)};w.useEffectEvent=function(t){return O.H.useEffectEvent(t)};w.useId=function(){return O.H.useId()};w.useImperativeHandle=function(t,e,n){return O.H.useImperativeHandle(t,e,n)};w.useInsertionEffect=function(t,e){return O.H.useInsertionEffect(t,e)};w.useLayoutEffect=function(t,e){return O.H.useLayoutEffect(t,e)};w.useMemo=function(t,e){return O.H.useMemo(t,e)};w.useOptimistic=function(t,e){return O.H.useOptimistic(t,e)};w.useReducer=function(t,e,n){return O.H.useReducer(t,e,n)};w.useRef=function(t){return O.H.useRef(t)};w.useState=function(t){return O.H.useState(t)};w.useSyncExternalStore=function(t,e,n){return O.H.useSyncExternalStore(t,e,n)};w.useTransition=function(){return O.H.useTransition()};w.version="19.2.7"});var V=Re((Fr,Ft)=>{"use strict";Ft.exports=$t()});function ue(t,e,n){let r;try{r=n?new URL(n,typeof document<"u"?document.baseURI:void 0).href:typeof document<"u"?document.baseURI:void 0}catch{r=void 0}let s=[],o=new Set,i=a=>{let u=typeof a=="string"?{url:a}:a;if(!u||typeof u.url!="string"||!u.url.trim())return;let c;try{let h=new URL(u.url.trim(),r);if(!["http:","https:"].includes(h.protocol))return;c=h.href}catch{return}o.has(c)||(o.add(c),s.push({url:c,...typeof u.alt=="string"?{alt:u.alt}:{},...typeof u.caption=="string"?{caption:u.caption}:{}}))};if(Array.isArray(t)&&t.forEach(i),e){let a=s.length;i(e),s.length>a&&s.unshift(s.pop())}return s}var Ve=t=>`akropolys_conversation_${t}`;function pt(t){if(typeof window>"u")return null;try{let e=JSON.parse(localStorage.getItem(Ve(t))||"null");return e&&typeof e.id=="string"&&typeof e.token=="string"?{id:e.id,token:e.token,cursor:Number(e.cursor)||0}:null}catch{return null}}function ve(t,e){if(!(typeof window>"u"))try{e?localStorage.setItem(Ve(t),JSON.stringify(e)):localStorage.removeItem(Ve(t))}catch{}}async function ht(t,e,n,r){let s=await fetch(t,{headers:e,signal:r});if(!s.ok||!s.body)return s.status;let o=s.body.getReader(),i=new TextDecoder,a="";for(;;){let{value:u,done:c}=await o.read();if(c)return s.status;a+=i.decode(u,{stream:!0});let h;for(;(h=a.indexOf(`
2
-
3
- `))!==-1;){let b=a.slice(0,h);a=a.slice(h+2);let y=b.split(`
4
- `).find(A=>A.startsWith("data: "));if(y)try{n(JSON.parse(y.slice(6)))}catch{}}}}var ce=3,mt=[500,1e3,2e3];function K(t,e,n){let r="[Akropolys]";t==="error"?console.error(r,e,n??""):t==="warn"?console.warn(r,e,n??""):console.debug(r,e,n??"")}async function yt(t){return new Promise(e=>setTimeout(e,t))}function vt(t){let e=t.url||"",n={},r=new Set(["id","title","image","images","content","expiresAt"]),s={},o;for(let[i,a]of Object.entries(t))if(i!=="url"){if(r.has(i)){n[i]=a;continue}if(i==="fields"&&a&&typeof a=="object"&&!Array.isArray(a)){o=a;continue}s[i]=a}if(o&&Object.assign(s,o),!s.image&&Array.isArray(s.images)&&s.images.length>0){let i=s.images[0];s.image=typeof i=="string"?i:i?.url}return{url:e,...n,fields:s}}var ke=class{constructor(e,n,r,s,o,i,a,u,c,h,b,y){this.apiUrl=e;this.siteId=n;this.apiToken=r;this.getShopperId=s;this.getSessionId=o;this.getDeviceId=i;this.getKikuPub=a;this.getShopperName=u;this.getCart=c;this.getShopperLanguage=h;this.getEntityLanguageMode=b;this.getKikuKey=y;this.cardFields=[]}get conversation(){return this.humanConversation===void 0&&(this.humanConversation=pt(this.siteId)),this.humanConversation}openConversation(e,n){let r=this.conversation,s=r?.id===e,o={id:e,token:n||(s?r.token:""),cursor:s?r.cursor:0};this.humanConversation=o.token?o:null,ve(this.siteId,this.humanConversation)}seenConversationMessage(e){let n=this.conversation;!n||e<=n.cursor||(this.humanConversation={...n,cursor:e},ve(this.siteId,this.humanConversation))}async myRequests(){if(!this.getKikuKey?.())return[];let e=await fetch(`${this.apiUrl}/conversations?siteId=${encodeURIComponent(this.siteId)}`,{headers:this.buildHeaders()});return e.ok?(await e.json()).requests??[]:[]}async resumeRequest(e){let n=`${this.apiUrl}/conversations/${encodeURIComponent(e)}/resume?siteId=${encodeURIComponent(this.siteId)}`,r=await fetch(n,{method:"POST",headers:this.buildHeaders()});if(!r.ok)return null;let s=await r.json();return this.humanConversation={id:e,token:s.token,cursor:0},ve(this.siteId,this.humanConversation),Number(s.lastMessageId)||0}async unreadFromTeam(){return(await this.conversationState())?.unread??0}async conversationState(){let e=this.conversation;if(!e)return null;let n=`${this.apiUrl}/conversations/${encodeURIComponent(e.id)}?siteId=${encodeURIComponent(this.siteId)}&after=${e.cursor}`,r=await fetch(n,{headers:this.buildHeaders(!1,{"X-Akropolys-Conversation-Token":e.token})});if(!r.ok)return null;let s=await r.json(),o=s.messages??[];return{status:s.status,unread:o.filter(i=>i.role==="human").length}}leaveConversation(){let e=this.conversation;if(!e)return;this.forgetConversation();let n=`${this.apiUrl}/conversations/${encodeURIComponent(e.id)}/leave?siteId=${encodeURIComponent(this.siteId)}`;fetch(n,{method:"POST",headers:this.buildHeaders(!1,{"X-Akropolys-Conversation-Token":e.token}),keepalive:!0}).catch(()=>{})}forgetConversation(){this.humanConversation=null,ve(this.siteId,null)}conversationEvents(e,n,r){let s=this.conversation;if(!s)return Promise.resolve(404);let o=`${this.apiUrl}/conversations/${encodeURIComponent(s.id)}/events?siteId=${encodeURIComponent(this.siteId)}&after=${r??s.cursor}`;return ht(o,this.buildHeaders(!1,{"X-Akropolys-Conversation-Token":s.token}),e,n)}widgetSettings(){return this.widget||(this.widget=(async()=>{try{let e=await fetch(`${this.apiUrl}/site-widget?siteId=${encodeURIComponent(this.siteId)}`);if(!e.ok)throw new Error(`site-widget ${e.status}`);let n=await e.json();return this.cardFields=Array.isArray(n?.cardFields)?n.cardFields.filter(r=>typeof r=="string"):[],{identityUrl:n?.identityUrl||"",cardFields:this.cardFields,detectedLanguage:typeof n?.detectedLanguage=="string"?n.detectedLanguage:void 0,font:n?.font?this.parseFont(n.font):null}}catch{return this.widget=void 0,{identityUrl:"",cardFields:this.cardFields}}})()),this.widget}async shopperAuth(){let{identityUrl:e}=await this.widgetSettings();if(e)try{let n=await fetch(e,{credentials:"include",headers:{Accept:"application/json"}});if(!n.ok)return;let r=await n.json(),s=r?.authorization||r?.token;return typeof s!="string"||!s?void 0:r?.authorization?s:`Bearer ${s}`}catch{return}}async entityPreview(e){try{let n=await fetch(`${this.apiUrl}/entity-preview`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify({siteId:this.siteId,language:e})});return n.ok?await n.json():null}catch{return null}}async storeScene(e){try{return(await fetch(`${this.apiUrl}/scene`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify({siteId:this.siteId,image:e})})).ok}catch{return!1}}parseFont(e){let n=e;if(!n||typeof n.family!="string"||!n.family.trim()||!Array.isArray(n.faces))return null;let r;try{r=new URL(this.apiUrl,typeof location<"u"?location.href:void 0)}catch{return null}let s=[];for(let o of n.faces){let i=o;if(!(typeof i?.url!="string"||!i.url.startsWith("/")))try{let a=new URL(this.apiUrl.replace(/\/+$/,"")+i.url);if(a.origin!==r.origin)continue;s.push({url:a.href,unicodeRange:typeof i.unicodeRange=="string"?i.unicodeRange:"",weight:typeof i.weight=="string"&&i.weight?i.weight:"400"})}catch{}}return s.length>0?{family:n.family,faces:s}:null}async baseFont(){try{let e=await fetch(`${this.apiUrl}/fonts/v1/base`,{method:"GET",headers:this.buildHeaders()});return e.ok?this.parseFont(await e.json()):null}catch{return null}}async uiStrings(e,n){try{let r=await fetch(`${this.apiUrl}/ui-strings`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify({siteId:this.siteId,language:e,defaults:n})});if(!r.ok)return null;let s=await r.json();return s?.strings?{strings:s.strings,complete:s.complete!==!1,dir:s.dir==="rtl"?"rtl":"ltr",bcp47:typeof s.bcp47=="string"?s.bcp47:"",font:this.parseFont(s.font)}:null}catch{return null}}async getVideoStatus(e){try{let n=`${this.apiUrl}/visualize/video/${encodeURIComponent(e)}?siteId=${encodeURIComponent(this.siteId)}`,r=await fetch(n,{method:"GET",headers:this.buildHeaders()});return r.ok?await r.json():null}catch{return null}}buildHeaders(e,n){let r={"Content-Type":"application/json","X-Akropolys-Token":this.apiToken,"X-Akropolys-Site":this.siteId},s=this.getShopperId?.();s&&(r["X-Akropolys-Shopper-Id"]=s),this.userProof&&(r["X-Akropolys-Shopper-Proof"]=this.userProof);let o=this.getSessionId?.();o&&(r["X-Akropolys-Session-Id"]=o);let i=this.getDeviceId?.();i&&(r["X-Akropolys-Device-Id"]=i);let a=this.getKikuPub?.();a&&(r["X-Akropolys-Kiku-Pub"]=a);let u=this.getKikuKey?.();return u&&(r["X-Akropolys-Kiku-Key"]=u),n&&Object.assign(r,n),r}async post(e,n,r=0,s,o,i){let a=`${this.apiUrl}${e}`;try{let u=this.buildHeaders(!1,i),c=await fetch(a,{method:"POST",headers:u,body:JSON.stringify(n),signal:s,...o?{keepalive:!0}:{}});if(!c.ok){let h=await c.text(),b=h;try{let A=JSON.parse(h);A&&typeof A.error=="string"&&(b=A.error)}catch{}let y={status:c.status,message:b};if(c.status>=400&&c.status<500)throw K("error",`${e} failed [${c.status}]`,h),y;if(r<ce-1)return K("warn",`${e} [${c.status}] retrying (${r+1}/${ce})...`),await yt(mt[r]),this.post(e,n,r+1,s,o,i);throw K("error",`${e} failed after ${ce} attempts`,y),y}return c.json()}catch(u){if(u?.name==="AbortError"||s?.aborted)throw u;if(u.status===void 0){if(r<ce-1)return K("warn",`${e} network error, retrying (${r+1}/${ce})...`),await yt(mt[r]),this.post(e,n,r+1,s,o,i);K("error",`${e} unreachable after ${ce} attempts`)}throw u}}async get(e,n,r){let s=`${this.apiUrl}${e}`;try{let o=this.buildHeaders(!1,n),i=await fetch(s,{method:"GET",headers:o,signal:r});if(!i.ok){let a=await i.text(),u=a;try{let c=JSON.parse(a);c&&typeof c.error=="string"&&(u=c.error)}catch{}throw{status:i.status,message:u}}return i.json()}catch(o){throw o?.name==="AbortError"||r?.aborted,o}}async mintKikuKey(){let e=await this.post("/shopper/kiku-key",{});return{secret:e.secret??e.key??"",publicId:e.publicId}}async ingest(e){if(e&&e.envelope&&e.sig)return K("info","ingesting ASEP v1 signed envelope",e.envelope.kid||""),this.post("/ingest",{siteId:e.siteId||this.siteId,envelope:e.envelope,sig:e.sig});K("info","ingesting entity",e.name||e.id||e.url||"");let n=vt(e);return this.post("/ingest",{siteId:this.siteId,entity:n})}async ingestBatch(e){if(e.length===0)return{success:!0,message:"empty batch",count:0};if(e.some(r=>r?.envelope&&r?.sig)){let r=0;for(let s of e){let o=await this.ingest(s);if(!o.success)return{...o,count:r};r++}return{success:!0,count:r,message:"batch ingested"}}K("info",`ingesting batch of ${e.length} entities`);let n=e.map(vt);return this.post("/ingest/batch",{siteId:this.siteId,entities:n})}async ingestContentBatch(e){return K("info",`ingesting batch of ${e.length} pages`),this.post("/content/ingest",{siteId:this.siteId,contents:e})}async search(e,n=10){return K("info","search query",e),this.post("/search",{query:e,siteId:this.siteId,limit:n})}async searchVector(e,n=10,r,s){return this.post("/search/vector",{query:e,siteId:this.siteId,limit:n},0,r,s)}async searchAutocomplete(e,n=8,r){return this.post("/search/autocomplete",{query:e,siteId:this.siteId,limit:n},0,r)}async chat(e,n=[],r){return K("info","chat query",e),this.post("/chat",{query:e,siteId:this.siteId,history:n,currentContext:r})}async chatStream(e,n=[],r,s,o,i,a){K("info","chatStream query",e);let u=this.buildHeaders(!0),c={query:e,siteId:this.siteId,history:n,currentContext:s},h=this.getShopperName?.();h&&(c.shopperName=h);let b=this.getShopperLanguage?.();b&&(c.shopperLanguage=b);let y=this.getEntityLanguageMode?.();y&&(c.entityLanguageMode=y);let A=this.getCart?.();if(Array.isArray(A)&&A.length>0&&(c.cart=A.slice(0,50)),o&&o.length>0){c.attachments=o.map(({preview:F,...j})=>j),o.some(F=>F.annotated)&&(c.imageAnnotated=!0);let k=o.find(F=>F.annotated&&typeof F.preview=="string");k&&(c.imageGuide=k.preview),o.some(F=>F.instructed)&&(c.imageInstructed=!0);let N=o.flatMap(F=>Array.isArray(F.marks)?F.marks:[]);N.length>0&&(c.imageMarks=N)}let _=this.conversation;_&&(c.conversationId=_.id,c.conversationToken=_.token),i&&(c.forcedIntent=i),a&&a.length>0&&(c.captureTargets=a);let L=await this.shopperAuth();L&&(u["X-Akropolys-Shopper-Auth"]=L);let M=await fetch(`${this.apiUrl}/chat/stream`,{method:"POST",headers:u,body:JSON.stringify(c),signal:r});if(!M.ok||!M.body){let k=`Stream request failed: ${M.status}`;try{let N=JSON.parse(await M.text());N?.error&&(k=N.error)}catch{}throw new Error(k)}return M}async searchByImage(e,n,r=8){return K("info","searchByImage",n??"no hint"),this.post("/search/visual",{siteId:this.siteId,image:e,category_hint:n,limit:r})}async analyzeImage(e,n){return K("info","analyzeImage query",n??"(describe)"),this.post("/chat/vision",{siteId:this.siteId,image:e,query:n})}async synthesizeSpeech(e,n,r,s){try{let o=await fetch(`${this.apiUrl}/speech`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify({siteId:this.siteId,text:e,voice:n,language:r}),signal:s});if(!o.ok){K("warn",`speech failed [${o.status}]`,await o.text().catch(()=>""));let a=o.headers.get("X-Akropolys-Voice-Refused");return a?{refused:a}:null}let i=o.headers.get("X-Akropolys-Voice-Seconds-Left");return{audio:await o.arrayBuffer(),mime:o.headers.get("Content-Type")||"audio/wav",secondsLeft:i===null?void 0:Number(i)}}catch{return null}}async visualize(e,n,r){return K("info","visualize"),this.post("/visualize",{siteId:this.siteId,sceneImage:e,productImage:n},0,r)}async allowance(e,n){let r=new URLSearchParams;(e||this.siteId)&&r.set("siteId",e||this.siteId);let s=await this.get(`/visualize/allowance?${r.toString()}`,{},n);return{images:s.images??-1,videos:s.videos??-1,voiceSeconds:s.voiceSeconds??-1,replies:s.replies??-1}}};function Un(t){let e=[],r=t.replace(/\r\n/g,`
5
- `).replace(/\r/g,`
6
- `).split(/\n\n+/);for(let s of r){if(!s.trim())continue;let o="",i="",a=!1;for(let u of s.split(`
7
- `))if(u.startsWith("event:"))o=u.slice(6).trim();else if(u.startsWith("data:")){let c=u.slice(5);c.startsWith(" ")&&(c=c.slice(1)),i=a?i+`
8
- `+c:c,a=!0}(a||o!=="")&&e.push({event:o,data:i})}return e}var Se=class{constructor(e,n){this.listeners={};this.aborted=!1;this.responsePromise=e,this.abortController=n,this.startReading()}on(e,n){return this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(n),this}off(e,n){return this.listeners[e]?(this.listeners[e]=this.listeners[e].filter(r=>r!==n),this):this}destroy(){this.aborted=!0,this.abortController.abort()}emit(e,...n){let r=this.listeners[e];if(r)for(let s of r)try{s(...n)}catch(o){console.error(`[Akropolys] Error in KikuStream event listener for "${e}":`,o)}}async startReading(){let e=!1,n="";try{let r=await this.responsePromise;if(this.aborted)return;if(!r.ok){let o=`HTTP ${r.status}`,i;try{let u=await r.text();try{let c=JSON.parse(u);o=c.error||c.message||u,i=c.code}catch{o=u.trim()||o}}catch{}let a=new Error(o);a.status=r.status,r.status===401?a.code="UNAUTHORIZED":r.status===402||r.status===429?a.code="RATE_LIMIT_EXCEEDED":r.status===403&&(a.code="FORBIDDEN"),i&&(a.code=i),this.emit("error",a);return}let s=r.body?.getReader();if(!s)throw new Error("Response body is not readable");try{let o=new TextDecoder,i="",a="",u=!1,c=!1;for(;!c;){let{done:h,value:b}=await s.read();if(this.aborted||u)break;h?(i+=o.decode(),c=!0):i+=o.decode(b,{stream:!0});let y;if(c)y=i,i="";else{let _=i.lastIndexOf(`
9
-
10
- `),L=i.lastIndexOf(`\r
11
- \r
12
- `),M=Math.max(_,L);if(M===-1)continue;let k=M===L?4:2;y=i.slice(0,M+k),i=i.slice(M+k)}let A=Un(y);for(let{event:_,data:L}of A){if(this.aborted)return;if(_==="meta"){try{let k=JSON.parse(L);this.emit("meta",k)}catch{}continue}if(_==="entity_ref"){try{let k=JSON.parse(L);this.emit("entity_ref",k)}catch{}continue}if(_==="live_ref"){try{let k=JSON.parse(L);k&&typeof k.key=="string"&&k.key&&this.emit("live_ref",k)}catch{}continue}if(_==="knowledge_images"){try{let k=JSON.parse(L);Array.isArray(k?.refs)&&k.refs.length>0&&this.emit("knowledge_images",k.refs)}catch{}continue}if(_==="stale_notice"){try{let k=JSON.parse(L);Array.isArray(k?.items)&&k.items.length>0&&this.emit("stale_notice",k.items)}catch{}continue}if(_==="thinking"){try{let{text:k}=JSON.parse(L);k&&this.emit("thinking",k)}catch{}continue}if(_==="status"){try{let k=JSON.parse(L);this.emit("status",k)}catch{}continue}if(_==="viz"){try{let k=JSON.parse(L);this.emit("viz",k)}catch{}continue}if(_==="done"){u=!0;break}if(_==="error"){let k="Stream error",N;try{let j=JSON.parse(L);k=j.error??k,N=j.code}catch{k=L}let F=new Error(k);throw N&&(F.code=N),F}if(_)continue;let M=L;a+=M,this.emit("token",M)}if(u)break}this.aborted||(e=!0,n=a)}finally{try{s.cancel().catch(()=>{})}catch{}this.abortController.abort()}}catch(r){this.aborted||this.emit("error",r)}e&&!this.aborted&&this.emit("done",n)}};var kt=new Set;function St(t){let e,n,r=typeof location<"u"?location.href:"",s=typeof history<"u"?history.pushState.bind(history):null,o=typeof history<"u"?history.replaceState.bind(history):null,i=()=>{if(typeof window>"u"||typeof document>"u")return;let A=location.href;if(kt.has(A))return;kt.add(A);let _=document.querySelector("main")??document.querySelector("article")??document.querySelector('[role="main"]')??document.querySelector("#content")??document.querySelector(".entry-content")??document.querySelector("#main")??document.body;if(!_)return;let L=_.cloneNode(!0);["nav","header","footer","script","style","noscript","iframe",'[role="navigation"]','[role="banner"]','[role="contentinfo"]','[aria-hidden="true"]',"template",".hidden",'[style*="display:none"]','[style*="display: none"]'].forEach(j=>{L.querySelectorAll(j).forEach(Oe=>Oe.remove())});let k=L.textContent?.replace(/\s+/g," ").trim()??"";if(!k||k.length<50)return;let N=12e4,F=k.length>N?k.slice(0,N):k;t.queueContentIngest({url:A,title:document.title,text:F,capturedAt:Date.now()})},a=()=>{clearTimeout(e),e=setTimeout(()=>{clearTimeout(n),i()},1e3)},u=()=>{clearTimeout(n),n=setTimeout(()=>{clearTimeout(e),i()},4e3)},c=null,h=()=>{typeof window>"u"||typeof document>"u"||typeof MutationObserver>"u"||(c=new MutationObserver(()=>{a()}),c.observe(document.body,{childList:!0,subtree:!0}))},b=()=>{typeof location>"u"||location.href!==r&&(r=location.href,a(),u())};typeof window<"u"&&(window.addEventListener("popstate",b),history&&s&&(history.pushState=(...A)=>{s(...A),b()}),history&&o&&(history.replaceState=(...A)=>{o(...A),b()}),"requestIdleCallback"in window?requestIdleCallback(()=>{i(),h()},{timeout:3e3}):setTimeout(()=>{i(),h()},1e3));let y=()=>{c&&c.disconnect(),clearTimeout(e),clearTimeout(n),typeof window<"u"&&(window.removeEventListener("popstate",b),history&&s&&(history.pushState=s),history&&o&&(history.replaceState=o))};return t.contentIndexerCleanup=y,y}function re(t){return t===null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?"["+t.map(re).join(",")+"]":"{"+Object.keys(t).sort().map(r=>`${JSON.stringify(r)}:${re(t[r])}`).join(",")+"}"}function ie(t){if(t==="NEXT_PUBLIC_AKROPOLYS_SITE_ID")try{return process.env.NEXT_PUBLIC_AKROPOLYS_SITE_ID}catch{}if(t==="NEXT_PUBLIC_AKROPOLYS_API_URL")try{return process.env.NEXT_PUBLIC_AKROPOLYS_API_URL}catch{}if(t==="NEXT_PUBLIC_AKROPOLYS_API_TOKEN")try{return process.env.NEXT_PUBLIC_AKROPOLYS_API_TOKEN||process.env.NEXT_PUBLIC_AKROPOLYS_API_KEY}catch{}try{let e=import.meta.env;if(e){if(t==="NEXT_PUBLIC_AKROPOLYS_SITE_ID")return e.NEXT_PUBLIC_AKROPOLYS_SITE_ID||e.VITE_AKROPOLYS_SITE_ID;if(t==="NEXT_PUBLIC_AKROPOLYS_API_URL")return e.NEXT_PUBLIC_AKROPOLYS_API_URL||e.VITE_AKROPOLYS_API_URL;if(t==="NEXT_PUBLIC_AKROPOLYS_API_TOKEN")return e.NEXT_PUBLIC_AKROPOLYS_API_TOKEN||e.VITE_AKROPOLYS_API_TOKEN}}catch{}if(typeof globalThis<"u"){let e=globalThis;if(e.process&&e.process.env){let n=e.process.env[t];if(n!==void 0)return n}}}function wt(){if(typeof DOMException<"u")return new DOMException("Aborted","AbortError");let t=new Error("Aborted");return t.name="AbortError",t}function we(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function On(t,e){let n=[];for(let r of e){let s=t[r];s==null||s===""||typeof s=="object"||n.push({label:r.replace(/[_-]+/g," "),value:String(s)})}return n}function He(t,e=[]){let n=["title","name","label","headline","subject","job_title","listing_title","common_name"],r="";if(!r){for(let a of n)if(typeof t[a]=="string"&&t[a].trim()!==""){r=t[a];break}}r||(r=Object.values(t).find(u=>typeof u=="string"&&u.length>=2&&u.length<=80&&!u.startsWith("http://")&&!u.startsWith("https://"))||"Untitled");let s=["image","images","thumbnail","photo","cover","featured_image"],o;if(!o)for(let a of s){let u=t[a];if(typeof u=="string"&&u.startsWith("http")){o=u;break}else if(Array.isArray(u)&&typeof u[0]=="string"&&u[0].startsWith("http")){o=u[0];break}}let i=ue(t.images,o);return{title:r,image:o||i[0]?.url,images:i,details:On(t,e)}}var $=class ${constructor(e){this.entities={query:async(e,n)=>{let r=n?.signal;if(r?.aborted)throw wt();let s=this.chat(e.q);return new Promise((o,i)=>{let a=()=>{s.destroy(),u(()=>i(wt()))},u=c=>{r?.removeEventListener("abort",a),c()};r?.addEventListener("abort",a,{once:!0}),s.on("token",c=>{n?.onToken?.(c)}),s.on("error",c=>u(()=>i(c))),s.on("done",()=>u(()=>o()))})}};this.allowance=(e,n)=>this.api.allowance(e,n);this.ingestQueue=[];this.ingestTimer=null;this.ingestedUrls=new Map;this.onlineHandler=null;this.sessionId="";this.deviceId="";this.kikuPub=null;this.kikuKey=null;this.shopperName=null;this.contextProviders=[];this.isFlushing=!1;this.retryCount=0;this.contentQueue=[];this.contentIngestTimer=null;this.isContentFlushing=!1;this.contentRetryCount=0;this.contentIndexerCleanup=null;this.lastIngestedItem=null;this.shopperLanguage=null;this.entityLanguageMode=null;let n=e.siteId||ie("NEXT_PUBLIC_AKROPOLYS_SITE_ID")||"",r=e.apiUrl||ie("NEXT_PUBLIC_AKROPOLYS_API_URL")||$.DEFAULT_API_URL,s=e.apiToken||ie("NEXT_PUBLIC_AKROPOLYS_API_TOKEN")||"";this.voiceUrl=e.voiceUrl||ie("NEXT_PUBLIC_AKROPOLYS_VOICE_URL")||$.DEFAULT_VOICE_URL,n||console.error("[Akropolys] Missing siteId \u2014 pass <AkropolysProvider siteId=\u2026> or set NEXT_PUBLIC_AKROPOLYS_SITE_ID."),s||console.error("[Akropolys] Missing apiToken \u2014 pass <AkropolysProvider apiToken=\u2026> or set NEXT_PUBLIC_AKROPOLYS_API_TOKEN."),this.shopperId=e.shopperId,this.userProof=e.userProof,this.authLoading=e.authLoading,this.onAction=e.onAction,this.onAddToCart=e.onAddToCart,this.getCart=e.getCart,this.onError=e.onError,e.kikuKey&&(this.kikuKey=e.kikuKey),this.initSession(),this.initDevice(),this.initKikuKey(),this.initShopperName(),this.initShopperLanguage(),this.initEntityLanguageMode(),this.loadIngestedCache(),this.api=new ke(r,n,s,()=>this.getShopperId(),()=>this.sessionId,()=>this.deviceId,()=>this.kikuPub??void 0,()=>this.shopperName??void 0,()=>{try{return this.getCart?.()}catch{return}},()=>this.shopperLanguage??void 0,()=>this.entityLanguageMode??void 0,()=>this.kikuKey??void 0),this.api.userProof=e.userProof,Te(this),typeof window<"u"&&(this.onlineHandler=()=>{console.debug("[Akropolys] Connectivity restored, flushing queued ingestions."),this.flushQueue(),this.flushContentQueue()},window.addEventListener("online",this.onlineHandler)),e.indexContent&&St(this)}get apiUrl(){return this.api.apiUrl}loadIngestedCache(){if(!(typeof window>"u"))try{let e=localStorage.getItem($.INGEST_CACHE_KEY);if(!e)return;let{ts:n,urlFingerprints:r}=JSON.parse(e);if(Date.now()-n>$.INGEST_CACHE_TTL){localStorage.removeItem($.INGEST_CACHE_KEY);return}this.ingestedUrls=new Map(r)}catch{}}saveIngestedCache(){if(!(typeof window>"u"))try{localStorage.setItem($.INGEST_CACHE_KEY,JSON.stringify({ts:Date.now(),urlFingerprints:Array.from(this.ingestedUrls.entries())}))}catch{}}registerContextProvider(e){return this.contextProviders.push(e),()=>{this.contextProviders=this.contextProviders.filter(n=>n!==e)}}async getCurrentContextAsync(e){let n=this.getCurrentContext();if(this.contextProviders.length===0)return n??{};let r=await Promise.all(this.contextProviders.map(i=>Promise.race([i(e),new Promise((a,u)=>setTimeout(()=>u(new Error("timeout")),3e3))]).catch(a=>(console.warn("[Akropolys] Live context provider failed:",a?.message??a),{})))),s=Object.assign({},...r),o=n??{};return{...o,raw:{...o.raw??{},...s}}}getCurrentContext(){if(typeof window>"u")return null;let e={url:window.location.href,title:document.title,raw:{}};if(this.lastIngestedItem){let n=this.lastIngestedItem.url;if(n)try{let r=new URL(n,window.location.origin);r.pathname===window.location.pathname&&(e.raw=this.lastIngestedItem,e.url=r.href,(this.lastIngestedItem.name||this.lastIngestedItem.title)&&(e.title=this.lastIngestedItem.name||this.lastIngestedItem.title))}catch{if(window.location.href.endsWith(n)||n.endsWith(window.location.pathname)){e.raw=this.lastIngestedItem;try{e.url=new URL(n,window.location.origin).href}catch{e.url=n}(this.lastIngestedItem.name||this.lastIngestedItem.title)&&(e.title=this.lastIngestedItem.name||this.lastIngestedItem.title)}}}return e}chat(e,n=[],r,s,o){let i=new AbortController,a=performance.now(),u=[],c=A=>u.push(`${A}=${Math.round(performance.now()-a)}ms`),h=this.getCurrentContextAsync(i.signal).then(A=>(c("context"),this.api.chatStream(e,n,i.signal,A,r,s,o))).then(A=>(c("headers"),A)),b=new Se(h,i),y=!1;return b.on("token",()=>{y||(y=!0,c("first_text"))}),b.on("done",()=>{c("done"),console.info(`[kiku timing] ${u.join(" ")}`)}),b.on("meta",A=>{A&&typeof A.language=="string"&&A.language&&this.setShopperLanguage(A.language)}),b}reRegister(){Te(this),typeof window<"u"&&!this.onlineHandler&&(this.onlineHandler=()=>{this.flushQueue(),this.flushContentQueue()},window.addEventListener("online",this.onlineHandler))}updateConfig(e){e.apiUrl&&(this.api.apiUrl=e.apiUrl),e.siteId&&(this.api.siteId=e.siteId),e.apiToken&&(this.api.apiToken=e.apiToken),e.voiceUrl!==void 0&&(this.voiceUrl=e.voiceUrl)}setUserProof(e){this.userProof=e,this.api.userProof=e}getUserProof(){return this.userProof}setShopperId(e){this.shopperId=e,this.authLoading||(this.flushQueue(),this.flushContentQueue())}setAuthLoading(e){let n=this.authLoading;this.authLoading=e,n&&!e&&(this.flushQueue(),this.flushContentQueue())}getShopperId(){return this.shopperId||"guest_"+this.sessionId}getSessionId(){return this.sessionId}initSession(){if(typeof window<"u"&&window.sessionStorage)try{let e=window.sessionStorage.getItem("akropolys_session_id");e||(e=we(),window.sessionStorage.setItem("akropolys_session_id",e)),this.sessionId=e;return}catch{}this.sessionId=we()}initDevice(){if(typeof window>"u"){this.deviceId=we();return}try{let e=localStorage.getItem("akropolys_device_id");e||(e=we(),localStorage.setItem("akropolys_device_id",e)),this.deviceId=e}catch{this.deviceId=we()}}getDeviceId(){return this.deviceId}async mintKikuKey(){let e=await this.api.mintKikuKey();return e.secret&&this.setKikuKey(e.secret),e.publicId&&this.setKikuPub(e.publicId),e}initKikuKey(){if(!(typeof window>"u"))try{if(!this.kikuKey){let s=localStorage.getItem("akropolys_kiku_key")||localStorage.getItem("kiku_key")||sessionStorage.getItem("akropolys_kiku_key");s&&(this.kikuKey=s)}let e=sessionStorage.getItem("akropolys_kiku_pub")||sessionStorage.getItem("kiku_pub");if(e){this.kikuPub=e;return}let n=localStorage.getItem("akropolys_kiku_pub")||localStorage.getItem("kiku_pub")||localStorage.getItem("kiku_id");if(n){this.kikuPub=n;return}let r=document.cookie.match(/(?:^|;\s*)(?:akropolys_kiku_pub|kiku_pub|kiku_id)=([^;]+)/);if(r){this.kikuPub=decodeURIComponent(r[1]);return}}catch{}}getKikuPub(){return this.kikuPub??void 0}getKikuKey(){return this.kikuKey??void 0}setKikuKey(e){if(this.kikuKey=e,!(typeof window>"u"))try{e?(localStorage.setItem("akropolys_kiku_key",e),sessionStorage.setItem("akropolys_kiku_key",e)):(localStorage.removeItem("akropolys_kiku_key"),sessionStorage.removeItem("akropolys_kiku_key"))}catch{}}initShopperName(){if(!(typeof window>"u"))try{let e=localStorage.getItem("akropolys_shopper_name");e&&(this.shopperName=e)}catch{}}getShopperName(){return this.shopperName??void 0}setShopperName(e){let n=(e||"").trim().slice(0,40);if(n&&(this.shopperName=n,!(typeof window>"u")))try{localStorage.setItem("akropolys_shopper_name",n)}catch{}}clearShopperName(){if(this.shopperName=null,!(typeof window>"u"))try{localStorage.removeItem("akropolys_shopper_name")}catch{}}initShopperLanguage(){if(!(typeof window>"u"))try{let e=localStorage.getItem("akropolys_shopper_language");e&&(this.shopperLanguage=e)}catch{}}getShopperLanguage(){return this.shopperLanguage??void 0}setShopperLanguage(e){let n=(e||"").trim().slice(0,40);if(n&&(this.shopperLanguage=n,!(typeof window>"u")))try{localStorage.setItem("akropolys_shopper_language",n)}catch{}}clearShopperLanguage(){if(this.shopperLanguage=null,!(typeof window>"u"))try{localStorage.removeItem("akropolys_shopper_language")}catch{}}initEntityLanguageMode(){if(!(typeof window>"u"))try{let e=localStorage.getItem("akropolys_entity_language");(e==="original"||e==="translated")&&(this.entityLanguageMode=e)}catch{}}getEntityLanguageMode(){return this.entityLanguageMode??void 0}setEntityLanguageMode(e){if(!(e!=="original"&&e!=="translated")&&(this.entityLanguageMode=e,!(typeof window>"u")))try{localStorage.setItem("akropolys_entity_language",e)}catch{}}clearEntityLanguageMode(){if(this.entityLanguageMode=null,!(typeof window>"u"))try{localStorage.removeItem("akropolys_entity_language")}catch{}}getEntityPreview(e){return this.api.entityPreview(e)}storeScene(e){return this.api.storeScene(e)}baseFont(){return this.api.baseFont()}synthesizeSpeech(e,n,r,s){return this.api.synthesizeSpeech(e,n,r??this.getShopperLanguage(),s)}getCachedUIStrings(e,n){if(typeof window>"u"||!e)return null;let r=$.hashStrings(n),s=`akropolys_ui_strings_v${$.CHROME_STRINGS_CACHE_VERSION}_${e.toLowerCase().trim()}_${r}`;try{let o=localStorage.getItem(s);if(o){let i=JSON.parse(o);if(i?.strings&&Object.keys(i.strings).length>0)return{strings:i.strings,complete:!0,dir:i.dir==="rtl"?"rtl":"ltr",bcp47:typeof i.bcp47=="string"?i.bcp47:"",font:i.font?.family&&i.font?.faces?.length?i.font:null}}}catch{}return null}async getUIStrings(e,n){let r=$.hashStrings(n),s=`akropolys_ui_strings_v${$.CHROME_STRINGS_CACHE_VERSION}_${e.toLowerCase().trim()}_${r}`,o=this.getCachedUIStrings(e,n);if(o)return o;let i={strings:{},complete:!1,dir:"ltr",bcp47:"",font:null};if(typeof window<"u")try{let c=localStorage.getItem(s);if(c){let h=JSON.parse(c);if(h?.strings&&Object.keys(h.strings).length>0)return{strings:h.strings,complete:!0,dir:h.dir==="rtl"?"rtl":"ltr",bcp47:typeof h.bcp47=="string"?h.bcp47:"",font:h.font?.family&&h.font?.faces?.length?h.font:null};localStorage.removeItem(s)}}catch{}let a=await this.api.uiStrings(e,n);if(a?.complete||(a=await this.api.uiStrings(e,n)),!a?.complete||Object.keys(a.strings).length===0)return i;let u=a.strings;if(typeof window<"u")try{let c="akropolys_ui_strings_",h=`akropolys_ui_strings_v${$.CHROME_STRINGS_CACHE_VERSION}_`;for(let b=localStorage.length-1;b>=0;b--){let y=localStorage.key(b);y&&y.startsWith(c)&&!y.startsWith(h)&&localStorage.removeItem(y)}localStorage.setItem(s,JSON.stringify({strings:u,dir:a.dir,bcp47:a.bcp47,font:a.font}))}catch{}return a}static hashStrings(e){let n=Object.keys(e).sort().map(s=>`${s}${e[s]}`).join(""),r=5381;for(let s=0;s<n.length;s++)r=(r*33^n.charCodeAt(s))>>>0;return r.toString(36)}setKikuPub(e){let n=(e||"").trim();if(n&&(this.kikuPub=n,!(typeof window>"u"))){try{sessionStorage.setItem("akropolys_kiku_pub",n)}catch{}try{localStorage.setItem("akropolys_kiku_pub",n)}catch{}try{document.cookie=`akropolys_kiku_pub=${encodeURIComponent(n)};path=/;max-age=31536000;SameSite=Lax`}catch{}}}hasKikuKey(){return!!this.kikuPub}clearKikuKey(){if(this.kikuPub=null,!(typeof window>"u")){try{sessionStorage.removeItem("akropolys_kiku_pub")}catch{}try{sessionStorage.removeItem("kiku_pub")}catch{}try{localStorage.removeItem("akropolys_kiku_pub")}catch{}try{localStorage.removeItem("kiku_pub")}catch{}try{localStorage.removeItem("kiku_id")}catch{}try{localStorage.removeItem("akropolys_kiku_key")}catch{}try{document.cookie="akropolys_kiku_pub=;path=/;max-age=0"}catch{}}}destroy(){this.contextProviders=[],typeof window<"u"&&this.onlineHandler&&(window.removeEventListener("online",this.onlineHandler),this.onlineHandler=null),this.ingestTimer&&(clearTimeout(this.ingestTimer),this.ingestTimer=null),this.contentIngestTimer&&(clearTimeout(this.contentIngestTimer),this.contentIngestTimer=null),this.contentIndexerCleanup&&(this.contentIndexerCleanup(),this.contentIndexerCleanup=null),bt()===this&&Te(null)}async queueIngest(e){return this.ingest(e)}async queueIngestBatch(e){return this.ingestMany(e)}async ingest(e){this.lastIngestedItem=e;let n=e.envelope?.entity||e,r=n.id??n.productId??n.slug??n.url??n.name??"",s=n.url||(typeof window<"u"?window.location.href:"");if(!r&&!s){console.warn("[Akropolys] Ingestion warning: Item is missing both a stable identifier and a URL. Skipping.");return}let o=re(e);if(s){if(this.ingestedUrls.get(s)===o)return;this.ingestedUrls.set(s,o),this.saveIngestedCache()}this.ingestQueue.push(e),this.scheduleFlush()}async ingestMany(e){e.length>0&&(this.lastIngestedItem=e[e.length-1]);let n=!1;e.forEach(r=>{let s=r.envelope?.entity||r,o=s.id??s.productId??s.slug??s.url??s.name??"",i=s.url||(typeof window<"u"?window.location.href:"");if(!o&&!i){console.warn("[Akropolys] Ingestion warning: Item is missing both a stable identifier and a URL. Skipping.");return}let a=re(r);if(i){if(this.ingestedUrls.get(i)===a)return;this.ingestedUrls.set(i,a),n=!0}this.ingestQueue.push(r)}),n&&this.saveIngestedCache(),this.ingestQueue.length>0&&this.scheduleFlush()}scheduleFlush(){this.ingestTimer||this.isFlushing||(this.ingestTimer=setTimeout(()=>{this.flushQueue()},300))}async flushQueue(){if(this.isFlushing)return;if(this.isFlushing=!0,this.ingestTimer&&(clearTimeout(this.ingestTimer),this.ingestTimer=null),this.authLoading){console.debug("[Akropolys] Authentication is loading. Deferring ingestion flush."),this.isFlushing=!1;return}if(typeof navigator<"u"&&!navigator.onLine){console.warn("[Akropolys] Browser offline. Postponing ingestion."),this.isFlushing=!1;return}let e=50;try{for(;this.ingestQueue.length>0;){let n=this.ingestQueue.slice(0,e);try{await this.api.ingestBatch(n),this.ingestQueue.splice(0,n.length),this.retryCount=0}catch(r){let s=r.status||500,o=r.message||"Unknown network error";if(this.onError)try{this.onError({status:s,message:o})}catch(i){console.error("[Akropolys] Error inside onError callback:",i)}if(s>=400&&s<500&&s!==429){console.error("[Akropolys] Ingestion discarded due to client error:",o),this.ingestQueue.splice(0,n.length);continue}else{console.warn("[Akropolys] Ingestion temporarily failed. Retrying later.",o),this.scheduleFlushWithBackoff();break}}}}finally{this.isFlushing=!1}}scheduleFlushWithBackoff(){if(this.ingestTimer)return;let e=1e3,n=Math.random()*1e3,r=Math.min(e*Math.pow(2,this.retryCount),3e4)+n;this.retryCount++,this.ingestTimer=setTimeout(()=>{this.flushQueue()},r)}async queueContentIngest(e){this.contentQueue.push(e),this.scheduleContentFlush()}scheduleContentFlush(){this.contentIngestTimer||this.isContentFlushing||(this.contentIngestTimer=setTimeout(()=>{this.flushContentQueue()},300))}async flushContentQueue(){if(this.isContentFlushing)return;if(this.isContentFlushing=!0,this.contentIngestTimer&&(clearTimeout(this.contentIngestTimer),this.contentIngestTimer=null),this.authLoading){console.debug("[Akropolys] Authentication is loading. Deferring content ingestion flush."),this.isContentFlushing=!1;return}if(typeof navigator<"u"&&!navigator.onLine){console.warn("[Akropolys] Browser offline. Postponing content ingestion."),this.isContentFlushing=!1;return}let e=50;try{for(;this.contentQueue.length>0;){let n=this.contentQueue.slice(0,e);try{await this.api.ingestContentBatch(n),this.contentQueue.splice(0,n.length),this.contentRetryCount=0}catch(r){let s=r.status||500,o=r.message||"Unknown network error";if(this.onError)try{this.onError({status:s,message:o})}catch(i){console.error("[Akropolys] Error inside onError callback:",i)}if(s>=400&&s<500&&s!==429){console.error("[Akropolys] Content ingestion discarded due to client error:",o),this.contentQueue.splice(0,n.length);continue}else{console.warn("[Akropolys] Content ingestion temporarily failed. Retrying later.",o),this.scheduleContentFlushWithBackoff();break}}}}finally{this.isContentFlushing=!1}}scheduleContentFlushWithBackoff(){if(this.contentIngestTimer)return;let e=1e3,n=Math.random()*1e3,r=Math.min(e*Math.pow(2,this.contentRetryCount),3e4)+n;this.contentRetryCount++,this.contentIngestTimer=setTimeout(()=>{this.flushContentQueue()},r)}};$.INGEST_CACHE_KEY="akropolys_ingested_v3",$.INGEST_CACHE_TTL=1440*60*1e3,$.DEFAULT_API_URL="https://api.akropolys.cloud/v1",$.DEFAULT_VOICE_URL="https://voice.akropolys.cloud",$.CHROME_STRINGS_CACHE_VERSION=5;var Ie=$,It="__akropolys_client__";function bt(){return globalThis[It]??null}function Te(t){globalThis[It]=t}function G(){let t=bt();if(!t){let e=ie("NEXT_PUBLIC_AKROPOLYS_SITE_ID"),n=ie("NEXT_PUBLIC_AKROPOLYS_API_URL"),r=ie("NEXT_PUBLIC_AKROPOLYS_API_TOKEN");if(e&&r)t=new Ie({siteId:e,apiUrl:n,apiToken:r}),Te(t);else throw new Error("[Akropolys] Call initAkropolys() or set NEXT_PUBLIC_AKROPOLYS_* environment variables before using the client.")}return t}var de=D(V());var Zn=D(je()),Kt=(0,de.createContext)(null);function se(){let t=(0,de.useContext)(Kt);return t||G()}var tr=D(V());var Le=D(V());var Dt=D(V());var Vt=D(V());var Ht=D(V());var g=D(V());var Ge=new Map,We=new Set,jt=3e4,qt=1200;function be(t,e,n=Date.now()){if(!t||!e||typeof e!="object")return;let r=Ge.get(t);if(r&&r.at>n)return;let s={...r?.changedAt??{}},o=!r;for(let i of Object.keys(e))(!r||r.fields[i]!==e[i])&&(s[i]=n,o=!0);for(let i of Object.keys(s))i in e||delete s[i];if(!(!o&&r&&r.at===n)){Ge.set(t,{key:t,fields:e,at:n,changedAt:s});for(let i of We)try{i(t)}catch(a){console.error("[Akropolys] live value listener failed:",a)}}}function Bt(t){return Ge.get(t)}function zt(t){return We.add(t),()=>{We.delete(t)}}function sr(t,e=Date.now()){return!!t&&e-t.at>=jt}function ir(t,e,n=Date.now()){let r=t?.changedAt[e];return r!==void 0&&n-r<qt}function or(t){let e=Math.max(0,Math.round(t/1e3));if(e<60)return`${e}s ago`;let n=Math.round(e/60);if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`}function ar(t){if(t==null||t==="")return"\u2014";let e=String(t).trim();if(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(e)){let r=new Date(e);if(!isNaN(r.getTime()))return r.toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}let n=Number(e);return!isNaN(n)&&/^-?\d+(\.\d+)?$/.test(e)?Math.abs(n)>=1e6?`${(n/1e6).toFixed(2)}M`:Math.abs(n)>=1e3?n.toLocaleString(void 0,{maximumFractionDigits:2}):n.toString():e}function ur(t){return t.slice(t.lastIndexOf(".")+1).replace(/[_-]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^./,n=>n.toUpperCase())}var Ue=D(V());function Ze(){let t=se(),[e,n]=(0,Ue.useState)(()=>t?.api.cardFields??[]);return(0,Ue.useEffect)(()=>{if(!t)return;let r=!0;return t.api.widgetSettings().then(s=>{r&&n(s.cardFields)}),()=>{r=!1}},[t]),e}function et(t,e,n,r,s,o,i){let a=[...t],u=i?.images?.length?i.images:void 0,c=i?.live;return(e||u)&&a.push({role:"user",content:e,spoken:!0,live:c,audioUrl:s,images:u}),(n||i?.visualization)&&a.push({role:"assistant",content:n,spoken:!0,live:c,thoughtForSeconds:r&&r>0?Math.round(r*10)/10:void 0,audioUrl:o,visualization:i?.visualization}),a}var cr="Continue your previous answer exactly where it stopped. Do not repeat anything already written \u2014 just carry on from the last character.";function Yt(t,e){return t.map(n=>{let r=He(n.fields||n,e);return{...n,name:n.name||r.title,image:n.image||r.image||ue(n.images,void 0,n.url)[0]?.url,images:ue(n.images??n.fields?.images??r.images,n.image||r.image,n.url),details:r.details}})}function lr(t={}){let e=se(),n=Ze(),[r,s]=(0,g.useState)(t.initialMessages??[]),[o,i]=(0,g.useState)([]),[a,u]=(0,g.useState)([]),[c,h]=(0,g.useState)(!1),[b,y]=(0,g.useState)(!1),[A,_]=(0,g.useState)(!1),[L,M]=(0,g.useState)(!1),[k,N]=(0,g.useState)(null),[F,j]=(0,g.useState)(null),[Oe,Me]=(0,g.useState)(null),[dn,Ne]=(0,g.useState)(null),[gn,pn]=(0,g.useState)(null),W=(0,g.useRef)(null),Z=(0,g.useRef)(null),[hn,Ce]=(0,g.useState)(null),ge=(0,g.useRef)([]),it=(0,g.useRef)(!1),ot=(0,g.useRef)(!1);it.current=c,ot.current=b;let q=(0,g.useRef)(""),X=(0,g.useRef)(0),ee=(0,g.useRef)(null),te=(0,g.useRef)(!1),B=(0,g.useCallback)(()=>{ee.current!=null&&(cancelAnimationFrame(ee.current),ee.current=null)},[]),at=(0,g.useRef)(t.onToken),ut=(0,g.useRef)(t.onMeta),ct=(0,g.useRef)(t.onDone),Ae=(0,g.useRef)(t.onError),[Q,pe]=(0,g.useState)(()=>e?.api.conversation?.id??null),he=(0,g.useRef)(0),[$e,me]=(0,g.useState)(null),Fe=(0,g.useRef)({id:Q,upTo:e?.api.conversation?.cursor??0,shown:0,auto:!0}),[lt,mn]=(0,g.useState)([]),[yn,ft]=(0,g.useState)(0),J=(0,g.useCallback)(async()=>{if(!e)return[];let f=await e.api.myRequests().catch(()=>[]);return mn(f),f},[e]),_e=(0,g.useCallback)(()=>{e?.api.forgetConversation(),Fe.current={id:null,upTo:0,shown:0,auto:!1},pe(null),me(null),J()},[e,J]),vn=(0,g.useCallback)(async f=>{if(!e)return;let m=await e.api.resumeRequest(f);m!==null&&(W.current?.destroy(),B(),te.current=!0,Z.current=null,Ce(null),h(!1),y(!1),s([]),Fe.current={id:f,upTo:m,shown:0,auto:!1},me(null),pe(f),ft(v=>v+1))},[e,B]);(0,g.useEffect)(()=>{J()},[J]);let kn=(0,g.useCallback)(()=>{e?.api.leaveConversation(),pe(null),me(null),setTimeout(J,600)},[e,J]);(0,g.useEffect)(()=>{if(!e||!Q)return;let f=new AbortController,m=null,v=Fe.current,E=0,I=!1,x=()=>v.id===Q&&v.shown<v.upTo,U=S=>{if(!f.signal.aborted){if(S.type==="message"&&S.message){if(e.api.seenConversationMessage(S.message.id),x()){if(S.message.id<=v.shown)return;v.shown=S.message.id;let{role:C,text:d}=S.message,p=new Date(S.message.at).getTime();if(S.message.kind==="joined"&&s(P=>[...P,{role:"assistant",content:"",statusStage:"team_joined"}]),C==="visitor"&&d&&s(P=>[...P,{role:"user",content:d}]),C==="human"){let P=E?Math.max(1,Math.round((p-E)/1e3)):void 0;s(ae=>[...ae,{role:"assistant",content:d,human:!0,repliedSeconds:P}])}C==="visitor"&&(E=p,he.current=Math.max(he.current,p)),!x()&&C==="visitor"&&(m==="waiting"||m==="human")&&s(P=>[...P,{role:"assistant",content:"",statusStage:"with_team"}]);return}if(S.message.kind==="joined"){s(C=>[...C,{role:"assistant",content:"",statusStage:"team_joined"}]);return}if(S.message.role==="system"&&(m==="kiku"||m==="closed")){let C=m==="kiku"?"back_with_kiku":"team_closed";s(d=>[...d,{role:"assistant",content:"",statusStage:C}]),I=!0,f.abort();return}if(S.message.role!=="human")return;let R=he.current?Math.max(1,Math.round((new Date(S.message.at).getTime()-he.current)/1e3)):void 0,l=S.message.text;s(C=>[...C,{role:"assistant",content:l,human:!0,repliedSeconds:R&&R>0?R:void 0}]);return}S.type==="status"&&S.status&&(m!==null&&m!==S.status&&J(),m=S.status,me(S.status))}};return(async()=>{if(v.auto&&v.id===Q){let R=await e.api.conversationState().catch(()=>null);if(f.signal.aborted)return;if(v.auto=!1,R&&R.status!=="waiting"&&R.status!=="human"&&R.unread===0){_e();return}}let S=3e3;for(;!f.signal.aborted;){let R=await e.api.conversationEvents(U,f.signal,x()?v.shown:void 0).catch(()=>0);if(I||R===200&&(m==="kiku"||m==="closed"))return;if(R===404){e.api.forgetConversation(),pe(null);return}S=R===200?3e3:Math.min(S*2,6e4),await new Promise(l=>setTimeout(l,S))}})(),()=>f.abort()},[e,Q,yn,J,_e]),(0,g.useEffect)(()=>{at.current=t.onToken,ut.current=t.onMeta,ct.current=t.onDone,Ae.current=t.onError},[t.onToken,t.onMeta,t.onDone,t.onError]),(0,g.useEffect)(()=>()=>{W.current?.destroy(),B()},[B]);let Ke=(0,g.useCallback)(()=>{if(ee.current!=null)return;let f=()=>{let m=q.current;if(m.length>X.current){X.current=m.length;let v=m;s(E=>{let I=[...E];return I.length>0&&I[I.length-1].role==="assistant"&&(I[I.length-1]={...I[I.length-1],content:v}),I})}X.current<q.current.length||!te.current?ee.current=requestAnimationFrame(f):(ee.current=null,y(!1))};ee.current=requestAnimationFrame(f)},[]),oe=(0,g.useRef)(new Set),ne=(0,g.useRef)(new Set);(0,g.useEffect)(()=>()=>{oe.current.clear(),ne.current.forEach(f=>clearTimeout(f)),ne.current.clear()},[]);let Sn=(0,g.useCallback)(f=>{if(!f||oe.current.has(f))return;oe.current.add(f);let m=Date.now()+600*1e3,v=4e3,E=U=>{oe.current.delete(f),s(S=>{let R=[...S];for(let l=R.length-1;l>=0;l--)if(R[l].role==="assistant"){R[l]={...R[l],visualizing:!1,...U};break}return R})},I=async()=>{if(!oe.current.has(f))return;if(Date.now()>m){E({});return}let U=await e.api?.getVideoStatus?.(f);if(U?.status==="SUCCESS"&&U.videoUrl){let R=U.videoUrl;R.startsWith("/")&&e?.apiUrl&&(R=`${e.apiUrl.replace(/\/+$/,"")}${R}`),E({visualization:R,visualizationType:"video"});return}if(U?.status==="FAILED"){E({});return}v=Math.min(v*1.4,2e4);let S=setTimeout(()=>{ne.current.delete(S),I()},v);ne.current.add(S)},x=setTimeout(()=>{ne.current.delete(x),I()},v);ne.current.add(x)},[e]),ye=(0,g.useCallback)((f,m,v)=>{let E=m,I=null,x=[],U=Date.now(),S=m;m&&(q.current=v,X.current=v.length,te.current=!1);let R=()=>{E?m&&(h(!1),y(!0),Ke()):(h(!1),y(!0),q.current="",X.current=0,te.current=!1,E=!0,Ke())};f.on("meta",l=>{I=l,i(l.sources??[]),l.intent&&Ne(l.intent),Array.isArray(l.allowedActions)&&pn(l.allowedActions),l.action&&Me(l.action),l.action?.kikuKey&&e&&(e.setKikuKey(l.action.kikuKey),l.action.kikuPub&&e.setKikuPub(l.action.kikuPub)),l.action?.type==="request_human"&&l.action.conversationId&&e&&(e.api.openConversation(l.action.conversationId,l.action.conversationToken),pe(e.api.conversation?.id??null),ft(C=>C+1),me("waiting"),J()),ut.current?.(l)}),f.on("status",l=>{l?.message&&(R(),s(C=>{let d=[...C],p=d[d.length-1];return p?.role==="assistant"&&(d[d.length-1]={...p,statusMessage:l.message,statusStage:l.stage}),d}))}),f.on("entity_ref",l=>{l?.id&&(x.includes(l.id)||x.push(l.id),u(C=>C.includes(l.id)?C:[...C,l.id]))}),f.on("knowledge_images",l=>{R(),s(C=>{let d=[...C],p=d[d.length-1];return p?.role==="assistant"&&(d[d.length-1]={...p,knowledgeImages:l}),d})}),f.on("stale_notice",l=>{R(),s(C=>{let d=[...C],p=d[d.length-1];return p?.role==="assistant"&&(d[d.length-1]={...p,staleNotices:l}),d})}),f.on("live_ref",l=>{l?.fields&&typeof l.fields=="object"&&be(l.key,l.fields,typeof l.at=="number"?l.at:void 0),R(),s(C=>{let d=[...C],p=d[d.length-1];if(p?.role==="assistant"){let P=p.liveKeys??[];P.includes(l.key)||(d[d.length-1]={...p,liveKeys:[...P,l.key]})}return d})}),f.on("thinking",l=>{R(),s(C=>{let d=[...C],p=d[d.length-1];return p?.role==="assistant"&&(d[d.length-1]={...p,thinking:p.thinking?p.thinking+`
13
- `+l:l}),d})}),f.on("token",l=>{if(R(),!S){S=!0;let C=Math.max(1,Math.round((Date.now()-U)/1e3));s(d=>{let p=[...d],P=p[p.length-1];return P?.role==="assistant"&&(p[p.length-1]={...P,thoughtForSeconds:C}),p})}q.current+=l,at.current?.(l)}),f.on("viz",l=>{if(l.status==="generating"||l.status==="generating_video"){R(),s(C=>{let d=[...C];return d.length>0&&d[d.length-1].role==="assistant"&&(d[d.length-1]={...d[d.length-1],visualizing:!0,visualizationType:l.status==="generating_video"?"video":"image",visualizingText:l.status==="generating_video"?"Generating video\u2026":"Visualizing\u2026"}),d});return}if(l.status==="pending"){Sn(l.jobId);return}R(),s(C=>{let d=[...C];if(d.length>0&&d[d.length-1].role==="assistant"){let p=l.status==="done"?l.url:void 0;p&&p.startsWith("/")&&e?.apiUrl&&(p=`${e.apiUrl.replace(/\/+$/,"")}${p}`);let P=l.status==="done"?l.mediaType||(p?.includes("/videos/")?"video":"image"):void 0;d[d.length-1]={...d[d.length-1],visualizing:!1,...l.status==="done"&&p?{visualization:p,visualizationType:P}:{}}}return d})}),f.on("done",l=>{h(!1),te.current=!0,ee.current==null&&y(!1),s(p=>{let P=[...p];if(P.length>0&&P[P.length-1].role==="assistant"){let ae=I?.sources??[];P[P.length-1]={...P[P.length-1],sources:Yt(ae,e?.api.cardFields??[]),referencedIds:x,intent:I?.intent}}return P});let C=I?.action,d=["search","capture","capture_all","delete","view_history","request_kiku_key","visualize","open_memory"];if(C?.type&&!d.includes(C.type)){let p=(I?.sources??[]).filter(dt=>dt?.id&&x.includes(dt.id)),P={...C,items:p};window.dispatchEvent(new CustomEvent("akropolys:action",{detail:P})),e.onAction?.(P);let ae=String(C.type).replace(/[^a-z]/gi,"").toLowerCase();(ae==="addtocart"||ae==="cart")&&e.onAddToCart&&p.length>0&&e.onAddToCart(p)}ct.current?.(l)}),f.on("error",l=>{te.current=!0,B(),h(!1),y(!1);let C=q.current;m||E&&C?(X.current=C.length,s(d=>{let p=[...d];return p.length>0&&p[p.length-1].role==="assistant"&&(p[p.length-1]={...p[p.length-1],content:C}),p}),M(!0)):(N(l.message),j(l.code??null),s(d=>{let p=d;return p.length>0&&p[p.length-1].role==="assistant"&&!p[p.length-1].content&&(p=p.slice(0,-1)),p})),Ae.current?.(l)})},[e,Ke,B]),Ee=(0,g.useCallback)((f,m,v,E,I)=>{s(x=>[...x,{role:"assistant",content:"",thinking:""}]),h(!0),y(!0),_(!1),M(!1),N(null),j(null),u([]),Me(null),Ne(null),q.current="",X.current=0;try{let x=e.chat(m,f,v,E,I);W.current=x,ye(x,!1,"")}catch(x){h(!1),y(!1),N(x?.message??"Chat request failed"),s(U=>U.slice(0,-1)),Ae.current?.(x)}},[e,ye]),wn=(0,g.useCallback)(async(f,m,v,E,I)=>{if(!f.trim())return;he.current=Date.now();let x={role:"user",content:m??f,images:v?.filter(S=>S.type==="image").map(S=>S.preview||S.data)};if(c||b){if(Z.current)return;Z.current={query:f,displayQuery:m,attachments:v,forcedIntent:E,captureTargets:I},Ce({...x,queued:!0});return}s(S=>[...S,x]);let U=r.map(S=>({role:S.role,content:S.content}));Ee(U,f,v,E,I)},[r,c,b,Ee]);(0,g.useEffect)(()=>{if(c||b)return;let f=r;if(ge.current.length>0){let E=ge.current;ge.current=[];for(let I of E)f=et(f,I.heard,I.said,I.duration,I.userAudioUrl,I.assistantAudioUrl,I.media);s(I=>{let x=I;for(let U of E)x=et(x,U.heard,U.said,U.duration,U.userAudioUrl,U.assistantAudioUrl,U.media);return x})}if(!Z.current)return;let m=Z.current;Z.current=null,Ce(null);let v=f.map(E=>({role:E.role,content:E.content}));s(E=>[...E,{role:"user",content:m.displayQuery??m.query,images:m.attachments?.filter(I=>I.type==="image").map(I=>I.preview||I.data)}]),Ee(v,m.query,m.attachments,m.forcedIntent,m.captureTargets)},[c,b,r,Ee]);let In=(0,g.useCallback)(()=>{if(c||b)return;let f=r[r.length-1];if(f){W.current?.destroy(),_(!1),M(!1),h(!0),N(null),j(null);try{if(f.role==="assistant"){let m=r.map(E=>({role:E.role,content:E.content})),v=e.chat(cr,m);W.current=v,ye(v,!0,f.content||"")}else{let m=r.slice(0,-1).map(E=>({role:E.role,content:E.content})),v=e.chat(f.content,m);W.current=v,ye(v,!1,"")}}catch(m){h(!1),N(m?.message??"Chat request failed"),Ae.current?.(m)}}},[e,r,c,b,ye]),bn=(0,g.useCallback)(()=>{W.current?.destroy(),B(),te.current=!0,q.current="",X.current=0,Z.current=null,ge.current=[],oe.current.clear(),ne.current.forEach(f=>clearTimeout(f)),ne.current.clear(),Ce(null),s([]),i([]),u([]),y(!1),_(!1),M(!1),N(null),j(null),h(!1),Me(null),Ne(null),_e()},[_e,B]),De=(0,g.useCallback)(()=>{if(W.current?.destroy(),B(),te.current=!0,h(!1),y(!1),q.current){let f=q.current;X.current=f.length,s(m=>{let v=[...m];return v.length>0&&v[v.length-1].role==="assistant"&&(v[v.length-1]={...v[v.length-1],content:f}),v})}_(!0),s(f=>f.map(m=>m.visualizing?{...m,visualizing:!1}:m))},[B]),Cn=(0,g.useCallback)(()=>{Z.current&&De()},[De]),An=(0,g.useCallback)((f,m,v,E,I,x)=>{let U=f.trim(),S=m.trim();if(!(!U&&!S&&!x?.images?.length&&!x?.visualization)){if(it.current||ot.current){ge.current.push({heard:U,said:S,duration:v,userAudioUrl:E,assistantAudioUrl:I,media:x});return}s(R=>et(R,U,S,v,E,I,x))}},[]),_n=(0,g.useMemo)(()=>Yt(o,n),[o,n]);return{messages:r,sources:_n,referencedIds:a,loading:c,streaming:b,error:k,errorCode:F,lastAction:Oe,lastIntent:dn,allowedActions:gn,send:wn,queuedMessage:hn,sendQueuedNow:Cn,appendSpokenExchange:An,stop:De,stopped:A,interrupted:L,continueGenerating:In,reset:bn,humanPending:!!Q&&($e==="waiting"||$e==="human"),leaveHuman:kn,requests:lt.length>0||!Q?lt:[{id:Q,status:$e??"waiting",summary:""}],activeRequestId:Q,openRequest:vn}}var Xt=D(V());var Jt=D(V());function Qt(t={}){if(typeof window>"u"||typeof WebSocket>"u")return()=>{};let e=t.client??G(),{apiUrl:n,siteId:r,apiToken:s}=e.api??{};if(!n||!r||!s)return t.onError?.(new Error("subscribeLiveStream: client is not configured \u2014 is this inside <AkropolysProvider>?")),()=>{};let o=!1,i=null,a=0,u=null,c=n.replace(/^http/,"ws"),h=new URLSearchParams({site_id:r});t.keys?.length&&h.set("keys",t.keys.join(","));function b(){o||(i=new WebSocket(`${c}/live/stream?${h}`,[`akropolys.token.${s}`]),i.onopen=()=>{a=0},i.onmessage=y=>{let A;try{A=JSON.parse(y.data)}catch{return}if(Array.isArray(A.records))for(let _ of A.records)!_?.key||!_.fields||be(_.key,_.fields,_.at)},i.onerror=()=>{t.onError?.(new Error("live stream socket error"))},i.onclose=()=>{if(o)return;let y=Math.min(15e3,1e3*2**a++);u=setTimeout(b,y)})}return b(),()=>{o=!0,u&&clearTimeout(u),i?.close()}}var Gt=D(V());var tt=D(V());function oi(t){if(typeof t=="string")return{themeAttr:t,vars:void 0};if(!t)return{themeAttr:void 0,vars:void 0};let e={};return t.primaryColor&&(e["--hsk-primary"]=t.primaryColor),t.backgroundColor&&(e["--hsk-bg"]=t.backgroundColor,e["--hsk-chat-bg"]=t.backgroundColor),t.textColor&&(e["--hsk-text"]=t.textColor,e["--hsk-chat-text"]=t.textColor),t.fontFamily&&(e["--hsk-font"]=t.fontFamily),t.fontSize&&(e["--hsk-font-size"]=t.fontSize),t.mobileFontSize&&(e["--hsk-mobile-font-size"]=t.mobileFontSize),t.borderRadius&&(e["--hsk-border-radius"]=t.borderRadius),{themeAttr:void 0,vars:e}}var dr="coffee",gr=["light","dark","mahogany","blush","coffee","midnight"];function Wt(t){return typeof t=="string"&&gr.includes(t)}function ui(t){if(Wt(t))return t;try{let e=typeof window<"u"?localStorage.getItem("akropolys_theme"):null;if(Wt(e))return e}catch{}return dr}var Zt="hsk-sounds",T=null,Y=null;function en(){try{return localStorage.getItem(Zt)!=="off"}catch{return!0}}function li(t){try{localStorage.setItem(Zt,t?"on":"off")}catch{}t&&tn()}function tn(){if(typeof window>"u")return;try{let e=navigator.audioSession;e&&e.type!=="playback"&&(e.type="playback")}catch{}if(T){T.state==="suspended"&&T.resume().catch(()=>{});return}let t=window.AudioContext||window.webkitAudioContext;if(t)try{T=new t({latencyHint:"interactive"}),Y=T.createGain(),Y.gain.value=.28,Y.connect(T.destination);let e=T.createBuffer(1,1,T.sampleRate),n=T.createBufferSource();n.buffer=e,n.connect(T.destination),n.start(0),T.resume().catch(()=>{})}catch{T=null}}function z(t,e,n,r,s){if(!T||!Y)return;let o=T.createOscillator();o.type="sine",o.frequency.setValueAtTime(e,t),o.frequency.exponentialRampToValueAtTime(Math.max(40,e*n),t+r);let i=T.createBiquadFilter();i.type="lowpass",i.Q.value=.9,i.frequency.setValueAtTime(Math.min(18e3,e*7),t),i.frequency.exponentialRampToValueAtTime(Math.max(80,e*1.5),t+r);let a=T.createGain();a.gain.setValueAtTime(1e-4,t),a.gain.exponentialRampToValueAtTime(s,t+.006),a.gain.exponentialRampToValueAtTime(1e-4,t+r),o.connect(i),i.connect(a),a.connect(Y),o.start(t),o.stop(t+r+.02)}function nn(t,e){if(!T||!Y)return;let n=Math.floor(T.sampleRate*.03),r=T.createBuffer(1,n,T.sampleRate),s=r.getChannelData(0);for(let u=0;u<n;u++)s[u]=(Math.random()*2-1)*Math.pow(1-u/n,3);let o=T.createBufferSource();o.buffer=r;let i=T.createBiquadFilter();i.type="bandpass",i.frequency.value=2600,i.Q.value=5;let a=T.createGain();a.gain.value=e,o.connect(i),i.connect(a),a.connect(Y),o.start(t)}function fi(){return en()?T?T.state:"unsupported":"off"}function pr(t){!T||!Y||(z(t,587.33,.985,.16,.38),z(t+.048,739.99,.985,.18,.42),z(t+.096,880,.985,.28,.46),z(t+.105,1174.66,.985,.22,.22),nn(t+.096,.16))}function hr(t){!T||!Y||z(t,659.25,.97,.09,.26)}function di(t,e=!1){if(!e&&!en()||(tn(),!T||!Y||T.state==="closed"))return;T.state==="suspended"&&T.resume().catch(()=>{});let n=T.currentTime+.01;switch(t){case"connect":pr(n);break;case"heard":hr(n);break;case"reply":z(n,440,.94,.13,.5),z(n+.09,660,.94,.16,.42);break;case"interrupt":z(n,520,.62,.17,.4);break;case"send":z(n,300,1.16,.1,.22);break;case"pin":nn(n,.35),z(n+.02,880,.97,.07,.22);break}}function rn(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var s=t.length;for(e=0;e<s;e++)t[e]&&(n=rn(t[e]))&&(r&&(r+=" "),r+=n)}else for(n in t)t[n]&&(r&&(r+=" "),r+=n);return r}function sn(){for(var t,e,n=0,r="",s=arguments.length;n<s;n++)(t=arguments[n])&&(e=rn(t))&&(r&&(r+=" "),r+=e);return r}function mi(...t){return sn(t)}var nt=D(V()),H=new Map;function rt(t,e="hsk-font"){let n=5381;for(let r=0;r<t.length;r++)n=(n<<5)+n+t.charCodeAt(r)>>>0;return`${e}-${n.toString(36)}`}function mr(t){let e=t.split("?")[0].split("#")[0].split(".").pop()?.toLowerCase();return e==="woff2"?"woff2":e==="woff"?"woff":e==="otf"?"opentype":e==="ttf"?"truetype":""}function st(t){let e=t.trim();return!e||/["'()\\\s]/.test(e)||/^(javascript|vbscript):/i.test(e)?null:e}var an=t=>/["\\{}<>;\n\r]/.test(t)?"":t.trim(),yr=/^[Uu]\+[0-9A-Fa-f?]{1,6}(-[0-9A-Fa-f]{1,6})?$/,on=t=>{let e=t.split(",").map(n=>n.trim()).filter(Boolean);return e.length===0||!e.every(n=>yr.test(n))?"":e.join(", ")},un=t=>/^\d{3}( \d{3})?$/.test(t)?t:"400";function vr(t,e){(0,nt.useEffect)(()=>{if(!t||!e||typeof document>"u")return;let n=rt(t);if(H.set(t,(H.get(t)??0)+1),!document.getElementById(n)){let r=document.createElement("style");r.id=n,r.textContent=e,document.head.appendChild(r)}return()=>{let r=(H.get(t)??1)-1;if(r>0){H.set(t,r);return}H.delete(t),document.getElementById(n)?.remove()}},[t,e])}function cn(t){let e=an(t.family);return e?t.faces.map(n=>{let r=st(n.url);return r?`@font-face{font-family:"${e}";font-style:normal;font-weight:${un(n.weight)};font-display:swap;src:url(${r}) format("woff2");`+(on(n.unicodeRange)?`unicode-range:${on(n.unicodeRange)};`:"")+"}":""}).join(""):""}function vi(t){let e=t?.faces??[],n=t&&e.length?cn(t):"";vr(n?`script|${t.family}|${e.map(r=>r.url).join("|")}`:"",n)}async function ki(t,e=0){if(typeof document>"u"||!("fonts"in document))return;let n=cn(t);if(!n)return;let r=`script|${t.family}|${t.faces.map(o=>o.url).join("|")}`;H.set(r,(H.get(r)??0)+1);let s=rt(r);if(!document.getElementById(s)){let o=document.createElement("style");o.id=s,o.textContent=n,document.head.appendChild(o)}if(e>0){let o=document.fonts,i=t.family.replace(/^['"]|['"]$/g,""),a=Array.from(o||[]).filter(c=>c.family.replace(/^['"]|['"]$/g,"")===i),u=a.length>0?a.map(c=>c.load().catch(()=>{})):t.faces.map(c=>{let h=st(c.url);if(!h)return Promise.resolve();try{return new window.FontFace(i,`url(${h})`,{weight:un(c.weight),style:"normal"}).load().then(y=>{document.fonts?.add(y)}).catch(()=>{})}catch{return Promise.resolve()}});await Promise.race([Promise.all(u),new Promise(c=>setTimeout(c,e))])}}var ln=["400","500","600","700"];function fn(t,e){let n=Array.from(new Set(Array.from(Object.values(e).join("")))).join(""),r=t.map(s=>`"${s.replace(/^['"]|['"]$/g,"")}"`).join(", ");return{text:n,stack:r}}function Si(t,e){let n=typeof document<"u"?document.fonts:null,{text:r,stack:s}=fn(t,e);if(!n?.check||!r||!s)return!0;try{return ln.every(o=>n.check(`${o} 16px ${s}`,r))}catch{return!0}}async function wi(t,e,n){let r=typeof document<"u"?document.fonts:null;if(!r?.load)return;let{text:s,stack:o}=fn(t,e);!s||!o||await Promise.race([Promise.all(ln.map(i=>r.load(`${i} 16px ${o}`,s).catch(()=>{}))),new Promise(i=>setTimeout(i,n))])}function Ii(t){let e=typeof t=="object"&&t?t:void 0,n=an(e?.fontFamily?.split(",")[0].trim().replace(/^['"]|['"]$/g,"")??""),r=typeof e?.fontUrl=="string"?{normal:e.fontUrl}:e?.fontUrl??{},s=r.normal??"",o=r.bold??"",i=r.variable??"";(0,nt.useEffect)(()=>{if(!n||!s&&!o&&!i)return;let a=i?[["100 900",i]]:[["400",s],["700",o]],u=[];for(let[y,A]of a){if(!A)continue;let _=st(A);if(!_)continue;let L=mr(_);u.push(`@font-face{font-family:"${n}";font-style:normal;font-weight:${y};font-display:swap;src:url(${_})${L?` format("${L}")`:""};}`)}if(u.length===0)return;let c=u.join(""),h=`${n}|${s}|${o}|${i}`,b=rt(h,"hsk-host-font");if(H.set(h,(H.get(h)??0)+1),!document.getElementById(b)){let y=document.createElement("style");y.id=b,y.textContent=c,document.head.appendChild(y)}return()=>{let y=(H.get(h)??1)-1;if(y>0){H.set(h,y);return}H.delete(h),document.getElementById(b)?.remove()}},[n,s,o,i])}export{Re as a,D as b,V as c,ue as d,He as e,Ie as f,je as g,Kt as h,se as i,qt as j,Bt as k,zt as l,sr as m,ir as n,or as o,ar as p,ur as q,Ze as r,lr as s,Qt as t,oi as u,ui as v,en as w,li as x,tn as y,fi as z,di as A,mi as B,vi as C,ki as D,Si as E,wi as F,Ii as G};
14
- /*! Bundled license information:
15
-
16
- react/cjs/react-jsx-runtime.production.js:
17
- (**
18
- * @license React
19
- * react-jsx-runtime.production.js
20
- *
21
- * Copyright (c) Meta Platforms, Inc. and affiliates.
22
- *
23
- * This source code is licensed under the MIT license found in the
24
- * LICENSE file in the root directory of this source tree.
25
- *)
26
-
27
- react/cjs/react.production.js:
28
- (**
29
- * @license React
30
- * react.production.js
31
- *
32
- * Copyright (c) Meta Platforms, Inc. and affiliates.
33
- *
34
- * This source code is licensed under the MIT license found in the
35
- * LICENSE file in the root directory of this source tree.
36
- *)
37
- */