@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.es.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.es.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]}