excel-collab 0.0.1

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 (350) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/lib/Chart-BOZ0_05B.js +19 -0
  4. package/lib/Chart-BOZ0_05B.js.map +1 -0
  5. package/lib/Chart-BiiKrUFB.mjs +8791 -0
  6. package/lib/Chart-BiiKrUFB.mjs.map +1 -0
  7. package/lib/browser-CEzw3XJq.js +2 -0
  8. package/lib/browser-CEzw3XJq.js.map +1 -0
  9. package/lib/browser-CLXapNii.mjs +18 -0
  10. package/lib/browser-CLXapNii.mjs.map +1 -0
  11. package/lib/demo/index.d.ts +0 -0
  12. package/lib/demo/sentry.d.ts +1 -0
  13. package/lib/demo/simple.d.ts +0 -0
  14. package/lib/demo/worker.d.ts +1 -0
  15. package/lib/e2e/ccp.test.d.ts +1 -0
  16. package/lib/e2e/input.test.d.ts +1 -0
  17. package/lib/e2e/page.test.d.ts +1 -0
  18. package/lib/e2e/performance.test.d.ts +1 -0
  19. package/lib/e2e/util.d.ts +7 -0
  20. package/lib/excel.js +2 -0
  21. package/lib/excel.js.map +1 -0
  22. package/lib/excel.mjs +194 -0
  23. package/lib/excel.mjs.map +1 -0
  24. package/lib/icon/android-icon-144x144.png +0 -0
  25. package/lib/icon/android-icon-192x192.png +0 -0
  26. package/lib/icon/android-icon-36x36.png +0 -0
  27. package/lib/icon/android-icon-48x48.png +0 -0
  28. package/lib/icon/android-icon-72x72.png +0 -0
  29. package/lib/icon/android-icon-96x96.png +0 -0
  30. package/lib/icon/apple-icon-114x114.png +0 -0
  31. package/lib/icon/apple-icon-120x120.png +0 -0
  32. package/lib/icon/apple-icon-144x144.png +0 -0
  33. package/lib/icon/apple-icon-152x152.png +0 -0
  34. package/lib/icon/apple-icon-180x180.png +0 -0
  35. package/lib/icon/apple-icon-57x57.png +0 -0
  36. package/lib/icon/apple-icon-60x60.png +0 -0
  37. package/lib/icon/apple-icon-72x72.png +0 -0
  38. package/lib/icon/apple-icon-76x76.png +0 -0
  39. package/lib/icon/apple-icon-precomposed.png +0 -0
  40. package/lib/icon/apple-icon.png +0 -0
  41. package/lib/icon/browserconfig.xml +11 -0
  42. package/lib/icon/favicon-16x16.png +0 -0
  43. package/lib/icon/favicon-32x32.png +0 -0
  44. package/lib/icon/favicon-96x96.png +0 -0
  45. package/lib/icon/favicon.ico +0 -0
  46. package/lib/icon/manifest.json +41 -0
  47. package/lib/icon/ms-icon-144x144.png +0 -0
  48. package/lib/icon/ms-icon-150x150.png +0 -0
  49. package/lib/icon/ms-icon-310x310.png +0 -0
  50. package/lib/icon/ms-icon-70x70.png +0 -0
  51. package/lib/icon/rotate.png +0 -0
  52. package/lib/index-CPQtoL_o.js +1717 -0
  53. package/lib/index-CPQtoL_o.js.map +1 -0
  54. package/lib/index-hodLtYAe.mjs +49234 -0
  55. package/lib/index-hodLtYAe.mjs.map +1 -0
  56. package/lib/jszip.min-BwVBTZW7.js +13 -0
  57. package/lib/jszip.min-BwVBTZW7.js.map +1 -0
  58. package/lib/jszip.min-D50cKJUj.mjs +2344 -0
  59. package/lib/jszip.min-D50cKJUj.mjs.map +1 -0
  60. package/lib/src/__tests__/Border.test.d.ts +0 -0
  61. package/lib/src/__tests__/Export.test.d.ts +0 -0
  62. package/lib/src/__tests__/Filter.test.d.ts +0 -0
  63. package/lib/src/__tests__/FloatElement.test.d.ts +0 -0
  64. package/lib/src/__tests__/FormularBar.test.d.ts +0 -0
  65. package/lib/src/__tests__/HorizontalAlign.test.d.ts +0 -0
  66. package/lib/src/__tests__/Import.test.d.ts +0 -0
  67. package/lib/src/__tests__/Menubar.test.d.ts +0 -0
  68. package/lib/src/__tests__/MergeCell.test.d.ts +0 -0
  69. package/lib/src/__tests__/NumberFormat.test.d.ts +0 -0
  70. package/lib/src/__tests__/SheetBar.test.d.ts +0 -0
  71. package/lib/src/__tests__/Toolbar.test.d.ts +0 -0
  72. package/lib/src/__tests__/VerticalAlign.test.d.ts +0 -0
  73. package/lib/src/__tests__/canvas.test.d.ts +0 -0
  74. package/lib/src/__tests__/global.mock.d.ts +0 -0
  75. package/lib/src/__tests__/shortcut.test.d.ts +0 -0
  76. package/lib/src/__tests__/util.d.ts +5 -0
  77. package/lib/src/canvas/MainCanvas.d.ts +9 -0
  78. package/lib/src/canvas/__tests__/MainCanvas.test.d.ts +1 -0
  79. package/lib/src/canvas/__tests__/border.test.d.ts +1 -0
  80. package/lib/src/canvas/__tests__/ccp.test.d.ts +1 -0
  81. package/lib/src/canvas/__tests__/cell-style.test.d.ts +1 -0
  82. package/lib/src/canvas/__tests__/cell-value.test.d.ts +1 -0
  83. package/lib/src/canvas/__tests__/filter.test.d.ts +1 -0
  84. package/lib/src/canvas/__tests__/merge-cell.test.d.ts +1 -0
  85. package/lib/src/canvas/__tests__/number-format.test.d.ts +1 -0
  86. package/lib/src/canvas/__tests__/range.test.d.ts +1 -0
  87. package/lib/src/canvas/__tests__/shortcut.test.d.ts +1 -0
  88. package/lib/src/canvas/__tests__/theme.test.d.ts +1 -0
  89. package/lib/src/canvas/__tests__/util.d.ts +6 -0
  90. package/lib/src/canvas/__tests__/worker.test.d.ts +1 -0
  91. package/lib/src/canvas/__tests__/wrap-text.test.d.ts +1 -0
  92. package/lib/src/canvas/constant.d.ts +2 -0
  93. package/lib/src/canvas/event.d.ts +2 -0
  94. package/lib/src/canvas/index.d.ts +4 -0
  95. package/lib/src/canvas/offScreenWorker.d.ts +45 -0
  96. package/lib/src/canvas/shortcut.d.ts +20 -0
  97. package/lib/src/canvas/util.d.ts +12 -0
  98. package/lib/src/canvas/worker.d.ts +3 -0
  99. package/lib/src/collaboration/__tests__/util.test.d.ts +1 -0
  100. package/lib/src/collaboration/index.d.ts +6 -0
  101. package/lib/src/collaboration/local.d.ts +15 -0
  102. package/lib/src/collaboration/server.d.ts +31 -0
  103. package/lib/src/collaboration/type.d.ts +41 -0
  104. package/lib/src/collaboration/util.d.ts +2 -0
  105. package/lib/src/components/BaseIcon/BaseIcon.d.ts +12 -0
  106. package/lib/src/components/BaseIcon/FillColorIcon.d.ts +1 -0
  107. package/lib/src/components/BaseIcon/icon.d.ts +3 -0
  108. package/lib/src/components/BaseIcon/index.d.ts +9 -0
  109. package/lib/src/components/Button/index.d.ts +14 -0
  110. package/lib/src/components/ColorPicker/ColorPickerPanel.d.ts +2 -0
  111. package/lib/src/components/ColorPicker/Hue.d.ts +11 -0
  112. package/lib/src/components/ColorPicker/Interactive.d.ts +12 -0
  113. package/lib/src/components/ColorPicker/Pointer.d.ts +8 -0
  114. package/lib/src/components/ColorPicker/Saturation.d.ts +12 -0
  115. package/lib/src/components/ColorPicker/clamp.d.ts +1 -0
  116. package/lib/src/components/ColorPicker/convert.d.ts +5 -0
  117. package/lib/src/components/ColorPicker/index.d.ts +9 -0
  118. package/lib/src/components/ColorPicker/round.d.ts +1 -0
  119. package/lib/src/components/ColorPicker/types.d.ts +38 -0
  120. package/lib/src/components/ColorPicker/useColorManipulation.d.ts +2 -0
  121. package/lib/src/components/Dialog/index.d.ts +17 -0
  122. package/lib/src/components/Github/index.d.ts +2 -0
  123. package/lib/src/components/Loading/index.d.ts +2 -0
  124. package/lib/src/components/Menu/index.d.ts +20 -0
  125. package/lib/src/components/Select/index.d.ts +25 -0
  126. package/lib/src/components/Toast/index.d.ts +17 -0
  127. package/lib/src/components/__tests__/BaseIcon.test.d.ts +0 -0
  128. package/lib/src/components/__tests__/Button.test.d.ts +1 -0
  129. package/lib/src/components/__tests__/ColorPicker.test.d.ts +1 -0
  130. package/lib/src/components/__tests__/Dialog.test.d.ts +1 -0
  131. package/lib/src/components/__tests__/Loading.test.d.ts +1 -0
  132. package/lib/src/components/__tests__/Menu.test.d.ts +1 -0
  133. package/lib/src/components/__tests__/Select.test.d.ts +1 -0
  134. package/lib/src/components/__tests__/Toast.test.d.ts +0 -0
  135. package/lib/src/components/index.d.ts +9 -0
  136. package/lib/src/containers/Excel/ImportCSV.d.ts +2 -0
  137. package/lib/src/containers/Excel/__tests__/exportCSV.test.d.ts +1 -0
  138. package/lib/src/containers/Excel/__tests__/exportXLSX.test.d.ts +1 -0
  139. package/lib/src/containers/Excel/__tests__/importXLSX.test.d.ts +1 -0
  140. package/lib/src/containers/Excel/exportCSV.d.ts +2 -0
  141. package/lib/src/containers/Excel/exportConfig.d.ts +20 -0
  142. package/lib/src/containers/Excel/exportXLSX.d.ts +3 -0
  143. package/lib/src/containers/Excel/importXLSX.d.ts +174 -0
  144. package/lib/src/containers/Excel/index.d.ts +4 -0
  145. package/lib/src/containers/FloatElement/Chart.d.ts +16 -0
  146. package/lib/src/containers/FloatElement/ContextMenu.d.ts +11 -0
  147. package/lib/src/containers/FloatElement/FloatElement.d.ts +11 -0
  148. package/lib/src/containers/FloatElement/Image.d.ts +8 -0
  149. package/lib/src/containers/FloatElement/Toolbar.d.ts +3 -0
  150. package/lib/src/containers/FloatElement/index.d.ts +8 -0
  151. package/lib/src/containers/FloatElement/util.d.ts +32 -0
  152. package/lib/src/containers/FormulaBar/DefineName.d.ts +7 -0
  153. package/lib/src/containers/FormulaBar/FormulaEditor.d.ts +14 -0
  154. package/lib/src/containers/FormulaBar/index.d.ts +2 -0
  155. package/lib/src/containers/MenuBar/FPS.d.ts +2 -0
  156. package/lib/src/containers/MenuBar/File.d.ts +1 -0
  157. package/lib/src/containers/MenuBar/I18N.d.ts +2 -0
  158. package/lib/src/containers/MenuBar/Theme.d.ts +2 -0
  159. package/lib/src/containers/MenuBar/User.d.ts +5 -0
  160. package/lib/src/containers/MenuBar/index.d.ts +7 -0
  161. package/lib/src/containers/SheetBar/SheetBarContextMenu.d.ts +11 -0
  162. package/lib/src/containers/SheetBar/index.d.ts +3 -0
  163. package/lib/src/containers/ToolBar/Border.d.ts +1 -0
  164. package/lib/src/containers/ToolBar/constant.d.ts +8 -0
  165. package/lib/src/containers/ToolBar/index.d.ts +3 -0
  166. package/lib/src/containers/__tests__/FPS.test.d.ts +0 -0
  167. package/lib/src/containers/__tests__/FormulaEditor.test.d.ts +1 -0
  168. package/lib/src/containers/canvas/BottomBar.d.ts +2 -0
  169. package/lib/src/containers/canvas/Collaboration.d.ts +7 -0
  170. package/lib/src/containers/canvas/ContextMenu.d.ts +8 -0
  171. package/lib/src/containers/canvas/ScrollBar.d.ts +2 -0
  172. package/lib/src/containers/canvas/__tests__/isSupportFontFamily.test.d.ts +1 -0
  173. package/lib/src/containers/canvas/event/__tests__/filter.test.d.ts +1 -0
  174. package/lib/src/containers/canvas/event/filter.d.ts +6 -0
  175. package/lib/src/containers/canvas/event/index.d.ts +3 -0
  176. package/lib/src/containers/canvas/event/main.d.ts +7 -0
  177. package/lib/src/containers/canvas/index.d.ts +3 -0
  178. package/lib/src/containers/canvas/isSupportFontFamily.d.ts +4 -0
  179. package/lib/src/containers/canvas/modal/Filter.d.ts +2 -0
  180. package/lib/src/containers/canvas/modal/index.d.ts +3 -0
  181. package/lib/src/containers/canvas/util.d.ts +2 -0
  182. package/lib/src/containers/hooks/__tests__/useClickOutSide.test.d.ts +1 -0
  183. package/lib/src/containers/hooks/__tests__/useEventCallback.test.d.ts +1 -0
  184. package/lib/src/containers/hooks/__tests__/useFPS.test.d.ts +1 -0
  185. package/lib/src/containers/hooks/index.d.ts +3 -0
  186. package/lib/src/containers/hooks/useClickOutSide.d.ts +1 -0
  187. package/lib/src/containers/hooks/useEventCallback.d.ts +1 -0
  188. package/lib/src/containers/hooks/useFPS.d.ts +1 -0
  189. package/lib/src/containers/index.d.ts +19 -0
  190. package/lib/src/containers/store/__tests__/base.test.d.ts +1 -0
  191. package/lib/src/containers/store/activeCell.d.ts +12 -0
  192. package/lib/src/containers/store/base.d.ts +8 -0
  193. package/lib/src/containers/store/context.d.ts +8 -0
  194. package/lib/src/containers/store/core.d.ts +11 -0
  195. package/lib/src/containers/store/defineName.d.ts +2 -0
  196. package/lib/src/containers/store/file.d.ts +7 -0
  197. package/lib/src/containers/store/floatElement.d.ts +12 -0
  198. package/lib/src/containers/store/fontFamily.d.ts +3 -0
  199. package/lib/src/containers/store/index.d.ts +15 -0
  200. package/lib/src/containers/store/scroll.d.ts +12 -0
  201. package/lib/src/containers/store/sheetList.d.ts +4 -0
  202. package/lib/src/containers/store/style.d.ts +7 -0
  203. package/lib/src/containers/store/user.d.ts +3 -0
  204. package/lib/src/controller/Controller.d.ts +102 -0
  205. package/lib/src/controller/__tests__/col.test.d.ts +1 -0
  206. package/lib/src/controller/__tests__/controller.test.d.ts +1 -0
  207. package/lib/src/controller/__tests__/definedName.test.d.ts +1 -0
  208. package/lib/src/controller/__tests__/drawing.test.d.ts +1 -0
  209. package/lib/src/controller/__tests__/filter.test.d.ts +1 -0
  210. package/lib/src/controller/__tests__/getHitInfo.test.d.ts +1 -0
  211. package/lib/src/controller/__tests__/mergeCell.test.d.ts +1 -0
  212. package/lib/src/controller/__tests__/rangeMap.test.d.ts +1 -0
  213. package/lib/src/controller/__tests__/row.test.d.ts +1 -0
  214. package/lib/src/controller/__tests__/workbook.test.d.ts +1 -0
  215. package/lib/src/controller/__tests__/worksheet.test.d.ts +1 -0
  216. package/lib/src/controller/decorator.d.ts +2 -0
  217. package/lib/src/controller/index.d.ts +2 -0
  218. package/lib/src/controller/init.d.ts +3 -0
  219. package/lib/src/formula/__tests__/formula/math.test.d.ts +1 -0
  220. package/lib/src/formula/__tests__/formula/text.test.d.ts +1 -0
  221. package/lib/src/formula/__tests__/interpreter/array.test.d.ts +1 -0
  222. package/lib/src/formula/__tests__/interpreter/error.test.d.ts +1 -0
  223. package/lib/src/formula/__tests__/interpreter/function.test.d.ts +1 -0
  224. package/lib/src/formula/__tests__/interpreter/logical.test.d.ts +1 -0
  225. package/lib/src/formula/__tests__/interpreter/math.test.d.ts +1 -0
  226. package/lib/src/formula/__tests__/interpreter/primary.test.d.ts +1 -0
  227. package/lib/src/formula/__tests__/interpreter/r1c1.test.d.ts +1 -0
  228. package/lib/src/formula/__tests__/interpreter/reference.test.d.ts +1 -0
  229. package/lib/src/formula/__tests__/interpreter/util.d.ts +3 -0
  230. package/lib/src/formula/__tests__/interpreter/variable.test.d.ts +1 -0
  231. package/lib/src/formula/__tests__/numberFormat.test.d.ts +1 -0
  232. package/lib/src/formula/__tests__/parser/basic-expressions.test.d.ts +1 -0
  233. package/lib/src/formula/__tests__/parser/cell-range.test.d.ts +1 -0
  234. package/lib/src/formula/__tests__/parser/function-call.test.d.ts +1 -0
  235. package/lib/src/formula/__tests__/parser/invalid-expressions.test.d.ts +1 -0
  236. package/lib/src/formula/__tests__/parser/operators.test.d.ts +1 -0
  237. package/lib/src/formula/__tests__/parser/util.d.ts +3 -0
  238. package/lib/src/formula/__tests__/scanner/arithmetic-expression.test.d.ts +1 -0
  239. package/lib/src/formula/__tests__/scanner/arrays.test.d.ts +1 -0
  240. package/lib/src/formula/__tests__/scanner/cell-ranges.test.d.ts +1 -0
  241. package/lib/src/formula/__tests__/scanner/comparison-expression.test.d.ts +1 -0
  242. package/lib/src/formula/__tests__/scanner/define-name.test.d.ts +1 -0
  243. package/lib/src/formula/__tests__/scanner/functions.test.d.ts +1 -0
  244. package/lib/src/formula/__tests__/scanner/logical-expression.test.d.ts +1 -0
  245. package/lib/src/formula/__tests__/scanner/primary.test.d.ts +1 -0
  246. package/lib/src/formula/__tests__/scanner/r1c1.test.d.ts +1 -0
  247. package/lib/src/formula/__tests__/scanner/range-operator.test.d.ts +1 -0
  248. package/lib/src/formula/__tests__/scanner/string-expression.test.d.ts +1 -0
  249. package/lib/src/formula/__tests__/scanner/util.d.ts +5 -0
  250. package/lib/src/formula/eval.d.ts +19 -0
  251. package/lib/src/formula/expression.d.ts +79 -0
  252. package/lib/src/formula/formula/error.d.ts +11 -0
  253. package/lib/src/formula/formula/float.d.ts +1 -0
  254. package/lib/src/formula/formula/index.d.ts +12 -0
  255. package/lib/src/formula/formula/math.d.ts +49 -0
  256. package/lib/src/formula/formula/text.d.ts +27 -0
  257. package/lib/src/formula/index.d.ts +2 -0
  258. package/lib/src/formula/interpreter.d.ts +23 -0
  259. package/lib/src/formula/numberFormat.d.ts +9 -0
  260. package/lib/src/formula/parser.d.ts +28 -0
  261. package/lib/src/formula/scanner.d.ts +24 -0
  262. package/lib/src/formula/token.d.ts +7 -0
  263. package/lib/src/i18n/__tests__/i18n.test.d.ts +1 -0
  264. package/lib/src/i18n/index.d.ts +6 -0
  265. package/lib/src/i18n/lang/en.json.d.ts +113 -0
  266. package/lib/src/i18n/lang/zh.json.d.ts +113 -0
  267. package/lib/src/index.d.ts +11 -0
  268. package/lib/src/model/Model.d.ts +121 -0
  269. package/lib/src/model/__tests__/mergeCell.test.d.ts +1 -0
  270. package/lib/src/model/__tests__/model.test.d.ts +1 -0
  271. package/lib/src/model/__tests__/rangeMap.test.d.ts +1 -0
  272. package/lib/src/model/__tests__/util.d.ts +2 -0
  273. package/lib/src/model/__tests__/workbook.test.d.ts +1 -0
  274. package/lib/src/model/col.d.ts +14 -0
  275. package/lib/src/model/definedName.d.ts +13 -0
  276. package/lib/src/model/drawing.d.ts +17 -0
  277. package/lib/src/model/filter.d.ts +43 -0
  278. package/lib/src/model/index.d.ts +1 -0
  279. package/lib/src/model/mergeCell.d.ts +12 -0
  280. package/lib/src/model/mockModel.d.ts +3 -0
  281. package/lib/src/model/rangeMap.d.ts +29 -0
  282. package/lib/src/model/row.d.ts +14 -0
  283. package/lib/src/model/scroll.d.ts +16 -0
  284. package/lib/src/model/workbook.d.ts +22 -0
  285. package/lib/src/model/worksheet.d.ts +31 -0
  286. package/lib/src/theme/__tests__/theme.test.d.ts +1 -0
  287. package/lib/src/theme/color.d.ts +20 -0
  288. package/lib/src/theme/convert.d.ts +1 -0
  289. package/lib/src/theme/index.d.ts +25 -0
  290. package/lib/src/theme/size.d.ts +15 -0
  291. package/lib/src/theme/zIndex.d.ts +7 -0
  292. package/lib/src/types/canvas.d.ts +18 -0
  293. package/lib/src/types/components.d.ts +25 -0
  294. package/lib/src/types/controller.d.ts +56 -0
  295. package/lib/src/types/event.d.ts +89 -0
  296. package/lib/src/types/formula.d.ts +2 -0
  297. package/lib/src/types/index.d.ts +10 -0
  298. package/lib/src/types/model.d.ts +263 -0
  299. package/lib/src/types/parser.d.ts +57 -0
  300. package/lib/src/types/range.d.ts +12 -0
  301. package/lib/src/types/yjs.d.ts +54 -0
  302. package/lib/src/util/EventEmitter.d.ts +10 -0
  303. package/lib/src/util/__tests__/EventEmitter.test.d.ts +1 -0
  304. package/lib/src/util/__tests__/assert.test.d.ts +1 -0
  305. package/lib/src/util/__tests__/classnames.test.d.ts +1 -0
  306. package/lib/src/util/__tests__/color.test.d.ts +1 -0
  307. package/lib/src/util/__tests__/convert.test.d.ts +1 -0
  308. package/lib/src/util/__tests__/copy.test.d.ts +1 -0
  309. package/lib/src/util/__tests__/debug.test.d.ts +1 -0
  310. package/lib/src/util/__tests__/deepEqual.test.d.ts +1 -0
  311. package/lib/src/util/__tests__/get.test.d.ts +1 -0
  312. package/lib/src/util/__tests__/image.test.d.ts +1 -0
  313. package/lib/src/util/__tests__/isEmpty.test.d.ts +1 -0
  314. package/lib/src/util/__tests__/lodash.test.d.ts +1 -0
  315. package/lib/src/util/__tests__/range.test.d.ts +1 -0
  316. package/lib/src/util/__tests__/reference.test.d.ts +1 -0
  317. package/lib/src/util/__tests__/saveAs.test.d.ts +1 -0
  318. package/lib/src/util/__tests__/split.test.d.ts +1 -0
  319. package/lib/src/util/__tests__/style.test.d.ts +1 -0
  320. package/lib/src/util/__tests__/util.test.d.ts +1 -0
  321. package/lib/src/util/assert.d.ts +1 -0
  322. package/lib/src/util/classnames.d.ts +1 -0
  323. package/lib/src/util/color.d.ts +2 -0
  324. package/lib/src/util/constant.d.ts +51 -0
  325. package/lib/src/util/convert.d.ts +3 -0
  326. package/lib/src/util/copy.d.ts +10 -0
  327. package/lib/src/util/debug.d.ts +14 -0
  328. package/lib/src/util/dpr.d.ts +3 -0
  329. package/lib/src/util/event.d.ts +2 -0
  330. package/lib/src/util/font.d.ts +3 -0
  331. package/lib/src/util/image.d.ts +20 -0
  332. package/lib/src/util/index.d.ts +19 -0
  333. package/lib/src/util/lodash.d.ts +9 -0
  334. package/lib/src/util/range.d.ts +18 -0
  335. package/lib/src/util/reference.d.ts +11 -0
  336. package/lib/src/util/saveAs.d.ts +1 -0
  337. package/lib/src/util/split.d.ts +1 -0
  338. package/lib/src/util/style.d.ts +13 -0
  339. package/lib/src/util/util.d.ts +22 -0
  340. package/lib/src/worker.d.ts +3 -0
  341. package/lib/style.css +1 -0
  342. package/lib/worker-DpzVx228.js +12 -0
  343. package/lib/worker-DpzVx228.js.map +1 -0
  344. package/lib/worker-J2oMRUdY.mjs +4327 -0
  345. package/lib/worker-J2oMRUdY.mjs.map +1 -0
  346. package/lib/worker.js +2 -0
  347. package/lib/worker.js.map +1 -0
  348. package/lib/worker.mjs +6 -0
  349. package/lib/worker.mjs.map +1 -0
  350. package/package.json +100 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-J2oMRUdY.mjs","sources":["../src/types/model.ts","../src/types/parser.ts","../src/util/constant.ts","../src/util/lodash.ts","../src/util/util.ts","../src/util/style.ts","../src/util/dpr.ts","../src/util/convert.ts","../src/util/range.ts","../src/util/reference.ts","../src/util/debug.ts","../src/util/split.ts","../node_modules/.pnpm/comlink@4.4.2/node_modules/comlink/dist/esm/comlink.mjs","../src/theme/size.ts","../src/theme/zIndex.ts","../src/theme/convert.ts","../src/theme/color.ts","../src/theme/index.ts","../src/formula/token.ts","../src/formula/formula/error.ts","../node_modules/.pnpm/ssf@https+++cdn.sheetjs.com+ssf-0.11.3+ssf-0.11.3.tgz/node_modules/ssf/ssf.js","../src/formula/numberFormat.ts","../src/formula/formula/text.ts","../src/formula/formula/math.ts","../src/formula/formula/float.ts","../src/formula/formula/index.ts","../src/formula/scanner.ts","../src/formula/expression.ts","../src/formula/parser.ts","../src/formula/interpreter.ts","../src/formula/eval.ts","../src/canvas/util.ts","../src/canvas/constant.ts","../src/canvas/offScreenWorker.ts","../src/canvas/worker.ts"],"sourcesContent":["import { ResultType } from './parser';\r\nimport { IRange } from './range';\r\nimport type { ModelRoot, ModelJSON } from './yjs';\r\n\r\nexport type ChartType =\r\n | 'bar'\r\n | 'line'\r\n | 'scatter'\r\n | 'bubble'\r\n | 'pie'\r\n | 'doughnut'\r\n | 'polarArea'\r\n | 'radar';\r\n\r\nexport enum EVerticalAlign {\r\n TOP,\r\n MIDDLE,\r\n BOTTOM,\r\n}\r\nexport enum EHorizontalAlign {\r\n LEFT,\r\n CENTER,\r\n RIGHT,\r\n}\r\nexport enum EUnderLine {\r\n NONE = 0,\r\n SINGLE,\r\n DOUBLE,\r\n}\r\n\r\nexport type BorderType =\r\n | 'thin'\r\n | 'hair'\r\n | 'dotted'\r\n | 'dashed'\r\n | 'dashDot'\r\n | 'dashDotDot'\r\n | 'double'\r\n | 'medium'\r\n | 'mediumDashed'\r\n | 'mediumDashDot'\r\n | 'mediumDashDotDot'\r\n | 'thick';\r\n// | 'slantDashDot'\r\n\r\nexport type BorderItem = {\r\n color: string;\r\n type: BorderType;\r\n};\r\n/**\r\n * XML to model\r\n * 1. styleId = worksheets_*.xml worksheet.sheetData.row.c.s\r\n * 2. styles = styles.xml styleSheet\r\n * 3. xf = styles.cellXfs.xf[styleId]\r\n * 4. fillColor = xf.applyFill != undefined && xf.fillId != undefined && styles.fills.fill[xf.fillId]\r\n * 5. font = xf.applyFont != undefined && xf.fontId != undefined && styles.fonts.font[xf.fontId]\r\n * 6. fontColor = font.color,fontSize = font.sz,isBold= font.b,isItalic=font.i,underline=font.u,fontFamily=font.name\r\n * 7. alignment = xf.ApplyAlignment != undefined && xf.alignment != undefined\r\n * 8. verticalAlign = alignment.vertical,horizontalAlign = alignment.horizontal,isWrapText = alignment.wrapText\r\n * 9. numberFormat = xl.applyNumberFormat != undefined && styles.numFmts.numFmt.find(v => v.numFmtId === xf.numFmtId).formatCode\r\n *\r\n * model to XML\r\n */\r\nexport interface StyleType {\r\n fontColor: string;\r\n fillColor: string;\r\n fontSize: number;\r\n fontFamily: string;\r\n verticalAlign: EVerticalAlign;\r\n horizontalAlign: EHorizontalAlign;\r\n isWrapText: boolean;\r\n underline: EUnderLine;\r\n isItalic: boolean;\r\n isBold: boolean;\r\n isStrike: boolean;\r\n numberFormat: string;\r\n borderLeft?: BorderItem | undefined;\r\n borderRight?: BorderItem | undefined;\r\n borderTop?: BorderItem | undefined;\r\n borderBottom?: BorderItem | undefined;\r\n}\r\nexport interface WorksheetType {\r\n sheetId: string;\r\n name: string;\r\n isHide: boolean;\r\n rowCount: number;\r\n colCount: number;\r\n sort: number; // sort\r\n tabColor?: string;\r\n}\r\nexport interface ModelScroll {\r\n row: number;\r\n col: number;\r\n}\r\nexport interface ScrollValue extends ModelScroll {\r\n top: number;\r\n left: number;\r\n scrollLeft: number;\r\n scrollTop: number;\r\n}\r\n\r\nexport interface ModelCellType extends Partial<StyleType> {\r\n value: ResultType;\r\n formula?: string;\r\n}\r\n\r\nexport interface Coordinate {\r\n row: number;\r\n col: number;\r\n}\r\nexport type ModelCellValue = ModelCellType &\r\n Pick<IRange, 'sheetId' | 'row' | 'col'>;\r\n\r\nexport interface CustomItem {\r\n len: number; // width or height\r\n isHide: boolean;\r\n}\r\nexport type CustomHeightOrWidthItem = Record<string, CustomItem>; // key: sheetId + '_' + row number or col number value: height or width\r\n\r\nexport type DrawingElement = {\r\n title: string;\r\n type: 'floating-picture' | 'chart';\r\n uuid: string;\r\n width: number;\r\n height: number;\r\n originWidth: number;\r\n originHeight: number;\r\n fromCol: number; // insert col\r\n fromRow: number; // insert row\r\n sheetId: string; // insert sheetId\r\n marginX: number; // the x distance of (fromCol, fromRow)\r\n marginY: number; // the Y distance of (fromCol, fromRow)\r\n imageAngle?: number;\r\n imageSrc?: string; // floating-picture src\r\n chartType?: ChartType;\r\n chartRange?: IRange; // chart reference range\r\n};\r\nexport type WorksheetData = ModelCellValue[];\r\n\r\nexport type ChangeEventType =\r\n | keyof ModelJSON\r\n | 'cellValue'\r\n | 'cellStyle'\r\n | 'antLine'\r\n | 'redo'\r\n | 'undo';\r\nexport interface EventType {\r\n changeSet: Set<ChangeEventType>;\r\n}\r\n\r\nexport enum EMergeCellType {\r\n MERGE_CENTER = 0,\r\n MERGE_CELL,\r\n MERGE_CONTENT,\r\n}\r\n\r\nexport interface MergeCellItem {\r\n range: IRange; // merge range\r\n type: EMergeCellType; // merge type\r\n firstCell: Coordinate; // first cell not empty\r\n}\r\n\r\nexport type NumberFilter = {\r\n type: 'number';\r\n value: Array<{ type: string; value: number }>;\r\n};\r\n\r\nexport type TextFilter = {\r\n type: 'text';\r\n value: Array<{ type: string; value: string }>;\r\n};\r\n\r\nexport type ColorFilter = {\r\n type: 'color';\r\n value: string;\r\n colorType: 'fillColor' | 'fontColor';\r\n};\r\n\r\nexport type NormalFilter = {\r\n type: 'normal';\r\n value: ResultType[];\r\n};\r\n\r\nexport type AutoFilterItem = {\r\n range: IRange;\r\n col?: number;\r\n value?: NormalFilter | NumberFilter | TextFilter | ColorFilter;\r\n};\r\n\r\nexport type DefinedNameItem = { range: IRange; name: string };\r\n\r\nexport interface IBaseManager {\r\n fromJSON(json: ModelJSON): void;\r\n deleteAll(sheetId?: string): void;\r\n}\r\n\r\nexport interface IWorkbook extends IBaseManager {\r\n setCurrentSheetId(id: string): void;\r\n getCurrentSheetId(): string;\r\n addSheet(): WorksheetType | undefined;\r\n deleteSheet(sheetId?: string): void;\r\n hideSheet(sheetId?: string): void;\r\n unhideSheet(sheetId: string): void;\r\n renameSheet(sheetName: string, sheetId?: string): void;\r\n getSheetInfo(sheetId?: string): WorksheetType | undefined;\r\n updateSheetInfo(data: Partial<WorksheetType>, sheetId?: string): void;\r\n getSheetList(): WorksheetType[];\r\n validateSheet(data: WorksheetType): boolean;\r\n}\r\nexport type ActiveRange = {\r\n isMerged: boolean;\r\n range: IRange; // merge range\r\n};\r\nexport interface IRangeMap extends IBaseManager {\r\n setActiveRange(range: IRange): void;\r\n getActiveRange(range?: IRange): ActiveRange;\r\n validateRange(range: IRange): boolean;\r\n}\r\n\r\nexport interface IScroll extends IBaseManager {\r\n getScroll(sheetId?: string): ModelScroll;\r\n setScroll(value: Partial<ModelScroll>, sheetId?: string): boolean;\r\n}\r\n\r\nexport interface IDrawings extends IBaseManager {\r\n getDrawingList(sheetId?: string): DrawingElement[];\r\n addDrawing(...data: DrawingElement[]): void;\r\n updateDrawing(uuid: string, value: Partial<DrawingElement>): void;\r\n deleteDrawing(uuid: string): void;\r\n addCol(colIndex: number, count: number): void;\r\n addRow(rowIndex: number, count: number): void;\r\n deleteCol(colIndex: number, count: number): void;\r\n deleteRow(rowIndex: number, count: number): void;\r\n validateDrawing(item: DrawingElement): boolean;\r\n}\r\n\r\nexport interface IDefinedName extends IBaseManager {\r\n getDefineName(range: IRange): string;\r\n setDefineName(range: IRange, name: string): boolean;\r\n checkDefineName(name: string): IRange | undefined;\r\n getDefineNameList(): DefinedNameItem[];\r\n validateDefinedName(name: string): boolean;\r\n}\r\n\r\nexport interface IMergeCell extends IBaseManager {\r\n getMergeCellList(sheetId?: string): IRange[];\r\n addMergeCell(range: IRange, type?: EMergeCellType): void;\r\n deleteMergeCell(range: IRange): void;\r\n}\r\n\r\nexport interface IRow extends IBaseManager {\r\n hideRow(rowIndex: number, count: number): void;\r\n unhideRow(rowIndex: number, count: number): void;\r\n getRow(row: number, sheetId?: string): CustomItem;\r\n setRowHeight(row: number, height: number, sheetId?: string): void;\r\n}\r\n\r\nexport interface ICol extends IBaseManager {\r\n hideCol(colIndex: number, count: number): void;\r\n unhideCol(colIndex: number, count: number): void;\r\n getCol(col: number, sheetId?: string): CustomItem;\r\n setColWidth(col: number, width: number, sheetId?: string): void;\r\n}\r\nexport interface IWorksheet extends IBaseManager {\r\n addCol(colIndex: number, count: number, isRight?: boolean): void;\r\n addRow(rowIndex: number, count: number, isAbove?: boolean): void;\r\n deleteCol(colIndex: number, count: number): void;\r\n deleteRow(rowIndex: number, count: number): void;\r\n pasteRange(fromRange: IRange, isCut: boolean): IRange;\r\n getWorksheet(sheetId?: string): WorksheetData;\r\n setWorksheet(data: WorksheetData): void;\r\n getCell(range: IRange): ModelCellType | undefined;\r\n setCell(\r\n value: ResultType[][],\r\n style: Array<Array<Partial<StyleType>>>,\r\n range: IRange,\r\n ): void;\r\n updateCellStyle(style: Partial<StyleType>, range: IRange): void;\r\n setCellValue(value: ResultType, range: IRange): void;\r\n computeFormulas(): void;\r\n addMergeCell(range: IRange, type?: EMergeCellType): void;\r\n}\r\n\r\nexport interface IFilter extends IBaseManager {\r\n addFilter(range: IRange): void;\r\n deleteFilter(sheetId?: string): void;\r\n getFilter(sheetId?: string): AutoFilterItem | undefined;\r\n updateFilter(sheetId: string, value: Partial<AutoFilterItem>): void;\r\n}\r\n\r\nexport interface IBaseModel\r\n extends Pick<\r\n IWorkbook,\r\n | 'setCurrentSheetId'\r\n | 'getCurrentSheetId'\r\n | 'addSheet'\r\n | 'deleteSheet'\r\n | 'hideSheet'\r\n | 'unhideSheet'\r\n | 'renameSheet'\r\n | 'getSheetInfo'\r\n | 'updateSheetInfo'\r\n | 'getSheetList'\r\n | 'deleteAll'\r\n | 'fromJSON'\r\n >,\r\n Pick<IRangeMap, 'setActiveRange' | 'getActiveRange' | 'validateRange'>,\r\n Pick<\r\n IDrawings,\r\n | 'getDrawingList'\r\n | 'addDrawing'\r\n | 'updateDrawing'\r\n | 'deleteDrawing'\r\n | 'validateDrawing'\r\n >,\r\n Pick<\r\n IDefinedName,\r\n | 'getDefineName'\r\n | 'setDefineName'\r\n | 'checkDefineName'\r\n | 'getDefineNameList'\r\n | 'validateDefinedName'\r\n >,\r\n Pick<IMergeCell, 'getMergeCellList' | 'addMergeCell' | 'deleteMergeCell'>,\r\n Pick<IRow, 'hideRow' | 'getRow' | 'setRowHeight' | 'unhideRow'>,\r\n Pick<ICol, 'hideCol' | 'getCol' | 'setColWidth' | 'unhideCol'>,\r\n Pick<\r\n IWorksheet,\r\n | 'addRow'\r\n | 'deleteRow'\r\n | 'addCol'\r\n | 'deleteCol'\r\n | 'getCell'\r\n | 'setCell'\r\n | 'updateCellStyle'\r\n | 'getWorksheet'\r\n | 'setWorksheet'\r\n | 'setCellValue'\r\n >,\r\n Pick<IFilter, 'addFilter' | 'getFilter' | 'deleteFilter' | 'updateFilter'> {\r\n toJSON(): ModelJSON;\r\n canRedo(): boolean;\r\n canUndo(): boolean;\r\n undo(): void;\r\n redo(): void;\r\n transaction<T>(fn: () => T, origin?: any): T;\r\n clearHistory(): void;\r\n}\r\n\r\nexport interface IModel\r\n extends IBaseModel,\r\n Pick<IScroll, 'getScroll' | 'setScroll'> {\r\n pasteRange(range: IRange, isCut: boolean): IRange;\r\n emitChange(dataset: Set<ChangeEventType>): void;\r\n render(dataset: Set<ChangeEventType>): void;\r\n getRoot(): ModelRoot;\r\n}\r\n\r\nexport type NumberFormatValue =\r\n | number\r\n | string\r\n | boolean\r\n | Date\r\n | null\r\n | undefined;\r\n\r\nexport type UserItem = {\r\n range: IRange;\r\n clientId: number;\r\n};\r\nexport type EventEmitterType = {\r\n modelChange: {\r\n changeSet: Set<ChangeEventType>;\r\n };\r\n awarenessChange: {\r\n users: UserItem[];\r\n };\r\n rangeChange: {\r\n range: IRange;\r\n };\r\n};\r\n\r\nexport enum SYNC_FLAG {\r\n MODEL = 'model',\r\n SKIP_UPDATE = 'skip-update',\r\n SKIP_UNDO_REDO = 'skip-undo-redo',\r\n SKIP_UNDO_REDO_UPDATE = 'skip-undo-redo-update',\r\n}\r\n","import {\r\n IRange,\r\n WorksheetType,\r\n ModelCellType,\r\n FormulaFunction,\r\n} from '../types';\r\nimport { type SheetRange } from '../util/range';\r\n\r\nexport type ResultType = boolean | string | number;\r\n\r\nexport enum TokenType {\r\n EQUAL, // =\r\n NOT_EQUAL, // <>\r\n PLUS, // +\r\n MINUS, // -\r\n STAR, // *\r\n SLASH, // /\r\n EXPONENT, // ^\r\n GREATER, // >\r\n GREATER_EQUAL, // >=\r\n CONCATENATE, // &\r\n COLON, // : 区域运算符,形成区域\r\n COMMA, // , 联合运算符 求并集\r\n EMPTY_CHAR, // ' ' 交叉运算符 求交集\r\n PERCENT, // %\r\n LESS, // <\r\n LESS_EQUAL, // <=\r\n STRING, // string\r\n NUMBER, // integer | float\r\n BOOL, // TRUE | FALSE\r\n ERROR, // #DIV/0! | #NAME? | #N/A | #NULL! | #NUM! | #VALUE! | #GETTING_DATA\r\n ERROR_REF, // #REF!\r\n LEFT_BRACKET, // (\r\n RIGHT_BRACKET, // )\r\n lEFT_BRACE, // {\r\n RIGHT_BRACE, // }\r\n SEMICOLON, // ;\r\n EXCLAMATION, // !\r\n R1C1, // R1C1 reference\r\n SHEET_NAME, // sheet name !\r\n CELL, // /[$]?[A-Za-z]{1,3}[$]?[1-9][0-9]*/\r\n COLUMN, // /[$]?[A-Za-z]{1,3}/\r\n ROW, // /^\\$[1-9][0-9]*/\r\n DEFINED_NAME, // /[a-zA-Z_][a-zA-Z0-9_.?]*/\r\n EXCEL_FUNCTION, // built-in function \\(\r\n REF_FUNCTION, // (INDEX | OFFSET | INDIRECT)\\( 5\r\n REF_FUNCTION_COND, // (IF | CHOOSE)\\( 5\r\n EOF,\r\n}\r\n\r\nexport interface CellDataMap {\r\n set: (range: IRange, value: ResultType[][]) => void;\r\n getCell: (range: IRange) => ModelCellType | undefined;\r\n getSheetInfo: (\r\n sheetId?: string,\r\n sheetName?: string,\r\n ) => WorksheetType | undefined;\r\n setDefinedName: (name: string, value: IRange) => void;\r\n getDefinedName: (name: string) => SheetRange | undefined;\r\n handleCell: (\r\n value: ModelCellType | undefined,\r\n coord: Pick<IRange, 'sheetId' | 'row' | 'col'>,\r\n ) => ResultType[];\r\n getFunction: (name: string) => FormulaFunction | undefined;\r\n}\r\n\r\nexport interface InterpreterResult {\r\n result: ResultType[];\r\n expressionStr?: string;\r\n}\r\n\r\nexport type ReferenceType = 'absolute' | 'mixed' | 'relative';\r\n\r\nexport type ConvertSheetName = (value: string) => string;\r\n","import type { BorderType, ChartType } from '../types';\r\n\r\nexport const DEFAULT_FONT_SIZE = 12;\r\nexport const MUST_FONT_FAMILY = 'sans-serif';\r\nexport const SHEET_NAME_PREFIX = 'Sheet';\r\nexport const CELL_HEIGHT = 22;\r\nexport const CELL_WIDTH = 76;\r\nexport const ROW_TITLE_HEIGHT = CELL_HEIGHT;\r\nexport const COL_TITLE_WIDTH = CELL_WIDTH / 2;\r\nexport const HIDE_CELL = 0;\r\nexport const TEXTAREA_MAX_ROWS = 10;\r\nexport const MERGE_CELL_LINE_BREAK = '&#10;';\r\nexport const LINE_BREAK = '\\n';\r\nexport const CSV_SPLITTER = ',';\r\nexport const XLSX_MAX_COL_COUNT = 16384; // XFD\r\nexport const XLSX_MAX_ROW_COUNT = 1048576;\r\nexport const DEFAULT_ROW_COUNT = 200;\r\nexport const MAX_ADD_ROW_THRESHOLD = 200;\r\nexport const DEFAULT_COL_COUNT = 30;\r\nexport const DEFAULT_POSITION = -999;\r\nexport const FILTER_RECT_SIZE = 16;\r\n\r\nexport const SHEET_ITEM_TEST_ID_PREFIX = '__sheet_item_';\r\nexport const FORMULA_PREFIX = '=';\r\nexport const SPLITTER = '_';\r\nexport const MAX_NAME_LENGTH = 35;\r\nexport const MAX_PARAMS_COUNT = 256;\r\nexport const FORMULA_MAX_PRECISION = 9;\r\nexport const FORMULA_EDITOR_ROLE = '__FORMULA_EDITOR_ROLE__';\r\nexport const DEFAULT_EXCEL_ID = '184858c4-be37-41b5-af82-52689004e605';\r\n\r\nexport const DEFAULT_FORMAT_CODE = 'General';\r\nexport const DEFAULT_TEXT_FORMAT_CODE = '@';\r\n\r\nexport const ERROR_SET = new Set([\r\n '#GETTING_DATA',\r\n '#DIV/0!',\r\n '#NULL!',\r\n '#NUM!',\r\n '#REF!',\r\n '#VALUE!',\r\n '#N/A',\r\n '#NAME?',\r\n] as const);\r\n\r\nexport type ErrorTypes = typeof ERROR_SET extends Set<infer T> ? T : never;\r\n\r\nexport const DEFAULT_LINE_WIDTH = 1;\r\n\r\nexport const BORDER_TYPE_MAP: Record<BorderType, number> = {\r\n thin: DEFAULT_LINE_WIDTH,\r\n hair: DEFAULT_LINE_WIDTH,\r\n dotted: DEFAULT_LINE_WIDTH,\r\n dashed: DEFAULT_LINE_WIDTH,\r\n dashDot: DEFAULT_LINE_WIDTH,\r\n dashDotDot: DEFAULT_LINE_WIDTH,\r\n double: DEFAULT_LINE_WIDTH,\r\n medium: DEFAULT_LINE_WIDTH * 2,\r\n mediumDashed: DEFAULT_LINE_WIDTH * 2,\r\n mediumDashDot: DEFAULT_LINE_WIDTH * 2,\r\n mediumDashDotDot: DEFAULT_LINE_WIDTH * 2,\r\n thick: DEFAULT_LINE_WIDTH * 4,\r\n};\r\n\r\nexport const COLOR_PICKER_COLOR_LIST = [\r\n '#35322B',\r\n '#505050',\r\n '#606060',\r\n '#6F6F6F',\r\n '#8B8B8B',\r\n '#B2B2B2',\r\n '#CCCCCC',\r\n '#E5E5E5',\r\n '#F5F5F5',\r\n '#FFFFFF',\r\n '#9D0000',\r\n '#B20000',\r\n '#CD0F0F',\r\n '#E30909',\r\n '#F30B0B',\r\n '#FE4B4B',\r\n '#FA7979',\r\n '#FB9D9D',\r\n '#FDCECE',\r\n '#FEE7E7',\r\n '#B24000',\r\n '#CC4F10',\r\n '#DF5D00',\r\n '#F96800',\r\n '#FB8937',\r\n '#FF8C51',\r\n '#FCA669',\r\n '#FDC49B',\r\n '#FEE1CD',\r\n '#FEF0E6',\r\n '#B19401',\r\n '#C5A300',\r\n '#D8B300',\r\n '#EBC301',\r\n '#F9D700',\r\n '#FBE137',\r\n '#FCE869',\r\n '#FDF09B',\r\n '#FEF7CD',\r\n '#FEFBE6',\r\n '#58770A',\r\n '#688C0D',\r\n '#7AA017',\r\n '#8BBB11',\r\n '#A4DC16',\r\n '#BEEE44',\r\n '#CEF273',\r\n '#DEF6A2',\r\n '#EFFBD0',\r\n '#F7FDE8',\r\n '#007676',\r\n '#008A8A',\r\n '#009E9E',\r\n '#00BBBB',\r\n '#1CD8D8',\r\n '#2AEAEA',\r\n '#76EFEF',\r\n '#A3F5F5',\r\n '#D1FAFA',\r\n '#E8FCFC',\r\n '#001F9C',\r\n '#0025B7',\r\n '#012BD2',\r\n '#133DE3',\r\n '#2F55EB',\r\n '#4567ED',\r\n '#738DF2',\r\n '#A2B3F6',\r\n '#D0D9FB',\r\n '#E8ECFD',\r\n '#3F0198',\r\n '#510EB0',\r\n '#6721CB',\r\n '#7735D4',\r\n '#894EDE',\r\n '#9E6DE3',\r\n '#AA82E3',\r\n '#C7ABED',\r\n '#E3D5F6',\r\n '#F1EAFA',\r\n '#8F0550',\r\n '#A1095C',\r\n '#C1026B',\r\n '#D4157E',\r\n '#E7258F',\r\n '#F248A6',\r\n '#F273B9',\r\n '#F6A2D0',\r\n '#FBD0E8',\r\n '#FDE8F3',\r\n];\r\n\r\nexport const TEXT_FLAG = '#TEXT' as const;\r\n\r\nexport const CELL_REG_EXP = /^[$]?[A-Za-z]{1,3}[$]?[1-9][0-9]*$/;\r\nexport const COLUMN_REG_EXP = /^[$]?[A-Za-z]{1,3}$/;\r\nexport const ROW_REG_EXP = /^\\$[1-9][0-9]*$/;\r\nexport const DEFINED_NAME_REG_EXP = /^[a-zA-Z_][a-zA-Z0-9_.?]*$/;\r\n\r\nexport const BUILT_IN_FUNCTION_SET = new Set([\r\n 'ABS',\r\n 'ACCRINT',\r\n 'ACCRINTM',\r\n 'ACOS',\r\n 'ACOSH',\r\n 'ACOT',\r\n 'ACOTH',\r\n 'ADDRESS',\r\n 'AGGREGATE',\r\n 'AMORDEGRC',\r\n 'AMORLINC',\r\n 'AND',\r\n 'ARABIC',\r\n 'AREAS',\r\n 'ARRAYTOTEXT',\r\n 'ASC',\r\n 'ASIN',\r\n 'ASINH',\r\n 'ATAN',\r\n 'ATAN2',\r\n 'ATANH',\r\n 'AVEDEV',\r\n 'AVERAGE',\r\n 'AVERAGEA',\r\n 'AVERAGEIF',\r\n 'AVERAGEIFS',\r\n 'BAHTTEXT',\r\n 'BASE',\r\n 'BESSELI',\r\n 'BESSELJ',\r\n 'BESSELK',\r\n 'BESSELY',\r\n 'BETA.DIST',\r\n 'BETA.INV',\r\n 'BETADIST',\r\n 'BETAINV',\r\n 'BIN2DEC',\r\n 'BIN2HEX',\r\n 'BIN2OCT',\r\n 'BINOM.DIST',\r\n 'BINOM.DIST.RANGE',\r\n 'BINOM.INV',\r\n 'BINOMDIST',\r\n 'BITAND',\r\n 'BITLSHIFT',\r\n 'BITOR',\r\n 'BITRSHIFT',\r\n 'BITXOR',\r\n 'CALL',\r\n 'CEILING',\r\n 'CEILING.MATH',\r\n 'CEILING.PRECISE',\r\n 'CELL',\r\n 'CHAR',\r\n 'CHIDIST',\r\n 'CHIINV',\r\n 'CHISQ.DIST',\r\n 'CHISQ.DIST.RT',\r\n 'CHISQ.INV',\r\n 'CHISQ.INV.RT',\r\n 'CHISQ.TEST',\r\n 'CHITEST',\r\n 'CLEAN',\r\n 'CODE',\r\n 'COLUMN',\r\n 'COLUMNS',\r\n 'COMBIN',\r\n 'COMBINA',\r\n 'COMPLEX',\r\n 'CONCAT',\r\n 'CONCATENATE',\r\n 'CONFIDENCE',\r\n 'CONFIDENCE.NORM',\r\n 'CONFIDENCE.T',\r\n 'CONVERT',\r\n 'CORREL',\r\n 'COS',\r\n 'COSH',\r\n 'COT',\r\n 'COTH',\r\n 'COUNT',\r\n 'COUNTA',\r\n 'COUNTBLANK',\r\n 'COUNTIF',\r\n 'COUNTIFS',\r\n 'COUPDAYBS',\r\n 'COUPDAYS',\r\n 'COUPDAYSNC',\r\n 'COUPNCD',\r\n 'COUPNUM',\r\n 'COUPPCD',\r\n 'COVAR',\r\n 'COVARIANCE.P',\r\n 'COVARIANCE.S',\r\n 'CRITBINOM',\r\n 'CSC',\r\n 'CSCH',\r\n 'CUBEKPIMEMBER',\r\n 'CUBEMEMBER',\r\n 'CUBEMEMBERPROPERTY',\r\n 'CUBERANKEDMEMBER',\r\n 'CUBESET',\r\n 'CUBESETCOUNT',\r\n 'CUBEVALUE',\r\n 'CUMIPMT',\r\n 'CUMPRINC',\r\n 'DATE',\r\n 'DATEDIF',\r\n 'DATEVALUE',\r\n 'DAVERAGE',\r\n 'DAY',\r\n 'DAYS',\r\n 'DAYS360',\r\n 'DB',\r\n 'DBCS',\r\n 'DCOUNT',\r\n 'DCOUNTA',\r\n 'DDB',\r\n 'DEC2BIN',\r\n 'DEC2HEX',\r\n 'DEC2OCT',\r\n 'DECIMAL',\r\n 'DEGREES',\r\n 'DELTA',\r\n 'DEVSQ',\r\n 'DGET',\r\n 'DISC',\r\n 'DMAX',\r\n 'DMIN',\r\n 'DOLLAR',\r\n 'DOLLARDE',\r\n 'DOLLARFR',\r\n 'DPRODUCT',\r\n 'DSTDEV',\r\n 'DSTDEVP',\r\n 'DSUM',\r\n 'DURATION',\r\n 'DVAR',\r\n 'DVARP',\r\n 'EDATE',\r\n 'EFFECT',\r\n 'ENCODEURL',\r\n 'EOMONTH',\r\n 'ERF',\r\n 'ERF.PRECISE',\r\n 'ERFC',\r\n 'ERFC.PRECISE',\r\n 'ERROR.TYPE',\r\n 'EUROCONVERT',\r\n 'EVEN',\r\n 'EXACT',\r\n 'EXP',\r\n 'EXPON.DIST',\r\n 'EXPONDIST',\r\n 'F.DIST',\r\n 'F.DIST.RT',\r\n 'F.INV',\r\n 'F.INV.RT',\r\n 'F.TEST',\r\n 'FACT',\r\n 'FACTDOUBLE',\r\n 'FALSE',\r\n 'FDIST',\r\n 'FILTER',\r\n 'FILTERXML',\r\n 'FIND',\r\n 'FINDB',\r\n 'FINV',\r\n 'FISHER',\r\n 'FISHERINV',\r\n 'FIXED',\r\n 'FLOOR',\r\n 'FLOOR.MATH',\r\n 'FLOOR.PRECISE',\r\n 'FORECAST',\r\n 'FORECAST.ETS',\r\n 'FORECAST.ETS.CONFINT',\r\n 'FORECAST.ETS.SEASONALITY',\r\n 'FORECAST.ETS.STAT',\r\n 'FORECAST.LINEAR',\r\n 'FORMULATEXT',\r\n 'FREQUENCY',\r\n 'FTEST',\r\n 'FV',\r\n 'FVSCHEDULE',\r\n 'GAMMA',\r\n 'GAMMA.DIST',\r\n 'GAMMA.INV',\r\n 'GAMMADIST',\r\n 'GAMMAINV',\r\n 'GAMMALN',\r\n 'GAMMALN.PRECISE',\r\n 'GAUSS',\r\n 'GCD',\r\n 'GEOMEAN',\r\n 'GESTEP',\r\n 'GETPIVOTDATA',\r\n 'GROWTH',\r\n 'HARMEAN',\r\n 'HEX2BIN',\r\n 'HEX2DEC',\r\n 'HEX2OCT',\r\n 'HLOOKUP',\r\n 'HOUR',\r\n 'HYPERLINK',\r\n 'HYPGEOM.DIST',\r\n 'HYPGEOMDIST',\r\n 'IFERROR',\r\n 'IFNA',\r\n 'IFS',\r\n 'IMABS',\r\n 'IMAGINARY',\r\n 'IMARGUMENT',\r\n 'IMCONJUGATE',\r\n 'IMCOS',\r\n 'IMCOSH',\r\n 'IMCOT',\r\n 'IMCSC',\r\n 'IMCSCH',\r\n 'IMDIV',\r\n 'IMEXP',\r\n 'IMLN',\r\n 'IMLOG10',\r\n 'IMLOG2',\r\n 'IMPOWER',\r\n 'IMPRODUCT',\r\n 'IMREAL',\r\n 'IMSEC',\r\n 'IMSECH',\r\n 'IMSIN',\r\n 'IMSINH',\r\n 'IMSQRT',\r\n 'IMSUB',\r\n 'IMSUM',\r\n 'IMTAN',\r\n 'INFO',\r\n 'INT',\r\n 'INTERCEPT',\r\n 'INTRATE',\r\n 'IPMT',\r\n 'IRR',\r\n 'ISBLANK',\r\n 'ISERR',\r\n 'ISERROR',\r\n 'ISEVEN',\r\n 'ISFORMULA',\r\n 'ISLOGICAL',\r\n 'ISNA',\r\n 'ISNONTEXT',\r\n 'ISNUMBER',\r\n 'ISO.CEILING',\r\n 'ISODD',\r\n 'ISOWEEKNUM',\r\n 'ISPMT',\r\n 'ISREF',\r\n 'ISTEXT',\r\n 'JIS',\r\n 'KURT',\r\n 'LARGE',\r\n 'LCM',\r\n 'LEFT',\r\n 'LEFTB',\r\n 'LEN',\r\n 'LENB',\r\n 'LET',\r\n 'LINEST',\r\n 'LN',\r\n 'LOG',\r\n 'LOG10',\r\n 'LOGEST',\r\n 'LOGINV',\r\n 'LOGNORM.DIST',\r\n 'LOGNORM.INV',\r\n 'LOGNORMDIST',\r\n 'LOOKUP',\r\n 'LOWER',\r\n 'MATCH',\r\n 'MAX',\r\n 'MAXA',\r\n 'MAXIFS',\r\n 'MDETERM',\r\n 'MDURATION',\r\n 'MEDIAN',\r\n 'MID',\r\n 'MIDB',\r\n 'MIN',\r\n 'MINA',\r\n 'MINIFS',\r\n 'MINUTE',\r\n 'MINVERSE',\r\n 'MIRR',\r\n 'MMULT',\r\n 'MOD',\r\n 'MODE',\r\n 'MODE.MULT',\r\n 'MODE.SNGL',\r\n 'MONTH',\r\n 'MROUND',\r\n 'MULTINOMIAL',\r\n 'MUNIT',\r\n 'N',\r\n 'NA',\r\n 'NEGBINOM.DIST',\r\n 'NEGBINOMDIST',\r\n 'NETWORKDAYS',\r\n 'NETWORKDAYS.INTL',\r\n 'NOMINAL',\r\n 'NORM.DIST',\r\n 'NORM.INV',\r\n 'NORM.S.DIST',\r\n 'NORM.S.INV',\r\n 'NORMDIST',\r\n 'NORMINV',\r\n 'NORMSDIST',\r\n 'NORMSINV',\r\n 'NOT',\r\n 'NOW',\r\n 'NPER',\r\n 'NPV',\r\n 'NUMBERVALUE',\r\n 'OCT2BIN',\r\n 'OCT2DEC',\r\n 'OCT2HEX',\r\n 'ODD',\r\n 'ODDFPRICE',\r\n 'ODDFYIELD',\r\n 'ODDLPRICE',\r\n 'ODDLYIELD',\r\n 'OR',\r\n 'PDURATION',\r\n 'PEARSON',\r\n 'PERCENTILE',\r\n 'PERCENTILE.EXC',\r\n 'PERCENTILE.INC',\r\n 'PERCENTRANK',\r\n 'PERCENTRANK.EXC',\r\n 'PERCENTRANK.INC',\r\n 'PERMUT',\r\n 'PERMUTATIONA',\r\n 'PHI',\r\n 'PHONETIC',\r\n 'PI',\r\n 'PMT',\r\n 'POISSON',\r\n 'POISSON.DIST',\r\n 'POWER',\r\n 'PPMT',\r\n 'PRICE',\r\n 'PRICEDISC',\r\n 'PRICEMAT',\r\n 'PROB',\r\n 'PRODUCT',\r\n 'PROPER',\r\n 'PV',\r\n 'QUARTILE',\r\n 'QUARTILE.EXC',\r\n 'QUARTILE.INC',\r\n 'QUOTIENT',\r\n 'RADIANS',\r\n 'RAND',\r\n 'RANDARRAY',\r\n 'RANDBETWEEN',\r\n 'RANK',\r\n 'RANK.AVG',\r\n 'RANK.EQ',\r\n 'RATE',\r\n 'RECEIVED',\r\n 'REGISTER.ID',\r\n 'REPLACE',\r\n 'REPLACEB',\r\n 'REPT',\r\n 'RIGHT',\r\n 'RIGHTB',\r\n 'ROMAN',\r\n 'ROUND',\r\n 'ROUNDDOWN',\r\n 'ROUNDUP',\r\n 'ROW',\r\n 'ROWS',\r\n 'RRI',\r\n 'RSQ',\r\n 'RTD',\r\n 'SEARCH',\r\n 'SEARCHB',\r\n 'SEC',\r\n 'SECH',\r\n 'SECOND',\r\n 'SEQUENCE',\r\n 'SERIESSUM',\r\n 'SHEET',\r\n 'SHEETS',\r\n 'SIGN',\r\n 'SIN',\r\n 'SINH',\r\n 'SKEW',\r\n 'SKEW.P',\r\n 'SLN',\r\n 'SLOPE',\r\n 'SMALL',\r\n 'SORT',\r\n 'SORTBY',\r\n 'SQRT',\r\n 'SQRTPI',\r\n 'STANDARDIZE',\r\n 'STDEV',\r\n 'STDEV.P',\r\n 'STDEV.S',\r\n 'STDEVA',\r\n 'STDEVP',\r\n 'STDEVPA',\r\n 'STEYX',\r\n 'SUBSTITUTE',\r\n 'SUBTOTAL',\r\n 'SUM',\r\n 'SUMIF',\r\n 'SUMIFS',\r\n 'SUMPRODUCT',\r\n 'SUMSQ',\r\n 'SUMX2MY2',\r\n 'SUMX2PY2',\r\n 'SUMXMY2',\r\n 'SWITCH',\r\n 'SYD',\r\n 'T',\r\n 'T.DIST',\r\n 'T.DIST.2T',\r\n 'T.DIST.RT',\r\n 'T.INV',\r\n 'T.INV.2T',\r\n 'T.TEST',\r\n 'TAN',\r\n 'TANH',\r\n 'TBILLEQ',\r\n 'TBILLPRICE',\r\n 'TBILLYIELD',\r\n 'TDIST',\r\n 'TEXT',\r\n 'TEXTJOIN',\r\n 'TIME',\r\n 'TIMEVALUE',\r\n 'TINV',\r\n 'TODAY',\r\n 'TRANSPOSE',\r\n 'TREND',\r\n 'TRIM',\r\n 'TRIMMEAN',\r\n 'TRUE',\r\n 'TRUNC',\r\n 'TTEST',\r\n 'TYPE',\r\n 'UNICHAR',\r\n 'UNICODE',\r\n 'UNIQUE',\r\n 'UPPER',\r\n 'VALUE',\r\n 'VALUETOTEXT',\r\n 'VAR',\r\n 'VAR.P',\r\n 'VAR.S',\r\n 'VARA',\r\n 'VARP',\r\n 'VARPA',\r\n 'VDB',\r\n 'VLOOKUP',\r\n 'WEBSERVICE',\r\n 'WEEKDAY',\r\n 'WEEKNUM',\r\n 'WEIBULL',\r\n 'WEIBULL.DIST',\r\n 'WORKDAY',\r\n 'WORKDAY.INTL',\r\n 'XIRR',\r\n 'XLOOKUP',\r\n 'XMATCH',\r\n 'XNPV',\r\n 'XOR',\r\n 'YEAR',\r\n 'YEARFRAC',\r\n 'YIELD',\r\n 'YIELDDISC',\r\n 'YIELDMAT',\r\n 'Z.TEST',\r\n 'ZTEST',\r\n] as const);\r\n\r\nexport type BuiltInFormulas = typeof BUILT_IN_FUNCTION_SET extends Set<infer T>\r\n ? T\r\n : never;\r\n\r\nexport const CHART_TYPE_LIST: Array<{\r\n value: ChartType;\r\n label: string;\r\n}> = [\r\n {\r\n value: 'line',\r\n label: 'line-chart',\r\n },\r\n {\r\n value: 'bar',\r\n label: 'bar-chart',\r\n },\r\n {\r\n value: 'pie',\r\n label: 'pie-chart',\r\n },\r\n {\r\n value: 'scatter',\r\n label: 'scatter-chart',\r\n },\r\n {\r\n value: 'radar',\r\n label: 'radar-chart',\r\n },\r\n {\r\n value: 'polarArea',\r\n label: 'polar-area-chart',\r\n },\r\n];\r\n\r\nexport const NUMBER_FORMAT_LIST: Array<{\r\n formatCode: string;\r\n id: number;\r\n}> = [\r\n { formatCode: DEFAULT_FORMAT_CODE, id: 0 },\r\n { formatCode: '0', id: 1 },\r\n { formatCode: '0.00', id: 2 },\r\n { formatCode: '#,##0', id: 3 },\r\n { formatCode: '#,##0.00', id: 4 },\r\n { formatCode: '\"$\"#,##0.00_);[Red](\"$\"#,##0.00)', id: 8 },\r\n { formatCode: '0%', id: 9 },\r\n { formatCode: '0.00%', id: 10 },\r\n { formatCode: '0.00E+00', id: 11 },\r\n { formatCode: '# ?/?', id: 12 },\r\n { formatCode: '# ??/??', id: 13 },\r\n { formatCode: 'mm-dd-yy', id: 14 },\r\n { formatCode: 'd-mmm-yy', id: 15 },\r\n { formatCode: 'd-mmm', id: 16 },\r\n { formatCode: 'mmm-yy', id: 17 },\r\n { formatCode: 'h:mm AM/PM', id: 18 },\r\n { formatCode: 'h:mm:ss AM/PM', id: 19 },\r\n { formatCode: 'h:mm', id: 20 },\r\n { formatCode: 'h:mm:ss', id: 21 },\r\n { formatCode: 'm/d/yy h:mm', id: 22 },\r\n {\r\n formatCode: 'yyyy\"年\"m\"月\"',\r\n id: 27,\r\n },\r\n { formatCode: '#,##0 ;(#,##0)', id: 37 },\r\n { formatCode: '#,##0 ;[Red](#,##0)', id: 38 },\r\n { formatCode: '#,##0.00 ;(#,##0.00)', id: 39 },\r\n { formatCode: '#,##0.00 ;[Red](#,##0.00)', id: 40 },\r\n {\r\n formatCode: '_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)',\r\n id: 44,\r\n },\r\n { formatCode: 'mm:ss', id: 45 },\r\n { formatCode: '[h]:mm:ss', id: 46 },\r\n { formatCode: 'mmss.0', id: 47 },\r\n { formatCode: '##0.0E+0', id: 48 },\r\n { formatCode: DEFAULT_TEXT_FORMAT_CODE, id: 49 },\r\n {\r\n formatCode: '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\r\n id: 56,\r\n },\r\n];\r\n\r\nexport const getFormatCode = (id: number): string =>\r\n NUMBER_FORMAT_LIST.find((v) => v.id === id)!.formatCode;\r\n","type Params = any[];\r\n\r\nexport function throttle(fn: (...params: Params) => void, wait: number) {\r\n let check = false;\r\n let lastArgs: Params | undefined = undefined;\r\n return function (...args: Params) {\r\n if (check) {\r\n lastArgs = args;\r\n } else {\r\n // @ts-ignore\r\n fn.apply(this, args);\r\n setTimeout(() => {\r\n if (lastArgs) {\r\n // @ts-ignore\r\n fn.apply(this, lastArgs);\r\n }\r\n check = false;\r\n }, wait);\r\n }\r\n };\r\n}\r\n\r\nexport function get<T>(\r\n obj: Record<string, any> | null | undefined,\r\n path: string,\r\n defaultValue?: T,\r\n): T {\r\n const result =\r\n obj == null\r\n ? undefined\r\n : path\r\n .replace(/\\[/g, '.')\r\n .replace(/\\]/g, '')\r\n .split('.')\r\n .reduce((res, key) => {\r\n return res == null ? res : res[key];\r\n }, obj);\r\n return (result === undefined ? defaultValue : result) as T;\r\n}\r\n\r\nexport function isEmpty(value: unknown): boolean {\r\n const temp: any = value || {};\r\n return (\r\n [Object, Array].includes(temp.constructor) && !Object.entries(temp).length\r\n );\r\n}\r\n\r\nexport function deepEqual(x: any, y: any) {\r\n if (x === y) {\r\n return true;\r\n }\r\n if (x && typeof x === 'object' && y && typeof y === 'object') {\r\n if (Object.keys(x).length !== Object.keys(y).length) {\r\n return false;\r\n }\r\n const keys1 = Object.keys(x);\r\n const keys2 = Object.keys(y);\r\n for (let i = 0; i < keys1.length; i++) {\r\n const key1 = keys1[i];\r\n const key2 = keys2[i];\r\n if (key1 !== key2 || !deepEqual(x[key1], y[key2])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function noop() {}\r\n\r\nexport function camelCase(str: string) {\r\n const a = str\r\n .toLowerCase()\r\n .replace(/[-_\\s.]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\r\n return a.substring(0, 1).toLowerCase() + a.substring(1);\r\n}\r\n\r\nexport function omit<T, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> {\r\n const result = { ...obj };\r\n keys.forEach((key) => {\r\n delete result[key];\r\n });\r\n return result;\r\n}\r\n","import {\r\n SHEET_NAME_PREFIX,\r\n SPLITTER,\r\n FORMULA_PREFIX,\r\n MERGE_CELL_LINE_BREAK,\r\n DEFAULT_EXCEL_ID,\r\n} from './constant';\r\nimport type {\r\n WorksheetType,\r\n Coordinate,\r\n ModelJSON,\r\n ResultType,\r\n IRange,\r\n} from '../types';\r\n\r\nexport function parseNumber(value: any): [boolean, number] {\r\n if (typeof value === 'boolean') {\r\n return [true, Number(value)];\r\n }\r\n if (typeof value === 'number' && !isNaN(value)) {\r\n return [true, value];\r\n }\r\n if (typeof value !== 'string') {\r\n return [false, 0];\r\n }\r\n if (value.length > 12) {\r\n return [false, 0];\r\n }\r\n const temp = Number(value);\r\n if (isNaN(temp)) {\r\n return [false, 0];\r\n }\r\n return [true, temp];\r\n}\r\n\r\nexport function getListMaxNum(list: string[] = []): number {\r\n const idList: number[] = list\r\n .map((item) => {\r\n return parseNumber(item)[1];\r\n })\r\n .filter((v) => !isNaN(v));\r\n return Math.max(Math.max(...idList), 0);\r\n}\r\n\r\nexport function getDefaultSheetInfo(\r\n list: WorksheetType[] = [],\r\n): Pick<WorksheetType, 'name' | 'sheetId' | 'sort'> {\r\n const sheetId =\r\n Math.ceil(getListMaxNum(list.map((item) => item.sheetId))) + 1;\r\n return {\r\n name: `${SHEET_NAME_PREFIX}${sheetId}`,\r\n sheetId: String(sheetId),\r\n sort: sheetId,\r\n };\r\n}\r\n\r\nexport function convertStringToResultType(value: any): ResultType {\r\n if (typeof value === 'string') {\r\n const temp = value.toUpperCase();\r\n if (['TRUE', 'FALSE'].includes(temp)) {\r\n return temp === 'TRUE';\r\n }\r\n }\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (value === '') {\r\n return '';\r\n }\r\n const [check, num] = parseNumber(value);\r\n if (check) {\r\n return num;\r\n }\r\n return value;\r\n}\r\n\r\nexport function stringToCoordinate(key: string): Coordinate {\r\n const [row, col] = key.split(SPLITTER);\r\n const r = parseInt(row, 10);\r\n const c = parseInt(col, 10);\r\n return {\r\n row: isNaN(r) ? -1 : r,\r\n col: isNaN(c) ? -1 : c,\r\n };\r\n}\r\n\r\nexport function getWorksheetKey(sheetId: string, row: number, col: number) {\r\n return `${sheetId}${SPLITTER}${row}${SPLITTER}${col}`;\r\n}\r\n\r\nexport function convertWorksheetKey(\r\n key: string,\r\n): Pick<IRange, 'sheetId' | 'row' | 'col'> | null {\r\n const [sheetId, row, col] = key.split(SPLITTER);\r\n const r = parseInt(row, 10);\r\n const c = parseInt(col, 10);\r\n const result: Pick<IRange, 'sheetId' | 'row' | 'col'> = {\r\n row: isNaN(r) ? -1 : r,\r\n col: isNaN(c) ? -1 : c,\r\n sheetId,\r\n };\r\n if (result.row < 0 || result.col < 0 || !sheetId) {\r\n return null;\r\n }\r\n return result;\r\n}\r\n\r\nexport function getCustomWidthOrHeightKey(\r\n sheetId: string,\r\n rowOrCol: number,\r\n): `${string}_${number}` {\r\n return `${sheetId}${SPLITTER}${rowOrCol}`;\r\n}\r\n\r\nexport function widthOrHeightKeyToData(key: string) {\r\n const [sheetId, num] = key.split(SPLITTER);\r\n const r = parseInt(num, 10);\r\n return {\r\n sheetId,\r\n rowOrCol: isNaN(r) ? -1 : r,\r\n };\r\n}\r\n\r\nexport function isMobile() {\r\n const matchList = [\r\n /Android/i,\r\n /webOS/i,\r\n /iPhone/i,\r\n /iPad/i,\r\n /iPod/i,\r\n /BlackBerry/i,\r\n /Windows Phone/i,\r\n ];\r\n const ua = navigator.userAgent;\r\n return matchList.some((v) => ua.match(v));\r\n}\r\n\r\nexport const KEY_LIST: Array<keyof ModelJSON> = [\r\n 'autoFilter',\r\n 'currentSheetId',\r\n 'customHeight',\r\n 'customWidth',\r\n 'workbook',\r\n 'worksheets',\r\n 'definedNames',\r\n 'drawings',\r\n 'mergeCells',\r\n 'rangeMap',\r\n 'scroll',\r\n] as const;\r\n\r\nexport function sleep(ms: number) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nexport function isTestEnv(): boolean {\r\n return process.env.NODE_ENV === 'test';\r\n}\r\n\r\nexport function isMac() {\r\n return navigator?.userAgent?.indexOf('Mac OS X') >= 0;\r\n}\r\n\r\nexport function isFormula(value: ResultType) {\r\n if (\r\n typeof value === 'string' &&\r\n value &&\r\n value.startsWith(FORMULA_PREFIX) &&\r\n value.length > 1\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function isMergeContent(isMergeCell: boolean, text: string) {\r\n return isMergeCell && text.includes(MERGE_CELL_LINE_BREAK);\r\n}\r\n\r\nexport function getDocId() {\r\n const docId =\r\n (window?.top?.location?.hash || '').slice(1) ||\r\n window.location.hash.slice(1) ||\r\n import.meta.env.VITE_DEFAULT_EXCEL_ID ||\r\n DEFAULT_EXCEL_ID;\r\n return docId;\r\n}\r\n\r\nexport function getRandomColor() {\r\n const r = Math.floor(Math.random() * 256)\r\n .toString(16)\r\n .padStart(2, '0');\r\n const g = Math.floor(Math.random() * 256)\r\n .toString(16)\r\n .padStart(2, '0');\r\n const b = Math.floor(Math.random() * 256)\r\n .toString(16)\r\n .padStart(2, '0');\r\n return `#${r}${g}${b}`;\r\n}\r\n","/**\r\n * font-style: none | normal | italic | oblique\r\n * font-variant none | normal | small-caps // 作用不大\r\n * font-weight none | normal | bold | 数字\r\n * font-size\r\n * line-height\r\n * font-family\r\n * e.g italic bold 14px/16px sans-serif;\r\n */\r\n\r\nimport { EUnderLine, StyleType, ResultType } from '../types';\r\nimport { DEFAULT_FONT_SIZE, MUST_FONT_FAMILY } from './constant';\r\nimport { camelCase } from './lodash';\r\nimport { parseNumber } from './util';\r\n\r\nexport const FONT_SIZE_LIST = [\r\n 6,\r\n 8,\r\n 9,\r\n 10,\r\n DEFAULT_FONT_SIZE,\r\n 14,\r\n 16,\r\n 18,\r\n 20,\r\n 22,\r\n 24,\r\n 26,\r\n 28,\r\n 36,\r\n 48,\r\n 72,\r\n];\r\n\r\nexport function makeFont(\r\n fontStyle: 'none' | 'normal' | 'italic' | 'oblique' = 'normal',\r\n fontWeight = 'normal',\r\n fontSize = DEFAULT_FONT_SIZE,\r\n fontFamily = '',\r\n): string {\r\n const temp = `${fontStyle} ${fontWeight} ${fontSize}px `;\r\n const fontFamilyList: string[] = [MUST_FONT_FAMILY];\r\n // just for test\r\n if (process.env.VITE_IS_E2E) {\r\n fontFamilyList.unshift('Source Code Pro');\r\n }\r\n if (fontFamily) {\r\n fontFamilyList.unshift(fontFamily);\r\n }\r\n return temp + fontFamilyList.join(',');\r\n}\r\n\r\nexport function convertToCssString(style: Partial<StyleType>): string {\r\n let result = '';\r\n if (style.fontColor) {\r\n result += `color:${style.fontColor};`;\r\n }\r\n if (style.fillColor) {\r\n result += `background-color:${style.fillColor};`;\r\n }\r\n if (style.fontSize) {\r\n result += `font-size:${style.fontSize}pt;`;\r\n }\r\n if (style.fontFamily) {\r\n result += `font-family:${style.fontFamily};`;\r\n }\r\n if (style.isItalic) {\r\n result += 'font-style:italic;';\r\n }\r\n if (style.isBold) {\r\n result += 'font-weight:700;';\r\n }\r\n if (style.isWrapText) {\r\n result += 'white-space:normal;';\r\n }\r\n if (style.underline && style.isStrike) {\r\n result += 'text-decoration-line:underline line-through;';\r\n } else if (style.underline) {\r\n result += 'text-decoration-line:underline;';\r\n } else if (style.isStrike) {\r\n result += 'text-decoration-line:line-through;';\r\n }\r\n if (style.underline === EUnderLine.DOUBLE) {\r\n result += 'text-decoration-style: double;';\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction pickCSSStyle(style: Partial<CSSStyleDeclaration>): Partial<StyleType> {\r\n const {\r\n color,\r\n backgroundColor,\r\n fontSize,\r\n fontFamily,\r\n fontStyle,\r\n fontWeight,\r\n whiteSpace,\r\n textDecorationLine,\r\n textDecorationStyle,\r\n } = style;\r\n const result: Partial<StyleType> = {};\r\n if (color) {\r\n result.fontColor = color;\r\n }\r\n if (backgroundColor) {\r\n result.fillColor = backgroundColor;\r\n }\r\n if (fontSize) {\r\n const size = parseInt(fontSize, 10);\r\n if (!isNaN(size)) {\r\n result.fontSize = size;\r\n }\r\n }\r\n if (fontFamily) {\r\n result.fontFamily = fontFamily;\r\n }\r\n if (fontStyle === 'italic') {\r\n result.isItalic = true;\r\n }\r\n if (fontWeight && [700, 800, 900, 'bold'].includes(fontWeight)) {\r\n result.isBold = true;\r\n }\r\n if (\r\n whiteSpace &&\r\n [\r\n 'normal',\r\n 'pre-wrap',\r\n 'pre-line',\r\n 'break-spaces',\r\n 'revert',\r\n 'unset',\r\n ].includes(whiteSpace)\r\n ) {\r\n result.isWrapText = true;\r\n }\r\n if (textDecorationLine?.includes('underline')) {\r\n result.underline = EUnderLine.SINGLE;\r\n if (textDecorationStyle === 'double') {\r\n result.underline = EUnderLine.DOUBLE;\r\n }\r\n }\r\n if (textDecorationLine?.includes('line-through')) {\r\n result.isStrike = true;\r\n }\r\n return result;\r\n}\r\n\r\nfunction parseStyle(\r\n styleMap: Record<string, CSSStyleDeclaration>,\r\n style: CSSStyleDeclaration,\r\n className: string,\r\n tagName: string,\r\n): Partial<StyleType> {\r\n let result: Partial<StyleType> = {};\r\n const name = tagName.toLowerCase();\r\n const t = styleMap[tagName] || styleMap[name];\r\n if (t) {\r\n result = pickCSSStyle(t);\r\n }\r\n if (styleMap[className]) {\r\n result = Object.assign(result, pickCSSStyle(styleMap[className]));\r\n }\r\n\r\n result = Object.assign(result, pickCSSStyle(style));\r\n\r\n if (name === 's' || name === 'strike') {\r\n result.isStrike = true;\r\n } else if (name === 'i') {\r\n result.isItalic = true;\r\n } else if (name === 'b' || name === 'strong') {\r\n result.isBold = true;\r\n } else if (name === 'u') {\r\n result.underline = EUnderLine.SINGLE;\r\n }\r\n return result;\r\n}\r\n\r\nfunction convertToCssStyleDeclaration(cssStr: string) {\r\n const str = cssStr.replace(/\\s+/g, '').replace('<!--', '');\r\n const regex = /([^{}]+)\\s*\\{([^}]*)\\}/g;\r\n const matches: Record<string, Record<string, string | number>> = {};\r\n let match;\r\n while ((match = regex.exec(str)) !== null) {\r\n const name = (match[1] || '').trim();\r\n const cssText = (match[2] || '').trim();\r\n if (!name || !cssText) {\r\n continue;\r\n }\r\n matches[name] = {};\r\n const list = cssText.split(';');\r\n for (const item of list) {\r\n const [n, v] = item.split(':').map((v) => v.trim());\r\n if (!v || !n) {\r\n continue;\r\n }\r\n const realKey = camelCase(n);\r\n const [check, num] = parseNumber(v);\r\n const value = check ? num : v;\r\n matches[name][realKey] = value;\r\n }\r\n }\r\n return matches;\r\n}\r\n\r\nexport function convertToPx(value: string): number {\r\n const num = parseInt(value, 10);\r\n if (isNaN(num)) {\r\n return -1;\r\n }\r\n // pt to px\r\n if (value.endsWith('pt')) {\r\n return Math.ceil((num * 96) / 72);\r\n }\r\n return num;\r\n}\r\nexport function convertPxToPt(px: number, other = 'pt'): string {\r\n const pt = Math.floor((px * 72) / 96);\r\n return String(pt) + other;\r\n}\r\nexport function parseText(text: string, splitter = '\\t') {\r\n let list: string[];\r\n if (text.indexOf('\\r\\n') >= 0) {\r\n list = text.split('\\r\\n');\r\n } else {\r\n list = text.split('\\n');\r\n }\r\n const result = list\r\n .map((v) => v.trim())\r\n .filter((v) => v)\r\n .map((v) =>\r\n v\r\n .split(splitter)\r\n .map((v) => v.trim())\r\n .filter((v) => v),\r\n );\r\n const textList: Array<Array<ResultType>> = [];\r\n for (const item of result) {\r\n if (item.length === 0) {\r\n continue;\r\n }\r\n textList.push(item);\r\n }\r\n return textList;\r\n}\r\n\r\nexport function parseHTML(html: string) {\r\n let template: HTMLTemplateElement | undefined =\r\n document.createElement('template');\r\n template.innerHTML = html;\r\n const doc = template.content;\r\n const styleMap: Record<string, CSSStyleDeclaration> = {};\r\n for (const item of doc.querySelectorAll('style')) {\r\n const temp = convertToCssStyleDeclaration(item.textContent || '');\r\n for (const [key, value] of Object.entries(temp)) {\r\n styleMap[key] = Object.assign(styleMap[key] || {}, value);\r\n }\r\n }\r\n const textList: Array<Array<ResultType>> = [];\r\n const styleList: Array<Array<Partial<StyleType>>> = [];\r\n const trList = doc.querySelectorAll('tr');\r\n const colMap = new Map<number, number>();\r\n const rowMap = new Map<number, number>();\r\n let row = 0;\r\n for (const tr of trList) {\r\n const height = convertToPx(tr.style.height);\r\n if (height > 0) {\r\n rowMap.set(row++, height);\r\n }\r\n const texts: ResultType[] = [];\r\n const list: Array<Partial<StyleType>> = [];\r\n let col = 0;\r\n for (const td of tr.children) {\r\n if (td.tagName !== 'TD') {\r\n continue;\r\n }\r\n\r\n let temp = td as HTMLElement;\r\n const width = convertToPx(temp.style.width);\r\n if (width > 0 && !colMap.has(col)) {\r\n colMap.set(col++, width);\r\n }\r\n let itemStyle: Partial<StyleType> = {};\r\n while (temp.nodeType !== Node.TEXT_NODE) {\r\n const style = parseStyle(\r\n styleMap,\r\n temp.style,\r\n temp.className ? `.${temp.className}` : '',\r\n temp.tagName,\r\n );\r\n itemStyle = Object.assign(itemStyle, style);\r\n if (temp.firstChild) {\r\n temp = temp.firstChild as HTMLElement;\r\n } else {\r\n break;\r\n }\r\n }\r\n list.push(itemStyle);\r\n texts.push((temp.textContent ?? '').trim());\r\n }\r\n textList.push(texts);\r\n styleList.push(list);\r\n }\r\n template = undefined;\r\n return {\r\n textList,\r\n styleList,\r\n rowMap,\r\n colMap,\r\n };\r\n}\r\n","let dprData: number | undefined = undefined;\r\nexport function dpr(\r\n data = typeof devicePixelRatio === 'undefined' ? undefined : devicePixelRatio,\r\n): number {\r\n if (typeof dprData === 'number') {\r\n return dprData;\r\n }\r\n return Math.max(Math.floor(data || 1), 1);\r\n}\r\n\r\nexport function npx(px: number): number {\r\n return Math.floor(px * dpr());\r\n}\r\n\r\n// for worker\r\nexport function setDpr(data: number) {\r\n dprData = Math.max(Math.floor(data || 1), 1);\r\n}\r\n","/**\r\n * convert column name to number. e.g A -> 0, a -> 0\r\n * @param { string } columnName\r\n */\r\nexport function columnNameToInt(columnName: string): number {\r\n const temp = columnName.toUpperCase();\r\n let num = 0;\r\n for (let i = 0; i < temp.length; i++) {\r\n num = temp.charCodeAt(i) - 64 + num * 26;\r\n }\r\n return num - 1;\r\n}\r\n/**\r\n * convert number to column name 0 -> A\r\n * @param { string } number\r\n */\r\nexport function intToColumnName(temp: number): string {\r\n const num = temp + 1;\r\n let columnName = '';\r\n let dividend = Math.floor(Math.abs(num));\r\n let rest;\r\n\r\n while (dividend > 0) {\r\n rest = (dividend - 1) % 26;\r\n columnName = String.fromCharCode(65 + rest) + columnName;\r\n dividend = Math.floor((dividend - rest) / 26);\r\n }\r\n return columnName.toUpperCase();\r\n}\r\n\r\nexport function rowLabelToInt(label: string): number {\r\n let result = parseInt(label, 10);\r\n if (isNaN(result)) {\r\n result = -1;\r\n } else {\r\n result = Math.max(result - 1, -1);\r\n }\r\n return result;\r\n}\r\n","import { IRange } from '../types';\r\n\r\nexport function isSheet(range: IRange): boolean {\r\n return isRow(range) && isCol(range);\r\n}\r\nexport function isRow(range: IRange): boolean {\r\n return range.colCount === 0;\r\n}\r\nexport function isCol(range: IRange): boolean {\r\n return range.rowCount === 0;\r\n}\r\n\r\nexport function isSameRange(oldRange: IRange, newRange: IRange): boolean {\r\n return (\r\n oldRange.col === newRange.col &&\r\n oldRange.row === newRange.row &&\r\n oldRange.colCount === newRange.colCount &&\r\n oldRange.rowCount === newRange.rowCount &&\r\n oldRange.sheetId === newRange.sheetId\r\n );\r\n}\r\n\r\nexport function containRange(\r\n sourceRange: IRange,\r\n targetRange: IRange,\r\n): boolean {\r\n if (sourceRange.colCount === 0 && targetRange.colCount !== 0) {\r\n return false;\r\n }\r\n if (sourceRange.rowCount === 0 && targetRange.rowCount !== 0) {\r\n return false;\r\n }\r\n if (targetRange.colCount === 0 && targetRange.row === sourceRange.row) {\r\n return true;\r\n }\r\n if (targetRange.rowCount === 0 && targetRange.col === sourceRange.col) {\r\n return true;\r\n }\r\n const { row, col } = sourceRange;\r\n const check =\r\n row >= targetRange.row &&\r\n row < targetRange.row + targetRange.rowCount &&\r\n col >= targetRange.col &&\r\n col < targetRange.col + targetRange.colCount;\r\n if (check) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function toIRange(range:IRange) {\r\n return SheetRange.makeRange(range).toIRange()\r\n}\r\n\r\nexport class SheetRange implements IRange {\r\n row = 0;\r\n col = 0;\r\n colCount = 0;\r\n rowCount = 0;\r\n sheetId = '';\r\n constructor(\r\n row: number,\r\n col: number,\r\n rowCount: number,\r\n colCount: number,\r\n sheetId: string,\r\n ) {\r\n this.row = row;\r\n this.col = col;\r\n this.colCount = colCount;\r\n this.rowCount = rowCount;\r\n this.sheetId = sheetId;\r\n }\r\n\r\n static makeRange(range: IRange): SheetRange {\r\n return new SheetRange(\r\n range.row,\r\n range.col,\r\n range.rowCount,\r\n range.colCount,\r\n range.sheetId,\r\n );\r\n }\r\n toIRange(): IRange {\r\n return {\r\n row: this.row,\r\n col: this.col,\r\n rowCount: this.rowCount,\r\n colCount: this.colCount,\r\n sheetId: this.sheetId,\r\n };\r\n }\r\n}\r\n\r\nexport function iterateRange(\r\n range: IRange,\r\n sheetRowCount: number,\r\n sheetColCount: number,\r\n fn: (row: number, col: number) => boolean,\r\n) {\r\n const { row, col, rowCount, colCount } = range;\r\n if (isSheet(range)) {\r\n for (let r = 0; r < sheetRowCount; r++) {\r\n for (let c = 0; c < sheetColCount; c++) {\r\n if (fn(r, c)) {\r\n return;\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (isRow(range)) {\r\n for (let i = 0; i < sheetColCount; i++) {\r\n if (fn(row, i)) {\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n if (isCol(range)) {\r\n for (let i = 0; i < sheetRowCount; i++) {\r\n if (fn(i, col)) {\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const endRow = row + rowCount;\r\n const endCol = col + colCount;\r\n for (let r = row; r < endRow; r++) {\r\n for (let c = col; c < endCol; c++) {\r\n if (fn(r, c)) {\r\n return;\r\n }\r\n }\r\n }\r\n}\r\n","import { columnNameToInt, rowLabelToInt, intToColumnName } from './convert';\r\nimport { IRange, ReferenceType } from '../types';\r\nimport { SheetRange } from './range';\r\nimport { XLSX_MAX_COL_COUNT, XLSX_MAX_ROW_COUNT } from './constant';\r\n\r\nexport const isAlpha = (char: string) =>\r\n (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z');\r\nexport const isDigit = (char: string) => char >= '0' && char <= '9';\r\n\r\nfunction convertSheetNameToSheetId(value: string) {\r\n return value;\r\n}\r\n\r\nfunction parseCell(\r\n ref: string,\r\n convertSheetName: typeof convertSheetNameToSheetId,\r\n): SheetRange | undefined {\r\n if (!ref) {\r\n return undefined;\r\n }\r\n const realRef = ref.trim();\r\n let [sheetName, other = ''] = realRef.split('!');\r\n if (!realRef.includes('!')) {\r\n sheetName = '';\r\n other = realRef;\r\n }\r\n if (\r\n sheetName &&\r\n sheetName[0] === \"'\" &&\r\n sheetName[sheetName.length - 1] === \"'\"\r\n ) {\r\n sheetName = sheetName.slice(1, -1);\r\n }\r\n let i = 0;\r\n let rowText = '';\r\n let colText = '';\r\n if (other[i] === '$') {\r\n i++;\r\n }\r\n while (i < other.length && isAlpha(other[i])) {\r\n colText += other[i++];\r\n }\r\n if (other[i] === '$') {\r\n i++;\r\n }\r\n while (i < other.length && isDigit(other[i])) {\r\n rowText += other[i++];\r\n }\r\n if (i !== other.length) {\r\n return undefined;\r\n }\r\n if (!rowText && !colText) {\r\n return undefined;\r\n }\r\n\r\n let rowCount = 1;\r\n let colCount = 1;\r\n let row = -1;\r\n let col = -1;\r\n if (rowText === '') {\r\n rowCount = 0;\r\n row = 0;\r\n } else {\r\n row = rowLabelToInt(rowText);\r\n }\r\n if (colText === '') {\r\n colCount = 0;\r\n col = 0;\r\n } else {\r\n col = columnNameToInt(colText);\r\n }\r\n if (\r\n row < 0 ||\r\n col < 0 ||\r\n col >= XLSX_MAX_COL_COUNT ||\r\n row >= XLSX_MAX_ROW_COUNT\r\n ) {\r\n return undefined;\r\n }\r\n const range = new SheetRange(\r\n row,\r\n col,\r\n rowCount,\r\n colCount,\r\n convertSheetName(sheetName),\r\n );\r\n return range;\r\n}\r\n\r\nexport function parseReference(\r\n text: string,\r\n convertSheetName = convertSheetNameToSheetId,\r\n): SheetRange | undefined {\r\n const [cell1, cell2] = text.split(':');\r\n const startCell = parseCell(cell1, convertSheetName);\r\n if (!startCell) {\r\n return undefined;\r\n }\r\n const endCell = parseCell(cell2, convertSheetName);\r\n if (!endCell) {\r\n return startCell;\r\n }\r\n endCell.sheetId = startCell.sheetId;\r\n return mergeRange(startCell, endCell);\r\n}\r\n\r\nexport function mergeRange(start: IRange, end: IRange): SheetRange | undefined {\r\n if (start.sheetId !== end.sheetId) {\r\n return undefined;\r\n }\r\n if (\r\n start.row === end.row &&\r\n start.col === end.col &&\r\n start.rowCount === end.rowCount &&\r\n start.colCount === end.colCount\r\n ) {\r\n return SheetRange.makeRange(start);\r\n }\r\n if (start.rowCount === 0 && end.rowCount !== 0) {\r\n return undefined;\r\n }\r\n if (start.rowCount !== 0 && end.rowCount === 0) {\r\n return undefined;\r\n }\r\n if (start.colCount === 0 && end.colCount !== 0) {\r\n return undefined;\r\n }\r\n if (start.colCount !== 0 && end.colCount === 0) {\r\n return undefined;\r\n }\r\n\r\n const rowCount = Math.abs(start.row - end.row) + 1;\r\n const colCount = Math.abs(start.col - end.col) + 1;\r\n const row = start.row < end.row ? start.row : end.row;\r\n const col = start.col < end.col ? start.col : end.col;\r\n\r\n return new SheetRange(row, col, rowCount, colCount, start.sheetId);\r\n}\r\n\r\nfunction convertCell(row: number, col: number, referenceType: ReferenceType) {\r\n const first = referenceType === 'absolute' || referenceType === 'mixed';\r\n const second = referenceType === 'absolute';\r\n return `${first ? '$' : ''}${intToColumnName(col)}${second ? '$' : ''}${\r\n row + 1\r\n }`;\r\n}\r\n\r\nexport function convertToReference(\r\n range: IRange,\r\n referenceType: ReferenceType = 'relative',\r\n convertSheetIdToSheetName = convertSheetNameToSheetId,\r\n) {\r\n let result = convertCell(range.row, range.col, referenceType);\r\n let sheetName = convertSheetIdToSheetName(range.sheetId);\r\n sheetName = sheetName ? `${sheetName}!` : '';\r\n if (range.colCount > 1 && range.rowCount > 1) {\r\n const end = convertCell(\r\n range.row + range.rowCount - 1,\r\n range.col + range.colCount - 1,\r\n referenceType,\r\n );\r\n result = `${result}:${end}`;\r\n }\r\n return sheetName + result;\r\n}\r\n\r\nexport const R1C1_REG = /^R(\\[-\\d+\\]|\\[\\d+\\]|\\d+)?C(\\[-\\d+\\]|\\[\\d+\\]|\\d+)?$/i;\r\n\r\nfunction parseNumber(text: string, num: number) {\r\n let result = -1;\r\n if (text.startsWith('[')) {\r\n const t = parseInt(text.slice(1, -1), 10);\r\n if (!isNaN(t)) {\r\n result = num + t;\r\n }\r\n } else {\r\n const t = parseInt(text, 10);\r\n if (!isNaN(t)) {\r\n result = t - 1;\r\n }\r\n }\r\n return isNaN(result) ? -1 : result;\r\n}\r\n\r\nexport function parseR1C1(\r\n name: string,\r\n activeCell: Pick<IRange, 'sheetId' | 'row' | 'col'> = {\r\n row: -1,\r\n col: -1,\r\n sheetId: '',\r\n },\r\n): SheetRange | undefined {\r\n const text = name.toUpperCase();\r\n if (text[0] !== 'R') {\r\n return undefined;\r\n }\r\n const list = text.slice(1).split('C');\r\n if (list.length !== 2) {\r\n return undefined;\r\n }\r\n const [rowText, colText] = list;\r\n let row = -1;\r\n let col = -1;\r\n if (!rowText) {\r\n row = activeCell.row;\r\n } else {\r\n row = parseNumber(rowText, activeCell.row);\r\n }\r\n if (!colText) {\r\n col = activeCell.col;\r\n } else {\r\n col = parseNumber(colText, activeCell.col);\r\n }\r\n if (\r\n col >= XLSX_MAX_COL_COUNT ||\r\n row >= XLSX_MAX_ROW_COUNT ||\r\n row < 0 ||\r\n col < 0\r\n ) {\r\n return undefined;\r\n }\r\n const range = new SheetRange(row, col, 1, 1, activeCell.sheetId);\r\n return range;\r\n}\r\n","import { getRandomColor } from './util';\r\n\r\ntype NameSpaceType = 'react' | 'model' | 'test' | 'collaboration' | string;\r\n\r\nexport class Debug {\r\n namespace: NameSpaceType;\r\n\r\n static readonly colorMap: Map<NameSpaceType, string> = new Map<\r\n NameSpaceType,\r\n string\r\n >();\r\n constructor(namespace: NameSpaceType) {\r\n this.namespace = namespace;\r\n }\r\n init = () => {\r\n this.setColor();\r\n return this.log;\r\n };\r\n log = (...rest: unknown[]): void => {\r\n if (!this.enable()) {\r\n return;\r\n }\r\n const { namespace } = this;\r\n const color = Debug.colorMap.get(namespace);\r\n const result = [`%c ${namespace}:`, `color:${color};`, ...rest];\r\n console.log(...result);\r\n };\r\n enable() {\r\n return window.localStorage.getItem('debug') === '*';\r\n }\r\n setColor() {\r\n if (!Debug.colorMap.has(this.namespace)) {\r\n Debug.colorMap.set(this.namespace, getRandomColor());\r\n }\r\n }\r\n}\r\n\r\nexport const modelLog = new Debug('model').init();\r\nexport const reactLog = new Debug('react').init();\r\nexport const collaborationLog = new Debug('collaboration').init();\r\n","export function splitToWords(str: string): string[] {\r\n if (!str) {\r\n return [];\r\n }\r\n // unicode\r\n if (typeof Intl === 'undefined' || typeof Intl.Segmenter !== 'function') {\r\n // firefox\r\n return [...str];\r\n }\r\n const list = new Intl.Segmenter([], { granularity: 'word' }).segment(str);\r\n const arr = [...list];\r\n return arr.map((x) => x.segment);\r\n}\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n const pendingListeners = new Map();\n ep.addEventListener(\"message\", function handleMessage(ev) {\n const { data } = ev;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n try {\n resolver(data);\n }\n finally {\n pendingListeners.delete(data.id);\n }\n });\n return createProxy(ep, pendingListeners, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, new Map(), {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, pendingListeners, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, pendingListeners, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","const size = {\r\n smallFont: '10px',\r\n font: '12px',\r\n largeFont: '14px',\r\n padding: '12px',\r\n lineHeight: 1.5,\r\n mediumPadding: '8px',\r\n largePadding: '20px',\r\n borderRadius: '4px',\r\n borderLargeRadius: '8px',\r\n tinyPadding: '4px',\r\n scrollBarContent: '30px',\r\n formulaBarHeight: '25px',\r\n};\r\nexport default size;\r\n","const zIndex = {\r\n lowZIndex: 2,\r\n middleZIndex: 3,\r\n highZIndex: 4,\r\n highestZIndex: 9,\r\n};\r\nexport default zIndex;\r\n","function hslaToHex(h: number, s: number, l: number, alpha: number) {\r\n s = s / 100; // Convert percentage to decimal\r\n l = l / 100; // Convert percentage to decimal\r\n\r\n // Convert HSL to RGB\r\n const c = (1 - Math.abs(2 * l - 1)) * s;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = l - c / 2;\r\n\r\n let r, g, b;\r\n\r\n if (h >= 0 && h < 60) {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n } else if (h >= 60 && h < 120) {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n } else if (h >= 120 && h < 180) {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n } else if (h >= 180 && h < 240) {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n } else if (h >= 240 && h < 300) {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n } else {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n if (alpha !== 1) {\r\n return `rgba(${r},${g},${b},${alpha})`;\r\n }\r\n\r\n // Adjust RGB values and convert to HEX\r\n const toHex = (value: number) =>\r\n Math.round(value * 255)\r\n .toString(16)\r\n .padStart(2, '0');\r\n const hexR = toHex(r + m);\r\n const hexG = toHex(g + m);\r\n const hexB = toHex(b + m);\r\n\r\n // Combine the values and return the HEX color\r\n return `#${hexR}${hexG}${hexB}`;\r\n}\r\n\r\nconst RGBToHSL = (red: number, green: number, blue: number) => {\r\n // Make r, g, and b fractions of 1\r\n const r = red / 255;\r\n const g = green / 255;\r\n const b = blue / 255;\r\n\r\n // Find greatest and smallest channel values\r\n const cmin = Math.min(r, g, b);\r\n const cmax = Math.max(r, g, b);\r\n const delta = cmax - cmin;\r\n const hue = getHue(r, g, b);\r\n const lightness = getLightness(cmax, cmin);\r\n const saturation = getSaturation(delta, lightness);\r\n\r\n return [hue, saturation * 100, lightness * 100];\r\n};\r\n\r\nconst getHue = (r: number, g: number, b: number) => {\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const c = max - min;\r\n let hue: number = 0;\r\n if (c == 0) {\r\n hue = 0;\r\n } else {\r\n switch (max) {\r\n case r: {\r\n let segment = (g - b) / c;\r\n let shift = 0; // R° / (360° / hex sides)\r\n if (segment < 0) {\r\n // hue > 180, full rotation\r\n shift = 360 / 60; // R° / (360° / hex sides)\r\n }\r\n hue = segment + shift;\r\n break;\r\n }\r\n\r\n case g: {\r\n let segment = (b - r) / c;\r\n let shift = 120 / 60; // G° / (360° / hex sides)\r\n hue = segment + shift;\r\n break;\r\n }\r\n\r\n case b:\r\n let segment = (r - g) / c;\r\n let shift = 240 / 60; // B° / (360° / hex sides)\r\n hue = segment + shift;\r\n break;\r\n }\r\n }\r\n return hue * 60; // hue is in [0,6], scale it up\r\n};\r\n\r\nconst getSaturation = (delta: number, lightness: number) =>\r\n delta == 0 ? 0 : delta / (1 - Math.abs(2 * lightness - 1));\r\n\r\nconst getLightness = (cmax: number, cmin: number) => (cmax + cmin) / 2;\r\n\r\nconst fullDarkMode = ([red, green, blue, alpha]: number[]) => {\r\n const [hue, saturation, lightness] = RGBToHSL(red, green, blue);\r\n return hslaToHex(hue, saturation * 0.9, 100 - lightness, alpha);\r\n};\r\n\r\nfunction hexToRgba(hex: string) {\r\n if (hex.startsWith('#')) {\r\n hex = hex.slice(1);\r\n }\r\n\r\n let r = parseInt(hex.substring(0, 2), 16);\r\n let g = parseInt(hex.substring(2, 4), 16);\r\n let b = parseInt(hex.substring(4, 6), 16);\r\n let a = parseInt(hex.substring(6, 8) || 'ff', 16);\r\n return [r, g, b, a / 255];\r\n}\r\n\r\nexport const convertColorToDark = (color: string) => {\r\n if (color.startsWith('rgb')) {\r\n const t = color\r\n .replace('rgb', '')\r\n .replace('a', '')\r\n .replace('(', '')\r\n .replace(')', '');\r\n const list = t.split(',').map(Number);\r\n if (list.length <= 3) {\r\n list.push(1);\r\n }\r\n return fullDarkMode(list);\r\n } else {\r\n return fullDarkMode(hexToRgba(color));\r\n }\r\n};\r\n","import { convertColorToDark } from './convert';\r\n\r\nexport const lightColor = Object.freeze({\r\n primaryColor: '#217346',\r\n buttonActiveColor: '#c6c6c6',\r\n selectionColor: 'rgba(198,198,198,0.3)',\r\n backgroundColor: '#e6e6e6',\r\n hoverColor: 'rgba(0, 0, 0, 0.04)',\r\n scrollbarColor: 'rgba(0, 0, 0, 0.1)',\r\n scrollbarHoveColor: 'rgba(0, 0, 0, 0.2)',\r\n dialogBackground: 'rgba(0, 0, 0, 0.6)',\r\n white: '#ffffff',\r\n black: '#000000',\r\n triangleFillColor: '#dddddd',\r\n contentColor: '#333333',\r\n borderColor: '#cccccc',\r\n activeBorderColor: '#808080',\r\n errorFormulaColor: '#ff0000',\r\n});\r\n\r\nexport const darkColor = Object.freeze(\r\n Object.fromEntries(\r\n Object.entries(lightColor).map(([k, v]) => [k, convertColorToDark(v)]),\r\n ),\r\n);\r\n","import { ThemeType } from '../types';\r\nimport size from './size';\r\nimport zIndex from './zIndex';\r\nimport { lightColor, darkColor } from './color';\r\nimport { convertColorToDark } from './convert';\r\n\r\nexport const sizeConfig = {\r\n ...size,\r\n ...zIndex,\r\n};\r\n\r\nconst themeKey = 'data-theme' as const;\r\n\r\nexport function setTheme(value: ThemeType) {\r\n sessionStorage.setItem(themeKey, value);\r\n document.documentElement.setAttribute(themeKey, value);\r\n}\r\nexport function getTheme(): ThemeType {\r\n if (typeof sessionStorage !== 'undefined') {\r\n const l = sessionStorage.getItem(themeKey);\r\n if (l && (l === 'dark' || l === 'light')) {\r\n return l as ThemeType;\r\n }\r\n }\r\n if (typeof matchMedia === 'function') {\r\n const result = matchMedia('(prefers-color-scheme: dark)').matches\r\n ? 'dark'\r\n : 'light';\r\n return result;\r\n }\r\n return 'light';\r\n}\r\n\r\nexport function getThemeColor(key: keyof typeof lightColor, type?: ThemeType) {\r\n if (type === 'dark' || getTheme() === 'dark') {\r\n return darkColor[key];\r\n } else {\r\n return lightColor[key];\r\n }\r\n}\r\nexport { darkColor, lightColor, convertColorToDark };\r\n","import type { TokenType } from '../types';\r\n\r\nexport class Token {\r\n type: TokenType;\r\n value: string;\r\n constructor(type: TokenType, value: string) {\r\n this.type = type;\r\n this.value = value;\r\n }\r\n toString(): string {\r\n return this.value;\r\n }\r\n}\r\n","import type { ErrorTypes } from '../../util';\r\nimport { ResultType } from '../../types';\r\n\r\nimport { parseNumber } from '../../util';\r\n\r\nexport class CustomError extends Error {\r\n readonly value: ErrorTypes | '#TEXT';\r\n constructor(value: ErrorTypes | '#TEXT') {\r\n super(value);\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport function assert(\r\n condition: boolean,\r\n message: ErrorTypes = '#VALUE!',\r\n): asserts condition {\r\n if (!condition) {\r\n throw new CustomError(message);\r\n }\r\n}\r\n\r\nexport function mustOne(list: ResultType[]): ResultType {\r\n assert(list.length === 1);\r\n const [value] = list;\r\n return value;\r\n}\r\n\r\nexport function mustOneString(list: ResultType[]): string {\r\n const value = mustOne(list);\r\n assert(typeof value === 'string');\r\n return value;\r\n}\r\n\r\nexport function mustOneNumber(list: ResultType[]): number {\r\n const value = mustOne(list);\r\n const [check, num] = parseNumber(value);\r\n assert(check);\r\n return num;\r\n}\r\n\r\nexport function mustEmpty(list: ResultType[]) {\r\n assert(list.length === 0);\r\n}\r\n","/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint -W041 */\nvar SSF = ({});\nfunction make_ssf(SSF){\nSSF.version = '0.11.3';\nfunction _strrev(x) { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction fill(c,l) { var o = \"\"; while(o.length < l) o+=c; return o; }\nfunction pad0(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v,d){var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v,d){var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v,d){var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v,d){var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = Math.pow(2,32);\nfunction pad0r(v,d){if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\nfunction isgeneral(s, i) { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction init_table(t) {\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n}\n\nvar table_fmt = {};\ninit_table(table_fmt);\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar default_map = [];\nvar defi = 0;\n\n// 5 -> 37 ... 8 -> 40\nfor(defi = 5; defi <= 8; ++defi) default_map[defi] = 32 + defi;\n\n// 23 -> 0 ... 26 -> 0\nfor(defi = 23; defi <= 26; ++defi) default_map[defi] = 0;\n\n// 27 -> 14 ... 31 -> 14\nfor(defi = 27; defi <= 31; ++defi) default_map[defi] = 14;\n// 50 -> 14 ... 58 -> 14\nfor(defi = 50; defi <= 58; ++defi) default_map[defi] = 14;\n\n// 59 -> 1 ... 62 -> 4\nfor(defi = 59; defi <= 62; ++defi) default_map[defi] = defi - 58;\n// 67 -> 9 ... 68 -> 10\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 58;\n// 72 -> 14 ... 75 -> 17\nfor(defi = 72; defi <= 75; ++defi) default_map[defi] = defi - 58;\n\n// 69 -> 12 ... 71 -> 14\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 57;\n\n// 76 -> 20 ... 78 -> 22\nfor(defi = 76; defi <= 78; ++defi) default_map[defi] = defi - 56;\n\n// 79 -> 45 ... 81 -> 47\nfor(defi = 79; defi <= 81; ++defi) default_map[defi] = defi - 34;\n\n// 82 -> 0 ... 65536 -> 0 (omitted)\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction frac(x, D, mixed) {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction normalize_xl_unsafe(v) {\n\tvar s = v.toPrecision(16);\n\tif(s.indexOf(\"e\") > -1) {\n\t\tvar m = s.slice(0, s.indexOf(\"e\"));\n\t\tm = m.indexOf(\".\") > -1 ? m.slice(0, (m.slice(0,2) == \"0.\" ? 17 : 16)) : (m.slice(0,15) + fill(\"0\", m.length - 15));\n\t\treturn m + s.slice(s.indexOf(\"e\"));\n\t}\n\tvar n = s.indexOf(\".\") > -1 ? s.slice(0, (s.slice(0,2) == \"0.\" ? 17 : 16)) : (s.slice(0,15) + fill(\"0\", s.length - 15));\n\treturn Number(n);\n}\n\nfunction parse_date_code(v,opts,b2) {\n\tif(v > 2958465 || v < 0) return null;\n\tv = normalize_xl_unsafe(v);\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nSSF.parse_date_code = parse_date_code;\nvar basedate = new Date(1899, 11, 31, 0, 0, 0);\nvar dnthresh = basedate.getTime();\nvar base1904 = new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v, date1904) {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= base1904) epoch += 24*60*60*1000;\n\treturn (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\nvar general_fmt_num = (function make_general_fmt_num() {\n\tvar trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\tfunction strip_decimal(o) {\n\t\treturn (o.indexOf(\".\") == -1) ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n\t}\n\n\t/* General Exponential always shows 2 digits exp and trims the mantissa */\n\tvar mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n\tvar exp_with_single_digit = /(E[+-])(\\d)$/;\n\tfunction normalize_exp(o) {\n\t\tif(o.indexOf(\"E\") == -1) return o;\n\t\treturn o.replace(mantissa_zeroes_and_decimal,\"$1E\").replace(exp_with_single_digit,\"$10$2\");\n\t}\n\n\t/* exponent >= -9 and <= 9 */\n\tfunction small_exp(v) {\n\t\tvar w = (v<0?12:11);\n\t\tvar o = strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\t\to = v.toPrecision(10); if(o.length <= w) return o;\n\t\treturn v.toExponential(5);\n\t}\n\n\t/* exponent >= 11 or <= -10 likely exponential */\n\tfunction large_exp(v) {\n\t\tvar o = strip_decimal(v.toFixed(11));\n\t\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n\t}\n\n\tfunction general_fmt_num_base(v) {\n\t\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\t\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\t\telse if(Math.abs(V) <= 9) o = small_exp(v);\n\t\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\t\telse o = large_exp(v);\n\n\t\treturn strip_decimal(normalize_exp(o.toUpperCase()));\n\t}\n\n\treturn general_fmt_num_base;\n})();\nSSF._general_num = general_fmt_num;\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction general_fmt(v, opts) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : general_fmt_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\nSSF._general = general_fmt;\nfunction fix_hijri(date, o) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\nvar THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n/*jshint -W086 */\nfunction write_date(type, fmt, val, ss0) {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\nif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 == 0 ? Math.round(val.S+val.u) : val.S); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n/*jshint +W086 */\nfunction commaify(s) {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar write_num = (function make_write_num(){\nvar pct1 = /%/g;\nfunction write_num_pct(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_cm(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_exp(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r, aval, sign) {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r, aval, sign) {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str) {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val, d) { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val, d) {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val, d) {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val) {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_flt(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(r[4].length,7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", r[1], ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + r[2] + \"/\" + r[3];\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = pad0r(val, 0);\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0?]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\tri = dec(val, r[1].length);\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(ri,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,##0.00\": return write_num_flt(type, \"#,##0.00\", val);\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(pad0r(aval,0)); return x !== \"0\" ? sign + x : \"\";\n\t\tcase \"###,###.00\": return write_num_flt(type, \"###,##0.00\",val).replace(/^0\\./,\".\");\n\t\tcase \"#,###.00\": return write_num_flt(type, \"#,##0.00\",val).replace(/^0\\./,\".\");\n\t\tdefault:\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nfunction write_num_cm2(type, fmt, val){\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_pct2(type, fmt, val){\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_exp2(fmt, val){\n\tvar o;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp2(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(!o.match(/[Ee]/)) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nfunction write_num_int(type, fmt, val) {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\no = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\nreturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri<o.length?o.charAt(ri++):x==='0'?'0':\"\";}));\n\t}\n\tif(fmt.match(phone)) {\n\t\to = write_num_int(type, \"##########\", val);\n\t\treturn \"(\" + o.substr(0,3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n\t}\n\tvar oa = \"\";\n\tif((r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(r[4].length,7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, false);\n\t\to = \"\" + sign;\n\t\toa = write_num(\"n\", r[1], ff[1]);\n\t\tif(oa.charAt(oa.length-1) == \" \") oa = oa.substr(0,oa.length-1) + \"0\";\n\t\to += oa + r[2] + \"/\" + r[3];\n\t\toa = rpad_(ff[2],ri);\n\t\tif(oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length-oa.length)) + oa;\n\t\to += oa;\n\t\treturn o;\n\t}\n\tif((r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/))) {\n\t\tri = Math.min(Math.max(r[1].length, r[4].length),7);\n\t\tff = frac(aval, Math.pow(10,ri)-1, true);\n\t\treturn sign + (ff[0]||(ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1],ri) + r[2] + \"/\" + r[3] + rpad_(ff[2],ri): fill(\" \", 2*ri+1 + r[2].length + r[3].length));\n\t}\n\tif((r = fmt.match(/^[#0?]+$/))) {\n\t\to = \"\" + val;\n\t\tif(fmt.length <= o.length) return o;\n\t\treturn hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(/^([#0]+)\\.([#0]+)$/))) {\n\t\to = \"\" + val.toFixed(Math.min(r[2].length,10)).replace(/([^0])0+$/,\"$1\");\n\t\tri = o.indexOf(\".\");\n\t\tvar lres = fmt.indexOf(\".\") - ri, rres = fmt.length - o.length - lres;\n\t\treturn hashq(fmt.substr(0,lres) + o + fmt.substr(fmt.length-rres));\n\t}\n\tif((r = fmt.match(/^00,000\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\"+val).replace(/^\\d,\\d{3}$/,\"0$&\").replace(/^\\d*$/,function($$) { return \"00,\" + ($$.length < 3 ? pad0(0,3-$$.length) : \"\") + $$; }) + \".\" + pad0(0,r[1].length);\n\t}\n\tswitch(fmt) {\n\t\tcase \"###,###\":\n\t\tcase \"##,###\":\n\t\tcase \"#,###\": var x = commaify(\"\"+aval); return x !== \"0\" ? sign + x : \"\";\n\t\tdefault:\n\t\t\tif(fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n\t}\n\tthrow new Error(\"unsupported format |\" + fmt + \"|\");\n}\nreturn function write_num(type, fmt, val) {\n\treturn (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n};})();\nfunction split_fmt(fmt) {\n\tvar out = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\nSSF._split = split_fmt;\nvar abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt) {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\nSSF.is_date = fmt_is_date;\nfunction eval_fmt(fmt, v, opts, flen) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(abstime)) {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) { ss0=Math.max(ss0,ssm[0].length-1); bt = 4;}\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'e': lst=out[i].t; break;\n\t\t\tcase 'M': lst=out[i].t; if(bt < 2) bt = 2; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tvar _dt;\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tswitch(ss0) {\n\t\t\t\tcase 1: dt.u = Math.round(dt.u * 10)/10; break;\n\t\t\t\tcase 2: dt.u = Math.round(dt.u * 100)/100; break;\n\t\t\t\tcase 3: dt.u = Math.round(dt.u * 1000)/1000; break;\n\t\t\t}\n\t\t\tif(dt.u >= 1) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\nout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t}\n\t\telse if(decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tjj = ostr.indexOf(\".\")-1;\n\t\t\tfor(i=decpt; i>= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti<out.length) out[lasti].v = ostr.substr(0,jj+1) + out[lasti].v;\n\t\t\tjj = ostr.indexOf(\".\")+1;\n\t\t\tfor(i=decpt; i<out.length; ++i) {\n\t\t\t\tif(out[i] == null || ('n?('.indexOf(out[i].t) === -1 && i !== decpt)) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j<out[i].v.length; ++j) {\n\t\t\t\t\tif(jj<ostr.length) vv += ostr.charAt(jj++);\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t}\n\t}\n\tfor(i=0; i<out.length; ++i) if(out[i] != null && 'n?'.indexOf(out[i].t)>-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\nSSF._eval = eval_fmt;\nvar cfregex = /\\[[=<>]/;\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f, v) {\n\tvar fmt = split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction format(fmt,v,o) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[default_map[fmt]]) || table_fmt[default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(isgeneral(sfmt,0)) return general_fmt(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(isgeneral(f[1])) return general_fmt(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction load_entry(fmt, idx) {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\nfor(var i = 0; i < 0x0188; ++i) {\nif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\nif(idx < 0) idx = 0x187;\n\t}\ntable_fmt[idx] = fmt;\n\treturn idx;\n}\nSSF.load = load_entry;\nSSF._table = table_fmt;\nSSF.get_table = function get_table() { return table_fmt; };\nSSF.load_table = function load_table(tbl) {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\nSSF.format = format;\nSSF.choose_format = choose_fmt;\n}\nmake_ssf(SSF);\n/*global module */\nif(typeof module !== 'undefined' && typeof DO_NOT_EXPORT_SSF === 'undefined') module.exports = SSF;\n","import SSF from 'ssf';\r\nimport { type NumberFormatValue } from '../types';\r\nimport { DEFAULT_FORMAT_CODE } from '../util';\r\n\r\ntype FormatOptions = {\r\n dateNF?: string;\r\n date1904?: boolean;\r\n};\r\n\r\nexport function numberFormat(\r\n value: NumberFormatValue,\r\n pattern?: string,\r\n options: FormatOptions = {},\r\n) {\r\n return SSF.format(pattern || DEFAULT_FORMAT_CODE, value, options);\r\n}\r\n\r\nexport function isDateFormat(format?: string) {\r\n if (!format) {\r\n return false;\r\n }\r\n return SSF.is_date(format);\r\n}\r\n\r\nexport function convertDateToNumber(v: Date, date1904?: boolean): number {\r\n const baseDate = new Date(1899, 11, 31, 0, 0, 0);\r\n const baseDateTime = baseDate.getTime();\r\n const base1904 = new Date(1900, 2, 1, 0, 0, 0);\r\n let epoch = v.getTime();\r\n if (date1904) {\r\n epoch -= 1461 * 24 * 60 * 60 * 1000;\r\n } else if (v >= base1904) {\r\n epoch += 24 * 60 * 60 * 1000;\r\n }\r\n const result =\r\n (epoch -\r\n (baseDateTime +\r\n (v.getTimezoneOffset() - baseDate.getTimezoneOffset()) * 60000)) /\r\n (24 * 60 * 60 * 1000);\r\n return result\r\n}\r\n","import { ResultType } from '../../types';\r\nimport { MAX_PARAMS_COUNT } from '../../util';\r\nimport { assert, mustOneString, mustOneNumber, mustOne } from './error';\r\nimport { numberFormat } from '../numberFormat'\r\n\r\nexport const T = (...list: ResultType[]): string => {\r\n const value = mustOne(list);\r\n return typeof value === 'string' ? value : '';\r\n};\r\n\r\nexport const LOWER = (...list: ResultType[]): string => {\r\n const value = mustOneString(list);\r\n return value.toLowerCase();\r\n};\r\nexport const CHAR = (...list: ResultType[]): string => {\r\n const value = mustOneNumber(list);\r\n return String.fromCharCode(value);\r\n};\r\nexport const CODE = (...list: ResultType[]): number => {\r\n const value = mustOneString(list);\r\n return value.charCodeAt(0);\r\n};\r\nexport const LEN = (...list: ResultType[]): number => {\r\n const value = mustOneString(list);\r\n return value.length;\r\n};\r\n\r\nexport const SPLIT = (...list: ResultType[]): string[] => {\r\n assert(list.length === 2);\r\n const [value, sep] = list;\r\n assert(typeof value === 'string');\r\n assert(typeof sep === 'string');\r\n return value.split(sep);\r\n};\r\nexport const UPPER = (...list: ResultType[]): string => {\r\n const value = mustOneString(list);\r\n return value.toUpperCase();\r\n};\r\nexport const TEXT = (...list: ResultType[]): string => {\r\n assert(list.length === 2);\r\n const [value, format] = list;\r\n assert(typeof value === 'string' || typeof value === 'number');\r\n assert(typeof format === 'string');\r\n return numberFormat(value, format)\r\n};\r\nexport const TRIM = (...list: ResultType[]): string => {\r\n const value = mustOneString(list);\r\n return value.replace(/ +/g, ' ').trim();\r\n};\r\nexport const CONCAT = (...list: ResultType[]): string => {\r\n assert(list.length <= MAX_PARAMS_COUNT);\r\n return list.join('');\r\n};\r\n\r\nconst formulas = {\r\n CONCAT,\r\n CONCATENATE: CONCAT,\r\n SPLIT,\r\n CHAR,\r\n CODE,\r\n UNICHAR: CHAR,\r\n UNICODE: CODE,\r\n LEN,\r\n LOWER,\r\n UPPER,\r\n TRIM,\r\n TEXT,\r\n T,\r\n};\r\n\r\nexport default formulas;\r\n","import { MAX_PARAMS_COUNT, parseNumber } from '../../util';\r\nimport { ResultType } from '../../types';\r\nimport { assert, mustOneNumber, mustEmpty } from './error';\r\n\r\nfunction parseNumberArray(list: ResultType[]): number[] {\r\n const result: number[] = [];\r\n for (let i = 0; i < list.length; i++) {\r\n const [check, num] = parseNumber(list[i]);\r\n if (check) {\r\n result.push(num);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport const ABS = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.abs(data);\r\n};\r\nexport const ACOS = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.acos(data);\r\n};\r\n\r\nexport const ACOSH = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.log(data + Math.sqrt(data * data - 1));\r\n};\r\n\r\nexport const ACOT = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.atan(1 / data);\r\n};\r\n\r\nexport const ACOTH = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return 0.5 * Math.log((data + 1) / (data - 1));\r\n};\r\nexport const ASIN = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.asin(data);\r\n};\r\n\r\nexport const ASINH = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.log(data + Math.sqrt(data * data + 1));\r\n};\r\nexport const ATAN = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.atan(data);\r\n};\r\nexport const ATAN2 = (...list: ResultType[]): number => {\r\n assert(list.length === 2);\r\n const [x, y] = list;\r\n assert(typeof x === 'number');\r\n assert(typeof y === 'number');\r\n return Math.atan2(x, y);\r\n};\r\nexport const ATANH = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.log((1 + data) / (data + 1)) / 2;\r\n};\r\n\r\nexport const AVERAGE = (...rest: ResultType[]): number => {\r\n const list = parseNumberArray(rest);\r\n assert(list.length <= MAX_PARAMS_COUNT && list.length >= 1);\r\n return list.reduce((sum, cur) => sum + cur, 0) / list.length;\r\n};\r\n\r\nexport const COS = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.cos(data);\r\n};\r\nexport const COT = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return 1 / Math.tan(data);\r\n};\r\nexport const CSC = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return 1 / Math.sin(data);\r\n};\r\nexport const DECIMAL = (...list: ResultType[]): number => {\r\n assert(list.length === 2);\r\n const [data, radix] = list;\r\n assert(typeof data === 'string');\r\n assert(typeof radix === 'number');\r\n return parseInt(data, radix);\r\n};\r\nexport const DEGREES = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return (data * 180) / Math.PI;\r\n};\r\nexport const EXP = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.exp(data);\r\n};\r\nexport const INT = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.floor(data);\r\n};\r\nexport const LN10 = (...list: ResultType[]): number => {\r\n mustEmpty(list);\r\n return Math.log(10);\r\n};\r\nexport const LN2 = (...list: ResultType[]): number => {\r\n mustEmpty(list);\r\n return Math.log(2);\r\n};\r\nexport const LOG10E = (...list: ResultType[]): number => {\r\n mustEmpty(list);\r\n return Math.LOG10E;\r\n};\r\nexport const LOG2E = (...list: ResultType[]): number => {\r\n mustEmpty(list);\r\n return Math.LOG2E;\r\n};\r\nexport const LOG = (...list: ResultType[]): number => {\r\n assert(list.length >= 1 && list.length <= 2);\r\n const [data, base = 10] = list;\r\n assert(typeof data === 'number');\r\n assert(typeof base === 'number');\r\n return Math.log(data) / Math.log(base);\r\n};\r\n\r\nexport const LOG10 = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.log(data) / Math.log(10);\r\n};\r\nexport const PI = (...list: ResultType[]): number => {\r\n mustEmpty(list);\r\n return Math.PI;\r\n};\r\nexport const SIN = (...list: ResultType[]): number => {\r\n const data = mustOneNumber(list);\r\n return Math.sin(data);\r\n};\r\nexport const SUM = (...rest: ResultType[]): number => {\r\n const list = parseNumberArray(rest);\r\n assert(list.length <= MAX_PARAMS_COUNT);\r\n return list.reduce((sum, cur) => sum + cur, 0);\r\n};\r\n\r\nconst formulas = {\r\n ABS,\r\n ACOS,\r\n ACOSH,\r\n ACOT,\r\n ACOTH,\r\n ASIN,\r\n ASINH,\r\n ATAN,\r\n ATAN2,\r\n ATANH,\r\n AVERAGE,\r\n COT,\r\n COS,\r\n EXP,\r\n INT,\r\n PI,\r\n SIN,\r\n SUM,\r\n};\r\n\r\nexport default formulas;\r\n","import { FORMULA_MAX_PRECISION } from '../../util';\r\n\r\nexport function roundNumber(a: number) {\r\n const temp = String(a);\r\n const result = /[.](\\d*)/.exec(temp);\r\n if (result && result[1]) {\r\n const f = Math.pow(10, Math.min(result[1].length, FORMULA_MAX_PRECISION));\r\n const list = temp.split('.');\r\n const t = list[0] + list[1].slice(0, FORMULA_MAX_PRECISION);\r\n return Number(t) / f;\r\n } else {\r\n return a;\r\n }\r\n}\r\n","import textFormulas from './text';\r\nimport mathFormulas from './math';\r\nimport { BuiltInFormulas } from '../../util';\r\n\r\ntype MergeType<T, A> = {\r\n [K in keyof T | keyof A as K extends BuiltInFormulas\r\n ? K\r\n : never]: K extends keyof T ? T[K] : K extends keyof A ? A[K] : never;\r\n};\r\n\r\nexport type FormulaMap = MergeType<typeof textFormulas, typeof mathFormulas>;\r\n\r\nexport type FormulaKeys = keyof FormulaMap;\r\n\r\nconst allFormulas: FormulaMap = {\r\n ...textFormulas,\r\n ...mathFormulas,\r\n};\r\nexport * from './error';\r\nexport default allFormulas;\r\nexport * from './float';\r\n","import { Token } from './token';\r\nimport { CustomError } from './formula';\r\nimport {\r\n FORMULA_PREFIX,\r\n ERROR_SET,\r\n BUILT_IN_FUNCTION_SET,\r\n CELL_REG_EXP,\r\n COLUMN_REG_EXP,\r\n DEFINED_NAME_REG_EXP,\r\n type BuiltInFormulas,\r\n ROW_REG_EXP,\r\n type ErrorTypes,\r\n isDigit,\r\n isAlpha,\r\n} from '../util';\r\nimport { TokenType } from '../types';\r\n\r\nconst emptyData = '';\r\n\r\nexport class Scanner {\r\n private readonly list: string[];\r\n private current = 0;\r\n private start = 0;\r\n private readonly tokens: Token[] = [];\r\n constructor(source: string) {\r\n this.list = [...source];\r\n }\r\n scan(): Token[] {\r\n while (!this.isAtEnd()) {\r\n this.start = this.current;\r\n this.scanToken();\r\n }\r\n this.tokens.push(new Token(TokenType.EOF, ''));\r\n if (this.tokens.length > 0 && this.tokens[0].type === TokenType.EQUAL) {\r\n this.tokens.shift();\r\n }\r\n return this.tokens;\r\n }\r\n private peek() {\r\n if (this.isAtEnd()) {\r\n return emptyData;\r\n }\r\n return this.list[this.current];\r\n }\r\n private match(text: string) {\r\n if (this.peek() !== text) {\r\n return false;\r\n }\r\n this.next();\r\n return true;\r\n }\r\n private next() {\r\n if (this.isAtEnd()) {\r\n return emptyData;\r\n }\r\n return this.list[this.current++];\r\n }\r\n private isAtEnd() {\r\n return this.current >= this.list.length;\r\n }\r\n private addToken(type: TokenType) {\r\n const text = this.list.slice(this.start, this.current).join('');\r\n this.tokens.push(new Token(type, text));\r\n }\r\n private string(end: string) {\r\n while (!this.isAtEnd() && this.peek() !== end) {\r\n this.next();\r\n }\r\n if (this.peek() !== end) {\r\n throw new CustomError('#VALUE!');\r\n } else {\r\n this.next();\r\n }\r\n const text = this.list.slice(this.start + 1, this.current - 1).join('');\r\n if (end === \"'\" && this.match('!')) {\r\n this.tokens.push(new Token(TokenType.SHEET_NAME, text));\r\n return;\r\n }\r\n this.tokens.push(new Token(TokenType.STRING, text));\r\n }\r\n private getDigits() {\r\n while (!this.isAtEnd() && isDigit(this.peek())) {\r\n this.next();\r\n }\r\n }\r\n private getAlphas() {\r\n while (!this.isAtEnd() && isAlpha(this.peek())) {\r\n this.next();\r\n }\r\n }\r\n private matchR1C1() {\r\n if (this.match('[')) {\r\n this.match('-');\r\n if (isDigit(this.peek())) {\r\n this.getDigits();\r\n } else {\r\n throw new CustomError('#VALUE!');\r\n }\r\n if (this.peek() !== ']') {\r\n throw new CustomError('#VALUE!');\r\n } else {\r\n this.next();\r\n }\r\n } else {\r\n this.getDigits();\r\n }\r\n }\r\n private matchScientificCounting() {\r\n if (this.match('E') || this.match('e')) {\r\n // 1E-10 1E+10\r\n if (this.match('+') || this.match('-')) {\r\n this.getDigits();\r\n this.addToken(TokenType.NUMBER);\r\n return true;\r\n }\r\n if (isDigit(this.peek())) {\r\n this.getDigits();\r\n this.addToken(TokenType.NUMBER);\r\n return true;\r\n }\r\n // 1E or 1.1E not valid\r\n throw new CustomError('#VALUE!');\r\n }\r\n return false;\r\n }\r\n private number() {\r\n this.getDigits();\r\n const check1 = this.matchScientificCounting();\r\n if (check1) {\r\n return;\r\n }\r\n if (this.match('.')) {\r\n this.getDigits();\r\n }\r\n const check2 = this.matchScientificCounting();\r\n if (check2) {\r\n return;\r\n }\r\n this.addToken(TokenType.NUMBER);\r\n }\r\n private addIdentifier() {\r\n while (!this.isAtEnd() && this.anyChar(this.peek())) {\r\n this.next();\r\n }\r\n let text = this.list.slice(this.start, this.current).join('');\r\n const t = text.toUpperCase();\r\n if (BUILT_IN_FUNCTION_SET.has(t as BuiltInFormulas) && this.match('(')) {\r\n this.tokens.push(new Token(TokenType.EXCEL_FUNCTION, t));\r\n return;\r\n }\r\n if (['IF', 'CHOOSE'].includes(t) && this.match('(')) {\r\n this.tokens.push(new Token(TokenType.REF_FUNCTION_COND, t));\r\n return;\r\n }\r\n if (['INDEX', 'OFFSET', 'INDIRECT'].includes(t) && this.match('(')) {\r\n this.tokens.push(new Token(TokenType.REF_FUNCTION, t));\r\n return;\r\n }\r\n if (this.match('!')) {\r\n this.tokens.push(new Token(TokenType.SHEET_NAME, text));\r\n return;\r\n }\r\n let type: TokenType = TokenType.BOOL;\r\n if (t === 'TRUE' || t === 'FALSE') {\r\n text = t;\r\n type = TokenType.BOOL;\r\n } else if (ERROR_SET.has(t as ErrorTypes)) {\r\n text = t;\r\n type = t === '#REF!' ? TokenType.ERROR_REF : TokenType.ERROR;\r\n } else if (CELL_REG_EXP.test(t)) {\r\n type = TokenType.CELL;\r\n } else if (COLUMN_REG_EXP.test(t)) {\r\n type = TokenType.COLUMN;\r\n } else if (ROW_REG_EXP.test(t)) {\r\n type = TokenType.ROW;\r\n } else if (DEFINED_NAME_REG_EXP.test(t)) {\r\n type = TokenType.DEFINED_NAME;\r\n } else {\r\n throw new CustomError('#NAME?');\r\n }\r\n\r\n this.tokens.push(new Token(type, text));\r\n }\r\n private scanToken() {\r\n const c = this.next();\r\n switch (c) {\r\n case '$': {\r\n if (isAlpha(this.peek())) {\r\n this.getAlphas();\r\n if (this.match('$')) {\r\n if (isDigit(this.peek())) {\r\n // $A$1 absolute reference\r\n this.getDigits();\r\n this.addToken(TokenType.CELL);\r\n } else {\r\n this.addIdentifier();\r\n }\r\n } else if (isDigit(this.peek())) {\r\n // $A1 mixed reference\r\n this.getDigits();\r\n this.addToken(TokenType.CELL);\r\n } else {\r\n // $A\r\n this.addToken(TokenType.COLUMN);\r\n }\r\n } else if (isDigit(this.peek())) {\r\n // $1 absolute reference\r\n this.getDigits();\r\n this.addToken(TokenType.ROW);\r\n } else {\r\n this.addIdentifier();\r\n }\r\n break;\r\n }\r\n case 'r':\r\n case 'R': {\r\n this.matchR1C1();\r\n if (this.match('C') || this.match('c')) {\r\n this.matchR1C1();\r\n const text = this.list\r\n .slice(this.start, this.current)\r\n .join('')\r\n .toUpperCase();\r\n this.tokens.push(new Token(TokenType.R1C1, text));\r\n } else {\r\n this.addIdentifier();\r\n }\r\n break;\r\n }\r\n case '(':\r\n this.addToken(TokenType.LEFT_BRACKET);\r\n break;\r\n case ')':\r\n this.addToken(TokenType.RIGHT_BRACKET);\r\n break;\r\n case ',':\r\n this.addToken(TokenType.COMMA);\r\n break;\r\n case ':':\r\n this.addToken(TokenType.COLON);\r\n break;\r\n case FORMULA_PREFIX:\r\n this.addToken(TokenType.EQUAL);\r\n break;\r\n case '<':\r\n if (this.match('>')) {\r\n this.addToken(TokenType.NOT_EQUAL);\r\n } else if (this.match('=')) {\r\n this.addToken(TokenType.LESS_EQUAL);\r\n } else {\r\n this.addToken(TokenType.LESS);\r\n }\r\n break;\r\n case '>':\r\n if (this.match('=')) {\r\n this.addToken(TokenType.GREATER_EQUAL);\r\n } else {\r\n this.addToken(TokenType.GREATER);\r\n }\r\n break;\r\n case '+':\r\n this.addToken(TokenType.PLUS);\r\n break;\r\n case '-':\r\n this.addToken(TokenType.MINUS);\r\n break;\r\n case '*':\r\n this.addToken(TokenType.STAR);\r\n break;\r\n case '/':\r\n this.addToken(TokenType.SLASH);\r\n break;\r\n case '^':\r\n this.addToken(TokenType.EXPONENT);\r\n break;\r\n case '&':\r\n this.addToken(TokenType.CONCATENATE);\r\n break;\r\n case '%':\r\n this.addToken(TokenType.PERCENT);\r\n break;\r\n case '\"':\r\n this.string(c);\r\n break;\r\n case \"'\":\r\n this.string(c);\r\n break;\r\n case '!':\r\n this.addToken(TokenType.EXCLAMATION);\r\n break;\r\n case ';':\r\n this.addToken(TokenType.SEMICOLON);\r\n break;\r\n case '{':\r\n this.addToken(TokenType.lEFT_BRACE);\r\n break;\r\n case '}':\r\n this.addToken(TokenType.RIGHT_BRACE);\r\n break;\r\n case ' ':\r\n // while (!this.isAtEnd() && this.peek() === ' ') {\r\n // this.next();\r\n // }\r\n // this.addToken(TokenType.EMPTY_CHAR);\r\n break;\r\n case '\\r':\r\n case '\\t':\r\n case '\\n':\r\n break;\r\n default:\r\n if (isDigit(c)) {\r\n this.number();\r\n } else {\r\n this.addIdentifier();\r\n }\r\n break;\r\n }\r\n }\r\n private anyChar(c: string) {\r\n const text = '(),:=<>+-*/^&%\"{}!';\r\n return !text.includes(c) && !this.isWhiteSpace(c);\r\n }\r\n private isWhiteSpace(c: string) {\r\n return c === ' ' || c === '\\r' || c === '\\n' || c === '\\t';\r\n }\r\n}\r\n","import type { Token } from './token';\r\nimport { TokenType } from '../types';\r\n\r\nexport interface Visitor {\r\n visitBinaryExpression: (expr: BinaryExpression) => any;\r\n visitUnaryExpression: (expr: UnaryExpression) => any;\r\n visitPostUnaryExpression: (expr: PostUnaryExpression) => any;\r\n visitLiteralExpression: (expr: LiteralExpression) => any;\r\n visitCellExpression: (expr: CellExpression) => any;\r\n visitCellRangeExpression: (expr: CellRangeExpression) => any;\r\n visitCallExpression: (expr: CallExpression) => any;\r\n visitGroupExpression: (expr: GroupExpression) => any;\r\n visitArrayExpression: (expr: ArrayExpression) => any;\r\n}\r\n\r\nexport interface Expression {\r\n accept: (visitor: Visitor) => any;\r\n toString: () => string;\r\n}\r\n\r\nexport class BinaryExpression implements Expression {\r\n readonly left: Expression;\r\n readonly right: Expression;\r\n readonly operator: Token;\r\n constructor(left: Expression, operator: Token, right: Expression) {\r\n this.left = left;\r\n this.operator = operator;\r\n this.right = right;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitBinaryExpression(this);\r\n }\r\n private handleConcatenate(value: Expression): string {\r\n const result = value.toString();\r\n const check =\r\n this.operator.type === TokenType.CONCATENATE &&\r\n value instanceof LiteralExpression &&\r\n value.value.type === TokenType.STRING;\r\n if (check) {\r\n return JSON.stringify(result);\r\n }\r\n return result;\r\n }\r\n toString(): string {\r\n const left = this.handleConcatenate(this.left);\r\n const right = this.handleConcatenate(this.right);\r\n return `${left}${this.operator.toString()}${right}`;\r\n }\r\n}\r\n\r\nexport class UnaryExpression implements Expression {\r\n readonly right: Expression;\r\n readonly operator: Token;\r\n constructor(operator: Token, right: Expression) {\r\n this.operator = operator;\r\n this.right = right;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitUnaryExpression(this);\r\n }\r\n toString(): string {\r\n return this.operator.toString() + this.right.toString();\r\n }\r\n}\r\n\r\nexport class PostUnaryExpression implements Expression {\r\n readonly left: Expression;\r\n readonly operator: Token;\r\n constructor(operator: Token, left: Expression) {\r\n this.operator = operator;\r\n this.left = left;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitPostUnaryExpression(this);\r\n }\r\n toString(): string {\r\n return this.left.toString() + this.operator.toString();\r\n }\r\n}\r\n\r\nexport class LiteralExpression implements Expression {\r\n readonly value: Token;\r\n constructor(value: Token) {\r\n this.value = value;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitLiteralExpression(this);\r\n }\r\n toString(): string {\r\n return this.value.toString();\r\n }\r\n}\r\n\r\nexport class CellExpression implements Expression {\r\n readonly value: Token;\r\n readonly sheetName: Token | undefined;\r\n constructor(value: Token, sheetName: Token | undefined) {\r\n this.value = value;\r\n this.sheetName = sheetName;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitCellExpression(this);\r\n }\r\n toString(): string {\r\n const t = this.value.toString().toUpperCase();\r\n if (this.sheetName) {\r\n let name = this.sheetName.toString();\r\n if (name.includes(' ')) {\r\n name = `'${name}'`;\r\n }\r\n return `${name}!${t}`;\r\n } else {\r\n return t;\r\n }\r\n }\r\n}\r\n\r\nexport class CallExpression implements Expression {\r\n readonly name: Token;\r\n readonly params: Expression[];\r\n constructor(name: Token, params: Expression[]) {\r\n this.name = name;\r\n this.params = params;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitCallExpression(this);\r\n }\r\n toString(): string {\r\n return `${this.name.toString()}(${this.params\r\n .map((item) => item.toString())\r\n .join(',')})`;\r\n }\r\n}\r\n\r\nexport class CellRangeExpression implements Expression {\r\n readonly right: CellExpression;\r\n readonly operator: Token;\r\n readonly left: CellExpression;\r\n constructor(left: CellExpression, operator: Token, right: CellExpression) {\r\n this.left = left;\r\n this.operator = operator;\r\n this.right = right;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitCellRangeExpression(this);\r\n }\r\n toString(): string {\r\n return (\r\n this.left.toString() + this.operator.toString() + this.right.toString()\r\n );\r\n }\r\n}\r\n\r\nexport class GroupExpression implements Expression {\r\n readonly value: Expression;\r\n constructor(value: Expression) {\r\n this.value = value;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitGroupExpression(this);\r\n }\r\n toString(): string {\r\n return `(${this.value.toString()})`;\r\n }\r\n}\r\n\r\nexport class ArrayExpression implements Expression {\r\n readonly value: Expression[];\r\n constructor(value: Expression[]) {\r\n this.value = value;\r\n }\r\n accept(visitor: Visitor) {\r\n return visitor.visitArrayExpression(this);\r\n }\r\n toString(): string {\r\n const temp = this.value.map((v) => v.toString()).join(',');\r\n return `{${temp}}`;\r\n }\r\n}\r\n","import { Token } from './token';\r\nimport {\r\n Expression,\r\n GroupExpression,\r\n PostUnaryExpression,\r\n BinaryExpression,\r\n UnaryExpression,\r\n CallExpression,\r\n LiteralExpression,\r\n CellRangeExpression,\r\n CellExpression,\r\n ArrayExpression,\r\n} from './expression';\r\nimport { CustomError } from './formula';\r\nimport { type ErrorTypes } from '../util';\r\nimport { TokenType } from '../types';\r\n\r\nexport class Parser {\r\n private readonly tokens: Token[];\r\n private current = 0;\r\n constructor(tokens: Token[]) {\r\n this.tokens = tokens;\r\n }\r\n parse(): Expression[] {\r\n const result: Expression[] = [];\r\n while (!this.isAtEnd()) {\r\n result.push(this.expression());\r\n }\r\n return result;\r\n }\r\n private expression(): Expression {\r\n return this.comparison();\r\n }\r\n private comparison(): Expression {\r\n let expr = this.concatenate();\r\n while (\r\n this.match(\r\n TokenType.EQUAL,\r\n TokenType.NOT_EQUAL,\r\n TokenType.GREATER,\r\n TokenType.GREATER_EQUAL,\r\n TokenType.LESS,\r\n TokenType.LESS_EQUAL,\r\n )\r\n ) {\r\n const operator = this.previous();\r\n const right = this.concatenate();\r\n expr = new BinaryExpression(expr, operator, right);\r\n }\r\n return expr;\r\n }\r\n private concatenate(): Expression {\r\n let expr = this.term();\r\n while (this.match(TokenType.CONCATENATE)) {\r\n const operator = this.previous();\r\n const right = this.term();\r\n expr = new BinaryExpression(expr, operator, right);\r\n }\r\n return expr;\r\n }\r\n private term(): Expression {\r\n let expr = this.factor();\r\n while (this.match(TokenType.PLUS, TokenType.MINUS)) {\r\n const operator = this.previous();\r\n const right = this.factor();\r\n expr = new BinaryExpression(expr, operator, right);\r\n }\r\n return expr;\r\n }\r\n private factor(): Expression {\r\n let expr = this.expo();\r\n while (this.match(TokenType.SLASH, TokenType.STAR)) {\r\n const operator = this.previous();\r\n const right = this.expo();\r\n expr = new BinaryExpression(expr, operator, right);\r\n }\r\n return expr;\r\n }\r\n private expo(): Expression {\r\n let expr = this.unary();\r\n while (this.match(TokenType.EXPONENT)) {\r\n const operator = this.previous();\r\n const right = this.unary();\r\n expr = new BinaryExpression(expr, operator, right);\r\n }\r\n return expr;\r\n }\r\n\r\n private unary(): Expression {\r\n if (this.match(TokenType.PLUS, TokenType.MINUS)) {\r\n const operator = this.previous();\r\n const right = this.unary();\r\n return new UnaryExpression(operator, right);\r\n }\r\n return this.postUnary();\r\n }\r\n private postUnary(): Expression {\r\n let expr = this.cellRange();\r\n if (this.match(TokenType.PERCENT)) {\r\n const operator = this.previous();\r\n expr = new PostUnaryExpression(operator, expr);\r\n }\r\n return expr;\r\n }\r\n private cellRange(): Expression {\r\n let expr = this.sheetRange();\r\n while (this.match(TokenType.COLON)) {\r\n const operator = this.previous();\r\n const right = this.sheetRange();\r\n const realRight = this.convertToCellExpression(right);\r\n const realLeft = this.convertToCellExpression(expr);\r\n expr = new CellRangeExpression(realLeft, operator, realRight);\r\n }\r\n return expr;\r\n }\r\n private convertToCellExpression(expr: Expression): CellExpression {\r\n if (expr instanceof CellExpression) {\r\n return expr;\r\n }\r\n if (\r\n expr instanceof LiteralExpression &&\r\n expr.value.type === TokenType.NUMBER\r\n ) {\r\n return new CellExpression(expr.value, undefined);\r\n }\r\n throw new CustomError('#NAME?');\r\n }\r\n private sheetRange(): Expression {\r\n if (this.match(TokenType.SHEET_NAME)) {\r\n const name = this.previous();\r\n let expr = this.call();\r\n if (expr instanceof CellExpression) {\r\n return new CellExpression(expr.value, name);\r\n }\r\n throw new CustomError('#REF!');\r\n }\r\n return this.call();\r\n }\r\n private call(): Expression {\r\n while (\r\n this.match(\r\n TokenType.EXCEL_FUNCTION,\r\n TokenType.REF_FUNCTION,\r\n TokenType.REF_FUNCTION_COND,\r\n )\r\n ) {\r\n const name = this.previous();\r\n const params: Expression[] = [];\r\n if (!this.check(TokenType.RIGHT_BRACKET)) {\r\n do {\r\n // fix SUM(1,)\r\n if (this.peek().type == TokenType.RIGHT_BRACKET) {\r\n break;\r\n }\r\n params.push(this.expression());\r\n } while (this.match(TokenType.COMMA));\r\n }\r\n this.expect(TokenType.RIGHT_BRACKET);\r\n return new CallExpression(name, params);\r\n }\r\n return this.primary();\r\n }\r\n private primary(): Expression {\r\n if (this.match(TokenType.lEFT_BRACE)) {\r\n const list: Expression[] = [];\r\n do {\r\n if (this.peek().type == TokenType.RIGHT_BRACE) {\r\n break;\r\n }\r\n list.push(this.expression());\r\n } while (this.match(TokenType.COMMA));\r\n this.expect(TokenType.RIGHT_BRACE);\r\n return new ArrayExpression(list);\r\n }\r\n if (this.match(TokenType.LEFT_BRACKET)) {\r\n const value = this.expression();\r\n this.expect(TokenType.RIGHT_BRACKET);\r\n return new GroupExpression(value);\r\n }\r\n if (this.match(TokenType.NUMBER, TokenType.STRING, TokenType.BOOL)) {\r\n return new LiteralExpression(this.previous());\r\n }\r\n if (\r\n this.match(\r\n TokenType.CELL,\r\n TokenType.COLUMN,\r\n TokenType.ROW,\r\n TokenType.DEFINED_NAME,\r\n TokenType.R1C1,\r\n )\r\n ) {\r\n const token = this.previous();\r\n return new CellExpression(token, undefined);\r\n }\r\n if (this.match(TokenType.ERROR, TokenType.ERROR_REF)) {\r\n throw new CustomError(this.previous().value as ErrorTypes);\r\n }\r\n\r\n throw new CustomError('#VALUE!');\r\n }\r\n private match(...types: TokenType[]): boolean {\r\n const { type } = this.peek();\r\n if (types.includes(type)) {\r\n this.next();\r\n return true;\r\n }\r\n return false;\r\n }\r\n private previous(): Token {\r\n return this.tokens[this.current - 1];\r\n }\r\n private check(type: TokenType): boolean {\r\n return this.peek().type === type;\r\n }\r\n private expect(type: TokenType): Token {\r\n if (this.check(type)) {\r\n this.next();\r\n return this.previous();\r\n } else {\r\n throw new CustomError('#VALUE!');\r\n }\r\n }\r\n private next() {\r\n this.current++;\r\n }\r\n private isAtEnd() {\r\n return this.peek().type === TokenType.EOF;\r\n }\r\n private peek(): Token {\r\n if (this.current < this.tokens.length) {\r\n return this.tokens[this.current];\r\n }\r\n return new Token(TokenType.EOF, '');\r\n }\r\n}\r\n","import {\r\n SheetRange,\r\n iterateRange,\r\n mergeRange,\r\n parseReference,\r\n parseR1C1,\r\n parseNumber,\r\n} from '../util';\r\nimport { TokenType } from '../types';\r\n\r\nimport type { CellDataMap, ResultType, IRange } from '../types';\r\nimport type {\r\n Visitor,\r\n Expression,\r\n CellRangeExpression,\r\n PostUnaryExpression,\r\n} from './expression';\r\nimport {\r\n BinaryExpression,\r\n UnaryExpression,\r\n CellExpression,\r\n CallExpression,\r\n LiteralExpression,\r\n GroupExpression,\r\n ArrayExpression,\r\n} from './expression';\r\nimport { CustomError } from './formula';\r\n\r\nexport class Interpreter implements Visitor {\r\n private readonly expressions: Expression[];\r\n private readonly cellDataMap: CellDataMap;\r\n private currentCoord: Pick<IRange, 'sheetId' | 'row' | 'col'>;\r\n constructor(\r\n expressions: Expression[],\r\n currentCoord: Pick<IRange, 'sheetId' | 'row' | 'col'>,\r\n cellDataMap: CellDataMap,\r\n ) {\r\n this.expressions = expressions;\r\n this.cellDataMap = cellDataMap;\r\n this.currentCoord = currentCoord;\r\n }\r\n interpret(): ResultType[] {\r\n let result: ResultType[] = [];\r\n for (const item of this.expressions) {\r\n const temp = this.evaluate(item);\r\n const r = this.getRangeCellValue(temp);\r\n if (Array.isArray(r)) {\r\n result = result.concat(r);\r\n } else {\r\n result.push(r);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n visitBinaryExpression(data: BinaryExpression): any {\r\n let left = this.evaluate(data.left);\r\n let right = this.evaluate(data.right);\r\n left = this.getOneValue(left);\r\n right = this.getOneValue(right);\r\n if (\r\n [\r\n TokenType.MINUS,\r\n TokenType.PLUS,\r\n TokenType.SLASH,\r\n TokenType.STAR,\r\n TokenType.EXPONENT,\r\n ].includes(data.operator.type)\r\n ) {\r\n left = this.parseNumber(left);\r\n right = this.parseNumber(right);\r\n }\r\n\r\n switch (data.operator.type) {\r\n case TokenType.MINUS:\r\n return left - right;\r\n case TokenType.PLUS:\r\n return left + right;\r\n case TokenType.SLASH: {\r\n if (right === 0) {\r\n throw new CustomError('#DIV/0!');\r\n }\r\n return left / right;\r\n }\r\n case TokenType.STAR:\r\n return left * right;\r\n case TokenType.EXPONENT:\r\n return Math.pow(left, right);\r\n case TokenType.EQUAL:\r\n return left === right;\r\n case TokenType.NOT_EQUAL:\r\n return left !== right;\r\n case TokenType.GREATER:\r\n return left > right;\r\n case TokenType.GREATER_EQUAL:\r\n return left >= right;\r\n case TokenType.LESS:\r\n return left < right;\r\n case TokenType.LESS_EQUAL:\r\n return left <= right;\r\n case TokenType.CONCATENATE:\r\n return `${left}${right}`;\r\n default:\r\n throw new CustomError('#TEXT');\r\n }\r\n }\r\n visitCallExpression(expr: CallExpression) {\r\n const callee = this.cellDataMap.getFunction(expr.name.value);\r\n if (callee && typeof callee === 'function') {\r\n let params: ResultType[] = [];\r\n for (const item of expr.params) {\r\n const t = this.evaluate(item);\r\n if (t instanceof SheetRange) {\r\n const list = this.getCellValue(t, false);\r\n params = params.concat(list);\r\n } else {\r\n params.push(t);\r\n }\r\n }\r\n return callee(...params);\r\n }\r\n throw new CustomError('#NAME?');\r\n }\r\n visitCellExpression(data: CellExpression) {\r\n let sheetId = '';\r\n if (data.sheetName) {\r\n const sheetInfo = this.cellDataMap.getSheetInfo('', data.sheetName.value);\r\n if (!sheetInfo?.sheetId) {\r\n throw new CustomError('#REF!');\r\n }\r\n sheetId = sheetInfo.sheetId;\r\n }\r\n let range: IRange | undefined = undefined;\r\n if (\r\n [\r\n TokenType.DEFINED_NAME,\r\n TokenType.CELL,\r\n TokenType.COLUMN,\r\n TokenType.R1C1,\r\n ].includes(data.value.type)\r\n ) {\r\n range = this.cellDataMap.getDefinedName(data.value.value);\r\n }\r\n if (!range) {\r\n if (data.value.type === TokenType.R1C1) {\r\n range = parseR1C1(data.value.value, this.currentCoord);\r\n } else {\r\n range = parseReference(data.value.value);\r\n }\r\n }\r\n if (!range) {\r\n throw new CustomError('#REF!');\r\n }\r\n if (sheetId) {\r\n range.sheetId = sheetId;\r\n }\r\n return range;\r\n }\r\n visitLiteralExpression(expr: LiteralExpression) {\r\n const { type, value } = expr.value;\r\n switch (type) {\r\n case TokenType.STRING:\r\n return value;\r\n case TokenType.NUMBER: {\r\n const [check, num] = parseNumber(value);\r\n if (check) {\r\n return num;\r\n }\r\n throw new CustomError('#VALUE!');\r\n }\r\n case TokenType.BOOL:\r\n return value === 'TRUE';\r\n default:\r\n throw new CustomError('#VALUE!');\r\n }\r\n }\r\n visitUnaryExpression(data: UnaryExpression): any {\r\n const value = this.evaluate(data.right);\r\n const result = this.parseNumber(this.getOneValue(value));\r\n switch (data.operator.type) {\r\n case TokenType.MINUS:\r\n return -result;\r\n case TokenType.PLUS:\r\n return result;\r\n default:\r\n throw new CustomError('#VALUE!');\r\n }\r\n }\r\n\r\n visitCellRangeExpression(expr: CellRangeExpression): any {\r\n switch (expr.operator.type) {\r\n case TokenType.COLON: {\r\n const a = this.visitCellExpression(expr.left);\r\n const b = this.visitCellExpression(expr.right);\r\n const result = mergeRange(a, b);\r\n if (!result) {\r\n throw new CustomError('#NAME?');\r\n }\r\n return result;\r\n }\r\n default:\r\n throw new CustomError('#NAME?');\r\n }\r\n }\r\n visitGroupExpression(expr: GroupExpression): any {\r\n return this.evaluate(expr.value);\r\n }\r\n visitArrayExpression(expr: ArrayExpression) {\r\n const result: ResultType[] = [];\r\n for (const item of expr.value) {\r\n result.push(this.evaluate(item));\r\n }\r\n return result;\r\n }\r\n visitPostUnaryExpression(expr: PostUnaryExpression): any {\r\n const value = this.evaluate(expr.left);\r\n const result = this.parseNumber(this.getOneValue(value));\r\n switch (expr.operator.type) {\r\n case TokenType.PERCENT:\r\n return result * 0.01;\r\n default:\r\n throw new CustomError('#VALUE!');\r\n }\r\n }\r\n private evaluate(expr: Expression) {\r\n return expr.accept(this);\r\n }\r\n private getRangeCellValue(value: any) {\r\n if (value instanceof SheetRange) {\r\n if (value.colCount === value.rowCount && value.colCount === 1) {\r\n return this.getCellValue(value, true);\r\n }\r\n throw new CustomError('#REF!');\r\n }\r\n return value;\r\n }\r\n\r\n private getOneValue(value: any) {\r\n const result = this.getRangeCellValue(value);\r\n if (Array.isArray(result)) {\r\n return result[0];\r\n } else {\r\n return result;\r\n }\r\n }\r\n private parseNumber(value: any) {\r\n const [check, result] = parseNumber(value);\r\n if (!check) {\r\n throw new CustomError('#VALUE!');\r\n }\r\n return result;\r\n }\r\n\r\n private getCellValue(range: IRange, isOneCell: boolean): ResultType[] {\r\n let result: ResultType[] = [];\r\n if (isOneCell) {\r\n const t = this.cellDataMap.getCell(range);\r\n const r = this.cellDataMap.handleCell(t, {\r\n row: range.row,\r\n col: range.col,\r\n sheetId: range.sheetId,\r\n });\r\n result = result.concat(r);\r\n return result;\r\n }\r\n const { row, col, sheetId } = range;\r\n const sheetInfo = this.cellDataMap.getSheetInfo(sheetId);\r\n if (!sheetInfo || row >= sheetInfo.rowCount || col >= sheetInfo.colCount) {\r\n throw new CustomError('#REF!');\r\n }\r\n iterateRange(range, sheetInfo.rowCount, sheetInfo.colCount, (r, c) => {\r\n const t = this.cellDataMap.getCell({\r\n row: r,\r\n col: c,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId,\r\n });\r\n const a = this.cellDataMap.handleCell(t, { row: r, col: c, sheetId });\r\n result = result.concat(a);\r\n return false;\r\n });\r\n return result;\r\n }\r\n}\r\n","import { Scanner } from './scanner';\r\nimport { Parser } from './parser';\r\nimport allFormulas, {\r\n CustomError,\r\n roundNumber,\r\n type FormulaKeys,\r\n} from './formula';\r\nimport { Interpreter } from './interpreter';\r\nimport type {\r\n CellDataMap,\r\n InterpreterResult,\r\n IRange,\r\n ResultType,\r\n Coordinate,\r\n WorksheetType,\r\n ModelCellType,\r\n RequestFormulas,\r\n ResponseFormulas,\r\n} from '../types';\r\nimport { isFormula, getWorksheetKey, convertWorksheetKey } from '../util';\r\nimport { SheetRange } from '../util';\r\n\r\nexport function parseFormula(\r\n formula: string,\r\n currentCoord: Pick<IRange, 'sheetId' | 'row' | 'col'> = {\r\n row: 0,\r\n col: 0,\r\n sheetId: '',\r\n },\r\n cellData: CellDataMap = new CellDataMapImpl(),\r\n cache: Map<string, InterpreterResult> = new Map<string, InterpreterResult>(),\r\n): InterpreterResult {\r\n if (cache.has(formula)) {\r\n const t = cache.get(formula)!;\r\n // fix cycle import\r\n if (t.result.length === 0) {\r\n return { result: [0] };\r\n }\r\n return t;\r\n }\r\n try {\r\n cellData.handleCell = (\r\n value: ModelCellType | undefined,\r\n coord: Pick<IRange, 'sheetId' | 'row' | 'col'>,\r\n ): ResultType[] => {\r\n if (value) {\r\n if (value.formula) {\r\n const t = parseFormula(value.formula, coord, cellData, cache);\r\n return t.result;\r\n } else {\r\n return [value.value];\r\n }\r\n }\r\n return [];\r\n };\r\n const result: InterpreterResult = {\r\n result: [],\r\n expressionStr: '',\r\n };\r\n cache.set(formula, result);\r\n const list = new Scanner(formula).scan();\r\n const expressions = new Parser(list).parse();\r\n const resultList = new Interpreter(\r\n expressions,\r\n currentCoord,\r\n cellData,\r\n ).interpret();\r\n\r\n const strList: string[] = [];\r\n for (const item of expressions) {\r\n strList.push(item.toString());\r\n }\r\n result.expressionStr = strList.join('');\r\n for (const item of resultList) {\r\n if (typeof item === 'number' && !isNaN(item)) {\r\n result.result.push(roundNumber(item));\r\n } else {\r\n result.result.push(item);\r\n }\r\n }\r\n return result;\r\n } catch (error) {\r\n if (error instanceof CustomError) {\r\n const result: InterpreterResult = {\r\n result: [error.value],\r\n };\r\n cache.set(formula, result);\r\n return result;\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nconst defaultSheetId = '_test_';\r\nexport class CellDataMapImpl implements CellDataMap {\r\n private readonly map = new Map<string, ModelCellType>();\r\n private readonly definedNameMap = new Map<string, SheetRange>();\r\n private readonly currentSheetId = defaultSheetId;\r\n private sheetList: WorksheetType[] = [\r\n {\r\n sheetId: defaultSheetId,\r\n name: '_test_',\r\n rowCount: 200,\r\n colCount: 30,\r\n isHide: false,\r\n sort: 1,\r\n },\r\n ];\r\n private getKey(row: number, col: number, sheetId: string) {\r\n const key = `${row}_${col}_${sheetId || defaultSheetId}`;\r\n return key;\r\n }\r\n getFunction = (name: string) => {\r\n return allFormulas[name as FormulaKeys];\r\n };\r\n setSheetList(list: WorksheetType[]) {\r\n this.sheetList = list;\r\n }\r\n set(range: IRange, value: ResultType[][]): void {\r\n const { row, col, sheetId } = range;\r\n for (let i = 0; i < value.length; i++) {\r\n for (let j = 0; j < value[i].length; j++) {\r\n const key = this.getKey(row + i, col + j, sheetId);\r\n const t = value[i][j];\r\n if (typeof t === 'string' && isFormula(t)) {\r\n this.map.set(key, { formula: t, value: '' });\r\n } else {\r\n this.map.set(key, { value: t });\r\n }\r\n }\r\n }\r\n }\r\n getCell(range: IRange) {\r\n const { row, col, sheetId } = range;\r\n const key = this.getKey(row, col, sheetId);\r\n const item = this.map.get(key);\r\n return item;\r\n }\r\n getSheetInfo(sheetId?: string, sheetName?: string) {\r\n if (sheetName) {\r\n return this.sheetList.find((v) => v.name === sheetName);\r\n }\r\n const realSheetId = sheetId || this.currentSheetId;\r\n return this.sheetList.find((v) => v.sheetId === realSheetId);\r\n }\r\n handleCell = (value: ModelCellType | undefined, _coord: Coordinate) => {\r\n if (value) {\r\n return [value.value];\r\n }\r\n return [];\r\n };\r\n setDefinedName(name: string, value: IRange) {\r\n const r = SheetRange.makeRange(value);\r\n this.definedNameMap.set(name, r);\r\n }\r\n getDefinedName(name: string) {\r\n return this.definedNameMap.get(name);\r\n }\r\n}\r\n\r\nexport function computeFormulas(\r\n eventData: RequestFormulas,\r\n cb: (data: ResponseFormulas) => boolean,\r\n) {\r\n const { currentSheetId, worksheets, workbook, definedNames } = eventData;\r\n const formulaCache = new Map<string, InterpreterResult>();\r\n const result: ResponseFormulas = {\r\n list: [],\r\n };\r\n const cellDataMap: CellDataMap = {\r\n handleCell: () => {\r\n return [];\r\n },\r\n getFunction: (name: string) => {\r\n return allFormulas[name as FormulaKeys];\r\n },\r\n getCell: (range: IRange) => {\r\n const { row, col, sheetId } = range;\r\n const key = getWorksheetKey(sheetId || currentSheetId, row, col);\r\n return worksheets[key];\r\n },\r\n set: () => {\r\n throw new CustomError('#REF!');\r\n },\r\n getSheetInfo: (sheetId?: string, sheetName?: string) => {\r\n if (sheetName) {\r\n return workbook.find((v) => v.name === sheetName);\r\n }\r\n const realSheetId = sheetId || currentSheetId;\r\n return workbook.find((v) => v.sheetId === realSheetId);\r\n },\r\n setDefinedName: () => {\r\n throw new CustomError('#REF!');\r\n },\r\n getDefinedName: (name: string) => {\r\n const r = definedNames[name];\r\n if (!r) {\r\n return r;\r\n }\r\n return SheetRange.makeRange(r);\r\n },\r\n };\r\n for (const [k, data] of Object.entries(worksheets)) {\r\n const range = convertWorksheetKey(k);\r\n if (!range || range.sheetId !== currentSheetId || !data?.formula) {\r\n continue;\r\n }\r\n const temp = parseFormula(data?.formula, range, cellDataMap, formulaCache);\r\n if (!temp) {\r\n continue;\r\n }\r\n const r = temp.result[0];\r\n if (r !== data.value) {\r\n result.list.push({\r\n key: k,\r\n newValue: r,\r\n sheetId: currentSheetId,\r\n });\r\n }\r\n }\r\n return cb(result);\r\n}\r\n","import { splitToWords } from '../util';\r\nimport { getThemeColor, sizeConfig } from '../theme';\r\nimport { npx, dpr } from '../util';\r\nimport { makeFont } from '../util';\r\nimport {\r\n DEFAULT_FONT_SIZE,\r\n ERROR_SET,\r\n MERGE_CELL_LINE_BREAK,\r\n DEFAULT_FORMAT_CODE,\r\n DEFAULT_LINE_WIDTH,\r\n BORDER_TYPE_MAP,\r\n type ErrorTypes,\r\n} from '../util';\r\nimport {\r\n CanvasOverlayPosition,\r\n Point,\r\n EUnderLine,\r\n IWindowSize,\r\n ModelCellType,\r\n StyleType,\r\n EHorizontalAlign,\r\n EVerticalAlign,\r\n BorderItem,\r\n ThemeType,\r\n BorderType,\r\n} from '../types';\r\nimport { numberFormat, isDateFormat } from '../formula';\r\nimport { isMergeContent } from '../util';\r\n\r\nconst measureTextMap = new Map<string, IWindowSize>();\r\n\r\nexport function measureText(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n char: string,\r\n): IWindowSize {\r\n const mapKey = `${char}__${ctx.font}`;\r\n if (measureTextMap.has(mapKey)) {\r\n return measureTextMap.get(mapKey)!;\r\n }\r\n const text = ctx.measureText(char);\r\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } = text;\r\n const h = actualBoundingBoxAscent + actualBoundingBoxDescent;\r\n const w = text.width;\r\n const width = Math.ceil(w / dpr());\r\n const height = Math.ceil(h / dpr());\r\n const result = { width, height };\r\n measureTextMap.set(mapKey, result);\r\n return result;\r\n}\r\n\r\nexport function fillRect(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n): void {\r\n ctx.fillRect(npx(x), npx(y), npx(width), npx(height));\r\n}\r\n/* jscpd:ignore-start */\r\nexport function strokeRect(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n): void {\r\n ctx.strokeRect(npx(x), npx(y), npx(width), npx(height));\r\n}\r\n\r\nexport function clearRect(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n): void {\r\n ctx.clearRect(npx(x), npx(y), npx(width), npx(height));\r\n}\r\n/* jscpd:ignore-end */\r\n\r\nexport function fillText(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n text: string,\r\n x: number,\r\n y: number,\r\n) {\r\n ctx.fillText(text, npx(x), npx(y));\r\n}\r\n\r\nexport function drawLines(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n pointList: Point[],\r\n): void {\r\n if (pointList.length === 0) {\r\n return;\r\n }\r\n ctx.beginPath();\r\n for (let i = 0; i < pointList.length; i += 2) {\r\n const first = pointList[i];\r\n const second = pointList[i + 1];\r\n ctx.moveTo(npx(first[0]), npx(first[1]));\r\n ctx.lineTo(npx(second[0]), npx(second[1]));\r\n }\r\n ctx.stroke();\r\n}\r\n\r\nexport function drawTriangle(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n point1: Point,\r\n point2: Point,\r\n point3: Point,\r\n) {\r\n ctx.beginPath();\r\n ctx.moveTo(npx(point1[0]), npx(point1[1]));\r\n ctx.lineTo(npx(point2[0]), npx(point2[1]));\r\n ctx.lineTo(npx(point3[0]), npx(point3[1]));\r\n ctx.fill();\r\n}\r\n\r\nexport function getDoubleLine(\r\n pointList: Point[],\r\n position: 'top' | 'bottom' | 'left' | 'right',\r\n isShort: boolean,\r\n) {\r\n const result = pointList.slice();\r\n const [start, end] = pointList;\r\n const t = DEFAULT_LINE_WIDTH * 2;\r\n const other = isShort ? t : 0;\r\n if (position === 'bottom') {\r\n result.push([start[0] + other, start[1] - t], [end[0] - other, end[1] - t]);\r\n } else if (position === 'top') {\r\n result.push([start[0] + other, start[1] + t], [end[0] - other, end[1] + t]);\r\n } else if (position === 'left') {\r\n result.push([start[0] + t, start[1] + other], [end[0] + t, end[1] - other]);\r\n } else if (position === 'right') {\r\n result.push([start[0] - t, start[1] + other], [end[0] - t, end[1] - other]);\r\n }\r\n return result;\r\n}\r\n\r\nfunction splitWords(\r\n text: string,\r\n isWrapText?: boolean,\r\n isMergeContent?: boolean,\r\n): string[] {\r\n if (isMergeContent) {\r\n if (isWrapText) {\r\n return text.split(MERGE_CELL_LINE_BREAK);\r\n } else {\r\n return splitToWords(text.replaceAll(MERGE_CELL_LINE_BREAK, ''));\r\n }\r\n } else {\r\n return splitToWords(text);\r\n }\r\n}\r\n\r\nexport function drawAntLine(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n) {\r\n ctx.setLineDash([npx(8), npx(6)]);\r\n const offset = DEFAULT_LINE_WIDTH;\r\n strokeRect(\r\n ctx,\r\n x + offset,\r\n y + offset,\r\n width - offset * 2,\r\n height - offset * 2,\r\n );\r\n ctx.setLineDash([]);\r\n}\r\n\r\nfunction getLineDash(type?: BorderType) {\r\n let dash: number[] = [];\r\n if (type === 'hair') {\r\n dash = [DEFAULT_LINE_WIDTH, DEFAULT_LINE_WIDTH];\r\n } else if (type === 'dotted' || type === 'mediumDashed') {\r\n dash = [DEFAULT_LINE_WIDTH * 2, DEFAULT_LINE_WIDTH * 2];\r\n } else if (type === 'dashed') {\r\n dash = [DEFAULT_LINE_WIDTH * 4, DEFAULT_LINE_WIDTH * 4];\r\n } else if (type === 'dashDot' || type === 'mediumDashDot') {\r\n dash = [\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 8,\r\n DEFAULT_LINE_WIDTH * 4,\r\n ];\r\n } else if (type === 'dashDotDot' || type === 'mediumDashDotDot') {\r\n dash = [\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 8,\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 4,\r\n DEFAULT_LINE_WIDTH * 4,\r\n ];\r\n }\r\n return dash;\r\n}\r\n\r\nexport function renderBorderItem(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n cellInfo: CanvasOverlayPosition,\r\n borderItem: BorderItem | undefined,\r\n position: 'top' | 'bottom' | 'left' | 'right',\r\n theme?: ThemeType,\r\n) {\r\n if (!borderItem) {\r\n return;\r\n }\r\n const { top, left, width, height } = cellInfo;\r\n\r\n let list: Point[] = [];\r\n if (position === 'top') {\r\n list = [\r\n [left, top],\r\n [left + width, top],\r\n ];\r\n } else if (position === 'bottom') {\r\n list = [\r\n [left, top + height],\r\n [left + width, top + height],\r\n ];\r\n } else if (position === 'left') {\r\n list = [\r\n [left, top],\r\n [left, top + height],\r\n ];\r\n } else if (position === 'right') {\r\n list = [\r\n [left + width, top],\r\n [left + width, top + height],\r\n ];\r\n }\r\n const { type, color } = borderItem;\r\n ctx.lineWidth = BORDER_TYPE_MAP[type];\r\n ctx.strokeStyle = color || getThemeColor('black', theme);\r\n const lineDash = getLineDash(type);\r\n if (type === 'double') {\r\n list = getDoubleLine(list, position, true);\r\n }\r\n if (lineDash.length > 0) {\r\n ctx.setLineDash(lineDash.map((v) => npx(v)));\r\n }\r\n drawLines(ctx, list);\r\n if (lineDash.length > 0) {\r\n ctx.setLineDash([]);\r\n }\r\n}\r\n\r\ntype TextItem = { str: string; width: number; height: number };\r\nexport function renderCell(\r\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\r\n position: CanvasOverlayPosition,\r\n cellInfo: ModelCellType,\r\n isMergeCell?: boolean,\r\n theme?: ThemeType,\r\n): IWindowSize {\r\n const value = cellInfo.value;\r\n const result: IWindowSize = { height: 0, width: 0 };\r\n if (value === '') {\r\n return result;\r\n }\r\n const format = cellInfo?.numberFormat || DEFAULT_FORMAT_CODE;\r\n const isRight = format === DEFAULT_FORMAT_CODE && typeof value === 'number';\r\n const text = numberFormat(value, format);\r\n const fontSize = cellInfo?.fontSize ? cellInfo.fontSize : DEFAULT_FONT_SIZE;\r\n const font = makeFont(\r\n cellInfo?.isItalic ? 'italic' : 'normal',\r\n cellInfo?.isBold ? 'bold' : '500',\r\n npx(fontSize),\r\n cellInfo?.fontFamily,\r\n );\r\n\r\n // draw background color\r\n if (cellInfo?.fillColor) {\r\n ctx.fillStyle = cellInfo?.fillColor;\r\n fillRect(ctx, position.left, position.top, position.width, position.height);\r\n }\r\n // error text\r\n let fillStyle = cellInfo?.fontColor || getThemeColor('contentColor', theme);\r\n if (ERROR_SET.has(text as ErrorTypes)) {\r\n fillStyle = getThemeColor('errorFormulaColor', theme);\r\n }\r\n\r\n ctx.font = font;\r\n ctx.fillStyle = fillStyle;\r\n\r\n const realStyle = { ...cellInfo };\r\n let align = realStyle?.horizontalAlign;\r\n if (realStyle?.horizontalAlign === undefined && isRight) {\r\n align = EHorizontalAlign.RIGHT;\r\n }\r\n realStyle.horizontalAlign = align;\r\n\r\n // show all date text\r\n const isDate = !realStyle?.isWrapText && isDateFormat(format);\r\n const texts = isDate\r\n ? [text]\r\n : splitWords(text, cellInfo?.isWrapText, isMergeCell);\r\n const textList: TextItem[] = texts.map((item) => {\r\n const size = measureText(ctx, item);\r\n return {\r\n str: item,\r\n width: size.width,\r\n height: size.height === 0 ? fontSize : size.height,\r\n };\r\n });\r\n\r\n // fill text\r\n const { width, height, resultList } = computeCell(\r\n textList,\r\n position,\r\n realStyle,\r\n isMergeContent(Boolean(isMergeCell), text),\r\n );\r\n if (width > 0 && height > 0) {\r\n const lineGap = Math.ceil((fontSize * (sizeConfig.lineHeight - 1)) / 2);\r\n let list: Point[] = [];\r\n for (const item of resultList) {\r\n fillText(ctx, item.text, item.x, item.y);\r\n if (realStyle?.underline) {\r\n ctx.strokeStyle = fillStyle;\r\n const t = item.y + item.height + lineGap / 2;\r\n const point: Point[] = [\r\n [item.x, t],\r\n [item.x + item.width, t],\r\n ];\r\n if (realStyle?.underline === EUnderLine.DOUBLE) {\r\n list = list.concat(getDoubleLine(point, 'bottom', false));\r\n } else {\r\n list = list.concat(point);\r\n }\r\n }\r\n if (realStyle?.isStrike) {\r\n ctx.strokeStyle = fillStyle;\r\n const t = item.y + item.height / 2 + lineGap / 2;\r\n list = list.concat([\r\n [item.x, t],\r\n [item.x + item.width, t],\r\n ]);\r\n }\r\n }\r\n // underline strike\r\n drawLines(ctx, list);\r\n }\r\n\r\n result.height = Math.ceil(height);\r\n result.width = Math.ceil(width);\r\n\r\n return result;\r\n}\r\nfunction computeCell(\r\n texts: TextItem[],\r\n cellInfo: CanvasOverlayPosition,\r\n style?: Partial<StyleType>,\r\n isMergeContent?: boolean,\r\n) {\r\n const fontSize = style?.fontSize ? style.fontSize : DEFAULT_FONT_SIZE;\r\n const lineGap = Math.ceil((fontSize * (sizeConfig.lineHeight - 1)) / 2);\r\n const verticalAlign = style?.verticalAlign ?? EVerticalAlign.MIDDLE;\r\n const { left, top, height } = cellInfo;\r\n const width = Math.max(cellInfo.width, ...texts.map((v) => v.width));\r\n const textList: Array<{\r\n text: string;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n }> = [];\r\n let textWidth = 0;\r\n let textHeight = 0;\r\n if (style?.isWrapText && isMergeContent) {\r\n let y = 0;\r\n for (let i = 0; i < texts.length; i++) {\r\n const item = texts[i];\r\n textWidth = Math.max(textWidth, item.width);\r\n const temp = item.height + lineGap * 2;\r\n textHeight += temp;\r\n textList.push({\r\n text: item.str,\r\n x: 0,\r\n y,\r\n width: item.width,\r\n height: item.height,\r\n });\r\n y += temp;\r\n }\r\n } else if (style?.isWrapText) {\r\n let y = 0;\r\n for (let i = 0; i < texts.length; ) {\r\n let temp = width;\r\n let line = '';\r\n let w = 0;\r\n let h = 0;\r\n while (i < texts.length) {\r\n const item = texts[i];\r\n if (temp >= item.width) {\r\n w += item.width;\r\n h = Math.max(h, item.height);\r\n temp -= item.width;\r\n line += item.str;\r\n i++;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (line) {\r\n textWidth = Math.max(textWidth, w);\r\n const t = h + lineGap * 2;\r\n textHeight += t;\r\n textList.push({\r\n text: line,\r\n x: 0,\r\n y,\r\n width: w,\r\n height: h,\r\n });\r\n y += t;\r\n }\r\n }\r\n } else {\r\n let line = '';\r\n let temp = width;\r\n for (let i = 0; i < texts.length; i++) {\r\n const item = texts[i];\r\n if (temp >= item.width) {\r\n textWidth += item.width;\r\n textHeight = Math.max(textHeight, item.height);\r\n line += item.str;\r\n temp -= item.width;\r\n } else {\r\n break;\r\n }\r\n }\r\n textList.push({\r\n text: line,\r\n x: 0,\r\n y: 0,\r\n width: textWidth,\r\n height: textHeight,\r\n });\r\n }\r\n textHeight = Math.max(textHeight, fontSize * sizeConfig.lineHeight);\r\n textWidth += lineGap;\r\n textHeight += lineGap;\r\n if (textWidth <= width && textHeight <= height) {\r\n let x = left + lineGap;\r\n let y = top + (height - textHeight) / 2 + lineGap;\r\n if (verticalAlign === EVerticalAlign.TOP) {\r\n y = top + lineGap;\r\n } else if (verticalAlign === EVerticalAlign.BOTTOM) {\r\n y = top + (height - textHeight) + lineGap;\r\n }\r\n if (style?.horizontalAlign === EHorizontalAlign.CENTER) {\r\n x = left + (width - textWidth) / 2;\r\n } else if (style?.horizontalAlign === EHorizontalAlign.RIGHT) {\r\n x = left + (width - textWidth) - lineGap;\r\n }\r\n for (const item of textList) {\r\n item.x = item.x + x;\r\n item.y = item.y + y;\r\n }\r\n }\r\n return {\r\n width: textWidth,\r\n height: textHeight,\r\n resultList: textList,\r\n };\r\n}\r\n","import { getThemeColor } from '../theme';\r\nimport { ThemeType } from '../types';\r\nimport { DEFAULT_LINE_WIDTH, DEFAULT_FONT_SIZE } from '../util';\r\nimport { makeFont } from '../util';\r\nimport { npx } from '../util';\r\n\r\nexport function getHeaderStyle(\r\n theme?: ThemeType,\r\n): Pick<\r\n CanvasRenderingContext2D,\r\n | 'textAlign'\r\n | 'textBaseline'\r\n | 'font'\r\n | 'fillStyle'\r\n | 'lineWidth'\r\n | 'strokeStyle'\r\n> {\r\n return {\r\n textAlign: 'center',\r\n textBaseline: 'middle',\r\n font: makeFont(undefined, '500', npx(DEFAULT_FONT_SIZE)),\r\n fillStyle: getThemeColor('black', theme),\r\n lineWidth: DEFAULT_LINE_WIDTH,\r\n strokeStyle: getThemeColor('borderColor', theme),\r\n };\r\n}\r\n","import type {\r\n RequestRender,\r\n Point,\r\n IRange,\r\n CanvasOverlayPosition,\r\n IPosition,\r\n IWindowSize,\r\n WorkerMainView,\r\n ContentParams,\r\n} from '../types';\r\nimport {\r\n clearRect,\r\n fillRect,\r\n strokeRect,\r\n fillText,\r\n drawLines,\r\n drawTriangle,\r\n drawAntLine,\r\n renderBorderItem,\r\n renderCell,\r\n} from './util';\r\nimport { getThemeColor } from '../theme';\r\nimport {\r\n DEFAULT_LINE_WIDTH,\r\n CELL_HEIGHT,\r\n CELL_WIDTH,\r\n HIDE_CELL,\r\n BORDER_TYPE_MAP,\r\n FILTER_RECT_SIZE,\r\n} from '../util';\r\nimport { getHeaderStyle } from './constant';\r\nimport { intToColumnName } from '../util';\r\nimport { isSheet, isCol, isRow, containRange } from '../util';\r\nimport { npx, dpr } from '../util';\r\nimport { getCustomWidthOrHeightKey, getWorksheetKey } from '../util';\r\n\r\nconst lineWidth = Math.max(...Object.values(BORDER_TYPE_MAP));\r\n\r\n/**\r\n * run OffScreenWorker in Web Worker env\r\n */\r\nexport default class OffScreenWorker implements WorkerMainView {\r\n private readonly canvas: OffscreenCanvas;\r\n private readonly ctx: OffscreenCanvasRenderingContext2D;\r\n private width: number = 0;\r\n private height: number = 0;\r\n private isRendering = false;\r\n private rowMap: Record<string, number> = {};\r\n private colMap: Record<string, number> = {};\r\n private eventData: Omit<RequestRender, 'status' | 'changeSet'> = {\r\n theme: 'light',\r\n sheetData: {},\r\n canvasSize: {\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0,\r\n },\r\n headerSize: {\r\n width: 0,\r\n height: 0,\r\n },\r\n currentSheetInfo: {\r\n isHide: false,\r\n rowCount: 0,\r\n colCount: 0,\r\n name: '',\r\n sheetId: '',\r\n tabColor: '',\r\n sort: 1,\r\n },\r\n scroll: {\r\n row: 0,\r\n col: 0,\r\n top: 0,\r\n left: 0,\r\n scrollLeft: 0,\r\n scrollTop: 0,\r\n },\r\n range: {\r\n row: 0,\r\n col: 0,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId: '',\r\n },\r\n copyRange: undefined,\r\n customHeight: {},\r\n customWidth: {},\r\n currentMergeCells: [],\r\n autoFilter: undefined,\r\n };\r\n constructor(canvas: OffscreenCanvas) {\r\n this.canvas = canvas;\r\n this.ctx = canvas.getContext('2d')!;\r\n const size = dpr();\r\n this.ctx.scale(size, size);\r\n }\r\n render(data: RequestRender) {\r\n if (data.changeSet.size === 0 || this.isRendering) {\r\n return;\r\n }\r\n\r\n this.isRendering = true;\r\n this.eventData = data;\r\n this.clear();\r\n const { ctx } = this;\r\n ctx.strokeStyle = getThemeColor('primaryColor', data.theme);\r\n ctx.fillStyle = getThemeColor('white', data.theme);\r\n ctx.lineWidth = DEFAULT_LINE_WIDTH * 2;\r\n\r\n const { width, height } = this.eventData.canvasSize;\r\n const headerSize = this.eventData.headerSize;\r\n const { endRow, contentHeight } = this.renderRowsHeader(height);\r\n const { endCol, contentWidth } = this.renderColsHeader(width);\r\n this.renderGrid(width - headerSize.width, height - headerSize.height);\r\n this.renderTriangle();\r\n\r\n this.renderMergeCell();\r\n\r\n this.ctx.fillStyle = getThemeColor('selectionColor', this.eventData.theme);\r\n const result = this.renderSelection({\r\n endRow,\r\n endCol,\r\n contentHeight,\r\n contentWidth,\r\n });\r\n this.renderAntLine(result);\r\n this.renderContent({ endRow, endCol, contentHeight, contentWidth });\r\n this.ctx.lineWidth = lineWidth;\r\n strokeRect(this.ctx, result.left, result.top, result.width, result.height);\r\n this.isRendering = false;\r\n return { rowMap: { ...this.rowMap }, colMap: { ...this.colMap } };\r\n }\r\n resize(data: IWindowSize) {\r\n this.width = data.width;\r\n this.height = data.height;\r\n this.canvas.width = npx(data.width);\r\n this.canvas.height = npx(data.height);\r\n }\r\n private clear() {\r\n clearRect(this.ctx, 0, 0, this.width, this.height);\r\n }\r\n\r\n private renderRowsHeader(height: number) {\r\n const { row: rowIndex } = this.eventData.scroll;\r\n const headerSize = this.eventData.headerSize;\r\n const { rowCount } = this.eventData.currentSheetInfo;\r\n this.ctx.save();\r\n const range = this.eventData.range;\r\n fillRect(this.ctx, 0, headerSize.height, headerSize.width, height);\r\n Object.assign(this.ctx, getHeaderStyle(this.eventData.theme));\r\n const pointList: Point[] = [];\r\n let y = headerSize.height;\r\n let i = rowIndex;\r\n\r\n for (; i < rowCount && y < height; i++) {\r\n const rowHeight = this.getRowHeight(i);\r\n let temp = y;\r\n if (i === rowIndex) {\r\n temp += DEFAULT_LINE_WIDTH / 2;\r\n }\r\n pointList.push([0, temp], [headerSize.width, temp]);\r\n if (rowHeight > 0) {\r\n const check = this.isHighlightRow(range, i);\r\n this.ctx.fillStyle = check\r\n ? getThemeColor('primaryColor', this.eventData.theme)\r\n : getThemeColor('black', this.eventData.theme);\r\n\r\n fillText(\r\n this.ctx,\r\n String(i + 1),\r\n headerSize.width / 2,\r\n temp + rowHeight / 2,\r\n );\r\n }\r\n y += rowHeight;\r\n }\r\n pointList.push([0, y], [headerSize.width, y]);\r\n pointList.push([0, 0], [0, y]);\r\n drawLines(this.ctx, pointList);\r\n this.ctx.restore();\r\n const contentHeight = i >= rowCount ? y : height;\r\n\r\n return { endRow: i, contentHeight: Math.floor(contentHeight) };\r\n }\r\n private renderColsHeader(width: number) {\r\n const { col: colIndex, row: startRow } = this.eventData.scroll;\r\n const headerSize = this.eventData.headerSize;\r\n const { colCount } = this.eventData.currentSheetInfo;\r\n const range = this.eventData.range;\r\n const pointList: Point[] = [];\r\n this.ctx.save();\r\n fillRect(this.ctx, headerSize.width, 0, width, headerSize.height);\r\n Object.assign(this.ctx, getHeaderStyle());\r\n\r\n let x = headerSize.width;\r\n let i = colIndex;\r\n\r\n const autoFilter = this.eventData.autoFilter;\r\n let rowHeight = 0;\r\n for (let r = startRow; r < this.eventData.currentSheetInfo.rowCount; r++) {\r\n rowHeight = this.getRowHeight(startRow);\r\n if (rowHeight !== 0) {\r\n break;\r\n }\r\n }\r\n\r\n for (; i < colCount && x <= width; i++) {\r\n const colWidth = this.getColWidth(i);\r\n let temp = x;\r\n if (i === colIndex) {\r\n temp += DEFAULT_LINE_WIDTH / 2;\r\n }\r\n pointList.push([temp, 0], [temp, headerSize.height]);\r\n if (colWidth > 0) {\r\n const check = this.isHighlightCol(range, i);\r\n this.ctx.fillStyle = check\r\n ? getThemeColor('primaryColor', this.eventData.theme)\r\n : getThemeColor('black', this.eventData.theme);\r\n fillText(\r\n this.ctx,\r\n intToColumnName(i),\r\n temp + colWidth / 2,\r\n headerSize.height / 2,\r\n );\r\n }\r\n if (\r\n autoFilter &&\r\n i >= autoFilter.range.col &&\r\n i < autoFilter.range.col + autoFilter.range.colCount\r\n ) {\r\n this.renderFilter(\r\n x + colWidth,\r\n headerSize.height + rowHeight,\r\n autoFilter.col === i,\r\n );\r\n }\r\n x += colWidth;\r\n }\r\n pointList.push([x, 0], [x, headerSize.height]);\r\n pointList.push([0, 0], [x, 0]);\r\n drawLines(this.ctx, pointList);\r\n this.ctx.restore();\r\n const contentWidth = i >= colCount ? x : width;\r\n return {\r\n endCol: i,\r\n contentWidth: Math.floor(contentWidth),\r\n };\r\n }\r\n private renderFilter(endX: number, endY: number, isFilter: boolean) {\r\n const width = FILTER_RECT_SIZE;\r\n const gap = DEFAULT_LINE_WIDTH * 4;\r\n const x = endX - width - gap;\r\n const y = endY - width - gap;\r\n\r\n this.ctx.fillStyle = isFilter\r\n ? getThemeColor('primaryColor', this.eventData.theme)\r\n : getThemeColor('borderColor', this.eventData.theme);\r\n this.ctx.strokeStyle = isFilter\r\n ? getThemeColor('primaryColor', this.eventData.theme)\r\n : getThemeColor('borderColor', this.eventData.theme);\r\n strokeRect(this.ctx, x, y, width, width);\r\n\r\n drawTriangle(\r\n this.ctx,\r\n [x + width / 4, y + (width * 3) / 8],\r\n [x + (width * 3) / 4, y + (width * 3) / 8],\r\n [x + width / 2, y + (width * 5) / 8],\r\n );\r\n }\r\n private renderGrid(width: number, height: number): void {\r\n const headerSize = this.eventData.headerSize;\r\n const { row: rowIndex, col: colIndex } = this.eventData.scroll;\r\n const { rowCount, colCount } = this.eventData.currentSheetInfo;\r\n this.ctx.save();\r\n this.ctx.lineWidth = DEFAULT_LINE_WIDTH;\r\n this.ctx.strokeStyle = getThemeColor('borderColor', this.eventData.theme);\r\n this.ctx.translate(npx(headerSize.width), npx(headerSize.height));\r\n const pointList: Point[] = [];\r\n let y = 0;\r\n let x = 0;\r\n const xTemp: Point[] = [];\r\n const yTemp: Point[] = [];\r\n for (let i = rowIndex; i < rowCount && y <= height; i++) {\r\n while (i < rowCount && this.getRowHeight(i) === 0) {\r\n i++;\r\n }\r\n yTemp.push([0, y]);\r\n const h = this.getRowHeight(i);\r\n y += h;\r\n }\r\n for (let i = colIndex; i < colCount && x <= width; i++) {\r\n while (i < colCount && this.getColWidth(i) === 0) {\r\n i++;\r\n }\r\n xTemp.push([x, 0]);\r\n const w = this.getColWidth(i);\r\n x += w;\r\n }\r\n for (const item of xTemp) {\r\n pointList.push(item, [item[0], y]);\r\n }\r\n for (const item of yTemp) {\r\n pointList.push(item, [x, item[1]]);\r\n }\r\n pointList.push([0, y], [x, y]);\r\n pointList.push([x, 0], [x, y]);\r\n drawLines(this.ctx, pointList);\r\n this.ctx.restore();\r\n }\r\n private renderTriangle(): void {\r\n const headerSize = this.eventData.headerSize;\r\n this.ctx.save();\r\n\r\n fillRect(this.ctx, 0, 0, headerSize.width, headerSize.height);\r\n this.ctx.fillStyle = getThemeColor(\r\n 'triangleFillColor',\r\n this.eventData.theme,\r\n );\r\n\r\n const offset = 2;\r\n const minY = Math.floor(offset);\r\n const maxY = Math.floor(headerSize.height - offset);\r\n const minX = Math.floor(headerSize.width * 0.4);\r\n const maxX = Math.floor(headerSize.width - offset);\r\n\r\n drawTriangle(this.ctx, [maxX, minY], [minX, maxY], [maxX, maxY]);\r\n\r\n this.ctx.restore();\r\n }\r\n private getRowHeight(row: number) {\r\n const key = getCustomWidthOrHeightKey(\r\n this.eventData.currentSheetInfo.sheetId,\r\n row,\r\n );\r\n const data = this.eventData.customHeight[key];\r\n if (!data) {\r\n return CELL_HEIGHT;\r\n }\r\n return data.isHide ? HIDE_CELL : data.len;\r\n }\r\n private getColWidth(col: number) {\r\n const key = getCustomWidthOrHeightKey(\r\n this.eventData.currentSheetInfo.sheetId,\r\n col,\r\n );\r\n const data = this.eventData.customWidth[key];\r\n if (!data) {\r\n return CELL_WIDTH;\r\n }\r\n return data.isHide ? HIDE_CELL : data.len;\r\n }\r\n private isHighlightRow(range: IRange, row: number): boolean {\r\n if (isSheet(range)) {\r\n return true;\r\n }\r\n if (isCol(range)) {\r\n return true;\r\n }\r\n if (row >= range.row && row < range.row + range.rowCount) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private isHighlightCol(range: IRange, col: number): boolean {\r\n if (isSheet(range)) {\r\n return true;\r\n }\r\n\r\n if (isRow(range)) {\r\n return true;\r\n }\r\n if (col >= range.col && col < range.col + range.colCount) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private renderAntLine(position: CanvasOverlayPosition) {\r\n const range = this.eventData.copyRange;\r\n if (!range || range.sheetId !== this.eventData.currentSheetInfo.sheetId) {\r\n return;\r\n }\r\n this.ctx.lineWidth = lineWidth;\r\n this.ctx.strokeStyle = getThemeColor('primaryColor', this.eventData.theme);\r\n drawAntLine(\r\n this.ctx,\r\n position.left,\r\n position.top,\r\n position.width,\r\n position.height,\r\n );\r\n }\r\n private renderMergeCell() {\r\n const mergeCells = this.eventData.currentMergeCells;\r\n if (mergeCells.length === 0) {\r\n return;\r\n }\r\n const activeCell = this.eventData.range;\r\n for (const range of mergeCells) {\r\n if (activeCell.row === range.row && activeCell.col === range.col) {\r\n continue;\r\n }\r\n this.clearRect(range);\r\n }\r\n }\r\n /* jscpd:ignore-start */\r\n private getCellSize(range: IRange): IWindowSize {\r\n let { row, col, colCount, rowCount } = range;\r\n let r = row;\r\n let c = col;\r\n let endRow = row + rowCount;\r\n let endCol = col + colCount;\r\n const sheetInfo = this.eventData.currentSheetInfo;\r\n if (isSheet(range)) {\r\n c = 0;\r\n endCol = sheetInfo.colCount;\r\n r = 0;\r\n endRow = sheetInfo.rowCount;\r\n } else if (isCol(range)) {\r\n r = 0;\r\n endRow = sheetInfo.rowCount;\r\n } else if (isRow(range)) {\r\n c = 0;\r\n endCol = sheetInfo.colCount;\r\n }\r\n let width = 0;\r\n let height = 0;\r\n for (; r < endRow; r++) {\r\n height += this.getRowHeight(r);\r\n }\r\n for (; c < endCol; c++) {\r\n width += this.getColWidth(c);\r\n }\r\n return { width, height };\r\n }\r\n private computeCellPosition(range: IRange): IPosition {\r\n const { row, col } = range;\r\n const size = this.eventData.headerSize;\r\n const scroll = this.eventData.scroll;\r\n\r\n let resultX = size.width;\r\n let resultY = size.height;\r\n let r = scroll.row;\r\n let c = scroll.col;\r\n if (col >= scroll.col) {\r\n while (c < col) {\r\n resultX += this.getColWidth(c);\r\n c++;\r\n }\r\n } else {\r\n resultX = -size.width;\r\n while (c > col) {\r\n resultX -= this.getColWidth(c);\r\n c--;\r\n }\r\n }\r\n if (row >= scroll.row) {\r\n while (r < row) {\r\n resultY += this.getRowHeight(r);\r\n r++;\r\n }\r\n } else {\r\n resultY = -size.height;\r\n while (r > row) {\r\n resultY -= this.getRowHeight(r);\r\n r--;\r\n }\r\n }\r\n return {\r\n top: resultY,\r\n left: resultX,\r\n };\r\n }\r\n private getActiveRange(r?: IRange) {\r\n const range = r || this.eventData.range;\r\n const mergeCells = this.eventData.currentMergeCells;\r\n for (const item of mergeCells) {\r\n if (containRange(range, item)) {\r\n const newRange = {\r\n ...item,\r\n sheetId: item.sheetId,\r\n };\r\n return {\r\n range: newRange,\r\n isMerged: true,\r\n };\r\n }\r\n }\r\n return {\r\n range,\r\n isMerged: false,\r\n };\r\n }\r\n /* jscpd:ignore-end */\r\n private clearRect(range: IRange) {\r\n const cellSize = this.getCellSize(range);\r\n if (cellSize.width <= 0 || cellSize.height <= 0) {\r\n return;\r\n }\r\n const activeCell = this.computeCellPosition(range);\r\n const lineWidth = DEFAULT_LINE_WIDTH;\r\n clearRect(\r\n this.ctx,\r\n activeCell.left + lineWidth,\r\n activeCell.top + lineWidth,\r\n cellSize.width - lineWidth * 2,\r\n cellSize.height - lineWidth * 2,\r\n );\r\n }\r\n private renderContent(params: ContentParams) {\r\n const { endCol, endRow, contentHeight, contentWidth } = params;\r\n const { ctx } = this;\r\n ctx.textAlign = 'left';\r\n ctx.textBaseline = 'top';\r\n ctx.lineWidth = DEFAULT_LINE_WIDTH * 2;\r\n const headerSize = this.eventData.headerSize;\r\n const { row, col } = this.eventData.scroll;\r\n\r\n const maxWidth = Math.floor(contentWidth - headerSize.width);\r\n const maxHeight = Math.floor(contentHeight - headerSize.height);\r\n ctx.save();\r\n\r\n this.rowMap = {};\r\n this.colMap = {};\r\n\r\n const mergeCells = this.eventData.currentMergeCells;\r\n for (let rowIndex = row; rowIndex < endRow; rowIndex++) {\r\n for (let colIndex = col; colIndex < endCol; colIndex++) {\r\n const mergeCell = mergeCells.find(\r\n (v) => v.row === rowIndex && v.col === colIndex,\r\n );\r\n\r\n this.renderCell(rowIndex, colIndex, mergeCell, maxWidth, maxHeight);\r\n }\r\n }\r\n ctx.restore();\r\n }\r\n private renderCell(\r\n row: number,\r\n col: number,\r\n mergeCell: IRange | undefined,\r\n maxWidth: number,\r\n maxHeight: number,\r\n ) {\r\n const { ctx } = this;\r\n const range: IRange = {\r\n row: row,\r\n col: col,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId: '',\r\n };\r\n const key = getWorksheetKey(\r\n this.eventData.currentSheetInfo.sheetId,\r\n row,\r\n col,\r\n );\r\n const cellInfo = this.eventData.sheetData[key];\r\n if (!cellInfo) {\r\n return;\r\n }\r\n const cellSize = this.getCellSize(mergeCell || range);\r\n if (cellSize.width <= 0 || cellSize.height <= 0) {\r\n return;\r\n }\r\n const position = this.computeCellPosition(range);\r\n ctx.lineWidth = DEFAULT_LINE_WIDTH * 2;\r\n const theme = this.eventData.theme;\r\n const size = renderCell(\r\n ctx,\r\n {\r\n top: position.top,\r\n left: position.left,\r\n width: Math.min(cellSize.width, maxWidth),\r\n height: Math.min(cellSize.height, maxHeight),\r\n },\r\n cellInfo,\r\n Boolean(mergeCell),\r\n theme,\r\n );\r\n const height = Math.max(this.rowMap[row] ?? 0, size.height);\r\n const width = Math.max(this.colMap[col] ?? 0, size.width);\r\n if (height >= CELL_HEIGHT) {\r\n this.rowMap[row] = height;\r\n }\r\n if (width >= CELL_WIDTH) {\r\n this.colMap[col] = width;\r\n }\r\n const cellPosition = {\r\n top: position.top,\r\n left: position.left,\r\n height: Math.max(height, cellSize.height),\r\n width: Math.max(width, cellSize.width),\r\n };\r\n\r\n renderBorderItem(ctx, cellPosition, cellInfo.borderTop, 'top', theme);\r\n renderBorderItem(ctx, cellPosition, cellInfo.borderBottom, 'bottom', theme);\r\n renderBorderItem(ctx, cellPosition, cellInfo.borderLeft, 'left', theme);\r\n renderBorderItem(ctx, cellPosition, cellInfo.borderRight, 'right', theme);\r\n }\r\n private renderSelection(params: ContentParams): CanvasOverlayPosition {\r\n const range = this.eventData.range;\r\n if (isSheet(range)) {\r\n const result = this.renderSelectAll(params);\r\n return result;\r\n }\r\n if (isCol(range)) {\r\n const result = this.renderSelectCol(params);\r\n return result;\r\n }\r\n if (isRow(range)) {\r\n const result = this.renderSelectRow(params);\r\n return result;\r\n }\r\n return this.renderSelectRange();\r\n }\r\n\r\n private renderSelectRange() {\r\n const headerSize = this.eventData.headerSize;\r\n const range = this.eventData.range;\r\n\r\n const activeCell = this.computeCellPosition({\r\n row: range.row,\r\n col: range.col,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId: '',\r\n });\r\n const endCellRow = range.row + range.rowCount - 1;\r\n const endCellCol = range.col + range.colCount - 1;\r\n\r\n const temp = {\r\n row: endCellRow,\r\n col: endCellCol,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId: '',\r\n };\r\n const endCell = this.computeCellPosition(temp);\r\n const endCellSize = this.getCellSize(temp);\r\n const width = endCell.left + endCellSize.width - activeCell.left;\r\n const height = endCell.top + endCellSize.height - activeCell.top;\r\n\r\n // col header\r\n fillRect(this.ctx, activeCell.left, 0, width, headerSize.height);\r\n // row header\r\n fillRect(this.ctx, 0, activeCell.top, headerSize.width, height);\r\n const check = range.rowCount > 1 || range.colCount > 1;\r\n if (check) {\r\n // main\r\n fillRect(this.ctx, activeCell.left, activeCell.top, width, height);\r\n }\r\n\r\n const list: Point[] = [\r\n [activeCell.left, headerSize.height],\r\n [activeCell.left + width, headerSize.height],\r\n ];\r\n list.push(\r\n [headerSize.width, activeCell.top],\r\n [headerSize.width, activeCell.top + height],\r\n );\r\n drawLines(this.ctx, list);\r\n if (check) {\r\n this.renderActiveCell();\r\n }\r\n return {\r\n left: activeCell.left,\r\n top: activeCell.top,\r\n width,\r\n height,\r\n };\r\n }\r\n private renderSelectAll(params: ContentParams): CanvasOverlayPosition {\r\n const { contentHeight, contentWidth } = params;\r\n const headerSize = this.eventData.headerSize;\r\n // main\r\n fillRect(this.ctx, 0, 0, contentWidth, contentHeight);\r\n this.renderActiveCell();\r\n const width = contentWidth - headerSize.width;\r\n const height = contentHeight - headerSize.height;\r\n return {\r\n left: headerSize.width,\r\n top: headerSize.height,\r\n width,\r\n height,\r\n };\r\n }\r\n private renderSelectCol({ contentHeight }: ContentParams) {\r\n const headerSize = this.eventData.headerSize;\r\n const range = this.eventData.range;\r\n const activeCell = this.computeCellPosition(range);\r\n\r\n let strokeWidth = 0;\r\n for (\r\n let i = range.col, endCol = range.col + range.colCount;\r\n i < endCol;\r\n i++\r\n ) {\r\n strokeWidth += this.getColWidth(i);\r\n }\r\n const realHeight = contentHeight - headerSize.height;\r\n\r\n // col header\r\n fillRect(this.ctx, activeCell.left, 0, strokeWidth, contentHeight);\r\n\r\n // row header\r\n fillRect(this.ctx, 0, activeCell.top, headerSize.width, realHeight);\r\n\r\n const list: Point[] = [\r\n [headerSize.width, headerSize.height],\r\n [headerSize.width, contentHeight],\r\n ];\r\n // row header highlight line\r\n drawLines(this.ctx, list);\r\n this.renderActiveCell();\r\n return {\r\n left: activeCell.left,\r\n top: headerSize.height,\r\n width: strokeWidth,\r\n height: realHeight,\r\n };\r\n }\r\n private renderSelectRow({ contentWidth }: ContentParams) {\r\n const headerSize = this.eventData.headerSize;\r\n const range = this.eventData.range;\r\n const activeCell = this.computeCellPosition(range);\r\n let strokeHeight = 0;\r\n for (\r\n let i = range.row, endRow = range.row + range.rowCount;\r\n i < endRow;\r\n i++\r\n ) {\r\n strokeHeight += this.getRowHeight(i);\r\n }\r\n const realWidth = contentWidth - headerSize.width - DEFAULT_LINE_WIDTH;\r\n // col header\r\n fillRect(this.ctx, activeCell.left, 0, realWidth, headerSize.height);\r\n\r\n // row header\r\n fillRect(this.ctx, 0, activeCell.top, contentWidth, strokeHeight);\r\n\r\n const list: Point[] = [\r\n [activeCell.left, headerSize.height],\r\n [contentWidth, headerSize.height],\r\n ];\r\n // col header highlight line\r\n drawLines(this.ctx, list);\r\n this.renderActiveCell();\r\n return {\r\n left: headerSize.width,\r\n top: activeCell.top,\r\n width: realWidth,\r\n height: strokeHeight,\r\n };\r\n }\r\n\r\n private renderActiveCell() {\r\n const range = this.eventData.range;\r\n const temp = this.getActiveRange({\r\n row: range.row,\r\n col: range.col,\r\n rowCount: 1,\r\n colCount: 1,\r\n sheetId: range.sheetId,\r\n }).range;\r\n this.clearRect(temp);\r\n }\r\n}\r\n","import type {\r\n RequestInit,\r\n IWindowSize,\r\n RequestRender,\r\n ResponseRender,\r\n WorkerMethod,\r\n RequestFormulas,\r\n ResponseFormulas,\r\n} from '../types';\r\nimport { computeFormulas } from '../formula';\r\nimport OffScreenWorker from './offScreenWorker';\r\nimport { setDpr } from '../util';\r\n\r\nlet offScreen: OffScreenWorker | null = null;\r\n\r\nconst workerMethod: WorkerMethod = {\r\n init(data: RequestInit) {\r\n offScreen = new OffScreenWorker(data.canvas);\r\n setDpr(data.dpr);\r\n },\r\n resize(data: IWindowSize) {\r\n offScreen?.resize(data);\r\n },\r\n async render(data: RequestRender, cb: (data: ResponseRender) => void) {\r\n const result = offScreen?.render(data);\r\n if (result) {\r\n await cb(result);\r\n }\r\n },\r\n async computeFormulas(\r\n data: RequestFormulas,\r\n cb: (data: ResponseFormulas) => boolean,\r\n ) {\r\n const result = await computeFormulas(data, cb);\r\n return result;\r\n },\r\n};\r\n\r\nexport default workerMethod;\r\n"],"names":["EVerticalAlign","EVerticalAlign2","EHorizontalAlign","EHorizontalAlign2","EUnderLine","EUnderLine2","EMergeCellType","EMergeCellType2","SYNC_FLAG","TokenType","TokenType2","DEFAULT_FONT_SIZE","MUST_FONT_FAMILY","SHEET_NAME_PREFIX","CELL_HEIGHT","CELL_WIDTH","ROW_TITLE_HEIGHT","COL_TITLE_WIDTH","HIDE_CELL","TEXTAREA_MAX_ROWS","MERGE_CELL_LINE_BREAK","LINE_BREAK","CSV_SPLITTER","XLSX_MAX_COL_COUNT","XLSX_MAX_ROW_COUNT","DEFAULT_ROW_COUNT","MAX_ADD_ROW_THRESHOLD","DEFAULT_COL_COUNT","DEFAULT_POSITION","FILTER_RECT_SIZE","SHEET_ITEM_TEST_ID_PREFIX","FORMULA_PREFIX","SPLITTER","MAX_NAME_LENGTH","MAX_PARAMS_COUNT","FORMULA_MAX_PRECISION","FORMULA_EDITOR_ROLE","DEFAULT_EXCEL_ID","DEFAULT_FORMAT_CODE","DEFAULT_TEXT_FORMAT_CODE","ERROR_SET","DEFAULT_LINE_WIDTH","BORDER_TYPE_MAP","COLOR_PICKER_COLOR_LIST","TEXT_FLAG","CELL_REG_EXP","COLUMN_REG_EXP","ROW_REG_EXP","DEFINED_NAME_REG_EXP","BUILT_IN_FUNCTION_SET","CHART_TYPE_LIST","NUMBER_FORMAT_LIST","getFormatCode","id","v","throttle","fn","wait","check","lastArgs","args","get","obj","path","defaultValue","result","res","key","isEmpty","value","temp","deepEqual","x","y","keys1","keys2","i","key1","key2","noop","camelCase","str","a","_","c","omit","keys","parseNumber","getListMaxNum","list","idList","item","getDefaultSheetInfo","sheetId","convertStringToResultType","num","stringToCoordinate","row","col","r","getWorksheetKey","convertWorksheetKey","getCustomWidthOrHeightKey","rowOrCol","widthOrHeightKeyToData","isMobile","matchList","ua","KEY_LIST","sleep","ms","resolve","isTestEnv","isMac","_a","isFormula","isMergeContent","isMergeCell","text","getDocId","_b","getRandomColor","g","b","FONT_SIZE_LIST","makeFont","fontStyle","fontWeight","fontSize","fontFamily","fontFamilyList","convertToCssString","style","pickCSSStyle","color","backgroundColor","whiteSpace","textDecorationLine","textDecorationStyle","size","parseStyle","styleMap","className","tagName","name","t","convertToCssStyleDeclaration","cssStr","regex","matches","match","cssText","n","realKey","convertToPx","convertPxToPt","px","other","pt","parseText","splitter","textList","parseHTML","html","template","doc","styleList","trList","colMap","rowMap","tr","height","texts","td","width","itemStyle","dprData","dpr","data","npx","setDpr","columnNameToInt","columnName","intToColumnName","dividend","rest","rowLabelToInt","label","isSheet","range","isRow","isCol","isSameRange","oldRange","newRange","containRange","sourceRange","targetRange","toIRange","SheetRange","rowCount","colCount","__publicField","iterateRange","sheetRowCount","sheetColCount","endRow","endCol","isAlpha","char","isDigit","convertSheetNameToSheetId","parseCell","ref","convertSheetName","realRef","sheetName","rowText","colText","parseReference","cell1","cell2","startCell","endCell","mergeRange","start","end","convertCell","referenceType","first","second","convertToReference","convertSheetIdToSheetName","R1C1_REG","parseR1C1","activeCell","_Debug","namespace","Debug","modelLog","reactLog","collaborationLog","splitToWords","proxyMarker","createEndpoint","releaseProxy","finalizer","throwMarker","isObject","val","proxyTransferHandler","port1","port2","expose","port","wrap","throwTransferHandler","serialized","transferHandlers","isAllowedOrigin","allowedOrigins","origin","allowedOrigin","ep","callback","ev","type","argumentList","fromWireValue","returnValue","parent","prop","rawValue","proxy","transfer","wireValue","transferables","toWireValue","closeEndPoint","error","isMessagePort","endpoint","target","pendingListeners","resolver","createProxy","throwIfProxyReleased","isReleased","releaseEndpoint","requestResponseMessage","proxyCounter","proxyFinalizers","newCount","registerProxy","unregisterProxy","isProxyReleased","_target","p","_thisArg","rawArgumentList","last","processArguments","myFlat","arr","processed","transferCache","transfers","windowEndpoint","w","context","targetOrigin","msg","handler","serializedValue","generateUUID","zIndex","hslaToHex","h","s","l","alpha","m","toHex","hexR","hexG","hexB","RGBToHSL","red","green","blue","cmin","cmax","delta","hue","getHue","lightness","getLightness","saturation","getSaturation","max","min","segment","shift","fullDarkMode","hexToRgba","hex","convertColorToDark","lightColor","darkColor","k","sizeConfig","themeKey","setTheme","getTheme","getThemeColor","Token","CustomError","assert","condition","message","mustOne","mustOneString","mustOneNumber","mustEmpty","SSF","make_ssf","_strrev","fill","o","pad0","d","pad_","rpad_","pad0r1","pad0r2","p2_32","pad0r","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","q","normalize_xl_unsafe","parse_date_code","opts","b2","date","time","dow","dout","out","fix_hijri","basedate","dnthresh","base1904","datenum_local","date1904","epoch","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","normalize_exp","small_exp","large_exp","general_fmt_num_base","V","general_fmt","format","write_date","fmt","ss0","ss","tt","outl","outstr","commaify","j","write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","aval","sign","den","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","carry","flr","write_num_flt","ffmt","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","split_fmt","in_str","abstime","fmt_is_date","eval_fmt","flen","lst","dt","hr","bt","ssm","_dt","nstr","jj","vv","myv","ostr","decpt","lasti","retval","cfregex","cfregex2","chkcond","thresh","choose_fmt","f","lat","m1","m2","load_entry","tbl","module","numberFormat","pattern","options","isDateFormat","convertDateToNumber","baseDate","baseDateTime","T","LOWER","CHAR","CODE","LEN","SPLIT","sep","UPPER","TEXT","TRIM","CONCAT","formulas","parseNumberArray","ABS","ACOS","ACOSH","ACOT","ACOTH","ASIN","ASINH","ATAN","ATAN2","ATANH","AVERAGE","sum","cur","COS","COT","EXP","INT","PI","SIN","SUM","roundNumber","allFormulas","textFormulas","mathFormulas","emptyData","Scanner","source","BinaryExpression","left","operator","right","visitor","LiteralExpression","UnaryExpression","PostUnaryExpression","CellExpression","CallExpression","params","CellRangeExpression","GroupExpression","ArrayExpression","Parser","tokens","expr","realRight","realLeft","token","types","Interpreter","expressions","currentCoord","cellDataMap","callee","sheetInfo","isOneCell","parseFormula","formula","cellData","CellDataMapImpl","cache","coord","resultList","strList","defaultSheetId","_coord","realSheetId","computeFormulas","eventData","cb","currentSheetId","worksheets","workbook","definedNames","formulaCache","measureTextMap","measureText","ctx","mapKey","actualBoundingBoxAscent","actualBoundingBoxDescent","fillRect","strokeRect","clearRect","fillText","drawLines","pointList","drawTriangle","point1","point2","point3","getDoubleLine","position","isShort","splitWords","isWrapText","drawAntLine","offset","getLineDash","dash","renderBorderItem","cellInfo","borderItem","theme","top","lineDash","renderCell","isRight","font","fillStyle","realStyle","align","computeCell","lineGap","point","verticalAlign","textWidth","textHeight","line","getHeaderStyle","lineWidth","OffScreenWorker","canvas","headerSize","contentHeight","contentWidth","rowIndex","rowHeight","colIndex","startRow","autoFilter","colWidth","endX","endY","isFilter","gap","xTemp","yTemp","minY","maxY","minX","maxX","mergeCells","scroll","resultX","resultY","cellSize","maxWidth","maxHeight","mergeCell","cellPosition","endCellRow","endCellCol","endCellSize","strokeWidth","realHeight","strokeHeight","realWidth","offScreen","workerMethod"],"mappings":"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GAEaC,KAAY,SAEZC,KAAe,sCACfC,KAAiB,uBACjBC,KAAc,mBACdC,KAAuB,8BAEvBC,yBAA4B,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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","x_google_ignoreList":[12,20]}