@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.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.cjs.js","sources":["../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js","../node_modules/.pnpm/@warkypublic+artemis-kit@1.0.10/node_modules/@warkypublic/artemis-kit/dist/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.cjs.js","sources":["../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.2.0/node_modules/react/jsx-runtime.js","../node_modules/.pnpm/@warkypublic+artemis-kit@1.0.10/node_modules/@warkypublic/artemis-kit/dist/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]}
|