@warkypublic/oranguru 0.0.21 → 0.0.22
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 +4 -4
- package/dist/lib.cjs.js.map +1 -1
- package/dist/lib.es.js +49 -49
- package/dist/lib.es.js.map +1 -1
- package/package.json +1 -1
package/dist/lib.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.es.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/base64.js","../src/Gridler/utils/golang-restapi-v2/index.ts","../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/RightMenuIcon.tsx","../src/Gridler/components/RefHandler.tsx","../src/Gridler/components/BottomBar.tsx","../src/Gridler/components/Computer.tsx","../src/Gridler/utils/range.ts","../src/Gridler/components/Pager.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 c(n) {\n const o = atob(n), t = new ArrayBuffer(o.length), e = new Uint8Array(t);\n for (let r = 0; r < o.length; r++)\n e[r] = o.charCodeAt(r);\n return new Blob([t]);\n}\nfunction u(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction d(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction f(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(new Blob([r]));\n }, e.onerror = t, e.readAsArrayBuffer(n);\n });\n}\nfunction l(n) {\n return decodeURIComponent(\n Array.prototype.map.call(\n atob(n),\n (o) => `%${`00${o.charCodeAt(0).toString(16)}`.slice(-2)}`\n ).join(\"\")\n );\n}\nfunction w(n) {\n return btoa(\n encodeURIComponent(n).replace(\n /%([0-9A-F]{2})/g,\n (o, t) => String.fromCharCode(Number.parseInt(t, 16))\n )\n );\n}\nfunction A(n) {\n return new Promise((o, t) => {\n if (!n) return o(\"\");\n if (typeof n == \"string\")\n return o(n);\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(r);\n }, e.onerror = t, e.readAsText(n);\n });\n}\nexport {\n A as BlobToString,\n d as FileToBase64,\n f as FileToBlob,\n l as b64DecodeUnicode,\n w as b64EncodeUnicode,\n c as base64ToBlob,\n u as blobToBase64\n};\n//# sourceMappingURL=base64.js.map\n","import {b64EncodeUnicode} from '@warkypublic/artemis-kit/base64'\nconst TOKEN_KEY = 'gridler_golang_restapi_v2_token'\n\nexport type APIOptionsType = {\n autocreate?: boolean\n autoref?: boolean\n baseurl?: string\n getAPIProvider?: () => { provider: string; providerKey: string }\n getAuthToken?: () => string\n operations?: Array<FetchAPIOperation>\n postfix?: string\n prefix?: string\n requestTimeoutSec?: number\n}\n\n\n\nexport interface APIResponse {\n errmsg: string\n payload?: any\n retval: number\n}\nexport interface FetchAPIOperation {\n name?: string\n op?: string\n type: GoAPIHeaderTypes //x-fieldfilter\n value: string\n}\n/**\n * @description Types for the Go Rest API headers\n * @typedef {String} GoAPIEnum\n*/\nexport type GoAPIEnum =\n | 'advsql'\n | 'api-key'\n | 'api-range-from'\n | 'api-range-size'\n | 'api-range-total'\n | 'api-src'\n | 'api'\n | 'association_autocreate'\n | 'association_autoupdate'\n | 'association-update'\n | 'cql-sel'\n | 'cursor-backward'// For x cursor-backward header\n | 'cursor-forward' // For x cursor-forward header\n | 'custom-sql-join'\n | 'custom-sql-or'\n | 'custom-sql-w'\n | 'detailapi'\n | 'distinct'\n | 'expand'\n | 'fetch-rownumber'\n | 'fieldfilter'\n | 'fieldfilter'\n | 'files' //For x files header\n | 'func'\n | 'limit'\n | 'no-return'\n | 'not-select-fields'\n | 'offset'\n | 'parm'\n | 'pkrow'\n | 'preload'\n | 'searchand'\n | 'searchfilter'\n | 'searchfilter'\n | 'searchop'\n | 'searchop'\n | 'searchor'\n | 'select-fields'\n | 'simpleapi'\n | 'skipcache'\n | 'skipcount'\n | 'sort'\n\n\nexport type GoAPIHeaderKeys = `x-${GoAPIEnum}`\n\n\nexport type GoAPIHeaderTypes = GoAPIEnum & string\n\n\nexport interface GoAPIOperation {\n name?: string\n op?: string\n type: GoAPIHeaderTypes //x-fieldfilter\n value: string\n}\nexport interface MetaData {\n limit?: number\n offset?: number\n total?: number\n}\n\n\n/**\n * Builds an array of objects by encoding specific values and setting headers.\n *\n * @param {Array<FetchAPIOperation>} ops - The array of FetchAPIOperation objects to be built.\n * @param {Headers} [headers] - Optional headers to be set.\n * @return {Array<FetchAPIOperation>} - The built array of FetchAPIOperation objects.\n */\nconst buildGoAPIOperation = (\n ops: Array<FetchAPIOperation>,\n headers?: Headers\n): Array<FetchAPIOperation> => {\n const newops = [...ops.filter((i) => i !== undefined && i.type !== undefined)]\n\n \n for (let i = 0; i < newops.length; i++) {\n if (!newops[i].name || newops[i].name === '') {\n newops[i].name = ''\n }\n if (newops[i].type === 'files' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'advsql' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (newops[i].type === 'custom-sql-or' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (newops[i].type === 'custom-sql-join' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'not-select-fields' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'custom-sql-w' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'select-fields' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'cql-sel' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (headers) {\n if (!newops || newops.length === 0) {\n headers.set(`x-limit`, '10')\n }\n\n if (newops[i].type === 'association_autoupdate') {\n headers.set(`association_autoupdate`, newops[i].value ?? '1')\n }\n if (newops[i].type === 'association_autocreate') {\n headers.set(`association_autocreate`, newops[i].value ?? '1')\n }\n if (\n newops[i].type === 'searchop' ||\n newops[i].type === 'searchor' ||\n newops[i].type === 'searchand'\n ) {\n headers.set(\n encodeURIComponent(`x-${newops[i].type}-${newops[i].op}-${newops[i].name}`),\n String(newops[i].value)\n )\n } else {\n headers.set(\n encodeURIComponent(\n `x-${newops[i].type}${newops[i].name && newops[i].name !== '' ? '-' + newops[i].name : ''}`\n ),\n String(newops[i].value)\n )\n }\n }\n }\n\n return newops\n}\n\n/**\n * Retrieves the headers from an array of FetchAPIOperation objects and returns them as an object.\n *\n * @param {Array<FetchAPIOperation>} ops - The array of FetchAPIOperation objects.\n * @return {{ [key: string]: string }} - The headers as an object with string keys and string values.\n */\nconst GoAPIHeaders = (\n ops: Array<FetchAPIOperation>,\n headers?: Headers\n): { [key: string]: string } => {\n const head = new Headers()\n const headerlist: Record<string,string> = {}\n\n const authToken = getAuthToken?.()\n if (authToken && authToken !== '') {\n \n head.set('Authorization', `Token ${authToken}`)\n } else {\n const token = getAuthToken()\n if (token) {\n head.set('Authorization', `Token ${token}`)\n }\n }\n\n\n if (headers) {\n headers.forEach((v, k) => {\n head.set(k, v)\n })\n }\n const distinctOperations: Array<FetchAPIOperation> = []\n\n for (const value of ops?.filter((val) => !!val) ?? []) {\n const index = distinctOperations.findIndex(\n (searchValue) => searchValue.name === value.name && searchValue.type === value.type\n )\n if (index === -1) {\n distinctOperations.push(value)\n } else {\n distinctOperations[index] = value\n }\n }\n\n buildGoAPIOperation(distinctOperations, head)\n\n head?.forEach((v, k) => {\n headerlist[k] = v\n })\n\n if (headers) {\n for (const key of Object.keys(headerlist)) {\n headers.set(key, headerlist[key])\n }\n }\n\n return headerlist\n}\n\nconst callbacks = {\n getAuthToken: () => {\n if (localStorage) {\n const token = localStorage.getItem(TOKEN_KEY)\n if (token) {\n return token\n }\n }\n return undefined\n }\n}\n\n/**\n * Retrieves the authentication token from local storage.\n *\n * @return {string | undefined} The authentication token if found, otherwise undefined\n */\nconst getAuthToken = () => callbacks?.getAuthToken?.()\n\nconst setAuthTokenCallback = (cb: ()=> string) => {\n callbacks.getAuthToken = cb\n return callbacks.getAuthToken\n}\n\n/**\n * Sets the authentication token in the local storage.\n *\n * @param {string} token - The authentication token to be set.\n */\nconst setAuthToken = (token: string) => {\n if (localStorage) {\n localStorage.setItem(TOKEN_KEY, token)\n }\n}\n\n\nexport {buildGoAPIOperation,getAuthToken,GoAPIHeaders,setAuthToken,setAuthTokenCallback}","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?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => 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(e).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(e).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 ) => Partial<GridCellLoose>;\n defaultIcon?: string;\n disableFilter?: boolean;\n disableMove?: boolean;\n disableResize?: boolean;\n disableSearch?: 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 virtual?: boolean;\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 @typescript-eslint/no-explicit-any */\n\n/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n type CellArray,\n type CellClickedEventArgs,\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 allowMultiSelect?: boolean;\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 scrollToRowKey?: number;\n searchFields?: Array<string>;\n searchStr?: string;\n sections?: {\n bottom?: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n rightElementDisabled?: boolean;\n rightElementEnd?: React.ReactNode;\n rightElementStart?: React.ReactNode;\n top?: React.ReactNode;\n };\n selectedRowKey?: number;\n selectFirstRowOnMount?: boolean;\n selectMode?: 'cell' | 'row';\n showMenu?: (id: string, options?: Partial<MantineBetterMenuInstance>) => void;\n title?: string;\n tooltipBarProps?: React.HTMLAttributes<HTMLDivElement>;\n total_rows?: number;\n\n uniqueid: string;\n values?: Array<Record<string, any>>;\n width?: number | string;\n}\n\nexport interface GridlerRef {\n getGlideRef: () => DataEditorRef | undefined;\n getState: GridlerState['getState'];\n isEmpty: () => boolean;\n refresh: (parms?: any) => Promise<void>;\n reload: (parms?: any) => Promise<void>;\n reloadRow: (key: number | string) => Promise<void>;\n scrollToRow: (key: number | string) => Promise<void>;\n selectRow: (key: number | string) => Promise<void>;\n setStateFN: GridlerState['setStateFN'];\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 _refresh: () => Promise<void>;\n _scrollTimeout?: any | number;\n _visibleArea: Rectangle;\n _visiblePages: Rectangle;\n addError: (err: string, ...args: Array<any>) => void;\n askAPIRowNumber?: (key: string) => Promise<number>;\n colFilters?: Array<FilterOption>;\n colOrder?: Record<string, number>;\n colSize?: Record<string, number>;\n colSort?: Array<SortOption>;\n data?: Array<any>;\n errors: Array<string>;\n focused?: boolean;\n\n get: () => GridlerState;\n getCellContent: (cell: Item) => GridCell;\n getCellsForSelection: (\n selection: Rectangle,\n abortSignal: AbortSignal\n ) => CellArray | GetCellsThunk;\n getGridSelectedRows: () => Array<any>;\n getRowBuffer: (row: number) => Record<string, any>;\n getRowIndexByKey: (key: number | string) => Promise<number | undefined>;\n getState: <K extends keyof GridlerStoreState>(key: K) => GridlerStoreState[K];\n hasLocalData: boolean;\n isEmpty: boolean;\n\n loadingData?: boolean;\n loadPage: (page: number, clearMode?: 'all' | 'page') => Promise<void>;\n mounted: boolean;\n onCellActivated: (cell: Item) => void;\n onCellClicked: (cell: Item, event: CellClickedEventArgs) => void;\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: CellClickedEventArgs, 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 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\n ready: boolean;\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => void;\n reload?: () => Promise<void>;\n\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 useAPIQuery?: (index: number) => Promise<Array<Record<string, any>>>;\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 _refresh: async () => {\n const s = get();\n await s.loadPage(0, 'all');\n await s.refreshCells();\n await s.reload?.();\n },\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<unknown>) => {\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) as Record<string, string> | undefined;\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 getGridSelectedRows: () => {\n const state = get();\n const buffers: Array<any> = [];\n const page_data = state._page_data;\n const pageSize = state.pageSize;\n\n if (state._gridSelectionRows) {\n for (const range of state._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 return buffers;\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 getRowIndexByKey: async (key: number | string) => {\n const state = get();\n\n let rowIndex = -1;\n if (state.ready) {\n const page_data = state._page_data;\n const pageSize = state.pageSize;\n const keyField = state.keyField ?? 'id';\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], scrollToRowKey);\n if (String(page_data[p][r]?.[keyField]) === String(key)) {\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 console.log('Local row index', rowIndex, key);\n return rowIndex;\n }\n }\n\n if (rowIndex > 0) {\n return rowIndex;\n } else if (typeof state.askAPIRowNumber === 'function') {\n const rn = await state.askAPIRowNumber(String(key));\n if (rn && rn >= 0) {\n console.log('Remote row index', rowIndex, key);\n return rn;\n }\n }\n }\n\n return undefined;\n },\n getState: (key) => {\n return get()[key];\n },\n hasLocalData: false,\n isEmpty: true,\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.error('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 onCellActivated: (cell: Item): void => {\n const state = get();\n const [col, row] = cell;\n\n state._events.dispatchEvent(\n new CustomEvent('onCellActivated', {\n detail: { cell, col, row, state },\n })\n );\n state.glideProps?.onCellActivated?.(cell);\n },\n onCellClicked: (cell: Item, event: CellClickedEventArgs) => {\n const state = get();\n const [col, row] = cell;\n if (state.glideProps?.onCellClicked) {\n state.glideProps?.onCellClicked?.(cell, event);\n } else {\n if (state.values?.length) {\n if (state.onChange) {\n state.onChange(state.values);\n } else {\n state.setState('values', state.values);\n }\n }\n }\n\n state._events.dispatchEvent(\n new CustomEvent('onCellClicked', {\n detail: { cell, col, row, state },\n })\n );\n },\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 state.glideProps?.onCellEdited?.(cell, newVal);\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\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 onContextClick: (area: string, event: CellClickedEventArgs, col?: number, row?: number) => {\n const s = get();\n const coldef = s.renderColumns?.[col ?? -1];\n\n const items =\n area === 'menu'\n ? [{ leftSection: <IconGrid4x4 size={16} />, title: s.title ?? 'Grid' }]\n : coldef\n ? [\n { leftSection: <IconGrid4x4 size={16} />, title: s.title ?? 'Grid' },\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 //@ts-expect-error Check bounds\n x: event.clientX ?? event.bounds?.x,\n //@ts-expect-error Check bounds\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 id: 'refesh',\n label: `Refresh`,\n onClick: () => {\n const s = get();\n s._refresh?.();\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 pageSize: 50,\n ready: false,\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => {\n const state = get();\n const damageList: { cell: [number, number] }[] = [];\n const colLen = Object.keys(state.renderColumns ?? [1, 2, 3]).length;\n\n const from = fromRow && fromRow > 0 ? fromRow : 0;\n const to = toRow && toRow >= from ? toRow : from + state.pageSize;\n\n for (let row = from; row <= to; row++) {\n if (col && col > 0) {\n damageList.push({\n cell: [col, row],\n });\n } else {\n for (let c = 0; c <= colLen; c++) {\n damageList.push({\n cell: [c, row],\n });\n }\n }\n }\n\n state._glideref?.updateCells(damageList);\n },\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: unknown) => unknown)(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 { kind: GridCellKind.Text, ...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 getState('_events').addEventListener('reload', (_e: Event) => {\n getState('_refresh')?.();\n });\n\n return {\n ...props,\n\n colSort: props.defaultSort ?? getState('colSort') ?? [],\n hideMenu: props.hideMenu ?? menus.hide,\n scrollToRowKey: props.scrollToRowKey ?? props.selectedRowKey ?? getState('scrollToRowKey'),\n showMenu: props.showMenu ?? menus.show,\n total_rows: getState('total_rows') ?? props.total_rows,\n };\n }\n);\n\nexport type useStoreReturnType = ReturnType<typeof useGridlerStore>;\n\nexport { Provider, useGridlerStore };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect } from 'react';\n\nimport type { APIOptions } from '../../utils/types';\nimport type { GridlerColumn } from '../Column';\n\nimport {\n type FetchAPIOperation,\n GoAPIHeaders,\n type GoAPIOperation,\n} from '../../utils/golang-restapi-v2';\nimport { useGridlerStore } from '../GridlerStore';\n\nexport interface GlidlerAPIAdaptorForGoLangv2Props<T = unknown> extends APIOptions {\n filter?: string;\n hotfields?: Array<string>;\n initialData?: Array<T>;\n options?: Array<GoAPIOperation>;\n}\n\nfunction _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForGoLangv2Props<T>) {\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> = useCallback(\n async (index: number) => {\n const columns = getState('columns');\n const colSort = getState('colSort');\n const pageSize = getState('pageSize');\n const colFilters = getState('colFilters');\n const searchStr = getState('searchStr');\n const searchFields = getState('searchFields');\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\n head.set('Authorization', `Token ${props.authtoken}`);\n const ops: FetchAPIOperation[] = [\n { type: 'limit', value: String(pageSize ?? 50) },\n { type: 'offset', value: String((pageSize ?? 50) * index) },\n ];\n\n if (colSort?.length && colSort.length > 0) {\n ops.push({\n type: 'sort',\n value: colSort\n ?.map((sort: any) => `${sort.id} ${sort.direction}`)\n .reduce((acc: any, val: any) => `${acc},${val}`),\n });\n }\n\n colFilters\n ?.filter((f) => f.value?.length > 0)\n ?.forEach((filter: any) => {\n if (filter.value && filter.value !== '') {\n ops.push({\n name: `${filter.id}`,\n op: filter.operator,\n type: 'searchop',\n value: filter.value,\n });\n }\n });\n\n if (searchStr && searchStr !== '') {\n columns\n ?.filter(\n (f) =>\n !f.disableFilter &&\n !f.disableSearch &&\n !f.virtual &&\n ((searchFields ?? []).length == 0 || searchFields?.includes(f.id))\n )\n ?.forEach((filter: any) => {\n ops.push({\n name: `${filter.id}`,\n op: 'contains',\n type: 'searchor',\n value: searchStr,\n });\n });\n }\n\n if (props.filter && props.filter !== '') {\n ops.push({\n name: 'sql_filter',\n type: 'custom-sql-w',\n value: props.filter,\n });\n }\n\n if ((props.options ?? []).length > 0) {\n ops.push(...(props.options ?? []));\n }\n\n const col_ids =\n columns\n ?.filter((col) => !col.virtual)\n ?.map((col: GridlerColumn) => {\n return col.id;\n }) ?? [];\n\n if (props.hotfields && props.hotfields.length > 0) {\n col_ids?.push(props.hotfields.join(','));\n }\n\n if (col_ids && col_ids.length > 0) {\n ops.push({\n type: 'select-fields',\n value: col_ids.join(','),\n });\n }\n\n if (ops && ops.length > 0) {\n const optionHeaders = GoAPIHeaders(ops);\n for (const oh in GoAPIHeaders(ops)) {\n head.set(oh, optionHeaders[oh]);\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\n if (\n _active_requests &&\n currentRequestIndex >= 0 &&\n _active_requests[currentRequestIndex]\n ) {\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) => [\n ...(cv ?? []),\n { controller, page: index },\n ]);\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 getState,\n props.authtoken,\n props.url,\n props.filter,\n JSON.stringify(props.options),\n setState,\n setStateFN,\n addError,\n ]\n );\n\n const askAPIRowNumber: (key: string) => Promise<number> = useCallback(\n 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 const ops: FetchAPIOperation[] = [\n { type: 'limit', value: String(10) },\n { type: 'fetch-rownumber', value: key },\n ];\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 if (props.filter && props.filter !== '') {\n ops.push({\n name: 'sql_filter',\n type: 'custom-sql-w',\n value: props.filter,\n });\n }\n\n if (props.options && props.options.length > 0) {\n const optionHeaders = GoAPIHeaders(props.options);\n for (const oh in optionHeaders) {\n head.set(oh, optionHeaders[oh]);\n }\n }\n\n if (ops && ops.length > 0) {\n const optionHeaders = GoAPIHeaders(ops);\n for (const oh in GoAPIHeaders(ops)) {\n head.set(oh, optionHeaders[oh]);\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 [props.url, props.authtoken, props.filter, props.options, getState, addError]\n );\n\n //Reset the function in the store.\n useEffect(() => {\n setState('useAPIQuery', useAPIQuery);\n setState('askAPIRowNumber', askAPIRowNumber);\n\n const _refresh = getState('_refresh');\n\n //Reset the loaded pages to new rules\n _refresh?.().then(() => {\n const onChange = getState('onChange');\n const getGridSelectedRows = getState('getGridSelectedRows');\n if (onChange && typeof onChange === 'function') {\n const buffers = getGridSelectedRows?.();\n onChange(buffers);\n }\n });\n }, [props.url, props.authtoken, props.filter, JSON.stringify(props.options), mounted, setState]);\n\n return <></>;\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 GlidlerAPIAdaptorForGoLangv2 = React.memo(_GlidlerAPIAdaptorForGoLangv2);\n\nGlidlerAPIAdaptorForGoLangv2.displayName = 'Gridler-GlidlerAPIAdaptorForGoLangv2';\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 changeOnActiveClick?: boolean;\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, _events] = useGridlerStore((s) => [\n s.getState,\n s.mounted,\n s.setState,\n s._events,\n ]);\n\n useEffect(() => {\n if (mounted && props.changeOnActiveClick) {\n const evf = (event: CustomEvent<any>) => {\n const { row, state } = event.detail;\n const getRowBuffer = state.getRowBuffer as (row: number) => Record<string, unknown>;\n if (getRowBuffer) {\n const rowData = getRowBuffer(row);\n if (!rowData) {\n return;\n }\n props.onRequestForm('change', rowData);\n }\n };\n _events?.addEventListener('onCellActivated', evf as any);\n return () => {\n if (evf) {\n _events?.removeEventListener('onCellActivated', evf as any);\n }\n };\n }\n }, [props.changeOnActiveClick, mounted, _events]);\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\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 onClickAsync: async () => {\n const _refresh = getState('_refresh');\n await _refresh?.();\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 type { GridlerColumns } from '../Column';\n\nimport { type FilterOption, type SortOption, useGridlerStore } from '../GridlerStore';\n\nexport interface GlidlerLocalDataAdaptorProps<T = unknown> {\n data: Array<T>;\n onColumnFilter?: (\n colFilters: Array<FilterOption> | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\n onColumnSort?: (\n colSort: Array<SortOption> | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\n onSearch?: (\n searchField: string | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\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.\nfunction _GlidlerLocalDataAdaptor<T = unknown>(props: GlidlerLocalDataAdaptorProps<T>) {\n const [setState, getState, mounted] = useGridlerStore((s) => [s.setState, s.getState, s.mounted]);\n\n const { colFilters, colSort, columns, searchStr } = useGridlerStore((s) => ({\n colFilters: s.colFilters,\n colOrder: s.colOrder,\n colSize: s.colSize,\n colSort: s.colSort,\n columns: s.columns,\n searchStr: s.searchStr,\n }));\n\n const refChanged = React.useRef({\n colFilters: colFilters,\n colSort: colSort,\n searchStr: searchStr,\n });\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 useEffect(() => {\n if (props.onColumnSort && colSort !== refChanged?.current?.colSort) {\n const sortedData = props.onColumnSort(colSort, columns, props.data as Array<T>);\n setState('total_rows', sortedData.length);\n setState('data', sortedData);\n refChanged.current.colSort = colSort;\n getState('refreshCells')?.();\n }\n }, [colSort, props.onColumnSort]);\n\n useEffect(() => {\n if (props.onColumnFilter && colFilters !== refChanged?.current?.colFilters) {\n const filteredData = props.onColumnFilter(colFilters, columns, props.data as Array<T>);\n setState('total_rows', filteredData.length);\n setState('data', filteredData);\n refChanged.current.colFilters = colFilters;\n getState('refreshCells')?.();\n }\n }, [colFilters, props.onColumnFilter]);\n\n useEffect(() => {\n if (props.onSearch && searchStr !== refChanged?.current?.searchStr) {\n const filteredData = props.onSearch(searchStr, columns, props.data as Array<T>);\n setState('total_rows', filteredData.length);\n setState('data', filteredData);\n refChanged.current.colFilters = colFilters;\n getState('refreshCells')?.();\n }\n }, [searchStr, props.onSearch]);\n\n return <></>;\n}\nexport const GlidlerLocalDataAdaptor = React.memo(_GlidlerLocalDataAdaptor);\n\nGlidlerLocalDataAdaptor.displayName = 'Gridler-GlidlerLocalDataAdaptor';\n","import { ActionIcon } from '@mantine/core';\nimport { IconMenu2 } from '@tabler/icons-react';\n\nimport { useGridlerStore } from './GridlerStore';\n\nexport function GridlerRightMenuIcon() {\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 as any)}\n variant=\"subtle\"\n >\n <IconMenu2 />\n </ActionIcon>\n );\n}\n","import React, { type PropsWithChildren, type Ref, useImperativeHandle } from 'react';\n\nimport { type GridlerRef, useGridlerStore } from './GridlerStore';\n\nfunction _GridlerRefHandler(props: PropsWithChildren, ref: Ref<GridlerRef> | undefined) {\n const [setStateFN, getstate] = useGridlerStore((s) => [s.setStateFN, s.getState]);\n\n useImperativeHandle<GridlerRef, GridlerRef>(ref, () => {\n return {\n getGlideRef: () => {\n return getstate('_glideref');\n },\n getState: getstate,\n isEmpty: () => getstate('isEmpty'),\n refresh: async (parms?: any) => {\n const refreshCells = getstate('refreshCells');\n const loadPage = getstate('loadPage');\n loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {\n refreshCells?.();\n });\n },\n reload: async (parms?: any) => {\n const refreshCells = getstate('refreshCells');\n const loadPage = getstate('loadPage');\n loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {\n refreshCells?.();\n });\n },\n reloadRow: async (key: number | string) => {\n const refreshCells = getstate('refreshCells');\n //const loadPage = getstate('loadPage');\n const getRowIndexByKey = getstate('getRowIndexByKey');\n const rn = await getRowIndexByKey?.(String(key));\n if (rn && rn >= 0) {\n refreshCells?.(rn, rn + 1);\n //todo loadpage or row from server\n }\n },\n scrollToRow: async (key: number | string) => {\n if (key && Number(key) >= 0) {\n setStateFN('scrollToRowKey', (cv) => Number(key ?? cv));\n }\n },\n selectRow: async (key: number | string) => {\n if (key && Number(key) >= 0) {\n setStateFN('selectedRowKey', (cv) => Number(key ?? cv));\n }\n },\n setStateFN: setStateFN,\n };\n }, []);\n return <>{props.children}</>;\n}\n\nexport const GridlerRefHandler = React.forwardRef(_GridlerRefHandler);\n","/* eslint-disable react/react-in-jsx-scope */\nimport { 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","import { CompactSelection } from '@glideapps/glide-data-grid';\nimport { useDebouncedCallback } from '@mantine/hooks';\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 refLastSearch = useRef('');\n const refLastFilters = useRef<unknown>(null);\n const {\n _glideref,\n _gridSelectionRows,\n colFilters,\n colOrder,\n colSize,\n colSort,\n columns,\n getRowIndexByKey,\n getState,\n loadPage,\n ready,\n\n scrollToRowKey,\n searchStr,\n selectedRowKey,\n setState,\n setStateFN,\n values,\n } = useGridlerStore((s) => ({\n _glideref: s._glideref,\n _gridSelectionRows: s._gridSelectionRows,\n colFilters: s.colFilters,\n colOrder: s.colOrder,\n colSize: s.colSize,\n colSort: s.colSort,\n columns: s.columns,\n getRowIndexByKey: s.getRowIndexByKey,\n getState: s.getState,\n loadPage: s.loadPage,\n ready: s.ready,\n\n scrollToRowKey: s.scrollToRowKey,\n searchStr: s.searchStr,\n selectedRowKey: s.selectedRowKey,\n setState: s.setState,\n setStateFN: s.setStateFN,\n uniqueid: s.uniqueid,\n values: s.values,\n }));\n\n const debouncedDoSearch = useDebouncedCallback(\n (searchStr: string) => {\n loadPage(0, 'all').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onSearched', {\n detail: { search: searchStr },\n })\n );\n });\n },\n {\n delay: 300,\n leading: false,\n }\n );\n\n //When values change, update selection\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<Record<string, unknown>>) {\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)) {\n const idx = await getRowIndexByKey(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 //Fire onChange when selection changes\n useEffect(() => {\n const onChange = getState('onChange');\n if (onChange && typeof onChange === 'function') {\n const getGridSelectedRows = getState('getGridSelectedRows');\n const buffers = getGridSelectedRows();\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 (searchStr === undefined || searchStr === null) {\n refLastSearch.current = '';\n return;\n }\n if (refLastSearch.current !== searchStr) {\n debouncedDoSearch(searchStr);\n refLastSearch.current = searchStr;\n }\n }, [searchStr]);\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').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onColumnSorted', {\n detail: { cols: colSort },\n })\n );\n });\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').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onColumnFiltered', {\n detail: { filters: colFilters },\n })\n );\n });\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 }).then(() => {\n getState('refreshCells')?.();\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 }).then(() => {\n getState('refreshCells')?.();\n });\n }, [colOrder]);\n\n //Initial Load\n useEffect(() => {\n if (!_glideref) {\n return;\n }\n if (refFirstRun.current > 0) {\n return;\n }\n refFirstRun.current = 1;\n loadPage(0).then(() => {\n getState('refreshCells')?.();\n });\n }, [ready, loadPage]);\n\n //Logic to select first row on mount\n useEffect(() => {\n const _events = getState('_events');\n const loadPage = () => {\n const selectFirstRowOnMount = getState('selectFirstRowOnMount');\n if (ready && selectFirstRowOnMount) {\n const scrollToRowKey = getState('scrollToRowKey');\n if (scrollToRowKey && scrollToRowKey >= 0) {\n return;\n }\n const keyField = getState('keyField') ?? 'id';\n const page_data = getState('_page_data');\n\n const firstBuffer = page_data?.[0]?.[0];\n const firstRow = firstBuffer?.[keyField];\n const currentValues = getState('values') ?? [];\n\n if (firstRow && firstRow > 0 && (currentValues.length ?? 0) === 0) {\n const values = [firstBuffer, ...(currentValues as Array<Record<string, unknown>>)];\n\n const onChange = getState('onChange');\n //console.log('Selecting first row:', firstRow, firstBuffer, values);\n if (onChange) {\n onChange(values);\n } else {\n setState('values', values);\n }\n\n setState('scrollToRowKey', firstRow);\n }\n }\n };\n\n _events?.addEventListener('loadPage', loadPage);\n\n return () => {\n _events?.removeEventListener('loadPage', loadPage);\n };\n }, [ready]);\n\n /// logic to apply the selected row.\n // useEffect(() => {\n // const ready = getState('ready');\n // const ref = getState('_glideref');\n // const getRowIndexByKey = getState('getRowIndexByKey');\n\n // if (scrollToRowKey && ref && ready) {\n // getRowIndexByKey?.(scrollToRowKey).then((r) => {\n // if (r !== undefined) {\n // //console.log('Scrolling to selected row:', scrollToRowKey, r);\n // ref.scrollTo(0, r);\n // getState('_events').dispatchEvent(\n // new CustomEvent('scrollToRowKeyFound', {\n // detail: { rowNumber: r, scrollToRowKey: scrollToRowKey },\n // })\n // );\n // }\n // });\n // }\n // }, [scrollToRowKey]);\n\n useEffect(() => {\n const ready = getState('ready');\n const ref = getState('_glideref');\n const getRowIndexByKey = getState('getRowIndexByKey');\n const key = selectedRowKey ?? scrollToRowKey;\n\n if (key && ref && ready) {\n getRowIndexByKey?.(key).then((r) => {\n if (r !== undefined) {\n //console.log('Scrolling to selected row:', r, selectedRowKey, scrollToRowKey);\n\n if (selectedRowKey) {\n const onChange = getState('onChange');\n const selected = [{ [getState('keyField') ?? 'id']: selectedRowKey }];\n if (onChange) {\n onChange(selected);\n } else {\n setState('values', selected);\n }\n }\n\n ref.scrollTo(0, r);\n getState('_events').dispatchEvent(\n new CustomEvent('scrollToRowKeyFound', {\n detail: {\n rowNumber: r,\n scrollToRowKey: scrollToRowKey,\n selectedRowKey: selectedRowKey,\n },\n })\n );\n }\n });\n }\n }, [scrollToRowKey, selectedRowKey]);\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\nComputer.displayName = 'Gridler-Computer';\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 getState,\n glideref,\n visiblePages,\n //_visibleArea,\n pageSize,\n loadPage,\n _loadingList,\n hasLocalData,\n ] = useGridlerStore((s) => [\n s.setState,\n s.getState,\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).then(() => {\n const pg = getState('_page_data')?.[0] ?? {};\n setState('isEmpty', pg && pg.length > 0);\n });\n }\n }, [loadPage, pageSize, visiblePages, glideref, _loadingList, hasLocalData]);\n\n return <></>;\n});\n\nPager.displayName = 'Gridler-Pager';\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 scrollToRowKey of gridSelection?.rows) {\n // if (scrollToRowKey === 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 { useElementSize, 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 { GridlerRightMenuIcon } 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 { height, ref: refWrapper, width } = useElementSize({ box: 'content-box' });\n /*\n const [_dimensions, setDimensions] = useState<{ height: number; width: number } | null>(null);\n const { height, width } = _dimensions ?? { height: 0, width: 0 };\n\n useLayoutEffect(() => {\n // Measure container before rendering grid\n if (refWrapper.current) {\n const { height, width } = refWrapper.current.getBoundingClientRect();\n setDimensions({ height, width });\n }\n }, []);\n */\n\n const {\n _gridSelection,\n allowMultiSelect,\n focused,\n getCellContent,\n getCellsForSelection,\n getState,\n glideProps,\n hasLocalData,\n headerHeight,\n heightProp,\n mounted,\n onCellActivated,\n onCellClicked,\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 allowMultiSelect: s.allowMultiSelect,\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 onCellActivated: s.onCellActivated,\n onCellClicked: s.onCellClicked,\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\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 const ready = getState('ready');\n const newReady = !!(r && mounted);\n if (ready !== newReady) {\n setState('ready', newReady);\n }\n });\n\n const theme = useGridTheme();\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 as any);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n ref={refWrapper}\n style={{\n display: 'flex',\n height: '100%',\n minHeight: '64px',\n minWidth: '32px',\n width: '100%',\n }}\n >\n {sections?.left}\n\n {width && width > 0 && height && height > 0 && (\n <DataEditor\n cellActivationBehavior=\"double-click\"\n //getCelrefMergedlContent={getCellContent}\n columns={(renderColumns as Array<GridColumn>) ?? []}\n columnSelect=\"none\"\n drawFocusRing\n height={height ?? 400}\n overscrollX={16}\n overscrollY={32}\n rangeSelect={allowMultiSelect ? 'multi-rect' : 'cell'}\n rightElementProps={{\n fill: false,\n sticky: true,\n }}\n rowMarkers={{\n checkboxStyle: 'square',\n kind: allowMultiSelect ? 'both' : 'clickable-number',\n }}\n rowSelect={allowMultiSelect ? 'multi' : 'single'}\n rowSelectionMode=\"auto\"\n spanRangeBehavior=\"default\"\n {...glideProps}\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 onCellActivated={onCellActivated}\n onCellClicked={onCellClicked}\n onCellContextMenu={(cell, event) => {\n event.preventDefault();\n glideProps?.onCellContextMenu?.(cell, event);\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 const keyField = getState('keyField') ?? 'id';\n const getRowBuffer = getState('getRowBuffer');\n for (const r of selection.rows) {\n const validRowID = getRowBuffer ? getRowBuffer(r)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\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 const validRowID = getRowBuffer ? getRowBuffer(y)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\n rows = rows.hasIndex(y) ? rows : rows.add(y);\n }\n }\n if (rows.length === 0) {\n for (const r of currentSelection?.rows ?? []) {\n const validRowID = getRowBuffer ? getRowBuffer(r)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\n rows = rows.hasIndex(r) ? rows : rows.add(r);\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 as any, col);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n onHeaderMenuClick={onHeaderMenuClick}\n onItemHovered={onItemHovered}\n onVisibleRegionChanged={onVisibleRegionChanged}\n ref={refMerged as React.Ref<DataEditorRef>}\n rightElement={\n sections?.rightElementDisabled ? undefined : (\n <Group>\n {sections?.rightElementStart}\n <GridlerRightMenuIcon />\n {sections?.rightElementEnd}\n </Group>\n )\n }\n rowHeight={rowHeight ?? 22}\n //rowMarkersCheckboxStyle='square'\n //rowMarkersKind='both'\n\n rows={total_rows ?? 0}\n theme={theme.gridTheme}\n width={width ?? 200}\n />\n )}\n\n {/* </Portal> */}\n <Computer />\n {!hasLocalData && <Pager />}\n {sections?.right}\n </div>\n <div style={{ flexGrow: 0 }}>\n <BottomBar />\n {sections?.bottom}\n </div>\n {/* <Portal> */}\n </Stack>\n );\n};\n","import '@glideapps/glide-data-grid/dist/index.css';\nimport React, { type Ref } from 'react';\n\nimport { MantineBetterMenusProvider } from '../MantineBetterMenu';\nimport { GlidlerFormAdaptor } from './components/adaptors/GlidlerFormAdaptor';\nimport { GlidlerLocalDataAdaptor } from './components/adaptors/GlidlerLocalDataAdaptor';\nimport { type GridlerProps, type GridlerRef, Provider } from './components/GridlerStore';\nimport { GridlerRefHandler } from './components/RefHandler';\nimport { GridlerDataGrid } from './GridlerDataGrid';\n\nconst _Gridler = (props: GridlerProps, ref: Ref<GridlerRef> | undefined) => {\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 <GridlerRefHandler ref={ref} />\n {props.children}\n </Provider>\n </MantineBetterMenusProvider>\n );\n};\n\ntype GridlerComponentType = {\n FormAdaptor: typeof GlidlerFormAdaptor;\n LocalDataAdaptor: typeof GlidlerLocalDataAdaptor;\n} & React.ForwardRefExoticComponent<GridlerProps & React.RefAttributes<GridlerRef>>;\n\nconst Gridler = React.forwardRef(_Gridler) as GridlerComponentType;\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","w","n","o","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","i","b64EncodeUnicode","GoAPIHeaders","head","headerlist","authToken","getAuthToken","token","v","distinctOperations","val","index","searchValue","callbacks","getNestedValue","l","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","buffers","page_data","pageSize","range","p","r","firstPage","upperPage","rowIndex","keyField","rn","pPage","clearMode","page","damageList","colLen","hasPage","data","cv","event","newVal","from","to","fromItem","toItem","cols","renderCols","acc","startIndex","endIndex","column","newSize","_colIndex","_newSizeWithGrow","area","coldef","items","IconGrid4x4","search","dir","newSort","colIndex","screenPosition","sortItems","region","_tx","_ty","_extras","onVisibleRegionChangedDebounced","previousPage","pageDif","newpos","fromRow","toRow","resolve","reject","ref","setState","getState","onMounted","div","onUnMounted","_e","_GlidlerAPIAdaptorForGoLangv2","setStateFN","addError","mounted","useAPIQuery","useCallback","columns","colSort","colFilters","searchStr","searchFields","_active_requests","sort","col_ids","optionHeaders","oh","currentRequestIndex","controller","res","cr","askAPIRowNumber","onChange","getGridSelectedRows","Fragment","GlidlerAPIAdaptorForGoLangv2","GlidlerFormAdaptor","_events","evf","getRowBuffer","rowData","getMenuItems","storeState","defaultItems","rows","manyRows","firstRow","desc","IconSquarePlus","IconEdit","IconTrashX","IconExclamationMark","IconRefresh","_GlidlerLocalDataAdaptor","refChanged","sortedData","filteredData","GlidlerLocalDataAdaptor","GridlerRightMenuIcon","loadingData","onContextClick","IconMenu2","_GridlerRefHandler","getstate","useImperativeHandle","parms","refreshCells","GridlerRefHandler","BottomBar","_activeTooltip","tooltipBarProps","Computer","refFirstRun","useRef","refLastSearch","refLastFilters","_glideref","_gridSelectionRows","colOrder","colSize","getRowIndexByKey","loadPage","ready","scrollToRowKey","selectedRowKey","values","debouncedDoSearch","useDebouncedCallback","rowIndexes","vi","_values","a","b","selectFirstRowOnMount","firstBuffer","currentValues","selected","startOrEnd","end","step","start","Pager","glideref","visiblePages","_loadingList","hasLocalData","lastPage","pg","SortSprite","offsetRows","colorScheme","useGridTheme","theme","useMantineTheme","useMantineColorScheme","enableOddEvenRowColor","focused","cellColor","lighten","darken","gridThemeDark","commonTheme","gridTheme","setGridTheme","GridlerDataGrid","refContextActivated","height","refWrapper","useElementSize","_gridSelection","allowMultiSelect","getCellContent","getCellsForSelection","glideProps","headerHeight","heightProp","onCellActivated","onCellClicked","onCellEdited","onColumnMoved","onColumnProposeMove","onColumnResize","onHeaderClicked","onHeaderMenuClick","onItemHovered","onVisibleRegionChanged","renderColumns","rowHeight","sections","selectMode","total_rows","widthProp","refMerged","useMergedRef","newReady","classes","DataEditor","currentSelection","Group","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5]}
|
|
1
|
+
{"version":3,"file":"lib.es.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/base64.js","../src/Gridler/utils/golang-restapi-v2/index.ts","../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/RightMenuIcon.tsx","../src/Gridler/components/RefHandler.tsx","../src/Gridler/components/BottomBar.tsx","../src/Gridler/components/Computer.tsx","../src/Gridler/utils/range.ts","../src/Gridler/components/Pager.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 c(n) {\n const o = atob(n), t = new ArrayBuffer(o.length), e = new Uint8Array(t);\n for (let r = 0; r < o.length; r++)\n e[r] = o.charCodeAt(r);\n return new Blob([t]);\n}\nfunction u(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction d(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction f(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(new Blob([r]));\n }, e.onerror = t, e.readAsArrayBuffer(n);\n });\n}\nfunction l(n) {\n return decodeURIComponent(\n Array.prototype.map.call(\n atob(n),\n (o) => `%${`00${o.charCodeAt(0).toString(16)}`.slice(-2)}`\n ).join(\"\")\n );\n}\nfunction w(n) {\n return btoa(\n encodeURIComponent(n).replace(\n /%([0-9A-F]{2})/g,\n (o, t) => String.fromCharCode(Number.parseInt(t, 16))\n )\n );\n}\nfunction A(n) {\n return new Promise((o, t) => {\n if (!n) return o(\"\");\n if (typeof n == \"string\")\n return o(n);\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(r);\n }, e.onerror = t, e.readAsText(n);\n });\n}\nexport {\n A as BlobToString,\n d as FileToBase64,\n f as FileToBlob,\n l as b64DecodeUnicode,\n w as b64EncodeUnicode,\n c as base64ToBlob,\n u as blobToBase64\n};\n//# sourceMappingURL=base64.js.map\n","import {b64EncodeUnicode} from '@warkypublic/artemis-kit/base64'\nconst TOKEN_KEY = 'gridler_golang_restapi_v2_token'\n\nexport type APIOptionsType = {\n autocreate?: boolean\n autoref?: boolean\n baseurl?: string\n getAPIProvider?: () => { provider: string; providerKey: string }\n getAuthToken?: () => string\n operations?: Array<FetchAPIOperation>\n postfix?: string\n prefix?: string\n requestTimeoutSec?: number\n}\n\n\n\nexport interface APIResponse {\n errmsg: string\n payload?: any\n retval: number\n}\nexport interface FetchAPIOperation {\n name?: string\n op?: string\n type: GoAPIHeaderTypes //x-fieldfilter\n value: string\n}\n/**\n * @description Types for the Go Rest API headers\n * @typedef {String} GoAPIEnum\n*/\nexport type GoAPIEnum =\n | 'advsql'\n | 'api-key'\n | 'api-range-from'\n | 'api-range-size'\n | 'api-range-total'\n | 'api-src'\n | 'api'\n | 'association_autocreate'\n | 'association_autoupdate'\n | 'association-update'\n | 'cql-sel'\n | 'cursor-backward'// For x cursor-backward header\n | 'cursor-forward' // For x cursor-forward header\n | 'custom-sql-join'\n | 'custom-sql-or'\n | 'custom-sql-w'\n | 'detailapi'\n | 'distinct'\n | 'expand'\n | 'fetch-rownumber'\n | 'fieldfilter'\n | 'fieldfilter'\n | 'files' //For x files header\n | 'func'\n | 'limit'\n | 'no-return'\n | 'not-select-fields'\n | 'offset'\n | 'parm'\n | 'pkrow'\n | 'preload'\n | 'searchand'\n | 'searchfilter'\n | 'searchfilter'\n | 'searchop'\n | 'searchop'\n | 'searchor'\n | 'select-fields'\n | 'simpleapi'\n | 'skipcache'\n | 'skipcount'\n | 'sort'\n\n\nexport type GoAPIHeaderKeys = `x-${GoAPIEnum}`\n\n\nexport type GoAPIHeaderTypes = GoAPIEnum & string\n\n\nexport interface GoAPIOperation {\n name?: string\n op?: string\n type: GoAPIHeaderTypes //x-fieldfilter\n value: string\n}\nexport interface MetaData {\n limit?: number\n offset?: number\n total?: number\n}\n\n\n/**\n * Builds an array of objects by encoding specific values and setting headers.\n *\n * @param {Array<FetchAPIOperation>} ops - The array of FetchAPIOperation objects to be built.\n * @param {Headers} [headers] - Optional headers to be set.\n * @return {Array<FetchAPIOperation>} - The built array of FetchAPIOperation objects.\n */\nconst buildGoAPIOperation = (\n ops: Array<FetchAPIOperation>,\n headers?: Headers\n): Array<FetchAPIOperation> => {\n const newops = [...ops.filter((i) => i !== undefined && i.type !== undefined)]\n\n \n for (let i = 0; i < newops.length; i++) {\n if (!newops[i].name || newops[i].name === '') {\n newops[i].name = ''\n }\n if (newops[i].type === 'files' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'advsql' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (newops[i].type === 'custom-sql-or' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (newops[i].type === 'custom-sql-join' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'not-select-fields' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'custom-sql-w' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'select-fields' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n if (newops[i].type === 'cql-sel' && !newops[i].value.startsWith('__')) {\n newops[i].value = `__${b64EncodeUnicode(newops[i].value)}__`\n }\n\n if (headers) {\n if (!newops || newops.length === 0) {\n headers.set(`x-limit`, '10')\n }\n\n if (newops[i].type === 'association_autoupdate') {\n headers.set(`association_autoupdate`, newops[i].value ?? '1')\n }\n if (newops[i].type === 'association_autocreate') {\n headers.set(`association_autocreate`, newops[i].value ?? '1')\n }\n if (\n newops[i].type === 'searchop' ||\n newops[i].type === 'searchor' ||\n newops[i].type === 'searchand'\n ) {\n headers.set(\n encodeURIComponent(`x-${newops[i].type}-${newops[i].op}-${newops[i].name}`),\n String(newops[i].value)\n )\n } else {\n headers.set(\n encodeURIComponent(\n `x-${newops[i].type}${newops[i].name && newops[i].name !== '' ? '-' + newops[i].name : ''}`\n ),\n String(newops[i].value)\n )\n }\n }\n }\n\n return newops\n}\n\n/**\n * Retrieves the headers from an array of FetchAPIOperation objects and returns them as an object.\n *\n * @param {Array<FetchAPIOperation>} ops - The array of FetchAPIOperation objects.\n * @return {{ [key: string]: string }} - The headers as an object with string keys and string values.\n */\nconst GoAPIHeaders = (\n ops: Array<FetchAPIOperation>,\n headers?: Headers\n): { [key: string]: string } => {\n const head = new Headers()\n const headerlist: Record<string,string> = {}\n\n const authToken = getAuthToken?.()\n if (authToken && authToken !== '') {\n \n head.set('Authorization', `Token ${authToken}`)\n } else {\n const token = getAuthToken()\n if (token) {\n head.set('Authorization', `Token ${token}`)\n }\n }\n\n\n if (headers) {\n headers.forEach((v, k) => {\n head.set(k, v)\n })\n }\n const distinctOperations: Array<FetchAPIOperation> = []\n\n for (const value of ops?.filter((val) => !!val) ?? []) {\n const index = distinctOperations.findIndex(\n (searchValue) => searchValue.name === value.name && searchValue.type === value.type\n )\n if (index === -1) {\n distinctOperations.push(value)\n } else {\n distinctOperations[index] = value\n }\n }\n\n buildGoAPIOperation(distinctOperations, head)\n\n head?.forEach((v, k) => {\n headerlist[k] = v\n })\n\n if (headers) {\n for (const key of Object.keys(headerlist)) {\n headers.set(key, headerlist[key])\n }\n }\n\n return headerlist\n}\n\nconst callbacks = {\n getAuthToken: () => {\n if (localStorage) {\n const token = localStorage.getItem(TOKEN_KEY)\n if (token) {\n return token\n }\n }\n return undefined\n }\n}\n\n/**\n * Retrieves the authentication token from local storage.\n *\n * @return {string | undefined} The authentication token if found, otherwise undefined\n */\nconst getAuthToken = () => callbacks?.getAuthToken?.()\n\nconst setAuthTokenCallback = (cb: ()=> string) => {\n callbacks.getAuthToken = cb\n return callbacks.getAuthToken\n}\n\n/**\n * Sets the authentication token in the local storage.\n *\n * @param {string} token - The authentication token to be set.\n */\nconst setAuthToken = (token: string) => {\n if (localStorage) {\n localStorage.setItem(TOKEN_KEY, token)\n }\n}\n\n\nexport {buildGoAPIOperation,getAuthToken,GoAPIHeaders,setAuthToken,setAuthTokenCallback}","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?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => 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(e).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(e).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 ) => Partial<GridCellLoose>;\n defaultIcon?: string;\n disableFilter?: boolean;\n disableMove?: boolean;\n disableResize?: boolean;\n disableSearch?: 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 virtual?: boolean;\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 @typescript-eslint/no-explicit-any */\n\n/* eslint-disable react-refresh/only-export-components */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n type CellArray,\n type CellClickedEventArgs,\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 allowMultiSelect?: boolean;\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 scrollToRowKey?: number;\n searchFields?: Array<string>;\n searchStr?: string;\n sections?: {\n bottom?: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n rightElementDisabled?: boolean;\n rightElementEnd?: React.ReactNode;\n rightElementStart?: React.ReactNode;\n top?: React.ReactNode;\n };\n selectedRowKey?: number;\n selectFirstRowOnMount?: boolean;\n selectMode?: 'cell' | 'row';\n showMenu?: (id: string, options?: Partial<MantineBetterMenuInstance>) => void;\n title?: string;\n tooltipBarProps?: React.HTMLAttributes<HTMLDivElement>;\n total_rows?: number;\n\n uniqueid: string;\n values?: Array<Record<string, any>>;\n width?: number | string;\n}\n\nexport interface GridlerRef {\n getGlideRef: () => DataEditorRef | undefined;\n getState: GridlerState['getState'];\n isEmpty: () => boolean;\n refresh: (parms?: any) => Promise<void>;\n reload: (parms?: any) => Promise<void>;\n reloadRow: (key: number | string) => Promise<void>;\n scrollToRow: (key: number | string) => Promise<void>;\n selectRow: (key: number | string) => Promise<void>;\n setStateFN: GridlerState['setStateFN'];\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 _refresh: () => Promise<void>;\n _scrollTimeout?: any | number;\n _visibleArea: Rectangle;\n _visiblePages: Rectangle;\n addError: (err: string, ...args: Array<any>) => void;\n askAPIRowNumber?: (key: string) => Promise<number>;\n colFilters?: Array<FilterOption>;\n colOrder?: Record<string, number>;\n colSize?: Record<string, number>;\n colSort?: Array<SortOption>;\n data?: Array<any>;\n errors: Array<string>;\n focused?: boolean;\n\n get: () => GridlerState;\n getCellContent: (cell: Item) => GridCell;\n getCellsForSelection: (\n selection: Rectangle,\n abortSignal: AbortSignal\n ) => CellArray | GetCellsThunk;\n getGridSelectedRows: () => Array<any>;\n getRowBuffer: (row: number) => Record<string, any>;\n getRowIndexByKey: (key: number | string) => Promise<number | undefined>;\n getState: <K extends keyof GridlerStoreState>(key: K) => GridlerStoreState[K];\n hasLocalData: boolean;\n isEmpty: boolean;\n\n loadingData?: boolean;\n loadPage: (page: number, clearMode?: 'all' | 'page') => Promise<void>;\n mounted: boolean;\n onCellActivated: (cell: Item) => void;\n onCellClicked: (cell: Item, event: CellClickedEventArgs) => void;\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: CellClickedEventArgs, 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 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\n ready: boolean;\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => void;\n reload?: () => Promise<void>;\n\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 useAPIQuery?: (index: number) => Promise<Array<Record<string, any>>>;\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 _refresh: async () => {\n const s = get();\n await s.loadPage(0, 'all');\n await s.refreshCells();\n await s.reload?.();\n },\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<unknown>) => {\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) as Record<string, string> | undefined;\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 getGridSelectedRows: () => {\n const state = get();\n const buffers: Array<any> = [];\n const page_data = state._page_data;\n const pageSize = state.pageSize;\n\n if (state._gridSelectionRows) {\n for (const range of state._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 return buffers;\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 getRowIndexByKey: async (key: number | string) => {\n const state = get();\n\n let rowIndex = -1;\n if (state.ready) {\n const page_data = state._page_data;\n const pageSize = state.pageSize;\n const keyField = state.keyField ?? 'id';\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], scrollToRowKey);\n if (String(page_data[p][r]?.[keyField]) === String(key)) {\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 console.log('Local row index', rowIndex, key);\n return rowIndex;\n }\n }\n\n if (rowIndex > 0) {\n return rowIndex;\n } else if (typeof state.askAPIRowNumber === 'function') {\n const rn = await state.askAPIRowNumber(String(key));\n if (rn && rn >= 0) {\n console.log('Remote row index', rowIndex, key);\n return rn;\n }\n }\n }\n\n return undefined;\n },\n getState: (key) => {\n return get()[key];\n },\n hasLocalData: false,\n isEmpty: true,\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.error('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 onCellActivated: (cell: Item): void => {\n const state = get();\n const [col, row] = cell;\n\n state._events.dispatchEvent(\n new CustomEvent('onCellActivated', {\n detail: { cell, col, row, state },\n })\n );\n state.glideProps?.onCellActivated?.(cell);\n },\n onCellClicked: (cell: Item, event: CellClickedEventArgs) => {\n const state = get();\n const [col, row] = cell;\n if (state.glideProps?.onCellClicked) {\n state.glideProps?.onCellClicked?.(cell, event);\n }\n if (state.values?.length) {\n if (state.onChange) {\n state.onChange(state.values);\n }\n }\n\n state._events.dispatchEvent(\n new CustomEvent('onCellClicked', {\n detail: { cell, col, row, state },\n })\n );\n },\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 state.glideProps?.onCellEdited?.(cell, newVal);\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\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 onContextClick: (area: string, event: CellClickedEventArgs, col?: number, row?: number) => {\n const s = get();\n const coldef = s.renderColumns?.[col ?? -1];\n\n const items =\n area === 'menu'\n ? [{ leftSection: <IconGrid4x4 size={16} />, title: s.title ?? 'Grid' }]\n : coldef\n ? [\n { leftSection: <IconGrid4x4 size={16} />, title: s.title ?? 'Grid' },\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 //@ts-expect-error Check bounds\n x: event.clientX ?? event.bounds?.x,\n //@ts-expect-error Check bounds\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 id: 'refesh',\n label: `Refresh`,\n onClick: () => {\n const s = get();\n s._refresh?.();\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 pageSize: 50,\n ready: false,\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => {\n const state = get();\n const damageList: { cell: [number, number] }[] = [];\n const colLen = Object.keys(state.renderColumns ?? [1, 2, 3]).length;\n\n const from = fromRow && fromRow > 0 ? fromRow : 0;\n const to = toRow && toRow >= from ? toRow : from + state.pageSize;\n\n for (let row = from; row <= to; row++) {\n if (col && col > 0) {\n damageList.push({\n cell: [col, row],\n });\n } else {\n for (let c = 0; c <= colLen; c++) {\n damageList.push({\n cell: [c, row],\n });\n }\n }\n }\n\n state._glideref?.updateCells(damageList);\n },\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: unknown) => unknown)(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 { kind: GridCellKind.Text, ...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 getState('_events').addEventListener('reload', (_e: Event) => {\n getState('_refresh')?.();\n });\n\n return {\n ...props,\n\n colSort: props.defaultSort ?? getState('colSort') ?? [],\n hideMenu: props.hideMenu ?? menus.hide,\n scrollToRowKey: props.scrollToRowKey ?? props.selectedRowKey ?? getState('scrollToRowKey'),\n showMenu: props.showMenu ?? menus.show,\n total_rows: getState('total_rows') ?? props.total_rows,\n };\n }\n);\n\nexport type useStoreReturnType = ReturnType<typeof useGridlerStore>;\n\nexport { Provider, useGridlerStore };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect } from 'react';\n\nimport type { APIOptions } from '../../utils/types';\nimport type { GridlerColumn } from '../Column';\n\nimport {\n type FetchAPIOperation,\n GoAPIHeaders,\n type GoAPIOperation,\n} from '../../utils/golang-restapi-v2';\nimport { useGridlerStore } from '../GridlerStore';\n\nexport interface GlidlerAPIAdaptorForGoLangv2Props<T = unknown> extends APIOptions {\n filter?: string;\n hotfields?: Array<string>;\n initialData?: Array<T>;\n options?: Array<GoAPIOperation>;\n}\n\nfunction _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForGoLangv2Props<T>) {\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> = useCallback(\n async (index: number) => {\n const columns = getState('columns');\n const colSort = getState('colSort');\n const pageSize = getState('pageSize');\n const colFilters = getState('colFilters');\n const searchStr = getState('searchStr');\n const searchFields = getState('searchFields');\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\n head.set('Authorization', `Token ${props.authtoken}`);\n const ops: FetchAPIOperation[] = [\n { type: 'limit', value: String(pageSize ?? 50) },\n { type: 'offset', value: String((pageSize ?? 50) * index) },\n ];\n\n if (colSort?.length && colSort.length > 0) {\n ops.push({\n type: 'sort',\n value: colSort\n ?.map((sort: any) => `${sort.id} ${sort.direction}`)\n .reduce((acc: any, val: any) => `${acc},${val}`),\n });\n }\n\n colFilters\n ?.filter((f) => f.value?.length > 0)\n ?.forEach((filter: any) => {\n if (filter.value && filter.value !== '') {\n ops.push({\n name: `${filter.id}`,\n op: filter.operator,\n type: 'searchop',\n value: filter.value,\n });\n }\n });\n\n if (searchStr && searchStr !== '') {\n columns\n ?.filter(\n (f) =>\n !f.disableFilter &&\n !f.disableSearch &&\n !f.virtual &&\n ((searchFields ?? []).length == 0 || searchFields?.includes(f.id))\n )\n ?.forEach((filter: any) => {\n ops.push({\n name: `${filter.id}`,\n op: 'contains',\n type: 'searchor',\n value: searchStr,\n });\n });\n }\n\n if (props.filter && props.filter !== '') {\n ops.push({\n name: 'sql_filter',\n type: 'custom-sql-w',\n value: props.filter,\n });\n }\n\n if ((props.options ?? []).length > 0) {\n ops.push(...(props.options ?? []));\n }\n\n const col_ids =\n columns\n ?.filter((col) => !col.virtual)\n ?.map((col: GridlerColumn) => {\n return col.id;\n }) ?? [];\n\n if (props.hotfields && props.hotfields.length > 0) {\n col_ids?.push(props.hotfields.join(','));\n }\n\n if (col_ids && col_ids.length > 0) {\n ops.push({\n type: 'select-fields',\n value: col_ids.join(','),\n });\n }\n\n if (ops && ops.length > 0) {\n const optionHeaders = GoAPIHeaders(ops);\n for (const oh in GoAPIHeaders(ops)) {\n head.set(oh, optionHeaders[oh]);\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\n if (\n _active_requests &&\n currentRequestIndex >= 0 &&\n _active_requests[currentRequestIndex]\n ) {\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) => [\n ...(cv ?? []),\n { controller, page: index },\n ]);\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 getState,\n props.authtoken,\n props.url,\n props.filter,\n JSON.stringify(props.options),\n setState,\n setStateFN,\n addError,\n ]\n );\n\n const askAPIRowNumber: (key: string) => Promise<number> = useCallback(\n 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 const ops: FetchAPIOperation[] = [\n { type: 'limit', value: String(10) },\n { type: 'fetch-rownumber', value: key },\n ];\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 if (props.filter && props.filter !== '') {\n ops.push({\n name: 'sql_filter',\n type: 'custom-sql-w',\n value: props.filter,\n });\n }\n\n if (props.options && props.options.length > 0) {\n const optionHeaders = GoAPIHeaders(props.options);\n for (const oh in optionHeaders) {\n head.set(oh, optionHeaders[oh]);\n }\n }\n\n if (ops && ops.length > 0) {\n const optionHeaders = GoAPIHeaders(ops);\n for (const oh in GoAPIHeaders(ops)) {\n head.set(oh, optionHeaders[oh]);\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 [props.url, props.authtoken, props.filter, props.options, getState, addError]\n );\n\n //Reset the function in the store.\n useEffect(() => {\n setState('useAPIQuery', useAPIQuery);\n setState('askAPIRowNumber', askAPIRowNumber);\n\n const _refresh = getState('_refresh');\n\n //Reset the loaded pages to new rules\n _refresh?.().then(() => {\n const onChange = getState('onChange');\n const getGridSelectedRows = getState('getGridSelectedRows');\n if (onChange && typeof onChange === 'function') {\n const buffers = getGridSelectedRows?.();\n onChange(buffers);\n }\n });\n }, [props.url, props.authtoken, props.filter, JSON.stringify(props.options), mounted, setState]);\n\n return <></>;\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 GlidlerAPIAdaptorForGoLangv2 = React.memo(_GlidlerAPIAdaptorForGoLangv2);\n\nGlidlerAPIAdaptorForGoLangv2.displayName = 'Gridler-GlidlerAPIAdaptorForGoLangv2';\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 changeOnActiveClick?: boolean;\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, _events] = useGridlerStore((s) => [\n s.getState,\n s.mounted,\n s.setState,\n s._events,\n ]);\n\n useEffect(() => {\n if (mounted && props.changeOnActiveClick) {\n const evf = (event: CustomEvent<any>) => {\n const { row, state } = event.detail;\n const getRowBuffer = state.getRowBuffer as (row: number) => Record<string, unknown>;\n if (getRowBuffer) {\n const rowData = getRowBuffer(row);\n if (!rowData) {\n return;\n }\n props.onRequestForm('change', rowData);\n }\n };\n _events?.addEventListener('onCellActivated', evf as any);\n return () => {\n if (evf) {\n _events?.removeEventListener('onCellActivated', evf as any);\n }\n };\n }\n }, [props.changeOnActiveClick, mounted, _events]);\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\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 onClickAsync: async () => {\n const _refresh = getState('_refresh');\n await _refresh?.();\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 type { GridlerColumns } from '../Column';\n\nimport { type FilterOption, type SortOption, useGridlerStore } from '../GridlerStore';\n\nexport interface GlidlerLocalDataAdaptorProps<T = unknown> {\n data: Array<T>;\n onColumnFilter?: (\n colFilters: Array<FilterOption> | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\n onColumnSort?: (\n colSort: Array<SortOption> | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\n onSearch?: (\n searchField: string | undefined,\n cols: GridlerColumns | undefined,\n data: Array<T>\n ) => Array<T>;\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.\nfunction _GlidlerLocalDataAdaptor<T = unknown>(props: GlidlerLocalDataAdaptorProps<T>) {\n const [setState, getState, mounted] = useGridlerStore((s) => [s.setState, s.getState, s.mounted]);\n\n const { colFilters, colSort, columns, searchStr } = useGridlerStore((s) => ({\n colFilters: s.colFilters,\n colOrder: s.colOrder,\n colSize: s.colSize,\n colSort: s.colSort,\n columns: s.columns,\n searchStr: s.searchStr,\n }));\n\n const refChanged = React.useRef({\n colFilters: colFilters,\n colSort: colSort,\n searchStr: searchStr,\n });\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 useEffect(() => {\n if (props.onColumnSort && colSort !== refChanged?.current?.colSort) {\n const sortedData = props.onColumnSort(colSort, columns, props.data as Array<T>);\n setState('total_rows', sortedData.length);\n setState('data', sortedData);\n refChanged.current.colSort = colSort;\n getState('refreshCells')?.();\n }\n }, [colSort, props.onColumnSort]);\n\n useEffect(() => {\n if (props.onColumnFilter && colFilters !== refChanged?.current?.colFilters) {\n const filteredData = props.onColumnFilter(colFilters, columns, props.data as Array<T>);\n setState('total_rows', filteredData.length);\n setState('data', filteredData);\n refChanged.current.colFilters = colFilters;\n getState('refreshCells')?.();\n }\n }, [colFilters, props.onColumnFilter]);\n\n useEffect(() => {\n if (props.onSearch && searchStr !== refChanged?.current?.searchStr) {\n const filteredData = props.onSearch(searchStr, columns, props.data as Array<T>);\n setState('total_rows', filteredData.length);\n setState('data', filteredData);\n refChanged.current.colFilters = colFilters;\n getState('refreshCells')?.();\n }\n }, [searchStr, props.onSearch]);\n\n return <></>;\n}\nexport const GlidlerLocalDataAdaptor = React.memo(_GlidlerLocalDataAdaptor);\n\nGlidlerLocalDataAdaptor.displayName = 'Gridler-GlidlerLocalDataAdaptor';\n","import { ActionIcon } from '@mantine/core';\nimport { IconMenu2 } from '@tabler/icons-react';\n\nimport { useGridlerStore } from './GridlerStore';\n\nexport function GridlerRightMenuIcon() {\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 as any)}\n variant=\"subtle\"\n >\n <IconMenu2 />\n </ActionIcon>\n );\n}\n","import React, { type PropsWithChildren, type Ref, useImperativeHandle } from 'react';\n\nimport { type GridlerRef, useGridlerStore } from './GridlerStore';\n\nfunction _GridlerRefHandler(props: PropsWithChildren, ref: Ref<GridlerRef> | undefined) {\n const [setStateFN, getstate] = useGridlerStore((s) => [s.setStateFN, s.getState]);\n\n useImperativeHandle<GridlerRef, GridlerRef>(ref, () => {\n return {\n getGlideRef: () => {\n return getstate('_glideref');\n },\n getState: getstate,\n isEmpty: () => getstate('isEmpty'),\n refresh: async (parms?: any) => {\n const refreshCells = getstate('refreshCells');\n const loadPage = getstate('loadPage');\n loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {\n refreshCells?.();\n });\n },\n reload: async (parms?: any) => {\n const refreshCells = getstate('refreshCells');\n const loadPage = getstate('loadPage');\n loadPage?.(parms?.pageIndex ?? 0, 'all').then(() => {\n refreshCells?.();\n });\n },\n reloadRow: async (key: number | string) => {\n const refreshCells = getstate('refreshCells');\n //const loadPage = getstate('loadPage');\n const getRowIndexByKey = getstate('getRowIndexByKey');\n const rn = await getRowIndexByKey?.(String(key));\n if (rn && rn >= 0) {\n refreshCells?.(rn, rn + 1);\n //todo loadpage or row from server\n }\n },\n scrollToRow: async (key: number | string) => {\n if (key && Number(key) >= 0) {\n setStateFN('scrollToRowKey', (cv) => Number(key ?? cv));\n }\n },\n selectRow: async (key: number | string) => {\n if (key && Number(key) >= 0) {\n setStateFN('selectedRowKey', (cv) => Number(key ?? cv));\n }\n },\n setStateFN: setStateFN,\n };\n }, []);\n return <>{props.children}</>;\n}\n\nexport const GridlerRefHandler = React.forwardRef(_GridlerRefHandler);\n","/* eslint-disable react/react-in-jsx-scope */\nimport { 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","import { CompactSelection } from '@glideapps/glide-data-grid';\nimport { useDebouncedCallback } from '@mantine/hooks';\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 refLastSearch = useRef('');\n const refLastFilters = useRef<unknown>(null);\n const {\n _glideref,\n _gridSelectionRows,\n colFilters,\n colOrder,\n colSize,\n colSort,\n columns,\n getRowIndexByKey,\n getState,\n loadPage,\n ready,\n\n scrollToRowKey,\n searchStr,\n selectedRowKey,\n setState,\n setStateFN,\n values,\n } = useGridlerStore((s) => ({\n _glideref: s._glideref,\n _gridSelectionRows: s._gridSelectionRows,\n colFilters: s.colFilters,\n colOrder: s.colOrder,\n colSize: s.colSize,\n colSort: s.colSort,\n columns: s.columns,\n getRowIndexByKey: s.getRowIndexByKey,\n getState: s.getState,\n loadPage: s.loadPage,\n ready: s.ready,\n\n scrollToRowKey: s.scrollToRowKey,\n searchStr: s.searchStr,\n selectedRowKey: s.selectedRowKey,\n setState: s.setState,\n setStateFN: s.setStateFN,\n uniqueid: s.uniqueid,\n values: s.values,\n }));\n\n const debouncedDoSearch = useDebouncedCallback(\n (searchStr: string) => {\n loadPage(0, 'all').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onSearched', {\n detail: { search: searchStr },\n })\n );\n });\n },\n {\n delay: 300,\n leading: false,\n }\n );\n\n //When values change, update selection\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<Record<string, unknown>>) {\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)) {\n const idx = await getRowIndexByKey(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 //Fire onChange when selection changes\n useEffect(() => {\n const onChange = getState('onChange');\n if (onChange && typeof onChange === 'function') {\n const getGridSelectedRows = getState('getGridSelectedRows');\n const buffers = getGridSelectedRows();\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 (searchStr === undefined || searchStr === null) {\n refLastSearch.current = '';\n return;\n }\n if (refLastSearch.current !== searchStr) {\n debouncedDoSearch(searchStr);\n refLastSearch.current = searchStr;\n }\n }, [searchStr]);\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').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onColumnSorted', {\n detail: { cols: colSort },\n })\n );\n });\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').then(() => {\n getState('refreshCells')?.();\n getState('_events')?.dispatchEvent?.(\n new CustomEvent('onColumnFiltered', {\n detail: { filters: colFilters },\n })\n );\n });\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 }).then(() => {\n getState('refreshCells')?.();\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 }).then(() => {\n getState('refreshCells')?.();\n });\n }, [colOrder]);\n\n //Initial Load\n useEffect(() => {\n if (!_glideref) {\n return;\n }\n if (refFirstRun.current > 0) {\n return;\n }\n refFirstRun.current = 1;\n loadPage(0).then(() => {\n getState('refreshCells')?.();\n });\n }, [ready, loadPage]);\n\n //Logic to select first row on mount\n useEffect(() => {\n const _events = getState('_events');\n const loadPage = () => {\n const selectFirstRowOnMount = getState('selectFirstRowOnMount');\n if (ready && selectFirstRowOnMount) {\n const scrollToRowKey = getState('scrollToRowKey');\n if (scrollToRowKey && scrollToRowKey >= 0) {\n return;\n }\n const keyField = getState('keyField') ?? 'id';\n const page_data = getState('_page_data');\n\n const firstBuffer = page_data?.[0]?.[0];\n const firstRow = firstBuffer?.[keyField];\n const currentValues = getState('values') ?? [];\n\n if (\n !(values && values.length > 0) &&\n firstRow &&\n firstRow > 0 &&\n (currentValues.length ?? 0) === 0\n ) {\n const values = [firstBuffer, ...(currentValues as Array<Record<string, unknown>>)];\n\n const onChange = getState('onChange');\n //console.log('Selecting first row:', firstRow, firstBuffer, values);\n if (onChange) {\n onChange(values);\n } else {\n setState('values', values);\n }\n\n setState('scrollToRowKey', firstRow);\n }\n }\n };\n\n _events?.addEventListener('loadPage', loadPage);\n\n return () => {\n _events?.removeEventListener('loadPage', loadPage);\n };\n }, [ready]);\n\n /// logic to apply the selected row.\n // useEffect(() => {\n // const ready = getState('ready');\n // const ref = getState('_glideref');\n // const getRowIndexByKey = getState('getRowIndexByKey');\n\n // if (scrollToRowKey && ref && ready) {\n // getRowIndexByKey?.(scrollToRowKey).then((r) => {\n // if (r !== undefined) {\n // //console.log('Scrolling to selected row:', scrollToRowKey, r);\n // ref.scrollTo(0, r);\n // getState('_events').dispatchEvent(\n // new CustomEvent('scrollToRowKeyFound', {\n // detail: { rowNumber: r, scrollToRowKey: scrollToRowKey },\n // })\n // );\n // }\n // });\n // }\n // }, [scrollToRowKey]);\n\n useEffect(() => {\n const ready = getState('ready');\n const ref = getState('_glideref');\n const getRowIndexByKey = getState('getRowIndexByKey');\n const key = selectedRowKey ?? scrollToRowKey;\n\n if (key && ref && ready) {\n getRowIndexByKey?.(key).then((r) => {\n if (r !== undefined) {\n //console.log('Scrolling to selected row:', r, selectedRowKey, scrollToRowKey);\n\n if (selectedRowKey) {\n const onChange = getState('onChange');\n const selected = [{ [getState('keyField') ?? 'id']: selectedRowKey }];\n if (JSON.stringify(getState('values')) !== JSON.stringify(selected)) {\n if (onChange) {\n onChange(selected);\n } else {\n setState('values', selected);\n }\n }\n }\n\n ref.scrollTo(0, r);\n getState('_events').dispatchEvent(\n new CustomEvent('scrollToRowKeyFound', {\n detail: {\n rowNumber: r,\n scrollToRowKey: scrollToRowKey,\n selectedRowKey: selectedRowKey,\n },\n })\n );\n }\n });\n }\n }, [scrollToRowKey, selectedRowKey]);\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\nComputer.displayName = 'Gridler-Computer';\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 getState,\n glideref,\n visiblePages,\n //_visibleArea,\n pageSize,\n loadPage,\n _loadingList,\n hasLocalData,\n ] = useGridlerStore((s) => [\n s.setState,\n s.getState,\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).then(() => {\n const pg = getState('_page_data')?.[0] ?? {};\n setState('isEmpty', pg && pg.length > 0);\n });\n }\n }, [loadPage, pageSize, visiblePages, glideref, _loadingList, hasLocalData]);\n\n return <></>;\n});\n\nPager.displayName = 'Gridler-Pager';\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 scrollToRowKey of gridSelection?.rows) {\n // if (scrollToRowKey === 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 { useElementSize, 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 { GridlerRightMenuIcon } 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 { height, ref: refWrapper, width } = useElementSize({ box: 'content-box' });\n /*\n const [_dimensions, setDimensions] = useState<{ height: number; width: number } | null>(null);\n const { height, width } = _dimensions ?? { height: 0, width: 0 };\n\n useLayoutEffect(() => {\n // Measure container before rendering grid\n if (refWrapper.current) {\n const { height, width } = refWrapper.current.getBoundingClientRect();\n setDimensions({ height, width });\n }\n }, []);\n */\n\n const {\n _gridSelection,\n allowMultiSelect,\n focused,\n getCellContent,\n getCellsForSelection,\n getState,\n glideProps,\n hasLocalData,\n headerHeight,\n heightProp,\n mounted,\n onCellActivated,\n onCellClicked,\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 allowMultiSelect: s.allowMultiSelect,\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 onCellActivated: s.onCellActivated,\n onCellClicked: s.onCellClicked,\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\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 const ready = getState('ready');\n const newReady = !!(r && mounted);\n if (ready !== newReady) {\n setState('ready', newReady);\n }\n });\n\n const theme = useGridTheme();\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 as any);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n ref={refWrapper}\n style={{\n display: 'flex',\n height: '100%',\n minHeight: '64px',\n minWidth: '32px',\n width: '100%',\n }}\n >\n {sections?.left}\n\n {width && width > 0 && height && height > 0 && (\n <DataEditor\n cellActivationBehavior=\"double-click\"\n //getCelrefMergedlContent={getCellContent}\n columns={(renderColumns as Array<GridColumn>) ?? []}\n columnSelect=\"none\"\n drawFocusRing\n height={height ?? 400}\n overscrollX={16}\n overscrollY={32}\n rangeSelect={allowMultiSelect ? 'multi-rect' : 'cell'}\n rightElementProps={{\n fill: false,\n sticky: true,\n }}\n rowMarkers={{\n checkboxStyle: 'square',\n kind: allowMultiSelect ? 'both' : 'clickable-number',\n }}\n rowSelect={allowMultiSelect ? 'multi' : 'single'}\n rowSelectionMode=\"auto\"\n spanRangeBehavior=\"default\"\n {...glideProps}\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 onCellActivated={onCellActivated}\n onCellClicked={onCellClicked}\n onCellContextMenu={(cell, event) => {\n event.preventDefault();\n glideProps?.onCellContextMenu?.(cell, event);\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 const keyField = getState('keyField') ?? 'id';\n const getRowBuffer = getState('getRowBuffer');\n for (const r of selection.rows) {\n const validRowID = getRowBuffer ? getRowBuffer(r)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\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 const validRowID = getRowBuffer ? getRowBuffer(y)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\n rows = rows.hasIndex(y) ? rows : rows.add(y);\n }\n }\n if (rows.length === 0) {\n for (const r of currentSelection?.rows ?? []) {\n const validRowID = getRowBuffer ? getRowBuffer(r)?.[keyField] : null;\n if (!validRowID) {\n continue;\n }\n rows = rows.hasIndex(r) ? rows : rows.add(r);\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 as any, col);\n setTimeout(() => {\n refContextActivated.current = false;\n }, 100);\n }\n }}\n onHeaderMenuClick={onHeaderMenuClick}\n onItemHovered={onItemHovered}\n onVisibleRegionChanged={onVisibleRegionChanged}\n ref={refMerged as React.Ref<DataEditorRef>}\n rightElement={\n sections?.rightElementDisabled ? undefined : (\n <Group>\n {sections?.rightElementStart}\n <GridlerRightMenuIcon />\n {sections?.rightElementEnd}\n </Group>\n )\n }\n rowHeight={rowHeight ?? 22}\n //rowMarkersCheckboxStyle='square'\n //rowMarkersKind='both'\n\n rows={total_rows ?? 0}\n theme={theme.gridTheme}\n width={width ?? 200}\n />\n )}\n\n {/* </Portal> */}\n <Computer />\n {!hasLocalData && <Pager />}\n {sections?.right}\n </div>\n <div style={{ flexGrow: 0 }}>\n <BottomBar />\n {sections?.bottom}\n </div>\n {/* <Portal> */}\n </Stack>\n );\n};\n","import '@glideapps/glide-data-grid/dist/index.css';\nimport React, { type Ref } from 'react';\n\nimport { MantineBetterMenusProvider } from '../MantineBetterMenu';\nimport { GlidlerFormAdaptor } from './components/adaptors/GlidlerFormAdaptor';\nimport { GlidlerLocalDataAdaptor } from './components/adaptors/GlidlerLocalDataAdaptor';\nimport { type GridlerProps, type GridlerRef, Provider } from './components/GridlerStore';\nimport { GridlerRefHandler } from './components/RefHandler';\nimport { GridlerDataGrid } from './GridlerDataGrid';\n\nconst _Gridler = (props: GridlerProps, ref: Ref<GridlerRef> | undefined) => {\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 <GridlerRefHandler ref={ref} />\n {props.children}\n </Provider>\n </MantineBetterMenusProvider>\n );\n};\n\ntype GridlerComponentType = {\n FormAdaptor: typeof GlidlerFormAdaptor;\n LocalDataAdaptor: typeof GlidlerLocalDataAdaptor;\n} & React.ForwardRefExoticComponent<GridlerProps & React.RefAttributes<GridlerRef>>;\n\nconst Gridler = React.forwardRef(_Gridler) as GridlerComponentType;\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","w","n","o","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","i","b64EncodeUnicode","GoAPIHeaders","head","headerlist","authToken","getAuthToken","token","v","distinctOperations","val","index","searchValue","callbacks","getNestedValue","l","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","buffers","page_data","pageSize","range","p","r","firstPage","upperPage","rowIndex","keyField","rn","pPage","clearMode","page","damageList","colLen","hasPage","data","cv","event","newVal","from","to","fromItem","toItem","cols","renderCols","acc","startIndex","endIndex","column","newSize","_colIndex","_newSizeWithGrow","area","coldef","items","IconGrid4x4","search","dir","newSort","colIndex","screenPosition","sortItems","region","_tx","_ty","_extras","onVisibleRegionChangedDebounced","previousPage","pageDif","newpos","fromRow","toRow","resolve","reject","ref","setState","getState","onMounted","div","onUnMounted","_e","_GlidlerAPIAdaptorForGoLangv2","setStateFN","addError","mounted","useAPIQuery","useCallback","columns","colSort","colFilters","searchStr","searchFields","_active_requests","sort","col_ids","optionHeaders","oh","currentRequestIndex","controller","res","cr","askAPIRowNumber","onChange","getGridSelectedRows","Fragment","GlidlerAPIAdaptorForGoLangv2","GlidlerFormAdaptor","_events","evf","getRowBuffer","rowData","getMenuItems","storeState","defaultItems","rows","manyRows","firstRow","desc","IconSquarePlus","IconEdit","IconTrashX","IconExclamationMark","IconRefresh","_GlidlerLocalDataAdaptor","refChanged","sortedData","filteredData","GlidlerLocalDataAdaptor","GridlerRightMenuIcon","loadingData","onContextClick","IconMenu2","_GridlerRefHandler","getstate","useImperativeHandle","parms","refreshCells","GridlerRefHandler","BottomBar","_activeTooltip","tooltipBarProps","Computer","refFirstRun","useRef","refLastSearch","refLastFilters","_glideref","_gridSelectionRows","colOrder","colSize","getRowIndexByKey","loadPage","ready","scrollToRowKey","selectedRowKey","values","debouncedDoSearch","useDebouncedCallback","rowIndexes","vi","_values","a","b","selectFirstRowOnMount","firstBuffer","currentValues","selected","startOrEnd","end","step","start","Pager","glideref","visiblePages","_loadingList","hasLocalData","lastPage","pg","SortSprite","offsetRows","colorScheme","useGridTheme","theme","useMantineTheme","useMantineColorScheme","enableOddEvenRowColor","focused","cellColor","lighten","darken","gridThemeDark","commonTheme","gridTheme","setGridTheme","GridlerDataGrid","refContextActivated","height","refWrapper","useElementSize","_gridSelection","allowMultiSelect","getCellContent","getCellsForSelection","glideProps","headerHeight","heightProp","onCellActivated","onCellClicked","onCellEdited","onColumnMoved","onColumnProposeMove","onColumnResize","onHeaderClicked","onHeaderMenuClick","onItemHovered","onVisibleRegionChanged","renderColumns","rowHeight","sections","selectMode","total_rows","widthProp","refMerged","useMergedRef","newReady","classes","DataEditor","currentSelection","Group","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5]}
|