@gridsheet/react-core 1.4.0-alpha.2 → 1.4.0-alpha.3

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.
Files changed (235) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +7 -0
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  3. package/dist/_virtual/dayjs.min.js +8 -0
  4. package/dist/_virtual/dayjs.min.js.map +1 -0
  5. package/dist/_virtual/dayjs.min2.js +5 -0
  6. package/dist/_virtual/dayjs.min2.js.map +1 -0
  7. package/dist/_virtual/jsx-runtime.js +6 -0
  8. package/dist/_virtual/jsx-runtime.js.map +1 -0
  9. package/dist/_virtual/jsx-runtime2.js +5 -0
  10. package/dist/_virtual/jsx-runtime2.js.map +1 -0
  11. package/dist/_virtual/react-jsx-runtime.development.js +5 -0
  12. package/dist/_virtual/react-jsx-runtime.development.js.map +1 -0
  13. package/dist/_virtual/react-jsx-runtime.production.js +5 -0
  14. package/dist/_virtual/react-jsx-runtime.production.js.map +1 -0
  15. package/dist/_virtual/timezone.js +8 -0
  16. package/dist/_virtual/timezone.js.map +1 -0
  17. package/dist/_virtual/timezone2.js +5 -0
  18. package/dist/_virtual/timezone2.js.map +1 -0
  19. package/dist/_virtual/utc.js +8 -0
  20. package/dist/_virtual/utc.js.map +1 -0
  21. package/dist/_virtual/utc2.js +5 -0
  22. package/dist/_virtual/utc2.js.map +1 -0
  23. package/dist/components/Cell.js +232 -0
  24. package/dist/components/Cell.js.map +1 -0
  25. package/dist/components/ContextMenu.js +297 -0
  26. package/dist/components/ContextMenu.js.map +1 -0
  27. package/dist/components/Editor.js +455 -0
  28. package/dist/components/Editor.js.map +1 -0
  29. package/dist/components/Emitter.js +26 -0
  30. package/dist/components/Emitter.js.map +1 -0
  31. package/dist/components/Fixed.js +17 -0
  32. package/dist/components/Fixed.js.map +1 -0
  33. package/dist/components/FormulaBar.js +149 -0
  34. package/dist/components/FormulaBar.js.map +1 -0
  35. package/dist/components/GridSheet.js +246 -0
  36. package/dist/components/GridSheet.js.map +1 -0
  37. package/dist/components/HeaderCellLeft.js +131 -0
  38. package/dist/components/HeaderCellLeft.js.map +1 -0
  39. package/dist/components/HeaderCellTop.js +132 -0
  40. package/dist/components/HeaderCellTop.js.map +1 -0
  41. package/dist/components/PluginBase.js +35 -0
  42. package/dist/components/PluginBase.js.map +1 -0
  43. package/dist/components/Resizer.js +98 -0
  44. package/dist/components/Resizer.js.map +1 -0
  45. package/dist/components/SearchBar.js +108 -0
  46. package/dist/components/SearchBar.js.map +1 -0
  47. package/dist/components/SheetProvider.js +56 -0
  48. package/dist/components/SheetProvider.js.map +1 -0
  49. package/dist/components/StoreInitializer.js +84 -0
  50. package/dist/components/StoreInitializer.js.map +1 -0
  51. package/dist/components/Tabular.js +308 -0
  52. package/dist/components/Tabular.js.map +1 -0
  53. package/dist/components/hooks.js +15 -0
  54. package/dist/components/hooks.js.map +1 -0
  55. package/dist/components/svg/Base.js +24 -0
  56. package/dist/components/svg/Base.js.map +1 -0
  57. package/dist/components/svg/CloseIcon.js +13 -0
  58. package/dist/components/svg/CloseIcon.js.map +1 -0
  59. package/dist/components/svg/SearchIcon.js +13 -0
  60. package/dist/components/svg/SearchIcon.js.map +1 -0
  61. package/dist/constants.js +43 -0
  62. package/dist/constants.js.map +1 -0
  63. package/dist/formula/evaluator.js +674 -0
  64. package/dist/formula/evaluator.js.map +1 -0
  65. package/dist/formula/functions/__base.js +19 -0
  66. package/dist/formula/functions/__base.js.map +1 -0
  67. package/dist/formula/functions/__utils.js +145 -0
  68. package/dist/formula/functions/__utils.js.map +1 -0
  69. package/dist/formula/functions/abs.js +24 -0
  70. package/dist/formula/functions/abs.js.map +1 -0
  71. package/dist/formula/functions/acos.js +32 -0
  72. package/dist/formula/functions/acos.js.map +1 -0
  73. package/dist/formula/functions/add.js +57 -0
  74. package/dist/formula/functions/add.js.map +1 -0
  75. package/dist/formula/functions/and.js +28 -0
  76. package/dist/formula/functions/and.js.map +1 -0
  77. package/dist/formula/functions/asin.js +32 -0
  78. package/dist/formula/functions/asin.js.map +1 -0
  79. package/dist/formula/functions/atan.js +29 -0
  80. package/dist/formula/functions/atan.js.map +1 -0
  81. package/dist/formula/functions/atan2.js +35 -0
  82. package/dist/formula/functions/atan2.js.map +1 -0
  83. package/dist/formula/functions/average.js +44 -0
  84. package/dist/formula/functions/average.js.map +1 -0
  85. package/dist/formula/functions/col.js +31 -0
  86. package/dist/formula/functions/col.js.map +1 -0
  87. package/dist/formula/functions/concat.js +27 -0
  88. package/dist/formula/functions/concat.js.map +1 -0
  89. package/dist/formula/functions/concatenate.js +28 -0
  90. package/dist/formula/functions/concatenate.js.map +1 -0
  91. package/dist/formula/functions/cos.js +29 -0
  92. package/dist/formula/functions/cos.js.map +1 -0
  93. package/dist/formula/functions/count.js +38 -0
  94. package/dist/formula/functions/count.js.map +1 -0
  95. package/dist/formula/functions/counta.js +38 -0
  96. package/dist/formula/functions/counta.js.map +1 -0
  97. package/dist/formula/functions/countif.js +32 -0
  98. package/dist/formula/functions/countif.js.map +1 -0
  99. package/dist/formula/functions/divide.js +33 -0
  100. package/dist/formula/functions/divide.js.map +1 -0
  101. package/dist/formula/functions/eq.js +29 -0
  102. package/dist/formula/functions/eq.js.map +1 -0
  103. package/dist/formula/functions/exp.js +29 -0
  104. package/dist/formula/functions/exp.js.map +1 -0
  105. package/dist/formula/functions/gt.js +29 -0
  106. package/dist/formula/functions/gt.js.map +1 -0
  107. package/dist/formula/functions/gte.js +29 -0
  108. package/dist/formula/functions/gte.js.map +1 -0
  109. package/dist/formula/functions/hlookup.js +75 -0
  110. package/dist/formula/functions/hlookup.js.map +1 -0
  111. package/dist/formula/functions/if.js +39 -0
  112. package/dist/formula/functions/if.js.map +1 -0
  113. package/dist/formula/functions/iferror.js +45 -0
  114. package/dist/formula/functions/iferror.js.map +1 -0
  115. package/dist/formula/functions/len.js +29 -0
  116. package/dist/formula/functions/len.js.map +1 -0
  117. package/dist/formula/functions/lenb.js +29 -0
  118. package/dist/formula/functions/lenb.js.map +1 -0
  119. package/dist/formula/functions/ln.js +32 -0
  120. package/dist/formula/functions/ln.js.map +1 -0
  121. package/dist/formula/functions/log.js +36 -0
  122. package/dist/formula/functions/log.js.map +1 -0
  123. package/dist/formula/functions/log10.js +32 -0
  124. package/dist/formula/functions/log10.js.map +1 -0
  125. package/dist/formula/functions/lt.js +29 -0
  126. package/dist/formula/functions/lt.js.map +1 -0
  127. package/dist/formula/functions/lte.js +29 -0
  128. package/dist/formula/functions/lte.js.map +1 -0
  129. package/dist/formula/functions/max.js +47 -0
  130. package/dist/formula/functions/max.js.map +1 -0
  131. package/dist/formula/functions/min.js +47 -0
  132. package/dist/formula/functions/min.js.map +1 -0
  133. package/dist/formula/functions/minus.js +57 -0
  134. package/dist/formula/functions/minus.js.map +1 -0
  135. package/dist/formula/functions/mod.js +33 -0
  136. package/dist/formula/functions/mod.js.map +1 -0
  137. package/dist/formula/functions/multiply.js +27 -0
  138. package/dist/formula/functions/multiply.js.map +1 -0
  139. package/dist/formula/functions/ne.js +29 -0
  140. package/dist/formula/functions/ne.js.map +1 -0
  141. package/dist/formula/functions/not.js +30 -0
  142. package/dist/formula/functions/not.js.map +1 -0
  143. package/dist/formula/functions/now.js +22 -0
  144. package/dist/formula/functions/now.js.map +1 -0
  145. package/dist/formula/functions/or.js +28 -0
  146. package/dist/formula/functions/or.js.map +1 -0
  147. package/dist/formula/functions/pi.js +22 -0
  148. package/dist/formula/functions/pi.js.map +1 -0
  149. package/dist/formula/functions/power.js +27 -0
  150. package/dist/formula/functions/power.js.map +1 -0
  151. package/dist/formula/functions/product.js +40 -0
  152. package/dist/formula/functions/product.js.map +1 -0
  153. package/dist/formula/functions/radians.js +29 -0
  154. package/dist/formula/functions/radians.js.map +1 -0
  155. package/dist/formula/functions/rand.js +22 -0
  156. package/dist/formula/functions/rand.js.map +1 -0
  157. package/dist/formula/functions/round.js +35 -0
  158. package/dist/formula/functions/round.js.map +1 -0
  159. package/dist/formula/functions/rounddown.js +35 -0
  160. package/dist/formula/functions/rounddown.js.map +1 -0
  161. package/dist/formula/functions/roundup.js +35 -0
  162. package/dist/formula/functions/roundup.js.map +1 -0
  163. package/dist/formula/functions/row.js +31 -0
  164. package/dist/formula/functions/row.js.map +1 -0
  165. package/dist/formula/functions/sin.js +29 -0
  166. package/dist/formula/functions/sin.js.map +1 -0
  167. package/dist/formula/functions/sqrt.js +32 -0
  168. package/dist/formula/functions/sqrt.js.map +1 -0
  169. package/dist/formula/functions/sum.js +47 -0
  170. package/dist/formula/functions/sum.js.map +1 -0
  171. package/dist/formula/functions/sumif.js +65 -0
  172. package/dist/formula/functions/sumif.js.map +1 -0
  173. package/dist/formula/functions/tan.js +29 -0
  174. package/dist/formula/functions/tan.js.map +1 -0
  175. package/dist/formula/functions/uminus.js +24 -0
  176. package/dist/formula/functions/uminus.js.map +1 -0
  177. package/dist/formula/functions/vlookup.js +75 -0
  178. package/dist/formula/functions/vlookup.js.map +1 -0
  179. package/dist/formula/mapping.js +118 -0
  180. package/dist/formula/mapping.js.map +1 -0
  181. package/dist/formula/solver.js +70 -0
  182. package/dist/formula/solver.js.map +1 -0
  183. package/dist/index.js +16 -9113
  184. package/dist/index.js.map +1 -1
  185. package/dist/lib/autofill.js +391 -0
  186. package/dist/lib/autofill.js.map +1 -0
  187. package/dist/lib/clipboard.js +46 -0
  188. package/dist/lib/clipboard.js.map +1 -0
  189. package/dist/lib/converters.js +141 -0
  190. package/dist/lib/converters.js.map +1 -0
  191. package/dist/lib/input.js +52 -0
  192. package/dist/lib/input.js.map +1 -0
  193. package/dist/lib/palette.js +24 -0
  194. package/dist/lib/palette.js.map +1 -0
  195. package/dist/lib/prevention.js +82 -0
  196. package/dist/lib/prevention.js.map +1 -0
  197. package/dist/lib/structs.js +276 -0
  198. package/dist/lib/structs.js.map +1 -0
  199. package/dist/lib/table.js +1248 -0
  200. package/dist/lib/table.js.map +1 -0
  201. package/dist/lib/time.js +79 -0
  202. package/dist/lib/time.js.map +1 -0
  203. package/dist/lib/virtualization.js +129 -0
  204. package/dist/lib/virtualization.js.map +1 -0
  205. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js +287 -0
  206. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js.map +1 -0
  207. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js +72 -0
  208. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/timezone.js.map +1 -0
  209. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js +85 -0
  210. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/utc.js.map +1 -0
  211. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.development.js +454 -0
  212. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
  213. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.production.js +42 -0
  214. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -0
  215. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js +18 -0
  216. package/dist/node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js.map +1 -0
  217. package/dist/parsers/core.js +139 -0
  218. package/dist/parsers/core.js.map +1 -0
  219. package/dist/renderers/checkbox.js +20 -0
  220. package/dist/renderers/checkbox.js.map +1 -0
  221. package/dist/renderers/core.js +147 -0
  222. package/dist/renderers/core.js.map +1 -0
  223. package/dist/renderers/thousand_separator.js +17 -0
  224. package/dist/renderers/thousand_separator.js.map +1 -0
  225. package/dist/store/actions.js +762 -0
  226. package/dist/store/actions.js.map +1 -0
  227. package/dist/store/helpers.js +88 -0
  228. package/dist/store/helpers.js.map +1 -0
  229. package/dist/store/index.js +8 -0
  230. package/dist/store/index.js.map +1 -0
  231. package/dist/styles/embedder.js +19 -0
  232. package/dist/styles/embedder.js.map +1 -0
  233. package/dist/styles/minified.js +7 -0
  234. package/dist/styles/minified.js.map +1 -0
  235. package/package.json +1 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sources":["../../lib/table.ts"],"sourcesContent":["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"],"names":["functions","functionsDefault","address","prevention.isPrevented","prevention.MoveFrom","prevention.MoveTo","prevention.Update","prevention.Write","prevention.Style","prevention.Resize","prevention.SetRenderer","prevention.SetParser","prevention.DeleteRow","y","prevention.DeleteCol","x"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import dayjs from "../_virtual/dayjs.min.js";
