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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/THIRD-PARTY-NOTICES.md +1 -1
  2. package/browser/cjs/B0AS8k-hrSCBUlUY.cjs +1 -0
  3. package/browser/cjs/B308aXzcAYr1GN1c.cjs +1 -0
  4. package/browser/cjs/B44p8LIyxG3GtaGC.cjs +93 -0
  5. package/browser/cjs/{a0Z-SXs_N71CtqYb.cjs → D6YaqporVrSewZpm.cjs} +1 -1
  6. package/browser/cjs/DjWcveVCs0NFiKep.cjs +1 -0
  7. package/browser/cjs/index.cjs +2 -2
  8. package/browser/esm/-OKDZ9cUBtkgD4Zr.mjs +20 -0
  9. package/browser/esm/8Nw0lKc4ISs7hEJT.mjs +70223 -0
  10. package/browser/esm/{DlPMeIyxT9tG_WDk.mjs → BmEEyMxNzlbXG98H.mjs} +2 -2
  11. package/browser/esm/BtdDRkWn-zCV3oic.mjs +394 -0
  12. package/browser/esm/DaCTT4vda0m8Fnxo.mjs +8 -0
  13. package/browser/esm/{B0HS42a7lga1k1U_.mjs → DvFKKE72ZA02l8iF.mjs} +1 -1
  14. package/browser/esm/{uyWBMSIxMlt8n5Z3.mjs → Z-dzbKvqaxll9l_t.mjs} +2 -2
  15. package/browser/esm/index.mjs +871 -696
  16. package/licenses/dependencies.txt +204 -204
  17. package/node/esm/{Cku7XiUvw1xrRasi.mjs → BpMTlTrJLWh_wJ5H.mjs} +1 -1
  18. package/node/esm/D5quDVovf1zjYBgJ.mjs +28 -0
  19. package/node/esm/DP0M3_S_dwLwRMiA.mjs +403 -0
  20. package/node/esm/DTHN_EkuOscW3f3B.mjs +8 -0
  21. package/node/esm/index.mjs +54375 -39377
  22. package/package.json +6 -7
  23. package/resources/locales/de/model.msg.json +45 -9
  24. package/resources/locales/en/model.msg.json +42 -9
  25. package/types/scripting-api.json +7094 -0
  26. package/types/scripting-enums.json +54 -8
  27. package/types/scripting.d.ts +6985 -1171
  28. package/types/src/anchored/AbstractAnchored.d.ts +18 -8
  29. package/types/src/anchored/AnchoredMap.d.ts +2 -0
  30. package/types/src/anchored/IAnchoredMap.d.ts +52 -4
  31. package/types/src/autoFill/AutoFill.d.ts +316 -32
  32. package/types/src/autoFill/IAutoFill.d.ts +232 -15
  33. package/types/src/border/{IBorder.d.ts → IBorders.d.ts} +41 -40
  34. package/types/src/border/index.d.ts +1 -1
  35. package/types/src/calculation/Calculation.d.ts +740 -35
  36. package/types/src/calculation/ExternalBookBindings.d.ts +118 -0
  37. package/types/src/calculation/FormulaText.d.ts +74 -0
  38. package/types/src/calculation/ICalculation.d.ts +318 -81
  39. package/types/src/calculation/INamedFormulasCollection.d.ts +5 -8
  40. package/types/src/calculation/NamedFormulaCollection.d.ts +139 -107
  41. package/types/src/calculation/NamedLambdaFunction.d.ts +28 -0
  42. package/types/src/calculation/TokenType.d.ts +9 -0
  43. package/types/src/calculation/Types.d.ts +83 -2
  44. package/types/src/calculation/_CloneBoundary.d.ts +80 -0
  45. package/types/src/calculation/compiler/ASTTypes.d.ts +58 -0
  46. package/types/src/calculation/compiler/CompilerUtils.d.ts +134 -12
  47. package/types/src/calculation/compiler/FormulaCompiler.d.ts +29 -4
  48. package/types/src/calculation/compiler/FormulaParser.d.ts +1 -2
  49. package/types/src/calculation/compiler/LiteTransform.d.ts +17 -0
  50. package/types/src/calculation/compiler/ParserUtils.d.ts +26 -1
  51. package/types/src/calculation/compiler/SRParser.d.ts +2 -1
  52. package/types/src/calculation/compiler/Types.d.ts +79 -9
  53. package/types/src/calculation/executor/CalcExecutor.d.ts +312 -33
  54. package/types/src/calculation/executor/CalcExecutorUtils.d.ts +43 -2
  55. package/types/src/calculation/executor/CircularReference.d.ts +2 -0
  56. package/types/src/calculation/formula/Formula.d.ts +58 -21
  57. package/types/src/calculation/formula/FormulaBlock.d.ts +124 -21
  58. package/types/src/calculation/formula/FormulaRecordView.d.ts +79 -0
  59. package/types/src/calculation/formula/IFormulaBlock.d.ts +261 -67
  60. package/types/src/calculation/formula/LambdaValue.d.ts +15 -16
  61. package/types/src/calculation/formula/LazyValue.d.ts +96 -0
  62. package/types/src/calculation/formula/TokenUtils.d.ts +25 -1
  63. package/types/src/calculation/formula/index.d.ts +1 -0
  64. package/types/src/calculation/functions/FunctionDeclarations.d.ts +31 -0
  65. package/types/src/calculation/functions/initializeFunctions.d.ts +15 -2
  66. package/types/src/calculation/grid/CalcGrid.d.ts +384 -158
  67. package/types/src/calculation/grid/CalcGridBackend.d.ts +450 -0
  68. package/types/src/calculation/grid/CalcGridProxy.d.ts +133 -0
  69. package/types/src/calculation/grid/CalcGridUtils.d.ts +62 -12
  70. package/types/src/calculation/grid/FormulaEntry.d.ts +129 -0
  71. package/types/src/calculation/grid/FormulaHost.d.ts +236 -0
  72. package/types/src/calculation/grid/ICalcGrid.d.ts +456 -143
  73. package/types/src/calculation/grid/_CalcRequest.d.ts +272 -0
  74. package/types/src/calculation/grid/index.d.ts +4 -0
  75. package/types/src/calculation/index.d.ts +2 -0
  76. package/types/src/calculation/spatial/ContentfulSpatialValue.d.ts +6 -2
  77. package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +339 -11
  78. package/types/src/calculation/spatial/SpillEntry.d.ts +20 -5
  79. package/types/src/calculation/spatial/TouchedWindows.d.ts +86 -0
  80. package/types/src/calculation/spatial/index.d.ts +1 -0
  81. package/types/src/calculation/state/CalcInputs.d.ts +41 -0
  82. package/types/src/calculation/state/CalcNode.d.ts +141 -30
  83. package/types/src/calculation/state/CalcScope.d.ts +37 -0
  84. package/types/src/calculation/state/CalcState.d.ts +22 -1
  85. package/types/src/calculation/state/CalculationContext.d.ts +36 -2
  86. package/types/src/calculation/state/IContextContainer.d.ts +129 -27
  87. package/types/src/calculation/state/_PendingOverlayGrid.d.ts +163 -0
  88. package/types/src/calculation/state/_ReadObservedGrid.d.ts +74 -8
  89. package/types/src/calculation/state/index.d.ts +1 -0
  90. package/types/src/calculation/symbol/ExternalSheetSymbols.d.ts +80 -0
  91. package/types/src/calculation/symbol/ISymbolRegistry.d.ts +23 -0
  92. package/types/src/calculation/symbol/IndirectSymbolProvider.d.ts +16 -2
  93. package/types/src/calculation/symbol/SheetSymbolProvider.d.ts +63 -3
  94. package/types/src/calculation/symbol/SymbolRegistry.d.ts +20 -0
  95. package/types/src/calculation/symbol/index.d.ts +3 -2
  96. package/types/src/cell/ICell.d.ts +78 -23
  97. package/types/src/cell/ICellProtection.d.ts +50 -10
  98. package/types/src/cellRange/ICellRange.d.ts +329 -72
  99. package/types/src/cellRange/ICellRanges.d.ts +9 -7
  100. package/types/src/chart/Chart.d.ts +72 -2
  101. package/types/src/chart/ChartCollection.d.ts +26 -0
  102. package/types/src/chart/IChart.d.ts +162 -9
  103. package/types/src/chart/IChartCollection.d.ts +25 -0
  104. package/types/src/chart/_ChartXml.d.ts +70 -0
  105. package/types/src/chart/index.d.ts +1 -3
  106. package/types/src/collections/ArraysGrid.d.ts +1 -1
  107. package/types/src/collections/IGrid.d.ts +1 -1
  108. package/types/src/collections/ISparseGrid.d.ts +9 -0
  109. package/types/src/collections/ISpatialMap.d.ts +59 -21
  110. package/types/src/collections/ImmutableList.d.ts +28 -0
  111. package/types/src/collections/MixedTypedArrayList.d.ts +168 -108
  112. package/types/src/collections/OverlappingRangeIterator.d.ts +13 -17
  113. package/types/src/collections/RepeatingList.d.ts +7 -0
  114. package/types/src/collections/ScalarGrid.d.ts +50 -0
  115. package/types/src/collections/SparseGrid.d.ts +1 -1
  116. package/types/src/collections/SpatialMap.d.ts +13 -21
  117. package/types/src/collections/Tuple.d.ts +128 -16
  118. package/types/src/collections/_GridUtils.d.ts +19 -6
  119. package/types/src/collections/_RangeSweep.d.ts +97 -0
  120. package/types/src/collections/_SpatialUtils.d.ts +20 -2
  121. package/types/src/collections/index.d.ts +1 -0
  122. package/types/src/comment/Comment.d.ts +159 -0
  123. package/types/src/comment/CommentCollection.d.ts +40 -0
  124. package/types/src/comment/IComment.d.ts +319 -48
  125. package/types/src/comment/ICommentCollection.d.ts +90 -0
  126. package/types/src/comment/_CommentUtils.d.ts +28 -0
  127. package/types/src/comment/index.d.ts +1 -0
  128. package/types/src/condition/AnchoredConditional.d.ts +76 -17
  129. package/types/src/condition/BuiltInOperators/AbstractOperator.d.ts +8 -7
  130. package/types/src/condition/BuiltInOperators/EqualToOperator.d.ts +2 -1
  131. package/types/src/condition/BuiltInOperators/ExpressionOperator.d.ts +3 -6
  132. package/types/src/condition/BuiltInOperators/InSetOperator.d.ts +1 -1
  133. package/types/src/condition/BuiltinSelectors/BaseSelector.d.ts +7 -0
  134. package/types/src/condition/BuiltinSelectors/ListSelector.d.ts +9 -0
  135. package/types/src/condition/Condition.d.ts +16 -0
  136. package/types/src/condition/ICondition.d.ts +86 -33
  137. package/types/src/condition/_ConditionFormula.d.ts +152 -0
  138. package/types/src/condition/_ConditionUtils.d.ts +73 -10
  139. package/types/src/conditionalFormat/ConditionalFormat.d.ts +21 -10
  140. package/types/src/conditionalFormat/ConditionalFormatCollection.d.ts +19 -8
  141. package/types/src/conditionalFormat/IConditionalFormat.d.ts +5 -3
  142. package/types/src/conditionalFormat/IConditionalFormatCollection.d.ts +2 -0
  143. package/types/src/dataValidation/DataValidation.d.ts +50 -3
  144. package/types/src/dataValidation/DataValidationCollection.d.ts +20 -9
  145. package/types/src/dataValidation/IDataValidation.d.ts +119 -30
  146. package/types/src/dataValidation/IDataValidationCollection.d.ts +10 -2
  147. package/types/src/date/DateUtils.d.ts +20 -0
  148. package/types/src/date/_DateUtils.d.ts +91 -7
  149. package/types/src/externalBook/ExternalBookCollection.d.ts +145 -12
  150. package/types/src/externalBook/ExternalBookName.d.ts +96 -0
  151. package/types/src/externalBook/IExternalBook.d.ts +170 -18
  152. package/types/src/externalBook/IExternalBookCollection.d.ts +79 -7
  153. package/types/src/externalBook/index.d.ts +1 -0
  154. package/types/src/fill/IStroke.d.ts +1 -1
  155. package/types/src/filter/IFilter.d.ts +29 -4
  156. package/types/src/font/IFont.d.ts +17 -0
  157. package/types/src/history/IHistory.d.ts +3 -2
  158. package/types/src/i18n/LanguagePack.d.ts +12 -4
  159. package/types/src/index.d.ts +3 -0
  160. package/types/src/io/AbstractBackingStore.d.ts +24 -1
  161. package/types/src/io/ArrayBackingStore.d.ts +1 -1
  162. package/types/src/io/EmbeddedPart.d.ts +20 -0
  163. package/types/src/io/IEmbeddedPart.d.ts +63 -0
  164. package/types/src/io/IWorkbookIO.d.ts +185 -18
  165. package/types/src/io/WorkbookIO.d.ts +9 -0
  166. package/types/src/io/WorkbookOrigin.d.ts +20 -11
  167. package/types/src/io/WorkbookOriginProvider.d.ts +46 -0
  168. package/types/src/io/_XmlFragment.d.ts +49 -0
  169. package/types/src/io/index.d.ts +1 -0
  170. package/types/src/lib/file/file.browser.d.ts +19 -5
  171. package/types/src/lib/file/file.node.d.ts +5 -0
  172. package/types/src/lib/utils/_Utils.d.ts +11 -0
  173. package/types/src/lib/utils/utils.browser.d.ts +9 -3
  174. package/types/src/license/license-key.d.ts +27 -0
  175. package/types/src/listener/IListener.d.ts +12 -7
  176. package/types/src/listener/ListenerEmitter.d.ts +46 -5
  177. package/types/src/model/AbstractModel.d.ts +14 -5
  178. package/types/src/movable/Control.d.ts +57 -0
  179. package/types/src/movable/IControl.d.ts +84 -0
  180. package/types/src/movable/IMovable.d.ts +23 -1
  181. package/types/src/movable/IMovableCollection.d.ts +2 -0
  182. package/types/src/movable/Movable.d.ts +4 -6
  183. package/types/src/movable/MovableCollection.d.ts +7 -7
  184. package/types/src/movable/index.d.ts +4 -0
  185. package/types/src/named/AbstractNamed.d.ts +1 -1
  186. package/types/src/named/INamed.d.ts +4 -1
  187. package/types/src/named/INamedCollection.d.ts +26 -0
  188. package/types/src/named/NamedCollection.d.ts +16 -15
  189. package/types/src/numFmt/BuiltInFormats.d.ts +15 -7
  190. package/types/src/numFmt/IFormatEngine.d.ts +2 -0
  191. package/types/src/numFmt/NumfmtFormatEngine.d.ts +2 -0
  192. package/types/src/person/IPerson.d.ts +99 -0
  193. package/types/src/person/IPersonCollection.d.ts +51 -0
  194. package/types/src/person/Person.d.ts +32 -0
  195. package/types/src/person/PersonCollection.d.ts +49 -0
  196. package/types/src/person/index.d.ts +3 -0
  197. package/types/src/picture/IPicture.d.ts +2 -0
  198. package/types/src/picture/Picture.d.ts +2 -0
  199. package/types/src/pivot/IPivotTable.d.ts +107 -0
  200. package/types/src/pivot/IPivotTableCollection.d.ts +25 -0
  201. package/types/src/pivot/PivotTable.d.ts +57 -0
  202. package/types/src/pivot/PivotTableCollection.d.ts +25 -0
  203. package/types/src/pivot/index.d.ts +6 -0
  204. package/types/src/primitives/CompositeRangeStats.d.ts +2 -0
  205. package/types/src/primitives/Criteria.d.ts +1 -1
  206. package/types/src/primitives/LambdaBrand.d.ts +21 -0
  207. package/types/src/primitives/PrimitiveUtils.d.ts +56 -19
  208. package/types/src/primitives/Range.d.ts +102 -24
  209. package/types/src/primitives/RangeStats.d.ts +24 -1
  210. package/types/src/primitives/ReferenceRange.d.ts +42 -0
  211. package/types/src/primitives/Runtime.d.ts +15 -2
  212. package/types/src/primitives/stats/FrequencyStats.d.ts +9 -0
  213. package/types/src/primitives/stats/LookupIndex.d.ts +46 -0
  214. package/types/src/primitives/stats/SortedNumbers.d.ts +2 -0
  215. package/types/src/primitives/stats/index.d.ts +1 -0
  216. package/types/src/print/IPrint.d.ts +0 -22
  217. package/types/src/protectedRange/IProtectedRange.d.ts +4 -0
  218. package/types/src/protectedRange/IProtectedRangeCollection.d.ts +2 -0
  219. package/types/src/protectedRange/ProtectedRange.d.ts +1 -4
  220. package/types/src/protectedRange/ProtectedRangeCollection.d.ts +19 -8
  221. package/types/src/protection/DefaultProtection.d.ts +12 -1
  222. package/types/src/protection/IProtection.d.ts +36 -2
  223. package/types/src/reference/ReferenceUtils.d.ts +80 -0
  224. package/types/src/reference/index.d.ts +2 -0
  225. package/types/src/resource/IResource.d.ts +21 -1
  226. package/types/src/resource/IResourceCollection.d.ts +9 -1
  227. package/types/src/resource/ResourceCollection.d.ts +6 -6
  228. package/types/src/scripting/FunctionCollection.d.ts +41 -11
  229. package/types/src/scripting/IFunctionCollection.d.ts +41 -0
  230. package/types/src/scripting/IModule.d.ts +25 -0
  231. package/types/src/scripting/IModuleCollection.d.ts +17 -0
  232. package/types/src/scripting/IScript.d.ts +18 -0
  233. package/types/src/scripting/Module.d.ts +34 -6
  234. package/types/src/scripting/ModuleCollection.d.ts +17 -12
  235. package/types/src/scripting/Runtime.d.ts +15 -0
  236. package/types/src/scripting/Scripts.d.ts +2 -0
  237. package/types/src/scripting/TypedFunction.d.ts +151 -18
  238. package/types/src/scripting/_FunctionIndex.d.ts +5 -0
  239. package/types/src/scripting/_ModuleUtils.d.ts +11 -1
  240. package/types/src/scripting/_ScriptUtils.d.ts +3 -0
  241. package/types/src/scripting/declarations.browser.d.ts +10 -0
  242. package/types/src/scripting/declarations.d.ts +49 -0
  243. package/types/src/scripting/declarations.node.d.ts +9 -0
  244. package/types/src/scripting/index.d.ts +3 -0
  245. package/types/src/selection/IRangeSelection.d.ts +9 -4
  246. package/types/src/selection/RangeSelection.d.ts +2 -0
  247. package/types/src/shape/IShape.d.ts +41 -3
  248. package/types/src/shape/Shape.d.ts +10 -0
  249. package/types/src/shape/_ShapeXml.d.ts +28 -0
  250. package/types/src/sheet/CellRegion.d.ts +6 -0
  251. package/types/src/sheet/ICellContainerOptions.d.ts +50 -0
  252. package/types/src/sheet/ISheet.d.ts +224 -41
  253. package/types/src/sheet/ISheetCollection.d.ts +2 -5
  254. package/types/src/sheet/NamedCellRange.d.ts +16 -7
  255. package/types/src/sheet/Sheet.d.ts +749 -114
  256. package/types/src/sheet/SheetCell.d.ts +81 -21
  257. package/types/src/sheet/SheetCollection.d.ts +19 -8
  258. package/types/src/sheet/SheetRange.d.ts +62 -14
  259. package/types/src/sheet/SheetRanges.d.ts +4 -6
  260. package/types/src/sheet/_CellBuffer.d.ts +214 -0
  261. package/types/src/sheet/_InvalidSheetRange.d.ts +5 -5
  262. package/types/src/sheet/_ListenerAnchor.d.ts +104 -0
  263. package/types/src/sheet/_RangeStateSweep.d.ts +16 -0
  264. package/types/src/sheet/_ScalarListFactory.d.ts +61 -0
  265. package/types/src/sheet/_SheetAutoFillUtils.d.ts +74 -0
  266. package/types/src/sheet/_SheetAutoFitUtils.d.ts +2 -2
  267. package/types/src/sheet/_SheetEvents.d.ts +43 -0
  268. package/types/src/sheet/_SheetFilterUtils.d.ts +32 -1
  269. package/types/src/sheet/_SheetIntents.d.ts +250 -0
  270. package/types/src/sheet/_SheetMutations.d.ts +179 -59
  271. package/types/src/sheet/_SheetStateReader.d.ts +16 -10
  272. package/types/src/sheet/_SheetStateTypes.d.ts +57 -73
  273. package/types/src/sheet/_SheetUtils.d.ts +2 -18
  274. package/types/src/sheet/_WatchAnchor.d.ts +93 -0
  275. package/types/src/sheet/spatial/HeldFormulaEntry.d.ts +36 -0
  276. package/types/src/sheet/spatial/index.d.ts +1 -0
  277. package/types/src/sheet/style/SheetCellStyle.d.ts +91 -64
  278. package/types/src/sheet/style/SheetDirectStyle.d.ts +16 -5
  279. package/types/src/sheet/style/_Resolvers.d.ts +5 -3
  280. package/types/src/sheet/style/_StyleUtils.d.ts +37 -7
  281. package/types/src/sheetHeader/ISheetHeader.d.ts +2 -0
  282. package/types/src/sheetHeader/SheetHeader.d.ts +14 -0
  283. package/types/src/sheetProtection/ISheetProtection.d.ts +41 -7
  284. package/types/src/sheetProtection/SheetProtection.d.ts +12 -0
  285. package/types/src/sheetView/ISheetView.d.ts +45 -1
  286. package/types/src/sheetView/SheetView.d.ts +11 -0
  287. package/types/src/slicer/ISlicer.d.ts +2 -0
  288. package/types/src/slicer/Slicer.d.ts +2 -0
  289. package/types/src/sort/ISort.d.ts +2 -0
  290. package/types/src/string/IStringCollection.d.ts +5 -0
  291. package/types/src/string/StringCollection.d.ts +6 -6
  292. package/types/src/style/INamedStyleCollection.d.ts +72 -0
  293. package/types/src/style/IStyle.d.ts +30 -10
  294. package/types/src/style/IStyleCollection.d.ts +63 -42
  295. package/types/src/style/ITableStyleCollection.d.ts +89 -0
  296. package/types/src/style/NamedStyleCollection.d.ts +39 -0
  297. package/types/src/style/StyleCollection.d.ts +41 -5
  298. package/types/src/style/TableStyleCollection.d.ts +49 -0
  299. package/types/src/style/_BuiltInStyleDefs.d.ts +3 -3
  300. package/types/src/style/index.d.ts +4 -0
  301. package/types/src/table/AnchoredTable.d.ts +644 -68
  302. package/types/src/table/AutoTable.d.ts +5 -5
  303. package/types/src/table/ITable.d.ts +228 -30
  304. package/types/src/table/ITableCollection.d.ts +2 -0
  305. package/types/src/table/TableCollection.d.ts +19 -8
  306. package/types/src/table/_FilterField.d.ts +7 -5
  307. package/types/src/table/_NamedTable.d.ts +17 -1
  308. package/types/src/table/_NamedTableSource.d.ts +1 -0
  309. package/types/src/table/_SortField.d.ts +2 -0
  310. package/types/src/table/_TableColumn.d.ts +13 -2
  311. package/types/src/table/_TableMessages.d.ts +1 -0
  312. package/types/src/table/_TableUtils.d.ts +40 -0
  313. package/types/src/text/Bullet.d.ts +4 -0
  314. package/types/src/text/ITextFrame.d.ts +25 -1
  315. package/types/src/text/TextBoxAlignment.d.ts +15 -6
  316. package/types/src/text/TextFrame.d.ts +4 -0
  317. package/types/src/text/TextLine.d.ts +4 -0
  318. package/types/src/text/TextParagraph.d.ts +4 -0
  319. package/types/src/text/TextRun.d.ts +9 -0
  320. package/types/src/text/TextStacked.d.ts +83 -0
  321. package/types/src/text/index.d.ts +1 -0
  322. package/types/src/theme/ITheme.d.ts +2 -0
  323. package/types/src/theme/IThemeCollection.d.ts +2 -0
  324. package/types/src/theme/ThemeCollection.d.ts +8 -7
  325. package/types/src/transaction/ITransaction.d.ts +238 -36
  326. package/types/src/transaction/Transaction.d.ts +99 -11
  327. package/types/src/type/AbstractCollection.d.ts +101 -0
  328. package/types/src/type/ICollection.d.ts +117 -0
  329. package/types/src/type/ITypes.d.ts +9 -7
  330. package/types/src/type/index.d.ts +1 -0
  331. package/types/src/utils/_CSSUtils.d.ts +3 -3
  332. package/types/src/workbook/IWorkbook.d.ts +171 -40
  333. package/types/src/workbook/Workbook.d.ts +103 -7
  334. package/types/src/workbook/_WorkbookIntents.d.ts +36 -0
  335. package/types/src/workbookProtection/IWorkbookProtection.d.ts +7 -0
  336. package/types/src/workbookProtection/WorkbookProtection.d.ts +3 -0
  337. package/types/src/workbookView/IWorkbookView.d.ts +12 -0
  338. package/types/src/workbookView/WorkbookView.d.ts +5 -0
  339. package/browser/cjs/BatsV2UUraVDCRXm.cjs +0 -57
  340. package/browser/cjs/CUz53T65cRGQRgvv.cjs +0 -33
  341. package/browser/cjs/DU0kYUtdFa3jK-im.cjs +0 -1
  342. package/browser/cjs/Dv4yIPLV98M5zLHa.cjs +0 -1
  343. package/browser/esm/6JKSOvc5czaQB2Bj.mjs +0 -109
  344. package/browser/esm/BtuJ9AGzeURtAsGo.mjs +0 -51241
  345. package/browser/esm/DGU6sM25u0EWCKl1.mjs +0 -824
  346. package/browser/esm/f2G3QRgEbvFJcoa2.mjs +0 -4436
  347. package/node/esm/-pxdn3M3tc6PLHs7.mjs +0 -114
  348. package/node/esm/0n5bslM9jhO1JnI2.mjs +0 -843
  349. package/types/src/cellRange/_GraphNode.d.ts +0 -38
  350. package/types/src/dataValidation/_Utils.d.ts +0 -10
  351. package/types/src/sheet/listener/RangesListener.d.ts +0 -32
  352. package/types/src/sheet/listener/RangesListenerEntry.d.ts +0 -19
  353. package/types/src/sheet/listener/index.d.ts +0 -3
