Files
boc/backups/2026-07-12-1023/landvex-prod/assets/index-DGH-oZ97.js
T
Bernt 58ca4e68db feat(boc): Complete Business Operations Center v1.0
- 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
2026-07-12 12:41:35 +00:00

2 lines
3.4 KiB
JavaScript

import{e as Y,ay as V,r as s,j as d,as as z,P as G,d as m,H as q,g as J,c as Q,aA as W}from"./index-oAPVDf-r.js";var y="rovingFocusGroup.onEntryFocus",X={bubbles:!1,cancelable:!0},I="RovingFocusGroup",[_,N,Z]=V(I),[$,ie]=Y(I,[Z]),[ee,te]=$(I),O=s.forwardRef((e,r)=>d.jsx(_.Provider,{scope:e.__scopeRovingFocusGroup,children:d.jsx(_.Slot,{scope:e.__scopeRovingFocusGroup,children:d.jsx(oe,{...e,ref:r})})}));O.displayName=I;var oe=s.forwardRef((e,r)=>{const{__scopeRovingFocusGroup:c,orientation:t,loop:T=!1,dir:w,currentTabStopId:v,defaultCurrentTabStopId:C,onCurrentTabStopIdChange:S,onEntryFocus:p,preventScrollOnEntryFocus:a=!1,...b}=e,F=s.useRef(null),g=q(r,F),R=J(w),[E,o]=Q({prop:v,defaultProp:C??null,onChange:S,caller:I}),[i,x]=s.useState(!1),u=W(p),l=N(c),h=s.useRef(!1),[k,P]=s.useState(0);return s.useEffect(()=>{const n=F.current;if(n)return n.addEventListener(y,u),()=>n.removeEventListener(y,u)},[u]),d.jsx(ee,{scope:c,orientation:t,dir:R,loop:T,currentTabStopId:E,onItemFocus:s.useCallback(n=>o(n),[o]),onItemShiftTab:s.useCallback(()=>x(!0),[]),onFocusableItemAdd:s.useCallback(()=>P(n=>n+1),[]),onFocusableItemRemove:s.useCallback(()=>P(n=>n-1),[]),children:d.jsx(G.div,{tabIndex:i||k===0?-1:0,"data-orientation":t,...b,ref:g,style:{outline:"none",...e.style},onMouseDown:m(e.onMouseDown,()=>{h.current=!0}),onFocus:m(e.onFocus,n=>{const L=!h.current;if(n.target===n.currentTarget&&L&&!i){const D=new CustomEvent(y,X);if(n.currentTarget.dispatchEvent(D),!D.defaultPrevented){const A=l().filter(f=>f.focusable),U=A.find(f=>f.active),B=A.find(f=>f.id===E),H=[U,B,...A].filter(Boolean).map(f=>f.ref.current);M(H,a)}}h.current=!1}),onBlur:m(e.onBlur,()=>x(!1))})})}),K="RovingFocusGroupItem",j=s.forwardRef((e,r)=>{const{__scopeRovingFocusGroup:c,focusable:t=!0,active:T=!1,tabStopId:w,children:v,...C}=e,S=z(),p=w||S,a=te(K,c),b=a.currentTabStopId===p,F=N(c),{onFocusableItemAdd:g,onFocusableItemRemove:R,currentTabStopId:E}=a;return s.useEffect(()=>{if(t)return g(),()=>R()},[t,g,R]),d.jsx(_.ItemSlot,{scope:c,id:p,focusable:t,active:T,children:d.jsx(G.span,{tabIndex:b?0:-1,"data-orientation":a.orientation,...C,ref:r,onMouseDown:m(e.onMouseDown,o=>{t?a.onItemFocus(p):o.preventDefault()}),onFocus:m(e.onFocus,()=>a.onItemFocus(p)),onKeyDown:m(e.onKeyDown,o=>{if(o.key==="Tab"&&o.shiftKey){a.onItemShiftTab();return}if(o.target!==o.currentTarget)return;const i=se(o,a.orientation,a.dir);if(i!==void 0){if(o.metaKey||o.ctrlKey||o.altKey||o.shiftKey)return;o.preventDefault();let u=F().filter(l=>l.focusable).map(l=>l.ref.current);if(i==="last")u.reverse();else if(i==="prev"||i==="next"){i==="prev"&&u.reverse();const l=u.indexOf(o.currentTarget);u=a.loop?ce(u,l+1):u.slice(l+1)}setTimeout(()=>M(u))}}),children:typeof v=="function"?v({isCurrentTabStop:b,hasTabStop:E!=null}):v})})});j.displayName=K;var re={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function ne(e,r){return r!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function se(e,r,c){const t=ne(e.key,c);if(!(r==="vertical"&&["ArrowLeft","ArrowRight"].includes(t))&&!(r==="horizontal"&&["ArrowUp","ArrowDown"].includes(t)))return re[t]}function M(e,r=!1){const c=document.activeElement;for(const t of e)if(t===c||(t.focus({preventScroll:r}),document.activeElement!==c))return}function ce(e,r){return e.map((c,t)=>e[(r+t)%e.length])}var le=O,fe=j;export{fe as I,le as R,ie as c};