@sheetxl/sdk 0.8.0-beta.1 → 0.8.0-beta.10

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 (564) hide show
  1. package/THIRD-PARTY-NOTICES.md +1 -1
  2. package/browser/esm/{B0HS42a7lga1k1U_.mjs → BEAY9XgKNx-bakXW.mjs} +2 -2
  3. package/browser/esm/BbSmt62FpFIpoVzu.mjs +392 -0
  4. package/browser/esm/BcHmrKHwMMOlzc9_.mjs +357 -0
  5. package/browser/esm/BgcZ-CoTbMfmyDJL.mjs +412 -0
  6. package/browser/esm/Bk7xxbdDpa7-sIwd.mjs +7 -0
  7. package/browser/esm/BqskM7wA8oPfFQue.mjs +20 -0
  8. package/browser/esm/Btg43M1Bf-ENDreu.mjs +540 -0
  9. package/browser/esm/BzLfNyc6OOShIErH.mjs +598 -0
  10. package/browser/esm/C9B0djuUarfNdoj0.mjs +466 -0
  11. package/browser/esm/{uyWBMSIxMlt8n5Z3.mjs → CSx9ed1JOs7K5BXO.mjs} +2 -2
  12. package/browser/esm/CYyv6uGjo10ig5FP.mjs +142 -0
  13. package/browser/esm/CZ5oa92wZEAXebgk.mjs +622 -0
  14. package/browser/esm/CdLZWVcH8cncBUPJ.mjs +849 -0
  15. package/browser/esm/Cgd5BnM3hg9RyUel.mjs +171 -0
  16. package/browser/esm/CjsUGJEQSbGjnH6R.mjs +1001 -0
  17. package/browser/esm/ClB5ix51roQOpZEr.mjs +7402 -0
  18. package/browser/esm/{DlPMeIyxT9tG_WDk.mjs → Cqr3knDsBvoVZ6MN.mjs} +179 -202
  19. package/browser/esm/D4uVlrG0xEFctsSM.mjs +905 -0
  20. package/browser/esm/DOMHmhYzPcLVcpAW.mjs +7 -0
  21. package/browser/esm/DUvUK61b2_4pf4tG.mjs +484 -0
  22. package/browser/esm/De175LygU7ot4nQm.mjs +441 -0
  23. package/browser/esm/DhKkrCVASZ6Isvz6.mjs +527 -0
  24. package/browser/esm/Di58Ji1n--3Mgc_2.mjs +607 -0
  25. package/browser/esm/Dtoyt8q5RyGAlxCp.mjs +1141 -0
  26. package/browser/esm/Y79I7Sm8kjaYexhf.mjs +167 -0
  27. package/browser/esm/index.mjs +1472 -1023
  28. package/browser/esm/o8MFgcVXns987D6_.mjs +400 -0
  29. package/browser/esm/zqJOaweiXE9D8RY1.mjs +66681 -0
  30. package/licenses/dependencies.txt +209 -209
  31. package/node/esm/B6D7sSetrcOWLsKj.mjs +1135 -0
  32. package/node/esm/B9ljpEIZg6wOTzRE.mjs +142 -0
  33. package/node/esm/BH1v-E4Ro3bR7Znw.mjs +962 -0
  34. package/node/esm/BN9j8V9gCExMjVtJ.mjs +540 -0
  35. package/node/esm/{Cku7XiUvw1xrRasi.mjs → Bh4dv6tMjXX3X4nI.mjs} +1 -1
  36. package/node/esm/Bqd62L8KFgdS0Vou.mjs +7 -0
  37. package/node/esm/Bsx9uijd4X_SKV3L.mjs +360 -0
  38. package/node/esm/BtuY37FumvLE7EBo.mjs +629 -0
  39. package/node/esm/C6ZXsNyLXI6zA63X.mjs +402 -0
  40. package/node/esm/CCouEwT37f08qO3V.mjs +7 -0
  41. package/node/esm/CD9wbvufChVYYkrI.mjs +451 -0
  42. package/node/esm/CImNvdz1iP-lUlro.mjs +610 -0
  43. package/node/esm/CT0CN82y0_Qgoryk.mjs +7568 -0
  44. package/node/esm/CUQi5ZtMO02nhG0W.mjs +596 -0
  45. package/node/esm/CUUoseJmFsCf82bb.mjs +28 -0
  46. package/node/esm/CnSQ7MTXAUAyBOoS.mjs +911 -0
  47. package/node/esm/D7MfcID2Wf6l6VpC.mjs +171 -0
  48. package/node/esm/DCplLG93GfTs1vNw.mjs +1860 -0
  49. package/node/esm/DHUADiCmxNQS1ARz.mjs +417 -0
  50. package/node/esm/DMD12JUh7HJw2-jl.mjs +638 -0
  51. package/node/esm/DdFgXl-Ux2cMBTs_.mjs +15 -0
  52. package/node/esm/DefYISWfdZJFx57m.mjs +255 -0
  53. package/node/esm/Ds0d8zXzmgOu3MGx.mjs +403 -0
  54. package/node/esm/MiU4rDOiocmJ-9Ry.mjs +1783 -0
  55. package/node/esm/index.mjs +51616 -39665
  56. package/package.json +15 -16
  57. package/resources/contents.json +64 -0
  58. package/resources/fonts/arial-bold-italic.metrics.json +139 -0
  59. package/resources/fonts/arial-bold.metrics.json +139 -0
  60. package/resources/fonts/arial-italic.metrics.json +139 -0
  61. package/resources/fonts/arial-regular.metrics.json +139 -0
  62. package/resources/fonts/calibri-bold-italic.metrics.json +137 -0
  63. package/resources/fonts/calibri-bold.metrics.json +137 -0
  64. package/resources/fonts/calibri-italic.metrics.json +137 -0
  65. package/resources/fonts/calibri-regular.metrics.json +137 -0
  66. package/resources/fonts/cambria-bold-italic.metrics.json +66 -0
  67. package/resources/fonts/cambria-bold.metrics.json +66 -0
  68. package/resources/fonts/cambria-italic.metrics.json +66 -0
  69. package/resources/fonts/cambria-regular.metrics.json +66 -0
  70. package/resources/fonts/contents.json +126 -0
  71. package/resources/fonts/courier-new-bold-italic.metrics.json +143 -0
  72. package/resources/fonts/courier-new-bold.metrics.json +143 -0
  73. package/resources/fonts/courier-new-italic.metrics.json +143 -0
  74. package/resources/fonts/courier-new-regular.metrics.json +143 -0
  75. package/resources/fonts/times-new-roman-bold-italic.metrics.json +141 -0
  76. package/resources/fonts/times-new-roman-bold.metrics.json +141 -0
  77. package/resources/fonts/times-new-roman-italic.metrics.json +143 -0
  78. package/resources/fonts/times-new-roman-regular.metrics.json +141 -0
  79. package/resources/locales/de/model.msg.json +112 -12
  80. package/resources/locales/en/model.msg.json +119 -13
  81. package/types/scripting-api.json +8048 -0
  82. package/types/scripting-enums.json +277 -110
  83. package/types/scripting.d.ts +13077 -3224
  84. package/types/src/anchored/AbstractAnchored.d.ts +18 -8
  85. package/types/src/anchored/AnchoredMap.d.ts +2 -0
  86. package/types/src/anchored/IAnchoredMap.d.ts +52 -4
  87. package/types/src/autoFill/AutoFill.d.ts +316 -32
  88. package/types/src/autoFill/IAutoFill.d.ts +232 -15
  89. package/types/src/border/{IBorder.d.ts → IBorders.d.ts} +42 -41
  90. package/types/src/border/index.d.ts +1 -1
  91. package/types/src/calculation/Calculation.d.ts +754 -49
  92. package/types/src/calculation/ExternalBookBindings.d.ts +118 -0
  93. package/types/src/calculation/FormulaText.d.ts +82 -0
  94. package/types/src/calculation/ICalculation.d.ts +318 -81
  95. package/types/src/calculation/INamedFormulasCollection.d.ts +5 -8
  96. package/types/src/calculation/NamedFormulaCollection.d.ts +139 -107
  97. package/types/src/calculation/NamedLambdaFunction.d.ts +28 -0
  98. package/types/src/calculation/TokenType.d.ts +9 -0
  99. package/types/src/calculation/Types.d.ts +83 -2
  100. package/types/src/calculation/_CloneBoundary.d.ts +80 -0
  101. package/types/src/calculation/_TableRename.d.ts +13 -0
  102. package/types/src/calculation/compiler/ASTTypes.d.ts +71 -0
  103. package/types/src/calculation/compiler/CompilerUtils.d.ts +135 -44
  104. package/types/src/calculation/compiler/FormulaCompiler.d.ts +29 -4
  105. package/types/src/calculation/compiler/FormulaParser.d.ts +1 -2
  106. package/types/src/calculation/compiler/LiteTransform.d.ts +17 -0
  107. package/types/src/calculation/compiler/ParserUtils.d.ts +26 -1
  108. package/types/src/calculation/compiler/SRParser.d.ts +2 -1
  109. package/types/src/calculation/compiler/Types.d.ts +79 -9
  110. package/types/src/calculation/executor/CalcExecutor.d.ts +312 -33
  111. package/types/src/calculation/executor/CalcExecutorUtils.d.ts +43 -2
  112. package/types/src/calculation/executor/CircularReference.d.ts +2 -0
  113. package/types/src/calculation/formula/Formula.d.ts +58 -21
  114. package/types/src/calculation/formula/FormulaBlock.d.ts +125 -23
  115. package/types/src/calculation/formula/FormulaRecordView.d.ts +79 -0
  116. package/types/src/calculation/formula/FunctionValues.d.ts +10 -0
  117. package/types/src/calculation/formula/IFormulaBlock.d.ts +261 -67
  118. package/types/src/calculation/formula/LambdaValue.d.ts +46 -23
  119. package/types/src/calculation/formula/LazyValue.d.ts +96 -0
  120. package/types/src/calculation/formula/TokenUtils.d.ts +25 -1
  121. package/types/src/calculation/formula/index.d.ts +1 -0
  122. package/types/src/calculation/functions/FunctionDeclarations.d.ts +31 -0
  123. package/types/src/calculation/functions/Operators.d.ts +8 -0
  124. package/types/src/calculation/functions/initializeFunctions.d.ts +15 -2
  125. package/types/src/calculation/grid/CalcGrid.d.ts +407 -158
  126. package/types/src/calculation/grid/CalcGridBackend.d.ts +493 -0
  127. package/types/src/calculation/grid/CalcGridProxy.d.ts +133 -0
  128. package/types/src/calculation/grid/CalcGridUtils.d.ts +62 -12
  129. package/types/src/calculation/grid/FormulaEntry.d.ts +129 -0
  130. package/types/src/calculation/grid/FormulaHost.d.ts +239 -0
  131. package/types/src/calculation/grid/ICalcGrid.d.ts +499 -141
  132. package/types/src/calculation/grid/_CalcRequest.d.ts +289 -0
  133. package/types/src/calculation/grid/index.d.ts +4 -0
  134. package/types/src/calculation/index.d.ts +2 -0
  135. package/types/src/calculation/spatial/ContentfulSpatialValue.d.ts +6 -2
  136. package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +339 -11
  137. package/types/src/calculation/spatial/SpillEntry.d.ts +20 -5
  138. package/types/src/calculation/spatial/TouchedWindows.d.ts +86 -0
  139. package/types/src/calculation/spatial/index.d.ts +1 -0
  140. package/types/src/calculation/state/CalcInputs.d.ts +41 -0
  141. package/types/src/calculation/state/CalcNode.d.ts +141 -30
  142. package/types/src/calculation/state/CalcScope.d.ts +37 -0
  143. package/types/src/calculation/state/CalcState.d.ts +22 -1
  144. package/types/src/calculation/state/CalculationContext.d.ts +50 -3
  145. package/types/src/calculation/state/IContextContainer.d.ts +129 -27
  146. package/types/src/calculation/state/_PendingOverlayGrid.d.ts +163 -0
  147. package/types/src/calculation/state/_ReadObservedGrid.d.ts +74 -8
  148. package/types/src/calculation/state/index.d.ts +1 -0
  149. package/types/src/calculation/symbol/ExternalSheetSymbols.d.ts +80 -0
  150. package/types/src/calculation/symbol/ISymbolRegistry.d.ts +23 -0
  151. package/types/src/calculation/symbol/IndirectSymbolProvider.d.ts +16 -2
  152. package/types/src/calculation/symbol/SheetSymbolProvider.d.ts +63 -3
  153. package/types/src/calculation/symbol/SymbolRegistry.d.ts +20 -0
  154. package/types/src/calculation/symbol/index.d.ts +3 -2
  155. package/types/src/cell/ICell.d.ts +104 -29
  156. package/types/src/cell/ICellHeader.d.ts +24 -2
  157. package/types/src/cell/ICellProtection.d.ts +50 -10
  158. package/types/src/cellRange/ICellRange.d.ts +419 -79
  159. package/types/src/cellRange/ICellRanges.d.ts +23 -21
  160. package/types/src/chart/Chart.d.ts +41 -13
  161. package/types/src/chart/ChartCollection.d.ts +26 -0
  162. package/types/src/chart/IChart.d.ts +166 -12
  163. package/types/src/chart/IChartCollection.d.ts +25 -0
  164. package/types/src/chart/_ChartXml.d.ts +70 -0
  165. package/types/src/chart/index.d.ts +1 -3
  166. package/types/src/collections/ArraysGrid.d.ts +1 -1
  167. package/types/src/collections/IGrid.d.ts +1 -1
  168. package/types/src/collections/ISparseGrid.d.ts +9 -0
  169. package/types/src/collections/ISpatialMap.d.ts +59 -21
  170. package/types/src/collections/ImmutableList.d.ts +28 -0
  171. package/types/src/collections/MixedTypedArrayList.d.ts +168 -108
  172. package/types/src/collections/OverlappingRangeIterator.d.ts +13 -17
  173. package/types/src/collections/RepeatingList.d.ts +7 -0
  174. package/types/src/collections/ScalarGrid.d.ts +50 -0
  175. package/types/src/collections/SparseGrid.d.ts +1 -1
  176. package/types/src/collections/SpatialMap.d.ts +13 -21
  177. package/types/src/collections/Tuple.d.ts +128 -16
  178. package/types/src/collections/_GridUtils.d.ts +19 -6
  179. package/types/src/collections/_RangeSweep.d.ts +97 -0
  180. package/types/src/collections/_SpatialUtils.d.ts +20 -2
  181. package/types/src/collections/index.d.ts +1 -0
  182. package/types/src/color/_BuiltInIndexDefs.d.ts +6 -0
  183. package/types/src/comment/Comment.d.ts +223 -0
  184. package/types/src/comment/CommentCollection.d.ts +40 -0
  185. package/types/src/comment/IComment.d.ts +340 -50
  186. package/types/src/comment/ICommentCollection.d.ts +90 -0
  187. package/types/src/comment/NoteMovable.d.ts +26 -0
  188. package/types/src/comment/_CommentUtils.d.ts +50 -0
  189. package/types/src/comment/_NoteBox.d.ts +50 -0
  190. package/types/src/comment/index.d.ts +1 -0
  191. package/types/src/condition/AnchoredConditional.d.ts +82 -17
  192. package/types/src/condition/BuiltInOperators/AbstractOperator.d.ts +42 -12
  193. package/types/src/condition/BuiltInOperators/AfterEqualToOperator.d.ts +2 -0
  194. package/types/src/condition/BuiltInOperators/AfterOperator.d.ts +2 -0
  195. package/types/src/condition/BuiltInOperators/AndOperator.d.ts +3 -1
  196. package/types/src/condition/BuiltInOperators/AverageOperator.d.ts +2 -0
  197. package/types/src/condition/BuiltInOperators/BeforeEqualToOperator.d.ts +2 -0
  198. package/types/src/condition/BuiltInOperators/BeforeOperator.d.ts +2 -0
  199. package/types/src/condition/BuiltInOperators/BetweenOperator.d.ts +2 -0
  200. package/types/src/condition/BuiltInOperators/ColorOperator.d.ts +4 -0
  201. package/types/src/condition/BuiltInOperators/ContainsOperator.d.ts +2 -0
  202. package/types/src/condition/BuiltInOperators/EndsWithOperator.d.ts +2 -0
  203. package/types/src/condition/BuiltInOperators/EqualToOperator.d.ts +4 -1
  204. package/types/src/condition/BuiltInOperators/ExpressionOperator.d.ts +5 -6
  205. package/types/src/condition/BuiltInOperators/GreaterThanEqualToOperator.d.ts +2 -0
  206. package/types/src/condition/BuiltInOperators/GreaterThanOperator.d.ts +2 -0
  207. package/types/src/condition/BuiltInOperators/IconOperator.d.ts +4 -0
  208. package/types/src/condition/BuiltInOperators/InSetOperator.d.ts +22 -5
  209. package/types/src/condition/BuiltInOperators/LessThanEqualToOperator.d.ts +2 -0
  210. package/types/src/condition/BuiltInOperators/LessThanOperator.d.ts +2 -0
  211. package/types/src/condition/BuiltInOperators/NotOperator.d.ts +2 -0
  212. package/types/src/condition/BuiltInOperators/OrOperator.d.ts +3 -1
  213. package/types/src/condition/BuiltInOperators/StartsWithOperator.d.ts +2 -0
  214. package/types/src/condition/BuiltInOperators/TimePeriodOperator.d.ts +2 -0
  215. package/types/src/condition/BuiltInOperators/TopNOperator.d.ts +6 -0
  216. package/types/src/condition/BuiltinSelectors/BaseSelector.d.ts +21 -6
  217. package/types/src/condition/BuiltinSelectors/DateSelector.d.ts +4 -5
  218. package/types/src/condition/BuiltinSelectors/DisplaySelector.d.ts +20 -0
  219. package/types/src/condition/BuiltinSelectors/TextLengthSelector.d.ts +7 -5
  220. package/types/src/condition/BuiltinSelectors/TimeSelector.d.ts +3 -5
  221. package/types/src/condition/BuiltinSelectors/WholeSelector.d.ts +3 -5
  222. package/types/src/condition/BuiltinSelectors/index.d.ts +12 -6
  223. package/types/src/condition/Condition.d.ts +19 -1
  224. package/types/src/condition/ICondition.d.ts +293 -73
  225. package/types/src/condition/_ConditionFormula.d.ts +152 -0
  226. package/types/src/condition/_ConditionUtils.d.ts +167 -13
  227. package/types/src/conditionalFormat/ConditionalEntry.d.ts +3 -3
  228. package/types/src/conditionalFormat/ConditionalFormat.d.ts +25 -14
  229. package/types/src/conditionalFormat/ConditionalFormatCollection.d.ts +19 -8
  230. package/types/src/conditionalFormat/IConditionalFormat.d.ts +12 -10
  231. package/types/src/conditionalFormat/IConditionalFormatCollection.d.ts +2 -0
  232. package/types/src/dataValidation/DataValidation.d.ts +69 -3
  233. package/types/src/dataValidation/DataValidationCollection.d.ts +20 -9
  234. package/types/src/dataValidation/IDataValidation.d.ts +149 -30
  235. package/types/src/dataValidation/IDataValidationCollection.d.ts +10 -2
  236. package/types/src/date/DateUtils.d.ts +20 -0
  237. package/types/src/date/_DateUtils.d.ts +91 -7
  238. package/types/src/externalBook/ExternalBookCollection.d.ts +145 -12
  239. package/types/src/externalBook/ExternalBookName.d.ts +96 -0
  240. package/types/src/externalBook/IExternalBook.d.ts +170 -18
  241. package/types/src/externalBook/IExternalBookCollection.d.ts +79 -7
  242. package/types/src/externalBook/index.d.ts +1 -0
  243. package/types/src/{lib/file → file}/file.browser.d.ts +22 -8
  244. package/types/src/{lib/file → file}/file.node.d.ts +7 -2
  245. package/types/src/fill/IEffect.d.ts +5 -5
  246. package/types/src/fill/IFill.d.ts +123 -78
  247. package/types/src/fill/IStroke.d.ts +190 -64
  248. package/types/src/fill/RectAlignment.d.ts +20 -0
  249. package/types/src/fill/_Fills.d.ts +187 -0
  250. package/types/src/fill/_Stroke.d.ts +89 -0
  251. package/types/src/fill/index.d.ts +1 -0
  252. package/types/src/filter/IFilter.d.ts +188 -5
  253. package/types/src/font/AdvanceBuilder.d.ts +25 -0
  254. package/types/src/font/AdvanceTable.d.ts +114 -0
  255. package/types/src/font/FontCollection.d.ts +57 -0
  256. package/types/src/font/IFont.d.ts +17 -0
  257. package/types/src/font/IFontCollection.d.ts +120 -22
  258. package/types/src/font/TableFileAdvanceBuilder.d.ts +27 -0
  259. package/types/src/font/_BuiltinFontTables.d.ts +10 -0
  260. package/types/src/font/index.d.ts +4 -1
  261. package/types/src/group/Group.d.ts +136 -0
  262. package/types/src/group/GroupMovableCollection.d.ts +37 -0
  263. package/types/src/group/IGroup.d.ts +129 -0
  264. package/types/src/group/index.d.ts +2 -0
  265. package/types/src/history/IHistory.d.ts +3 -2
  266. package/types/src/hyperlink/IHyperlink.d.ts +13 -0
  267. package/types/src/hyperlink/_Hyperlink.d.ts +5 -1
  268. package/types/src/i18n/LanguagePack.d.ts +12 -4
  269. package/types/src/index.d.ts +5 -0
  270. package/types/src/io/AbstractBackingStore.d.ts +24 -1
  271. package/types/src/io/ArrayBackingStore.d.ts +1 -1
  272. package/types/src/io/EmbeddedPart.d.ts +20 -0
  273. package/types/src/io/IEmbeddedPart.d.ts +63 -0
  274. package/types/src/io/IWorkbookIO.d.ts +185 -18
  275. package/types/src/io/WorkbookIO.d.ts +9 -0
  276. package/types/src/io/WorkbookOrigin.d.ts +20 -11
  277. package/types/src/io/WorkbookOriginProvider.d.ts +46 -0
  278. package/types/src/io/_XmlFragment.d.ts +49 -0
  279. package/types/src/io/index.d.ts +1 -0
  280. package/types/src/license/LicenseDetails.d.ts +1 -0
  281. package/types/src/license/LicenseManager.d.ts +4 -1
  282. package/types/src/license/Types.d.ts +38 -0
  283. package/types/src/license/_Utils.d.ts +22 -0
  284. package/types/src/license/details.d.ts +24 -0
  285. package/types/src/license/license-key.d.ts +49 -2
  286. package/types/src/license/runtime.browser.d.ts +41 -0
  287. package/types/src/{lib/utils/utils.node.d.ts → license/runtime.node.d.ts} +9 -12
  288. package/types/src/listener/IListener.d.ts +12 -7
  289. package/types/src/listener/ListenerEmitter.d.ts +46 -5
  290. package/types/src/model/AbstractModel.d.ts +14 -5
  291. package/types/src/movable/AbstractMovableContent.d.ts +182 -0
  292. package/types/src/movable/CustomElement.d.ts +4 -5
  293. package/types/src/movable/ErrorContent.d.ts +49 -0
  294. package/types/src/movable/FormControl.d.ts +285 -0
  295. package/types/src/movable/GroupMember.d.ts +87 -0
  296. package/types/src/movable/ICustomElement.d.ts +7 -2
  297. package/types/src/movable/IErrorContent.d.ts +23 -0
  298. package/types/src/movable/IFormControl.d.ts +455 -0
  299. package/types/src/movable/IMovable.d.ts +378 -46
  300. package/types/src/movable/IMovableCollection.d.ts +63 -3
  301. package/types/src/movable/Movable.d.ts +149 -49
  302. package/types/src/movable/MovableCollection.d.ts +15 -8
  303. package/types/src/movable/MovableContentRegistry.d.ts +113 -0
  304. package/types/src/movable/_BuiltInContents.d.ts +14 -0
  305. package/types/src/movable/_ContentFactory.d.ts +35 -0
  306. package/types/src/movable/_DrawnBounds.d.ts +37 -0
  307. package/types/src/movable/_InsertableCollection.d.ts +28 -0
  308. package/types/src/movable/_MovableUtils.d.ts +5 -0
  309. package/types/src/movable/_PendingContent.d.ts +25 -0
  310. package/types/src/movable/_PlacementUtils.d.ts +55 -0
  311. package/types/src/movable/_RotatedFrame.d.ts +20 -0
  312. package/types/src/movable/index.d.ts +7 -1
  313. package/types/src/named/AbstractNamed.d.ts +1 -1
  314. package/types/src/named/INamed.d.ts +4 -1
  315. package/types/src/named/INamedCollection.d.ts +26 -0
  316. package/types/src/named/NamedCollection.d.ts +16 -15
  317. package/types/src/numFmt/BuiltInFormats.d.ts +20 -7
  318. package/types/src/numFmt/IFormatEngine.d.ts +2 -0
  319. package/types/src/numFmt/NumfmtFormatEngine.d.ts +2 -0
  320. package/types/src/numFmt/_FormatCell.d.ts +11 -2
  321. package/types/src/numFmt/_NumFmtUtils.d.ts +0 -1
  322. package/types/src/numFmt/vendor/numfmt/_sheetxl.d.ts +6 -0
  323. package/types/src/outline/IOutline.d.ts +186 -0
  324. package/types/src/outline/Outline.d.ts +157 -0
  325. package/types/src/outline/index.d.ts +2 -0
  326. package/types/src/person/IPerson.d.ts +99 -0
  327. package/types/src/person/IPersonCollection.d.ts +51 -0
  328. package/types/src/person/Person.d.ts +32 -0
  329. package/types/src/person/PersonCollection.d.ts +49 -0
  330. package/types/src/person/index.d.ts +4 -0
  331. package/types/src/picture/IPicture.d.ts +33 -3
  332. package/types/src/picture/Picture.d.ts +33 -13
  333. package/types/src/pivot/IPivotTable.d.ts +72 -0
  334. package/types/src/pivot/IPivotTableCollection.d.ts +25 -0
  335. package/types/src/pivot/PivotCache.d.ts +34 -0
  336. package/types/src/pivot/PivotTable.d.ts +61 -0
  337. package/types/src/pivot/PivotTableCollection.d.ts +25 -0
  338. package/types/src/pivot/_PivotXml.d.ts +24 -0
  339. package/types/src/pivot/index.d.ts +6 -0
  340. package/types/src/primitives/CompositeRangeStats.d.ts +2 -0
  341. package/types/src/primitives/Criteria.d.ts +1 -1
  342. package/types/src/primitives/Grouping.d.ts +65 -0
  343. package/types/src/primitives/LambdaBrand.d.ts +26 -0
  344. package/types/src/primitives/PrimitiveUtils.d.ts +56 -19
  345. package/types/src/primitives/Range.d.ts +133 -25
  346. package/types/src/primitives/RangeStats.d.ts +30 -2
  347. package/types/src/primitives/ReferenceRange.d.ts +44 -0
  348. package/types/src/primitives/Runtime.d.ts +15 -2
  349. package/types/src/primitives/environment.browser.d.ts +9 -0
  350. package/types/src/primitives/environment.node.d.ts +10 -0
  351. package/types/src/primitives/stats/AggregateStats.d.ts +49 -15
  352. package/types/src/primitives/stats/Cancellation.d.ts +13 -0
  353. package/types/src/primitives/stats/FrequencyStats.d.ts +10 -1
  354. package/types/src/primitives/stats/LookupIndex.d.ts +46 -0
  355. package/types/src/primitives/stats/Ranked.d.ts +1 -1
  356. package/types/src/primitives/stats/SortedNumbers.d.ts +4 -2
  357. package/types/src/primitives/stats/index.d.ts +1 -0
  358. package/types/src/print/IPrint.d.ts +0 -22
  359. package/types/src/protectedRange/IProtectedRange.d.ts +4 -0
  360. package/types/src/protectedRange/IProtectedRangeCollection.d.ts +2 -0
  361. package/types/src/protectedRange/ProtectedRange.d.ts +1 -4
  362. package/types/src/protectedRange/ProtectedRangeCollection.d.ts +19 -8
  363. package/types/src/protection/DefaultProtection.d.ts +12 -1
  364. package/types/src/protection/IProtection.d.ts +36 -2
  365. package/types/src/reference/ReferenceUtils.d.ts +80 -0
  366. package/types/src/reference/index.d.ts +2 -0
  367. package/types/src/resource/IResource.d.ts +21 -1
  368. package/types/src/resource/IResourceCollection.d.ts +9 -1
  369. package/types/src/resource/ResourceCollection.d.ts +6 -6
  370. package/types/src/scripting/FunctionCollection.d.ts +49 -15
  371. package/types/src/scripting/IFunctionCollection.d.ts +62 -32
  372. package/types/src/scripting/IModule.d.ts +25 -0
  373. package/types/src/scripting/IModuleCollection.d.ts +17 -0
  374. package/types/src/scripting/IScript.d.ts +28 -26
  375. package/types/src/scripting/Module.d.ts +34 -6
  376. package/types/src/scripting/ModuleCollection.d.ts +17 -12
  377. package/types/src/scripting/Runtime.d.ts +15 -0
  378. package/types/src/scripting/Scripts.d.ts +3 -7
  379. package/types/src/scripting/TypedFunction.d.ts +154 -18
  380. package/types/src/scripting/_FunctionIndex.d.ts +8 -3
  381. package/types/src/scripting/_ModuleUtils.d.ts +11 -1
  382. package/types/src/scripting/_ScriptUtils.d.ts +3 -0
  383. package/types/src/scripting/declarations.browser.d.ts +10 -0
  384. package/types/src/scripting/declarations.d.ts +49 -0
  385. package/types/src/scripting/declarations.node.d.ts +9 -0
  386. package/types/src/scripting/index.d.ts +3 -0
  387. package/types/src/selection/IMovableSelection.d.ts +148 -0
  388. package/types/src/selection/IRangeSelection.d.ts +9 -4
  389. package/types/src/selection/MovableSelection.d.ts +48 -0
  390. package/types/src/selection/RangeSelection.d.ts +15 -0
  391. package/types/src/selection/index.d.ts +1 -0
  392. package/types/src/shape/GeometryPreset.d.ts +197 -0
  393. package/types/src/shape/IGeometry.d.ts +380 -0
  394. package/types/src/shape/IShape.d.ts +341 -194
  395. package/types/src/shape/IShapeStyle.d.ts +135 -0
  396. package/types/src/shape/Shape.d.ts +107 -21
  397. package/types/src/shape/ShapeStyleUtils.d.ts +54 -0
  398. package/types/src/shape/_ConnectorFrame.d.ts +32 -0
  399. package/types/src/shape/_ConnectorRoute.d.ts +33 -0
  400. package/types/src/shape/_Connectors.d.ts +108 -0
  401. package/types/src/shape/_Geometry.d.ts +14 -0
  402. package/types/src/shape/_GeometryLoader.d.ts +21 -0
  403. package/types/src/shape/_ShapeStyle.d.ts +70 -0
  404. package/types/src/shape/_builtIn/_BuiltInChunks.d.ts +10 -0
  405. package/types/src/shape/_builtIn/_BuiltInDef.d.ts +9 -0
  406. package/types/src/shape/_builtIn/arrows.d.ts +6 -0
  407. package/types/src/shape/_builtIn/basic.d.ts +6 -0
  408. package/types/src/shape/_builtIn/callouts.d.ts +6 -0
  409. package/types/src/shape/_builtIn/flowchart.d.ts +6 -0
  410. package/types/src/shape/_builtIn/lines.d.ts +6 -0
  411. package/types/src/shape/_builtIn/math.d.ts +6 -0
  412. package/types/src/shape/_builtIn/other.d.ts +6 -0
  413. package/types/src/shape/_builtIn/rectangles.d.ts +6 -0
  414. package/types/src/shape/_builtIn/starsBanners.d.ts +6 -0
  415. package/types/src/shape/geometry/_strokeEnds.d.ts +7 -0
  416. package/types/src/shape/geometry/format.d.ts +3 -0
  417. package/types/src/shape/geometry/geometry.d.ts +85 -0
  418. package/types/src/shape/geometry/guides.d.ts +54 -0
  419. package/types/src/shape/geometry/handles.d.ts +14 -0
  420. package/types/src/shape/geometry/index.d.ts +7 -0
  421. package/types/src/shape/geometry/lineEnds.d.ts +54 -0
  422. package/types/src/shape/geometry/paths.d.ts +35 -0
  423. package/types/src/shape/geometry/segments.d.ts +114 -0
  424. package/types/src/shape/index.d.ts +3 -0
  425. package/types/src/sheet/CellRegion.d.ts +6 -0
  426. package/types/src/sheet/ICellContainerOptions.d.ts +50 -0
  427. package/types/src/sheet/ISheet.d.ts +197 -50
  428. package/types/src/sheet/ISheetCollection.d.ts +2 -5
  429. package/types/src/sheet/NamedCellRange.d.ts +16 -7
  430. package/types/src/sheet/NamedRange.d.ts +8 -0
  431. package/types/src/sheet/Sheet.d.ts +915 -138
  432. package/types/src/sheet/SheetCell.d.ts +92 -32
  433. package/types/src/sheet/SheetCollection.d.ts +19 -8
  434. package/types/src/sheet/SheetRange.d.ts +90 -18
  435. package/types/src/sheet/SheetRanges.d.ts +22 -9
  436. package/types/src/sheet/_CellBuffer.d.ts +214 -0
  437. package/types/src/sheet/_HeldFormula.d.ts +69 -0
  438. package/types/src/sheet/_InvalidSheetRange.d.ts +7 -7
  439. package/types/src/sheet/_ListenerAnchor.d.ts +104 -0
  440. package/types/src/sheet/_RangeStateSweep.d.ts +16 -0
  441. package/types/src/sheet/_ScalarListFactory.d.ts +61 -0
  442. package/types/src/sheet/_SheetAutoFillUtils.d.ts +74 -0
  443. package/types/src/sheet/_SheetAutoFitUtils.d.ts +2 -2
  444. package/types/src/sheet/_SheetEvents.d.ts +43 -0
  445. package/types/src/sheet/_SheetFilterUtils.d.ts +49 -1
  446. package/types/src/sheet/_SheetIntents.d.ts +296 -0
  447. package/types/src/sheet/_SheetMutations.d.ts +182 -62
  448. package/types/src/sheet/_SheetStateReader.d.ts +19 -13
  449. package/types/src/sheet/_SheetStateTypes.d.ts +83 -78
  450. package/types/src/sheet/_SheetUtils.d.ts +39 -22
  451. package/types/src/sheet/_WatchAnchor.d.ts +93 -0
  452. package/types/src/sheet/spatial/HeldFormulaEntry.d.ts +36 -0
  453. package/types/src/sheet/spatial/index.d.ts +1 -0
  454. package/types/src/sheet/style/SheetCellStyle.d.ts +209 -304
  455. package/types/src/sheet/style/SheetDirectStyle.d.ts +30 -19
  456. package/types/src/sheet/style/SheetNamedStyle.d.ts +17 -17
  457. package/types/src/sheet/style/SheetTableStyle.d.ts +5 -5
  458. package/types/src/sheet/style/_Resolvers.d.ts +14 -8
  459. package/types/src/sheet/style/_StyleUtils.d.ts +38 -8
  460. package/types/src/sheetHeader/ISheetHeader.d.ts +94 -53
  461. package/types/src/sheetHeader/SheetCellHeader.d.ts +4 -0
  462. package/types/src/sheetHeader/SheetHeader.d.ts +42 -22
  463. package/types/src/sheetHeader/_HeaderMetrics.d.ts +37 -0
  464. package/types/src/sheetHeader/_HeaderUtils.d.ts +5 -3
  465. package/types/src/sheetProtection/ISheetProtection.d.ts +41 -7
  466. package/types/src/sheetProtection/SheetProtection.d.ts +12 -0
  467. package/types/src/sheetView/ISheetView.d.ts +69 -15
  468. package/types/src/sheetView/SheetView.d.ts +20 -11
  469. package/types/src/slicer/ISlicer.d.ts +304 -17
  470. package/types/src/slicer/ISlicerStyle.d.ts +109 -0
  471. package/types/src/slicer/Slicer.d.ts +128 -13
  472. package/types/src/slicer/SlicerStyle.d.ts +25 -0
  473. package/types/src/slicer/_BuiltInSlicerStyles.d.ts +13 -0
  474. package/types/src/slicer/_SlicerUtils.d.ts +30 -0
  475. package/types/src/slicer/index.d.ts +1 -0
  476. package/types/src/sort/ISort.d.ts +4 -2
  477. package/types/src/string/IStringCollection.d.ts +5 -0
  478. package/types/src/string/StringCollection.d.ts +6 -6
  479. package/types/src/style/{IStyle.d.ts → ICellStyle.d.ts} +72 -52
  480. package/types/src/style/INamedStyleCollection.d.ts +72 -0
  481. package/types/src/style/ISlicerStyleCollection.d.ts +77 -0
  482. package/types/src/style/IStyleCollection.d.ts +91 -60
  483. package/types/src/style/ITableStyleCollection.d.ts +89 -0
  484. package/types/src/style/NamedStyleCollection.d.ts +39 -0
  485. package/types/src/style/SlicerStyleCollection.d.ts +46 -0
  486. package/types/src/style/StyleCollection.d.ts +81 -26
  487. package/types/src/style/TableStyleCollection.d.ts +49 -0
  488. package/types/src/style/_BuiltInStyleDefs.d.ts +6 -6
  489. package/types/src/style/_BuiltInStyleNames.d.ts +2 -2
  490. package/types/src/style/index.d.ts +7 -1
  491. package/types/src/table/AnchoredTable.d.ts +701 -72
  492. package/types/src/table/AutoTable.d.ts +7 -5
  493. package/types/src/table/ITable.d.ts +261 -34
  494. package/types/src/table/ITableCollection.d.ts +12 -0
  495. package/types/src/table/ITableStyle.d.ts +37 -37
  496. package/types/src/table/TableCollection.d.ts +19 -8
  497. package/types/src/table/_FilterField.d.ts +19 -6
  498. package/types/src/table/_NamedTable.d.ts +17 -1
  499. package/types/src/table/_NamedTableSource.d.ts +1 -0
  500. package/types/src/table/_SortField.d.ts +2 -0
  501. package/types/src/table/_TableColumn.d.ts +13 -2
  502. package/types/src/table/_TableMessages.d.ts +1 -0
  503. package/types/src/table/_TableUtils.d.ts +40 -0
  504. package/types/src/text/Bullet.d.ts +4 -0
  505. package/types/src/text/IText.d.ts +182 -0
  506. package/types/src/text/ITextFrame.d.ts +110 -1
  507. package/types/src/text/TextBoxAlignment.d.ts +25 -16
  508. package/types/src/text/TextFrame.d.ts +4 -0
  509. package/types/src/text/TextLine.d.ts +4 -0
  510. package/types/src/text/TextParagraph.d.ts +4 -0
  511. package/types/src/text/TextRotation.d.ts +3 -3
  512. package/types/src/text/TextRun.d.ts +9 -0
  513. package/types/src/text/TextStacked.d.ts +83 -0
  514. package/types/src/text/index.d.ts +1 -0
  515. package/types/src/text/richtext/IRichText.d.ts +36 -0
  516. package/types/src/text/richtext/IStyledFont.d.ts +18 -18
  517. package/types/src/text/richtext/index.d.ts +1 -0
  518. package/types/src/theme/ITheme.d.ts +45 -4
  519. package/types/src/theme/IThemeCollection.d.ts +2 -0
  520. package/types/src/theme/ThemeCollection.d.ts +11 -7
  521. package/types/src/theme/_OfficeFormatScheme.d.ts +3 -0
  522. package/types/src/transaction/ITransaction.d.ts +258 -45
  523. package/types/src/transaction/Transaction.d.ts +101 -11
  524. package/types/src/transaction/TransactionUndoManager.d.ts +4 -1
  525. package/types/src/type/AbstractCollection.d.ts +101 -0
  526. package/types/src/type/ICollection.d.ts +117 -0
  527. package/types/src/type/ITypes.d.ts +9 -7
  528. package/types/src/type/index.d.ts +1 -0
  529. package/types/src/utils/_CSSUtils.d.ts +3 -3
  530. package/types/src/wasm/_sdkWasm.d.ts +7 -0
  531. package/types/src/wasm/index.d.ts +2 -0
  532. package/types/src/wasm/sdkWasm.d.ts +29 -0
  533. package/types/src/workbook/IWorkbook.d.ts +180 -40
  534. package/types/src/workbook/Workbook.d.ts +123 -10
  535. package/types/src/workbook/_WorkbookIntents.d.ts +36 -0
  536. package/types/src/workbookProtection/IWorkbookProtection.d.ts +7 -0
  537. package/types/src/workbookProtection/WorkbookProtection.d.ts +3 -0
  538. package/types/src/workbookView/IWorkbookView.d.ts +12 -0
  539. package/types/src/workbookView/WorkbookView.d.ts +5 -0
  540. package/browser/cjs/B7_pDFYCVzt-3hUs.cjs +0 -1
  541. package/browser/cjs/BatsV2UUraVDCRXm.cjs +0 -57
  542. package/browser/cjs/CUz53T65cRGQRgvv.cjs +0 -33
  543. package/browser/cjs/DU0kYUtdFa3jK-im.cjs +0 -1
  544. package/browser/cjs/Dv3x6zut1ZRUt3IF.cjs +0 -10
  545. package/browser/cjs/Dv4yIPLV98M5zLHa.cjs +0 -1
  546. package/browser/cjs/a0Z-SXs_N71CtqYb.cjs +0 -1
  547. package/browser/cjs/index.cjs +0 -3
  548. package/browser/esm/6JKSOvc5czaQB2Bj.mjs +0 -109
  549. package/browser/esm/BtuJ9AGzeURtAsGo.mjs +0 -51241
  550. package/browser/esm/DGU6sM25u0EWCKl1.mjs +0 -824
  551. package/browser/esm/f2G3QRgEbvFJcoa2.mjs +0 -4436
  552. package/node/esm/-pxdn3M3tc6PLHs7.mjs +0 -114
  553. package/node/esm/0n5bslM9jhO1JnI2.mjs +0 -843
  554. package/types/src/cellRange/_GraphNode.d.ts +0 -38
  555. package/types/src/condition/BuiltinSelectors/ListSelector.d.ts +0 -12
  556. package/types/src/dataValidation/_Utils.d.ts +0 -10
  557. package/types/src/lib/utils/_Utils.d.ts +0 -27
  558. package/types/src/lib/utils/utils.browser.d.ts +0 -33
  559. package/types/src/movable/IGroup.d.ts +0 -30
  560. package/types/src/movable/IMovableSelection.d.ts +0 -49
  561. package/types/src/sheet/listener/RangesListener.d.ts +0 -32
  562. package/types/src/sheet/listener/RangesListenerEntry.d.ts +0 -19
  563. package/types/src/sheet/listener/index.d.ts +0 -3
  564. /package/types/src/{lib/utils → license}/banner.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import { IFunction, IRange, IRuntime } from '@sheetxl/primitives';