@@ -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;
@@ -3,6 +3,11 @@ import { Tuple, ISpatialMap } from '../../collections';
3
3
  import { CalcSignal } from '../../primitives/CalcSignal';
4
4
  import { CalcNode } from '../state';
5
5
  import { PrecedentSpatialValue, FormulaSpatialValue } from '../spatial';
6
+ /**
7
+ * Visits the nodes of `block` a discovery walk reaches inside a rectangle (absolute, clipped to the
8
+ * block), minting those it decides the pass needs.
9
+ */
10
+ export type MintWindow = (block: FormulaSpatialValue, rowFrom: number, rowTo: number, colFrom: number, colTo: number, fn: (calc: CalcNode) => void) => void;
6
11
  /**
7
12
  * Raised from a read that landed on unorderable nodes not yet evaluated: the reader is suspended,
8
13
  * `nodes` are evaluated first, and the reader is retried from scratch.
@@ -33,10 +38,46 @@ export declare class DownstreamSignal extends CalcSignal {
33
38
  readonly node: CalcNode;
34
39
  constructor(node: CalcNode);
35
40
  }
36
- export declare function rangeToTuples(range: IRange, offsetMajor?: number, offsetMinor?: number): Tuple.BoundedTuples<Scalar>;
41
+ export declare function rangeToTuples(range: IRange, offsetMajor?: number, offsetMinor?: number): Tuple.Region<Scalar>;
42
+ /**
43
+ * Fits a result to a fixed (array-entered) extent, per dimension: a dimension of 1 broadcasts, a
44
+ * longer one is clipped, a shorter one is padded with `#N/A`. Measured against Excel
45
+ * (`probe-cse.ps1`): `=SEQUENCE(5)` into 3 rows is `1,2,3`; `=SEQUENCE(2)` into 5 rows is
46
+ * `1,2,#N/A,#N/A,#N/A`; `=SUM(H1:H5)` into 3x3 is the sum nine times; a 1x3 into 3x3 repeats the
47
+ * row; a 3x1 into 3x3 repeats the column.
48
+ *
49
+ * @returns The fitted values, row-major, exactly `rowCount` x `colCount`. A blank source cell stays
50
+ * blank (`null`), as it does when a dynamic array spills. The fit is a fixed point - fitting the
51
+ * result again yields the same shape - so nothing downstream needs a "do not resize" guard.
52
+ */
53
+ export declare function fitToExtent(value: Scalar | IRange, rowCount: number, colCount: number): Scalar[][];
54
+ /**
55
+ * {@link fitToExtent} as grid tuples over `coords`, in the orientation of the grid they are written
56
+ * to. `null` when every fitted cell is blank.
57
+ */
58
+ export declare function fitToTuples(value: Scalar | IRange, coords: IRange.Coords, isColumn: boolean): Tuple.Region<Scalar> | null;
37
59
  /**
38
60
  * TODO - document and/or rationalize with visitPrecedentBlock
39
61
  */
