@warkypublic/oranguru 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.cjs.js CHANGED
@@ -1,2 +1,40 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./lib-_C3acvhh.cjs");exports.ColumnFilterInput=e.ColumnFilterInput;exports.ColumnFilterInputOperator=e.ColumnFilterInputOperator;exports.ColumnFilterSet=e.ColumnFilterSet;exports.FilterOperators=e.FilterOperators;exports.GlidlerAPIAdaptorForGoLangv2=e.GlidlerAPIAdaptorForGoLangv2;exports.GlidlerFormAdaptor=e.GlidlerFormAdaptor;exports.GlidlerLocalDataAdaptor=e.GlidlerLocalDataAdaptor;exports.Gridler=e.Gridler;exports.MantineBetterMenusProvider=e.MantineBetterMenusProvider;exports.useGridlerStore=e.useGridlerStore;exports.useMantineBetterMenus=e.useMantineBetterMenus;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react"),P=require("@glideapps/glide-data-grid"),N=require("@tabler/icons-react"),me=require("@warkypublic/artemis-kit"),ge=require("@warkypublic/zustandsyncstore"),G=require("immer"),p=require("@mantine/core"),oe=require("@mantine/hooks");var W={exports:{}},B={};/**
2
+ * @license React
3
+ * react-jsx-runtime.production.js
4
+ *
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var ce;function pe(){if(ce)return B;ce=1;var n=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function e(o,t,r){var i=null;if(r!==void 0&&(i=""+r),t.key!==void 0&&(i=""+t.key),"key"in t){r={};for(var l in t)l!=="key"&&(r[l]=t[l])}else r=t;return t=r.ref,{$$typeof:n,type:o,key:i,ref:t!==void 0?t:null,props:r}}return B.Fragment=s,B.jsx=e,B.jsxs=e,B}var V={};/**
10
+ * @license React
11
+ * react-jsx-runtime.development.js
12
+ *
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var ue;function ye(){return ue||(ue=1,process.env.NODE_ENV!=="production"&&(function(){function n(c){if(c==null)return null;if(typeof c=="function")return c.$$typeof===K?null:c.displayName||c.name||null;if(typeof c=="string")return c;switch(c){case b:return"Fragment";case x:return"Profiler";case v:return"StrictMode";case j:return"Suspense";case k:return"SuspenseList";case Q:return"Activity"}if(typeof c=="object")switch(typeof c.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),c.$$typeof){case _:return"Portal";case F:return c.displayName||"Context";case $:return(c._context.displayName||"Context")+".Consumer";case T:var C=c.render;return c=c.displayName,c||(c=C.displayName||C.name||"",c=c!==""?"ForwardRef("+c+")":"ForwardRef"),c;case D:return C=c.displayName||null,C!==null?C:n(c.type)||"Memo";case z:C=c._payload,c=c._init;try{return n(c(C))}catch{}}return null}function s(c){return""+c}function e(c){try{s(c);var C=!1}catch{C=!0}if(C){C=console;var y=C.error,I=typeof Symbol=="function"&&Symbol.toStringTag&&c[Symbol.toStringTag]||c.constructor.name||"Object";return y.call(C,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",I),s(c)}}function o(c){if(c===b)return"<>";if(typeof c=="object"&&c!==null&&c.$$typeof===z)return"<...>";try{var C=n(c);return C?"<"+C+">":"<...>"}catch{return"<...>"}}function t(){var c=H.A;return c===null?null:c.getOwner()}function r(){return Error("react-stack-top-frame")}function i(c){if(J.call(c,"key")){var C=Object.getOwnPropertyDescriptor(c,"key").get;if(C&&C.isReactWarning)return!1}return c.key!==void 0}function l(c,C){function y(){E||(E=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",C))}y.isReactWarning=!0,Object.defineProperty(c,"key",{get:y,configurable:!0})}function a(){var c=n(this.type);return L[c]||(L[c]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),c=this.props.ref,c!==void 0?c:null}function m(c,C,y,I,U,Z){var M=y.ref;return c={$$typeof:R,type:c,key:C,props:y,_owner:I},(M!==void 0?M:null)!==null?Object.defineProperty(c,"ref",{enumerable:!1,get:a}):Object.defineProperty(c,"ref",{enumerable:!1,value:null}),c._store={},Object.defineProperty(c._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(c,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(c,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:U}),Object.defineProperty(c,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Z}),Object.freeze&&(Object.freeze(c.props),Object.freeze(c)),c}function f(c,C,y,I,U,Z){var M=C.children;if(M!==void 0)if(I)if(Y(M)){for(I=0;I<M.length;I++)u(M[I]);Object.freeze&&Object.freeze(M)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else u(M);if(J.call(C,"key")){M=n(c);var q=Object.keys(C).filter(function(xe){return xe!=="key"});I=0<q.length?"{key: someKey, "+q.join(": ..., ")+": ...}":"{key: someKey}",se[M+I]||(q=0<q.length?"{"+q.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
18
+ let props = %s;
19
+ <%s {...props} />
20
+ React keys must be passed directly to JSX without using spread:
21
+ let props = %s;
22
+ <%s key={someKey} {...props} />`,I,M,q,M),se[M+I]=!0)}if(M=null,y!==void 0&&(e(y),M=""+y),i(C)&&(e(C.key),M=""+C.key),"key"in C){y={};for(var ee in C)ee!=="key"&&(y[ee]=C[ee])}else y=C;return M&&l(y,typeof c=="function"?c.displayName||c.name||"Unknown":c),m(c,M,y,t(),U,Z)}function u(c){g(c)?c._store&&(c._store.validated=1):typeof c=="object"&&c!==null&&c.$$typeof===z&&(c._payload.status==="fulfilled"?g(c._payload.value)&&c._payload.value._store&&(c._payload.value._store.validated=1):c._store&&(c._store.validated=1))}function g(c){return typeof c=="object"&&c!==null&&c.$$typeof===R}var h=w,R=Symbol.for("react.transitional.element"),_=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),$=Symbol.for("react.consumer"),F=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),k=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),Q=Symbol.for("react.activity"),K=Symbol.for("react.client.reference"),H=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,J=Object.prototype.hasOwnProperty,Y=Array.isArray,S=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(c){return c()}};var E,L={},A=h.react_stack_bottom_frame.bind(h,r)(),ae=S(o(r)),se={};V.Fragment=b,V.jsx=function(c,C,y){var I=1e4>H.recentlyCreatedOwnerStacks++;return f(c,C,y,!1,I?Error("react-stack-top-frame"):A,I?S(o(c)):ae)},V.jsxs=function(c,C,y){var I=1e4>H.recentlyCreatedOwnerStacks++;return f(c,C,y,!0,I?Error("react-stack-top-frame"):A,I?S(o(c)):ae)}})()),V}var de;function Ee(){return de||(de=1,process.env.NODE_ENV==="production"?W.exports=pe():W.exports=ye()),W.exports}var d=Ee();function Re(n,s){if(!n||!s||n.includes("..")||n.includes("[]")||/\[\s*\]/.test(n))return;const e=n.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean);if(e.length!==0)return e.reduce((o,t)=>{if(o!=null&&typeof o=="object")return o[t]},s)}const{Provider:ke,useStore:ie}=ge.createSyncStore((n,s)=>({hide:e=>{s().setInstanceState(e,"visible",!1)},menus:[],setInstanceState:(e,o,t)=>{n(G.produce(r=>{const i=r?.menus?.findIndex(l=>l.id===e);i>=0&&(r.menus[i][o]=t)}))},setState:(e,o)=>{n(G.produce(t=>{t[e]=o}))},show:(e,o)=>{const t=s(),r=t.menus.findIndex(l=>l.id===e),i=t.menus[r]?{...t.menus[r]}:{};Object.assign(i,o),i.id=i.id??e,i.visible=!(i.visible??!1),r<0?t.setState("menus",[...t.menus,i]):n(G.produce(l=>{l.menus||(l.menus=[]),l.menus[r]={...l.menus[r],...i}}))}}),n=>({providerID:n.providerID??`MenuStore-${me.getUUID()}`}));function Ie(){const{menus:n,providerID:s,setInstanceState:e,width:o}=ie(t=>({menus:t.menus,providerID:t.providerID,setInstanceState:t.setInstanceState,setState:t.setState,width:t.width}));return d.jsx(p.Portal,{id:`bmm_portal_${s}`,children:w.Children.toArray(n?.map((t,r)=>w.createElement(p.Menu,{shadow:"md",width:o??"300",...t.menuProps,key:`bmm_menu_${s}_${r}`,onClose:()=>{e(t.id,"visible",!1),t.menuProps?.onClose?.()},opened:t.visible},d.jsx(p.Menu.Target,{children:d.jsx("div",{id:`bmm_${s}_${r}_target`,style:{left:t.x,position:"fixed",top:t.y,visibility:"hidden"}})}),d.jsx(p.Menu.Dropdown,{children:t.renderer?t.renderer:w.Children.toArray(t.items?.map((i,l)=>d.jsx(he,{...i},`bmm_${s}_${r}_item${l}`)))}))))},`bmm_portal_${s}`)}const he=({children:n,label:s,...e})=>{const[o,t]=w.useState(!1);return typeof e.renderer=="function"?e.renderer({...e,loading:o,renderer:void 0,setLoading:t}):typeof e.renderer=="object"?e.renderer:e.isDivider?d.jsx(p.Menu.Divider,{}):e.items&&e.items.length>0?d.jsxs(p.Menu.Sub,{children:[d.jsx(p.Menu.Sub.Target,{children:d.jsx(p.Menu.Sub.Item,{...e,disabled:o,onClick:r=>{e.onClick?.(r),e.onClickAsync&&(t(!0),e.onClickAsync().finally(()=>t(!1)))},styles:{itemLabel:{overflow:"auto",wordWrap:"break-word"},...e.styles},children:n??s})}),d.jsx(p.Menu.Sub.Dropdown,{children:w.Children.toArray(e.items.map((r,i)=>d.jsx(he,{...r},`bmm_subitem_${r?.id??""}${i}`)))})]}):!e.onClick&&!e.onClickAsync?d.jsxs(p.Menu.Label,{...e,children:[" ",n??s]}):d.jsx(p.Menu.Item,{...e,disabled:o,onClick:r=>{e.onClick?.(r),e.onClickAsync&&(t(!0),e.onClickAsync().finally(()=>t(!1)))},styles:{itemLabel:{overflow:"auto",wordWrap:"break-word"},...e.styles},children:n??s})};function Se(n){return d.jsxs(ke,{...n,children:[d.jsx(Ie,{}),n.children]})}const ve=[{label:"Contains",value:"contains"},{label:"Equal",value:"eq"},{label:"Not Equal",value:"neq"},{label:"Greater Than",value:"gt"},{label:"Greater Than or Equal",value:"gte"},{label:"Less Than",value:"lt"},{label:"Less Than or Equal",value:"lte"}],be=n=>{const s=n.storeState?.colFilters?.findIndex(i=>i.id===n.column.id)??-1,e=n.storeState?.colFilters?.[s]??{id:n.column.id,value:""},[o,t]=w.useState(e?.value??""),[r]=oe.useDebouncedValue(o,900);return w.useEffect(()=>{n.storeState.setStateFN("colFilters",i=>{const l=i?.findIndex(m=>m.id===n.column.id)??-1,a=i??[];return l>=0?a[l]={...a[l],...n.options,id:n.column.id,value:r}:a.push({operator:"contains",...n.options,id:n.column.id,value:r}),a})},[r,n.column.id,n.options,n.storeState]),d.jsx(p.TextInput,{onChange:i=>t(i.target.value),rightSection:d.jsx(p.ActionIcon,{color:"gray",onClick:()=>t(""),variant:"filled",children:d.jsx(N.IconX,{color:"red"})}),value:o??e?.value})},Ce=n=>{const s=n.storeState?.colFilters?.findIndex(i=>i.id===n.column.id)??-1,e=n.storeState?.colFilters?.[s]??{id:n.column.id,operator:"contains"},[o,t]=w.useState(e?.operator??"contains"),[r]=oe.useDebouncedValue(o,900);return w.useEffect(()=>{n.storeState.setStateFN("colFilters",i=>{const l=i?.findIndex(m=>m.id===n.column.id)??-1,a=i??[];return l>=0?a[l]={...a[l],...n.options,id:n.column.id,operator:r}:a.push({...n.options,id:n.column.id,operator:r,value:""}),a})},[r,n.column.id,n.options,n.storeState]),d.jsx(p.Select,{comboboxProps:{withinPortal:!1},data:ve,maxDropdownHeight:150,onChange:i=>t(i),placeholder:"Operator",searchable:!0,value:o??e?.operator,withScrollArea:!0})},te=n=>d.jsxs(p.Stack,{onClick:s=>s.stopPropagation(),children:[d.jsx(Ce,{...n}),d.jsx(be,{...n})]}),ne=n=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none">
23
+ <path
24
+ fill="${n.fgColor??"currentColor"}"
25
+ d="M15 2.5a.5.5 0 0 0-1 0v13.793l-2.146-2.147a.5.5 0 0 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L15 16.293zM2.5 4a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1zM5 7.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5M8.5 10a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z"
26
+ ></path>
27
+ </svg>
28
+ `,re=n=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none">
29
+ <path
30
+ fill="${n.fgColor??"currentColor"}"
31
+ d="M15 17.5a.5.5 0 0 1-1 0V3.707l-2.146 2.147a.5.5 0 0 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L15 3.707zM2.5 16a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1zM5 12.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1h-6a.5.5 0 0 0-.5.5M8.5 10a.5.5 0 0 1 0-1h3a.5.5 0 0 1 0 1z"
32
+ ></path>
33
+ </svg>
34
+ `,X=n=>d.jsx("img",{alt:n.alt??"Sprite Image",src:`data:image/svg+xml;utf8,${n.sprite({...n,sprite:void 0})}`}),{Provider:Me,useStore:O}=ge.createSyncStore((n,s)=>({_events:new EventTarget,_loadingList:P.CompactSelection.empty(),_page_data:{},_visibleArea:{height:1e4,width:1e3,x:0,y:0},_visiblePages:{height:0,width:0,x:0,y:0},addError:(e,...o)=>{const t=s();console.log("Gridler Error",t.uniqueid,e,o),n(G.produce(r=>{r.errors=[...r.errors,e]}))},errors:[],get:()=>s(),getCellContent:e=>{const o=s(),[t,r]=e,i=o.getRowBuffer(r);return i!==void 0?o.toCell(i,t):{allowOverlay:!1,kind:P.GridCellKind.Loading}},getCellsForSelection:(e,o)=>async()=>{const t=s();await t.setStateFN("_visibleArea",i=>e);const r=[];for(let i=e.y;i<e.y+e.height;i++){const l=[];for(let a=e.x;a<e.x+e.width;a++)l.push(t.getCellContent([a,i]));r.push(l)}return r},getRowBuffer:e=>{const o=s();if(o.data&&o.data.length>0)return o.data[e]===void 0?{allowOverlay:!1,kind:P.GridCellKind.Loading}:o.data[e];const t=Math.max(0,Math.floor(e/o.pageSize)),r=o.pageSize*t,i=e-r;return o._page_data?.[t]?.[i]},getState:e=>s()[e],hasLocalData:!1,keyField:"id",loadPage:async(e,o)=>{const t=s(),r=e<0?0:e;if(!t._events.dispatchEvent(new CustomEvent("before_loadPage",{detail:{clearMode:o,page:e,state:t}})))return;const l=[],a=Object.keys(t.renderColumns??[1,2,3]).length,m=t.pageSize*r,f=t._page_data?.[r]?.length>0;if(o==="all"){t._active_requests?.forEach(u=>{u.controller?.abort?.()}),t.setState("_page_data",{}),t.setState("_active_requests",[]),t.loadPage(r);return}if(!t.useAPIQuery){console.warn("No useAPIQuery function defined, cannot load page",r);return}!f&&o!=="page"&&t.useAPIQuery?.(r).then(u=>{t.setStateFN("_page_data",g=>({...g,[r]:u}));for(let g=r;g<=m+t.pageSize;g++)for(let h=0;h<=a;h++)l.push({cell:[h,g]});t._glideref?.updateCells(l),t._events.dispatchEvent(new CustomEvent("loadPage",{detail:{clearMode:o,data:u,page:e,state:t}}))}).catch(u=>{console.warn("loadPage Error: ",r,u),t._events.dispatchEvent(new CustomEvent("loadPage_error",{detail:{clearMode:o,error:u,page:e,state:t}}))})},maxConcurrency:1,mounted:!1,onCellEdited:(e,o)=>{const t=s(),[,r]=e;t._events.dispatchEvent(new CustomEvent("onCellEdited",{detail:{cell:e,newVal:o,row:r,state:t}}))},onColumnMoved:(e,o)=>{const t=s(),r=t.renderColumns?.[e],i=t.renderColumns?.[o];r?.disableMove||i?.disableMove||t.setStateFN("colOrder",l=>{const a=l??t.renderColumns?.map((m,f)=>[m.id,f]).reduce((m,[f,u])=>({...m,[f]:u}),{});return!r?.id||!i?.id?a:{...a,[r?.id]:o,[i?.id]:e}})},onColumnProposeMove:(e,o)=>{const t=s(),r=t.renderColumns?.[e],i=t.renderColumns?.[o];return!(r?.disableMove||i?.disableMove)},onColumnResize:(e,o,t,r)=>{const i=s(),l=i.renderColumns?.find(a=>a.id===e.id);l?.disableResize||l?.maxWidth&&o<l?.maxWidth||l&&i.setStateFN("colSize",a=>a&&l&&a[l.id]===o?a:{...a,[l.id]:o})},onContextClick:(e,o,t,r)=>{const i=s(),l=i.renderColumns?.[t??-1],a=e==="menu"?[{label:"Side menu"}]:l?[{items:[{label:"Sort Ascending",leftSection:d.jsx(X,{sprite:re}),onClick:()=>{i.setStateFN("colSort",m=>{const f=[...m??[]],u=f.findIndex(h=>h.id===l.id),g="asc";if(u<0){const h={direction:g,id:l.id,order:f?.length};f.push(h)}else u>=0&&(f[u].direction=g);return f})}},{label:"Sort Descending",leftSection:d.jsx(X,{sprite:ne}),onClick:()=>{i.setStateFN("colSort",m=>{const f=[...m??[]],u=f.findIndex(h=>h.id===l.id),g="desc";if(u<0){const h={direction:g,id:l.id,order:f?.length};f.push(h)}else u>=0&&(f[u].direction=g);return f})}},{label:`Filter ${l?.title??l?.id}`},{renderer:d.jsx(te,{column:l,storeState:s()})}],label:`Column Settings for ${l?.title??l?.id}`,leftSection:d.jsx(N.IconGrid4x4,{size:16})}]:[];i.hideMenu?.(e),i.showMenu?.(e,{items:l?.getMenuItems?.(e,i,t&&r?i.getRowBuffer(r):void 0,l,a)??i.getMenuItems?.(e,i,t&&r?i.getRowBuffer(r):void 0,l,a)??a,x:o.clientX??o.bounds?.x,y:o.clientY??o.bounds?.y})},onHeaderClicked:(e,o)=>{const t=s();o.preventDefault();const r=t.renderColumns?.[e];r&&(r.disableSort||t.setStateFN("colSort",i=>{const l=[...i??[]],a=l.findIndex(m=>m.id===r.id);if(a<0){const m={direction:"asc",id:r.id,order:l?.length};l.push(m)}else a>=0&&l[a].direction==="asc"?l[a].direction="desc":a>=0&&l[a].direction==="desc"&&l.splice(a,1);return l}))},onHeaderMenuClick:(e,o)=>{const t=s(),r=t.renderColumns?.[e];if(!r)return;const i=[{label:`Sort ${r?.title??r?.id}`},{label:"Sort Ascending",leftSection:d.jsx(X,{sprite:re}),onClick:()=>{t.setStateFN("colSort",a=>{const m=[...a??[]],f=m.findIndex(g=>g.id===r.id),u="asc";if(f<0){const g={direction:u,id:r.id,order:m?.length};m.push(g)}else f>=0&&(m[f].direction=u);return m})}},{label:"Sort Descending",leftSection:d.jsx(X,{sprite:ne}),onClick:()=>{t.setStateFN("colSort",a=>{const m=[...a??[]],f=m.findIndex(g=>g.id===r.id),u="desc";if(f<0){const g={direction:u,id:r.id,order:m?.length};m.push(g)}else f>=0&&(m[f].direction=u);return m})}},{isDivider:!0}],l=[...r.disableSort?[]:i,{label:`Filter ${r?.title??r?.id}`},{renderer:d.jsx(te,{column:r,storeState:s()})},{isDivider:!0},{label:"Refresh",onClickAsync:async()=>{await t.reload?.()}}];t.hideMenu?.("header-menu"),t.showMenu?.("header-menu",{items:r?.getMenuItems?.("header-menu",t,void 0,r,l)??t.getMenuItems?.("header-menu",t,void 0,r,l),x:o.x,y:o.y})},onItemHovered:e=>{const o=s();if(o.setState("_activeTooltip",void 0),e.kind==="cell"){const t=o.renderColumns?.[e.location[0]];if(t?.tooltip&&typeof t?.tooltip=="string")o.setState("_activeTooltip",t?.tooltip);else if(t?.tooltip&&typeof t?.tooltip=="function"){const r=o.getRowBuffer(e.location[1]);o.setState("_activeTooltip",t?.tooltip(r,e.location[1],e.location[0]))}}},onVisibleRegionChanged:(e,o,t,r)=>{const i=s();i._scrollTimeout&&clearTimeout(i._scrollTimeout);const l=()=>{const a=s(),m=Math.max(0,Math.floor(e.y/a.pageSize)),f=Math.max(0,Math.floor(a._visiblePages.y/a.pageSize)),u=m-f;if(a.progressiveScroll&&u>1){const g=s(),h=(f+2)*g.pageSize*(g.rowHeight??22);g._glideref?.scrollTo(0,{amount:h,unit:"px"},"vertical");return}a.setState("_visiblePages",e)};i.setState("_scrollTimeout",setTimeout(()=>{l()},100))},pageSize:50,setState:(e,o)=>{n(G.produce(t=>{t[e]=o}))},setStateFN:(e,o)=>new Promise((r,i)=>{n(G.produce(l=>{if(typeof o=="function")l[e]=o(l[e]);else throw i(new Error(`Not a function ${o}`)),Error(`Not a function ${o}`)})),r()}),toCell:(e,o)=>{const t=s(),i=t.renderColumns?.[o],l=i?.id??i?.title??String(o);if(l==null||e===void 0||e===null)return i?.Cell?i?.Cell(e,o,l,void 0,t):t.RenderCell?t.RenderCell(e,o,l,void 0,t):{allowOverlay:!1,kind:P.GridCellKind.Loading};try{const a=String(l).includes(".")?Re(l,e)??"":e?.[l];return i?.Cell?i?.Cell(e,o,l,a,t):t.RenderCell?t.RenderCell(e,o,l,a,t):{allowOverlay:!0,data:a,displayData:String(a),kind:P.GridCellKind.Text}}catch{return t.RenderCell?t.RenderCell(e,o,l,e?.[l??""],t):{allowOverlay:!1,kind:P.GridCellKind.Loading,skeletonWidthVariability:50}}},total_rows:1e3,uniqueid:me.getUUID()}),n=>{const[s,e]=n.useStore(t=>[t.setState,t.getState]),o=ie();return w.useEffect(()=>{const t=e("onMounted");if(typeof t=="function"&&t(e,s),s("mounted",!0),window&&window.document&&!window.document.getElementById("portal")){const i=window.document.createElement("div");i.id="portal",i.setAttribute("data-gridler-portal",n.uniqueid),window.document.body.appendChild(i)}return e("_events").dispatchEvent(new CustomEvent("mounted",{detail:{}})),()=>{const r=e("onUnMounted");s("mounted",!1),e("_events").dispatchEvent(new CustomEvent("unmounted",{detail:{}})),typeof r=="function"&&r()}},[s,e]),w.useEffect(()=>{const t=e("_glideref"),r=e("keyField")??"id",i=e("selectedRow")??n.selectedRow,l=e("askAPIRowNumber");let a=-1;if(i&&t){const m=e("_page_data"),f=e("pageSize");for(const u in m){for(const g in m[u]){const h=Number(u)*f+Number(g);if(String(m[u][g]?.[r])===String(i)){a=m[u][g]?._rownumber>0?m[u][g]?._rownumber:h>0?h:-1;break}}if(a>0)break}a>0?t.scrollTo(0,a):typeof l=="function"&&l(String(i)).then(u=>{u>=0&&(t.scrollTo(0,u),e("_events").dispatchEvent(new CustomEvent("selectedRowFound",{detail:{rowNumber:u,selectedRow:i}})))}).catch(u=>{console.warn("Error in askAPIRowNumber",u)})}},[n.selectedRow]),e("_events").addEventListener("reload",t=>{e("reload")?.()}),{...n,hideMenu:n.hideMenu??o.hide,showMenu:n.showMenu??o.show,total_rows:n.total_rows??e("total_rows")??0}}),Te=w.memo(n=>{const[s,e,o,t,r]=O(a=>[a.setStateFN,a.setState,a.getState,a.addError,a.mounted]),i=async a=>{const m=o("colSort"),f=o("pageSize"),u=o("colFilters"),g=o("_active_requests");e("loadingData",!0);try{if(n&&n.url){const h=new Headers;h.set("x-limit",String(f??50)),h.set("x-offset",String((f??50)*a)),h.set("Authorization",`Token ${n.authtoken}`),m?.length&&m.length>0&&h.set("x-sort",m?.map(v=>`${v.id} ${v.direction}`).reduce((v,x)=>`${v},${x}`)),u?.length&&u.length>0&&u?.filter(v=>v.value?.length>0)?.forEach(v=>{v.value&&v.value!==""&&h.set(`x-searchop-${v.operator}-${v.id}`,`${v.value}`)});const R=g?.findIndex(v=>v.page===a)??-1;if(g?.forEach(v=>{(v.page>=0&&v.page<a-2||a>=0&&v.page>a+2)&&v.controller?.abort?.()}),g&&R>=0&&g[R]){e("loadingData",!1);return}const _=new AbortController;await s("_active_requests",v=>[...v??[],{controller:_,page:a}]);const b=await fetch(`${n.url}?x-limit=${String(f??50)}&x-offset=${String((f??50)*a)}`,{headers:h,method:"GET",signal:_?.signal});if(b.ok){const v=b.headers.get("Content-Range")?.split("/");v?.[1]&&parseInt(v[1],10)>0&&e("total_rows",parseInt(v[1],10));const x=await b.json();return e("loadingData",!1),x??[]}t(`${b.status} ${b.statusText}`,"api",n.url),await s("_active_requests",v=>[...(v??[]).filter(x=>x.page!==a)])}}catch(h){t(`Error: ${h}`,"api",n.url)}return e("loadingData",!1),[]},l=async a=>{const m=o("colFilters");if(n&&n.url){const f=new Headers;f.set("x-limit","10"),f.set("x-fetch-rownumber",String(a)),f.set("Authorization",`Token ${n.authtoken}`),m?.length&&m.length>0&&m?.filter(h=>h.value?.length>0)?.forEach(h=>{h.value&&h.value!==""&&f.set(`x-searchop-${h.operator}-${h.id}`,`${h.value}`)});const u=new AbortController,g=await fetch(`${n.url}?x-fetch-rownumber=${a}}`,{headers:f,method:"GET",signal:u?.signal});if(g.ok){const h=await g.json();return h?.[0]?._rownumber??h?._rownumber??0}t(`${g.status} ${g.statusText}`,"api",n.url)}return[]};return w.useEffect(()=>{e("useAPIQuery",i),e("askAPIRowNumber",l)},[n.url,n.authtoken,r,e]),d.jsx(d.Fragment,{})});function _e(n){const[s,e,o,t]=O(i=>[i.getState,i.mounted,i.setState,i.reload]),r=w.useCallback((i,l,a,m,f)=>{if(i==="header-menu")return f||[];const u=[];f&&i==="cell"&&u.push(...f);const g=s("_gridSelection")?.rows.toArray()??[],h=g.length>1;if(!a){const b=g[0];b!==void 0&&(a=l.getRowBuffer(b))}const R=typeof n.descriptionField=="string"?a?.[n.descriptionField]:typeof n.descriptionField=="function"&&a?n.descriptionField(a):void 0;i==="other"&&u.push({c:"blue",label:"Add",onClick:()=>{n.onRequestForm("insert",a)}}),i==="cell"&&a||i==="menu"&&a?(u.push({c:"teal",label:"Add",leftSection:d.jsx(N.IconSquarePlus,{color:"teal",size:16}),onClick:()=>{n.onRequestForm("insert",a)}}),h?(u.push({c:"green",label:`Modify All Selected (${g.length})`,leftSection:d.jsx(N.IconEdit,{color:"green",size:16}),onClick:()=>{n.onRequestForm("change",g.map(b=>l.getRowBuffer(b)))}}),u.push({c:"red",label:`Remove All Selected (${g.length})`,leftSection:d.jsx(N.IconTrashX,{color:"maroon",size:16}),onClick:()=>{n.onRequestForm("delete",g.map(b=>l.getRowBuffer(b)))}})):(u.push({c:"green",label:`Modify${R&&n.showDescriptionInMenu?` (${R})`:""}`,leftSection:d.jsx(N.IconEdit,{color:"green",size:16}),onClick:()=>{n.onRequestForm("change",a)}}),u.push({c:"red",label:`Remove${R&&n.showDescriptionInMenu?` (${R})`:""}`,leftSection:d.jsx(N.IconTrashX,{color:"maroon",size:16}),onClick:()=>{n.onRequestForm("delete",a)}})),u.push({isDivider:!0})):(i==="cell"&&!a||i==="menu"&&!a)&&u.push({c:"red",label:"Nothing Selected",leftSection:d.jsx(N.IconExclamationMark,{color:"yellow",size:16})}),u.push({c:"orange",label:"Refresh",leftSection:d.jsx(N.IconRefresh,{color:"orange",size:16}),onClick:()=>{t?.()}});const _=n.getMenuItems?n.getMenuItems(i,l,a,m,u):u;return!u||u.length===0?f||[]:_},[n.onRequestForm,s]);return w.useEffect(()=>(e&&typeof o=="function"&&s("getMenuItems")!==r&&o("getMenuItems",r),()=>{}),[n.getMenuItems,e]),d.jsx(d.Fragment,{})}const we=w.memo(n=>{const[s,e,o]=O(r=>[r.setState,r.getState,r.mounted]),t=async r=>{const i=e("pageSize");return n.data&&Array.isArray(n.data)?(s("total_rows",n.data.length),n.data.slice(r*(i??50),(r+1)*(i??50))):[]};return w.useEffect(()=>{s("useAPIQuery",t)},[o,s]),d.jsx(d.Fragment,{})});function Pe(){const{_activeTooltip:n,tooltipBarProps:s}=O(e=>({_activeTooltip:e._activeTooltip,tooltipBarProps:e.tooltipBarProps}));return d.jsx("div",{"data-tooltip-bar":!0,style:{minHeight:"24px"},...s,children:n})}const fe=w.memo(()=>{const n=w.useRef(0),s=w.useRef(null),{_glideref:e,_gridSelectionRows:o,askAPIRowNumber:t,colFilters:r,colOrder:i,colSize:l,colSort:a,columns:m,getState:f,loadPage:u,setState:g,setStateFN:h,values:R}=O(_=>({_glideref:_._glideref,_gridSelectionRows:_._gridSelectionRows,askAPIRowNumber:_.askAPIRowNumber,colFilters:_.colFilters,colOrder:_.colOrder,colSize:_.colSize,colSort:_.colSort,columns:_.columns,getState:_.getState,loadPage:_.loadPage,setState:_.setState,setStateFN:_.setStateFN,uniqueid:_.uniqueid,values:_.values}));return w.useEffect(()=>{R&&(async()=>{const b=f("_page_data"),v=f("pageSize"),x=f("keyField")??"id",$=[];for(const F in R){let T=-1;const j=String(typeof R?.[F]=="object"?R?.[F]?.[x]:typeof R?.[F]=="string"?R?.[F]:void 0);for(const k in b){for(const D in b[k]){const z=Number(k)*v+Number(D);if(String(b[k][D]?.[x])===j){T=z;break}}if(T>=0){$.push(T);break}}if(!(T>=0)&&typeof t=="function"){const k=await t(j);k&&$.push(k)}}return $})().then(b=>{let v=P.CompactSelection.empty();b.forEach(x=>{v=v.add(x)}),h("_gridSelectionRows",()=>v),h("_gridSelection",x=>({columns:x?.columns??P.CompactSelection.empty(),...x,rows:v}))})},[R]),w.useEffect(()=>{const _=f("onChange");if(_&&typeof _=="function"){const b=f("_page_data"),v=f("pageSize"),x=[];if(o)for(const F of o){let T;for(const j in b)for(const k in b[j]){const D=Number(j)*v+Number(k);if(!isNaN(D)){if(Number(b[j][k]?._rownumber)===F+1){T=b[j][k];break}else if(D===F+1){T=b[j][k];break}}}T!==void 0&&x.push(T)}const $=f("values");JSON.stringify($)!==JSON.stringify(x)&&_(x)}},[JSON.stringify(o),f]),w.useEffect(()=>{g("renderColumns",m?.map(_=>({..._,hasMenu:_?.hasMenu??!0,icon:"sort"})))},[m]),w.useEffect(()=>{a&&(g("_gridSelection",{columns:P.CompactSelection.empty(),current:void 0,rows:P.CompactSelection.empty()}),g("_gridSelectionRows",P.CompactSelection.empty()),h("renderColumns",_=>_?.map(b=>({...b,icon:b.id&&a?.find(v=>v.id===b.id)?.direction?a?.find(v=>v.id===b.id)?.direction==="asc"?"sortup":"sortdown":b.defaultIcon??"sort"}))).then(()=>{u(0,"all")}))},[a]),w.useEffect(()=>{r&&JSON.stringify(s.current)!==JSON.stringify(r)&&(u(0,"all"),s.current=r)},[r]),w.useEffect(()=>{l&&h("renderColumns",_=>_?.map(b=>({...b,width:b.id&&l?.[b.id]?l?.[b.id]:b.width})))},[l]),w.useEffect(()=>{i&&h("renderColumns",_=>_?.sort((v,x)=>i[v.id]>i[x.id]?1:-1))},[i]),w.useEffect(()=>{e&&(n.current>0||(n.current=1,u(0)))},[e]),d.jsx(d.Fragment,{})});function je(n,s,e=1){let o;if(s===void 0?(o=0,s=n):o=n,e===0)throw new Error("Step cannot be zero");const t=[];if(e>0)for(let r=o;r<s;r+=e)t.push(r);else for(let r=o;r>s;r+=e)t.push(r);return t}const Fe=w.memo(()=>{const[n,s,e,o,t,r,i]=O(l=>[l.setState,l._glideref,l._visiblePages,l.pageSize,l.loadPage,l._loadingList,l.hasLocalData]);return w.useEffect(()=>{s&&n("mounted",!0)},[n]),w.useEffect(()=>{if(!s||i)return;const l=Math.max(0,Math.floor(e.y/o)),a=Math.floor((e.y+e.height)/o);for(const m of je(l,a+1,1))t(m)},[t,o,e,s,r,i]),d.jsx(d.Fragment,{})});function Ae(){const{loadingData:n,onContextClick:s}=O(e=>({loadingData:e.loadingData,onContextClick:e.onContextClick}));return d.jsx(p.ActionIcon,{loading:n,mr:"xs",mt:"2px",onClick:e=>s("menu",e),variant:"subtle",children:d.jsx(N.IconMenu2,{})})}const Ne=n=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="none">
35
+ <path
36
+ fill="${n.fgColor??"currentColor"}"
37
+ d="M2.22 9.967L7.97 4.22l.085-.074l.058-.038l.072-.039l.105-.04l.105-.022l.052-.005L8.5 4l.057.002l.092.013l.107.03l.085.037l.054.03l.063.044l.072.064l5.75 5.747a.75.75 0 0 1-.976 1.133l-.084-.072L9.25 6.56v16.69a.75.75 0 0 1-1.493.102l-.007-.102V6.56l-4.47 4.468a.75.75 0 0 1-.976.072l-.084-.072a.75.75 0 0 1-.073-.977zM19.5 4a.75.75 0 0 1 .743.648l.007.102v16.687l4.47-4.467l.084-.073a.75.75 0 0 1 1.049 1.05l-.073.083l-5.728 5.727a.75.75 0 0 1-1.031.07l-.073-.07l-5.728-5.727l-.073-.084a.75.75 0 0 1-.007-.882l.08-.094l.084-.073a.75.75 0 0 1 .882-.007l.094.08l4.47 4.469V4.75l.007-.102A.75.75 0 0 1 19.5 4"
38
+ ></path>
39
+ </svg>`,Oe="_container_13fhd_1",$e={container:Oe},De=n=>s=>s%2===0?void 0:{bgCell:n==="dark"?"#303030":"#e1effc"},ze=()=>{const n=p.useMantineTheme(),{colorScheme:s}=p.useMantineColorScheme(),{enableOddEvenRowColor:e,focused:o}=O(u=>({enableOddEvenRowColor:u.enableOddEvenRowColor,focused:u.focused})),t={auto:o?p.lighten(n.colors.blue[4],.9):"#ffffff",dark:o?p.darken("#bacfe0",.2):n.colors.dark[7],light:o?p.lighten(n.colors.blue[4],.8):"#ffffff"}[s],r={accentColor:"none",accentLight:n.colors.blue[9],baseFontStyle:"13px",bgBubble:"#212121",bgBubbleSelected:"#000000",bgCell:t,bgCellMedium:"#202027",bgHeader:"#2A2A2A",bgHeaderHasFocus:"#181818",bgHeaderHovered:"#404040",bgIconHeader:"#b8b8b8",bgSearchResult:"#423c24",borderColor:"#eee1",drilldownBorder:"rgba(225,225,225,0.4)",fgIconHeader:"#000000",fontFamily:"Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif",headerFontStyle:"500 13px",linkColor:n.colors.blue[4],textBubble:"#ffffff",textDark:"#dedede",textGroupHeader:"#dedede",textHeader:"#a1a1a1",textHeaderSelected:"#000000",textLight:"#a0a0a0",textMedium:"#b8b8b8"},l=s==="dark"?r:{bgCell:t,textGroupHeader:"#2c5491"},[a,m]=w.useState(l);return w.useEffect(()=>{m(l)},[s,o]),{getRowThemeOverride:u=>e?De(s)(u):void 0,gridTheme:a}},Le=()=>{const n=w.useRef(null),s=w.useRef(!1),{_gridSelection:e,focused:o,getCellContent:t,getCellsForSelection:r,getState:i,glideProps:l,hasLocalData:a,headerHeight:m,heightProp:f,mounted:u,onCellEdited:g,onColumnMoved:h,onColumnProposeMove:R,onColumnResize:_,onContextClick:b,onHeaderClicked:v,onHeaderMenuClick:x,onItemHovered:$,onVisibleRegionChanged:F,renderColumns:T,rowHeight:j,sections:k,selectMode:D,setState:z,setStateFN:Q,total_rows:K,widthProp:H}=O(S=>({_gridSelection:S._gridSelection,focused:S.focused,getCellContent:S.getCellContent,getCellsForSelection:S.getCellsForSelection,getState:S.getState,glideProps:S.glideProps,hasLocalData:S.hasLocalData,headerHeight:S.headerHeight,heightProp:S.height,mounted:S.mounted,onCellEdited:S.onCellEdited,onColumnMoved:S.onColumnMoved,onColumnProposeMove:S.onColumnProposeMove,onColumnResize:S.onColumnResize,onContextClick:S.onContextClick,onHeaderClicked:S.onHeaderClicked,onHeaderMenuClick:S.onHeaderMenuClick,onItemHovered:S.onItemHovered,onVisibleRegionChanged:S.onVisibleRegionChanged,renderColumns:S.renderColumns,rowHeight:S.rowHeight,sections:S.sections,selectMode:S.selectMode,setState:S.setState,setStateFN:S.setStateFN,total_rows:S.total_rows,widthProp:S.width})),J=oe.useMergedRef(n,S=>{Q("_glideref",()=>S??void 0)}),Y=ze();return u?d.jsxs(p.Stack,{align:"stretch",gap:0,h:f??"100%",justify:"stretch",w:H??"100%",children:[k?.top,d.jsxs("div",{className:$e.container,"data-focused":o,onContextMenu:S=>{S.preventDefault(),s.current||(s.current=!0,b("other",S),setTimeout(()=>{s.current=!1},100))},children:[k?.left,d.jsx(P.DataEditor,{cellActivationBehavior:"double-click",columns:T??[],columnSelect:"none",drawFocusRing:!0,getCellContent:t,getCellsForSelection:r,getRowThemeOverride:Y.getRowThemeOverride,gridSelection:e,headerHeight:m??32,headerIcons:{sort:Ne,sortdown:ne,sortup:re},onCellContextMenu:(S,E)=>{E.preventDefault(),s.current||(s.current=!0,b("cell",E,S[0],S[1]),setTimeout(()=>{s.current=!1},100))},onCellEdited:g,onColumnMoved:h,onColumnProposeMove:R,onColumnResize:_,onGridSelectionChange:S=>{let E=P.CompactSelection.empty();const L=i("_gridSelection");for(const A of S.rows)E=E.hasIndex(A)?E:E.add(A);if(D==="row"&&S.current?.range)for(let A=S.current.range.y;A<S.current.range.y+S.current.range.height;A++)E=E.hasIndex(A)?E:E.add(A);(JSON.stringify(L?.columns)!==JSON.stringify(S.columns)||JSON.stringify(L?.rows)!==JSON.stringify(E)||JSON.stringify(L?.current)!==JSON.stringify(S.current))&&(z("_gridSelection",{...S,rows:E}),JSON.stringify(L?.rows)!==JSON.stringify(E)&&z("_gridSelectionRows",E))},onHeaderClicked:v,onHeaderContextMenu:(S,E)=>{E.preventDefault(),s.current||(s.current=!0,b("header",E,S),setTimeout(()=>{s.current=!1},100))},onHeaderMenuClick:x,onItemHovered:$,onVisibleRegionChanged:F,rangeSelect:"multi-rect",ref:J,rightElement:d.jsxs(p.Group,{children:[k?.rightElementStart,d.jsx(Ae,{}),k?.rightElementEnd]}),rowHeight:j??22,rowMarkers:{checkboxStyle:"square",kind:"both"},rows:K??0,rowSelect:"multi",rowSelectionMode:"auto",spanRangeBehavior:"default",theme:Y.gridTheme,width:"100%",...l}),d.jsx(fe,{}),!a&&d.jsx(Fe,{}),k?.right]}),d.jsx(Pe,{}),k?.bottom]}):d.jsxs(d.Fragment,{children:["Loading...",d.jsx(fe,{})]})},le=n=>d.jsx(Se,{children:d.jsxs(Me,{...n,persist:{name:`Gridler_${n.uniqueid}`,partialize:s=>({colOrder:s.colOrder,colSize:s.colSize}),version:1},children:[d.jsx(Le,{}),n.children]})});le.FormAdaptor=_e;le.LocalDataAdaptor=we;exports.ColumnFilterInput=be;exports.ColumnFilterInputOperator=Ce;exports.ColumnFilterSet=te;exports.FilterOperators=ve;exports.GlidlerAPIAdaptorForGoLangv2=Te;exports.GlidlerFormAdaptor=_e;exports.GlidlerLocalDataAdaptor=we;exports.Gridler=le;exports.MantineBetterMenusProvider=Se;exports.useGridlerStore=O;exports.useMantineBetterMenus=ie;
2
40
  //# sourceMappingURL=lib.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"lib.cjs.js","sources":["../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js","../node_modules/.pnpm/@warkypublic+artemis-kit@1.0.10/node_modules/@warkypublic/artemis-kit/dist/object.js","../src/MantineBetterMenu/Store.tsx","../src/MantineBetterMenu/MenuRenderer.tsx","../src/MantineBetterMenu/MantineBetterMenu.tsx","../src/Gridler/components/Column.tsx","../src/Gridler/components/sprites/SortDown.tsx","../src/Gridler/components/sprites/SortUp.tsx","../src/Gridler/components/sprites/SpriteImage.tsx","../src/Gridler/components/GridlerStore.tsx","../src/Gridler/components/adaptors/GlidlerAPIAdaptorForGoLangv2.tsx","../src/Gridler/components/adaptors/GlidlerFormAdaptor.tsx","../src/Gridler/components/adaptors/GlidlerLocalDataAdaptor.tsx","../src/Gridler/components/BottomBar.tsx","../src/Gridler/components/Computer.tsx","../src/Gridler/utils/range.ts","../src/Gridler/components/Pager.tsx","../src/Gridler/components/RightMenuIcon.tsx","../src/Gridler/components/sprites/Sort.ts","../src/Gridler/hooks/use-grid-theme.ts","../src/Gridler/GridlerDataGrid.tsx","../src/Gridler/Gridler.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","function getNestedValue(t, l) {\n if (!t || !l || t.includes(\"..\") || t.includes(\"[]\") || /\\[\\s*\\]/.test(t))\n return;\n const o = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (o.length !== 0)\n return o.reduce((c, e) => {\n if (c != null && typeof c == \"object\")\n return c[e];\n }, l);\n}\nfunction setNestedValue(t, l, o) {\n if (!t || !o) return o;\n const c = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (c.length === 0) return o;\n const e = c.pop();\n let r = o;\n for (let n = 0; n < c.length; n++) {\n const f = c[n], a = c[n + 1] || e, s = /^\\d+$/.test(a);\n (!(f in r) || s && !Array.isArray(r[f]) || !s && typeof r[f] != \"object\") && (r[f] = s ? [] : {}), r = r[f];\n }\n if (/^\\d+$/.test(e) && !Array.isArray(r)) {\n const n = r, f = Math.max(\n ...Object.keys(n).filter((s) => /^\\d+$/.test(s)).map(Number).concat(-1)\n ), a = new Array(Math.max(f + 1, Number(e) + 1));\n Object.keys(n).filter((s) => /^\\d+$/.test(s)).forEach((s) => {\n a[Number(s)] = n[s];\n }), Object.keys(n).forEach((s) => {\n /^\\d+$/.test(s) || (a[s] = n[s]);\n }), Object.keys(n).forEach((s) => delete n[s]), Object.assign(n, a), r = n;\n }\n return r[e] = l, o;\n}\nfunction objectCompare(t, l, o = !1) {\n return !t || !l ? !1 : Object.keys(t).length === Object.keys(l).length && Object.keys(t).every((c) => {\n if (!Object.prototype.hasOwnProperty.call(l, c))\n return !1;\n const e = t[c], r = l[c];\n return o ? Array.isArray(e) && Array.isArray(r) ? e.length === r.length && e.every(\n (n, f) => typeof n == \"object\" && n !== null ? objectCompare(\n n,\n r[f],\n !0\n ) : n === r[f]\n ) : typeof e == \"object\" && typeof r == \"object\" && e !== null && r !== null ? objectCompare(\n e,\n r,\n !0\n ) : e === r : e === r;\n });\n}\nfunction createSelectOptions(t, l = {}) {\n const {\n labelKey: o = \"label\",\n valueKey: c = \"value\"\n } = l;\n return t ? Array.isArray(t) ? t : typeof t != \"object\" ? [] : Object.keys(t).map((e) => ({\n [o]: t[e],\n [c]: e\n })) : [];\n}\nfunction decycle(t, l) {\n const o = /* @__PURE__ */ new WeakMap();\n return function c(e, r) {\n let n, f;\n return l !== void 0 && (e = l(e)), typeof e == \"object\" && e !== null && !(e instanceof Boolean) && !(e instanceof Date) && !(e instanceof Number) && !(e instanceof RegExp) && !(e instanceof String) ? (n = o.get(e), n !== void 0 ? { $ref: n } : (o.set(e, r), Array.isArray(e) ? (f = [], e.forEach(function(a, s) {\n f[s] = c(a, r + \"[\" + s + \"]\");\n })) : (f = {}, Object.keys(e).forEach(function(a) {\n f[a] = c(\n e[a],\n r + \"[\" + JSON.stringify(a) + \"]\"\n );\n })), f)) : e;\n }(t, \"$\");\n}\nfunction retrocycle($) {\n const px = /^\\$(?:\\[(?:\\d+|\"(?:[^\\\\\"\\u0000-\\u001f]|\\\\(?:[\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\\])*$/;\n return function rez(value) {\n value && typeof value == \"object\" && (Array.isArray(value) ? value.forEach(function(element, i) {\n if (typeof element == \"object\" && element !== null) {\n const path = element.$ref;\n typeof path == \"string\" && px.test(path) ? value[i] = eval(path) : rez(element);\n }\n }) : Object.keys(value).forEach(function(name) {\n const item = value[name];\n if (typeof item == \"object\" && item !== null) {\n const path = item.$ref;\n typeof path == \"string\" && px.test(path) ? value[name] = eval(path) : rez(item);\n }\n }));\n }($), $;\n}\nfunction stringify_json(t) {\n return JSON.stringify(retrocycle(t));\n}\nexport {\n createSelectOptions,\n decycle,\n getNestedValue,\n objectCompare,\n retrocycle,\n setNestedValue,\n stringify_json\n};\n//# sourceMappingURL=object.js.map\n","/* eslint-disable react-refresh/only-export-components */\nimport { type MenuItemProps, type MenuProps } from '@mantine/core';\nimport { getUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\nimport { type ReactNode } from 'react';\n\nexport interface MantineBetterMenuInstance {\n id: string;\n items?: Array<MantineBetterMenuInstanceItem>;\n menuProps?: MenuProps;\n renderer?: ReactNode;\n visible: boolean;\n\n x: number;\n y: number;\n}\n\nexport interface MantineBetterMenuInstanceItem extends Partial<MenuItemProps> {\n id?: string;\n isDivider?: boolean;\n items?: Array<MantineBetterMenuInstanceItem>;\n label?: string;\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n onClickAsync?: () => Promise<void>;\n renderer?:\n | ((props: MantineBetterMenuInstanceItem & Record<string, unknown>) => ReactNode)\n | ReactNode;\n}\n\nexport interface MantineBetterMenuStoreProps {\n menus?: Array<MantineBetterMenuInstance>;\n providerID?: string;\n width?: number;\n}\n\nexport type MantineBetterMenuStoreState = MantineBetterMenuStoreProps &\n MantineBetterMenuStoreStateOnly;\n\nexport interface MantineBetterMenuStoreStateOnly {\n hide: (id: string) => void;\n menus: Array<MantineBetterMenuInstance>;\n setInstanceState: <K extends keyof MantineBetterMenuInstance>(\n instanceID: string,\n key: K,\n value: MantineBetterMenuInstance[K]\n ) => void;\n setState: <K extends keyof MantineBetterMenuStoreState>(\n key: K,\n value: Partial<MantineBetterMenuStoreState[K]>\n ) => void;\n show: (id: string, options?: Partial<MantineBetterMenuInstance>) => void;\n}\n\nconst { Provider: MantineBetterMenusStoreProvider, useStore: useMantineBetterMenus } =\n createSyncStore<MantineBetterMenuStoreState, MantineBetterMenuStoreProps>(\n (set, get) => ({\n hide: (id: string) => {\n const s = get();\n s.setInstanceState(id, 'visible', false);\n },\n menus: [],\n setInstanceState: (id, key, value) => {\n //@ts-expect-error Type instantiation is excessively deep and possibly infinite.\n set(\n produce((state: MantineBetterMenuStoreState) => {\n const idx = state?.menus?.findIndex((m: MantineBetterMenuInstance) => m.id === id);\n if (idx >= 0) {\n state.menus[idx][key] = value;\n }\n })\n );\n },\n setState: (key, value) => {\n set(\n produce((state) => {\n state[key] = value;\n })\n );\n },\n show: (id: string, options?: Partial<Omit<MantineBetterMenuInstance, 'id'>>) => {\n const s = get();\n const menuIndex = s.menus.findIndex((m) => m.id === id);\n const menu: Partial<MantineBetterMenuInstance> = s.menus[menuIndex]\n ? { ...s.menus[menuIndex] }\n : {};\n\n Object.assign(menu, options);\n menu.id = menu.id ?? id;\n menu.visible = !(menu.visible ?? false);\n\n if (menuIndex < 0) {\n s.setState('menus', [...s.menus, menu as MantineBetterMenuInstance]);\n } else {\n set(\n produce((state: MantineBetterMenuStoreState) => {\n if (!state.menus) {\n state.menus = [];\n }\n state.menus[menuIndex] = { ...state.menus[menuIndex], ...menu };\n })\n );\n }\n },\n }),\n (props) => {\n return {\n providerID: props.providerID ?? `MenuStore-${getUUID()}`,\n };\n }\n );\n\nexport { MantineBetterMenusStoreProvider, useMantineBetterMenus };\n","import { Menu, Portal } from '@mantine/core';\nimport React, { useState } from 'react';\n\nimport { type MantineBetterMenuInstanceItem, useMantineBetterMenus } from './Store';\n\nexport function MenuRenderer() {\n const { menus, providerID, setInstanceState, width } = useMantineBetterMenus((s) => ({\n menus: s.menus,\n providerID: s.providerID,\n setInstanceState: s.setInstanceState,\n setState: s.setState,\n width: s.width,\n }));\n\n return (\n <Portal id={`bmm_portal_${providerID}`} key={`bmm_portal_${providerID}`}>\n {React.Children.toArray(\n menus?.map((m, menuIndex) => {\n return (\n <Menu\n shadow=\"md\"\n width={width ?? '300'}\n {...m.menuProps}\n key={`bmm_menu_${providerID}_${menuIndex}`}\n onClose={() => {\n setInstanceState(m.id, 'visible', false);\n m.menuProps?.onClose?.();\n }}\n opened={m.visible}\n >\n <Menu.Target>\n <div\n id={`bmm_${providerID}_${menuIndex}_target`}\n style={{ left: m.x, position: 'fixed', top: m.y, visibility: 'hidden' }}\n />\n </Menu.Target>\n\n <Menu.Dropdown>\n {m.renderer\n ? m.renderer\n : React.Children.toArray(\n m.items?.map((item, itemIndex) => (\n <MenuItemRenderer\n key={`bmm_${providerID}_${menuIndex}_item${itemIndex}`}\n {...item}\n />\n ))\n )}\n </Menu.Dropdown>\n </Menu>\n );\n })\n )}\n </Portal>\n );\n}\n\nconst MenuItemRenderer = ({ children, label, ...props }: MantineBetterMenuInstanceItem) => {\n const [loading, setLoading] = useState<boolean>(false);\n\n if (typeof props.renderer === 'function') {\n return props.renderer({ ...props, loading, renderer: undefined, setLoading });\n }\n if (typeof props.renderer === 'object') {\n return props.renderer;\n }\n\n if (props.isDivider) {\n return <Menu.Divider />;\n }\n\n if (props.items && props.items.length > 0) {\n return (\n <Menu.Sub>\n <Menu.Sub.Target>\n <Menu.Sub.Item\n {...props}\n disabled={loading}\n onClick={(e) => {\n props.onClick?.(e);\n if (props.onClickAsync) {\n setLoading(true);\n props.onClickAsync().finally(() => setLoading(false));\n }\n }}\n styles={{\n itemLabel: {\n overflow: 'auto',\n wordWrap: 'break-word',\n },\n ...props.styles,\n }}\n >\n {children ?? label}\n </Menu.Sub.Item>\n </Menu.Sub.Target>\n <Menu.Sub.Dropdown>\n {React.Children.toArray(\n props.items.map((subitem, subitemIndex) => (\n <MenuItemRenderer\n key={`bmm_subitem_${subitem?.id ?? ''}${subitemIndex}`}\n {...subitem}\n />\n ))\n )}\n </Menu.Sub.Dropdown>\n </Menu.Sub>\n );\n }\n\n if (!props.onClick && !props.onClickAsync) {\n return <Menu.Label {...(props as Record<string, unknown>)}> {children ?? label}</Menu.Label>;\n }\n\n return (\n <Menu.Item\n {...props}\n disabled={loading}\n onClick={(e) => {\n props.onClick?.(e);\n if (props.onClickAsync) {\n setLoading(true);\n props.onClickAsync().finally(() => setLoading(false));\n }\n }}\n styles={{\n itemLabel: {\n overflow: 'auto',\n wordWrap: 'break-word',\n },\n ...props.styles,\n }}\n >\n {children ?? label}\n </Menu.Item>\n );\n};\n","import { MenuRenderer } from './MenuRenderer';\nimport { MantineBetterMenusStoreProvider, type MantineBetterMenuStoreProps } from './Store';\n\nexport function MantineBetterMenusProvider(\n props: React.PropsWithChildren<MantineBetterMenuStoreProps>\n) {\n return (\n <MantineBetterMenusStoreProvider {...props}>\n <MenuRenderer />\n {props.children}\n </MantineBetterMenusStoreProvider>\n );\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport { type BaseGridColumn, type GridCell, GridCellKind } from '@glideapps/glide-data-grid';\nimport { ActionIcon, Select, Stack, TextInput } from '@mantine/core';\nimport { useDebouncedValue } from '@mantine/hooks';\nimport { IconX } from '@tabler/icons-react';\nimport { type ReactNode, useEffect, useState } from 'react';\n\nimport type { FilterOption, FilterOptionOperator, GridlerStoreState } from './GridlerStore';\n\nexport type GridCellLoose = {\n kind: GridCellKind | string;\n} & Omit<GridCell, 'allowOverlay' | 'kind'>;\n\nexport interface GridlerColumn extends Partial<BaseGridColumn> {\n Cell?: (\n row: any,\n col: number,\n colIndx: string,\n value: any,\n storeState: GridlerStoreState\n ) => GridCellLoose;\n defaultIcon?: string;\n disableFilter?: boolean;\n disableMove?: boolean;\n disableResize?: boolean;\n disableSort?: boolean;\n getMenuItems?: (\n id: string,\n storeState: any,\n row?: any,\n col?: GridlerColumn,\n defaultItems?: Array<any>\n ) => Array<any>;\n id: string;\n maxWidth?: number;\n minWidth?: number;\n tooltip?: ((buffer: any, row: number, col: number) => ReactNode) | string;\n width?: number;\n}\n\nexport const FilterOperators: Array<{ label: string; value: FilterOptionOperator }> = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equal', value: 'eq' },\n { label: 'Not Equal', value: 'neq' },\n { label: 'Greater Than', value: 'gt' },\n { label: 'Greater Than or Equal', value: 'gte' },\n { label: 'Less Than', value: 'lt' },\n { label: 'Less Than or Equal', value: 'lte' },\n];\n\nexport interface ColumnFilterSetProps {\n column: GridlerColumn;\n options?: Partial<FilterOption>;\n storeState: GridlerStoreState;\n}\n\nexport type GridlerColumns = Array<GridlerColumn>;\n\nexport const ColumnFilterInput = (props: ColumnFilterSetProps) => {\n const filterIndex =\n props.storeState?.colFilters?.findIndex((f) => f.id === props.column.id) ?? -1;\n const filter = props.storeState?.colFilters?.[filterIndex] ?? { id: props.column.id, value: '' };\n\n const [filterValue, setFilterValue] = useState<string>(filter?.value ?? '');\n const [defferedFilterValue] = useDebouncedValue(filterValue, 900);\n\n useEffect(() => {\n props.storeState.setStateFN('colFilters', (state) => {\n const idx = state?.findIndex((f) => f.id === props.column.id) ?? -1;\n\n const filters = state ?? [];\n if (idx >= 0) {\n filters[idx] = {\n ...filters[idx],\n ...props.options,\n id: props.column.id,\n value: defferedFilterValue,\n };\n } else {\n filters.push({\n operator: 'contains',\n ...props.options,\n id: props.column.id,\n value: defferedFilterValue,\n });\n }\n\n return filters;\n });\n }, [defferedFilterValue, props.column.id, props.options, props.storeState]);\n\n return (\n <TextInput\n onChange={(e) => setFilterValue(e.target.value)}\n rightSection={\n <ActionIcon color=\"gray\" onClick={() => setFilterValue('')} variant=\"filled\">\n <IconX color=\"red\" />\n </ActionIcon>\n }\n value={filterValue ?? filter?.value}\n />\n );\n};\n\nexport const ColumnFilterInputOperator = (props: ColumnFilterSetProps) => {\n const filterIndex =\n props.storeState?.colFilters?.findIndex((f) => f.id === props.column.id) ?? -1;\n const filter = props.storeState?.colFilters?.[filterIndex] ?? {\n id: props.column.id,\n operator: 'contains',\n };\n\n const [filterValue, setFilterValue] = useState<FilterOptionOperator>(\n filter?.operator ?? 'contains'\n );\n const [defferedFilterValue] = useDebouncedValue(filterValue, 900);\n\n useEffect(() => {\n props.storeState.setStateFN('colFilters', (state) => {\n const idx = state?.findIndex((f) => f.id === props.column.id) ?? -1;\n\n const filters = state ?? [];\n if (idx >= 0) {\n filters[idx] = {\n ...filters[idx],\n ...props.options,\n id: props.column.id,\n operator: defferedFilterValue,\n };\n } else {\n filters.push({\n ...props.options,\n id: props.column.id,\n operator: defferedFilterValue,\n value: '',\n });\n }\n\n return filters;\n });\n }, [defferedFilterValue, props.column.id, props.options, props.storeState]);\n\n return (\n <Select\n comboboxProps={{ withinPortal: false }}\n data={FilterOperators}\n maxDropdownHeight={150}\n onChange={(value) => setFilterValue(value as any)}\n placeholder=\"Operator\"\n searchable\n value={filterValue ?? filter?.operator}\n withScrollArea\n />\n );\n};\n\nexport const ColumnFilterSet = (props: ColumnFilterSetProps) => {\n return (\n <Stack onClick={(e) => e.stopPropagation()}>\n <ColumnFilterInputOperator {...props} />\n <ColumnFilterInput {...props} />\n </Stack>\n );\n};\n","import type { Sprite, SpriteProps } from '@glideapps/glide-data-grid';\n\nexport const SortDownSprite: Sprite = (props: Partial<SpriteProps>) => {\n const fg = props.fgColor ?? 'currentColor';\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\">\n <path\n fill=\"${fg}\"\n d=\"M15 2.5a.5.5 0 0 0-1 0v13.793l-2.146-2.147a.5.5 0 0 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L15 16.293zM2.5 4a.5.5 0 0 0 0 1h9a.5.5 0 0 0 0-1zM5 7.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5M8.5 10a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z\"\n ></path>\n </svg>\n `;\n};\n","import type { Sprite, SpriteProps } from '@glideapps/glide-data-grid';\n\nexport const SortUpSprite: Sprite = (props: Partial<SpriteProps>) => {\n const fg = props.fgColor ?? 'currentColor';\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\">\n <path\n fill=\"${fg}\"\n d=\"M15 17.5a.5.5 0 0 1-1 0V3.707l-2.146 2.147a.5.5 0 0 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L15 3.707zM2.5 16a.5.5 0 0 1 0-1h9a.5.5 0 0 1 0 1zM5 12.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1h-6a.5.5 0 0 0-.5.5M8.5 10a.5.5 0 0 1 0-1h3a.5.5 0 0 1 0 1z\"\n ></path>\n </svg>\n `;\n};\n","import type { Sprite, SpriteProps } from '@glideapps/glide-data-grid';\n\nexport const SpriteImage = (props: { alt?:string; sprite: Sprite, } & Partial<SpriteProps>) => {\n return (\n <img alt={props.alt ?? \"Sprite Image\"} src={`data:image/svg+xml;utf8,${props.sprite({ ...props, sprite: undefined } as any)}`} />\n );\n};\n","/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n type CellArray,\n CompactSelection,\n type DataEditorProps,\n type DataEditorRef,\n type EditableGridCell,\n type GetCellsThunk,\n type GridCell,\n GridCellKind,\n type GridColumn,\n type GridMouseEventArgs,\n type GridSelection,\n type HeaderClickedEventArgs,\n type Item,\n type Rectangle,\n} from '@glideapps/glide-data-grid';\nimport { IconGrid4x4 } from '@tabler/icons-react';\nimport { getUUID } from '@warkypublic/artemis-kit';\nimport { getNestedValue } from '@warkypublic/artemis-kit/object';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\nimport { type PropsWithChildren, type ReactNode, useEffect } from 'react';\n\nimport {\n type MantineBetterMenuInstance,\n type MantineBetterMenuInstanceItem,\n useMantineBetterMenus,\n} from '../../MantineBetterMenu';\nimport { ColumnFilterSet, type GridlerColumn, type GridlerColumns } from './Column';\nimport { SortDownSprite } from './sprites/SortDown';\nimport { SortUpSprite } from './sprites/SortUp';\nimport { SpriteImage } from './sprites/SpriteImage';\n\nexport type FilterOption = {\n datatype?: 'array' | 'boolean' | 'date' | 'function' | 'number' | 'object' | 'string';\n id: string;\n operator: FilterOptionOperator;\n value: string;\n value2?: string;\n};\nexport type FilterOptionOperator =\n | 'between'\n | 'contains'\n | 'endswith'\n | 'eq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'neq'\n | 'startswith';\n\nexport interface GridlerProps extends PropsWithChildren {\n askAPIRowNumber?: (key: string) => Promise<number>;\n columns?: GridlerColumns;\n\n defaultSort?: Array<SortOption>;\n enableOddEvenRowColor?: boolean;\n getMenuItems?: (\n id: string,\n storeState: GridlerState,\n row?: any,\n col?: GridlerColumn,\n defaultItems?: Array<MantineBetterMenuInstanceItem>\n ) => Array<MantineBetterMenuInstanceItem>;\n\n glideProps?: Partial<DataEditorProps>;\n headerHeight?: number;\n height?: number | string;\n hideMenu?: (id: string) => void;\n keyField?: string;\n maxConcurrency?: number;\n onChange?: (values: Array<Record<string, any>>) => void;\n onMounted?: (getState: GridlerState['getState'], setState: GridlerState['setState']) => void;\n onUnMounted?: () => void;\n pageSize?: number;\n progressiveScroll?: boolean;\n RenderCell?: <TRowType extends Record<string, string>>(\n row: TRowType,\n colindex: number,\n colid: string,\n value: any,\n store: GridlerState\n ) => GridCell;\n\n rowHeight?: number;\n sections?: {\n bottom?: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n rightElementEnd?: React.ReactNode;\n rightElementStart?: React.ReactNode;\n top?: React.ReactNode;\n };\n selectedRow?: number;\n selectMode?: 'cell' | 'row';\n showMenu?: (id: string, options?: Partial<MantineBetterMenuInstance>) => void;\n tooltipBarProps?: React.HTMLAttributes<HTMLDivElement>;\n total_rows?: number;\n uniqueid: string;\n useAPIQuery?: (index: number) => Promise<Array<Record<string, any>>>;\n values?: Array<Record<string, any>>;\n width?: number | string;\n}\n\nexport interface GridlerState {\n _active_requests?: Array<{ controller: AbortController; page: number }>;\n _activeTooltip?: ReactNode;\n _events: EventTarget;\n _glideref?: DataEditorRef;\n _gridSelection?: GridSelection;\n _gridSelectionRows?: GridSelection['rows'];\n _loadingList: CompactSelection;\n _page_data: Record<number, Array<any>>;\n _scrollTimeout?: any | number;\n _visibleArea: Rectangle;\n _visiblePages: Rectangle;\n\n addError: (err: string, ...args: Array<any>) => void;\n colFilters?: Array<FilterOption>;\n colOrder?: Record<string, number>;\n colSize?: Record<string, number>;\n colSort?: Array<SortOption>;\n data?: Array<any>;\n\n errors: Array<string>;\n focused?: boolean;\n get: () => GridlerState;\n getCellContent: (cell: Item) => GridCell;\n getCellsForSelection: (\n selection: Rectangle,\n abortSignal: AbortSignal\n ) => CellArray | GetCellsThunk;\n getRowBuffer: (row: number) => any;\n getState: <K extends keyof GridlerStoreState>(key: K) => GridlerStoreState[K];\n\n hasLocalData: boolean;\n loadingData?: boolean;\n loadPage: (page: number, clearMode?: 'all' | 'page') => Promise<void>;\n mounted: boolean;\n onCellEdited: (cell: Item, newVal: EditableGridCell) => void;\n onColumnMoved: (from: number, to: number) => void;\n onColumnProposeMove: (startIndex: number, endIndex: number) => boolean;\n onColumnResize: (\n column: GridColumn,\n newSize: number,\n colIndex: number,\n newSizeWithGrow: number\n ) => void;\n onContextClick: (area: string, event: any, col?: number, row?: number) => void;\n onHeaderClicked: (colIndex: number, event: HeaderClickedEventArgs) => void;\n onHeaderMenuClick: (col: number, screenPosition: Rectangle) => void;\n onItemHovered: (args: GridMouseEventArgs) => void;\n\n onVisibleRegionChanged: (\n r: Rectangle,\n tx: number,\n ty: number,\n extras: {\n freezeRegion?: Rectangle;\n freezeRegions?: readonly Rectangle[];\n selected?: Item;\n }\n ) => void;\n\n pageSize: number;\n reload?: () => Promise<void>;\n renderColumns?: GridlerColumns;\n setState: <K extends keyof GridlerStoreState>(\n key: K,\n value: Partial<GridlerStoreState[K]>\n ) => void;\n setStateFN: <K extends keyof GridlerStoreState>(\n key: K,\n value: (current: GridlerStoreState[K]) => Partial<GridlerStoreState[K]>\n ) => Promise<void>;\n toCell: <TRowType extends Record<string, string>>(row: TRowType, col: number) => GridCell;\n}\n\nexport type GridlerStoreState = GridlerProps & GridlerState;\n\nexport type SortOption = { direction: 'asc' | 'desc'; id: string; order?: number };\n\nconst { Provider, useStore: useGridlerStore } = createSyncStore<GridlerStoreState, GridlerProps>(\n (set, get) => ({\n _events: new EventTarget(),\n _loadingList: CompactSelection.empty(),\n _page_data: {},\n _visibleArea: { height: 10000, width: 1000, x: 0, y: 0 },\n _visiblePages: { height: 0, width: 0, x: 0, y: 0 },\n addError: (err: string, ...args: Array<any>) => {\n const s = get();\n console.log('Gridler Error', s.uniqueid, err, args);\n set(\n produce((state: GridlerStoreState) => {\n state.errors = [...state.errors, err];\n })\n );\n },\n errors: [],\n get: () => get(),\n getCellContent: (cell: Item) => {\n const state = get();\n const [col, row] = cell;\n\n const buffer = state.getRowBuffer(row);\n\n if (buffer !== undefined) {\n return state.toCell(buffer, col);\n }\n return {\n allowOverlay: false,\n kind: GridCellKind.Loading,\n };\n },\n getCellsForSelection: (selection: Rectangle, _abortSignal: AbortSignal) => {\n return async () => {\n const state = get();\n //const firstPage = Math.max(0, Math.floor(selection.y / state.pageSize));\n //const lastPage = Math.floor((selection.y + selection.height) / state.pageSize);\n\n await state.setStateFN('_visibleArea', (_cv) => {\n //if (r.x === cv.x && r.y === cv.y && r.width === cv.width && r.height === cv.height)\n // return cv;\n return selection;\n });\n\n const result: GridCell[][] = [];\n\n for (let y = selection.y; y < selection.y + selection.height; y++) {\n const row: GridCell[] = [];\n for (let x = selection.x; x < selection.x + selection.width; x++) {\n row.push(state.getCellContent([x, y]));\n }\n result.push(row);\n }\n\n //console.log('Gridler:Debug:getCellsForSelection', selection, result);\n return result as CellArray;\n };\n },\n getRowBuffer: (row: number) => {\n const state = get();\n //Handle local data\n if (state.data && state.data.length > 0) {\n if (state.data[row] === undefined) {\n return {\n allowOverlay: false,\n kind: GridCellKind.Loading,\n };\n }\n return state.data[row];\n }\n\n //Handle remote paged data\n const firstPage = Math.max(0, Math.floor(row / state.pageSize));\n const upperPage = state.pageSize * firstPage;\n const index = row - upperPage;\n\n const rowData = state._page_data?.[firstPage]?.[index];\n\n return rowData;\n },\n getState: (key) => {\n return get()[key];\n },\n hasLocalData: false,\n keyField: 'id',\n loadPage: async (pPage: number, clearMode?: 'all' | 'page') => {\n const state = get();\n const page = pPage < 0 ? 0 : pPage;\n\n const result = state._events.dispatchEvent(\n new CustomEvent('before_loadPage', {\n detail: { clearMode, page: pPage, state },\n })\n );\n if (!result) {\n return;\n }\n\n const damageList: { cell: [number, number] }[] = [];\n const colLen = Object.keys(state.renderColumns ?? [1, 2, 3]).length;\n const upperPage = state.pageSize * page;\n const hasPage = state._page_data?.[page]?.length > 0;\n //console.log('loadPage', page, clearMode, { upperPage, hasPage, pz: state.pageSize, colLen });\n if (clearMode === 'all') {\n state._active_requests?.forEach((r) => {\n r.controller?.abort?.();\n });\n\n state.setState('_page_data', {});\n state.setState('_active_requests', []);\n\n state.loadPage(page);\n return;\n }\n\n if (!state.useAPIQuery) {\n console.warn('No useAPIQuery function defined, cannot load page', page);\n return;\n }\n if (!hasPage && clearMode !== 'page') {\n state\n .useAPIQuery?.(page)\n .then((data) => {\n state.setStateFN('_page_data', (cv) => {\n return { ...cv, [page]: data };\n });\n for (let row = page; row <= upperPage + state.pageSize; row++) {\n for (let col = 0; col <= colLen; col++) {\n damageList.push({\n cell: [col, row],\n });\n }\n }\n\n state._glideref?.updateCells(damageList);\n state._events.dispatchEvent(\n new CustomEvent('loadPage', {\n detail: { clearMode, data, page: pPage, state },\n })\n );\n })\n .catch((e) => {\n console.warn('loadPage Error: ', page, e);\n state._events.dispatchEvent(\n new CustomEvent('loadPage_error', {\n detail: { clearMode, error: e, page: pPage, state },\n })\n );\n });\n }\n },\n maxConcurrency: 1,\n mounted: false,\n onCellEdited: (cell: Item, newVal: EditableGridCell) => {\n const state = get();\n const [, row] = cell;\n //const current = state._editData?.[row];\n //if (current === undefined) return;\n //todo: complete\n state._events.dispatchEvent(\n new CustomEvent('onCellEdited', {\n detail: { cell, newVal, row, state },\n })\n );\n },\n onColumnMoved: (from: number, to: number) => {\n const s = get();\n const fromItem = s.renderColumns?.[from];\n const toItem = s.renderColumns?.[to];\n if (fromItem?.disableMove || toItem?.disableMove) {\n return;\n }\n\n s.setStateFN('colOrder', (cols) => {\n const renderCols =\n cols ??\n s.renderColumns\n ?.map((col, i) => [col.id, i])\n .reduce((acc, [id, i]) => ({ ...acc, [id]: i }), {});\n\n if (!fromItem?.id || !toItem?.id) {\n return renderCols;\n }\n\n return { ...renderCols, [fromItem?.id]: to, [toItem?.id]: from };\n });\n },\n onColumnProposeMove: (startIndex: number, endIndex: number) => {\n const s = get();\n const fromItem = s.renderColumns?.[startIndex];\n const toItem = s.renderColumns?.[endIndex];\n if (fromItem?.disableMove || toItem?.disableMove) {\n return false;\n }\n return true;\n },\n onColumnResize: (\n column: GridColumn,\n newSize: number,\n _colIndex: number,\n _newSizeWithGrow: number\n ) => {\n const s = get();\n const col = s.renderColumns?.find((col) => col.id === column.id);\n if (col?.disableResize) {\n return;\n }\n if (col?.maxWidth && newSize < col?.maxWidth) {\n return;\n }\n\n if (col) {\n s.setStateFN('colSize', (cols) => {\n if (cols && col && cols[col.id] === newSize) {\n return cols;\n }\n return { ...cols, [col.id]: newSize };\n });\n }\n },\n\n onContextClick: (area: string, event: any, col?: number, row?: number) => {\n const s = get();\n const coldef = s.renderColumns?.[col ?? -1];\n\n const items =\n area === 'menu'\n ? [\n {\n label: `Side menu`,\n },\n ]\n : coldef\n ? [\n {\n items: [\n {\n label: 'Sort Ascending',\n leftSection: <SpriteImage sprite={SortUpSprite} />,\n onClick: () => {\n s.setStateFN('colSort', (c) => {\n const cols = [...(c ?? [])];\n const idx = cols.findIndex((search) => search.id === coldef.id);\n const dir = 'asc';\n if (idx < 0) {\n const newSort: SortOption = {\n direction: dir,\n id: coldef.id,\n order: cols?.length,\n };\n cols.push(newSort);\n } else if (idx >= 0) {\n cols[idx].direction = dir;\n }\n\n return cols;\n });\n },\n },\n {\n label: 'Sort Descending',\n leftSection: <SpriteImage sprite={SortDownSprite} />,\n onClick: () => {\n s.setStateFN('colSort', (c) => {\n const cols = [...(c ?? [])];\n const idx = cols.findIndex((search) => search.id === coldef.id);\n const dir = 'desc';\n if (idx < 0) {\n const newSort: SortOption = {\n direction: dir,\n id: coldef.id,\n order: cols?.length,\n };\n cols.push(newSort);\n } else if (idx >= 0) {\n cols[idx].direction = dir;\n }\n\n return cols;\n });\n },\n },\n {\n label: `Filter ${coldef?.title ?? coldef?.id}`,\n },\n {\n renderer: <ColumnFilterSet column={coldef} storeState={get()} />,\n },\n ],\n label: `Column Settings for ${coldef?.title ?? coldef?.id}`,\n leftSection: <IconGrid4x4 size={16} />,\n },\n ]\n : [];\n s.hideMenu?.(area);\n\n s.showMenu?.(area, {\n items:\n coldef?.getMenuItems?.(\n area,\n s,\n col && row ? s.getRowBuffer(row) : undefined,\n coldef,\n items\n ) ??\n s.getMenuItems?.(area, s, col && row ? s.getRowBuffer(row) : undefined, coldef, items) ??\n items,\n x: event.clientX ?? event.bounds?.x,\n y: event.clientY ?? event.bounds?.y,\n });\n },\n onHeaderClicked: (colIndex: number, event: HeaderClickedEventArgs) => {\n const s = get();\n event.preventDefault();\n const col = s.renderColumns?.[colIndex];\n if (!col) {\n return;\n }\n if (!col.disableSort) {\n s.setStateFN('colSort', (c) => {\n const cols = [...(c ?? [])];\n const idx = cols.findIndex((search) => search.id === col.id);\n\n if (idx < 0) {\n const newSort: SortOption = { direction: 'asc', id: col.id, order: cols?.length };\n cols.push(newSort);\n } else if (idx >= 0 && cols[idx].direction === 'asc') {\n cols[idx].direction = 'desc';\n } else if (idx >= 0 && cols[idx].direction === 'desc') {\n cols.splice(idx, 1);\n }\n\n return cols;\n });\n }\n },\n onHeaderMenuClick: (col: number, screenPosition: Rectangle) => {\n const s = get();\n const coldef = s.renderColumns?.[col];\n if (!coldef) {\n return;\n }\n\n const sortItems = [\n {\n label: `Sort ${coldef?.title ?? coldef?.id}`,\n },\n {\n label: 'Sort Ascending',\n leftSection: <SpriteImage sprite={SortUpSprite} />,\n onClick: () => {\n s.setStateFN('colSort', (c) => {\n const cols = [...(c ?? [])];\n const idx = cols.findIndex((search) => search.id === coldef.id);\n const dir = 'asc';\n if (idx < 0) {\n const newSort: SortOption = { direction: dir, id: coldef.id, order: cols?.length };\n cols.push(newSort);\n } else if (idx >= 0) {\n cols[idx].direction = dir;\n }\n\n return cols;\n });\n },\n },\n {\n label: 'Sort Descending',\n leftSection: <SpriteImage sprite={SortDownSprite} />,\n onClick: () => {\n s.setStateFN('colSort', (c) => {\n const cols = [...(c ?? [])];\n const idx = cols.findIndex((search) => search.id === coldef.id);\n const dir = 'desc';\n if (idx < 0) {\n const newSort: SortOption = { direction: dir, id: coldef.id, order: cols?.length };\n cols.push(newSort);\n } else if (idx >= 0) {\n cols[idx].direction = dir;\n }\n\n return cols;\n });\n },\n },\n {\n isDivider: true,\n },\n ];\n const items = [\n ...(coldef.disableSort ? [] : sortItems),\n {\n label: `Filter ${coldef?.title ?? coldef?.id}`,\n },\n {\n renderer: <ColumnFilterSet column={coldef} storeState={get()} />,\n },\n {\n isDivider: true,\n },\n {\n label: `Refresh`,\n onClickAsync: async () => {\n await s.reload?.();\n },\n },\n ];\n s.hideMenu?.('header-menu');\n s.showMenu?.('header-menu', {\n items:\n coldef?.getMenuItems?.('header-menu', s, undefined, coldef, items) ??\n s.getMenuItems?.('header-menu', s, undefined, coldef, items),\n x: screenPosition.x,\n y: screenPosition.y,\n });\n },\n onItemHovered: (args: GridMouseEventArgs) => {\n const s = get();\n s.setState('_activeTooltip', undefined);\n if (args.kind === 'cell') {\n //_activeTooltip\n const coldef = s.renderColumns?.[args.location[0]];\n if (coldef?.tooltip && typeof coldef?.tooltip === 'string') {\n s.setState('_activeTooltip', coldef?.tooltip);\n } else if (coldef?.tooltip && typeof coldef?.tooltip === 'function') {\n const buffer = s.getRowBuffer(args.location[1]);\n s.setState('_activeTooltip', coldef?.tooltip(buffer, args.location[1], args.location[0]));\n }\n }\n },\n onVisibleRegionChanged: (\n region: Rectangle,\n _tx: number,\n _ty: number,\n _extras: {\n freezeRegion?: Rectangle;\n freezeRegions?: readonly Rectangle[];\n selected?: Item;\n }\n ) => {\n const state = get();\n if (state._scrollTimeout) {\n clearTimeout(state._scrollTimeout);\n }\n\n const onVisibleRegionChangedDebounced = () => {\n //console.log('Gridler:Debug:VisibleRegionChanged', r);\n const state = get();\n const firstPage = Math.max(0, Math.floor(region.y / state.pageSize));\n // const lastPage = Math.floor((region.y + region.height) / state.pageSize);\n // const upperPage = state.pageSize * firstPage;\n\n const previousPage = Math.max(0, Math.floor(state._visiblePages.y / state.pageSize));\n const pageDif = firstPage - previousPage;\n // console.log(\n // 'Page dif',\n // pageDif,\n // { previousPage, firstPage, lastPage, onder: pageDif - 1 === lastPage },\n // region\n // );\n // if (pageDif - 1 === lastPage) {\n // console.log('Is onder', lastPage, pageDif);\n // }\n\n if (state.progressiveScroll && pageDif > 1) {\n const state = get();\n const newpos = (previousPage + 2) * state.pageSize * (state.rowHeight ?? 22);\n // console.log('Pending scroll exec', newpos, {\n // pageSize: state.pageSize,\n // rowHeight: state.rowHeight\n // });\n state._glideref?.scrollTo(\n 0,\n {\n amount: newpos,\n unit: 'px',\n },\n 'vertical'\n );\n\n return;\n }\n //console.log('VIsi change', { firstPage, lastPage }, state?._page_data[lastPage]);\n // if (state._active_requests && state._active_requests.filter((f)=>f.page > firstPage - 1)) {\n\n // }\n\n //console.log('Gridler:Debug:VisibleRegionChanged', region, firstPage, lastPage);\n state.setState('_visiblePages', region);\n };\n\n state.setState(\n '_scrollTimeout',\n setTimeout(() => {\n onVisibleRegionChangedDebounced();\n }, 100)\n );\n },\n\n pageSize: 50,\n setState: (key, value) => {\n set(\n produce((state) => {\n state[key] = value;\n })\n );\n },\n setStateFN: (key, value) => {\n const p = new Promise<void>((resolve, reject) => {\n set(\n produce((state) => {\n if (typeof value === 'function') {\n state[key] = (value as (value: any) => any)(state[key]);\n } else {\n reject(new Error(`Not a function ${value}`));\n throw Error(`Not a function ${value}`);\n }\n })\n );\n resolve();\n });\n\n return p;\n },\n toCell: <T extends Record<string, string>>(row: T, col: number): GridCell => {\n const s = get();\n const columns = s.renderColumns;\n const coldef: GridlerColumn | undefined = columns?.[col];\n const ref: string = coldef?.id ?? coldef?.title ?? String(col);\n\n if (ref === undefined || ref === null || row === undefined || row === null) {\n if (coldef?.Cell) {\n return coldef?.Cell(row, col, ref, undefined, s) as GridCell;\n }\n if (s.RenderCell) {\n return s.RenderCell(row, col, ref, undefined, s);\n }\n\n return {\n allowOverlay: false,\n kind: GridCellKind.Loading,\n };\n }\n\n try {\n const val = String(ref).includes('.') ? (getNestedValue(ref, row) ?? '') : row?.[ref];\n\n if (coldef?.Cell) {\n return coldef?.Cell(row, col, ref, val, s) as GridCell;\n }\n if (s.RenderCell) {\n return s.RenderCell(row, col, ref, val, s);\n }\n\n return {\n allowOverlay: true,\n data: val,\n displayData: String(val),\n kind: GridCellKind.Text,\n };\n } catch (e) {\n if (s.RenderCell) {\n return s.RenderCell(row, col, ref, row?.[ref ?? ''], s);\n }\n\n return {\n allowOverlay: false,\n kind: GridCellKind.Loading,\n skeletonWidthVariability: 50,\n };\n }\n },\n total_rows: 1000,\n uniqueid: getUUID(),\n }),\n (props) => {\n const [setState, getState] = props.useStore((s) => [s.setState, s.getState]);\n\n const menus = useMantineBetterMenus();\n\n useEffect(() => {\n const onMounted = getState('onMounted');\n if (typeof onMounted === 'function') {\n onMounted(getState, setState);\n }\n setState('mounted', true);\n if (window && window.document) {\n const portalElement = window.document.getElementById('portal');\n if (!portalElement) {\n const div = window.document.createElement('div');\n div.id = 'portal';\n div.setAttribute('data-gridler-portal', props.uniqueid);\n window.document.body.appendChild(div);\n }\n }\n getState('_events').dispatchEvent(\n new CustomEvent('mounted', {\n detail: {},\n })\n );\n return () => {\n const onUnMounted = getState('onUnMounted');\n setState('mounted', false);\n getState('_events').dispatchEvent(\n new CustomEvent('unmounted', {\n detail: {},\n })\n );\n if (typeof onUnMounted === 'function') {\n onUnMounted();\n }\n };\n }, [setState, getState]);\n\n /// logic to apply the selected row.\n useEffect(() => {\n const ref = getState('_glideref');\n const keyField = getState('keyField') ?? 'id';\n const selectedRow = getState('selectedRow') ?? props.selectedRow;\n const askAPIRowNumber = getState('askAPIRowNumber');\n let rowIndex = -1;\n if (selectedRow && ref) {\n const page_data = getState('_page_data');\n const pageSize = getState('pageSize');\n for (const p in page_data) {\n for (const r in page_data[p]) {\n const idx = Number(p) * pageSize + Number(r);\n //console.log('Found row', idx, page_data[p][r]?.[keyField], selectedRow);\n if (String(page_data[p][r]?.[keyField]) === String(selectedRow)) {\n rowIndex =\n page_data[p][r]?._rownumber > 0 ? page_data[p][r]?._rownumber : idx > 0 ? idx : -1;\n break;\n }\n }\n if (rowIndex > 0) {\n break;\n }\n }\n\n if (rowIndex > 0) {\n ref.scrollTo(0, rowIndex);\n } else if (typeof askAPIRowNumber === 'function') {\n askAPIRowNumber(String(selectedRow))\n .then((r) => {\n if (r >= 0) {\n ref.scrollTo(0, r);\n getState('_events').dispatchEvent(\n new CustomEvent('selectedRowFound', {\n detail: { rowNumber: r, selectedRow: selectedRow },\n })\n );\n }\n })\n .catch((e) => {\n console.warn('Error in askAPIRowNumber', e);\n });\n }\n }\n }, [props.selectedRow]);\n\n getState('_events').addEventListener('reload', (_e: Event) => {\n getState('reload')?.();\n });\n\n return {\n ...props,\n\n hideMenu: props.hideMenu ?? menus.hide,\n showMenu: props.showMenu ?? menus.show,\n total_rows: props.total_rows ?? getState('total_rows') ?? 0,\n };\n }\n);\n\nexport type useStoreReturnType = ReturnType<typeof useGridlerStore>;\n\nexport { Provider, useGridlerStore };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useEffect } from 'react';\n\nimport type { APIOptions } from '../../utils/types';\n\nimport { useGridlerStore } from '../GridlerStore';\n\n//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.\nexport const GlidlerAPIAdaptorForGoLangv2 = React.memo((props: APIOptions) => {\n const [setStateFN, setState, getState, addError, mounted] = useGridlerStore((s) => [\n s.setStateFN,\n s.setState,\n s.getState,\n s.addError,\n s.mounted,\n ]);\n\n const useAPIQuery: (index: number) => Promise<any> = async (index: number) => {\n const colSort = getState('colSort');\n const pageSize = getState('pageSize');\n const colFilters = getState('colFilters');\n const _active_requests = getState('_active_requests');\n setState('loadingData', true);\n try {\n //console.log('APIAdaptorGoLangv2', { _active_requests, index, pageSize, props });\n if (props && props.url) {\n const head = new Headers();\n head.set('x-limit', String(pageSize ?? 50));\n head.set('x-offset', String((pageSize ?? 50) * index));\n\n head.set('Authorization', `Token ${props.authtoken}`);\n\n if (colSort?.length && colSort.length > 0) {\n head.set(\n 'x-sort',\n colSort\n ?.map((sort: any) => `${sort.id} ${sort.direction}`)\n .reduce((acc: any, val: any) => `${acc},${val}`)\n );\n }\n\n if (colFilters?.length && colFilters.length > 0) {\n colFilters\n ?.filter((f) => f.value?.length > 0)\n ?.forEach((filter: any) => {\n if (filter.value && filter.value !== '') {\n head.set(`x-searchop-${filter.operator}-${filter.id}`, `${filter.value}`);\n }\n });\n }\n\n const currentRequestIndex = _active_requests?.findIndex((f) => f.page === index) ?? -1;\n _active_requests?.forEach((r) => {\n if ((r.page >= 0 && r.page < index - 2) || (index >= 0 && r.page > index + 2)) {\n r.controller?.abort?.();\n }\n });\n if (_active_requests && currentRequestIndex >= 0 && _active_requests[currentRequestIndex]) {\n //console.log(`Already queued ${index}`, index, s._active_requests);\n setState('loadingData', false);\n return undefined;\n }\n\n const controller = new AbortController();\n await setStateFN('_active_requests', (cv) => [...(cv ?? []), { controller, page: index }]);\n\n const res = await fetch(\n `${props.url}?x-limit=${String(pageSize ?? 50)}&x-offset=${String((pageSize ?? 50) * index)}`,\n {\n headers: head,\n method: 'GET',\n signal: controller?.signal,\n }\n );\n\n if (res.ok) {\n const cr = res.headers.get('Content-Range')?.split('/');\n if (cr?.[1] && parseInt(cr[1], 10) > 0) {\n setState('total_rows', parseInt(cr[1], 10));\n }\n\n const data = await res.json();\n setState('loadingData', false);\n return data ?? [];\n }\n addError(`${res.status} ${res.statusText}`, 'api', props.url);\n\n await setStateFN('_active_requests', (cv) => [\n ...(cv ?? []).filter((f) => f.page !== index),\n ]);\n }\n } catch (e) {\n //console.log('APIAdaptorGoLangv2 error', e);\n addError(`Error: ${e}`, 'api', props.url);\n }\n setState('loadingData', false);\n return [];\n };\n\n const askAPIRowNumber: (key: string) => Promise<number> = async (key: string) => {\n const colFilters = getState('colFilters');\n\n //console.log('APIAdaptorGoLangv2', { _active_requests, index, pageSize, props });\n if (props && props.url) {\n const head = new Headers();\n head.set('x-limit', '10');\n head.set('x-fetch-rownumber', String(key));\n\n head.set('Authorization', `Token ${props.authtoken}`);\n\n if (colFilters?.length && colFilters.length > 0) {\n colFilters\n ?.filter((f) => f.value?.length > 0)\n ?.forEach((filter: any) => {\n if (filter.value && filter.value !== '') {\n head.set(`x-searchop-${filter.operator}-${filter.id}`, `${filter.value}`);\n }\n });\n }\n\n const controller = new AbortController();\n\n const res = await fetch(`${props.url}?x-fetch-rownumber=${key}}`, {\n headers: head,\n method: 'GET',\n signal: controller?.signal,\n });\n\n if (res.ok) {\n const data = await res.json();\n\n return data?.[0]?._rownumber ?? data?._rownumber ?? 0;\n }\n addError(`${res.status} ${res.statusText}`, 'api', props.url);\n }\n return [];\n };\n\n useEffect(() => {\n setState('useAPIQuery', useAPIQuery);\n setState('askAPIRowNumber', askAPIRowNumber);\n }, [props.url, props.authtoken, mounted, setState]);\n\n return <></>;\n});\n","import {\n IconEdit,\n IconExclamationMark,\n IconRefresh,\n IconSquarePlus,\n IconTrashX,\n} from '@tabler/icons-react';\nimport { useCallback, useEffect } from 'react';\n\nimport type { MantineBetterMenuInstanceItem } from '../../../MantineBetterMenu';\nimport type { FormRequestType } from '../../utils/types';\nimport type { GridlerColumn } from '../Column';\n\nimport { type GridlerProps, type GridlerState, useGridlerStore } from '../GridlerStore';\n\nexport function GlidlerFormAdaptor(props: {\n descriptionField?: ((data: Record<string, unknown>) => string) | string;\n getMenuItems?: GridlerProps['getMenuItems'];\n onReload?: () => void;\n onRequestForm: (\n request: FormRequestType,\n data: Array<Record<string, unknown>> | Record<string, unknown>\n ) => void;\n showDescriptionInMenu?: boolean;\n}) {\n const [getState, mounted, setState, reload] = useGridlerStore((s) => [\n s.getState,\n s.mounted,\n s.setState,\n s.reload,\n ]);\n\n const getMenuItems = useCallback(\n (\n id: string,\n storeState: GridlerState,\n row?: Record<string, unknown>,\n col?: GridlerColumn,\n defaultItems?: Array<unknown>\n ) => {\n //console.log('GlidlerFormInterface getMenuItems', id);\n\n if (id === 'header-menu') {\n return defaultItems || [];\n }\n\n const items = [] as Array<MantineBetterMenuInstanceItem>;\n if (defaultItems && id === 'cell') {\n items.push(...(defaultItems as Array<MantineBetterMenuInstanceItem>));\n }\n const rows = getState('_gridSelection')?.rows.toArray() ?? [];\n const manyRows = rows.length > 1;\n\n if (!row) {\n const firstRow = rows[0];\n if (firstRow !== undefined) {\n row = storeState.getRowBuffer(firstRow);\n }\n }\n\n const desc =\n typeof props.descriptionField === 'string'\n ? row?.[props.descriptionField]\n : typeof props.descriptionField === 'function' && row\n ? props.descriptionField(row)\n : undefined;\n\n if (id === 'other') {\n items.push({\n c: 'blue',\n label: 'Add',\n onClick: () => {\n props.onRequestForm('insert', row as Record<string, unknown>);\n },\n });\n }\n if ((id === 'cell' && row) || (id === 'menu' && row)) {\n items.push({\n c: 'teal',\n label: 'Add',\n leftSection: <IconSquarePlus color=\"teal\" size={16} />,\n onClick: () => {\n props.onRequestForm('insert', row as Record<string, unknown>);\n },\n });\n if (!manyRows) {\n items.push({\n c: 'green',\n label: `Modify${desc && props.showDescriptionInMenu ? ` (${desc})` : ''}`,\n leftSection: <IconEdit color=\"green\" size={16} />,\n onClick: () => {\n props.onRequestForm('change', row as Record<string, unknown>);\n },\n });\n items.push({\n c: 'red',\n label: `Remove${desc && props.showDescriptionInMenu ? ` (${desc})` : ''}`,\n leftSection: <IconTrashX color=\"maroon\" size={16} />,\n onClick: () => {\n props.onRequestForm('delete', row as Record<string, unknown>);\n },\n });\n } else {\n items.push({\n c: 'green',\n label: `Modify All Selected (${rows.length})`,\n leftSection: <IconEdit color=\"green\" size={16} />,\n onClick: () => {\n props.onRequestForm(\n 'change',\n rows.map((r) => storeState.getRowBuffer(r)) as Array<Record<string, unknown>>\n );\n },\n });\n items.push({\n c: 'red',\n label: `Remove All Selected (${rows.length})`,\n leftSection: <IconTrashX color=\"maroon\" size={16} />,\n onClick: () => {\n props.onRequestForm(\n 'delete',\n rows.map((r) => storeState.getRowBuffer(r)) as Array<Record<string, unknown>>\n );\n },\n });\n }\n\n items.push({\n isDivider: true,\n });\n } else if ((id === 'cell' && !row) || (id === 'menu' && !row)) {\n items.push({\n c: 'red',\n label: `Nothing Selected`,\n leftSection: <IconExclamationMark color=\"yellow\" size={16} />,\n });\n }\n\n items.push({\n c: 'orange',\n label: 'Refresh',\n leftSection: <IconRefresh color=\"orange\" size={16} />,\n onClick: () => {\n reload?.();\n },\n });\n\n const result = props.getMenuItems\n ? props.getMenuItems(id, storeState, row, col, items)\n : items;\n //console.log('GlidlerFormInterface getMenuItems', id, items);\n\n if (!items || items.length === 0) {\n return defaultItems || [];\n }\n return result;\n },\n [props.onRequestForm, getState]\n );\n\n useEffect(() => {\n if (mounted && typeof setState === 'function') {\n //console.log('GlidlerFormInterface setState getMenuItems1', mounted);\n if (getState('getMenuItems') !== getMenuItems) {\n setState('getMenuItems', getMenuItems);\n }\n }\n return () => {};\n }, [props.getMenuItems, mounted]);\n\n return <></>;\n}\n","import React, { useEffect } from 'react';\n\nimport { useGridlerStore } from '../GridlerStore';\n\nexport interface GlidlerLocalDataAdaptorProps {\n data: Array<unknown>;\n}\n\n//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.\nexport const GlidlerLocalDataAdaptor = React.memo((props: GlidlerLocalDataAdaptorProps) => {\n const [setState, getState, mounted] = useGridlerStore((s) => [s.setState, s.getState, s.mounted]);\n\n const useAPIQuery: (index: number) => Promise<any> = async (index: number) => {\n const pageSize = getState('pageSize');\n\n if (!(props.data && Array.isArray(props.data))) {\n return [];\n }\n\n setState('total_rows', props.data.length);\n return props.data.slice(index * (pageSize ?? 50), (index + 1) * (pageSize ?? 50));\n };\n\n useEffect(() => {\n setState('useAPIQuery', useAPIQuery);\n }, [mounted, setState]);\n\n return <></>;\n});\n","import { useGridlerStore } from './GridlerStore';\n\nexport function BottomBar() {\n const { _activeTooltip, tooltipBarProps } = useGridlerStore((s) => ({\n _activeTooltip: s._activeTooltip,\n tooltipBarProps: s.tooltipBarProps,\n }));\n\n return (\n <div data-tooltip-bar style={{ minHeight: '24px' }} {...tooltipBarProps}>\n {_activeTooltip}\n </div>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { CompactSelection } from '@glideapps/glide-data-grid';\nimport React, { useEffect, useRef } from 'react';\n\nimport { useGridlerStore } from './GridlerStore';\n\n//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.\nexport const Computer = React.memo(() => {\n const refFirstRun = useRef(0);\n const refLastFilters = useRef<any>(null);\n const {\n _glideref,\n _gridSelectionRows,\n askAPIRowNumber,\n colFilters,\n colOrder,\n colSize,\n colSort,\n columns,\n getState,\n loadPage,\n\n setState,\n setStateFN,\n values,\n } = useGridlerStore((s) => ({\n _glideref: s._glideref,\n _gridSelectionRows: s._gridSelectionRows,\n askAPIRowNumber: s.askAPIRowNumber,\n colFilters: s.colFilters,\n colOrder: s.colOrder,\n colSize: s.colSize,\n colSort: s.colSort,\n columns: s.columns,\n getState: s.getState,\n loadPage: s.loadPage,\n\n setState: s.setState,\n setStateFN: s.setStateFN,\n uniqueid: s.uniqueid,\n values: s.values,\n }));\n\n useEffect(() => {\n const searchSelection = async () => {\n const page_data = getState('_page_data');\n const pageSize = getState('pageSize');\n const keyField = getState('keyField') ?? 'id';\n const rowIndexes = [];\n for (const vi in values as Array<any>) {\n let rowIndex = -1;\n const key = String(\n typeof values?.[vi] === 'object'\n ? values?.[vi]?.[keyField]\n : typeof values?.[vi] === 'string'\n ? values?.[vi]\n : undefined\n );\n for (const p in page_data) {\n for (const r in page_data[p]) {\n const idx = Number(p) * pageSize + Number(r);\n\n if (String(page_data[p][r]?.[keyField]) === key) {\n //console.log('Found row S', idx, page_data[p][r], page_data[p][r]?.[keyField], key);\n rowIndex = idx;\n break;\n }\n }\n if (rowIndex >= 0) {\n rowIndexes.push(rowIndex);\n break;\n }\n }\n if (!(rowIndex >= 0) && typeof askAPIRowNumber === 'function') {\n const idx = await askAPIRowNumber(key);\n if (idx) {\n rowIndexes.push(idx);\n }\n }\n }\n\n return rowIndexes;\n };\n\n if (values) {\n searchSelection().then((rowIndexes) => {\n let rows = CompactSelection.empty();\n rowIndexes.forEach((r) => {\n rows = rows.add(r);\n });\n\n setStateFN('_gridSelectionRows', () => {\n return rows;\n });\n\n setStateFN('_gridSelection', (c) => ({\n columns: c?.columns ?? CompactSelection.empty(),\n ...c,\n rows,\n }));\n });\n }\n }, [values]);\n\n useEffect(() => {\n const onChange = getState('onChange');\n if (onChange && typeof onChange === 'function') {\n const page_data = getState('_page_data');\n const pageSize = getState('pageSize');\n\n const buffers = [];\n if (_gridSelectionRows) {\n for (const range of _gridSelectionRows) {\n let buffer = undefined;\n\n for (const p in page_data) {\n for (const r in page_data[p]) {\n const idx = Number(p) * pageSize + Number(r);\n if (isNaN(idx)) {\n continue;\n }\n\n if (Number(page_data[p][r]?._rownumber) === range + 1) {\n buffer = page_data[p][r];\n //console.log('Found row', range, idx, page_data[p][r]?._rownumber);\n break;\n } else if (idx === range + 1) {\n buffer = page_data[p][r];\n //console.log('Found row 2', range, idx, page_data[p][r]?._rownumber);\n break;\n }\n }\n }\n if (buffer !== undefined) {\n buffers.push(buffer);\n }\n }\n }\n\n const _values = getState('values');\n\n if (JSON.stringify(_values) !== JSON.stringify(buffers)) {\n onChange(buffers);\n }\n }\n }, [JSON.stringify(_gridSelectionRows), getState]);\n\n useEffect(() => {\n setState(\n 'renderColumns',\n columns?.map((c) => ({\n ...c,\n hasMenu: c?.hasMenu ?? true,\n icon: 'sort',\n }))\n );\n }, [columns]);\n\n useEffect(() => {\n if (!colSort) {\n return;\n }\n\n setState('_gridSelection', {\n columns: CompactSelection.empty(),\n current: undefined,\n rows: CompactSelection.empty(),\n });\n\n setState('_gridSelectionRows', CompactSelection.empty());\n setStateFN('renderColumns', (cols) => {\n return cols?.map((c) => ({\n ...c,\n icon:\n c.id && colSort?.find((col) => col.id === c.id)?.direction\n ? colSort?.find((col) => col.id === c.id)?.direction === 'asc'\n ? 'sortup'\n : 'sortdown'\n : (c.defaultIcon ?? 'sort'),\n }));\n }).then(() => {\n loadPage(0, 'all');\n });\n }, [colSort]);\n\n useEffect(() => {\n if (!colFilters) {\n return;\n }\n\n if (JSON.stringify(refLastFilters.current) !== JSON.stringify(colFilters)) {\n loadPage(0, 'all');\n refLastFilters.current = colFilters;\n }\n }, [colFilters]);\n\n useEffect(() => {\n if (!colSize) {\n return;\n }\n setStateFN('renderColumns', (cols) => {\n return cols?.map((c) => ({\n ...c,\n width: c.id && colSize?.[c.id] ? colSize?.[c.id] : c.width,\n }));\n });\n }, [colSize]);\n\n useEffect(() => {\n if (!colOrder) {\n return;\n }\n\n setStateFN('renderColumns', (cols) => {\n const result = cols?.sort((a, b) => {\n if (colOrder[a.id] > colOrder[b.id]) {\n return 1;\n }\n return -1;\n });\n\n return result;\n });\n }, [colOrder]);\n\n useEffect(() => {\n if (!_glideref) {\n return;\n }\n if (refFirstRun.current > 0) {\n return;\n }\n refFirstRun.current = 1;\n loadPage(0);\n }, [_glideref]);\n\n // console.log('Gridler:Debug:Computer', {\n // colFilters,\n // colOrder,\n // colSize,\n // colSort,\n // columns,\n // uniqueid\n // });\n\n return <></>;\n});\n","function range(end: number): number[];\nfunction range(start: number, end: number): number[];\nfunction range(start: number, end: number, step: number): number[];\nfunction range(startOrEnd: number, end?: number, step: number = 1): number[] {\n let start: number;\n \n // Handle single argument case: range(4) -> [0, 1, 2, 3]\n if (end === undefined) {\n start = 0;\n \n end = startOrEnd;\n } else {\n start = startOrEnd;\n }\n \n // Validate step\n if (step === 0) {\n throw new Error('Step cannot be zero');\n }\n \n const result: number[] = [];\n \n if (step > 0) {\n for (let i = start; i < end; i += step) {\n result.push(i);\n }\n } else {\n for (let i = start; i > end; i += step) {\n result.push(i);\n }\n }\n \n return result;\n}\n\n\nexport { range };","import React, { useEffect } from 'react';\n\nimport { range } from '../utils/range';\nimport { useGridlerStore } from './GridlerStore';\n\n//The computer component does not need to be recalculated on every render, so we use React.memo to prevent unnecessary re-renders.\nexport const Pager = React.memo(() => {\n const [\n setState,\n glideref,\n visiblePages,\n //_visibleArea,\n pageSize,\n loadPage,\n _loadingList,\n hasLocalData,\n ] = useGridlerStore((s) => [\n s.setState,\n s._glideref,\n s._visiblePages,\n //s._visibleArea,\n s.pageSize,\n s.loadPage,\n\n s._loadingList,\n s.hasLocalData,\n ]);\n\n useEffect(() => {\n if (!glideref) {\n return;\n }\n setState('mounted', true);\n }, [setState]);\n\n //Maybe move this into a computer component.\n useEffect(() => {\n if (!glideref) {\n return;\n }\n if (hasLocalData) {\n //using local data, no need to load pages\n return;\n }\n const firstPage = Math.max(0, Math.floor(visiblePages.y / pageSize));\n const lastPage = Math.floor((visiblePages.y + visiblePages.height) / pageSize);\n //const upperPage = pageSize * firstPage;\n\n // console.log(\n // 'Render1',\n // { firstPage, lastPage, upperPage },\n // { pageSize, _visibleArea, visiblePages },\n // glideref,\n\n // _loadingList,\n // _editData\n // );\n\n for (const page of range(firstPage, lastPage + 1, 1)) {\n loadPage(page);\n }\n }, [loadPage, pageSize, visiblePages, glideref, _loadingList, hasLocalData]);\n\n return <></>;\n});\n","import { ActionIcon } from '@mantine/core';\nimport { IconMenu2 } from '@tabler/icons-react';\n\nimport { useGridlerStore } from './GridlerStore';\n\nexport function RightMenuIcon() {\n const { loadingData, onContextClick } = useGridlerStore((s) => ({\n loadingData: s.loadingData,\n onContextClick: s.onContextClick,\n }));\n\n return (\n <ActionIcon\n loading={loadingData}\n mr=\"xs\"\n mt=\"2px\"\n onClick={(e) => onContextClick('menu', e)}\n variant=\"subtle\"\n >\n <IconMenu2 />\n </ActionIcon>\n );\n}\n","import type { Sprite, SpriteProps } from '@glideapps/glide-data-grid';\n\n\n\nexport const SortSprite: Sprite = (props: Partial<SpriteProps>) => {\n const fg = props.fgColor ?? 'currentColor';\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\">\n <path\n fill=\"${fg}\"\n d=\"M2.22 9.967L7.97 4.22l.085-.074l.058-.038l.072-.039l.105-.04l.105-.022l.052-.005L8.5 4l.057.002l.092.013l.107.03l.085.037l.054.03l.063.044l.072.064l5.75 5.747a.75.75 0 0 1-.976 1.133l-.084-.072L9.25 6.56v16.69a.75.75 0 0 1-1.493.102l-.007-.102V6.56l-4.47 4.468a.75.75 0 0 1-.976.072l-.084-.072a.75.75 0 0 1-.073-.977zM19.5 4a.75.75 0 0 1 .743.648l.007.102v16.687l4.47-4.467l.084-.073a.75.75 0 0 1 1.049 1.05l-.073.083l-5.728 5.727a.75.75 0 0 1-1.031.07l-.073-.07l-5.728-5.727l-.073-.084a.75.75 0 0 1-.007-.882l.08-.094l.084-.073a.75.75 0 0 1 .882-.007l.094.08l4.47 4.469V4.75l.007-.102A.75.75 0 0 1 19.5 4\"\n ></path>\n </svg>`;\n};\n","import type { GetRowThemeCallback } from '@glideapps/glide-data-grid';\n\nimport { darken, lighten, useMantineColorScheme, useMantineTheme } from '@mantine/core';\nimport { useEffect, useState } from 'react';\n\nimport { useGridlerStore } from '../components/GridlerStore';\n\nexport const offsetRows = (colorScheme: any) => (i: number) =>\n i % 2 === 0\n ? undefined\n : {\n bgCell: colorScheme === 'dark' ? '#303030' : '#e1effc'\n };\n\nexport const useGridTheme = () => {\n const theme = useMantineTheme();\n const { colorScheme } = useMantineColorScheme();\n const { enableOddEvenRowColor, focused } = useGridlerStore((state) => ({\n enableOddEvenRowColor: state.enableOddEvenRowColor,\n focused: state.focused\n }));\n\n const cellColor = {\n auto: focused ? lighten(theme.colors.blue[4], 0.9) : '#ffffff',\n dark: focused ? darken('#bacfe0', 0.2) : theme.colors.dark[7],\n light: focused ? lighten(theme.colors.blue[4], 0.8) : '#ffffff'\n }[colorScheme];\n\n // if (noFocusHighlight) {\n // cellColor = {\n // dark: theme.colors.dark[8],\n // light: '#ffffff'\n // }[colorScheme];\n // }\n\n const gridThemeDark = {\n accentColor: 'none',\n\n accentLight: theme.colors.blue[9],\n\n baseFontStyle: '13px',\n\n bgBubble: '#212121',\n bgBubbleSelected: '#000000',\n bgCell: cellColor,\n bgCellMedium: '#202027',\n\n bgHeader: '#2A2A2A',\n bgHeaderHasFocus: '#181818',\n bgHeaderHovered: '#404040',\n bgIconHeader: '#b8b8b8',\n\n bgSearchResult: '#423c24',\n borderColor: '#eee1',\n drilldownBorder: 'rgba(225,225,225,0.4)',\n fgIconHeader: '#000000',\n fontFamily:\n 'Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif',\n\n headerFontStyle: '500 13px',\n linkColor: theme.colors.blue[4],\n\n textBubble: '#ffffff',\n\n textDark: '#dedede',\n textGroupHeader: '#dedede',\n\n textHeader: '#a1a1a1',\n\n textHeaderSelected: '#000000',\n textLight: '#a0a0a0',\n textMedium: '#b8b8b8'\n };\n\n const gridThemeLight = {\n bgCell: cellColor,\n textGroupHeader: '#2c5491'\n };\n\n const commonTheme = colorScheme === 'dark' ? gridThemeDark : gridThemeLight;\n\n const [gridTheme, setGridTheme] = useState(commonTheme);\n\n useEffect(() => {\n setGridTheme(commonTheme);\n }, [colorScheme, focused]);\n\n const getRowThemeOverride: GetRowThemeCallback = (row) => {\n // const rowColor: any = {\n // auto: {\n // bgCell: '#d9e8ff',\n // bgCellMedium: '#d9e8ff'\n // },\n // dark: {\n // bgCell: '#1864ab3c',\n // bgCellMedium: '#1864ab3c'\n // },\n // light: {\n // bgCell: '#d9e8ff',\n // bgCellMedium: '#d9e8ff'\n // }\n // }[colorScheme];\n\n \n // for (const selectedRow of gridSelection?.rows) {\n // if (selectedRow === row) {\n // return {\n // bgCell: rowColor.bgCell,\n // bgCellMedium: rowColor.bgCellMedium\n // };\n // }\n // }\n return enableOddEvenRowColor ? offsetRows(colorScheme)(row) : undefined;\n };\n\n return { getRowThemeOverride, gridTheme };\n};\n","import '@glideapps/glide-data-grid/dist/index.css';\nimport {\n CompactSelection,\n DataEditor,\n type DataEditorRef,\n type GridColumn,\n} from '@glideapps/glide-data-grid';\nimport { Group, Stack } from '@mantine/core';\nimport { useMergedRef } from '@mantine/hooks';\nimport React from 'react';\n\nimport { BottomBar } from './components/BottomBar';\nimport { Computer } from './components/Computer';\nimport { useGridlerStore } from './components/GridlerStore';\nimport { Pager } from './components/Pager';\nimport { RightMenuIcon } from './components/RightMenuIcon';\nimport { SortSprite } from './components/sprites/Sort';\nimport { SortDownSprite } from './components/sprites/SortDown';\nimport { SortUpSprite } from './components/sprites/SortUp';\nimport classes from './Gridler.module.css';\nimport { useGridTheme } from './hooks/use-grid-theme';\n\nexport const GridlerDataGrid = () => {\n const ref = React.useRef<DataEditorRef | null>(null);\n const refContextActivated = React.useRef<boolean>(false);\n\n const {\n _gridSelection,\n focused,\n getCellContent,\n getCellsForSelection,\n getState,\n glideProps,\n hasLocalData,\n headerHeight,\n heightProp,\n mounted,\n onCellEdited,\n onColumnMoved,\n onColumnProposeMove,\n onColumnResize,\n onContextClick,\n onHeaderClicked,\n onHeaderMenuClick,\n onItemHovered,\n onVisibleRegionChanged,\n renderColumns,\n rowHeight,\n sections,\n selectMode,\n setState,\n setStateFN,\n total_rows,\n widthProp,\n } = useGridlerStore((s) => ({\n _gridSelection: s._gridSelection,\n focused: s.focused,\n getCellContent: s.getCellContent,\n getCellsForSelection: s.getCellsForSelection,\n getState: s.getState,\n glideProps: s.glideProps,\n hasLocalData: s.hasLocalData,\n headerHeight: s.headerHeight,\n heightProp: s.height,\n mounted: s.mounted,\n onCellEdited: s.onCellEdited,\n onColumnMoved: s.onColumnMoved,\n onColumnProposeMove: s.onColumnProposeMove,\n onColumnResize: s.onColumnResize,\n onContextClick: s.onContextClick,\n onHeaderClicked: s.onHeaderClicked,\n onHeaderMenuClick: s.onHeaderMenuClick,\n onItemHovered: s.onItemHovered,\n onVisibleRegionChanged: s.onVisibleRegionChanged,\n renderColumns: s.renderColumns,\n rowHeight: s.rowHeight,\n sections: s.sections,\n selectMode: s.selectMode,\n setState: s.setState,\n setStateFN: s.setStateFN,\n total_rows: s.total_rows,\n widthProp: s.width,\n }));\n\n const refMerged = useMergedRef(ref, (r) => {\n setStateFN('_glideref', () => {\n return r ?? undefined;\n });\n });\n\n const theme = useGridTheme();\n\n if (!mounted) {\n return (\n <>\n Loading...\n <Computer />\n </>\n );\n }\n return (\n <Stack\n align=\"stretch\"\n gap={0}\n h={heightProp ?? '100%'}\n justify=\"stretch\"\n w={widthProp ?? '100%'}\n >\n {sections?.top}\n <div\n className={classes.container}\n data-focused={focused}\n onContextMenu={(e) => {\n e.preventDefault();\n //Yes this is a litle hacky, but it works to prevent double context menu\n if (!refContextActivated.current) {\n refContextActivated.current = true;\n onContextClick('other', e);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n >\n {sections?.left}\n <DataEditor\n cellActivationBehavior=\"double-click\"\n //getCelrefMergedlContent={getCellContent}\n columns={(renderColumns as Array<GridColumn>) ?? []}\n columnSelect=\"none\"\n drawFocusRing\n getCellContent={getCellContent}\n getCellsForSelection={getCellsForSelection}\n getRowThemeOverride={theme.getRowThemeOverride}\n gridSelection={_gridSelection}\n headerHeight={headerHeight ?? 32}\n headerIcons={{ sort: SortSprite, sortdown: SortDownSprite, sortup: SortUpSprite }}\n onCellContextMenu={(cell, event) => {\n event.preventDefault();\n if (!refContextActivated.current) {\n refContextActivated.current = true;\n onContextClick('cell', event, cell[0], cell[1]);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n onCellEdited={onCellEdited}\n onColumnMoved={onColumnMoved}\n onColumnProposeMove={onColumnProposeMove}\n onColumnResize={onColumnResize}\n onGridSelectionChange={(selection) => {\n let rows = CompactSelection.empty();\n const currentSelection = getState('_gridSelection');\n for (const r of selection.rows) {\n rows = rows.hasIndex(r) ? rows : rows.add(r);\n }\n if (selectMode === 'row' && selection.current?.range) {\n for (\n let y = selection.current.range.y;\n y < selection.current.range.y + selection.current.range.height;\n y++\n ) {\n rows = rows.hasIndex(y) ? rows : rows.add(y);\n }\n }\n\n if (\n JSON.stringify(currentSelection?.columns) !== JSON.stringify(selection.columns) ||\n JSON.stringify(currentSelection?.rows) !== JSON.stringify(rows) ||\n JSON.stringify(currentSelection?.current) !== JSON.stringify(selection.current)\n ) {\n setState('_gridSelection', { ...selection, rows });\n if (JSON.stringify(currentSelection?.rows) !== JSON.stringify(rows)) {\n setState('_gridSelectionRows', rows);\n }\n }\n\n //console.log('Selection', selection);\n }}\n onHeaderClicked={onHeaderClicked}\n onHeaderContextMenu={(col, event) => {\n event.preventDefault();\n if (!refContextActivated.current) {\n refContextActivated.current = true;\n onContextClick('header', event, col);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n onHeaderMenuClick={onHeaderMenuClick}\n onItemHovered={onItemHovered}\n onVisibleRegionChanged={onVisibleRegionChanged}\n rangeSelect=\"multi-rect\"\n ref={refMerged as any}\n rightElement={\n <Group>\n {sections?.rightElementStart}\n <RightMenuIcon />\n {sections?.rightElementEnd}\n </Group>\n }\n rowHeight={rowHeight ?? 22}\n //rowMarkersCheckboxStyle='square'\n //rowMarkersKind='both'\n rowMarkers={{\n checkboxStyle: 'square',\n kind: 'both',\n }}\n rows={total_rows ?? 0}\n rowSelect=\"multi\"\n rowSelectionMode=\"auto\"\n spanRangeBehavior=\"default\"\n theme={theme.gridTheme}\n width=\"100%\"\n {...glideProps}\n />\n\n {/* </Portal> */}\n <Computer />\n {!hasLocalData && <Pager />}\n {sections?.right}\n </div>\n <BottomBar />\n {sections?.bottom}\n {/* <Portal> */}\n </Stack>\n );\n};\n","import '@glideapps/glide-data-grid/dist/index.css';\n\nimport { MantineBetterMenusProvider } from '../MantineBetterMenu';\nimport { GlidlerFormAdaptor } from './components/adaptors/GlidlerFormAdaptor';\nimport { GlidlerLocalDataAdaptor } from './components/adaptors/GlidlerLocalDataAdaptor';\nimport { type GridlerProps, Provider } from './components/GridlerStore';\nimport { GridlerDataGrid } from './GridlerDataGrid';\n\nconst Gridler = (props: GridlerProps) => {\n return (\n <MantineBetterMenusProvider>\n <Provider\n {...props}\n persist={{\n name: `Gridler_${props.uniqueid}`,\n partialize: (s) => ({ colOrder: s.colOrder, colSize: s.colSize }),\n\n version: 1,\n }}\n >\n <GridlerDataGrid />\n {props.children}\n </Provider>\n </MantineBetterMenusProvider>\n );\n};\n\nGridler.FormAdaptor = GlidlerFormAdaptor;\nGridler.LocalDataAdaptor = GlidlerLocalDataAdaptor;\n\nexport { Gridler };\nexport default Gridler;\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","getNestedValue","t","l","o","c","e","MantineBetterMenusStoreProvider","useMantineBetterMenus","createSyncStore","set","get","id","produce","state","idx","m","options","s","menuIndex","menu","getUUID","MenuRenderer","menus","providerID","setInstanceState","width","Portal","createElement","Menu","jsx","item","itemIndex","MenuItemRenderer","label","loading","setLoading","useState","jsxs","subitem","subitemIndex","MantineBetterMenusProvider","FilterOperators","ColumnFilterInput","filterIndex","f","filter","filterValue","setFilterValue","defferedFilterValue","useDebouncedValue","useEffect","filters","TextInput","ActionIcon","IconX","ColumnFilterInputOperator","Select","ColumnFilterSet","Stack","SortDownSprite","SortUpSprite","SpriteImage","Provider","useGridlerStore","CompactSelection","err","args","cell","col","row","buffer","GridCellKind","selection","_abortSignal","_cv","result","y","x","firstPage","upperPage","index","pPage","clearMode","page","damageList","colLen","hasPage","r","data","cv","newVal","from","to","fromItem","toItem","cols","renderCols","i","acc","startIndex","endIndex","column","newSize","_colIndex","_newSizeWithGrow","area","event","coldef","items","search","dir","newSort","IconGrid4x4","colIndex","screenPosition","sortItems","region","_tx","_ty","_extras","onVisibleRegionChangedDebounced","previousPage","pageDif","newpos","resolve","reject","ref","val","setState","getState","onMounted","div","onUnMounted","keyField","selectedRow","askAPIRowNumber","rowIndex","page_data","pageSize","p","_e","GlidlerAPIAdaptorForGoLangv2","setStateFN","addError","mounted","useAPIQuery","colSort","colFilters","_active_requests","head","sort","currentRequestIndex","controller","res","cr","Fragment","GlidlerFormAdaptor","reload","getMenuItems","useCallback","storeState","defaultItems","rows","manyRows","firstRow","desc","IconSquarePlus","IconEdit","IconTrashX","IconExclamationMark","IconRefresh","GlidlerLocalDataAdaptor","BottomBar","_activeTooltip","tooltipBarProps","Computer","refFirstRun","useRef","refLastFilters","_glideref","_gridSelectionRows","colOrder","colSize","columns","loadPage","values","rowIndexes","vi","onChange","buffers","range","_values","a","b","startOrEnd","end","step","start","Pager","glideref","visiblePages","_loadingList","hasLocalData","lastPage","RightMenuIcon","loadingData","onContextClick","IconMenu2","SortSprite","offsetRows","colorScheme","useGridTheme","theme","useMantineTheme","useMantineColorScheme","enableOddEvenRowColor","focused","cellColor","lighten","darken","gridThemeDark","commonTheme","gridTheme","setGridTheme","GridlerDataGrid","refContextActivated","_gridSelection","getCellContent","getCellsForSelection","glideProps","headerHeight","heightProp","onCellEdited","onColumnMoved","onColumnProposeMove","onColumnResize","onHeaderClicked","onHeaderMenuClick","onItemHovered","onVisibleRegionChanged","renderColumns","rowHeight","sections","selectMode","total_rows","widthProp","refMerged","useMergedRef","classes","DataEditor","currentSelection","Group","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}