2
- import { ISymbolRegistry } from '../symbol';
2
+ import { ISymbolRegistry, SheetCtx } from '../symbol';
3
3
  import { ICalculation } from '../ICalculation';
4
4
  import { ASTNode, ASTVisitor } from './ASTTypes';
5
5
  /**
@@ -33,14 +33,19 @@ export interface IFormulaCompiler {
33
33
  */
34
34
  scope?: string | null,
35
35
  /**
36
- * A structural transform applied to the parsed tree before compilation (pre-link) — the READ
37
- * half of the dialect hook. A format reader (io-xlsx) supplies its legacy unwrap here; typed
38
- * text compiles without one.
36
+ * Compile in the legacy entry era: the whole tree evaluates in implicit-intersection value
37
+ * mode (`ICalculation.JSON.legacyIntersect`). A loaded block that is not an array anchor, in a
38
+ * calculation in that era; typed text compiles without it.
39
39
  */
40
- formulaTransform?: ICalculation.FormulaTransform): CompiledFormula;
40
+ legacyIntersect?: boolean,
41
+ /**
42
+ * How SHEET scopes bind — a body linked inside an external book names that book's sheets
43
+ * (`SheetCtx.book`). A committed cell formula passes nothing and may mint a link.
44
+ */
45
+ sheetCtx?: SheetCtx): CompiledFormula;
41
46
  /**
42
47
  * Excel-parity **Formula AutoCorrect** at the TEXT level: repair `expression` by appending the
43
- * trailing closers (`)` / `}`) its unmatched openers imply. Purely lexical — brackets inside
48
+ * trailing closers (`]` / `)` / `}`) its unmatched openers imply. Purely lexical — brackets inside
44
49
  * string literals / structured references never count (they lex as single tokens), and the repair
45
50
  * is NOT validated here: the caller re-compiles and accepts it only when it parses clean (see
46
51
  * `ICalculation.IFormula.autoCorrect`).
@@ -162,10 +167,24 @@ export interface CompiledFormula {
162
167
  */