40
- export declare function visitDependencyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, rowIndex: number, colIndex: number, callbackFn: (calc: CalcNode) => void): void;
62
+ export declare function visitDependencyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, rowIndex: number, colIndex: number, callbackFn: (calc: CalcNode) => void, mint?: MintWindow | null): void;
63
+ /**
64
+ * Visit the cells of a dependent block that read a spill's BODY — the extent an anchor at
65
+ * (`anchorRow`, `anchorCol`) occupies, MINUS the anchor cell itself.
66
+ *
67
+ * @remarks
68
+ * A spill's body cells are written by the anchor but hold no formula of their own, so a reader
69
+ * that never touches the anchor (`=B4` against a `B2` spill) is invisible to both the precedent
70
+ * index — keyed at the anchor — and `formulaSpatial`, which knows nothing about the body. The
71
+ * anchor stands in for its whole extent here, which is what makes such a reader both DIRTY and
72
+ * ORDERED after it.
73
+ *
74
+ * The anchor cell is excluded because {@link visitDependencyBlock} at the anchor already answers
75
+ * for it: the two together cover the extent exactly once, which is what keeps the in-degree phase
76
+ * and Kahn's decrement in balance. The exclusion is per FORMULA CELL, not per entry — one entry
77
+ * can hold a block whose cells straddle the anchor (`D1=B2`, `D2=B3`) — and it applies only when
78
+ * the anchor is inside the entry at all, since an entry that does not cover the anchor was never
79
+ * in the anchor's dependents to begin with.
80
+ */
81
+ export declare function visitSpillBodyBlock(depEntry: ISpatialMap.Entry<PrecedentSpatialValue>, anchorRow: number, anchorCol: number, extentRowEnd: number, extentColEnd: number, callbackFn: (calc: CalcNode) => void, mint?: MintWindow | null): void;
41
82
  export declare function valueCompareValues(a: ISpatialMap.Entry<FormulaSpatialValue>, removing: ISpatialMap.Entry<FormulaSpatialValue>): boolean;
42
83
  //# sourceMappingURL=CalcExecutorUtils.d.ts.map
@@ -72,6 +72,8 @@ export declare class CircularReference implements ICalculation.ICircularReferenc
72
72
  getIterationCount(): number;
73
73
  /** @inheritdoc ICalculation.ICircularReference.getLastChange */
74
74
  getLastChange(): number;
75
+ /** @inheritdoc ICalculation.ICircularReference.getPreviousChange */
76
+ getPreviousChange(): number;
75
77
  /** The members still on the graph, in row-major order (virtual grids first, then by sheet). */
76
78
  protected _liveMembers(): CalcNode[];
77
79
  protected _countLive(nodes: Set<CalcNode>): number;