58ca4e68db
- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics) - Rust analytics service with parallel report generation - C runtime with POSIX shared memory IPC - PostgreSQL schema with 30+ tables, full migrations - Redis cache, sessions, pub/sub - Kafka event streaming with Zookeeper - WebSocket hub for real-time updates - Automation engine with cron jobs, workflows, event triggers - JWT authentication, multi-tenant from start - Docker Compose with all services - Nginx reverse proxy with rate limiting - Integration tests passing - Feature gap analysis against Fortnox/Odoo/Visma Refs: BOC-001
10 lines
3.4 KiB
JavaScript
10 lines
3.4 KiB
JavaScript
import{r as s,b9 as W,j as R,ba as A,bb as I,bc as D,bd as H,be as K,bf as U}from"./index-oAPVDf-r.js";function v(e,o){if(typeof e=="function")return e(o);e!=null&&(e.current=o)}function B(...e){return o=>{let t=!1;const r=e.map(i=>{const n=v(i,o);return!t&&typeof n=="function"&&(t=!0),n});if(t)return()=>{for(let i=0;i<r.length;i++){const n=r[i];typeof n=="function"?n():v(e[i],null)}}}}function F(...e){return s.useCallback(B(...e),e)}class G extends s.Component{getSnapshotBeforeUpdate(o){const t=this.props.childRef.current;if(t&&o.isPresent&&!this.props.isPresent){const r=t.offsetParent,i=A(r)&&r.offsetWidth||0,n=this.props.sizeRef.current;n.height=t.offsetHeight||0,n.width=t.offsetWidth||0,n.top=t.offsetTop,n.left=t.offsetLeft,n.right=i-n.width-n.left}return null}componentDidUpdate(){}render(){return this.props.children}}function T({children:e,isPresent:o,anchorX:t,root:r}){const i=s.useId(),n=s.useRef(null),h=s.useRef({width:0,height:0,top:0,left:0,right:0}),{nonce:g}=s.useContext(W),E=F(n,e==null?void 0:e.ref);return s.useInsertionEffect(()=>{const{width:f,height:m,top:u,left:a,right:p}=h.current;if(o||!n.current||!f||!m)return;const C=t==="left"?`left: ${a}`:`right: ${p}`;n.current.dataset.motionPopId=i;const l=document.createElement("style");g&&(l.nonce=g);const b=r??document.head;return b.appendChild(l),l.sheet&&l.sheet.insertRule(`
|
|
[data-motion-pop-id="${i}"] {
|
|
position: absolute !important;
|
|
width: ${f}px !important;
|
|
height: ${m}px !important;
|
|
${C}px !important;
|
|
top: ${u}px !important;
|
|
}
|
|
`),()=>{b.contains(l)&&b.removeChild(l)}},[o]),R.jsx(G,{isPresent:o,childRef:n,sizeRef:h,children:s.cloneElement(e,{ref:E})})}const V=({children:e,initial:o,isPresent:t,onExitComplete:r,custom:i,presenceAffectsLayout:n,mode:h,anchorX:g,root:E})=>{const f=I(X),m=s.useId();let u=!0,a=s.useMemo(()=>(u=!1,{id:m,initial:o,isPresent:t,custom:i,onExitComplete:p=>{f.set(p,!0);for(const C of f.values())if(!C)return;r&&r()},register:p=>(f.set(p,!1),()=>f.delete(p))}),[t,f,r]);return n&&u&&(a={...a}),s.useMemo(()=>{f.forEach((p,C)=>f.set(C,!1))},[t]),s.useEffect(()=>{!t&&!f.size&&r&&r()},[t]),h==="popLayout"&&(e=R.jsx(T,{isPresent:t,anchorX:g,root:E,children:e})),R.jsx(D.Provider,{value:a,children:e})};function X(){return new Map}const P=e=>e.key||"";function z(e){const o=[];return s.Children.forEach(e,t=>{s.isValidElement(t)&&o.push(t)}),o}const q=({children:e,custom:o,initial:t=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:n="sync",propagate:h=!1,anchorX:g="left",root:E})=>{const[f,m]=H(h),u=s.useMemo(()=>z(e),[e]),a=h&&!f?[]:u.map(P),p=s.useRef(!0),C=s.useRef(u),l=I(()=>new Map),[b,L]=s.useState(u),[x,$]=s.useState(u);K(()=>{p.current=!1,C.current=u;for(let d=0;d<x.length;d++){const c=P(x[d]);a.includes(c)?l.delete(c):l.get(c)!==!0&&l.set(c,!1)}},[x,a.length,a.join("-")]);const w=[];if(u!==b){let d=[...u];for(let c=0;c<x.length;c++){const y=x[c],j=P(y);a.includes(j)||(d.splice(c,0,y),w.push(y))}return n==="wait"&&w.length&&(d=w),$(z(d)),L(u),null}const{forceRender:M}=s.useContext(U);return R.jsx(R.Fragment,{children:x.map(d=>{const c=P(d),y=h&&!f?!1:u===x||a.includes(c),j=()=>{if(l.has(c))l.set(c,!0);else return;let k=!0;l.forEach(S=>{S||(k=!1)}),k&&(M==null||M(),$(C.current),h&&(m==null||m()),r&&r())};return R.jsx(V,{isPresent:y,initial:!p.current||t?void 0:!1,custom:o,presenceAffectsLayout:i,mode:n,root:E,onExitComplete:y?void 0:j,anchorX:g,children:d},c)})})};export{q as A};
|