@callimacus/thamyr-react 4.3.5 → 4.4.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,31 @@
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.4.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-core-v4.3.5...thamyr-core-v4.4.0) (2026-09-29)
7
+
8
+
9
+ ### Features
10
+
11
+ * **callimacus:** export additional action types from hooks for better type safety ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
12
+ * **ContentAPI:** implement getDocumentByGroupId method to retrieve documents based on language and group ID ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
13
+ * **hooks.ts:** enhance useProducts, useAnalytics, and useSitemap hooks with TypeScript interfaces and detailed documentation ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
14
+ * **react:** add eslint-config-xo-react for better React linting ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
15
+ * **react:** implement Callimacus store and hooks for state management ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
16
+ * **service.ts:** add polling transport option to socket connection for improved connectivity in restricted environments ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
17
+ * **service.ts:** add referrer to auth object for enhanced tracking and analytics ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
18
+ * **thamyr:** parity with the v2 wire, rounds without a message, acknowledged suggestions, receptors and block keys ([#784](https://github.com/callimacus/thamyr-sdk/issues/784)) ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **AnalyticsAPI.ts, Thamyr.ts:** remove array type from content parameter in trackEvent method for consistency and simplification ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
24
+ * **core/package.json:** update @solomei-ai/intent to version 1.9.2 for latest features and fixes ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
25
+ * **package.json:** remove redundant comma in scripts section to ensure JSON validity ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
26
+ * **package.json:** update @types/react to version 19.2.10 for improved type definitions chore(package.json): bump react and react-dom to version 19.2.4 for latest features and fixes ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
27
+ * **react:** ensure consistent export style across components ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
28
+ * **react:** remove obsolete global type declarations ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
29
+ * remove legacy-peer-deps from .npmrc and update registry configuration for scoped package ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
30
+
6
31
  ## [4.3.5](https://github.com/callimacus/thamyr-sdk/compare/thamyr-core-v4.3.4...thamyr-core-v4.3.5) (2026-09-29)
7
32
 
8
33
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,39 @@
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.4.0](https://github.com/callimacus/thamyr-sdk/compare/thamyr-react-v4.3.5...thamyr-react-v4.4.0) (2026-09-29)
7
+
8
+
9
+ ### Features
10
+
11
+ * **callimacus:** export additional action types from hooks for better type safety ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
12
+ * **ContentAPI:** implement getDocumentByGroupId method to retrieve documents based on language and group ID ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
13
+ * **hooks.ts:** enhance useProducts, useAnalytics, and useSitemap hooks with TypeScript interfaces and detailed documentation ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
14
+ * **react:** add eslint-config-xo-react for better React linting ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
15
+ * **react:** implement Callimacus store and hooks for state management ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
16
+ * **service.ts:** add polling transport option to socket connection for improved connectivity in restricted environments ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
17
+ * **service.ts:** add referrer to auth object for enhanced tracking and analytics ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
18
+ * **thamyr:** parity with the v2 wire, rounds without a message, acknowledged suggestions, receptors and block keys ([#784](https://github.com/callimacus/thamyr-sdk/issues/784)) ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **AnalyticsAPI.ts, Thamyr.ts:** remove array type from content parameter in trackEvent method for consistency and simplification ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
24
+ * **core/package.json:** update @solomei-ai/intent to version 1.9.2 for latest features and fixes ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
25
+ * **package.json:** remove redundant comma in scripts section to ensure JSON validity ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
26
+ * **package.json:** update @types/react to version 19.2.10 for improved type definitions chore(package.json): bump react and react-dom to version 19.2.4 for latest features and fixes ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
27
+ * **react:** ensure consistent export style across components ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
28
+ * **react:** remove obsolete global type declarations ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
29
+ * remove legacy-peer-deps from .npmrc and update registry configuration for scoped package ([fe22166](https://github.com/callimacus/thamyr-sdk/commit/fe221665c994723d546f972c9379cdf4b4eecbc8))
30
+
31
+
32
+ ### Dependencies
33
+
34
+ * The following workspace dependencies were updated
35
+ * dependencies
36
+ * @callimacus/thamyr bumped from ^4.3.5 to ^4.4.0
37
+ * @callimacus/thamyr-core bumped from ^4.3.5 to ^4.4.0
38
+
6
39
  ## [4.3.5](https://github.com/callimacus/thamyr-sdk/compare/thamyr-react-v4.3.4...thamyr-react-v4.3.5) (2026-09-29)
7
40
 
8
41
 
@@ -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};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
@@ -0,0 +1 @@
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]}
package/dist/esm/index.js CHANGED
@@ -5,5 +5,5 @@
5
5
  * See LICENSE.md for the full terms.
6
6
  *
7
7
  */
8
- export{CallimacusEvent,ChapterStatus,ClientEvents,GalleryMode,SLInputEventType,ServerEvents,ThamyrHttpError,ThamyrResponseType,UserInteractionType,callimacusService,clearIntentSessionId,ensureIntentSessionId,extractTtsAudio,getIntentSessionId,initIntent,isSetProduct,logger,setConsent,setDebug,setDebugPanel,setGeo,setIntentSessionMaxAge,transformImageUrl}from"@callimacus/thamyr-core";import{t as e,w as t,u as r,m as n,a as o,b as a}from"./chunks/api-Bzz6EL4P.js";import{useMemo as i,useEffect as c,useRef as s,useState as u,useCallback as d}from"react";import"@callimacus/thamyr";function l(e,t){const r=s(t);r.current=t,c(()=>e(e=>{r.current(e)}),[e])}function p(e){const t=r(e=>e.init),i=r(e=>e.reset);o(),c(()=>(a(),t(e),()=>{i(),n()}),[t,i,e.clientId,e.endpoint])}function m(){return{history:r(e=>e.messages),sendEvent:r(e=>e.sendEvent),sendAudio:r(e=>e.sendAudio)}}function v(){return{status:r(e=>e.connectionStatus)}}function y(e){l(r(e=>e.addResponseListener),e)}function f(e){l(r(e=>e.addConnectionListener),e)}function g(e){l(r(e=>e.addErrorListener),e)}function w(){return i(()=>({getCart:async()=>(await t()).cart.getCart(),addItem:async e=>(await t()).cart.addItemToCart({productId:e}),removeItem:async e=>(await t()).cart.removeItemFromCart({productId:e}),updateQuantity:async(e,r)=>(await t()).cart.updateProductQuantity({productId:e,quantity:r})}),[])}function h(){return e}function I(){return i(()=>({similar:async(e,r)=>(await t()).skesis.similar({anchorId:e,...r}),related:async(e,r)=>(await t()).skesis.related({anchorId:e,...r})}),[])}function E(){return i(()=>({getSitemap:async()=>(await t()).sitemap.getSitemap()}),[])}const L=-45,S=1800,T=3e4;function A({silenceThreshold:e=L,silenceDuration:t=S,maxDuration:r=T,onRecordingComplete:n}){const[o,a]=u("idle"),[i,l]=u([]),[p,m]=u(void 0),v=s(void 0),y=s(void 0),f=s(void 0),g=s(void 0),w=s(0),h=s(0),I=s(void 0),E=s([]),A=s(!1),C=d(()=>{if(0!==w.current&&(cancelAnimationFrame(w.current),w.current=0),void 0!==I.current&&(clearTimeout(I.current),I.current=void 0),g.current){for(const e of g.current.getTracks())e.stop();g.current=void 0}"closed"!==y.current?.state&&y.current?.close(),y.current=void 0,f.current=void 0,v.current=void 0,A.current=!1},[]);c(()=>C,[C]);const b=d(()=>{A.current||(A.current=!0,"recording"===v.current?.state&&v.current.stop(),0!==w.current&&(cancelAnimationFrame(w.current),w.current=0),void 0!==I.current&&(clearTimeout(I.current),I.current=void 0))},[]),M=d(async()=>{m(void 0),E.current=[],A.current=!1;try{const o=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,sampleRate:16e3}});g.current=o;const i=new AudioContext({sampleRate:16e3});y.current=i;const c=i.createMediaStreamSource(o),s=i.createAnalyser();s.fftSize=256,s.smoothingTimeConstant=.7,c.connect(s),f.current=s;const u=MediaRecorder.isTypeSupported("audio/webm;codecs=opus")?"audio/webm;codecs=opus":"audio/webm",d=new MediaRecorder(o,{mimeType:u});v.current=d,d.addEventListener("dataavailable",e=>{e.data.size>0&&E.current.push(e.data)}),d.addEventListener("stop",()=>{a("processing");const e=new Blob(E.current,{type:u});C(),n(e)}),d.start(250),a("recording"),h.current=0,I.current=setTimeout(()=>{b()},r);const p=()=>{if(!f.current||A.current)return;const r=f.current.frequencyBinCount,n=new Uint8Array(r);f.current.getByteFrequencyData(n);const o=Math.floor(r/32),a=[];for(let e=0;e<32;e++){let t=0;for(let r=0;r<o;r++)t+=n[e*o+r];a.push(t/o/255)}l(a);let i=0;for(const e of n){const t=e/255;i+=t*t}const c=Math.sqrt(i/r);if((c>0?20*Math.log10(c):-100)<e){if(0===h.current)h.current=Date.now();else if(Date.now()-h.current>t)return void b()}else h.current=0;w.current=requestAnimationFrame(p)};p()}catch{m("Microphone access denied"),a("idle"),C()}},[e,t,r,n,b,C]),R=d(()=>{a("idle"),l([])},[]);return{state:o,audioLevels:i,startRecording:M,stopRecording:b,reset:R,error:p}}function C(e){const t=s(void 0),[r,n]=u("idle"),[o,a]=u(void 0);c(()=>{const r=e?.audioUrl;if("undefined"==typeof Audio||void 0===r||""===r)return t.current=void 0,void n("idle");const o=new Audio(r);o.preload="none",t.current=o,n("idle"),a(void 0);const i=()=>{n("playing")},c=()=>{n("loading")},s=()=>{n(e=>"ended"===e?e:"paused")},u=()=>{n("ended")},d=()=>{a("Audio playback failed"),n("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=d(async()=>{const e=t.current;if(e)try{a(void 0),n("loading"),await e.play()}catch{a("Audio playback failed"),n("error")}},[]),l=d(()=>{t.current?.pause()},[]),p=d(()=>{const e=t.current;e&&(e.pause(),e.currentTime=0,n("idle"))},[]),m=d(()=>{const e=t.current;e&&(e.paused?i():e.pause())},[i]);return{state:r,isPlaying:"playing"===r||"loading"===r,error:o,play:i,pause:l,toggle:m,stop:p}}export{e as thamyrApi,h as useApi,r as useCallimacusStore,w as useCart,v as useConnection,p as useInitThamyr,f as useOnConnectionChange,g as useOnError,y as useOnResponse,E as useSitemap,I as useSkesis,m as useThamyr,C as useTtsAudio,A as useVoiceRecorder};
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};
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","useConnection","status","connectionStatus","useOnResponse","addResponseListener","useOnConnectionChange","addConnectionListener","useOnError","addErrorListener","useCart","useMemo","async","waitForInstance","cart","getCart","productId","addItemToCart","removeItemFromCart","quantity","updateProductQuantity","useApi","thamyrApi","useSkesis","anchorId","options","skesis","similar","related","useSitemap","sitemap","getSitemap","defaultOptions","useVoiceRecorder","silenceThreshold","silenceDuration","maxDuration","onRecordingComplete","state","setState","useState","audioLevels","setAudioLevels","error","setError","undefined","mediaRecorderRef","audioContextRef","analyserRef","streamRef","animationFrameRef","silenceStartRef","maxDurationTimerRef","chunksRef","stoppingRef","cleanup","useCallback","cancelAnimationFrame","clearTimeout","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","setTimeout","monitorAudio","bufferLength","frequencyBinCount","dataArray","Uint8Array","getByteFrequencyData","step","Math","floor","levels","i","sum","j","sumSquares","value","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/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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"}
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-Bzz6EL4P.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-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};
9
9
  //# sourceMappingURL=query.js.map
@@ -6,8 +6,8 @@
6
6
  *
7
7
  */
8
8
  import * as _callimacus_thamyr_core from '@callimacus/thamyr-core';
9
- import { UiObserverConfig, CallimacusApi, ErrorMessage, ThamyrResponse, UserInteractionType, InteractionPayloadMap, TtsAudio } from '@callimacus/thamyr-core';
10
- export { Block, BoundingBox, CallimacusEvent, Chapter, ChapterStatus, ClientEvents, ClientInfo, ConnectionStatusCallback, ErrorCallback, ErrorMessage, Gallery, GalleryMode, Image, ImageEdits, ImageFormatEdit, ImageResizeEdit, InteractionContext, InteractionPayloadMap, LocalizedEPArtwork, LocalizedEPChapter, LogLevel, LoggerConfig, ProductMatch, SLDocument, SLDocumentSection, SLInputEvent, SLInputEventType, ServerEvents, ServerResponseCallback, Story, ThamyrHttpError, ThamyrResponse, ThamyrResponseType, Topic, TtsAudio, UiElement, UiObserverConfig, UiSnapshot, UserInteraction, UserInteractionType, Video, WhisperPayload, callimacusService, clearIntentSessionId, ensureIntentSessionId, extractTtsAudio, getIntentSessionId, initIntent, isSetProduct, logger, setConsent, setDebug, setDebugPanel, setGeo, setIntentSessionMaxAge, transformImageUrl } 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';
11
11
  import { Thamyr } from '@callimacus/thamyr';
12
12
  import * as zustand from 'zustand';
13
13
 
@@ -82,14 +82,23 @@ function Chat() {
82
82
  return <button onClick={handleSend} disabled={status !== 'connected'}>Send</button>;
83
83
  }
84
84
  ```
85
+
86
+ Rounds without a message go through the same gate: `openLanding(value?)` opens
87
+ the landing page, `sendInteraction(id, options?)` sends a declared interaction
88
+ (typed once `ThamyrInteractionMap` is augmented), `refresh(block, interaction)`
89
+ re-runs the contents a block declares for its refresh interaction.
85
90
  */
86
91
  declare function useThamyr(): {
92
+ openLanding(value?: string, options?: RoundOptions): void;
93
+ sendInteraction<I extends InteractionId>(id: I, options?: InteractionOptions<I>): void;
94
+ refresh(block: string, interaction: InteractionId, options?: RoundOptions): void;
87
95
  history: ({
88
96
  type: "chapter-event";
89
97
  chapter: {
90
98
  id: string;
91
99
  deleted: boolean;
92
100
  language?: string;
101
+ contentLanguage?: string;
93
102
  receptors?: Array<string>;
94
103
  intent?: Array<string>;
95
104
  subCondition?: Array<string>;
@@ -221,6 +230,49 @@ declare function useThamyr(): {
221
230
  [key: string]: unknown;
222
231
  };
223
232
  };
233
+ } | {
234
+ id: string;
235
+ document: string;
236
+ type: "rive";
237
+ content?: string;
238
+ url: string;
239
+ properties: {
240
+ artboards: Array<{
241
+ name: string;
242
+ animations: Array<string>;
243
+ stateMachines: Array<{
244
+ name: string;
245
+ inputs: Array<{
246
+ name: string;
247
+ type: "boolean" | "number" | "trigger";
248
+ }>;
249
+ }>;
250
+ viewModel?: string;
251
+ }>;
252
+ viewModels: Array<{
253
+ name: string;
254
+ instances: Array<string>;
255
+ properties: Array<{
256
+ name: string;
257
+ type: string;
258
+ values?: Array<string>;
259
+ }>;
260
+ }>;
261
+ textRuns: Array<{
262
+ artboard: string;
263
+ name: string;
264
+ text: string;
265
+ }>;
266
+ events: Array<{
267
+ artboard: string;
268
+ name: string;
269
+ url?: string;
270
+ properties: Array<{
271
+ name: string;
272
+ type: "number" | "boolean" | "string";
273
+ }>;
274
+ }>;
275
+ };
224
276
  } | {
225
277
  id: string;
226
278
  document: string;
@@ -352,6 +404,49 @@ declare function useThamyr(): {
352
404
  [key: string]: unknown;
353
405
  };
354
406
  };
407
+ } | {
408
+ id: string;
409
+ document: string;
410
+ type: "rive";
411
+ content?: string;
412
+ url: string;
413
+ properties: {
414
+ artboards: Array<{
415
+ name: string;
416
+ animations: Array<string>;
417
+ stateMachines: Array<{
418
+ name: string;
419
+ inputs: Array<{
420
+ name: string;
421
+ type: "boolean" | "number" | "trigger";
422
+ }>;
423
+ }>;
424
+ viewModel?: string;
425
+ }>;
426
+ viewModels: Array<{
427
+ name: string;
428
+ instances: Array<string>;
429
+ properties: Array<{
430
+ name: string;
431
+ type: string;
432
+ values?: Array<string>;
433
+ }>;
434
+ }>;
435
+ textRuns: Array<{
436
+ artboard: string;
437
+ name: string;
438
+ text: string;
439
+ }>;
440
+ events: Array<{
441
+ artboard: string;
442
+ name: string;
443
+ url?: string;
444
+ properties: Array<{
445
+ name: string;
446
+ type: "number" | "boolean" | "string";
447
+ }>;
448
+ }>;
449
+ };
355
450
  } | {
356
451
  id: string;
357
452
  document: string;
@@ -843,6 +938,7 @@ declare function useThamyr(): {
843
938
  priority?: number;
844
939
  metaJson?: unknown;
845
940
  type: `custom:${string}`;
941
+ key?: string;
846
942
  name?: string;
847
943
  data: unknown;
848
944
  }>;
@@ -857,6 +953,7 @@ declare function useThamyr(): {
857
953
  id: string;
858
954
  deleted: boolean;
859
955
  language?: string;
956
+ contentLanguage?: string;
860
957
  receptors?: Array<string>;
861
958
  intent?: Array<string>;
862
959
  subCondition?: Array<string>;
@@ -988,6 +1085,49 @@ declare function useThamyr(): {
988
1085
  [key: string]: unknown;
989
1086
  };
990
1087
  };
1088
+ } | {
1089
+ id: string;
1090
+ document: string;
1091
+ type: "rive";
1092
+ content?: string;
1093
+ url: string;
1094
+ properties: {
1095
+ artboards: Array<{
1096
+ name: string;
1097
+ animations: Array<string>;
1098
+ stateMachines: Array<{
1099
+ name: string;
1100
+ inputs: Array<{
1101
+ name: string;
1102
+ type: "boolean" | "number" | "trigger";
1103
+ }>;
1104
+ }>;
1105
+ viewModel?: string;
1106
+ }>;
1107
+ viewModels: Array<{
1108
+ name: string;
1109
+ instances: Array<string>;
1110
+ properties: Array<{
1111
+ name: string;
1112
+ type: string;
1113
+ values?: Array<string>;
1114
+ }>;
1115
+ }>;
1116
+ textRuns: Array<{
1117
+ artboard: string;
1118
+ name: string;
1119
+ text: string;
1120
+ }>;
1121
+ events: Array<{
1122
+ artboard: string;
1123
+ name: string;
1124
+ url?: string;
1125
+ properties: Array<{
1126
+ name: string;
1127
+ type: "number" | "boolean" | "string";
1128
+ }>;
1129
+ }>;
1130
+ };
991
1131
  } | {
992
1132
  id: string;
993
1133
  document: string;
@@ -1119,6 +1259,49 @@ declare function useThamyr(): {
1119
1259
  [key: string]: unknown;
1120
1260
  };
1121
1261
  };
1262
+ } | {
1263
+ id: string;
1264
+ document: string;
1265
+ type: "rive";
1266
+ content?: string;
1267
+ url: string;
1268
+ properties: {
1269
+ artboards: Array<{
1270
+ name: string;
1271
+ animations: Array<string>;
1272
+ stateMachines: Array<{
1273
+ name: string;
1274
+ inputs: Array<{
1275
+ name: string;
1276
+ type: "boolean" | "number" | "trigger";
1277
+ }>;
1278
+ }>;
1279
+ viewModel?: string;
1280
+ }>;
1281
+ viewModels: Array<{
1282
+ name: string;
1283
+ instances: Array<string>;
1284
+ properties: Array<{
1285
+ name: string;
1286
+ type: string;
1287
+ values?: Array<string>;
1288
+ }>;
1289
+ }>;
1290
+ textRuns: Array<{
1291
+ artboard: string;
1292
+ name: string;
1293
+ text: string;
1294
+ }>;
1295
+ events: Array<{
1296
+ artboard: string;
1297
+ name: string;
1298
+ url?: string;
1299
+ properties: Array<{
1300
+ name: string;
1301
+ type: "number" | "boolean" | "string";
1302
+ }>;
1303
+ }>;
1304
+ };
1122
1305
  } | {
1123
1306
  id: string;
1124
1307
  document: string;
@@ -1610,6 +1793,7 @@ declare function useThamyr(): {
1610
1793
  priority?: number;
1611
1794
  metaJson?: unknown;
1612
1795
  type: `custom:${string}`;
1796
+ key?: string;
1613
1797
  name?: string;
1614
1798
  data: unknown;
1615
1799
  }>;
@@ -1636,11 +1820,66 @@ declare function useThamyr(): {
1636
1820
  storyId: string;
1637
1821
  success: boolean;
1638
1822
  };
1823
+ } | {
1824
+ type: "block-patch";
1825
+ data: {
1826
+ storyId: string;
1827
+ chapterId: string;
1828
+ blockId: string;
1829
+ contentId: string;
1830
+ values: {
1831
+ [key: string]: string | number | boolean;
1832
+ };
1833
+ inputs: {
1834
+ [key: string]: number | boolean;
1835
+ };
1836
+ textRuns: {
1837
+ [key: string]: string;
1838
+ };
1839
+ fire: Array<string>;
1840
+ };
1639
1841
  })[];
1640
- sendEvent: <T extends _callimacus_thamyr_core.UserInteractionType>(type: T, payload: _callimacus_thamyr_core.InteractionPayloadMap[T]) => void;
1842
+ sendEvent: <T extends UserInteractionType>(type: T, payload: _callimacus_thamyr_core.InteractionPayloadMap[T]) => void;
1641
1843
  sendAudio: (audio: Blob, query?: string) => void;
1642
1844
  };
1643
1845
  /**
1846
+ What {@link useSuggestions} returns: the current list and whether a newer one is on its way.
1847
+ */
1848
+ type SuggestionsState = {
1849
+ suggestions: string[];
1850
+ loading: boolean;
1851
+ };
1852
+ /**
1853
+ Options of {@link useSuggestions}.
1854
+ */
1855
+ type SuggestionsOptions = RoundOptions & {
1856
+ /**
1857
+ How long to wait after the last keystroke before asking; the empty prefix asks at once. Default 200 ms.
1858
+ */
1859
+ debounceMs?: number;
1860
+ };
1861
+ /**
1862
+ Prompt suggestions for an input box, following `prefix` as the visitor types:
1863
+ the tenant's starter questions while it is shorter than three characters,
1864
+ autocomplete from there. Debounced, and a late answer never overwrites a newer
1865
+ prefix. Empty until the SDK is connected; fail-open like the server, so an
1866
+ error or a timeout shows no suggestions rather than an error.
1867
+ @param prefix - What the visitor has typed so far.
1868
+ @param options - The story to suggest for, the language, the debounce.
1869
+ @example
1870
+ ```tsx
1871
+ function Ask({ storyId }: Props) {
1872
+ const [text, setText] = useState('');
1873
+ const { suggestions } = useSuggestions(text, { storyId });
1874
+ return (<>
1875
+ <input value={text} onChange={e => setText(e.target.value)} />
1876
+ {suggestions.map(s => <button key={s} onClick={() => setText(s)}>{s}</button>)}
1877
+ </>);
1878
+ }
1879
+ ```
1880
+ */
1881
+ declare function useSuggestions(prefix: string, options?: SuggestionsOptions): SuggestionsState;
1882
+ /**
1644
1883
  Returns the current connection status of the Thamyr SDK.
1645
1884
 
1646
1885
  Starts at `idle`. Moves to `connecting` on init, then to `connected` — or straight
@@ -1944,5 +2183,5 @@ stream URL.
1944
2183
  */
1945
2184
  declare function useTtsAudio(audio: TtsAudio | undefined): UseTtsAudioReturn;
1946
2185
 
1947
- export { thamyrApi, useApi, useCallimacusStore, useCart, useConnection, useInitThamyr, useOnConnectionChange, useOnError, useOnResponse, useSitemap, useSkesis, useThamyr, useTtsAudio, useVoiceRecorder };
1948
- export type { CallimacusInitConfig, CartActions, ConnectionStatus, SitemapActions, SkesisActions, TtsAudioState, UseTtsAudioReturn, UseVoiceRecorderOptions, UseVoiceRecorderReturn, VoiceRecorderState };
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@callimacus/thamyr-react",
3
- "version": "4.3.5",
3
+ "version": "4.4.0",
4
4
  "private": false,
5
5
  "description": "React package for Thamyr",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -39,8 +39,8 @@
39
39
  "lint": "eslint src"
40
40
  },
41
41
  "dependencies": {
42
- "@callimacus/thamyr": "^4.3.5",
43
- "@callimacus/thamyr-core": "^4.3.5",
42
+ "@callimacus/thamyr": "^4.4.0",
43
+ "@callimacus/thamyr-core": "^4.4.0",
44
44
  "zustand": "^5.0.15"
45
45
  },
46
46
  "peerDependencies": {
@@ -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}from"@callimacus/thamyr-core";import n from"react";const r=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},o=e=>e;const s=e=>{const t=(e=>e?r(e):r)(e),s=e=>function(e,t=o){const r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r}(t,e);return Object.assign(s,t),s};function i(e,t){for(const n of e)try{n(t)}catch(e){console.error("[Thamyr] Listener threw:",e)}}const a=(c?s(c):s)((n,r)=>{let o,s=0;const a=new Set,c=new Set,u=new Set;return{connectionStatus:"idle",messages:[],error:void 0,_initialized:!1,_thamyr:void 0,init(d){if(r()._initialized)return;if("undefined"==typeof window)return void console.debug("[Thamyr] init() skipped: no browser environment detected (SSR).");const{clientId:l}=d;if(!l){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 n({connectionStatus:"error",error:e}),i(u,e),void i(c,"error")}void 0!==d.maxMessages&&d.maxMessages<0&&console.warn("[Thamyr] maxMessages must be >= 0. Received:",d.maxMessages,". Clamping to 1.");const m=0===d.maxMessages?1/0:Math.max(1,d.maxMessages??50);let f;n({connectionStatus:"connecting",error:void 0});try{f=new e({clientId:l,endpoint:d.endpoint,uiObserver:d.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 n({connectionStatus:"error",error:t}),i(u,t),void i(c,"error")}const h=++s;f.onResponse(e=>{s===h&&(n(t=>{const n=[...t.messages,e];return{messages:n.length>m?n.slice(-m):n}}),i(a,e))}),f.onError(e=>{s===h&&(n({error:e,connectionStatus:"error"}),i(u,e),i(c,"error"))}),o=t.onConnectionStatus(e=>{if(s!==h)return;const t=e?"connected":"disconnected";n({connectionStatus:t}),i(c,t)}),function(e){n({_initialized:Boolean(e),_thamyr:e})}(f)},reset(){if(r()._initialized){s++;try{o?.()}catch(e){console.error("[Thamyr] Error unsubscribing connection status listener:",e)}try{t.disconnect()}catch(e){console.error("[Thamyr] Error disconnecting:",e)}o=void 0,n({_initialized:!1,_thamyr:void 0,connectionStatus:"idle",messages:[],error:void 0})}else"idle"!==r().connectionStatus&&n({connectionStatus:"idle",error:void 0})},sendEvent(e,t){const o=r()._thamyr;if(!o)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=r();if("connected"!==s){const e={code:0,message:`Cannot send event: connection status is "${s}". Wait for connected status before sending.`};throw n({error:e}),i(u,e),new Error(e.message)}o.sendUserInteraction(e,t)},sendAudio(e,t){const o=r()._thamyr;if(!o)throw new Error("[Thamyr] SDK is not initialized yet. Ensure useInitThamyr() has been called.");const{connectionStatus:s}=r();if("connected"!==s){const e={code:0,message:`Cannot send audio: connection status is "${s}". Wait for connected status before sending.`};throw n({error:e}),i(u,e),new Error(e.message)}o.sendAudio(e,t)},addResponseListener:e=>(a.add(e),()=>{a.delete(e)}),addConnectionListener:e=>(c.add(e),()=>{c.delete(e)}),addErrorListener:e=>(u.add(e),()=>{u.delete(e)})}});var c;let u=!1,d=0;const l=new Set;function m(){u=!0}function f(){d++,u=!0}function h(){d--,queueMicrotask(()=>{if(d>0)return;u=!1;const e=[...l];l.clear();for(const t of e)t(new Error("[Thamyr] SDK was torn down: useInitThamyr() unmounted while this call was waiting for initialization."))})}function y(e){return new Error(`[Thamyr] SDK initialization failed: ${e?.message??"unknown error"}`)}async function w(){if("undefined"==typeof window)throw new Error("[Thamyr] The generated API is browser-only; this call ran without a browser environment (SSR).");const e=a.getState();if(e._thamyr)return e._thamyr;if(!u)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 y(e.error);return new Promise((e,t)=>{let n=!1;const r=e=>{n||(n=!0,s(),l.delete(o),e())},o=e=>{r(()=>{t(e)})};l.add(o);const s=a.subscribe(n=>{if(n._thamyr){const t=n._thamyr;r(()=>{e(t)})}else"error"===n.connectionStatus&&r(()=>{t(y(n.error))})})})}const g=new Set(["then","catch","finally","toJSON"]),S=new Set(Object.getOwnPropertyNames(Object.prototype));function p(e){return"string"!=typeof e||S.has(e)}const b=new Map,T=new Proxy({},{get(e,t){if(p(t))return Reflect.get(e,t);if(g.has(t))return;const n=t;let r=b.get(n);return void 0===r&&(r=function(e){const t=new Map;return new Proxy({},{get(n,r){if(p(r))return Reflect.get(n,r);if(g.has(r))return;const o=r;let s=t.get(o);return void 0===s&&(s=async(...t)=>{const n=(await w())[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),b.set(n,r)),r}});export{m as a,f as b,h as m,T as t,a as u,w};
9
- //# sourceMappingURL=api-Bzz6EL4P.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-Bzz6EL4P.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","useCallimacusStore","set","get","unsubConnectionStatus","generation","responseListeners","connectionListeners","errorListeners","connectionStatus","messages","undefined","_initialized","_thamyr","init","config","window","debug","clientId","errorMessage","code","message","maxMessages","warn","Infinity","Math","max","thamyr","Thamyr","endpoint","uiObserver","Error","String","currentGen","onResponse","response","length","onError","callimacusService","onConnectionStatus","connected","status","Boolean","setInitState","reset","disconnect","sendEvent","type","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]}