2
+ const BASE_DATE = /* @__PURE__ */ new Date("2345-01-02T03:04:05Z");
3
+ const UNITS = ["year", "month", "day", "hour", "minute", "second", "millisecond"];
4
+ const ADD_FNS = UNITS.map(
5
+ (unit) => (date, amount) => dayjs(date).add(amount, unit).toDate()
6
+ );
7
+ const SUB_FNS = UNITS.map(
8
+ (unit) => (date, amount) => dayjs(date).subtract(amount, unit).toDate()
9
+ );
10
+ class TimeDelta {
11
+ constructor(date1, date2) {
12
+ this.diff = [0, 0, 0, 0, 0, 0, 0];
13
+ this.diff = [
14
+ date1.getFullYear() - date2.getFullYear(),
15
+ date1.getMonth() - date2.getMonth(),
16
+ date1.getDate() - date2.getDate(),
17
+ date1.getHours() - date2.getHours(),
18
+ date1.getMinutes() - date2.getMinutes(),
19
+ date1.getSeconds() - date2.getSeconds(),
20
+ date1.getMilliseconds() - date2.getMilliseconds()
21
+ ];
22
+ this.date1 = date1;
23
+ this.date2 = date2;
24
+ this.format = "HH:mm:ss";
25
+ }
26
+ add(date) {
27
+ this.diff.forEach((n, i) => {
28
+ date = ADD_FNS[i](date, n);
29
+ });
30
+ return date;
31
+ }
32
+ sub(date) {
33
+ this.diff.forEach((n, i) => {
34
+ date = SUB_FNS[i](date, n);
35
+ });
36
+ return date;
37
+ }
38
+ stringify(format) {
39
+ if (format == null) {
40
+ format = this.format;
41
+ }
42
+ const tokens = [];
43
+ const msecs = this.date1.getMilliseconds() - this.date2.getMilliseconds();
44
+ let secs = (this.date1.getTime() - this.date2.getTime()) / 1e3;
45
+ for (const divider of [3600, 60]) {
46
+ tokens.push(Math.floor(secs / divider));
47
+ secs %= divider;
48
+ }
49
+ tokens.push(secs, msecs);
50
+ let result = format;
51
+ result = result.replace("HH", String(tokens[0]).padStart(2, "0"));
52
+ result = result.replace("H", String(tokens[0]));
53
+ result = result.replace("mm", String(tokens[1]).padStart(2, "0"));
54
+ result = result.replace("ss", String(tokens[2]).padStart(2, "0"));
55
+ result = result.replace("SSS", String(tokens[3]).padStart(3, "0"));
56
+ result = result.replace("SS", String(tokens[3]).padStart(2, "0").substring(0, 2));
57
+ result = result.replace("S", String(tokens[3]).padStart(1, "0").substring(0, 1));
58
+ return result;
59
+ }
60
+ toJSON() {
61
+ return this.stringify();
62
+ }
63
+ toString() {
64
+ return this.stringify();
65
+ }
66
+ static create(hours = 0, minutes = 0, seconds = 0, milliseconds = 0) {
67
+ const diff = [0, 0, 0, hours, minutes, seconds, milliseconds];
68
+ let date = BASE_DATE;
69
+ diff.forEach((n, i) => {
70
+ date = ADD_FNS[i](date, n);
71
+ });
72
+ return new TimeDelta(date, BASE_DATE);
73
+ }
74
+ }
75
+ export {
76
+ BASE_DATE,
77
+ TimeDelta
78
+ };
79
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sources":["../../lib/time.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { DEFAULT_WIDTH, DEFAULT_HEIGHT, OVERSCAN_X, OVERSCAN_Y } from "../constants.js";
2
+ import { range } from "./structs.js";
3
+ const getCellRectPositions = (table, e, { y, x }) => {
4
+ var _a, _b;
5
+ let { width, height } = table.getRectSize({
6
+ top: 1,
7
+ left: 1,
8
+ bottom: y,
9
+ right: x
10
+ });
11
+ width += table.headerWidth;
12
+ height += table.headerHeight;
13
+ const w = ((_a = table.getByPoint({ y: 0, x })) == null ? void 0 : _a.width) || DEFAULT_WIDTH;
14
+ const h = ((_b = table.getByPoint({ y, x: 0 })) == null ? void 0 : _b.height) || DEFAULT_HEIGHT;
15
+ return {
16
+ top: height,
17
+ left: width,
18
+ bottom: height + h,
19
+ right: width + w,
20
+ width: w,
21
+ height: h
22
+ };
23
+ };
24
+ const getScreenRect = (e) => {
25
+ const top = e.scrollTop, left = e.scrollLeft;
26
+ const height = e.offsetHeight, width = e.offsetWidth;
27
+ const bottom = top + height, right = left + width;
28
+ return { top, left, bottom, right, height, width };
29
+ };
30
+ const virtualize = (table, e) => {
31
+ var _a, _b;
32
+ if (e == null) {
33
+ return null;
34
+ }
35
+ let boundaryTop = 0, boundaryLeft = 0, boundaryBottom = table.getNumRows(), boundaryRight = table.getNumCols();
36
+ const { top, left, bottom, right } = getScreenRect(e);
37
+ let width = 0, height = 0;
38
+ for (let x = 1; x <= table.getNumCols(); x++) {
39
+ const w = ((_a = table.getByPoint({ y: 0, x })) == null ? void 0 : _a.width) || DEFAULT_WIDTH;
40
+ width += w;
41
+ if (boundaryLeft === 0 && width > left) {
42
+ boundaryLeft = Math.max(x - OVERSCAN_X, 1);
43
+ }
44
+ if (width > right) {
45
+ boundaryRight = Math.min(x + OVERSCAN_X, table.getNumCols());
46
+ break;
47
+ }
48
+ }
49
+ for (let y = 1; y <= table.getNumRows(); y++) {
50
+ const h = ((_b = table.getByPoint({ y, x: 0 })) == null ? void 0 : _b.height) || DEFAULT_HEIGHT;
51
+ height += h;
52
+ if (boundaryTop === 0 && height > top) {
53
+ boundaryTop = Math.max(y - OVERSCAN_Y, 1);
54
+ }
55
+ if (height > bottom) {
56
+ boundaryBottom = Math.min(y + OVERSCAN_Y, table.getNumRows());
57
+ break;
58
+ }
59
+ }
60
+ const ys = range(boundaryTop, boundaryBottom);
61
+ const xs = range(boundaryLeft, boundaryRight);
62
+ const before = table.getRectSize({
63
+ top: 1,
64
+ left: 1,
65
+ bottom: boundaryTop,
66
+ right: boundaryLeft
67
+ });
68
+ const after = table.getRectSize({
69
+ top: boundaryBottom,
70
+ left: boundaryRight,
71
+ bottom: table.getNumRows(),
72
+ right: table.getNumCols()
73
+ });
74
+ return {
75
+ ys,
76
+ xs,
77
+ adjuster: {
78
+ top: before.height,
79
+ left: before.width,
80
+ bottom: after.height,
81
+ right: after.width
82
+ }
83
+ };
84
+ };
85
+ const smartScroll = (table, e, targetPoint, behavior = "auto") => {
86
+ if (e == null) {
87
+ return;
88
+ }
89
+ const screen = getScreenRect(e);
90
+ const target = getCellRectPositions(table, e, targetPoint);
91
+ const up = target.top - table.headerHeight;
92
+ const left = target.left - table.headerWidth;
93
+ const down = target.bottom - screen.height + 1;
94
+ const right = target.right - screen.width + 1;
95
+ const isTopOver = up < screen.top;
96
+ const isLeftOver = left < screen.left;
97
+ const isBottomOver = target.bottom > screen.bottom;
98
+ const isRightOver = target.right > screen.right;
99
+ if (isLeftOver) {
100
+ if (isTopOver) {
101
+ e.scrollTo({ left, top: up, behavior });
102
+ } else if (isBottomOver) {
103
+ e.scrollTo({ left, top: down, behavior });
104
+ } else {
105
+ e.scrollTo({ left, top: screen.top, behavior });
106
+ }
107
+ } else if (isRightOver) {
108
+ if (isTopOver) {
109
+ e.scrollTo({ left: right, top: up, behavior });
110
+ } else if (isBottomOver) {
111
+ e.scrollTo({ left: right, top: down, behavior });
112
+ } else {
113
+ e.scrollTo({ left: right, top: screen.top, behavior });
114
+ }
115
+ } else {
116
+ if (isTopOver) {
117
+ e.scrollTo({ left: screen.left, top: up, behavior });
118
+ } else if (isBottomOver) {
119
+ e.scrollTo({ left: screen.left, top: down, behavior });
120
+ } else ;
121
+ }
122
+ };
123
+ export {
124
+ getCellRectPositions,
125
+ getScreenRect,
126
+ smartScroll,
127
+ virtualize
128
+ };
129
+ //# sourceMappingURL=virtualization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualization.js","sources":["../../lib/virtualization.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}