@capytale/iframe-react 1.1.17 → 1.1.18

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/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("react/jsx-runtime"),y=require("react");const X=Symbol("Comlink.proxy"),pe=Symbol("Comlink.endpoint"),me=Symbol("Comlink.releaseProxy"),N=Symbol("Comlink.finalizer"),D=Symbol("Comlink.thrown"),Z=e=>typeof e=="object"&&e!==null||typeof e=="function",Ce={canHandle:e=>Z(e)&&e[X],serialize(e){const{port1:t,port2:n}=new MessageChannel;return z(e,t),[n,[n]]},deserialize(e){return e.start(),ne(e)}},ye={canHandle:e=>Z(e)&&D in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},ee=new Map([["proxy",Ce],["throw",ye]]);function ve(e,t){for(const n of e)if(t===n||n==="*"||n instanceof RegExp&&n.test(t))return!0;return!1}function z(e,t=globalThis,n=["*"]){t.addEventListener("message",function r(o){if(!o||!o.data)return;if(!ve(n,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}const{id:s,type:f,path:c}=Object.assign({path:[]},o.data),g=(o.data.argumentList||[]).map(F);let d;try{const u=c.slice(0,-1).reduce((C,S)=>C[S],e),p=c.reduce((C,S)=>C[S],e);switch(f){case"GET":d=p;break;case"SET":u[c.slice(-1)[0]]=F(o.data.value),d=!0;break;case"APPLY":d=p.apply(u,g);break;case"CONSTRUCT":{const C=new p(...g);d=se(C)}break;case"ENDPOINT":{const{port1:C,port2:S}=new MessageChannel;z(e,S),d=he(C,[C])}break;case"RELEASE":d=void 0;break;default:return}}catch(u){d={value:u,[D]:0}}Promise.resolve(d).catch(u=>({value:u,[D]:0})).then(u=>{const[p,C]=$(u);t.postMessage(Object.assign(Object.assign({},p),{id:s}),C),f==="RELEASE"&&(t.removeEventListener("message",r),te(t),N in e&&typeof e[N]=="function"&&e[N]())}).catch(u=>{const[p,C]=$({value:new TypeError("Unserializable return value"),[D]:0});t.postMessage(Object.assign(Object.assign({},p),{id:s}),C)})}),t.start&&t.start()}function Se(e){return e.constructor.name==="MessagePort"}function te(e){Se(e)&&e.close()}function ne(e,t){const n=new Map;return e.addEventListener("message",function(o){const{data:s}=o;if(!s||!s.id)return;const f=n.get(s.id);if(f)try{f(s)}finally{n.delete(s.id)}}),H(e,n,[],t)}function L(e){if(e)throw new Error("Proxy has been released and is not useable")}function oe(e){return x(e,new Map,{type:"RELEASE"}).then(()=>{te(e)})}const I=new WeakMap,j="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(I.get(e)||0)-1;I.set(e,t),t===0&&oe(e)});function we(e,t){const n=(I.get(t)||0)+1;I.set(t,n),j&&j.register(e,t,e)}function Ae(e){j&&j.unregister(e)}function H(e,t,n=[],r=function(){}){let o=!1;const s=new Proxy(r,{get(f,c){if(L(o),c===me)return()=>{Ae(s),oe(e),t.clear(),o=!0};if(c==="then"){if(n.length===0)return{then:()=>s};const g=x(e,t,{type:"GET",path:n.map(d=>d.toString())}).then(F);return g.then.bind(g)}return H(e,t,[...n,c])},set(f,c,g){L(o);const[d,u]=$(g);return x(e,t,{type:"SET",path:[...n,c].map(p=>p.toString()),value:d},u).then(F)},apply(f,c,g){L(o);const d=n[n.length-1];if(d===pe)return x(e,t,{type:"ENDPOINT"}).then(F);if(d==="bind")return H(e,t,n.slice(0,-1));const[u,p]=U(g);return x(e,t,{type:"APPLY",path:n.map(C=>C.toString()),argumentList:u},p).then(F)},construct(f,c){L(o);const[g,d]=U(c);return x(e,t,{type:"CONSTRUCT",path:n.map(u=>u.toString()),argumentList:g},d).then(F)}});return we(s,e),s}function be(e){return Array.prototype.concat.apply([],e)}function U(e){const t=e.map($);return[t.map(n=>n[0]),be(t.map(n=>n[1]))]}const re=new WeakMap;function he(e,t){return re.set(e,t),e}function se(e){return Object.assign(e,{[X]:!0})}function Ee(e,t=globalThis,n="*"){return{postMessage:(r,o)=>e.postMessage(r,n,o),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}}function $(e){for(const[t,n]of ee)if(n.canHandle(e)){const[r,o]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},o]}return[{type:"RAW",value:e},re.get(e)||[]]}function F(e){switch(e.type){case"HANDLER":return ee.get(e.name).deserialize(e.value);case"RAW":return e.value}}function x(e,t,n,r){return new Promise(o=>{const s=Re();t.set(s,o),e.start&&e.start(),e.postMessage(Object.assign({id:s},n),r)})}function Re(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function Fe(e,t){return e.length===0?t:`[${e}] ${t}`}function Je(e,t){let n=!1,r,o,s;function f(u){return Fe(e,u)}let c,g=!1;if(window.parent===window)console.warn(f("Contract link is not supported in standalone mode")),c={ready(){return Promise.resolve()},declare(){return Promise.resolve()},done(){return Promise.resolve()},provide(u,p,C){return Promise.resolve()}};else{const u=Ee(window.parent,void 0,t);z({declare(p){if(r==null)throw new Error(f("No handler for declare"));r(p)},done(){if(o==null)throw new Error(f("No handler for done"));o()},provide(p,C,S){if(s==null)throw new Error(f("No handler for provide"));s(p,C,S)}},u),c=ne(u),g=!0}const d=()=>{if(!n){if(r==null||o==null||s==null)return;n=!0,c.ready()}};return{declare:u=>c.declare(u),done:()=>c.done(),provide:(u,p,C)=>c.provide(u,p,se(C)),get name(){return e},get isReady(){return g},set onDeclare(u){r=u,d()},set onDone(u){o=u,d()},set onProvide(u){s=u,d()}}}function ke(e){return function(t){let n,r=!1,o=!1,s,f,c=!1,g=!1,d,u,p,C;function S(){if(s!=null&&s!==0&&f!=null)return f}function E(i){if(s!=null&&f!=null&&!(i>s))return f}function b(){return p??(g?p=Promise.resolve():p=new Promise((i,l)=>{C=i}))}function J(){return d===void 0&&(d={get name(){return t},get version(){return s},get i(){return S()},v:i=>E(i)}),d}function T(){return u===void 0&&(u={get name(){return t},get version(){return g?s:void 0},get i(){return g?S():void 0},v:i=>g?E(i):void 0,get promise(){return s===0?Promise.reject(e("Remote interface not provided")):b().then(()=>{if(s===0)throw new Error(e("Remote interface not provided"));return J()})}}),u}function R(){C!=null&&(C(),C=void 0)}return{get name(){return t},get localVersion(){if(n!=null)return n},set localVersion(i){if(n!=null&&n!==i)throw new Error(e("A different local version is already set"));n=i},get localVersionSent(){return r},set localVersionSent(i){if(!i&&r)throw new Error(e("Local version already notified"));r=i,i&&n===0&&(o=!0)},get localInterfaceSent(){return o},set localInterfaceSent(i){if(n==null)throw new Error(e("Local version not set"));if(!i&&o)throw new Error(e("Local interface already sent."));o=i},get remoteVersion(){if(s!=null)return s},set remoteVersion(i){if(s!=null&&s!==i)throw new Error(e("A different remote version is already set for "+t+`(${s} -> ${i})`));s=i,i===0&&(c=!0)},get remoteVersionReceived(){return s!=null},setRemoteInterface:i=>{if(s==null)throw new Error(e("Remote version not set"));if(s===0){console.warn(e("Remote version is 0, remote interface is ignored."));return}if(c)throw new Error(e("Interface already provided."));f=i,c=!0},get remoteInterfaceReceived(){return c},depGroup:void 0,get isActivable(){return c&&o},get isActivated(){return g},activate(){if(!g){if(!c)throw new Error(e("Remote interface not provided."));if(!o)throw new Error(e("Local interface not sent"));g=!0,R()}},getRemote:()=>J(),getLazyRemote:()=>T(),get activationPromise(){return b()}}}}function xe(e){return function(t,n,r,o){let s=r,f=!1,c=!1;function g(){return t.every(d=>d.remoteVersionReceived&&d.localVersionSent)&&n.every(d=>d.remoteVersionReceived)}return{get isDeclared(){return c},set isDeclared(d){if(!d&&c)throw new Error(e("Factory already declared"));c=d},get isReady(){return g()},get isDone(){return f},get args(){return t},get deps(){return n},invoke(){if(f)throw new Error(e("Factory already invoked"));if(!g())throw new Error(e("Factory is not ready"));let d;o?d=t.map(C=>C.getRemote()):d=t[0].getRemote();let u;const p=n.length>0?n.map(C=>C.getRemote()):null;try{u=p==null?s(d):s(d,p)}catch(C){throw new Error(e("error in factory:"),{cause:C})}if(o||(u=[u]),u.length!=t.length)throw new Error(e("Invalid factory result"));return f=!0,s=null,u}}}}function Te(e){return function(t,n,r,o){let s=n,f=!1;function c(){return t.every(g=>g.isActivated)}return{get isReady(){return c()},get isDone(){return f},get args(){return t},invoke(){if(f||!c()){const u=new Error(e(f?"callback already invoked":"callback parameters are not ready"));throw o?.[1](u),u}const g=r?t.map(u=>u.getRemote()):t[0].getRemote();let d;try{d=s(g)}catch(u){o==null?console.error(e("error in callback:"),u):o[1](u)}finally{f=!0}o?.[0](d)}}}}function ie(e,t){return e==null||e.length===0?t:`[${e}] ${t}`}function Me(e){function t(i){return ie(e.name,i)}const n=Te(t),r=ke(t),o=xe(t),s={},f=[];let c=[],g;const d=()=>(g==null?g=0:g++,g);function u(i){let l=s[i];return l==null&&(l=r(i),l.localVersion==null&&(b&&(l.localVersion=0),J&&(l.localVersionSent=!0)),l.remoteVersion==null&&T&&(l.remoteVersion=0),s[i]=l),l}function p(i){return i.map(u)}function C(...i){const l=d(),m=Array(l).fill(!1);i.forEach(v=>{v.forEach(w=>{w.depGroup!=null&&(m[w.depGroup]=!0),w.depGroup=l})}),Object.values(s).forEach(v=>{v.depGroup!=null&&v.depGroup!==l&&m[v.depGroup]&&(v.depGroup=l)})}e.onDeclare=i=>{const l=p(i.map(m=>m.name));for(let m=0;m<i.length;m++)i[m].version!=null&&(l[m].remoteVersion=i[m].version);C(l),R()},e.onDone=()=>{T||(T=!0,Object.values(s).forEach(i=>{i.remoteVersion==null&&(i.remoteVersion=0)}),R())},e.onProvide=(i,l,m)=>{let v=s[i];if(v==null)throw new Error(t(`Contract not declared : ${i}`));if(v.remoteVersion!=l)throw new Error(t(`Remote declared version ${v.remoteVersion} of contract "${i}" but provided version ${l}.`));if(v.remoteInterfaceReceived)throw new Error(t(`Remote contract "${i}" is already provided.`));v.setRemoteInterface(m),R()};let S=!1,E=!1,b=!1,J=!1,T=!1;async function R(){if(E=!0,!S){for(S=!0;E;){if(E=!1,e.isReady){const i=f.filter(l=>!l.isDeclared);if(i.length>0)for(const l of i){const m=Array(l.args.length+l.deps.length);l.args.forEach((v,w)=>m[w]=v),l.deps.forEach((v,w)=>m[w+l.args.length]=v),await e.declare(m.map(v=>({name:v.name,version:v.localVersion}))),m.forEach(v=>{v.localVersion!=null&&(v.localVersionSent=!0)}),l.isDeclared=!0}}if(e.isReady&&b&&f.every(i=>i.isDeclared)){const i=Object.values(s).filter(l=>!l.localVersionSent&&l.localVersion!=null);if(i.length>0)for(const l of i)await e.declare([{name:l.name,version:l.localVersion}]),l.localVersionSent=!0;J||(J=!0,await e.done())}if(e.isReady){const i=f.filter(l=>!l.isDone&&l.isReady);if(i.length>0)for(const l of i){const m=l.invoke();for(let v=0;v<l.args.length;v++){const w=l.args[v];await e.provide(w.name,w.localVersion,m[v]),w.localInterfaceSent=!0}}}if(g!=null){const i=Array(g+1).fill(null);for(const l in s){const m=s[l];m.depGroup!=null&&(m.isActivable?i[m.depGroup]==null&&!m.isActivated&&(i[m.depGroup]=!0):i[m.depGroup]=!1)}if(i.some(l=>l===!0))for(const l in s){const m=s[l];m.depGroup!=null&&i[m.depGroup]&&m.activate()}}if(e.isReady){const i=c;c=[];const l=[];for(const m of i)!m.isDone&&m.isReady?m.invoke():l.push(m);l.push(...c),c=l}}S=!1}}return{get(i){return u(i)},declareFactory:(i,l,m,v)=>{if(b)throw new Error(t("Cannot declare a factory after done has been set to true."));const w=p(i.map(h=>h.name));{const h=w.filter(O=>O.localVersion!=null);if(h.length>0)throw new Error(t("Cannot declare a factory for already implemented contracts : "+h.map(O=>O.name).join(", ")))}for(let h=0;h<i.length;h++)w[h].localVersion=i[h].version;const k=p(l);C(w,k);const fe=o(w,k,m,v);f.push(fe),R()},declareCallback(i,l,m,v){const w=p(i),k=n(w,l,m,v);!S&&c.length===0&&k.isReady?k.invoke():(c.push(k),R())},get done(){return b},set done(i){if(b){if(!i)throw new Error(t("Cannot set done to false after it has been set to true."))}else i&&(b=!0,Object.values(s).forEach(l=>{l.localVersion==null&&(l.localVersion=0)}),R())}}}const Le=/^\d+$/;function Ge(e){const[t,n,r]=e.split(":",3);if(n==null||r!=null||!Le.test(n))return null;const o=parseInt(n);return isNaN(o)||o===0?null:{name:t,version:o}}function Pe(e){const t=Me(e);function n(r){return ie(e.name,r)}return{plug(r,o,s=void 0){if(t.done)throw new Error(n("Cannot plug after plugsDone."));s==null&&(s=o,o=[]);let f=!0;Array.isArray(r)||(r=[r],f=!1);const c=r.map(g=>{const d=Ge(g);if(d==null)throw new Error(n("Invalid contract id : "+g));return d});t.declareFactory(c,o,s,f)},plugsDone(){t.done=!0},use(r,o){let s=!0;Array.isArray(r)||(r=[r],s=!1),t.declareCallback(r,o,s)},exec(r,o){let s=!0;return Array.isArray(r)||(r=[r],s=!1),new Promise((...f)=>{t.declareCallback(r,o,s,f)})},get(r){return r.map(o=>t.get(o).getLazyRemote())}}}const ae="app-agent";let q;function Ve(e){return q!=null||(q=Pe(Je(ae,e))),q}console.log(`[${ae}@1.0.12] loaded`);const Q=e=>{let t;const n=new Set,r=(d,u)=>{const p=typeof d=="function"?d(t):d;if(!Object.is(p,t)){const C=t;t=u??(typeof p!="object"||p===null)?p:Object.assign({},t,p),n.forEach(S=>S(t,C))}},o=()=>t,c={setState:r,getState:o,getInitialState:()=>g,subscribe:d=>(n.add(d),()=>n.delete(d))},g=t=e(r,o,c);return c},De=e=>e?Q(e):Q,Ie=e=>e;function je(e,t=Ie){const n=y.useSyncExternalStore(e.subscribe,y.useCallback(()=>t(e.getState()),[e,t]),y.useCallback(()=>t(e.getInitialState()),[e,t]));return y.useDebugValue(n),n}const _=e=>{const t=De(e),n=r=>je(t,r);return Object.assign(n,t),n},ce=e=>e?_(e):_,$e=e=>(t,n,r)=>{const o=r.subscribe;return r.subscribe=(f,c,g)=>{let d=f;if(c){const u=g?.equalityFn||Object.is;let p=f(r.getState());d=C=>{const S=f(C);if(!u(p,S)){const E=p;c(p=S,E)}},g?.fireImmediately&&c(p,p)}return o(d)},e(t,n,r)},Oe=$e,a=ce()(Oe(e=>({ready:!1,workflow:"current",mode:"assignment",theme:"light",saveCount:0,canSave:!1,afterSaveCount:0,isDirtyCount:0,loadedTextContent:null,loadedJsonContent:null,loadedJsonActivityContent:null,loadedJsonAssignmentContent:null,loadedJsonActivityBinaryData:null,loadedJsonAssignmentBinaryData:null,getTextContentFunction:()=>{throw console.error("[React bindings] getTextContentFunction is not set"),new Error("[React bindings] getTextContentFunction is not set")},getJsonContentFunction:()=>{throw console.error("[React bindings] getJsonContentFunction is not set"),new Error("[React bindings] getJsonContentFunction is not set")},getJsonActivityContentFunction:()=>{throw console.error("[React bindings] getJsonActivityContentFunction is not set"),new Error("[React bindings] getJsonActivityContentFunction is not set")},getJsonAssignmentContentFunction:()=>{throw console.error("[React bindings] getJsonAssignmentContentFunction is not set"),new Error("[React bindings] getJsonAssignmentContentFunction is not set")},getJsonActivitySplitContentFunction:()=>{throw console.error("[React bindings] getJsonActivitySplitContentFunction is not set"),new Error("[React bindings] getJsonActivitySplitContentFunction is not set")},getJsonAssignmentSplitContentFunction:()=>{throw console.error("[React bindings] getJsonAssignmentSplitContentFunction is not set"),new Error("[React bindings] getJsonAssignmentSplitContentFunction is not set")},sidebarActions:{},quickActions:{},activitySettingsCallback:null,llmGetFirstMessageContextFunction:null,setLlmGetFirstMessageContextFunction:t=>{e({llmGetFirstMessageContextFunction:t})},llmGetAllMessagesContextFunction:null,setLlmGetAllMessagesContextFunction:t=>{e({llmGetAllMessagesContextFunction:t})},setGetTextContentFunction:t=>{e({getTextContentFunction:t})},setGetJsonContentFunction:t=>{e({getJsonContentFunction:t})},setGetJsonActivityContentFunction:t=>{e({getJsonActivityContentFunction:t})},setGetJsonAssignmentContentFunction:t=>{e({getJsonAssignmentContentFunction:t})},setGetJsonActivitySplitContentFunction:t=>{e({getJsonActivitySplitContentFunction:t})},setGetJsonAssignmentSplitContentFunction:t=>{e({getJsonAssignmentSplitContentFunction:t})},setSidebarActions:t=>{e({sidebarActions:t})},setQuickActions:t=>{e({quickActions:t})},setActivitySettingsCallback:t=>{e({activitySettingsCallback:t})},incSaveCount:()=>e(t=>({saveCount:t.saveCount+1})),incDirtyCount:()=>e(t=>({isDirtyCount:t.isDirtyCount+1}))})));let Y=!1;const Ne=["meta-player-events:1","meta-player-ui:1","mode:1","reload:1","theme:1","workflow:1","trigger-save:1","simple-content(text):1","simple-content(json):1","simple-binary-data(text):1","simple-content-eval(text):1","simple-content-eval(json):1","separate-contents(json):1","separate-dual-contents(json):1","llm:1"],K={"mode:1":{setMode:e=>{a.setState({mode:e})}},"reload:1":{reloaded:e=>{console.log("[React bindings] Reloaded with state:",e),console.error("[React bindings] Not implemented yet")}},"theme:1":{setTheme:e=>{if(e===null){a.setState({theme:null});return}if(e!=="light"&&e!=="dark"){console.warn(`[React bindings] Invalid theme: ${e}. Expected 'light' or 'dark'.`),a.setState({theme:null});return}a.setState({theme:e})}},"workflow:1":{setWorkflow:e=>{a.setState({workflow:e})}},"trigger-save:1":{setCanSave(e){a.setState({canSave:e})}},"simple-content(text):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getTextContentFunction(),loadContent:e=>{a.setState({loadedTextContent:e})}},"simple-content(json):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getJsonContentFunction(),loadContent:e=>{a.setState({loadedJsonContent:e})}},"simple-binary-data(text):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getTextContentFunction(),loadContent:e=>{a.setState({loadedTextContent:e})}},"simple-content-eval(text):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getTextContentFunction(),loadContent:e=>{a.setState({loadedTextContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(text)")}},"simple-content-eval(json):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getJsonContentFunction(),loadContent:e=>{a.setState({loadedJsonContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(json)")}},"simple-content-eval(json):2":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getJsonContentFunction(),loadContent:e=>{a.setState({loadedJsonContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(json)")}},"simple-content-eval(text):2":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>a.getState().getTextContentFunction(),loadContent:e=>{a.setState({loadedTextContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(text)")}},"separate-contents(json):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},loadContent:(e,t)=>{a.setState({loadedJsonActivityContent:e,loadedJsonAssignmentContent:t})},getActivityContent:()=>a.getState().getJsonActivityContentFunction(),getAssignmentContent:()=>a.getState().getJsonAssignmentContentFunction()},"separate-dual-contents(json):1":{contentSaved:()=>{a.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},loadContent:({activityContent:e,assignmentContent:t,activityBinaryData:n,assignmentBinaryData:r})=>{a.setState({loadedJsonActivityContent:e,loadedJsonAssignmentContent:t,loadedJsonActivityBinaryData:n,loadedJsonAssignmentBinaryData:r})},getActivityContentAndData:()=>(console.log("[React bindings] Getting activity content and data"),a.getState().getJsonActivitySplitContentFunction()),getAssignmentContentAndData:()=>(console.log("[React bindings] Getting assignment content and data"),a.getState().getJsonAssignmentSplitContentFunction())},"meta-player-anti-cheat:1":{lock:()=>{},unlock:()=>{}},"meta-player-ui:1":{executeAction(e){if(console.log("[React bindings] Executing action:",e),e.startsWith("qa")){const n=a.getState().quickActions[e];n?n():console.error(`[React bindings] Quick action not found: ${e}`)}else{const n=a.getState().sidebarActions[e];n?n():console.error(`[React bindings] Sidebar action not found: ${e}`)}},executeFileUpload(e,t){if(e.startsWith("qa")){const r=a.getState().quickActions[e];r?r(t):console.error(`[React bindings] Quick action not found: ${e}`)}else{const r=a.getState().sidebarActions[e];r?r(t):console.error(`[React bindings] Sidebar action not found: ${e}`)}},updateSettings(e){const t=a.getState().activitySettingsCallback;t?t(e):console.warn("activitySettingsCallback is not set. Changes:",e)}},"meta-player-events:1":{handleEvent(e){e==="all-loaded"&&a.setState({ready:!0})}},"llm:1":{getFirstMessageContext:e=>{const t=a.getState().llmGetFirstMessageContextFunction;if(!t)throw new Error("LLM first message context function is not set");return t(e)},getAllMessagesContext:e=>{const t=a.getState().llmGetAllMessagesContextFunction;if(!t)throw new Error("LLM all messages context function is not set");return t(e)}}},A=Ve();function qe(e){if(console.log("[React bindings] Contracts to plug:",e),Y){console.warn("[React bindings] Contracts have already been plugged. Skipping.");return}Y=!0;for(const t of e){if(!Ne.includes(t)){console.warn(`[React bindings] Contract ${t} is not implemented in Capytale. Skipping plug.`);continue}if(!(t in K)){console.warn(`[React bindings] Contract handler for ${t} is not defined. Skipping plug.`);continue}const n=K[t];console.log(`[React bindings] Plugging contract ${t}...`),A.plug([t],([])=>(console.log(`[React bindings] Contract ${t} plugged.`),[n]))}A.plugsDone();for(const t of["simple-content(text):1","simple-content(json):1","simple-binary-data(text):1","simple-content-eval(text):1","simple-content-eval(json):1","simple-content-eval(json):2","simple-content-eval(text):2","separate-contents(json):1","separate-dual-contents(json):1"])if(console.log(`[React bindings] Contract ${t} is being subscribed to content changes.`),e.includes(t)){console.log(`[React bindings] Subscribing to content changes for contract ${t}`);const n=t.split(":")[0];A.use([n],([r])=>{a.subscribe(o=>o.isDirtyCount,()=>{r.i?.contentChanged(),console.log(`[React bindings] Content changed for contract ${n}`)})})}}const Be=()=>a(e=>{if(e.mode===null)throw new Error("Mode is not set. Have you used contract 'mode'?");return e.mode}),We=()=>a(e=>{if(e.workflow===null)throw new Error("Workflow is not set. Have you used contract 'workflow'?");return e.workflow}),He=()=>a(e=>{if(e.theme===null)throw new Error("Theme is not set. Have you used contract 'theme'?");return e.theme}),ze=()=>a(e=>e.incSaveCount),Ue=()=>a(e=>e.incDirtyCount),Qe=()=>a(e=>e.loadedTextContent),_e=()=>a(e=>e.loadedJsonContent),Ye=()=>a(e=>e.loadedJsonActivityContent),Ke=()=>a(e=>e.loadedJsonAssignmentContent),Xe=()=>a(e=>e.loadedJsonActivityBinaryData),Ze=()=>a(e=>e.loadedJsonAssignmentBinaryData),et=()=>y.useCallback(()=>a.getState().loadedTextContent,[]),tt=()=>y.useCallback(()=>a.getState().loadedJsonContent,[]),nt=()=>y.useCallback(()=>a.getState().loadedJsonActivityContent,[]),ot=()=>y.useCallback(()=>a.getState().loadedJsonAssignmentContent,[]),rt=()=>y.useCallback(()=>({content:a.getState().loadedJsonActivityContent,binaryData:a.getState().loadedJsonActivityBinaryData}),[]),st=()=>y.useCallback(()=>({content:a.getState().loadedJsonAssignmentContent,binaryData:a.getState().loadedJsonAssignmentBinaryData}),[]),it=e=>{const t=a(n=>n.setGetTextContentFunction);y.useEffect(()=>{t(e)},[e,t])},at=e=>{const t=a(n=>n.setGetJsonContentFunction);y.useEffect(()=>{t(e)},[e,t])},ct=e=>{const t=a(n=>n.setGetJsonActivityContentFunction);y.useEffect(()=>{t(e)},[e,t])},lt=e=>{const t=a(n=>n.setGetJsonAssignmentContentFunction);y.useEffect(()=>{t(e)},[e,t])},ut=e=>{const t=a(n=>n.setGetJsonActivitySplitContentFunction);y.useEffect(()=>{t(e)},[e,t])},dt=e=>{const t=a(n=>n.setGetJsonAssignmentSplitContentFunction);y.useEffect(()=>{t(e)},[e,t])},gt=e=>{const t=a(n=>n.afterSaveCount);y.useEffect(()=>{t>0&&e()},[t])},ft=()=>(e,t)=>{A.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}n.i?.previewTextFile(e,t)})},pt=()=>(e,t)=>{A.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}n.i?.previewImageFile(e,t)})};let G=0,B=0;const mt=(e,t)=>{const n=y.useMemo(e,t),r=a(o=>o.setSidebarActions);y.useEffect(()=>(G++,G>1&&console.error("[React bindings] Capytale iframe React: Multiple sidebar actions registered: ",G),()=>{G--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}B++;const s=n.map((c,g)=>({type:c.type,title:c.title,icon:c.icon,id:`sa-${B}-${g}`,...c.type==="file-upload"?{accept:c.accept}:{}})),f={};n.forEach((c,g)=>{f[`sa-${B}-${g}`]=c.action}),o.i?.setSidebarActionButtons(s),r(f)}),()=>{r({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setSidebarActionButtons([])})}),[n])};let P=0,W=0;const Ct=(e,t)=>{const n=y.useMemo(e,t),r=a(o=>o.setQuickActions);y.useEffect(()=>(P++,P>1&&console.error("[React bindings] Capytale iframe React: Multiple quick actions registered: ",P),()=>{P--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}W++;const s=n.map((c,g)=>({type:c.type,title:c.title,icon:c.icon,id:`qa-${W}-${g}`,...c.type==="file-upload"?{accept:c.accept}:{}})),f={};n.forEach((c,g)=>{f[`qa-${W}-${g}`]=c.action}),o.i?.setQuickActionButtons(s),r(f)}),()=>{r({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setQuickActionButtons([])})}),[n])};let V=0;const le=(e,t,n)=>{const r=y.useMemo(e,n),o=a(s=>s.setActivitySettingsCallback);y.useEffect(()=>(console.log("[React bindings] Mounting useSettings"),V++,V>1&&console.error("[React bindings] Capytale iframe React: Multiple settings registered: ",V),()=>{console.log("[React bindings] Unmounting useSettings"),V--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([s])=>{if(s.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}console.log("[React bindings] Updating settings UI in MetaPlayer",r),s.i?.setSettingsUI(r)}),o(t),()=>{o(null)}),[r])},ue=()=>y.useCallback(t=>A.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return n.i?.showToast(t)}),[]),de=()=>y.useCallback(t=>A.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return n.i?.clearToast(t)}),[]),yt=()=>y.useCallback(()=>A.exec(["meta-player-ui"],([t])=>{if(t.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return t.i?.clearToasts()}),[]),ge=(e,t)=>{const n=ue(),r=de();return y.useEffect(()=>{if(e==null)return;const o=n(e);return()=>{o.then(s=>{s!=null&&r(s)})}},[n,r,...t]),null},vt=()=>y.useCallback(()=>A.exec(["trigger-save"],([t])=>{if(t.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat trigger-save"),new Error("Le MétaPlayer ne supporte pas le contrat trigger-save");return t.i?.triggerSave()}),[]),St=()=>a(e=>e.canSave),wt=(e,t)=>{const n=a(r=>r.setLlmGetFirstMessageContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])},At=(e,t)=>{const n=a(r=>r.setLlmGetAllMessagesContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])};function bt(e){const t={};for(const n of e.fields)t[n.name]=n.defaultValue;return t}function ht(e){return{[e.name]:e.defaultValues}}function Et(e){return{[e.name]:e.defaultValue}}function Rt(e){switch(e.type){case"form":return bt(e);case"checkboxes":case"switches":return ht(e);case"radio":return Et(e);default:return{}}}function Ft(e){const t={};for(const n of e)Object.assign(t,Rt(n));return t}function Jt(e){const n=ce()(r=>({...Ft(e)}));return n.activitySettings=e,n}function kt(e){le(()=>e.activitySettings,t=>{e.setState(t)},[])}function xt({store:e}){return kt(e),null}const Tt=["meta-player-events:1","meta-player-ui:1","mode:1","workflow:1"];function Mt({children:e,contracts:t,loadOnlyWhenReady:n=!0,activitySettingsStore:r}){const o=a(s=>s.ready);return y.useEffect(()=>{const s=[...t];for(const f of Tt)s.includes(f)||s.push(f);qe(s)},[]),n&&!o?M.jsx("div",{className:"capy-loading-container",children:"Chargement en cours..."}):M.jsxs(M.Fragment,{children:[r&&M.jsx(xt,{store:r}),e]})}function Lt({message:e}){return ge(e,[e]),null}exports.Capytale=Mt;exports.TemporaryToast=Lt;exports.createActivitySettingsStore=Jt;exports.useAfterSaveAction=gt;exports.useCanSave=St;exports.useClearToast=de;exports.useClearToasts=yt;exports.useGetLoadedJsonActivityContent=nt;exports.useGetLoadedJsonActivitySplitContent=rt;exports.useGetLoadedJsonAssignmentContent=ot;exports.useGetLoadedJsonAssignmentSplitContent=st;exports.useGetLoadedJsonContent=tt;exports.useGetLoadedTextContent=et;exports.useJsonActivityContentSaveFunction=ct;exports.useJsonActivitySplitContentSaveFunction=ut;exports.useJsonAssignmentContentSaveFunction=lt;exports.useJsonAssignmentSplitContentSaveFunction=dt;exports.useJsonContentSaveFunction=at;exports.useLLMAllMessagesContext=At;exports.useLLMFirstMessageContext=wt;exports.useLoadedJsonActivityBinaryData=Xe;exports.useLoadedJsonActivityContent=Ye;exports.useLoadedJsonAssignmentBinaryData=Ze;exports.useLoadedJsonAssignmentContent=Ke;exports.useLoadedJsonContent=_e;exports.useLoadedTextContent=Qe;exports.useMode=Be;exports.useNotifyIsDirty=Ue;exports.usePreviewImageFile=pt;exports.usePreviewTextFile=ft;exports.useQuickActions=Ct;exports.useRequestSave=ze;exports.useSettings=le;exports.useShowToast=ue;exports.useSidebarActions=mt;exports.useTextContentSaveFunction=it;exports.useTheme=He;exports.useToast=ge;exports.useTriggerSave=vt;exports.useWorkflow=We;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("react/jsx-runtime"),y=require("react");const X=Symbol("Comlink.proxy"),me=Symbol("Comlink.endpoint"),pe=Symbol("Comlink.releaseProxy"),N=Symbol("Comlink.finalizer"),D=Symbol("Comlink.thrown"),Z=e=>typeof e=="object"&&e!==null||typeof e=="function",Ce={canHandle:e=>Z(e)&&e[X],serialize(e){const{port1:t,port2:n}=new MessageChannel;return z(e,t),[n,[n]]},deserialize(e){return e.start(),ne(e)}},ye={canHandle:e=>Z(e)&&D in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},ee=new Map([["proxy",Ce],["throw",ye]]);function ve(e,t){for(const n of e)if(t===n||n==="*"||n instanceof RegExp&&n.test(t))return!0;return!1}function z(e,t=globalThis,n=["*"]){t.addEventListener("message",function r(o){if(!o||!o.data)return;if(!ve(n,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}const{id:s,type:f,path:c}=Object.assign({path:[]},o.data),g=(o.data.argumentList||[]).map(R);let d;try{const u=c.slice(0,-1).reduce((C,S)=>C[S],e),m=c.reduce((C,S)=>C[S],e);switch(f){case"GET":d=m;break;case"SET":u[c.slice(-1)[0]]=R(o.data.value),d=!0;break;case"APPLY":d=m.apply(u,g);break;case"CONSTRUCT":{const C=new m(...g);d=se(C)}break;case"ENDPOINT":{const{port1:C,port2:S}=new MessageChannel;z(e,S),d=he(C,[C])}break;case"RELEASE":d=void 0;break;default:return}}catch(u){d={value:u,[D]:0}}Promise.resolve(d).catch(u=>({value:u,[D]:0})).then(u=>{const[m,C]=$(u);t.postMessage(Object.assign(Object.assign({},m),{id:s}),C),f==="RELEASE"&&(t.removeEventListener("message",r),te(t),N in e&&typeof e[N]=="function"&&e[N]())}).catch(u=>{const[m,C]=$({value:new TypeError("Unserializable return value"),[D]:0});t.postMessage(Object.assign(Object.assign({},m),{id:s}),C)})}),t.start&&t.start()}function Se(e){return e.constructor.name==="MessagePort"}function te(e){Se(e)&&e.close()}function ne(e,t){const n=new Map;return e.addEventListener("message",function(o){const{data:s}=o;if(!s||!s.id)return;const f=n.get(s.id);if(f)try{f(s)}finally{n.delete(s.id)}}),H(e,n,[],t)}function L(e){if(e)throw new Error("Proxy has been released and is not useable")}function oe(e){return x(e,new Map,{type:"RELEASE"}).then(()=>{te(e)})}const I=new WeakMap,j="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(I.get(e)||0)-1;I.set(e,t),t===0&&oe(e)});function Ae(e,t){const n=(I.get(t)||0)+1;I.set(t,n),j&&j.register(e,t,e)}function be(e){j&&j.unregister(e)}function H(e,t,n=[],r=function(){}){let o=!1;const s=new Proxy(r,{get(f,c){if(L(o),c===pe)return()=>{be(s),oe(e),t.clear(),o=!0};if(c==="then"){if(n.length===0)return{then:()=>s};const g=x(e,t,{type:"GET",path:n.map(d=>d.toString())}).then(R);return g.then.bind(g)}return H(e,t,[...n,c])},set(f,c,g){L(o);const[d,u]=$(g);return x(e,t,{type:"SET",path:[...n,c].map(m=>m.toString()),value:d},u).then(R)},apply(f,c,g){L(o);const d=n[n.length-1];if(d===me)return x(e,t,{type:"ENDPOINT"}).then(R);if(d==="bind")return H(e,t,n.slice(0,-1));const[u,m]=U(g);return x(e,t,{type:"APPLY",path:n.map(C=>C.toString()),argumentList:u},m).then(R)},construct(f,c){L(o);const[g,d]=U(c);return x(e,t,{type:"CONSTRUCT",path:n.map(u=>u.toString()),argumentList:g},d).then(R)}});return Ae(s,e),s}function we(e){return Array.prototype.concat.apply([],e)}function U(e){const t=e.map($);return[t.map(n=>n[0]),we(t.map(n=>n[1]))]}const re=new WeakMap;function he(e,t){return re.set(e,t),e}function se(e){return Object.assign(e,{[X]:!0})}function Ee(e,t=globalThis,n="*"){return{postMessage:(r,o)=>e.postMessage(r,n,o),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}}function $(e){for(const[t,n]of ee)if(n.canHandle(e)){const[r,o]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},o]}return[{type:"RAW",value:e},re.get(e)||[]]}function R(e){switch(e.type){case"HANDLER":return ee.get(e.name).deserialize(e.value);case"RAW":return e.value}}function x(e,t,n,r){return new Promise(o=>{const s=Fe();t.set(s,o),e.start&&e.start(),e.postMessage(Object.assign({id:s},n),r)})}function Fe(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function Re(e,t){return e.length===0?t:`[${e}] ${t}`}function Je(e,t){let n=!1,r,o,s;function f(u){return Re(e,u)}let c,g=!1;if(window.parent===window)console.warn(f("Contract link is not supported in standalone mode")),c={ready(){return Promise.resolve()},declare(){return Promise.resolve()},done(){return Promise.resolve()},provide(u,m,C){return Promise.resolve()}};else{const u=Ee(window.parent,void 0,t);z({declare(m){if(r==null)throw new Error(f("No handler for declare"));r(m)},done(){if(o==null)throw new Error(f("No handler for done"));o()},provide(m,C,S){if(s==null)throw new Error(f("No handler for provide"));s(m,C,S)}},u),c=ne(u),g=!0}const d=()=>{if(!n){if(r==null||o==null||s==null)return;n=!0,c.ready()}};return{declare:u=>c.declare(u),done:()=>c.done(),provide:(u,m,C)=>c.provide(u,m,se(C)),get name(){return e},get isReady(){return g},set onDeclare(u){r=u,d()},set onDone(u){o=u,d()},set onProvide(u){s=u,d()}}}function ke(e){return function(t){let n,r=!1,o=!1,s,f,c=!1,g=!1,d,u,m,C;function S(){if(s!=null&&s!==0&&f!=null)return f}function E(a){if(s!=null&&f!=null&&!(a>s))return f}function w(){return m??(g?m=Promise.resolve():m=new Promise((a,l)=>{C=a}))}function J(){return d===void 0&&(d={get name(){return t},get version(){return s},get i(){return S()},v:a=>E(a)}),d}function T(){return u===void 0&&(u={get name(){return t},get version(){return g?s:void 0},get i(){return g?S():void 0},v:a=>g?E(a):void 0,get promise(){return s===0?Promise.reject(e("Remote interface not provided")):w().then(()=>{if(s===0)throw new Error(e("Remote interface not provided"));return J()})}}),u}function F(){C!=null&&(C(),C=void 0)}return{get name(){return t},get localVersion(){if(n!=null)return n},set localVersion(a){if(n!=null&&n!==a)throw new Error(e("A different local version is already set"));n=a},get localVersionSent(){return r},set localVersionSent(a){if(!a&&r)throw new Error(e("Local version already notified"));r=a,a&&n===0&&(o=!0)},get localInterfaceSent(){return o},set localInterfaceSent(a){if(n==null)throw new Error(e("Local version not set"));if(!a&&o)throw new Error(e("Local interface already sent."));o=a},get remoteVersion(){if(s!=null)return s},set remoteVersion(a){if(s!=null&&s!==a)throw new Error(e("A different remote version is already set for "+t+`(${s} -> ${a})`));s=a,a===0&&(c=!0)},get remoteVersionReceived(){return s!=null},setRemoteInterface:a=>{if(s==null)throw new Error(e("Remote version not set"));if(s===0){console.warn(e("Remote version is 0, remote interface is ignored."));return}if(c)throw new Error(e("Interface already provided."));f=a,c=!0},get remoteInterfaceReceived(){return c},depGroup:void 0,get isActivable(){return c&&o},get isActivated(){return g},activate(){if(!g){if(!c)throw new Error(e("Remote interface not provided."));if(!o)throw new Error(e("Local interface not sent"));g=!0,F()}},getRemote:()=>J(),getLazyRemote:()=>T(),get activationPromise(){return w()}}}}function xe(e){return function(t,n,r,o){let s=r,f=!1,c=!1;function g(){return t.every(d=>d.remoteVersionReceived&&d.localVersionSent)&&n.every(d=>d.remoteVersionReceived)}return{get isDeclared(){return c},set isDeclared(d){if(!d&&c)throw new Error(e("Factory already declared"));c=d},get isReady(){return g()},get isDone(){return f},get args(){return t},get deps(){return n},invoke(){if(f)throw new Error(e("Factory already invoked"));if(!g())throw new Error(e("Factory is not ready"));let d;o?d=t.map(C=>C.getRemote()):d=t[0].getRemote();let u;const m=n.length>0?n.map(C=>C.getRemote()):null;try{u=m==null?s(d):s(d,m)}catch(C){throw new Error(e("error in factory:"),{cause:C})}if(o||(u=[u]),u.length!=t.length)throw new Error(e("Invalid factory result"));return f=!0,s=null,u}}}}function Te(e){return function(t,n,r,o){let s=n,f=!1;function c(){return t.every(g=>g.isActivated)}return{get isReady(){return c()},get isDone(){return f},get args(){return t},invoke(){if(f||!c()){const u=new Error(e(f?"callback already invoked":"callback parameters are not ready"));throw o?.[1](u),u}const g=r?t.map(u=>u.getRemote()):t[0].getRemote();let d;try{d=s(g)}catch(u){o==null?console.error(e("error in callback:"),u):o[1](u)}finally{f=!0}o?.[0](d)}}}}function ie(e,t){return e==null||e.length===0?t:`[${e}] ${t}`}function Me(e){function t(a){return ie(e.name,a)}const n=Te(t),r=ke(t),o=xe(t),s={},f=[];let c=[],g;const d=()=>(g==null?g=0:g++,g);function u(a){let l=s[a];return l==null&&(l=r(a),l.localVersion==null&&(w&&(l.localVersion=0),J&&(l.localVersionSent=!0)),l.remoteVersion==null&&T&&(l.remoteVersion=0),s[a]=l),l}function m(a){return a.map(u)}function C(...a){const l=d(),p=Array(l).fill(!1);a.forEach(v=>{v.forEach(A=>{A.depGroup!=null&&(p[A.depGroup]=!0),A.depGroup=l})}),Object.values(s).forEach(v=>{v.depGroup!=null&&v.depGroup!==l&&p[v.depGroup]&&(v.depGroup=l)})}e.onDeclare=a=>{const l=m(a.map(p=>p.name));for(let p=0;p<a.length;p++)a[p].version!=null&&(l[p].remoteVersion=a[p].version);C(l),F()},e.onDone=()=>{T||(T=!0,Object.values(s).forEach(a=>{a.remoteVersion==null&&(a.remoteVersion=0)}),F())},e.onProvide=(a,l,p)=>{let v=s[a];if(v==null)throw new Error(t(`Contract not declared : ${a}`));if(v.remoteVersion!=l)throw new Error(t(`Remote declared version ${v.remoteVersion} of contract "${a}" but provided version ${l}.`));if(v.remoteInterfaceReceived)throw new Error(t(`Remote contract "${a}" is already provided.`));v.setRemoteInterface(p),F()};let S=!1,E=!1,w=!1,J=!1,T=!1;async function F(){if(E=!0,!S){for(S=!0;E;){if(E=!1,e.isReady){const a=f.filter(l=>!l.isDeclared);if(a.length>0)for(const l of a){const p=Array(l.args.length+l.deps.length);l.args.forEach((v,A)=>p[A]=v),l.deps.forEach((v,A)=>p[A+l.args.length]=v),await e.declare(p.map(v=>({name:v.name,version:v.localVersion}))),p.forEach(v=>{v.localVersion!=null&&(v.localVersionSent=!0)}),l.isDeclared=!0}}if(e.isReady&&w&&f.every(a=>a.isDeclared)){const a=Object.values(s).filter(l=>!l.localVersionSent&&l.localVersion!=null);if(a.length>0)for(const l of a)await e.declare([{name:l.name,version:l.localVersion}]),l.localVersionSent=!0;J||(J=!0,await e.done())}if(e.isReady){const a=f.filter(l=>!l.isDone&&l.isReady);if(a.length>0)for(const l of a){const p=l.invoke();for(let v=0;v<l.args.length;v++){const A=l.args[v];await e.provide(A.name,A.localVersion,p[v]),A.localInterfaceSent=!0}}}if(g!=null){const a=Array(g+1).fill(null);for(const l in s){const p=s[l];p.depGroup!=null&&(p.isActivable?a[p.depGroup]==null&&!p.isActivated&&(a[p.depGroup]=!0):a[p.depGroup]=!1)}if(a.some(l=>l===!0))for(const l in s){const p=s[l];p.depGroup!=null&&a[p.depGroup]&&p.activate()}}if(e.isReady){const a=c;c=[];const l=[];for(const p of a)!p.isDone&&p.isReady?p.invoke():l.push(p);l.push(...c),c=l}}S=!1}}return{get(a){return u(a)},declareFactory:(a,l,p,v)=>{if(w)throw new Error(t("Cannot declare a factory after done has been set to true."));const A=m(a.map(h=>h.name));{const h=A.filter(O=>O.localVersion!=null);if(h.length>0)throw new Error(t("Cannot declare a factory for already implemented contracts : "+h.map(O=>O.name).join(", ")))}for(let h=0;h<a.length;h++)A[h].localVersion=a[h].version;const k=m(l);C(A,k);const fe=o(A,k,p,v);f.push(fe),F()},declareCallback(a,l,p,v){const A=m(a),k=n(A,l,p,v);!S&&c.length===0&&k.isReady?k.invoke():(c.push(k),F())},get done(){return w},set done(a){if(w){if(!a)throw new Error(t("Cannot set done to false after it has been set to true."))}else a&&(w=!0,Object.values(s).forEach(l=>{l.localVersion==null&&(l.localVersion=0)}),F())}}}const Le=/^\d+$/;function Ge(e){const[t,n,r]=e.split(":",3);if(n==null||r!=null||!Le.test(n))return null;const o=parseInt(n);return isNaN(o)||o===0?null:{name:t,version:o}}function Pe(e){const t=Me(e);function n(r){return ie(e.name,r)}return{plug(r,o,s=void 0){if(t.done)throw new Error(n("Cannot plug after plugsDone."));s==null&&(s=o,o=[]);let f=!0;Array.isArray(r)||(r=[r],f=!1);const c=r.map(g=>{const d=Ge(g);if(d==null)throw new Error(n("Invalid contract id : "+g));return d});t.declareFactory(c,o,s,f)},plugsDone(){t.done=!0},use(r,o){let s=!0;Array.isArray(r)||(r=[r],s=!1),t.declareCallback(r,o,s)},exec(r,o){let s=!0;return Array.isArray(r)||(r=[r],s=!1),new Promise((...f)=>{t.declareCallback(r,o,s,f)})},get(r){return r.map(o=>t.get(o).getLazyRemote())}}}const ae="app-agent";let q;function Ve(e){return q!=null||(q=Pe(Je(ae,e))),q}console.log(`[${ae}@1.0.12] loaded`);const Q=e=>{let t;const n=new Set,r=(d,u)=>{const m=typeof d=="function"?d(t):d;if(!Object.is(m,t)){const C=t;t=u??(typeof m!="object"||m===null)?m:Object.assign({},t,m),n.forEach(S=>S(t,C))}},o=()=>t,c={setState:r,getState:o,getInitialState:()=>g,subscribe:d=>(n.add(d),()=>n.delete(d))},g=t=e(r,o,c);return c},De=e=>e?Q(e):Q,Ie=e=>e;function je(e,t=Ie){const n=y.useSyncExternalStore(e.subscribe,y.useCallback(()=>t(e.getState()),[e,t]),y.useCallback(()=>t(e.getInitialState()),[e,t]));return y.useDebugValue(n),n}const _=e=>{const t=De(e),n=r=>je(t,r);return Object.assign(n,t),n},ce=e=>e?_(e):_,$e=e=>(t,n,r)=>{const o=r.subscribe;return r.subscribe=(f,c,g)=>{let d=f;if(c){const u=g?.equalityFn||Object.is;let m=f(r.getState());d=C=>{const S=f(C);if(!u(m,S)){const E=m;c(m=S,E)}},g?.fireImmediately&&c(m,m)}return o(d)},e(t,n,r)},Oe=$e,i=ce()(Oe(e=>({ready:!1,workflow:"current",mode:"assignment",theme:"light",saveCount:0,canSave:!1,afterSaveCount:0,isDirtyCount:0,loadedTextContent:null,loadedJsonContent:null,loadedJsonActivityContent:null,loadedJsonAssignmentContent:null,loadedJsonActivityBinaryData:null,loadedJsonAssignmentBinaryData:null,getTextContentFunction:()=>{throw console.error("[React bindings] getTextContentFunction is not set"),new Error("[React bindings] getTextContentFunction is not set")},getJsonContentFunction:()=>{throw console.error("[React bindings] getJsonContentFunction is not set"),new Error("[React bindings] getJsonContentFunction is not set")},getJsonActivityContentFunction:()=>{throw console.error("[React bindings] getJsonActivityContentFunction is not set"),new Error("[React bindings] getJsonActivityContentFunction is not set")},getJsonAssignmentContentFunction:()=>{throw console.error("[React bindings] getJsonAssignmentContentFunction is not set"),new Error("[React bindings] getJsonAssignmentContentFunction is not set")},getJsonActivitySplitContentFunction:()=>{throw console.error("[React bindings] getJsonActivitySplitContentFunction is not set"),new Error("[React bindings] getJsonActivitySplitContentFunction is not set")},getJsonAssignmentSplitContentFunction:()=>{throw console.error("[React bindings] getJsonAssignmentSplitContentFunction is not set"),new Error("[React bindings] getJsonAssignmentSplitContentFunction is not set")},sidebarActions:{},quickActions:{},activitySettingsCallback:null,llmGetFirstMessageContextFunction:null,setLlmGetFirstMessageContextFunction:t=>{e({llmGetFirstMessageContextFunction:t})},llmGetAllMessagesContextFunction:null,setLlmGetAllMessagesContextFunction:t=>{e({llmGetAllMessagesContextFunction:t})},llmGetAvailableToolsFunction:null,setLlmGetAvailableToolsFunction:t=>{e({llmGetAvailableToolsFunction:t})},llmCallToolFunction:null,setLlmCallToolFunction:t=>{e({llmCallToolFunction:t})},setGetTextContentFunction:t=>{e({getTextContentFunction:t})},setGetJsonContentFunction:t=>{e({getJsonContentFunction:t})},setGetJsonActivityContentFunction:t=>{e({getJsonActivityContentFunction:t})},setGetJsonAssignmentContentFunction:t=>{e({getJsonAssignmentContentFunction:t})},setGetJsonActivitySplitContentFunction:t=>{e({getJsonActivitySplitContentFunction:t})},setGetJsonAssignmentSplitContentFunction:t=>{e({getJsonAssignmentSplitContentFunction:t})},setSidebarActions:t=>{e({sidebarActions:t})},setQuickActions:t=>{e({quickActions:t})},setActivitySettingsCallback:t=>{e({activitySettingsCallback:t})},incSaveCount:()=>e(t=>({saveCount:t.saveCount+1})),incDirtyCount:()=>e(t=>({isDirtyCount:t.isDirtyCount+1}))})));let Y=!1;const Ne=["meta-player-events:1","meta-player-ui:1","mode:1","reload:1","theme:1","workflow:1","trigger-save:1","simple-content(text):1","simple-content(json):1","simple-binary-data(text):1","simple-content-eval(text):1","simple-content-eval(json):1","separate-contents(json):1","separate-dual-contents(json):1","llm:1"],K={"mode:1":{setMode:e=>{i.setState({mode:e})}},"reload:1":{reloaded:e=>{console.log("[React bindings] Reloaded with state:",e),console.error("[React bindings] Not implemented yet")}},"theme:1":{setTheme:e=>{if(e===null){i.setState({theme:null});return}if(e!=="light"&&e!=="dark"){console.warn(`[React bindings] Invalid theme: ${e}. Expected 'light' or 'dark'.`),i.setState({theme:null});return}i.setState({theme:e})}},"workflow:1":{setWorkflow:e=>{i.setState({workflow:e})}},"trigger-save:1":{setCanSave(e){i.setState({canSave:e})}},"simple-content(text):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getTextContentFunction(),loadContent:e=>{i.setState({loadedTextContent:e})}},"simple-content(json):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getJsonContentFunction(),loadContent:e=>{i.setState({loadedJsonContent:e})}},"simple-binary-data(text):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getTextContentFunction(),loadContent:e=>{i.setState({loadedTextContent:e})}},"simple-content-eval(text):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getTextContentFunction(),loadContent:e=>{i.setState({loadedTextContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(text)")}},"simple-content-eval(json):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getJsonContentFunction(),loadContent:e=>{i.setState({loadedJsonContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(json)")}},"simple-content-eval(json):2":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getJsonContentFunction(),loadContent:e=>{i.setState({loadedJsonContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(json)")}},"simple-content-eval(text):2":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},getContent:()=>i.getState().getTextContentFunction(),loadContent:e=>{i.setState({loadedTextContent:e})},getAssignmentContent:()=>{throw new Error("getAssignmentContent is not implemented for simple-content-eval(text)")}},"separate-contents(json):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},loadContent:(e,t)=>{i.setState({loadedJsonActivityContent:e,loadedJsonAssignmentContent:t})},getActivityContent:()=>i.getState().getJsonActivityContentFunction(),getAssignmentContent:()=>i.getState().getJsonAssignmentContentFunction()},"separate-dual-contents(json):1":{contentSaved:()=>{i.setState(e=>({afterSaveCount:e.afterSaveCount+1}))},loadContent:({activityContent:e,assignmentContent:t,activityBinaryData:n,assignmentBinaryData:r})=>{i.setState({loadedJsonActivityContent:e,loadedJsonAssignmentContent:t,loadedJsonActivityBinaryData:n,loadedJsonAssignmentBinaryData:r})},getActivityContentAndData:()=>(console.log("[React bindings] Getting activity content and data"),i.getState().getJsonActivitySplitContentFunction()),getAssignmentContentAndData:()=>(console.log("[React bindings] Getting assignment content and data"),i.getState().getJsonAssignmentSplitContentFunction())},"meta-player-anti-cheat:1":{lock:()=>{},unlock:()=>{}},"meta-player-ui:1":{executeAction(e){if(console.log("[React bindings] Executing action:",e),e.startsWith("qa")){const n=i.getState().quickActions[e];n?n():console.error(`[React bindings] Quick action not found: ${e}`)}else{const n=i.getState().sidebarActions[e];n?n():console.error(`[React bindings] Sidebar action not found: ${e}`)}},executeFileUpload(e,t){if(e.startsWith("qa")){const r=i.getState().quickActions[e];r?r(t):console.error(`[React bindings] Quick action not found: ${e}`)}else{const r=i.getState().sidebarActions[e];r?r(t):console.error(`[React bindings] Sidebar action not found: ${e}`)}},updateSettings(e){const t=i.getState().activitySettingsCallback;t?t(e):console.warn("activitySettingsCallback is not set. Changes:",e)}},"meta-player-events:1":{handleEvent(e){e==="all-loaded"&&i.setState({ready:!0})}},"llm:1":{getFirstMessageContext:e=>{const t=i.getState().llmGetFirstMessageContextFunction;return t?t(e):""},getAllMessagesContext:e=>{const t=i.getState().llmGetAllMessagesContextFunction;return t?t(e):""},getAvailableTools:e=>{const t=i.getState().llmGetAvailableToolsFunction;return t?t(e):[]},callTool:(e,t)=>{const n=i.getState().llmCallToolFunction;if(!n)throw new Error("LLM call tool function is not set");return n(e,t)}}},b=Ve();function qe(e){if(console.log("[React bindings] Contracts to plug:",e),Y){console.warn("[React bindings] Contracts have already been plugged. Skipping.");return}Y=!0;for(const t of e){if(!Ne.includes(t)){console.warn(`[React bindings] Contract ${t} is not implemented in Capytale. Skipping plug.`);continue}if(!(t in K)){console.warn(`[React bindings] Contract handler for ${t} is not defined. Skipping plug.`);continue}const n=K[t];console.log(`[React bindings] Plugging contract ${t}...`),b.plug([t],([])=>(console.log(`[React bindings] Contract ${t} plugged.`),[n]))}b.plugsDone();for(const t of["simple-content(text):1","simple-content(json):1","simple-binary-data(text):1","simple-content-eval(text):1","simple-content-eval(json):1","simple-content-eval(json):2","simple-content-eval(text):2","separate-contents(json):1","separate-dual-contents(json):1"])if(console.log(`[React bindings] Contract ${t} is being subscribed to content changes.`),e.includes(t)){console.log(`[React bindings] Subscribing to content changes for contract ${t}`);const n=t.split(":")[0];b.use([n],([r])=>{i.subscribe(o=>o.isDirtyCount,()=>{r.i?.contentChanged(),console.log(`[React bindings] Content changed for contract ${n}`)})})}}const Be=()=>i(e=>{if(e.mode===null)throw new Error("Mode is not set. Have you used contract 'mode'?");return e.mode}),We=()=>i(e=>{if(e.workflow===null)throw new Error("Workflow is not set. Have you used contract 'workflow'?");return e.workflow}),He=()=>i(e=>{if(e.theme===null)throw new Error("Theme is not set. Have you used contract 'theme'?");return e.theme}),ze=()=>i(e=>e.incSaveCount),Ue=()=>i(e=>e.incDirtyCount),Qe=()=>i(e=>e.loadedTextContent),_e=()=>i(e=>e.loadedJsonContent),Ye=()=>i(e=>e.loadedJsonActivityContent),Ke=()=>i(e=>e.loadedJsonAssignmentContent),Xe=()=>i(e=>e.loadedJsonActivityBinaryData),Ze=()=>i(e=>e.loadedJsonAssignmentBinaryData),et=()=>y.useCallback(()=>i.getState().loadedTextContent,[]),tt=()=>y.useCallback(()=>i.getState().loadedJsonContent,[]),nt=()=>y.useCallback(()=>i.getState().loadedJsonActivityContent,[]),ot=()=>y.useCallback(()=>i.getState().loadedJsonAssignmentContent,[]),rt=()=>y.useCallback(()=>({content:i.getState().loadedJsonActivityContent,binaryData:i.getState().loadedJsonActivityBinaryData}),[]),st=()=>y.useCallback(()=>({content:i.getState().loadedJsonAssignmentContent,binaryData:i.getState().loadedJsonAssignmentBinaryData}),[]),it=e=>{const t=i(n=>n.setGetTextContentFunction);y.useEffect(()=>{t(e)},[e,t])},at=e=>{const t=i(n=>n.setGetJsonContentFunction);y.useEffect(()=>{t(e)},[e,t])},ct=e=>{const t=i(n=>n.setGetJsonActivityContentFunction);y.useEffect(()=>{t(e)},[e,t])},lt=e=>{const t=i(n=>n.setGetJsonAssignmentContentFunction);y.useEffect(()=>{t(e)},[e,t])},ut=e=>{const t=i(n=>n.setGetJsonActivitySplitContentFunction);y.useEffect(()=>{t(e)},[e,t])},dt=e=>{const t=i(n=>n.setGetJsonAssignmentSplitContentFunction);y.useEffect(()=>{t(e)},[e,t])},gt=e=>{const t=i(n=>n.afterSaveCount);y.useEffect(()=>{t>0&&e()},[t])},ft=()=>(e,t)=>{b.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}n.i?.previewTextFile(e,t)})},mt=()=>(e,t)=>{b.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}n.i?.previewImageFile(e,t)})};let G=0,B=0;const pt=(e,t)=>{const n=y.useMemo(e,t),r=i(o=>o.setSidebarActions);y.useEffect(()=>(G++,G>1&&console.error("[React bindings] Capytale iframe React: Multiple sidebar actions registered: ",G),()=>{G--}),[]),y.useEffect(()=>(b.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}B++;const s=n.map((c,g)=>({type:c.type,title:c.title,icon:c.icon,id:`sa-${B}-${g}`,...c.type==="file-upload"?{accept:c.accept}:{}})),f={};n.forEach((c,g)=>{f[`sa-${B}-${g}`]=c.action}),o.i?.setSidebarActionButtons(s),r(f)}),()=>{r({}),b.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setSidebarActionButtons([])})}),[n])};let P=0,W=0;const Ct=(e,t)=>{const n=y.useMemo(e,t),r=i(o=>o.setQuickActions);y.useEffect(()=>(P++,P>1&&console.error("[React bindings] Capytale iframe React: Multiple quick actions registered: ",P),()=>{P--}),[]),y.useEffect(()=>(b.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}W++;const s=n.map((c,g)=>({type:c.type,title:c.title,icon:c.icon,id:`qa-${W}-${g}`,...c.type==="file-upload"?{accept:c.accept}:{}})),f={};n.forEach((c,g)=>{f[`qa-${W}-${g}`]=c.action}),o.i?.setQuickActionButtons(s),r(f)}),()=>{r({}),b.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setQuickActionButtons([])})}),[n])};let V=0;const le=(e,t,n)=>{const r=y.useMemo(e,n),o=i(s=>s.setActivitySettingsCallback);y.useEffect(()=>(console.log("[React bindings] Mounting useSettings"),V++,V>1&&console.error("[React bindings] Capytale iframe React: Multiple settings registered: ",V),()=>{console.log("[React bindings] Unmounting useSettings"),V--}),[]),y.useEffect(()=>(b.use(["meta-player-ui"],([s])=>{if(s.version===0){console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}console.log("[React bindings] Updating settings UI in MetaPlayer",r),s.i?.setSettingsUI(r)}),o(t),()=>{o(null)}),[r])},ue=()=>y.useCallback(t=>b.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return n.i?.showToast(t)}),[]),de=()=>y.useCallback(t=>b.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return n.i?.clearToast(t)}),[]),yt=()=>y.useCallback(()=>b.exec(["meta-player-ui"],([t])=>{if(t.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat meta-player-ui"),new Error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return t.i?.clearToasts()}),[]),ge=(e,t)=>{const n=ue(),r=de();return y.useEffect(()=>{if(e==null)return;const o=n(e);return()=>{o.then(s=>{s!=null&&r(s)})}},[n,r,...t]),null},vt=()=>y.useCallback(()=>b.exec(["trigger-save"],([t])=>{if(t.version===0)throw console.error("[React bindings] Le MétaPlayer ne supporte pas le contrat trigger-save"),new Error("Le MétaPlayer ne supporte pas le contrat trigger-save");return t.i?.triggerSave()}),[]),St=()=>i(e=>e.canSave),At=(e,t)=>{const n=i(r=>r.setLlmGetFirstMessageContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])},bt=(e,t)=>{const n=i(r=>r.setLlmGetAllMessagesContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])};function wt(e){const t={};for(const n of e.fields)t[n.name]=n.defaultValue;return t}function ht(e){return{[e.name]:e.defaultValues}}function Et(e){return{[e.name]:e.defaultValue}}function Ft(e){switch(e.type){case"form":return wt(e);case"checkboxes":case"switches":return ht(e);case"radio":return Et(e);default:return{}}}function Rt(e){const t={};for(const n of e)Object.assign(t,Ft(n));return t}function Jt(e){const n=ce()(r=>({...Rt(e)}));return n.activitySettings=e,n}function kt(e){le(()=>e.activitySettings,t=>{e.setState(t)},[])}function xt({store:e}){return kt(e),null}const Tt=["meta-player-events:1","meta-player-ui:1","mode:1","workflow:1"];function Mt({children:e,contracts:t,loadOnlyWhenReady:n=!0,activitySettingsStore:r}){const o=i(s=>s.ready);return y.useEffect(()=>{const s=[...t];for(const f of Tt)s.includes(f)||s.push(f);qe(s)},[]),n&&!o?M.jsx("div",{className:"capy-loading-container",children:"Chargement en cours..."}):M.jsxs(M.Fragment,{children:[r&&M.jsx(xt,{store:r}),e]})}function Lt({message:e}){return ge(e,[e]),null}exports.Capytale=Mt;exports.TemporaryToast=Lt;exports.createActivitySettingsStore=Jt;exports.useAfterSaveAction=gt;exports.useCanSave=St;exports.useClearToast=de;exports.useClearToasts=yt;exports.useGetLoadedJsonActivityContent=nt;exports.useGetLoadedJsonActivitySplitContent=rt;exports.useGetLoadedJsonAssignmentContent=ot;exports.useGetLoadedJsonAssignmentSplitContent=st;exports.useGetLoadedJsonContent=tt;exports.useGetLoadedTextContent=et;exports.useJsonActivityContentSaveFunction=ct;exports.useJsonActivitySplitContentSaveFunction=ut;exports.useJsonAssignmentContentSaveFunction=lt;exports.useJsonAssignmentSplitContentSaveFunction=dt;exports.useJsonContentSaveFunction=at;exports.useLLMAllMessagesContext=bt;exports.useLLMFirstMessageContext=At;exports.useLoadedJsonActivityBinaryData=Xe;exports.useLoadedJsonActivityContent=Ye;exports.useLoadedJsonAssignmentBinaryData=Ze;exports.useLoadedJsonAssignmentContent=Ke;exports.useLoadedJsonContent=_e;exports.useLoadedTextContent=Qe;exports.useMode=Be;exports.useNotifyIsDirty=Ue;exports.usePreviewImageFile=mt;exports.usePreviewTextFile=ft;exports.useQuickActions=Ct;exports.useRequestSave=ze;exports.useSettings=le;exports.useShowToast=ue;exports.useSidebarActions=pt;exports.useTextContentSaveFunction=it;exports.useTheme=He;exports.useToast=ge;exports.useTriggerSave=vt;exports.useWorkflow=We;
package/dist/index.d.ts CHANGED
@@ -124,6 +124,49 @@ declare type CapytaleProps<T extends ActivitySettings> = {
124
124
  activitySettingsStore?: ReturnType<typeof createActivitySettingsStore<T>>;
125
125
  };
126
126
 
127
+ declare type ChatCompletionCustomTool = never;
128
+
129
+ declare type ChatCompletionFunctionTool = {
130
+ function: {
131
+ /**
132
+ * The name of the function to be called. Must be a-z, A-Z, 0-9, or contain
133
+ * underscores and dashes, with a maximum length of 64.
134
+ */
135
+ name: string;
136
+ /**
137
+ * A description of what the function does, used by the model to choose when and
138
+ * how to call the function.
139
+ */
140
+ description?: string;
141
+ /**
142
+ * The parameters the functions accepts, described as a JSON Schema object. See the
143
+ * [guide](https://platform.openai.com/docs/guides/function-calling) for examples,
144
+ * and the
145
+ * [JSON Schema reference](https://json-schema.org/understanding-json-schema/) for
146
+ * documentation about the format.
147
+ *
148
+ * Omitting `parameters` defines a function with an empty parameter list.
149
+ */
150
+ parameters?: {
151
+ [key: string]: unknown;
152
+ };
153
+ /**
154
+ * Whether to enable strict schema adherence when generating the function call. If
155
+ * set to true, the model will follow the exact schema defined in the `parameters`
156
+ * field. Only a subset of JSON Schema is supported when `strict` is `true`. Learn
157
+ * more about Structured Outputs in the
158
+ * [function calling guide](https://platform.openai.com/docs/guides/function-calling).
159
+ */
160
+ strict?: boolean | null;
161
+ };
162
+ /**
163
+ * The type of the tool. Currently, only `function` is supported.
164
+ */
165
+ type: "function";
166
+ };
167
+
168
+ declare type ChatCompletionTool = ChatCompletionFunctionTool | ChatCompletionCustomTool;
169
+
127
170
  /**
128
171
  * Un type utilitaire pour indexer un ensemble de contrats par leur identifiant complet.
129
172
  *
@@ -226,6 +269,10 @@ export declare type InferValue<T> = T extends readonly (infer Section)[] ? Union
226
269
 
227
270
  declare type LLMFunction = ((mode: "create" | "assignment" | "review" | "view") => string) | ((mode: "create" | "assignment" | "review" | "view") => Promise<string>);
228
271
 
272
+ declare type LLMToolExecuteFunction = (toolName: string, toolArguments: any) => any;
273
+
274
+ declare type LLMToolFunction = ((mode: "create" | "assignment" | "review" | "view") => ChatCompletionTool[]) | ((mode: "create" | "assignment" | "review" | "view") => Promise<ChatCompletionTool[]>);
275
+
229
276
  declare type LLMV1 = {
230
277
  version: 1;
231
278
  /**
@@ -248,6 +295,16 @@ declare type LLMV1 = {
248
295
  * d'une conversation avec le LLM (y-compris le premier message).
249
296
  */
250
297
  getAllMessagesContext(mode: "create" | "assignment" | "review" | "view"): string;
298
+ /**
299
+ * Le *MetaPlayer* appelle cette méthode pour demander à l'*Application* quels outils
300
+ * sont disponibles pour le LLM.
301
+ */
302
+ getAvailableTools(mode: "create" | "assignment" | "review" | "view"): ChatCompletionTool[];
303
+ /**
304
+ * Le *MetaPlayer* appelle cette méthode pour demander à l'*Application* d'exécuter un outil. La réponse doit être
305
+ * sérializable en JSON.
306
+ */
307
+ callTool(toolName: string, toolArguments: any): any;
251
308
  };
252
309
  };
253
310
 
@@ -342,6 +399,8 @@ export declare const useLLMAllMessagesContext: (fn: LLMFunction, deps: readonly
342
399
 
343
400
  export declare const useLLMFirstMessageContext: (fn: LLMFunction, deps: readonly unknown[]) => void;
344
401
 
402
+ export declare const useLLMTools: (available: LLMToolFunction, execute: LLMToolExecuteFunction, deps: readonly unknown[]) => void;
403
+
345
404
  export declare const useLoadedJsonActivityBinaryData: () => any;
346
405
 
347
406
  export declare const useLoadedJsonActivityContent: () => any;