@capytale/iframe-react 1.1.14 → 1.1.15

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 L=require("react/jsx-runtime"),v=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",ye={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)}},ve={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",ye],["throw",ve]]);function Ce(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 s(o){if(!o||!o.data)return;if(!Ce(n,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}const{id:r,type:g,path:c}=Object.assign({path:[]},o.data),f=(o.data.argumentList||[]).map(k);let d;try{const u=c.slice(0,-1).reduce((y,S)=>y[S],e),p=c.reduce((y,S)=>y[S],e);switch(g){case"GET":d=p;break;case"SET":u[c.slice(-1)[0]]=k(o.data.value),d=!0;break;case"APPLY":d=p.apply(u,f);break;case"CONSTRUCT":{const y=new p(...f);d=se(y)}break;case"ENDPOINT":{const{port1:y,port2:S}=new MessageChannel;z(e,S),d=be(y,[y])}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,y]=$(u);t.postMessage(Object.assign(Object.assign({},p),{id:r}),y),g==="RELEASE"&&(t.removeEventListener("message",s),te(t),N in e&&typeof e[N]=="function"&&e[N]())}).catch(u=>{const[p,y]=$({value:new TypeError("Unserializable return value"),[D]:0});t.postMessage(Object.assign(Object.assign({},p),{id:r}),y)})}),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:r}=o;if(!r||!r.id)return;const g=n.get(r.id);if(g)try{g(r)}finally{n.delete(r.id)}}),H(e,n,[],t)}function P(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=[],s=function(){}){let o=!1;const r=new Proxy(s,{get(g,c){if(P(o),c===me)return()=>{Ae(r),oe(e),t.clear(),o=!0};if(c==="then"){if(n.length===0)return{then:()=>r};const f=x(e,t,{type:"GET",path:n.map(d=>d.toString())}).then(k);return f.then.bind(f)}return H(e,t,[...n,c])},set(g,c,f){P(o);const[d,u]=$(f);return x(e,t,{type:"SET",path:[...n,c].map(p=>p.toString()),value:d},u).then(k)},apply(g,c,f){P(o);const d=n[n.length-1];if(d===pe)return x(e,t,{type:"ENDPOINT"}).then(k);if(d==="bind")return H(e,t,n.slice(0,-1));const[u,p]=U(f);return x(e,t,{type:"APPLY",path:n.map(y=>y.toString()),argumentList:u},p).then(k)},construct(g,c){P(o);const[f,d]=U(c);return x(e,t,{type:"CONSTRUCT",path:n.map(u=>u.toString()),argumentList:f},d).then(k)}});return we(r,e),r}function he(e){return Array.prototype.concat.apply([],e)}function U(e){const t=e.map($);return[t.map(n=>n[0]),he(t.map(n=>n[1]))]}const re=new WeakMap;function be(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:(s,o)=>e.postMessage(s,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[s,o]=n.serialize(e);return[{type:"HANDLER",name:t,value:s},o]}return[{type:"RAW",value:e},re.get(e)||[]]}function k(e){switch(e.type){case"HANDLER":return ee.get(e.name).deserialize(e.value);case"RAW":return e.value}}function x(e,t,n,s){return new Promise(o=>{const r=Je();t.set(r,o),e.start&&e.start(),e.postMessage(Object.assign({id:r},n),s)})}function Je(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function ke(e,t){return e.length===0?t:`[${e}] ${t}`}function Fe(e,t){let n=!1,s,o,r;function g(u){return ke(e,u)}let c,f=!1;if(window.parent===window)console.warn(g("Contract link is not supported in standalone mode")),c={ready(){return Promise.resolve()},declare(){return Promise.resolve()},done(){return Promise.resolve()},provide(u,p,y){return Promise.resolve()}};else{const u=Ee(window.parent,void 0,t);z({declare(p){if(s==null)throw new Error(g("No handler for declare"));s(p)},done(){if(o==null)throw new Error(g("No handler for done"));o()},provide(p,y,S){if(r==null)throw new Error(g("No handler for provide"));r(p,y,S)}},u),c=ne(u),f=!0}const d=()=>{if(!n){if(s==null||o==null||r==null)return;n=!0,c.ready()}};return{declare:u=>c.declare(u),done:()=>c.done(),provide:(u,p,y)=>c.provide(u,p,se(y)),get name(){return e},get isReady(){return f},set onDeclare(u){s=u,d()},set onDone(u){o=u,d()},set onProvide(u){r=u,d()}}}function Te(e){return function(t){let n,s=!1,o=!1,r,g,c=!1,f=!1,d,u,p,y;function S(){if(r!=null&&r!==0&&g!=null)return g}function E(a){if(r!=null&&g!=null&&!(a>r))return g}function h(){return p??(f?p=Promise.resolve():p=new Promise((a,l)=>{y=a}))}function F(){return d===void 0&&(d={get name(){return t},get version(){return r},get i(){return S()},v:a=>E(a)}),d}function R(){return u===void 0&&(u={get name(){return t},get version(){return f?r:void 0},get i(){return f?S():void 0},v:a=>f?E(a):void 0,get promise(){return r===0?Promise.reject(e("Remote interface not provided")):h().then(()=>{if(r===0)throw new Error(e("Remote interface not provided"));return F()})}}),u}function J(){y!=null&&(y(),y=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 s},set localVersionSent(a){if(!a&&s)throw new Error(e("Local version already notified"));s=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(r!=null)return r},set remoteVersion(a){if(r!=null&&r!==a)throw new Error(e("A different remote version is already set for "+t+`(${r} -> ${a})`));r=a,a===0&&(c=!0)},get remoteVersionReceived(){return r!=null},setRemoteInterface:a=>{if(r==null)throw new Error(e("Remote version not set"));if(r===0){console.warn(e("Remote version is 0, remote interface is ignored."));return}if(c)throw new Error(e("Interface already provided."));g=a,c=!0},get remoteInterfaceReceived(){return c},depGroup:void 0,get isActivable(){return c&&o},get isActivated(){return f},activate(){if(!f){if(!c)throw new Error(e("Remote interface not provided."));if(!o)throw new Error(e("Local interface not sent"));f=!0,J()}},getRemote:()=>F(),getLazyRemote:()=>R(),get activationPromise(){return h()}}}}function xe(e){return function(t,n,s,o){let r=s,g=!1,c=!1;function f(){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 f()},get isDone(){return g},get args(){return t},get deps(){return n},invoke(){if(g)throw new Error(e("Factory already invoked"));if(!f())throw new Error(e("Factory is not ready"));let d;o?d=t.map(y=>y.getRemote()):d=t[0].getRemote();let u;const p=n.length>0?n.map(y=>y.getRemote()):null;try{u=p==null?r(d):r(d,p)}catch(y){throw new Error(e("error in factory:"),{cause:y})}if(o||(u=[u]),u.length!=t.length)throw new Error(e("Invalid factory result"));return g=!0,r=null,u}}}}function Re(e){return function(t,n,s,o){let r=n,g=!1;function c(){return t.every(f=>f.isActivated)}return{get isReady(){return c()},get isDone(){return g},get args(){return t},invoke(){if(g||!c()){const u=new Error(e(g?"callback already invoked":"callback parameters are not ready"));throw o?.[1](u),u}const f=s?t.map(u=>u.getRemote()):t[0].getRemote();let d;try{d=r(f)}catch(u){o==null?console.error(e("error in callback:"),u):o[1](u)}finally{g=!0}o?.[0](d)}}}}function ae(e,t){return e==null||e.length===0?t:`[${e}] ${t}`}function Le(e){function t(a){return ae(e.name,a)}const n=Re(t),s=Te(t),o=xe(t),r={},g=[];let c=[],f;const d=()=>(f==null?f=0:f++,f);function u(a){let l=r[a];return l==null&&(l=s(a),l.localVersion==null&&(h&&(l.localVersion=0),F&&(l.localVersionSent=!0)),l.remoteVersion==null&&R&&(l.remoteVersion=0),r[a]=l),l}function p(a){return a.map(u)}function y(...a){const l=d(),m=Array(l).fill(!1);a.forEach(C=>{C.forEach(w=>{w.depGroup!=null&&(m[w.depGroup]=!0),w.depGroup=l})}),Object.values(r).forEach(C=>{C.depGroup!=null&&C.depGroup!==l&&m[C.depGroup]&&(C.depGroup=l)})}e.onDeclare=a=>{const l=p(a.map(m=>m.name));for(let m=0;m<a.length;m++)a[m].version!=null&&(l[m].remoteVersion=a[m].version);y(l),J()},e.onDone=()=>{R||(R=!0,Object.values(r).forEach(a=>{a.remoteVersion==null&&(a.remoteVersion=0)}),J())},e.onProvide=(a,l,m)=>{let C=r[a];if(C==null)throw new Error(t(`Contract not declared : ${a}`));if(C.remoteVersion!=l)throw new Error(t(`Remote declared version ${C.remoteVersion} of contract "${a}" but provided version ${l}.`));if(C.remoteInterfaceReceived)throw new Error(t(`Remote contract "${a}" is already provided.`));C.setRemoteInterface(m),J()};let S=!1,E=!1,h=!1,F=!1,R=!1;async function J(){if(E=!0,!S){for(S=!0;E;){if(E=!1,e.isReady){const a=g.filter(l=>!l.isDeclared);if(a.length>0)for(const l of a){const m=Array(l.args.length+l.deps.length);l.args.forEach((C,w)=>m[w]=C),l.deps.forEach((C,w)=>m[w+l.args.length]=C),await e.declare(m.map(C=>({name:C.name,version:C.localVersion}))),m.forEach(C=>{C.localVersion!=null&&(C.localVersionSent=!0)}),l.isDeclared=!0}}if(e.isReady&&h&&g.every(a=>a.isDeclared)){const a=Object.values(r).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;F||(F=!0,await e.done())}if(e.isReady){const a=g.filter(l=>!l.isDone&&l.isReady);if(a.length>0)for(const l of a){const m=l.invoke();for(let C=0;C<l.args.length;C++){const w=l.args[C];await e.provide(w.name,w.localVersion,m[C]),w.localInterfaceSent=!0}}}if(f!=null){const a=Array(f+1).fill(null);for(const l in r){const m=r[l];m.depGroup!=null&&(m.isActivable?a[m.depGroup]==null&&!m.isActivated&&(a[m.depGroup]=!0):a[m.depGroup]=!1)}if(a.some(l=>l===!0))for(const l in r){const m=r[l];m.depGroup!=null&&a[m.depGroup]&&m.activate()}}if(e.isReady){const a=c;c=[];const l=[];for(const m of a)!m.isDone&&m.isReady?m.invoke():l.push(m);l.push(...c),c=l}}S=!1}}return{get(a){return u(a)},declareFactory:(a,l,m,C)=>{if(h)throw new Error(t("Cannot declare a factory after done has been set to true."));const w=p(a.map(b=>b.name));{const b=w.filter(O=>O.localVersion!=null);if(b.length>0)throw new Error(t("Cannot declare a factory for already implemented contracts : "+b.map(O=>O.name).join(", ")))}for(let b=0;b<a.length;b++)w[b].localVersion=a[b].version;const T=p(l);y(w,T);const ge=o(w,T,m,C);g.push(ge),J()},declareCallback(a,l,m,C){const w=p(a),T=n(w,l,m,C);!S&&c.length===0&&T.isReady?T.invoke():(c.push(T),J())},get done(){return h},set done(a){if(h){if(!a)throw new Error(t("Cannot set done to false after it has been set to true."))}else a&&(h=!0,Object.values(r).forEach(l=>{l.localVersion==null&&(l.localVersion=0)}),J())}}}const Pe=/^\d+$/;function Me(e){const[t,n,s]=e.split(":",3);if(n==null||s!=null||!Pe.test(n))return null;const o=parseInt(n);return isNaN(o)||o===0?null:{name:t,version:o}}function Ve(e){const t=Le(e);function n(s){return ae(e.name,s)}return{plug(s,o,r=void 0){if(t.done)throw new Error(n("Cannot plug after plugsDone."));r==null&&(r=o,o=[]);let g=!0;Array.isArray(s)||(s=[s],g=!1);const c=s.map(f=>{const d=Me(f);if(d==null)throw new Error(n("Invalid contract id : "+f));return d});t.declareFactory(c,o,r,g)},plugsDone(){t.done=!0},use(s,o){let r=!0;Array.isArray(s)||(s=[s],r=!1),t.declareCallback(s,o,r)},exec(s,o){let r=!0;return Array.isArray(s)||(s=[s],r=!1),new Promise((...g)=>{t.declareCallback(s,o,r,g)})},get(s){return s.map(o=>t.get(o).getLazyRemote())}}}const ie="app-agent";let q;function Ge(e){return q!=null||(q=Ve(Fe(ie,e))),q}console.log(`[${ie}@1.0.12] loaded`);const Q=e=>{let t;const n=new Set,s=(d,u)=>{const p=typeof d=="function"?d(t):d;if(!Object.is(p,t)){const y=t;t=u??(typeof p!="object"||p===null)?p:Object.assign({},t,p),n.forEach(S=>S(t,y))}},o=()=>t,c={setState:s,getState:o,getInitialState:()=>f,subscribe:d=>(n.add(d),()=>n.delete(d))},f=t=e(s,o,c);return c},De=e=>e?Q(e):Q,Ie=e=>e;function je(e,t=Ie){const n=v.useSyncExternalStore(e.subscribe,v.useCallback(()=>t(e.getState()),[e,t]),v.useCallback(()=>t(e.getInitialState()),[e,t]));return v.useDebugValue(n),n}const _=e=>{const t=De(e),n=s=>je(t,s);return Object.assign(n,t),n},ce=e=>e?_(e):_,$e=e=>(t,n,s)=>{const o=s.subscribe;return s.subscribe=(g,c,f)=>{let d=g;if(c){const u=f?.equalityFn||Object.is;let p=g(s.getState());d=y=>{const S=g(y);if(!u(p,S)){const E=p;c(p=S,E)}},f?.fireImmediately&&c(p,p)}return o(d)},e(t,n,s)},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("getTextContentFunction is not set"),new Error("getTextContentFunction is not set")},getJsonContentFunction:()=>{throw console.error("getJsonContentFunction is not set"),new Error("getJsonContentFunction is not set")},getJsonActivityContentFunction:()=>{throw console.error("getJsonActivityContentFunction is not set"),new Error("getJsonActivityContentFunction is not set")},getJsonAssignmentContentFunction:()=>{throw console.error("getJsonAssignmentContentFunction is not set"),new Error("getJsonAssignmentContentFunction is not set")},getJsonActivitySplitContentFunction:()=>{throw console.error("getJsonActivitySplitContentFunction is not set"),new Error("getJsonActivitySplitContentFunction is not set")},getJsonAssignmentSplitContentFunction:()=>{throw console.error("getJsonAssignmentSplitContentFunction is not set"),new Error("getJsonAssignmentSplitContentFunction is not set")},sidebarActions:{},quickActions:{},activitySettingsCallback:null,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"],K={"mode:1":{setMode:e=>{i.setState({mode:e})}},"reload:1":{reloaded:e=>{console.log("Reloaded with state:",e),console.error("Not implemented yet")}},"theme:1":{setTheme:e=>{if(e===null){i.setState({theme:null});return}if(e!=="light"&&e!=="dark"){console.warn(`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:s})=>{i.setState({loadedJsonActivityContent:e,loadedJsonAssignmentContent:t,loadedJsonActivityBinaryData:n,loadedJsonAssignmentBinaryData:s})},getActivityContentAndData:()=>(console.log("Getting activity content and data"),i.getState().getJsonActivitySplitContentFunction()),getAssignmentContentAndData:()=>(console.log("Getting assignment content and data"),i.getState().getJsonAssignmentSplitContentFunction())},"meta-player-anti-cheat:1":{lock:()=>{},unlock:()=>{}},"meta-player-ui:1":{executeAction(e){if(console.log("Executing action:",e),e.startsWith("qa")){const n=i.getState().quickActions[e];n?n():console.error(`Quick action not found: ${e}`)}else{const n=i.getState().sidebarActions[e];n?n():console.error(`Sidebar action not found: ${e}`)}},executeFileUpload(e,t){if(e.startsWith("qa")){const s=i.getState().quickActions[e];s?s(t):console.error(`Quick action not found: ${e}`)}else{const s=i.getState().sidebarActions[e];s?s(t):console.error(`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})}}},A=Ge();function qe(e){if(console.log("Contracts to plug:",e),Y){console.warn("Contracts have already been plugged. Skipping.");return}Y=!0;for(const t of e){if(!Ne.includes(t)){console.warn(`Contract ${t} is not implemented in Capytale. Skipping plug.`);continue}if(!(t in K)){console.warn(`Contract handler for ${t} is not defined. Skipping plug.`);continue}const n=K[t];A.plug([t],([])=>(console.log(`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(`Contract ${t} is being subscribed to content changes.`),e.includes(t)){console.log(`Subscribing to content changes for contract ${t}`);const n=t.split(":")[0];A.use([n],([s])=>{i.subscribe(o=>o.isDirtyCount,()=>{s.i?.contentChanged(),console.log(`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=()=>v.useCallback(()=>i.getState().loadedTextContent,[]),tt=()=>v.useCallback(()=>i.getState().loadedJsonContent,[]),nt=()=>v.useCallback(()=>i.getState().loadedJsonActivityContent,[]),ot=()=>v.useCallback(()=>i.getState().loadedJsonAssignmentContent,[]),rt=()=>v.useCallback(()=>({content:i.getState().loadedJsonActivityContent,binaryData:i.getState().loadedJsonActivityBinaryData}),[]),st=()=>v.useCallback(()=>({content:i.getState().loadedJsonAssignmentContent,binaryData:i.getState().loadedJsonAssignmentBinaryData}),[]),at=e=>{const t=i(n=>n.setGetTextContentFunction);v.useEffect(()=>{t(e)},[e,t])},it=e=>{const t=i(n=>n.setGetJsonContentFunction);v.useEffect(()=>{t(e)},[e,t])},ct=e=>{const t=i(n=>n.setGetJsonActivityContentFunction);v.useEffect(()=>{t(e)},[e,t])},lt=e=>{const t=i(n=>n.setGetJsonAssignmentContentFunction);v.useEffect(()=>{t(e)},[e,t])},ut=e=>{const t=i(n=>n.setGetJsonActivitySplitContentFunction);v.useEffect(()=>{t(e)},[e,t])},dt=e=>{const t=i(n=>n.setGetJsonAssignmentSplitContentFunction);v.useEffect(()=>{t(e)},[e,t])},ft=e=>{const t=i(n=>n.afterSaveCount);v.useEffect(()=>{t>0&&e()},[t])},gt=()=>(e,t)=>{A.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("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("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}n.i?.previewImageFile(e,t)})};let M=0,B=0;const mt=(e,t)=>{const n=v.useMemo(e,t),s=i(o=>o.setSidebarActions);v.useEffect(()=>(M++,M>1&&console.error("Capytale iframe React: Multiple sidebar actions registered: ",M),()=>{M--}),[]),v.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}B++;const r=n.map((c,f)=>({type:c.type,title:c.title,icon:c.icon,id:`sa-${B}-${f}`,...c.type==="file-upload"?{accept:c.accept}:{}})),g={};n.forEach((c,f)=>{g[`sa-${B}-${f}`]=c.action}),o.i?.setSidebarActionButtons(r),s(g)}),()=>{s({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setSidebarActionButtons([])})}),[n])};let V=0,W=0;const yt=(e,t)=>{const n=v.useMemo(e,t),s=i(o=>o.setQuickActions);v.useEffect(()=>(V++,V>1&&console.error("Capytale iframe React: Multiple quick actions registered: ",V),()=>{V--}),[]),v.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}W++;const r=n.map((c,f)=>({type:c.type,title:c.title,icon:c.icon,id:`qa-${W}-${f}`,...c.type==="file-upload"?{accept:c.accept}:{}})),g={};n.forEach((c,f)=>{g[`qa-${W}-${f}`]=c.action}),o.i?.setQuickActionButtons(r),s(g)}),()=>{s({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}o.i?.setQuickActionButtons([])})}),[n])};let G=0;const le=(e,t,n)=>{const s=v.useMemo(e,n),o=i(r=>r.setActivitySettingsCallback);v.useEffect(()=>(console.log("Mounting useSettings"),G++,G>1&&console.error("Capytale iframe React: Multiple settings registered: ",G),()=>{console.log("Unmounting useSettings"),G--}),[]),v.useEffect(()=>(A.use(["meta-player-ui"],([r])=>{if(r.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}console.log("Updating settings UI in MetaPlayer",s),r.i?.setSettingsUI(s)}),o(t),()=>{o(null)}),[s])},ue=()=>v.useCallback(t=>A.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("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=()=>v.useCallback(t=>A.exec(["meta-player-ui"],([n])=>{if(n.version===0)throw console.error("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)}),[]),vt=()=>v.useCallback(()=>A.exec(["meta-player-ui"],([t])=>{if(t.version===0)throw console.error("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()}),[]),fe=(e,t)=>{const n=ue(),s=de();return v.useEffect(()=>{if(e==null)return;const o=n(e);return()=>{o.then(r=>{r!=null&&s(r)})}},[n,s,...t]),null},Ct=()=>v.useCallback(()=>A.exec(["trigger-save"],([t])=>{if(t.version===0)throw console.error("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);function wt(e){const t={};for(const n of e.fields)t[n.name]=n.defaultValue;return t}function At(e){return{[e.name]:e.defaultValues}}function ht(e){return{[e.name]:e.defaultValue}}function bt(e){switch(e.type){case"form":return wt(e);case"checkboxes":case"switches":return At(e);case"radio":return ht(e);default:return{}}}function Et(e){const t={};for(const n of e)Object.assign(t,bt(n));return t}function Jt(e){const n=ce()(s=>({...Et(e)}));return n.activitySettings=e,n}function kt(e){le(()=>e.activitySettings,t=>{e.setState(t)},[])}function Ft({store:e}){return kt(e),null}const Tt=["meta-player-events:1","meta-player-ui:1","mode:1","workflow:1"];function xt({children:e,contracts:t,loadOnlyWhenReady:n=!0,activitySettingsStore:s}){const o=i(r=>r.ready);return v.useEffect(()=>{const r=[...t];for(const g of Tt)r.includes(g)||r.push(g);qe(r)},[]),n&&!o?L.jsx("div",{className:"capy-loading-container",children:"Chargement en cours..."}):L.jsxs(L.Fragment,{children:[s&&L.jsx(Ft,{store:s}),e]})}function Rt({message:e}){return fe(e,[e]),null}exports.Capytale=xt;exports.TemporaryToast=Rt;exports.createActivitySettingsStore=Jt;exports.useAfterSaveAction=ft;exports.useCanSave=St;exports.useClearToast=de;exports.useClearToasts=vt;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=it;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=gt;exports.useQuickActions=yt;exports.useRequestSave=ze;exports.useSettings=le;exports.useShowToast=ue;exports.useSidebarActions=mt;exports.useTextContentSaveFunction=at;exports.useTheme=He;exports.useToast=fe;exports.useTriggerSave=Ct;exports.useWorkflow=We;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=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:g,path:c}=Object.assign({path:[]},o.data),f=(o.data.argumentList||[]).map(J);let d;try{const u=c.slice(0,-1).reduce((C,S)=>C[S],e),p=c.reduce((C,S)=>C[S],e);switch(g){case"GET":d=p;break;case"SET":u[c.slice(-1)[0]]=J(o.data.value),d=!0;break;case"APPLY":d=p.apply(u,f);break;case"CONSTRUCT":{const C=new p(...f);d=se(C)}break;case"ENDPOINT":{const{port1:C,port2:S}=new MessageChannel;z(e,S),d=be(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),g==="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 g=n.get(s.id);if(g)try{g(s)}finally{n.delete(s.id)}}),H(e,n,[],t)}function R(e){if(e)throw new Error("Proxy has been released and is not useable")}function oe(e){return T(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(g,c){if(R(o),c===me)return()=>{Ae(s),oe(e),t.clear(),o=!0};if(c==="then"){if(n.length===0)return{then:()=>s};const f=T(e,t,{type:"GET",path:n.map(d=>d.toString())}).then(J);return f.then.bind(f)}return H(e,t,[...n,c])},set(g,c,f){R(o);const[d,u]=$(f);return T(e,t,{type:"SET",path:[...n,c].map(p=>p.toString()),value:d},u).then(J)},apply(g,c,f){R(o);const d=n[n.length-1];if(d===pe)return T(e,t,{type:"ENDPOINT"}).then(J);if(d==="bind")return H(e,t,n.slice(0,-1));const[u,p]=U(f);return T(e,t,{type:"APPLY",path:n.map(C=>C.toString()),argumentList:u},p).then(J)},construct(g,c){R(o);const[f,d]=U(c);return T(e,t,{type:"CONSTRUCT",path:n.map(u=>u.toString()),argumentList:f},d).then(J)}});return we(s,e),s}function he(e){return Array.prototype.concat.apply([],e)}function U(e){const t=e.map($);return[t.map(n=>n[0]),he(t.map(n=>n[1]))]}const re=new WeakMap;function be(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 J(e){switch(e.type){case"HANDLER":return ee.get(e.name).deserialize(e.value);case"RAW":return e.value}}function T(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 Je(e,t){return e.length===0?t:`[${e}] ${t}`}function ke(e,t){let n=!1,r,o,s;function g(u){return Je(e,u)}let c,f=!1;if(window.parent===window)console.warn(g("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(g("No handler for declare"));r(p)},done(){if(o==null)throw new Error(g("No handler for done"));o()},provide(p,C,S){if(s==null)throw new Error(g("No handler for provide"));s(p,C,S)}},u),c=ne(u),f=!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 f},set onDeclare(u){r=u,d()},set onDone(u){o=u,d()},set onProvide(u){s=u,d()}}}function xe(e){return function(t){let n,r=!1,o=!1,s,g,c=!1,f=!1,d,u,p,C;function S(){if(s!=null&&s!==0&&g!=null)return g}function E(a){if(s!=null&&g!=null&&!(a>s))return g}function h(){return p??(f?p=Promise.resolve():p=new Promise((a,l)=>{C=a}))}function k(){return d===void 0&&(d={get name(){return t},get version(){return s},get i(){return S()},v:a=>E(a)}),d}function M(){return u===void 0&&(u={get name(){return t},get version(){return f?s:void 0},get i(){return f?S():void 0},v:a=>f?E(a):void 0,get promise(){return s===0?Promise.reject(e("Remote interface not provided")):h().then(()=>{if(s===0)throw new Error(e("Remote interface not provided"));return k()})}}),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."));g=a,c=!0},get remoteInterfaceReceived(){return c},depGroup:void 0,get isActivable(){return c&&o},get isActivated(){return f},activate(){if(!f){if(!c)throw new Error(e("Remote interface not provided."));if(!o)throw new Error(e("Local interface not sent"));f=!0,F()}},getRemote:()=>k(),getLazyRemote:()=>M(),get activationPromise(){return h()}}}}function Te(e){return function(t,n,r,o){let s=r,g=!1,c=!1;function f(){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 f()},get isDone(){return g},get args(){return t},get deps(){return n},invoke(){if(g)throw new Error(e("Factory already invoked"));if(!f())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 g=!0,s=null,u}}}}function Me(e){return function(t,n,r,o){let s=n,g=!1;function c(){return t.every(f=>f.isActivated)}return{get isReady(){return c()},get isDone(){return g},get args(){return t},invoke(){if(g||!c()){const u=new Error(e(g?"callback already invoked":"callback parameters are not ready"));throw o?.[1](u),u}const f=r?t.map(u=>u.getRemote()):t[0].getRemote();let d;try{d=s(f)}catch(u){o==null?console.error(e("error in callback:"),u):o[1](u)}finally{g=!0}o?.[0](d)}}}}function ae(e,t){return e==null||e.length===0?t:`[${e}] ${t}`}function Le(e){function t(a){return ae(e.name,a)}const n=Me(t),r=xe(t),o=Te(t),s={},g=[];let c=[],f;const d=()=>(f==null?f=0:f++,f);function u(a){let l=s[a];return l==null&&(l=r(a),l.localVersion==null&&(h&&(l.localVersion=0),k&&(l.localVersionSent=!0)),l.remoteVersion==null&&M&&(l.remoteVersion=0),s[a]=l),l}function p(a){return a.map(u)}function C(...a){const l=d(),m=Array(l).fill(!1);a.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=a=>{const l=p(a.map(m=>m.name));for(let m=0;m<a.length;m++)a[m].version!=null&&(l[m].remoteVersion=a[m].version);C(l),F()},e.onDone=()=>{M||(M=!0,Object.values(s).forEach(a=>{a.remoteVersion==null&&(a.remoteVersion=0)}),F())},e.onProvide=(a,l,m)=>{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(m),F()};let S=!1,E=!1,h=!1,k=!1,M=!1;async function F(){if(E=!0,!S){for(S=!0;E;){if(E=!1,e.isReady){const a=g.filter(l=>!l.isDeclared);if(a.length>0)for(const l of a){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&&h&&g.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;k||(k=!0,await e.done())}if(e.isReady){const a=g.filter(l=>!l.isDone&&l.isReady);if(a.length>0)for(const l of a){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(f!=null){const a=Array(f+1).fill(null);for(const l in s){const m=s[l];m.depGroup!=null&&(m.isActivable?a[m.depGroup]==null&&!m.isActivated&&(a[m.depGroup]=!0):a[m.depGroup]=!1)}if(a.some(l=>l===!0))for(const l in s){const m=s[l];m.depGroup!=null&&a[m.depGroup]&&m.activate()}}if(e.isReady){const a=c;c=[];const l=[];for(const m of a)!m.isDone&&m.isReady?m.invoke():l.push(m);l.push(...c),c=l}}S=!1}}return{get(a){return u(a)},declareFactory:(a,l,m,v)=>{if(h)throw new Error(t("Cannot declare a factory after done has been set to true."));const w=p(a.map(b=>b.name));{const b=w.filter(O=>O.localVersion!=null);if(b.length>0)throw new Error(t("Cannot declare a factory for already implemented contracts : "+b.map(O=>O.name).join(", ")))}for(let b=0;b<a.length;b++)w[b].localVersion=a[b].version;const x=p(l);C(w,x);const ge=o(w,x,m,v);g.push(ge),F()},declareCallback(a,l,m,v){const w=p(a),x=n(w,l,m,v);!S&&c.length===0&&x.isReady?x.invoke():(c.push(x),F())},get done(){return h},set done(a){if(h){if(!a)throw new Error(t("Cannot set done to false after it has been set to true."))}else a&&(h=!0,Object.values(s).forEach(l=>{l.localVersion==null&&(l.localVersion=0)}),F())}}}const Re=/^\d+$/;function Ge(e){const[t,n,r]=e.split(":",3);if(n==null||r!=null||!Re.test(n))return null;const o=parseInt(n);return isNaN(o)||o===0?null:{name:t,version:o}}function Pe(e){const t=Le(e);function n(r){return ae(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 g=!0;Array.isArray(r)||(r=[r],g=!1);const c=r.map(f=>{const d=Ge(f);if(d==null)throw new Error(n("Invalid contract id : "+f));return d});t.declareFactory(c,o,s,g)},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((...g)=>{t.declareCallback(r,o,s,g)})},get(r){return r.map(o=>t.get(o).getLazyRemote())}}}const ie="app-agent";let q;function Ve(e){return q!=null||(q=Pe(ke(ie,e))),q}console.log(`[${ie}@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:()=>f,subscribe:d=>(n.add(d),()=>n.delete(d))},f=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=(g,c,f)=>{let d=g;if(c){const u=f?.equalityFn||Object.is;let p=g(r.getState());d=C=>{const S=g(C);if(!u(p,S)){const E=p;c(p=S,E)}},f?.fireImmediately&&c(p,p)}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("getTextContentFunction is not set"),new Error("getTextContentFunction is not set")},getJsonContentFunction:()=>{throw console.error("getJsonContentFunction is not set"),new Error("getJsonContentFunction is not set")},getJsonActivityContentFunction:()=>{throw console.error("getJsonActivityContentFunction is not set"),new Error("getJsonActivityContentFunction is not set")},getJsonAssignmentContentFunction:()=>{throw console.error("getJsonAssignmentContentFunction is not set"),new Error("getJsonAssignmentContentFunction is not set")},getJsonActivitySplitContentFunction:()=>{throw console.error("getJsonActivitySplitContentFunction is not set"),new Error("getJsonActivitySplitContentFunction is not set")},getJsonAssignmentSplitContentFunction:()=>{throw console.error("getJsonAssignmentSplitContentFunction is not set"),new Error("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"],K={"mode:1":{setMode:e=>{i.setState({mode:e})}},"reload:1":{reloaded:e=>{console.log("Reloaded with state:",e),console.error("Not implemented yet")}},"theme:1":{setTheme:e=>{if(e===null){i.setState({theme:null});return}if(e!=="light"&&e!=="dark"){console.warn(`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("Getting activity content and data"),i.getState().getJsonActivitySplitContentFunction()),getAssignmentContentAndData:()=>(console.log("Getting assignment content and data"),i.getState().getJsonAssignmentSplitContentFunction())},"meta-player-anti-cheat:1":{lock:()=>{},unlock:()=>{}},"meta-player-ui:1":{executeAction(e){if(console.log("Executing action:",e),e.startsWith("qa")){const n=i.getState().quickActions[e];n?n():console.error(`Quick action not found: ${e}`)}else{const n=i.getState().sidebarActions[e];n?n():console.error(`Sidebar action not found: ${e}`)}},executeFileUpload(e,t){if(e.startsWith("qa")){const r=i.getState().quickActions[e];r?r(t):console.error(`Quick action not found: ${e}`)}else{const r=i.getState().sidebarActions[e];r?r(t):console.error(`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;if(!t)throw new Error("LLM first message context function is not set");return t(e)},getAllMessagesContext:e=>{const t=i.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("Contracts to plug:",e),Y){console.warn("Contracts have already been plugged. Skipping.");return}Y=!0;for(const t of e){if(!Ne.includes(t)){console.warn(`Contract ${t} is not implemented in Capytale. Skipping plug.`);continue}if(!(t in K)){console.warn(`Contract handler for ${t} is not defined. Skipping plug.`);continue}const n=K[t];A.plug([t],([])=>(console.log(`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(`Contract ${t} is being subscribed to content changes.`),e.includes(t)){console.log(`Subscribing to content changes for contract ${t}`);const n=t.split(":")[0];A.use([n],([r])=>{i.subscribe(o=>o.isDirtyCount,()=>{r.i?.contentChanged(),console.log(`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}),[]),at=e=>{const t=i(n=>n.setGetTextContentFunction);y.useEffect(()=>{t(e)},[e,t])},it=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])},ft=e=>{const t=i(n=>n.afterSaveCount);y.useEffect(()=>{t>0&&e()},[t])},gt=()=>(e,t)=>{A.use(["meta-player-ui"],([n])=>{if(n.version===0){console.error("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("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=i(o=>o.setSidebarActions);y.useEffect(()=>(G++,G>1&&console.error("Capytale iframe React: Multiple sidebar actions registered: ",G),()=>{G--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}B++;const s=n.map((c,f)=>({type:c.type,title:c.title,icon:c.icon,id:`sa-${B}-${f}`,...c.type==="file-upload"?{accept:c.accept}:{}})),g={};n.forEach((c,f)=>{g[`sa-${B}-${f}`]=c.action}),o.i?.setSidebarActionButtons(s),r(g)}),()=>{r({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("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("Capytale iframe React: Multiple quick actions registered: ",P),()=>{P--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}W++;const s=n.map((c,f)=>({type:c.type,title:c.title,icon:c.icon,id:`qa-${W}-${f}`,...c.type==="file-upload"?{accept:c.accept}:{}})),g={};n.forEach((c,f)=>{g[`qa-${W}-${f}`]=c.action}),o.i?.setQuickActionButtons(s),r(g)}),()=>{r({}),A.use(["meta-player-ui"],([o])=>{if(o.version===0){console.error("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("Mounting useSettings"),V++,V>1&&console.error("Capytale iframe React: Multiple settings registered: ",V),()=>{console.log("Unmounting useSettings"),V--}),[]),y.useEffect(()=>(A.use(["meta-player-ui"],([s])=>{if(s.version===0){console.error("Le MétaPlayer ne supporte pas le contrat meta-player-ui");return}console.log("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("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("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("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()}),[]),fe=(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("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),wt=(e,t)=>{const n=i(r=>r.setLlmGetFirstMessageContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])},At=(e,t)=>{const n=i(r=>r.setLlmGetAllMessagesContextFunction);y.useEffect(()=>(n(e),()=>{n(null)}),[t,n])};function ht(e){const t={};for(const n of e.fields)t[n.name]=n.defaultValue;return t}function bt(e){return{[e.name]:e.defaultValues}}function Et(e){return{[e.name]:e.defaultValue}}function Ft(e){switch(e.type){case"form":return ht(e);case"checkboxes":case"switches":return bt(e);case"radio":return Et(e);default:return{}}}function Jt(e){const t={};for(const n of e)Object.assign(t,Ft(n));return t}function kt(e){const n=ce()(r=>({...Jt(e)}));return n.activitySettings=e,n}function xt(e){le(()=>e.activitySettings,t=>{e.setState(t)},[])}function Tt({store:e}){return xt(e),null}const Mt=["meta-player-events:1","meta-player-ui:1","mode:1","workflow:1"];function Lt({children:e,contracts:t,loadOnlyWhenReady:n=!0,activitySettingsStore:r}){const o=i(s=>s.ready);return y.useEffect(()=>{const s=[...t];for(const g of Mt)s.includes(g)||s.push(g);qe(s)},[]),n&&!o?L.jsx("div",{className:"capy-loading-container",children:"Chargement en cours..."}):L.jsxs(L.Fragment,{children:[r&&L.jsx(Tt,{store:r}),e]})}function Rt({message:e}){return fe(e,[e]),null}exports.Capytale=Lt;exports.TemporaryToast=Rt;exports.createActivitySettingsStore=kt;exports.useAfterSaveAction=ft;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=it;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=gt;exports.useQuickActions=Ct;exports.useRequestSave=ze;exports.useSettings=le;exports.useShowToast=ue;exports.useSidebarActions=mt;exports.useTextContentSaveFunction=at;exports.useTheme=He;exports.useToast=fe;exports.useTriggerSave=vt;exports.useWorkflow=We;
package/dist/index.d.ts CHANGED
@@ -146,6 +146,9 @@ export declare function createActivitySettingsStore<T extends ActivitySettings>(
146
146
  declare type CustomContracts = CollectionOf<[
147
147
  AddIdData<MetaPlayerAntiCheatV1, {
148
148
  name: "meta-player-anti-cheat";
149
+ }>,
150
+ AddIdData<LLMV1, {
151
+ name: "llm";
149
152
  }>
150
153
  ]>;
151
154
 
@@ -221,6 +224,33 @@ export declare type InferValue<T> = T extends readonly (infer Section)[] ? Union
221
224
  [P in N]: InferFieldType<Section>;
222
225
  } : never> : never;
223
226
 
227
+ declare type LLMFunction = ((mode: "create" | "assignment" | "review" | "view") => string) | ((mode: "create" | "assignment" | "review" | "view") => Promise<string>);
228
+
229
+ declare type LLMV1 = {
230
+ version: 1;
231
+ /**
232
+ * L'interface qui expose le *MetaPlayer* à l'*Application*.
233
+ */
234
+ metaplayer: {};
235
+ /**
236
+ * L'interface qui expose l'*Application* au *MetaPlayer*.
237
+ */
238
+ application: {
239
+ /**
240
+ * Le *MetaPlayer* appelle cette méthode pour demander à l'*Application* quel contexte donner au premier message
241
+ * d'une conversation avec le LLM (avant tout autre contexte).
242
+ *
243
+ * @param mode le mode en cours.
244
+ */
245
+ getFirstMessageContext(mode: "create" | "assignment" | "review" | "view"): string;
246
+ /**
247
+ * Le *MetaPlayer* appelle cette méthode pour demander à l'*Application* quel contexte donner à tous les messages
248
+ * d'une conversation avec le LLM (y-compris le premier message).
249
+ */
250
+ getAllMessagesContext(mode: "create" | "assignment" | "review" | "view"): string;
251
+ };
252
+ };
253
+
224
254
  declare type MetaPlayerAntiCheatV1 = {
225
255
  version: 1;
226
256
  /**
@@ -308,6 +338,10 @@ export declare const useJsonAssignmentSplitContentSaveFunction: (fn: () => any)
308
338
 
309
339
  export declare const useJsonContentSaveFunction: (fn: () => any) => void;
310
340
 
341
+ export declare const useLLMAllMessagesContext: (fn: LLMFunction, deps: readonly unknown[]) => void;
342
+
343
+ export declare const useLLMFirstMessageContext: (fn: LLMFunction, deps: readonly unknown[]) => void;
344
+
311
345
  export declare const useLoadedJsonActivityBinaryData: () => any;
312
346
 
313
347
  export declare const useLoadedJsonActivityContent: () => any;
@@ -320,7 +354,7 @@ export declare const useLoadedJsonContent: () => any;
320
354
 
321
355
  export declare const useLoadedTextContent: () => string | null;
322
356
 
323
- export declare const useMode: () => "assignment" | "create" | "review" | "view";
357
+ export declare const useMode: () => "create" | "assignment" | "review" | "view";
324
358
 
325
359
  export declare const useNotifyIsDirty: () => () => void;
326
360