@warkypublic/oranguru 0.0.29 → 0.0.30
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.map +1 -1
- package/dist/lib.d.ts +1 -1
- package/dist/lib.es.js.map +1 -1
- package/package.json +33 -46
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/@tanstack+virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../node_modules/.pnpm/@tanstack+virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js","../node_modules/.pnpm/@tanstack+react-virtual@3.13.18_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.js","../src/Boxer/Boxer.store.tsx","../src/Boxer/BoxerTarget.tsx","../src/Boxer/hooks/useBoxerOptions.tsx","../src/Boxer/Boxer.tsx","../src/Former/Former.store.tsx","../src/Former/FormerButtonArea.tsx","../src/Former/FormerLayoutBottom.tsx","../src/Former/FormerLayoutTop.tsx","../src/Former/FormerLayout.tsx","../src/Former/Former.tsx","../src/Former/FormerResolveSpecAPI.ts","../src/Former/FormerRestHeadSpecAPI.ts","../src/Former/FormerWrappers.tsx","../src/FormerControllers/Buttons/ButtonCtrl.tsx","../src/FormerControllers/Buttons/IconButtonCtrl.tsx","../src/FormerControllers/Inputs/NativeSelectCtrl.tsx","../src/FormerControllers/Inputs/PasswordInputCtrl.tsx","../src/FormerControllers/Inputs/SwitchCtrl.tsx","../src/FormerControllers/Inputs/TextAreaCtrl.tsx","../src/FormerControllers/Inputs/TextInputCtrl.tsx","../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 memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { BoxerProps, BoxerStoreState } from './Boxer.types';\n\nconst { Provider: BoxerProvider, useStore: useBoxerStore } = createSyncStore<\n BoxerStoreState,\n BoxerProps\n>(\n (set, get) => ({\n boxerData: [],\n // Data Actions\n fetchData: async (search?: string, reset?: boolean) => {\n const state = get();\n\n // Handle local data\n if (state.dataSource === 'local' || !state.onAPICall) {\n const localData = state.data ?? [];\n\n if (!search) {\n set({ boxerData: localData, hasMore: false, total: localData.length });\n return;\n }\n\n // Filter local data based on search\n const filtered = localData.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase())\n );\n set({ boxerData: filtered, hasMore: false, total: filtered.length });\n return;\n }\n\n // Handle server-side data\n if (state.onAPICall) {\n try {\n set({ isFetching: true });\n\n const currentPage = reset ? 0 : state.page;\n\n const result = await state.onAPICall({\n page: currentPage,\n pageSize: state.pageSize,\n search,\n });\n\n set(\n produce((draft) => {\n if (reset) {\n draft.boxerData = result.data;\n draft.page = 0;\n } else {\n draft.boxerData = [...(draft.boxerData ?? []), ...result.data];\n }\n draft.total = result.total;\n draft.hasMore = draft.boxerData.length < result.total;\n draft.isFetching = false;\n })\n );\n } catch (error) {\n console.error('Boxer fetchData error:', error);\n set({ isFetching: false });\n }\n }\n },\n fetchMoreOnBottomReached: (target: HTMLDivElement) => {\n const state = get();\n\n if (!state.hasMore || state.isFetching) {\n return;\n }\n\n const scrollPercentage =\n (target.scrollTop + target.clientHeight) / target.scrollHeight;\n\n // Load more when scrolled past 80%\n if (scrollPercentage > 0.8) {\n state.loadMore();\n }\n },\n // State Management\n getState: (key) => {\n const current = get();\n return current?.[key];\n },\n hasMore: true,\n input: '',\n isFetching: false,\n loadMore: async () => {\n const state = get();\n\n if (!state.hasMore || state.isFetching) {\n return;\n }\n\n set(\n produce((draft) => {\n draft.page = draft.page + 1;\n })\n );\n\n await state.fetchData(state.search);\n },\n // Initial State\n opened: false,\n page: 0,\n\n pageSize: 50,\n\n search: '',\n\n selectedOptionIndex: -1,\n\n setInput: (input: string) => {\n set({ input });\n },\n\n // Actions\n setOpened: (opened: boolean) => {\n set({ opened });\n },\n\n setSearch: (search: string) => {\n set({ search });\n },\n\n setSelectedOptionIndex: (index: number) => {\n set({ selectedOptionIndex: index });\n },\n\n setState: (key, value) => {\n set(\n produce((state) => {\n state[key] = value;\n })\n );\n },\n\n total: 0,\n }),\n ({\n data = [],\n dataSource = 'local',\n pageSize = 50,\n ...props\n }) => {\n return {\n ...props,\n boxerData: data, // Initialize with local data if provided\n data,\n dataSource,\n hasMore: dataSource === 'server',\n pageSize,\n total: data.length,\n };\n }\n);\n\nexport { BoxerProvider };\nexport { useBoxerStore };\n","import type { ComboboxStore } from '@mantine/core';\n\nimport { ActionIcon, Loader, TextInput } from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport React, { forwardRef } from 'react';\n\ninterface BoxerTargetProps {\n clearable?: boolean;\n combobox: ComboboxStore;\n disabled?: boolean;\n error?: string;\n isFetching?: boolean;\n label?: string;\n leftSection?: React.ReactNode;\n onBlur: () => void;\n onClear: () => void;\n onSearch: (event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n search: string;\n}\n\nconst BoxerTarget = forwardRef<HTMLInputElement, BoxerTargetProps>((props, ref) => {\n const {\n clearable = true,\n combobox,\n disabled,\n error,\n isFetching,\n label,\n leftSection,\n onBlur,\n onClear,\n onSearch,\n placeholder,\n search,\n } = props;\n\n const rightSection = isFetching ? (\n <Loader size=\"xs\" />\n ) : search && clearable ? (\n <ActionIcon\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n size=\"sm\"\n variant=\"subtle\"\n >\n <IconX size={16} />\n </ActionIcon>\n ) : null;\n\n return (\n <TextInput\n disabled={disabled}\n error={error}\n label={label}\n leftSection={leftSection}\n onBlur={onBlur}\n onChange={onSearch}\n onClick={() => combobox.openDropdown()}\n onFocus={() => combobox.openDropdown()}\n placeholder={placeholder}\n ref={ref}\n rightSection={rightSection}\n value={search}\n />\n );\n});\n\nBoxerTarget.displayName = 'BoxerTarget';\n\nexport default BoxerTarget;\n","import { Combobox, Checkbox } from '@mantine/core';\nimport { useMemo } from 'react';\n\nimport type { BoxerItem } from '../Boxer.types';\n\ninterface UseBoxerOptionsProps {\n boxerData: Array<BoxerItem>;\n value?: any | Array<any>;\n multiSelect?: boolean;\n onOptionSubmit: (index: number) => void;\n}\n\nconst useBoxerOptions = (props: UseBoxerOptionsProps) => {\n const { boxerData, value, multiSelect, onOptionSubmit } = props;\n\n const options = useMemo(() => {\n return boxerData.map((item, index) => {\n const isSelected = multiSelect\n ? Array.isArray(value) && value.includes(item.value)\n : value === item.value;\n\n return (\n <Combobox.Option\n key={`${item.value}-${index}`}\n value={String(index)}\n active={isSelected}\n onClick={() => {\n onOptionSubmit(index);\n }}\n >\n {multiSelect ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Checkbox checked={isSelected} onChange={() => {}} tabIndex={-1} />\n <span>{item.label}</span>\n </div>\n ) : (\n item.label\n )}\n </Combobox.Option>\n );\n });\n }, [boxerData, value, multiSelect, onOptionSubmit]);\n\n return { options };\n};\n\nexport default useBoxerOptions;\n","import { Combobox, ScrollArea, useVirtualizedCombobox } from '@mantine/core';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport React, { useCallback, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type { BoxerItem, BoxerProps, BoxerRef } from './Boxer.types';\n\nimport { BoxerProvider, useBoxerStore } from './Boxer.store';\nimport BoxerTarget from './BoxerTarget';\nimport useBoxerOptions from './hooks/useBoxerOptions';\n\nconst BoxerInner = React.forwardRef<BoxerRef>((_, ref) => {\n // Component Refs\n const parentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const valueRef = useRef<any>(null);\n const bufferRef = useRef<any>(null);\n\n // Component store State\n const {\n boxerData,\n clearable,\n comboBoxProps,\n dropDownProps,\n error,\n fetchData,\n fetchMoreOnBottomReached,\n input,\n isFetching,\n label,\n mah,\n multiSelect,\n onBufferChange,\n onChange,\n opened,\n openOnClear,\n placeholder,\n scrollAreaProps,\n search,\n selectedOptionIndex,\n selectFirst,\n setInput,\n setOpened,\n setSearch,\n setSelectedOptionIndex,\n showAll,\n value,\n } = useBoxerStore((state) => ({\n boxerData: state.boxerData,\n clearable: state.clearable,\n comboBoxProps: state.comboBoxProps,\n dropDownProps: state.dropDownProps,\n error: state.error,\n fetchData: state.fetchData,\n fetchMoreOnBottomReached: state.fetchMoreOnBottomReached,\n input: state.input,\n isFetching: state.isFetching,\n label: state.label,\n mah: state.mah,\n multiSelect: state.multiSelect,\n onBufferChange: state.onBufferChange,\n onChange: state.onChange,\n opened: state.opened,\n openOnClear: state.openOnClear,\n placeholder: state.placeholder,\n scrollAreaProps: state.scrollAreaProps,\n search: state.search,\n selectedOptionIndex: state.selectedOptionIndex,\n selectFirst: state.selectFirst,\n setInput: state.setInput,\n setOpened: state.setOpened,\n setSearch: state.setSearch,\n setSelectedOptionIndex: state.setSelectedOptionIndex,\n showAll: state.showAll,\n value: state.value,\n }));\n\n // Virtualization setup\n const count = boxerData.length;\n const virtualizer = useVirtualizer({\n count,\n estimateSize: () => 36,\n getScrollElement: () => parentRef.current,\n });\n const virtualItems = virtualizer.getVirtualItems();\n\n // Component Callback Functions\n const onOptionSubmit = useCallback(\n (indexOrId: number | string) => {\n const index = typeof indexOrId === 'string' ? parseInt(indexOrId, 10) : indexOrId;\n const option = boxerData[index];\n\n if (!option) {\n return;\n }\n\n if (multiSelect) {\n // Handle multi-select\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(option.value);\n\n const newValues = isSelected\n ? currentValues.filter((v: any) => v !== option.value)\n : [...currentValues, option.value];\n\n onChange?.(newValues);\n\n // Update buffer for multi-select\n const newBuffer = boxerData.filter((item) => newValues.includes(item.value));\n onBufferChange?.(newBuffer);\n } else {\n // Handle single select\n onChange?.(option.value);\n setSearch('');\n setInput(option.label);\n valueRef.current = option.value;\n setOpened(false);\n }\n },\n [boxerData, multiSelect, value, onChange, onBufferChange, setSearch, setInput, setOpened]\n );\n\n const onClear = useCallback(() => {\n if (showAll && selectFirst) {\n onOptionSubmit(0);\n } else {\n if (multiSelect) {\n onChange?.([] as any);\n } else {\n onChange?.(null as any);\n }\n setSearch('');\n setInput('');\n inputRef.current?.focus();\n }\n\n if (openOnClear) {\n setOpened(true);\n }\n }, [showAll, selectFirst, multiSelect, onChange, setSearch, setInput, openOnClear, setOpened, onOptionSubmit]);\n\n // Component Hooks\n const combobox = useVirtualizedCombobox({\n getOptionId: (index) => String(index),\n onDropdownClose: () => {\n setOpened(false);\n },\n onDropdownOpen: () => {\n if (!value || (multiSelect && (!Array.isArray(value) || value.length === 0))) {\n setSearch('');\n setInput('');\n }\n combobox.selectFirstOption();\n },\n onSelectedOptionSubmit: onOptionSubmit,\n opened,\n selectedOptionIndex,\n setSelectedOptionIndex: (index) => {\n setSelectedOptionIndex(index);\n if (index !== -1) {\n virtualizer.scrollToIndex(index);\n }\n },\n totalOptionsCount: boxerData.length,\n });\n\n // Component variables\n const { options } = useBoxerOptions({\n boxerData,\n multiSelect,\n onOptionSubmit,\n value,\n });\n\n // Component useEffects\n useEffect(() => {\n // Fetch initial data\n fetchData('', true);\n }, []);\n\n useEffect(() => {\n // Handle search changes\n const delayDebounceFn = setTimeout(() => {\n if (search !== undefined && opened) {\n fetchData(search, true);\n }\n }, 300);\n\n return () => clearTimeout(delayDebounceFn);\n }, [search, opened]);\n\n useEffect(() => {\n // Sync input with value\n if (multiSelect) {\n const labels = boxerData\n .filter((item) => Array.isArray(value) && value.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n\n // When dropdown is closed, show selected labels. When open, allow searching\n if (!opened && input !== labels) {\n setInput(labels);\n setSearch('');\n }\n } else {\n const label = boxerData.find((item) => item.value === value)?.label;\n\n // Only sync if we need to update the input to match the value\n if (input !== label && (search ?? '') === '' && valueRef.current !== value && value) {\n setInput(label ?? '');\n } else if (!value && !valueRef.current && (search ?? '') === '') {\n setSearch('');\n setInput('');\n }\n }\n\n // Handle buffer change\n if (multiSelect) {\n const buffer =\n boxerData.filter((item: BoxerItem) => Array.isArray(value) && value.includes(item.value)) ??\n [];\n\n if (JSON.stringify(bufferRef.current) !== JSON.stringify(buffer)) {\n onBufferChange?.(buffer);\n bufferRef.current = buffer;\n }\n } else {\n const buffer = boxerData?.find((item: BoxerItem) => item.value === value) ?? null;\n\n if (bufferRef.current?.value !== buffer?.value) {\n onBufferChange?.(buffer);\n bufferRef.current = buffer;\n }\n }\n }, [value, boxerData, input, search, multiSelect, opened, onBufferChange, setInput, setSearch]);\n\n useEffect(() => {\n // Select first option automatically\n if (selectFirst && (boxerData?.length ?? 0) > 0 && !multiSelect) {\n if (!value) {\n onOptionSubmit?.(0);\n }\n }\n }, [selectFirst, boxerData, multiSelect]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n clear: () => {\n onClear();\n },\n close: () => {\n setOpened(false);\n combobox.closeDropdown();\n },\n focus: () => {\n inputRef.current?.focus();\n },\n getValue: () => {\n return value;\n },\n open: () => {\n setOpened(true);\n combobox.openDropdown();\n },\n setValue: (newValue: any) => {\n onChange?.(newValue);\n },\n }));\n\n return (\n <Combobox\n {...comboBoxProps}\n resetSelectionOnOptionHover={false}\n store={combobox}\n withinPortal={true}\n >\n <Combobox.Target>\n <Combobox.EventsTarget>\n <BoxerTarget\n clearable={clearable}\n combobox={combobox}\n error={error}\n isFetching={isFetching}\n label={label}\n onBlur={() => {\n if (!value && !multiSelect) {\n setSearch('');\n setInput('');\n combobox.closeDropdown();\n setOpened(false);\n }\n }}\n onClear={onClear}\n onSearch={(event) => {\n setSearch(event.currentTarget.value);\n setInput(event.currentTarget.value);\n setOpened(true);\n }}\n placeholder={placeholder}\n ref={inputRef}\n search={input}\n />\n </Combobox.EventsTarget>\n </Combobox.Target>\n\n <Combobox.Dropdown\n onKeyDown={() => {\n if (inputRef.current) {\n inputRef.current.value = '';\n inputRef.current?.focus();\n }\n }}\n p={2}\n {...dropDownProps}\n >\n {opened && options.length > 0 ? (\n <Combobox.Options>\n <ScrollArea.Autosize\n {...scrollAreaProps}\n mah={mah ?? 200}\n viewportProps={{\n ...scrollAreaProps?.viewportProps,\n onScroll: (event) => {\n fetchMoreOnBottomReached(event.currentTarget as HTMLDivElement);\n },\n style: { border: '1px solid gray', borderRadius: 4 },\n }}\n viewportRef={parentRef}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n width: '100%',\n }}\n >\n <div\n style={{\n left: 0,\n position: 'absolute',\n top: 0,\n transform: `translateY(${virtualItems[0]?.start ?? 0}px)`,\n width: '100%',\n }}\n >\n {virtualItems.map((virtualRow) => (\n <div\n data-index={virtualRow.index}\n key={virtualRow.key}\n ref={virtualizer.measureElement}\n >\n {options[virtualRow.index]}\n </div>\n ))}\n </div>\n </div>\n </ScrollArea.Autosize>\n </Combobox.Options>\n ) : (\n <Combobox.Empty>Nothing found</Combobox.Empty>\n )}\n </Combobox.Dropdown>\n </Combobox>\n );\n});\n\nBoxerInner.displayName = 'BoxerInner';\n\nconst Boxer = React.forwardRef<BoxerRef, BoxerProps>((props, ref) => {\n return (\n <BoxerProvider {...props}>\n <BoxerInner ref={ref} />\n </BoxerProvider>\n );\n});\n\nBoxer.displayName = 'Boxer';\n\nexport { Boxer };\nexport default Boxer;\n","import { newUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { FormerProps, FormerState } from './Former.types';\n\nconst { Provider: FormerProvider, useStore: useFormerStore } = createSyncStore<\n FormerState<any> & Partial<FormerProps<any>>,\n FormerProps<any>\n>(\n (set, get) => ({\n getState: (key) => {\n const current = get();\n return current?.[key];\n },\n load: async (reset?: boolean) => {\n try {\n set({ loading: true });\n const keyName = get()?.uniqueKeyField || 'id';\n const keyValue = (get().values as any)?.[keyName] ?? (get().primeData as any)?.[keyName];\n if (get().onAPICall && keyValue !== undefined) {\n let data = await get().onAPICall!(\n 'read',\n get().request || 'insert',\n get().values,\n keyValue\n );\n if (get().afterGet) {\n data = await get().afterGet!({ ...data });\n }\n set({ loading: false, values: data });\n get().onChange?.(data);\n }\n if (reset && get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n formMethods.reset();\n }\n } catch (e) {\n set({ error: (e as Error)?.message ?? e, loading: false });\n }\n set({ loading: false });\n },\n\n onChange: (values) => {\n set({ values });\n },\n request: 'insert',\n reset: async () => {\n const state = get();\n if (state.getFormMethods) {\n if (state.request !== 'insert') {\n await state.load(true);\n }\n\n const formMethods = state.getFormMethods!();\n formMethods.reset({ ...state.values, ...state.primeData });\n }\n },\n save: async (e?: React.BaseSyntheticEvent<object, any, any> | undefined) => {\n try {\n const keepOpen = get().keepOpen ?? false;\n set({ loading: true });\n if (get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n\n let data = formMethods.getValues();\n\n if (get().beforeSave) {\n const newData = await get().beforeSave!(data);\n data = newData;\n }\n\n let exit = false;\n const handler = formMethods.handleSubmit(\n (newdata) => {\n data = newdata;\n },\n (errors) => {\n set({ error: errors.root?.message || 'Validation errors', loading: false });\n exit = true;\n }\n );\n\n await handler(e);\n\n //console.log('Former.store.tsx save called', success, e, data, get().getFormMethods);\n if (exit) {\n set({ loading: false });\n return undefined;\n }\n\n if (get().request === 'delete' && !get().deleteConfirmed) {\n const confirmed = (await get().onConfirmDelete?.(data)) ?? false;\n if (!confirmed) {\n set({ loading: false });\n return undefined;\n }\n }\n\n if (get().onAPICall) {\n const keyName = get()?.uniqueKeyField || 'id';\n const keyValue =\n (get().values as any)?.[keyName] ?? (get().primeData as any)?.[keyName];\n const savedData = await get().onAPICall!(\n 'mutate',\n get().request || 'insert',\n data,\n keyValue\n );\n if (get().afterSave) {\n await get().afterSave!(savedData);\n }\n set({ loading: false, values: savedData });\n get().onChange?.(savedData);\n formMethods.reset(savedData); //reset with saved data to clear dirty state\n if (!keepOpen) {\n get().onClose?.(savedData);\n }\n return savedData;\n }\n\n set({ loading: false, values: data });\n formMethods.reset(data); //reset with saved data to clear dirty state\n get().onChange?.(data);\n if (!keepOpen) {\n get().onClose?.(data);\n }\n\n return data;\n }\n } catch (e) {\n set({ error: (e as Error)?.message ?? e, loading: false });\n }\n\n return undefined;\n },\n setRequest: (request) => {\n set({ request });\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 validate: async () => {\n if (get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n const isValid = await formMethods.trigger();\n return isValid;\n }\n return true;\n },\n values: undefined,\n }),\n ({ id, onClose, onConfirmDelete, primeData, request, useStoreApi, values }) => {\n let _onConfirmDelete = onConfirmDelete;\n if (!onConfirmDelete) {\n _onConfirmDelete = async () => {\n return confirm('Are you sure you want to delete this item?');\n };\n }\n\n return {\n id: !id ? newUUID() : id,\n onClose: () => {\n const dirty = useStoreApi.getState().dirty;\n const setState = useStoreApi.getState().setState;\n if (dirty) {\n if (confirm('You have unsaved changes. Are you sure you want to close?')) {\n if (onClose) {\n onClose();\n } else {\n setState('opened', false);\n }\n }\n } else {\n if (onClose) {\n onClose();\n } else {\n setState('opened', false);\n }\n }\n },\n onConfirmDelete: _onConfirmDelete,\n primeData,\n request: (request || 'insert').replace('change', 'update'),\n values: { ...primeData, ...values },\n };\n }\n);\n\nexport { FormerProvider };\nexport { useFormerStore };\n","import { Button, Group, Tooltip } from '@mantine/core';\nimport { IconDeviceFloppy, IconX } from '@tabler/icons-react';\n\nimport { useFormerStore } from './Former.store';\n\nexport const FormerButtonArea = () => {\n const {\n buttonAreaGroupProps,\n closeButtonProps,\n closeButtonTitle,\n dirty,\n onClose,\n request,\n save,\n saveButtonProps,\n saveButtonTitle,\n } = useFormerStore((state) => ({\n buttonAreaGroupProps: state.layout?.buttonAreaGroupProps,\n closeButtonProps: state.layout?.closeButtonProps,\n closeButtonTitle: state.layout?.closeButtonTitle,\n dirty: state.dirty,\n onClose: state.onClose,\n request: state.request,\n save: state.save,\n saveButtonProps: state.layout?.saveButtonProps,\n saveButtonTitle: state.layout?.saveButtonTitle,\n }));\n\n const disabledSave =\n ['select', 'view'].includes(request || '') || (['update'].includes(request || '') && !dirty);\n\n return (\n <Group\n justify=\"center\"\n p=\"xs\"\n style={{ boxShadow: '2px 2px 5px rgba(47, 47, 47, 0.1)' }}\n w=\"100%\"\n {...buttonAreaGroupProps}\n >\n <Group grow justify=\"space-evenly\">\n {typeof onClose === 'function' && (\n <Button\n color=\"orange\"\n leftSection={<IconX />}\n miw={'8rem'}\n px=\"md\"\n size=\"sm\"\n {...closeButtonProps}\n onClick={() => {\n onClose();\n }}\n >\n {closeButtonTitle || 'Close'}\n </Button>\n )}\n <Tooltip\n label={\n disabledSave ? (\n <p>\n Cannot save in view or select mode, or no changes made. <br />\n Try changing some values.\n </p>\n ) : (\n <p>Save the current record</p>\n )\n }\n >\n <Button\n bg={request === 'delete' ? 'red' : undefined}\n color=\"green\"\n leftSection={<IconDeviceFloppy />}\n miw={'8rem'}\n px=\"md\"\n size=\"sm\"\n {...saveButtonProps}\n disabled={disabledSave}\n onClick={() => save()}\n >\n {saveButtonTitle || 'Save'}\n </Button>\n </Tooltip>\n </Group>\n </Group>\n );\n};\n","import { useFormerStore } from './Former.store';\nimport { FormerButtonArea } from './FormerButtonArea';\n\nexport const FormerLayoutBottom = () => {\n const { buttonArea, getState, opened, renderBottom } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderBottom: state.layout?.renderBottom,\n }));\n\n if (renderBottom) {\n return renderBottom(\n <FormerButtonArea />,\n opened,\n getState('onClose'),\n getState('onOpen'),\n getState\n );\n }\n\n return buttonArea === \"bottom\" ? <FormerButtonArea /> : <></>;\n};\n","import { useFormerStore } from './Former.store';\nimport { FormerButtonArea } from './FormerButtonArea';\n\nexport const FormerLayoutTop = () => {\n const { buttonArea, getState, opened, renderTop } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderTop: state.layout?.renderTop,\n }));\n\n if (renderTop) {\n return renderTop(\n <FormerButtonArea />,\n opened,\n getState('onClose'),\n getState('onOpen'),\n getState\n );\n }\n return buttonArea === \"top\" ? <FormerButtonArea /> : <></>;\n};\n","import { LoadingOverlay, ScrollAreaAutosize } from '@mantine/core';\nimport { type PropsWithChildren, useEffect } from 'react';\n\nimport { useFormerStore } from './Former.store';\nimport { FormerLayoutBottom } from './FormerLayoutBottom';\nimport { FormerLayoutTop } from './FormerLayoutTop';\n\nexport const FormerLayout = (props: PropsWithChildren) => {\n const {\n disableHTMlForm,\n getFormMethods,\n id,\n load,\n loading,\n loadingOverlayProps,\n opened,\n request,\n reset,\n save,\n scrollAreaProps,\n } = useFormerStore((state) => ({\n disableHTMlForm: state.disableHTMlForm,\n getFormMethods: state.getFormMethods,\n id: state.id,\n load: state.load,\n loading: state.loading,\n loadingOverlayProps: state.loadingOverlayProps,\n opened: state.opened,\n request: state.request,\n reset: state.reset,\n save: state.save,\n\n scrollAreaProps: state.scrollAreaProps,\n }));\n\n useEffect(() => {\n if (getFormMethods) {\n const formMethods = getFormMethods();\n if (formMethods && request !== 'insert') {\n load(true);\n }\n }\n }, [getFormMethods, request, opened]);\n\n return (\n <>\n <FormerLayoutTop />\n <ScrollAreaAutosize\n offsetScrollbars\n scrollbarSize={4}\n type=\"auto\"\n {...scrollAreaProps}\n style={{\n height: '100%',\n padding: '0.25rem',\n width: '100%',\n ...scrollAreaProps?.style,\n }}\n >\n {disableHTMlForm ? (\n // eslint-disable-next-line react/no-unknown-property\n <div key={`former_d${id}`} x-data-request={request}>\n {props.children}\n </div>\n ) : (\n <form\n id={`former_f${id}`}\n key={`former_${id}`}\n onReset={(e) => reset(e)}\n onSubmit={(e) => save(e)}\n // eslint-disable-next-line react/no-unknown-property\n x-data-request={request}\n >\n {props.children}\n </form>\n )}\n\n <LoadingOverlay\n loaderProps={{ type: 'bars' }}\n overlayProps={{\n backgroundOpacity: 0.5,\n }}\n {...loadingOverlayProps}\n visible={loading}\n />\n </ScrollAreaAutosize>\n <FormerLayoutBottom />\n </>\n );\n};\n","import { forwardRef, type PropsWithChildren, useEffect, useImperativeHandle } from 'react';\nimport { type FieldValues, FormProvider, useForm } from 'react-hook-form';\n\nimport type { FormerProps, FormerRef } from './Former.types';\n\nimport { FormerProvider, useFormerStore } from './Former.store';\nimport { FormerLayout } from './FormerLayout';\n\nconst FormerInner = forwardRef<FormerRef<any>, Partial<FormerProps<any>> & PropsWithChildren>(\n function FormerInner<T extends FieldValues>(\n props: Partial<FormerProps<T>> & PropsWithChildren<T>,\n ref: any\n ) {\n const {\n getState,\n onChange,\n onClose,\n onOpen,\n opened,\n primeData,\n reset,\n save,\n setState,\n useFormProps,\n validate,\n values,\n wrapper,\n } = useFormerStore((state) => ({\n getState: state.getState,\n onChange: state.onChange,\n onClose: state.onClose,\n onOpen: state.onOpen,\n opened: state.opened,\n primeData: state.primeData,\n reset: state.reset,\n save: state.save,\n setState: state.setState,\n useFormProps: state.useFormProps,\n validate: state.validate,\n values: state.values,\n wrapper: state.wrapper,\n }));\n\n const formMethods = useForm<T>({\n defaultValues: primeData,\n mode: 'all',\n shouldUseNativeValidation: true,\n values: values,\n ...useFormProps,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n close: async () => {\n //console.log('close called');\n onClose?.();\n setState('opened', false);\n },\n getValue: () => {\n return getState('values');\n },\n reset: () => {\n reset();\n },\n save: async () => {\n return await save();\n },\n setValue: (value: T) => {\n onChange?.(value);\n },\n show: async () => {\n //console.log('show called');\n setState('opened', true);\n onOpen?.();\n },\n validate: async () => {\n return await validate();\n },\n }),\n [getState, onChange, validate, save, reset, setState, onClose, onOpen]\n );\n\n useEffect(() => {\n setState('getFormMethods', () => formMethods);\n\n if (formMethods) {\n formMethods.subscribe({\n callback: ({ isDirty }) => {\n setState('dirty', isDirty);\n },\n formState: { isDirty: true },\n });\n }\n }, [formMethods]);\n\n return (\n <FormProvider {...formMethods}>\n {typeof wrapper === 'function' ? (\n wrapper(<FormerLayout>{props.children}</FormerLayout>, opened, onClose, onOpen, getState)\n ) : (\n <FormerLayout>{props.children || null}</FormerLayout>\n )}\n </FormProvider>\n );\n }\n);\n\nexport const Former = forwardRef<FormerRef<any>, FormerProps<any> & PropsWithChildren>(\n function Former<T extends FieldValues = any>(\n props: FormerProps<T> & PropsWithChildren<T>,\n ref: any\n ) {\n //if opened is false and wrapper is defined as function, do not render anything\n if (!props.opened && typeof props.wrapper === 'function') {\n return null;\n }\n return (\n <FormerProvider {...props}>\n <FormerInner ref={ref}>{props.children}</FormerInner>\n </FormerProvider>\n );\n }\n);\n","import type { FormerAPICallType } from './Former.types';\n\ninterface ResolveSpecRequest {\n data?: Record<string, any>;\n operation: 'create' | 'delete' | 'read' | 'update';\n options?: {\n columns?: string[];\n computedColumns?: any[];\n customOperators?: any[];\n filters?: Array<{ column: string; operator: string; value: any }>;\n limit?: number;\n offset?: number;\n preload?: string[];\n sort?: string[];\n };\n}\n\nfunction FormerResolveSpecAPI(options: {\n authToken: string;\n fetchOptions?: Partial<RequestInit>;\n signal?: AbortSignal;\n url: string;\n}): FormerAPICallType {\n return async (mode, request, value, key) => {\n const baseUrl = options.url.replace(/\\/$/, '');\n\n // Build URL: /[schema]/[table_or_entity]/[id]\n let url = `${baseUrl}`;\n if (request !== 'insert' && key) {\n url = `${url}/${key}`;\n }\n\n // Build ResolveSpec request body\n const resolveSpecRequest: ResolveSpecRequest = {\n operation:\n mode === 'read'\n ? 'read'\n : request === 'delete'\n ? 'delete'\n : request === 'update'\n ? 'update'\n : 'create',\n };\n\n if (mode === 'mutate') {\n resolveSpecRequest.data = value;\n }\n\n const fetchOptions: RequestInit = {\n cache: 'no-cache',\n signal: options.signal,\n ...options.fetchOptions,\n body: JSON.stringify(resolveSpecRequest),\n headers: {\n Authorization: `Bearer ${options.authToken}`,\n 'Content-Type': 'application/json',\n ...options.fetchOptions?.headers,\n },\n method: 'POST',\n };\n\n const response = await fetch(url, fetchOptions);\n if (!response.ok) {\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as any;\n };\n}\n\nexport { FormerResolveSpecAPI, type ResolveSpecRequest };\n","import type { FormerAPICallType } from './Former.types';\n\nfunction FormerRestHeadSpecAPI(options: {\n authToken: string;\n fetchOptions?: Partial<RequestInit>;\n signal?: AbortSignal;\n url: string;\n}): FormerAPICallType {\n return async (mode, request, value, key) => {\n const baseUrl = options.url ?? ''; // Remove trailing slashes\n let url = baseUrl;\n const fetchOptions: RequestInit = {\n cache: 'no-cache',\n signal: options.signal,\n ...options.fetchOptions,\n body: mode === 'mutate' && request !== 'delete' ? JSON.stringify(value) : undefined,\n headers: {\n Authorization: `Bearer ${options.authToken}`,\n 'Content-Type': 'application/json',\n ...options.fetchOptions?.headers,\n },\n method:\n mode === 'read'\n ? 'GET'\n : request === 'delete'\n ? 'DELETE'\n : request === 'update'\n ? 'PUT'\n : 'POST',\n };\n\n if (request !== 'insert') {\n url = `${baseUrl}/${key}`;\n }\n\n const response = await fetch(url, fetchOptions);\n if (!response.ok) {\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n if (mode === 'read') {\n const data = await response.json();\n return data as any;\n } else {\n return value as any;\n }\n };\n}\n\nexport { FormerRestHeadSpecAPI };\n","import {\n Drawer,\n type DrawerProps,\n Modal,\n type ModalProps,\n Popover,\n type PopoverProps,\n} from '@mantine/core';\n\nimport type { FormerProps } from './Former.types';\n\nimport { Former } from './Former';\n\nexport const FormerDialog = (props: { former: FormerProps } & DrawerProps) => {\n const { children, former, onClose, opened, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose, _onOpen, getState) => {\n const values = getState('values');\n const request = getState('request');\n const uniqueKeyField = getState('uniqueKeyField') ?? 'id';\n return (\n <Drawer\n closeOnClickOutside={false}\n h={'100%'}\n title={\n request === 'delete'\n ? `Delete Record - ${values?.[uniqueKeyField]}`\n : request === 'insert'\n ? 'New Record'\n : `Edit Record - ${values?.[uniqueKeyField]}`\n }\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n {children}\n </Drawer>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n\nexport const FormerModel = (props: { former: FormerProps } & ModalProps) => {\n const { children, former, onClose, opened, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose, _onOpen, getState) => {\n const values = getState('values');\n const request = getState('request');\n const uniqueKeyField = getState('uniqueKeyField') ?? 'id';\n return (\n <Modal\n closeOnClickOutside={false}\n h={'100%'}\n title={\n request === 'delete'\n ? `Delete Record - ${values?.[uniqueKeyField]}`\n : request === 'insert'\n ? 'New Record'\n : `Edit Record - ${values?.[uniqueKeyField]}`\n }\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n {children}\n </Modal>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n\nexport const FormerPopover = (\n props: { former: FormerProps; target: React.ReactNode } & PopoverProps\n) => {\n const { children, former, onClose, opened, target, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose) => {\n return (\n <Popover\n closeOnClickOutside={false}\n middlewares={{ inline: true }}\n trapFocus\n width={250}\n withArrow\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n <Popover.Target>{target}</Popover.Target>\n <Popover.Dropdown>{children}</Popover.Dropdown>\n </Popover>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n","import { Button, type ButtonProps, Tooltip } from '@mantine/core';\nimport { useState } from 'react';\n\nimport type { SpecialIDProps } from '../FormerControllers.types';\n\nconst ButtonCtrl = (\n props: {\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => Promise<void>;\n } & Omit<ButtonProps, 'onClick'> &\n SpecialIDProps\n) => {\n const [loading, setLoading] = useState(false);\n return (\n <Tooltip label={props.tooltip ?? ''} withArrow>\n <Button\n loaderProps={{\n type: 'bars',\n }}\n {...props}\n loading={loading || props.loading}\n onClick={(e) => {\n if (props.onClick) {\n setLoading(true);\n props.onClick(e).finally(() => setLoading(false));\n }\n }}\n >\n {props.children}\n </Button>\n </Tooltip>\n );\n};\n\nexport { ButtonCtrl };\nexport default ButtonCtrl;\n","import { ActionIcon, type ActionIconProps, Tooltip, VisuallyHidden } from '@mantine/core';\nimport { useState } from 'react';\n\nimport type { SpecialIDProps } from '../FormerControllers.types';\n\nconst IconButtonCtrl = (\n props: {\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => Promise<void>;\n } & Omit<ActionIconProps, 'onClick'> &\n SpecialIDProps\n) => {\n const [loading, setLoading] = useState(false);\n return (\n <Tooltip label={props.tooltip ?? ''} withArrow>\n <ActionIcon\n loaderProps={{\n type: 'bars',\n }}\n {...props}\n loading={loading || props.loading}\n onClick={(e) => {\n if (props.onClick) {\n setLoading(true);\n props.onClick(e).finally(() => setLoading(false));\n }\n }}\n >\n {props.children}\n <VisuallyHidden>Action Button: {props.tooltip ?? props.sid ?? ''}</VisuallyHidden>\n </ActionIcon>\n </Tooltip>\n );\n};\n\nexport { IconButtonCtrl };\nexport default IconButtonCtrl;\n","import { NativeSelect, type NativeSelectProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst NativeSelectCtrl = (props: FormerControllersProps & NativeSelectProps & SpecialIDProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <NativeSelect\n {...innerProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </NativeSelect>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { NativeSelectCtrl };\nexport default NativeSelectCtrl;\n","import { PasswordInput, type PasswordInputProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst PasswordInputCtrl = (props: FormerControllersProps & PasswordInputProps & SpecialIDProps) => {\n const { control, name, sid, tooltip, ...textProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <PasswordInput\n {...textProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </PasswordInput>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { PasswordInputCtrl };\nexport default PasswordInputCtrl;\n","import { Switch, type SwitchProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst SwitchCtrl = (props: FormerControllersProps & SpecialIDProps & SwitchProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <Switch\n {...innerProps}\n {...field}\n checked={!!field.value}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n onChange={(e) => {\n field.onChange((e.currentTarget ?? e.target)?.checked);\n }}\n />\n </Tooltip>\n )}\n />\n );\n};\n\nexport { SwitchCtrl };\nexport default SwitchCtrl;\n","import { Textarea, type TextareaProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst TextAreaCtrl = (props: FormerControllersProps & SpecialIDProps & TextareaProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <Textarea\n minRows={4}\n {...innerProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </Textarea>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { TextAreaCtrl };\nexport default TextAreaCtrl;\n","import { TextInput, type TextInputProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst TextInputCtrl = (props: FormerControllersProps & SpecialIDProps & TextInputProps) => {\n const { control, name, sid, tooltip, ...textProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <TextInput\n {...textProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </TextInput>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { TextInputCtrl };\nexport default TextInputCtrl;\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 isValuesInPages: () => boolean\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\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\n ) => void;\n\n pageSize: number;\n ready: boolean;\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => void;\n\n reload?: () => Promise<void>;\n renderColumns?: GridlerColumns;\n setState: <K extends keyof GridlerStoreState>(\n key: K,\n value: Partial<GridlerStoreState[K]>\n ) => void;\n setStateFN: <K extends keyof GridlerStoreState>(\n key: K,\n value: (current: GridlerStoreState[K]) => Partial<GridlerStoreState[K]>\n ) => Promise<void>;\n toCell: <TRowType extends Record<string, string>>(row: TRowType, col: number) => GridCell;\n 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 isValuesInPages: () => {\n const state = get();\n if (state.values && Object.keys(state._page_data).length > 0) {\n let found = false;\n for (const page in state._page_data) {\n const pageData = state._page_data[Number(page)];\n for (const row of pageData) {\n const keyField = state.keyField ?? 'id';\n const rowKey = row?.[keyField];\n if (rowKey !== undefined) {\n const match = state.values.find((v) => String(v?.[keyField]) === String(rowKey));\n if (match) {\n found = true;\n break;\n }\n }\n }\n if (found) {\n return true;\n }\n }\n }\n \n return false\n },\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\n onColumnProposeMove: (startIndex: number, endIndex: number) => {\n const s = get();\n const fromItem = s.renderColumns?.[startIndex];\n const toItem = s.renderColumns?.[endIndex];\n if (fromItem?.disableMove || toItem?.disableMove) {\n return false;\n }\n return true;\n },\n onColumnResize: (\n column: GridColumn,\n newSize: number,\n _colIndex: number,\n _newSizeWithGrow: number\n ) => {\n const s = get();\n const col = s.renderColumns?.find((col) => col.id === column.id);\n if (col?.disableResize) {\n return;\n }\n if (col?.maxWidth && newSize < col?.maxWidth) {\n return;\n }\n\n if (col) {\n s.setStateFN('colSize', (cols) => {\n if (cols && col && cols[col.id] === newSize) {\n return cols;\n }\n return { ...cols, [col.id]: newSize };\n });\n }\n },\n 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 const keyField = getState('keyField');\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 f.id &&\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 (keyField) {\n if (!col_ids.includes(keyField)) {\n col_ids.push(keyField);\n }\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 const isValuesInPages = getState('isValuesInPages');\n \n const _refresh = getState('_refresh');\n if (!isValuesInPages) {\n setState('values', []);\n }\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\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"," \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 selectFirstRowOnMount,\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 selectFirstRowOnMount:s.selectFirstRowOnMount,\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 }, [_gridSelectionRows, _gridSelectionRows?.length, 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\n const loadPage = () => {\n const selectFirstRowOnMount = getState('selectFirstRowOnMount');\n const ready = getState('ready');\n\n if (ready && selectFirstRowOnMount) {\n\n const scrollToRowKey = getState('scrollToRowKey');\n \n \n if (scrollToRowKey && scrollToRowKey >= 0) {\n return;\n }\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] ?? -1;\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\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, selectFirstRowOnMount]);\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 console.log('Debug:onGridSelectionChange', currentSelection, selection);\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","memo","getDeps","fn","opts","deps","result","isInitial","memoizedFunction","_a","_b","_c","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","notUndefined","msg","approxEqual","a","b","debounce","targetWindow","ms","timeoutId","args","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","arr","i","observeElementRect","instance","cb","handler","rect","width","height","observer","entries","run","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","offset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","target","opts2","sync","d","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","previousFurthestMeasurement","count","paddingStart","scrollMargin","getItemKey","enabled","lanes","itemSizeCache","item","min","laneLastIndex","cachedLane","lane","prevIndex","prevInLane","furthestMeasurement","measuredSize","size","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","attributeName","indexStr","prevNode","itemSize","delta","indexes","virtualItems","len","findNearestBinarySearch","doc","align","maxOffset","initialAlign","attempts","maxAttempts","tryScroll","currentAlign","offsetInfo","verify","currentOffset","afterInfo","scheduleRetry","endByLane","val","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","useIsomorphicLayoutEffect","useVirtualizerBase","useFlushSync","options","rerender","resolvedOptions","instance2","flushSync","useVirtualizer","BoxerProvider","useBoxerStore","createSyncStore","set","search","reset","state","localData","filtered","currentPage","produce","draft","error","input","opened","data","dataSource","pageSize","BoxerTarget","forwardRef","ref","clearable","combobox","disabled","isFetching","label","leftSection","onBlur","onClear","onSearch","placeholder","rightSection","jsx","Loader","ActionIcon","e","IconX","TextInput","useBoxerOptions","boxerData","multiSelect","onOptionSubmit","useMemo","isSelected","Combobox","jsxs","Checkbox","BoxerInner","_","parentRef","useRef","inputRef","valueRef","bufferRef","comboBoxProps","dropDownProps","fetchData","fetchMoreOnBottomReached","mah","onBufferChange","onChange","openOnClear","scrollAreaProps","selectedOptionIndex","selectFirst","setInput","setOpened","setSearch","setSelectedOptionIndex","showAll","virtualizer","useCallback","indexOrId","option","currentValues","newValues","v","newBuffer","useVirtualizedCombobox","useEffect","delayDebounceFn","labels","buffer","useImperativeHandle","newValue","event","ScrollArea","virtualRow","Boxer","FormerProvider","useFormerStore","keyName","keyValue","values","keepOpen","formMethods","exit","newdata","errors","savedData","request","resolve","reject","id","onClose","onConfirmDelete","primeData","useStoreApi","_onConfirmDelete","newUUID","dirty","setState","FormerButtonArea","buttonAreaGroupProps","closeButtonProps","closeButtonTitle","save","saveButtonProps","saveButtonTitle","disabledSave","Group","Button","Tooltip","IconDeviceFloppy","FormerLayoutBottom","buttonArea","getState","renderBottom","Fragment","FormerLayoutTop","renderTop","FormerLayout","disableHTMlForm","getFormMethods","load","loading","loadingOverlayProps","ScrollAreaAutosize","LoadingOverlay","FormerInner","onOpen","useFormProps","validate","wrapper","useForm","isDirty","FormProvider","Former","FormerResolveSpecAPI","mode","url","resolveSpecRequest","fetchOptions","response","FormerRestHeadSpecAPI","baseUrl","FormerDialog","former","rest","_onOpen","uniqueKeyField","Drawer","FormerModel","Modal","FormerPopover","Popover","ButtonCtrl","setLoading","useState","IconButtonCtrl","VisuallyHidden","NativeSelectCtrl","control","sid","tooltip","innerProps","Controller","field","formState","createElement","NativeSelect","PasswordInputCtrl","textProps","PasswordInput","SwitchCtrl","Switch","TextAreaCtrl","Textarea","TextInputCtrl","w","n","o","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","b64EncodeUnicode","GoAPIHeaders","head","headerlist","authToken","getAuthToken","token","distinctOperations","searchValue","callbacks","getNestedValue","l","c","MantineBetterMenusStoreProvider","useMantineBetterMenus","idx","s","menuIndex","menu","getUUID","MenuRenderer","menus","providerID","setInstanceState","Portal","Menu","itemIndex","MenuItemRenderer","subitem","subitemIndex","MantineBetterMenusProvider","FilterOperators","ColumnFilterInput","filterIndex","f","filter","filterValue","setFilterValue","defferedFilterValue","useDebouncedValue","filters","ColumnFilterInputOperator","Select","ColumnFilterSet","Stack","SortDownSprite","SortUpSprite","SpriteImage","Provider","useGridlerStore","CompactSelection","err","cell","col","row","GridCellKind","selection","_abortSignal","_cv","y","x","buffers","page_data","p","r","firstPage","upperPage","rowIndex","keyField","rn","found","page","pageData","rowKey","pPage","clearMode","damageList","colLen","hasPage","cv","newVal","from","to","fromItem","toItem","cols","renderCols","acc","column","newSize","_colIndex","_newSizeWithGrow","area","coldef","items","IconGrid4x4","dir","newSort","colIndex","screenPosition","sortItems","region","_tx","_ty","_extras","onVisibleRegionChangedDebounced","previousPage","pageDif","newpos","fromRow","toRow","onMounted","div","onUnMounted","_e","_GlidlerAPIAdaptorForGoLangv2","setStateFN","addError","mounted","useAPIQuery","columns","colSort","colFilters","searchStr","searchFields","_active_requests","sort","col_ids","optionHeaders","oh","currentRequestIndex","controller","res","cr","askAPIRowNumber","isValuesInPages","_refresh","getGridSelectedRows","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","parms","refreshCells","GridlerRefHandler","BottomBar","_activeTooltip","tooltipBarProps","Computer","refFirstRun","refLastSearch","refLastFilters","_glideref","_gridSelectionRows","colOrder","colSize","getRowIndexByKey","loadPage","ready","scrollToRowKey","selectedRowKey","selectFirstRowOnMount","debouncedDoSearch","useDebouncedCallback","rowIndexes","vi","_values","firstBuffer","selected","startOrEnd","step","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","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","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,26,28]}
|
|
1
|
+
{"version":3,"file":"lib.cjs.js","sources":["../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js","../node_modules/.pnpm/@tanstack+virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../node_modules/.pnpm/@tanstack+virtual-core@3.13.18/node_modules/@tanstack/virtual-core/dist/esm/index.js","../node_modules/.pnpm/@tanstack+react-virtual@3.13.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@tanstack/react-virtual/dist/esm/index.js","../src/Boxer/Boxer.store.tsx","../src/Boxer/BoxerTarget.tsx","../src/Boxer/hooks/useBoxerOptions.tsx","../src/Boxer/Boxer.tsx","../src/Former/Former.store.tsx","../src/Former/FormerButtonArea.tsx","../src/Former/FormerLayoutBottom.tsx","../src/Former/FormerLayoutTop.tsx","../src/Former/FormerLayout.tsx","../src/Former/Former.tsx","../src/Former/FormerResolveSpecAPI.ts","../src/Former/FormerRestHeadSpecAPI.ts","../src/Former/FormerWrappers.tsx","../src/FormerControllers/Buttons/ButtonCtrl.tsx","../src/FormerControllers/Buttons/IconButtonCtrl.tsx","../src/FormerControllers/Inputs/NativeSelectCtrl.tsx","../src/FormerControllers/Inputs/PasswordInputCtrl.tsx","../src/FormerControllers/Inputs/SwitchCtrl.tsx","../src/FormerControllers/Inputs/TextAreaCtrl.tsx","../src/FormerControllers/Inputs/TextInputCtrl.tsx","../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 memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { BoxerProps, BoxerStoreState } from './Boxer.types';\n\nconst { Provider: BoxerProvider, useStore: useBoxerStore } = createSyncStore<\n BoxerStoreState,\n BoxerProps\n>(\n (set, get) => ({\n boxerData: [],\n // Data Actions\n fetchData: async (search?: string, reset?: boolean) => {\n const state = get();\n\n // Handle local data\n if (state.dataSource === 'local' || !state.onAPICall) {\n const localData = state.data ?? [];\n\n if (!search) {\n set({ boxerData: localData, hasMore: false, total: localData.length });\n return;\n }\n\n // Filter local data based on search\n const filtered = localData.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase())\n );\n set({ boxerData: filtered, hasMore: false, total: filtered.length });\n return;\n }\n\n // Handle server-side data\n if (state.onAPICall) {\n try {\n set({ isFetching: true });\n\n const currentPage = reset ? 0 : state.page;\n\n const result = await state.onAPICall({\n page: currentPage,\n pageSize: state.pageSize,\n search,\n });\n\n set(\n produce((draft) => {\n if (reset) {\n draft.boxerData = result.data;\n draft.page = 0;\n } else {\n draft.boxerData = [...(draft.boxerData ?? []), ...result.data];\n }\n draft.total = result.total;\n draft.hasMore = draft.boxerData.length < result.total;\n draft.isFetching = false;\n })\n );\n } catch (error) {\n console.error('Boxer fetchData error:', error);\n set({ isFetching: false });\n }\n }\n },\n fetchMoreOnBottomReached: (target: HTMLDivElement) => {\n const state = get();\n\n if (!state.hasMore || state.isFetching) {\n return;\n }\n\n const scrollPercentage =\n (target.scrollTop + target.clientHeight) / target.scrollHeight;\n\n // Load more when scrolled past 80%\n if (scrollPercentage > 0.8) {\n state.loadMore();\n }\n },\n // State Management\n getState: (key) => {\n const current = get();\n return current?.[key];\n },\n hasMore: true,\n input: '',\n isFetching: false,\n loadMore: async () => {\n const state = get();\n\n if (!state.hasMore || state.isFetching) {\n return;\n }\n\n set(\n produce((draft) => {\n draft.page = draft.page + 1;\n })\n );\n\n await state.fetchData(state.search);\n },\n // Initial State\n opened: false,\n page: 0,\n\n pageSize: 50,\n\n search: '',\n\n selectedOptionIndex: -1,\n\n setInput: (input: string) => {\n set({ input });\n },\n\n // Actions\n setOpened: (opened: boolean) => {\n set({ opened });\n },\n\n setSearch: (search: string) => {\n set({ search });\n },\n\n setSelectedOptionIndex: (index: number) => {\n set({ selectedOptionIndex: index });\n },\n\n setState: (key, value) => {\n set(\n produce((state) => {\n state[key] = value;\n })\n );\n },\n\n total: 0,\n }),\n ({\n data = [],\n dataSource = 'local',\n pageSize = 50,\n ...props\n }) => {\n return {\n ...props,\n boxerData: data, // Initialize with local data if provided\n data,\n dataSource,\n hasMore: dataSource === 'server',\n pageSize,\n total: data.length,\n };\n }\n);\n\nexport { BoxerProvider };\nexport { useBoxerStore };\n","import type { ComboboxStore } from '@mantine/core';\n\nimport { ActionIcon, Loader, TextInput } from '@mantine/core';\nimport { IconX } from '@tabler/icons-react';\nimport React, { forwardRef } from 'react';\n\ninterface BoxerTargetProps {\n clearable?: boolean;\n combobox: ComboboxStore;\n disabled?: boolean;\n error?: string;\n isFetching?: boolean;\n label?: string;\n leftSection?: React.ReactNode;\n onBlur: () => void;\n onClear: () => void;\n onSearch: (event: React.ChangeEvent<HTMLInputElement>) => void;\n placeholder?: string;\n search: string;\n}\n\nconst BoxerTarget = forwardRef<HTMLInputElement, BoxerTargetProps>((props, ref) => {\n const {\n clearable = true,\n combobox,\n disabled,\n error,\n isFetching,\n label,\n leftSection,\n onBlur,\n onClear,\n onSearch,\n placeholder,\n search,\n } = props;\n\n const rightSection = isFetching ? (\n <Loader size=\"xs\" />\n ) : search && clearable ? (\n <ActionIcon\n onClick={(e) => {\n e.stopPropagation();\n onClear();\n }}\n size=\"sm\"\n variant=\"subtle\"\n >\n <IconX size={16} />\n </ActionIcon>\n ) : null;\n\n return (\n <TextInput\n disabled={disabled}\n error={error}\n label={label}\n leftSection={leftSection}\n onBlur={onBlur}\n onChange={onSearch}\n onClick={() => combobox.openDropdown()}\n onFocus={() => combobox.openDropdown()}\n placeholder={placeholder}\n ref={ref}\n rightSection={rightSection}\n value={search}\n />\n );\n});\n\nBoxerTarget.displayName = 'BoxerTarget';\n\nexport default BoxerTarget;\n","import { Combobox, Checkbox } from '@mantine/core';\nimport { useMemo } from 'react';\n\nimport type { BoxerItem } from '../Boxer.types';\n\ninterface UseBoxerOptionsProps {\n boxerData: Array<BoxerItem>;\n value?: any | Array<any>;\n multiSelect?: boolean;\n onOptionSubmit: (index: number) => void;\n}\n\nconst useBoxerOptions = (props: UseBoxerOptionsProps) => {\n const { boxerData, value, multiSelect, onOptionSubmit } = props;\n\n const options = useMemo(() => {\n return boxerData.map((item, index) => {\n const isSelected = multiSelect\n ? Array.isArray(value) && value.includes(item.value)\n : value === item.value;\n\n return (\n <Combobox.Option\n key={`${item.value}-${index}`}\n value={String(index)}\n active={isSelected}\n onClick={() => {\n onOptionSubmit(index);\n }}\n >\n {multiSelect ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Checkbox checked={isSelected} onChange={() => {}} tabIndex={-1} />\n <span>{item.label}</span>\n </div>\n ) : (\n item.label\n )}\n </Combobox.Option>\n );\n });\n }, [boxerData, value, multiSelect, onOptionSubmit]);\n\n return { options };\n};\n\nexport default useBoxerOptions;\n","import { Combobox, ScrollArea, useVirtualizedCombobox } from '@mantine/core';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport React, { useCallback, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type { BoxerItem, BoxerProps, BoxerRef } from './Boxer.types';\n\nimport { BoxerProvider, useBoxerStore } from './Boxer.store';\nimport BoxerTarget from './BoxerTarget';\nimport useBoxerOptions from './hooks/useBoxerOptions';\n\nconst BoxerInner = React.forwardRef<BoxerRef>((_, ref) => {\n // Component Refs\n const parentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const valueRef = useRef<any>(null);\n const bufferRef = useRef<any>(null);\n\n // Component store State\n const {\n boxerData,\n clearable,\n comboBoxProps,\n dropDownProps,\n error,\n fetchData,\n fetchMoreOnBottomReached,\n input,\n isFetching,\n label,\n mah,\n multiSelect,\n onBufferChange,\n onChange,\n opened,\n openOnClear,\n placeholder,\n scrollAreaProps,\n search,\n selectedOptionIndex,\n selectFirst,\n setInput,\n setOpened,\n setSearch,\n setSelectedOptionIndex,\n showAll,\n value,\n } = useBoxerStore((state) => ({\n boxerData: state.boxerData,\n clearable: state.clearable,\n comboBoxProps: state.comboBoxProps,\n dropDownProps: state.dropDownProps,\n error: state.error,\n fetchData: state.fetchData,\n fetchMoreOnBottomReached: state.fetchMoreOnBottomReached,\n input: state.input,\n isFetching: state.isFetching,\n label: state.label,\n mah: state.mah,\n multiSelect: state.multiSelect,\n onBufferChange: state.onBufferChange,\n onChange: state.onChange,\n opened: state.opened,\n openOnClear: state.openOnClear,\n placeholder: state.placeholder,\n scrollAreaProps: state.scrollAreaProps,\n search: state.search,\n selectedOptionIndex: state.selectedOptionIndex,\n selectFirst: state.selectFirst,\n setInput: state.setInput,\n setOpened: state.setOpened,\n setSearch: state.setSearch,\n setSelectedOptionIndex: state.setSelectedOptionIndex,\n showAll: state.showAll,\n value: state.value,\n }));\n\n // Virtualization setup\n const count = boxerData.length;\n const virtualizer = useVirtualizer({\n count,\n estimateSize: () => 36,\n getScrollElement: () => parentRef.current,\n });\n const virtualItems = virtualizer.getVirtualItems();\n\n // Component Callback Functions\n const onOptionSubmit = useCallback(\n (indexOrId: number | string) => {\n const index = typeof indexOrId === 'string' ? parseInt(indexOrId, 10) : indexOrId;\n const option = boxerData[index];\n\n if (!option) {\n return;\n }\n\n if (multiSelect) {\n // Handle multi-select\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(option.value);\n\n const newValues = isSelected\n ? currentValues.filter((v: any) => v !== option.value)\n : [...currentValues, option.value];\n\n onChange?.(newValues);\n\n // Update buffer for multi-select\n const newBuffer = boxerData.filter((item) => newValues.includes(item.value));\n onBufferChange?.(newBuffer);\n } else {\n // Handle single select\n onChange?.(option.value);\n setSearch('');\n setInput(option.label);\n valueRef.current = option.value;\n setOpened(false);\n }\n },\n [boxerData, multiSelect, value, onChange, onBufferChange, setSearch, setInput, setOpened]\n );\n\n const onClear = useCallback(() => {\n if (showAll && selectFirst) {\n onOptionSubmit(0);\n } else {\n if (multiSelect) {\n onChange?.([] as any);\n } else {\n onChange?.(null as any);\n }\n setSearch('');\n setInput('');\n inputRef.current?.focus();\n }\n\n if (openOnClear) {\n setOpened(true);\n }\n }, [showAll, selectFirst, multiSelect, onChange, setSearch, setInput, openOnClear, setOpened, onOptionSubmit]);\n\n // Component Hooks\n const combobox = useVirtualizedCombobox({\n getOptionId: (index) => String(index),\n onDropdownClose: () => {\n setOpened(false);\n },\n onDropdownOpen: () => {\n if (!value || (multiSelect && (!Array.isArray(value) || value.length === 0))) {\n setSearch('');\n setInput('');\n }\n combobox.selectFirstOption();\n },\n onSelectedOptionSubmit: onOptionSubmit,\n opened,\n selectedOptionIndex,\n setSelectedOptionIndex: (index) => {\n setSelectedOptionIndex(index);\n if (index !== -1) {\n virtualizer.scrollToIndex(index);\n }\n },\n totalOptionsCount: boxerData.length,\n });\n\n // Component variables\n const { options } = useBoxerOptions({\n boxerData,\n multiSelect,\n onOptionSubmit,\n value,\n });\n\n // Component useEffects\n useEffect(() => {\n // Fetch initial data\n fetchData('', true);\n }, []);\n\n useEffect(() => {\n // Handle search changes\n const delayDebounceFn = setTimeout(() => {\n if (search !== undefined && opened) {\n fetchData(search, true);\n }\n }, 300);\n\n return () => clearTimeout(delayDebounceFn);\n }, [search, opened]);\n\n useEffect(() => {\n // Sync input with value\n if (multiSelect) {\n const labels = boxerData\n .filter((item) => Array.isArray(value) && value.includes(item.value))\n .map((item) => item.label)\n .join(', ');\n\n // When dropdown is closed, show selected labels. When open, allow searching\n if (!opened && input !== labels) {\n setInput(labels);\n setSearch('');\n }\n } else {\n const label = boxerData.find((item) => item.value === value)?.label;\n\n // Only sync if we need to update the input to match the value\n if (input !== label && (search ?? '') === '' && valueRef.current !== value && value) {\n setInput(label ?? '');\n } else if (!value && !valueRef.current && (search ?? '') === '') {\n setSearch('');\n setInput('');\n }\n }\n\n // Handle buffer change\n if (multiSelect) {\n const buffer =\n boxerData.filter((item: BoxerItem) => Array.isArray(value) && value.includes(item.value)) ??\n [];\n\n if (JSON.stringify(bufferRef.current) !== JSON.stringify(buffer)) {\n onBufferChange?.(buffer);\n bufferRef.current = buffer;\n }\n } else {\n const buffer = boxerData?.find((item: BoxerItem) => item.value === value) ?? null;\n\n if (bufferRef.current?.value !== buffer?.value) {\n onBufferChange?.(buffer);\n bufferRef.current = buffer;\n }\n }\n }, [value, boxerData, input, search, multiSelect, opened, onBufferChange, setInput, setSearch]);\n\n useEffect(() => {\n // Select first option automatically\n if (selectFirst && (boxerData?.length ?? 0) > 0 && !multiSelect) {\n if (!value) {\n onOptionSubmit?.(0);\n }\n }\n }, [selectFirst, boxerData, multiSelect]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n clear: () => {\n onClear();\n },\n close: () => {\n setOpened(false);\n combobox.closeDropdown();\n },\n focus: () => {\n inputRef.current?.focus();\n },\n getValue: () => {\n return value;\n },\n open: () => {\n setOpened(true);\n combobox.openDropdown();\n },\n setValue: (newValue: any) => {\n onChange?.(newValue);\n },\n }));\n\n return (\n <Combobox\n {...comboBoxProps}\n resetSelectionOnOptionHover={false}\n store={combobox}\n withinPortal={true}\n >\n <Combobox.Target>\n <Combobox.EventsTarget>\n <BoxerTarget\n clearable={clearable}\n combobox={combobox}\n error={error}\n isFetching={isFetching}\n label={label}\n onBlur={() => {\n if (!value && !multiSelect) {\n setSearch('');\n setInput('');\n combobox.closeDropdown();\n setOpened(false);\n }\n }}\n onClear={onClear}\n onSearch={(event) => {\n setSearch(event.currentTarget.value);\n setInput(event.currentTarget.value);\n setOpened(true);\n }}\n placeholder={placeholder}\n ref={inputRef}\n search={input}\n />\n </Combobox.EventsTarget>\n </Combobox.Target>\n\n <Combobox.Dropdown\n onKeyDown={() => {\n if (inputRef.current) {\n inputRef.current.value = '';\n inputRef.current?.focus();\n }\n }}\n p={2}\n {...dropDownProps}\n >\n {opened && options.length > 0 ? (\n <Combobox.Options>\n <ScrollArea.Autosize\n {...scrollAreaProps}\n mah={mah ?? 200}\n viewportProps={{\n ...scrollAreaProps?.viewportProps,\n onScroll: (event) => {\n fetchMoreOnBottomReached(event.currentTarget as HTMLDivElement);\n },\n style: { border: '1px solid gray', borderRadius: 4 },\n }}\n viewportRef={parentRef}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n position: 'relative',\n width: '100%',\n }}\n >\n <div\n style={{\n left: 0,\n position: 'absolute',\n top: 0,\n transform: `translateY(${virtualItems[0]?.start ?? 0}px)`,\n width: '100%',\n }}\n >\n {virtualItems.map((virtualRow) => (\n <div\n data-index={virtualRow.index}\n key={virtualRow.key}\n ref={virtualizer.measureElement}\n >\n {options[virtualRow.index]}\n </div>\n ))}\n </div>\n </div>\n </ScrollArea.Autosize>\n </Combobox.Options>\n ) : (\n <Combobox.Empty>Nothing found</Combobox.Empty>\n )}\n </Combobox.Dropdown>\n </Combobox>\n );\n});\n\nBoxerInner.displayName = 'BoxerInner';\n\nconst Boxer = React.forwardRef<BoxerRef, BoxerProps>((props, ref) => {\n return (\n <BoxerProvider {...props}>\n <BoxerInner ref={ref} />\n </BoxerProvider>\n );\n});\n\nBoxer.displayName = 'Boxer';\n\nexport { Boxer };\nexport default Boxer;\n","import { newUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { FormerProps, FormerState } from './Former.types';\n\nconst { Provider: FormerProvider, useStore: useFormerStore } = createSyncStore<\n FormerState<any> & Partial<FormerProps<any>>,\n FormerProps<any>\n>(\n (set, get) => ({\n getState: (key) => {\n const current = get();\n return current?.[key];\n },\n load: async (reset?: boolean) => {\n try {\n set({ loading: true });\n const keyName = get()?.uniqueKeyField || 'id';\n const keyValue = (get().values as any)?.[keyName] ?? (get().primeData as any)?.[keyName];\n if (get().onAPICall && keyValue !== undefined) {\n let data = await get().onAPICall!(\n 'read',\n get().request || 'insert',\n get().values,\n keyValue\n );\n if (get().afterGet) {\n data = await get().afterGet!({ ...data });\n }\n set({ loading: false, values: data });\n get().onChange?.(data);\n }\n if (reset && get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n formMethods.reset();\n }\n } catch (e) {\n set({ error: (e as Error)?.message ?? e, loading: false });\n }\n set({ loading: false });\n },\n\n onChange: (values) => {\n set({ values });\n },\n request: 'insert',\n reset: async () => {\n const state = get();\n if (state.getFormMethods) {\n if (state.request !== 'insert') {\n await state.load(true);\n }\n\n const formMethods = state.getFormMethods!();\n formMethods.reset({ ...state.values, ...state.primeData });\n }\n },\n save: async (e?: React.BaseSyntheticEvent<object, any, any> | undefined) => {\n try {\n const keepOpen = get().keepOpen ?? false;\n set({ loading: true });\n if (get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n\n let data = formMethods.getValues();\n\n if (get().beforeSave) {\n const newData = await get().beforeSave!(data);\n data = newData;\n }\n\n let exit = false;\n const handler = formMethods.handleSubmit(\n (newdata) => {\n data = newdata;\n },\n (errors) => {\n set({ error: errors.root?.message || 'Validation errors', loading: false });\n exit = true;\n }\n );\n\n await handler(e);\n\n //console.log('Former.store.tsx save called', success, e, data, get().getFormMethods);\n if (exit) {\n set({ loading: false });\n return undefined;\n }\n\n if (get().request === 'delete' && !get().deleteConfirmed) {\n const confirmed = (await get().onConfirmDelete?.(data)) ?? false;\n if (!confirmed) {\n set({ loading: false });\n return undefined;\n }\n }\n\n if (get().onAPICall) {\n const keyName = get()?.uniqueKeyField || 'id';\n const keyValue =\n (get().values as any)?.[keyName] ?? (get().primeData as any)?.[keyName];\n const savedData = await get().onAPICall!(\n 'mutate',\n get().request || 'insert',\n data,\n keyValue\n );\n if (get().afterSave) {\n await get().afterSave!(savedData);\n }\n set({ loading: false, values: savedData });\n get().onChange?.(savedData);\n formMethods.reset(savedData); //reset with saved data to clear dirty state\n if (!keepOpen) {\n get().onClose?.(savedData);\n }\n return savedData;\n }\n\n set({ loading: false, values: data });\n formMethods.reset(data); //reset with saved data to clear dirty state\n get().onChange?.(data);\n if (!keepOpen) {\n get().onClose?.(data);\n }\n\n return data;\n }\n } catch (e) {\n set({ error: (e as Error)?.message ?? e, loading: false });\n }\n\n return undefined;\n },\n setRequest: (request) => {\n set({ request });\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 validate: async () => {\n if (get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n const isValid = await formMethods.trigger();\n return isValid;\n }\n return true;\n },\n values: undefined,\n }),\n ({ id, onClose, onConfirmDelete, primeData, request, useStoreApi, values }) => {\n let _onConfirmDelete = onConfirmDelete;\n if (!onConfirmDelete) {\n _onConfirmDelete = async () => {\n return confirm('Are you sure you want to delete this item?');\n };\n }\n\n return {\n id: !id ? newUUID() : id,\n onClose: () => {\n const dirty = useStoreApi.getState().dirty;\n const setState = useStoreApi.getState().setState;\n if (dirty) {\n if (confirm('You have unsaved changes. Are you sure you want to close?')) {\n if (onClose) {\n onClose();\n } else {\n setState('opened', false);\n }\n }\n } else {\n if (onClose) {\n onClose();\n } else {\n setState('opened', false);\n }\n }\n },\n onConfirmDelete: _onConfirmDelete,\n primeData,\n request: (request || 'insert').replace('change', 'update'),\n values: { ...primeData, ...values },\n };\n }\n);\n\nexport { FormerProvider };\nexport { useFormerStore };\n","import { Button, Group, Tooltip } from '@mantine/core';\nimport { IconDeviceFloppy, IconX } from '@tabler/icons-react';\n\nimport { useFormerStore } from './Former.store';\n\nexport const FormerButtonArea = () => {\n const {\n buttonAreaGroupProps,\n closeButtonProps,\n closeButtonTitle,\n dirty,\n onClose,\n request,\n save,\n saveButtonProps,\n saveButtonTitle,\n } = useFormerStore((state) => ({\n buttonAreaGroupProps: state.layout?.buttonAreaGroupProps,\n closeButtonProps: state.layout?.closeButtonProps,\n closeButtonTitle: state.layout?.closeButtonTitle,\n dirty: state.dirty,\n onClose: state.onClose,\n request: state.request,\n save: state.save,\n saveButtonProps: state.layout?.saveButtonProps,\n saveButtonTitle: state.layout?.saveButtonTitle,\n }));\n\n const disabledSave =\n ['select', 'view'].includes(request || '') || (['update'].includes(request || '') && !dirty);\n\n return (\n <Group\n justify=\"center\"\n p=\"xs\"\n style={{ boxShadow: '2px 2px 5px rgba(47, 47, 47, 0.1)' }}\n w=\"100%\"\n {...buttonAreaGroupProps}\n >\n <Group grow justify=\"space-evenly\">\n {typeof onClose === 'function' && (\n <Button\n color=\"orange\"\n leftSection={<IconX />}\n miw={'8rem'}\n px=\"md\"\n size=\"sm\"\n {...closeButtonProps}\n onClick={() => {\n onClose();\n }}\n >\n {closeButtonTitle || 'Close'}\n </Button>\n )}\n <Tooltip\n label={\n disabledSave ? (\n <p>\n Cannot save in view or select mode, or no changes made. <br />\n Try changing some values.\n </p>\n ) : (\n <p>Save the current record</p>\n )\n }\n >\n <Button\n bg={request === 'delete' ? 'red' : undefined}\n color=\"green\"\n leftSection={<IconDeviceFloppy />}\n miw={'8rem'}\n px=\"md\"\n size=\"sm\"\n {...saveButtonProps}\n disabled={disabledSave}\n onClick={() => save()}\n >\n {saveButtonTitle || 'Save'}\n </Button>\n </Tooltip>\n </Group>\n </Group>\n );\n};\n","import { useFormerStore } from './Former.store';\nimport { FormerButtonArea } from './FormerButtonArea';\n\nexport const FormerLayoutBottom = () => {\n const { buttonArea, getState, opened, renderBottom } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderBottom: state.layout?.renderBottom,\n }));\n\n if (renderBottom) {\n return renderBottom(\n <FormerButtonArea />,\n opened,\n getState('onClose'),\n getState('onOpen'),\n getState\n );\n }\n\n return buttonArea === \"bottom\" ? <FormerButtonArea /> : <></>;\n};\n","import { useFormerStore } from './Former.store';\nimport { FormerButtonArea } from './FormerButtonArea';\n\nexport const FormerLayoutTop = () => {\n const { buttonArea, getState, opened, renderTop } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderTop: state.layout?.renderTop,\n }));\n\n if (renderTop) {\n return renderTop(\n <FormerButtonArea />,\n opened,\n getState('onClose'),\n getState('onOpen'),\n getState\n );\n }\n return buttonArea === \"top\" ? <FormerButtonArea /> : <></>;\n};\n","import { LoadingOverlay, ScrollAreaAutosize } from '@mantine/core';\nimport { type PropsWithChildren, useEffect } from 'react';\n\nimport { useFormerStore } from './Former.store';\nimport { FormerLayoutBottom } from './FormerLayoutBottom';\nimport { FormerLayoutTop } from './FormerLayoutTop';\n\nexport const FormerLayout = (props: PropsWithChildren) => {\n const {\n disableHTMlForm,\n getFormMethods,\n id,\n load,\n loading,\n loadingOverlayProps,\n opened,\n request,\n reset,\n save,\n scrollAreaProps,\n } = useFormerStore((state) => ({\n disableHTMlForm: state.disableHTMlForm,\n getFormMethods: state.getFormMethods,\n id: state.id,\n load: state.load,\n loading: state.loading,\n loadingOverlayProps: state.loadingOverlayProps,\n opened: state.opened,\n request: state.request,\n reset: state.reset,\n save: state.save,\n\n scrollAreaProps: state.scrollAreaProps,\n }));\n\n useEffect(() => {\n if (getFormMethods) {\n const formMethods = getFormMethods();\n if (formMethods && request !== 'insert') {\n load(true);\n }\n }\n }, [getFormMethods, request, opened]);\n\n return (\n <>\n <FormerLayoutTop />\n <ScrollAreaAutosize\n offsetScrollbars\n scrollbarSize={4}\n type=\"auto\"\n {...scrollAreaProps}\n style={{\n height: '100%',\n padding: '0.25rem',\n width: '100%',\n ...scrollAreaProps?.style,\n }}\n >\n {disableHTMlForm ? (\n // eslint-disable-next-line react/no-unknown-property\n <div key={`former_d${id}`} x-data-request={request}>\n {props.children}\n </div>\n ) : (\n <form\n id={`former_f${id}`}\n key={`former_${id}`}\n onReset={(e) => reset(e)}\n onSubmit={(e) => save(e)}\n // eslint-disable-next-line react/no-unknown-property\n x-data-request={request}\n >\n {props.children}\n </form>\n )}\n\n <LoadingOverlay\n loaderProps={{ type: 'bars' }}\n overlayProps={{\n backgroundOpacity: 0.5,\n }}\n {...loadingOverlayProps}\n visible={loading}\n />\n </ScrollAreaAutosize>\n <FormerLayoutBottom />\n </>\n );\n};\n","import { forwardRef, type PropsWithChildren, useEffect, useImperativeHandle } from 'react';\nimport { type FieldValues, FormProvider, useForm } from 'react-hook-form';\n\nimport type { FormerProps, FormerRef } from './Former.types';\n\nimport { FormerProvider, useFormerStore } from './Former.store';\nimport { FormerLayout } from './FormerLayout';\n\nconst FormerInner = forwardRef<FormerRef<any>, Partial<FormerProps<any>> & PropsWithChildren>(\n function FormerInner<T extends FieldValues>(\n props: Partial<FormerProps<T>> & PropsWithChildren<T>,\n ref: any\n ) {\n const {\n getState,\n onChange,\n onClose,\n onOpen,\n opened,\n primeData,\n reset,\n save,\n setState,\n useFormProps,\n validate,\n values,\n wrapper,\n } = useFormerStore((state) => ({\n getState: state.getState,\n onChange: state.onChange,\n onClose: state.onClose,\n onOpen: state.onOpen,\n opened: state.opened,\n primeData: state.primeData,\n reset: state.reset,\n save: state.save,\n setState: state.setState,\n useFormProps: state.useFormProps,\n validate: state.validate,\n values: state.values,\n wrapper: state.wrapper,\n }));\n\n const formMethods = useForm<T>({\n defaultValues: primeData,\n mode: 'all',\n shouldUseNativeValidation: true,\n values: values,\n ...useFormProps,\n });\n\n useImperativeHandle(\n ref,\n () => ({\n close: async () => {\n //console.log('close called');\n onClose?.();\n setState('opened', false);\n },\n getValue: () => {\n return getState('values');\n },\n reset: () => {\n reset();\n },\n save: async () => {\n return await save();\n },\n setValue: (value: T) => {\n onChange?.(value);\n },\n show: async () => {\n //console.log('show called');\n setState('opened', true);\n onOpen?.();\n },\n validate: async () => {\n return await validate();\n },\n }),\n [getState, onChange, validate, save, reset, setState, onClose, onOpen]\n );\n\n useEffect(() => {\n setState('getFormMethods', () => formMethods);\n\n if (formMethods) {\n formMethods.subscribe({\n callback: ({ isDirty }) => {\n setState('dirty', isDirty);\n },\n formState: { isDirty: true },\n });\n }\n }, [formMethods]);\n\n return (\n <FormProvider {...formMethods}>\n {typeof wrapper === 'function' ? (\n wrapper(<FormerLayout>{props.children}</FormerLayout>, opened, onClose, onOpen, getState)\n ) : (\n <FormerLayout>{props.children || null}</FormerLayout>\n )}\n </FormProvider>\n );\n }\n);\n\nexport const Former = forwardRef<FormerRef<any>, FormerProps<any> & PropsWithChildren>(\n function Former<T extends FieldValues = any>(\n props: FormerProps<T> & PropsWithChildren<T>,\n ref: any\n ) {\n //if opened is false and wrapper is defined as function, do not render anything\n if (!props.opened && typeof props.wrapper === 'function') {\n return null;\n }\n return (\n <FormerProvider {...props}>\n <FormerInner ref={ref}>{props.children}</FormerInner>\n </FormerProvider>\n );\n }\n);\n","import type { FormerAPICallType } from './Former.types';\n\ninterface ResolveSpecRequest {\n data?: Record<string, any>;\n operation: 'create' | 'delete' | 'read' | 'update';\n options?: {\n columns?: string[];\n computedColumns?: any[];\n customOperators?: any[];\n filters?: Array<{ column: string; operator: string; value: any }>;\n limit?: number;\n offset?: number;\n preload?: string[];\n sort?: string[];\n };\n}\n\nfunction FormerResolveSpecAPI(options: {\n authToken: string;\n fetchOptions?: Partial<RequestInit>;\n signal?: AbortSignal;\n url: string;\n}): FormerAPICallType {\n return async (mode, request, value, key) => {\n const baseUrl = options.url.replace(/\\/$/, '');\n\n // Build URL: /[schema]/[table_or_entity]/[id]\n let url = `${baseUrl}`;\n if (request !== 'insert' && key) {\n url = `${url}/${key}`;\n }\n\n // Build ResolveSpec request body\n const resolveSpecRequest: ResolveSpecRequest = {\n operation:\n mode === 'read'\n ? 'read'\n : request === 'delete'\n ? 'delete'\n : request === 'update'\n ? 'update'\n : 'create',\n };\n\n if (mode === 'mutate') {\n resolveSpecRequest.data = value;\n }\n\n const fetchOptions: RequestInit = {\n cache: 'no-cache',\n signal: options.signal,\n ...options.fetchOptions,\n body: JSON.stringify(resolveSpecRequest),\n headers: {\n Authorization: `Bearer ${options.authToken}`,\n 'Content-Type': 'application/json',\n ...options.fetchOptions?.headers,\n },\n method: 'POST',\n };\n\n const response = await fetch(url, fetchOptions);\n if (!response.ok) {\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as any;\n };\n}\n\nexport { FormerResolveSpecAPI, type ResolveSpecRequest };\n","import type { FormerAPICallType } from './Former.types';\n\nfunction FormerRestHeadSpecAPI(options: {\n authToken: string;\n fetchOptions?: Partial<RequestInit>;\n signal?: AbortSignal;\n url: string;\n}): FormerAPICallType {\n return async (mode, request, value, key) => {\n const baseUrl = options.url ?? ''; // Remove trailing slashes\n let url = baseUrl;\n const fetchOptions: RequestInit = {\n cache: 'no-cache',\n signal: options.signal,\n ...options.fetchOptions,\n body: mode === 'mutate' && request !== 'delete' ? JSON.stringify(value) : undefined,\n headers: {\n Authorization: `Bearer ${options.authToken}`,\n 'Content-Type': 'application/json',\n ...options.fetchOptions?.headers,\n },\n method:\n mode === 'read'\n ? 'GET'\n : request === 'delete'\n ? 'DELETE'\n : request === 'update'\n ? 'PUT'\n : 'POST',\n };\n\n if (request !== 'insert') {\n url = `${baseUrl}/${key}`;\n }\n\n const response = await fetch(url, fetchOptions);\n if (!response.ok) {\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n if (mode === 'read') {\n const data = await response.json();\n return data as any;\n } else {\n return value as any;\n }\n };\n}\n\nexport { FormerRestHeadSpecAPI };\n","import {\n Drawer,\n type DrawerProps,\n Modal,\n type ModalProps,\n Popover,\n type PopoverProps,\n} from '@mantine/core';\n\nimport type { FormerProps } from './Former.types';\n\nimport { Former } from './Former';\n\nexport const FormerDialog = (props: { former: FormerProps } & DrawerProps) => {\n const { children, former, onClose, opened, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose, _onOpen, getState) => {\n const values = getState('values');\n const request = getState('request');\n const uniqueKeyField = getState('uniqueKeyField') ?? 'id';\n return (\n <Drawer\n closeOnClickOutside={false}\n h={'100%'}\n title={\n request === 'delete'\n ? `Delete Record - ${values?.[uniqueKeyField]}`\n : request === 'insert'\n ? 'New Record'\n : `Edit Record - ${values?.[uniqueKeyField]}`\n }\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n {children}\n </Drawer>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n\nexport const FormerModel = (props: { former: FormerProps } & ModalProps) => {\n const { children, former, onClose, opened, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose, _onOpen, getState) => {\n const values = getState('values');\n const request = getState('request');\n const uniqueKeyField = getState('uniqueKeyField') ?? 'id';\n return (\n <Modal\n closeOnClickOutside={false}\n h={'100%'}\n title={\n request === 'delete'\n ? `Delete Record - ${values?.[uniqueKeyField]}`\n : request === 'insert'\n ? 'New Record'\n : `Edit Record - ${values?.[uniqueKeyField]}`\n }\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n {children}\n </Modal>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n\nexport const FormerPopover = (\n props: { former: FormerProps; target: React.ReactNode } & PopoverProps\n) => {\n const { children, former, onClose, opened, target, ...rest } = props;\n return (\n <Former\n {...former}\n onClose={onClose}\n opened={opened}\n wrapper={(children, opened, onClose) => {\n return (\n <Popover\n closeOnClickOutside={false}\n middlewares={{ inline: true }}\n trapFocus\n width={250}\n withArrow\n {...rest}\n onClose={() => onClose?.()}\n opened={opened ?? false}\n >\n <Popover.Target>{target}</Popover.Target>\n <Popover.Dropdown>{children}</Popover.Dropdown>\n </Popover>\n );\n }}\n >\n {children}\n </Former>\n );\n};\n","import { Button, type ButtonProps, Tooltip } from '@mantine/core';\nimport { useState } from 'react';\n\nimport type { SpecialIDProps } from '../FormerControllers.types';\n\nconst ButtonCtrl = (\n props: {\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => Promise<void>;\n } & Omit<ButtonProps, 'onClick'> &\n SpecialIDProps\n) => {\n const [loading, setLoading] = useState(false);\n return (\n <Tooltip label={props.tooltip ?? ''} withArrow>\n <Button\n loaderProps={{\n type: 'bars',\n }}\n {...props}\n loading={loading || props.loading}\n onClick={(e) => {\n if (props.onClick) {\n setLoading(true);\n props.onClick(e).finally(() => setLoading(false));\n }\n }}\n >\n {props.children}\n </Button>\n </Tooltip>\n );\n};\n\nexport { ButtonCtrl };\nexport default ButtonCtrl;\n","import { ActionIcon, type ActionIconProps, Tooltip, VisuallyHidden } from '@mantine/core';\nimport { useState } from 'react';\n\nimport type { SpecialIDProps } from '../FormerControllers.types';\n\nconst IconButtonCtrl = (\n props: {\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => Promise<void>;\n } & Omit<ActionIconProps, 'onClick'> &\n SpecialIDProps\n) => {\n const [loading, setLoading] = useState(false);\n return (\n <Tooltip label={props.tooltip ?? ''} withArrow>\n <ActionIcon\n loaderProps={{\n type: 'bars',\n }}\n {...props}\n loading={loading || props.loading}\n onClick={(e) => {\n if (props.onClick) {\n setLoading(true);\n props.onClick(e).finally(() => setLoading(false));\n }\n }}\n >\n {props.children}\n <VisuallyHidden>Action Button: {props.tooltip ?? props.sid ?? ''}</VisuallyHidden>\n </ActionIcon>\n </Tooltip>\n );\n};\n\nexport { IconButtonCtrl };\nexport default IconButtonCtrl;\n","import { NativeSelect, type NativeSelectProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst NativeSelectCtrl = (props: FormerControllersProps & NativeSelectProps & SpecialIDProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <NativeSelect\n {...innerProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </NativeSelect>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { NativeSelectCtrl };\nexport default NativeSelectCtrl;\n","import { PasswordInput, type PasswordInputProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst PasswordInputCtrl = (props: FormerControllersProps & PasswordInputProps & SpecialIDProps) => {\n const { control, name, sid, tooltip, ...textProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <PasswordInput\n {...textProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </PasswordInput>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { PasswordInputCtrl };\nexport default PasswordInputCtrl;\n","import { Switch, type SwitchProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst SwitchCtrl = (props: FormerControllersProps & SpecialIDProps & SwitchProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <Switch\n {...innerProps}\n {...field}\n checked={!!field.value}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n onChange={(e) => {\n field.onChange((e.currentTarget ?? e.target)?.checked);\n }}\n />\n </Tooltip>\n )}\n />\n );\n};\n\nexport { SwitchCtrl };\nexport default SwitchCtrl;\n","import { Textarea, type TextareaProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst TextAreaCtrl = (props: FormerControllersProps & SpecialIDProps & TextareaProps) => {\n const { control, name, sid, tooltip, ...innerProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <Textarea\n minRows={4}\n {...innerProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </Textarea>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { TextAreaCtrl };\nexport default TextAreaCtrl;\n","import { TextInput, type TextInputProps, Tooltip } from '@mantine/core';\nimport { Controller } from 'react-hook-form';\n\nimport type { FormerControllersProps, SpecialIDProps } from '../FormerControllers.types';\n\nconst TextInputCtrl = (props: FormerControllersProps & SpecialIDProps & TextInputProps) => {\n const { control, name, sid, tooltip, ...textProps } = props;\n return (\n <Controller\n control={control}\n name={name}\n render={({ field, formState }) => (\n <Tooltip label={tooltip ?? ''} withArrow>\n <TextInput\n {...textProps}\n {...field}\n disabled={formState.disabled}\n id={`field_${name}_${sid ?? ''}`}\n key={`field_${name}_${sid ?? ''}`}\n >\n {props.children}\n </TextInput>\n </Tooltip>\n )}\n />\n );\n};\n\nexport { TextInputCtrl };\nexport default TextInputCtrl;\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 isValuesInPages: () => boolean\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\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\n ) => void;\n\n pageSize: number;\n ready: boolean;\n refreshCells: (fromRow?: number, toRow?: number, col?: number) => void;\n\n reload?: () => Promise<void>;\n renderColumns?: GridlerColumns;\n setState: <K extends keyof GridlerStoreState>(\n key: K,\n value: 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 isValuesInPages: () => {\n const state = get();\n if (state.values && Object.keys(state._page_data).length > 0) {\n let found = false;\n for (const page in state._page_data) {\n const pageData = state._page_data[Number(page)];\n for (const row of pageData) {\n const keyField = state.keyField ?? 'id';\n const rowKey = row?.[keyField];\n if (rowKey !== undefined) {\n const match = state.values.find((v) => String(v?.[keyField]) === String(rowKey));\n if (match) {\n found = true;\n break;\n }\n }\n }\n if (found) {\n return true;\n }\n }\n }\n \n return false\n },\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\n onColumnProposeMove: (startIndex: number, endIndex: number) => {\n const s = get();\n const fromItem = s.renderColumns?.[startIndex];\n const toItem = s.renderColumns?.[endIndex];\n if (fromItem?.disableMove || toItem?.disableMove) {\n return false;\n }\n return true;\n },\n onColumnResize: (\n column: GridColumn,\n newSize: number,\n _colIndex: number,\n _newSizeWithGrow: number\n ) => {\n const s = get();\n const col = s.renderColumns?.find((col) => col.id === column.id);\n if (col?.disableResize) {\n return;\n }\n if (col?.maxWidth && newSize < col?.maxWidth) {\n return;\n }\n\n if (col) {\n s.setStateFN('colSize', (cols) => {\n if (cols && col && cols[col.id] === newSize) {\n return cols;\n }\n return { ...cols, [col.id]: newSize };\n });\n }\n },\n 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 const keyField = getState('keyField');\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 f.id &&\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 (keyField) {\n if (!col_ids.includes(keyField)) {\n col_ids.push(keyField);\n }\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 const isValuesInPages = getState('isValuesInPages');\n \n const _refresh = getState('_refresh');\n if (!isValuesInPages) {\n setState('values', []);\n }\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\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?: MantineBetterMenuInstanceItem[]\n ): MantineBetterMenuInstanceItem[] => {\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"," \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 selectFirstRowOnMount,\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 selectFirstRowOnMount:s.selectFirstRowOnMount,\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 }, [_gridSelectionRows, _gridSelectionRows?.length, 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\n const loadPage = () => {\n const selectFirstRowOnMount = getState('selectFirstRowOnMount');\n const ready = getState('ready');\n\n if (ready && selectFirstRowOnMount) {\n\n const scrollToRowKey = getState('scrollToRowKey');\n \n \n if (scrollToRowKey && scrollToRowKey >= 0) {\n return;\n }\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] ?? -1;\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\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, selectFirstRowOnMount]);\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 console.log('Debug:onGridSelectionChange', currentSelection, selection);\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","memo","getDeps","fn","opts","deps","result","isInitial","memoizedFunction","_a","_b","_c","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","notUndefined","msg","approxEqual","a","b","debounce","targetWindow","ms","timeoutId","args","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","arr","i","observeElementRect","instance","cb","handler","rect","width","height","observer","entries","run","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","offset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","target","opts2","sync","d","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","previousFurthestMeasurement","count","paddingStart","scrollMargin","getItemKey","enabled","lanes","itemSizeCache","item","min","laneLastIndex","cachedLane","lane","prevIndex","prevInLane","furthestMeasurement","measuredSize","size","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","attributeName","indexStr","prevNode","itemSize","delta","indexes","virtualItems","len","findNearestBinarySearch","doc","align","maxOffset","initialAlign","attempts","maxAttempts","tryScroll","currentAlign","offsetInfo","verify","currentOffset","afterInfo","scheduleRetry","endByLane","val","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","useIsomorphicLayoutEffect","useVirtualizerBase","useFlushSync","options","rerender","resolvedOptions","instance2","flushSync","useVirtualizer","BoxerProvider","useBoxerStore","createSyncStore","set","search","reset","state","localData","filtered","currentPage","produce","draft","error","input","opened","data","dataSource","pageSize","BoxerTarget","forwardRef","ref","clearable","combobox","disabled","isFetching","label","leftSection","onBlur","onClear","onSearch","placeholder","rightSection","jsx","Loader","ActionIcon","e","IconX","TextInput","useBoxerOptions","boxerData","multiSelect","onOptionSubmit","useMemo","isSelected","Combobox","jsxs","Checkbox","BoxerInner","_","parentRef","useRef","inputRef","valueRef","bufferRef","comboBoxProps","dropDownProps","fetchData","fetchMoreOnBottomReached","mah","onBufferChange","onChange","openOnClear","scrollAreaProps","selectedOptionIndex","selectFirst","setInput","setOpened","setSearch","setSelectedOptionIndex","showAll","virtualizer","useCallback","indexOrId","option","currentValues","newValues","v","newBuffer","useVirtualizedCombobox","useEffect","delayDebounceFn","labels","buffer","useImperativeHandle","newValue","event","ScrollArea","virtualRow","Boxer","FormerProvider","useFormerStore","keyName","keyValue","values","keepOpen","formMethods","exit","newdata","errors","savedData","request","resolve","reject","id","onClose","onConfirmDelete","primeData","useStoreApi","_onConfirmDelete","newUUID","dirty","setState","FormerButtonArea","buttonAreaGroupProps","closeButtonProps","closeButtonTitle","save","saveButtonProps","saveButtonTitle","disabledSave","Group","Button","Tooltip","IconDeviceFloppy","FormerLayoutBottom","buttonArea","getState","renderBottom","Fragment","FormerLayoutTop","renderTop","FormerLayout","disableHTMlForm","getFormMethods","load","loading","loadingOverlayProps","ScrollAreaAutosize","LoadingOverlay","FormerInner","onOpen","useFormProps","validate","wrapper","useForm","isDirty","FormProvider","Former","FormerResolveSpecAPI","mode","url","resolveSpecRequest","fetchOptions","response","FormerRestHeadSpecAPI","baseUrl","FormerDialog","former","rest","_onOpen","uniqueKeyField","Drawer","FormerModel","Modal","FormerPopover","Popover","ButtonCtrl","setLoading","useState","IconButtonCtrl","VisuallyHidden","NativeSelectCtrl","control","sid","tooltip","innerProps","Controller","field","formState","createElement","NativeSelect","PasswordInputCtrl","textProps","PasswordInput","SwitchCtrl","Switch","TextAreaCtrl","Textarea","TextInputCtrl","w","n","o","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","b64EncodeUnicode","GoAPIHeaders","head","headerlist","authToken","getAuthToken","token","distinctOperations","searchValue","callbacks","getNestedValue","l","c","MantineBetterMenusStoreProvider","useMantineBetterMenus","idx","s","menuIndex","menu","getUUID","MenuRenderer","menus","providerID","setInstanceState","Portal","Menu","itemIndex","MenuItemRenderer","subitem","subitemIndex","MantineBetterMenusProvider","FilterOperators","ColumnFilterInput","filterIndex","f","filter","filterValue","setFilterValue","defferedFilterValue","useDebouncedValue","filters","ColumnFilterInputOperator","Select","ColumnFilterSet","Stack","SortDownSprite","SortUpSprite","SpriteImage","Provider","useGridlerStore","CompactSelection","err","cell","col","row","GridCellKind","selection","_abortSignal","_cv","y","x","buffers","page_data","p","r","firstPage","upperPage","rowIndex","keyField","rn","found","page","pageData","rowKey","pPage","clearMode","damageList","colLen","hasPage","cv","newVal","from","to","fromItem","toItem","cols","renderCols","acc","column","newSize","_colIndex","_newSizeWithGrow","area","coldef","items","IconGrid4x4","dir","newSort","colIndex","screenPosition","sortItems","region","_tx","_ty","_extras","onVisibleRegionChangedDebounced","previousPage","pageDif","newpos","fromRow","toRow","onMounted","div","onUnMounted","_e","_GlidlerAPIAdaptorForGoLangv2","setStateFN","addError","mounted","useAPIQuery","columns","colSort","colFilters","searchStr","searchFields","_active_requests","sort","col_ids","optionHeaders","oh","currentRequestIndex","controller","res","cr","askAPIRowNumber","isValuesInPages","_refresh","getGridSelectedRows","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","parms","refreshCells","GridlerRefHandler","BottomBar","_activeTooltip","tooltipBarProps","Computer","refFirstRun","refLastSearch","refLastFilters","_glideref","_gridSelectionRows","colOrder","colSize","getRowIndexByKey","loadPage","ready","scrollToRowKey","selectedRowKey","selectFirstRowOnMount","debouncedDoSearch","useDebouncedCallback","rowIndexes","vi","_values","firstBuffer","selected","startOrEnd","step","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","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","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,26,28]}
|