163
168
  bindings: number[];
164
169
  /**
165
- * Represents all references as absolute ranges.
170
+ * Reusable scratch for resolving references to absolute ranges: ONE pre-allocated
171
+ * `IRange.Coords` per {@link referencesRelative} entry, mutated in place at each resolution.
166
172
  *
167
173
  * @remarks
168
- * A cache
174
+ * The invariant every consumer must keep: **slot `k` always means declared reference `k`**
175
+ * (`CompiledPrecedent.value` is the slot for a leaf), and a resolution overwrites EVERY field
176
+ * of the slot — bounds and `scope` (`null` when unscoped, never left over from a previous
177
+ * resolution). Both resolution passes go through `toSimpleAbsoluteRange`, so the slots carry
178
+ * NO `$` marks: nothing on the evaluation path reads them from a resolved-absolute coords,
179
+ * and `_appendRootPrecedents` requires their absence (it stamps `$` onto copies from the
180
+ * compiler's per-axis flags, and only ever sets). Indexing by anything else (an execute
181
+ * position, an eval index) makes one object stand for different references between passes,
182
+ * and any field written conditionally then leaks across them — a bare `$A4` once inherited a
183
+ * stale cross-sheet scope this way and dereferenced against the wrong grid.
184
+ *
185
+ * The objects are yielded to callers (`evaluations`, precedent lists) and are only valid
186
+ * until the block's next resolution — a consumer that retains one across evaluations (or an
187
+ * `await`) must copy it.
169
188
  */
