UNPKG

@gamesberry/karmyc-core

Version:

A flexible and powerful layout management system for React applications

28 lines 134 kB
import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import n,{useRef as a,useState as o,useEffect as i,useMemo as s,useCallback as c,forwardRef as l,createElement as d}from"react";import{ControlledMenu as u,SubMenu as p,MenuItem as f}from"@szhsin/react-menu";const h=new Map,y=e=>{const t=h.get(e);return t?Object.fromEntries(Object.entries(t.stores).map(([e,t])=>[e,t.getState()])):{}},g=(e,t={})=>(r,n,a)=>{const{enabled:o,anonymousActionType:i,store:s,...c}=t;let l;try{l=(null!=o?o:"production"!==(import.meta.env?import.meta.env.MODE:void 0))&&window.__REDUX_DEVTOOLS_EXTENSION__}catch(e){}if(!l)return"production"!==(import.meta.env?import.meta.env.MODE:void 0)&&o&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),e(r,n,a);const{connection:d,...u}=((e,t,r)=>{if(void 0===e)return{type:"untracked",connection:t.connect(r)};const n=h.get(r.name);if(n)return{type:"tracked",store:e,...n};const a={connection:t.connect(r),stores:{}};return h.set(r.name,a),{type:"tracked",store:e,...a}})(s,l,c);let p=!0;a.setState=(e,t,o)=>{const l=r(e,t);if(!p)return l;const u=void 0===o?{type:i||"anonymous"}:"string"==typeof o?{type:o}:o;return void 0===s?(null==d||d.send(u,n()),l):(null==d||d.send({...u,type:`${s}/${u.type}`},{...y(c.name),[s]:a.getState()}),l)};const f=(...e)=>{const t=p;p=!1,r(...e),p=t},g=e(a.setState,n,a);if("untracked"===u.type?null==d||d.init(g):(u.stores[u.store]=a,null==d||d.init(Object.fromEntries(Object.entries(u.stores).map(([e,t])=>[e,e===u.store?g:t.getState()])))),a.dispatchFromDevtools&&"function"==typeof a.dispatch){let e=!1;const t=a.dispatch;a.dispatch=(...r)=>{"production"===(import.meta.env?import.meta.env.MODE:void 0)||"__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 d.subscribe(e=>{var t;switch(e.type){case"ACTION":return"string"!=typeof e.payload?void console.error("[zustand devtools middleware] Unsupported action format"):m(e.payload,e=>{if("__setState"===e.type){if(void 0===s)return void f(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[s];if(null==t)return;return void(JSON.stringify(a.getState())!==JSON.stringify(t)&&f(t))}a.dispatchFromDevtools&&"function"==typeof a.dispatch&&a.dispatch(e)});case"DISPATCH":switch(e.payload.type){case"RESET":return f(g),void 0===s?null==d?void 0:d.init(a.getState()):null==d?void 0:d.init(y(c.name));case"COMMIT":return void 0===s?void(null==d||d.init(a.getState())):null==d?void 0:d.init(y(c.name));case"ROLLBACK":return m(e.state,e=>{if(void 0===s)return f(e),void(null==d||d.init(a.getState()));f(e[s]),null==d||d.init(y(c.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return m(e.state,e=>{void 0!==s?JSON.stringify(a.getState())!==JSON.stringify(e[s])&&f(e[s]):f(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 f(void 0===s?n:n[s]),void(null==d||d.send(null,r))}case"PAUSE_RECORDING":return p=!p}return}}),g},m=(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 v(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 w=e=>t=>{try{const r=e(t);return r instanceof Promise?r:{then:e=>w(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>w(t)(e)}}},S=(e,t)=>"getStorage"in t||"serialize"in t||"deserialize"in t?("production"!==(import.meta.env?import.meta.env.MODE:void 0)&&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},i=!1;const s=new Set,c=new Set;let l;try{l=o.getStorage()}catch(e){}if(!l)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 d=w(o.serialize),u=()=>{const e=o.partialize({...n()});let t;const r=d({state:e,version:o.version}).then(e=>l.setItem(o.name,e)).catch(e=>{t=e});if(t)throw t;return r},p=a.setState;a.setState=(e,t)=>{p(e,t),u()};const f=e((...e)=>{r(...e),u()},n,a);let h;const y=()=>{var e;if(!l)return;i=!1,s.forEach(e=>e(n()));const t=(null==(e=o.onRehydrateStorage)?void 0:e.call(o,n()))||void 0;return w(l.getItem.bind(l))(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 h=o.merge(e,null!=(t=n())?t:f),r(h,!0),u()}).then(()=>{null==t||t(h,void 0),i=!0,c.forEach(e=>e(h))}).catch(e=>{null==t||t(void 0,e)})};return a.persist={setOptions:e=>{o={...o,...e},e.getStorage&&(l=e.getStorage())},clearStorage:()=>{null==l||l.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>i,onHydrate:e=>(s.add(e),()=>{s.delete(e)}),onFinishHydration:e=>(c.add(e),()=>{c.delete(e)})},y(),h||f})(e,t)):((e,t)=>(r,n,a)=>{let o={storage:v(()=>localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},i=!1;const s=new Set,c=new Set;let l=o.storage;if(!l)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 d=()=>{const e=o.partialize({...n()});return l.setItem(o.name,{state:e,version:o.version})},u=a.setState;a.setState=(e,t)=>{u(e,t),d()};const p=e((...e)=>{r(...e),d()},n,a);let f;a.getInitialState=()=>p;const h=()=>{var e,t;if(!l)return;i=!1,s.forEach(e=>{var t;return e(null!=(t=n())?t:p)});const a=(null==(t=o.onRehydrateStorage)?void 0:t.call(o,null!=(e=n())?e:p))||void 0;return w(l.getItem.bind(l))(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,i]=e;if(f=o.merge(i,null!=(t=n())?t:p),r(f,!0),a)return d()}).then(()=>{null==a||a(f,void 0),f=n(),i=!0,c.forEach(e=>e(f))}).catch(e=>{null==a||a(void 0,e)})};return a.persist={setOptions:e=>{o={...o,...e},e.storage&&(l=e.storage)},clearStorage:()=>{null==l||l.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>h(),hasHydrated:()=>i,onHydrate:e=>(s.add(e),()=>{s.delete(e)}),onFinishHydration:e=>(c.add(e),()=>{c.delete(e)})},o.skipHydration||h(),f||p})(e,t),b=e=>t=>{e(e=>{const r=e.screens[e.activeScreenId]?.areas;r&&r.joinPreview!==t&&(r.joinPreview=t,e.lastUpdated=Date.now())})};function I(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 _(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,i=I(e.layout)[t];if(i&&"area_row"===e.layout[i]?.type){const r=e.layout[i],n=r.areas.findIndex(e=>e.id===t);if(-1===n)return void console.error(`[simplifyLayoutNodeIfNeeded] Cleanup Error: Row ${t} not found in parent ${i}.`);{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 x(e,t){const r=e[t];return r?"area"===r.type?t:"area_row"===r.type?0===r.areas.length?null:x(e,r.areas[0].id):null:null}const A=e=>t=>{let r=null;return e(e=>{const n=e.screens[e.activeScreenId]?.areas;if(!n)return;const{areaIdToSplit:a,parentRowId:o,horizontal:i}=t,s=n.layout[a];if("area_row"===s.type&&"stack"===s.orientation){const e=s.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:i?"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 u=n.areas[a];if(n.areas[l]={id:l,type:u?.type||s.type,state:{...u?.state},spaceId:u?.spaceId},n.layout[l]={type:"area",id:l},n.layout[d])return void console.error(`splitArea: ID conflict for new row ${d}`);const p={id:d,type:"area_row",orientation:i?"horizontal":"vertical",areas:[{id:a,size:.5},{id:l,size:.5}]};n.layout[d]=p;let f=.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(f=e.areas[t].size??.5,e.orientation===p.orientation){const n=p.areas.map(e=>({id:e.id,size:(e.size??.5)*f}));e.areas.splice(t,1,...n),r={newRowId:o,separatorIndex:t+1}}else e.areas[t]={id:d,size:f},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];_(n,t);if(t=I(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 i=r,s=a.areas[e].size??1/a.areas.length,c=i.areas.reduce((e,t)=>e+(t.size??0),0)||1,l=i.areas.map(e=>({id:e.id,size:(e.size??1/i.areas.length)*s/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},O=(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],i=e.areas[a];if(!o||!i)throw new Error(`Missing areas: source=${o}, target=${i}`);const s=(o.size||1)+(i.size||1);if(2===e.areas.length){return{area:{type:"area",id:o.id},removedAreaId:i.id}}const c=[...e.areas];c[a]={id:o.id,size:s},c.splice(n,1);return{area:{...e,areas:c},removedAreaId:i.id}},E=e=>t=>{e(e=>{const r=e.screens[e.activeScreenId]?.areas;if(!r)return;const{sourceAreaId:n,targetAreaId:a}=t,{parentRow:o,sourceIndex:i,targetIndex:s}=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=I(r.layout)[c],d=JSON.parse(JSON.stringify(o)),u=s>i?1:-1,p=i;try{const e=O(d,p,u),{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&&_(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()})},k=[];for(let e=0;e<256;++e)k.push((e+256).toString(16).slice(1));let z;const D=new Uint8Array(16);var M={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function T(e,t,r){if(M.randomUUID&&!e)return M.randomUUID();const n=(e=e||{}).random??e.rng?.()??function(){if(!z){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");z=crypto.getRandomValues.bind(crypto)}return z(D)}();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(k[e[t+0]]+k[e[t+1]]+k[e[t+2]]+k[e[t+3]]+"-"+k[e[t+4]]+k[e[t+5]]+"-"+k[e[t+6]]+k[e[t+7]]+"-"+k[e[t+8]]+k[e[t+9]]+"-"+k[e[t+10]]+k[e[t+11]]+k[e[t+12]]+k[e[t+13]]+k[e[t+14]]+k[e[t+15]]).toLowerCase()}(n)}const C=new Map,N={registerComponent:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,component:t})},registerInitialState:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,initialState:t})},registerDisplayName:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,displayName:t})},registerIcon:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,icon:t})},registerDefaultSize:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,defaultSize:t})},registerSupportedActions:(e,t)=>{const r=C.get(e)||{};C.set(e,{...r,supportedActions:t})},getComponent:e=>C.get(e)?.component,getInitialState:e=>C.get(e)?.initialState||{},getDisplayName:e=>C.get(e)?.displayName||e,getIcon:e=>C.get(e)?.icon,getDefaultSize:e=>C.get(e)?.defaultSize,getSupportedActions:e=>C.get(e)?.supportedActions,getRegisteredTypes:()=>new Set(Array.from(C.keys())),unregisterAreaType:e=>{C.delete(e)}};var L;!function(e){e[e.CRITICAL=1e3]="CRITICAL",e[e.HIGH=800]="HIGH",e[e.NORMAL=500]="NORMAL",e[e.LOW=200]="LOW",e[e.BACKGROUND=100]="BACKGROUND"}(L||(L={}));const $={LEAD:"LEAD",FOLLOW:"FOLLOW",SELF:"SELF"},j=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:()=>i,subscribe:e=>(r.add(e),()=>r.delete(e)),destroy:()=>{"production"!==(import.meta.env?import.meta.env.MODE:void 0)&&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()}},i=t=e(n,a,o);return o};function R(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var P,F={exports:{}},V={},U={exports:{}},H={};var B,K,J,q={}; /** * @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 W(){return K||(K=1,"production"===process.env.NODE_ENV?U.exports=function(){if(P)return H;P=1;var e=n,t="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},r=e.useState,a=e.useEffect,o=e.useLayoutEffect,i=e.useDebugValue;function s(e){var r=e.getSnapshot;e=e.value;try{var n=r();return!t(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 n=t(),c=r({inst:{value:n,getSnapshot:t}}),l=c[0].inst,d=c[1];return o(function(){l.value=n,l.getSnapshot=t,s(l)&&d({inst:l})},[e,n,t]),a(function(){return s(l)&&d({inst:l}),e(function(){s(l)&&d({inst:l})})},[e]),i(n),n};return H.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:c,H}():U.exports=(B||(B=1,"production"!==process.env.NODE_ENV&&function(){function e(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(e){return!0}}"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var t=n,r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=t.useState,o=t.useEffect,i=t.useLayoutEffect,s=t.useDebugValue,c=!1,l=!1,d="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(n,d){c||void 0===t.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();r(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 i(function(){f.value=u,f.getSnapshot=d,e(f)&&h({inst:f})},[n,u,d]),o(function(){return e(f)&&h({inst:f}),n(function(){e(f)&&h({inst:f})})},[n]),s(u),u};q.useSyncExternalStore=void 0!==t.useSyncExternalStore?t.useSyncExternalStore:d,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()),q)),U.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 G,X={}; /** * @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?F.exports=function(){if(J)return V;J=1;var e=n,t=W(),r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=t.useSyncExternalStore,o=e.useRef,i=e.useEffect,s=e.useMemo,c=e.useDebugValue;return V.useSyncExternalStoreWithSelector=function(e,t,n,l,d){var u=o(null);if(null===u.current){var p={hasValue:!1,value:null};u.current=p}else p=u.current;u=s(function(){function e(e){if(!i){if(i=!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,r(a,e))return t;var n=l(e);return void 0!==d&&d(t,n)?(a=e,t):(a=e,o=n)}var a,o,i=!1,s=void 0===n?null:n;return[function(){return e(t())},null===s?void 0:function(){return e(s())}]},[t,n,l,d]);var f=a(e,u[0],u[1]);return i(function(){p.hasValue=!0,p.value=f},[f]),c(f),f},V}():F.exports=(G||(G=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=n,t=W(),r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=t.useSyncExternalStore,o=e.useRef,i=e.useEffect,s=e.useMemo,c=e.useDebugValue;X.useSyncExternalStoreWithSelector=function(e,t,n,l,d){var u=o(null);if(null===u.current){var p={hasValue:!1,value:null};u.current=p}else p=u.current;u=s(function(){function e(e){if(!i){if(i=!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,r(a,e))return t;var n=l(e);return void 0!==d&&d(t,n)?(a=e,t):(a=e,o=n)}var a,o,i=!1,s=void 0===n?null:n;return[function(){return e(t())},null===s?void 0:function(){return e(s())}]},[t,n,l,d]);var f=a(e,u[0],u[1]);return i(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())}()),X);var Y=R(F.exports);const{useDebugValue:Z}=n,{useSyncExternalStoreWithSelector:Q}=Y;let ee=!1;const te=e=>e;const re=e=>{"production"!==(import.meta.env?import.meta.env.MODE:void 0)&&"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?j(e):j)(e):e,r=(e,r)=>function(e,t=te,r){"production"!==(import.meta.env?import.meta.env.MODE:void 0)&&r&&!ee&&(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"),ee=!0);const n=Q(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,r);return Z(n),n}(t,e,r);return Object.assign(r,t),r},ne=e=>e?re(e):re;var ae=Symbol.for("immer-nothing"),oe=Symbol.for("immer-draftable"),ie=Symbol.for("immer-state"),se="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 ce(e,...t){if("production"!==process.env.NODE_ENV){const r=se[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 le=Object.getPrototypeOf;function de(e){return!!e&&!!e[ie]}function ue(e){return!!e&&(fe(e)||Array.isArray(e)||!!e[oe]||!!e.constructor?.[oe]||ve(e)||we(e))}var pe=Object.prototype.constructor.toString();function fe(e){if(!e||"object"!=typeof e)return!1;const t=le(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)===pe}function he(e,t){0===ye(e)?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function ye(e){const t=e[ie];return t?t.type_:Array.isArray(e)?1:ve(e)?2:we(e)?3:0}function ge(e,t){return 2===ye(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function me(e,t,r){const n=ye(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function ve(e){return e instanceof Map}function we(e){return e instanceof Set}function Se(e){return e.copy_||e.base_}function be(e,t){if(ve(e))return new Map(e);if(we(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=fe(e);if(!0===t||"class_only"===t&&!r){const t=Object.getOwnPropertyDescriptors(e);delete t[ie];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(le(e),t)}{const t=le(e);if(null!==t&&r)return{...e};const n=Object.create(t);return Object.assign(n,e)}}function Ie(e,t=!1){return xe(e)||de(e)||!ue(e)||(ye(e)>1&&(e.set=e.add=e.clear=e.delete=_e),Object.freeze(e),t&&Object.entries(e).forEach(([e,t])=>Ie(t,!0))),e}function _e(){ce(2)}function xe(e){return Object.isFrozen(e)}var Ae,Oe={};function Ee(e){const t=Oe[e];return t||ce(0,e),t}function ke(){return Ae}function ze(e,t){t&&(Ee("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function De(e){Me(e),e.drafts_.forEach(Ce),e.drafts_=null}function Me(e){e===Ae&&(Ae=e.parent_)}function Te(e){return Ae={drafts_:[],parent_:Ae,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Ce(e){const t=e[ie];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function Ne(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return void 0!==e&&e!==r?(r[ie].modified_&&(De(t),ce(4)),ue(e)&&(e=Le(t,e),t.parent_||je(t,e)),t.patches_&&Ee("Patches").generateReplacementPatches_(r[ie].base_,e,t.patches_,t.inversePatches_)):e=Le(t,r,[]),De(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==ae?e:void 0}function Le(e,t,r){if(xe(t))return t;const n=t[ie];if(!n)return he(t,(a,o)=>$e(e,n,t,a,o,r)),t;if(n.scope_!==e)return t;if(!n.modified_)return je(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),he(a,(a,i)=>$e(e,n,t,a,i,r,o)),je(e,t,!1),r&&e.patches_&&Ee("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function $e(e,t,r,n,a,o,i){if("production"!==process.env.NODE_ENV&&a===r&&ce(5),de(a)){const i=Le(e,a,o&&t&&3!==t.type_&&!ge(t.assigned_,n)?o.concat(n):void 0);if(me(r,n,i),!de(i))return;e.canAutoFreeze_=!1}else i&&r.add(a);if(ue(a)&&!xe(a)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Le(e,a),t&&t.scope_.parent_||"symbol"==typeof n||!Object.prototype.propertyIsEnumerable.call(r,n)||je(e,a)}}function je(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ie(t,r)}var Re={get(e,t){if(t===ie)return e;const r=Se(e);if(!ge(r,t))return function(e,t,r){const n=Ve(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_||!ue(n)?n:n===Fe(e.base_,t)?(He(e),e.copy_[t]=Be(n,e)):n},has:(e,t)=>t in Se(e),ownKeys:e=>Reflect.ownKeys(Se(e)),set(e,t,r){const n=Ve(Se(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const n=Fe(Se(e),t),i=n?.[ie];if(i&&i.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||ge(e.base_,t)))return!0;He(e),Ue(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!==Fe(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,He(e),Ue(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const r=Se(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty(){ce(11)},getPrototypeOf:e=>le(e.base_),setPrototypeOf(){ce(12)}},Pe={};function Fe(e,t){const r=e[ie];return(r?Se(r):e)[t]}function Ve(e,t){if(!(t in e))return;let r=le(e);for(;r;){const e=Object.getOwnPropertyDescriptor(r,t);if(e)return e;r=le(r)}}function Ue(e){e.modified_||(e.modified_=!0,e.parent_&&Ue(e.parent_))}function He(e){e.copy_||(e.copy_=be(e.base_,e.scope_.immer_.useStrictShallowCopy_))}he(Re,(e,t)=>{Pe[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),Pe.deleteProperty=function(e,t){return"production"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&ce(13),Pe.set.call(this,e,t,void 0)},Pe.set=function(e,t,r){return"production"!==process.env.NODE_ENV&&"length"!==t&&isNaN(parseInt(t))&&ce(14),Re.set.call(this,e[0],t,r,e[0])};function Be(e,t){const r=ve(e)?Ee("MapSet").proxyMap_(e,t):we(e)?Ee("MapSet").proxySet_(e,t):function(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:ke(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let a=n,o=Re;r&&(a=[n],o=Pe);const{revoke:i,proxy:s}=Proxy.revocable(a,o);return n.draft_=s,n.revoke_=i,s}(e,t);return(t?t.scope_:ke()).drafts_.push(r),r}function Ke(e){if(!ue(e)||xe(e))return e;const t=e[ie];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=be(e,t.scope_.immer_.useStrictShallowCopy_)}else r=be(e,!0);return he(r,(e,t)=>{me(r,e,Ke(t))}),t&&(t.finalized_=!1),r}var Je=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&&ce(6),void 0!==r&&"function"!=typeof r&&ce(7),ue(e)){const a=Te(this),o=Be(e,void 0);let i=!0;try{n=t(o),i=!1}finally{i?De(a):Me(a)}return ze(a,r),Ne(n,a)}if(!e||"object"!=typeof e){if(n=t(e),void 0===n&&(n=e),n===ae&&(n=void 0),this.autoFreeze_&&Ie(n,!0),r){const t=[],a=[];Ee("Patches").generateReplacementPatches_(e,n,t,a),r(t,a)}return n}ce(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){ue(e)||ce(8),de(e)&&(e=function(e){de(e)||ce(10,e);return Ke(e)}(e));const t=Te(this),r=Be(e,void 0);return r[ie].isManual_=!0,Me(t),r}finishDraft(e,t){const r=e&&e[ie];r&&r.isManual_||ce(9);const{scope_:n}=r;return ze(n,t),Ne(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=Ee("Patches").applyPatches_;return de(e)?n(e,t):this.produce(e,e=>n(e,t))}},qe=Je.produce;Je.produceWithPatches.bind(Je),Je.setAutoFreeze.bind(Je),Je.setUseStrictShallowCopy.bind(Je),Je.applyPatches.bind(Je),Je.createDraft.bind(Je),Je.finishDraft.bind(Je);const We=e=>(t,r,n)=>(n.setState=(e,r,...n)=>{const a="function"==typeof e?qe(e):e;return t(a,r,...n)},e(n.setState,r,n));function Ge(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 Xe=ne()(We(g(S((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=T(),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 i=o.sharedState,s=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,i=a,s=Object.keys(o),c=Object.keys(i);s.forEach(e=>{c.includes(e)||r.push({path:[...t,e],oldValue:o[e],newValue:void 0})}),c.forEach(n=>{s.includes(n)?e([...t,n],o[n],i[n]):r.push({path:[...t,n],oldValue:void 0,newValue:i[n]})})}else r.push({path:t,oldValue:n,newValue:a});else r.push({path:t,oldValue:n,newValue:a})}([],e,t),r}(i,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:s,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=Ge(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 i=Ge(r.sharedState,a);r.sharedState=i,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:i,...s}=n??{};t[r]={...a,sharedState:s}}const{activeSpaceId:r}=e;return{spaces:t,activeSpaceId:r}},merge:(e,t)=>{const r=e,n={},a=r?.spaces??{},o=t.spaces,i=new Set([...Object.keys(a),...Object.keys(o)]);for(const e of i){const t=a[e],r=o[e];if(!t&&!r)continue;const i=r?.sharedState??{},s=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:{...i,...s,pastDiffs:[],futureDiffs:[]}},n[e].color||(n[e].color="#000000")}return{...t,activeSpaceId:r?.activeSpaceId??t.activeSpaceId,spaces:n,errors:[]}}})))),Ye=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}},Ze=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}},Qe=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}},et=e=>t=>{let r="";return e(e=>{const n=e.screens[e.activeScreenId]?.areas;if(!n)return;const a=t.id||T();let o;if(t.type){o=(N._roleMap||{})[t.type]}const i={...t,id:a,role:o};if(o===$.LEAD&&!i.spaceId){const e=Xe.getState().spaces,r=Object.keys(e);if(r.length>0){const e=Xe.getState().activeSpaceId;i.spaceId=e||r[0]}else{const e=Xe.getState().addSpace({name:`Space for ${t.type}`,sharedState:{}});e&&(i.spaceId=e)}}const s=Ye(i);s.isValid?(n.areas[a]=i,n._id+=1,n.errors=[],r=a,e.lastUpdated=Date.now()):(n.errors=s.errors,console.error("Validation failed for area:",s.errors))}),r};const tt=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))}},rt=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(),tt.publish({type:"cleanup",areaId:t})}})},nt=(e,t,r)=>e*(1-r)+t*r,at=(e,t,r)=>Math.min(t,Math.max(e,r)),ot=e=>e instanceof it?e:"number"==typeof e.left?new it(e.left,e.top):new it(e.x,e.y);class it{static new(e,t){return"number"==typeof e?new it(e,t):"number"==typeof e.left?new it(e.left,e.top):new it(e.x,e.y)}static fromEvent(e){return new it(e.clientX,e.clientY)}static dot(e,t){const r=ot(e),n=ot(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=ot(e);return t.atOrigin?this:new it(this.x+t.x,this.y+t.y)}addX(e){return new it(this.x+e,this.y)}addY(e){return new it(this.x,this.y+e)}sub(e){const t=ot(e);return t.atOrigin?this:new it(this.x-t.x,this.y-t.y)}subX(e){return new it(this.x-e,this.y)}subY(e){return new it(this.x,this.y-e)}subXY(e,t){return new it(this.x-e,this.y-t)}scale(e,t=it.new(0,0)){if(1===e)return this;const r=ot(t);return new it(r.x+(this.x-r.x)*e,r.y+(this.y-r.y)*e)}scaleX(e,t=it.new(0,0)){if(1===e)return this;const r=ot(t);return new it(r.x+(this.x-r.x)*e,this.y)}scaleY(e,t=it.new(0,0)){if(1===e)return this;const r=ot(t);return new it(this.x,r.y+(this.y-r.y)*e)}scaleXY(e,t,r=it.new(0,0)){if(1===e&&1===t)return this;const n=ot(r);return new it(n.x+(this.x-n.x)*e,n.y+(this.y-n.y)*t)}rotate(e,t=it.new(0,0)){if(0===e)return this;const r=ot(t),n=this.x-r.x,a=this.y-r.y,o=Math.cos(e),i=Math.sin(e),s=n*i+a*o;return new it(n*o-a*i+r.x,s+r.y)}multiplyMat2(e,t=it.new(0,0)){const r=ot(t);return e.multiplyVec2(this.sub(r)).add(r)}copy(){return new it(this.x,this.y)}lerp(e,t){const r=ot(e);return new it(nt(this.x,r.x,t),nt(this.y,r.y,t))}round(){return it.new(Math.round(this.x),Math.round(this.y))}apply(e){return ot(e(this))}length(){return Math.hypot(this.x,this.y)}eq(e){const t=ot(e);return t.x===this.x&&t.y===this.y}toJSON(){return{x:this.x,y:this.y,__objectType:"vec2"}}}it.ORIGIN=it.new(0,0);const st=(e,t,r,n)=>{const a=n?it.new(e.x+n.x/15,e.y+n.y/15):e;let o,i,s,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&&(i=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,s=e)}),o||i||s};function ct(e,t){const r=t.x-e.left,n=t.y-e.top,a=r,o=e.width-r,i=n,s=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,i,s);let y;return y=h===a?"left":h===o?"right":h===i?"top":"bottom",y}const lt=5,dt=30,ut=32,pt=.25,ft=32;let ht=null,yt=0,gt=0,mt=0;const vt=()=>{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(mt||(mt=t,ht||(ht={...e},yt=e.width,gt=e.height)),ht)return ht}else mt&&t-mt>500&&(mt=0);const r=Math.abs(e.width-yt),n=Math.abs(e.height-gt),a=r>5||n>5;return window.__AREA_RESIZING__||!a||mt||(ht={...e},yt=e.width,gt=e.height),ht||e},wt=e=>{window.__AREA_RESIZING__=e,e||(mt=0)};let St={};const bt=e=>{St=e},It=(e,t)=>{const r=St[e];if(!r)return console.warn(`No viewport found for area ${e}`),{left:5,top:5,width:90,height:90};return{left:r.left+5,top:r.top+5,width:r.width-10,height:r.height-10}},_t={lastCalculation:0,totalCalculations:0,failedIds:new Set,reportedProblems:new Set,reset(){this.failedIds.clear(),this.reportedProblems.clear()}};setInterval(()=>{Date.now()-_t.lastCalculation>6e4&&_t.reset()},6e4);let xt={width:0,height:0};const At=(e,t,r)=>{if(!t)return{};const n=JSON.parse(JSON.stringify(e));if(_t.lastCalculation=Date.now(),_t.totalCalculations++,!r||r.width<=0||r.height<=0){if(console.error("Invalid viewport dimensions",r),!(xt.width>0&&xt.height>0))return{};console.warn("Using last valid viewport dimensions"),r={...r,width:xt.width,height:xt.height}}else xt={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,i=_t.reportedProblems;function s(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?s(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=>{i.has(`auto_creating_${e}`)||(console.warn(`Auto-creating area ${e} referenced in row ${t.id}`),i.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++,i.has(`${t.id}_${r}_size`)||(console.warn(`Invalid size for area ${e.id}: ${e.size}, defaulting to 1/${t.areas.length}`),i.add(`${t.id}_${r}_size`)),e.size=1/t.areas.length):e.size<l&&(i.has(`${t.id}_${r}_min_size`)||(console.warn(`Area ${e.id} has very small size: ${e.size}, setting to minimum 0.05`),i.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 i=o.id,c=n[i],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?s(c,p):"area_row"===c.type&&e(c,p)}catch(e){console.error(`[computeRow RECURSE_ERROR ${a}] Error computing viewport for area ${i}:`,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]||(_t.failedIds.add(e),a[e]={left:0,top:0,width:100,height:100})}),a},Ot=(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:i}=a,s=i.state?.sourceId,c=s||T(),l=new it(o.x,o.y);if(!s){if(n.areas[c])return console.error(`finalizeAreaPlacement: ID conflict for new area ${c}`),void(n.areaToOpen=null);n.areas[c]={id:c,type:i.type,state:i.state},n._id+=1}const d=vt(),u=At(n.layout,n.rootId||"",d);let p=r?.targetId,f=r?.placement;if(!p){const e=new it(300,200);p=st(l,n,u,e)}if(!p)return s||delete n.areas[c],void(n.areaToOpen=null);const h=u[p];if(!h)return console.error(`[areaStore] finalizeAreaPlacement: Viewport not found for target ${p}. Bailing out.`),s||delete n.areas[c],void(n.areaToOpen=null);f||(f=ct(h,l)),n.areaToOpen=null;let y=null,g=null;if(s){const e=I(n.layout),t=e[s];if(y=t,t&&"area_row"===n.layout[t]?.type){const r=n.layout[t],a=r.areas.findIndex(e=>e.id===s);if(-1!==a)if(r.areas.splice(a,1),0===r.areas.length){delete n.layout[t];_(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&&(g=r.areas[0].id),_(n,t)}}else n.layout[s]&&delete n.layout[s];s!==c&&delete n.areas[s],n.rootId===s&&(n.rootId=null)}p&&p===y&&g&&!n.layout[p]&&(p=g);let m="stack"===f?"horizontal":"top"===f||"bottom"===f?"vertical":"horizontal";if("stack"===f){let e=p,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=x(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&&N._roleMap?.[a.type],t=r.role||r.type&&N._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 i={type:"area_row",id:o,orientation:"stack",areas:[{id:e,size:.5},{id:c,size:.5}],activeTabId:e},s=I(n.layout)[e];if(s&&"area_row"===n.layout[s]?.type){const t=n.layout[s],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]=i,n.activeAreaId=e}else{const e=I(n.layout)[p],t=e?n.layout[e]:null,r=T();if(n.layout[c]||(n.layout[c]={type:"area",id:c}),t&&"area_row"===t.type){const a=t.areas.findIndex(e=>e.id===p);if(-1===a)return void console.error(`[finalizeAreaPlacement] Target ${p} not found in parent ${e}`);if(t.orientation===m){const e=a+("bottom"===