@warkypublic/oranguru 0.0.45 → 0.0.46

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.
@@ -1 +1 @@
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/ErrorBoundary/ErrorManager.ts","../src/ErrorBoundary/BasicErrorBoundary.tsx","../src/ErrorBoundary/ErrorBoundary.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/Former/use-former-state.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/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/vanilla/shallow.mjs","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/shim/index.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/vanilla.mjs","../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/traditional.mjs","../src/GlobalStateStore/GlobalStateStore.utils.ts","../src/GlobalStateStore/GlobalStateStore.ts","../src/GlobalStateStore/GlobalStateStoreWrapper.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 { Checkbox, Combobox } from '@mantine/core';\nimport { useMemo } from 'react';\n\nimport type { BoxerItem } from '../Boxer.types';\n\ninterface UseBoxerOptionsProps {\n boxerData: Array<BoxerItem>;\n multiSelect?: boolean;\n onOptionSubmit: (index: number) => void;\n value?: any | Array<any>;\n}\n\nconst useBoxerOptions = (props: UseBoxerOptionsProps) => {\n const { boxerData, multiSelect, onOptionSubmit, value } = 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 active={isSelected}\n key={`${item.value}-${index}`}\n onClick={() => {\n onOptionSubmit(index);\n }}\n value={String(index)}\n >\n {multiSelect ? (\n <div style={{ alignItems: 'center', display: 'flex', 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 type {\n CustomAPIConfig,\n ErrorManagerConfig,\n ErrorReport,\n ErrorReporter,\n SentryConfig,\n} from './ErrorManager.types';\n\nclass ErrorManager {\n private config: ErrorManagerConfig = { enabled: true };\n private reporters: ErrorReporter[] = [];\n private sentryInstance: any = null;\n\n configure(config: ErrorManagerConfig) {\n this.config = { ...this.config, ...config };\n this.reporters = [];\n\n if (config.sentry) {\n this.setupSentry(config.sentry);\n }\n\n if (config.customAPI) {\n this.setupCustomAPI(config.customAPI);\n }\n\n if (config.reporters) {\n this.reporters.push(...config.reporters);\n }\n }\n\n destroy() {\n this.reporters = [];\n this.sentryInstance = null;\n this.config = { enabled: true };\n }\n\n getReporters(): ErrorReporter[] {\n return [...this.reporters];\n }\n\n isEnabled(): boolean {\n return Boolean(this.config.enabled);\n }\n\n async reportError(\n error: Error,\n errorInfo?: any,\n context?: ErrorReport['context']\n ): Promise<void> {\n if (!this.config.enabled) {\n return;\n }\n\n let report: ErrorReport = {\n context,\n error,\n errorInfo,\n severity: 'error',\n timestamp: Date.now(),\n };\n\n if (this.config.beforeReport) {\n const modifiedReport = this.config.beforeReport(report);\n if (!modifiedReport) {\n return;\n }\n report = modifiedReport;\n }\n\n const reportPromises = this.reporters\n .filter((reporter) => reporter.isEnabled())\n .map(async (reporter) => {\n try {\n await reporter.captureError(report);\n } catch (error) {\n console.error(`Error reporter \"${reporter.name}\" failed:`, error);\n if (this.config.onReportFailure) {\n this.config.onReportFailure(error as Error, report);\n }\n }\n });\n\n try {\n await Promise.all(reportPromises);\n if (this.config.onReportSuccess) {\n this.config.onReportSuccess(report);\n }\n } catch (error) {\n console.error('Error reporting failed:', error);\n }\n }\n\n private setupCustomAPI(config: CustomAPIConfig) {\n const customAPIReporter: ErrorReporter = {\n captureError: async (report: ErrorReport) => {\n try {\n const payload = config.transformPayload\n ? config.transformPayload(report)\n : {\n context: report.context,\n message: report.error.message,\n severity: report.severity || 'error',\n stack: report.error.stack,\n timestamp: report.timestamp || Date.now(),\n };\n\n const response = await fetch(config.endpoint, {\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n method: config.method || 'POST',\n });\n\n if (!response.ok) {\n throw new Error(`API request failed: ${response.statusText}`);\n }\n } catch (error) {\n console.error('Failed to send error to custom API:', error);\n }\n },\n isEnabled: () => Boolean(config.endpoint),\n name: 'CustomAPI',\n };\n\n this.reporters.push(customAPIReporter);\n }\n\n private setupSentry(config: SentryConfig) {\n const sentryReporter: ErrorReporter = {\n captureError: async (report: ErrorReport) => {\n if (!this.sentryInstance) {\n try {\n const Sentry = await import('@sentry/react');\n Sentry.init({\n beforeSend: config.beforeSend,\n dsn: config.dsn,\n environment: config.environment,\n ignoreErrors: config.ignoreErrors,\n release: config.release,\n tracesSampleRate: config.sampleRate || 1.0,\n });\n this.sentryInstance = Sentry;\n } catch (error) {\n console.error('Failed to initialize Sentry:', error);\n return;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sentryInstance.withScope((scope: any) => {\n if (report.severity) {\n scope.setLevel(report.severity);\n }\n\n if (report.context?.namespace) {\n scope.setTag('namespace', report.context.namespace);\n }\n\n if (report.context?.tags) {\n Object.entries(report.context.tags).forEach(([key, value]) => {\n scope.setTag(key, value);\n });\n }\n\n if (report.context?.user) {\n scope.setUser(report.context.user);\n }\n\n if (report.context?.extra) {\n scope.setExtras(report.context.extra);\n }\n\n if (report.context?.componentStack) {\n scope.setContext('react', {\n componentStack: report.context.componentStack,\n });\n }\n\n this.sentryInstance.captureException(report.error);\n });\n },\n isEnabled: () => Boolean(this.sentryInstance),\n name: 'Sentry',\n };\n\n this.reporters.push(sentryReporter);\n }\n}\n\nexport const errorManager = new ErrorManager();\n\nexport default errorManager;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { type PropsWithChildren } from 'react';\n\nimport errorManager from './ErrorManager';\n\ninterface ErrorBoundaryProps extends PropsWithChildren {\n namespace?: string;\n onReportClick?: () => void;\n onResetClick?: () => void;\n onRetryClick?: () => void;\n reportAPI?: string;\n}\n\ninterface ErrorBoundaryState {\n error: any;\n errorInfo: any;\n reported?: boolean;\n resetted?: boolean;\n showDetail: boolean;\n timer?: NodeJS.Timeout | undefined;\n try: boolean;\n tryCnt: number;\n}\n\nexport class ReactBasicErrorBoundary extends React.PureComponent<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n\n this.state = {\n error: null,\n errorInfo: null,\n showDetail: false,\n timer: undefined,\n try: false,\n tryCnt: 0,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n // Catch errors in any components below and re-render with error message\n this.setState({\n error,\n errorInfo,\n try: false,\n });\n\n // Report error to error manager (Sentry, custom API, etc.)\n errorManager.reportError(error, errorInfo, {\n componentStack: errorInfo?.componentStack,\n namespace: this.props.namespace,\n });\n }\n\n render() {\n if (this.state.errorInfo) {\n // Error path\n return (\n <div>\n <h2>Error</h2>\n {this.state.error && (\n <>\n <h3>In: {this.props.namespace ?? 'default'}</h3>\n <main>{this.state.error.toString()}</main>\n </>\n )}\n </div>\n );\n }\n\n // Normally, just render children\n return this.props.children;\n }\n}\n\nexport default ReactBasicErrorBoundary;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, Code, Collapse, Group, Paper, rem, Text } from '@mantine/core';\nimport { IconExclamationCircle } from '@tabler/icons-react';\nimport React, { type PropsWithChildren } from 'react';\n\nimport errorManager from './ErrorManager';\n\nlet ErrorBoundaryOptions = {\n disabled: false,\n onError: undefined,\n} as {\n disabled?: boolean;\n onError?: (error: any, errorInfo: any) => void;\n};\n\nexport const SetErrorBoundaryOptions = (options: typeof ErrorBoundaryOptions) => {\n ErrorBoundaryOptions = { ...ErrorBoundaryOptions, ...options };\n};\n\nexport const GetErrorBoundaryOptions = () => {\n return { ...ErrorBoundaryOptions };\n};\n\ninterface ErrorBoundaryProps extends PropsWithChildren {\n namespace?: string;\n onReportClick?: () => void;\n onResetClick?: () => void;\n onRetryClick?: () => void;\n reportAPI?: string;\n}\n\ninterface ErrorBoundaryState {\n error: any;\n errorInfo: any;\n reported?: boolean;\n showDetail: boolean;\n timer?: NodeJS.Timeout | undefined;\n try: boolean;\n tryCnt: number;\n wasReset?: boolean;\n}\n\nexport class ReactErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n\n this.state = {\n error: null,\n errorInfo: null,\n showDetail: false,\n timer: undefined,\n try: false,\n tryCnt: 0,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n if (GetErrorBoundaryOptions()?.disabled) {\n throw Error('ErrorBoundary pass through enabled, rethrowing error', {\n cause: error,\n //@ts-ignore\n info: errorInfo,\n });\n }\n // Catch errors in any components below and re-render with error message\n this.setState({\n error,\n errorInfo,\n try: false,\n });\n if (typeof GetErrorBoundaryOptions()?.onError === 'function') {\n GetErrorBoundaryOptions()?.onError?.(error, errorInfo);\n }\n\n // Report error to error manager (Sentry, custom API, etc.)\n errorManager.reportError(error, errorInfo, {\n componentStack: errorInfo?.componentStack,\n namespace: this.props.namespace,\n });\n }\n\n render() {\n if (this.state.errorInfo) {\n // Error path\n return (\n <div>\n <h2\n style={{\n color: 'var(--mantine-color-error)',\n display: 'flex',\n gap: '8px',\n }}\n >\n <IconExclamationCircle\n color=\"var(--mantine-color-error)\"\n style={{ height: rem(20), width: rem(20) }}\n />\n A react error has occurred!\n </h2>\n <h4>You can try one of these solutions to get back on track:</h4>\n <ul>\n <li>Report the error to our team</li>\n <li>Hit the keys Ctrl-Shift-R</li>\n <li>Make sure your web browser is up to date</li>\n <li>Clear your browser cache and cookies</li>\n <li>Try using a different web browser</li>\n <li>Reset your layout and settings</li>\n <li>Retry loading the application</li>\n </ul>\n\n <Group>\n <Button\n color=\"red\"\n my=\"md\"\n onClick={() =>\n this.setState((state) => ({\n showDetail: !state.showDetail,\n }))\n }\n size=\"compact-xs\"\n variant=\"outline\"\n >\n More\n </Button>\n <Button\n color=\"blue\"\n disabled={this.state.tryCnt > 2 || this.state.try}\n my=\"md\"\n onClick={() => this.retry()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Retry {this.state.tryCnt > 0 ? `(${this.state.tryCnt})` : ''}\n </Button>\n <Button\n color=\"yellow\"\n disabled={this.state.wasReset}\n my=\"md\"\n onClick={() => this.reset()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Reset Layout or Settings\n </Button>\n <Button\n color=\"green\"\n disabled={this.state.reported}\n my=\"md\"\n onClick={() => this.report()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Report\n </Button>\n </Group>\n\n {this.state.error && (\n <Paper\n p=\"md\"\n shadow=\"xs\"\n style={{\n textAlign: 'justify',\n }}\n w=\"50%\"\n withBorder\n >\n {this.props.namespace && <Text size=\"sm\">In: {this.props.namespace}</Text>}\n <Text size=\"sm\">{this.state.error.toString()}</Text>\n </Paper>\n )}\n\n <Collapse in={this.state.showDetail}>\n <Code block color=\"rgba(235, 86, 5, 0.6)\" mah=\"100vh\" w=\"100%\">\n {this.state.errorInfo.componentStack}\n </Code>\n </Collapse>\n </div>\n );\n }\n\n //Retry code, if you do it too many times, it will stop\n if (this.state.try) {\n if (!this.state.timer) {\n const tm = setTimeout(() => {\n clearTimeout(this.state.timer);\n this.setState((state) => ({\n ...state,\n timer: undefined,\n try: false,\n }));\n }, 1000);\n\n this.setState((state) => ({\n ...state,\n timer: tm,\n }));\n }\n return <div>Retrying {this.state.tryCnt}...</div>;\n }\n\n // Normally, just render children\n return this.props.children;\n }\n\n async report() {\n if (this.props?.onReportClick) {\n this.props.onReportClick();\n this.setState(() => ({\n reported: true,\n }));\n return;\n }\n\n // Manually report error if user clicks report button\n if (this.state.error && this.state.errorInfo) {\n await errorManager.reportError(this.state.error, this.state.errorInfo, {\n componentStack: this.state.errorInfo?.componentStack,\n namespace: this.props.namespace,\n tags: { reportedBy: 'user' },\n });\n\n this.setState(() => ({\n reported: true,\n }));\n }\n }\n\n reset() {\n if (this.props?.onResetClick) {\n this.props.onResetClick();\n this.setState(() => ({\n wasReset: true,\n }));\n return;\n }\n\n this.setState(() => ({\n wasReset: true,\n }));\n\n window.location.reload();\n }\n\n retry() {\n this.setState({\n try: true,\n tryCnt: this.state.tryCnt + 1,\n });\n if (this.props?.onRetryClick) {\n this.props.onRetryClick();\n return;\n }\n this.setState({\n error: undefined,\n errorInfo: undefined,\n });\n this.forceUpdate();\n }\n}\n\nexport default ReactErrorBoundary;\n","import { newUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { FormerProps, FormerState, FormStateAndProps } from './Former.types';\n\nconst { Provider: FormerProvider, useStore: useFormerStore } = createSyncStore<\n FormerState<any> & Partial<FormerProps<any>>,\n FormerProps<any>\n>(\n (set, get) => ({\n getAllState: () => {\n return get() as FormStateAndProps<any>;\n },\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 }, get());\n }\n set({ loading: false, values: data });\n get().onChange?.(data, get());\n }\n if (reset && get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n formMethods.reset();\n }\n } catch (e) {\n const errorMessage = (e as Error)?.message ?? e;\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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, get());\n data = newData;\n }\n\n let exit = false;\n const handler = formMethods.handleSubmit(\n (newdata) => {\n data = newdata;\n },\n (errors) => {\n const errorMessage = errors.root?.message || 'Validation errors';\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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 const newData = { ...data, ...savedData }; //Merge what we had. In case the API doesn't return all fields, we don't want to lose them\n if (get().afterSave) {\n await get().afterSave!(newData, get());\n }\n\n if (keepOpen) {\n const keyName = get()?.uniqueKeyField || 'id';\n const clearedData = { ...newData };\n delete clearedData[keyName];\n set({ loading: false, values: clearedData });\n get().onChange?.(clearedData, get());\n formMethods.reset(clearedData);\n return newData;\n }\n\n set({ loading: false, values: newData });\n get().onChange?.(newData, get());\n formMethods.reset(newData); //reset with saved data to clear dirty state\n get().onClose?.(newData);\n return newData;\n }\n\n if (keepOpen) {\n const keyName = get()?.uniqueKeyField || 'id';\n const clearedData = { ...data };\n delete clearedData[keyName];\n set({ loading: false, values: clearedData });\n formMethods.reset(clearedData);\n get().onChange?.(clearedData, get());\n return data;\n }\n\n set({ loading: false, values: data });\n formMethods.reset(data); //reset with saved data to clear dirty state\n get().onChange?.(data, get());\n get().onClose?.(data);\n\n return data;\n }\n } catch (e) {\n const errorMessage = (e as Error)?.message ?? e;\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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: (data?: any) => {\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(data);\n } else {\n setState('opened', false);\n }\n }\n } else {\n if (onClose) {\n onClose(data);\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, Switch, 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 getState,\n keepOpen,\n onClose,\n request,\n save,\n saveButtonProps,\n saveButtonTitle,\n setState,\n showKeepOpenSwitch,\n } = useFormerStore((state) => ({\n buttonAreaGroupProps: state.layout?.buttonAreaGroupProps,\n closeButtonProps: state.layout?.closeButtonProps,\n closeButtonTitle: state.layout?.closeButtonTitle,\n dirty: state.dirty,\n getState: state.getState,\n keepOpen: state.keepOpen,\n onClose: state.onClose,\n request: state.request,\n save: state.save,\n saveButtonProps: state.layout?.saveButtonProps,\n saveButtonTitle: state.layout?.saveButtonTitle,\n setState: state.setState,\n showKeepOpenSwitch: state.layout?.showKeepOpenSwitch,\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(getState('values'));\n }}\n >\n {closeButtonTitle || 'Close'}\n </Button>\n )}\n {showKeepOpenSwitch && (\n <Switch\n checked={keepOpen}\n label=\"Keep Open\"\n onChange={(event) => setState('keepOpen', event.currentTarget.checked)}\n />\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 ,setState} = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderBottom: state.layout?.renderBottom,\n setState: state.setState,\n }));\n\n if (renderBottom) {\n return renderBottom(\n <FormerButtonArea />,\n opened ?? false,\n getState('onClose') ?? (() => {setState('opened', false)}),\n getState('onOpen') ?? (() => {setState('opened', true)}),\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,setState } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderTop: state.layout?.renderTop,\n setState: state.setState,\n }));\n\n if (renderTop) {\n return renderTop(\n <FormerButtonArea />,\n opened ?? false,\n getState('onClose') ?? (() => {setState('opened', false)}),\n getState('onOpen') ?? (() => {setState('opened', true)}),\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 getAllState,\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 getAllState: state.getAllState,\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?.(getState('values'));\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, getAllState());\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, getAllState, 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(\n <FormerLayout>{props.children}</FormerLayout>,\n opened ?? false,\n onClose ??\n (() => {\n setState('opened', false);\n }),\n onOpen ??\n (() => {\n setState('opened', true);\n }),\n getState\n )\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 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 const text = await response.text();\n if (text && text.length > 4) {\n throw new Error(`${text}`);\n }\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as unknown;\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 const text = await response.text();\n if (text && text.length > 4) {\n throw new Error(`${text}`);\n }\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as unknown;\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 type { FieldValues } from 'react-hook-form';\n\nimport { useState } from 'react';\n\nimport type { FormerProps } from './Former.types';\n\nexport type UseFormerStateProps<T extends FieldValues = FieldValues> = Pick<\n FormerProps<T>,\n 'onChange' | 'onClose' | 'opened' | 'primeData' | 'request' | 'values'\n>;\n\nexport const useFormerState = <T extends FieldValues = FieldValues>(\n options?: Partial<UseFormerStateProps<T>>\n) => {\n const [state, setState] = useState<UseFormerStateProps<T>>({\n onChange: options?.onChange,\n onClose: options?.onClose ?? (() => setState((cv) => ({ ...cv, opened: false }))),\n opened: options?.opened ?? false,\n primeData: options?.primeData ?? options?.values,\n request: options?.request ?? 'insert',\n values: options?.values,\n });\n\n const updateState = (updates: Partial<UseFormerStateProps<T>>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n const { onChange, onClose, opened, ...formerProps } = state;\n\n return {\n former: { ...formerProps, onChange },\n formerWrapper: { onClose, opened } as {\n onClose: Required<UseFormerStateProps<T>>['onClose'];\n opened: Required<UseFormerStateProps<T>>['opened'];\n },\n open: (request: UseFormerStateProps<T>['request'], data: UseFormerStateProps<T>['values']) => {\n setState((cv) => ({ ...cv, opened: true, primeData: data, request, values: data }));\n },\n updateState,\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","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","/**\n * @license React\n * use-sync-external-store-shim.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 = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.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 is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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 = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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 is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import { get, set } from 'idb-keyval';\n\nimport type { GlobalState } from './GlobalStateStore.types';\n\nconst STORAGE_KEY = 'APP_GLO';\n\nconst SKIP_PATHS = new Set([\n 'app.controls',\n 'initialized',\n 'session.connected',\n 'session.error',\n 'session.loading',\n]);\n\nconst shouldSkipPath = (path: string): boolean => {\n return SKIP_PATHS.has(path);\n};\n\nconst filterState = (state: unknown, prefix = ''): unknown => {\n if (typeof state === 'function') {\n return undefined;\n }\n\n if (state === null || typeof state !== 'object') {\n return state;\n }\n\n if (Array.isArray(state)) {\n return state.map((item, idx) => filterState(item, `${prefix}[${idx}]`));\n }\n\n const filtered: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(state)) {\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (shouldSkipPath(path) || typeof value === 'function') {\n continue;\n }\n\n filtered[key] = filterState(value, path);\n }\n\n return filtered;\n};\n\nasync function loadStorage(): Promise<Partial<GlobalState>> {\n const result: Partial<GlobalState> = {};\n const keys: (keyof GlobalState)[] = ['layout', 'navigation', 'owner', 'program', 'session', 'user'];\n\n for (const key of keys) {\n const storageKey = `${STORAGE_KEY}:${key}`;\n\n // Always use localStorage for session\n if (key === 'session') {\n try {\n if (typeof localStorage !== 'undefined') {\n const data = localStorage.getItem(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from localStorage:`, e);\n }\n continue;\n }\n\n try {\n if (typeof indexedDB !== 'undefined') {\n const data = await get(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n continue;\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from IndexedDB, falling back to localStorage:`, e);\n }\n\n try {\n if (typeof localStorage !== 'undefined') {\n const data = localStorage.getItem(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from localStorage:`, e);\n }\n }\n\n return result;\n}\n\nasync function saveStorage(state: GlobalState): Promise<void> {\n const keys: (keyof GlobalState)[] = ['layout', 'navigation', 'owner', 'program', 'session', 'user'];\n\n for (const key of keys) {\n const storageKey = `${STORAGE_KEY}:${key}`;\n const filtered = filterState(state[key], key);\n const serialized = JSON.stringify(filtered);\n\n // Always use localStorage for session\n if (key === 'session') {\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, serialized);\n }\n } catch (e) {\n console.error(`Failed to save ${key} to localStorage:`, e);\n }\n continue;\n }\n\n try {\n if (typeof indexedDB !== 'undefined') {\n await set(storageKey, serialized);\n continue;\n }\n } catch (e) {\n console.error(`Failed to save ${key} to IndexedDB, falling back to localStorage:`, e);\n }\n\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, serialized);\n }\n } catch (e) {\n console.error(`Failed to save ${key} to localStorage:`, e);\n }\n }\n}\n\nexport { loadStorage, saveStorage };\n","import type { StoreApi } from 'zustand';\n\nimport { shallow } from 'zustand/shallow';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\nimport { createStore } from 'zustand/vanilla';\n\nimport type {\n BarState,\n ExtractState,\n GlobalState,\n GlobalStateStoreType,\n LayoutState,\n NavigationState,\n OwnerState,\n ProgramState,\n SessionState,\n UserState,\n} from './GlobalStateStore.types';\n\nimport { loadStorage, saveStorage } from './GlobalStateStore.utils';\n\nconst initialState: GlobalState = {\n initialized: false,\n layout: {\n bottomBar: { open: false },\n leftBar: { open: false },\n rightBar: { open: false },\n topBar: { open: false },\n },\n navigation: {\n menu: [],\n },\n owner: {\n guid: '',\n id: 0,\n name: '',\n },\n program: {\n controls: {},\n environment: 'production',\n guid: '',\n name: '',\n slug: '',\n },\n session: {\n apiURL: '',\n authToken: '',\n connected: true,\n loading: false,\n loggedIn: false,\n },\n user: {\n guid: '',\n username: '',\n },\n};\n\ntype GetState = () => GlobalStateStoreType;\ntype SetState = (\n partial: ((state: GlobalState) => Partial<GlobalState>) | Partial<GlobalState>\n) => void;\n\nconst createProgramSlice = (set: SetState) => ({\n setProgram: (updates: Partial<ProgramState>) =>\n set((state: GlobalState) => ({\n program: { ...state.program, ...updates },\n })),\n});\n\nconst createSessionSlice = (set: SetState) => ({\n setApiURL: (url: string) =>\n set((state: GlobalState) => ({\n session: { ...state.session, apiURL: url },\n })),\n\n setAuthToken: (token: string) =>\n set((state: GlobalState) => ({\n session: { ...state.session, authToken: token },\n })),\n\n setSession: (updates: Partial<SessionState>) =>\n set((state: GlobalState) => ({\n session: { ...state.session, ...updates },\n })),\n});\n\nconst createOwnerSlice = (set: SetState) => ({\n setOwner: (updates: Partial<OwnerState>) =>\n set((state: GlobalState) => ({\n owner: { ...state.owner, ...updates },\n })),\n});\n\nconst createUserSlice = (set: SetState) => ({\n setUser: (updates: Partial<UserState>) =>\n set((state: GlobalState) => ({\n user: { ...state.user, ...updates },\n })),\n});\n\nconst createLayoutSlice = (set: SetState) => ({\n setBottomBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, bottomBar: { ...state.layout.bottomBar, ...updates } },\n })),\n\n setLayout: (updates: Partial<LayoutState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, ...updates },\n })),\n\n setLeftBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, leftBar: { ...state.layout.leftBar, ...updates } },\n })),\n\n setRightBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, rightBar: { ...state.layout.rightBar, ...updates } },\n })),\n\n setTopBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, topBar: { ...state.layout.topBar, ...updates } },\n })),\n});\n\nconst createNavigationSlice = (set: SetState) => ({\n setCurrentPage: (page: NavigationState['currentPage']) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, currentPage: page },\n })),\n\n setMenu: (menu: NavigationState['menu']) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, menu },\n })),\n\n setNavigation: (updates: Partial<NavigationState>) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, ...updates },\n })),\n});\n\nconst createComplexActions = (set: SetState, get: GetState) => {\n // Internal implementation without lock\n const fetchDataInternal = async (url?: string) => {\n try {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n apiURL: url || state.session.apiURL,\n loading: true,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onFetchSession?.(currentState);\n\n set((state: GlobalState) => ({\n ...state,\n ...result,\n layout: { ...state.layout, ...result?.layout },\n navigation: { ...state.navigation, ...result?.navigation },\n owner: {\n ...state.owner,\n ...result?.owner,\n },\n program: {\n ...state.program,\n ...result?.program,\n updatedAt: new Date().toISOString(),\n },\n session: {\n ...state.session,\n ...result?.session,\n connected: true,\n loading: false,\n },\n user: {\n ...state.user,\n ...result?.user,\n },\n }));\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Load Exception: ${String(e)}`,\n loading: false,\n },\n }));\n }\n };\n\n return {\n fetchData: async (url?: string) => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent fetchData calls\n return withOperationLock(() => fetchDataInternal(url));\n },\n\n isLoggedIn: (): boolean => {\n const session = get().session;\n if (!session.loggedIn || !session.authToken) {\n return false;\n }\n if (session.expiryDate && new Date(session.expiryDate) < new Date()) {\n return false;\n }\n return true;\n },\n\n login: async (authToken?: string, user?: Partial<UserState>) => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent auth operations\n return withOperationLock(async () => {\n try {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n authToken: authToken ?? '',\n expiryDate: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),\n loading: true,\n loggedIn: true,\n },\n user: {\n ...state.user,\n ...user,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onLogin?.(currentState);\n if (result) {\n set((state: GlobalState) => ({\n ...state,\n owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,\n program: result.program ? { ...state.program, ...result.program } : state.program,\n session: result.session ? { ...state.session, ...result.session } : state.session,\n user: result.user ? { ...state.user, ...result.user } : state.user,\n }));\n }\n // Call internal version to avoid nested lock\n await fetchDataInternal();\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Login Exception: ${String(e)}`,\n loading: false,\n loggedIn: false,\n },\n }));\n } finally {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n loading: false,\n },\n }));\n }\n });\n },\n\n logout: async () => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent auth operations\n return withOperationLock(async () => {\n try {\n set((state: GlobalState) => ({\n ...initialState,\n session: {\n ...initialState.session,\n apiURL: state.session.apiURL,\n expiryDate: undefined,\n loading: true,\n loggedIn: false,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onLogout?.(currentState);\n if (result) {\n set((state: GlobalState) => ({\n ...state,\n owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,\n program: result.program ? { ...state.program, ...result.program } : state.program,\n session: result.session ? { ...state.session, ...result.session } : state.session,\n user: result.user ? { ...state.user, ...result.user } : state.user,\n }));\n }\n // Call internal version to avoid nested lock\n await fetchDataInternal();\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Logout Exception: ${String(e)}`,\n loading: false,\n },\n }));\n } finally {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n loading: false,\n },\n }));\n }\n });\n },\n };\n};\n\n// State management flags and locks - must be defined before store creation\nlet isStorageInitialized = false;\nlet initializationPromise: null | Promise<void> = null;\nlet operationLock: Promise<void> = Promise.resolve();\n\n// Helper to wait for initialization - must be defined before store creation\nconst waitForInitialization = async (): Promise<void> => {\n if (initializationPromise) {\n await initializationPromise;\n }\n};\n\n// Helper to ensure async operations run sequentially\nconst withOperationLock = async <T>(operation: () => Promise<T>): Promise<T> => {\n const currentLock = operationLock;\n let releaseLock: () => void;\n\n // Create new lock promise\n operationLock = new Promise<void>((resolve) => {\n releaseLock = resolve;\n });\n\n try {\n // Wait for previous operation to complete\n await currentLock;\n // Run the operation\n return await operation();\n } finally {\n // Release the lock\n releaseLock!();\n }\n};\n\nconst GlobalStateStore = createStore<GlobalStateStoreType>((set, get) => ({\n ...initialState,\n ...createProgramSlice(set),\n ...createSessionSlice(set),\n ...createOwnerSlice(set),\n ...createUserSlice(set),\n ...createLayoutSlice(set),\n ...createNavigationSlice(set),\n ...createComplexActions(set, get),\n}));\n\n// Initialize storage and load saved state\ninitializationPromise = loadStorage()\n .then((state) => {\n // Merge loaded state with initial state\n GlobalStateStore.setState(\n (current) => ({\n ...current,\n ...state,\n initialized: true,\n session: {\n ...current.session,\n ...state.session,\n connected: true,\n loading: false,\n },\n }),\n true // Replace state completely to avoid triggering subscription during init\n );\n })\n .catch((e) => {\n console.error('Error loading storage:', e);\n // Mark as initialized even on error so app doesn't hang\n GlobalStateStore.setState({ initialized: true });\n })\n .finally(() => {\n // Mark initialization as complete\n isStorageInitialized = true;\n initializationPromise = null;\n });\n\n// Subscribe to state changes and persist to storage\n// Only saves after initialization is complete\nGlobalStateStore.subscribe((state) => {\n if (!isStorageInitialized) {\n return;\n }\n\n saveStorage(state).catch((e) => {\n console.error('Error saving storage:', e);\n });\n});\n\nconst createTypeBoundedUseStore = ((store) => (selector) =>\n useStoreWithEqualityFn(store, selector, shallow)) as <S extends StoreApi<unknown>>(\n store: S\n) => {\n (): ExtractState<S>;\n <T>(selector: (state: ExtractState<S>) => T): T;\n};\n\nconst useGlobalStateStore = createTypeBoundedUseStore(GlobalStateStore);\n\nconst setApiURL = (url: string) => {\n GlobalStateStore.getState().setApiURL(url);\n};\n\nconst getApiURL = (): string => {\n return GlobalStateStore.getState().session.apiURL ?? '';\n};\n\nconst getAuthToken = (): string => {\n return GlobalStateStore.getState().session.authToken ?? '';\n};\n\nconst isLoggedIn = (): boolean => {\n return GlobalStateStore.getState().isLoggedIn();\n};\n\nconst setAuthToken = (token: string) => {\n GlobalStateStore.getState().setAuthToken(token);\n};\n\nconst GetGlobalState = (): GlobalStateStoreType => {\n return GlobalStateStore.getState();\n};\n\nexport {\n getApiURL,\n getAuthToken,\n GetGlobalState,\n GlobalStateStore,\n isLoggedIn,\n setApiURL,\n setAuthToken,\n useGlobalStateStore,\n};\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport type { GlobalState, GlobalStateStoreType, ProgramState } from './GlobalStateStore.types';\n\nimport { GetGlobalState, GlobalStateStore } from './GlobalStateStore';\n\ninterface GlobalStateStoreContextValue {\n fetchData: (url?: string) => Promise<void>;\n getState: () => GlobalStateStoreType;\n refetch: () => Promise<void>;\n}\n\nconst GlobalStateStoreContext = createContext<GlobalStateStoreContextValue | null>(null);\n\ninterface GlobalStateStoreProviderProps {\n apiURL?: string;\n autoFetch?: boolean;\n children: ReactNode;\n fetchOnMount?: boolean;\n onFetchSession?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n onLogin?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n onLogout?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n program?: Partial<ProgramState>;\n throttleMs?: number;\n}\n\nexport function GlobalStateStoreProvider({\n apiURL,\n autoFetch = true,\n children,\n fetchOnMount = true,\n onFetchSession,\n onLogin,\n onLogout,\n program,\n throttleMs = 0,\n}: GlobalStateStoreProviderProps) {\n const lastFetchTime = useRef<number>(0);\n const fetchInProgress = useRef<boolean>(false);\n const mounted = useRef<boolean>(false);\n\n const throttledFetch = useCallback(\n async (url?: string) => {\n const now = Date.now();\n const timeSinceLastFetch = now - lastFetchTime.current;\n\n if (fetchInProgress.current) {\n return;\n }\n\n if (throttleMs > 0 && timeSinceLastFetch < throttleMs) {\n return;\n }\n\n try {\n fetchInProgress.current = true;\n lastFetchTime.current = now;\n await GlobalStateStore.getState().fetchData(url);\n } finally {\n fetchInProgress.current = false;\n }\n },\n [throttleMs]\n );\n\n const refetch = useCallback(async () => {\n await throttledFetch();\n }, [throttledFetch]);\n\n useEffect(() => {\n if (apiURL) {\n GlobalStateStore.getState().setApiURL(apiURL);\n }\n }, [apiURL]);\n\n useEffect(() => {\n if (program) {\n GlobalStateStore.getState().setProgram(program);\n }\n }, [program]);\n\n useEffect(() => {\n if (onFetchSession) {\n GlobalStateStore.setState({ onFetchSession });\n }\n }, [onFetchSession]);\n\n useEffect(() => {\n if (onLogin) {\n GlobalStateStore.setState({ onLogin });\n }\n }, [onLogin]);\n\n useEffect(() => {\n if (onLogout) {\n GlobalStateStore.setState({ onLogout });\n }\n }, [onLogout]);\n\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n\n if (autoFetch && fetchOnMount) {\n throttledFetch(apiURL).catch((e) => {\n console.error('Failed to fetch on mount:', e);\n });\n }\n }\n }, [apiURL, autoFetch, fetchOnMount, throttledFetch]);\n\n const context = useMemo(() => {\n return {\n fetchData: throttledFetch,\n getState: GetGlobalState,\n refetch,\n };\n }, [throttledFetch, refetch]);\n\n return (\n <GlobalStateStoreContext.Provider value={context}>{children}</GlobalStateStoreContext.Provider>\n );\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useGlobalStateStoreContext(): GlobalStateStoreContextValue {\n const context = useContext(GlobalStateStoreContext);\n if (!context) {\n throw new Error('useGlobalStateStoreContext must be used within GlobalStateStoreProvider');\n }\n return context;\n}\n","function c(n) {\n const o = atob(n), t = new ArrayBuffer(o.length), e = new Uint8Array(t);\n for (let r = 0; r < o.length; r++)\n e[r] = o.charCodeAt(r);\n return new Blob([t]);\n}\nfunction u(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction d(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction f(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(new Blob([r]));\n }, e.onerror = t, e.readAsArrayBuffer(n);\n });\n}\nfunction l(n) {\n return decodeURIComponent(\n Array.prototype.map.call(\n atob(n),\n (o) => `%${`00${o.charCodeAt(0).toString(16)}`.slice(-2)}`\n ).join(\"\")\n );\n}\nfunction w(n) {\n return btoa(\n encodeURIComponent(n).replace(\n /%([0-9A-F]{2})/g,\n (o, t) => String.fromCharCode(Number.parseInt(t, 16))\n )\n );\n}\nfunction A(n) {\n return new Promise((o, t) => {\n if (!n) return o(\"\");\n if (typeof n == \"string\")\n return o(n);\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(r);\n }, e.onerror = t, e.readAsText(n);\n });\n}\nexport {\n A as BlobToString,\n d as FileToBase64,\n f as FileToBlob,\n l as b64DecodeUnicode,\n w as b64EncodeUnicode,\n c as base64ToBlob,\n u as blobToBase64\n};\n//# sourceMappingURL=base64.js.map\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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\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\nexport type GoAPIHeaderKeys = `x-${GoAPIEnum}`;\n\nexport type GoAPIHeaderTypes = GoAPIEnum & string;\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 * 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 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 head.set('Authorization', `Token ${authToken}`);\n } else {\n const token = getAuthToken();\n if (token) {\n head.set('Authorization', `Token ${token}`);\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\nexport { buildGoAPIOperation, getAuthToken, GoAPIHeaders, setAuthToken, setAuthTokenCallback };\n","function getNestedValue(t, l) {\n if (!t || !l || t.includes(\"..\") || t.includes(\"[]\") || /\\[\\s*\\]/.test(t))\n return;\n const o = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (o.length !== 0)\n return o.reduce((c, e) => {\n if (c != null && typeof c == \"object\")\n return c[e];\n }, l);\n}\nfunction setNestedValue(t, l, o) {\n if (!t || !o) return o;\n const c = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (c.length === 0) return o;\n const e = c.pop();\n let r = o;\n for (let n = 0; n < c.length; n++) {\n const f = c[n], a = c[n + 1] || e, s = /^\\d+$/.test(a);\n (!(f in r) || s && !Array.isArray(r[f]) || !s && typeof r[f] != \"object\") && (r[f] = s ? [] : {}), r = r[f];\n }\n if (/^\\d+$/.test(e) && !Array.isArray(r)) {\n const n = r, f = Math.max(\n ...Object.keys(n).filter((s) => /^\\d+$/.test(s)).map(Number).concat(-1)\n ), a = new Array(Math.max(f + 1, Number(e) + 1));\n Object.keys(n).filter((s) => /^\\d+$/.test(s)).forEach((s) => {\n a[Number(s)] = n[s];\n }), Object.keys(n).forEach((s) => {\n /^\\d+$/.test(s) || (a[s] = n[s]);\n }), Object.keys(n).forEach((s) => delete n[s]), Object.assign(n, a), r = n;\n }\n return r[e] = l, o;\n}\nfunction objectCompare(t, l, o = !1) {\n return !t || !l ? !1 : Object.keys(t).length === Object.keys(l).length && Object.keys(t).every((c) => {\n if (!Object.prototype.hasOwnProperty.call(l, c))\n return !1;\n const e = t[c], r = l[c];\n return o ? Array.isArray(e) && Array.isArray(r) ? e.length === r.length && e.every(\n (n, f) => typeof n == \"object\" && n !== null ? objectCompare(\n n,\n r[f],\n !0\n ) : n === r[f]\n ) : typeof e == \"object\" && typeof r == \"object\" && e !== null && r !== null ? objectCompare(\n e,\n r,\n !0\n ) : e === r : e === r;\n });\n}\nfunction createSelectOptions(t, l = {}) {\n const {\n labelKey: o = \"label\",\n valueKey: c = \"value\"\n } = l;\n return t ? Array.isArray(t) ? t : typeof t != \"object\" ? [] : Object.keys(t).map((e) => ({\n [o]: t[e],\n [c]: e\n })) : [];\n}\nfunction decycle(t, l) {\n const o = /* @__PURE__ */ new WeakMap();\n return function c(e, r) {\n let n, f;\n return l !== void 0 && (e = l(e)), typeof e == \"object\" && e !== null && !(e instanceof Boolean) && !(e instanceof Date) && !(e instanceof Number) && !(e instanceof RegExp) && !(e instanceof String) ? (n = o.get(e), n !== void 0 ? { $ref: n } : (o.set(e, r), Array.isArray(e) ? (f = [], e.forEach(function(a, s) {\n f[s] = c(a, r + \"[\" + s + \"]\");\n })) : (f = {}, Object.keys(e).forEach(function(a) {\n f[a] = c(\n e[a],\n r + \"[\" + JSON.stringify(a) + \"]\"\n );\n })), f)) : e;\n }(t, \"$\");\n}\nfunction retrocycle($) {\n const px = /^\\$(?:\\[(?:\\d+|\"(?:[^\\\\\"\\u0000-\\u001f]|\\\\(?:[\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\\])*$/;\n return function rez(value) {\n value && typeof value == \"object\" && (Array.isArray(value) ? value.forEach(function(element, i) {\n if (typeof element == \"object\" && element !== null) {\n const path = element.$ref;\n typeof path == \"string\" && px.test(path) ? value[i] = eval(path) : rez(element);\n }\n }) : Object.keys(value).forEach(function(name) {\n const item = value[name];\n if (typeof item == \"object\" && item !== null) {\n const path = item.$ref;\n typeof path == \"string\" && px.test(path) ? value[name] = eval(path) : rez(item);\n }\n }));\n }($), $;\n}\nfunction stringify_json(t) {\n return JSON.stringify(retrocycle(t));\n}\nexport {\n createSelectOptions,\n decycle,\n getNestedValue,\n objectCompare,\n retrocycle,\n setNestedValue,\n stringify_json\n};\n//# sourceMappingURL=object.js.map\n","/* eslint-disable react-refresh/only-export-components */\nimport { type MenuItemProps, type MenuProps } from '@mantine/core';\nimport { getUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\nimport { type ReactNode } from 'react';\n\nexport interface MantineBetterMenuInstance {\n id: string;\n items?: Array<MantineBetterMenuInstanceItem>;\n menuProps?: MenuProps;\n renderer?: ReactNode;\n visible: boolean;\n\n x: number;\n y: number;\n}\n\nexport interface MantineBetterMenuInstanceItem extends Partial<MenuItemProps> {\n id?: string;\n isDivider?: boolean;\n items?: Array<MantineBetterMenuInstanceItem>;\n label?: string;\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n onClickAsync?: (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<null | 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 ) => 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>(key: K, value: GridlerStoreState[K]) => 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\n if (rn && rn >= 0) {\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 const rowBuffer = state.getRowBuffer(row);\n if (state.glideProps?.onCellClicked) {\n state.glideProps?.onCellClicked?.(cell, event);\n }\n if (state.values?.length && state.values?.length > 0) {\n if (state.onChange) {\n state.onChange(state.values);\n }\n } else if (rowBuffer && state.onChange) {\n state.onChange([rowBuffer]);\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<null | number> = useCallback(\n async (key: string) => {\n const colFilters = getState('colFilters');\n if (!key || key === '' || !props.url) {\n return null;\n }\n //console.log('APIAdaptorGoLangv2', { key, 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//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, row, defaultItems);\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' || (id === 'cell' && !row)) {\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\n if (rowIndex >= 0) {\n rowIndexes.push(rowIndex);\n } else {\n const idx = await getRowIndexByKey(key);\n if (idx !== null) {\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 if (r !== undefined) {\n rows = rows.add(r);\n }\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 const scrollToRowKey = getState('scrollToRowKey');\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 (!firstBuffer) {\n return;\n }\n\n if (firstRow && firstRow > 0 && (currentValues.length ?? 0) === 0) {\n const newValues = [firstBuffer];\n\n const onChange = getState('onChange');\n if (onChange) {\n onChange(newValues);\n } else {\n setState('values', newValues);\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, values]);\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 //console.log('Computer:Scrolling to key:', key);\n getRowIndexByKey?.(key).then((r) => {\n if (r !== undefined) {\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 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\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","ErrorManager","errorInfo","context","report","modifiedReport","reportPromises","reporter","customAPIReporter","payload","response","sentryReporter","Sentry","scope","errorManager","ReactBasicErrorBoundary","Fragment","ErrorBoundaryOptions","GetErrorBoundaryOptions","ReactErrorBoundary","IconExclamationCircle","rem","Group","Button","Paper","Text","Collapse","Code","tm","FormerProvider","useFormerStore","keyName","keyValue","errorMessage","values","keepOpen","formMethods","exit","newdata","errors","savedData","newData","clearedData","request","resolve","reject","id","onClose","onConfirmDelete","primeData","useStoreApi","_onConfirmDelete","newUUID","dirty","setState","FormerButtonArea","buttonAreaGroupProps","closeButtonProps","closeButtonTitle","getState","save","saveButtonProps","saveButtonTitle","showKeepOpenSwitch","disabledSave","Switch","Tooltip","IconDeviceFloppy","FormerLayoutBottom","buttonArea","renderBottom","FormerLayoutTop","renderTop","FormerLayout","disableHTMlForm","getFormMethods","load","loading","loadingOverlayProps","ScrollAreaAutosize","LoadingOverlay","FormerInner","getAllState","onOpen","useFormProps","validate","wrapper","useForm","isDirty","FormProvider","Former","FormerResolveSpecAPI","mode","url","resolveSpecRequest","fetchOptions","text","FormerRestHeadSpecAPI","baseUrl","FormerDialog","former","rest","_onOpen","uniqueKeyField","Drawer","FormerModel","Modal","FormerPopover","Popover","useFormerState","useState","cv","updateState","updates","prev","formerProps","ButtonCtrl","setLoading","IconButtonCtrl","VisuallyHidden","NativeSelectCtrl","control","sid","tooltip","innerProps","Controller","field","formState","createElement","NativeSelect","PasswordInputCtrl","textProps","PasswordInput","SwitchCtrl","TextAreaCtrl","Textarea","TextInputCtrl","isIterable","obj","hasIterableEntries","compareEntries","valueA","valueB","mapA","mapB","compareIterables","iteratorA","iteratorB","nextA","nextB","shallow","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","useSyncExternalStore","withSelector_production","getServerSnapshot","selector","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","createStoreImpl","createState","listeners","partial","replace","nextState","previousState","listener","api","initialState","createStore","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","identity","arg","useStoreWithEqualityFn","equalityFn","slice","STORAGE_KEY","SKIP_PATHS","shouldSkipPath","path","filterState","prefix","idx","loadStorage","storageKey","saveStorage","serialized","createProgramSlice","createSessionSlice","token","createOwnerSlice","createUserSlice","createLayoutSlice","createNavigationSlice","page","menu","createComplexActions","fetchDataInternal","currentState","waitForInitialization","withOperationLock","session","authToken","user","isStorageInitialized","initializationPromise","operationLock","operation","currentLock","releaseLock","GlobalStateStore","current","createTypeBoundedUseStore","store","useGlobalStateStore","setApiURL","getApiURL","getAuthToken","isLoggedIn","setAuthToken","GetGlobalState","GlobalStateStoreContext","createContext","GlobalStateStoreProvider","apiURL","autoFetch","fetchOnMount","onFetchSession","onLogin","onLogout","program","throttleMs","lastFetchTime","fetchInProgress","mounted","throttledFetch","now","timeSinceLastFetch","refetch","useGlobalStateStoreContext","useContext","w","n","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","b64EncodeUnicode","GoAPIHeaders","head","headerlist","distinctOperations","searchValue","callbacks","getNestedValue","l","o","c","MantineBetterMenusStoreProvider","useMantineBetterMenus","s","menuIndex","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","buffers","page_data","p","r","firstPage","upperPage","rowIndex","keyField","rn","found","pageData","rowKey","pPage","clearMode","damageList","colLen","hasPage","rowBuffer","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","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","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,30,31,32,33,34,35,36,37,38,42,44]}
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/ErrorBoundary/ErrorManager.ts","../src/ErrorBoundary/BasicErrorBoundary.tsx","../src/ErrorBoundary/ErrorBoundary.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/Former/use-former-state.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/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/vanilla/shallow.mjs","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/shim/index.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.2.4/node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/vanilla.mjs","../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.13_immer@10.1.3_react@19.2.4_use-sync-external-store@1.5.0_react@19.2.4_/node_modules/zustand/esm/traditional.mjs","../src/GlobalStateStore/GlobalStateStore.utils.ts","../src/GlobalStateStore/GlobalStateStore.ts","../src/GlobalStateStore/GlobalStateStoreWrapper.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 { Checkbox, Combobox } from '@mantine/core';\nimport { useMemo } from 'react';\n\nimport type { BoxerItem } from '../Boxer.types';\n\ninterface UseBoxerOptionsProps {\n boxerData: Array<BoxerItem>;\n multiSelect?: boolean;\n onOptionSubmit: (index: number) => void;\n value?: any | Array<any>;\n}\n\nconst useBoxerOptions = (props: UseBoxerOptionsProps) => {\n const { boxerData, multiSelect, onOptionSubmit, value } = 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 active={isSelected}\n key={`${item.value}-${index}`}\n onClick={() => {\n onOptionSubmit(index);\n }}\n value={String(index)}\n >\n {multiSelect ? (\n <div style={{ alignItems: 'center', display: 'flex', 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 type {\n CustomAPIConfig,\n ErrorManagerConfig,\n ErrorReport,\n ErrorReporter,\n SentryConfig,\n} from './ErrorManager.types';\n\nclass ErrorManager {\n private config: ErrorManagerConfig = { enabled: true };\n private reporters: ErrorReporter[] = [];\n private sentryInstance: any = null;\n\n configure(config: ErrorManagerConfig) {\n this.config = { ...this.config, ...config };\n this.reporters = [];\n\n if (config.sentry) {\n this.setupSentry(config.sentry);\n }\n\n if (config.customAPI) {\n this.setupCustomAPI(config.customAPI);\n }\n\n if (config.reporters) {\n this.reporters.push(...config.reporters);\n }\n }\n\n destroy() {\n this.reporters = [];\n this.sentryInstance = null;\n this.config = { enabled: true };\n }\n\n getReporters(): ErrorReporter[] {\n return [...this.reporters];\n }\n\n isEnabled(): boolean {\n return Boolean(this.config.enabled);\n }\n\n async reportError(\n error: Error,\n errorInfo?: any,\n context?: ErrorReport['context']\n ): Promise<void> {\n if (!this.config.enabled) {\n return;\n }\n\n let report: ErrorReport = {\n context,\n error,\n errorInfo,\n severity: 'error',\n timestamp: Date.now(),\n };\n\n if (this.config.beforeReport) {\n const modifiedReport = this.config.beforeReport(report);\n if (!modifiedReport) {\n return;\n }\n report = modifiedReport;\n }\n\n const reportPromises = this.reporters\n .filter((reporter) => reporter.isEnabled())\n .map(async (reporter) => {\n try {\n await reporter.captureError(report);\n } catch (error) {\n console.error(`Error reporter \"${reporter.name}\" failed:`, error);\n if (this.config.onReportFailure) {\n this.config.onReportFailure(error as Error, report);\n }\n }\n });\n\n try {\n await Promise.all(reportPromises);\n if (this.config.onReportSuccess) {\n this.config.onReportSuccess(report);\n }\n } catch (error) {\n console.error('Error reporting failed:', error);\n }\n }\n\n private setupCustomAPI(config: CustomAPIConfig) {\n const customAPIReporter: ErrorReporter = {\n captureError: async (report: ErrorReport) => {\n try {\n const payload = config.transformPayload\n ? config.transformPayload(report)\n : {\n context: report.context,\n message: report.error.message,\n severity: report.severity || 'error',\n stack: report.error.stack,\n timestamp: report.timestamp || Date.now(),\n };\n\n const response = await fetch(config.endpoint, {\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n method: config.method || 'POST',\n });\n\n if (!response.ok) {\n throw new Error(`API request failed: ${response.statusText}`);\n }\n } catch (error) {\n console.error('Failed to send error to custom API:', error);\n }\n },\n isEnabled: () => Boolean(config.endpoint),\n name: 'CustomAPI',\n };\n\n this.reporters.push(customAPIReporter);\n }\n\n private setupSentry(config: SentryConfig) {\n const sentryReporter: ErrorReporter = {\n captureError: async (report: ErrorReport) => {\n if (!this.sentryInstance) {\n try {\n const Sentry = await import('@sentry/react');\n Sentry.init({\n beforeSend: config.beforeSend,\n dsn: config.dsn,\n environment: config.environment,\n ignoreErrors: config.ignoreErrors,\n release: config.release,\n tracesSampleRate: config.sampleRate || 1.0,\n });\n this.sentryInstance = Sentry;\n } catch (error) {\n console.error('Failed to initialize Sentry:', error);\n return;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.sentryInstance.withScope((scope: any) => {\n if (report.severity) {\n scope.setLevel(report.severity);\n }\n\n if (report.context?.namespace) {\n scope.setTag('namespace', report.context.namespace);\n }\n\n if (report.context?.tags) {\n Object.entries(report.context.tags).forEach(([key, value]) => {\n scope.setTag(key, value);\n });\n }\n\n if (report.context?.user) {\n scope.setUser(report.context.user);\n }\n\n if (report.context?.extra) {\n scope.setExtras(report.context.extra);\n }\n\n if (report.context?.componentStack) {\n scope.setContext('react', {\n componentStack: report.context.componentStack,\n });\n }\n\n this.sentryInstance.captureException(report.error);\n });\n },\n isEnabled: () => Boolean(this.sentryInstance),\n name: 'Sentry',\n };\n\n this.reporters.push(sentryReporter);\n }\n}\n\nexport const errorManager = new ErrorManager();\n\nexport default errorManager;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { type PropsWithChildren } from 'react';\n\nimport errorManager from './ErrorManager';\n\ninterface ErrorBoundaryProps extends PropsWithChildren {\n namespace?: string;\n onReportClick?: () => void;\n onResetClick?: () => void;\n onRetryClick?: () => void;\n reportAPI?: string;\n}\n\ninterface ErrorBoundaryState {\n error: any;\n errorInfo: any;\n reported?: boolean;\n resetted?: boolean;\n showDetail: boolean;\n timer?: NodeJS.Timeout | undefined;\n try: boolean;\n tryCnt: number;\n}\n\nexport class ReactBasicErrorBoundary extends React.PureComponent<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n\n this.state = {\n error: null,\n errorInfo: null,\n showDetail: false,\n timer: undefined,\n try: false,\n tryCnt: 0,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n // Catch errors in any components below and re-render with error message\n this.setState({\n error,\n errorInfo,\n try: false,\n });\n\n // Report error to error manager (Sentry, custom API, etc.)\n errorManager.reportError(error, errorInfo, {\n componentStack: errorInfo?.componentStack,\n namespace: this.props.namespace,\n });\n }\n\n render() {\n if (this.state.errorInfo) {\n // Error path\n return (\n <div>\n <h2>Error</h2>\n {this.state.error && (\n <>\n <h3>In: {this.props.namespace ?? 'default'}</h3>\n <main>{this.state.error.toString()}</main>\n </>\n )}\n </div>\n );\n }\n\n // Normally, just render children\n return this.props.children;\n }\n}\n\nexport default ReactBasicErrorBoundary;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, Code, Collapse, Group, Paper, rem, Text } from '@mantine/core';\nimport { IconExclamationCircle } from '@tabler/icons-react';\nimport React, { type PropsWithChildren } from 'react';\n\nimport errorManager from './ErrorManager';\n\nlet ErrorBoundaryOptions = {\n disabled: false,\n onError: undefined,\n} as {\n disabled?: boolean;\n onError?: (error: any, errorInfo: any) => void;\n};\n\nexport const SetErrorBoundaryOptions = (options: typeof ErrorBoundaryOptions) => {\n ErrorBoundaryOptions = { ...ErrorBoundaryOptions, ...options };\n};\n\nexport const GetErrorBoundaryOptions = () => {\n return { ...ErrorBoundaryOptions };\n};\n\ninterface ErrorBoundaryProps extends PropsWithChildren {\n namespace?: string;\n onReportClick?: () => void;\n onResetClick?: () => void;\n onRetryClick?: () => void;\n reportAPI?: string;\n}\n\ninterface ErrorBoundaryState {\n error: any;\n errorInfo: any;\n reported?: boolean;\n showDetail: boolean;\n timer?: NodeJS.Timeout | undefined;\n try: boolean;\n tryCnt: number;\n wasReset?: boolean;\n}\n\nexport class ReactErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n\n this.state = {\n error: null,\n errorInfo: null,\n showDetail: false,\n timer: undefined,\n try: false,\n tryCnt: 0,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n if (GetErrorBoundaryOptions()?.disabled) {\n throw Error('ErrorBoundary pass through enabled, rethrowing error', {\n cause: error,\n //@ts-ignore\n info: errorInfo,\n });\n }\n // Catch errors in any components below and re-render with error message\n this.setState({\n error,\n errorInfo,\n try: false,\n });\n if (typeof GetErrorBoundaryOptions()?.onError === 'function') {\n GetErrorBoundaryOptions()?.onError?.(error, errorInfo);\n }\n\n // Report error to error manager (Sentry, custom API, etc.)\n errorManager.reportError(error, errorInfo, {\n componentStack: errorInfo?.componentStack,\n namespace: this.props.namespace,\n });\n }\n\n render() {\n if (this.state.errorInfo) {\n // Error path\n return (\n <div>\n <h2\n style={{\n color: 'var(--mantine-color-error)',\n display: 'flex',\n gap: '8px',\n }}\n >\n <IconExclamationCircle\n color=\"var(--mantine-color-error)\"\n style={{ height: rem(20), width: rem(20) }}\n />\n A react error has occurred!\n </h2>\n <h4>You can try one of these solutions to get back on track:</h4>\n <ul>\n <li>Report the error to our team</li>\n <li>Hit the keys Ctrl-Shift-R</li>\n <li>Make sure your web browser is up to date</li>\n <li>Clear your browser cache and cookies</li>\n <li>Try using a different web browser</li>\n <li>Reset your layout and settings</li>\n <li>Retry loading the application</li>\n </ul>\n\n <Group>\n <Button\n color=\"red\"\n my=\"md\"\n onClick={() =>\n this.setState((state) => ({\n showDetail: !state.showDetail,\n }))\n }\n size=\"compact-xs\"\n variant=\"outline\"\n >\n More\n </Button>\n <Button\n color=\"blue\"\n disabled={this.state.tryCnt > 2 || this.state.try}\n my=\"md\"\n onClick={() => this.retry()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Retry {this.state.tryCnt > 0 ? `(${this.state.tryCnt})` : ''}\n </Button>\n <Button\n color=\"yellow\"\n disabled={this.state.wasReset}\n my=\"md\"\n onClick={() => this.reset()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Reset Layout or Settings\n </Button>\n <Button\n color=\"green\"\n disabled={this.state.reported}\n my=\"md\"\n onClick={() => this.report()}\n size=\"compact-xs\"\n variant=\"outline\"\n >\n Report\n </Button>\n </Group>\n\n {this.state.error && (\n <Paper\n p=\"md\"\n shadow=\"xs\"\n style={{\n textAlign: 'justify',\n }}\n w=\"50%\"\n withBorder\n >\n {this.props.namespace && <Text size=\"sm\">In: {this.props.namespace}</Text>}\n <Text size=\"sm\">{this.state.error.toString()}</Text>\n </Paper>\n )}\n\n <Collapse in={this.state.showDetail}>\n <Code block color=\"rgba(235, 86, 5, 0.6)\" mah=\"100vh\" w=\"100%\">\n {this.state.errorInfo.componentStack}\n </Code>\n </Collapse>\n </div>\n );\n }\n\n //Retry code, if you do it too many times, it will stop\n if (this.state.try) {\n if (!this.state.timer) {\n const tm = setTimeout(() => {\n clearTimeout(this.state.timer);\n this.setState((state) => ({\n ...state,\n timer: undefined,\n try: false,\n }));\n }, 1000);\n\n this.setState((state) => ({\n ...state,\n timer: tm,\n }));\n }\n return <div>Retrying {this.state.tryCnt}...</div>;\n }\n\n // Normally, just render children\n return this.props.children;\n }\n\n async report() {\n if (this.props?.onReportClick) {\n this.props.onReportClick();\n this.setState(() => ({\n reported: true,\n }));\n return;\n }\n\n // Manually report error if user clicks report button\n if (this.state.error && this.state.errorInfo) {\n await errorManager.reportError(this.state.error, this.state.errorInfo, {\n componentStack: this.state.errorInfo?.componentStack,\n namespace: this.props.namespace,\n tags: { reportedBy: 'user' },\n });\n\n this.setState(() => ({\n reported: true,\n }));\n }\n }\n\n reset() {\n if (this.props?.onResetClick) {\n this.props.onResetClick();\n this.setState(() => ({\n wasReset: true,\n }));\n return;\n }\n\n this.setState(() => ({\n wasReset: true,\n }));\n\n window.location.reload();\n }\n\n retry() {\n this.setState({\n try: true,\n tryCnt: this.state.tryCnt + 1,\n });\n if (this.props?.onRetryClick) {\n this.props.onRetryClick();\n return;\n }\n this.setState({\n error: undefined,\n errorInfo: undefined,\n });\n this.forceUpdate();\n }\n}\n\nexport default ReactErrorBoundary;\n","import { newUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\n\nimport type { FormerProps, FormerState, FormStateAndProps } from './Former.types';\n\nconst { Provider: FormerProvider, useStore: useFormerStore } = createSyncStore<\n FormerState<any> & Partial<FormerProps<any>>,\n FormerProps<any>\n>(\n (set, get) => ({\n getAllState: () => {\n return get() as FormStateAndProps<any>;\n },\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 }, get());\n }\n set({ loading: false, values: data });\n get().onChange?.(data, get());\n }\n if (reset && get().getFormMethods) {\n const formMethods = get().getFormMethods!();\n formMethods.reset();\n }\n } catch (e) {\n const errorMessage = (e as Error)?.message ?? e;\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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, get());\n data = newData;\n }\n\n let exit = false;\n const handler = formMethods.handleSubmit(\n (newdata) => {\n data = newdata;\n },\n (errors) => {\n const errorMessage = errors.root?.message || 'Validation errors';\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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 const newData = { ...data, ...savedData }; //Merge what we had. In case the API doesn't return all fields, we don't want to lose them\n if (get().afterSave) {\n await get().afterSave!(newData, get());\n }\n\n if (keepOpen) {\n const keyName = get()?.uniqueKeyField || 'id';\n const clearedData = { ...newData };\n delete clearedData[keyName];\n set({ loading: false, values: clearedData });\n get().onChange?.(clearedData, get());\n formMethods.reset(clearedData);\n return newData;\n }\n\n set({ loading: false, values: newData });\n get().onChange?.(newData, get());\n formMethods.reset(newData); //reset with saved data to clear dirty state\n get().onClose?.(newData);\n return newData;\n }\n\n if (keepOpen) {\n const keyName = get()?.uniqueKeyField || 'id';\n const clearedData = { ...data };\n delete clearedData[keyName];\n set({ loading: false, values: clearedData });\n formMethods.reset(clearedData);\n get().onChange?.(clearedData, get());\n return data;\n }\n\n set({ loading: false, values: data });\n formMethods.reset(data); //reset with saved data to clear dirty state\n get().onChange?.(data, get());\n get().onClose?.(data);\n\n return data;\n }\n } catch (e) {\n const errorMessage = (e as Error)?.message ?? e;\n set({ error: errorMessage, loading: false });\n get().onError?.(errorMessage, get());\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: (data?: any) => {\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(data);\n } else {\n setState('opened', false);\n }\n }\n } else {\n if (onClose) {\n onClose(data);\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, Switch, 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 getState,\n keepOpen,\n onClose,\n request,\n save,\n saveButtonProps,\n saveButtonTitle,\n setState,\n showKeepOpenSwitch,\n } = useFormerStore((state) => ({\n buttonAreaGroupProps: state.layout?.buttonAreaGroupProps,\n closeButtonProps: state.layout?.closeButtonProps,\n closeButtonTitle: state.layout?.closeButtonTitle,\n dirty: state.dirty,\n getState: state.getState,\n keepOpen: state.keepOpen,\n onClose: state.onClose,\n request: state.request,\n save: state.save,\n saveButtonProps: state.layout?.saveButtonProps,\n saveButtonTitle: state.layout?.saveButtonTitle,\n setState: state.setState,\n showKeepOpenSwitch: state.layout?.showKeepOpenSwitch,\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(getState('values'));\n }}\n >\n {closeButtonTitle || 'Close'}\n </Button>\n )}\n {showKeepOpenSwitch && (\n <Switch\n checked={keepOpen}\n label=\"Keep Open\"\n onChange={(event) => setState('keepOpen', event.currentTarget.checked)}\n />\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 ,setState} = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderBottom: state.layout?.renderBottom,\n setState: state.setState,\n }));\n\n if (renderBottom) {\n return renderBottom(\n <FormerButtonArea />,\n opened ?? false,\n getState('onClose') ?? (() => {setState('opened', false)}),\n getState('onOpen') ?? (() => {setState('opened', true)}),\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,setState } = useFormerStore((state) => ({\n buttonArea: state.layout?.buttonArea,\n getState: state.getState,\n opened: state.opened,\n renderTop: state.layout?.renderTop,\n setState: state.setState,\n }));\n\n if (renderTop) {\n return renderTop(\n <FormerButtonArea />,\n opened ?? false,\n getState('onClose') ?? (() => {setState('opened', false)}),\n getState('onOpen') ?? (() => {setState('opened', true)}),\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 getAllState,\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 getAllState: state.getAllState,\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?.(getState('values'));\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, getAllState());\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, getAllState, 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(\n <FormerLayout>{props.children}</FormerLayout>,\n opened ?? false,\n onClose ??\n (() => {\n setState('opened', false);\n }),\n onOpen ??\n (() => {\n setState('opened', true);\n }),\n getState\n )\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 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 const text = await response.text();\n if (text && text.length > 4) {\n throw new Error(`${text}`);\n }\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as unknown;\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 const text = await response.text();\n if (text && text.length > 4) {\n throw new Error(`${text}`);\n }\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n return data as unknown;\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 type { FieldValues } from 'react-hook-form';\n\nimport { useState } from 'react';\n\nimport type { FormerProps } from './Former.types';\n\nexport type UseFormerStateProps<T extends FieldValues = FieldValues> = Pick<\n FormerProps<T>,\n 'onChange' | 'onClose' | 'opened' | 'primeData' | 'request' | 'values'\n>;\n\nexport const useFormerState = <T extends FieldValues = FieldValues>(\n options?: Partial<UseFormerStateProps<T>>\n) => {\n const [state, setState] = useState<UseFormerStateProps<T>>({\n onChange: options?.onChange,\n onClose: options?.onClose ?? (() => setState((cv) => ({ ...cv, opened: false }))),\n opened: options?.opened ?? false,\n primeData: options?.primeData ?? options?.values,\n request: options?.request ?? 'insert',\n values: options?.values,\n });\n\n const updateState = (updates: Partial<UseFormerStateProps<T>>) => {\n setState((prev) => ({ ...prev, ...updates }));\n };\n\n const { onChange, onClose, opened, ...formerProps } = state;\n\n return {\n former: { ...formerProps, onChange },\n formerWrapper: { onClose, opened } as {\n onClose: Required<UseFormerStateProps<T>>['onClose'];\n opened: Required<UseFormerStateProps<T>>['opened'];\n },\n open: (request: UseFormerStateProps<T>['request'], data: UseFormerStateProps<T>['values']) => {\n setState((cv) => ({ ...cv, opened: true, primeData: data, request, values: data }));\n },\n updateState,\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","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","/**\n * @license React\n * use-sync-external-store-shim.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 = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.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 is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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 = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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 is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import { get, set } from 'idb-keyval';\n\nimport type { GlobalState } from './GlobalStateStore.types';\n\nconst STORAGE_KEY = 'APP_GLO';\n\nconst SKIP_PATHS = new Set([\n 'app.controls',\n 'initialized',\n 'session.connected',\n 'session.error',\n 'session.loading',\n]);\n\nconst shouldSkipPath = (path: string): boolean => {\n return SKIP_PATHS.has(path);\n};\n\nconst filterState = (state: unknown, prefix = ''): unknown => {\n if (typeof state === 'function') {\n return undefined;\n }\n\n if (state === null || typeof state !== 'object') {\n return state;\n }\n\n if (Array.isArray(state)) {\n return state.map((item, idx) => filterState(item, `${prefix}[${idx}]`));\n }\n\n const filtered: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(state)) {\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (shouldSkipPath(path) || typeof value === 'function') {\n continue;\n }\n\n filtered[key] = filterState(value, path);\n }\n\n return filtered;\n};\n\nasync function loadStorage(): Promise<Partial<GlobalState>> {\n const result: Partial<GlobalState> = {};\n const keys: (keyof GlobalState)[] = ['layout', 'navigation', 'owner', 'program', 'session', 'user'];\n\n for (const key of keys) {\n const storageKey = `${STORAGE_KEY}:${key}`;\n\n // Always use localStorage for session\n if (key === 'session') {\n try {\n if (typeof localStorage !== 'undefined') {\n const data = localStorage.getItem(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from localStorage:`, e);\n }\n continue;\n }\n\n try {\n if (typeof indexedDB !== 'undefined') {\n const data = await get(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n continue;\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from IndexedDB, falling back to localStorage:`, e);\n }\n\n try {\n if (typeof localStorage !== 'undefined') {\n const data = localStorage.getItem(storageKey);\n if (data) {\n result[key] = JSON.parse(data);\n }\n }\n } catch (e) {\n console.error(`Failed to load ${key} from localStorage:`, e);\n }\n }\n\n return result;\n}\n\nasync function saveStorage(state: GlobalState): Promise<void> {\n const keys: (keyof GlobalState)[] = ['layout', 'navigation', 'owner', 'program', 'session', 'user'];\n\n for (const key of keys) {\n const storageKey = `${STORAGE_KEY}:${key}`;\n const filtered = filterState(state[key], key);\n const serialized = JSON.stringify(filtered);\n\n // Always use localStorage for session\n if (key === 'session') {\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, serialized);\n }\n } catch (e) {\n console.error(`Failed to save ${key} to localStorage:`, e);\n }\n continue;\n }\n\n try {\n if (typeof indexedDB !== 'undefined') {\n await set(storageKey, serialized);\n continue;\n }\n } catch (e) {\n console.error(`Failed to save ${key} to IndexedDB, falling back to localStorage:`, e);\n }\n\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, serialized);\n }\n } catch (e) {\n console.error(`Failed to save ${key} to localStorage:`, e);\n }\n }\n}\n\nexport { loadStorage, saveStorage };\n","import type { StoreApi } from 'zustand';\n\nimport { shallow } from 'zustand/shallow';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\nimport { createStore } from 'zustand/vanilla';\n\nimport type {\n BarState,\n ExtractState,\n GlobalState,\n GlobalStateStoreType,\n LayoutState,\n NavigationState,\n OwnerState,\n ProgramState,\n SessionState,\n UserState,\n} from './GlobalStateStore.types';\n\nimport { loadStorage, saveStorage } from './GlobalStateStore.utils';\n\nconst initialState: GlobalState = {\n initialized: false,\n layout: {\n bottomBar: { open: false },\n leftBar: { open: false },\n rightBar: { open: false },\n topBar: { open: false },\n },\n navigation: {\n menu: [],\n },\n owner: {\n guid: '',\n id: 0,\n name: '',\n },\n program: {\n controls: {},\n environment: 'production',\n guid: '',\n name: '',\n slug: '',\n },\n session: {\n apiURL: '',\n authToken: '',\n connected: true,\n loading: false,\n loggedIn: false,\n },\n user: {\n guid: '',\n username: '',\n },\n};\n\ntype GetState = () => GlobalStateStoreType;\ntype SetState = (\n partial: ((state: GlobalState) => Partial<GlobalState>) | Partial<GlobalState>\n) => void;\n\nconst createProgramSlice = (set: SetState) => ({\n setProgram: (updates: Partial<ProgramState>) =>\n set((state: GlobalState) => ({\n program: { ...state.program, ...updates },\n })),\n});\n\nconst createSessionSlice = (set: SetState) => ({\n setApiURL: (url: string) =>\n set((state: GlobalState) => ({\n session: { ...state.session, apiURL: url },\n })),\n\n setAuthToken: (token: string) =>\n set((state: GlobalState) => ({\n session: { ...state.session, authToken: token },\n })),\n\n setSession: (updates: Partial<SessionState>) =>\n set((state: GlobalState) => ({\n session: { ...state.session, ...updates },\n })),\n});\n\nconst createOwnerSlice = (set: SetState) => ({\n setOwner: (updates: Partial<OwnerState>) =>\n set((state: GlobalState) => ({\n owner: { ...state.owner, ...updates },\n })),\n});\n\nconst createUserSlice = (set: SetState) => ({\n setUser: (updates: Partial<UserState>) =>\n set((state: GlobalState) => ({\n user: { ...state.user, ...updates },\n })),\n});\n\nconst createLayoutSlice = (set: SetState) => ({\n setBottomBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, bottomBar: { ...state.layout.bottomBar, ...updates } },\n })),\n\n setLayout: (updates: Partial<LayoutState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, ...updates },\n })),\n\n setLeftBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, leftBar: { ...state.layout.leftBar, ...updates } },\n })),\n\n setRightBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, rightBar: { ...state.layout.rightBar, ...updates } },\n })),\n\n setTopBar: (updates: Partial<BarState>) =>\n set((state: GlobalState) => ({\n layout: { ...state.layout, topBar: { ...state.layout.topBar, ...updates } },\n })),\n});\n\nconst createNavigationSlice = (set: SetState) => ({\n setCurrentPage: (page: NavigationState['currentPage']) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, currentPage: page },\n })),\n\n setMenu: (menu: NavigationState['menu']) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, menu },\n })),\n\n setNavigation: (updates: Partial<NavigationState>) =>\n set((state: GlobalState) => ({\n navigation: { ...state.navigation, ...updates },\n })),\n});\n\nconst createComplexActions = (set: SetState, get: GetState) => {\n // Internal implementation without lock\n const fetchDataInternal = async (url?: string) => {\n try {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n apiURL: url || state.session.apiURL,\n loading: true,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onFetchSession?.(currentState);\n\n set((state: GlobalState) => ({\n ...state,\n ...result,\n layout: { ...state.layout, ...result?.layout },\n navigation: { ...state.navigation, ...result?.navigation },\n owner: {\n ...state.owner,\n ...result?.owner,\n },\n program: {\n ...state.program,\n ...result?.program,\n updatedAt: new Date().toISOString(),\n },\n session: {\n ...state.session,\n ...result?.session,\n connected: true,\n loading: false,\n },\n user: {\n ...state.user,\n ...result?.user,\n },\n }));\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Load Exception: ${String(e)}`,\n loading: false,\n },\n }));\n }\n };\n\n return {\n fetchData: async (url?: string) => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent fetchData calls\n return withOperationLock(() => fetchDataInternal(url));\n },\n\n isLoggedIn: (): boolean => {\n const session = get().session;\n if (!session.loggedIn || !session.authToken) {\n return false;\n }\n if (session.expiryDate && new Date(session.expiryDate) < new Date()) {\n return false;\n }\n return true;\n },\n\n login: async (authToken?: string, user?: Partial<UserState>) => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent auth operations\n return withOperationLock(async () => {\n try {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n authToken: authToken ?? '',\n expiryDate: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),\n loading: true,\n loggedIn: true,\n },\n user: {\n ...state.user,\n ...user,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onLogin?.(currentState);\n if (result) {\n set((state: GlobalState) => ({\n ...state,\n owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,\n program: result.program ? { ...state.program, ...result.program } : state.program,\n session: result.session ? { ...state.session, ...result.session } : state.session,\n user: result.user ? { ...state.user, ...result.user } : state.user,\n }));\n }\n // Call internal version to avoid nested lock\n await fetchDataInternal();\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Login Exception: ${String(e)}`,\n loading: false,\n loggedIn: false,\n },\n }));\n } finally {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n loading: false,\n },\n }));\n }\n });\n },\n\n logout: async () => {\n // Wait for initialization to complete\n await waitForInitialization();\n\n // Use lock to prevent concurrent auth operations\n return withOperationLock(async () => {\n try {\n set((state: GlobalState) => ({\n ...initialState,\n session: {\n ...initialState.session,\n apiURL: state.session.apiURL,\n expiryDate: undefined,\n loading: true,\n loggedIn: false,\n },\n }));\n\n const currentState = get();\n const result = await currentState.onLogout?.(currentState);\n if (result) {\n set((state: GlobalState) => ({\n ...state,\n owner: result.owner ? { ...state.owner, ...result.owner } : state.owner,\n program: result.program ? { ...state.program, ...result.program } : state.program,\n session: result.session ? { ...state.session, ...result.session } : state.session,\n user: result.user ? { ...state.user, ...result.user } : state.user,\n }));\n }\n // Call internal version to avoid nested lock\n await fetchDataInternal();\n } catch (e) {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n connected: false,\n error: `Logout Exception: ${String(e)}`,\n loading: false,\n },\n }));\n } finally {\n set((state: GlobalState) => ({\n session: {\n ...state.session,\n loading: false,\n },\n }));\n }\n });\n },\n };\n};\n\n// State management flags and locks - must be defined before store creation\nlet isStorageInitialized = false;\nlet initializationPromise: null | Promise<void> = null;\nlet operationLock: Promise<void> = Promise.resolve();\n\n// Helper to wait for initialization - must be defined before store creation\nconst waitForInitialization = async (): Promise<void> => {\n if (initializationPromise) {\n await initializationPromise;\n }\n};\n\n// Helper to ensure async operations run sequentially\nconst withOperationLock = async <T>(operation: () => Promise<T>): Promise<T> => {\n const currentLock = operationLock;\n let releaseLock: () => void;\n\n // Create new lock promise\n operationLock = new Promise<void>((resolve) => {\n releaseLock = resolve;\n });\n\n try {\n // Wait for previous operation to complete\n await currentLock;\n // Run the operation\n return await operation();\n } finally {\n // Release the lock\n releaseLock!();\n }\n};\n\nconst GlobalStateStore = createStore<GlobalStateStoreType>((set, get) => ({\n ...initialState,\n ...createProgramSlice(set),\n ...createSessionSlice(set),\n ...createOwnerSlice(set),\n ...createUserSlice(set),\n ...createLayoutSlice(set),\n ...createNavigationSlice(set),\n ...createComplexActions(set, get),\n}));\n\n// Initialize storage and load saved state\ninitializationPromise = loadStorage()\n .then((state) => {\n // Merge loaded state with initial state\n GlobalStateStore.setState(\n (current) => ({\n ...current,\n ...state,\n initialized: true,\n session: {\n ...current.session,\n ...state.session,\n connected: true,\n loading: false,\n },\n }),\n true // Replace state completely to avoid triggering subscription during init\n );\n })\n .catch((e) => {\n console.error('Error loading storage:', e);\n // Mark as initialized even on error so app doesn't hang\n GlobalStateStore.setState({ initialized: true });\n })\n .finally(() => {\n // Mark initialization as complete\n isStorageInitialized = true;\n initializationPromise = null;\n });\n\n// Subscribe to state changes and persist to storage\n// Only saves after initialization is complete\nGlobalStateStore.subscribe((state) => {\n if (!isStorageInitialized) {\n return;\n }\n\n saveStorage(state).catch((e) => {\n console.error('Error saving storage:', e);\n });\n});\n\nconst createTypeBoundedUseStore = ((store) => (selector) =>\n useStoreWithEqualityFn(store, selector, shallow)) as <S extends StoreApi<unknown>>(\n store: S\n) => {\n (): ExtractState<S>;\n <T>(selector: (state: ExtractState<S>) => T): T;\n};\n\nconst useGlobalStateStore = createTypeBoundedUseStore(GlobalStateStore);\n\nconst setApiURL = (url: string) => {\n GlobalStateStore.getState().setApiURL(url);\n};\n\nconst getApiURL = (): string => {\n return GlobalStateStore.getState().session.apiURL ?? '';\n};\n\nconst getAuthToken = (): string => {\n return GlobalStateStore.getState().session.authToken ?? '';\n};\n\nconst isLoggedIn = (): boolean => {\n return GlobalStateStore.getState().isLoggedIn();\n};\n\nconst setAuthToken = (token: string) => {\n GlobalStateStore.getState().setAuthToken(token);\n};\n\nconst GetGlobalState = (): GlobalStateStoreType => {\n return GlobalStateStore.getState();\n};\n\nexport {\n getApiURL,\n getAuthToken,\n GetGlobalState,\n GlobalStateStore,\n isLoggedIn,\n setApiURL,\n setAuthToken,\n useGlobalStateStore,\n};\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport type { GlobalState, GlobalStateStoreType, ProgramState } from './GlobalStateStore.types';\n\nimport { GetGlobalState, GlobalStateStore } from './GlobalStateStore';\n\ninterface GlobalStateStoreContextValue {\n fetchData: (url?: string) => Promise<void>;\n getState: () => GlobalStateStoreType;\n refetch: () => Promise<void>;\n}\n\nconst GlobalStateStoreContext = createContext<GlobalStateStoreContextValue | null>(null);\n\ninterface GlobalStateStoreProviderProps {\n apiURL?: string;\n autoFetch?: boolean;\n children: ReactNode;\n fetchOnMount?: boolean;\n onFetchSession?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n onLogin?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n onLogout?: (state: Partial<GlobalState>) => Promise<Partial<GlobalState>>;\n program?: Partial<ProgramState>;\n throttleMs?: number;\n}\n\nexport function GlobalStateStoreProvider({\n apiURL,\n autoFetch = true,\n children,\n fetchOnMount = true,\n onFetchSession,\n onLogin,\n onLogout,\n program,\n throttleMs = 0,\n}: GlobalStateStoreProviderProps) {\n const lastFetchTime = useRef<number>(0);\n const fetchInProgress = useRef<boolean>(false);\n const mounted = useRef<boolean>(false);\n\n const throttledFetch = useCallback(\n async (url?: string) => {\n const now = Date.now();\n const timeSinceLastFetch = now - lastFetchTime.current;\n\n if (fetchInProgress.current) {\n return;\n }\n\n if (throttleMs > 0 && timeSinceLastFetch < throttleMs) {\n return;\n }\n\n try {\n fetchInProgress.current = true;\n lastFetchTime.current = now;\n await GlobalStateStore.getState().fetchData(url);\n } finally {\n fetchInProgress.current = false;\n }\n },\n [throttleMs]\n );\n\n const refetch = useCallback(async () => {\n await throttledFetch();\n }, [throttledFetch]);\n\n useEffect(() => {\n if (apiURL) {\n GlobalStateStore.getState().setApiURL(apiURL);\n }\n }, [apiURL]);\n\n useEffect(() => {\n if (program) {\n GlobalStateStore.getState().setProgram(program);\n }\n }, [program]);\n\n useEffect(() => {\n if (onFetchSession) {\n GlobalStateStore.setState({ onFetchSession });\n }\n }, [onFetchSession]);\n\n useEffect(() => {\n if (onLogin) {\n GlobalStateStore.setState({ onLogin });\n }\n }, [onLogin]);\n\n useEffect(() => {\n if (onLogout) {\n GlobalStateStore.setState({ onLogout });\n }\n }, [onLogout]);\n\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n\n if (autoFetch && fetchOnMount) {\n throttledFetch(apiURL).catch((e) => {\n console.error('Failed to fetch on mount:', e);\n });\n }\n }\n }, [apiURL, autoFetch, fetchOnMount, throttledFetch]);\n\n const context = useMemo(() => {\n return {\n fetchData: throttledFetch,\n getState: GetGlobalState,\n refetch,\n };\n }, [throttledFetch, refetch]);\n\n return (\n <GlobalStateStoreContext.Provider value={context}>{children}</GlobalStateStoreContext.Provider>\n );\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useGlobalStateStoreContext(): GlobalStateStoreContextValue {\n const context = useContext(GlobalStateStoreContext);\n if (!context) {\n throw new Error('useGlobalStateStoreContext must be used within GlobalStateStoreProvider');\n }\n return context;\n}\n","function c(n) {\n const o = atob(n), t = new ArrayBuffer(o.length), e = new Uint8Array(t);\n for (let r = 0; r < o.length; r++)\n e[r] = o.charCodeAt(r);\n return new Blob([t]);\n}\nfunction u(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction d(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n var a, i;\n const r = e.result ?? \"\", s = (i = (a = r == null ? void 0 : r.split) == null ? void 0 : a.call(r, \",\")) == null ? void 0 : i[1];\n o(s);\n }, e.onerror = t, e.readAsDataURL(n);\n });\n}\nfunction f(n) {\n return new Promise((o, t) => {\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(new Blob([r]));\n }, e.onerror = t, e.readAsArrayBuffer(n);\n });\n}\nfunction l(n) {\n return decodeURIComponent(\n Array.prototype.map.call(\n atob(n),\n (o) => `%${`00${o.charCodeAt(0).toString(16)}`.slice(-2)}`\n ).join(\"\")\n );\n}\nfunction w(n) {\n return btoa(\n encodeURIComponent(n).replace(\n /%([0-9A-F]{2})/g,\n (o, t) => String.fromCharCode(Number.parseInt(t, 16))\n )\n );\n}\nfunction A(n) {\n return new Promise((o, t) => {\n if (!n) return o(\"\");\n if (typeof n == \"string\")\n return o(n);\n const e = new FileReader();\n e.onload = () => {\n const r = e.result;\n o(r);\n }, e.onerror = t, e.readAsText(n);\n });\n}\nexport {\n A as BlobToString,\n d as FileToBase64,\n f as FileToBlob,\n l as b64DecodeUnicode,\n w as b64EncodeUnicode,\n c as base64ToBlob,\n u as blobToBase64\n};\n//# sourceMappingURL=base64.js.map\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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\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\nexport type GoAPIHeaderKeys = `x-${GoAPIEnum}`;\n\nexport type GoAPIHeaderTypes = GoAPIEnum & string;\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 * 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 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 head.set('Authorization', `Token ${authToken}`);\n } else {\n const token = getAuthToken();\n if (token) {\n head.set('Authorization', `Token ${token}`);\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\nexport { buildGoAPIOperation, getAuthToken, GoAPIHeaders, setAuthToken, setAuthTokenCallback };\n","function getNestedValue(t, l) {\n if (!t || !l || t.includes(\"..\") || t.includes(\"[]\") || /\\[\\s*\\]/.test(t))\n return;\n const o = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (o.length !== 0)\n return o.reduce((c, e) => {\n if (c != null && typeof c == \"object\")\n return c[e];\n }, l);\n}\nfunction setNestedValue(t, l, o) {\n if (!t || !o) return o;\n const c = t.replace(/\\[(\\w+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n if (c.length === 0) return o;\n const e = c.pop();\n let r = o;\n for (let n = 0; n < c.length; n++) {\n const f = c[n], a = c[n + 1] || e, s = /^\\d+$/.test(a);\n (!(f in r) || s && !Array.isArray(r[f]) || !s && typeof r[f] != \"object\") && (r[f] = s ? [] : {}), r = r[f];\n }\n if (/^\\d+$/.test(e) && !Array.isArray(r)) {\n const n = r, f = Math.max(\n ...Object.keys(n).filter((s) => /^\\d+$/.test(s)).map(Number).concat(-1)\n ), a = new Array(Math.max(f + 1, Number(e) + 1));\n Object.keys(n).filter((s) => /^\\d+$/.test(s)).forEach((s) => {\n a[Number(s)] = n[s];\n }), Object.keys(n).forEach((s) => {\n /^\\d+$/.test(s) || (a[s] = n[s]);\n }), Object.keys(n).forEach((s) => delete n[s]), Object.assign(n, a), r = n;\n }\n return r[e] = l, o;\n}\nfunction objectCompare(t, l, o = !1) {\n return !t || !l ? !1 : Object.keys(t).length === Object.keys(l).length && Object.keys(t).every((c) => {\n if (!Object.prototype.hasOwnProperty.call(l, c))\n return !1;\n const e = t[c], r = l[c];\n return o ? Array.isArray(e) && Array.isArray(r) ? e.length === r.length && e.every(\n (n, f) => typeof n == \"object\" && n !== null ? objectCompare(\n n,\n r[f],\n !0\n ) : n === r[f]\n ) : typeof e == \"object\" && typeof r == \"object\" && e !== null && r !== null ? objectCompare(\n e,\n r,\n !0\n ) : e === r : e === r;\n });\n}\nfunction createSelectOptions(t, l = {}) {\n const {\n labelKey: o = \"label\",\n valueKey: c = \"value\"\n } = l;\n return t ? Array.isArray(t) ? t : typeof t != \"object\" ? [] : Object.keys(t).map((e) => ({\n [o]: t[e],\n [c]: e\n })) : [];\n}\nfunction decycle(t, l) {\n const o = /* @__PURE__ */ new WeakMap();\n return function c(e, r) {\n let n, f;\n return l !== void 0 && (e = l(e)), typeof e == \"object\" && e !== null && !(e instanceof Boolean) && !(e instanceof Date) && !(e instanceof Number) && !(e instanceof RegExp) && !(e instanceof String) ? (n = o.get(e), n !== void 0 ? { $ref: n } : (o.set(e, r), Array.isArray(e) ? (f = [], e.forEach(function(a, s) {\n f[s] = c(a, r + \"[\" + s + \"]\");\n })) : (f = {}, Object.keys(e).forEach(function(a) {\n f[a] = c(\n e[a],\n r + \"[\" + JSON.stringify(a) + \"]\"\n );\n })), f)) : e;\n }(t, \"$\");\n}\nfunction retrocycle($) {\n const px = /^\\$(?:\\[(?:\\d+|\"(?:[^\\\\\"\\u0000-\\u001f]|\\\\(?:[\\\\\"\\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\\])*$/;\n return function rez(value) {\n value && typeof value == \"object\" && (Array.isArray(value) ? value.forEach(function(element, i) {\n if (typeof element == \"object\" && element !== null) {\n const path = element.$ref;\n typeof path == \"string\" && px.test(path) ? value[i] = eval(path) : rez(element);\n }\n }) : Object.keys(value).forEach(function(name) {\n const item = value[name];\n if (typeof item == \"object\" && item !== null) {\n const path = item.$ref;\n typeof path == \"string\" && px.test(path) ? value[name] = eval(path) : rez(item);\n }\n }));\n }($), $;\n}\nfunction stringify_json(t) {\n return JSON.stringify(retrocycle(t));\n}\nexport {\n createSelectOptions,\n decycle,\n getNestedValue,\n objectCompare,\n retrocycle,\n setNestedValue,\n stringify_json\n};\n//# sourceMappingURL=object.js.map\n","/* eslint-disable react-refresh/only-export-components */\nimport { type MenuItemProps, type MenuProps } from '@mantine/core';\nimport { getUUID } from '@warkypublic/artemis-kit';\nimport { createSyncStore } from '@warkypublic/zustandsyncstore';\nimport { produce } from 'immer';\nimport { type ReactNode } from 'react';\n\nexport interface MantineBetterMenuInstance {\n id: string;\n items?: Array<MantineBetterMenuInstanceItem>;\n menuProps?: MenuProps;\n renderer?: ReactNode;\n visible: boolean;\n\n x: number;\n y: number;\n}\n\nexport interface MantineBetterMenuInstanceItem extends Partial<MenuItemProps> {\n id?: string;\n isDivider?: boolean;\n items?: Array<MantineBetterMenuInstanceItem>;\n label?: string;\n onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n onClickAsync?: (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<null | 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 ) => 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>(key: K, value: GridlerStoreState[K]) => 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 if (key === undefined || key === null) {\n return undefined;\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\n if (rn && rn >= 0) {\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 const rowBuffer = state.getRowBuffer(row);\n if (state.glideProps?.onCellClicked) {\n state.glideProps?.onCellClicked?.(cell, event);\n }\n if (state.values?.length && state.values?.length > 0) {\n if (state.onChange) {\n state.onChange(state.values);\n }\n } else if (rowBuffer && state.onChange) {\n state.onChange([rowBuffer]);\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<null | number> = useCallback(\n async (key: string) => {\n const colFilters = getState('colFilters');\n if (!key || key === '' || !props.url) {\n return null;\n }\n //console.log('APIAdaptorGoLangv2', { key, 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//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, row, defaultItems);\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' || (id === 'cell' && !row)) {\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 (values: Array<Record<string, unknown>>) => {\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 if (!key) {\n continue;\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\n if (rowIndex >= 0) {\n rowIndexes.push(rowIndex);\n } else {\n const idx = await getRowIndexByKey(key);\n if (idx !== null) {\n rowIndexes.push(idx);\n }\n }\n }\n\n return rowIndexes;\n };\n\n if (values) {\n searchSelection(values).then((rowIndexes) => {\n let rows = CompactSelection.empty();\n rowIndexes.forEach((r) => {\n if (r !== undefined) {\n rows = rows.add(r);\n }\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 const scrollToRowKey = getState('scrollToRowKey');\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 (!firstBuffer) {\n return;\n }\n\n if (firstRow && firstRow > 0 && (currentValues.length ?? 0) === 0) {\n const newValues = [firstBuffer];\n\n const onChange = getState('onChange');\n if (onChange) {\n onChange(newValues);\n } else {\n setState('values', newValues);\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, values]);\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 //console.log('Computer:Scrolling to key:', key);\n getRowIndexByKey?.(key).then((r) => {\n if (r !== undefined) {\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 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\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","ErrorManager","errorInfo","context","report","modifiedReport","reportPromises","reporter","customAPIReporter","payload","response","sentryReporter","Sentry","scope","errorManager","ReactBasicErrorBoundary","Fragment","ErrorBoundaryOptions","GetErrorBoundaryOptions","ReactErrorBoundary","IconExclamationCircle","rem","Group","Button","Paper","Text","Collapse","Code","tm","FormerProvider","useFormerStore","keyName","keyValue","errorMessage","values","keepOpen","formMethods","exit","newdata","errors","savedData","newData","clearedData","request","resolve","reject","id","onClose","onConfirmDelete","primeData","useStoreApi","_onConfirmDelete","newUUID","dirty","setState","FormerButtonArea","buttonAreaGroupProps","closeButtonProps","closeButtonTitle","getState","save","saveButtonProps","saveButtonTitle","showKeepOpenSwitch","disabledSave","Switch","Tooltip","IconDeviceFloppy","FormerLayoutBottom","buttonArea","renderBottom","FormerLayoutTop","renderTop","FormerLayout","disableHTMlForm","getFormMethods","load","loading","loadingOverlayProps","ScrollAreaAutosize","LoadingOverlay","FormerInner","getAllState","onOpen","useFormProps","validate","wrapper","useForm","isDirty","FormProvider","Former","FormerResolveSpecAPI","mode","url","resolveSpecRequest","fetchOptions","text","FormerRestHeadSpecAPI","baseUrl","FormerDialog","former","rest","_onOpen","uniqueKeyField","Drawer","FormerModel","Modal","FormerPopover","Popover","useFormerState","useState","cv","updateState","updates","prev","formerProps","ButtonCtrl","setLoading","IconButtonCtrl","VisuallyHidden","NativeSelectCtrl","control","sid","tooltip","innerProps","Controller","field","formState","createElement","NativeSelect","PasswordInputCtrl","textProps","PasswordInput","SwitchCtrl","TextAreaCtrl","Textarea","TextInputCtrl","isIterable","obj","hasIterableEntries","compareEntries","valueA","valueB","mapA","mapB","compareIterables","iteratorA","iteratorB","nextA","nextB","shallow","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","useSyncExternalStore","withSelector_production","getServerSnapshot","selector","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","createStoreImpl","createState","listeners","partial","replace","nextState","previousState","listener","api","initialState","createStore","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","identity","arg","useStoreWithEqualityFn","equalityFn","slice","STORAGE_KEY","SKIP_PATHS","shouldSkipPath","path","filterState","prefix","idx","loadStorage","storageKey","saveStorage","serialized","createProgramSlice","createSessionSlice","token","createOwnerSlice","createUserSlice","createLayoutSlice","createNavigationSlice","page","menu","createComplexActions","fetchDataInternal","currentState","waitForInitialization","withOperationLock","session","authToken","user","isStorageInitialized","initializationPromise","operationLock","operation","currentLock","releaseLock","GlobalStateStore","current","createTypeBoundedUseStore","store","useGlobalStateStore","setApiURL","getApiURL","getAuthToken","isLoggedIn","setAuthToken","GetGlobalState","GlobalStateStoreContext","createContext","GlobalStateStoreProvider","apiURL","autoFetch","fetchOnMount","onFetchSession","onLogin","onLogout","program","throttleMs","lastFetchTime","fetchInProgress","mounted","throttledFetch","now","timeSinceLastFetch","refetch","useGlobalStateStoreContext","useContext","w","n","t","TOKEN_KEY","buildGoAPIOperation","ops","headers","newops","b64EncodeUnicode","GoAPIHeaders","head","headerlist","distinctOperations","searchValue","callbacks","getNestedValue","l","o","c","MantineBetterMenusStoreProvider","useMantineBetterMenus","s","menuIndex","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","buffers","page_data","p","r","firstPage","upperPage","rowIndex","keyField","rn","found","pageData","rowKey","pPage","clearMode","damageList","colLen","hasPage","rowBuffer","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","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","_Gridler","Gridler"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,30,31,32,33,34,35,36,37,38,42,44]}