170
189
  referencesAbsolute: IRange.Coords[];
171
190
  /**
@@ -191,6 +210,16 @@ export interface CompiledFormula {
191
210
  * Because we manage as cells but update as ranges we need to track the start and end of the references.
192
211
  */
193
212
  referenceIndices: number[];
213
+ /**
214
+ * Positions in {@link referenceIndices} (so in `getReferences()`) of the cell and range
215
+ * literals that are value operands, in text order - the cells an entered formula inherits its
216
+ * number format from. A literal at a reference-typed parameter, a name, a structured reference
217
+ * and a `#REF!` are not listed.
218
+ *
219
+ * @remarks
220
+ * A cache, computed once at compile time from {@link ast}.
221
+ */
222
+ formatReferenceIndices: number[];
194
223
  /**
195
224
  * The formula's editor tokens (syntax highlighting, function/argument hints). Computed lazily and
196
225
  * cached on first call — most compiles (grid cells) never need them. On a parse failure this returns
@@ -223,7 +252,7 @@ export interface CompiledFormula {
223
252
  * @remarks
224
253
  * A cache, computed once at compile time from {@link ast}. What `IFormulaContext.filterTotals`
225
254
  * needs to answer per CELL, and computing it here is what keeps that answer free: the alternative
226
- * is re-inspecting a neighbour's formula on every recalculation of every enclosing total.
255
+ * is re-inspecting a neighbor's formula on every recalculation of every enclosing total.
227
256
  *
228
257
  * "Anywhere in its tree", not "is the outermost call" — measured, `=SUM(SUBTOTAL(9,A1:A3))` is
229
258
  * excluded from an enclosing SUBTOTAL exactly as a bare `=SUBTOTAL(9,A1:A3)` is. Resolved through
@@ -231,6 +260,47 @@ export interface CompiledFormula {
231
260
  * `_xlfn.`-prefixed one both answer correctly.
232
261
  */
