@gamesberry/karmyc-core
Version:
A flexible and powerful layout management system for React applications
28 lines • 135 kB
JavaScript
"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("@szhsin/react-menu");const n=new Map,a=e=>{const t=n.get(e);return t?Object.fromEntries(Object.entries(t.stores).map(([e,t])=>[e,t.getState()])):{}},o=(e,t={})=>(r,o,i)=>{const{enabled:c,anonymousActionType:l,store:d,...u}=t;let p;try{p=(null==c||c)&&window.__REDUX_DEVTOOLS_EXTENSION__}catch(e){}if(!p)return c&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),e(r,o,i);const{connection:f,...h}=((e,t,r)=>{if(void 0===e)return{type:"untracked",connection:t.connect(r)};const a=n.get(r.name);if(a)return{type:"tracked",store:e,...a};const o={connection:t.connect(r),stores:{}};return n.set(r.name,o),{type:"tracked",store:e,...o}})(d,p,u);let y=!0;i.setState=(e,t,n)=>{const s=r(e,t);if(!y)return s;const c=void 0===n?{type:l||"anonymous"}:"string"==typeof n?{type:n}:n;return void 0===d?(null==f||f.send(c,o()),s):(null==f||f.send({...c,type:`${d}/${c.type}`},{...a(u.name),[d]:i.getState()}),s)};const g=(...e)=>{const t=y;y=!1,r(...e),y=t},m=e(i.setState,o,i);if("untracked"===h.type?null==f||f.init(m):(h.stores[h.store]=i,null==f||f.init(Object.fromEntries(Object.entries(h.stores).map(([e,t])=>[e,e===h.store?m:t.getState()])))),i.dispatchFromDevtools&&"function"==typeof i.dispatch){let e=!1;const t=i.dispatch;i.dispatch=(...r)=>{"__setState"!==r[0].type||e||(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),e=!0),t(...r)}}return f.subscribe(e=>{var t;switch(e.type){case"ACTION":return"string"!=typeof e.payload?void console.error("[zustand devtools middleware] Unsupported action format"):s(e.payload,e=>{if("__setState"===e.type){if(void 0===d)return void g(e.state);1!==Object.keys(e.state).length&&console.error('\n [zustand devtools middleware] Unsupported __setState action format. \n When using \'store\' option in devtools(), the \'state\' should have only one key, which is a value of \'store\' that was passed in devtools(),\n and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }\n ');const t=e.state[d];if(null==t)return;return void(JSON.stringify(i.getState())!==JSON.stringify(t)&&g(t))}i.dispatchFromDevtools&&"function"==typeof i.dispatch&&i.dispatch(e)});case"DISPATCH":switch(e.payload.type){case"RESET":return g(m),void 0===d?null==f?void 0:f.init(i.getState()):null==f?void 0:f.init(a(u.name));case"COMMIT":return void 0===d?void(null==f||f.init(i.getState())):null==f?void 0:f.init(a(u.name));case"ROLLBACK":return s(e.state,e=>{if(void 0===d)return g(e),void(null==f||f.init(i.getState()));g(e[d]),null==f||f.init(a(u.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return s(e.state,e=>{void 0!==d?JSON.stringify(i.getState())!==JSON.stringify(e[d])&&g(e[d]):g(e)});case"IMPORT_STATE":{const{nextLiftedState:r}=e.payload,n=null==(t=r.computedStates.slice(-1)[0])?void 0:t.state;if(!n)return;return g(void 0===d?n:n[d]),void(null==f||f.send(null,r))}case"PAUSE_RECORDING":return y=!y}return}}),m},s=(e,t)=>{let r;try{r=JSON.parse(e)}catch(e){console.error("[zustand devtools middleware] Could not parse the received json",e)}void 0!==r&&t(r)};function i(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var t;const n=e=>null===e?null:JSON.parse(e,void 0),a=null!=(t=r.getItem(e))?t:null;return a instanceof Promise?a.then(n):n(a)},setItem:(e,t)=>r.setItem(e,JSON.stringify(t,void 0)),removeItem:e=>r.removeItem(e)}}const c=e=>t=>{try{const r=e(t);return r instanceof Promise?r:{then:e=>c(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>c(t)(e)}}},l=(e,t)=>"getStorage"in t||"serialize"in t||"deserialize"in t?(console.warn("[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead."),((e,t)=>(r,n,a)=>{let o={getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},s=!1;const i=new Set,l=new Set;let d;try{d=o.getStorage()}catch(e){}if(!d)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),r(...e)},n,a);const u=c(o.serialize),p=()=>{const e=o.partialize({...n()});let t;const r=u({state:e,version:o.version}).then(e=>d.setItem(o.name,e)).catch(e=>{t=e});if(t)throw t;return r},f=a.setState;a.setState=(e,t)=>{f(e,t),p()};const h=e((...e)=>{r(...e),p()},n,a);let y;const g=()=>{var e;if(!d)return;s=!1,i.forEach(e=>e(n()));const t=(null==(e=o.onRehydrateStorage)?void 0:e.call(o,n()))||void 0;return c(d.getItem.bind(d))(o.name).then(e=>{if(e)return o.deserialize(e)}).then(e=>{if(e){if("number"!=typeof e.version||e.version===o.version)return e.state;if(o.migrate)return o.migrate(e.state,e.version);console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}}).then(e=>{var t;return y=o.merge(e,null!=(t=n())?t:h),r(y,!0),p()}).then(()=>{null==t||t(y,void 0),s=!0,l.forEach(e=>e(y))}).catch(e=>{null==t||t(void 0,e)})};return a.persist={setOptions:e=>{o={...o,...e},e.getStorage&&(d=e.getStorage())},clearStorage:()=>{null==d||d.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>g(),hasHydrated:()=>s,onHydrate:e=>(i.add(e),()=>{i.delete(e)}),onFinishHydration:e=>(l.add(e),()=>{l.delete(e)})},g(),y||h})(e,t)):((e,t)=>(r,n,a)=>{let o={storage:i(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},s=!1;const l=new Set,d=new Set;let u=o.storage;if(!u)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),r(...e)},n,a);const p=()=>{const e=o.partialize({...n()});return u.setItem(o.name,{state:e,version:o.version})},f=a.setState;a.setState=(e,t)=>{f(e,t),p()};const h=e((...e)=>{r(...e),p()},n,a);let y;a.getInitialState=()=>h;const g=()=>{var e,t;if(!u)return;s=!1,l.forEach(e=>{var t;return e(null!=(t=n())?t:h)});const a=(null==(t=o.onRehydrateStorage)?void 0:t.call(o,null!=(e=n())?e:h))||void 0;return c(u.getItem.bind(u))(o.name).then(e=>{if(e){if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];if(o.migrate)return[!0,o.migrate(e.state,e.version)];console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;const[a,s]=e;if(y=o.merge(s,null!=(t=n())?t:h),r(y,!0),a)return p()}).then(()=>{null==a||a(y,void 0),y=n(),s=!0,d.forEach(e=>e(y))}).catch(e=>{null==a||a(void 0,e)})};return a.persist={setOptions:e=>{o={...o,...e},e.storage&&(u=e.storage)},clearStorage:()=>{null==u||u.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>g(),hasHydrated:()=>s,onHydrate:e=>(l.add(e),()=>{l.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},o.skipHydration||g(),y||h})(e,t),d=e=>t=>{e(e=>{const r=e.screens[e.activeScreenId]?.areas;r&&r.joinPreview!==t&&(r.joinPreview=t,e.lastUpdated=Date.now())})};function u(e){const t={};if(!e)return console.error("computeAreaToParentRow received null or undefined layout."),{};const r=Object.keys(e);for(let n=0;n<r.length;n+=1){const a=e[r[n]];if(!a||"area_row"!==a.type)continue;const o=a;if(o.areas&&Array.isArray(o.areas))for(let e=0;e<o.areas.length;e+=1)o.areas[e]&&o.areas[e].id&&(t[o.areas[e].id]=o.id)}return t}function p(e,t){if(!t)return;const r=e.layout[t];if(!r||"area_row"!==r.type)return;const n=r;if(1!==n.areas.length)return;const a=n.areas[0],o=a.id,s=u(e.layout)[t];if(s&&"area_row"===e.layout[s]?.type){const r=e.layout[s],n=r.areas.findIndex(e=>e.id===t);if(-1===n)return void console.error(`[simplifyLayoutNodeIfNeeded] Cleanup Error: Row ${t} not found in parent ${s}.`);{const e=r.areas[n].size??a.size??.5;r.areas[n]={id:o,size:e}}}else e.rootId===t?e.rootId=o:console.warn(`[simplifyLayoutNodeIfNeeded] Row ${t} has single child ${o} but no parent and is not root. Removing row.`);delete e.layout[t]}function f(e,t){const r=e[t];return r?"area"===r.type?t:"area_row"===r.type?0===r.areas.length?null:f(e,r.areas[0].id):null:null}const h=e=>t=>{let r=null;return e(e=>{const n=e.screens[e.activeScreenId]?.areas;if(!n)return;const{areaIdToSplit:a,parentRowId:o,horizontal:s}=t,i=n.layout[a];if("area_row"===i.type&&"stack"===i.orientation){const e=i.areas,t=[];for(const r of e){const e=n.areas[r.id];if(!e)continue;const a=`area-${n._id+1}`;n._id+=1,n.areas[a]={id:a,type:e.type,state:{...e.state}},n.layout[a]={type:"area",id:a},t.push({id:a,size:r.size})}const c=`row-${n._id+1}`;n._id+=1;const l={id:c,type:"area_row",orientation:"stack",areas:t,activeTabId:t[0]?.id};n.layout[c]=l;const d=`row-${n._id+1}`;n._id+=1;const u={id:d,type:"area_row",orientation:s?"horizontal":"vertical",areas:[{id:a,size:.5},{id:c,size:.5}]};if(n.layout[d]=u,o){const e=n.layout[o];if("area_row"===e?.type){const t=e.areas.findIndex(e=>e.id===a);if(-1!==t){const r=e.areas[t].size??.5;e.areas[t]={id:d,size:r}}}}else n.rootId=d;return void(r={newRowId:d,separatorIndex:1})}n._id+=1;const c=n._id,l=`area-${c}`,d=`row-${c+1}`;if(n.areas[l]||n.layout[l])return void console.error(`splitArea: ID conflict for new area ${l}`);const f=n.areas[a];if(n.areas[l]={id:l,type:f?.type||i.type,state:{...f?.state},spaceId:f?.spaceId},n.layout[l]={type:"area",id:l},n.layout[d])return void console.error(`splitArea: ID conflict for new row ${d}`);const h={id:d,type:"area_row",orientation:s?"horizontal":"vertical",areas:[{id:a,size:.5},{id:l,size:.5}]};n.layout[d]=h;let y=.5;if(o){const e=n.layout[o];if("area_row"===e?.type){const t=e.areas.findIndex(e=>e.id===a);if(-1!==t)if(y=e.areas[t].size??.5,e.orientation===h.orientation){const n=h.areas.map(e=>({id:e.id,size:(e.size??.5)*y}));e.areas.splice(t,1,...n),r={newRowId:o,separatorIndex:t+1}}else e.areas[t]={id:d,size:y},r={newRowId:d,separatorIndex:1};else console.error(`splitArea Error: Area ${a} not in parent ${o}.`)}else console.error(`splitArea Error: Parent ${o} not found or not row.`)}else n.rootId===a?(n.rootId=d,r={newRowId:d,separatorIndex:1}):console.error(`splitArea Error: Area ${a} has no parent and is not root.`);n._id=c+2,n.lastSplitResultData=r,function(e){if(!e)return;let t=e;for(;t;){const e=n.layout[t];p(n,t);if(t=u(n.layout)[t],!e||n.layout[e.id])break}}(o),function e(t,r=null){if(!t)return;const a=n.layout[t];if(!a||"area_row"!==a.type)return;let o=!1;for(let e=0;e<a.areas.length;){const t=a.areas[e].id,r=n.layout[t];if(r&&"area_row"===r.type&&r.orientation===a.orientation){const s=r,i=a.areas[e].size??1/a.areas.length,c=s.areas.reduce((e,t)=>e+(t.size??0),0)||1,l=s.areas.map(e=>({id:e.id,size:(e.size??1/s.areas.length)*i/c}));a.areas.splice(e,1,...l.filter(e=>!a.areas.some(t=>t.id===e.id))),delete n.layout[t],o=!0}else e++}for(const r of a.areas)e(r.id,t);o&&e(t,r)}(n.rootId),function(){const e=new Set;!function t(r){if(!r||e.has(r))return;e.add(r);const a=n.layout[r];if(a&&"area_row"===a.type)for(const e of a.areas)t(e.id)}(n.rootId);for(const t in n.layout){const r=n.layout[t];r&&"area_row"===r.type&&!e.has(t)&&delete n.layout[t]}}(),e.lastUpdated=Date.now()}),r},y=(e,t,r)=>{const n=t,a=n+r;if(n<0||n>=e.areas.length||a<0||a>=e.areas.length)throw new Error(`Invalid indices: source=${n}, target=${a}, length=${e.areas.length}, direction=${-1===r?"west":"east"}`);const o=e.areas[n],s=e.areas[a];if(!o||!s)throw new Error(`Missing areas: source=${o}, target=${s}`);const i=(o.size||1)+(s.size||1);if(2===e.areas.length){return{area:{type:"area",id:o.id},removedAreaId:s.id}}const c=[...e.areas];c[a]={id:o.id,size:i},c.splice(n,1);return{area:{...e,areas:c},removedAreaId:s.id}},g=e=>t=>{e(e=>{const r=e.screens[e.activeScreenId]?.areas;if(!r)return;const{sourceAreaId:n,targetAreaId:a}=t,{parentRow:o,sourceIndex:s,targetIndex:i}=function(e,t,r){for(const n in e){const a=e[n];if("area_row"===a.type){const e=a,n=e.areas.findIndex(e=>e.id===t),o=e.areas.findIndex(e=>e.id===r);if(-1!==n&&-1!==o&&1===Math.abs(n-o))return{parentRow:e,sourceIndex:n,targetIndex:o}}}return{parentRow:null,sourceIndex:-1,targetIndex:-1}}(r.layout,n,a);if(!o||"area_row"!==o.type)return r.errors=[`Could not find adjacent areas ${n}/${a} in the same row.`],void(r.joinPreview=null);const c=o.id,l=u(r.layout)[c],d=JSON.parse(JSON.stringify(o)),f=i>s?1:-1,h=s;try{const e=y(d,h,f),{area:t,removedAreaId:n}=e,a=function(e,t){const r=new Set,n=[t],a=new Set;for(;n.length>0;){const t=n.shift();if(a.has(t))continue;a.add(t);const o=e[t];if(o)if("area"===o.type)r.add(t);else if("area_row"===o.type){const e=o;e.areas&&Array.isArray(e.areas)&&e.areas.forEach(e=>{e&&e.id&&n.push(e.id)})}}return"area"===e[t]?.type&&r.add(t),r}(r.layout,n);if(a.add(n),a.forEach(e=>{delete r.areas[e],delete r.layout[e]}),t.id===c&&"area_row"===t.type){const e=t;if(r.layout[c]=e,e.areas){const t=e.areas.reduce((e,t)=>e+(t.size||0),0);if(t>0){const r=1/t;e.areas.forEach(e=>{e.size=(e.size||0)*r})}}1===e.areas?.length&&p(r,c)}else if(delete r.layout[c],r.layout[t.id]||"area_row"!==t.type&&(r.layout[t.id]={type:"area",id:t.id}),l&&"area_row"===r.layout[l]?.type){const e=r.layout[l],n=e.areas.findIndex(e=>e.id===c);if(-1!==n){const r=e.areas[n].size??.5;e.areas[n]={id:t.id,size:r}}else console.error(`[joinOrMoveArea] Cleanup Error: Row ${c} not found in grandparent ${l}.`)}else r.rootId===c&&(r.rootId=t.id);r.activeAreaId&&a.has(r.activeAreaId)&&("area"===t.type?r.activeAreaId=t.id:r.activeAreaId=null),r.errors=[],r.joinPreview=null}catch(e){console.error("Error during joinOrMoveArea:",e),r.errors=[e instanceof Error?e.message:String(e)],r.joinPreview=null}e.lastUpdated=Date.now()})},m=[];for(let e=0;e<256;++e)m.push((e+256).toString(16).slice(1));let w;const v=new Uint8Array(16);var S={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function b(e,t,r){if(S.randomUUID&&!e)return S.randomUUID();const n=(e=e||{}).random??e.rng?.()??function(){if(!w){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");w=crypto.getRandomValues.bind(crypto)}return w(v)}();if(n.length<16)throw new Error("Random bytes length must be >= 16");return n[6]=15&n[6]|64,n[8]=63&n[8]|128,function(e,t=0){return(m[e[t+0]]+m[e[t+1]]+m[e[t+2]]+m[e[t+3]]+"-"+m[e[t+4]]+m[e[t+5]]+"-"+m[e[t+6]]+m[e[t+7]]+"-"+m[e[t+8]]+m[e[t+9]]+"-"+m[e[t+10]]+m[e[t+11]]+m[e[t+12]]+m[e[t+13]]+m[e[t+14]]+m[e[t+15]]).toLowerCase()}(n)}const I=new Map,x={registerComponent:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,component:t})},registerInitialState:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,initialState:t})},registerDisplayName:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,displayName:t})},registerIcon:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,icon:t})},registerDefaultSize:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,defaultSize:t})},registerSupportedActions:(e,t)=>{const r=I.get(e)||{};I.set(e,{...r,supportedActions:t})},getComponent:e=>I.get(e)?.component,getInitialState:e=>I.get(e)?.initialState||{},getDisplayName:e=>I.get(e)?.displayName||e,getIcon:e=>I.get(e)?.icon,getDefaultSize:e=>I.get(e)?.defaultSize,getSupportedActions:e=>I.get(e)?.supportedActions,getRegisteredTypes:()=>new Set(Array.from(I.keys())),unregisterAreaType:e=>{I.delete(e)}};var _;exports.ActionPriority=void 0,(_=exports.ActionPriority||(exports.ActionPriority={}))[_.CRITICAL=1e3]="CRITICAL",_[_.HIGH=800]="HIGH",_[_.NORMAL=500]="NORMAL",_[_.LOW=200]="LOW",_[_.BACKGROUND=100]="BACKGROUND";const A={LEAD:"LEAD",FOLLOW:"FOLLOW",SELF:"SELF"},E=e=>{let t;const r=new Set,n=(e,n)=>{const a="function"==typeof e?e(t):e;if(!Object.is(a,t)){const e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,o={setState:n,getState:a,getInitialState:()=>s,subscribe:e=>(r.add(e),()=>r.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),r.clear()}},s=t=e(n,a,o);return o};function k(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var O,M={exports:{}},z={},D={exports:{}},j={};var C,T,R,N={};
/**
* @license React
* use-sync-external-store-shim.development.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/function L(){return T||(T=1,"production"===process.env.NODE_ENV?D.exports=function(){if(O)return j;O=1;var e=t,r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},n=e.useState,a=e.useEffect,o=e.useLayoutEffect,s=e.useDebugValue;function i(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),c=n({inst:{value:r,getSnapshot:t}}),l=c[0].inst,d=c[1];return o(function(){l.value=r,l.getSnapshot=t,i(l)&&d({inst:l})},[e,r,t]),a(function(){return i(l)&&d({inst:l}),e(function(){i(l)&&d({inst:l})})},[e]),s(r),r};return j.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:c,j}():D.exports=(C||(C=1,"production"!==process.env.NODE_ENV&&function(){function e(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!n(e,r)}catch(e){return!0}}"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=t,n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,o=r.useEffect,s=r.useLayoutEffect,i=r.useDebugValue,c=!1,l=!1,d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(t,d){c||void 0===r.startTransition||(c=!0,console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var u=d();if(!l){var p=d();n(u,p)||(console.error("The result of getSnapshot should be cached to avoid an infinite loop"),l=!0)}var f=(p=a({inst:{value:u,getSnapshot:d}}))[0].inst,h=p[1];return s(function(){f.value=u,f.getSnapshot=d,e(f)&&h({inst:f})},[t,u,d]),o(function(){return e(f)&&h({inst:f}),t(function(){e(f)&&h({inst:f})})},[t]),i(u),u};N.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),N)),D.exports}
/**
* @license React
* use-sync-external-store-shim/with-selector.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var $,P={};
/**
* @license React
* use-sync-external-store-shim/with-selector.development.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/"production"===process.env.NODE_ENV?M.exports=function(){if(R)return z;R=1;var e=t,r=L(),n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useSyncExternalStore,o=e.useRef,s=e.useEffect,i=e.useMemo,c=e.useDebugValue;return z.useSyncExternalStoreWithSelector=function(e,t,r,l,d){var u=o(null);if(null===u.current){var p={hasValue:!1,value:null};u.current=p}else p=u.current;u=i(function(){function e(e){if(!s){if(s=!0,a=e,e=l(e),void 0!==d&&p.hasValue){var t=p.value;if(d(t,e))return o=t}return o=e}if(t=o,n(a,e))return t;var r=l(e);return void 0!==d&&d(t,r)?(a=e,t):(a=e,o=r)}var a,o,s=!1,i=void 0===r?null:r;return[function(){return e(t())},null===i?void 0:function(){return e(i())}]},[t,r,l,d]);var f=a(e,u[0],u[1]);return s(function(){p.hasValue=!0,p.value=f},[f]),c(f),f},z}():M.exports=($||($=1,"production"!==process.env.NODE_ENV&&function(){"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var e=t,r=L(),n="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useSyncExternalStore,o=e.useRef,s=e.useEffect,i=e.useMemo,c=e.useDebugValue;P.useSyncExternalStoreWithSelector=function(e,t,r,l,d){var u=o(null);if(null===u.current){var p={hasValue:!1,value:null};u.current=p}else p=u.current;u=i(function(){function e(e){if(!s){if(s=!0,a=e,e=l(e),void 0!==d&&p.hasValue){var t=p.value;if(d(t,e))return o=t}return o=e}if(t=o,n(a,e))return t;var r=l(e);return void 0!==d&&d(t,r)?(a=e,t):(a=e,o=r)}var a,o,s=!1,i=void 0===r?null:r;return[function(){return e(t())},null===i?void 0:function(){return e(i())}]},[t,r,l,d]);var f=a(e,u[0],u[1]);return s(function(){p.hasValue=!0,p.value=f},[f]),c(f),f},"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),P);var F=k(M.exports);const{useDebugValue:V}=t,{useSyncExternalStoreWithSelector:U}=F;let H=!1;const B=e=>e;const K=e=>{"function"!=typeof e&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t="function"==typeof e?(e=>e?E(e):E)(e):e,r=(e,r)=>function(e,t=B,r){r&&!H&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),H=!0);const n=U(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,r);return V(n),n}(t,e,r);return Object.assign(r,t),r},q=e=>e?K(e):K;var J=Symbol.for("immer-nothing"),W=Symbol.for("immer-draftable"),G=Symbol.for("immer-state"),X="production"!==process.env.NODE_ENV?[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},"This object has been frozen and should not be mutated",function(e){return"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? "+e},"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.","Immer forbids circular references","The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},"Object.defineProperty() cannot be used on an Immer draft","Object.setPrototypeOf() cannot be used on an Immer draft","Immer only supports deleting array indices","Immer only supports setting array indices and the 'length' property",function(e){return`'original' expects a draft, got: ${e}`}]:[];function Y(e,...t){if("production"!==process.env.NODE_ENV){const r=X[e],n="function"==typeof r?r.apply(null,t):r;throw new Error(`[Immer] ${n}`)}throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Z=Object.getPrototypeOf;function Q(e){return!!e&&!!e[G]}function ee(e){return!!e&&(re(e)||Array.isArray(e)||!!e[W]||!!e.constructor?.[W]||ie(e)||ce(e))}var te=Object.prototype.constructor.toString();function re(e){if(!e||"object"!=typeof e)return!1;const t=Z(e);if(null===t)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===te}function ne(e,t){0===ae(e)?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function ae(e){const t=e[G];return t?t.type_:Array.isArray(e)?1:ie(e)?2:ce(e)?3:0}function oe(e,t){return 2===ae(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function se(e,t,r){const n=ae(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function ie(e){return e instanceof Map}function ce(e){return e instanceof Set}function le(e){return e.copy_||e.base_}function de(e,t){if(ie(e))return new Map(e);if(ce(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=re(e);if(!0===t||"class_only"===t&&!r){const t=Object.getOwnPropertyDescriptors(e);delete t[G];let r=Reflect.ownKeys(t);for(let n=0;n<r.length;n++){const a=r[n],o=t[a];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(t[a]={configurable:!0,writable:!0,enumerable:o.enumerable,value:e[a]})}return Object.create(Z(e),t)}{const t=Z(e);if(null!==t&&r)return{...e};const n=Object.create(t);return Object.assign(n,e)}}function ue(e,t=!1){return fe(e)||Q(e)||!ee(e)||(ae(e)>1&&(e.set=e.add=e.clear=e.delete=pe),Object.freeze(e),t&&Object.entries(e).forEach(([e,t])=>ue(t,!0))),e}function pe(){Y(2)}function fe(e){return Object.isFrozen(e)}var he,ye={};function ge(e){const t=ye[e];return t||Y(0,e),t}function me(){return he}function we(e,t){t&&(ge("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ve(e){Se(e),e.drafts_.forEach(Ie),e.drafts_=null}function Se(e){e===he&&(he=e.parent_)}function be(e){return he={drafts_:[],parent_:he,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Ie(e){const t=e[G];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function xe(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return void 0!==e&&e!==r?(r[G].modified_&&(ve(t),Y(4)),ee(e)&&(e=_e(t,e),t.parent_||Ee(t,e)),t.patches_&&ge("Patches").generateReplacementPatches_(r[G].base_,e,t.patches_,t.inversePatches_)):e=_e(t,r,[]),ve(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==J?e:void 0}function _e(e,t,r){if(fe(t))return t;const n=t[G];if(!n)return ne(t,(a,o)=>Ae(e,n,t,a,o,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return Ee(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const t=n.copy_;let a=t,o=!1;3===n.type_&&(a=new Set(t),t.clear(),o=!0),ne(a,(a,s)=>Ae(e,n,t,a,s,r,o)),Ee(e,t,!1),r&&e.patches_&&ge("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Ae(e,t,r,n,a,o,s){if("production"!==process.env.NODE_ENV&&a===r&&Y(5),Q(a)){const s=_e(e,a,o&&t&&3!==t.type_&&!oe(t.assigned_,n)?o.concat(n):void 0);if(se(r,n,s),!Q(s))return;e.canAutoFreeze_=!1}else s&&r.add(a);if(ee(a)&&!fe(a)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;_e(e,a),t&&t.scope_.parent_||"symbol"==typeof n||!Object.prototype.propertyIsEnumerable.call(r,n)||Ee(e,a)}}function Ee(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ue(t,r)}var ke={get(e,t){if(t===G)return e;const r=le(e);if(!oe(r,t))return function(e,t,r){const n=ze(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}(e,r,t);const n=r[t];return e.finalized_||!ee(n)?n:n===Me(e.base_,t)?(je(e),e.copy_[t]=Ce(n,e)):n},has:(e,t)=>t in le(e),ownKeys:e=>Reflect.ownKeys(le(e)),set(e,t,r){const n=ze(le(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const n=Me(le(e),t),s=n?.[G];if(s&&s.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(((a=r)===(o=n)?0!==a||1/a==1/o:a!=a&&o!=o)&&(void 0!==r||oe(e.base_,t)))return!0;je(e),De(e)}var a,o;return e.copy_[t]===r&&(void 0!==r||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty:(e,t)=>(void 0!==Me(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,je(e),De(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const r=le(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty(){Y(11)},getPrototypeOf:e=>Z(e.base_),setPrototypeOf(){Y(12)}},Oe={};function Me(e,t){const r=e[G];return(r?le(r):e)[t]}function ze(e,t){if(!(t in e))return;let r=Z(e);for(;r;){const e=Object.getOwnPropertyDescriptor(r,t);if(e)return e;r=Z(r)}}function De(e){e.modified_||(e.modified_=!0,e.parent_&&De(e.parent_))}function je(e){e.copy_||(e.copy_=de(e.base_,e.scope_.immer_.useStrictShallowCopy_))}ne(ke,(e,t)=>{Oe[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),Oe.deleteProperty=function(e,t){return"production"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&Y(13),Oe.set.call(this,e,t,void 0)},Oe.set=function(e,t,r){return"production"!==process.env.NODE_ENV&&"length"!==t&&isNaN(parseInt(t))&&Y(14),ke.set.call(this,e[0],t,r,e[0])};function Ce(e,t){const r=ie(e)?ge("MapSet").proxyMap_(e,t):ce(e)?ge("MapSet").proxySet_(e,t):function(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:me(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let a=n,o=ke;r&&(a=[n],o=Oe);const{revoke:s,proxy:i}=Proxy.revocable(a,o);return n.draft_=i,n.revoke_=s,i}(e,t);return(t?t.scope_:me()).drafts_.push(r),r}function Te(e){if(!ee(e)||fe(e))return e;const t=e[G];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=de(e,t.scope_.immer_.useStrictShallowCopy_)}else r=de(e,!0);return ne(r,(e,t)=>{se(r,e,Te(t))}),t&&(t.finalized_=!1),r}var Re=new class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,r)=>{if("function"==typeof e&&"function"!=typeof t){const r=t;t=e;const n=this;return function(e=r,...a){return n.produce(e,e=>t.call(this,e,...a))}}let n;if("function"!=typeof t&&Y(6),void 0!==r&&"function"!=typeof r&&Y(7),ee(e)){const a=be(this),o=Ce(e,void 0);let s=!0;try{n=t(o),s=!1}finally{s?ve(a):Se(a)}return we(a,r),xe(n,a)}if(!e||"object"!=typeof e){if(n=t(e),void 0===n&&(n=e),n===J&&(n=void 0),this.autoFreeze_&&ue(n,!0),r){const t=[],a=[];ge("Patches").generateReplacementPatches_(e,n,t,a),r(t,a)}return n}Y(1,e)},this.produceWithPatches=(e,t)=>{if("function"==typeof e)return(t,...r)=>this.produceWithPatches(t,t=>e(t,...r));let r,n;return[this.produce(e,t,(e,t)=>{r=e,n=t}),r,n]},"boolean"==typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"==typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){ee(e)||Y(8),Q(e)&&(e=function(e){Q(e)||Y(10,e);return Te(e)}(e));const t=be(this),r=Ce(e,void 0);return r[G].isManual_=!0,Se(t),r}finishDraft(e,t){const r=e&&e[G];r&&r.isManual_||Y(9);const{scope_:n}=r;return we(n,t),xe(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}r>-1&&(t=t.slice(r+1));const n=ge("Patches").applyPatches_;return Q(e)?n(e,t):this.produce(e,e=>n(e,t))}},Ne=Re.produce;Re.produceWithPatches.bind(Re),Re.setAutoFreeze.bind(Re),Re.setUseStrictShallowCopy.bind(Re),Re.applyPatches.bind(Re),Re.createDraft.bind(Re),Re.finishDraft.bind(Re);const Le=e=>(t,r,n)=>(n.setState=(e,r,...n)=>{const a="function"==typeof e?Ne(e):e;return t(a,r,...n)},e(n.setState,r,n));function $e(e,t){let r={...e};return t.changes.forEach(e=>{let t=r;for(let r=0;r<e.path.length-1;r++)t=t[e.path[r]];t[e.path[e.path.length-1]]=e.oldValue}),r}const Pe=q()(Le(o(l((e,t)=>({spaces:{},activeSpaceId:null,openSpaceIds:[],errors:[],pilotMode:"AUTO",addSpace:r=>{if(!r.name)return e(e=>{e.errors=["Space name cannot be empty."]}),void console.error("Validation failed for space:",t().errors);const n=b(),a={id:n,name:r.name,description:r.description??"",color:r.color??"#000000",sharedState:{pastDiffs:[],futureDiffs:[],...r.sharedState||{}}};return e(e=>{e.spaces[n]=a,e.openSpaceIds.push(n),e.errors=[]}),n},removeSpace:t=>{e(e=>{delete e.spaces[t],e.activeSpaceId===t&&(e.activeSpaceId=null),e.openSpaceIds=e.openSpaceIds.filter(e=>e!==t),e.errors=[]})},setActiveSpace:t=>{e(e=>{null===t||e.spaces[t]?e.activeSpaceId=t:console.warn(`Attempted to set active space to non-existent ID: ${t}`),e.errors=[]})},setPilotMode:t=>{e(e=>{e.pilotMode=t})},openSpace:t=>{e(e=>{e.spaces[t]&&!e.openSpaceIds.includes(t)&&e.openSpaceIds.push(t)})},closeSpace:t=>{e(e=>{e.openSpaceIds=e.openSpaceIds.filter(e=>e!==t),e.activeSpaceId===t&&(e.activeSpaceId=e.openSpaceIds[e.openSpaceIds.length-1]||null)})},updateSpace:t=>{e(e=>{const r=e.spaces[t.id];if(r){if(""===t.name)return e.errors=["Space name cannot be empty."],void console.error("Validation failed for space update:",e.errors);const{id:n,...a}=t;e.spaces[n]={...r,...a},e.errors=[]}else e.errors=[`Space with ID ${t.id} not found for update.`],console.error("Update failed:",e.errors)})},updateSpaceGenericSharedState:r=>{const{spaceId:n,changes:a}=r,o=t().spaces[n];if(!o)return e(e=>{e.errors=[`Space with ID ${r.spaceId} not found for shared state update.`]}),void console.error("Shared state update failed: Space not found");const s=o.sharedState,i=a.actionType||"UPDATE_SHARED_STATE",c=a.payload||{};e(e=>{const t=e.spaces[n];if(t){const{actionType:r,payload:n,...o}=a;t.sharedState={...t.sharedState,...o},e.errors=[]}});const l=t().spaces[n]?.sharedState;if(!l)return void console.error("Shared state update failed: Space disappeared after update?");const d=function(e,t){const r=[];return function e(t,n,a){if(n!==a)if(typeof n==typeof a)if("object"==typeof n&&null!==n&&null!==a){const o=n,s=a,i=Object.keys(o),c=Object.keys(s);i.forEach(e=>{c.includes(e)||r.push({path:[...t,e],oldValue:o[e],newValue:void 0})}),c.forEach(n=>{i.includes(n)?e([...t,n],o[n],s[n]):r.push({path:[...t,n],oldValue:void 0,newValue:s[n]})})}else r.push({path:t,oldValue:n,newValue:a});else r.push({path:t,oldValue:n,newValue:a})}([],e,t),r}(s,l);Array.isArray(d)&&d.length>0&&e(e=>{const t=e.spaces[n];t&&(t.sharedState.pastDiffs||(t.sharedState.pastDiffs=[]),t.sharedState.pastDiffs.push({timestamp:Date.now(),actionType:i,payload:c,changes:d}),t.sharedState.futureDiffs=[])})},clearErrors:()=>{e(e=>{e.errors=[]})},undoSharedState:t=>{e(e=>{const r=e.spaces[t];if(!r?.sharedState?.pastDiffs?.length)return;const n=r.sharedState.pastDiffs.pop(),a=$e(r.sharedState,n);r.sharedState=a,r.sharedState.futureDiffs||(r.sharedState.futureDiffs=[]),r.sharedState.futureDiffs.push(n)})},redoSharedState:t=>{e(e=>{const r=e.spaces[t];if(!r?.sharedState?.futureDiffs?.length)return;const n=r.sharedState.futureDiffs.pop(),a=(o=n,{...o,changes:o.changes.map(e=>({...e,oldValue:e.newValue,newValue:e.oldValue}))});var o;const s=$e(r.sharedState,a);r.sharedState=s,r.sharedState.pastDiffs||(r.sharedState.pastDiffs=[]),r.sharedState.pastDiffs.push(n)})},getSpaceById:e=>t().spaces[e],getAllSpaces:()=>t().spaces,getActiveSpace:()=>{const e=t();return e.activeSpaceId?e.spaces[e.activeSpaceId]:null},getActiveSpaceId:()=>t().activeSpaceId,getOpenSpaces:()=>{const e=t();return e.openSpaceIds.map(t=>e.spaces[t]).filter(e=>void 0!==e)},getSpaceErrors:()=>t().errors,getPilotMode:()=>t().pilotMode}),{name:"karmyc-space-store",partialize:e=>{const t={};for(const r in e.spaces){const{sharedState:n,...a}=e.spaces[r],{pastDiffs:o,futureDiffs:s,...i}=n??{};t[r]={...a,sharedState:i}}const{activeSpaceId:r}=e;return{spaces:t,activeSpaceId:r}},merge:(e,t)=>{const r=e,n={},a=r?.spaces??{},o=t.spaces,s=new Set([...Object.keys(a),...Object.keys(o)]);for(const e of s){const t=a[e],r=o[e];if(!t&&!r)continue;const s=r?.sharedState??{},i=t?.sharedState??{};n[e]={id:t?.id??r?.id??e,name:t?.name??r?.name??`Space ${e}`,description:t?.description??r?.description??"",color:t?.color??r?.color??"#0000ff",sharedState:{...s,...i,pastDiffs:[],futureDiffs:[]}},n[e].color||(n[e].color="#000000")}return{...t,activeSpaceId:r?.activeSpaceId??t.activeSpaceId,spaces:n,errors:[]}}})))),Fe=e=>{const t=[];return e.id||t.push("Missing ID"),e.type||t.push("Missing type"),e.state||t.push("Missing state"),{isValid:0===t.length,errors:t}},Ve=e=>{const t=[];return"number"!=typeof e.x&&t.push("Position X must be a number"),"number"!=typeof e.y&&t.push("Position Y must be a number"),isNaN(e.x)&&t.push("Position X is NaN"),isNaN(e.y)&&t.push("Position Y is NaN"),{isValid:0===t.length,errors:t}},Ue=e=>{const t=[];return e.id||t.push("Missing ID"),e.label||t.push("Missing label"),e.actionId||t.push("Missing actionId"),{isValid:0===t.length,errors:t}},He=e=>t=>{let r="";return e(e=>{const n=e.screens[e.activeScreenId]?.areas;if(!n)return;const a=t.id||b();let o;if(t.type){o=(x._roleMap||{})[t.type]}const s={...t,id:a,role:o};if(o===A.LEAD&&!s.spaceId){const e=Pe.getState().spaces,r=Object.keys(e);if(r.length>0){const e=Pe.getState().activeSpaceId;s.spaceId=e||r[0]}else{const e=Pe.getState().addSpace({name:`Space for ${t.type}`,sharedState:{}});e&&(s.spaceId=e)}}const i=Fe(s);i.isValid?(n.areas[a]=s,n._id+=1,n.errors=[],r=a,e.lastUpdated=Date.now()):(n.errors=i.errors,console.error("Validation failed for area:",i.errors))}),r};const Be=new class{constructor(){this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}publish(e){this.listeners.forEach(t=>t(e))}},Ke=e=>t=>{e(e=>{const r=e.screens[e.activeScreenId]?.areas;if(!r)return;if(Object.keys(r.areas).length<=1)console.warn("Cannot remove the last area of a screen");else{delete r.areas[t],delete r.layout[t];for(const e in r.layout){const n=r.layout[e];if("area_row"===n.type){const a=n,o=a.areas.findIndex(e=>e.id===t);if(-1!==o)if(a.areas.splice(o,1),"stack"===a.orientation){if(a.activeTabId===t&&(a.activeTabId=a.areas[0]?.id||void 0),0===a.areas.length)delete r.layout[e];else if(1===a.areas.length){const t=Object.keys(r.layout).find(t=>{const n=r.layout[t];return"area_row"===n.type&&n.areas.some(t=>t.id===e)});if(t){const n=r.layout[t],o=n.areas.findIndex(t=>t.id===e);-1!==o&&(n.areas[o]={...a.areas[0]}),delete r.layout[e]}else r.rootId===e&&(r.rootId=a.areas[0].id,delete r.layout[e])}}else 0===a.areas.length&&delete r.layout[e]}}r.rootId===t&&(r.rootId=null),r.activeAreaId===t&&(r.activeAreaId=null),r.errors=[],e.lastUpdated=Date.now(),Be.publish({type:"cleanup",areaId:t})}})},qe=(e,t,r)=>e*(1-r)+t*r,Je=(e,t,r)=>Math.min(t,Math.max(e,r)),We=e=>e instanceof Ge?e:"number"==typeof e.left?new Ge(e.left,e.top):new Ge(e.x,e.y);class Ge{static new(e,t){return"number"==typeof e?new Ge(e,t):"number"==typeof e.left?new Ge(e.left,e.top):new Ge(e.x,e.y)}static fromEvent(e){return new Ge(e.clientX,e.clientY)}static dot(e,t){const r=We(e),n=We(t);return r.x*n.x+r.y*n.y}constructor(e,t){"number"==typeof e?(this._x=e,this._y=t):(this._x=e.x,this._y=e.y),this.atOrigin=0===this.x&&0===this.y,this.apply=this.apply.bind(this)}set x(e){this._x=e,this.atOrigin=0===this.x&&0===this.y}get x(){return this._x}set y(e){this._y=e,this.atOrigin=0===this.x&&0===this.y}get y(){return this._y}add(e){const t=We(e);return t.atOrigin?this:new Ge(this.x+t.x,this.y+t.y)}addX(e){return new Ge(this.x+e,this.y)}addY(e){return new Ge(this.x,this.y+e)}sub(e){const t=We(e);return t.atOrigin?this:new Ge(this.x-t.x,this.y-t.y)}subX(e){return new Ge(this.x-e,this.y)}subY(e){return new Ge(this.x,this.y-e)}subXY(e,t){return new Ge(this.x-e,this.y-t)}scale(e,t=Ge.new(0,0)){if(1===e)return this;const r=We(t);return new Ge(r.x+(this.x-r.x)*e,r.y+(this.y-r.y)*e)}scaleX(e,t=Ge.new(0,0)){if(1===e)return this;const r=We(t);return new Ge(r.x+(this.x-r.x)*e,this.y)}scaleY(e,t=Ge.new(0,0)){if(1===e)return this;const r=We(t);return new Ge(this.x,r.y+(this.y-r.y)*e)}scaleXY(e,t,r=Ge.new(0,0)){if(1===e&&1===t)return this;const n=We(r);return new Ge(n.x+(this.x-n.x)*e,n.y+(this.y-n.y)*t)}rotate(e,t=Ge.new(0,0)){if(0===e)return this;const r=We(t),n=this.x-r.x,a=this.y-r.y,o=Math.cos(e),s=Math.sin(e),i=n*s+a*o;return new Ge(n*o-a*s+r.x,i+r.y)}multiplyMat2(e,t=Ge.new(0,0)){const r=We(t);return e.multiplyVec2(this.sub(r)).add(r)}copy(){return new Ge(this.x,this.y)}lerp(e,t){const r=We(e);return new Ge(qe(this.x,r.x,t),qe(this.y,r.y,t))}round(){return Ge.new(Math.round(this.x),Math.round(this.y))}apply(e){return We(e(this))}length(){return Math.hypot(this.x,this.y)}eq(e){const t=We(e);return t.x===this.x&&t.y===this.y}toJSON(){return{x:this.x,y:this.y,__objectType:"vec2"}}}Ge.ORIGIN=Ge.new(0,0);const Xe=(e,t,r,n)=>{const a=n?Ge.new(e.x+n.x/15,e.y+n.y/15):e;let o,s,i,c=1/0;return Object.entries(r).forEach(([e,r])=>{const n=t.layout[e];if(!n||"area"!==n.type&&("area_row"!==n.type||"stack"!==n.orientation))return;if(a.x>=r.left&&a.x<=r.left+r.width&&a.y>=r.top&&a.y<=r.top+r.height)return void("area_row"===n.type&&"stack"===n.orientation?o=e:"area"===n.type&&(s=e));const l=Math.abs(a.x-r.left),d=Math.abs(a.x-(r.left+r.width)),u=Math.abs(a.y-r.top),p=Math.abs(a.y-(r.top+r.height)),f=Math.min(l,d,u,p);f<c&&(c=f,i=e)}),o||s||i};function Ye(e,t){const r=t.x-e.left,n=t.y-e.top,a=r,o=e.width-r,s=n,i=e.height-n,c=e.width/2,l=e.height/2,d=Math.abs(r-c),u=Math.abs(n-l),p=.3*e.width,f=.3*e.height;if(d<p&&u<f)return"stack";const h=Math.min(a,o,s,i);let y;return y=h===a?"left":h===o?"right":h===s?"top":"bottom",y}const Ze=30,Qe=32;let et=null,tt=0,rt=0,nt=0;const at=()=>{if("undefined"==typeof window||"undefined"==typeof document)return{top:0,left:0,width:800,height:600};const e={top:0,left:0,height:Math.floor(window.document.querySelector(".area-root")?.getBoundingClientRect().height||0),width:Math.floor(window.document.querySelector(".area-root")?.getBoundingClientRect().width||0)},t=Date.now();if(window.__AREA_RESIZING__){if(nt||(nt=t,et||(et={...e},tt=e.width,rt=e.height)),et)return et}else nt&&t-nt>500&&(nt=0);const r=Math.abs(e.width-tt),n=Math.abs(e.height-rt),a=r>5||n>5;return window.__AREA_RESIZING__||!a||nt||(et={...e},tt=e.width,rt=e.height),et||e};let ot={};const st={lastCalculation:0,totalCalculations:0,failedIds:new Set,reportedProblems:new Set,reset(){this.failedIds.clear(),this.reportedProblems.clear()}};setInterval(()=>{Date.now()-st.lastCalculation>6e4&&st.reset()},6e4);let it={width:0,height:0};const ct=(e,t,r)=>{if(!t)return{};const n=JSON.parse(JSON.stringify(e));if(st.lastCalculation=Date.now(),st.totalCalculations++,!r||r.width<=0||r.height<=0){if(console.error("Invalid viewport dimensions",r),!(it.width>0&&it.height>0))return{};console.warn("Using last valid viewport dimensions"),r={...r,width:it.width,height:it.height}}else it={width:r.width,height:r.height};if(!e||0===Object.keys(e).length)return console.error("Empty layout provided to computeAreaToViewport"),{};if(!t||!n[t])return console.error(`Invalid rootId: ${t} - not found in layout`,e),{};const a={},o=new Set,s=st.reportedProblems;function i(e,t){e&&t?o.has(e.id)||(e.type||(console.warn(`Area ${e.id} has no type, defaulting to 'area'`),e.type="area"),t.width<=0||t.height<=0?console.warn(`Area ${e.id} has invalid content area size: ${t.width}x${t.height}`):(o.add(e.id),a[e.id]={...t})):console.error("Invalid area or contentArea in computeArea",{area:e,contentArea:t})}Object.entries(n).forEach(([e,t])=>{t?"area_row"!==t.type||t.areas&&Array.isArray(t.areas)||console.error(`Area row ${e} has invalid areas property`,t):console.error(`Invalid area definition for id ${e}`,t)});const c=n[t];"area"===c.type?i(c,r):"area_row"===c.type&&function e(t,r){if(!t||!r||o.has(t.id)){if(t&&o.has(t.id))return;if(!t)return void console.error("computeRow: Invalid row");if(!r)return void console.error("computeRow: Invalid contentArea for row",t.id)}if(o.add(t.id),t.areas&&Array.isArray(t.areas)||(console.error("Row without proper areas array in computeRow",{rowId:t.id,areas:t.areas}),t.areas=[]),(r.width<=0||r.height<=0)&&(console.error("ContentArea with invalid dimensions in computeRow",{rowId:t.id,contentArea:r}),r={...r,width:Math.max(r.width,10),height:Math.max(r.height,10)},console.warn("Corrected contentArea to minimum size for row",t.id,r)),0===t.areas.length)return console.warn("Row with empty areas array in computeRow, skipping children but assigning viewport",{rowId:t.id}),void(a[t.id]={...r});a[t.id]={...r};const c=t.areas.map(e=>e.id).filter(e=>!n[e]);c.length>0&&c.forEach(e=>{s.has(`auto_creating_${e}`)||(console.warn(`Auto-creating area ${e} referenced in row ${t.id}`),s.add(`auto_creating_${e}`)),n[e]={type:"area",id:e}});const l=.05;let d=0;t.areas.forEach((e,r)=>{e.size>1&&(e.size=e.size/100),"number"!=typeof e.size||isNaN(e.size)||e.size<=0?(0===e.size&&d++,s.has(`${t.id}_${r}_size`)||(console.warn(`Invalid size for area ${e.id}: ${e.size}, defaulting to 1/${t.areas.length}`),s.add(`${t.id}_${r}_size`)),e.size=1/t.areas.length):e.size<l&&(s.has(`${t.id}_${r}_min_size`)||(console.warn(`Area ${e.id} has very small size: ${e.size}, setting to minimum 0.05`),s.add(`${t.id}_${r}_min_size`)),e.size=l)});const u=t.areas.reduce((e,t)=>e+(t.size||0),0);if(0===u||d===t.areas.length){console.warn(`All areas in row ${t.id} have zero size, setting equal distribution`);const e=1/t.areas.length;t.areas.forEach(t=>{t.size=e})}else if(Math.abs(u-1)>.001){const e=1/u;t.areas.forEach(t=>{t.size=t.size*e})}const p=t.areas.reduce((e,t)=>e+(t.size||0),0);if(Math.abs(p-1)>.001){console.error(`Failed to normalize sizes in row ${t.id}: final total=${p}`);const e=1/t.areas.length;t.areas.forEach(t=>{t.size=e})}let f=r.left,h=r.top,y=0,g=0;for(let a=0;a<t.areas.length;a++){const o=t.areas[a];if(!o||!o.id)continue;const s=o.id,c=n[s],l=a===t.areas.length-1;if(!c)continue;let d,u;"horizontal"===t.orientation?(u=r.height,l?d=Math.max(0,r.width-y):(d=Math.max(0,Math.floor(o.size*r.width)),y+=d)):(d=r.width,l?u=Math.max(0,r.height-g):(u=Math.max(0,Math.floor(o.size*r.height)),g+=u));const p={left:f,top:h,width:d,height:u};try{"area"===c.type?i(c,p):"area_row"===c.type&&e(c,p)}catch(e){console.error(`[computeRow RECURSE_ERROR ${a}] Error computing viewport for area ${s}:`,e)}"horizontal"===t.orientation?f+=d:h+=u}}(c,r);const l=Object.keys(n).filter(e=>!a[e]);return l.length>0&&l.forEach(e=>{a[e]||(st.failedIds.add(e),a[e]={left:0,top:0,width:100,height:100})}),a},lt=(e,t)=>r=>{e(e=>{const n=e.screens[e.activeScreenId]?.areas;if(!n)return;const a=n.areaToOpen;if(a)try{const{position:o,area:s}=a,i=s.state?.sourceId,c=i||b(),l=new Ge(o.x,o.y);if(!i){if(n.areas[c])return console.error(`finalizeAreaPlacement: ID conflict for new area ${c}`),void(n.areaToOpen=null);n.areas[c]={id:c,type:s.type,state:s.state},n._id+=1}const d=at(),h=ct(n.layout,n.rootId||"",d);let y=r?.targetId,g=r?.placement;if(!y){const e=new Ge(300,200);y=Xe(l,n,h,e)}if(!y)return i||delete n.areas[c],void(n.areaToOpen=null);const m=h[y];if(!m)return console.error(`[areaStore] finalizeAreaPlacement: Viewport not found for target ${y}. Bailing out.`),i||delete n.areas[c],void(n.areaToOpen=null);g||(g=Ye(m,l)),n.areaToOpen=null;let w=null,v=null;if(i){const e=u(n.layout),t=e[i];if(w=t,t&&"area_row"===n.layout[t]?.type){const r=n.layout[t],a=r.areas.findIndex(e=>e.id===i);if(-1!==a)if(r.areas.splice(a,1),0===r.areas.length){delete n.layout[t];p(n,e[t])}else{const e=r.areas.reduce((e,t)=>e+(t.size||0),0);if(e>0){const t=1/e;r.areas.forEach(e=>{e.size=(e.size||0)*t})}1===r.areas.length&&(v=r.areas[0].id),p(n,t)}}else n.layout[i]&&delete n.layout[i];i!==c&&delete n.areas[i],n.rootId===i&&(n.rootId=null)}y&&y===w&&v&&!n.layout[y]&&(y=v);let S="stack"===g?"horizontal":"top"===g||"bottom"===g?"vertical":"horizontal";if("stack"===g){let e=y,r=n.areas[e];if("area_row"===n.layout[e]?.type&&"stack"===n.layout[e].orientation)r=n.areas[e];else if(!r&&"area_row"===n.layout[e]?.type){const t=f(n.layout,e);t&&(e=t,r=n.areas[e])}const a=n.areas[c];if(!a||!r)return void console.error("[finalizeAreaPlacement] Stack creation failed: Source or target area not found.");if(!(!1!==t().options?.allowStackMixedRoles)){const e=a.role||a.type&&x._roleMap?.[a.type],t=r.role||r.type&&x._roleMap?.[r.type];if(e&&t&&e!==t)return void(n.errors=["Impossible de stacker des areas de rôles différents (option de configuration)"])}const o=`row-${n._id+1}`;n._id+=1;const s={type:"area_row",id:o,orientation:"stack",areas:[{id:e,size:.5},{id:c,size:.5}],activeTabId:e},i=u(n.layout)[e];if(i&&"area_row"===n.layout[i]?.type){const t=n.layout[i],r=t.areas.findIndex(t=>t.id===e);if(-1!==r){const e=t.areas[r].size;t.areas[r]={id:o,size:e}}}else n.rootId===e&&(n.rootId=o);n.layout[o]=s,n.activeAreaId=e}else{const e=u(n.layout)[y],t=e?n.layout[e]:null,r=b();if(n.layout[c]||(n.layout[c]={type:"area",id:c}),t&&"area_row"===t.type){const a=t.areas.findIndex(e=>e.id===y);if(-1===a)return void console.error(`[finalizeAreaPlacement] Target ${y} not found in parent ${e}`);if(t.orientation===S){const e=a+("bottom"===g||"right"===g?1:0);let r=[];r=0===e?[t.areas[0]]:e===t.areas.length?[t.areas[t.areas.length-1]]:[t.areas[e-1],t.areas[e]];const n=r.reduce((e,t)=>e+(t.size||0),0),o=n/(r.length+1);r.forEach(e=>e.size=o),t.areas.splice(e,0,{id:c,size:o})}else{n._id+=1;const e={type:"area_row",id:r,orientation:S,areas:"bottom"===g||"right"===g?[{id:y,size:.5},{id:c,size:.5}]:[{id:c,size:.5},{id:y,size:.5}]};n.layout[r]=e,t.areas[a]={id:r,size:t.areas[a].size}}}else{n._id+=1;const e={type:"area_row",id:r,orientation:S,areas:"bottom"===g||"right"===g?[{id:y,size:.5},{id:c,size:.5}]:[{id:c,size:.5},{id:y,size:.5}]};n.layout[r]=e,n.rootId=r,n.layout[y]||(n.layout[y]={type:"area",id:y})}}if(n.areas[c]&&(e.screens[e.activeScreenId].areas.activeAreaId=c,n.areas[c].role===A.LEAD&&(e.screens[e.activeScreenId].areas.lastLeadAreaId=c)),n.rootId&&d&&d.width>0&&d.height>0){const e=ct(n.layo