@gridsheet/react-core 1.4.0-alpha.0 → 1.4.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6832 -4512
- package/dist/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js","../constants.ts","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../lib/converters.ts","../formula/evaluator.ts","../formula/functions/__base.ts","../lib/time.ts","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js","../../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js","../parsers/core.ts","../renderers/core.ts","../lib/structs.ts","../store/helpers.ts","../lib/prevention.ts","../lib/table.ts","../formula/solver.ts","../formula/functions/__utils.ts","../formula/functions/add.ts","../formula/functions/minus.ts","../formula/functions/multiply.ts","../formula/functions/divide.ts","../formula/functions/mod.ts","../formula/functions/sum.ts","../formula/functions/concat.ts","../formula/functions/concatenate.ts","../formula/functions/eq.ts","../formula/functions/ne.ts","../formula/functions/gt.ts","../formula/functions/gte.ts","../formula/functions/lt.ts","../formula/functions/lte.ts","../formula/functions/now.ts","../formula/functions/and.ts","../formula/functions/or.ts","../formula/functions/if.ts","../formula/functions/iferror.ts","../formula/functions/not.ts","../formula/functions/count.ts","../formula/functions/countif.ts","../formula/functions/sumif.ts","../formula/functions/vlookup.ts","../formula/functions/hlookup.ts","../formula/functions/log.ts","../formula/functions/log10.ts","../formula/functions/ln.ts","../formula/functions/abs.ts","../formula/functions/product.ts","../formula/functions/rand.ts","../formula/functions/pi.ts","../formula/functions/exp.ts","../formula/functions/radians.ts","../formula/functions/power.ts","../formula/functions/sqrt.ts","../formula/functions/round.ts","../formula/functions/roundup.ts","../formula/functions/rounddown.ts","../formula/functions/sin.ts","../formula/functions/cos.ts","../formula/functions/tan.ts","../formula/functions/asin.ts","../formula/functions/acos.ts","../formula/functions/atan.ts","../formula/functions/atan2.ts","../formula/functions/counta.ts","../formula/functions/average.ts","../formula/functions/max.ts","../formula/functions/min.ts","../formula/functions/len.ts","../formula/functions/lenb.ts","../formula/functions/uminus.ts","../formula/functions/row.ts","../formula/functions/col.ts","../formula/mapping.ts","../store/index.ts","../lib/virtualization.ts","../store/actions.ts","../lib/clipboard.ts","../lib/input.ts","../components/SheetProvider.tsx","../lib/palette.ts","../components/hooks.ts","../components/Fixed.tsx","../components/Editor.tsx","../components/PluginBase.tsx","../components/StoreInitializer.tsx","../components/Resizer.tsx","../components/Emitter.tsx","../components/ContextMenu.tsx","../lib/autofill.ts","../components/Cell.tsx","../components/HeaderCellTop.tsx","../components/HeaderCellLeft.tsx","../components/Tabular.tsx","../styles/minified.ts","../styles/embedder.ts","../components/FormulaBar.tsx","../components/svg/Base.tsx","../components/svg/SearchIcon.tsx","../components/svg/CloseIcon.tsx","../components/SearchBar.tsx","../components/GridSheet.tsx","../renderers/thousand_separator.ts","../renderers/checkbox.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$2\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_PORTAL_TYPE:\n return \"Portal\";\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 }\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_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\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 disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeUnknownElementTypeFrameInDEV(type) {\n if (null == type) return \"\";\n if (\"function\" === typeof type) {\n var prototype = type.prototype;\n return describeNativeComponentFrame(\n type,\n !(!prototype || !prototype.isReactComponent)\n );\n }\n if (\"string\" === typeof type) return describeBuiltInComponentFrame(type);\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return (type = describeNativeComponentFrame(type.render, !1)), type;\n case REACT_MEMO_TYPE:\n return describeUnknownElementTypeFrameInDEV(type.type);\n case REACT_LAZY_TYPE:\n prototype = type._payload;\n type = type._init;\n try {\n return describeUnknownElementTypeFrameInDEV(type(prototype));\n } catch (x) {}\n }\n return \"\";\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\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, self, source, owner, props) {\n self = 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 !== self ? self : 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.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self\n ) {\n if (\n \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE$1 ||\n void 0 !== type.getModuleId))\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], type);\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, type);\n } else {\n children = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n children +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (isStaticChildren = \"null\")\n : isArrayImpl(type)\n ? (isStaticChildren = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((isStaticChildren =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (children =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (isStaticChildren = typeof type);\n console.error(\n \"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",\n isStaticChildren,\n children\n );\n }\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(type, children, self, source, getOwner(), maybeKey);\n }\n function validateChildKeys(node, parentType) {\n if (\n \"object\" === typeof node &&\n node &&\n node.$$typeof !== REACT_CLIENT_REFERENCE\n )\n if (isArrayImpl(node))\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n isValidElement(child) && validateExplicitKey(child, parentType);\n }\n else if (isValidElement(node))\n node._store && (node._store.validated = 1);\n else if (\n (null === node || \"object\" !== typeof node\n ? (i = null)\n : ((i =\n (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||\n node[\"@@iterator\"]),\n (i = \"function\" === typeof i ? i : null)),\n \"function\" === typeof i &&\n i !== node.entries &&\n ((i = i.call(node)), i !== node))\n )\n for (; !(node = i.next()).done; )\n isValidElement(node.value) &&\n validateExplicitKey(node.value, parentType);\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function validateExplicitKey(element, parentType) {\n if (\n element._store &&\n !element._store.validated &&\n null == element.key &&\n ((element._store.validated = 1),\n (parentType = getCurrentComponentErrorInfo(parentType)),\n !ownerHasKeyUseWarning[parentType])\n ) {\n ownerHasKeyUseWarning[parentType] = !0;\n var childOwner = \"\";\n element &&\n null != element._owner &&\n element._owner !== getOwner() &&\n ((childOwner = null),\n \"number\" === typeof element._owner.tag\n ? (childOwner = getComponentNameFromType(element._owner.type))\n : \"string\" === typeof element._owner.name &&\n (childOwner = element._owner.name),\n (childOwner = \" It was passed a child from \" + childOwner + \".\"));\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = function () {\n var stack = describeUnknownElementTypeFrameInDEV(element.type);\n prevGetCurrentStack && (stack += prevGetCurrentStack() || \"\");\n return stack;\n };\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n parentType,\n childOwner\n );\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function getCurrentComponentErrorInfo(parentType) {\n var info = \"\",\n owner = getOwner();\n owner &&\n (owner = getComponentNameFromType(owner.type)) &&\n (info = \"\\n\\nCheck the render method of `\" + owner + \"`.\");\n info ||\n ((parentType = getComponentNameFromType(parentType)) &&\n (info =\n \"\\n\\nCheck the top-level render call using <\" + parentType + \">.\"));\n return info;\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 Symbol.for(\"react.provider\");\n var 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_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE$2 = 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 assign = Object.assign,\n REACT_CLIENT_REFERENCE$1 = Symbol.for(\"react.client.reference\"),\n isArrayImpl = Array.isArray,\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var didWarnAboutKeySpread = {},\n ownerHasKeyUseWarning = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n return jsxDEVImpl(type, config, maybeKey, !1, source, self);\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n return jsxDEVImpl(type, config, maybeKey, !0, source, self);\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","const IMG_BASE64 = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n\nexport const DUMMY_IMG = (typeof window === 'undefined' ? null : document.createElement('img')) as HTMLImageElement;\n\nif (DUMMY_IMG) {\n DUMMY_IMG.src = IMG_BASE64;\n}\n\nexport const HISTORY_LIMIT = 10;\n\nexport const DEFAULT_HEIGHT = 24;\nexport const DEFAULT_WIDTH = 90;\n\nexport const SHEET_HEIGHT = 500;\nexport const SHEET_WIDTH = 1000;\n\nexport const HEADER_HEIGHT = 24;\nexport const HEADER_WIDTH = 50;\n\nexport const MIN_WIDTH = 5;\nexport const MIN_HEIGHT = 5;\n\nexport const OVERSCAN_X = 5;\nexport const OVERSCAN_Y = 10;\n\nexport const DEFAULT_ALPHABET_CACHE_SIZE = 1000;\n\nexport class Special {\n public name: string;\n constructor(name: string) {\n this.name = name;\n }\n}\n\nexport const SECONDS_IN_DAY = 86400;\nexport const FULLDATE_FORMAT_UTC = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import type { Address, PointType } from '../types';\nimport { DEFAULT_ALPHABET_CACHE_SIZE } from '../constants';\n\nconst ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nconst N2C_CACHE = new Map<number, string>();\nconst C2N_CACHE = new Map<string, number>();\n\nconst getColumnLetterFromNumber = (key: number, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): string => {\n const cached = N2C_CACHE.get(--key);\n if (cached != null) {\n return cached;\n }\n if (key === 0) {\n return '';\n }\n let num = key;\n let result = '';\n do {\n result = ALPHABET[--num % 26] + result;\n num = Math.floor(num / 26);\n } while (num > 0);\n\n N2C_CACHE.set(key, result);\n const it = N2C_CACHE.keys();\n for (let st = it.next(); N2C_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n N2C_CACHE.delete(st.value);\n }\n return result;\n};\n\nconst getNumberFromColumnLetter = (key: string, cacheSize = DEFAULT_ALPHABET_CACHE_SIZE): number => {\n const cached = C2N_CACHE.get(key);\n if (cached != null) {\n return cached;\n }\n if (key === '') {\n return 0;\n }\n const alpha = key;\n let result = 0;\n for (let digit = 0; digit < alpha.length; digit++) {\n const a = alpha[alpha.length - digit - 1];\n const num = ALPHABET.indexOf(a) + 1;\n result += ALPHABET.length ** digit * num;\n }\n C2N_CACHE.set(key, result);\n const it = C2N_CACHE.keys();\n for (let st = it.next(); C2N_CACHE.size > cacheSize; st = it.next()) {\n // @ts-ignore\n C2N_CACHE.delete(st.value);\n }\n return result;\n};\n\nexport const x2c = (x: number): string => {\n if (x === 0) {\n return '';\n }\n const c = getColumnLetterFromNumber(x + 1);\n return x < 0 ? `$${c}` : c;\n};\n\nexport const c2x = (col: string, absolute = false): number => {\n const n = getNumberFromColumnLetter(col);\n return absolute ? -n : n;\n};\n\nexport const y2r = (y: number) => {\n if (y === 0) {\n return '';\n }\n return y < 0 ? `$${y}` : String(y);\n};\n\nexport const r2y = (row: number | string, absolute = false) => {\n if (typeof row === 'string') {\n row = parseInt(row, 10);\n }\n return absolute ? -row : row;\n};\n\nexport const p2a = ({ y, x }: PointType) => {\n return `${x2c(x)}${y2r(y)}`;\n};\n\nconst restoreDoubleQuote = (text: string) => text.replace(/\\x00/g, '\"');\n\nexport const tsv2matrix = (tsv: string): string[][] => {\n tsv = tsv.replace(/\"\"/g, '\\x00');\n const rows: string[][] = [[]];\n let row = rows[0];\n let entering = false;\n let word = '';\n for (let i = 0; i < tsv.length; i++) {\n const s = tsv[i];\n if (s === '\\n' && !entering) {\n row.push(restoreDoubleQuote(word));\n word = '';\n row = [];\n rows.push(row);\n continue;\n }\n if (s === '\\t') {\n row.push(restoreDoubleQuote(word));\n word = '';\n continue;\n }\n if (s === '\"' && !entering && word === '') {\n entering = true;\n continue;\n }\n if (s === '\"' && entering) {\n entering = false;\n continue;\n }\n word += s;\n }\n if (word) {\n row.push(restoreDoubleQuote(word));\n }\n return rows;\n};\n\nexport const a2p = (address: Address): PointType => {\n const m = address.match(/(\\$)?([A-Z]*)(\\$)?([0-9]*)/);\n if (m == null) {\n console.error('invalid address', address);\n return { y: 1, x: 1 };\n }\n const [, absoluteCol, col, absoluteRow, row] = m.slice();\n return { y: r2y(row, !!absoluteRow) || 0, x: c2x(col, !!absoluteCol) || 0 };\n};\n\nexport const grantAddressAbsolute = (address: Address, absCol: boolean, absRow: boolean) => {\n const m = address.match(/([A-Z]*)([0-9]*)/);\n if (m == null) {\n return;\n }\n const [, col, row] = m.slice();\n return `${absCol ? '$' : ''}${col}${absRow ? '$' : ''}${row}`;\n};\n\nexport const stripAddressAbsolute = (address: Address) => {\n return address.replace(/\\$/g, '');\n};\n","import { a2p } from '../lib/converters';\nimport { Table } from '../lib/table';\n\ntype EvaluateProps = {\n table: Table;\n};\n\n// strip sharp and dollars\nconst getId = (idString: string, stripAbsolute = true) => {\n let id = idString.slice(1);\n if (stripAbsolute && id.startsWith('$')) {\n id = id.slice(1);\n }\n if (stripAbsolute && id.endsWith('$')) {\n id = id.slice(0, -1);\n }\n return id;\n};\n\nexport class FormulaError {\n public code: string;\n public message: string;\n public error?: Error;\n constructor(code: string, message: string, error?: Error) {\n this.code = code;\n this.message = message;\n this.error = error;\n }\n}\n\nclass Entity<T = any> {\n public value: T;\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class ValueEntity extends Entity {\n public evaluate() {\n return this.value;\n }\n}\n\nexport class UnreferencedEntity extends Entity {\n public evaluate() {\n throw new FormulaError('#REF!', `Reference does not exist.`);\n }\n}\n\nexport class InvalidRefEntity extends Entity<string> {\n public evaluate() {\n throw new FormulaError('#NAME?', `Invalid ref: ${this.value}`);\n }\n}\n\nexport class RefEntity extends Entity<string> {\n constructor(value: string) {\n super(value);\n }\n public stringify() {\n return this.value.toUpperCase();\n }\n\n private parse(table: Table): {\n table: Table;\n ref: string;\n sheetName: string;\n } {\n if (this.value.indexOf('!') !== -1) {\n const [rawSheetName, ref] = this.value.split('!');\n const sheetName = stripSheetName(rawSheetName);\n return {\n table: table.getTableBySheetName(sheetName),\n ref: ref.toUpperCase(),\n sheetName,\n };\n }\n return {\n table,\n ref: this.value.toUpperCase(),\n sheetName: stripSheetName(table.sheetName),\n };\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = this.parse(table);\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n const { y, x } = a2p(parsed.ref);\n return parsed.table.trim({ top: y, left: x, bottom: y, right: x });\n }\n public id(table: Table) {\n const parsed = this.parse(table);\n if (parsed.table == null) {\n return this.value;\n }\n const id = parsed.table.getIdByAddress(parsed.ref);\n if (id) {\n if (parsed.table === table) {\n return id;\n }\n return `#${parsed.table.sheetId}!${id}`;\n }\n\n return this.value;\n }\n}\n\nexport class RangeEntity extends Entity<string> {\n private parse(table: Table): {\n table: Table;\n refs: string[];\n sheetName: string;\n } {\n const rawRefs = this.value.split(':');\n const refs: string[] = [];\n let sheetName = '';\n for (let i = 0; i < rawRefs.length; i++) {\n const ref = rawRefs[i];\n if (ref.indexOf('!') !== -1) {\n const [rawSheetName, rawRef] = ref.split('!');\n refs.push(rawRef.toUpperCase());\n if (i === 0) {\n sheetName = stripSheetName(rawSheetName);\n table = table.getTableBySheetName(sheetName);\n }\n if (table == null) {\n return { table, refs, sheetName };\n }\n } else {\n refs.push(ref);\n }\n }\n return { table, refs, sheetName: sheetName || table.sheetName };\n }\n public stringify() {\n return this.value.toUpperCase();\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = this.parse(table);\n if (parsed.table == null) {\n throw new FormulaError('#REF!', `Unknown sheet: ${parsed.sheetName}`);\n }\n const area = parsed.table.rangeToArea(parsed.refs.join(':'));\n return parsed.table.trim(area);\n }\n public idRange(table: Table) {\n const parsed = this.parse(table);\n if (parsed.table == null) {\n return this.value;\n }\n const range = parsed.refs.map((ref) => parsed.table.getIdByAddress(ref)).join(':');\n\n if (parsed.table === table) {\n return range;\n }\n return `#${parsed.table.sheetId}!${range}`;\n }\n}\n\nexport class IdEntity extends Entity<string> {\n private parse(table: Table): { table: Table; id: string } {\n if (this.value.indexOf('!') !== -1) {\n const [tableId, id] = this.value.split('!');\n return { table: table.tables[tableId.slice(1)], id: getId(id, false) };\n }\n return { table, id: getId(this.value, false) };\n }\n public evaluate({ table }: EvaluateProps) {\n const parsed = this.parse(table);\n const { y, x } = parsed.table.getPointById(parsed.id);\n const [absY, absX] = [Math.abs(y), Math.abs(x)];\n return parsed.table.trim({\n top: absY,\n left: absX,\n bottom: absY,\n right: absX,\n });\n }\n public ref(table: Table, slideY = 0, slideX = 0) {\n const parsed = this.parse(table);\n const address = parsed.table.getAddressById(parsed.id, slideY, slideX);\n if (parsed.table.sheetId === table.sheetId) {\n return address;\n }\n return `${parsed.table.sheetPrefix()}${address}`;\n }\n public slide(table: Table, slideY = 0, slideX = 0) {\n const address = this.ref(table, slideY, slideX);\n if (address == null || address.length < 2) {\n return '#REF!';\n }\n return table.getIdByAddress(address);\n }\n}\n\nexport class IdRangeEntity extends Entity<string> {\n private parse(table: Table): { table: Table; ids: string[] } {\n const range = this.value;\n if (range.indexOf('!') !== -1) {\n const [sheetId, idRange] = range.split('!');\n table = table.tables[sheetId.slice(1)];\n return { table, ids: idRange.split(':') };\n }\n return { table, ids: range.split(':') };\n }\n\n public evaluate({ table }: EvaluateProps): Table {\n const parsed = this.parse(table);\n const [p1, p2] = parsed.ids.map((id) => getId(id)).map((id) => parsed.table.getPointById(id));\n const [top, left, bottom, right] = [\n p1.y,\n p1.x,\n p2.y || parsed.table.getNumRows(),\n p2.x || parsed.table.getNumCols(),\n ];\n return parsed.table.trim({ top, left, bottom, right });\n }\n public range(table: Table, slideY = 0, slideX = 0) {\n const parsed = this.parse(table);\n const range = parsed.ids\n .map((id) => getId(id, false))\n .map((id) => parsed.table.getAddressById(id, slideY, slideX))\n .join(':');\n if (parsed.table.sheetId === table.sheetId) {\n return range;\n }\n return `${parsed.table.sheetPrefix()}${range}`;\n }\n\n public slide(table: Table, slideY = 0, slideX = 0) {\n const range = this.range(table, slideY, slideX);\n return new RangeEntity(range).idRange(table);\n }\n}\n\nexport class FunctionEntity {\n public args: Expression[];\n public name: string;\n public precedence: number;\n constructor(name: string, precedence = 0, args: Expression[] = []) {\n this.name = name;\n this.precedence = precedence;\n this.args = args;\n }\n\n public evaluate({ table }: EvaluateProps): any {\n const name = this.name.toLowerCase();\n const Func = table.getFunction(name);\n if (Func == null) {\n throw new FormulaError('#NAME?', `Unknown function: ${name}`);\n }\n const func = new Func({ args: this.args, table });\n return func.call();\n }\n}\n\nexport type Expression =\n | ValueEntity\n | RefEntity\n | RangeEntity\n | IdEntity\n | IdRangeEntity\n | FunctionEntity\n | UnreferencedEntity\n | InvalidRefEntity;\n\nconst ZERO = new ValueEntity(0);\n\nexport type TokenType =\n | 'VALUE'\n | 'REF'\n | 'RANGE'\n | 'ID'\n | 'ID_RANGE'\n | 'FUNCTION'\n | 'PREFIX_OPERATOR'\n | 'INFIX_OPERATOR'\n | 'POSTFIX_OPERATOR'\n | 'OPEN'\n | 'CLOSE'\n | 'COMMA'\n | 'SPACE'\n | 'UNREFERENCED'\n | 'INVALID_REF';\n\nconst INFIX_FUNCTION_NAME_MAP = {\n '+': 'add',\n '-': 'minus',\n '/': 'divide',\n '*': 'multiply',\n '^': 'power',\n '&': 'concat',\n '=': 'eq',\n '<>': 'ne',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '<=': 'lte',\n};\n\nconst PREFIX_FUNCTION_NAME_MAP = {\n '-': 'uminus',\n};\n\nconst WHITESPACE_CHARS = new Set([' ', '\\n', '\\r', '\\t', '\\f']);\nconst SPECIAL_CHARS = new Set([...WHITESPACE_CHARS, '+', '-', '/', '*', '^', '&', '=', '<', '>', ')', ',', '%']);\n\nexport class Token {\n type: TokenType;\n entity: any;\n precedence: number;\n\n constructor(type: TokenType, entity: any, precedence = 0) {\n this.type = type;\n this.entity = entity;\n this.precedence = precedence;\n }\n\n public length() {\n if (this.type === 'VALUE' && typeof this.entity === 'string') {\n return this.entity.length + 2;\n }\n return new String(this.entity).length;\n }\n\n public stringify() {\n if (this.type === 'VALUE') {\n if (typeof this.entity === 'string') {\n return `\"${this.entity}\"`;\n }\n if (typeof this.entity === 'boolean') {\n return this.entity ? 'TRUE' : 'FALSE';\n }\n }\n return this.entity as string;\n }\n\n public convert() {\n switch (this.type) {\n case 'VALUE':\n return new ValueEntity(this.entity);\n\n case 'ID':\n return new IdEntity(this.entity as string);\n\n case 'ID_RANGE':\n return new IdRangeEntity(this.entity as string);\n\n case 'REF':\n return new RefEntity(this.entity as string);\n\n case 'RANGE':\n return new RangeEntity(this.entity as string);\n\n case 'INFIX_OPERATOR': {\n const name = INFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof INFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'PREFIX_OPERATOR': {\n const name = PREFIX_FUNCTION_NAME_MAP[this.entity as keyof typeof PREFIX_FUNCTION_NAME_MAP];\n return new FunctionEntity(name, this.precedence);\n }\n case 'FUNCTION':\n return new FunctionEntity(this.entity as string);\n\n case 'UNREFERENCED':\n return new UnreferencedEntity(this.entity);\n\n case 'INVALID_REF':\n return new InvalidRefEntity(this.entity as string);\n }\n }\n}\n\nconst isWhiteSpace = (char: string) => {\n return WHITESPACE_CHARS.has(char);\n};\n\nconst TOKEN_OPEN = new Token('OPEN', '('),\n TOKEN_CLOSE = new Token('CLOSE', ')'),\n TOKEN_COMMA = new Token('COMMA', ','),\n TOKEN_ADD = new Token('INFIX_OPERATOR', '+', 3),\n TOKEN_MINUS = new Token('INFIX_OPERATOR', '-', 3),\n TOKEN_UMINUS = new Token('PREFIX_OPERATOR', '-', 6),\n TOKEN_DIVIDE = new Token('INFIX_OPERATOR', '/', 4),\n TOKEN_MULTIPLY = new Token('INFIX_OPERATOR', '*', 4),\n TOKEN_POWER = new Token('INFIX_OPERATOR', '^', 5),\n TOKEN_CONCAT = new Token('INFIX_OPERATOR', '&', 4),\n TOKEN_GTE = new Token('INFIX_OPERATOR', '>=', 2),\n TOKEN_GT = new Token('INFIX_OPERATOR', '>', 2),\n TOKEN_LTE = new Token('INFIX_OPERATOR', '<=', 2),\n TOKEN_LT = new Token('INFIX_OPERATOR', '<', 2),\n TOKEN_NE = new Token('INFIX_OPERATOR', '<>', 1),\n TOKEN_EQ = new Token('INFIX_OPERATOR', '=', 1);\n\nconst BOOLS: { [s: string]: boolean } = { ['true']: true, ['false']: false };\nexport class Lexer {\n private index: number;\n private formula: string;\n public tokens: Token[] = [];\n public foreign: boolean = false;\n\n constructor(formula: string) {\n this.formula = formula;\n this.index = 0;\n this.tokens = [];\n }\n\n private isWhiteSpace() {\n return isWhiteSpace(this.formula[this.index]);\n }\n\n private next(base = 1) {\n this.index += base;\n }\n\n private get(base = 0) {\n const c = this.formula[this.index + base];\n return c;\n }\n\n private getToken(base = 0) {\n return this.tokens[this.tokens.length + base];\n }\n\n public getTokenIndexByCharPosition(pos: number) {\n let start = 0,\n end = 0;\n\n for (let i = 0; i < this.tokens.length; i++) {\n const token = this.tokens[i];\n end = start + token.length();\n if (start <= pos && pos <= end) {\n return i;\n }\n start = end;\n }\n return -1;\n }\n\n public getTokenPositionRange(index: number, slide = 1): [number, number] {\n let start = 0,\n end = 0;\n for (let i = 0; i < index; i++) {\n start = end;\n end += this.tokens[i].length();\n }\n return [start + slide, end + slide];\n }\n\n public stringify() {\n return this.tokens.map((t) => t.stringify()).join('');\n }\n\n public stringifyToId(table: Table, slideY = 0, slideX = 0) {\n return this.tokens\n .map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n\n case 'ID':\n return new IdEntity(t.entity as string).slide(table, slideY, slideX);\n\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).slide(table, slideY, slideX);\n\n case 'REF':\n return new RefEntity(t.entity as string).id(table);\n\n case 'RANGE':\n return new RangeEntity(t.entity as string).idRange(table);\n }\n return t.entity;\n })\n .join('');\n }\n\n public stringifyToRef(table: Table) {\n return this.tokens\n .map((t) => {\n switch (t.type) {\n case 'VALUE':\n if (typeof t.entity === 'number' || typeof t.entity === 'boolean') {\n return t.entity;\n }\n return `\"${t.entity}\"`;\n case 'ID':\n return new IdEntity(t.entity as string).ref(table);\n case 'ID_RANGE':\n return new IdRangeEntity(t.entity as string).range(table);\n }\n return t.entity;\n })\n .join('');\n }\n\n public tokenize() {\n while (this.index <= this.formula.length) {\n this.skipSpaces();\n let char = this.get();\n this.next();\n switch (char) {\n case undefined:\n return;\n case '(':\n this.tokens.push(TOKEN_OPEN);\n continue;\n case ')':\n this.tokens.push(TOKEN_CLOSE);\n continue;\n case ',':\n this.tokens.push(TOKEN_COMMA);\n continue;\n case '+':\n this.tokens.push(TOKEN_ADD);\n continue;\n case '-': {\n const prev1 = this.getToken(-1)?.type;\n const prev2 = this.getToken(-2)?.type;\n if (prev1 === 'INFIX_OPERATOR' || (prev1 === 'SPACE' && prev2 === 'INFIX_OPERATOR')) {\n this.tokens.push(TOKEN_UMINUS);\n } else {\n this.tokens.push(TOKEN_MINUS);\n }\n continue;\n }\n case '/':\n this.tokens.push(TOKEN_DIVIDE);\n continue;\n case '*':\n this.tokens.push(TOKEN_MULTIPLY);\n continue;\n case '^':\n this.tokens.push(TOKEN_POWER);\n continue;\n case '&':\n this.tokens.push(TOKEN_CONCAT);\n continue;\n case '=':\n this.tokens.push(TOKEN_EQ);\n continue;\n case '>':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_GTE);\n continue;\n }\n this.tokens.push(TOKEN_GT);\n continue;\n case '<':\n if (this.get() === '=') {\n this.next();\n this.tokens.push(TOKEN_LTE);\n continue;\n }\n if (this.get() === '>') {\n this.next();\n this.tokens.push(TOKEN_NE);\n continue;\n }\n this.tokens.push(TOKEN_LT);\n continue;\n case '\"': {\n const buf = this.getString('\"');\n this.tokens.push(new Token('VALUE', buf));\n continue;\n }\n case \"'\": {\n const buf = this.getString(\"'\");\n char = `'${buf}'`;\n break;\n }\n case '!': {\n this.foreign = true;\n break;\n // not continue\n }\n case '%': {\n this.tokens.push(new Token('POSTFIX_OPERATOR', '%', 4));\n continue;\n }\n } // switch end\n let buf = char;\n\n while (true) {\n const c = this.get();\n if (c === '(') {\n this.tokens.push(new Token('FUNCTION', buf), TOKEN_OPEN);\n this.next();\n break;\n }\n if (c == null || SPECIAL_CHARS.has(c)) {\n if (buf.length === 0) {\n break;\n }\n if (buf.match(/^[+-]?(\\d*[.])?\\d+$/)) {\n this.tokens.push(new Token('VALUE', parseFloat(buf)));\n } else {\n const bool = BOOLS[buf.toLowerCase()];\n if (bool != null) {\n this.tokens.push(new Token('VALUE', bool));\n } else if (buf.startsWith('#')) {\n if (buf === '#REF!') {\n this.tokens.push(new Token('UNREFERENCED', buf));\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('ID_RANGE', buf));\n } else {\n this.tokens.push(new Token('ID', buf));\n }\n } else if (buf.indexOf(':') !== -1) {\n this.tokens.push(new Token('RANGE', buf));\n } else {\n if (isNaN(buf[buf.length - 1] as unknown as number)) {\n this.tokens.push(new Token('INVALID_REF', buf));\n } else {\n this.tokens.push(new Token('REF', buf));\n }\n }\n }\n break;\n }\n buf += c;\n this.next();\n }\n }\n }\n private skipSpaces() {\n let space: string = '';\n while (this.isWhiteSpace()) {\n space += this.formula[this.index++];\n }\n if (space !== '') {\n this.tokens.push(new Token('SPACE', space));\n }\n }\n\n private getString(quote = '\"') {\n let buf = '';\n\n while (true) {\n const c = this.get();\n this.next();\n if (c == null) {\n break;\n }\n if (c === quote) {\n if (this.get() === quote) {\n // escape\n buf += quote;\n this.next();\n continue;\n } else {\n break;\n }\n } else {\n buf += c;\n }\n }\n return buf;\n }\n}\n\nexport class Parser {\n public index = 0;\n public depth = 0;\n public tokens: Token[];\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n public build() {\n const { expr } = this.parse(false);\n return expr;\n }\n\n private parse(underFunction: boolean) {\n const stack: Expression[] = [];\n let lastOperator: undefined | FunctionEntity;\n\n const complement = (hasNext = false) => {\n if (lastOperator) {\n const outer = stack.pop();\n lastOperator.args.push(outer!);\n }\n return { hasNext, expr: stack.shift() };\n };\n\n while (this.tokens.length > this.index) {\n const token = this.tokens[this.index++];\n if (token.type === 'SPACE') {\n continue;\n }\n if (token.type === 'COMMA') {\n if (!underFunction) {\n throw new FormulaError('#ERROR!', 'Invalid comma');\n }\n return complement(true);\n } else if (\n token.type === 'VALUE' ||\n token.type === 'ID' ||\n token.type === 'ID_RANGE' ||\n token.type === 'REF' ||\n token.type === 'RANGE' ||\n token.type === 'UNREFERENCED' ||\n token.type === 'INVALID_REF'\n ) {\n const expr = token.convert();\n stack.push(expr!);\n } else if (token.type === 'POSTFIX_OPERATOR' && token.entity === '%') {\n const expr = stack.pop();\n if (!expr) {\n throw new FormulaError('#ERROR!', 'Missing expression before %');\n }\n const divideBy100 = new FunctionEntity('divide', 4, [expr, new ValueEntity(100)]);\n stack.push(divideBy100);\n } else if (token.type === 'FUNCTION') {\n this.index++;\n this.depth++;\n const func = token.convert() as FunctionEntity;\n stack.push(func);\n\n while (true) {\n const { expr, hasNext } = this.parse(true);\n if (expr) {\n func.args.push(expr);\n }\n if (!hasNext) {\n break;\n }\n }\n } else if (token.type === 'OPEN') {\n this.depth++;\n const { expr } = this.parse(false);\n stack.push(expr!);\n } else if (token.type === 'CLOSE') {\n if (this.depth-- === 0) {\n throw new FormulaError('#ERROR!', 'Unexpected end paren');\n }\n return complement();\n } else if (token.type === 'INFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n let left = stack.pop();\n if (left == null) {\n if (operator.name === 'minus' || operator.name === 'add') {\n left = ZERO;\n } else {\n throw new FormulaError('#ERROR!', 'Missing left expression');\n }\n }\n\n if (lastOperator == null) {\n operator.args.push(left);\n stack.unshift(operator);\n } else if (operator.precedence > lastOperator.precedence) {\n operator.args.push(left);\n lastOperator.args.push(operator);\n stack.unshift(lastOperator);\n } else {\n const outer = stack.shift();\n operator.args.push(outer!);\n lastOperator.args.push(left);\n stack.unshift(operator);\n }\n lastOperator = operator;\n } else if (token.type === 'PREFIX_OPERATOR') {\n const operator = token.convert() as FunctionEntity;\n if (lastOperator) {\n lastOperator.args.push(operator);\n } else {\n stack.unshift(operator);\n }\n lastOperator = operator;\n }\n }\n return complement();\n }\n}\n\nexport const absolutizeFormula = ({\n value,\n table,\n slideY = 0,\n slideX = 0,\n}: {\n value: any;\n table: Table;\n slideY?: number;\n slideX?: number;\n}) => {\n if (typeof value === 'string' || value instanceof String) {\n if (value.charAt(0) === '=') {\n const lexer = new Lexer(value.substring(1));\n lexer.tokenize();\n return '=' + lexer.stringifyToId(table, slideY, slideX);\n }\n }\n return value;\n};\n\nexport const stripSheetName = (sheetName: string) => {\n if (sheetName.charAt(0) === \"'\") {\n sheetName = sheetName.slice(1);\n }\n if (sheetName.charAt(sheetName.length - 1) === \"'\") {\n sheetName = sheetName.slice(0, -1);\n }\n return sheetName;\n};\n","import { Table } from '../../lib/table';\nimport { Expression } from '../evaluator';\n\nexport type FunctionProps = {\n args: Expression[];\n table: Table;\n};\n\nexport class BaseFunction {\n public example = '_BASE()';\n public helpTexts = [\"Function's description.\"];\n public helpArgs = [{ name: 'value1', description: '' }];\n protected bareArgs: any[];\n protected table: Table;\n\n constructor({ args, table }: FunctionProps) {\n this.bareArgs = args.map((a) => a.evaluate({ table }));\n this.table = table;\n }\n protected validate() {}\n\n public call() {\n this.validate();\n\n // @ts-expect-error main is not defined in BaseFunction\n\n return this.main(...this.bareArgs);\n }\n}\n\nexport type FunctionMapping = { [functionName: string]: typeof BaseFunction };\n","import dayjs from 'dayjs';\n\nexport const BASE_DATE = new Date('2345-01-02T03:04:05Z');\ntype DiffFunction = (date: Date | number, amount: number) => Date;\nconst UNITS = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'] as const;\nconst ADD_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).add(amount, unit).toDate(),\n) as DiffFunction[];\nconst SUB_FNS = UNITS.map(\n (unit) => (date: Date, amount: number) => dayjs(date).subtract(amount, unit).toDate(),\n) as DiffFunction[];\n\ntype Diff = [number, number, number, number, number, number, number];\n\nexport class TimeDelta {\n protected diff: Diff = [0, 0, 0, 0, 0, 0, 0];\n private date1: Date;\n private date2: Date;\n public format: string;\n\n constructor(date1: Date, date2: Date) {\n this.diff = [\n date1.getFullYear() - date2.getFullYear(),\n date1.getMonth() - date2.getMonth(),\n date1.getDate() - date2.getDate(),\n date1.getHours() - date2.getHours(),\n date1.getMinutes() - date2.getMinutes(),\n date1.getSeconds() - date2.getSeconds(),\n date1.getMilliseconds() - date2.getMilliseconds(),\n ];\n this.date1 = date1;\n this.date2 = date2;\n this.format = 'HH:mm:ss';\n }\n public add(date: Date) {\n this.diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return date;\n }\n public sub(date: Date) {\n this.diff.forEach((n, i) => {\n date = SUB_FNS[i](date, n);\n });\n return date;\n }\n\n public stringify(format?: string) {\n if (format == null) {\n format = this.format;\n }\n const tokens = [];\n const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();\n let secs = (this.date1.getTime() - this.date2.getTime()) / 1000;\n for (const divider of [3600, 60]) {\n tokens.push(Math.floor(secs / divider));\n secs %= divider;\n }\n tokens.push(secs, msecs);\n let result = format;\n result = result.replace('HH', String(tokens[0]).padStart(2, '0'));\n result = result.replace('H', String(tokens[0]));\n result = result.replace('mm', String(tokens[1]).padStart(2, '0'));\n result = result.replace('ss', String(tokens[2]).padStart(2, '0'));\n result = result.replace('SSS', String(tokens[3]).padStart(3, '0'));\n result = result.replace('SS', String(tokens[3]).padStart(2, '0').substring(0, 2));\n result = result.replace('S', String(tokens[3]).padStart(1, '0').substring(0, 1));\n return result;\n }\n\n public toJSON() {\n return this.stringify();\n }\n\n public toString() {\n return this.stringify();\n }\n\n static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {\n const diff: Diff = [0, 0, 0, hours, minutes, seconds, milliseconds];\n let date = BASE_DATE;\n diff.forEach((n, i) => {\n date = ADD_FNS[i](date, n);\n });\n return new TimeDelta(date, BASE_DATE);\n }\n}\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","import { CellType } from '../types';\nimport { TimeDelta } from '../lib/time';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\ndayjs.extend(timezone);\ndayjs.extend(utc);\n\ntype Condition = (value: string) => boolean;\ntype Stringify = (value: string) => any;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: ParserMixinType[];\n};\n\nconst BOOLS = { true: true, false: false } as { [s: string]: boolean };\nconst NUMS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);\nconst NUMS_Z = new Set([...NUMS, 'Z', 'z']);\nconst JFMASOND = new Set(['J', 'F', 'M', 'A', 'S', 'O', 'N', 'D', ...NUMS]);\nconst NBRYNLGPTVC = new Set(['N', 'B', 'R', 'Y', 'N', 'L', 'G', 'P', 'T', 'V', 'C', ...NUMS_Z]);\n\nexport interface ParserMixinType {\n functions?: ((value: string, cell?: CellType) => any)[];\n callback?(parsed: any, cell?: CellType): CellType;\n parse?(value: string, cell: CellType): any;\n bool?(value: string, cell?: CellType): boolean | undefined;\n number?(value: string, cell?: CellType): number | undefined;\n timedelta?(value: string, cell?: CellType): TimeDelta | undefined;\n date?(value: string, cell?: CellType): Date | undefined;\n}\n\nexport class Parser implements ParserMixinType {\n functions: ((value: string, cell?: CellType) => any)[] = [\n this.number.bind(this),\n this.timedelta.bind(this),\n this.date.bind(this),\n this.bool.bind(this),\n ];\n\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: ParserMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n // @ts-expect-error mixin has the same fields as this\n this[key] = mixin[key];\n }\n }\n }\n public call(value: string, cell: CellType): CellType {\n try {\n const parsed = this.parse(value, cell);\n return this.callback(parsed, cell);\n } catch (e) {\n return this.callback(e, cell);\n }\n }\n public callback(parsed: any, cell?: CellType): CellType {\n return { ...cell, value: parsed };\n }\n public parse(value: string, cell?: CellType): any {\n if (this.condition && !this.condition(value)) {\n const result = this.complement ? this.complement(value) : value;\n return result;\n }\n if (value[0] === \"'\") {\n return value;\n }\n for (let i = 0; i < this.functions.length; i++) {\n const result = this.functions[i](value, cell);\n if (result != null) {\n return result;\n }\n }\n if (value === '') {\n return null;\n }\n return value;\n }\n\n bool(value: string, cell?: CellType): boolean | undefined {\n return BOOLS[value.toLowerCase()];\n }\n\n number(value: string, cell?: CellType): number | undefined {\n const m = value.match(/^-?[\\d.]+$/);\n if (m != null && value.match(/\\.$/) == null && (value.match(/\\./g) || []).length <= 1) {\n return parseFloat(value);\n }\n }\n\n timedelta(value: string, cell?: CellType): TimeDelta | undefined {\n if (value.length < 4 || isNaN(value[value.length - 1] as unknown as number)) {\n return;\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})$/);\n if (match) {\n const [, _sign, hours, minutes, seconds] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(sign * Number(hours), sign * Number(minutes), sign * Number(seconds));\n }\n }\n {\n const match = value.match(/^([+-]?)(\\d+):(\\d{2}):(\\d{2})\\.(\\d+)$/);\n if (match) {\n const [, _sign, hours, minutes, seconds, msecs] = match;\n const sign = _sign === '-' ? -1 : 1;\n return TimeDelta.create(\n sign * Number(hours),\n sign * Number(minutes),\n sign * Number(seconds),\n sign * Number(msecs),\n );\n }\n }\n }\n\n date(value: string, cell?: CellType): Date | undefined {\n const first = value[0];\n if (first == null || !JFMASOND.has(first.toUpperCase())) {\n return;\n }\n if (!NBRYNLGPTVC.has(value[value.length - 1].toUpperCase())) {\n return;\n }\n if (value.match(/[=*&#@!?[\\]{}\"'()|%\\\\<>~+\\r\\n]/)) {\n return;\n }\n let timeZone = 'UTC';\n try {\n timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) {}\n try {\n const day = dayjs.tz(value, timeZone);\n return day.toDate();\n } catch (e) {}\n }\n}\n\nexport type ParserType = Parser;\n\nexport const defaultParser = new Parser();\n","import dayjs from 'dayjs';\n\nimport { CellType, PointType, WriterType } from '../types';\nimport { Table, UserTable } from '../lib/table';\nimport { solveFormula } from '../formula/solver';\nimport { FormulaError } from '../formula/evaluator';\nimport { p2a } from '../lib/converters';\nimport { TimeDelta } from '../lib/time';\n\ntype Condition = (value: any) => boolean;\n\ntype Stringify = (value: any) => string;\n\ntype Props = {\n condition?: Condition;\n complement?: Stringify;\n mixins?: RendererMixinType[];\n};\n\nexport interface RendererMixinType {\n render?(value: any, table: UserTable, writer?: WriterType): any;\n stringify?(cell: CellType): string;\n string?(value: string, table: UserTable, writer?: WriterType): any;\n bool?(value: boolean, writer?: WriterType): any;\n number?(value: number, writer?: WriterType): any;\n date?(value: Date, writer?: WriterType): any;\n timedelta?(value: TimeDelta, writer?: WriterType): any;\n array?(value: any[], writer?: WriterType): any;\n object?(value: any, writer?: WriterType): any;\n null?(value: null, writer?: WriterType): any;\n undefined?(value: undefined, writer?: WriterType): any;\n}\n\nexport class Renderer implements RendererMixinType {\n public datetimeFormat: string = 'YYYY-MM-DD HH:mm:ss';\n public dateFormat: string = 'YYYY-MM-DD';\n public timeDeltaFormat: string = 'HH:mm:ss';\n private condition?: Condition;\n private complement?: Stringify;\n\n constructor(props?: Props) {\n this.applyMixins(props?.mixins);\n if (props == null) {\n return;\n }\n const { condition, complement } = props;\n this.condition = condition;\n this.complement = complement;\n }\n\n private applyMixins(mixins?: RendererMixinType[]) {\n if (mixins == null) {\n return;\n }\n for (const mixin of mixins) {\n for (const key in mixin) {\n // @ts-expect-error mixin has the same fields as this\n this[key] = mixin[key];\n }\n }\n }\n\n public call(table: Table, point: PointType, writer?: WriterType): any {\n const address = p2a(point);\n const cache = table.getSolvedCache(address);\n const value = cache || table.getByPoint(point)?.value;\n return this.render(value, table, writer);\n }\n\n public render(value: any, table: Table, writer?: WriterType): any {\n if (this.condition && !this.condition(value)) {\n return this.complement ? this.complement(value) : this.stringify({ value });\n }\n\n switch (typeof value) {\n case 'object':\n if (value instanceof Date) {\n return this.date(value, writer);\n }\n if (value instanceof TimeDelta) {\n return this.timedelta(value, writer);\n }\n if (value == null) {\n return this.null(value, writer);\n }\n if (value instanceof Table) {\n return this.render(value.getByPoint({ y: value.top, x: value.left })?.value, table, writer);\n }\n if (Array.isArray(value)) {\n return this.array(value, writer);\n }\n if (value instanceof FormulaError) {\n throw value;\n }\n return this.object(value, writer);\n case 'string':\n return this.string(value, table, writer);\n case 'number':\n return this.number(value, writer);\n case 'boolean':\n return this.bool(value, writer);\n case 'undefined':\n return this.undefined(value, writer);\n case 'function':\n return value() as string;\n }\n return '';\n }\n\n stringify(cell: CellType): string {\n const { value } = cell;\n if (value instanceof Date) {\n return this.date(value);\n }\n if (value instanceof TimeDelta) {\n return this.timedelta(value);\n }\n if (value == null) {\n return '';\n }\n\n return value.toString();\n }\n\n string(value: string, table: Table, writer?: WriterType): any {\n if (value[0] === \"'\") {\n return value.substring(1);\n }\n if (value[0] === '=') {\n const result = solveFormula({ value, table, raise: true });\n if (result === null) {\n return this.null(null);\n }\n if (result === undefined) {\n return this.undefined(undefined);\n }\n if (result.constructor.name === 'Boolean') {\n return String(result).toUpperCase();\n }\n if (result.constructor.name === 'Date') {\n return this.date(result as Date);\n }\n return this.render(result, table, writer);\n }\n return value;\n }\n\n bool(value: boolean, writer?: WriterType): any {\n return value ? 'TRUE' : 'FALSE';\n }\n\n number(value: number, writer?: WriterType): any {\n if (isNaN(value)) {\n return 'NaN';\n }\n return value;\n }\n\n date(value: Date, writer?: WriterType): any {\n if (value.getHours() + value.getMinutes() + value.getSeconds() === 0) {\n return dayjs(value).format(this.dateFormat);\n }\n return dayjs(value).format(this.datetimeFormat);\n }\n\n timedelta(value: TimeDelta, writer?: WriterType): any {\n return value.stringify(this.timeDeltaFormat);\n }\n\n array(value: any[], writer?: WriterType): any {\n return value.map((v) => this.stringify({ value: v })).join(',');\n }\n\n object(value: any, writer?: WriterType): any {\n return JSON.stringify(value);\n }\n\n null(value: any, writer?: WriterType): any {\n return '';\n }\n\n undefined(value: undefined, writer?: WriterType): any {\n return '';\n }\n}\n\nexport type RendererType = Renderer;\nexport const defaultRenderer = new Renderer();\n","import type {\n MatrixType,\n AreaType,\n ZoneType,\n RangeType,\n PointType,\n Y,\n X,\n CellsByAddressType,\n ShapeType,\n MatricesByAddress,\n CellType,\n Address,\n} from '../types';\nimport { a2p, p2a, x2c, c2x } from './converters';\n\nexport const slideArea = (area: AreaType, y: Y, x: X): AreaType => {\n const { top, left, bottom, right } = area;\n return { top: top + y, left: left + x, bottom: bottom + y, right: right + x };\n};\n\nexport const superposeArea = (srcArea: AreaType, dstArea: AreaType): ShapeType => {\n const { height: srcHeight, width: srcWidth } = areaShape(srcArea);\n const { height: dstHeight, width: dstWidth } = areaShape(dstArea);\n\n // biggerHeight, biggerWidth\n return {\n height: srcHeight > dstHeight ? srcHeight : dstHeight,\n width: srcWidth > dstWidth ? srcWidth : dstWidth,\n };\n};\n\nexport const concatAreas = (area1: AreaType, area2: AreaType): AreaType => {\n const result: AreaType = { ...area1 };\n if (area2.left < area1.left) {\n result.left = area2.left;\n }\n if (area2.right > area1.right) {\n result.right = area2.right;\n }\n if (area2.top < area1.top) {\n result.top = area2.top;\n }\n if (area2.bottom > area1.bottom) {\n result.bottom = area2.bottom;\n }\n return result;\n};\n\nexport const zoneToArea = (zone: ZoneType): AreaType => {\n if (zone.endY === -1 || zone.endX === -1) {\n return { top: -1, left: -1, bottom: -1, right: -1 };\n }\n const [top, bottom] = zone.startY < zone.endY ? [zone.startY, zone.endY] : [zone.endY, zone.startY];\n const [left, right] = zone.startX < zone.endX ? [zone.startX, zone.endX] : [zone.endX, zone.startX];\n return { top, left, bottom, right };\n};\n\nexport const areaToZone = (area: AreaType): ZoneType => {\n return {\n startY: area.top,\n startX: area.left,\n endY: area.bottom,\n endX: area.right,\n };\n};\n\nexport const areaToRange = (area: AreaType): string => {\n const { top, left, bottom, right } = area;\n return `${p2a({ y: top, x: left })}:${p2a({\n y: bottom,\n x: right,\n })}`;\n};\n\nexport const between = (range: RangeType, index: number) => {\n if (range.start === -1 || range.end === -1) {\n return false;\n }\n return (range.start <= index && index <= range.end) || (range.end <= index && index <= range.start);\n};\n\nexport const among = (area: AreaType, point: PointType) => {\n if (area.top === -1 || area.left === -1 || area.bottom === -1 || area.right === -1) {\n return false;\n }\n const { y, x } = point;\n const { top, left, bottom, right } = area;\n return top <= y && y <= bottom && left <= x && x <= right;\n};\n\ntype ShapeExtension = { base?: number };\n\nexport const zoneShape = ({ base = 0, ...zone }: ZoneType & ShapeExtension): ShapeType => {\n return {\n height: base + Math.abs(zone.startY - zone.endY),\n width: base + Math.abs(zone.startX - zone.endX),\n };\n};\n\nexport const areaShape = ({ base = 0, ...area }: AreaType & ShapeExtension): ShapeType => {\n return {\n height: base + Math.abs(area.top - area.bottom),\n width: base + Math.abs(area.left - area.right),\n };\n};\n\nexport const matrixShape = ({ base = 0, matrix }: { matrix: MatrixType } & ShapeExtension): ShapeType => {\n const h = matrix.length;\n if (h === 0) {\n return { height: 0, width: 0 };\n }\n return { height: base + h, width: base + matrix[0].length };\n};\n\nexport const makeSequence = (start: number, stop: number, step: number = 1) => {\n return Array.from({ length: (stop - start - 1) / step + 1 }, (_, i) => start + i * step);\n};\n\nexport const oa2aa = (oa: { [s: string]: any }[], fields: string[]): MatrixType => {\n const aa: any[][] = [];\n oa.forEach((o) => {\n const a: any[] = [];\n fields.forEach((field) => {\n a.push(o[field]);\n });\n aa.push(a);\n });\n return aa;\n};\n\nexport const aa2oa = (aa: MatrixType, fields: string[]): { [s: string]: any }[] => {\n const oa: { [s: string]: any }[] = [];\n aa.forEach((a) => {\n const o: { [s: string]: any } = {};\n a.forEach((v, i) => {\n if (i >= fields.length) {\n return;\n }\n const field = fields[i];\n o[field] = v;\n });\n oa.push(o);\n });\n return oa;\n};\n\nexport const putMatrix = <T = any>(\n dst: T[][],\n src: T[][],\n dstArea: AreaType,\n filter: (newValue: T, currentValue: T) => boolean = () => true,\n) => {\n const lostRows: MatricesByAddress<T> = {};\n const { top, left, bottom, right } = dstArea;\n const { height: dstNumRows, width: dstNumCols } = matrixShape({\n matrix: dst,\n base: 1,\n });\n for (let y = top; y <= bottom; y++) {\n const lostRow: T[] = [];\n for (let x = left; x <= right; x++) {\n const value = src[y - top][x - left];\n // -1 means excluding headers\n if (y < dstNumRows - 1 && x < dstNumCols - 1) {\n if (filter(value, dst[y][x])) {\n dst[y][x] = value;\n }\n continue;\n }\n if (lostRow.length === 0) {\n lostRows[p2a({ y, x })] = [lostRow];\n }\n lostRow.push(value);\n }\n }\n return lostRows;\n};\n\nexport const createMatrix = <T = any>(numRows: number, numCols: number, fill?: T): T[][] => {\n return [...Array(numRows)].map(() => Array(numCols).fill(fill));\n};\n\nexport const cropMatrix = <T = any>(matrix: T[][], area: AreaType): T[][] => {\n const { top, left, bottom, right } = area;\n return matrix.slice(top, bottom + 1).map((cols) => cols.slice(left, right + 1));\n};\n\nexport const constructInitialCellsOrigin = ({\n cells = {},\n ensured = {},\n matrix = [],\n flattenAs = 'value',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrix?: MatrixType;\n}) => {\n return constructInitialCells({\n cells,\n ensured,\n matrices: { A1: matrix },\n flattenAs,\n });\n};\n\nexport const constructInitialCells = ({\n cells = {},\n ensured = {},\n matrices = {},\n flattenAs = 'value',\n}: {\n cells?: CellsByAddressType;\n ensured?: {\n numRows?: number;\n numCols?: number;\n };\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<any>;\n} = {}) => {\n upsert({ cells, flattenAs, matrices });\n const { numRows, numCols } = Object.assign({ numRows: 1, numCols: 1 }, ensured);\n const rightBottom = p2a({ y: numRows, x: numCols });\n if (cells[rightBottom] == null) {\n cells[rightBottom] = {};\n }\n return cells;\n};\n\nexport const upsert = <T>({\n cells = {},\n matrices = {},\n flattenAs,\n}: {\n cells?: CellsByAddressType;\n flattenAs?: keyof CellType;\n matrices?: MatricesByAddress<T>;\n}) => {\n Object.keys(matrices).forEach((baseAddress) => {\n const matrix = matrices[baseAddress];\n const { y: baseY, x: baseX } = a2p(baseAddress);\n matrix.forEach((row, y) => {\n row.forEach((e, x) => {\n const id = p2a({ y: baseY + y, x: baseX + x });\n if (flattenAs) {\n const cell = cells[id];\n cells[id] = { [flattenAs]: e, ...cell };\n } else {\n cells[id] = e as CellType;\n }\n });\n });\n });\n return cells;\n};\n\nexport const getMaxSizesFromCells = (cells: CellsByAddressType = {}) => {\n let [lastY, lastX] = [0, 0];\n Object.keys(cells).map((address) => {\n const { y, x } = a2p(address);\n if (lastY < y) {\n lastY = y;\n }\n if (lastX < x) {\n lastX = x;\n }\n });\n return { numRows: lastY, numCols: lastX };\n};\n\nexport const range = (start: number, end: number) => {\n const list: number[] = [];\n for (let i = start; i <= end; i++) {\n list.push(i);\n }\n return list;\n};\n\nexport const complementSelectingArea = (selectingArea: AreaType, choosing: PointType) => {\n if (selectingArea.left === -1) {\n selectingArea = {\n left: choosing.x,\n top: choosing.y,\n right: choosing.x,\n bottom: choosing.y,\n };\n }\n return selectingArea;\n};\n\nexport const isSameArea = (area1: AreaType, area2: AreaType) => {\n if (area1.top !== area2.top) {\n return false;\n }\n if (area1.left !== area2.left) {\n return false;\n }\n if (area1.bottom !== area2.bottom) {\n return false;\n }\n if (area1.right !== area2.right) {\n return false;\n }\n return true;\n};\n\nexport const expandRange = (range: string): Address[] => {\n if (range.indexOf(':') === -1) {\n return [range];\n }\n\n const result: Address[] = [];\n\n const isRowRange = /^\\d+\\:\\d+$/.test(range);\n\n if (isRowRange) {\n const [startRow, endRow] = range.split(':').map(Number);\n for (let row = startRow; row <= endRow; row++) {\n result.push(`${row}`);\n }\n return result;\n }\n\n const match = range.match(/^([A-Z]*)(\\d+)?\\:([A-Z]*)(\\d+)?$/);\n if (!match) {\n console.error('Invalid range format', range);\n return [range];\n }\n\n const [, startCol, startRow, endCol, endRow] = match;\n const startColIndex = startCol ? c2x(startCol) : 1;\n const endColIndex = endCol ? c2x(endCol) : 1;\n\n for (let col = startColIndex; col <= endColIndex; col++) {\n const currentColumn = startCol || endCol ? x2c(col) : '';\n if (startRow && endRow) {\n for (let row = Number(startRow); row <= Number(endRow); row++) {\n result.push(`${currentColumn}${row}`);\n }\n } else if (!startRow && !endRow) {\n result.push(currentColumn);\n }\n }\n return result;\n};\n","import { a2p, x2c, y2r } from '../lib/converters';\nimport { Table } from '../lib/table';\nimport { Address, PointType, StoreType } from '../types';\n\nexport const restrictPoints = (store: StoreType, table: Table) => {\n const { choosing, selectingZone, copyingZone } = store;\n let { y, x } = choosing;\n let { startY: y1, startX: x1, endY: y2, endX: x2 } = selectingZone;\n let { startY: y3, startX: x3, endY: y4, endX: x4 } = copyingZone;\n const [numRows, numCols] = [table.getNumRows(), table.getNumCols()];\n if (y > numRows) {\n y = numRows;\n }\n if (x > numCols) {\n x = numCols;\n }\n if (y1 > numRows) {\n y1 = numRows;\n }\n if (y2 > numRows) {\n y2 = numRows;\n }\n if (x1 > numCols) {\n x1 = numCols;\n }\n if (x2 > numCols) {\n x2 = numCols;\n }\n if (y3 > numRows) {\n y3 = numRows;\n }\n if (y4 > numRows) {\n y4 = numRows;\n }\n if (x3 > numCols) {\n x3 = numCols;\n }\n if (x4 > numCols) {\n x4 = numCols;\n }\n return {\n choosing: { y, x } as PointType,\n selectingZone: { startY: y1, startX: x1, endY: y2, endX: x2 },\n copyingZone: { startY: y3, startX: x3, endY: y4, endX: x4 },\n };\n};\n\nexport const shouldTracking = (operation: string) => {\n switch (operation) {\n case 'ADD_ROWS':\n return true;\n case 'ADD_COLS':\n return true;\n case 'DELETE_ROWS':\n return true;\n case 'DELETE_COLS':\n return true;\n case 'MOVE':\n return true;\n }\n return false;\n};\n\nexport const initSearchStatement = (table: Table, store: StoreType) => {\n const { searchQuery, searchCaseSensitive } = store;\n let { choosing } = store;\n if (!searchQuery) {\n return { matchingCells: [] };\n }\n const matchingCells: Address[] = [];\n for (let y = 1; y <= table.bottom; y++) {\n for (let x = 1; x <= table.right; x++) {\n const v = table.stringify({ y, x }, undefined, true);\n const s = searchCaseSensitive ? v : v.toLowerCase();\n const q = searchCaseSensitive ? searchQuery : searchQuery.toLowerCase();\n if (s.indexOf(q) !== -1) {\n matchingCells.push(`${x2c(x)}${y2r(y)}`);\n }\n }\n }\n const matchingCellIndex = matchingCells.length === store.matchingCells.length ? store.matchingCellIndex : 0;\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { matchingCells, searchQuery, matchingCellIndex, choosing };\n};\n","import { Prevention } from '../types';\n\nexport const DeleteRow: Prevention = 0b00000000000000000000000000000000000000000000000000001, // 1\n DeleteCol: Prevention = 0b00000000000000000000000000000000000000000000000000010, // 2\n AddRowAbove: Prevention = 0b00000000000000000000000000000000000000000000000000100, // 4\n AddRowBelow: Prevention = 0b00000000000000000000000000000000000000000000000001000, // 8\n AddColLeft: Prevention = 0b00000000000000000000000000000000000000000000000010000, // 16\n AddColRight: Prevention = 0b00000000000000000000000000000000000000000000000100000, // 32\n MoveFrom: Prevention = 0b00000000000000000000000000000000000000000000001000000, // 64\n MoveTo: Prevention = 0b00000000000000000000000000000000000000000000010000000, // 128\n Write: Prevention = 0b00000000000000000000000000000000000000000000100000000, // 256\n Style: Prevention = 0b00000000000000000000000000000000000000000001000000000, // 512\n Resize: Prevention = 0b00000000000000000000000000000000000000000010000000000, // 1024\n SetRenderer: Prevention = 0b00000000000000000000000000000000000000000100000000000, // 2048\n SetParser: Prevention = 0b00000000000000000000000000000000000000001000000000000; // 4096\n\nexport const Move: Prevention = MoveFrom | MoveTo; // 192\n\nexport const Update: Prevention = Write | Style | Resize | SetRenderer | SetParser; // 1792\n\nexport const AddRow: Prevention = AddRowAbove | AddRowBelow; // 12\n\nexport const AddCol: Prevention = AddColLeft | AddColRight; // 48\n\nexport const Add: Prevention = AddRow | AddCol; // 60\n\nexport const Delete: Prevention = DeleteRow | DeleteCol; // 3\n\nexport const ReadOnly: Prevention = Update | Delete | Add | Move; //\n\nexport const isPrevented = (prevention: Prevention | undefined, flag: Prevention) => {\n if (prevention === undefined) {\n return false;\n }\n return (prevention & flag) === flag;\n};\n\n// Don't use this function in production\nexport const debugOperations = (prevention: Prevention | undefined) => {\n const preventions: string[] = [];\n if (isPrevented(prevention, DeleteRow)) {\n preventions.push('DeleteRow');\n }\n if (isPrevented(prevention, DeleteCol)) {\n preventions.push('DeleteCol');\n }\n if (isPrevented(prevention, AddRowAbove)) {\n preventions.push('AddRowAbove');\n }\n if (isPrevented(prevention, AddRowBelow)) {\n preventions.push('AddRowBelow');\n }\n if (isPrevented(prevention, AddColLeft)) {\n preventions.push('AddColLeft');\n }\n if (isPrevented(prevention, AddColRight)) {\n preventions.push('AddColRight');\n }\n if (isPrevented(prevention, MoveFrom)) {\n preventions.push('MoveFrom');\n }\n if (isPrevented(prevention, MoveTo)) {\n preventions.push('MoveTo');\n }\n if (isPrevented(prevention, Write)) {\n preventions.push('Write');\n }\n if (isPrevented(prevention, Style)) {\n preventions.push('Style');\n }\n if (isPrevented(prevention, Resize)) {\n preventions.push('Resize');\n }\n if (isPrevented(prevention, SetRenderer)) {\n preventions.push('SetRenderer');\n }\n if (isPrevented(prevention, SetParser)) {\n preventions.push('SetParser');\n }\n return preventions;\n};\n","import { defaultParser } from '../parsers/core';\nimport { defaultRenderer } from '../renderers/core';\nimport {\n Id,\n Ids,\n IdMatrix,\n AreaType,\n CellsByIdType,\n CellsByAddressType,\n PointType,\n WriterType,\n Address,\n CellFilter,\n Labelers,\n MatrixType,\n CellType,\n Parsers,\n Renderers,\n HistoryType,\n StoreReflectionType,\n ShapeType,\n OperatorType,\n TableMapType,\n SheetMapType,\n} from '../types';\nimport { areaShape, createMatrix, expandRange, getMaxSizesFromCells, matrixShape, putMatrix } from './structs';\nimport { a2p, x2c, p2a, y2r, grantAddressAbsolute } from './converters';\nimport { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { absolutizeFormula, Lexer, stripSheetName } from '../formula/evaluator';\nimport { solveFormula } from '../formula/solver';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, HEADER_HEIGHT, HEADER_WIDTH, HISTORY_LIMIT } from '../constants';\nimport { shouldTracking } from '../store/helpers';\nimport * as prevention from './prevention';\n\ntype Props = {\n parsers?: Parsers;\n renderers?: Renderers;\n labelers?: Labelers;\n useBigInt?: boolean;\n historyLimit?: number;\n minNumRows?: number;\n maxNumRows?: number;\n minNumCols?: number;\n maxNumCols?: number;\n headerHeight?: number;\n headerWidth?: number;\n functions?: FunctionMapping;\n};\n\nconst noFilter: CellFilter = () => true;\n\ntype GetProps = {\n // null for the system, do not use it\n evaluates?: boolean | null;\n raise?: boolean;\n filter?: CellFilter;\n};\n\ntype MoveProps = {\n src: AreaType;\n dst: AreaType;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n historicize?: boolean;\n};\n\ntype GetFlattenProps = GetProps & {\n key?: keyof CellType;\n};\n\ntype GetPropsWithArea = GetProps & {\n area?: AreaType;\n};\n\ntype GetFlattenPropsWithArea = GetFlattenProps & {\n area?: AreaType;\n};\n\nexport interface UserTable {\n changedAt: Date;\n lastChangedAt?: Date;\n top: number;\n left: number;\n bottom: number;\n right: number;\n minNumRows: number;\n maxNumRows: number;\n minNumCols: number;\n maxNumCols: number;\n totalWidth: number;\n totalHeight: number;\n headerWidth: number;\n headerHeight: number;\n currentHistory?: HistoryType;\n\n getRectSize(area: AreaType): ShapeType;\n getAddressById(id: Id, slideY: number, slideX: number): string | undefined;\n getAddressesByIds(ids: CellsByIdType): CellsByAddressType;\n getPointById(id: Id): PointType;\n getByPoint(point: PointType): CellType | undefined;\n getById(id: Id): CellType | undefined;\n getNumRows(base?: number): number;\n getNumCols(base?: number): number;\n getMatrixFlatten(args?: GetFlattenPropsWithArea): any[][];\n getObjectFlatten(args?: GetFlattenProps): CellsByAddressType;\n getRowsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getColsFlatten(args?: GetFlattenProps): CellsByAddressType[];\n getMatrix(args?: GetPropsWithArea): (CellType | null)[][];\n getObject(args?: GetProps): CellsByAddressType;\n getRows(args?: GetProps): CellsByAddressType[];\n getCols(args?: GetProps): CellsByAddressType[];\n getTableBySheetName(sheetName: string): UserTable;\n move(args: MoveProps): UserTable;\n copy(args: MoveProps): UserTable;\n update(args: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n writeMatrix(args: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n write(args: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRowsAndUpdate(args: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addRows(args: { y: number; numRows: number; baseY: number; reflection?: StoreReflectionType }): UserTable;\n deleteRows(args: { y: number; numRows: number; reflection?: StoreReflectionType }): UserTable;\n addColsAndUpdate(args: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }): UserTable;\n addCols(args: { x: number; numCols: number; baseX: number; reflection?: StoreReflectionType }): UserTable;\n deleteCols(args: { x: number; numCols: number; reflection?: StoreReflectionType }): UserTable;\n undo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n redo(): {\n history: HistoryType | null;\n newTable: UserTable;\n };\n getHistories(): HistoryType[];\n getHistoryIndex(): number;\n getHistorySize(): number;\n}\n\nexport class Table implements UserTable {\n public changedAt: Date;\n public lastChangedAt?: Date;\n public minNumRows: number;\n public maxNumRows: number;\n public minNumCols: number;\n public maxNumCols: number;\n public totalWidth: number = 0;\n public totalHeight: number = 0;\n public headerWidth: number = 0;\n public headerHeight: number = 0;\n public currentHistory?: HistoryType;\n public sheetId: number = 0;\n public sheetName: string = '';\n public sheets: SheetMapType = {};\n public tables: TableMapType = {};\n\n private head: bigint | number;\n private idMatrix: IdMatrix;\n private data: CellsByIdType = {};\n private area: AreaType = { top: 0, left: 0, bottom: 0, right: 0 };\n private parsers: Parsers;\n private renderers: Renderers;\n private labelers: Labelers;\n private functions: FunctionMapping = {};\n private lastHistory?: HistoryType;\n private histories: HistoryType[];\n private historyIndex: number;\n private addressesById: { [id: Id]: Address };\n private historyLimit: number;\n private solvedCaches: { [address: Address]: any };\n private idsToBeAbsoluted: Id[];\n\n constructor({\n parsers = {},\n renderers = {},\n labelers = {},\n useBigInt = false,\n historyLimit: historyLimit,\n minNumRows = 1,\n maxNumRows = -1,\n minNumCols = 1,\n maxNumCols = -1,\n headerWidth = HEADER_WIDTH,\n headerHeight = HEADER_HEIGHT,\n functions = functionsDefault,\n }: Props) {\n this.head = useBigInt ? BigInt(0) : 0;\n this.parsers = parsers || {};\n this.renderers = renderers || {};\n this.labelers = labelers || {};\n this.idMatrix = [];\n this.histories = [];\n this.historyIndex = -1;\n this.addressesById = {};\n this.historyLimit = historyLimit || HISTORY_LIMIT;\n this.changedAt = new Date();\n this.minNumRows = minNumRows || 0;\n this.maxNumRows = maxNumRows || 0;\n this.minNumCols = minNumCols || 0;\n this.maxNumCols = maxNumCols || 0;\n this.solvedCaches = {};\n this.headerHeight = headerHeight;\n this.headerWidth = headerWidth;\n this.functions = functions;\n this.idsToBeAbsoluted = [];\n }\n\n public getTableBySheetName(sheetName: string) {\n const sheetId = this.sheets[sheetName];\n return this.tables[sheetId];\n }\n\n public initialize(cells: CellsByAddressType) {\n const auto = getMaxSizesFromCells(cells);\n this.area = {\n top: 0,\n left: 0,\n bottom: auto.numRows || 0,\n right: auto.numCols || 0,\n };\n\n // make idMatrix beforehand\n for (let y = 0; y < auto.numRows + 1; y++) {\n const ids: Ids = [];\n this.idMatrix.push(ids);\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.generateId();\n ids.push(id);\n const address = p2a({ y, x });\n this.addressesById[id] = address;\n }\n }\n Object.keys(cells).forEach((address) => {\n const range = expandRange(address);\n const data = cells[address];\n range.forEach((address) => {\n const origin = cells[address];\n cells[address] = {\n ...origin,\n ...data,\n style: {\n ...origin?.style,\n ...data?.style,\n },\n prevention: (origin?.prevention || 0) | (data?.prevention || 0),\n };\n });\n });\n\n const common = cells?.['default'];\n for (let y = 0; y < auto.numRows + 1; y++) {\n const rowId = y2r(y);\n const rowDefault = cells?.[rowId];\n for (let x = 0; x < auto.numCols + 1; x++) {\n const id = this.getId({ y, x });\n const address = p2a({ y, x });\n const colId = x2c(x);\n const colDefault = cells?.[colId];\n const cell = cells?.[address];\n const stacked = {\n ...common,\n ...rowDefault,\n ...colDefault,\n ...cell,\n style: {\n ...common?.style,\n ...rowDefault?.style,\n ...colDefault?.style,\n ...cell?.style,\n },\n prevention:\n (common?.prevention || 0) |\n (rowDefault?.prevention || 0) |\n (colDefault?.prevention || 0) |\n (cell?.prevention || 0),\n } as CellType;\n\n if (stacked?.value?.startsWith?.('=')) {\n this.idsToBeAbsoluted.push(id);\n }\n if (y === 0) {\n if (stacked.width == null) {\n stacked.width = DEFAULT_WIDTH;\n }\n } else if (x === 0) {\n if (stacked.height == null) {\n stacked.height = DEFAULT_HEIGHT;\n }\n } else {\n delete stacked.height;\n delete stacked.width;\n delete stacked.labeler;\n }\n this.data[id] = stacked;\n }\n }\n this.setTotalSize();\n }\n\n public absolutizeFormula() {\n this.idsToBeAbsoluted.forEach((id) => {\n const cell = this.data[id];\n if (cell == null) {\n return;\n }\n cell.value = absolutizeFormula({\n value: cell?.value,\n table: this,\n });\n });\n }\n\n private generateId() {\n return (this.head++).toString(36);\n }\n\n public getRectSize({ top, left, bottom, right }: AreaType) {\n let width = 0,\n height = 0;\n for (let x = left || 1; x < right; x++) {\n width += this.getByPoint({ y: 0, x })?.width || DEFAULT_WIDTH;\n }\n for (let y = top || 1; y < bottom; y++) {\n height += this.getByPoint({ y, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n return { width, height };\n }\n private setTotalSize() {\n const { bottom, right } = this.area;\n const { width, height } = this.getRectSize({\n top: 1,\n left: 1,\n bottom: bottom + 1,\n right: right + 1,\n });\n this.totalWidth = width + this.headerWidth;\n this.totalHeight = height + this.headerHeight;\n }\n\n public shallowCopy({ copyCache = true }: { copyCache?: boolean } = {}) {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.changedAt = new Date();\n copied.lastChangedAt = this.changedAt;\n copied.setTotalSize();\n copied.idsToBeAbsoluted = [];\n copied.solvedCaches = {};\n if (!copyCache) {\n // force reset\n this.addressesById = {};\n }\n return copied;\n }\n\n public getAddressById(id: Id, slideY = 0, slideX = 0): string | undefined {\n const absCol = id.startsWith('$');\n if (absCol) {\n id = id.slice(1);\n slideX = 0;\n }\n const absRow = id.endsWith('$');\n if (absRow) {\n id = id.slice(0, -1);\n slideY = 0;\n }\n\n for (let y = 0; y < this.idMatrix.length; y++) {\n const ids = this.idMatrix[y];\n for (let x = 0; x < ids.length; x++) {\n const existing = ids[x];\n const address = p2a({ y, x });\n this.addressesById[existing] = address;\n if (existing === id) {\n const slidedAddress = p2a({\n y: y + slideY,\n x: x + slideX,\n });\n return grantAddressAbsolute(slidedAddress, absCol, absRow);\n }\n }\n }\n }\n\n public getAddressesByIds(ids: CellsByIdType) {\n const addresses: CellsByAddressType = {};\n Object.keys(ids).forEach((id) => {\n const cell = ids[id];\n const address = this.getAddressById(id);\n if (cell && address) {\n addresses[address] = cell;\n }\n });\n return addresses;\n }\n\n public getPointById(id: Id): PointType {\n const address = this.getAddressById(id);\n if (address) {\n return a2p(address);\n }\n return { y: 0, x: 0 };\n }\n private getId(point: PointType) {\n const { y, x } = point;\n return this.idMatrix[Math.abs(y)]?.[Math.abs(x)];\n }\n\n public getByPoint(point: PointType) {\n const { y, x } = point;\n if (y === -1 || x === -1) {\n return undefined;\n }\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n return undefined;\n }\n const value = this.data[id];\n return value;\n }\n\n public getById(id: Id) {\n return this.data[id];\n }\n\n public getNumRows(base = 0) {\n const { top, bottom } = this.area;\n return base + bottom - top;\n }\n\n public getNumCols(base = 0) {\n const { left, right } = this.area;\n return base + right - left;\n }\n\n public get top() {\n return this.area.top;\n }\n public get left() {\n return this.area.left;\n }\n public get bottom() {\n return this.area.bottom;\n }\n public get right() {\n return this.area.right;\n }\n\n public getMatrixFlatten({\n area,\n key = 'value',\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetFlattenPropsWithArea = {}) {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x }) || {};\n if (!filter(cell)) {\n continue;\n }\n matrix[y - top][x - left] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n return matrix;\n }\n public getObjectFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getRowsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getColsFlatten({ key = 'value', evaluates = true, raise = false, filter = noFilter }: GetFlattenProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = solveFormula({\n value: cell[key],\n table: this,\n raise,\n evaluates,\n });\n }\n }\n }\n return result;\n }\n public getMatrix({\n area,\n evaluates = true,\n raise = false,\n filter = noFilter,\n }: GetPropsWithArea = {}): (CellType | null)[][] {\n const { top, left, bottom, right } = area || {\n top: 1,\n left: 1,\n bottom: this.area.bottom,\n right: this.area.right,\n };\n const matrix = createMatrix(bottom - top + 1, right - left + 1);\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y, x });\n if (cell != null && filter(cell)) {\n matrix[y - top][x - left] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return matrix;\n }\n public getObject({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType = {};\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n result[p2a({ y, x })] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n public getRows({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let y = top; y <= bottom; y++) {\n const row: CellsByAddressType = {};\n result.push(row);\n for (let x = left; x <= right; x++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n row[x2c(x) || y2r(y)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n public getCols({ evaluates = true, raise = false, filter = noFilter }: GetProps = {}) {\n const result: CellsByAddressType[] = [];\n const { top, left, bottom, right } = this.area;\n for (let x = left; x <= right; x++) {\n const col: CellsByAddressType = {};\n result.push(col);\n for (let y = top; y <= bottom; y++) {\n const cell = this.getByPoint({ y: y - top, x: x - left });\n if (cell != null && filter(cell)) {\n col[y2r(y) || x2c(x)] = {\n ...cell,\n value: solveFormula({\n value: cell?.value,\n table: this,\n raise,\n evaluates,\n }),\n };\n }\n }\n }\n return result;\n }\n\n private pushHistory(history: HistoryType) {\n const strayedHistories = this.histories.splice(this.historyIndex + 1, this.histories.length);\n strayedHistories.forEach(this.cleanStrayed.bind(this));\n this.histories.push(history);\n this.lastHistory = this.currentHistory = history;\n if (this.histories.length > this.historyLimit) {\n const kickedOut = this.histories.splice(0, 1)[0];\n this.cleanObsolete(kickedOut);\n } else {\n this.historyIndex++;\n }\n }\n\n private cleanObsolete(history: HistoryType) {\n if (history.operation === 'DELETE_ROWS' || history.operation === 'DELETE_COLS') {\n history.deleted.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n if (history.operation === 'MOVE') {\n Object.keys(history.lostRows).forEach((address) => {\n const idMatrix = history.lostRows[address];\n idMatrix.map((ids) =>\n ids.forEach((id) => {\n if (id != null) {\n delete this.data[id];\n }\n }),\n );\n });\n }\n }\n\n private cleanStrayed(history: HistoryType) {\n if (history.operation === 'ADD_ROWS' || history.operation === 'ADD_COLS') {\n history.idMatrix.forEach((ids) => {\n ids.forEach((id) => {\n delete this.data[id];\n });\n });\n }\n }\n\n private getNewIdMatrix(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n ids.push(this.generateId());\n }\n }\n return matrix;\n }\n\n private getIdMatrixFromArea(area: AreaType) {\n const matrix: IdMatrix = [];\n const { top, left, bottom, right } = area;\n for (let y = top; y <= bottom; y++) {\n const ids: Ids = [];\n matrix.push(ids);\n for (let x = left; x <= right; x++) {\n const id = this.idMatrix[y]?.[x];\n if (id == null) {\n continue;\n }\n ids.push(id);\n }\n }\n return matrix;\n }\n\n private setChangedAt(cell?: CellType, changedAt?: Date) {\n if (cell == null) {\n return null;\n }\n cell.changedAt = changedAt || new Date();\n return cell;\n }\n\n private copyCellLayout(cell: CellType | undefined) {\n if (cell == null) {\n return undefined;\n }\n const newCell: CellType = {};\n if (cell.style != null) {\n newCell.style = cell.style;\n }\n if (cell.justifyContent != null) {\n newCell.justifyContent = cell.justifyContent;\n }\n if (cell.alignItems != null) {\n newCell.alignItems = cell.alignItems;\n }\n if (cell.renderer != null) {\n newCell.renderer = cell.renderer;\n }\n if (cell.parser != null) {\n newCell.parser = cell.parser;\n }\n if (cell.width != null) {\n newCell.width = cell.width;\n }\n if (cell.height != null) {\n newCell.height = cell.height;\n }\n if (cell.labeler != null) {\n newCell.labeler = cell.labeler;\n }\n return newCell;\n }\n\n public move({ src, dst, historicize = true, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const matrixNew = this.getNewIdMatrix(src);\n const matrixFrom = this.getIdMatrixFromArea(src);\n const matrixTo = this.getIdMatrixFromArea(dst);\n putMatrix(this.idMatrix, matrixNew, src, (_, id) => {\n const cell = this.data[id];\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.MoveFrom)) {\n return false;\n }\n return true;\n });\n const lostRows = putMatrix(this.idMatrix, matrixFrom, dst, (srcId, dstId) => {\n const srcCell = this.data[srcId];\n const dstCell = this.data[dstId];\n if (\n operator === 'USER' &&\n (prevention.isPrevented(srcCell?.prevention, prevention.MoveFrom) ||\n prevention.isPrevented(dstCell?.prevention, prevention.MoveTo))\n ) {\n return false;\n }\n if (srcCell != null) {\n this.setChangedAt(srcCell, new Date());\n }\n return true;\n });\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'MOVE',\n reflection,\n src,\n dst,\n matrixFrom,\n matrixTo,\n matrixNew,\n lostRows,\n });\n }\n return this.shallowCopy({ copyCache: false });\n }\n\n public copy({ src, dst, operator = 'SYSTEM', reflection = {} }: MoveProps) {\n const { height: maxHeight, width: maxWidth } = areaShape({\n ...src,\n base: 1,\n });\n const { top: topFrom, left: leftFrom } = src;\n const { top: topTo, left: leftTo, bottom: bottomTo, right: rightTo } = dst;\n const diff: CellsByAddressType = {};\n const changedAt = new Date();\n\n for (let i = 0; i <= bottomTo - topTo; i++) {\n const toY = topTo + i;\n if (toY > this.getNumRows()) {\n continue;\n }\n for (let j = 0; j <= rightTo - leftTo; j++) {\n const toX = leftTo + j;\n if (toX > this.getNumCols()) {\n continue;\n }\n const fromY = topFrom + (i % maxHeight);\n const fromX = leftFrom + (j % maxWidth);\n const slideY = toY - fromY;\n const slideX = toX - fromX;\n const cell: CellType = {\n ...this.getByPoint({\n y: topFrom + (i % maxHeight),\n x: leftFrom + (j % maxWidth),\n }),\n prevention: 0, // Is this okay?\n };\n const value = absolutizeFormula({\n value: cell?.value,\n table: this,\n slideY,\n slideX,\n });\n this.setChangedAt(cell, changedAt);\n diff[p2a({ y: toY, x: toX })] = {\n ...cell,\n style: { ...cell?.style },\n value,\n };\n }\n }\n return this.update({\n diff,\n partial: false,\n operator,\n reflection,\n });\n }\n\n private _update({\n diff,\n partial = true,\n updateChangedAt = true,\n ignoreFields = ['labeler', 'prevention'],\n operator = 'SYSTEM',\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n ignoreFields?: (keyof CellType)[];\n operator?: OperatorType;\n }) {\n const diffBefore: CellsByIdType = {};\n const diffAfter: CellsByIdType = {};\n const changedAt = new Date();\n\n Object.keys(diff).forEach((address) => {\n const cell = { ...diff[address] };\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.Update)) {\n return;\n }\n\n cell.value = absolutizeFormula({\n value: cell.value,\n table: this,\n });\n const point = a2p(address);\n const id = this.getId(point);\n const current = this.data[id];\n ignoreFields.forEach((key) => {\n cell[key] = current?.[key];\n });\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Write)) {\n cell.value = current?.value;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Style)) {\n cell.style = current?.style;\n cell.justifyContent = current?.justifyContent;\n cell.alignItems = current?.alignItems;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.Resize)) {\n cell.width = current?.width;\n cell.height = current?.height;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetRenderer)) {\n cell.renderer = current?.renderer;\n }\n if (operator === 'USER' && prevention.isPrevented(current?.prevention, prevention.SetParser)) {\n cell.parser = current?.parser;\n }\n if (updateChangedAt) {\n this.setChangedAt(cell, changedAt);\n }\n // must not partial\n diffBefore[id] = this.getByPoint(point);\n diffAfter[id] = cell;\n if (partial) {\n this.data[id] = { ...current, ...cell };\n } else {\n this.data[id] = cell;\n }\n });\n this.solvedCaches = {};\n return {\n diffBefore,\n diffAfter,\n };\n }\n\n public update({\n diff,\n partial = true,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { diffBefore, diffAfter } = this._update({\n diff,\n partial,\n operator,\n updateChangedAt,\n });\n\n if (historicize) {\n this.pushHistory({\n applyed: true,\n operation: 'UPDATE',\n reflection,\n diffBefore,\n diffAfter,\n partial,\n });\n }\n return this.shallowCopy({ copyCache: true });\n }\n\n public writeMatrix({\n point,\n matrix,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n matrix: MatrixType<string>;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const { y: baseY, x: baseX } = point;\n const diff: CellsByAddressType = {};\n matrix.forEach((cols, i) => {\n const y = baseY + i;\n if (y > this.bottom) {\n return;\n }\n cols.forEach((value, j) => {\n const x = baseX + j;\n if (x > this.right) {\n return;\n }\n const cell = this.parse({ y, x }, value);\n diff[p2a({ y, x })] = cell;\n });\n });\n return this.update({\n diff,\n partial: true,\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public write({\n point,\n value,\n updateChangedAt = true,\n historicize = true,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n point: PointType;\n value: string;\n updateChangedAt?: boolean;\n historicize?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n return this.writeMatrix({\n point,\n matrix: [[value]],\n updateChangedAt,\n historicize,\n operator,\n reflection,\n });\n }\n\n public addRowsAndUpdate({\n y,\n numRows,\n baseY,\n diff,\n partial,\n updateChangedAt,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addRows({\n y,\n numRows,\n baseY,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt, operator }), { partial });\n\n return returned;\n }\n\n public addRows({\n y,\n numRows,\n baseY,\n // operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n baseY: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumRows !== -1 && this.getNumRows() + numRows > this.maxNumRows) {\n console.error(`Rows are limited to ${this.maxNumRows}.`);\n return this;\n }\n const numCols = this.getNumCols(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: baseY, x: j });\n const copied = this.copyCellLayout(cell);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.idMatrix.splice(y, 0, ...rows);\n this.area.bottom += numRows;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_ROWS',\n reflection,\n y,\n numRows,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteRows({\n y,\n numRows,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n y: number;\n numRows: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumRows !== -1 && this.getNumRows() - numRows < this.minNumRows) {\n console.error(`At least ${this.minNumRows} row(s) are required.`);\n return this;\n }\n\n const ys: number[] = [];\n for (let i = y; i < y + numRows; i++) {\n const cell = this.getByPoint({ y: i, x: 0 });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteRow)) {\n console.warn(`Cannot delete row ${i}.`);\n return this;\n }\n ys.unshift(i);\n }\n\n const deleted: MatrixType = [];\n ys.forEach((y) => {\n const row = this.idMatrix.splice(y, 1);\n deleted.unshift(row[0]);\n });\n this.area.bottom -= ys.length;\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_ROWS',\n reflection,\n ys: ys.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n\n public addColsAndUpdate({\n x,\n numCols,\n baseX,\n diff,\n partial,\n updateChangedAt,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n diff: CellsByAddressType;\n partial?: boolean;\n updateChangedAt?: boolean;\n reflection?: StoreReflectionType;\n }) {\n const returned = this.addCols({\n x,\n numCols,\n baseX,\n reflection,\n });\n\n Object.assign(this.lastHistory!, this._update({ diff, partial, updateChangedAt }), { partial });\n return returned;\n }\n\n public addCols({\n x,\n numCols,\n baseX,\n reflection = {},\n }: {\n x: number;\n numCols: number;\n baseX: number;\n reflection?: StoreReflectionType;\n }) {\n if (this.maxNumCols !== -1 && this.getNumCols() + numCols > this.maxNumCols) {\n console.error(`Columns are limited to ${this.maxNumCols}.`);\n return this;\n }\n const numRows = this.getNumRows(1);\n const rows: IdMatrix = [];\n const changedAt = new Date();\n for (let i = 0; i < numRows; i++) {\n const row: Ids = [];\n for (let j = 0; j < numCols; j++) {\n const id = this.generateId();\n row.push(id);\n const cell = this.getByPoint({ y: i, x: baseX });\n const copied = this.copyCellLayout(cell);\n this.idMatrix[i].splice(x, 0, id);\n this.data[id] = { ...copied, changedAt };\n }\n rows.push(row);\n }\n this.area.right += numCols;\n\n this.pushHistory({\n applyed: true,\n operation: 'ADD_COLS',\n reflection,\n x,\n numCols,\n idMatrix: rows,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public deleteCols({\n x,\n numCols,\n operator = 'SYSTEM',\n reflection = {},\n }: {\n x: number;\n numCols: number;\n operator?: OperatorType;\n reflection?: StoreReflectionType;\n }) {\n if (this.minNumCols !== -1 && this.getNumCols() - numCols < this.minNumCols) {\n console.error(`At least ${this.minNumCols} column(s) are required.`);\n return this;\n }\n\n const xs: number[] = [];\n for (let i = x; i < x + numCols; i++) {\n const cell = this.getByPoint({ y: 0, x: i });\n if (operator === 'USER' && prevention.isPrevented(cell?.prevention, prevention.DeleteCol)) {\n console.warn(`Cannot delete col ${i}.`);\n continue;\n }\n xs.unshift(i);\n }\n\n const deleted: MatrixType = [];\n this.idMatrix.forEach((row) => {\n const deleting: Ids = [];\n deleted.push(deleting);\n // reverse and delete\n xs.forEach((x) => {\n deleting.unshift(...row.splice(x, 1));\n });\n });\n this.area.right -= xs.length;\n\n this.pushHistory({\n applyed: true,\n operation: 'DELETE_COLS',\n reflection,\n xs: xs.reverse(),\n deleted,\n });\n return this.shallowCopy({ copyCache: false });\n }\n public getHistories() {\n return [...this.histories];\n }\n public getHistoryIndex() {\n return this.historyIndex;\n }\n public getHistorySize() {\n return this.histories.length;\n }\n public getHistoryLimit() {\n return this.historyLimit;\n }\n\n public setFunctions(additionalFunctions: FunctionMapping) {\n this.functions = { ...functionsDefault, ...additionalFunctions };\n }\n\n public getArea(): AreaType {\n return { ...this.area };\n }\n\n public parse(point: PointType, value: string) {\n const cell = this.getByPoint(point) || {};\n const parser = this.parsers[cell.parser || ''] || defaultParser;\n return parser.call(value, cell);\n }\n\n public render(point: PointType, writer?: WriterType) {\n const cell = this.getByPoint(point) || {};\n const renderer = this.renderers[cell.renderer || ''] || defaultRenderer;\n return renderer.call(this, point, writer);\n }\n\n public stringify(point: PointType, value?: any, evaluates = false) {\n const cell = this.getByPoint(point);\n const renderer = this.renderers[cell?.renderer || ''] || defaultRenderer;\n const s = renderer.stringify(typeof value === 'undefined' ? { ...cell } : { ...cell, value });\n\n if (s[0] === '=') {\n if (evaluates) {\n return String(solveFormula({ value: s, table: this, raise: false, evaluates }));\n }\n const lexer = new Lexer(s.substring(1));\n lexer.tokenize();\n return '=' + lexer.stringifyToRef(this);\n }\n return s;\n }\n\n public trim(area: AreaType): Table {\n const copied: Table = Object.assign(Object.create(Object.getPrototypeOf(this)), this);\n copied.area = area;\n // this causes RangeError on circular reference(maximum call stack size exceeded)\n // copied.solvedCaches = {};\n return copied;\n }\n\n public getIdByAddress(address: Address) {\n let table: Table = this;\n if (address.indexOf('!') !== -1) {\n const [sheetName, addr] = address.split('!');\n const sheetId = this.sheets[stripSheetName(sheetName)];\n table = this.tables[sheetId];\n address = addr;\n }\n const { y, x } = a2p(address);\n const id = table.getId({ y, x });\n if (id) {\n const prefix = table === this ? '' : `#${table.sheetId}!`;\n return `${prefix}#${x < 0 ? '$' : ''}${id}${y < 0 ? '$' : ''}`;\n }\n }\n\n private applyDiff(diff: CellsByIdType, partial = true) {\n if (!partial) {\n Object.assign(this.data, diff);\n return;\n }\n Object.keys(diff).map((id) => {\n const cell = diff[id];\n this.data[id] = { ...this.getById(id), ...cell };\n });\n }\n\n public undo() {\n if (this.historyIndex < 0) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[this.historyIndex--];\n history.applyed = false;\n this.currentHistory = history;\n switch (history.operation) {\n case 'UPDATE':\n // diffBefore is guaranteed as total of cell (not partial)\n this.applyDiff(history.diffBefore, false);\n break;\n case 'ADD_ROWS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, height);\n this.area.bottom -= height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffBefore) {\n this.applyDiff(history.diffBefore, false);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.forEach((row) => {\n row.splice(history.x, width);\n });\n this.area.right -= width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys, deleted } = history;\n ys.forEach((y, i) => {\n this.idMatrix.splice(y, 0, deleted[i]);\n });\n this.area.bottom += ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs, deleted } = history;\n this.idMatrix.forEach((row, i) => {\n for (let j = 0; j < xs.length; j++) {\n row.splice(xs[j], 0, deleted[i][j]);\n }\n });\n this.area.right += xs.length;\n break;\n }\n case 'MOVE': {\n const { top: yFrom, left: xFrom } = history.src;\n const { top: yTo, left: xTo } = history.dst;\n const { height: rows, width: cols } = matrixShape({\n matrix: history.matrixFrom,\n base: -1,\n });\n putMatrix(this.idMatrix, history.matrixFrom, {\n top: yFrom,\n left: xFrom,\n bottom: yFrom + rows,\n right: xFrom + cols,\n });\n putMatrix(this.idMatrix, history.matrixTo, {\n top: yTo,\n left: xTo,\n bottom: yTo + rows,\n right: xTo + cols,\n });\n break;\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n\n public redo() {\n if (this.historyIndex + 1 >= this.histories.length) {\n return { history: null, newTable: this as Table };\n }\n const history = this.histories[++this.historyIndex];\n history.applyed = true;\n this.currentHistory = history;\n\n switch (history.operation) {\n case 'UPDATE':\n this.applyDiff(history.diffAfter, history.partial);\n break;\n case 'ADD_ROWS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { height } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.splice(history.y, 0, ...history.idMatrix);\n this.area.bottom += height;\n break;\n }\n case 'ADD_COLS': {\n if (history.diffAfter) {\n this.applyDiff(history.diffAfter, history.partial);\n }\n const { width } = matrixShape({ matrix: history.idMatrix });\n this.idMatrix.map((row, i) => {\n row.splice(history.x, 0, ...history.idMatrix[i]);\n });\n this.area.right += width;\n break;\n }\n case 'DELETE_ROWS': {\n const { ys } = history;\n [...ys].reverse().forEach((y) => {\n this.idMatrix.splice(y, 1);\n });\n this.area.bottom -= ys.length;\n break;\n }\n case 'DELETE_COLS': {\n const { xs } = history;\n [...xs].reverse().forEach((x) => {\n this.idMatrix.forEach((row) => {\n row.splice(x, 1);\n });\n });\n this.area.right -= xs.length;\n break;\n }\n case 'MOVE': {\n const { src, dst } = history;\n this.move({ src, dst, operator: 'USER', historicize: false });\n }\n }\n return {\n history,\n newTable: this.shallowCopy({\n copyCache: !shouldTracking(history.operation),\n }),\n };\n }\n public getFunction(name: string) {\n return this.functions[name];\n }\n\n public getLabel(key: string, n: number) {\n const labeler = this.labelers[key];\n return labeler?.(n);\n }\n public getBase() {\n return this;\n }\n public getSolvedCache(key: string) {\n return this.solvedCaches[key];\n }\n public setSolvedCache(key: string, value: any) {\n this.solvedCaches[key] = value;\n }\n public wrappedSheetName() {\n const sheetName = this.sheetName;\n if (sheetName.indexOf(' ') !== -1) {\n return `'${sheetName}'`;\n }\n return sheetName;\n }\n public sheetPrefix(omit = false) {\n if (omit) {\n return '';\n }\n if (this.sheetName) {\n return `${this.wrappedSheetName()}!`;\n }\n return '';\n }\n public rangeToArea(range: string) {\n const cells = range.split(':');\n let [start, end] = cells;\n if (start.match(/[a-zA-Z]$/)) {\n start += '1';\n }\n if (start.match(/^[1-9]/)) {\n start = `A${start}`;\n }\n if (end?.match(/[a-zA-Z]$/)) {\n end += this.bottom;\n }\n if (end?.match(/^[1-9]/)) {\n end = `${x2c(this.right)}${end}`;\n }\n const { y: top, x: left } = a2p(start);\n const { y: bottom, x: right } = a2p(end || start);\n return {\n top: Math.abs(top),\n left: Math.abs(left),\n bottom: Math.abs(bottom),\n right: Math.abs(right),\n };\n }\n}\n","import { Special } from '../constants';\nimport { Table } from '../lib/table';\nimport { MatrixType } from '../types';\nimport { FormulaError, Lexer, Parser } from './evaluator';\nimport { p2a } from '../lib/converters';\n\nconst SOLVING = new Special('solving');\n\ntype SolveFormulaType = {\n value: any;\n table: Table;\n raise?: boolean;\n evaluates?: boolean | null;\n};\n\nexport const solveFormula = ({ value, table, raise = true, evaluates = true }: SolveFormulaType) => {\n if (evaluates === null) {\n return value;\n }\n let solved = value;\n if (typeof value === 'string') {\n if (value.charAt(0) === '=') {\n try {\n const lexer = new Lexer(value.substring(1));\n lexer.tokenize();\n const parser = new Parser(lexer.tokens);\n if (evaluates === false) {\n return '=' + lexer.stringifyToRef(table);\n }\n const expr = parser.build();\n solved = expr?.evaluate?.({ table });\n } catch (e) {\n if (raise) {\n throw e;\n }\n return null;\n }\n }\n }\n if (solved instanceof Table) {\n solved = solveTable({ table: solved, raise })[0][0];\n }\n return solved;\n};\n\nexport const solveTable = ({ table, raise = true }: { table: Table; raise?: boolean }): MatrixType => {\n const area = table.getArea();\n return table.getMatrixFlatten({ area, evaluates: null }).map((row, i) => {\n const y = area.top + i;\n return row.map((value, j) => {\n const x = area.left + j;\n const address = p2a({ y, x });\n const cache = table.getSolvedCache(address);\n\n try {\n if (cache === SOLVING) {\n throw new FormulaError('#REF!', 'References are circulating.', new Error(value as string));\n } else if (cache instanceof FormulaError) {\n throw cache;\n } else if (cache != null) {\n return cache;\n }\n table.setSolvedCache(address, SOLVING);\n const solved = solveFormula({ value, table, raise });\n table.setSolvedCache(address, solved);\n return solved;\n } catch (e) {\n table.setSolvedCache(address, e);\n if (raise) {\n throw e;\n }\n return null;\n }\n });\n });\n};\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport dayjs from 'dayjs';\nimport { FULLDATE_FORMAT_UTC } from '../../constants';\n\nexport const gt = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) > ensureString(right);\n }\n try {\n return ensureNumber(left) > ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const gte = (left: any, right: any): boolean => {\n if (typeof left === 'string' || typeof right === 'string') {\n return ensureString(left) >= ensureString(right);\n }\n try {\n return ensureNumber(left) >= ensureNumber(right);\n } catch {\n return false;\n }\n};\n\nexport const lt = (left: any, right: any): boolean => {\n return !gte(left, right);\n};\n\nexport const lte = (left: any, right: any): boolean => {\n return !gt(left, right);\n};\n\nexport const eq = (left: any, right: any): boolean => {\n return ensureString(left) === ensureString(right);\n};\n\nexport const ne = (left: any, right: any): boolean => {\n return !eq(left, right);\n};\n\nexport const ensureNumber = (value: any, alternative?: number): number => {\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (!value) {\n // falsy is 0\n return 0;\n }\n if (value instanceof Table) {\n const v = stripTable(value, 0, 0);\n return ensureNumber(v, alternative);\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n const num = parseFloat(value as string);\n if (isNaN(num)) {\n throw new FormulaError('#VALUE!', `${value} cannot be converted to a number`);\n }\n return num;\n};\n\nexport const ensureString = (value: any): string => {\n if (value === 0) {\n return '0';\n }\n if (!value) {\n return '';\n }\n if (value instanceof Table) {\n const v = stripTable(value, 0, 0);\n return ensureString(v);\n }\n switch (value.constructor.name) {\n case 'Date': {\n const d: Date = value;\n return dayjs(d).format(FULLDATE_FORMAT_UTC);\n }\n default:\n return String(value);\n }\n};\n\nexport const ensureBoolean = (\n value: any,\n\n alternative?: boolean,\n): boolean => {\n if (typeof value === 'undefined' && typeof alternative !== 'undefined') {\n return alternative;\n }\n if (value === null) {\n return false;\n }\n if (value instanceof Table) {\n const v = stripTable(value, 0, 0);\n return ensureBoolean(v, alternative);\n }\n if (typeof value === 'string' || value instanceof String) {\n const bool = { true: true, false: false }[value.toLowerCase()];\n if (bool == null) {\n throw new FormulaError('#VALUE!', `text '${value as string}' cannot be converted to a boolean`);\n }\n return bool;\n }\n return Boolean(value);\n};\n\nexport const stripTable = (value: any, y = 0, x = 0) => {\n if (value instanceof Table) {\n return solveTable({ table: value })[y][x];\n }\n return value;\n};\n\nconst CONDITION_REGEX = /^(<=|>=|<>|>|<|=)?(.*)$/;\n\nexport const check = (value: any, condition: string): boolean => {\n const m = condition.match(CONDITION_REGEX);\n\n const [, expr = '', target = ''] = m || [];\n let comparison: any = target;\n if (expr === '>' || expr === '<' || expr === '>=' || expr === '<=') {\n if (typeof value === 'number') {\n comparison = parseFloat(target);\n }\n switch (expr) {\n case '>':\n return gt(value, comparison);\n case '>=':\n return gte(value, comparison);\n case '<':\n return lt(value, comparison);\n case '<=':\n return lte(value, comparison);\n }\n }\n\n const equals = expr === '' || expr === '=';\n if (target === '') {\n // empty target means \"\" or \"<>\"\n return (value == null || value === '') === equals;\n }\n\n if (typeof value === 'string' || value instanceof String) {\n const replaced = target\n .replace(/~\\*/g, '(\\\\*)')\n .replace(/~\\?/g, '(\\\\?)')\n .replace(/\\*/g, '(.*)')\n .replace(/\\?/g, '(.)');\n const regex = RegExp(`^${replaced}$`, 'i');\n return regex.test(value as string) === equals;\n }\n return eq(value, comparison) === equals;\n};\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber, stripTable } from './__utils';\nimport { Table } from '../../lib/table';\nimport { TimeDelta } from '../../lib/time';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class AddFunction extends BaseFunction {\n example = 'ADD(2, 3)';\n helpText = ['Returns the sum of two numbers.', \"This is the same as the '+' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'First additive.' },\n { name: 'value2', description: 'Second additive.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ADD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable(arg, 0, 0);\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 + v2;\n }\n if (v1 instanceof Date && v2 instanceof TimeDelta) {\n return v2.add(v1);\n }\n if (v1 instanceof TimeDelta && v2 instanceof Date) {\n return v1.add(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .add(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n if (typeof v1 === 'number' && v2 instanceof Date) {\n return dayjs(v2)\n .add(v1 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n if (!v1) {\n return v2;\n }\n if (!v2) {\n return v1;\n }\n throw new FormulaError('#VALUE!', 'Mismatched types for augend and addend.');\n }\n}\n","import dayjs from 'dayjs';\n\nimport { FormulaError } from '../evaluator';\nimport { TimeDelta } from '../../lib/time';\nimport { BaseFunction } from './__base';\nimport { ensureNumber, stripTable } from './__utils';\nimport { Table } from '../../lib/table';\nimport { SECONDS_IN_DAY } from '../../constants';\n\nexport class MinusFunction extends BaseFunction {\n example = 'MINUS(8, 3)';\n helpText = ['Returns the difference of two numbers.', \"This is the same as the '-' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A number that will be subtracted.' },\n { name: 'value2', description: 'A number that will subtract from value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MINUS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n arg = stripTable(arg, 0, 0);\n }\n return typeof arg === 'object' ? arg : ensureNumber(arg);\n });\n }\n\n protected main(v1: number | Date | TimeDelta, v2: number | Date | TimeDelta) {\n if (typeof v1 === 'number' && typeof v2 === 'number') {\n return v1 - v2;\n }\n if (v1 instanceof Date && v2 instanceof Date) {\n return new TimeDelta(v1, v2);\n }\n if (v1 instanceof Date && v2 instanceof TimeDelta) {\n return v2.sub(v1);\n }\n if (v1 instanceof TimeDelta && v2 instanceof Date) {\n return v1.sub(v2);\n }\n if (v1 instanceof Date && typeof v2 === 'number') {\n return dayjs(v1)\n .subtract(v2 * SECONDS_IN_DAY, 'second')\n .toDate();\n }\n if (!v1) {\n return -v2;\n }\n if (!v2) {\n return v1;\n }\n throw new FormulaError('#VALUE!', 'Mismatched types for minuend and subtrahend.');\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MultiplyFunction extends BaseFunction {\n example = 'MULTIPLY(6, 7)';\n helpText = ['Returns the product of two numbers.', \"This is the same as the '*' operator.\"];\n helpArgs = [\n { name: 'factor1', description: 'First factor.' },\n { name: 'factor2', description: 'Second factor.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MULTIPLY is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number, v2: number) {\n return v1 * v2;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class DivideFunction extends BaseFunction {\n example = 'DIVIDE(4, 2)';\n helpText = ['Returns the result of dividing one number by another.', \"This is the same as the '/' operator.\"];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for DIVIDE is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(divided: number, divisor: number) {\n return divided / divisor;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ModFunction extends BaseFunction {\n example = 'MOD(10, 4)';\n helpText = ['Returns the result of the modulo operation.'];\n helpArgs = [\n {\n name: 'dividend',\n description: 'A number that will be divided by divisor.',\n },\n { name: 'divisor', description: 'A number that will divide a dividend.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for MOD is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[1] === 0) {\n throw new FormulaError('#DIV/0!', 'The second argument must be non-zero.');\n }\n }\n\n protected main(v1: number, v2: number) {\n // https://stackoverflow.com/questions/4467539/javascript-modulo-gives-a-negative-result-for-negative-numbers\n return ((v1 % v2) + v2) % v2;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\nimport { FormulaError } from '../evaluator';\n\nexport class SumFunction extends BaseFunction {\n example = 'SUM(A2:A100, 101)';\n helpText = ['Returns the sum of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'One or more arguments are required.');\n }\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatFunction extends BaseFunction {\n example = 'CONCAT(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of two values.', \"This is the same as the '&' operator.\"];\n helpArgs = [\n { name: 'value1', description: 'A value to be concatenated with value2.' },\n { name: 'value2', description: 'A value to be concatenated with value1' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for CONCAT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(v1: string, v2: string) {\n return v1 + v2;\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class ConcatenateFunction extends BaseFunction {\n example = 'CONCATENATE(\"Hello\", \"World\")';\n helpText = ['Returns the concatenation of the values.'];\n helpArgs = [\n { name: 'value1', description: 'First string value.' },\n {\n name: 'value2',\n description: 'Additional string values to be concatenated with the value1',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureString(arg));\n }\n\n protected main(...values: string[]) {\n return values.reduce((a, b) => a + b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { eq } from './__utils';\n\nexport class EqFunction extends BaseFunction {\n example = 'EQ(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are equal, FALSE if they are not.',\n \"This is the same as the '=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for EQ is incorrect.');\n }\n }\n\n protected main(v1: any, v2: any) {\n return eq(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ne } from './__utils';\n\nexport class NeFunction extends BaseFunction {\n example = 'NE(6, 7)';\n helpText = [\n 'Returns TRUE if the two specified values are not equal, FALSE if they are.',\n \"This is the same as the '<>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for NE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return ne(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gt } from './__utils';\n\nexport class GtFunction extends BaseFunction {\n example = 'GT(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is truly greater than the second, FALSE otherwise.',\n \"This is the same as the '>' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { gte } from './__utils';\n\nexport class GteFunction extends BaseFunction {\n example = 'GTE(5, 3)';\n helpText = [\n 'Returns TRUE if the first argument is greater than the second, FALSE otherwise.',\n \"This is the same as the '>=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for GTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return gte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lt } from './__utils';\n\nexport class LtFunction extends BaseFunction {\n example = 'LT(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is truely less than the second argument, FALSE otherwise.',\n \"This is the same as the '<' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LT is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lt(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { lte } from './__utils';\n\nexport class LteFunction extends BaseFunction {\n example = 'LTE(3, 6)';\n helpText = [\n 'Returns TRUE if the first argument is less than the second argument, FALSE otherwise.',\n \"This is the same as the '<=' operator.\",\n ];\n helpArgs = [\n { name: 'value1', description: 'First value.' },\n { name: 'value2', description: 'A value to be compared with value1.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LTE is incorrect.');\n }\n }\n\n protected main(v1: number, v2: number) {\n return lte(v1, v2);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class NowFunction extends BaseFunction {\n example = 'NOW()';\n helpText = ['Returns a serial value corresponding to the current date and time.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for NOW is incorrect.');\n }\n }\n\n protected main() {\n return new Date();\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class AndFunction extends BaseFunction {\n example = 'AND(A1=1, A2=2)';\n helpText = ['Returns TRUE if all arguments are logically TRUE.', 'Returns FALSE if any argument is logically FALSE.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a && b);\n }\n}\n","import { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class OrFunction extends BaseFunction {\n example = 'OR(A1=1, A2=2)';\n helpText = ['Returns TRUE if any argument is logically true.', 'Returns FALSE if all arguments are logically false.'];\n helpArgs = [\n { name: 'expression1', description: 'First logical expression.' },\n {\n name: 'expression2',\n description: 'Additional expressions',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n this.bareArgs = this.bareArgs.map((arg) => ensureBoolean(arg));\n }\n\n protected main(...values: boolean[]) {\n return values.reduce((a, b) => a || b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class IfFunction extends BaseFunction {\n example = 'IF(A2 = \"Human\", \"Hello\", \"World\")';\n helpText = [\n 'If the logical expression is TRUE, the second argument is returned.',\n 'If FALSE, the third argument is returned.',\n ];\n helpArgs = [\n { name: 'condition', description: 'An expression as a condition' },\n {\n name: 'value1',\n description: 'value to be returned if the condition is true.',\n },\n {\n name: 'value2',\n description: 'value to be returned if the condition is false.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 2 || this.bareArgs.length === 3) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for IF is incorrect. 2 or 3 arguments must be specified.');\n }\n\n protected main(condition: boolean, v1: any, v2: any = false) {\n return condition ? v1 : v2;\n }\n}\n","// DO NOT COPY THIS CODE FOR THE OTHER.\n\nimport { Table } from '../../lib/table';\nimport { Expression, FormulaError } from '../evaluator';\nimport { FunctionProps } from './__base';\nimport { stripTable } from './__utils';\n\nexport class IfErrorFunction {\n example = 'IFERROR(A1, \"Error in cell A1\")';\n helpText = [\n 'Returns the first argument if it is not an error value, otherwise returns the second argument if present, or a blank if the second argument is absent.',\n ];\n helpArgs = [\n {\n name: 'value',\n description: 'The value to return if value itself is not an error.',\n },\n {\n name: 'value_if_error',\n description: 'The value the function returns if value is an error.',\n optional: true,\n },\n ];\n private args: Expression[];\n private table: Table;\n\n constructor({ args, table }: FunctionProps) {\n this.args = args;\n this.table = table;\n }\n\n protected validate() {\n if (this.args.length === 1 || this.args.length === 2) {\n return;\n }\n throw new FormulaError(\n '#N/A',\n 'Number of arguments for IFERROR is incorrect. 1 or 2 argument(s) must be specified.',\n );\n }\n\n public call() {\n this.validate();\n const [value, valueIfError] = this.args;\n\n try {\n return stripTable(value.evaluate({ table: this.table }));\n } catch (e) {\n return stripTable(valueIfError?.evaluate({ table: this.table }));\n }\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean } from './__utils';\n\nexport class NotFunction extends BaseFunction {\n example = 'NOT(TRUE)';\n helpText = ['Returns the inverse of the Boolean; if TRUE, NOT returns FALSE.', 'If FALSE, NOT returns TRUE.'];\n helpArgs = [\n {\n name: 'logical expression',\n description: 'A logical expression as a boolean.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 1) {\n this.bareArgs[0] = ensureBoolean(this.bareArgs[0]);\n return;\n }\n throw new FormulaError('#N/A', 'Number of arguments for NOT is incorrect. 1 argument must be specified.');\n }\n\n protected main(v1: boolean) {\n return !v1;\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountFunction extends BaseFunction {\n example = 'COUNT(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the count of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => typeof v === 'number').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\n\nexport class CountifFunction extends BaseFunction {\n example = 'COUNTIF(A1:A10,\">20\")';\n helpText = ['Returns the count of a series of cells.'];\n helpArgs = [\n { name: 'range', description: 'Target range.' },\n {\n name: 'condition',\n description: 'A condition for count.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for COUNTIF is incorrect.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(table: Table, condition: string) {\n const matrix = solveTable({ table });\n return matrix.reduce((a, b) => a.concat(b)).filter((v: any) => check(v, condition)).length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { check, ensureString } from './__utils';\nimport { AreaType } from '../../types';\n\nexport class SumifFunction extends BaseFunction {\n example = 'SUMIF(A1:A10,\">20\")';\n helpText = ['Returns the sum of a series of cells.'];\n helpArgs = [\n { name: 'range1', description: 'A condition range.' },\n {\n name: 'condition',\n description: 'A condition for summarization.',\n },\n {\n name: 'range2',\n description: 'A range to be summarized.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2 && this.bareArgs.length !== 3) {\n throw new FormulaError('#N/A', 'Number of arguments for SUMIF is incorrect.');\n }\n if (this.bareArgs[2] != undefined && this.bareArgs[2] instanceof Table) {\n throw new FormulaError('#N/A', '3rd argument must be range.');\n }\n this.bareArgs[1] = ensureString(this.bareArgs[1]);\n }\n\n protected main(range: Table, condition: string, sumRange: Table) {\n if (!(range instanceof Table)) {\n return check(range, condition) ? range : 0;\n }\n const conditionMatrix = solveTable({ table: range });\n let sumMatrix = conditionMatrix;\n if (sumRange) {\n const [top, left] = [sumRange.top, sumRange.left];\n const area: AreaType = {\n top,\n left,\n bottom: top + sumRange.getNumRows(),\n right: left + sumRange.getNumCols(),\n };\n sumMatrix = solveTable({ table: this.table.trim(area) });\n }\n let total = 0;\n conditionMatrix.forEach((row, y) =>\n row.forEach((c, x) => {\n const s = sumMatrix[y]?.[x] || 0;\n if (typeof s === 'number' && check(c, condition)) {\n total += s;\n }\n }),\n );\n return total;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber, stripTable } from './__utils';\n\nexport class VlookupFunction extends BaseFunction {\n example = 'VLOOKUP(10003, A2:B26, 2, FALSE)';\n helpText = [\n 'Searches vertically for the specified key in the first column of the range and returns the value of the specified cell in the same row.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the column in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for VLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable(this.bareArgs[0]);\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], true);\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let y = 0; y <= range.getNumRows(); y++) {\n const v = matrix[y]?.[0];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = y;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[last]?.[index - 1];\n }\n } else {\n for (let y = 0; y <= range.getNumRows(); y++) {\n if (matrix[y]?.[0] === key) {\n return matrix[y]?.[index - 1];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureBoolean, ensureNumber, stripTable } from './__utils';\n\nexport class HlookupFunction extends BaseFunction {\n example = 'HLOOKUP(10003, A2:Z6, 2, FALSE)';\n helpText = [\n 'Searches horizontally for the specified key in the first row of the range and returns the value of the specified cell in the same column.',\n ];\n helpArgs = [\n { name: 'key', description: 'Search key.' },\n {\n name: 'range',\n description: 'A range for search',\n },\n {\n name: 'index',\n description: 'The index of the row in the range.',\n },\n {\n name: 'is_sorted',\n description:\n 'FALSE: Exact match. This is recommended. TRUE: Approximate match. Before you use an approximate match, sort your search key in ascending order. Otherwise, you may likely get a wrong return value.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 3 && this.bareArgs.length !== 4) {\n throw new FormulaError('#N/A', 'Number of arguments for HLOOKUP is incorrect.');\n }\n if (this.bareArgs[0] instanceof Table) {\n this.bareArgs[0] = stripTable(this.bareArgs[0]);\n }\n if (!(this.bareArgs[1] instanceof Table)) {\n throw new FormulaError('#REF!', '2nd argument must be range');\n }\n this.bareArgs[2] = ensureNumber(this.bareArgs[2]);\n this.bareArgs[3] = ensureBoolean(this.bareArgs[3], true);\n }\n\n protected main(key: any, range: Table, index: number, isSorted: boolean) {\n const matrix = solveTable({ table: range });\n if (isSorted) {\n let last = -1;\n for (let x = 0; x <= range.getNumCols(); x++) {\n const v = matrix[0]?.[x];\n if (v == null) {\n continue;\n }\n if (v <= key) {\n last = x;\n } else {\n break;\n }\n }\n if (last !== -1) {\n return matrix[index - 1]?.[last];\n }\n } else {\n for (let x = 0; x <= range.getNumCols(); x++) {\n if (matrix[0]?.[x] === key) {\n return matrix[index - 1]?.[x];\n }\n }\n }\n throw new FormulaError('#N/A', `No values found for '${key}'.`);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LogFunction extends BaseFunction {\n example = 'LOG(128, 2)';\n helpText = ['Returns the logarithm of a number whose base is the specified number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of the specified number as base.',\n },\n { name: 'base', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n if (this.bareArgs[1] <= 1) {\n throw new FormulaError('NUM!', 'base must be greater than 1');\n }\n }\n\n protected main(value: number, base: number) {\n return Math.log2(value) / Math.log2(base);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Log10Function extends BaseFunction {\n example = 'LOG10(100)';\n helpText = ['Returns the logarithm of 10'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of 10',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LOG10 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log10(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class LnFunction extends BaseFunction {\n example = 'LN(100)';\n helpText = ['Returns the logarithm of e'];\n helpArgs = [\n {\n name: 'value',\n description: 'The value for the logarithm of e',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] <= 0) {\n throw new FormulaError('NUM!', 'value must be greater than 0');\n }\n }\n\n protected main(value: number) {\n return Math.log(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AbsFunction extends BaseFunction {\n example = 'ABS(-2)';\n helpText = ['Returns the absolute value of a number'];\n helpArgs = [{ name: 'value', description: 'target number' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ABS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.abs(value);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ProductFunction extends BaseFunction {\n example = 'PRODUCT(A2:A100)';\n helpText = ['Returns the product of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.forEach((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a * b);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RandFunction extends BaseFunction {\n example = 'RAND()';\n helpText = ['Returns a random number between 0 and 1.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for RAND is incorrect.');\n }\n }\n\n protected main() {\n return Math.random();\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class PiFunction extends BaseFunction {\n example = 'PI()';\n helpText = ['Returns the value of pi.'];\n helpArgs = [];\n\n protected validate() {\n if (this.bareArgs.length !== 0) {\n throw new FormulaError('#N/A', 'Number of arguments for PI is incorrect.');\n }\n }\n\n protected main() {\n return Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class ExpFunction extends BaseFunction {\n example = 'EXP(2)';\n helpText = ['Returns the power of a number whose base is the Euler number e.'];\n helpArgs = [\n {\n name: 'exponent',\n description: 'It is an exponent of power with e as the base.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for EXP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(exponent: number) {\n return Math.exp(exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RadiansFunction extends BaseFunction {\n example = 'RADIANS(180)';\n helpText = ['Converts an angle from degrees to radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'The angle to convert from degrees to radians.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for RADIANS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return (angle / 180) * Math.PI;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class PowerFunction extends BaseFunction {\n example = 'POWER(4,0.5)';\n helpText = ['Returns a number multiplied by an exponent.'];\n helpArgs = [\n { name: 'base', description: 'A number to be multiplied by an exponent.' },\n { name: 'exponent', description: 'An exponent to power the base.' },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for POWER is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(base: number, exponent: number) {\n return Math.pow(base, exponent);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SqrtFunction extends BaseFunction {\n example = 'SQRT(9)';\n helpText = ['Returns the positive square root of a positive number.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number for which the positive square root is to be found.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SQRT is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (this.bareArgs[0] < 0) {\n throw new FormulaError('NUM!', 'First argument must be positive.');\n }\n }\n\n protected main(value: number) {\n return Math.sqrt(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundFunction extends BaseFunction {\n example = 'ROUND(99.44,1)';\n helpText = ['Round a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUND is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.round(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RoundupFunction extends BaseFunction {\n example = 'ROUNDUP(99.44,1)';\n helpText = ['Round up a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded up.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDUP is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.ceil(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class RounddownFunction extends BaseFunction {\n example = 'ROUNDDOWN(99.44,1)';\n helpText = ['Round down a number to the specified number of decimal places according to standard rules.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A number to be rounded down.',\n },\n {\n name: 'digit',\n description: 'The number of decimal places after rounding.',\n optional: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1 && this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ROUNDDOWN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number, digit = 0) {\n const multiplier = Math.pow(10, digit);\n return Math.floor(value * multiplier) / multiplier;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class SinFunction extends BaseFunction {\n example = 'SIN(PI()/2)';\n helpText = ['Returns the sin of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the sin.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for SIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.sin(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CosFunction extends BaseFunction {\n example = 'COS(PI()/2)';\n helpText = ['Returns the cos of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the cos.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for COS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.cos(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class TanFunction extends BaseFunction {\n example = 'TAN(1)';\n helpText = ['Returns the tan of the angle specified in radians.'];\n helpArgs = [\n {\n name: 'angle',\n description: 'An angle in radians, at which you want the tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for TAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(angle: number) {\n return Math.tan(angle);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AsinFunction extends BaseFunction {\n example = 'ASIN(0)';\n helpText = ['Returns the inverse sin of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse sin between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ASIN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.asin(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AcosFunction extends BaseFunction {\n example = 'ACOS(0)';\n helpText = ['Returns the inverse cos of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse cos between -1 and 1.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ACOS is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n if (-1 > this.bareArgs[0] || this.bareArgs[0] > 1) {\n throw new FormulaError('#NUM!', 'value must be between -1 and 1');\n }\n }\n\n protected main(value: number) {\n return Math.acos(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AtanFunction extends BaseFunction {\n example = 'ATAN(1)';\n helpText = ['Returns the inverse tan of the value in radians.'];\n helpArgs = [\n {\n name: 'value',\n description: 'A value for the inverse tan.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(value: number) {\n return Math.atan(value);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class Atan2Function extends BaseFunction {\n example = 'ATAN2(4,3)';\n helpText = [\n 'Returns the angle in radians between the x-axis and a line passing from the origin through a given coordinate point (x, y).',\n ];\n helpArgs = [\n {\n name: 'x',\n description: 'x of the point.',\n },\n {\n name: 'y',\n description: 'y of the point.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 2) {\n throw new FormulaError('#N/A', 'Number of arguments for ATAN2 is incorrect.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(x: number, y: number) {\n return Math.atan2(x, y);\n }\n}\n","import { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class CountaFunction extends BaseFunction {\n example = 'COUNTA(A2:A100,B2:B100,4,26)';\n helpText = ['Returns the number of values in the data set.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: any[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(...solveTable({ table: arg }).reduce((a, b) => a.concat(b)));\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: any[]) {\n return values.filter((v) => v != null && v !== '').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class AverageFunction extends BaseFunction {\n example = 'AVERAGE(A2:A100, 101)';\n helpText = ['Returns the average of a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n if (spreaded.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n return values.reduce((a, b) => a + b) / values.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MaxFunction extends BaseFunction {\n example = 'MAX(A2:A100, 101)';\n helpText = ['Returns the max in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.max(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { solveTable } from '../solver';\nimport { Table } from '../../lib/table';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class MinFunction extends BaseFunction {\n example = 'MIN(A2:A100, 101)';\n helpText = ['Returns the min in a series of numbers or cells.'];\n helpArgs = [\n { name: 'value1', description: 'First number or range.' },\n {\n name: 'value2',\n description: 'Additional numbers or ranges',\n optional: true,\n iterable: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n throw new FormulaError('#N/A', 'Number of arguments must be greater than 0.');\n }\n const spreaded: number[] = [];\n this.bareArgs.map((arg) => {\n if (arg instanceof Table) {\n spreaded.push(\n ...solveTable({ table: arg })\n .reduce((a, b) => a.concat(b))\n .filter((v: any) => typeof v === 'number'),\n );\n return;\n }\n spreaded.push(ensureNumber(arg));\n });\n this.bareArgs = spreaded;\n }\n\n protected main(...values: number[]) {\n if (values.length === 0) {\n return 0;\n }\n return Math.min(...values);\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenFunction extends BaseFunction {\n example = 'LEN(A2)';\n helpText = ['Returns the length of a string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LEN is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return text.length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureString } from './__utils';\n\nexport class LenbFunction extends BaseFunction {\n example = 'LENB(A2)';\n helpText = ['Returns the number of bytes in the length of the string.'];\n helpArgs = [\n {\n name: 'text',\n description: 'A text to be returned the length of the bytes.',\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'Number of arguments for LENB is incorrect.');\n }\n this.bareArgs = [ensureString(this.bareArgs[0])];\n }\n\n protected main(text: string) {\n return encodeURIComponent(text).replace(/%../g, 'x').length;\n }\n}\n","import { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\nimport { ensureNumber } from './__utils';\n\nexport class UminusFunction extends BaseFunction {\n example = 'UMINUS(4)';\n helpText = ['Returns a number with positive and negative values reversed.'];\n helpArgs = [{ name: 'value1', description: 'A number that will be subtracted.' }];\n\n protected validate() {\n if (this.bareArgs.length !== 1) {\n throw new FormulaError('#N/A', 'A single numerical value is only required.');\n }\n this.bareArgs = this.bareArgs.map((arg) => ensureNumber(arg));\n }\n\n protected main(v1: number) {\n return -v1;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class RowFunction extends BaseFunction {\n example = 'ROW(A9)';\n helpText = ['Returns the row number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose row number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.table];\n } else if (this.bareArgs.length === 1) {\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for ROW is incorrect.');\n }\n }\n\n protected main(trimmed: Table) {\n return trimmed.top;\n }\n}\n","import { Table } from '../../lib/table';\nimport { FormulaError } from '../evaluator';\nimport { BaseFunction } from './__base';\n\nexport class ColFunction extends BaseFunction {\n example = 'COL(A9)';\n helpText = ['Returns the col number of a specified cell.'];\n helpArgs = [\n {\n name: 'cell_reference',\n description: 'The cell whose col number will be returned.',\n option: true,\n },\n ];\n\n protected validate() {\n if (this.bareArgs.length === 0) {\n this.bareArgs = [this.table];\n } else if (this.bareArgs.length === 1) {\n } else {\n throw new FormulaError('#N/A', 'Number of arguments for COL is incorrect.');\n }\n }\n\n protected main(trimmed: Table) {\n return trimmed.left;\n }\n}\n","import { AddFunction } from './functions/add';\nimport { MinusFunction } from './functions/minus';\nimport { MultiplyFunction } from './functions/multiply';\nimport { DivideFunction } from './functions/divide';\nimport { ModFunction } from './functions/mod';\nimport { SumFunction } from './functions/sum';\nimport { ConcatFunction } from './functions/concat';\nimport { ConcatenateFunction } from './functions/concatenate';\nimport { EqFunction } from './functions/eq';\nimport { NeFunction } from './functions/ne';\nimport { GtFunction } from './functions/gt';\nimport { GteFunction } from './functions/gte';\nimport { LtFunction } from './functions/lt';\nimport { LteFunction } from './functions/lte';\nimport { NowFunction } from './functions/now';\nimport { AndFunction } from './functions/and';\nimport { OrFunction } from './functions/or';\nimport { IfFunction } from './functions/if';\nimport { IfErrorFunction } from './functions/iferror';\nimport { NotFunction } from './functions/not';\nimport { CountFunction } from './functions/count';\nimport { CountifFunction } from './functions/countif';\nimport { SumifFunction } from './functions/sumif';\nimport { VlookupFunction } from './functions/vlookup';\nimport { HlookupFunction } from './functions/hlookup';\nimport { LogFunction } from './functions/log';\nimport { Log10Function } from './functions/log10';\nimport { LnFunction } from './functions/ln';\nimport { AbsFunction } from './functions/abs';\nimport { ProductFunction } from './functions/product';\nimport { RandFunction } from './functions/rand';\nimport { PiFunction } from './functions/pi';\nimport { ExpFunction } from './functions/exp';\nimport { RadiansFunction } from './functions/radians';\nimport { PowerFunction } from './functions/power';\nimport { SqrtFunction } from './functions/sqrt';\nimport { RoundFunction } from './functions/round';\nimport { RoundupFunction } from './functions/roundup';\nimport { RounddownFunction } from './functions/rounddown';\nimport { SinFunction } from './functions/sin';\nimport { CosFunction } from './functions/cos';\nimport { TanFunction } from './functions/tan';\nimport { AsinFunction } from './functions/asin';\nimport { AcosFunction } from './functions/acos';\nimport { AtanFunction } from './functions/atan';\nimport { Atan2Function } from './functions/atan2';\nimport { CountaFunction } from './functions/counta';\nimport { AverageFunction } from './functions/average';\nimport { MaxFunction } from './functions/max';\nimport { MinFunction } from './functions/min';\nimport { LenFunction } from './functions/len';\nimport { LenbFunction } from './functions/lenb';\nimport { UminusFunction } from './functions/uminus';\nimport { RowFunction } from './functions/row';\nimport { ColFunction } from './functions/col';\nimport type { FunctionMapping } from './functions/__base';\n\nexport const functions: FunctionMapping = {\n abs: AbsFunction,\n add: AddFunction,\n divide: DivideFunction,\n mod: ModFunction,\n minus: MinusFunction,\n uminus: UminusFunction,\n multiply: MultiplyFunction,\n pow: PowerFunction,\n power: PowerFunction,\n sqrt: SqrtFunction,\n sum: SumFunction,\n sumif: SumifFunction,\n max: MaxFunction,\n min: MinFunction,\n average: AverageFunction,\n count: CountFunction,\n counta: CountaFunction,\n countif: CountifFunction,\n product: ProductFunction,\n concat: ConcatFunction,\n concatenate: ConcatenateFunction,\n eq: EqFunction,\n ne: NeFunction,\n gt: GtFunction,\n gte: GteFunction,\n lt: LtFunction,\n lte: LteFunction,\n and: AndFunction,\n or: OrFunction,\n round: RoundFunction,\n rounddown: RounddownFunction,\n roundup: RoundupFunction,\n if: IfFunction,\n // @ts-expect-error iferror does not extends BaseFunction\n iferror: IfErrorFunction,\n not: NotFunction,\n vlookup: VlookupFunction,\n hlookup: HlookupFunction,\n row: RowFunction,\n col: ColFunction,\n now: NowFunction,\n rand: RandFunction,\n log: LogFunction,\n log10: Log10Function,\n ln: LnFunction,\n exp: ExpFunction,\n pi: PiFunction,\n radians: RadiansFunction,\n sin: SinFunction,\n cos: CosFunction,\n tan: TanFunction,\n asin: AsinFunction,\n acos: AcosFunction,\n atan: AtanFunction,\n atan2: Atan2Function,\n len: LenFunction,\n lenb: LenbFunction,\n};\n","import * as React from 'react';\nimport { StoreType } from '../types';\n\nexport type Dispatcher = React.Dispatch<{\n type: number;\n value: any;\n}>;\n\nexport const Context = React.createContext(\n {} as {\n store: StoreType;\n dispatch: Dispatcher;\n },\n);\n","import { DEFAULT_HEIGHT, DEFAULT_WIDTH, OVERSCAN_X, OVERSCAN_Y } from '../constants';\nimport { range } from './structs';\nimport { Table } from './table';\nimport type { PointType, Virtualization } from '../types';\n\nexport const getCellRectPositions = (table: Table, e: HTMLDivElement, { y, x }: PointType) => {\n let { width, height } = table.getRectSize({\n top: 1,\n left: 1,\n bottom: y,\n right: x,\n });\n width += table.headerWidth;\n height += table.headerHeight;\n const w = table.getByPoint({ y: 0, x })?.width || DEFAULT_WIDTH;\n const h = table.getByPoint({ y, x: 0 })?.height || DEFAULT_HEIGHT;\n return {\n top: height,\n left: width,\n bottom: height + h,\n right: width + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.offsetHeight,\n width = e.offsetWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (table: Table, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = table.getNumRows(),\n boundaryRight = table.getNumCols();\n\n const { top, left, bottom, right } = getScreenRect(e);\n let width = 0,\n height = 0;\n for (let x = 1; x <= table.getNumCols(); x++) {\n const w = table.getByPoint({ y: 0, x })?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, table.getNumCols());\n break;\n }\n }\n for (let y = 1; y <= table.getNumRows(); y++) {\n const h = table.getByPoint({ y, x: 0 })?.height || DEFAULT_HEIGHT;\n height += h;\n if (boundaryTop === 0 && height > top) {\n boundaryTop = Math.max(y - OVERSCAN_Y, 1);\n }\n if (height > bottom) {\n boundaryBottom = Math.min(y + OVERSCAN_Y, table.getNumRows());\n break;\n }\n }\n const ys = range(boundaryTop, boundaryBottom);\n const xs = range(boundaryLeft, boundaryRight);\n const before = table.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = table.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: table.getNumRows(),\n right: table.getNumCols(),\n });\n return {\n ys,\n xs,\n adjuster: {\n top: before.height,\n left: before.width,\n bottom: after.height,\n right: after.width,\n },\n };\n};\n\nexport const smartScroll = (\n table: Table,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const target = getCellRectPositions(table, e, targetPoint);\n\n // when header is sticky\n const up = target.top - table.headerHeight;\n const left = target.left - table.headerWidth;\n const down = target.bottom - screen.height + 1;\n const right = target.right - screen.width + 1;\n\n const isTopOver = up < screen.top;\n const isLeftOver = left < screen.left;\n const isBottomOver = target.bottom > screen.bottom;\n const isRightOver = target.right > screen.right;\n\n if (isLeftOver) {\n if (isTopOver) {\n // go left up\n e.scrollTo({ left, top: up, behavior });\n } else if (isBottomOver) {\n // go left down\n e.scrollTo({ left, top: down, behavior });\n } else {\n // go left\n e.scrollTo({ left, top: screen.top, behavior });\n }\n } else if (isRightOver) {\n if (isTopOver) {\n // go right up\n e.scrollTo({ left: right, top: up, behavior });\n } else if (isBottomOver) {\n // go right down\n e.scrollTo({ left: right, top: down, behavior });\n } else {\n // go right\n e.scrollTo({ left: right, top: screen.top, behavior });\n }\n } else {\n if (isTopOver) {\n // go up\n e.scrollTo({ left: screen.left, top: up, behavior });\n } else if (isBottomOver) {\n // go down\n e.scrollTo({ left: screen.left, top: down, behavior });\n } else {\n // go nowhere\n }\n }\n};\n","import {\n StoreType,\n RectType,\n ZoneType,\n PointType,\n RangeType,\n FeedbackType,\n CellsByAddressType,\n AreaType,\n PositionType,\n ModeType,\n} from '../types';\nimport { zoneToArea, superposeArea, matrixShape, areaShape, areaToZone } from '../lib/structs';\nimport { Table } from '../lib/table';\n\nimport { tsv2matrix, p2a, a2p } from '../lib/converters';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '../constants';\nimport { initSearchStatement, restrictPoints } from './helpers';\nimport { smartScroll } from '../lib/virtualization';\nimport * as prevention from '../lib/prevention';\n\nconst actions: { [s: string]: CoreAction<any> } = {};\n\nexport const reducer = <T>(store: StoreType, action: { type: number; value: T }): StoreType => {\n const act: CoreAction<T> | undefined = actions[action.type];\n if (act == null) {\n return store;\n }\n return { ...store, ...act.reduce(store, action.value) };\n};\n\nexport class CoreAction<T> {\n static head = 1;\n private actionId: number = 1;\n\n public reduce(store: StoreType, payload: T): StoreType {\n return store;\n }\n public call(payload: T): { type: number; value: T } {\n return {\n type: this.actionId,\n value: payload,\n };\n }\n public bind() {\n this.actionId = CoreAction.head++;\n actions[this.actionId] = this;\n return this.call.bind(this);\n }\n}\n\nclass SetSearchQueryAction<T extends string | undefined> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const searchQuery = payload;\n const { table } = store;\n return {\n ...store,\n ...initSearchStatement(table, { ...store, searchQuery }),\n searchQuery,\n };\n }\n}\nexport const setSearchQuery = new SetSearchQueryAction().bind();\n\nclass SetSearchCaseSensitiveAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const searchCaseSensitive = payload;\n const { table } = store;\n return {\n ...store,\n ...initSearchStatement(table, { ...store, searchCaseSensitive }),\n searchCaseSensitive,\n };\n }\n}\nexport const setSearchCaseSensitive = new SetSearchCaseSensitiveAction().bind();\n\nclass SetEditingCellAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n editingCell: payload,\n };\n }\n}\nexport const setEditingCell = new SetEditingCellAction().bind();\n\nclass SetEditingOnEnterAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n editingOnEnter: payload,\n };\n }\n}\nexport const setEditingOnEnter = new SetEditingOnEnterAction().bind();\n\nclass SetAutofillDraggingToAction<T extends PointType | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n autofillDraggingTo: payload,\n };\n }\n}\nexport const setAutofillDraggingTo = new SetAutofillDraggingToAction().bind();\n\nclass SetShowAddressAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n showAddress: payload,\n };\n }\n}\nexport const setShowAddress = new SetShowAddressAction().bind();\n\nclass SetContextMenuPositionAction<T extends PositionType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n contextMenuPosition: payload,\n };\n }\n}\nexport const setContextMenuPosition = new SetContextMenuPositionAction().bind();\n\nclass SetResizingPositionYAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n resizingPositionY: payload,\n };\n }\n}\nexport const setResizingPositionY = new SetResizingPositionYAction().bind();\n\nclass SetResizingPositionXAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n resizingPositionX: payload,\n };\n }\n}\nexport const setResizingPositionX = new SetResizingPositionXAction().bind();\n\nclass SetOnSaveAction<T extends FeedbackType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n onSave: payload,\n };\n }\n}\nexport const setOnSave = new SetOnSaveAction().bind();\n\nclass SetEnteringAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n entering: payload,\n };\n }\n}\nexport const setEntering = new SetEnteringAction().bind();\n\nclass SetHeaderHeightAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n headerHeight: payload,\n };\n }\n}\nexport const setHeaderHeight = new SetHeaderHeightAction().bind();\n\nclass SetHeaderWidthAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n headerWidth: payload,\n };\n }\n}\nexport const setHeaderWidth = new SetHeaderWidthAction().bind();\n\nclass SetSheetHeightAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n sheetHeight: payload,\n };\n }\n}\nexport const setSheetHeight = new SetSheetHeightAction().bind();\n\nclass SetSheetWidthAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n sheetWidth: payload,\n };\n }\n}\nexport const setSheetWidth = new SetSheetWidthAction().bind();\n\nclass InitializeTableAction<T extends Table> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n table: payload,\n tableInitialized: true,\n };\n }\n}\nexport const initializeTable = new InitializeTableAction().bind();\n\nclass UpdateTableAction<T extends Table> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n table: payload,\n ...initSearchStatement(payload, store),\n ...restrictPoints(store, payload),\n };\n }\n}\nexport const updateTable = new UpdateTableAction().bind();\n\nclass SetEditorRectAction<T extends RectType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n editorRect: payload,\n };\n }\n}\nexport const setEditorRect = new SetEditorRectAction().bind();\n\nclass SetResizingRectAction<T extends RectType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n resizingRect: payload,\n };\n }\n}\nexport const setResizingRect = new SetResizingRectAction().bind();\n\nclass BlurAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n editingCell: '',\n };\n }\n}\nexport const blur = new BlurAction().bind();\n\nclass CopyAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n copyingZone: payload,\n cutting: false,\n };\n }\n}\nexport const copy = new CopyAction().bind();\n\nclass CutAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n copyingZone: payload,\n cutting: true,\n };\n }\n}\nexport const cut = new CutAction().bind();\n\nclass PasteAction<T extends { text: string }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { choosing, copyingZone, selectingZone, cutting, table } = store;\n\n let selectingArea = zoneToArea(selectingZone);\n const copyingArea = zoneToArea(copyingZone);\n\n if (cutting) {\n const src = copyingArea;\n const { height: h, width: w } = areaShape(copyingArea);\n const dst: AreaType =\n selectingArea.top !== -1\n ? {\n top: selectingArea.top,\n left: selectingArea.left,\n bottom: selectingArea.top + h,\n right: selectingArea.left + w,\n }\n : {\n top: choosing.y,\n left: choosing.x,\n bottom: choosing.y + h,\n right: choosing.x + w,\n };\n const newTable = table.move({\n src,\n dst,\n operator: 'USER',\n reflection: {\n selectingZone: areaToZone(dst),\n copyingZone,\n cutting,\n },\n });\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n cutting: false,\n table: newTable,\n selectingZone: areaToZone(dst),\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n };\n }\n\n let newTable: Table;\n let { y, x } = choosing;\n const { text } = payload;\n if (copyingArea.top === -1) {\n const matrixFrom = tsv2matrix(text);\n const { height, width } = matrixShape({ matrix: matrixFrom, base: -1 });\n selectingArea = {\n top: y,\n left: x,\n bottom: y + height,\n right: x + width,\n };\n newTable = table.writeMatrix({\n point: { y, x },\n matrix: matrixFrom,\n reflection: {\n selectingZone: areaToZone(selectingArea),\n },\n });\n } else {\n let { height, width } = areaShape(copyingArea);\n if (selectingArea.top !== -1) {\n y = selectingArea.top;\n x = selectingArea.left;\n const superposed = superposeArea(selectingArea, copyingArea);\n height = superposed.height;\n width = superposed.width;\n }\n selectingArea = { top: y, left: x, bottom: y + height, right: x + width };\n newTable = table.copy({\n src: copyingArea,\n dst: selectingArea,\n operator: 'USER',\n reflection: {\n copyingZone,\n selectingZone,\n },\n });\n }\n return {\n ...store,\n table: newTable,\n selectingZone: areaToZone(selectingArea),\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n ...initSearchStatement(newTable, store),\n };\n }\n}\nexport const paste = new PasteAction().bind();\n\nclass EscapeAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n cutting: false,\n editingCell: '',\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n };\n }\n}\nexport const escape = new EscapeAction().bind();\n\nclass ChooseAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n choosing: payload,\n entering: true,\n };\n }\n}\nexport const choose = new ChooseAction().bind();\n\nclass SelectAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n selectingZone: payload,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n };\n }\n}\nexport const select = new SelectAction().bind();\n\nclass SelectRowsAction<T extends { range: RangeType; numCols: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { range, numCols } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: start,\n startX: 1,\n endY: end,\n endX: numCols,\n };\n return {\n ...store,\n selectingZone,\n choosing: { y: start, x: 0 },\n leftHeaderSelecting: true,\n topHeaderSelecting: false,\n };\n }\n}\nexport const selectRows = new SelectRowsAction().bind();\n\nclass SelectColsAction<T extends { range: RangeType; numRows: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { range, numRows } = payload;\n const { start, end } = range;\n const selectingZone = {\n startY: 1,\n startX: start,\n endY: numRows,\n endX: end,\n };\n\n return {\n ...store,\n selectingZone,\n choosing: { y: 0, x: start },\n leftHeaderSelecting: false,\n topHeaderSelecting: true,\n };\n }\n}\nexport const selectCols = new SelectColsAction().bind();\n\nclass DragAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { startY, startX } = store.selectingZone;\n const selectingZone = {\n startY,\n startX,\n endY: payload.y,\n endX: payload.x,\n };\n return { ...store, selectingZone };\n }\n}\nexport const drag = new DragAction().bind();\n\nclass SearchAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { matchingCells } = store;\n let { matchingCellIndex, choosing } = store;\n matchingCellIndex += payload;\n if (matchingCellIndex >= matchingCells.length) {\n matchingCellIndex = 0;\n } else if (matchingCellIndex < 0) {\n matchingCellIndex = matchingCells.length - 1;\n }\n\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { ...store, matchingCells, matchingCellIndex, choosing };\n }\n}\nexport const search = new SearchAction().bind();\n\nclass WriteAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { choosing, selectingZone, table } = store;\n const newTable = table.write({\n point: choosing,\n value: payload,\n operator: 'USER',\n reflection: {\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n table: newTable,\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n };\n }\n}\nexport const write = new WriteAction().bind();\n\nclass ClearAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { choosing, selectingZone, table } = store;\n\n let selectingArea = zoneToArea(selectingZone);\n if (selectingArea.top === -1) {\n const { y, x } = choosing;\n selectingArea = { top: y, left: x, bottom: y, right: x };\n }\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n let diffCount = 0;\n for (let y = top; y <= bottom; y++) {\n for (let x = left; x <= right; x++) {\n const cell = table.getByPoint({ y, x });\n const address = p2a({ y, x });\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n continue;\n }\n if (cell?.value != null) {\n diff[address] = { value: null };\n diffCount++;\n }\n }\n }\n if (diffCount === 0) {\n return store;\n }\n const newTable = table.update({\n diff,\n partial: true,\n operator: 'USER',\n reflection: {\n selectingZone,\n choosing,\n },\n });\n return {\n ...store,\n ...initSearchStatement(newTable, store),\n table: newTable,\n };\n }\n}\nexport const clear = new ClearAction().bind();\n\nclass UndoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { table } = store;\n const { history, newTable } = table.undo();\n if (history == null) {\n return store;\n }\n const { reflection } = history;\n return {\n ...store,\n ...restrictPoints(store, table),\n ...reflection,\n ...initSearchStatement(newTable, store),\n table: newTable,\n };\n }\n}\nexport const undo = new UndoAction().bind();\n\nclass RedoAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { table } = store;\n const { history, newTable } = table.redo();\n if (history == null) {\n return store;\n }\n const { reflection } = history;\n return {\n ...store,\n ...reflection,\n ...restrictPoints(store, table),\n ...initSearchStatement(newTable, store),\n table: newTable,\n };\n }\n}\nexport const redo = new RedoAction().bind();\n\nclass ArrowAction<\n T extends {\n shiftKey: boolean;\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { shiftKey, deltaY, deltaX, numRows, numCols } = payload;\n const { choosing, table, tabularRef } = store;\n let { selectingZone } = store;\n const { y, x } = choosing;\n if (shiftKey) {\n const [dragEndY, dragEndX] = [\n selectingZone.endY === -1 ? y : selectingZone.endY,\n selectingZone.endX === -1 ? x : selectingZone.endX,\n ];\n const [nextY, nextX] = [dragEndY + deltaY, dragEndX + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n selectingZone =\n y === nextY && x === nextX\n ? { startY: -1, startX: -1, endY: -1, endX: -1 }\n : { startY: y, startX: x, endY: nextY, endX: nextX };\n return {\n ...store,\n selectingZone,\n };\n }\n const [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getByPoint({ y: i, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getByPoint({ y: i, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getByPoint({ y: 0, x: i })?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getByPoint({ y: 0, x: i })?.width || DEFAULT_WIDTH;\n }\n }\n\n const cell = table.getByPoint({ y: nextY, x: nextX });\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n\n smartScroll(table, tabularRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const arrow = new ArrowAction().bind();\n\nclass WalkAction<\n T extends {\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n const { numRows, numCols } = payload;\n let { deltaY, deltaX } = payload;\n const { choosing, selectingZone, table, tabularRef: gridOuterRef } = store;\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n let [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < top && top !== -1) {\n deltaY = bottom - nextY;\n nextY = bottom;\n if (nextX > left) {\n nextX--;\n deltaX--;\n } else {\n deltaX = right - nextX;\n nextX = right;\n }\n }\n if (nextY > bottom && bottom !== -1) {\n deltaY = top - nextY;\n nextY = top;\n if (nextX < right) {\n nextX++;\n deltaX++;\n } else {\n deltaX = left - nextX;\n nextX = left;\n }\n }\n if (nextX < left && left !== -1) {\n deltaX = right - nextX;\n nextX = right;\n if (nextY > top) {\n nextY--;\n deltaY--;\n } else {\n deltaY = bottom - nextY;\n nextY = bottom;\n }\n }\n if (nextX > right && right !== -1) {\n deltaX = left - nextX;\n nextX = left;\n if (nextY < bottom) {\n nextY++;\n deltaY++;\n } else {\n deltaY = top - nextY;\n nextY = top;\n }\n }\n\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += table.getByPoint({ y: i, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= table.getByPoint({ y: i, x: 0 })?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += table.getByPoint({ y: 0, x: i })?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= table.getByPoint({ y: 0, x: i })?.width || DEFAULT_WIDTH;\n }\n }\n const cell = table.getByPoint({ y: nextY, x: nextX });\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n smartScroll(table, gridOuterRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const walk = new WalkAction().bind();\n\nclass SetLastEditedAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n lastEdited: payload,\n };\n }\n}\nexport const setLastEdited = new SetLastEditedAction().bind();\n\nclass SetLastFocusedRefAction<T extends React.RefObject<HTMLTextAreaElement>> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n lastFocusedRef: payload,\n };\n }\n}\n\nexport const setLastFocusedRef = new SetLastFocusedRefAction().bind();\n\nclass SetInputtingAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n inputting: payload,\n };\n }\n}\n\nexport const setInputting = new SetInputtingAction().bind();\n\nclass SetModeAction<T extends ModeType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreType {\n return {\n ...store,\n mode: payload,\n };\n }\n}\nexport const setMode = new SetModeAction().bind();\n","import type { StoreType, AreaType } from '../types';\n\nimport { zoneToArea } from './structs';\nimport { solveTable } from '../formula/solver';\nimport { Table } from './table';\n\nexport const clip = (store: StoreType): AreaType => {\n const { selectingZone, choosing, editorRef, table } = store;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n let area = selectingArea;\n if (area.left === -1) {\n area = { top: y, left: x, bottom: y, right: x };\n }\n const input = editorRef.current;\n const trimmed = table.trim(area);\n const tsv = table2tsv(trimmed);\n\n if (navigator.clipboard) {\n navigator.clipboard.writeText(tsv);\n } else if (input != null) {\n input.value = tsv;\n input.focus();\n input.select();\n document.execCommand('copy');\n input.value = '';\n input.blur();\n }\n return area;\n};\n\nconst table2tsv = (table: Table): string => {\n const lines: string[] = [];\n const matrix = solveTable({ table, raise: false });\n matrix.forEach((row, i) => {\n const cols: string[] = [];\n row.forEach((col, j) => {\n const value = table.stringify({ y: i, x: j }, col);\n if (value.indexOf('\\n') !== -1) {\n cols.push(`\"${value.replace(/\"/g, '\"\"')}\"`);\n } else {\n cols.push(value);\n }\n });\n lines.push(cols.join('\\t'));\n });\n return lines.join('\\n');\n};\n","import { Lexer } from '../formula/evaluator';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n input.focus();\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\nexport const insertRef = (input: HTMLTextAreaElement | null, ref: string, dryRun = false): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const tokenIndex = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef(input, '', true);\n};\n\nexport const expandInput = (input: HTMLTextAreaElement) => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n","import React from 'react';\n\nimport { RefPaletteType, SheetMapType, TableMapType } from '../types';\n\nexport type SheetContextType = {\n mounted: boolean;\n sheets: React.MutableRefObject<SheetMapType>;\n tables: React.MutableRefObject<TableMapType>;\n head: React.MutableRefObject<number>;\n editingCell: string;\n setEditingCell: (cell: string) => void;\n externalRefs?: { [sheetName: string]: RefPaletteType };\n setExternalRefs?: (refs: { [sheetName: string]: RefPaletteType }) => void;\n lastFocusedRef: React.MutableRefObject<HTMLTextAreaElement | null>;\n setLastFocusedRef: (ref: React.MutableRefObject<HTMLTextAreaElement | null>) => void;\n forceRender: () => void;\n};\n\nexport const SheetContext = React.createContext({} as SheetContextType);\n\nexport function useSheetContext(): [boolean, SheetContextType] {\n const ctx = React.useContext(SheetContext);\n if (ctx.tables?.current == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function useSheetDispatch() {\n const dispatch = React.useContext(SheetContext);\n if (!dispatch) {\n return undefined;\n }\n return dispatch;\n}\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport function SheetProvider({ children }: Props) {\n const [mounted, setMounted] = React.useState(false);\n const [version, setVersion] = React.useState(0);\n const head = React.useRef(1);\n const sheets = React.useRef<SheetMapType>({});\n const tables = React.useRef<TableMapType>({});\n const [editingCell, setEditingCell] = React.useState('');\n const [externalRefs, setExternalRefs] = React.useState<{ [sheetName: string]: RefPaletteType }>({});\n const lastFocusedRefInitial = React.useRef<HTMLTextAreaElement | null>(null);\n const [lastFocusedRef, setLastFocusedRef] = React.useState(lastFocusedRefInitial);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return (\n <SheetContext.Provider\n value={{\n mounted,\n tables,\n sheets,\n head,\n editingCell,\n setEditingCell,\n externalRefs,\n setExternalRefs,\n lastFocusedRef,\n setLastFocusedRef,\n forceRender: () => {\n if (version >= Number.MAX_SAFE_INTEGER) {\n setVersion(0);\n return;\n }\n setVersion(version + 1);\n },\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n}\n","export const REF_PALETTE = [\n // orange\n '#FF6600',\n // purple\n '#AA44FF',\n // emeraldblue\n '#00CCCC',\n // peach\n '#EEAAEE',\n // yellow\n '#DDDD00',\n // winered\n '#AA4444',\n // lightgreen\n '#00FF00',\n // pink\n '#FF00FF',\n // navy\n '#3366FF',\n];\n","import React from 'react';\n\n// Return the document object with SSR.\nexport const useBrowser = () => {\n const [ok, setOk] = React.useState(false);\n React.useEffect(() => {\n setOk(true);\n });\n if (ok && typeof window !== 'undefined') {\n return { window, document };\n }\n return { window: null, document: null };\n};\n","import React, { CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useBrowser } from './hooks';\n\ntype Props = {\n className?: string;\n style?: CSSProperties;\n children: React.ReactNode;\n [attr: string]: any;\n};\n\nexport const Fixed: React.FC<Props> = ({ children, style, className = '', ...attrs }) => {\n const { document } = useBrowser();\n if (document == null) {\n return null;\n }\n return createPortal(\n <div {...attrs} className={`gs-fixed ${className}`} style={style}>\n {children}\n </div>,\n document.body,\n );\n};\n","import React from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { clip } from '../lib/clipboard';\nimport {\n clear,\n escape,\n select,\n setEditingCell,\n undo,\n redo,\n arrow,\n walk,\n write,\n copy,\n cut,\n paste,\n setSearchQuery,\n setEntering,\n setLastEdited,\n setLastFocusedRef,\n setInputting,\n} from '../store/actions';\n\nimport { Context } from '../store';\nimport { areaToZone } from '../lib/structs';\nimport * as prevention from '../lib/prevention';\nimport { expandInput, insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { Lexer } from '../formula/evaluator';\nimport { REF_PALETTE } from '../lib/palette';\nimport { ModeType } from '../types';\nimport { Fixed } from './Fixed';\n\ntype Props = {\n mode: ModeType;\n};\n\nexport const Editor: React.FC<Props> = ({ mode }: Props) => {\n const { store, dispatch } = React.useContext(Context);\n const {\n showAddress,\n editorRect,\n editingCell,\n choosing,\n inputting,\n selectingZone,\n searchQuery,\n editorRef,\n largeEditorRef,\n searchInputRef,\n editingOnEnter,\n onSave,\n table,\n sheetId,\n } = store;\n\n const [, sheetContext] = useSheetContext();\n React.useEffect(() => {\n editorRef?.current?.focus?.({ preventScroll: true });\n }, [editorRef]);\n\n React.useEffect(() => {\n if (!sheetContext?.lastFocusedRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === editorRef) {\n return;\n }\n if (sheetContext.lastFocusedRef === largeEditorRef) {\n return;\n }\n dispatch(setEditingCell(''));\n }, [sheetContext?.lastFocusedRef]);\n React.useEffect(() => {\n sheetContext?.setEditingCell?.(editingCell);\n }, [editingCell]);\n\n const { y, x } = choosing;\n const rowId = `${y2r(y)}`;\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const editing = editingCell === address;\n\n const cell = table.getByPoint({ y, x });\n const value: any = cell?.value;\n const valueString = table.stringify({ y, x }, value);\n const [before, setBefore] = React.useState<string>(valueString);\n React.useEffect(() => {\n setBefore(valueString);\n }, [choosing]);\n\n const { y: top, x: left, height, width } = editorRect;\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n setBefore(value);\n };\n\n const numLines = valueString.split('\\n').length;\n const [isKeyDown, setIsKeyDown] = React.useState(false);\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (isKeyDown) {\n return;\n }\n // do not debounce it if control key is down.\n if (!(e.key === 'Meta' || e.key === 'Control')) {\n setIsKeyDown(true);\n const timeout = window.setTimeout(() => {\n setIsKeyDown(false);\n window.clearTimeout(timeout);\n }, 10);\n }\n const input = e.currentTarget;\n\n const shiftKey = e.shiftKey;\n switch (e.key) {\n case 'Tab': // TAB\n e.preventDefault();\n if (editing) {\n writeCell(input.value);\n dispatch(setEditingCell(''));\n dispatch(setInputting(''));\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: shiftKey ? -1 : 1,\n }),\n );\n dispatch(setEditingCell(''));\n resetSize(e.currentTarget);\n return false;\n\n case 'Enter': // ENTER\n if (editing) {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n dispatch(setInputting(input.value));\n e.preventDefault();\n return false;\n } else {\n if (e.nativeEvent.isComposing) {\n return false;\n }\n writeCell(input.value);\n dispatch(setEditingCell(''));\n }\n resetSize(e.currentTarget);\n } else if (editingOnEnter && selectingZone.endY === -1) {\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n e.preventDefault();\n return false;\n }\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: shiftKey ? -1 : 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n\n case 'Backspace': // BACKSPACE\n if (!editing) {\n dispatch(clear(null));\n return false;\n }\n break;\n case 'Shift': // SHIFT\n return false;\n\n case 'Control': // CTRL\n return false;\n\n case 'Alt': // OPTION\n return false;\n\n case 'Meta': // COMMAND\n return false;\n\n case 'NumLock': // NUMLOCK\n return false;\n\n case 'Escape': // ESCAPE\n dispatch(escape(null));\n dispatch(setSearchQuery(undefined));\n // input.blur();\n return false;\n\n case 'ArrowLeft': // LEFT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: -1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowUp': // UP\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: -1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'ArrowRight': // RIGHT\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 0,\n deltaX: 1,\n }),\n );\n return false;\n }\n break;\n case 'ArrowDown': // DOWN\n if (!editing) {\n dispatch(\n arrow({\n shiftKey,\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n return false;\n }\n break;\n case 'a': // A\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n return false;\n }\n }\n break;\n case 'c': // C\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n input.focus(); // refocus\n return false;\n }\n }\n break;\n case 'f': // F\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (typeof searchQuery === 'undefined') {\n dispatch(setSearchQuery(''));\n }\n dispatch(setEntering(false));\n window.setTimeout(() => searchInputRef.current!.focus(), 100);\n return false;\n }\n }\n break;\n case 'r': // R\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n dispatch(redo(null));\n window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n return false;\n }\n }\n break;\n case 's': // S\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n onSave &&\n onSave(table, {\n pointing: choosing,\n selectingFrom: {\n y: selectingZone.startY,\n x: selectingZone.startX,\n },\n selectingTo: {\n y: selectingZone.endY,\n x: selectingZone.endX,\n },\n });\n return false;\n }\n }\n break;\n case 'v': // V\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n window.setTimeout(() => {\n dispatch(paste({ text: input.value }));\n dispatch(setInputting(''));\n }, 50);\n return false;\n }\n }\n break;\n case 'x': // X\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n input.focus(); // refocus\n\n return false;\n }\n }\n break;\n case 'z': // Z\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n if (e.shiftKey) {\n dispatch(redo(null));\n //window.setTimeout(() => dispatch(setInputting('')), 100); // resetting textarea\n } else {\n dispatch(undo(null));\n }\n return false;\n }\n }\n break;\n case ';': // semicolon\n if (e.ctrlKey || e.metaKey) {\n if (!editing) {\n e.preventDefault();\n // MAYBE: need to aware timezone.\n writeCell(new Date().toDateString());\n }\n }\n break;\n }\n if (e.ctrlKey || e.metaKey) {\n return false;\n }\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return false;\n }\n dispatch(setEditingCell(address));\n if (!editing) {\n dispatch(setInputting(''));\n }\n return false;\n };\n\n return (\n <Fixed\n className={`gs-editor ${editing ? 'gs-editing' : ''}`}\n style={editing ? { top, left, height } : {}}\n {...{\n 'data-mode': mode,\n 'data-sheet-id': sheetId,\n }}\n >\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-editor-inner\" style={{ width }}>\n <pre\n className=\"gs-editor-hl\"\n style={{\n //...cell?.style,\n height: editorRef.current?.scrollHeight,\n width: (editorRef.current?.scrollWidth ?? 0) - 4,\n }}\n >\n {editorStyle(inputting)}\n </pre>\n <textarea\n autoFocus={true}\n spellCheck={false}\n draggable={false}\n ref={editorRef}\n rows={numLines}\n onFocus={() => {\n dispatch(setLastFocusedRef(editorRef));\n sheetContext?.setLastFocusedRef?.(editorRef);\n }}\n style={{ minWidth: width, minHeight: height }}\n onDoubleClick={(e) => {\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n return;\n }\n const input = e.currentTarget;\n resetSize(input);\n if (!editing) {\n dispatch(setInputting(valueString));\n dispatch(setEditingCell(address));\n window.setTimeout(() => {\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n const length = new String(valueString).length;\n input.setSelectionRange(length, length);\n }, 20);\n }\n }}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editing) {\n writeCell(e.target.value);\n }\n }\n resetSize(e.target);\n }}\n value={inputting}\n onChange={(e) => {\n const input = e.currentTarget;\n expandInput(input);\n dispatch(setInputting(e.currentTarget.value));\n }}\n onKeyDown={handleKeyDown}\n />\n </div>\n </Fixed>\n );\n};\n\nexport const editorStyle = (text: string) => {\n if (text[0] !== '=') {\n return <>{text}</>;\n }\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n let palletIndex = 0;\n const exists: { [ref: string]: number } = {};\n return (\n <>\n =\n {lexer.tokens.map((token, i) => {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedToken = token.stringify();\n const existsIndex = exists[normalizedToken];\n if (existsIndex !== undefined) {\n return (\n <span key={i} style={{ color: REF_PALETTE[existsIndex % REF_PALETTE.length] }}>\n {token.stringify()}\n </span>\n );\n }\n const color = REF_PALETTE[palletIndex % REF_PALETTE.length];\n exists[normalizedToken] = palletIndex++;\n return (\n <span key={i} style={{ color }} className={`gs-token-type-${token.type}`}>\n {normalizedToken}\n </span>\n );\n }\n\n return (\n <span key={i} className={`gs-token-type-${token.type} gs-token-entity-type-${typeof token.entity}`}>\n {token.stringify()}\n </span>\n );\n })}\n </>\n );\n};\n\nconst resetSize = (input: HTMLTextAreaElement) => {\n input.style.width = '0px';\n input.style.height = '0px';\n};\n","import React from 'react';\n\nimport { StoreType } from '../types';\nimport { Dispatcher } from '../store';\n\nexport type PluginContextType = {\n provided: boolean;\n store?: StoreType;\n dispatch?: Dispatcher;\n setStore: (store: StoreType) => void;\n setDispatch: (dispatch: Dispatcher) => void;\n};\n\nexport const PluginContext = React.createContext({} as PluginContextType);\n\nexport function useInitialPluginContext(): PluginContextType {\n const [store, setStore] = React.useState<StoreType | undefined>(undefined);\n const [dispatch, setDispatch] = React.useState<Dispatcher>();\n return {\n provided: true,\n store,\n dispatch,\n setStore,\n setDispatch,\n };\n}\n\nexport function usePluginContext(): [boolean, PluginContextType] {\n const ctx = React.useContext(PluginContext);\n if (ctx?.provided == null) {\n return [false, ctx];\n }\n return [true, ctx];\n}\n\nexport function usePluginDispatch() {\n const dispatch = React.useContext(PluginContext);\n if (!dispatch) {\n return undefined;\n }\n return dispatch;\n}\n\ntype Props = {\n children: React.ReactNode;\n context: PluginContextType;\n};\n\nexport function PluginBase({ children, context }: Props) {\n const [provided] = usePluginContext();\n if (provided) {\n return <>{children}</>;\n }\n return <PluginContext.Provider value={context}>{children}</PluginContext.Provider>;\n}\n","import React from 'react';\n\nimport { Props } from '../types';\n\nimport { Context } from '../store';\nimport {\n setSheetHeight,\n setSheetWidth,\n setHeaderHeight,\n setHeaderWidth,\n setEditingOnEnter,\n setShowAddress,\n setOnSave,\n initializeTable,\n setMode,\n} from '../store/actions';\n\nimport { HEADER_HEIGHT, HEADER_WIDTH } from '../constants';\nimport { useSheetContext } from './SheetProvider';\nimport { usePluginContext } from './PluginBase';\n\nexport const StoreInitializer: React.FC<Props> = ({ options = {} }) => {\n const {\n headerHeight = HEADER_HEIGHT,\n headerWidth = HEADER_WIDTH,\n sheetHeight,\n sheetWidth,\n editingOnEnter,\n showAddress,\n mode,\n onSave,\n } = options;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const { store, dispatch } = React.useContext(Context);\n\n React.useEffect(() => {\n const { table, tableInitialized } = store;\n if (table == null || tableInitialized) {\n return;\n }\n\n if (!sheetProvided || sheetContext.mounted) {\n table.absolutizeFormula();\n dispatch(initializeTable(table.shallowCopy()));\n }\n }, [sheetContext.mounted]);\n\n React.useEffect(() => {\n if (sheetHeight) {\n dispatch(setSheetHeight(sheetHeight));\n }\n }, [sheetHeight]);\n React.useEffect(() => {\n if (sheetWidth) {\n dispatch(setSheetWidth(sheetWidth));\n }\n }, [sheetWidth]);\n React.useEffect(() => {\n if (headerHeight) {\n dispatch(setHeaderHeight(headerHeight));\n }\n }, [headerHeight]);\n React.useEffect(() => {\n if (headerWidth) {\n dispatch(setHeaderWidth(headerWidth));\n }\n }, [headerWidth]);\n React.useEffect(() => {\n if (typeof editingOnEnter !== 'undefined') {\n dispatch(setEditingOnEnter(editingOnEnter));\n }\n }, [editingOnEnter]);\n React.useEffect(() => {\n if (typeof showAddress !== 'undefined') {\n dispatch(setShowAddress(showAddress));\n }\n }, [showAddress]);\n\n React.useEffect(() => {\n if (mode) {\n dispatch(setMode(mode));\n }\n }, [mode]);\n\n React.useEffect(() => {\n if (typeof onSave !== 'undefined') {\n dispatch(setOnSave(onSave));\n }\n }, [onSave]);\n\n const [pluginProvided, pluginContext] = usePluginContext();\n React.useEffect(() => {\n if (!pluginProvided) {\n return;\n }\n pluginContext.setStore(store);\n pluginContext.setDispatch(() => dispatch);\n }, [store, dispatch]);\n\n return <></>;\n};\n","import React from 'react';\n\nimport { Context } from '../store';\nimport { setResizingPositionY, setResizingPositionX, updateTable } from '../store/actions';\n\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH, MIN_WIDTH, MIN_HEIGHT } from '../constants';\nimport { zoneToArea, makeSequence, between } from '../lib/structs';\nimport { CellsByAddressType } from '../types';\nimport { p2a } from '../lib/converters';\n\nexport const Resizer: React.FC = React.memo(() => {\n const { store, dispatch } = React.useContext(Context);\n const {\n resizingPositionY: posY,\n resizingPositionX: posX,\n table,\n leftHeaderSelecting,\n topHeaderSelecting,\n selectingZone,\n editorRef,\n mainRef,\n } = store;\n\n const [y, startY, endY] = posY;\n const [x, startX, endX] = posX;\n if (y === -1 && x === -1) {\n return null;\n }\n if (mainRef.current == null || editorRef.current == null) {\n return null;\n }\n const cell = table.getByPoint({ y: y === -1 ? 0 : y, x: x === -1 ? 0 : x });\n const { y: offsetY, x: offsetX } = mainRef.current.getBoundingClientRect();\n\n const baseWidth = cell?.width || DEFAULT_WIDTH;\n const baseHeight = cell?.height || DEFAULT_HEIGHT;\n\n const width = baseWidth + (endX - startX);\n const height = baseHeight + (endY - startY);\n\n const handleResizeEnd = () => {\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n if (x !== -1) {\n let xs = [x];\n if (topHeaderSelecting && between({ start: left, end: right }, x)) {\n xs = makeSequence(left, right + 1);\n }\n xs.forEach((x) => {\n diff[p2a({ y: 0, x })] = { width };\n });\n }\n if (y !== -1) {\n let ys = [y];\n if (leftHeaderSelecting && between({ start: top, end: bottom }, y)) {\n ys = makeSequence(top, bottom + 1);\n }\n ys.forEach((y) => {\n diff[p2a({ y, x: 0 })] = { height };\n });\n }\n const newTable = table.update({\n diff,\n partial: true,\n operator: 'USER',\n reflection: { selectingZone },\n });\n dispatch(updateTable(newTable));\n dispatch(setResizingPositionY([-1, -1, -1]));\n dispatch(setResizingPositionX([-1, -1, -1]));\n editorRef.current!.focus();\n };\n const handleResizeMove = (e: React.MouseEvent) => {\n if (y !== -1) {\n let endY = e.clientY;\n const height = baseHeight + (endY - startY);\n if (height < MIN_HEIGHT) {\n endY += MIN_HEIGHT - height;\n }\n dispatch(setResizingPositionY([y, startY, endY]));\n } else if (x !== -1) {\n let endX = e.clientX;\n const width = baseWidth + (endX - startX);\n if (width < MIN_WIDTH) {\n endX += MIN_WIDTH - width;\n }\n dispatch(setResizingPositionX([x, startX, endX]));\n }\n };\n\n return (\n <div className=\"gs-resizing\" onMouseUp={handleResizeEnd} onMouseMove={handleResizeMove}>\n {x !== -1 && (\n <div className={'gs-line'} style={{ width: 1, height: '100%', left: endX - offsetX }}>\n <span style={{ left: '-50%' }}>{width}px</span>\n </div>\n )}\n {y !== -1 && (\n <div className={'gs-line'} style={{ width: '100%', height: 1, top: endY - offsetY }}>\n <span style={{ top: '-50%' }}>{height}px</span>\n </div>\n )}\n </div>\n );\n});\n","import React from 'react';\n\nimport { Context } from '../store';\nimport { FeedbackType } from '../types';\n\ntype Props = {\n onChange?: FeedbackType;\n onSelect?: FeedbackType;\n};\n\nexport const Emitter: React.FC<Props> = ({ onChange, onSelect }) => {\n const { store } = React.useContext(Context);\n const { choosing: pointing, selectingZone: zone, table, tableInitialized } = store;\n\n React.useEffect(() => {\n tableInitialized &&\n table &&\n onChange &&\n onChange(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [table]);\n\n React.useEffect(() => {\n onSelect &&\n onSelect(table, {\n pointing,\n selectingFrom: { y: zone.startY, x: zone.startX },\n selectingTo: { y: zone.endY, x: zone.endX },\n });\n }, [pointing, zone]);\n return <></>;\n};\n","import React from 'react';\nimport { clip } from '../lib/clipboard';\n\nimport { undo, redo, copy, cut, paste, setContextMenuPosition, updateTable } from '../store/actions';\nimport { areaToZone, zoneShape, zoneToArea } from '../lib/structs';\n\nimport { Context } from '../store';\nimport * as prevention from '../lib/prevention';\nimport { Fixed } from './Fixed';\n\nexport const ContextMenu: React.FC = () => {\n const { store, dispatch } = React.useContext(Context);\n\n const { table, choosing, selectingZone, leftHeaderSelecting, topHeaderSelecting, editorRef, contextMenuPosition } =\n store;\n\n const { y, x } = choosing;\n let {\n top: selectingTop,\n left: selectingLeft,\n bottom: selectingBottom,\n right: selectingRight,\n } = zoneToArea(selectingZone);\n if (selectingTop === -1) {\n [selectingTop, selectingLeft, selectingBottom, selectingRight] = [y, x, y, x];\n }\n\n const [tableHeight, tableWidth] = [table.getNumRows(), table.getNumCols()];\n const { height, width } = zoneShape({ ...selectingZone, base: 1 });\n const { y: top, x: left } = contextMenuPosition;\n if (top === -1) {\n return null;\n }\n const selectingTopCell = table.getByPoint({ y: selectingTop, x: 0 });\n const selectingLeftCell = table.getByPoint({ y: 0, x: selectingLeft });\n const selectingBottomCell = table.getByPoint({ y: selectingBottom, x: 0 });\n const selectingRightCell = table.getByPoint({ y: 0, x: selectingRight });\n const historyIndex = table.getHistoryIndex();\n\n return (\n <Fixed\n className=\"gs-contextmenu-modal\"\n onClick={(e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n return false;\n }}\n >\n <div\n className={'gs-contextmenu'}\n style={{\n top: top,\n left: left,\n }}\n >\n <ul>\n <li\n className=\"gs-enabled\"\n onClick={() => {\n const area = clip(store);\n dispatch(cut(areaToZone(area)));\n }}\n >\n <div className=\"gs-menu-name\">Cut</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">X</span>\n </div>\n </li>\n <li\n className=\"gs-enabled\"\n onClick={() => {\n const area = clip(store);\n dispatch(copy(areaToZone(area)));\n }}\n >\n <div className=\"gs-menu-name\">Copy</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">C</span>\n </div>\n </li>\n <li\n className=\"gs-enabled\"\n onClick={() => {\n const text = editorRef.current?.value || '';\n dispatch(paste({ text }));\n }}\n >\n <div className=\"gs-menu-name\">Paste</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">V</span>\n </div>\n </li>\n\n {(leftHeaderSelecting || topHeaderSelecting) && <li className=\"gs-menu-divider\" />}\n\n {leftHeaderSelecting && (\n <li\n className={\n (table.maxNumRows !== -1 && tableHeight + height > table.maxNumRows) ||\n prevention.isPrevented(selectingTopCell?.prevention, prevention.AddRowAbove)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={() => {\n const newTable = table.addRows({\n y: selectingTop,\n numRows: height,\n baseY: selectingTop,\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} above\n </div>\n </li>\n )}\n {leftHeaderSelecting && (\n <li\n className={\n (table.maxNumRows !== -1 && tableHeight + height > table.maxNumRows) ||\n prevention.isPrevented(selectingBottomCell?.prevention, prevention.AddRowBelow)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={(e) => {\n if (e.currentTarget.classList.contains('gs-disabled')) {\n return;\n }\n selectingZone.startY += height;\n selectingZone.endY += height;\n choosing.y += height;\n const newTable = table.addRows({\n y: selectingBottom + 1,\n numRows: height,\n baseY: selectingBottom,\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {height} row{height > 1 && 's'} below\n </div>\n </li>\n )}\n {topHeaderSelecting && (\n <li\n className={\n (table.maxNumCols !== -1 && tableWidth + width > table.maxNumCols) ||\n prevention.isPrevented(selectingLeftCell?.prevention, prevention.AddColLeft)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={(e) => {\n if (e.currentTarget.classList.contains('gs-disabled')) {\n return;\n }\n const newTable = table.addCols({\n x: selectingLeft,\n numCols: width,\n baseX: selectingLeft,\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} left\n </div>\n </li>\n )}\n {topHeaderSelecting && (\n <li\n className={\n (table.maxNumCols !== -1 && tableWidth + width > table.maxNumCols) ||\n prevention.isPrevented(selectingRightCell?.prevention, prevention.AddColRight)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={(e) => {\n if (e.currentTarget.classList.contains('gs-disabled')) {\n return;\n }\n selectingZone.startX += width;\n selectingZone.endX += width;\n choosing.x += width;\n const newTable = table.addCols({\n x: selectingRight + 1,\n numCols: width,\n baseX: selectingRight,\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Insert {width} column{width > 1 && 's'} right\n </div>\n </li>\n )}\n {leftHeaderSelecting && (\n <li\n className={\n (table.minNumRows !== -1 && tableHeight - height < table.minNumRows) ||\n prevention.isPrevented(selectingTopCell?.prevention, prevention.DeleteRow)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={(e) => {\n if (e.currentTarget.classList.contains('gs-disabled')) {\n return;\n }\n const newTable = table.deleteRows({\n y: selectingTop,\n numRows: height,\n operator: 'USER',\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Delete {height} row{height > 1 && 's'}\n </div>\n </li>\n )}\n {topHeaderSelecting && (\n <li\n className={\n (table.minNumCols !== -1 && tableWidth - width < table.minNumCols) ||\n prevention.isPrevented(selectingRightCell?.prevention, prevention.DeleteCol)\n ? 'gs-disabled'\n : 'gs-enabled'\n }\n onClick={() => {\n const newTable = table.deleteCols({\n x: selectingLeft,\n numCols: width,\n operator: 'USER',\n reflection: {\n selectingZone,\n choosing,\n },\n });\n dispatch(updateTable(newTable));\n }}\n >\n <div className=\"gs-menu-name\">\n Delete {width} column{width > 0 && 's'}\n </div>\n </li>\n )}\n\n {(historyIndex > -1 || historyIndex < table.getHistorySize() - 1) && <li className=\"gs-menu-divider\" />}\n\n {historyIndex > -1 && (\n <li\n className=\"gs-enabled\"\n onClick={() => {\n dispatch(undo(null));\n }}\n >\n <div className=\"gs-menu-name\">Undo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">Z</span>\n </div>\n </li>\n )}\n {historyIndex < table.getHistorySize() - 1 && (\n <li\n className=\"gs-enabled\"\n onClick={() => {\n dispatch(redo(null));\n }}\n >\n <div className=\"gs-menu-name\">Redo</div>\n <div className=\"gs-menu-shortcut\">\n <span className=\"gs-menu-underline\">R</span>\n </div>\n </li>\n )}\n </ul>\n </div>\n </Fixed>\n );\n};\n","import React from 'react';\nimport dayjs from 'dayjs';\nimport type { AreaType, CellsByAddressType, CellType, PointType, StoreType } from '../types';\nimport { Table } from './table';\nimport { areaShape, areaToZone, complementSelectingArea, concatAreas, zoneToArea } from './structs';\nimport { p2a } from './converters';\nimport { absolutizeFormula } from '../formula/evaluator';\nimport { TimeDelta } from './time';\n\nconst BORDER_AUTOFILL_DRAGGING = 'dashed 1px #888888';\n\ntype Direction = 'left' | 'right' | 'up' | 'down';\ntype Orientation = 'horizontal' | 'vertical';\nconst DirectionMapping: {\n [key: string]: [Orientation, number];\n} = {\n left: ['horizontal', -1],\n right: ['horizontal', 1],\n up: ['vertical', -1],\n down: ['vertical', 1],\n};\n\nexport class Autofill {\n private readonly src: AreaType;\n private readonly dst: AreaType;\n private readonly direction: Direction;\n private readonly table: Table;\n constructor(store: StoreType, draggingTo: PointType) {\n const { table, choosing, selectingZone } = store;\n this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);\n this.direction = this.suggestDirection(draggingTo);\n this.dst = this.getDestinationArea(draggingTo);\n this.table = table;\n }\n\n public get applied(): Table {\n const [orientation, sign] = DirectionMapping[this.direction];\n const matrix = this.table.getMatrix({ area: this.src, evaluates: null });\n const srcShape = areaShape({ ...this.src, base: 1 });\n const dstShape = areaShape({ ...this.dst, base: 1 });\n\n const diff: CellsByAddressType = {};\n if (orientation === 'horizontal') {\n for (let i = 0; i < dstShape.height; i++) {\n const patterns = this.getChangePatterns(matrix[i]);\n for (let j = 0; j < dstShape.width; j++) {\n const baseCell = matrix[i % srcShape.height]?.[j % srcShape.width];\n const x = sign > 0 ? this.dst.left + j : this.dst.right - j;\n const px = sign > 0 ? j % srcShape.width : (srcShape.width - 1 - (j % srcShape.width)) % srcShape.width;\n diff[p2a({ y: this.dst.top + i, x })] = {\n ...baseCell,\n value: patterns[px].next().value,\n };\n }\n }\n } else {\n for (let i = 0; i < dstShape.width; i++) {\n const patterns = this.getChangePatterns(matrix.map((row) => row[i]));\n for (let j = 0; j < dstShape.height; j++) {\n const baseCell = matrix[j % srcShape.height]?.[i % srcShape.width];\n const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;\n const py = sign > 0 ? j % srcShape.height : (srcShape.height - 1 - (j % srcShape.height)) % srcShape.height;\n const value = patterns[py].next().value;\n diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };\n }\n }\n }\n const table = this.table.update({\n diff,\n operator: 'USER',\n reflection: {\n selectingZone: areaToZone(this.src),\n },\n });\n return table;\n }\n\n public get wholeArea() {\n return concatAreas(this.src, this.dst);\n }\n\n public getCellStyle(target: PointType) {\n const { x, y } = target;\n const style: React.CSSProperties = {};\n const { top, left, bottom, right } = this.src;\n\n switch (this.direction) {\n case 'left': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.left === x && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'right': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.right === x - 1 && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n\n case 'up': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.top === y && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'down': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.bottom === y - 1 && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n }\n return style;\n }\n\n private getDestinationArea(autofillDraggingTo: PointType): AreaType {\n const { x, y } = autofillDraggingTo;\n const { top, left, bottom, right } = this.src;\n switch (this.direction) {\n case 'left':\n return { top, bottom, left: x, right: left - 1 };\n case 'right':\n return { top, bottom, left: right + 1, right: x };\n case 'up':\n return { left, right, top: y, bottom: top - 1 };\n case 'down':\n return { left, right, top: bottom + 1, bottom: y };\n }\n return this.src;\n }\n\n private suggestDirection(draggingTo: PointType): Direction {\n const { top, left, bottom, right } = this.src;\n let horizontal = 0,\n vertical = 0;\n if (draggingTo.x < left) {\n horizontal = draggingTo.x - left;\n } else if (draggingTo.x > right) {\n horizontal = draggingTo.x - right;\n }\n if (draggingTo.y < top) {\n vertical = draggingTo.y - top;\n } else if (draggingTo.y > bottom) {\n vertical = draggingTo.y - bottom;\n }\n // diagonal\n if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {\n if (Math.abs(horizontal) > Math.abs(vertical)) {\n return horizontal < 0 ? 'left' : 'right';\n }\n return vertical < 0 ? 'up' : 'down';\n }\n if (horizontal !== 0) {\n return horizontal < 0 ? 'left' : 'right';\n }\n if (vertical !== 0) {\n return vertical < 0 ? 'up' : 'down';\n }\n return 'down';\n }\n\n private getChangePatterns(cells: (CellType | null)[]): Generator[] {\n const result: Generator[] = [];\n const groups = groupByType(cells);\n const [orientation, sign] = DirectionMapping[this.direction];\n groups.forEach((group) => {\n const lastValue = sign > 0 ? group.last : group.first;\n switch (group.kind) {\n case 'other': {\n result.push(pass(group.first));\n return;\n }\n case 'formula': {\n const value = group.first;\n const table = this.table;\n\n function* generateFormula() {\n let slide = 0;\n const skip = cells.length * sign;\n while (true) {\n slide += skip;\n yield absolutizeFormula({\n value,\n table,\n slideY: orientation === 'vertical' ? slide : 0,\n slideX: orientation === 'horizontal' ? slide : 0,\n });\n }\n }\n result.push(generateFormula());\n return;\n }\n case 'number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateNumber() {\n let value = lastValue;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield value;\n }\n }\n const g = generateNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'date': {\n const next = (d: Date) => {\n return sign > 0 ? group.timeDelta.add(d) : group.timeDelta.sub(d);\n };\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateDate() {\n let value = lastValue as Date;\n while (true) {\n value = next(value);\n yield new Date(value);\n }\n }\n const g = generateDate();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'string+number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateStringNumber() {\n const { prefix } = extractStringNumber(group.first as string);\n const { number: lastNumber } = extractStringNumber(lastValue as string);\n let value = lastNumber;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield `${prefix}${Math.abs(value)}`;\n }\n }\n const g = generateStringNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n }\n });\n return result;\n }\n}\n\nfunction* pass(value: any) {\n while (true) {\n yield value;\n }\n}\n\ntype GroupKind = 'number' | 'date' | 'string+number' | 'formula' | 'other';\n\nconst StringNumberPattern = new RegExp('(.+?)(\\\\d+)$');\n\nconst extractStringNumber = (value: string) => {\n const match = value.match(StringNumberPattern);\n if (match) {\n const [, prefix, n] = match;\n return { prefix, number: Number(n) };\n }\n return { prefix: '', number: 0 };\n};\n\nclass TypedGroup {\n public timeDelta: TimeDelta = TimeDelta.create();\n public numericDelta: number = 0;\n public kind: GroupKind;\n public nexts: any[];\n public first: any;\n public equidistant = true;\n\n constructor(value: any) {\n this.first = value;\n this.nexts = [];\n this.kind = this.discriminate(value);\n }\n private discriminate(value: any): GroupKind {\n const kind = value instanceof Date ? 'date' : typeof value;\n if (kind === 'number' || kind === 'date') {\n return kind;\n }\n if (kind === 'string' && value[0] === '=') {\n return 'formula';\n } else if (kind === 'string' && value.match(StringNumberPattern)) {\n return 'string+number';\n }\n return 'other';\n }\n\n public get last() {\n if (this.nexts.length === 0) {\n return this.first;\n }\n return this.nexts[this.nexts.length - 1];\n }\n\n public add(value: any): TypedGroup | undefined {\n const kind = this.discriminate(value);\n if (this.kind !== kind || kind === 'other' || kind === 'formula') {\n return new TypedGroup(value);\n }\n if (this.nexts.length === 0) {\n switch (kind) {\n case 'date': {\n this.timeDelta = new TimeDelta(value as Date, this.first as Date);\n break;\n }\n case 'number': {\n this.numericDelta = (value as number) - this.first;\n break;\n }\n case 'string+number': {\n const { prefix: prefix1, number: number1 } = extractStringNumber(this.first as string);\n const { prefix: prefix2, number: number2 } = extractStringNumber(value as string);\n if (prefix1 === prefix2) {\n this.numericDelta = number2 - number1;\n }\n break;\n }\n }\n }\n this.nexts.push(value);\n }\n\n public subdivide() {\n if (this.nexts.length === 0) {\n return [];\n }\n\n const news: TypedGroup[] = [];\n\n let lastGroup: TypedGroup = this;\n switch (this.kind) {\n case 'date': {\n const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.timeDelta.add(this.nexts[i - 1])));\n this.equidistant = eq;\n return [];\n }\n case 'number': {\n const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));\n this.equidistant = eq;\n return [];\n }\n case 'string+number': {\n const { prefix: basePrefix } = extractStringNumber(this.first as string);\n for (let i = 0; i < lastGroup.nexts.length; i++) {\n const next = lastGroup.nexts[i];\n const { prefix, number } = extractStringNumber(next as string);\n if (basePrefix !== prefix) {\n const nexts = this.nexts.splice(i, this.nexts.length);\n lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);\n nexts.forEach(lastGroup.add.bind(lastGroup));\n news.push(lastGroup, ...lastGroup.subdivide());\n break;\n } else {\n const { number: firstNumber } = extractStringNumber(lastGroup.first as string);\n if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {\n lastGroup.equidistant = false;\n }\n }\n }\n break;\n }\n }\n\n return news;\n }\n}\n\nfunction groupByType(cells: (CellType | null)[]): TypedGroup[] {\n let group = new TypedGroup(cells[0]?.value);\n const groups: TypedGroup[] = [group];\n\n for (let i = 1; i < cells.length; i++) {\n const value = cells[i]?.value;\n const nextGroup = group.add(value);\n if (nextGroup) {\n groups.push(nextGroup);\n group = nextGroup;\n }\n }\n for (let i = groups.length - 1; i >= 0; i--) {\n const group = groups[i];\n groups.splice(i + 1, 0, ...group.subdivide());\n }\n return groups;\n}\n","import React from 'react';\nimport { x2c, y2r } from '../lib/converters';\nimport { zoneToArea, among, zoneShape, areaToZone, areaToRange } from '../lib/structs';\nimport {\n choose,\n select,\n drag,\n write,\n setEditorRect,\n setContextMenuPosition,\n setAutofillDraggingTo,\n updateTable,\n setEditingCell,\n setInputting,\n} from '../store/actions';\n\nimport { DUMMY_IMG } from '../constants';\n\nimport { Context } from '../store';\nimport { FormulaError } from '../formula/evaluator';\nimport { Autofill } from '../lib/autofill';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\n\ntype Props = {\n y: number;\n x: number;\n operationStyle?: React.CSSProperties;\n};\n\nexport const Cell: React.FC<Props> = React.memo(({ y, x, operationStyle }) => {\n const rowId = y2r(y);\n const colId = x2c(x);\n const address = `${colId}${rowId}`;\n const { store, dispatch } = React.useContext(Context);\n const isFirstPointed = React.useRef(true);\n\n const [sheetProvided, sheetContext] = useSheetContext();\n\n const cellRef = React.useRef<HTMLTableCellElement | null>(null);\n const {\n table,\n editingCell,\n choosing,\n selectingZone,\n leftHeaderSelecting,\n topHeaderSelecting,\n editorRef,\n showAddress,\n autofillDraggingTo,\n lastEdited,\n } = store;\n\n // Whether the focus is on another sheet\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n\n const selectingArea = zoneToArea(selectingZone); // (top, left) -> (bottom, right)\n\n const editing = editingCell === address;\n const pointed = choosing.y === y && choosing.x === x;\n const _setEditorRect = React.useCallback(() => {\n const rect = cellRef.current!.getBoundingClientRect();\n dispatch(\n setEditorRect({\n y: rect.y,\n x: rect.x,\n height: rect.height,\n width: rect.width,\n }),\n );\n }, []);\n\n React.useEffect(() => {\n // Avoid setting coordinates on the initial render to account for shifts caused by redrawing due to virtualization.\n if (pointed && !isFirstPointed.current) {\n _setEditorRect();\n if (!editing) {\n dispatch(setInputting(table.stringify({ y, x })));\n }\n return;\n }\n isFirstPointed.current = false;\n }, [pointed, editing]);\n const cell = table.getByPoint({ y, x });\n const writeCell = (value: string) => {\n if (lastEdited !== value) {\n dispatch(write(value));\n return;\n }\n };\n\n let errorMessage = '';\n let rendered;\n try {\n rendered = table.render({ y, x }, writeCell);\n } catch (e: any) {\n if (e instanceof FormulaError) {\n errorMessage = e.message;\n rendered = e.code;\n } else {\n errorMessage = e.message;\n rendered = '#UNKNOWN';\n console.error(e);\n }\n // TODO: debug flag\n }\n const lastInput = lastFocusedRef.current;\n const input = editorRef.current;\n if (!input) {\n return null;\n }\n\n return (\n <td\n key={x}\n ref={cellRef}\n data-x={x}\n data-y={y}\n data-address={address}\n className={`gs-cell ${among(selectingArea, { y, x }) ? 'gs-selecting' : ''} ${pointed ? 'gs-choosing' : ''} ${\n editing ? 'gs-editing' : ''\n }`}\n style={{\n ...cell?.style,\n ...operationStyle,\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n onClick={(e) => {\n if (autofillDraggingTo) {\n return false;\n }\n\n const fullAddress = `${table.sheetPrefix(!differentSheetFocused)}${address}`;\n const editing = !!(sheetContext?.editingCell || editingCell);\n if (editing) {\n const inserted = insertRef(lastInput, fullAddress);\n if (inserted) {\n return false;\n }\n }\n dispatch(setEditingCell(''));\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n input.focus();\n if (e.shiftKey) {\n dispatch(drag({ y, x }));\n return;\n } else {\n dispatch(choose({ y, x }));\n dispatch(select({ startY: y, startX: x, endY: -1, endX: -1 }));\n _setEditorRect();\n }\n const valueString = table.stringify({ y, x });\n dispatch(setInputting(valueString));\n }}\n onDoubleClick={(e) => {\n e.preventDefault();\n const dblclick = document.createEvent('MouseEvents');\n dblclick.initEvent('dblclick', true, true);\n input.dispatchEvent(dblclick);\n return false;\n }}\n draggable\n onDragStart={(e) => {\n if (autofillDraggingTo) {\n return false;\n }\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n dispatch(select({ startY: y, startX: x, endY: y, endX: x }));\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n return true;\n } else if (insertable != null) {\n writeCell(input.value);\n }\n dispatch(choose({ y, x }));\n input.focus();\n dispatch(setInputting(''));\n }}\n onDragEnd={() => {\n if (autofillDraggingTo) {\n if (autofillDraggingTo.x !== x || autofillDraggingTo.y !== y) {\n const autofill = new Autofill(store, autofillDraggingTo);\n dispatch(updateTable(autofill.applied));\n dispatch(select(areaToZone(autofill.wholeArea)));\n input.focus();\n }\n dispatch(setAutofillDraggingTo(null));\n return false;\n }\n const { height: h, width: w } = zoneShape(selectingZone);\n if (h + w === 0) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n lastFocusedRef.current?.focus();\n }}\n onDragEnter={() => {\n if (autofillDraggingTo) {\n if (!among(selectingArea, { x, y })) {\n dispatch(setAutofillDraggingTo({ x, y }));\n }\n return false;\n }\n if (leftHeaderSelecting) {\n dispatch(drag({ y: table.getNumRows(), x }));\n return false;\n }\n if (topHeaderSelecting) {\n dispatch(drag({ y, x: table.getNumCols() }));\n return false;\n }\n dispatch(drag({ y, x }));\n\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: x });\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${areaToRange(newArea)}`;\n insertRef(lastInput, fullRange);\n sheetContext?.forceRender?.(); // Force drawing because the formula is not reflected in largeInput\n return true;\n }}\n >\n <div className={`gs-cell-inner-wrap`}>\n <div\n className={'gs-cell-inner'}\n style={{\n ...cell?.style,\n justifyContent: cell?.justifyContent || 'left',\n alignItems: cell?.alignItems || 'start',\n }}\n >\n {errorMessage && <div className=\"gs-formula-error-triangle\" title={errorMessage} />}\n {showAddress && <div className=\"gs-cell-label\">{address}</div>}\n <div className=\"gs-cell-rendered\">{rendered}</div>\n </div>\n {((!editing && pointed && selectingArea.bottom === -1) ||\n (selectingArea.bottom === y && selectingArea.right === x)) && (\n <div\n className=\"gs-autofill-drag\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n dispatch(setAutofillDraggingTo({ x, y }));\n e.stopPropagation();\n }}\n ></div>\n )}\n </div>\n </td>\n );\n});\n","import React from 'react';\nimport { x2c } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectCols,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionX,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_WIDTH } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { useSheetContext } from './SheetProvider';\nimport { insertRef, isRefInsertable } from '../lib/input';\n\ntype Props = {\n x: number;\n};\n\nexport const HeaderCellTop: React.FC<Props> = React.memo(({ x }) => {\n const { store, dispatch } = React.useContext(Context);\n const colId = x2c(x);\n\n const {\n table,\n choosing,\n selectingZone,\n resizingRect,\n topHeaderSelecting,\n headerHeight,\n editorRef,\n autofillDraggingTo,\n } = store;\n\n const col = table.getByPoint({ y: 0, x });\n const width = col?.width || DEFAULT_WIDTH;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-x={x}\n className={`gs-th gs-th-top ${choosing.x === x ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startX, end: selectingZone.endX }, x)\n ? topHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ width, minWidth: width, maxWidth: width }}\n onClick={(e) => {\n let startX = e.shiftKey ? selectingZone.startX : x;\n if (startX === -1) {\n startX = choosing.x;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${colId}:${colId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectCols({\n range: { start: startX, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: 1, x: startX }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: table.getNumRows(), startX: x, endY: 0, endX: x }));\n return false;\n }\n dispatch(\n selectCols({\n range: { start: x, end: x },\n numRows: table.getNumRows(),\n }),\n );\n dispatch(choose({ y: 1, x }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: 1, endX: x });\n const [left, right] = [x2c(newArea.left), x2c(newArea.right)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${left}:${right}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.x === -1 && autofillDraggingTo == null) {\n const { startY } = selectingZone;\n if (startY === 1) {\n dispatch(drag({ y: table.getNumRows(), x }));\n } else {\n dispatch(drag({ y: 1, x }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ height: headerHeight, position: 'relative' }}>\n {col?.labeler ? table.getLabel(col.labeler, x) : colId}\n <div\n className={`gs-resizer ${prevention.isPrevented(col?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ height: headerHeight }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionX([x, e.clientX, e.clientX]));\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <i />\n </div>\n </div>\n </div>\n </th>\n );\n});\n","import React from 'react';\nimport { y2r } from '../lib/converters';\nimport { between, zoneToArea } from '../lib/structs';\nimport { Context } from '../store';\nimport {\n choose,\n drag,\n select,\n selectRows,\n setContextMenuPosition,\n setEditingCell,\n setResizingPositionY,\n} from '../store/actions';\nimport { DUMMY_IMG, DEFAULT_HEIGHT } from '../constants';\nimport * as prevention from '../lib/prevention';\nimport { insertRef, isRefInsertable } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\n\ntype Props = {\n y: number;\n};\n\nexport const HeaderCellLeft: React.FC<Props> = React.memo(({ y }) => {\n const rowId = `${y2r(y)}`;\n const { store, dispatch } = React.useContext(Context);\n\n const {\n choosing,\n selectingZone,\n leftHeaderSelecting,\n resizingRect,\n headerWidth,\n editorRef,\n table,\n autofillDraggingTo,\n } = store;\n\n const row = table.getByPoint({ y, x: 0 });\n const height = row?.height || DEFAULT_HEIGHT;\n\n const [sheetProvided, sheetContext] = useSheetContext();\n const differentSheetFocused = sheetProvided && sheetContext?.lastFocusedRef !== store.lastFocusedRef;\n\n const lastFocusedRef = sheetContext?.lastFocusedRef || store.lastFocusedRef;\n const lastInput = lastFocusedRef.current;\n\n return (\n <th\n data-y={y}\n className={`gs-th gs-th-left ${choosing.y === y ? 'gs-choosing' : ''} ${\n between({ start: selectingZone.startY, end: selectingZone.endY }, y)\n ? leftHeaderSelecting\n ? 'gs-th-selecting'\n : 'gs-selecting'\n : ''\n }`}\n style={{ height }}\n onClick={(e) => {\n let startY = e.shiftKey ? selectingZone.startY : y;\n if (startY === -1) {\n startY = choosing.y;\n }\n const fullColId = `${table.sheetPrefix(!differentSheetFocused)}${rowId}:${rowId}`;\n const inserted = insertRef(lastInput, fullColId);\n if (inserted) {\n return false;\n }\n\n dispatch(\n selectRows({\n range: { start: startY, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(setContextMenuPosition({ y: -1, x: -1 }));\n dispatch(choose({ y: startY, x: 1 }));\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n return false;\n }}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuPosition({ y: e.clientY, x: e.clientX }));\n return false;\n }}\n >\n <div\n className=\"gs-th-inner-wrap\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setDragImage(DUMMY_IMG, 0, 0);\n const insertable = isRefInsertable(lastInput);\n if (insertable) {\n dispatch(select({ startY: y, startX: table.getNumCols(), endY: y, endX: 0 }));\n return false;\n }\n dispatch(\n selectRows({\n range: { start: y, end: y },\n numCols: table.getNumCols(),\n }),\n );\n dispatch(choose({ y, x: 1 }));\n return false;\n }}\n onDragEnd={() => {\n if (isRefInsertable(lastInput)) {\n dispatch(select({ startY: -1, startX: -1, endY: -1, endX: -1 }));\n }\n }}\n onDragEnter={() => {\n const newArea = zoneToArea({ ...selectingZone, endY: y, endX: 1 });\n const [top, bottom] = [y2r(newArea.top), y2r(newArea.bottom)];\n const fullRange = `${table.sheetPrefix(!differentSheetFocused)}${top}:${bottom}`;\n insertRef(lastInput, fullRange);\n\n if (resizingRect.y === -1 && autofillDraggingTo == null) {\n const { startX } = selectingZone;\n if (startX === 1) {\n dispatch(drag({ y, x: table.getNumCols() }));\n } else {\n dispatch(drag({ y, x: 1 }));\n }\n }\n return false;\n }}\n onDragOver={(e) => {\n e.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n }}\n >\n <div className=\"gs-th-inner\" style={{ width: headerWidth, position: 'relative' }}>\n {row?.labeler ? table.getLabel(row.labeler, y) : rowId}\n <div\n className={`gs-resizer ${prevention.isPrevented(row?.prevention, prevention.Resize) ? 'gs-protected' : ''}`}\n style={{ width: headerWidth }}\n onMouseDown={(e) => {\n dispatch(setResizingPositionY([y, e.clientY, e.clientY]));\n e.preventDefault();\n e.stopPropagation();\n }}\n ></div>\n </div>\n </div>\n </th>\n );\n});\n","import React from 'react';\n\nimport { Cell } from './Cell';\nimport { HeaderCellTop } from './HeaderCellTop';\nimport { HeaderCellLeft } from './HeaderCellLeft';\n\nimport { Context } from '../store';\nimport { choose, select, setEntering, updateTable, setInputting } from '../store/actions';\n\nimport { Table } from '../lib/table';\nimport { RefPaletteType, PointType, StoreType, TableRef, Virtualization } from '../types';\nimport { virtualize } from '../lib/virtualization';\nimport { a2p, p2a, stripAddressAbsolute } from '../lib/converters';\nimport { zoneToArea } from '../lib/structs';\nimport { Lexer } from '../formula/evaluator';\nimport { REF_PALETTE } from '../lib/palette';\nimport { useSheetContext } from './SheetProvider';\nimport { Autofill } from '../lib/autofill';\n\ntype Props = {\n tableRef: React.MutableRefObject<TableRef | null> | undefined;\n};\n\nexport const createTableRef = () => React.useRef<TableRef | null>(null);\n\nexport const Tabular = ({ tableRef }: Props) => {\n const [refs, setRefs] = React.useState<RefPaletteType>({});\n const [, { externalRefs = {}, setExternalRefs }] = useSheetContext();\n const { store, dispatch } = React.useContext(Context);\n const {\n sheetHeight,\n table,\n tableInitialized,\n tabularRef,\n mainRef,\n headerWidth,\n headerHeight,\n editingCell,\n inputting,\n } = store;\n\n React.useEffect(() => {\n if (editingCell && inputting.startsWith('=')) {\n const refs: RefPaletteType = {};\n const externalRefs: { [sheetName: string]: RefPaletteType } = {};\n const lexer = new Lexer(inputting.substring(1));\n lexer.tokenize();\n\n let i = 0;\n for (const token of lexer.tokens) {\n if (token.type === 'REF' || token.type === 'RANGE') {\n const normalizedRef = stripAddressAbsolute(token.stringify());\n if (normalizedRef.includes('!')) {\n const [sheetName, ref] = normalizedRef.split('!');\n const upperRef = ref.toUpperCase();\n if (externalRefs[sheetName] == null) {\n externalRefs[sheetName] = {};\n }\n if (externalRefs[sheetName][upperRef] == null) {\n externalRefs[sheetName][upperRef] = i++;\n }\n } else {\n const upperRef = normalizedRef.toUpperCase();\n if (refs[upperRef] == null) {\n refs[upperRef] = i++;\n }\n }\n }\n }\n setRefs(refs);\n setExternalRefs?.(externalRefs);\n } else {\n setRefs({});\n setExternalRefs?.({});\n }\n }, [store.inputting, store.editingCell]);\n\n React.useEffect(() => {\n if (tableRef && tableInitialized) {\n tableRef.current = {\n table,\n dispatch: (table) => {\n dispatch(updateTable(table as Table));\n },\n };\n }\n }, [table]);\n React.useEffect(() => {\n const v = table.stringify(store.choosing);\n dispatch(setInputting(v || ''));\n }, [table, store.choosing]);\n const [virtualized, setVirtualized] = React.useState<Virtualization | null>(null);\n React.useEffect(() => {\n setVirtualized(virtualize(table, tabularRef.current));\n }, [tabularRef.current, table, mainRef.current?.clientHeight, mainRef.current?.clientWidth]);\n\n const operationStyles = useOperationStyles(store, { ...refs, ...externalRefs[table.sheetName] });\n\n return (\n <>\n <div\n className=\"gs-tabular\"\n style={{\n //width: sheetWidth,\n height: sheetHeight,\n }}\n ref={tabularRef}\n onMouseEnter={() => {\n dispatch(setEntering(true));\n }}\n onMouseLeave={() => {\n dispatch(setEntering(false));\n }}\n onScroll={(e) => {\n setVirtualized(virtualize(table, e.currentTarget));\n }}\n >\n <div\n className={'gs-tabular-inner'}\n style={{\n width: table.totalWidth + 1,\n height: table.totalHeight + 1,\n }}\n >\n <table\n className={`gs-table`}\n style={{\n width: table.totalWidth,\n }}\n >\n <thead className=\"gs-thead\" style={{ height: headerHeight }}>\n <tr className=\"gs-row\">\n <th\n className=\"gs-th gs-th-left gs-th-top\"\n style={{ position: 'sticky', width: headerWidth, height: headerHeight }}\n onClick={() => {\n dispatch(choose({ y: -1, x: -1 }));\n window.setTimeout(() => {\n dispatch(choose({ y: 1, x: 1 }));\n dispatch(\n select({\n startY: 1,\n startX: 1,\n endY: table.getNumRows(),\n endX: table.getNumCols(),\n }),\n );\n }, 100);\n }}\n >\n <div className=\"gs-th-inner\"></div>\n </th>\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\"\n style={{ width: virtualized?.adjuster?.left || 1 }}\n ></th>\n {virtualized?.xs?.map?.((x) => <HeaderCellTop x={x} key={x} />)}\n <th\n className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\"\n style={{ width: virtualized?.adjuster?.right }}\n ></th>\n </tr>\n </thead>\n\n <tbody className=\"gs-table-body-adjuster\">\n <tr className=\"gs-row\">\n <th\n className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}\n style={{ height: virtualized?.adjuster?.top || 1 }}\n ></th>\n <td className=\"gs-adjuster gs-adjuster-vertical\"></td>\n {virtualized?.xs?.map((x) => <td className=\"gs-adjuster gs-adjuster-vertical\" key={x}></td>)}\n <th className={`gs-adjuster gs-adjuster-horizontal gs-adjuster-vertical`}></th>\n </tr>\n </tbody>\n\n <tbody className=\"gs-table-body-data\">\n {virtualized?.ys?.map((y) => {\n return (\n <tr key={y} className=\"gs-row\">\n <HeaderCellLeft y={y} />\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-left\" />\n {virtualized?.xs?.map((x) => (\n <Cell key={x} y={y} x={x} operationStyle={operationStyles[p2a({ y, x })]} />\n ))}\n <td className=\"gs-adjuster gs-adjuster-horizontal gs-adjuster-horizontal-right\" />\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n </>\n );\n};\n\nconst BORDER_POINTED = 'solid 2px #0077ff';\nconst BORDER_SELECTED = 'solid 1px #0077ff';\nconst BORDER_CUTTING = 'dotted 2px #0077ff';\nconst BORDER_COPYING = 'dashed 2px #0077ff';\nconst SEARCH_MATCHING_BACKGROUND = 'rgba(0,200,100,.2)';\nconst SEARCH_MATCHING_BORDER = 'solid 2px #00aa78';\nconst AUTOFILL_BORDER = 'dashed 1px #444444';\n\nconst useOperationStyles = (store: StoreType, refs: RefPaletteType) => {\n const cellStyles: { [key: string]: React.CSSProperties } = {};\n const updateStyle = (point: PointType, style: React.CSSProperties) => {\n const address = p2a(point);\n cellStyles[address] = cellStyles[address] || {};\n Object.assign(cellStyles[address], style);\n };\n const { choosing, selectingZone, copyingZone, cutting, matchingCells, matchingCellIndex, table, autofillDraggingTo } =\n store;\n {\n // selecting\n const { top, left, bottom, right } = zoneToArea(selectingZone);\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: BORDER_SELECTED });\n updateStyle({ y, x: left }, { borderLeft: BORDER_SELECTED });\n updateStyle({ y, x: right }, { borderRight: BORDER_SELECTED });\n updateStyle({ y, x: right + 1 }, { borderLeft: BORDER_SELECTED });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: BORDER_SELECTED });\n updateStyle({ y: top, x }, { borderTop: BORDER_SELECTED });\n updateStyle({ y: bottom, x }, { borderBottom: BORDER_SELECTED });\n updateStyle({ y: bottom + 1, x }, { borderTop: BORDER_SELECTED });\n }\n }\n if (autofillDraggingTo) {\n const autofill = new Autofill(store, autofillDraggingTo);\n const { top, left, bottom, right } = autofill.wholeArea;\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: AUTOFILL_BORDER });\n updateStyle({ y, x: left }, { borderLeft: AUTOFILL_BORDER });\n updateStyle({ y, x: right }, { borderRight: AUTOFILL_BORDER });\n updateStyle({ y, x: right + 1 }, { borderLeft: AUTOFILL_BORDER });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: AUTOFILL_BORDER });\n updateStyle({ y: top, x }, { borderTop: AUTOFILL_BORDER });\n updateStyle({ y: bottom, x }, { borderBottom: AUTOFILL_BORDER });\n updateStyle({ y: bottom + 1, x }, { borderTop: AUTOFILL_BORDER });\n }\n }\n {\n // choosing\n const { y, x } = choosing;\n updateStyle(\n { y, x },\n {\n borderLeft: BORDER_POINTED,\n borderRight: BORDER_POINTED,\n borderTop: BORDER_POINTED,\n borderBottom: BORDER_POINTED,\n },\n );\n updateStyle({ y, x: x - 1 }, { borderRight: BORDER_POINTED });\n updateStyle({ y, x: x + 1 }, { borderLeft: BORDER_POINTED });\n updateStyle({ y: y - 1, x }, { borderBottom: BORDER_POINTED });\n updateStyle({ y: y + 1, x }, { borderTop: BORDER_POINTED });\n }\n {\n // copying\n const borderStyle = cutting ? BORDER_CUTTING : BORDER_COPYING;\n const { top, left, bottom, right } = zoneToArea(copyingZone);\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: borderStyle });\n updateStyle({ y, x: left }, { borderLeft: borderStyle });\n updateStyle({ y, x: right }, { borderRight: borderStyle });\n updateStyle({ y, x: right + 1 }, { borderLeft: borderStyle });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: borderStyle });\n updateStyle({ y: top, x }, { borderTop: borderStyle });\n updateStyle({ y: bottom, x }, { borderBottom: borderStyle });\n updateStyle({ y: bottom + 1, x }, { borderTop: borderStyle });\n }\n }\n\n Object.entries(refs).forEach(([ref, i]) => {\n const palette = REF_PALETTE[i % REF_PALETTE.length];\n const borderStyle = `dashed 2px ${palette}`;\n const { top, left, bottom, right } = table.rangeToArea(ref);\n for (let y = top; y <= bottom; y++) {\n updateStyle({ y, x: left - 1 }, { borderRight: borderStyle });\n updateStyle({ y, x: left }, { borderLeft: borderStyle });\n updateStyle({ y, x: right }, { borderRight: borderStyle });\n updateStyle({ y, x: right + 1 }, { borderLeft: borderStyle });\n }\n for (let x = left; x <= right; x++) {\n updateStyle({ y: top - 1, x }, { borderBottom: borderStyle });\n updateStyle({ y: top, x }, { borderTop: borderStyle });\n updateStyle({ y: bottom, x }, { borderBottom: borderStyle });\n updateStyle({ y: bottom + 1, x }, { borderTop: borderStyle });\n }\n });\n matchingCells.forEach((address) => {\n const { y, x } = a2p(address);\n updateStyle({ y, x }, { backgroundColor: SEARCH_MATCHING_BACKGROUND });\n });\n if (matchingCells.length > 0) {\n const { y, x } = a2p(matchingCells[matchingCellIndex]);\n updateStyle(\n { y, x },\n {\n borderLeft: SEARCH_MATCHING_BORDER,\n borderRight: SEARCH_MATCHING_BORDER,\n borderTop: SEARCH_MATCHING_BORDER,\n borderBottom: SEARCH_MATCHING_BORDER,\n },\n );\n updateStyle({ y, x: x - 1 }, { borderRight: SEARCH_MATCHING_BORDER });\n updateStyle({ y, x: x + 1 }, { borderLeft: SEARCH_MATCHING_BORDER });\n updateStyle({ y: y - 1, x }, { borderBottom: SEARCH_MATCHING_BORDER });\n updateStyle({ y: y + 1, x }, { borderTop: SEARCH_MATCHING_BORDER });\n }\n return cellStyles;\n};\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1742482099;\nexport const CSS = `.gs-root1{display:inline-block;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:rgba(0,127,255,.08);top:0;left:0;z-index:2}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px #07f;box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:#07f;color:#fff;margin:0;position:absolute;top:0;left:0}.gs-fixed{position:fixed;top:0;left:0;z-index:1}.gs-root1[data-mode=light]{background-color:#e2e2e2;color:#000}.gs-root1[data-mode=light] .gs-main{background-color:#e2e2e2;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd}.gs-root1[data-mode=light] .gs-tabular{background-color:#e2e2e2}.gs-root1[data-mode=light] .gs-formula-bar{background-color:#efefef}.gs-root1[data-mode=light] .gs-formula-bar-editor-inner{color:#555}.gs-root1[data-mode=light] .gs-cell{border-top:solid 1px #ddd;border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-adjuster{background-color:#ddd}.gs-root1[data-mode=light] .gs-tabular-inner{background-color:#f7f7f7}.gs-root1[data-mode=light] .gs-th{background-color:#efefef;color:#666}.gs-root1[data-mode=light] .gs-th.gs-selecting{background-color:#d2d2d2}.gs-root1[data-mode=light] .gs-th.gs-choosing{background-color:#bbb}.gs-root1[data-mode=light] .gs-th.gs-th-selecting{background-color:#555;color:#fff}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner-wrap{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner-wrap{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-search-bar{color:rgba(0,0,0,.3)}.gs-editor[data-mode=light].gs-editing textarea{caret-color:#000000}.gs-editor[data-mode=light].gs-editing .gs-editor-hl{background-color:#f7f7f7;color:#000}.gs-root1[data-mode=dark]{background-color:#5a5a5a;color:#eee}.gs-root1[data-mode=dark] .gs-main{background-color:#3f3f3f;border-right:solid 1px #5a5a5a;border-bottom:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-tabular{background-color:#3f3f3f}.gs-root1[data-mode=dark] .gs-formula-bar{background-color:#4f4f4f}.gs-root1[data-mode=dark] .gs-formula-bar-editor-inner{color:#bbb}.gs-root1[data-mode=dark] .gs-cell{border-top:solid 1px #5a5a5a;border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-adjuster{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-tabular-inner{background-color:#212121}.gs-root1[data-mode=dark] .gs-large-editor textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-th{background-color:#4f4f4f;color:#eee}.gs-root1[data-mode=dark] .gs-th.gs-selecting{background-color:#606060}.gs-root1[data-mode=dark] .gs-th.gs-choosing{background-color:#777}.gs-root1[data-mode=dark] .gs-th.gs-th-selecting{background-color:#aaa;color:#444}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner-wrap{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner-wrap{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-search-bar textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-search-bar{color:rgba(255,255,255,.3)}.gs-editor[data-mode=dark].gs-editing textarea{caret-color:#eeeeee}.gs-editor[data-mode=dark].gs-editing .gs-editor-hl{background-color:#212121;color:#eee}.gs-cell{padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px}.gs-cell .gs-cell-inner-wrap.gs-selecting{background-color:rgba(0,128,255,.2)}.gs-cell.gs-copying textarea:focus{outline:solid 1px #0077ff}.gs-cell.gs-selecting{z-index:1}.gs-cell.gs-selecting .gs-cell-inner{background-color:rgba(0,128,255,.2)}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:3px solid rgba(200,0,0,.9);border-right:3px solid rgba(200,0,0,.9);border-bottom:3px solid transparent;border-left:3px solid transparent;z-index:1}.gs-cell .gs-cell-label{font-size:8px;font-weight:400;font-style:normal;font-family:math,monospace,serif;letter-spacing:1px;line-height:14px;position:absolute;top:0;right:0;background-color:rgba(0,128,255,.2);color:rgba(255,255,255,.6);padding:0 2px;display:none;opacity:.7}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:auto;word-wrap:break-word;word-break:break-all;padding:0 2px}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:#07f;position:absolute;width:7px;height:7px;bottom:0;right:0;margin-right:-3.5px;margin-bottom:-3.5px;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-cell[data-x=\"1\"]{border-left:none}.gs-cell[data-y=\"1\"]{border-top:none}.gs-contextmenu-modal{width:100%;height:100vh;z-index:3}.gs-contextmenu{z-index:3;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px}.gs-contextmenu ul{min-width:250px;color:#555;margin:0;padding:0}.gs-contextmenu li{padding:5px 10px;list-style-type:none;display:flex}.gs-contextmenu li.gs-enabled{cursor:pointer}.gs-contextmenu li.gs-enabled:hover{background-color:#eee}.gs-contextmenu li.gs-disabled{opacity:.5;cursor:not-allowed}.gs-contextmenu li.gs-menu-divider{background-color:#aaa;margin:10px 0;padding:0;height:1px}.gs-contextmenu li .gs-menu-name{flex:1;font-size:15px;letter-spacing:1px}.gs-contextmenu li .gs-menu-shortcut{font-size:10px;line-height:15px;color:#999;width:15px}.gs-contextmenu li .gs-menu-shortcut:before{content:\"(\"}.gs-contextmenu li .gs-menu-shortcut:after{content:\")\"}.gs-contextmenu li .gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px #07f;margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:3;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:math,monospace,serif;position:absolute;top:0;right:0;margin-top:-15px;margin-right:-2px;padding:0 2px;font-size:10px;background-color:rgba(0,119,255,.75);color:#fff;z-index:1}.gs-formula-bar{width:100%;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box}.gs-formula-bar .gs-selecting-address{display:table-cell;vertical-align:middle;width:60px;color:rgba(200,200,200);font-size:13px;text-align:center}.gs-formula-bar .gs-fx{display:table-cell;vertical-align:middle;width:30px;color:rgba(200,200,200);font-style:italic;font-family:cursive;text-align:center;border-left:solid 1px rgba(128,128,128,.5);font-size:15px}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all}.gs-formula-bar textarea{display:table-cell;position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-adjuster{padding:0}.gs-tabular{overflow:auto;display:block;box-sizing:border-box;overscroll-behavior-x:contain}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:#07f}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3}.gs-search-bar{width:100%;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{vertical-align:middle;border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:table-cell;vertical-align:middle;width:30px}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;display:table-cell;vertical-align:middle;width:100%;resize:none}.gs-search-progress{display:table-cell;color:#999;font-size:13px;width:60px;vertical-align:middle;white-space:nowrap;text-align:center}.gs-search-close{display:table-cell;cursor:pointer;vertical-align:middle;width:24px}.gs-search-casesensitive{display:table-cell;cursor:pointer;vertical-align:middle;width:30px}.gs-search-casesensitive span{font-size:14px;padding:0 3px}.gs-search-casesensitive span.gs-search-casesensitive-on{color:#07f;background-color:rgba(200,200,255,.5);border-radius:3px}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n","import React from 'react';\nimport { Context } from '../store';\nimport { p2a } from '../lib/converters';\nimport { setEditingCell, setInputting, setLastEdited, setLastFocusedRef, walk, write } from '../store/actions';\nimport * as prevention from '../lib/prevention';\nimport { insertTextAtCursor } from '../lib/input';\nimport { useSheetContext } from './SheetProvider';\nimport { editorStyle } from './Editor';\n\nexport const FormulaBar: React.FC = () => {\n const { store, dispatch } = React.useContext(Context);\n const [before, setBefore] = React.useState('');\n const { choosing, editorRef, largeEditorRef, table, inputting, editingCell } = store;\n const [, sheetContext] = useSheetContext();\n const hlRef = React.useRef<HTMLDivElement | null>(null);\n\n const address = choosing.x === -1 ? '' : p2a(choosing);\n React.useEffect(() => {\n let value = table.getByPoint(choosing)?.value ?? '';\n // debug to remove this line\n value = table.stringify(choosing, value);\n largeEditorRef.current!.value = value;\n setBefore(value as string);\n }, [address, table]);\n\n const writeCell = (value: string) => {\n if (before !== value) {\n dispatch(write(value));\n }\n dispatch(setEditingCell(''));\n editorRef.current!.focus();\n };\n React.useEffect(() => {\n const observer = new ResizeObserver((entries) => {\n entries.forEach(updateScroll);\n });\n if (largeEditorRef.current) {\n observer.observe(largeEditorRef.current);\n }\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const largeInput = largeEditorRef.current;\n\n const handleFocus = () => {\n if (!largeInput) {\n return;\n }\n dispatch(setEditingCell(address));\n dispatch(setLastFocusedRef(largeEditorRef));\n sheetContext?.setLastFocusedRef?.(largeEditorRef);\n };\n const handleInput = (e: React.FormEvent<HTMLTextAreaElement>) => {\n dispatch(setInputting(e.currentTarget.value));\n sheetContext?.forceRender?.();\n };\n\n const updateScroll = () => {\n if (!hlRef.current || !largeEditorRef.current) {\n return;\n }\n hlRef.current.style.height = `${largeEditorRef.current.clientHeight}px`;\n hlRef.current.scrollLeft = largeEditorRef.current.scrollLeft;\n hlRef.current.scrollTop = largeEditorRef.current.scrollTop;\n };\n\n return (\n <label className=\"gs-formula-bar\">\n <div className=\"gs-selecting-address\">{address}</div>\n <div className=\"gs-fx\">Fx</div>\n <div className=\"gs-formula-bar-editor-inner\">\n <div\n className=\"gs-editor-hl\"\n ref={hlRef}\n style={{\n height: largeEditorRef.current?.clientHeight,\n width: largeEditorRef.current?.clientWidth,\n }}\n >\n {editorStyle(inputting)}\n </div>\n <textarea\n rows={1}\n spellCheck={false}\n ref={largeEditorRef}\n value={inputting}\n onInput={handleInput}\n onFocus={handleFocus}\n onBlur={(e) => {\n dispatch(setLastEdited(before));\n if (e.target.value.startsWith('=')) {\n return true;\n } else {\n if (editingCell) {\n writeCell(e.target.value);\n }\n }\n }}\n onKeyDown={(e) => {\n const input = e.currentTarget;\n switch (e.key) {\n case 'Enter': {\n if (e.altKey) {\n insertTextAtCursor(input, '\\n');\n } else {\n writeCell(input.value);\n dispatch(setInputting(''));\n dispatch(\n walk({\n numRows: table.getNumRows(),\n numCols: table.getNumCols(),\n deltaY: 1,\n deltaX: 0,\n }),\n );\n e.preventDefault();\n return false;\n }\n break;\n }\n case 'Escape': {\n input.value = before;\n dispatch(setEditingCell(''));\n e.preventDefault();\n editorRef.current!.focus();\n\n break;\n }\n }\n\n const cell = table.getByPoint(choosing);\n if (prevention.isPrevented(cell?.prevention, prevention.Write)) {\n console.warn('This cell is protected from writing.');\n e.preventDefault();\n }\n updateScroll();\n return false;\n }}\n onKeyUp={updateScroll}\n onScroll={updateScroll}\n ></textarea>\n </div>\n </label>\n );\n};\n","import React from 'react';\n\nexport interface IconProps {\n style?: React.CSSProperties;\n color?: string;\n size?: number;\n}\n\ninterface BaseProps extends IconProps {\n children?: React.ReactNode;\n}\n\n// https://tabler.io/icons\n\nexport const Base = ({ style, size = 24, children }: BaseProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox={`0 0 24 24`}\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n style={style}\n className=\"icon-tabler\"\n >\n {children}\n </svg>\n );\n};\n","import React from 'react';\nimport { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const SearchIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\" fill={color} />\n <path d=\"M21 21l-6 -6\" fill={color} />\n </Base>\n );\n};\n","import React from 'react';\nimport { type IconProps, Base } from './Base';\n\n// https://tabler.io/icons\n\nexport const CloseIcon = ({ style, color = 'none', size = 24 }: IconProps) => {\n return (\n <Base style={style} size={size}>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill={color} />\n <path d=\"M18 6l-12 12\" fill={color} />\n <path d=\"M6 6l12 12\" fill={color} />\n </Base>\n );\n};\n","import { a2p } from '../lib/converters';\nimport React from 'react';\n\nimport { Context } from '../store';\nimport { setSearchQuery, search, setSearchCaseSensitive } from '../store/actions';\nimport { smartScroll } from '../lib/virtualization';\nimport { SearchIcon } from './svg/SearchIcon';\nimport { CloseIcon } from './svg/CloseIcon';\n\nexport const SearchBar: React.FC = () => {\n const { store, dispatch } = React.useContext(Context);\n const {\n rootRef,\n editorRef,\n searchInputRef,\n tabularRef,\n searchQuery,\n searchCaseSensitive,\n matchingCellIndex,\n matchingCells,\n table,\n } = store;\n\n const matchingCell = matchingCells[matchingCellIndex];\n React.useEffect(() => {\n if (!matchingCell) {\n return;\n }\n const point = a2p(matchingCell);\n if (typeof point === 'undefined') {\n return;\n }\n smartScroll(table, tabularRef.current, point);\n }, [searchQuery, matchingCellIndex, searchCaseSensitive]);\n\n if (typeof searchQuery === 'undefined') {\n return null;\n }\n if (rootRef.current === null) {\n return null;\n }\n return (\n <label className={`gs-search-bar ${matchingCells.length > 0 ? 'gs-search-found' : ''}`}>\n <div\n className=\"gs-search-progress\"\n onClick={(e) => {\n const input = e.currentTarget.previousSibling as HTMLInputElement;\n input?.nodeName === 'INPUT' && input.focus();\n }}\n >\n {matchingCells.length === 0 ? 0 : matchingCellIndex + 1} / {matchingCells.length}\n </div>\n <div className=\"gs-search-bar-icon\" onClick={() => dispatch(search(1))}>\n <SearchIcon style={{ verticalAlign: 'middle', marginLeft: '5px' }} />\n </div>\n <textarea\n ref={searchInputRef}\n value={searchQuery}\n onChange={(e) => dispatch(setSearchQuery(e.target.value))}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n const el = editorRef?.current;\n if (el) {\n el.focus();\n }\n dispatch(setSearchQuery(undefined));\n }\n if (e.key === 'f' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n return false;\n }\n if (e.key === 'Enter') {\n dispatch(search(e.shiftKey ? -1 : 1));\n e.preventDefault();\n return false;\n }\n return true;\n }}\n ></textarea>\n <div className={`gs-search-casesensitive`}>\n <span\n className={`${searchCaseSensitive ? 'gs-search-casesensitive-on' : ''}`}\n onClick={() => dispatch(setSearchCaseSensitive(!searchCaseSensitive))}\n >\n Aa\n </span>\n </div>\n <a\n className=\"gs-search-close\"\n onClick={() => {\n dispatch(setSearchQuery(undefined));\n editorRef.current?.focus();\n }}\n >\n <CloseIcon style={{ verticalAlign: 'middle' }} />\n </a>\n </label>\n );\n};\n","import * as React from 'react';\nimport { ReducerWithoutAction } from 'react';\n\nimport { CellsByAddressType, OptionsType, Props, StoreType } from '../types';\nimport {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n HEADER_HEIGHT,\n HEADER_WIDTH,\n SHEET_HEIGHT,\n SHEET_WIDTH,\n HISTORY_LIMIT,\n} from '../constants';\nimport { functions } from '../formula/mapping';\nimport { Context } from '../store';\nimport { reducer as defaultReducer } from '../store/actions';\n\nimport { Editor } from './Editor';\nimport { StoreInitializer } from './StoreInitializer';\nimport { Resizer } from './Resizer';\nimport { Emitter } from './Emitter';\nimport { ContextMenu } from './ContextMenu';\nimport { Table } from '../lib/table';\nimport { Tabular } from './Tabular';\nimport { getMaxSizesFromCells } from '../lib/structs';\nimport { x2c, y2r } from '../lib/converters';\nimport { embedStyle } from '../styles/embedder';\nimport { useSheetContext } from './SheetProvider';\nimport { FormulaBar } from './FormulaBar';\nimport { SearchBar } from './SearchBar';\n\nexport function GridSheet({\n initialCells,\n sheetName = '',\n tableRef,\n options = {},\n className,\n style,\n additionalFunctions = {},\n}: Props) {\n const { sheetResize, showFormulaBar = true, onInit, mode = 'light' } = options;\n const [prevSheetName, setPrevSheetName] = React.useState(sheetName);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const mainRef = React.useRef<HTMLDivElement | null>(null);\n const searchInputRef = React.useRef<HTMLTextAreaElement | null>(null);\n const editorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const largeEditorRef = React.useRef<HTMLTextAreaElement | null>(null);\n const tabularRef = React.useRef<HTMLDivElement | null>(null);\n const lastFocusedRef = React.useRef<HTMLTextAreaElement | null>(null);\n const [sheetProvided, sheetContext] = useSheetContext();\n\n const [initialState] = React.useState<StoreType>(() => {\n const {\n headerHeight = HEADER_HEIGHT,\n headerWidth = HEADER_WIDTH,\n historyLimit = HISTORY_LIMIT,\n renderers,\n parsers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n } = options;\n const table = new Table({\n historyLimit,\n parsers,\n renderers,\n labelers,\n minNumRows,\n maxNumRows,\n minNumCols,\n maxNumCols,\n headerHeight,\n headerWidth,\n functions: { ...functions, ...additionalFunctions },\n });\n let sheetId = 0;\n if (sheetProvided) {\n sheetId = sheetContext.head.current++;\n table.tables = sheetContext.tables.current;\n table.sheets = sheetContext.sheets.current;\n }\n table.tables[sheetId] = table;\n table.sheetId = sheetId;\n table.initialize(initialCells);\n onInit?.(table);\n return {\n sheetId,\n table, // temporary (see StoreInitializer for detail)\n tableInitialized: false,\n rootRef,\n mainRef,\n searchInputRef,\n editorRef,\n largeEditorRef,\n tabularRef,\n lastFocusedRef,\n choosing: { y: 1, x: 1 },\n cutting: false,\n inputting: '',\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n copyingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n autofillDraggingTo: null,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n editingCell: '',\n editorRect: { y: 0, x: 0, height: 0, width: 0 },\n resizingRect: { y: -1, x: -1, height: -1, width: -1 },\n sheetHeight: 0,\n sheetWidth: 0,\n headerHeight: 0,\n headerWidth: 0,\n entering: false,\n matchingCells: [],\n matchingCellIndex: 0,\n searchCaseSensitive: false,\n editingOnEnter: true,\n showAddress: true,\n contextMenuPosition: { y: -1, x: -1 },\n resizingPositionY: [-1, -1, -1],\n resizingPositionX: [-1, -1, -1],\n minNumRows: 1,\n maxNumRows: -1,\n minNumCols: 1,\n maxNumCols: -1,\n mode: 'light',\n lastEdited: '',\n };\n });\n\n const [store, dispatch] = React.useReducer(\n defaultReducer as unknown as ReducerWithoutAction<StoreType>,\n initialState,\n () => initialState,\n );\n\n React.useEffect(() => {\n embedStyle();\n }, []);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n sheetContext.tables.current[store.sheetId] = store.table;\n sheetContext?.forceRender?.();\n }, [store.table]);\n\n React.useEffect(() => {\n if (!sheetProvided) {\n return;\n }\n if (prevSheetName !== sheetName) {\n delete sheetContext.sheets.current[prevSheetName];\n setPrevSheetName(sheetName);\n }\n if (sheetName) {\n sheetContext.sheets.current[sheetName] = store.sheetId;\n }\n store.table.sheetName = sheetName;\n }, [sheetName]);\n\n const [sheetHeight, setSheetHeight] = React.useState(\n options?.sheetHeight || estimateSheetHeight({ options, initialData: initialCells }),\n );\n const [sheetWidth, setSheetWidth] = React.useState(\n options?.sheetWidth || estimateSheetWidth({ options, initialData: initialCells }),\n );\n React.useEffect(() => {\n const intervalId = window.setInterval(() => {\n setSheetHeight(mainRef.current?.clientHeight || 0);\n setSheetWidth(mainRef.current?.clientWidth || 0);\n }, 1000);\n return () => window.clearInterval(intervalId);\n }, []);\n React.useEffect(() => {\n if (options.sheetHeight) {\n setSheetHeight(options.sheetHeight);\n }\n }, [options.sheetHeight]);\n React.useEffect(() => {\n if (options.sheetWidth) {\n setSheetWidth(options.sheetWidth);\n }\n }, [options.sheetWidth]);\n\n const { onChange, onSelect } = options;\n return (\n <Context.Provider value={{ store, dispatch }}>\n <div\n className={`gs-root1`}\n ref={rootRef}\n data-sheet-name={sheetName}\n data-mode={mode}\n style={{ maxWidth: `min(100%, ${store.table.totalWidth + 2}px)` }}\n >\n {typeof store.searchQuery === 'undefined' ? showFormulaBar && <FormulaBar /> : <SearchBar />}\n <div\n className={`gs-main ${className || ''}`}\n ref={mainRef}\n style={{\n maxWidth: `min(100%-1px, ${store.table.totalWidth + 2}px)`,\n maxHeight: store.table.totalHeight + 2,\n ...style,\n resize: sheetResize,\n }}\n >\n <Editor mode={mode} />\n <Tabular tableRef={tableRef} />\n <StoreInitializer\n initialCells={initialCells}\n options={{ ...options, sheetHeight, sheetWidth }}\n additionalFunctions={additionalFunctions}\n />\n <ContextMenu />\n <Resizer />\n <Emitter onChange={onChange} onSelect={onSelect} />\n </div>\n </div>\n </Context.Provider>\n );\n}\n\ntype EstimateProps = {\n initialData: CellsByAddressType;\n options: OptionsType;\n};\n\nconst estimateSheetHeight = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedHeight = options.headerHeight || HEADER_HEIGHT;\n for (let y = 0; y < auto.numRows; y++) {\n const row = y2r(y);\n const height = initialData?.[row]?.height || initialData?.default?.height || DEFAULT_HEIGHT;\n if (estimatedHeight + height > SHEET_HEIGHT) {\n return SHEET_HEIGHT;\n }\n estimatedHeight += height;\n }\n return estimatedHeight + 3;\n};\n\nconst estimateSheetWidth = ({ initialData, options }: EstimateProps) => {\n const auto = getMaxSizesFromCells(initialData);\n let estimatedWidth = options.headerWidth || HEADER_WIDTH;\n for (let x = 0; x < auto.numCols; x++) {\n const col = x2c(x);\n const width = initialData?.[col]?.width || initialData?.default?.width || DEFAULT_WIDTH;\n if (estimatedWidth + width > SHEET_WIDTH) {\n return SHEET_WIDTH;\n }\n estimatedWidth += width;\n }\n return estimatedWidth + 3;\n};\n","export const ThousandSeparatorRendererMixin = {\n number(value: number): any {\n if (isNaN(value)) {\n return 'NaN';\n }\n const [int, fraction] = String(value).split('.');\n const result = int.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n if (fraction == null) {\n return result;\n }\n return `${result}.${fraction}`;\n },\n};\n","import React from 'react';\nimport { WriterType } from '../types';\n\nexport const CheckboxRendererMixin = {\n bool(value: boolean, writer?: WriterType): any {\n return (\n <input\n type=\"checkbox\"\n checked={value}\n onChange={(e) => {\n writer && writer(e.currentTarget.checked.toString());\n e.currentTarget.blur();\n }}\n />\n );\n },\n};\n"],"names":["React","require$$0","jsxRuntimeModule","require$$1","this","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","range","BOOLS","buf","Parser","startRow","endRow","prevention","functions","functionsDefault","address","prevention.isPrevented","prevention.MoveFrom","prevention.MoveTo","prevention.Update","prevention.Write","prevention.Style","prevention.Resize","prevention.SetRenderer","prevention.SetParser","prevention.DeleteRow","prevention.DeleteCol","x","newTable","nextY","nextX","setEditingCell","setLastFocusedRef","jsx","document","_b","_a","value","jsxs","Fragment","endY","height","endX","width","prevention.AddRowAbove","prevention.AddRowBelow","prevention.AddColLeft","prevention.AddColRight","eq","group","editing","refs","externalRefs","table","defaultReducer","setSheetHeight","setSheetWidth"],"mappings":"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","x_google_ignoreList":[0,1,2,4,9,10]}
|