233
262
  hasTotals: boolean;
263
+ /**
264
+ * Whether the formula names a VOLATILE function anywhere in its tree — the cell recalculates on
265
+ * every pass, whether or not that call is ever reached.
266
+ *
267
+ * @remarks
268
+ * Volatility is otherwise marked at RUNTIME, by the body (`IFormulaContext.markVolatile`), which
269
+ * was equivalent while every argument was evaluated. It stopped being equivalent with lazy
270
+ * arguments: `=IF(TRUE,1,RAND())` never runs `RAND` and would silently stop recalculating.
271
+ * Excel keeps it volatile — measured 2026-09-07, `probe-lazy-args.ps1` P1: the cell costs a full
272
+ * recalculation on every idle F9, for `RAND`, `NOW` and `OFFSET` alike, in an arm no branch
273
+ * selects. So the mark is a property of the formula TEXT and is collected here.
274
+ *
275
+ * The declaration answers it (`Volatile<T>` on the return), so a UDF counts exactly as a
276
+ * built-in does and no list of names lives in the engine. `IFormulaContext.markVolatile()`
277
+ * remains on the context for a function that cannot declare — it is not how a built-in says it.
278
+ */
279
+ hasVolatile: boolean;
280
+ /**
281
+ * Whether every cell of a block running this formula whose RELATIVE inputs are all blank must
282
+ * evaluate to the same value within one pass — so the engine may evaluate one of them and share
283
+ * the answer (PLAN-WATCHES-BLANK-AWARE §4).
284
+ *
285
+ * @remarks
286
+ * A property of the formula TEXT, like {@link hasVolatile}, and `false` whenever the text shows
287
+ * the answer could depend on which cell is asking: an implicit intersection, a name, an
288
+ * expression callee, or a function the registry does not know. `TODAY()` and `NOW()` are
289
+ * accepted: volatile, but one value per pass. So are `RAND()` and every function taking a
290
+ * reference (`ROW()`, `OFFSET`, `FORMULATEXT`, the `SUMIF` family): whether the body reads a
291
+ * position (or draws) is a per-cell READ (`CalcScope.perCellRead`) that the pass sees when it
292
+ * evaluates the representative, not a property of the text. The block adds its own gates (a
293
+ * precedent template, not array-entered) and the pass its run-time ones (no dynamic read, no
294
+ * per-cell read, a scalar result); this is only the half that can be known from the text.
295
+ */
296
+ isBlankCacheable: boolean;
297
+ /**
298
+ * {@link isBlankCacheable} for a block evaluated in ARRAY mode throughout — every cell its own
299
+ * 1x1 array-entered extent (a conditional-format body). The same refusals less the value-mode
300
+ * one: with nothing intersecting, a value-or-range slot over a multi-cell reference reads the
301
+ * same cells at every cell.
302
+ */
303
+ isBlankCacheableArray: boolean;
234
304
  /**
235
305
  * Indicates if the formula is reference-only (i.e. it only returns a range and does not return a scalar value).
236
306
  */
