@callimacus/thamyr-react 4.4.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.core.md CHANGED
@@ -3,6 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.6.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-core-v4.5.0...thamyr-core-v4.6.0) (2026-10-13)
7
+
8
+
9
+ ### Features
10
+
11
+ * **react:** component actions — actionOf, useActions and a delivered submit ([#819](https://github.com/callimacus/thamyr-sdk/issues/819)) ([2876ca4](https://github.com/callimacus/thamyr-sdk/commit/2876ca4ca1af0bbc4024488595036e2063765554))
12
+
13
+ ## [4.5.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-core-v4.4.1...thamyr-core-v4.5.0) (2026-10-12)
14
+
15
+
16
+ ### Miscellaneous Chores
17
+
18
+ * **thamyr-core:** Synchronize thamyr versions
19
+
6
20
  ## [4.4.1](https://github.com/callimacus/thamyr-sdk/compare/thamyr-core-v4.4.0...thamyr-core-v4.4.1) (2026-10-10)
7
21
 
8
22
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,36 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.6.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-react-v4.5.0...thamyr-react-v4.6.0) (2026-10-13)
7
+
8
+
9
+ ### Features
10
+
11
+ * **react:** component actions — actionOf, useActions and a delivered submit ([#819](https://github.com/callimacus/thamyr-sdk/issues/819)) ([2876ca4](https://github.com/callimacus/thamyr-sdk/commit/2876ca4ca1af0bbc4024488595036e2063765554))
12
+
13
+
14
+ ### Dependencies
15
+
16
+ * The following workspace dependencies were updated
17
+ * dependencies
18
+ * @callimacus/thamyr bumped from ^4.5.0 to ^4.6.0
19
+ * @callimacus/thamyr-core bumped from ^4.5.0 to ^4.6.0
20
+
21
+ ## [4.5.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-react-v4.4.1...thamyr-react-v4.5.0) (2026-10-12)
22
+
23
+
24
+ ### Features
25
+
26
+ * **react:** add CallimacusBar, a themable prompt bar that always shows the Callimacus mark ([#817](https://github.com/callimacus/thamyr-sdk/issues/817)) ([71fd9be](https://github.com/callimacus/thamyr-sdk/commit/71fd9bee1133ccca2021a1c8a6d7370f372576ae))
27
+
28
+
29
+ ### Dependencies
30
+
31
+ * The following workspace dependencies were updated
32
+ * dependencies
33
+ * @callimacus/thamyr bumped from ^4.4.1 to ^4.5.0
34
+ * @callimacus/thamyr-core bumped from ^4.4.1 to ^4.5.0
35
+
6
36
  ## [4.4.1](https://github.com/callimacus/thamyr-sdk/compare/thamyr-react-v4.4.0...thamyr-react-v4.4.1) (2026-10-10)
7
37
 
8
38
 
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * Copyright © 2025–2026 Solomei AI SRL. All rights reserved.
3
+ *
4
+ * Proprietary software, licensed for use by Callimacus customers only.
5
+ * See LICENSE.md for the full terms.
6
+ *
7
+ */
8
+ import{Thamyr as e}from"@callimacus/thamyr";import{callimacusService as t,ThamyrResponseType as n,applyBlockPatch as r}from"@callimacus/thamyr-core";import o from"react";const s=e=>{let t;const n=new Set,r=(e,r)=>{const o="function"==typeof e?e(t):e;if(!Object.is(o,t)){const e=t;t=(null!=r?r:"object"!=typeof o||null===o)?o:Object.assign({},t,o),n.forEach(n=>n(t,e))}},o=()=>t,s={setState:r,getState:o,getInitialState:()=>i,subscribe:e=>(n.add(e),()=>n.delete(e))},i=t=e(r,o,s);return s},i=e=>e;const a=e=>{const t=(e=>e?s(e):s)(e),n=e=>function(e,t=i){const n=o.useSyncExternalStore(e.subscribe,o.useCallback(()=>t(e.getState()),[e,t]),o.useCallback(()=>t(e.getInitialState()),[e,t]));return o.useDebugValue(n),n}(t,e);return Object.assign(n,t),n},c=e=>e?a(e):a;function d(e,t){for(const n of e)try{n(t)}catch(e){console.error("[Thamyr] Listener threw:",e)}}function u(e,t){let o=!1;const s=e.map(e=>{if(e.type!==n.CHAPTER_EVENT)return e;const s=r(e.chapter,t);return s===e.chapter?e:(o=!0,{...e,chapter:s})});return o?s:e}const l=c()((r,o)=>{let s,i=0;const a=new Set,c=new Set,l=new Set;return{connectionStatus:"idle",messages:[],storyId:void 0,error:void 0,_initialized:!1,_thamyr:void 0,init(m){if(o()._initialized)return;if("undefined"==typeof window)return void console.debug("[Thamyr] init() skipped: no browser environment detected (SSR).");const{clientId:y}=m;if(!y){console.error("[Thamyr] clientId is required. Pass your Callimacus Client ID (`cal-pk-…`) to useInitThamyr().");const e={code:0,message:"clientId is required. Pass your Callimacus Client ID (`cal-pk-…`) to useInitThamyr()."};return r({connectionStatus:"error",error:e}),d(l,e),void d(c,"error")}void 0!==m.maxMessages&&m.maxMessages<0&&console.warn("[Thamyr] maxMessages must be >= 0. Received:",m.maxMessages,". Clamping to 1.");const h=0===m.maxMessages?1/0:Math.max(1,m.maxMessages??50);let f;r({connectionStatus:"connecting",error:void 0});try{f=new e({clientId:y,endpoint:m.endpoint,uiObserver:m.uiObserver})}catch(e){console.error("[Thamyr] Failed to create Thamyr instance:",e);const t={code:0,message:e instanceof Error?e.message:String(e)};return r({connectionStatus:"error",error:t}),d(l,t),void d(c,"error")}const w=++i;f.onResponse(e=>{i===w&&(e.type===n.BLOCK_PATCH?r(t=>({messages:u(t.messages,e.data)})):r(t=>{const r=[...t.messages,e];return{messages:r.length>h?r.slice(-h):r,...e.type===n.STORY_CREATED&&{storyId:e.story.id}}}),d(a,e))}),f.onError(e=>{i===w&&(r({error:e,connectionStatus:"error"}),d(l,e),d(c,"error"))}),s=t.onConnectionStatus(e=>{if(i!==w)return;const t=e?"connected":"disconnected";r({connectionStatus:t}),d(c,t)}),function(e){r({_initialized:Boolean(e),_thamyr:e})}(f)},reset(){if(o()._initialized){i++;try{s?.()}catch(e){console.error("[Thamyr] Error unsubscribing connection status listener:",e)}try{t.disconnect()}catch(e){console.error("[Thamyr] Error disconnecting:",e)}s=void 0,r({_initialized:!1,_thamyr:void 0,connectionStatus:"idle",messages:[],storyId:void 0,error:void 0})}else"idle"!==o().connectionStatus&&r({connectionStatus:"idle",error:void 0})},sendEvent(e,t){const n=o()._thamyr;if(!n)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=o();if("connected"!==s){const e={code:0,message:`Cannot send event: connection status is "${s}". Wait for connected status before sending.`};throw r({error:e}),d(l,e),new Error(e.message)}n.sendUserInteraction(e,t)},sendAudio(e,t){const n=o()._thamyr;if(!n)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=o();if("connected"!==s){const e={code:0,message:`Cannot send audio: connection status is "${s}". Wait for connected status before sending.`};throw r({error:e}),d(l,e),new Error(e.message)}n.sendAudio(e,t)},addResponseListener:e=>(a.add(e),()=>{a.delete(e)}),addConnectionListener:e=>(c.add(e),()=>{c.delete(e)}),addErrorListener:e=>(l.add(e),()=>{l.delete(e)})}});let m=!1,y=0;const h=new Set;function f(){m=!0}function w(){y++,m=!0}function g(){y--,queueMicrotask(()=>{if(y>0)return;m=!1;const e=[...h];h.clear();for(const t of e)t(new Error("[Thamyr] SDK was torn down: useInitThamyr() unmounted while this call was waiting for initialization."))})}function S(e){return new Error(`[Thamyr] SDK initialization failed: ${e?.message??"unknown error"}`)}async function p(){if("undefined"==typeof window)throw new Error("[Thamyr] The generated API is browser-only; this call ran without a browser environment (SSR).");const e=l.getState();if(e._thamyr)return e._thamyr;if(!m)throw new Error("[Thamyr] SDK is not initialized and no useInitThamyr() is mounted. Add useInitThamyr({clientId: 'cal-pk-…'}) to your root component.");if("error"===e.connectionStatus)throw S(e.error);return new Promise((e,t)=>{let n=!1;const r=e=>{n||(n=!0,s(),h.delete(o),e())},o=e=>{r(()=>{t(e)})};h.add(o);const s=l.subscribe(n=>{if(n._thamyr){const t=n._thamyr;r(()=>{e(t)})}else"error"===n.connectionStatus&&r(()=>{t(S(n.error))})})})}const b=new Set(["then","catch","finally","toJSON"]),T=new Set(Object.getOwnPropertyNames(Object.prototype));function E(e){return"string"!=typeof e||T.has(e)}const v=new Map,I=new Proxy({},{get(e,t){if(E(t))return Reflect.get(e,t);if(b.has(t))return;const n=t;let r=v.get(n);return void 0===r&&(r=function(e){const t=new Map;return new Proxy({},{get(n,r){if(E(r))return Reflect.get(n,r);if(b.has(r))return;const o=r;let s=t.get(o);return void 0===s&&(s=async(...t)=>{const n=(await p())[e],r=n?.[o];if("function"!=typeof r)throw new TypeError(`[Thamyr] ${e}.${o} is not part of the generated API surface.`);return Reflect.apply(r,n,t)},t.set(o,s)),s}})}(n),v.set(n,r)),r}});export{f as a,w as b,c,g as m,I as t,l as u,p as w};
9
+ //# sourceMappingURL=api-Cot7UUo0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-Cot7UUo0.js","sources":["../../../../../node_modules/zustand/esm/vanilla.mjs","../../../../../node_modules/zustand/esm/react.mjs","../../../../src/callimacus/store.ts","../../../../src/callimacus/api.ts"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n",null,null],"names":["createStoreImpl","createState","state","listeners","Set","setState","partial","replace","nextState","Object","is","previousState","assign","forEach","listener","getState","api","getInitialState","initialState","subscribe","add","delete","identity","arg","createImpl","createStore","useBoundStore","selector","slice","React","useSyncExternalStore","useCallback","useDebugValue","useStore","create","notifyListeners","error","console","patchedHistory","messages","patch","isPatched","patched","map","message","type","ThamyrResponseType","CHAPTER_EVENT","chapter","applyBlockPatch","useCallimacusStore","set","get","unsubConnectionStatus","generation","responseListeners","connectionListeners","errorListeners","connectionStatus","storyId","undefined","_initialized","_thamyr","init","config","window","debug","clientId","errorMessage","code","maxMessages","warn","Infinity","Math","max","thamyr","Thamyr","endpoint","uiObserver","Error","String","currentGen","onResponse","response","BLOCK_PATCH","data","length","STORY_CREATED","story","id","onError","callimacusService","onConnectionStatus","connected","status","Boolean","setInitState","reset","disconnect","sendEvent","payload","sendUserInteraction","sendAudio","audio","query","addResponseListener","cb","addConnectionListener","addErrorListener","wasInitRequested","mountedInitOwners","pendingRejecters","markInitRequested","markInitOwnerMounted","markInitOwnerUnmounted","queueMicrotask","rejecters","clear","rejectWaiter","initError","async","waitForInstance","Promise","resolve","reject","isSettled","settle","action","unsubscribe","rejecter","current","instance","blockedNames","objectPrototypeMembers","getOwnPropertyNames","prototype","isPassthroughProperty","property","has","namespaces","Map","thamyrApi","Proxy","target","Reflect","name","namespace","namespaceName","methods","method","args","fn","TypeError","apply","createNamespaceFacade"],"mappings":"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","x_google_ignoreList":[0,1]}
package/dist/esm/index.js CHANGED
@@ -5,5 +5,5 @@
5
5
  * See LICENSE.md for the full terms.
6
6
  *
7
7
  */
8
- import{UserInteractionType as e,interactionRound as t,landingRound as n}from"@callimacus/thamyr-core";export{ADD_TO_CART_RESULT_BLOCK,CallimacusEvent,ChapterStatus,ClientEvents,GalleryMode,LANDING_VALUE_MAX_LENGTH,SLInputEventType,ServerEvents,ThamyrHttpError,ThamyrResponseType,UserInteractionType,addToCartResultOf,applyBlockPatch,blockKeyOf,callimacusService,clearIntentSessionId,ensureIntentSessionId,extractTtsAudio,getIntentSessionId,initIntent,interactionRound,isSetProduct,landingRound,logger,receptorsOf,setConsent,setDebug,setDebugPanel,setGeo,setIntentSessionMaxAge,transformImageUrl}from"@callimacus/thamyr-core";import{t as r,w as o,u as a,m as i,a as c,b as s}from"./chunks/api-PeedNYnN.js";import{useMemo as u,useEffect as d,useState as l,useRef as p,useCallback as m}from"react";import"@callimacus/thamyr";function v(e,t){const n=p(t);n.current=t,d(()=>e(e=>{n.current(e)}),[e])}function g(e){const t=a(e=>e.init),n=a(e=>e.reset);c(),d(()=>(s(),t(e),()=>{n(),i()}),[t,n,e.clientId,e.endpoint])}function y(){const r=a(e=>e.messages),o=a(e=>e.sendEvent),i=a(e=>e.sendAudio),c=u(()=>({openLanding(t,r={}){o(e.CREATE_ROUND,n(t,r))},sendInteraction(n,r={}){o(e.CREATE_ROUND,t(n,r))},refresh(n,r,a={}){o(e.CREATE_ROUND,t(r,{...a,block:n}))}}),[o]);return{history:r,sendEvent:o,sendAudio:i,...c}}const f={suggestions:[],loading:!1};function E(e,t={}){const{storyId:n,language:r,debounceMs:o=200}=t,i=a(e=>"connected"===e.connectionStatus),[c,s]=l(f),[u,p]=l(i);return u!==i&&(p(i),i||s(f)),d(()=>{if(!i)return;let t=!1;const c=setTimeout(()=>{s(e=>({...e,loading:!0}));(a.getState()._thamyr?.suggest(e,{storyId:n,language:r})??Promise.resolve(f)).then(({suggestions:e})=>{t||s({suggestions:e,loading:!1})}).catch(()=>{t||s(f)})},""===e?0:o);return()=>{t=!0,clearTimeout(c)}},[e,n,r,o,i]),i?c:f}function h(){return{status:a(e=>e.connectionStatus)}}function T(e){v(a(e=>e.addResponseListener),e)}function I(e){v(a(e=>e.addConnectionListener),e)}function L(e){v(a(e=>e.addErrorListener),e)}function w(){return u(()=>({getCart:async()=>(await o()).cart.getCart(),addItem:async e=>(await o()).cart.addItemToCart({productId:e}),removeItem:async e=>(await o()).cart.removeItemFromCart({productId:e}),updateQuantity:async(e,t)=>(await o()).cart.updateProductQuantity({productId:e,quantity:t})}),[])}function A(){return r}function C(){return u(()=>({similar:async(e,t)=>(await o()).skesis.similar({anchorId:e,...t}),related:async(e,t)=>(await o()).skesis.related({anchorId:e,...t})}),[])}function R(){return u(()=>({getSitemap:async()=>(await o()).sitemap.getSitemap()}),[])}const S=-45,D=1800,b=3e4;function M({silenceThreshold:e=S,silenceDuration:t=D,maxDuration:n=b,onRecordingComplete:r}){const[o,a]=l("idle"),[i,c]=l([]),[s,u]=l(void 0),v=p(void 0),g=p(void 0),y=p(void 0),f=p(void 0),E=p(0),h=p(0),T=p(void 0),I=p([]),L=p(!1),w=m(()=>{if(0!==E.current&&(cancelAnimationFrame(E.current),E.current=0),void 0!==T.current&&(clearTimeout(T.current),T.current=void 0),f.current){for(const e of f.current.getTracks())e.stop();f.current=void 0}"closed"!==g.current?.state&&g.current?.close(),g.current=void 0,y.current=void 0,v.current=void 0,L.current=!1},[]);d(()=>w,[w]);const A=m(()=>{L.current||(L.current=!0,"recording"===v.current?.state&&v.current.stop(),0!==E.current&&(cancelAnimationFrame(E.current),E.current=0),void 0!==T.current&&(clearTimeout(T.current),T.current=void 0))},[]),C=m(async()=>{u(void 0),I.current=[],L.current=!1;try{const o=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,sampleRate:16e3}});f.current=o;const i=new AudioContext({sampleRate:16e3});g.current=i;const s=i.createMediaStreamSource(o),u=i.createAnalyser();u.fftSize=256,u.smoothingTimeConstant=.7,s.connect(u),y.current=u;const d=MediaRecorder.isTypeSupported("audio/webm;codecs=opus")?"audio/webm;codecs=opus":"audio/webm",l=new MediaRecorder(o,{mimeType:d});v.current=l,l.addEventListener("dataavailable",e=>{e.data.size>0&&I.current.push(e.data)}),l.addEventListener("stop",()=>{a("processing");const e=new Blob(I.current,{type:d});w(),r(e)}),l.start(250),a("recording"),h.current=0,T.current=setTimeout(()=>{A()},n);const p=()=>{if(!y.current||L.current)return;const n=y.current.frequencyBinCount,r=new Uint8Array(n);y.current.getByteFrequencyData(r);const o=Math.floor(n/32),a=[];for(let e=0;e<32;e++){let t=0;for(let n=0;n<o;n++)t+=r[e*o+n];a.push(t/o/255)}c(a);let i=0;for(const e of r){const t=e/255;i+=t*t}const s=Math.sqrt(i/n);if((s>0?20*Math.log10(s):-100)<e){if(0===h.current)h.current=Date.now();else if(Date.now()-h.current>t)return void A()}else h.current=0;E.current=requestAnimationFrame(p)};p()}catch{u("Microphone access denied"),a("idle"),w()}},[e,t,n,r,A,w]),R=m(()=>{a("idle"),c([])},[]);return{state:o,audioLevels:i,startRecording:C,stopRecording:A,reset:R,error:s}}function U(e){const t=p(void 0),[n,r]=l("idle"),[o,a]=l(void 0);d(()=>{const n=e?.audioUrl;if("undefined"==typeof Audio||void 0===n||""===n)return t.current=void 0,void r("idle");const o=new Audio(n);o.preload="none",t.current=o,r("idle"),a(void 0);const i=()=>{r("playing")},c=()=>{r("loading")},s=()=>{r(e=>"ended"===e?e:"paused")},u=()=>{r("ended")},d=()=>{a("Audio playback failed"),r("error")};return o.addEventListener("playing",i),o.addEventListener("waiting",c),o.addEventListener("pause",s),o.addEventListener("ended",u),o.addEventListener("error",d),()=>{o.pause(),o.removeEventListener("playing",i),o.removeEventListener("waiting",c),o.removeEventListener("pause",s),o.removeEventListener("ended",u),o.removeEventListener("error",d),o.src="",t.current=void 0}},[e?.audioUrl]);const i=m(async()=>{const e=t.current;if(e)try{a(void 0),r("loading"),await e.play()}catch{a("Audio playback failed"),r("error")}},[]),c=m(()=>{t.current?.pause()},[]),s=m(()=>{const e=t.current;e&&(e.pause(),e.currentTime=0,r("idle"))},[]),u=m(()=>{const e=t.current;e&&(e.paused?i():e.pause())},[i]);return{state:n,isPlaying:"playing"===n||"loading"===n,error:o,play:i,pause:c,toggle:u,stop:s}}export{r as thamyrApi,A as useApi,a as useCallimacusStore,w as useCart,h as useConnection,g as useInitThamyr,I as useOnConnectionChange,L as useOnError,T as useOnResponse,R as useSitemap,C as useSkesis,E as useSuggestions,y as useThamyr,U as useTtsAudio,M as useVoiceRecorder};
8
+ import{UserInteractionType as t,interactionRound as n,landingRound as e,randomUuid as r,deliverResultOf as a}from"@callimacus/thamyr-core";export{ACTION_TYPES,ADD_TO_CART_RESULT_BLOCK,CallimacusEvent,ChapterStatus,ClientEvents,DELIVER_RESULT_BLOCK,GalleryMode,LANDING_VALUE_MAX_LENGTH,SLInputEventType,ServerEvents,ThamyrHttpError,ThamyrResponseType,UserInteractionType,actionOf,addToCartResultOf,applyBlockPatch,blockKeyOf,callimacusService,clearIntentSessionId,deliverResultOf,ensureIntentSessionId,extractTtsAudio,fieldsOf,getIntentSessionId,initIntent,interactionRound,isSetProduct,landingRound,logger,receptorsOf,setConsent,setDebug,setDebugPanel,setGeo,setIntentSessionMaxAge,transformImageUrl}from"@callimacus/thamyr-core";import{jsx as o,jsxs as i}from"react/jsx-runtime";import{useMemo as c,useEffect as s,useState as l,useRef as d,useCallback as u}from"react";import{t as m,w as v,u as p,m as h,a as b,b as g,c as f}from"./chunks/api-Cot7UUo0.js";import"@callimacus/thamyr";function y(t,n){const e=d(n);e.current=n,s(()=>t(t=>{e.current(t)}),[t])}function q(t){const n=p(t=>t.init),e=p(t=>t.reset);b(),s(()=>(g(),n(t),()=>{e(),h()}),[n,e,t.clientId,t.endpoint])}function w(){const r=p(t=>t.messages),a=p(t=>t.sendEvent),o=p(t=>t.sendAudio),i=c(()=>({openLanding(n,r={}){a(t.CREATE_ROUND,e(n,r))},sendInteraction(e,r={}){a(t.CREATE_ROUND,n(e,r))},refresh(e,r,o={}){a(t.CREATE_ROUND,n(r,{...o,block:e}))}}),[a]);return{history:r,sendEvent:a,sendAudio:o,...i}}const k={suggestions:[],loading:!1};function _(t,n={}){const{storyId:e,language:r,debounceMs:a=200}=n,o=p(t=>"connected"===t.connectionStatus),[i,c]=l(k),[d,u]=l(o);return d!==o&&(u(o),o||c(k)),s(()=>{if(!o)return;let n=!1;const i=setTimeout(()=>{c(t=>({...t,loading:!0}));(p.getState()._thamyr?.suggest(t,{storyId:e,language:r})??Promise.resolve(k)).then(({suggestions:t})=>{n||c({suggestions:t,loading:!1})}).catch(()=>{n||c(k)})},""===t?0:a);return()=>{n=!0,clearTimeout(i)}},[t,e,r,a,o]),o?i:k}function x(){return{status:p(t=>t.connectionStatus)}}function E(t){y(p(t=>t.addResponseListener),t)}function L(t){y(p(t=>t.addConnectionListener),t)}function T(t){y(p(t=>t.addErrorListener),t)}function z(){return c(()=>({getCart:async()=>(await v()).cart.getCart(),addItem:async t=>(await v()).cart.addItemToCart({productId:t}),removeItem:async t=>(await v()).cart.removeItemFromCart({productId:t}),updateQuantity:async(t,n)=>(await v()).cart.updateProductQuantity({productId:t,quantity:n})}),[])}function I(){return m}function C(){return c(()=>({similar:async(t,n)=>(await v()).skesis.similar({anchorId:t,...n}),related:async(t,n)=>(await v()).skesis.related({anchorId:t,...n})}),[])}function S(){return c(()=>({getSitemap:async()=>(await v()).sitemap.getSitemap()}),[])}const A=t=>({ok:!1,error:t});const R={state:"idle"},M=f(()=>({})),D=new Map;function O(){const e=p(t=>"connected"===t.connectionStatus),o=p(t=>t.storyId),i=p(t=>t.sendEvent),s=p(t=>t.addResponseListener),l=u(async(e,c={})=>{const l=c.storyId??o,d=n=>{try{return i(t.CREATE_ROUND,{...n,...void 0!==l&&{storyId:l}}),{ok:!0}}catch(t){return A(t)}};switch(e.type){case"link":return void 0===globalThis.location?A(new Error("[thamyr] a link action needs a browser")):(e.newTab?globalThis.open(e.url,"_blank","noopener"):globalThis.location.assign(e.url),{ok:!0});case"ask":return d({inputEvent:{type:"question",data:{value:e.value}}});case"interact":return d(n(e.id,{value:e.value,payload:e.payload,block:e.block}));case"cart":return async function(t){try{const{error:n}=await t;return void 0===n?{ok:!0}:A(n)}catch(t){return A(t)}}(v().then(async t=>t.cart.addItemToCart({productId:e.productId})));case"submit":{const t=r();D.set(e.form,t),M.setState({[e.form]:{state:"sending"}});const o=d({...n(e.form,{payload:c.fields??{},submissionId:t}),...void 0!==globalThis.document&&{context:{title:(u=globalThis.document.title,u.replaceAll(/\p{Control}/gv,"").slice(0,500).replace(/\p{Surrogate}$/v,""))}}}),i=o.ok?await async function(t,n){return new Promise(e=>{let r=()=>{};const o=setTimeout(()=>{r(),e(A("timeout"))},3e4);r=n(n=>{if("chapter-event"!==n.type||"customInteraction"!==n.chapter.inputEvent?.type||n.chapter.inputEvent.data.submissionId!==t)return;const i=(n.chapter.blocks??[]).map(t=>a(t)).find(n=>n?.submissionId===t);void 0!==i&&(clearTimeout(o),r(),e({ok:!0,result:i}))})})}(t,s):o;return D.get(e.form)===t&&M.setState({[e.form]:i.ok?{state:"done",result:i.result}:R}),i}}var u},[i,o,s]);return c(()=>({run:l,ready:e,storyId:o}),[l,e,o])}function N(t){return M(n=>n[t]??R)}const U=-45,H=1800,V=3e4;function B({silenceThreshold:t=U,silenceDuration:n=H,maxDuration:e=V,onRecordingComplete:r}){const[a,o]=l("idle"),[i,c]=l([]),[m,v]=l(void 0),p=d(void 0),h=d(void 0),b=d(void 0),g=d(void 0),f=d(0),y=d(0),q=d(void 0),w=d([]),k=d(!1),_=u(()=>{if(0!==f.current&&(cancelAnimationFrame(f.current),f.current=0),void 0!==q.current&&(clearTimeout(q.current),q.current=void 0),g.current){for(const t of g.current.getTracks())t.stop();g.current=void 0}"closed"!==h.current?.state&&h.current?.close(),h.current=void 0,b.current=void 0,p.current=void 0,k.current=!1},[]);s(()=>_,[_]);const x=u(()=>{k.current||(k.current=!0,"recording"===p.current?.state&&p.current.stop(),0!==f.current&&(cancelAnimationFrame(f.current),f.current=0),void 0!==q.current&&(clearTimeout(q.current),q.current=void 0))},[]),E=u(async()=>{v(void 0),w.current=[],k.current=!1;try{const a=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,sampleRate:16e3}});g.current=a;const i=new AudioContext({sampleRate:16e3});h.current=i;const s=i.createMediaStreamSource(a),l=i.createAnalyser();l.fftSize=256,l.smoothingTimeConstant=.7,s.connect(l),b.current=l;const d=MediaRecorder.isTypeSupported("audio/webm;codecs=opus")?"audio/webm;codecs=opus":"audio/webm",u=new MediaRecorder(a,{mimeType:d});p.current=u,u.addEventListener("dataavailable",t=>{t.data.size>0&&w.current.push(t.data)}),u.addEventListener("stop",()=>{o("processing");const t=new Blob(w.current,{type:d});_(),r(t)}),u.start(250),o("recording"),y.current=0,q.current=setTimeout(()=>{x()},e);const m=()=>{if(!b.current||k.current)return;const e=b.current.frequencyBinCount,r=new Uint8Array(e);b.current.getByteFrequencyData(r);const a=Math.floor(e/32),o=[];for(let t=0;t<32;t++){let n=0;for(let e=0;e<a;e++)n+=r[t*a+e];o.push(n/a/255)}c(o);let i=0;for(const t of r){const n=t/255;i+=n*n}const s=Math.sqrt(i/e);if((s>0?20*Math.log10(s):-100)<t){if(0===y.current)y.current=Date.now();else if(Date.now()-y.current>n)return void x()}else y.current=0;f.current=requestAnimationFrame(m)};m()}catch{v("Microphone access denied"),o("idle"),_()}},[t,n,e,r,x,_]),L=u(()=>{o("idle"),c([])},[]);return{state:a,audioLevels:i,startRecording:E,stopRecording:x,reset:L,error:m}}function P(t){const n=d(void 0),[e,r]=l("idle"),[a,o]=l(void 0);s(()=>{const e=t?.audioUrl;if("undefined"==typeof Audio||void 0===e||""===e)return n.current=void 0,void r("idle");const a=new Audio(e);a.preload="none",n.current=a,r("idle"),o(void 0);const i=()=>{r("playing")},c=()=>{r("loading")},s=()=>{r(t=>"ended"===t?t:"paused")},l=()=>{r("ended")},d=()=>{o("Audio playback failed"),r("error")};return a.addEventListener("playing",i),a.addEventListener("waiting",c),a.addEventListener("pause",s),a.addEventListener("ended",l),a.addEventListener("error",d),()=>{a.pause(),a.removeEventListener("playing",i),a.removeEventListener("waiting",c),a.removeEventListener("pause",s),a.removeEventListener("ended",l),a.removeEventListener("error",d),a.src="",n.current=void 0}},[t?.audioUrl]);const i=u(async()=>{const t=n.current;if(t)try{o(void 0),r("loading"),await t.play()}catch{o("Audio playback failed"),r("error")}},[]),c=u(()=>{n.current?.pause()},[]),m=u(()=>{const t=n.current;t&&(t.pause(),t.currentTime=0,r("idle"))},[]),v=u(()=>{const t=n.current;t&&(t.paused?i():t.pause())},[i]);return{state:e,isPlaying:"playing"===e||"loading"===e,error:a,play:i,pause:c,toggle:v,stop:m}}function F(t){return o("svg",{viewBox:"0 0 40 45",fill:"currentColor",role:"img","aria-label":"Callimacus",...t,children:o("path",{d:"M39.2 21.6q.8-.6.8-1 0-.2-.3-.2h-1.3l-.5.1h-.3c-.3-.2-.6-1-.9-1.5l-.5-1q-.2-.2-.4-.2t-.3.2l-.2 1.2-.4 1.5h-.1l-.3-.3-.4-.3q-1.5-1.9-2.7-3.8Q27.7 11 23.3 6l-.9-1.1q.1-.4.7-1l.5-.5v-.5l-.4-.1-1 .1h-.4q-.7-.1-.9-1.3-.2-1-.6-1.4L20 0q-.5.4-.6 1.3-.2.8-.5 1-.5.3-1.7.2l-1 .1v.7q0 .3.6.5c.4.2 1 .5 1 .8q-.2.4-1 .8l-.3.3-1.1 1-1 1L13 8.9c-1.9 1.7-4 3.5-5.4 5.7l-2.3.8q-.6-.2-.8-.9h-.4q-.2 0-.1 1v.6l-.1.2v.7L1 18.1v.3l.3.2 2.7.2.5 2.3-.4 2.8-.5 4.2v.3l.1.3-.1.3-.2.3-.1.3c0 .3-.3 1-.4 1H0v.2q0 .3.2.4l.9.5q1 .3 1.3.9l-.2 1-.2.3q-.5.8-.4 1l.1.2q.7-.1 1.6-1l1.2-.8 1.7 2H7v-.1L6.5 33h.1l8.3 4.7.8.5 1.3.7q1 .5 2 1.3h.1H18l-.8.2-.1.2.2.4h.1l.4.5.3.4.5.3.7.4v.2q-.7 1-.6 2v.2h.2c.3 0 1.2-.8 1.4-1l.3-.4q.3-.5.6-.6.6.2 1.4.9l1 .6h.4V44l-.4-1-.3-.8.7-.4.3-.2 1-.7v-.6l-.3-.1h-2V40l.6-1 .5-.7 6-8.1 1-1.5c1.2-1.7 2.6-4 3.1-4.2v1l.2.1h.1l.8-.7c.5-.4 1.2-1 1.4-1l.6.3 1.3 1q.3.5.6.5l.2-.1c.1 0 0-.4-.6-2.2l-.4-1 .5-.6zM17.7 3.7l-.4-.3q-.3 0-.4-.3h1q1 0 1.4-.2l.5-1.2.3-.7V.9l.3.9q.3 1 .6 1.4.1.3.7.2h1L21.4 5l.3 2-.1-.1-.9-1-.2-.2-.1-.2q-.1-.4-.5-.4h-.3v.2c-.3.5-1.2 1.3-1.4 1.5q0-.6.4-1.4v-.1q.4-.3 0-.8zM8 15.5l.4-.8.3-.7c.9-1.4 3.1-3.4 4.7-4.8l4-3.5.4-.3-.6 2.3.3.1c.5 0 1.1-.7 1.6-1.2L20 6l.7.8q.5.7 1.1 1l.5.2q.1 0 .2-.2.2-.3-.1-1.5l-.2-.8a42 42 0 0 1 6.3 8l1.8 2.2 3 4 .4 1-1.4-.1q-1.2 0-2.5-.2-3.1-.5-6.7-.7l-3.4-.6.9-12.5h-.3l-.4.1v1.4l-.3 3.7-.3 3.3V18q-.3.5-.3 1.1l-4.7-.7-1-.2-2-.4h-1l-1 .1q-.9 0-1.6-.4l-.5-.5.4-.5zm13.1 11.9h-1l-.3-.1-.4-.2h-.2q-.5 0-1 .4l-.7.4-.1-.1q0-.3.2-.8l.1-1q-.2-.4-1.1-.4l-1-.2v-.1l.6-.2q.6 0 1-.4l.2-1.1.2-.9 1.2 1.5q.7-.1 1.2-.5l1.2-.5-.5 1.6-.3.5-.4.9q.1.3.5.4l.4.2zM14 18.9l2.1.3 2.7.5q.2.9 0 1.8l-.1 1.4-.9-1.2-.2-.3h-.2q-.4 0-.3.6v.3l-.4 1.5-2-1q-1.5-.6-2.7-1.3l-1.3-.9-1-.7-.7-.4-1.2-.7h1.2l.3-.3q.6-.2 1.3-.2 1.2 0 2.4.4zm-5.5 1 1.6 1 1.3 1 2.3 1.2 2.5 1.3-.4.2h-.2l-.2.2q-.5 0-1 .4-.1 0-.2.2 0 .3.2.3l1 .2.8.2a25 25 0 0 1-4 2h-.2l-1-1.6q-.7-.7-1.2-1.6c-1.1-1.7-2.6-4-3.5-5.8v-.2zm10.8 3.6v-2.2zm1.7 2.1.4-1q.7-1.3.6-1.7t-.4-.4l-2.3.9.2-3.6h.8l1.4.2.9.2q1.5.3 3 .2l2.3.2.8.2.6.2 1 .1a6 6 0 0 1 2.7.8l1 .5-3.8 1.3zM4.5 18.1H2.8l2-.9V17l-.2-.3v-1q.3 0 .2.4l.2.1 1.2-.4 1.4-.5L6.3 17q.5.7 1 .9l.5.2-1 .2-.5-.2-.6-.1-.5.1v.6q.3.2.2.3L5 20.3l-.1-.9zm.6 3.9q.3-.1.4-.4l.2-.9.2-1.2 5.7 9h-.3l-1.7.8q-1.4.9-2.2 1l-.4.1H5.6l-.1-.2L5 29v-.6l-.2-.6-.2-.2h-.1c-.1-.3.4-4.8.6-5.6M5.6 32q0 .6.3 1.1l.3 1L5 32.9l-.4-.3q-.3 0-.4.3l-.2.1q-.7.5-1.3.9l.5-1.8-.2-.1q-.7-.2-1.2-.7H2l.6.1.5.2.2-.1.5-1 .5-1.4.5 1.1.3 1h.3l.3-.1.1-.1L7 31v.2zm1 .1 1-.5.8-.5q.3-.2.2-.4v-.1l-.2-.1 2.7-1.4.9-.2 6.8 10.2zm6-3.5 4.2-2h.3l-.3 1-.3 1q0 0 .2.3l.3.1h.2l.2-.3.4-.3.6-.3.6-.2.4 1.7v1.8l-.1 1.3v2q.2 2.1 0 4v.1zM23 40.8h1l-.3.4-.5.2-.4.3h-.2l-.5.4v.1q.5.3.6.8l.2.3q-.3-.1-.8-.5l-1-.5H21L19.3 44q.1-.6.4-1h.2l.2-.3v-.5q-.3-.2-.5-.2h-.3c-.3-.2-1-.7-1.1-1h1.1l.6.1.5-.1.8-2.3.2.8q.1 1 .5 1.3H23m-3.2.2h.1m14.3-17.3-8.6 11.6-1 1.5-2.1 2.8-.3.2-.3-1.2q-.1-1.2-.4-1.3l-.2-.1H21l-1 2.4v-5.9l-.2-5.7 1.8.1.2.1.7.1h.3V28l-.4-.4-.3-.2-.8-1.1L27 25l1.2-.2 2-.5 1.1-.3c1-.4 2.6-.9 3-.9h.1q0 .3-.3.5m4.2-2.1-.4.3-.8.7q.1.4.4.3h.2l.6 1.4-1.8-1.2q-.4 0-.4.3v.1l-1.2.9q0-.8.4-1.4h.1q.3-.2.2-.5-.3-.5-1.2-.7-.8 0-1.1-.5h1l.7.2.5-.1q0-1.4.5-2.4c.2.3.8 1.4.9 1.9v.1l-.1.2h.2l1.8-.2zm-19 1.9.2-2.2zm1.8 3.9zm1.5.9h-.1m.3 15zm12.9-25.5"})})}function K({onSubmit:t,value:n,onValueChange:e,placeholder:r="Ask anything…",sendLabel:a="Send",sendIcon:c,actions:s,tint:d,font:u,loading:m=!1,disabled:v=!1,autoFocus:p,className:h="",style:b}){const[g,f]=l(""),y=n??g,q=t=>{f(t),e?.(t)},w=y.trim(),k=""!==w&&!m&&!v;return i("form",{className:`cm-bar ${h}`.trimEnd(),style:{"--cm-tint":d,"--cm-font":u,...b},"aria-busy":m,onSubmit:n=>{n.preventDefault(),k&&(t(w),q(""))},children:[o("style",{children:G}),o(F,{className:"cm-bar-mark"}),o("textarea",{className:"cm-bar-input",rows:1,value:y,placeholder:r,"aria-label":r,enterKeyHint:"send",disabled:v,autoFocus:p,onChange:t=>{q(t.target.value)},onKeyDown:t=>{"Enter"!==t.key||t.shiftKey||t.nativeEvent.isComposing||(t.preventDefault(),t.currentTarget.form?.requestSubmit())}}),s,o("button",{type:"submit",className:"cm-bar-send",disabled:!k,"aria-label":a,children:c??o("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:o("path",{d:"M12 19V5M5 12l7-7 7 7"})})})]})}const G="\n.cm-bar {\n\t--_tint: var(--cm-tint, linear-gradient(45deg, #d698c7, #ffc691, #a8dfdb, #ddada6));\n\t--_bg: var(--cm-bg, light-dark(#fff, #1c1c1e));\n\t--_fg: var(--cm-fg, light-dark(#212121, #f5f5f5));\n\t--_radius: var(--cm-radius, 1.75rem);\n\t--_size: var(--cm-size, 2.5rem);\n\t--_pad: var(--cm-padding, .375rem);\n\tposition: relative;\n\tisolation: isolate;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: .25rem;\n\tmargin: 0;\n\tpadding: var(--_pad);\n\tborder-radius: var(--_radius);\n\tcolor: var(--_fg);\n\tfont-family: var(--cm-font, inherit);\n\tfont-size: var(--cm-font-size, 1rem);\n\tline-height: 1.5;\n}\n\n.cm-bar::before,\n.cm-bar::after {\n\tcontent: '';\n\tposition: absolute;\n\tinset: 0;\n\tz-index: -1;\n\tborder-radius: inherit;\n\tpointer-events: none;\n}\n\n/* Glow, shown on focus and animated while loading. */\n.cm-bar::before {\n\tinset: -2px;\n\tbackground: var(--_tint);\n\tbackground-size: 300% 100%;\n\tfilter: blur(10px);\n\topacity: 0;\n\ttransition: opacity .3s;\n}\n\n/* Surface with a tint border. */\n.cm-bar::after {\n\tborder: var(--cm-border-width, 1px) solid transparent;\n\tbackground: linear-gradient(var(--_bg) 0 0) padding-box, var(--_tint) border-box;\n\tbox-shadow: var(--cm-shadow, 0 15px 20px rgb(0 0 0 / .1));\n}\n\n.cm-bar:has(.cm-bar-input:disabled) {\n\topacity: .5;\n}\n\n.cm-bar:focus-within::before {\n\topacity: var(--cm-glow, .55);\n}\n\n.cm-bar[aria-busy='true']::before {\n\topacity: 1;\n\tanimation: cm-bar-flow 3s ease-in-out infinite;\n}\n\n/* The mark is the one fixed part of the bar: color and size are themable, hiding it is not. */\n.cm-bar-mark {\n\tflex: none;\n\tdisplay: block !important;\n\tvisibility: visible !important;\n\topacity: 1 !important;\n\twidth: calc(var(--_size) * .8);\n\theight: calc(var(--_size) * .8);\n\tmin-width: 1.25rem !important;\n\tmin-height: 1.25rem !important;\n\tmargin: calc(var(--_size) * .1) calc(var(--_size) * .05) calc(var(--_size) * .1) calc(var(--_size) * .15);\n\tcolor: var(--cm-mark-color, currentColor);\n}\n\n.cm-bar[aria-busy='true'] .cm-bar-mark {\n\tanimation: cm-bar-twinkle 1.5s ease-in-out infinite;\n}\n\n.cm-bar-input {\n\tflex: 1;\n\tmin-width: 0;\n\tmin-height: var(--_size);\n\tmax-height: 12rem;\n\tbox-sizing: border-box;\n\tmargin: 0;\n\tpadding: max(0px, calc((var(--_size) - 1lh) / 2)) .25rem;\n\tborder: 0;\n\toutline: 0;\n\tbackground: none;\n\tcolor: inherit;\n\tfont: inherit;\n\tresize: none;\n\tfield-sizing: content;\n}\n\n.cm-bar-input::placeholder {\n\tcolor: inherit;\n\topacity: .5;\n}\n\n.cm-bar-send {\n\tflex: none;\n\tbox-sizing: border-box;\n\tdisplay: grid;\n\tplace-items: center;\n\twidth: var(--_size);\n\theight: var(--_size);\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 1px solid transparent;\n\tborder-radius: max(0px, calc(var(--_radius) - var(--_pad)));\n\tbackground: linear-gradient(var(--_bg) 0 0) padding-box, var(--_tint) border-box;\n\tcolor: inherit;\n\tcursor: pointer;\n\ttransition: background .2s, color .2s, opacity .2s, transform .1s;\n}\n\n.cm-bar-send:enabled {\n\tbackground: linear-gradient(var(--cm-button-bg, var(--_fg)) 0 0) padding-box, var(--_tint) border-box;\n\tcolor: var(--cm-button-fg, var(--_bg));\n}\n\n.cm-bar-send:enabled:active {\n\ttransform: scale(.94);\n}\n\n.cm-bar-send:disabled {\n\tcursor: default;\n\topacity: .5;\n}\n\n.cm-bar-send:focus-visible {\n\toutline: 2px solid var(--_fg);\n\toutline-offset: 2px;\n}\n\n.cm-bar-send svg {\n\twidth: 45%;\n\theight: 45%;\n}\n\n@keyframes cm-bar-flow {\n\t50% {\n\t\tbackground-position: 100% 0;\n\t\topacity: .5;\n\t}\n}\n\n/* Transform only: the mark's opacity is pinned to 1. */\n@keyframes cm-bar-twinkle {\n\t50% {\n\t\ttransform: scale(.85) rotate(-10deg);\n\t}\n}\n\n@media (prefers-reduced-motion: reduce) {\n\t.cm-bar::before,\n\t.cm-bar * {\n\t\tanimation: none !important;\n\t\ttransition: none !important;\n\t}\n}\n";export{K as CallimacusBar,F as CallimacusMark,m as thamyrApi,O as useActions,I as useApi,p as useCallimacusStore,z as useCart,x as useConnection,q as useInitThamyr,L as useOnConnectionChange,T as useOnError,E as useOnResponse,S as useSitemap,C as useSkesis,N as useSubmission,_ as useSuggestions,w as useThamyr,P as useTtsAudio,B as useVoiceRecorder};
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/callimacus/hooks.ts","../../../src/voice/use-voice-recorder.ts","../../../src/audio/use-tts-audio.ts"],"sourcesContent":[null,null,null],"names":["useEventListener","addListener","callback","callbackRef","useRef","current","useEffect","arg","useInitThamyr","config","init","useCallimacusStore","s","reset","markInitRequested","markInitOwnerMounted","markInitOwnerUnmounted","clientId","endpoint","useThamyr","history","messages","sendEvent","sendAudio","rounds","useMemo","openLanding","value","options","UserInteractionType","CREATE_ROUND","landingRound","sendInteraction","id","interactionRound","refresh","block","interaction","NO_SUGGESTIONS","suggestions","loading","useSuggestions","prefix","storyId","language","debounceMs","isConnected","connectionStatus","state","setState","useState","wasConnected","setWasConnected","isStale","timer","setTimeout","getState","_thamyr","suggest","Promise","resolve","then","catch","clearTimeout","useConnection","status","useOnResponse","addResponseListener","useOnConnectionChange","addConnectionListener","useOnError","addErrorListener","useCart","async","waitForInstance","cart","getCart","productId","addItemToCart","removeItemFromCart","quantity","updateProductQuantity","useApi","thamyrApi","useSkesis","anchorId","skesis","similar","related","useSitemap","sitemap","getSitemap","defaultOptions","useVoiceRecorder","silenceThreshold","silenceDuration","maxDuration","onRecordingComplete","audioLevels","setAudioLevels","error","setError","undefined","mediaRecorderRef","audioContextRef","analyserRef","streamRef","animationFrameRef","silenceStartRef","maxDurationTimerRef","chunksRef","stoppingRef","cleanup","useCallback","cancelAnimationFrame","track","getTracks","stop","close","stopRecording","startRecording","stream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","sampleRate","audioContext","AudioContext","source","createMediaStreamSource","analyser","createAnalyser","fftSize","smoothingTimeConstant","connect","mimeType","MediaRecorder","isTypeSupported","mediaRecorder","addEventListener","event","data","size","push","audioBlob","Blob","type","start","monitorAudio","bufferLength","frequencyBinCount","dataArray","Uint8Array","getByteFrequencyData","step","Math","floor","levels","i","sum","j","sumSquares","normalized","rms","sqrt","log10","Date","now","requestAnimationFrame","useTtsAudio","audioRef","audioUrl","Audio","element","preload","onPlaying","onWaiting","onPause","previous","onEnded","onError","pause","removeEventListener","src","play","currentTime","toggle","paused","isPlaying"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/callimacus/hooks.ts","../../../src/callimacus/actions.ts","../../../src/voice/use-voice-recorder.ts","../../../src/audio/use-tts-audio.ts","../../../src/callimacus-bar/callimacus-mark.tsx","../../../src/callimacus-bar/callimacus-bar.tsx"],"sourcesContent":[null,null,null,null,null,null],"names":["useEventListener","addListener","callback","callbackRef","useRef","current","useEffect","arg","useInitThamyr","config","init","useCallimacusStore","s","reset","markInitRequested","markInitOwnerMounted","markInitOwnerUnmounted","clientId","endpoint","useThamyr","history","messages","sendEvent","sendAudio","rounds","useMemo","openLanding","value","options","UserInteractionType","CREATE_ROUND","landingRound","sendInteraction","id","interactionRound","refresh","block","interaction","NO_SUGGESTIONS","suggestions","loading","useSuggestions","prefix","storyId","language","debounceMs","isConnected","connectionStatus","state","setState","useState","wasConnected","setWasConnected","isStale","timer","setTimeout","getState","_thamyr","suggest","Promise","resolve","then","catch","clearTimeout","useConnection","status","useOnResponse","addResponseListener","useOnConnectionChange","addConnectionListener","useOnError","addErrorListener","useCart","async","waitForInstance","cart","getCart","productId","addItemToCart","removeItemFromCart","quantity","updateProductQuantity","useApi","thamyrApi","useSkesis","anchorId","skesis","similar","related","useSitemap","sitemap","getSitemap","failed","error","ok","IDLE","useSubmissions","create","latestSubmission","Map","useActions","isReady","subscribe","run","useCallback","action","story","round","payload","undefined","type","globalThis","location","Error","newTab","open","url","assign","inputEvent","data","call","settled","thamyr","submissionId","randomUuid","set","form","sent","fields","document","context","title","replaceAll","slice","replace","result","unsubscribe","message","chapter","blocks","map","deliverResultOf","find","found","deliveredResult","get","ready","useSubmission","defaultOptions","useVoiceRecorder","silenceThreshold","silenceDuration","maxDuration","onRecordingComplete","audioLevels","setAudioLevels","setError","mediaRecorderRef","audioContextRef","analyserRef","streamRef","animationFrameRef","silenceStartRef","maxDurationTimerRef","chunksRef","stoppingRef","cleanup","cancelAnimationFrame","track","getTracks","stop","close","stopRecording","startRecording","stream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","sampleRate","audioContext","AudioContext","source","createMediaStreamSource","analyser","createAnalyser","fftSize","smoothingTimeConstant","connect","mimeType","MediaRecorder","isTypeSupported","mediaRecorder","addEventListener","event","size","push","audioBlob","Blob","start","monitorAudio","bufferLength","frequencyBinCount","dataArray","Uint8Array","getByteFrequencyData","step","Math","floor","levels","i","sum","j","sumSquares","normalized","rms","sqrt","log10","Date","now","requestAnimationFrame","useTtsAudio","audioRef","audioUrl","Audio","element","preload","onPlaying","onWaiting","onPause","previous","onEnded","onError","pause","removeEventListener","src","play","currentTime","toggle","paused","isPlaying","CallimacusMark","props","_jsx","viewBox","fill","role","children","d","CallimacusBar","onSubmit","controlledValue","onValueChange","placeholder","sendLabel","sendIcon","actions","tint","font","disabled","autoFocus","className","style","ownValue","setOwnValue","setValue","next","prompt","trim","canSubmit","_jsxs","trimEnd","preventDefault","css","rows","enterKeyHint","onChange","target","onKeyDown","key","shiftKey","nativeEvent","isComposing","currentTarget","requestSubmit","stroke","strokeWidth","strokeLinecap","strokeLinejoin"],"mappings":"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"}
package/dist/esm/query.js CHANGED
@@ -5,5 +5,5 @@
5
5
  * See LICENSE.md for the full terms.
6
6
  *
7
7
  */
8
- import{queryOptions as t}from"@tanstack/react-query";import{t as r}from"./chunks/api-PeedNYnN.js";import"@callimacus/thamyr";import"@callimacus/thamyr-core";import"react";async function a(t,a,n,o){const i=r[t][a],c={signal:o,throwOnError:!0};return(await(void 0===n?i(c):i(n,c))).data}function n(r,n,o){return t({queryKey:["thamyr",r,n,o],queryFn:async({signal:t})=>a(r,n,o,t)})}function o(t,r){return{mutationKey:["thamyr",t,r],mutationFn:async n=>a(t,r,n)}}export{o as thamyrMutationOptions,n as thamyrQueryOptions};
8
+ import{queryOptions as t}from"@tanstack/react-query";import{t as r}from"./chunks/api-Cot7UUo0.js";import"@callimacus/thamyr";import"@callimacus/thamyr-core";import"react";async function a(t,a,n,o){const i=r[t][a],c={signal:o,throwOnError:!0};return(await(void 0===n?i(c):i(n,c))).data}function n(r,n,o){return t({queryKey:["thamyr",r,n,o],queryFn:async({signal:t})=>a(r,n,o,t)})}function o(t,r){return{mutationKey:["thamyr",t,r],mutationFn:async n=>a(t,r,n)}}export{o as thamyrMutationOptions,n as thamyrQueryOptions};
9
9
  //# sourceMappingURL=query.js.map
@@ -6,10 +6,12 @@
6
6
  *
7
7
  */
8
8
  import * as _callimacus_thamyr_core from '@callimacus/thamyr-core';
9
- import { UiObserverConfig, RoundOptions, CallimacusApi, ErrorMessage, ThamyrResponse, InteractionId, InteractionOptions, UserInteractionType, InteractionPayloadMap, TtsAudio } from '@callimacus/thamyr-core';
10
- export { ADD_TO_CART_RESULT_BLOCK, AddToCartResult, Block, BlockPatch, BoundingBox, CallimacusEvent, Chapter, ChapterStatus, ClientEvents, ClientInfo, ConnectionStatusCallback, ErrorCallback, ErrorMessage, Gallery, GalleryMode, Image, ImageEdits, ImageFormatEdit, ImageResizeEdit, InteractionContext, InteractionId, InteractionOptions, InteractionPayload, InteractionPayloadMap, LANDING_VALUE_MAX_LENGTH, LocalizedEPArtwork, LocalizedEPChapter, LogLevel, LoggerConfig, ProductMatch, RiveManifest, RoundOptions, SLDocument, SLDocumentSection, SLInputEvent, SLInputEventType, ServerEvents, ServerResponseCallback, Story, SuggestPayload, Suggestions, ThamyrHttpError, ThamyrInteractionMap, ThamyrResponse, ThamyrResponseType, Topic, TtsAudio, UiElement, UiObserverConfig, UiSnapshot, UserInteraction, UserInteractionType, Video, WhisperPayload, addToCartResultOf, applyBlockPatch, blockKeyOf, callimacusService, clearIntentSessionId, ensureIntentSessionId, extractTtsAudio, getIntentSessionId, initIntent, interactionRound, isSetProduct, landingRound, logger, receptorsOf, setConsent, setDebug, setDebugPanel, setGeo, setIntentSessionMaxAge, transformImageUrl } from '@callimacus/thamyr-core';
9
+ import { UiObserverConfig, RoundOptions, CallimacusApi, ErrorMessage, ThamyrResponse, InteractionId, InteractionOptions, UserInteractionType, InteractionPayloadMap, DeliverResult, Action, TtsAudio } from '@callimacus/thamyr-core';
10
+ export { ACTION_TYPES, ADD_TO_CART_RESULT_BLOCK, Action, ActionType, AddToCartResult, Block, BlockPatch, BoundingBox, CallimacusEvent, Chapter, ChapterStatus, ClientEvents, ClientInfo, ConnectionStatusCallback, DELIVER_RESULT_BLOCK, DeliverResult, ErrorCallback, ErrorMessage, Gallery, GalleryMode, Image, ImageEdits, ImageFormatEdit, ImageResizeEdit, InteractionContext, InteractionId, InteractionOptions, InteractionPayload, InteractionPayloadMap, LANDING_VALUE_MAX_LENGTH, LocalizedEPArtwork, LocalizedEPChapter, LogLevel, LoggerConfig, ProductMatch, RiveManifest, RoundOptions, SLDocument, SLDocumentSection, SLInputEvent, SLInputEventType, ServerEvents, ServerResponseCallback, Story, SuggestPayload, Suggestions, ThamyrHttpError, ThamyrInteractionMap, ThamyrResponse, ThamyrResponseType, Topic, TtsAudio, UiElement, UiObserverConfig, UiSnapshot, UserInteraction, UserInteractionType, Video, WhisperPayload, actionOf, addToCartResultOf, applyBlockPatch, blockKeyOf, callimacusService, clearIntentSessionId, deliverResultOf, ensureIntentSessionId, extractTtsAudio, fieldsOf, getIntentSessionId, initIntent, interactionRound, isSetProduct, landingRound, logger, receptorsOf, setConsent, setDebug, setDebugPanel, setGeo, setIntentSessionMaxAge, transformImageUrl } from '@callimacus/thamyr-core';
11
11
  import { Thamyr } from '@callimacus/thamyr';
12
12
  import * as zustand from 'zustand';
13
+ import * as react from 'react';
14
+ import { ReactNode, CSSProperties, SVGProps } from 'react';
13
15
 
14
16
  /**
15
17
  Represents the current state of the Thamyr SDK connection.
@@ -144,6 +146,7 @@ declare function useThamyr(): {
144
146
  payload?: {
145
147
  [key: string]: unknown;
146
148
  };
149
+ submissionId?: string;
147
150
  nodeKey?: string;
148
151
  interactionId: string;
149
152
  value?: string | Array<string>;
@@ -999,6 +1002,7 @@ declare function useThamyr(): {
999
1002
  payload?: {
1000
1003
  [key: string]: unknown;
1001
1004
  };
1005
+ submissionId?: string;
1002
1006
  nodeKey?: string;
1003
1007
  interactionId: string;
1004
1008
  value?: string | Array<string>;
@@ -2105,6 +2109,11 @@ type ErrorListener = (error: ErrorMessage) => void;
2105
2109
  type CallimacusState = {
2106
2110
  connectionStatus: ConnectionStatus;
2107
2111
  messages: ThamyrResponse[];
2112
+ /**
2113
+ The story the connection opened: the one a round continues. Kept apart from
2114
+ `messages`, whose bound evicts the `story-created` long before a story ends.
2115
+ */
2116
+ storyId: string | undefined;
2108
2117
  error: ErrorMessage | undefined;
2109
2118
  _initialized: boolean;
2110
2119
  _thamyr: Thamyr | undefined;
@@ -2124,6 +2133,85 @@ unless you need direct access to the store state or actions.
2124
2133
  */
2125
2134
  declare const useCallimacusStore: zustand.UseBoundStore<zustand.StoreApi<CallimacusState>>;
2126
2135
 
2136
+ /**
2137
+ What running an action came to. A round or a navigation that went out is `ok`;
2138
+ a `submit` is `ok` with the delivery `result` once the round came back. An HTTP
2139
+ failure of a `cart`, a round the store refused or a submit that did not come
2140
+ back in time (`error: 'timeout'`) arrive as `error` on a RESOLVED promise, never
2141
+ as a rejection, so a button can show "try again" from it.
2142
+ */
2143
+ type ActionResult = {
2144
+ ok: true;
2145
+ result?: DeliverResult;
2146
+ } | {
2147
+ ok: false;
2148
+ error: unknown;
2149
+ };
2150
+ type RunOptions = {
2151
+ /**
2152
+ The inputs a `submit` sends — the component's fields, by name (`fieldsOf(form)` reads them off a form).
2153
+ */
2154
+ fields?: Record<string, string | boolean | string[]>;
2155
+ /**
2156
+ The story an `ask`, `interact` or `submit` continues. Defaults to the one the connection opened.
2157
+ */
2158
+ storyId?: string;
2159
+ };
2160
+ /**
2161
+ Return type of {@link useActions}.
2162
+ */
2163
+ type Actions = {
2164
+ run: (action: Action, options?: RunOptions) => Promise<ActionResult>;
2165
+ /**
2166
+ Whether a round can go out now (the connection is up). `cart` waits for the
2167
+ instance instead, so it can run before it.
2168
+ */
2169
+ ready: boolean;
2170
+ /**
2171
+ The story the connection opened, or `undefined` before the first round.
2172
+ */
2173
+ storyId: string | undefined;
2174
+ };
2175
+ /**
2176
+ What a form's last submit came to: `sending` while the round is out, `done` with
2177
+ its result once the chapter carrying it arrived; `idle` before the first, or
2178
+ after one that did not go out or did not come back in time.
2179
+ */
2180
+ type Submission = {
2181
+ state: 'idle' | 'sending' | 'done';
2182
+ result?: DeliverResult;
2183
+ };
2184
+ /**
2185
+ Runs component actions (`actionOf` reads them off block data): `link` opens the
2186
+ URL, `ask` and `interact` send a round on the open story, `cart` adds to the
2187
+ cart, `submit` sends the fields as a round of the project's form and resolves
2188
+ with its delivery result. A form is inputs plus a button that runs
2189
+ `{type: 'submit', form}` with `{fields: fieldsOf(form)}`; `useSubmission(form)`
2190
+ follows it.
2191
+
2192
+ @example
2193
+ ```tsx
2194
+ function Cta({ data }: { data: { label: string; action: unknown } }) {
2195
+ const { run, ready } = useActions();
2196
+ const action = actionOf(data.action);
2197
+ if (!action) return null;
2198
+ return <button disabled={!ready} onClick={() => run(action)}>{data.label}</button>;
2199
+ }
2200
+ ```
2201
+ */
2202
+ declare function useActions(): Actions;
2203
+ /**
2204
+ What the form's last `submit` came to, for the form's own markup: disable the
2205
+ button while `sending`, show `result.message` or the field `errors` when `done`.
2206
+
2207
+ @example
2208
+ ```tsx
2209
+ const { state, result } = useSubmission('contact');
2210
+ if (result?.status === 'accepted') return <p role="status">{result.message ?? 'Thanks.'}</p>;
2211
+ ```
2212
+ */
2213
+ declare function useSubmission(form: string): Submission;
2214
+
2127
2215
  type VoiceRecorderState = 'idle' | 'recording' | 'processing';
2128
2216
  type UseVoiceRecorderOptions = {
2129
2217
  silenceThreshold?: number;
@@ -2183,5 +2271,56 @@ stream URL.
2183
2271
  */
2184
2272
  declare function useTtsAudio(audio: TtsAudio | undefined): UseTtsAudioReturn;
2185
2273
 
2186
- export { thamyrApi, useApi, useCallimacusStore, useCart, useConnection, useInitThamyr, useOnConnectionChange, useOnError, useOnResponse, useSitemap, useSkesis, useSuggestions, useThamyr, useTtsAudio, useVoiceRecorder };
2187
- export type { CallimacusInitConfig, CartActions, ConnectionStatus, SitemapActions, SkesisActions, SuggestionsOptions, SuggestionsState, TtsAudioState, UseTtsAudioReturn, UseVoiceRecorderOptions, UseVoiceRecorderReturn, VoiceRecorderState };
2274
+ type CallimacusBarProps = {
2275
+ /**
2276
+ Called with the trimmed prompt; the bar then clears itself.
2277
+ */
2278
+ readonly onSubmit: (prompt: string) => void;
2279
+ /**
2280
+ Makes the text controlled. Omit it to let the bar manage the text itself.
2281
+ */
2282
+ readonly value?: string;
2283
+ readonly onValueChange?: (value: string) => void;
2284
+ readonly placeholder?: string;
2285
+ /**
2286
+ Accessible name of the send button. Defaults to `Send`.
2287
+ */
2288
+ readonly sendLabel?: string;
2289
+ /**
2290
+ Replaces the arrow inside the send button.
2291
+ */
2292
+ readonly sendIcon?: ReactNode;
2293
+ /**
2294
+ Extra controls (microphone, attachments…) rendered just before the send button.
2295
+ */
2296
+ readonly actions?: ReactNode;
2297
+ /**
2298
+ Any CSS color or gradient. Defaults to the Callimacus gradient. Same as the `--cm-tint` variable.
2299
+ */
2300
+ readonly tint?: string;
2301
+ /**
2302
+ CSS font-family. Defaults to the host page's font. Same as the `--cm-font` variable.
2303
+ */
2304
+ readonly font?: string;
2305
+ /**
2306
+ Animates the glow and blocks submitting, e.g. while a reply streams. Typing stays allowed.
2307
+ */
2308
+ readonly loading?: boolean;
2309
+ readonly disabled?: boolean;
2310
+ readonly autoFocus?: boolean;
2311
+ readonly className?: string;
2312
+ readonly style?: CSSProperties;
2313
+ };
2314
+ /**
2315
+ A prompt input that always carries the Callimacus mark. Everything else is customizable through props,
2316
+ `--cm-*` CSS variables and the `cm-bar*` class names; the mark can be recolored and resized but not removed.
2317
+ */
2318
+ declare function CallimacusBar({ onSubmit, value: controlledValue, onValueChange, placeholder, sendLabel, sendIcon, actions, tint, font, loading, disabled, autoFocus, className, style, }: CallimacusBarProps): react.JSX.Element;
2319
+
2320
+ /**
2321
+ The Callimacus constellation mark. Inherits `currentColor`.
2322
+ */
2323
+ declare function CallimacusMark(props: SVGProps<SVGSVGElement>): react.JSX.Element;
2324
+
2325
+ export { CallimacusBar, CallimacusMark, thamyrApi, useActions, useApi, useCallimacusStore, useCart, useConnection, useInitThamyr, useOnConnectionChange, useOnError, useOnResponse, useSitemap, useSkesis, useSubmission, useSuggestions, useThamyr, useTtsAudio, useVoiceRecorder };
2326
+ export type { ActionResult, Actions, CallimacusBarProps, CallimacusInitConfig, CartActions, ConnectionStatus, RunOptions, SitemapActions, SkesisActions, Submission, SuggestionsOptions, SuggestionsState, TtsAudioState, UseTtsAudioReturn, UseVoiceRecorderOptions, UseVoiceRecorderReturn, VoiceRecorderState };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@callimacus/thamyr-react",
3
- "version": "4.4.1",
3
+ "version": "4.6.0",
4
4
  "private": false,
5
5
  "description": "React package for Thamyr",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -36,19 +36,22 @@
36
36
  "dev": "rollup -c -w",
37
37
  "clean": "rm -rf dist",
38
38
  "test": "vitest run",
39
- "lint": "eslint src"
39
+ "lint": "eslint src",
40
+ "storybook": "storybook dev -p 6006"
40
41
  },
41
42
  "dependencies": {
42
- "@callimacus/thamyr": "^4.4.1",
43
- "@callimacus/thamyr-core": "^4.4.1",
43
+ "@callimacus/thamyr": "^4.6.0",
44
+ "@callimacus/thamyr-core": "^4.6.0",
44
45
  "zustand": "^5.0.15"
45
46
  },
46
47
  "peerDependencies": {
47
- "react": ">=18",
48
- "@tanstack/react-query": "^5"
48
+ "@tanstack/react-query": "^5",
49
+ "react": ">=18"
49
50
  },
50
51
  "devDependencies": {
51
- "@eslint-react/eslint-plugin": "^5.24.10",
52
+ "@eslint-react/eslint-plugin": "^5.26.0",
53
+ "@storybook/react-vite": "^10.6.1",
54
+ "@tanstack/react-query": "^5.104.1",
52
55
  "@testing-library/react": "^16.3.3",
53
56
  "@types/react": "^19.3.0",
54
57
  "@types/react-dom": "^19.3.0",
@@ -57,8 +60,9 @@
57
60
  "jsdom": "^30.1.2",
58
61
  "react": "^19.3.0",
59
62
  "react-dom": "^19.3.0",
60
- "vitest": "^5.0.3",
61
- "@tanstack/react-query": "^5.104.1"
63
+ "storybook": "^10.6.1",
64
+ "vite": "^8.3.4",
65
+ "vitest": "^5.0.3"
62
66
  },
63
67
  "gitHead": "fafba2c8ca0586f95b1d03c5eede356a53b00886",
64
68
  "peerDependenciesMeta": {
@@ -1,9 +0,0 @@
1
- /*!
2
- * Copyright © 2025–2026 Solomei AI SRL. All rights reserved.
3
- *
4
- * Proprietary software, licensed for use by Callimacus customers only.
5
- * See LICENSE.md for the full terms.
6
- *
7
- */
8
- import{Thamyr as e}from"@callimacus/thamyr";import{callimacusService as t,ThamyrResponseType as n,applyBlockPatch as r}from"@callimacus/thamyr-core";import o from"react";const s=e=>{let t;const n=new Set,r=(e,r)=>{const o="function"==typeof e?e(t):e;if(!Object.is(o,t)){const e=t;t=(null!=r?r:"object"!=typeof o||null===o)?o:Object.assign({},t,o),n.forEach(n=>n(t,e))}},o=()=>t,s={setState:r,getState:o,getInitialState:()=>i,subscribe:e=>(n.add(e),()=>n.delete(e))},i=t=e(r,o,s);return s},i=e=>e;const a=e=>{const t=(e=>e?s(e):s)(e),n=e=>function(e,t=i){const n=o.useSyncExternalStore(e.subscribe,o.useCallback(()=>t(e.getState()),[e,t]),o.useCallback(()=>t(e.getInitialState()),[e,t]));return o.useDebugValue(n),n}(t,e);return Object.assign(n,t),n};function c(e,t){for(const n of e)try{n(t)}catch(e){console.error("[Thamyr] Listener threw:",e)}}function u(e,t){let o=!1;const s=e.map(e=>{if(e.type!==n.CHAPTER_EVENT)return e;const s=r(e.chapter,t);return s===e.chapter?e:(o=!0,{...e,chapter:s})});return o?s:e}const d=(l?a(l):a)((r,o)=>{let s,i=0;const a=new Set,d=new Set,l=new Set;return{connectionStatus:"idle",messages:[],error:void 0,_initialized:!1,_thamyr:void 0,init(m){if(o()._initialized)return;if("undefined"==typeof window)return void console.debug("[Thamyr] init() skipped: no browser environment detected (SSR).");const{clientId:h}=m;if(!h){console.error("[Thamyr] clientId is required. Pass your Callimacus Client ID (`cal-pk-…`) to useInitThamyr().");const e={code:0,message:"clientId is required. Pass your Callimacus Client ID (`cal-pk-…`) to useInitThamyr()."};return r({connectionStatus:"error",error:e}),c(l,e),void c(d,"error")}void 0!==m.maxMessages&&m.maxMessages<0&&console.warn("[Thamyr] maxMessages must be >= 0. Received:",m.maxMessages,". Clamping to 1.");const f=0===m.maxMessages?1/0:Math.max(1,m.maxMessages??50);let y;r({connectionStatus:"connecting",error:void 0});try{y=new e({clientId:h,endpoint:m.endpoint,uiObserver:m.uiObserver})}catch(e){console.error("[Thamyr] Failed to create Thamyr instance:",e);const t={code:0,message:e instanceof Error?e.message:String(e)};return r({connectionStatus:"error",error:t}),c(l,t),void c(d,"error")}const w=++i;y.onResponse(e=>{i===w&&(e.type===n.BLOCK_PATCH?r(t=>({messages:u(t.messages,e.data)})):r(t=>{const n=[...t.messages,e];return{messages:n.length>f?n.slice(-f):n}}),c(a,e))}),y.onError(e=>{i===w&&(r({error:e,connectionStatus:"error"}),c(l,e),c(d,"error"))}),s=t.onConnectionStatus(e=>{if(i!==w)return;const t=e?"connected":"disconnected";r({connectionStatus:t}),c(d,t)}),function(e){r({_initialized:Boolean(e),_thamyr:e})}(y)},reset(){if(o()._initialized){i++;try{s?.()}catch(e){console.error("[Thamyr] Error unsubscribing connection status listener:",e)}try{t.disconnect()}catch(e){console.error("[Thamyr] Error disconnecting:",e)}s=void 0,r({_initialized:!1,_thamyr:void 0,connectionStatus:"idle",messages:[],error:void 0})}else"idle"!==o().connectionStatus&&r({connectionStatus:"idle",error:void 0})},sendEvent(e,t){const n=o()._thamyr;if(!n)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=o();if("connected"!==s){const e={code:0,message:`Cannot send event: connection status is "${s}". Wait for connected status before sending.`};throw r({error:e}),c(l,e),new Error(e.message)}n.sendUserInteraction(e,t)},sendAudio(e,t){const n=o()._thamyr;if(!n)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=o();if("connected"!==s){const e={code:0,message:`Cannot send audio: connection status is "${s}". Wait for connected status before sending.`};throw r({error:e}),c(l,e),new Error(e.message)}n.sendAudio(e,t)},addResponseListener:e=>(a.add(e),()=>{a.delete(e)}),addConnectionListener:e=>(d.add(e),()=>{d.delete(e)}),addErrorListener:e=>(l.add(e),()=>{l.delete(e)})}});var l;let m=!1,h=0;const f=new Set;function y(){m=!0}function w(){h++,m=!0}function g(){h--,queueMicrotask(()=>{if(h>0)return;m=!1;const e=[...f];f.clear();for(const t of e)t(new Error("[Thamyr] SDK was torn down: useInitThamyr() unmounted while this call was waiting for initialization."))})}function S(e){return new Error(`[Thamyr] SDK initialization failed: ${e?.message??"unknown error"}`)}async function p(){if("undefined"==typeof window)throw new Error("[Thamyr] The generated API is browser-only; this call ran without a browser environment (SSR).");const e=d.getState();if(e._thamyr)return e._thamyr;if(!m)throw new Error("[Thamyr] SDK is not initialized and no useInitThamyr() is mounted. Add useInitThamyr({clientId: 'cal-pk-…'}) to your root component.");if("error"===e.connectionStatus)throw S(e.error);return new Promise((e,t)=>{let n=!1;const r=e=>{n||(n=!0,s(),f.delete(o),e())},o=e=>{r(()=>{t(e)})};f.add(o);const s=d.subscribe(n=>{if(n._thamyr){const t=n._thamyr;r(()=>{e(t)})}else"error"===n.connectionStatus&&r(()=>{t(S(n.error))})})})}const b=new Set(["then","catch","finally","toJSON"]),T=new Set(Object.getOwnPropertyNames(Object.prototype));function E(e){return"string"!=typeof e||T.has(e)}const v=new Map,I=new Proxy({},{get(e,t){if(E(t))return Reflect.get(e,t);if(b.has(t))return;const n=t;let r=v.get(n);return void 0===r&&(r=function(e){const t=new Map;return new Proxy({},{get(n,r){if(E(r))return Reflect.get(n,r);if(b.has(r))return;const o=r;let s=t.get(o);return void 0===s&&(s=async(...t)=>{const n=(await p())[e],r=n?.[o];if("function"!=typeof r)throw new TypeError(`[Thamyr] ${e}.${o} is not part of the generated API surface.`);return Reflect.apply(r,n,t)},t.set(o,s)),s}})}(n),v.set(n,r)),r}});export{y as a,w as b,g as m,I as t,d as u,p as w};
9
- //# sourceMappingURL=api-PeedNYnN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-PeedNYnN.js","sources":["../../../../../node_modules/zustand/esm/vanilla.mjs","../../../../../node_modules/zustand/esm/react.mjs","../../../../src/callimacus/store.ts","../../../../src/callimacus/api.ts"],"sourcesContent":["const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n",null,null],"names":["createStoreImpl","createState","state","listeners","Set","setState","partial","replace","nextState","Object","is","previousState","assign","forEach","listener","getState","api","getInitialState","initialState","subscribe","add","delete","identity","arg","createImpl","createStore","useBoundStore","selector","slice","React","useSyncExternalStore","useCallback","useDebugValue","useStore","notifyListeners","error","console","patchedHistory","messages","patch","isPatched","patched","map","message","type","ThamyrResponseType","CHAPTER_EVENT","chapter","applyBlockPatch","useCallimacusStore","set","get","unsubConnectionStatus","generation","responseListeners","connectionListeners","errorListeners","connectionStatus","undefined","_initialized","_thamyr","init","config","window","debug","clientId","errorMessage","code","maxMessages","warn","Infinity","Math","max","thamyr","Thamyr","endpoint","uiObserver","Error","String","currentGen","onResponse","response","BLOCK_PATCH","data","length","onError","callimacusService","onConnectionStatus","connected","status","Boolean","setInitState","reset","disconnect","sendEvent","payload","sendUserInteraction","sendAudio","audio","query","addResponseListener","cb","addConnectionListener","addErrorListener","wasInitRequested","mountedInitOwners","pendingRejecters","markInitRequested","markInitOwnerMounted","markInitOwnerUnmounted","queueMicrotask","rejecters","clear","rejectWaiter","initError","async","waitForInstance","Promise","resolve","reject","isSettled","settle","action","unsubscribe","rejecter","current","instance","blockedNames","objectPrototypeMembers","getOwnPropertyNames","prototype","isPassthroughProperty","property","has","namespaces","Map","thamyrApi","Proxy","target","Reflect","name","namespace","namespaceName","methods","method","args","fn","TypeError","apply","createNamespaceFacade"],"mappings":"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","x_google_ignoreList":[0,1]}