@@ -1,8 +1,9 @@
1
1
  import { IRange, IFormulaContext } from '@sheetxl/primitives';
2
2
  import { FixedPackedArray } from '../../primitives/PrimitiveUtils';
3
+ import { PendingOverlayGrid } from '../state/_PendingOverlayGrid';
3
4
  import { ISpatialMap, ISpatialMap3D } from '../../collections';
4
5
  import { FormulaSpatialValue, PrecedentSpatialValue, PrecedentKind } from '../spatial';
5
- import { ICalcGrid } from '../grid';
6
+ import { ICalcGrid, CalcGridBackend } from '../grid';
6
7
  import { IContextContainer, CalcNode } from '../state';
7
8
  import { ReadHook } from '../state/_ReadObservedGrid';
8
9
  import { CircularReference, CycleHost } from './CircularReference';
@@ -53,13 +54,41 @@ export declare class CalcExecutor {
53
54
  * Lengths of the module scratch lists of one {@link doDemandEvaluate}: `_iterHits`, the
54
55
  * `Waiting` nodes the evaluation in progress read under iteration (each flagged
55
56
  * `CalcState.IterHit`; consumed when it returns); `_iterMembers`, the members the call marked,
56
- * in marking order — the sweep order; `_iterDownstream`, the nodes it marked downstream,
57
- * evaluated once more after the sweeps. On the executor rather than local because the lists
58
- * grow across the runs a sweep nests.
57
+ * plus the downstream nodes a sweep found one of them reads (`CalcState.Swept`), in ADDRESS
58
+ * order once the sweeps begin ({@link _sortIterMembers}); `_iterDownstream`, the nodes it
59
+ * marked downstream, evaluated once more after the sweeps. On the executor rather than local
60
+ * because the lists grow across the runs a sweep nests.
59
61
  */
60
62
  protected _iterHitsLength: number;
61
63
  protected _iterMembersLength: number;
62
64
  protected _iterDownstreamLength: number;
65
+ /**
66
+ * The cycles of the demand run in progress that are still OPEN, under iteration: per cycle
67
+ * group, the stack index of its lowest started member. A cycle is a strongly connected
68
+ * component, and it is complete only when that member finishes — until then a node that reads
69
+ * one of its FINISHED members reaches the open member through it, and the open member reaches
70
+ * the reader up the stack, so the reader is in the cycle too ({@link _onMemberRead}). Removed
71
+ * when the member at the index finishes, so empty between runs.
72
+ */
73
+ protected _openGroups: Map<number, number>;
74
+ /**
75
+ * Cycle groups a later slice joined to another (`from → into`). A slice relabels only the
76
+ * nodes on the stack, so a group's finished members keep the old id until
77
+ * {@link _settleGroups} rewrites them; every read of a group in between resolves through here.
78
+ */
79
+ protected _groupAlias: Map<number, number>;
80
+ /** Inside {@link _demandSweep}'s sweeps — where a downstream node a swept node reads joins them. */
81
+ protected _sweeping: boolean;
82
+ /**
83
+ * Whether `_iterMembers` is in address order yet ({@link _sortIterMembers}) — false while the
84
+ * discovery that finds the cycles appends to it, true from the first sweep on, when a member
85
+ * that joins has to be placed rather than appended.
86
+ */
87
+ protected _iterSorted: boolean;
88
+ /** Where {@link _demandSweep} stands in the list, so an arrival below it can move it up; `-1` between sweeps. */
89
+ protected _sweepIndex: number;
90
+ /** How many nodes `_demandDeferred` holds for the {@link _demandRun} in progress. */
91
+ protected _deferredLength: number;
63
92
  /** The pass the hook answers for; inert otherwise. Set by `doMarkAndPlan`, released with `_gridUpdates`. */
64
93
  protected _passActive: boolean;
65
94
  protected _passCycleId: number;
@@ -70,6 +99,20 @@ export declare class CalcExecutor {
70
99
  * value is right, it is just not in the grid yet.
71
100
  */
72
101
  protected _flush: (() => void) | null;
102
+ /**
103
+ * Per grid, the committed values with the running pass's uncommitted results over them — the
104
+ * batch and the demand results the plan has not taken yet; what `getGridValues` answers with
105
+ * while a pass evaluates. Released with {@link _flush}.
106
+ */
107
+ _overlays: Map<string, PendingOverlayGrid> | null;
108
+ /**
109
+ * The blank regions of the blocks whose representative could not stand for them this plan
110
+ * (PLAN-WATCHES-BLANK-AWARE §4), and the cells of the regions that WERE shared whose value the
111
+ * share moved under a reader ({@link _dirtyBlankReaders}) — handed to `doEvaluate`'s incremental
112
+ * dirty set at the end of the plan, so the next iteration of the pass collects the first cell
113
+ * by cell and the readers of the second.
114
+ */
115
+ protected _fallbackDirty: ISpatialMap | null;
73
116
  /**
74
117
  * The cycle table (design §7.3): per cycle id, one live {@link CircularReference} holding the
75
118
  * nodes the sheet index currently shows as its members and as downstream of it — the object
@@ -83,6 +126,13 @@ export declare class CalcExecutor {
83
126
  protected _cycleHost: CycleHost;
84
127
  /** Last cycle id handed out by a demand pass; ids are unique across passes. */
85
128
  protected _cycleGroupNext: number;
129
+ /**
130
+ * Advances whenever the circular index changes — a node's shown role or group moves in
131
+ * {@link _trackCircular}. A remembered plan (§1.4) whose closure held no cycle node at the
132
+ * epoch it was made at still holds none while the epoch stands, which is what lets it be
133
+ * reused with the in-degree phase's cycle tainting skipped. See `fastEligible`.
134
+ */
135
+ protected _cycleEpoch: number;
86
136
  /**
87
137
  * Counters over every demand pass since construction: nodes evaluated by demand and
88
138
  * `NeedsFirst` retries. A retry is the cost of the path (a formula run and thrown away), so a
@@ -104,7 +154,7 @@ export declare class CalcExecutor {
104
154
  * - `'on'` (default): an eligible pass skips the in-degree + Kahn phases (plan = affected set
105
155
  * sorted by order stamp) and discovery reuses cached `dependents`.
106
156
  * - `'assert'` (the §1.6 rollout mode; the diagnostic to flip back to if values ever look
107
- * stale — `__sxlCalc.mode('assert')`): stamps are written and eligibility computed, but every
157
+ * stale — `calculation._planCacheMode('assert')`): stamps are written and eligibility computed, but every
108
158
  * pass still runs the full search + Kahn phases; the fast path's order and the cached
109
159
  * `dependents` are VERIFIED against them, mismatches counted in
110
160
  * `planAssertFailures`/`dependentsAssertFailures` and logged. Costs the old planning price
@@ -118,6 +168,15 @@ export declare class CalcExecutor {
118
168
  protected _lastPlanId: number;
119
169
  /** Length of the last stamped plan — the `orderIndex` range the fast path's bucket order spans. */
120
170
  protected _lastStampedLength: number;
171
+ /**
172
+ * How many of the last stamped plan's nodes Kahn ordered; the rest — stamps at or past this
173
+ * index — are its DEMAND APPENDIX: nodes Kahn could not order (a static self-edge such as
174
+ * `OFFSET(A1,-1,0)` in A1) that are evaluated by demand after everything ordered. A pass that
175
+ * reuses the stamps or the memo re-flags them for demand (`Circular`, the batch, the roster)
176
+ * rather than evaluating them on the ordinary path. Equal to `_lastStampedLength` when the last
177
+ * plan was fully ordered.
178
+ */
179
+ protected _lastStampedOrderedLength: number;
121
180
  /**
122
181
  * Whole-closure reuse (§1.4): remembered fully-ordered passes — seeds, plan, and the
123
182
  * `precedentEpoch` each was planned at (`-1` = empty). A pass with the identical seed set at
@@ -166,14 +225,74 @@ export declare class CalcExecutor {
166
225
  * batch) is committed on the spot and read; `Done` with a cycle role makes the reader
167
226
  * downstream. Any other cell is a value. Inert outside a pass, so a reference built during one
168
227
  * and read later (a spill committed afterwards) is plain values.
228
+ *
229
+ * `prefetch` is the rectangle an ITERATION was asked for, announced before its first read. Only
230
+ * the `Unevaluated` decision belongs to it — bringing what the sweep may need forward is free,
231
+ * and over-eager is harmless (design §4.3) — while `Waiting` and a finished cycle role are left
232
+ * to the per-position reports the sweep makes, which is what stops an early-exit lookup from
233
+ * reporting the tail it never opened (plan item 1). It answers whether those reports can say
234
+ * anything at all: a rectangle holding no node of this pass and nothing the sheet shows in a
235
+ * cycle is swept unobserved.
169
236
  */
170
237
  private _onPassRead;
171
238
  /**
172
- * Under iteration, a read of a `Done` cycle node by the node being evaluated: the reader is
173
- * downstream of that cycle (design §6.3) unless it is in one itself. Nothing is aborted — the
174
- * reader goes on with the value — so the mark is made here, on the reader.
239
+ * A read of a `Done` cycle node by the node being evaluated: the reader is downstream of that
240
+ * cycle unless it is in one itself. Nothing is aborted — the reader goes on — so the mark is
241
+ * made here, on the reader.
242
+ *
243
+ * @remarks
244
+ * Under iteration this is design §6.3, and the reader goes on with the member's real value.
245
+ * With iteration off the value is discarded when the evaluation finishes (`_demandRun` writes
246
+ * what the cell last had), and the reader runs on for the CLASSIFICATION alone: a cell can be
247
+ * both downstream of one cycle and a member of its own, and aborting at the first read decided
248
+ * that by read order. `A5 = IF(…, A5 - (A4*A2))` meets `A4` before it meets itself — postfix
249
+ * evaluation opens the inner product first — so it used to be reported downstream of `A4`'s
250
+ * cycle and never reached its own, leaving the user an `A4` to fix and an `A5` still circular.
251
+ * Running on lets the later `Waiting` read close it, and `_markCycleSlice` overwrites the role:
252
+ * member wins over downstream, never the reverse.
175
253
  */
176
- private _iterRead;
254
+ private _markDownstream;
255
+ /**
256
+ * A read of a `Done` cycle node inside the demand loop, under iteration. Which of three things
257
+ * it is depends on where the cycle stands, not on the node alone:
258
+ *
259
+ * - **A member of a cycle still open** ({@link _openGroups}): the reader is in that cycle.
260
+ * Recorded as a hit, like a read of a `Waiting` node, and the slice is marked when the reader
261
+ * returns. This is what makes a cycle its whole strongly connected component however the pass
262
+ * entered it. Entered at `reserve = SUM(months)`, a fund-sizing loop first closes through ONE
263
+ * month (`reserve → month → minDist → size → … → reserve`); `size` then finishes, and every
264
+ * other month reads it finished while `reserve` is still open beneath them. They feed
265
+ * `reserve`: left downstream, the sweeps iterate a fragment and settle on a wrong number.
266
+ * - **A downstream node read by a node being swept**: it feeds the sweep, so it is swept too
267
+ * ({@link _sweepAlong}). Nothing the discovery above misses can then leave a swept node
268
+ * reading a value that moves only after the sweeps.
269
+ * - Anything else: the reader is downstream ({@link _markDownstream}).
270
+ */
271
+ private _onMemberRead;
272
+ /**
273
+ * Adds the downstream node `read` to the sweep list because `reader`, which is swept, reads it.
274
+ * Downstream of the reader's own cycle it closes a loop through the reader — a member, and
275
+ * `reader`'s next step if it has none. Downstream of another cycle it lies between the two: it
276
+ * keeps its role and moves with them (`CalcState.Swept`).
277
+ */
278
+ private _sweepAlong;
279
+ /**
280
+ * Adds `member` to the sweep list with the value the sweeps start it from, at its ADDRESS
281
+ * position once {@link _sortIterMembers} has ordered the list — Excel sweeps row-major, always
282
+ * (design §6.3), and a member that JOINS during the sweeps has to land in that order too or the
283
+ * order changes partway through the pass. Before the ordering, which is the discovery that finds
284
+ * the cycles, it appends: the list is sorted once, where it is finalized.
285
+ */
286
+ private _addIterMember;
287
+ /**
288
+ * Puts the sweep list in address order, once, where it is finalized: every sweep of the pass
289
+ * then runs in that one order, and {@link _addIterMember} places what joins later.
290
+ */
291
+ private _sortIterMembers;
292
+ /** The group `group` stands for now — itself unless a later slice joined it to another. */
293
+ private _resolveGroup;
294
+ /** Rewrites every group a slice joined to another ({@link _groupAlias}) on the pass's roster. */
295
+ private _settleGroups;
177
296
  /**
178
297
  * The nodes of this pass inside `coords` that are still `Unevaluated`, written into `into` from
179
298
  * slot `length` on; returns the new length.
@@ -193,39 +312,157 @@ export declare class CalcExecutor {
193
312
  * (the batch, after everything ordered is committed), and `doEvaluate` again for a single
194
313
  * ordered node whose dynamic read landed on a node not yet evaluated — the same suspension,
195
314
  * on the ordinary path (§5). Every node evaluated here is flagged `circular`, so the plan
196
- * takes its `demandValue` when it reaches it, and its finalized scalar is already in the grid
197
- * for later lazy reads; `flush` commits the ordered path's pending batch when a read needs a
198
- * value still sitting in it. Flat: the stack is an array, so a 1,560-row chain is 1,560
199
- * evaluations, not 1,560 JS frames. A node is retried at most once per `NeedsFirst` it raises,
200
- * and with the prefetch of its static precedents that is normally once.
315
+ * takes its `demandValue` when it reaches it, and its finalized scalar is already in the
316
+ * overlay's demand layer for later lazy reads (`_pushDemand`); `flush` commits the ordered
317
+ * path's pending batch when a read needs a value still sitting in it. Flat: the stack is an
318
+ * array, so a 1,560-row chain is 1,560 evaluations, not 1,560 JS frames. A node is retried at
319
+ * most once per `NeedsFirst` it raises, and with the prefetch of its static precedents that is
320
+ * normally once.
201
321
  */
202
322
  protected doDemandEvaluate(cycleId: number, getUpdates: (scope: string) => ICalcGrid.IncrementalUpdates, worklist: readonly CalcNode[], flush: () => void): void;
203
323
  /**
204
- * The finalized scalar goes into the grid now, so a later lazy read sees it; `doEvaluate`
205
- * commits the same value with the notifications when it reaches the node.
324
+ * The finalized scalar goes into the overlay's demand layer now, so a later lazy read sees it;
325
+ * `doEvaluate` takes it from there and commits it with the notifications when it reaches the
326
+ * node. A sweep rewrites a member once per sweep, and none of those is a persistent write.
206
327
  */
207
- private _writeEarly;
328
+ private _pushDemand;
329
+ /**
330
+ * The overlay of `gridId` for the `doEvaluate` in progress, made on first use — demand
331
+ * evaluation runs only inside one, so {@link _overlays} is installed. It commits through the
332
+ * `flush` of the `doEvaluate` that made it, and only that one.
333
+ */
334
+ private _overlayFor;
335
+ /**
336
+ * A finalized result fitted to its cell when the block makes every cell its own 1x1
337
+ * array-entered extent (`FormulaSpatialValue.arrayFirstCell`): element `[0,0]` of a range, so the
338
+ * cell stores a scalar and registers no spill. Anything else as it is.
339
+ */
340
+ private _fitCell;
341
+ /**
342
+ * The representative of a gated block has finalized (PLAN-WATCHES-BLANK-AWARE §4): its scalar is
343
+ * shared with the block's blank region, or the gate is closed and the region is re-collected
344
+ * cell by cell.
345
+ *
346
+ * @remarks
347
+ * Shared only when nothing the evaluation read was per cell (`CalcScope.perCellRead`: a draw, a
348
+ * position, a computed reference), the result is a scalar, and the node ran on its own - not a
349
+ * promise, not pending on one, not in a cycle. A per-cell read is a fact of the formula and
350
+ * closes the gate for good ({@link FormulaSpatialValue.blankRefused}); the rest may not recur
351
+ * and close it for this pass ({@link _fallbackBlank}).
352
+ *
353
+ * How the region is shared depends on who can read it (§4c). A block in a SHEET grid is read
354
+ * by other formulas, the sheet and the error index, all through the grid's values, so the
355
+ * scalar is written as runs - one per column of each blank rectangle, which for a column block
356
+ * is one run. A block in a grid that SHADOWS a sheet (a watch body, a one-shot evaluation) has
357
+ * exactly one reader, the range its owner holds, and that range answers the region as its empty
358
+ * value from the block (`FormulaSpatialValue.getBlankValueWithin`): nothing is written, whatever
359
+ * the region's size, and what an earlier pass stored there is removed so the block's answer is
360
+ * the one read.
361
+ *
362
+ * @param refuse The caller's own reasons the result cannot stand for the region.
363
+ */
364
+ private _finalizeRepresentative;
365
+ /**
366
+ * Marks dirty the cells of a shared blank region whose value the share just moved, wherever a
367
+ * formula reads them, so the pass's next iteration evaluates those readers against the runs now
368
+ * in the grid.
369
+ *
370
+ * @remarks
371
+ * A blank cell has no node. A formula that reads one - `=A2+1` beside a block of `=$D$1` whose
372
+ * representative is `A1` - is neither in the representative's dependents, which are searched at
373
+ * its own cell, nor ordered after it, so left alone it keeps the value the cell had before the
374
+ * share. The region is handled as a spill's changed extent is: what moved is content other
375
+ * formulas read, and it is re-collected as a dirty region.
376
+ *
377
+ * What moved is the whole region when the shared value differs from the last one, and otherwise
378
+ * the cells that joined the region since (a cleared input turns a touched cell blank, and the
379
+ * run replaces the value it computed for itself). A region nothing reads costs one search per
380
+ * rectangle and no further iteration.
381
+ *
382
+ * @param unmoved The rectangles that already held this value; `null` when every cell moved.
383
+ */
384
+ private _dirtyBlankReaders;
385
+ /**
386
+ * Closes a gated block's gate — for good when `sticky`, for this pass otherwise — and marks its
387
+ * blank region dirty, so the pass's next iteration collects those cells one by one.
388
+ *
389
+ * @remarks
390
+ * A gate closed for good also settles the block's node store: every collection from here on
391
+ * reaches every cell, so the nodes go dense ({@link FormulaSpatialValue.densify}) rather than
392
+ * being minted one by one through the sparse store.
393
+ */
394
+ private _fallbackBlank;
395
+ /**
396
+ * What the pass reads for `node` right now — a member's starting value, before any demand
397
+ * result of its own.
398
+ *
399
+ * @remarks
400
+ * A sparse grid answers `undefined` for a cell it holds nothing for, which is every formula that
401
+ * was entered and has not calculated yet. That is a blank start (`IF(F1="",…)` sees `""`), and
402
+ * blank as a value is `null`: `undefined` is neither a scalar the grid can store nor a demand
403
+ * result, where it means "none" (`doEvaluate` takes `0` for it). A named formula's body is a
404
+ * cell too, at (0,0) of the name's virtual grid.
405
+ *
406
+ * A formula LOADED without a value was never entered, and starts from `""` instead — Excel's
407
+ * start for it, and not blank, so `_demandSweep` gives it no entry evaluation
408
+ * ({@link FormulaSpatialValue.uncalculated}).
409
+ */
410
+ private _valueOnGrid;
411
+ /**
412
+ * Puts a prefetched node back where the prefetch found it — `Unevaluated`, with nothing its
413
+ * evaluation decided — because that evaluation reached a node still on the stack under it
414
+ * (trap 4b: a prefetch report is not a read, and neither is a prefetched evaluation). The node
415
+ * below finishes first, and this one is evaluated once nothing is suspended under it: from the
416
+ * reader's retry if the reader does read it after all, and from the run's own seed queue
417
+ * otherwise. `Circular` goes too, so a node neither reaches is evaluated by the plan in its own
418
+ * place rather than taking a demand result it never got.
419
+ */
420
+ private _unstartPrefetched;
421
+ /**
422
+ * Puts back the speculative evaluations that are suspended under one just put back, and answers
423
+ * the stack length that leaves. They asked for it, and they were not asked for themselves, so
424
+ * without it none of them can finish — retrying them would ask for it again, and again.
425
+ * Unwinding to the first entry no prefetch put there hands the stack back to an evaluation a
426
+ * READ wants, and what that one asks for next is asked for in earnest: the chain comes back
427
+ * without the flag, and the cycle it reaches is marked.
428
+ */
429
+ private _unwindSpeculative;
208
430
  /** The worklist loop of {@link doDemandEvaluate}; re-entered by a sweep for the nodes a read needs first. */
209
431
  private _demandRun;
210
432
  /**
211
433
  * Marks the started (`Waiting`) nodes on the in-progress stack from `read` up to the top as one
212
434
  * cycle — the slice a `Waiting` read names (design §4.3). A slice touching a member of an
213
- * earlier cycle joins that cycle. The started nodes are on the stack in READ order — each is
214
- * there because the one below it read it, and the reader on top read `read` — so the slice is
215
- * the walk `getPath` answers: each member is linked to the next, the last back to the first.
435
+ * earlier cycle joins that cycle, and one touching several joins them all into one. The started
436
+ * nodes are on the stack in READ order — each is there because the one below it read it, and the
437
+ * reader on top read `read` — so the slice is the walk `getPath` answers: each member is linked
438
+ * to the next, the last back to the first. When the reader reached `read` through a finished
439
+ * member of its cycle, that member is `via` and is the reader's next step instead.
216
440
  * The demand state is left as it is: the caller finishes the members (iteration off) or lets
217
441
  * them run on (iteration on). Returns the stack index of `read`.
218
442
  */
219
443
  private _markCycleSlice;
220
444
  /**
221
- * Iterative calculation (design §6.3) over the members {@link _demandRun} marked, which it
222
- * evaluated once each — sweep 1. Every further sweep re-evaluates them in marking order, each
223
- * read seeing the latest value (Gauss–Seidel, as Excel: `probe-iterative.ps1`), until no member
224
- * moved by `maxChange` or `maxIterations` sweeps ran. The limits are global, as in Excel — one
225
- * unsettled member keeps every cycle of the pass sweeping. Downstream nodes read the members
226
- * once more afterwards; they never feed a cycle, so they need no sweeping. The members are then
227
- * registered as volatile so the next recalculation re-runs them, which is how `=A1+1` advances
228
- * per recalc (Excel re-iterates every cycle on every `Calculate()`).
445
+ * Iterative calculation (design §6.3) over the members {@link _demandRun} marked. Each sweep
446
+ * evaluates them in ADDRESS order, each read seeing the latest value (Gauss–Seidel in row-major
447
+ * order, as Excel: `probe-iterative.ps1`), until no member moved by `maxChange` or
448
+ * `maxIteration` sweeps ran.
449
+ * The limits are global, as in Excel — one unsettled member keeps every cycle of the pass
450
+ * sweeping. Downstream nodes read the members once more afterwards; one that feeds a swept node
451
+ * is swept with them instead (`_onMemberRead`), so the rest feed no cycle and need no sweeping.
452
+ * Converged means a sweep over a list that did not grow moved nothing by `maxChange`: every
453
+ * node a swept node reads is then swept itself or does not move in this pass, so the state is a
454
+ * fixed point and not a fragment's. The members are then registered as volatile so the next
455
+ * recalculation re-runs them, which is how `=A1+1` advances per recalc (Excel re-iterates every
456
+ * cycle on every `Calculate()`).
457
+ *
458
+ * @remarks
459
+ * The evaluation that FOUND the members ran in dependency order — `B1 = B2+1` needs `B2` first,
460
+ * whichever of the two the plan reached first — so its results are not a sweep of this order,
461
+ * and counting them as one costs a step. The members go back to the values the pass found them
462
+ * at; a member that had none is then evaluated once, in address order, for the entry evaluation
463
+ * Excel gave it when it was written (§2.4), and every one of the `maxIteration` sweeps runs on
464
+ * top of that. Discovery's results are never read: a node that read a member is downstream, and
465
+ * evaluates again below.
229
466
  */
230
467
  private _demandSweep;
231
468
  /** Clears the `IterHit` flags of the hits not consumed by {@link _demandRun}'s loop and empties the list. */
@@ -234,7 +471,7 @@ export declare class CalcExecutor {
234
471
  * One evaluation of a `Done` node under iteration, with the read hook armed. A read that
235
472
  * needs a node not yet evaluated (a handed-over node's sweep runs before the batch) runs those
236
473
  * by demand and retries; a `Waiting` read cannot occur (nothing is waiting) and a member's
237
- * result is a value (`_iterRead`), so nothing aborts.
474
+ * result is a value (`_markDownstream`), so nothing aborts.
238
475
  */
239
476
  private _demandEvaluateOne;
240
477
  /**
@@ -280,7 +517,7 @@ export declare class CalcExecutor {
280
517
  evaluations: number;
281
518
  retries: number;
282
519
  } & CalcExecutor.PlanStats;
283
- /** @internal Zeroes every counter/timing so a measurement window starts clean (`__sxlCalc.reset()`). */
520
+ /** @internal Zeroes every counter/timing so a measurement window starts clean (`Calculation._resetStats`). */
284
521
  resetStats(): void;
285
522
  /**
286
523
  * Collects and marks all volatile CalcNodes.
@@ -314,6 +551,17 @@ export declare class CalcExecutor {
314
551
  * length check first: it is what rejects the common miss (a single-cell pass against a bulk
315
552
  * memo) before any node is touched.
316
553
  */
554
+ /**
555
+ * Flags `plan[from..to)` for demand evaluation the way the cycle-detection branch does when it
556
+ * appends them: `Circular`, no carried demand value, in the batch and on the roster. Used by
557
+ * the paths that reuse a plan without rebuilding it (the closure memo, the stamp order).
558
+ */
559
+ private _flagDemandAppendix;
560
+ /**
561
+ * Drop both plan caches (§1.2 order stamps and §1.4 whole-closure reuse): nothing they hold is
562
+ * a valid order for the graph any more. The next mark phase plans from scratch and re-stamps.
563
+ */
564
+ protected _invalidatePlans(): void;
317
565
  private _matchPlanMemo;
318
566
  /**
319
567
  * Records this pass's seeds and plan for whole-closure reuse (§1.4). The victim slot is a stale
@@ -343,7 +591,7 @@ export declare namespace CalcExecutor {
343
591
  }
344
592
  /** The two limits of `ICalculation.IterativeCalculation`. */
345
593
  interface IterateOptions {
346
- maxIterations: number;
594
+ maxIteration: number;
347
595
  maxChange: number;
348
596
  }
349
597
  /** How a cycle's last iterated evaluation ended — what `ICircularReference` answers. */
@@ -352,12 +600,28 @@ export declare namespace CalcExecutor {
352
600
  converged: boolean;
353
601
  /** Sweeps run, the first evaluation included. */
354
602
  iterationCount: number;
355
- /** The largest change any member made in the last sweep. */
603
+ /**
604
+ * The largest change THIS cycle's members made in the last sweep.
605
+ *
606
+ * @remarks
607
+ * Convergence is global, as Excel has it — one unsettled member keeps every cycle of the pass
608
+ * sweeping — but the number a tooltip shows is the asking cycle's own, or A4 reports the 9.8
609
+ * that A5 moved while it moved 0.98.
610
+ */
356
611
  lastChange: number;
612
+ /**
613
+ * The same, for the sweep BEFORE the last — `NaN` when there was only one.
614
+ *
615
+ * @remarks
616
+ * Two numbers say something one cannot: a run that stopped on the cap while still shrinking is
617
+ * a `maxIteration` that is too low, and one whose change is flat or growing does not settle at
618
+ * any cap. The sweep has both in hand; nothing else can recover the second.
619
+ */
620
+ previousChange: number;
357
621
  }
358
622
  /** Snapshot of Calculation's persistent state for one pass */
359
623
  interface ExecuteState {
360
- gridsAll: Map<string, ICalcGrid>;
624
+ gridsAll: Map<string, CalcGridBackend>;
361
625
  formulaSpatial: ISpatialMap3D<FormulaSpatialValue>;
362
626
  dirtySpatial: ISpatialMap3D;
363
627
  /** Volatiles accumulated before this cycle — drained and cleared by execute() */
@@ -373,6 +637,15 @@ export declare namespace CalcExecutor {
373
637
  epoch: number;
374
638
  /** `CalcExecutor._planMemoClock` when last written or matched — the LRU key for slot recycling. */
375
639
  used: number;
640
+ /** No node of the plan was shown in a cycle (or downstream of one) when the plan was made. */
641
+ cycleFree: boolean;
642
+ /** `CalcExecutor._cycleEpoch` when the plan was made; a hit requires it unchanged. */
643
+ cycleEpoch: number;
644
+ /**
645
+ * Index of the first demand-appendix node in `plan` — `planLength` when the plan was fully
646
+ * ordered. A hit re-flags `plan[demandStart..planLength)` for demand evaluation.
647
+ */
648
+ demandStart: number;
376
649
  }
377
650
  /** Plan-phase counters and timings — see `CalcExecutor.planCacheMode` and performance plan §1.6. */
378
651
  interface PlanStats {
@@ -400,6 +673,12 @@ export declare namespace CalcExecutor {
400
673
  /** Discovery searches skipped (or verified) because `dependentsEpoch` was current. */
401
674
  dependentsCacheHits: number;
402
675
  dependentsCacheMisses: number;
676
+ /**
677
+ * Nodes evaluated on the ORDERED path (`evaluateAt` from `doEvaluate`); `evaluations` counts
678
+ * the demand path. Their sum is every formula run — what blank-aware evaluation
679
+ * (PLAN-WATCHES-BLANK-AWARE §4) reduces to the touched cells plus one.
680
+ */
681
+ evaluated: number;
403
682
  discoveryMs: number;
404
683
  inDegreeMs: number;
405
684
  kahnMs: number;