@sheetxl/sdk 0.8.0-beta.12 → 0.8.0-beta.14

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 (292) hide show
  1. package/THIRD-PARTY-NOTICES.md +172 -0
  2. package/browser/esm/{CBYMTDzMf1Vh7pkw.mjs → 3t4S9eda2I6jFad0.mjs} +1 -1
  3. package/browser/esm/{Bg5Di9GLNAkbqQ1P.mjs → AXlD9K1gCwPU4gCO.mjs} +1926 -1298
  4. package/browser/esm/{w6Jea0TiclPrYZ2M.mjs → B1aH_qa-czVyEVHd.mjs} +509 -509
  5. package/browser/esm/{DZiivy0NmO1Vnyzk.mjs → BEDfJP2tcuRy2Y2E.mjs} +2 -2
  6. package/browser/esm/{BdCJNawfifyPupCP.mjs → BLYl-afJe_3std8i.mjs} +1 -1
  7. package/browser/esm/{D2RZh0O9neOsyLAE.mjs → BPPMKyMn65i1a1mE.mjs} +69 -48
  8. package/browser/esm/{yuhcOYw6SHQ-RCm3.mjs → BSXQAXwZdJKYTO4P.mjs} +30 -30
  9. package/browser/esm/{-Jx-jNHmtIQQfLvK.mjs → BVqIknGhQCLUB_7Q.mjs} +1 -1
  10. package/browser/esm/{fXWUMDhZ5yMSO629.mjs → BWoz4kQdA5KKJfl6.mjs} +1 -1
  11. package/browser/esm/{DwwR3O2sEZApPSTF.mjs → Bdcd3QOzsc0aVMjN.mjs} +3 -3
  12. package/browser/esm/{2mIwPy2D2JUX-9wx.mjs → BpwULQPKbb4R9Jew.mjs} +2 -2
  13. package/browser/esm/{CwOPLXU3-9ZHGyOT.mjs → C7hpfT-sX2lyLS-D.mjs} +1 -1
  14. package/browser/esm/{BIHrHjRGWVlJglcp.mjs → CImFKFaYToUH-bSE.mjs} +2 -2
  15. package/browser/esm/{BTFBedJMRWGvZyCE.mjs → CM_X1zZYzEUPaNJL.mjs} +1 -1
  16. package/browser/esm/CPIWV3Enlh_BF2TY.mjs +19 -0
  17. package/browser/esm/{CndRBvVfQUJIYRRj.mjs → ChYgQL-8qIDFmX31.mjs} +50 -50
  18. package/browser/esm/{BudSIfXBAsTxvu-K.mjs → CtC__ALh4I8PKIln.mjs} +10071 -9246
  19. package/browser/esm/{qO-ujUrgq6H3TQix.mjs → Cy8uYCggktF83278.mjs} +1 -1
  20. package/browser/esm/D2NFcBM4xsv0JJ1q.mjs +184 -0
  21. package/browser/esm/{D9xNz46kAfXMZzp4.mjs → D39XcmtPXVtMN4yF.mjs} +2 -2
  22. package/browser/esm/{CdEO8CEee6lEhabA.mjs → DBvu0tdSf-5vol4e.mjs} +2 -2
  23. package/browser/esm/{Tah7cnFb_HNZdLtj.mjs → DIfAk63CvaOZ3QKi.mjs} +3 -3
  24. package/browser/esm/{B3wf5vZCsWfWsDbj.mjs → D_XMi4_5iO2rkET5.mjs} +1 -1
  25. package/browser/esm/{DgrAuRD2qr2DvFeJ.mjs → Dh84MDs-OhdCPCIg.mjs} +44 -44
  26. package/browser/esm/{DPhGQLNGmDZwODwJ.mjs → Dhw5XEJYFrkYjdU2.mjs} +94 -94
  27. package/browser/esm/{Cxjxk0ncRKx80I-w.mjs → DiXeQjc0WJGLSVEo.mjs} +1 -1
  28. package/browser/esm/DnR0xY7_iE3TmMcg.mjs +348 -0
  29. package/browser/esm/{DK899HhWX1HINMC1.mjs → DnqwX3-2NfGBaXXl.mjs} +25 -25
  30. package/browser/esm/{D64dM68B1pKYFzdP.mjs → DonQz2Tc3k9lNT8E.mjs} +2 -2
  31. package/browser/esm/{Bt8_m94tBdks209L.mjs → DvvqmUQ9Z0NFm1-4.mjs} +1 -1
  32. package/browser/esm/{BnC4-27Igwb8oDf2.mjs → Ln4gsmhqH1LyoANj.mjs} +44 -43
  33. package/browser/esm/{CUzYuYTTGsChC_kZ.mjs → MuNBN02MyZ558c_K.mjs} +2052 -1583
  34. package/browser/esm/{CRkYR-siY2C994KV.mjs → SwLp-iElwDjfcJtv.mjs} +1 -1
  35. package/browser/esm/{C9u8FUewte5ugUjH.mjs → UMQTbO0zNmBpzW1V.mjs} +725 -716
  36. package/browser/esm/aRXqxIzjuSLwawMh.mjs +18 -0
  37. package/browser/esm/index.mjs +482 -440
  38. package/browser/esm/{hCQJcmIzPDxDEv2q.mjs → oSCy1X5CJ1iYtGDp.mjs} +2 -2
  39. package/browser/esm/{DobHLF6VjHr7Xi40.mjs → qCqzZW74-fhaIG2V.mjs} +1 -1
  40. package/browser/esm/{CNdjyofiRu6CYOrr.mjs → r_EZapMBdyS4gUd-.mjs} +50 -48
  41. package/browser/esm/yuF8SbWfjBfrxcq5.mjs +367 -0
  42. package/licenses/dependencies.txt +71 -1
  43. package/node/esm/99miMotf3dOuG5Jk.mjs +372 -0
  44. package/node/esm/{-TA0MneBDKdGhsib.mjs → B3hBxzqJ2_hUylNr.mjs} +3329 -2852
  45. package/node/esm/{BNXLOEddJ6O9gYws.mjs → B5VmOC0jO9Zbh9Mq.mjs} +2 -2
  46. package/node/esm/{DhS6yWjrrSNIJMsn.mjs → B6jhx5pHPs2W5GE7.mjs} +234 -225
  47. package/node/esm/{DUTmDHbFbhLDT4F3.mjs → BCjHRVU8tC5lYypg.mjs} +1 -1
  48. package/node/esm/BEBt5fo__rvT2q_u.mjs +310 -0
  49. package/node/esm/{icn2nX5Z8e_3mNAv.mjs → BELc5aQ_pFPgbiso.mjs} +1 -1
  50. package/node/esm/{DrCf6ITcBhVOFpRj.mjs → BEdxa3I4VOiCsvy7.mjs} +7 -7
  51. package/node/esm/{D3ptRKzASqBut1DE.mjs → BLPrFp_jKGYgWPX1.mjs} +2 -2
  52. package/node/esm/{BskP3b8vUoIOGLY6.mjs → BSVttk12GXNfKZ9k.mjs} +2 -2
  53. package/node/esm/{D4ROK9UwDpS6jO3Z.mjs → BXg-D8Rc_iyB8p7X.mjs} +1 -1
  54. package/node/esm/{DV5CU37aEbFbWFL0.mjs → BfEdeOg4iYXaYTlh.mjs} +1 -1
  55. package/node/esm/BuyAYLI4s33-vmgG.mjs +18 -0
  56. package/node/esm/{C_xf5Bz30VqiJjXn.mjs → C-5JLSNof0FhkuFd.mjs} +1 -1
  57. package/node/esm/{eimUGjiIP-b8HiM6.mjs → C3S4hF1vn0NyJPPd.mjs} +52 -52
  58. package/node/esm/{BL2iiEoqxDEV2Xrg.mjs → CI8UIWR01z9QDlzH.mjs} +3348 -2610
  59. package/node/esm/{pYtP7wPyS96NQyXS.mjs → CPsGyt3vnOdLTShj.mjs} +25 -25
  60. package/node/esm/{CG-qBU5BAaVz7e-P.mjs → Ccocd9DTvOnlOE9D.mjs} +1 -1
  61. package/node/esm/{C14-R6tifRh7pc0p.mjs → CdSTmD2ZvG9NesNR.mjs} +1 -1
  62. package/node/esm/{Q_S1g46ZOTrdhTae.mjs → Crn6dnSQQRCQAnQ-.mjs} +1 -1
  63. package/node/esm/{DdoiuKg9BKubtF1V.mjs → Cyeq1rDslIqF1LKz.mjs} +1 -1
  64. package/node/esm/{Ci_zLYmCD7e-C79O.mjs → D30rC6AWaGGf3CaC.mjs} +1 -1
  65. package/node/esm/D4Y1WJgjiFEgbWrW.mjs +115 -0
  66. package/node/esm/{Vocy-I9dKzZMr0Ct.mjs → DLdXl0O0TXuyqLU4.mjs} +10898 -10685
  67. package/node/esm/{D8hO07ToAibIuniw.mjs → DbPUG2DcQ3T_QhcJ.mjs} +138 -136
  68. package/node/esm/{lGJ42sHqg5if2bba.mjs → DeFE8QfuCeGw-mvd.mjs} +458 -458
  69. package/node/esm/{CiIymQN6aJCul62g.mjs → DiCMnYA2bttmrX3q.mjs} +9 -9
  70. package/node/esm/{DhTya_mhmN53vskv.mjs → Dlk2ZYExFgQ0xE2H.mjs} +1 -1
  71. package/node/esm/{Btw4148Ot8ifhNc1.mjs → I-FZojIFWluC6X-j.mjs} +1 -1
  72. package/node/esm/{C99zzq8DImQXi4BQ.mjs → Lj98EH6coGdKUzuS.mjs} +10 -10
  73. package/node/esm/{B-HUPAcqvK0eeeCz.mjs → NA-8urR7T1NCwrgD.mjs} +38 -37
  74. package/node/esm/{DxazKtROyaI51dWl.mjs → YpOpRyciqQLIY1-G.mjs} +1 -1
  75. package/node/esm/{CkRYLed8Mmn3giNg.mjs → b3XnssSr9lmvAC2N.mjs} +2 -2
  76. package/node/esm/clgEkmEwfB28nkz2.mjs +351 -0
  77. package/node/esm/index.mjs +584 -540
  78. package/node/esm/{CRt3vXe6YmXzqk3H.mjs → pF2vCOTmrxPAB41Q.mjs} +102 -102
  79. package/node/esm/{CBuEu5Jk-LfaDy-H.mjs → uLrulyR7IXq0SF4j.mjs} +44 -44
  80. package/node/esm/{C_aL7CGS1lrNn1Ng.mjs → xRGObcoaGDnAZFnj.mjs} +1 -1
  81. package/package.json +10 -7
  82. package/resources/contents.json +108 -0
  83. package/resources/fonts/aptos-bold-italic.hinted.json +125 -0
  84. package/resources/fonts/aptos-bold-italic.metrics.json +221 -0
  85. package/resources/fonts/aptos-bold-italic.rows.json +8 -0
  86. package/resources/fonts/aptos-bold.hinted.json +125 -0
  87. package/resources/fonts/aptos-bold.metrics.json +221 -0
  88. package/resources/fonts/aptos-bold.rows.json +8 -0
  89. package/resources/fonts/aptos-display-bold-italic.hinted.json +125 -0
  90. package/resources/fonts/aptos-display-bold-italic.metrics.json +221 -0
  91. package/resources/fonts/aptos-display-bold-italic.rows.json +8 -0
  92. package/resources/fonts/aptos-display-bold.hinted.json +125 -0
  93. package/resources/fonts/aptos-display-bold.metrics.json +221 -0
  94. package/resources/fonts/aptos-display-bold.rows.json +8 -0
  95. package/resources/fonts/aptos-display-italic.hinted.json +124 -0
  96. package/resources/fonts/aptos-display-italic.metrics.json +221 -0
  97. package/resources/fonts/aptos-display-italic.rows.json +8 -0
  98. package/resources/fonts/aptos-display-regular.hinted.json +125 -0
  99. package/resources/fonts/aptos-display-regular.metrics.json +221 -0
  100. package/resources/fonts/aptos-display-regular.rows.json +8 -0
  101. package/resources/fonts/aptos-italic.hinted.json +125 -0
  102. package/resources/fonts/aptos-italic.metrics.json +221 -0
  103. package/resources/fonts/aptos-italic.rows.json +8 -0
  104. package/resources/fonts/aptos-narrow-bold-italic.hinted.json +125 -0
  105. package/resources/fonts/aptos-narrow-bold-italic.metrics.json +221 -0
  106. package/resources/fonts/aptos-narrow-bold-italic.rows.json +8 -0
  107. package/resources/fonts/aptos-narrow-bold.hinted.json +125 -0
  108. package/resources/fonts/aptos-narrow-bold.metrics.json +221 -0
  109. package/resources/fonts/aptos-narrow-bold.rows.json +8 -0
  110. package/resources/fonts/aptos-narrow-italic.hinted.json +125 -0
  111. package/resources/fonts/aptos-narrow-italic.metrics.json +221 -0
  112. package/resources/fonts/aptos-narrow-italic.rows.json +8 -0
  113. package/resources/fonts/aptos-narrow-regular.hinted.json +125 -0
  114. package/resources/fonts/aptos-narrow-regular.metrics.json +221 -0
  115. package/resources/fonts/aptos-narrow-regular.rows.json +8 -0
  116. package/resources/fonts/aptos-regular.hinted.json +125 -0
  117. package/resources/fonts/aptos-regular.metrics.json +221 -0
  118. package/resources/fonts/aptos-regular.rows.json +8 -0
  119. package/resources/fonts/arial-bold-italic.rows.json +0 -1
  120. package/resources/fonts/arial-bold.rows.json +0 -1
  121. package/resources/fonts/arial-italic.rows.json +0 -1
  122. package/resources/fonts/arial-regular.rows.json +0 -1
  123. package/resources/fonts/calibri-bold-italic.rows.json +0 -1
  124. package/resources/fonts/calibri-bold.rows.json +0 -1
  125. package/resources/fonts/calibri-italic.rows.json +0 -1
  126. package/resources/fonts/calibri-regular.rows.json +0 -1
  127. package/resources/fonts/cambria-bold-italic.rows.json +0 -1
  128. package/resources/fonts/cambria-bold.rows.json +0 -1
  129. package/resources/fonts/cambria-italic.rows.json +0 -1
  130. package/resources/fonts/cambria-regular.rows.json +0 -1
  131. package/resources/fonts/contents.json +240 -0
  132. package/resources/fonts/courier-new-bold-italic.rows.json +0 -1
  133. package/resources/fonts/courier-new-bold.rows.json +0 -1
  134. package/resources/fonts/courier-new-italic.rows.json +0 -1
  135. package/resources/fonts/courier-new-regular.rows.json +0 -1
  136. package/resources/fonts/times-new-roman-bold-italic.rows.json +0 -1
  137. package/resources/fonts/times-new-roman-bold.rows.json +0 -1
  138. package/resources/fonts/times-new-roman-italic.rows.json +0 -1
  139. package/resources/fonts/times-new-roman-regular.rows.json +0 -1
  140. package/resources/locales/de/model.msg.json +4 -0
  141. package/resources/locales/en/model.msg.json +4 -0
  142. package/types/scripting-api.json +9339 -9320
  143. package/types/scripting.d.ts +322 -200
  144. package/types/src/.generated/wasm/sdk.d.ts +5 -27
  145. package/types/src/address/AddressUtils.d.ts +8 -0
  146. package/types/src/address/_SheetNameQuoteChars.d.ts +3 -0
  147. package/types/src/anomalies/_FocusTable.d.ts +0 -6
  148. package/types/src/calculation/Calculation.d.ts +20 -95
  149. package/types/src/calculation/ExternalBookBindings.d.ts +0 -26
  150. package/types/src/calculation/NamedFormulaCollection.d.ts +6 -2
  151. package/types/src/calculation/TokenType.d.ts +0 -10
  152. package/types/src/calculation/_CloneBoundary.d.ts +0 -24
  153. package/types/src/calculation/_FormulaToolkit.d.ts +0 -5
  154. package/types/src/calculation/compiler/ASTTypes.d.ts +0 -13
  155. package/types/src/calculation/compiler/CompilerUtils.d.ts +0 -227
  156. package/types/src/calculation/compiler/FormulaLexer.d.ts +0 -8
  157. package/types/src/calculation/compiler/FormulaParser.d.ts +0 -61
  158. package/types/src/calculation/compiler/ParserUtils.d.ts +0 -24
  159. package/types/src/calculation/compiler/Types.d.ts +0 -52
  160. package/types/src/calculation/engine/CalcBackend.d.ts +15 -157
  161. package/types/src/calculation/engine/index.d.ts +0 -8
  162. package/types/src/calculation/executor/CalcExecutor.d.ts +13 -130
  163. package/types/src/calculation/executor/CalcExecutorUtils.d.ts +30 -11
  164. package/types/src/calculation/executor/CircularReference.d.ts +0 -17
  165. package/types/src/calculation/executor/_BlockOrder.d.ts +29 -0
  166. package/types/src/calculation/executor/_WhatIf.d.ts +0 -19
  167. package/types/src/calculation/formula/FormulaBlock.d.ts +0 -28
  168. package/types/src/calculation/formula/FormulaRecordView.d.ts +0 -15
  169. package/types/src/calculation/formula/IFormulaBlock.d.ts +0 -12
  170. package/types/src/calculation/formula/LambdaValue.d.ts +0 -15
  171. package/types/src/calculation/formula/TokenUtils.d.ts +1 -8
  172. package/types/src/calculation/grid/CalcGrid.d.ts +5 -59
  173. package/types/src/calculation/grid/CalcGridBackend.d.ts +8 -9
  174. package/types/src/calculation/grid/CalcGridProxy.d.ts +0 -13
  175. package/types/src/calculation/grid/CalcGridUtils.d.ts +18 -22
  176. package/types/src/calculation/grid/ICalcGrid.d.ts +13 -98
  177. package/types/src/calculation/grid/_CalcRequest.d.ts +1 -29
  178. package/types/src/calculation/spatial/CircularEntry.d.ts +0 -10
  179. package/types/src/calculation/spatial/FormulaSpatialValue.d.ts +52 -82
  180. package/types/src/calculation/spatial/SpillEntry.d.ts +10 -7
  181. package/types/src/calculation/state/CalcScope.d.ts +0 -9
  182. package/types/src/calculation/state/CalcState.d.ts +0 -12
  183. package/types/src/calculation/state/CalculationContext.d.ts +4 -37
  184. package/types/src/calculation/state/DeferredCalls.d.ts +11 -64
  185. package/types/src/calculation/state/IContextContainer.d.ts +4 -60
  186. package/types/src/calculation/state/_KeepBlanks.d.ts +5 -0
  187. package/types/src/calculation/state/_PendingOverlayGrid.d.ts +46 -33
  188. package/types/src/calculation/state/_WhatIfLayer.d.ts +0 -14
  189. package/types/src/calculation/symbol/ExternalSheetSymbols.d.ts +0 -42
  190. package/types/src/calculation/symbol/ISymbolRegistry.d.ts +0 -6
  191. package/types/src/calculation/symbol/SheetSymbolProvider.d.ts +0 -12
  192. package/types/src/calculation/symbol/SymbolRegistry.d.ts +0 -9
  193. package/types/src/calculation/toolkit/index.d.ts +0 -8
  194. package/types/src/cell/ICell.d.ts +14 -28
  195. package/types/src/cellRange/ICellRange.d.ts +22 -11
  196. package/types/src/chart/Chart.d.ts +0 -16
  197. package/types/src/chart/_ChartParts.d.ts +0 -39
  198. package/types/src/chart/_ChartSource.d.ts +0 -14
  199. package/types/src/chart/createChart.d.ts +1 -1
  200. package/types/src/chart/kinds/ChartKind.d.ts +4 -4
  201. package/types/src/chart/kinds/_Placeholder.d.ts +0 -1
  202. package/types/src/chart/layout/TextMeasurer.d.ts +0 -20
  203. package/types/src/chart/layout/_LayoutUtils.d.ts +0 -16
  204. package/types/src/chart/math/BoxStats.d.ts +0 -8
  205. package/types/src/chart/math/DateUnitCalcs.d.ts +0 -10
  206. package/types/src/chart/math/Histogram.d.ts +0 -17
  207. package/types/src/chart/math/OrdUnitCalcs.d.ts +0 -53
  208. package/types/src/chart/math/Treemap.d.ts +0 -15
  209. package/types/src/chart/math/Trendlines.d.ts +0 -8
  210. package/types/src/chart/math/UnitCalcs.d.ts +0 -22
  211. package/types/src/chart/model/_Edits.d.ts +0 -33
  212. package/types/src/chart/model/_Grouping.d.ts +0 -25
  213. package/types/src/chart/model/_Inference.d.ts +0 -18
  214. package/types/src/chart/model/_NewChart.d.ts +0 -41
  215. package/types/src/chart/model/_OfPie.d.ts +0 -7
  216. package/types/src/chart/resolve/_LegacyStyles.d.ts +0 -20
  217. package/types/src/chart/resolve/_Resolve.d.ts +0 -19
  218. package/types/src/chart/resolve/_ResolvedChart.d.ts +0 -6
  219. package/types/src/collections/_GridUtils.d.ts +0 -10
  220. package/types/src/comment/_NoteBox.d.ts +0 -15
  221. package/types/src/condition/AnchoredConditional.d.ts +1 -23
  222. package/types/src/condition/BuiltInOperators/AbstractOperator.d.ts +0 -49
  223. package/types/src/condition/BuiltinSelectors/DisplaySelector.d.ts +0 -10
  224. package/types/src/condition/ICondition.d.ts +2 -2
  225. package/types/src/condition/_ConditionUtils.d.ts +0 -38
  226. package/types/src/externalBook/ExternalBookCollection.d.ts +0 -15
  227. package/types/src/externalBook/ExternalBookName.d.ts +2 -3
  228. package/types/src/externalBook/IExternalBook.d.ts +13 -14
  229. package/types/src/fetch/IFetcher.d.ts +2 -1
  230. package/types/src/fetch/_WorkbookFetch.d.ts +1 -1
  231. package/types/src/font/AdvanceTable.d.ts +16 -42
  232. package/types/src/font/IFont.d.ts +32 -9
  233. package/types/src/font/TableFileAdvanceBuilder.d.ts +6 -3
  234. package/types/src/font/_FontUtils.d.ts +0 -8
  235. package/types/src/font/_StandIns.d.ts +33 -0
  236. package/types/src/io/IWorkbookIO.d.ts +3 -3
  237. package/types/src/io/WorkbookOrigin.d.ts +2 -2
  238. package/types/src/license/LicenseManager.d.ts +2 -1
  239. package/types/src/license/_Utils.d.ts +4 -3
  240. package/types/src/license/details.d.ts +3 -1
  241. package/types/src/license/keys.d.ts +6 -0
  242. package/types/src/license/license-key.d.ts +15 -33
  243. package/types/src/license/token.d.ts +55 -0
  244. package/types/src/picture/IPicture.d.ts +45 -0
  245. package/types/src/picture/Picture.d.ts +12 -0
  246. package/types/src/pivot/PivotTable.d.ts +0 -7
  247. package/types/src/primitives/AsyncValue.d.ts +0 -12
  248. package/types/src/primitives/PrimitiveUtils.d.ts +1 -110
  249. package/types/src/primitives/Range.d.ts +0 -60
  250. package/types/src/primitives/ScalarCollation.d.ts +0 -106
  251. package/types/src/primitives/stats/AggregateStats.d.ts +0 -19
  252. package/types/src/print/PageLayout.d.ts +0 -6
  253. package/types/src/reference/ReferenceUtils.d.ts +4 -2
  254. package/types/src/richData/RichDataRegistry.d.ts +6 -0
  255. package/types/src/scripting/TypedFunction.d.ts +0 -109
  256. package/types/src/scripting/enumManifest.browser.d.ts +7 -2
  257. package/types/src/sheet/IWorksheet.d.ts +2 -5
  258. package/types/src/sheet/NamedCellRange.d.ts +0 -21
  259. package/types/src/sheet/SheetCell.d.ts +8 -2
  260. package/types/src/sheet/Worksheet.d.ts +7 -48
  261. package/types/src/sheet/_DelimitedText.d.ts +13 -0
  262. package/types/src/sheet/_IgnoredErrors.d.ts +0 -12
  263. package/types/src/sheet/_ScalarListFactory.d.ts +0 -19
  264. package/types/src/sheet/_SheetCoords.d.ts +0 -7
  265. package/types/src/sheet/_SheetFilterUtils.d.ts +0 -8
  266. package/types/src/sheet/_SheetStateReader.d.ts +0 -10
  267. package/types/src/sheet/_SheetStateTypes.d.ts +0 -3
  268. package/types/src/sheet/_SheetUtils.d.ts +1 -1
  269. package/types/src/sheet/style/_RowLine.d.ts +32 -0
  270. package/types/src/sheet/style/_StyleUtils.d.ts +6 -14
  271. package/types/src/sheetView/_SheetViewUtils.d.ts +0 -1
  272. package/types/src/slicer/_BuiltInSlicerStyles.d.ts +0 -5
  273. package/types/src/style/ICellStyle.d.ts +4 -0
  274. package/types/src/table/AnchoredTable.d.ts +0 -147
  275. package/types/src/text/TextFrame.d.ts +4 -1
  276. package/types/src/text/TextStacked.d.ts +0 -24
  277. package/types/src/text/TextWrapper.d.ts +3 -5
  278. package/types/src/text/_LineBox.d.ts +24 -0
  279. package/types/src/text/_TextUtils.d.ts +5 -2
  280. package/types/src/text/_TextWrapperFallback.d.ts +2 -1
  281. package/types/src/wasm/sdkWasm.d.ts +1 -1
  282. package/types/src/workbook/Workbook.d.ts +0 -10
  283. package/browser/esm/2WuhYrIpYmOR5H73.mjs +0 -698
  284. package/browser/esm/CTe2qfmIUEad6FJv.mjs +0 -199
  285. package/browser/esm/CfRqiPDg6RBTg1EN.mjs +0 -367
  286. package/browser/esm/DVroRnhi-5IDXNgM.mjs +0 -210
  287. package/browser/esm/DwZCT7DZiiXoTweg.mjs +0 -14
  288. package/node/esm/BSvOluusoDM4z_dx.mjs +0 -811
  289. package/node/esm/CPI58duc0j0a-HpJ.mjs +0 -115
  290. package/node/esm/DggQ23jKMpwhENfa.mjs +0 -372
  291. package/node/esm/Dn1M7YWi25DeeYUb.mjs +0 -210
  292. package/node/esm/ZXPFcsT2zrALCZux.mjs +0 -289
@@ -51,11 +51,11 @@ declare global {
51
51
  * if (range.hasError()) return range.firstError();
52
52
  * ```
53
53
  *
54
- * placed before its own validation where Excel's error outranks it (`LARGE(range-with-#N/A, 0)`
54
+ * placed before its own validation where the member's error outranks it (`LARGE(range-with-#N/A, 0)`
55
55
  * is `#N/A`, not `#NUM!`). Aggregators and consumers say it; reshapers and lookups, whose members
56
56
  * pass through or are never read, need no line at all. Where a function takes several ranges the
57
57
  * lines run in ARGUMENT order — the whole of argument N before N+1, row-major within — which is
58
- * Excel's which-error-wins order, and a function that pairs its ranges (the paired
58
+ * the which-error-wins order, and a function that pairs its ranges (the paired
59
59
  * statistics) orders its own scan the way it pairs.
60
60
  *
61
61
  * > *A bare error propagates unless your function opts in to seeing it; the members of a range
@@ -918,8 +918,8 @@ declare global {
918
918
  * asks each group's kind for the group: where its bars, points, slices or whatever it draws go.
919
919
  *
920
920
  * @beta The context a kind is given speaks the layout's frame units today: points from the frame's
921
- * origin, as the layout works in them (DESIGN-CHART §4), with `at` and `px` to convert. It will
922
- * speak px, as {@link ChartLayout} does, before the contract is settled.
921
+ * origin, as the layout works in them, with `at` and `px` to convert. This may change to px, as
922
+ * {@link ChartLayout} uses, while the API is in beta.
923
923
  *
924
924
  * `coordinates` says what the chrome lays out for the kind: `cartesian`, a pair of axes
925
925
  * (category and value, or a scatter's two value axes) whose scales are fit to what
@@ -1081,7 +1081,7 @@ declare global {
1081
1081
  xOfValue(scale: ValueScale, axis: ResolvedChart.Axis, value: number): number;
1082
1082
  /** The series layout every kind states: id, name, values, slots, fill, stroke and trendlines. */
1083
1083
  base(series: ResolvedChart.Series): Omit<ChartLayout.SeriesLayout, 'marker'>;
1084
- /** A line or area group's up/down bars, high-low lines and drop lines (DESIGN-CHART §4.7). */
1084
+ /** A line or area group's up/down bars, high-low lines and drop lines. */
1085
1085
  analysisLines(scale: ValueScale, tops: (number | null)[][], baseValue: number): Pick<ChartLayout.LineGroupLayout, 'upDownBars' | 'hiLowLines' | 'dropLines'>;
1086
1086
  /** Lines in the frame cut to the plot, in px. */
1087
1087
  segments(lines: Pt[][]): ChartLayout.Segment[];
@@ -1124,7 +1124,7 @@ declare global {
1124
1124
  * The kinds of chart group, by group type: the built-ins, and any a host registers.
1125
1125
  *
1126
1126
  * @remarks
1127
- * The built-in kinds register when the chart module loads (with the first chart, DESIGN-CHART §7),
1127
+ * The built-in kinds register when the chart module loads (with the first chart),
1128
1128
  * so before that {@link get} answers `undefined` for `'bar'`; a host's kind registered under a
1129
1129
  * built-in type keeps its place when they do. A registration is a call, never a side effect of an
1130
1130
  * import: the package declares no side effects, so a bundler drops a module imported only for one.
@@ -2708,30 +2708,6 @@ declare global {
2708
2708
  }
2709
2709
  }
2710
2710
 
2711
- /**
2712
- * Stacked cell-text layout — Excel's "Vertical Text" (`textRotation="255"`).
2713
- *
2714
- * Stacked text is not rotated. Every glyph stays upright and occupies one SLOT of the font's line
2715
- * pitch, glyphs advancing downward in a column. Measured against Excel (hidden-COM probes, see
2716
- * `VERTICAL-TEXT-PLAN.md`):
2717
- *
2718
- * 1. Columns come from explicit line breaks — one column per line, left → right in reading order —
2719
- * and, when the cell wraps, from breaking a column that would exceed the content height: greedy
2720
- * at spaces (the space at a break is consumed), per glyph inside a word longer than the capacity.
2721
- * It is the horizontal wrap rule transposed. An unwrapped cell keeps one column; a line break
2722
- * there is a blank slot.
2723
- * 2. Leading and trailing spaces of a column are measured but never painted (see
2724
- * {@link layoutColumns}); inner spaces are blank slots.
2725
- * 3. Each column is aligned on its own by the vertical alignment (Top / Center / Bottom; Justify
2726
- * and Distributed behave as Top and Center — nothing is spread). The horizontal alignment places
2727
- * the group of columns; the caller resolves General (Excel centers it). Columns are one pitch
2728
- * wide and glyphs center in them.
2729
- * 4. Nothing overflows: the footprint clips to the cell on both axes.
2730
- *
2731
- * All output is pure geometry, renderer-agnostic: a DOM renderer maps each column to a box of
2732
- * `pitch` line-height with one glyph per line; a canvas renderer paints each glyph centered in
2733
- * its slot.
2734
- */
2735
2711
  /**
2736
2712
  * One stacked column.
2737
2713
  */
@@ -2765,7 +2741,7 @@ declare global {
2765
2741
  * as `IModule.JSON` in the SDK. Produced by `ScriptCompiler.compile` (Node, which returns
2766
2742
  * it inside a {@link CompileResult} alongside diagnostics) and executed compiler-free via
2767
2743
  * `loadCompiledModule`. Compile diagnostics are NOT part of this artifact — they live on
2768
- * {@link CompileResult}. See `private-assets/design/SXLM-FORMAT.md` for the normative reference.
2744
+ * {@link CompileResult}.
2769
2745
  */
2770
2746
  export interface CompiledModule {
2771
2747
  /**
@@ -2985,7 +2961,7 @@ declare global {
2985
2961
  * of {@link IChart} works, `getLayout` lays it out at a size, and `@sheetxl/react`'s `ChartElement`
2986
2962
  * draws it. Its writes are not undoable: it has no transaction store.
2987
2963
  *
2988
- * The chart's code is loaded with the first chart, so this is asynchronous (DESIGN-CHART §7).
2964
+ * The chart's code is loaded with the first chart, so this is asynchronous.
2989
2965
  */
2990
2966
  export function createChart(json: IChart.JSON, options?: CreateChartOptions): Promise<IChart>;
2991
2967
 
@@ -3343,7 +3319,7 @@ declare global {
3343
3319
  *
3344
3320
  * @remarks
3345
3321
  * This is the form Excel's own formula bar shows for a book it cannot see, which is the state every
3346
- * book is in until a resolver opens one (DESIGN-EXTERNAL-LINKS §4B). The caller quotes it —
3322
+ * book is in until a resolver opens one. The caller quotes it —
3347
3323
  * `sheetNameToString` does, since a path carries separators no sheet name may.
3348
3324
  *
3349
3325
  * The directory is the first source that carries one: a book Excel recorded by a RELATIVE path
@@ -3509,8 +3485,8 @@ declare global {
3509
3485
  * Both are the same mechanism at different granularity — the marshaller picks the unit from the
3510
3486
  * element type — and a blank drops out of either. The scalar case is the common one; the range case
3511
3487
  * exists because a reference UNION is a single argument holding several areas: a parameter that does
3512
- * not declare `Flatten` refuses one outright (`#VALUE!` — `TRANSPOSE((A1:A3,C1:C3))` in Excel), and a
3513
- * body that declares it answers for the union itself, in one line, the way Excel's own do:
3488
+ * not declare `Flatten` refuses one outright (`#VALUE!` — `TRANSPOSE((A1:A3,C1:C3))`), and a
3489
+ * body that declares it answers for the union itself, in one line, the way the built-ins do:
3514
3490
  * `AREAS` counts the areas, `SUM` adds them, `ROWS` answers `#REF!` to more than one, the lookups
3515
3491
  * `#N/A`.
3516
3492
  *
@@ -3669,7 +3645,7 @@ declare global {
3669
3645
  *
3670
3646
  * SpillErrorScalarSubType | "Unknown" | "Collision" | "IndeterminateSize" | "WorksheetEdge" | "OutOfMemoryWhileCalc" | "Table" | "MergedCell"
3671
3647
  * # Office 2023
3672
- * 10. #CONNECT! This occurs when a data type is used that is not currently supported in this version of Excel.
3648
+ * 10. #CONNECT! This occurs when a data type is used that is not currently supported.
3673
3649
  * 11. #BLOCKED! Indicates that an action or feature is blocked, possibly due to security settings, protected view, or other restrictions. Often related to online features, external links, or macros.
3674
3650
  * 12. #UNKNOWN! May be returned in the case of a protected workbook.
3675
3651
  * 13. #FIELD! Invalid field name for a data type.
@@ -6881,6 +6857,11 @@ declare global {
6881
6857
  isTopLeft(): boolean;
6882
6858
  /**
6883
6859
  * Returns the range of the cell if it is a spill cell.
6860
+ *
6861
+ * @remarks
6862
+ * For a blocked spill (a {@link getSpillKind | kind} of `error`, the anchor shows `#SPILL!`) this
6863
+ * is the range it would take. It holds none of those cells: their values are whatever is in the
6864
+ * way. Spills can overlap, and one that is not blocked is returned ahead of one that is.
6884
6865
  */
6885
6866
  getSpill(): ICellRange | null;
6886
6867
  /**
@@ -7560,26 +7541,11 @@ declare global {
7560
7541
  * cell with none authored has the Normal style's. `majority` and `of` are evidence, not a
7561
7542
  * gate: a convention held by 3 of 5 cells is reported as such.
7562
7543
  *
7563
- * **Rank** says which finding to read first. It is not a confidence. For a run finding it is
7564
- * `weight × (1 / thickness) × (flanks / max(2, thickness)) × (1 − corroboration)`, where
7565
- * `weight` is the layer's and `corroboration` is the weight of the corroborating layers over the
7566
- * weight of every layer that could have corroborated. The layer weights are formula shape `1`,
7567
- * kind `0.6`, number format `0.5`, formula or typed value `0.4`, font `0.3`, fill `0.1`,
7568
- * alignment `0.05`. Every other check ranks at a fixed weight: `repeatedReference` and
7569
- * `lookupShape` `1`, `approximateMatch` and `externalReference` `0.9`, `formulaRange` and
7570
- * `degenerateCall` `0.8`, `emptyCellReference` and `sumIncludesSubtotal` `0.6`,
7571
- * `keyLabelMismatch` and `linkLabelMismatch` `0.4`, `unlockedFormula` and `signVsSiblings` `0.1`,
7572
- * `numberStoredAsText` `0.05`. A `styleRole` finding ranks at the role's weight (`link` `0.6`,
7573
- * `reference` `0.4`, `input` `0.3`, `computed` `0.2`) times `majority / of`. A
7574
- * `misalignedReference` finding ranks at `0.8` times its target's share: `lineItem` `1`,
7575
- * `outsideBlocks` `0.5`, `closingRow` and `absolute` `0.25`.
7576
- *
7577
- * A run or `styleRole` finding's rank is then divided by the number of times the same finding
7578
- * (the same check and evidence) occurs in the workbook: a finding repeated across a model is the
7579
- * author's style, and the one that occurs once is the exception to read first. So a finding's
7580
- * rank can change when another sheet changes. The weights are measured on the SpreadsheetBench
7581
- * v2 Debugging goldens and move as other measurements arrive. Regions of the `anomalies` feature
7582
- * list highest rank first, and so do a cell's findings, in check order within an equal rank.
7544
+ * **Rank** says which finding to read first. It is not a confidence, and it is relative to the
7545
+ * workbook: a finding repeated across a model is the author's style, and the one that occurs
7546
+ * once is the exception to read first. So a finding's rank can change when another sheet
7547
+ * changes. Regions of the `anomalies` feature list highest rank first, and so do a cell's
7548
+ * findings, in check order within an equal rank.
7583
7549
  *
7584
7550
  * **Literals and twins.** `literalMatchesInput` reads the numbers typed into a formula against
7585
7551
  * the typed numbers no formula reads: a reference replaced by its value is what left the input
@@ -7589,16 +7555,12 @@ declare global {
7589
7555
  * when both are a calendar period, a power of ten or a small count. Every side of a divergence is
7590
7556
  * listed, since two wrong rows can outvote the right one.
7591
7557
  *
7592
- * `literalMatchesInput` ranks at `0.8 / matches`. A `twinBlockDivergence` finding ranks at `0.8`
7593
- * times the share of the twins on the other side, `twins / (twins + this side's count)`, halved
7594
- * for a sign: signs differ between line items by design, so a sign divergence is read when asked
7595
- * for by check. `scaleOutlier` ranks at `0.8`.
7558
+ * A sign divergence ranks low: signs differ between line items by design, so it is read when
7559
+ * asked for by check.
7596
7560
  *
7597
7561
  * `constantFrequency` reports every constant a formula types, the common ones too, with how many
7598
- * places in the workbook type it (`uses`) and of how many constant uses (`of`). It ranks at
7599
- * `0.1 / uses × of / (of + 10)`: the rarer the constant, the higher, and a constant on a workbook
7600
- * that types few has little to be rare against. A finding's `uses` and `of` change when another
7601
- * sheet changes.
7562
+ * places in the workbook type it (`uses`) and of how many constant uses (`of`). The rarer the
7563
+ * constant, the higher it ranks. A finding's `uses` and `of` change when another sheet changes.
7602
7564
  *
7603
7565
  * A label's position is absolute (`R12C3`), since it stays put whichever cell of a region reads
7604
7566
  * it; its text is the one read at the region's first cell.
@@ -9377,7 +9339,7 @@ declare global {
9377
9339
  * // Hunting an embedded hardcode: read its checks' findings first, 25 regions at a time.
9378
9340
  * sheet.getAnomalies({ checks: ['hardcodeInRun', 'styleRole'], limit: 25 });
9379
9341
  * sheet.getAnomalies({ checks: ['hardcodeInRun', 'styleRole'], limit: 25, offset: 25 });
9380
- * // Or name the kind of defect and let the measured order decide.
9342
+ * // Or name the kind of defect and let the ranking decide.
9381
9343
  * sheet.getAnomalies({ focus: 'unitMismatch', limit: 25 });
9382
9344
  * ```
9383
9345
  *
@@ -9983,10 +9945,13 @@ declare global {
9983
9945
  *
9984
9946
  * This method is a more scalable alternative to `getValues` or `getCells` for large or sparse ranges,
9985
9947
  * as it:
9986
- * 1. Skips empty values by default.
9948
+ * 1. Skips empty values by default, however much of the range is styled.
9987
9949
  * 2. Avoids creating large arrays.
9988
9950
  * 3. Allows for early termination.
9989
-
9951
+ *
9952
+ * To reach blank cells that have a feature, such as a fill or a hyperlink, name it in
9953
+ * {@link ICellRange.IteratorOptions.features}.
9954
+ *
9990
9955
  * @param callback A function that will be called for each non-empty cell in the range. The callback receives:
9991
9956
  * - `value`: The `Scalar` at the current cell.
9992
9957
  * - `context`: A `IteratorContext` object providing additional information and utilities for the cell.
@@ -10750,8 +10715,8 @@ declare global {
10750
10715
  *
10751
10716
  * @remarks
10752
10717
  * The same lens {@link ICellRange.getCounts} and {@link ICellRange.getRegions} take, and it
10753
- * costs no extra scan: the range is split at the hidden runs first (off the header run
10754
- * structure, no per-cell probe) and the resulting pieces are measured as ONE population.
10718
+ * costs no extra scan: the range is split at the hidden runs first and the resulting pieces
10719
+ * are measured as ONE population.
10755
10720
  *
10756
10721
  * Optionally an {@link IRange.Axis} to skip on one axis only.
10757
10722
  */
@@ -11291,7 +11256,8 @@ declare global {
11291
11256
  */
11292
11257
  readonly Role: "role";
11293
11258
  /**
11294
- * Direct date-category number format — `yyyy-mm-dd`, `mm/dd/yyyy`, and the like.
11259
+ * A date-category number format, given directly or by a named style — `yyyy-mm-dd`,
11260
+ * `mm/dd/yyyy`, and the like.
11295
11261
  *
11296
11262
  * @remarks
11297
11263
  * A formatting predicate, not a value kind: a blank cell or a text cell formatted this way
@@ -11335,7 +11301,11 @@ declare global {
11335
11301
  readonly Fill: "fill";
11336
11302
  /** Direct borders. */
11337
11303
  readonly Borders: "borders";
11338
- /** Direct number format. Region payloads carry the format string and its category. */
11304
+ /**
11305
+ * A number format given directly or by a named style, not one left at Normal's. Region payloads
11306
+ * carry the format string and its category, so a block with `0%` set directly and one with the
11307
+ * `Percent` style are one region.
11308
+ */
11339
11309
  readonly NumberFormat: "numberFormat";
11340
11310
  /** Direct alignment. */
11341
11311
  readonly Alignment: "alignment";
@@ -11352,7 +11322,7 @@ declare global {
11352
11322
  readonly Table: "table";
11353
11323
  /** Auto-table membership. */
11354
11324
  readonly AutoTable: "autoTable";
11355
- /** Has a hyperlink. */
11325
+ /** Has a hyperlink. Regions group by what the link says, so the same link set twice is one region. */
11356
11326
  readonly Hyperlink: "hyperlink";
11357
11327
  /**
11358
11328
  * Ignores one or more of Excel's error checks. Regions group by the set of checks ignored.
@@ -11506,8 +11476,8 @@ declare global {
11506
11476
  checks?: readonly ICell.ErrorCheck[];
11507
11477
  /**
11508
11478
  * The kind of defect being looked for, or several: regions are ordered by how often findings
11509
- * like theirs have been that kind of defect, measured on audited models, and by rank where
11510
- * that is equal. With `checks` too, the named checks still list first and `focus` orders
11479
+ * like theirs have been that kind of defect in audited models, and by rank where that is
11480
+ * equal. With `checks` too, the named checks still list first and `focus` orders
11511
11481
  * within each. An unknown name throws.
11512
11482
  *
11513
11483
  * @defaultValue none — by rank
@@ -11603,9 +11573,12 @@ declare global {
11603
11573
  /**
11604
11574
  * The features the iteration resolves and visits.
11605
11575
  *
11606
- * @defaultValue all features
11576
+ * @defaultValue all features are resolved, and only the cells with values are visited
11607
11577
  *
11608
11578
  * @remarks
11579
+ * Naming a feature also visits the blank cells that have it: `features: 'hyperlink'` reaches a
11580
+ * link on an empty cell, and `features: 'fill'` every cell of a filled column.
11581
+ *
11609
11582
  * Two effects, both wins for a caller that does not need everything:
11610
11583
  * - The iterator only materializes the requested features' state onto the context — an
11611
11584
  * excluded feature is never even looked up.
@@ -12565,6 +12538,10 @@ declare global {
12565
12538
  /**
12566
12539
  * Measure the text using the styling properties
12567
12540
  *
12541
+ * @remarks
12542
+ * The vertical metrics are a cell's line: `lineHeight` is the height of a row sized to one
12543
+ * line of this text, which leaves room around the font's ascent and descent as Excel does.
12544
+ *
12568
12545
  * @param text The text to measure.
12569
12546
  * @param size Size @defaultValue 'to the cell font.size'
12570
12547
  * @param family Family @defaultValue 'to the cell font.family'
@@ -17223,8 +17200,8 @@ declare global {
17223
17200
  /**
17224
17201
  * The text a cell SHOWS: under a filter the displayed text, so `$1` is a cell holding 1 under
17225
17202
  * `$0`; under a format or a validation, where nothing is shown at evaluation, the value's own
17226
- * text. Type text. Excel's filter `equal` and its values list compare this way
17227
- * (DESIGN-FILTER §3.2, MODEL-CONDITIONS §4); `equalTo` under no selector is value equality.
17203
+ * text. Type text. Excel's filter `equal` and its values list compare this way;
17204
+ * `equalTo` under no selector is value equality.
17228
17205
  */
17229
17206
  readonly Display: "display";
17230
17207
  readonly Number: "number";
@@ -19997,8 +19974,7 @@ declare global {
19997
19974
  *
19998
19975
  * @remarks
19999
19976
  * Excel's external link is not a live reference — it is the cache plus enough to go re-fetch the
20000
- * source. See the design doc for the full model:
20001
- * `private-assets/design/calc/DESIGN-EXTERNAL-LINKS.md`.
19977
+ * source.
20002
19978
  *
20003
19979
  * Two members read as "which book is this", and they answer different questions:
20004
19980
  *
@@ -20058,8 +20034,8 @@ declare global {
20058
20034
  *
20059
20035
  * @remarks
20060
20036
  * **Sparse.** A cell the cache does not hold — and a sheet it holds nothing for — reads as a
20061
- * BLANK cell, which is what Excel computes with the source closed (design doc §6 items 1/2).
20062
- * Values only — no format, no style, no comment; a cached date is a plain serial (§2.5).
20037
+ * BLANK cell, which is what Excel computes with the source closed. Values only — no format, no
20038
+ * style, no comment; a cached date is a plain serial.
20063
20039
  *
20064
20040
  * @param sheetIndex Position in {@link getSheetNames}, matching the XML's `sheetId` (0-based).
20065
20041
  */
@@ -20081,8 +20057,8 @@ declare global {
20081
20057
  * (`[Budget.xlsx]Sheet1`) once a resolver holds it.
20082
20058
  *
20083
20059
  * @remarks
20084
- * A readout of the book's state, not a preference — see DESIGN-EXTERNAL-LINKS §4B. Until phase E
20085
- * there is no resolver, so this is always the closed form. The caller quotes it.
20060
+ * A readout of the book's state, not a preference: without a resolver this is always the closed
20061
+ * form. The caller quotes it.
20086
20062
  *
20087
20063
  * @param sheetName Omitted for the book-scoped `[1]!Name` form.
20088
20064
  */
@@ -20127,8 +20103,8 @@ declare global {
20127
20103
  * @remarks
20128
20104
  * Needs a resolver (`ICellContainerOptions.externalBookResolver`, given when the workbook is
20129
20105
  * built); without one every book is `'unavailable'` and nothing changes, which is the state a
20130
- * workbook is in until a host supplies one (DESIGN-EXTERNAL-LINKS §4D). A replaced cache is one undoable step, and every formula
20131
- * citing the book reads the new values. A resolver that throws leaves the cache as it was and
20106
+ * workbook is in until a host supplies one. A replaced cache is one undoable step, and every
20107
+ * formula citing the book reads the new values. A resolver that throws leaves the cache as it was and
20132
20108
  * marks each cached sheet `refreshError`, as Excel records a refresh it could not complete.
20133
20109
  */
20134
20110
  refresh(): Promise<IExternalBook.RefreshResult>;
@@ -20158,8 +20134,8 @@ declare global {
20158
20134
  * the book is opened from, `absoluteUrl` its 2021 cloud-URL companion.
20159
20135
  *
20160
20136
  * @remarks
20161
- * Not derivable from {@link type} — the two can carry the SAME relationship type (measured on
20162
- * task 40234, where a relative and an absolute `externalLinkPath` sit on one part). Absent for
20137
+ * Not derivable from {@link type} — the two can carry the SAME relationship type (a relative
20138
+ * and an absolute `externalLinkPath` can sit on one part). Absent for
20163
20139
  * an entry nothing points at, which is a real shape too: an `xlPathMissing` or
20164
20140
  * `externalLinkLongPath` rel rides along on the part without being referenced from it.
20165
20141
  */
@@ -20198,10 +20174,10 @@ declare global {
20198
20174
  * Opens a book's source and answers its current contents, or declines.
20199
20175
  *
20200
20176
  * @remarks
20201
- * DESIGN-EXTERNAL-LINKS §4D: the default one (phase E) is `WorkbookIO.read` with
20177
+ * A resolver for a workbook file should read it with `WorkbookIO.read` and
20202
20178
  * `calcOnLoad: 'none'`, taking the source's own cached values and never evaluating it — that is
20203
- * what Excel's cache holds, and it keeps A-cites-B-cites-C from becoming a crawl. An extension
20204
- * point for a source that is not a workbook file. WHETHER a source may be opened at all — an
20179
+ * what Excel's cache holds, and it keeps A-cites-B-cites-C from becoming a crawl. A source that
20180
+ * is not a workbook file can be resolved too. WHETHER a source may be opened at all — an
20205
20181
  * untrusted file naming an arbitrary path or URL — is the host's decision, made before this is
20206
20182
  * asked; a resolver never fetches on its own initiative, only on {@link IExternalBook.refresh}.
20207
20183
  */
@@ -20219,7 +20195,7 @@ declare global {
20219
20195
  /**
20220
20196
  * Sparse cell values — the same encoding `IWorksheet.JSON.data` uses (`Scalar.JSON` is already just
20221
20197
  * the value+type pair; style/formula live in sibling fields there, none of which apply to a
20222
- * values-only cache — design doc §2.5).
20198
+ * values-only cache).
20223
20199
  */
20224
20200
  data: Tuple.GridTuple<Scalar.JSON>;
20225
20201
  }
@@ -20361,7 +20337,8 @@ declare global {
20361
20337
  * the `https` handler.
20362
20338
  *
20363
20339
  * @returns The response; rejects with a `TypeError` when no handler serves the scheme, as
20364
- * `fetch` does for a URL it cannot reach.
20340
+ * `fetch` does for a URL it cannot reach. In a browser the default handlers reject with a
20341
+ * `FormulaError.Blocked` when the site responded but does not allow web pages to read it.
20365
20342
  */
20366
20343
  fetch(input: string, init?: RequestInit): Promise<Response>;
20367
20344
  /**
@@ -21502,9 +21479,8 @@ declare global {
21502
21479
  readonly strikeThickness?: number;
21503
21480
  readonly italicAngle?: number;
21504
21481
  /**
21505
- * The line pitch in px — what a line of this font advances by, and the height of a row sized
21506
- * to it: `ascent + descent + 2` (Excel's standard row height for the font; the 2 is the
21507
- * gridline gutter above and below the font box). Includes {@link lineGap}.
21482
+ * The line pitch in px — what a line of this text advances by: {@link ascent} plus
21483
+ * {@link descent} plus {@link lineGap}.
21508
21484
  */
21509
21485
  readonly lineHeight: number;
21510
21486
  /**
@@ -21512,6 +21488,7 @@ declare global {
21512
21488
  * paints the line as a box (a CSS line box) puts the alphabetic baseline.
21513
21489
  */
21514
21490
  readonly baseline: number;
21491
+ /** The leading in px: the room in {@link lineHeight} beyond the ascent and descent. */
21515
21492
  readonly lineGap: number;
21516
21493
  /**
21517
21494
  * The font's ascent above the baseline in whole px at the measured size — GDI's `tmAscent`,
@@ -21527,9 +21504,8 @@ declare global {
21527
21504
  *
21528
21505
  * @remarks
21529
21506
  * Advances are per em and vertical metrics follow GDI, so a table measures as Excel does: a
21530
- * shipped face measures GDI's hinted whole pixels and sizes rows as Excel autofits them. Tables
21531
- * are built by the collection from the shipped files or the platform; they are read here, never
21532
- * made or changed.
21507
+ * shipped face measures GDI's hinted whole pixels. Tables are built by the collection from the
21508
+ * shipped files or the platform; they are read here, never made or changed.
21533
21509
  */
21534
21510
  interface AdvanceTable {
21535
21511
  /** The family the table measures, as a style names it. */
@@ -21539,8 +21515,12 @@ declare global {
21539
21515
  readonly italic: boolean;
21540
21516
  /** Whether widths are GDI's hinted whole pixels. */
21541
21517
  readonly isHinted: boolean;
21542
- /** Whether row heights are Excel's own captured ones. */
21543
- readonly hasRows: boolean;
21518
+ /**
21519
+ * The height of a line per em by the font's typo metrics (ascent less descent plus line gap),
21520
+ * for a font that asks for them; `null` otherwise. DirectWrite lays a line out this tall, so
21521
+ * Excel's charts do.
21522
+ */
21523
+ readonly typoLine: number | null;
21544
21524
  /** The number of characters with an advance. */
21545
21525
  readonly size: number;
21546
21526
  /** The advance of `codepoint` per em, or `undefined` when the table has none. */
@@ -21552,7 +21532,10 @@ declare global {
21552
21532
  * super/subscript scale, then `letterSpacing` between characters.
21553
21533
  */
21554
21534
  width(text: string, px: number, options?: AdvanceTable.WidthOptions): number;
21555
- /** The face's whole-px vertical metrics at `px` pixels per em. */
21535
+ /**
21536
+ * The face's whole-px vertical metrics at `px` pixels per em: GDI's ascent and descent, and a
21537
+ * line as tall as the font's own metrics ask.
21538
+ */
21556
21539
  metrics(px: number): Metrics;
21557
21540
  /**
21558
21541
  * The underline at `px`: its center's offset above the baseline (negative below) and its
@@ -21681,6 +21664,23 @@ declare global {
21681
21664
  * ```
21682
21665
  */
21683
21666
  function captureTables(bytes: Uint8Array, options?: CaptureOptions): Promise<CapturedFace[]>;
21667
+ /**
21668
+ * The CSS `font-family` value that paints `family`: the family, then the fonts that stand in for
21669
+ * it where it is not installed, then `fallbacks`, each followed by its own stand-ins.
21670
+ *
21671
+ * A stand-in is the family `family` is measured by and that family's open metric-compatible
21672
+ * twins, so text painted on a machine without the original still fits its measurement.
21673
+ *
21674
+ * @param family The family as a style names it.
21675
+ * @param fallbacks Families or CSS generic names to try after it.
21676
+ *
21677
+ * @example
21678
+ * ```ts
21679
+ * IFont.toCSSFontFamily('Calibri', ['sans-serif']); // 'Calibri, Carlito, sans-serif'
21680
+ * IFont.toCSSFontFamily('Aptos Narrow', ['sans-serif']); // '"Aptos Narrow", "Intos Narrow", Calibri, Carlito, sans-serif'
21681
+ * ```
21682
+ */
21683
+ function toCSSFontFamily(family: string, fallbacks?: readonly string[] | null): string;
21684
21684
  /**
21685
21685
  * Provides a font-family fallback based on the PANOSE hex string.
21686
21686
  *
@@ -22316,8 +22316,8 @@ declare global {
22316
22316
  * A union `(A1:A5,B1:B2)` reaches a {@link IFunction.ParameterTypeJSON.reportType} slot as one
22317
22317
  * `IRange` per area. Functions that answer over it do so because they walk MEMBERS and a union
22318
22318
  * simply has more of them — `LARGE((DA1:DA5,DK1:DK2),2)` is the second largest of all seven
22319
- * cells. This is that walk, and it is a helper rather than a marshalling step on purpose: Excel
22320
- * flattens in exactly the same place, a shared reducer its bodies opt into, which is why the
22319
+ * cells. This is that walk, and it is a helper rather than a marshalling step on purpose:
22320
+ * flattening is a shared reducer the bodies opt into, which is why the
22321
22321
  * same union is flattened by `LARGE`, refused by `SUMPRODUCT` and answered `#REF!` by `ROWS`.
22322
22322
  *
22323
22323
  * The result is a single column in area order, row-major within each area. SHAPE IS NOT
@@ -22366,7 +22366,7 @@ declare global {
22366
22366
  */
22367
22367
  getColumn(): number;
22368
22368
  /**
22369
- * Whether the call being evaluated is in Excel's VALUE mode, where a multi-cell reference at a
22369
+ * Whether the call being evaluated is in VALUE mode, where a multi-cell reference at a
22370
22370
  * slot that reads ONE value is implicitly intersected with the formula's cell (the `@` rule);
22371
22371
  * `false` is ARRAY mode, where such a slot reads the reference's first cell.
22372
22372
  *
@@ -22405,7 +22405,7 @@ declare global {
22405
22405
  * A few arguments honor only their top-left corner and are re-sized to the shape of the range
22406
22406
  * that drives them — `SUMIF`'s `sum_range`, `LOOKUP`'s `result_vector`. The window can therefore
22407
22407
  * run off the bottom or right of the grid: `SUMIF(A1:A5,">0",A1048574)` asks for five rows
22408
- * starting three from the end. Excel reads the part that fits and treats the rest as blank, which
22408
+ * starting three from the end. The part that fits is read and the rest is blank, which
22409
22409
  * is what this returns; positions past the clamp read as `undefined` from `getValueAt`.
22410
22410
  *
22411
22411
  * @param anchor The coords of the argument as written; only its top-left corner is honored.
@@ -22809,12 +22809,11 @@ declare global {
22809
22809
  * want the raw carry above — `DATEDIF("2020-01-31","2020-03-01","md")` is `-1`
22810
22810
  * because Jan 31 rolls into March. `EDATE`/`EOMONTH` want the opposite and CLAMP to
22811
22811
  * the target month's length, so they pre-clamp before calling here. One conversion,
22812
- * two opposite rules, both matching Excel. Baking either one in breaks the other.
22812
+ * two opposite rules. Baking either one in breaks the other.
22813
22813
  * * **Results may legitimately leave the calendar.** `YEARFRAC` basis 1 anchors a year
22814
22814
  * length on January 1 of `laterYear + 1`, which at the top of the calendar is
22815
- * `10000-01-01`; Excel answers `1.9972602739726026` for
22816
- * `YEARFRAC(DATE(9998,1,1),DATE(9999,12,31),1)` rather than `#NUM!`. A range check
22817
- * here would break it.
22815
+ * `10000-01-01`; `YEARFRAC(DATE(9998,1,1),DATE(9999,12,31),1)` is
22816
+ * `1.9972602739726026`, not `#NUM!`. A range check here would break it.
22818
22817
  * * **The 16-bit argument limits are per-function.** `DATE`'s month errors outside
22819
22818
  * `[-32767, 32766]` while its day saturates to `32767`, and `TIME` errors outside
22820
22819
  * `[0, 32767]` on every argument — same magic number, three different rules.
@@ -22822,8 +22821,8 @@ declare global {
22822
22821
  * Note the asymmetry with {@link getDateParts}, which DOES throw `#NUM!` outside the
22823
22822
  * calendar because it answers a user-facing question. An internal intermediate that
22824
22823
  * steps one day past the end must therefore not be round-tripped through it; compute
22825
- * on the fields instead. That mistake made `YEARFRAC(DATE(9999,1,1),DATE(9999,12,31),0)`
22826
- * `#NUM!` where Excel says `1`.
22824
+ * on the fields instead, or `YEARFRAC(DATE(9999,1,1),DATE(9999,12,31),0)` becomes `#NUM!`
22825
+ * rather than `1`.
22827
22826
  */
22828
22827
  getSerialDate(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millis?: number): number;
22829
22828
  /**
@@ -22839,8 +22838,8 @@ declare global {
22839
22838
  *
22840
22839
  * @remarks
22841
22840
  * Argument REFLECTION, for the one thing a declaration cannot say: what happened at *this* call.
22842
- * It exists to serve Excel's declared `any`, which means "no contract, the body decides" — every
22843
- * other Excel type maps onto a type we already have and the marshaller handles it.
22841
+ * It exists to serve a declared `any`, which means "no contract, the body decides" — every
22842
+ * other declared type maps onto a type we already have and the marshaller handles it.
22844
22843
  *
22845
22844
  * The returned view is valid ONLY while the body that asked for it is running. Views are pooled
22846
22845
  * by dispatch depth, so retaining one across an `await`, a callback, or a nested evaluation hands
@@ -22859,7 +22858,7 @@ declare global {
22859
22858
  * recognizes it: while the call is still waiting, a recalculation with
22860
22859
  * an equal payload leaves it be rather than asking again. Once it has stopped, a recalculation
22861
22860
  * calls the function again; what it fetched is answered from the workbook's cache
22862
- * (`IBatchContext.fetch`).
22861
+ * (`IDeferContext.fetch`).
22863
22862
  * @returns The last answer this call gave for the same question, when the function is being
22864
22863
  * called again (a recalculation); `undefined` on a first call or a changed question. Return it
22865
22864
  * to keep showing it until the new answer arrives, or return something else to show that the
@@ -22871,14 +22870,15 @@ declare global {
22871
22870
  * from meanwhile: return `#BUSY!` when they should wait as an error, or text such as
22872
22871
  * `'Fetching…'` when that is what they should show.
22873
22872
  *
22874
- * The executor runs after the recalculation, outside any cell; read nothing from the formula
22875
- * context there. Whatever the body knows goes in the payload.
22873
+ * The executor runs after the recalculation, outside any cell, so the ambient `FormulaContext`
22874
+ * is not its own: it reads the workbook through `ctx.getFormulaContext()`. Whatever the body
22875
+ * knows about its cell goes in the payload.
22876
22876
  *
22877
22877
  * @example
22878
22878
  * ```typescript
22879
22879
  * function fetchAll(
22880
22880
  * calls: readonly IFormulaContext.DeferredCall<string>[],
22881
- * ctx: IFormulaContext.IBatchContext
22881
+ * ctx: IFormulaContext.IDeferContext
22882
22882
  * ): void {
22883
22883
  * for (const call of calls) {
22884
22884
  * ctx.fetch(call.payload as string)
@@ -22933,7 +22933,7 @@ declare global {
22933
22933
  * then `range` is returned as it is, hidden rows included.
22934
22934
  *
22935
22935
  * @remarks
22936
- * This is `SUBTOTAL` 1-11 (Excel: they "include manually hidden rows", which is what an
22936
+ * This is `SUBTOTAL` 1-11 (they include manually hidden rows, which is what an
22937
22937
  * unfiltered sheet reads as). `SUBTOTAL` 101-111 and `AGGREGATE` leave it off and skip
22938
22938
  * always.
22939
22939
  * @defaultValue false
@@ -23062,7 +23062,7 @@ declare global {
23062
23062
  * Answers the calls made by {@link IFormulaContext.defer} against it. Invoked once at the end of
23063
23063
  * a recalculation with every such call; how many requests that becomes is the executor's choice.
23064
23064
  */
23065
- type DeferExecutor<T = any> = (calls: readonly DeferredCall<T>[], ctx: IBatchContext) => void | Promise<void>;
23065
+ type DeferExecutor<T = any> = (calls: readonly DeferredCall<T>[], ctx: IDeferContext) => void | Promise<void>;
23066
23066
  /**
23067
23067
  * One call made by {@link IFormulaContext.defer}, as its executor receives it.
23068
23068
  *
@@ -23074,7 +23074,7 @@ declare global {
23074
23074
  /** What the function passed to `defer`. */
23075
23075
  readonly payload: unknown;
23076
23076
  /** Settles the call with its result. */
23077
- resolve(value: T): void;
23077
+ resolve(value: T, options?: DeferredCall.ResolveOptions): void;
23078
23078
  /** Settles the call with an error: a `FormulaError` as itself, anything else as `#VALUE!`. */
23079
23079
  reject(error: unknown): void;
23080
23080
  /** Runs `fn` when the result is no longer wanted. */
@@ -23085,10 +23085,29 @@ declare global {
23085
23085
  */
23086
23086
  readonly cancelled: boolean;
23087
23087
  }
23088
+ namespace DeferredCall {
23089
+ /**
23090
+ * Options for {@link DeferredCall.resolve}.
23091
+ */
23092
+ interface ResolveOptions {
23093
+ /**
23094
+ * Whether the blanks of an array result stay blank when it spills. Omitted, they read as
23095
+ * `0`, as any spilled array's blanks do.
23096
+ *
23097
+ * @remarks
23098
+ * For data whose empty fields mean "nothing here", such as an imported file. The result
23099
+ * keeps them while a formula passes it on as it is (`IF(c, result, …)`). A function that
23100
+ * answers element by element builds a new array, whose blanks read as `0`
23101
+ * (`IFERROR(result, …)`, `result & ""`).
23102
+ * @defaultValue false
23103
+ */
23104
+ keepBlanks?: boolean;
23105
+ }
23106
+ }
23088
23107
  /**
23089
23108
  * What an executor is given beside its calls.
23090
23109
  */
23091
- interface IBatchContext {
23110
+ interface IDeferContext {
23092
23111
  /** A random number in `[0, 1)` from the calculation's source, which a test can seed. */
23093
23112
  getRandom(): number;
23094
23113
  /**
@@ -23096,6 +23115,35 @@ declare global {
23096
23115
  * here (maps, numbers, strings, buffers), not connections or sockets.
23097
23116
  */
23098
23117
  getState<S>(init: () => S): S;
23118
+ /**
23119
+ * Groups `calls` by payload and runs `answer` once per distinct payload with every call that
23120
+ * asked it: one request per question, however many cells asked.
23121
+ *
23122
+ * @param calls The calls to group, usually every call the executor was handed.
23123
+ * @param answer Settles one group. When it throws, or the promise it returns rejects, the
23124
+ * group's calls it has not settled fail with that error; the other groups are not affected.
23125
+ * @returns Resolves once every group has been answered. It never rejects.
23126
+ *
23127
+ * @remarks
23128
+ * Payloads are equal as `defer` compares them: the same primitive, or plain objects or arrays
23129
+ * whose own values are the same one level deep. Groups are answered concurrently, in the
23130
+ * order their first call appears.
23131
+ *
23132
+ * @example
23133
+ * ```typescript
23134
+ * async function fetchQuotes(
23135
+ * calls: readonly IFormulaContext.DeferredCall<number>[],
23136
+ * ctx: IFormulaContext.IDeferContext
23137
+ * ): Promise<void> {
23138
+ * await ctx.byPayload(calls, async (ticker: string, group) => {
23139
+ * const response = await ctx.fetch(`https://api.example.com/quote/${ticker}`);
23140
+ * const price: number = (await response.json()).price;
23141
+ * for (const call of group) call.resolve(price);
23142
+ * });
23143
+ * }
23144
+ * ```
23145
+ */
23146
+ byPayload<T = any, P = unknown>(calls: readonly DeferredCall<T>[], answer: (payload: P, group: readonly DeferredCall<T>[]) => void | Promise<void>): Promise<void>;
23099
23147
  /**
23100
23148
  * A rich value of a registered type, for the workbook being calculated: what
23101
23149
  * {@link IFormulaContext.createRichData} makes inside a cell, made here for a call's result.
@@ -23116,8 +23164,44 @@ declare global {
23116
23164
  * answer the workbook already has for the URL (a picture it keeps, or anything fetched while
23117
23165
  * it is open) answers from the workbook, and two calls for one URL share one request. In an
23118
23166
  * external calculation (*Refresh All*) it goes to the source.
23167
+ *
23168
+ * Rejects when the URL cannot be reached, with a `FormulaError.Blocked` when the site responded
23169
+ * but the browser would not let the page read it.
23119
23170
  */
23120
23171
  fetch(input: string, init?: RequestInit): Promise<Response>;
23172
+ /**
23173
+ * The formula context of the workbook being calculated, with no cell: its parsing, text,
23174
+ * comparison and dates, read with the workbook's locale and date system.
23175
+ *
23176
+ * @remarks
23177
+ * Valid for as long as the executor runs, across every `await`. The ambient `FormulaContext`
23178
+ * is not: it belongs to the cell being evaluated, and an executor runs after that evaluation
23179
+ * ends. What needs a cell (`getRow`, `getReference`, `getValueAt`, `defer`, `markVolatile`,
23180
+ * `formatResults`, `getRandom`) throws here; {@link getRandom} is the executor's own.
23181
+ */
23182
+ getFormulaContext(): IFormulaContext;
23183
+ /**
23184
+ * Reads delimited text (CSV, TSV) into rows of values, each field read the way the workbook
23185
+ * reads typed entry: numbers, dates, booleans and error labels become values, anything else
23186
+ * stays text, and an empty field is blank.
23187
+ *
23188
+ * @param text The delimited text.
23189
+ * @param options How the text is split.
23190
+ * @returns The rows, padded with blanks to the widest row.
23191
+ */
23192
+ parseText(text: string, options?: IDeferContext.ParseTextOptions): Promise<Scalar[][]>;
23193
+ }
23194
+ namespace IDeferContext {
23195
+ /**
23196
+ * Options for {@link IDeferContext.parseText}.
23197
+ */
23198
+ interface ParseTextOptions {
23199
+ /**
23200
+ * The character between fields.
23201
+ * @defaultValue `','`
23202
+ */
23203
+ delimiter?: string;
23204
+ }
23121
23205
  }
23122
23206
  }
23123
23207
 
@@ -23425,7 +23509,7 @@ declare global {
23425
23509
  *
23426
23510
  * @remarks
23427
23511
  * STATIC, and read from the formula text at compile time: it is true of the call whether or
23428
- * not the call runs, which is what a lazy argument (and Excel) requires.
23512
+ * not the call runs, which is what a lazy argument requires.
23429
23513
  *
23430
23514
  * @see {@link ReturnTypeJSON.volatile}
23431
23515
  */
@@ -23464,7 +23548,7 @@ declare global {
23464
23548
  * @remarks
23465
23549
  * Only meaningful for a VARIADIC function; a fixed parameter list is already its own maximum.
23466
23550
  * The number is the whole CALL's argument count, prefix and optional suffix included, and it
23467
- * is refused where Excel refuses it — at entry, before evaluation.
23551
+ * is refused at entry, before evaluation.
23468
23552
  *
23469
23553
  * @see {@link Repeating}
23470
23554
  */
@@ -23766,8 +23850,8 @@ declare global {
23766
23850
  * Generated from the `NoLift<T>` marker.
23767
23851
  *
23768
23852
  * @remarks
23769
- * Per parameter, because Excel is: `NETWORKDAYS.INTL` refuses a reference at its date slots
23770
- * and lifts one at `weekend`. An ARRAY at the slot still lifts, a one-cell reference is an
23853
+ * Per parameter, because Excel's built-ins differ by slot: `NETWORKDAYS.INTL` refuses a
23854
+ * reference at its date slots and lifts one at `weekend`. An ARRAY at the slot still lifts, a one-cell reference is an
23771
23855
  * ordinary argument, and a repeating slot absorbs a container as members, so the marker only
23772
23856
  * ever applies to a non-repeating scalar parameter.
23773
23857
  */
@@ -23807,7 +23891,7 @@ declare global {
23807
23891
  * union is the range arm, handed over whole. The slot never lifts.
23808
23892
  *
23809
23893
  * @remarks
23810
- * Excel reads a one-cell argument at some array slots as THE ARGUMENT rather than as a
23894
+ * Some array slots read a one-cell argument as THE ARGUMENT rather than as a
23811
23895
  * one-cell container: `SORT(<#N/A cell>,1,1,<#DIV/0! cell>)` is `#N/A` where
23812
23896
  * `TAKE(<#N/A cell>,<#DIV/0! cell>)` is `#DIV/0!`. The engine's default
23813
23897
  * for a range slot is TAKE's; this flag is SORT's. {@link scalar} and {@link range} each carry
@@ -23874,7 +23958,7 @@ declare global {
23874
23958
  *
23875
23959
  * @remarks
23876
23960
  * Collected at COMPILE time from the formula text (`CompiledFormula.hasVolatile`), because
23877
- * that is where Excel decides it: `=IF(TRUE,1,RAND())` recalculates on every idle pass though
23961
+ * that is where volatility is decided: `=IF(TRUE,1,RAND())` recalculates on every idle pass though
23878
23962
  * no branch selects the arm, and with lazy arguments the call never happens for the engine to
23879
23963
  * observe.
23880
23964
  *
@@ -23897,11 +23981,10 @@ declare global {
23897
23981
  * parameter. Omitted at the default of 255.
23898
23982
  *
23899
23983
  * @remarks
23900
- * Excel keeps one such number per NAME and compares it against the whole call's argument
23901
- * count in its front end, so a call past it is refused AT ENTRY rather than answered — which
23902
- * is why the cap lives on the declaration and not in a body. It is not derivable from the
23903
- * shape: `STDEV` takes 255 arguments and `STDEV.S`, the same function under its dotted name,
23904
- * takes 254.
23984
+ * The cap is one number per NAME, compared against the whole call's argument count, so a call
23985
+ * past it is refused AT ENTRY rather than answered — which is why the cap lives on the
23986
+ * declaration and not in a body. It is not derivable from the shape: in Excel `STDEV` takes 255
23987
+ * arguments and `STDEV.S`, the same function under its dotted name, takes 254.
23905
23988
  *
23906
23989
  * @defaultValue 255
23907
23990
  */
@@ -24038,9 +24121,8 @@ declare global {
24038
24121
  * - What was the value BEFORE the parameter's type coerced it?
24039
24122
  * - Was that empty slot an omission, or a blank cell the caller pointed at?
24040
24123
  *
24041
- * Excel has behaviors that turn on exactly those questions, and they cluster at the
24042
- * parameters Excel declares `any` — where there is nothing to express as a type, because Excel
24043
- * declined to express one. `CUMIPMT` refuses a boolean at every slot while `FV` coerces one at
24124
+ * Some functions have behaviors that turn on exactly those questions, and they cluster at
24125
+ * parameters declared `any` — where there is nothing to express as a type. `CUMIPMT` refuses a boolean at every slot while `FV` coerces one at
24044
24126
  * every slot; the difference is not the values, it is that `CUMIPMT`'s slots are `any` and its
24045
24127
  * body decides.
24046
24128
  *
@@ -24165,7 +24247,7 @@ declare global {
24165
24247
  */
24166
24248
  getKindAt(index: number): ValueKind;
24167
24249
  /**
24168
- * True when the argument at `index` is DIRECT — Excel's "typed into the list of arguments":
24250
+ * True when the argument at `index` is DIRECT — typed into the list of arguments:
24169
24251
  * the evaluated value IS a value, not a container or a callable.
24170
24252
  *
24171
24253
  * @param index The PARAMETER index — the position in the body's own signature.
@@ -29205,6 +29287,51 @@ declare global {
29205
29287
  * ```
29206
29288
  */
29207
29289
  setShapeType(shapeType: IGeometry.Preset | string, options?: ITransaction.OperationOptions): this;
29290
+ /**
29291
+ * Returns the shape's outline at a size, for drawing the picture cropped to its shape.
29292
+ *
29293
+ * @param width The frame's width in pixels. Defaults to the movable's.
29294
+ * @param height The frame's height in pixels. Defaults to the movable's.
29295
+ * @returns `null` for a preset this SDK does not know, or for a picture with no movable and no size.
29296
+ */
29297
+ getGeometry(width?: number, height?: number): Promise<IGeometry | null>;
29298
+ /**
29299
+ * Returns the part of the image shown, as percentages of the image's size inset from each edge.
29300
+ *
29301
+ * @remarks
29302
+ * An edge not cropped is absent, so an uncropped picture answers `{}`. A negative inset shows empty
29303
+ * space beyond that edge of the image, which is how a picture fits inside a frame of another shape.
29304
+ */
29305
+ getCrop(): IFill.RectInsets;
29306
+ /**
29307
+ * Sets the part of the image shown. The frame stays as it is, so the part shown is stretched over
29308
+ * it; to keep the image's scale, change the frame with {@link IMovable.setBounds} as well.
29309
+ *
29310
+ * @param crop Percentages of the image's size, inset from each edge; `null` shows the whole image.
29311
+ * @throws ExpectedError when the insets leave nothing to show.
29312
+ *
29313
+ * @example
29314
+ * ```ts
29315
+ * picture.setCrop({ left: 10, right: 10 });
29316
+ * ```
29317
+ */
29318
+ setCrop(crop: IFill.RectInsets | null, options?: ITransaction.OperationOptions): this;
29319
+ /**
29320
+ * Returns the hyperlink a click on the picture follows, or `null` for none.
29321
+ */
29322
+ getHyperlink(): IHyperlink | null;
29323
+ /**
29324
+ * Sets the hyperlink a click on the picture follows.
29325
+ *
29326
+ * @param hyperlink An address, the link's properties, or `null` to remove it. An address takes the
29327
+ * form a cell's does: a url, or `#Sheet1!A1` for a location in this workbook.
29328
+ *
29329
+ * @example
29330
+ * ```ts
29331
+ * picture.setHyperlink('https://www.sheetxl.com');
29332
+ * ```
29333
+ */
29334
+ setHyperlink(hyperlink: IHyperlink.Update, options?: ITransaction.OperationOptions): this;
29208
29335
  /**
29209
29336
  * What the picture's frame draws with: the fill behind the image and the border around it.
29210
29337
  * A picture has no theme style, so each is only what the picture states; by default neither
@@ -30260,7 +30387,7 @@ declare global {
30260
30387
  * @remarks
30261
30388
  * Errors INSIDE a range are the body's to judge: the engine hands a valid range over whole and
30262
30389
  * never looks inside, so a function whose answer depends on every member says so with this
30263
- * line, placed before its own validation where Excel's error outranks it. A reshaper or a
30390
+ * line, placed before its own validation where the member's error outranks it. A reshaper or a
30264
30391
  * lookup, whose members pass through or are never read, needs no line at all.
30265
30392
  */
30266
30393
  firstError(): FormulaError.Known | null;
@@ -30273,7 +30400,7 @@ declare global {
30273
30400
  * @remarks
30274
30401
  * `options.axis` is the TRAVERSAL order feeding the ordinal, not the orientation of the result:
30275
30402
  * the result is always Nx1, and a row is `flatten().transpose()`. The default is row-major,
30276
- * which is the order Excel pairs two range operands in.
30403
+ * which is the order two range operands pair in.
30277
30404
  *
30278
30405
  * `options.type` carries a read type onto the result, so a member the type filters out becomes
30279
30406
  * a HOLE at its ordinal rather than compacting the column. That is what lets two operands be
@@ -30922,7 +31049,7 @@ declare global {
30922
31049
  *
30923
31050
  * - By default, `broadcast()` follows strict alignment rules like NumPy and will
30924
31051
  * throw an error if the input ranges cannot be broadcasted together.
30925
- * - When `misalignValue` is provided, `broadcast()` will instead mimic Excel behavior:
31052
+ * - When `misalignValue` is provided, `broadcast()` will instead follow Excel's behavior:
30926
31053
  * - It finds the **largest valid intersection** of the ranges.
30927
31054
  * - It expands the result to the **union of both range sizes**.
30928
31055
  * - Any cells that do not have valid corresponding values from the inputs
@@ -30980,7 +31107,7 @@ declare global {
30980
31107
  *
30981
31108
  * @remarks
30982
31109
  * Off, a dimension of 1 is a short dimension like any other and pads `misalignValue` past
30983
- * its one position: Excel's `MAP` rule, where a 1-row array is not stretched.
31110
+ * its one position: the `MAP` rule, where a 1-row array is not stretched.
30984
31111
  */
30985
31112
  tile?: boolean;
30986
31113
  /**
@@ -31665,7 +31792,7 @@ declare global {
31665
31792
  */
31666
31793
  getAggregates(options?: IRange.IteratorOptions): Readonly<IRangeStats.Aggregates>;
31667
31794
  /**
31668
- * Returns the sum as Excel's `SUM` reports it — {@link getAggregates}'s `sum` with Excel's
31795
+ * Returns the sum as `SUM` reports it — {@link getAggregates}'s `sum` with Excel's
31669
31796
  * cancellation-to-zero rule applied.
31670
31797
  *
31671
31798
  * @param total A total the caller accumulated across SEVERAL stats instances. Omit for a
@@ -31676,7 +31803,7 @@ declare global {
31676
31803
  * @remarks
31677
31804
  * Collapses a total to exactly zero when it lands at least 50 binary exponents below the
31678
31805
  * operands that produced it, so `SUM(0.1,0.2,-0.3)` is `0` rather than `5.55111512312578E-17`.
31679
- * Use this wherever you mean "the number Excel's SUM would show" — a status bar, a report
31806
+ * Use this wherever you mean "the number SUM shows" — a status bar, a report
31680
31807
  * total, a formula. Use `getAggregates().sum` where you mean the true total of the data.
31681
31808
  *
31682
31809
  * The two genuinely differ, and neither is a rounding of the other:
@@ -31686,12 +31813,12 @@ declare global {
31686
31813
  * and `PERCENTOF`, and to NOTHING else — `SUMIF`, `SUMPRODUCT`, `SERIESSUM`, `DSUM`, the
31687
31814
  * `SUMX2MY2` family and every binary operator all keep the residue over the same values.
31688
31815
  * That is why this is a method you call and not a change to `getAggregates`.
31689
- * - `AVERAGE` divides THIS, not the raw sum: snapping the mean instead is measurably wrong.
31816
+ * - `AVERAGE` divides THIS, not the raw sum: snapping the mean instead is wrong.
31690
31817
  *
31691
31818
  * It is also cheap when it does not fire: a bound derived from `min`/`max` rejects any
31692
31819
  * ordinary total without re-reading the range.
31693
31820
  *
31694
- * **Multiple ranges.** Excel evaluates the rule on the *final* accumulation step, so a total
31821
+ * **Multiple ranges.** The rule applies on the *final* accumulation step, so a total
31695
31822
  * spanning several ranges must be judged against the range holding the LAST value — pass the
31696
31823
  * running total as `total` and call this on that range. (Snapping each range separately gets
31697
31824
  * `SUM(A1:A3,0)` and `SUM(A1:A1,A2:A2,A3:A3)` wrong in opposite directions.) A composite
@@ -31840,7 +31967,7 @@ declare global {
31840
31967
  * Sorting requires materializing the full numeric population (O(n log n), one allocation).
31841
31968
  * Unlike `Aggregates`, sorted views are **not composable across sub-ranges**.
31842
31969
  *
31843
- * Covers the following Excel functions (all share one sort per coords per calc cycle):
31970
+ * Covers the following functions (all share one sort per coords per calc cycle):
31844
31971
  * - `LARGE`, `SMALL`
31845
31972
  * - `MEDIAN`, `PERCENTILE`, `PERCENTILE.INC`, `PERCENTILE.EXC`
31846
31973
  * - `QUARTILE`, `QUARTILE.INC`, `QUARTILE.EXC` (q1 = k=0.25, q3 = k=0.75)
@@ -31905,7 +32032,7 @@ declare global {
31905
32032
  * one outside the population is not found.
31906
32033
  * @param exclusive If true, uses exclusive formula (0 and 1 are excluded).
31907
32034
  * @param significance Number of DECIMAL PLACES to TRUNCATE the result to — despite what
31908
- * Excel's own help calls the argument, it is not significant digits and it does not round.
32035
+ * Excel's help calls the argument, it is not significant digits and it does not round.
31909
32036
  * Truncated toward zero first (1.9 places means 1), and must be at least 1. Omit it for the
31910
32037
  * exact untruncated rank, which is also the only form that cannot fail.
31911
32038
  * @returns The percent rank of x; `null` if x is not found or there are no numbers in range.
@@ -41154,7 +41281,7 @@ declare global {
41154
41281
  * write path both actually ask, use {@link isEncrypted}.
41155
41282
  *
41156
41283
  * Never the password: origins are rendered into logs and REPL output, and ride events and
41157
- * progress callbacks, so a secret has no business here (see `PROTECTION-DESIGN.md` §5f).
41284
+ * progress callbacks, so a secret has no business here.
41158
41285
  *
41159
41286
  * Use it to show a lock affordance, and to recognise that writing plaintext over it would be a
41160
41287
  * downgrade — {@link IWorkbookIO.WriteOptions.password} makes that refusal explicit.
@@ -41560,8 +41687,8 @@ declare global {
41560
41687
  * - `'auto'` — cached values are trusted; the load pass evaluates a formula cell with no
41561
41688
  * cached value (a repair — Excel always stores one) and refreshes volatiles. Everything is
41562
41689
  * recalculated only when Excel would recalculate on open: the file sets `fullCalcOnLoad`,
41563
- * or for xlsx its `calcId` is missing or older than the Excel build this library is
41564
- * verified against. (What this library writes carries one: the source file's, else that
41690
+ * or for xlsx its `calcId` is missing or older than the Excel build this library
41691
+ * targets. (What this library writes carries one: the source file's, else that
41565
41692
  * build's.) To take the file's values as they are whatever it says — as openpyxl does —
41566
41693
  * pass `'none'`; to always recalculate, `'full'`.
41567
41694
  * - `'full'` — everything is recalculated, whatever the file says.
@@ -43230,7 +43357,7 @@ declare global {
43230
43357
  /**
43231
43358
  * The events that carry a {@link ChangeEvent}: what {@link ChangeEvent.getKind} names.
43232
43359
  */
43233
- type ChangeEventKey = 'onDataChange' | 'onStyleChange' | 'onLayoutChange' | 'onMergesChange' | 'onSpillsChange';
43360
+ type ChangeEventKey = 'onDataChange' | 'onStyleChange' | 'onMergesChange' | 'onSpillsChange';
43234
43361
  /**
43235
43362
  * What a change event announces: where the change landed and what wrote it.
43236
43363
  *
@@ -43470,11 +43597,8 @@ declare global {
43470
43597
  * for "cell geometry moved".
43471
43598
  * * This can be be due to row/column sizes changes or changing the max rows columns.
43472
43599
  * * Zoom and viewport do not change the underlying layout.
43473
- *
43474
- * @param source The sheet.
43475
- * @param event The whole sheet: sizes are announced by the headers, which do not say where.
43476
43600
  */
43477
- onLayoutChange?(source: IWorksheet, event: IWorksheet.ChangeEvent): void;
43601
+ onLayoutChange?(source: IWorksheet): void;
43478
43602
  /**
43479
43603
  * Called when which rows are hidden has changed.
43480
43604
  */
@@ -45310,7 +45434,8 @@ declare global {
45310
45434
  */
45311
45435
  setLicenseKey(licenseKey: string, force?: boolean): Promise<LicenseDetails>;
45312
45436
  /**
45313
- * Return the current license details.
45437
+ * Return the current license details. Prints nothing: the license notice is printed when the
45438
+ * engine starts under the license (see {@link assertUsable}).
45314
45439
  */
45315
45440
  getDetails(): Promise<LicenseDetails>;
45316
45441
  /**
@@ -46566,14 +46691,6 @@ declare global {
46566
46691
  constructor(message: string, options?: ErrorOptions);
46567
46692
  }
46568
46693
 
46569
- /**
46570
- * The statistics a box and whisker draws for one set of values, as Excel computes them (measured
46571
- * 2026-10-22, `probe-chart-2016-types.ps1` B01-B13 and `probe-chart-2016-types-reopen.ps1` B05-B07;
46572
- * DESIGN-CHART §4.17): quartiles by Excel's exclusive (`QUARTILE.EXC`) or inclusive
46573
- * (`QUARTILE.INC`) method, the median the same either way; whiskers to the furthest values within
46574
- * 1.5 interquartile ranges of the box, and the values beyond them outliers (B09: 60 beyond a box of
46575
- * 15..25).
46576
- */
46577
46694
  export type QuartileMethod = 'inclusive' | 'exclusive';
46578
46695
 
46579
46696
  /**
@@ -47009,12 +47126,12 @@ declare global {
47009
47126
  * omitted when there is a single repetition. `SORTBY`'s legal arities are 2 and 1+2n and nothing
47010
47127
  * else — `SORTBY(array, by1)` is legal, `SORTBY(array, by1, o1, by2)` is not. It is not a general
47011
47128
  * "the final element of the final group may be omitted" rule; that rule would accept a formula
47012
- * Excel refuses. An optional slot anywhere else in the group is a compiler error.
47129
+ * that must be refused. An optional slot anywhere else in the group is a compiler error.
47013
47130
  *
47014
47131
  * ### The maximum, `Max`
47015
47132
  *
47016
- * The second type argument is the largest number of arguments the WHOLE CALL accepts, which is
47017
- * how Excel states it: one number per NAME, compared against the call's total argument count and
47133
+ * The second type argument is the largest number of arguments the WHOLE CALL accepts: one
47134
+ * number per NAME, compared against the call's total argument count and
47018
47135
  * refused at entry (`Excess_function_arguments`), never a count of this parameter's own share.
47019
47136
  * `SWITCH`'s 254 therefore covers its `expression` and its trailing `default` as well as the
47020
47137
  * pairs, and `CHOOSEROWS`' covers its `array`.
@@ -47076,8 +47193,8 @@ declare global {
47076
47193
  * what can arrive and {@link IFunctionArguments.getAreaCountAt} answers the union question the
47077
47194
  * kind cannot — a plain reference is one area, a union is more.
47078
47195
  *
47079
- * Its use is meant to stay countable: a slot earns it with a rule Excel actually shows, never
47080
- * with a guess.
47196
+ * Its use is meant to stay countable: a slot earns it with a concrete behavior that needs it,
47197
+ * never speculatively.
47081
47198
  *
47082
47199
  * @example
47083
47200
  * ```ts
@@ -47272,7 +47389,6 @@ declare global {
47272
47389
  /** Box and whisker groups: what of each box is drawn, and the line it is drawn with. */
47273
47390
  box?: BoxOptions;
47274
47391
  }
47275
- /** How a box and whisker series draws its boxes (DESIGN-CHART §4.17). */
47276
47392
  interface BoxOptions {
47277
47393
  quartileMethod: QuartileMethod;
47278
47394
  /** An x at each box's mean. */
@@ -47399,11 +47515,6 @@ declare global {
47399
47515
  bannerFill: IFill.JSON | null;
47400
47516
  };
47401
47517
  }
47402
- /**
47403
- * How a histogram's values were counted (DESIGN-CHART §4.16): each series' `values` are its
47404
- * counts by bin and its `categories` the bins' labels; a pareto's are its sums by category,
47405
- * largest first, with a line of the running share on an axis of its own.
47406
- */
47407
47518
  interface Histogram {
47408
47519
  /** The first series' bins, each with the indexes of its `raw` values. */
47409
47520
  bins: HistogramBin[];
@@ -47707,7 +47818,7 @@ declare global {
47707
47818
  * This is what makes a miss impossible by construction for a served root: one fetch of this file and
47708
47819
  * the resolver knows exactly which packages and files the root holds, so it never has to ask for a
47709
47820
  * file that is not there. A root without one (a hand-assembled folder) still works — the resolver
47710
- * falls back to probing, exactly as before this file existed.
47821
+ * falls back to probing.
47711
47822
  */
47712
47823
  export interface ResourceRootIndex {
47713
47824
  /** Every file under the root, `path` relative to it (e.g. `locales/@sheetxl/sdk/de/ui.msg.json`). */
@@ -47766,6 +47877,12 @@ declare global {
47766
47877
  * Display only: the value still reads as nothing to calculation.
47767
47878
  */
47768
47879
  function toDisplayText(value: IRichData): string | null;
47880
+ /**
47881
+ * The text that stands for `value` as a whole, as in the formula bar: its display text
47882
+ * ({@link toDisplayText}), else the label its kind was given in parentheses, `(Image)`, else
47883
+ * `(Rich Object)`.
47884
+ */
47885
+ function toPlaceholderText(value: IRichData): string;
47769
47886
  /**
47770
47887
  * The `ScalarType` `value` lays out as in a cell: its primitive's when it has one (a hyperlink
47771
47888
  * named by a number is a number); `String` when it reads as nothing but shows text (an entity's
@@ -47886,8 +48003,8 @@ declare global {
47886
48003
  */
47887
48004
  const MAX_SIGNIFICANT_DIGITS = 15;
47888
48005
  /**
47889
- * Applies Excel's entry rule to numeric text: every significand digit past the
47890
- * 15th becomes `0`, so the text parses to the double Excel would store.
48006
+ * Applies the 15-digit entry rule to numeric text: every significand digit past the
48007
+ * 15th becomes `0`, so the text parses to the double a cell stores.
47891
48008
  *
47892
48009
  * @param text Numeric text in any accepted form — signed, grouped, percent,
47893
48010
  * currency-affixed, or scientific. The scan is locale-blind: only digit
@@ -47901,6 +48018,30 @@ declare global {
47901
48018
  * truncation, not rounding: `1234567890.123456789` stores `…345`, never `…346`.
47902
48019
  */
47903
48020
  function truncateNumberText(text: string): string;
48021
+ /**
48022
+ * The smallest magnitude a stored number can have: the smallest normal double. A smaller one is
48023
+ * stored as `0`.
48024
+ */
48025
+ const MIN_NUMBER = 2.2250738585072014e-308;
48026
+ /**
48027
+ * Applies the stored-number floor to a number entering a workbook — typed, parsed from text, written
48028
+ * through the API or loaded from a file: a magnitude below {@link MIN_NUMBER} becomes `0`.
48029
+ */
48030
+ function flushSubnormal(value: number): number;
48031
+ /**
48032
+ * Whether numeric text is inside the range accepted as a number, judged from the text as
48033
+ * written rather than the double it parses to.
48034
+ *
48035
+ * @param text Numeric text in any accepted form, as {@link truncateNumberText} takes it. Only
48036
+ * digits, `decimal` and an exponent marker are read.
48037
+ * @param decimal The decimal separator `text` is written with.
48038
+ * @returns `false` when the leading significant digit sits outside `1E-309` … `1E+307`
48039
+ * (`1E-310`, `0.00001E-305`, `1E+308`); for a zero mantissa, when its scale — exponent less
48040
+ * fraction digits — is outside ±308 (`0E-309`, `0.0E-308` and `0E+309`, but not `0E-308`,
48041
+ * `000E-308` or `0.0E+309`). Text out of range is not a number: a formula literal will not
48042
+ * commit, `VALUE` is `#VALUE!` and typed entry stays text.
48043
+ */
48044
+ function isNumberTextInRange(text: string, decimal?: string): boolean;
47904
48045
  /**
47905
48046
  * Encodings of `ScalarType` for persistence.
47906
48047
  */
@@ -48162,8 +48303,7 @@ declare global {
48162
48303
  *
48163
48304
  * @remarks
48164
48305
  * A Windows path becomes a `file:///` URI with forward slashes and percent-encoding, a UNC path a
48165
- * `file://server/share/…` one, and a URL or a bare relative name is kept verbatim — the three
48166
- * target shapes measured in the corpus (DESIGN-EXTERNAL-LINKS §2.2).
48306
+ * `file://server/share/…` one, and a URL or a bare relative name is kept verbatim.
48167
48307
  */
48168
48308
  export function sourceEntryFromPath(path: string): IExternalBook.SourceEntry;
48169
48309
 
@@ -48356,16 +48496,6 @@ declare global {
48356
48496
  visitTextFrame?: (frame: ITextFrame) => Partial<ITextFrame> | void;
48357
48497
  }
48358
48498
 
48359
- /**
48360
- * Excel's date axis (measured 2026-10-17, `probe-chart-dates.ps1` and `probe-chart-dates-units.ps1`,
48361
- * DESIGN-CHART §4.2). Dates are serials, in the 1900 or 1904 system; lengths are points.
48362
- *
48363
- * @remarks
48364
- * A date axis has one slot per base unit (a day, a month or a year) from its first date, snapped to
48365
- * the start of its unit, to its last; each point is drawn in the slot of its date, so a gap in the
48366
- * dates is a gap on the axis and two points of one date share a slot. Labels are drawn on the
48367
- * major ticks only, from the first slot on, in the axis's number format.
48368
- */
48369
48499
  export type TimeUnit = 'days' | 'months' | 'years';
48370
48500
 
48371
48501
  /**
@@ -48489,14 +48619,6 @@ declare global {
48489
48619
  superscript?: boolean;
48490
48620
  }
48491
48621
 
48492
- /**
48493
- * Excel's trendlines: the fits, their R², the moving average, and the label's equation.
48494
- *
48495
- * @remarks
48496
- * Measured against Excel 16.0 (DESIGN-CHART §4.5, `probe-chart-trendlines.ps1`): every coefficient
48497
- * of the nine types on a line chart and a scatter, a set intercept, and a sweep of numbers through
48498
- * the label's General format.
48499
- */
48500
48622
  export type TrendlineType = 'exp' | 'linear' | 'log' | 'movingAvg' | 'poly' | 'power';
48501
48623
 
48502
48624
  /**
@@ -49002,7 +49124,7 @@ declare global {
49002
49124
  *
49003
49125
  * @remarks
49004
49126
  * A value's kind and its extent are different axes: `{10}`, `A1` and a bare `10` all reach a
49005
- * range-typed parameter as a 1x1 container, yet Excel separates them:
49127
+ * range-typed parameter as a 1x1 container, yet they are distinct:
49006
49128
  * `VLOOKUP(10,10,1,TRUE)` is `#N/A` while `VLOOKUP(10,{10},1,TRUE)` is 10, and `TYPE` answers
49007
49129
  * 1 vs 64. The kind is what the CALLER supplied; the extent is merely its size.
49008
49130
  *
@@ -49011,7 +49133,7 @@ declare global {
49011
49133
  * argument can be: a reference, a non-reference array, a callable, and no argument at all. As an
49012
49134
  * argument kind, {@link ScalarType.Null} means a BLANK value.
49013
49135
  *
49014
- * The names and values are ours. The numeric codes Excel's `TYPE` function answers are a
49136
+ * The names and values are ours. The numeric codes the `TYPE` function answers are a
49015
49137
  * PROJECTION of this kind (see `TYPE`'s implementation), not the kind itself.
49016
49138
  *
49017
49139
  * @see {@link IFunctionArguments.getKindAt}
@@ -49103,7 +49225,7 @@ declare global {
49103
49225
  * Compiles Excel wildcard text into a regex.
49104
49226
  *
49105
49227
  * @param anchor Where the pattern has to line up: `true` for the WHOLE string, `'start'` for a
49106
- * PREFIX, `false` for anywhere in it. Excel matches a whole cell, so every lookup and criteria
49228
+ * PREFIX, `false` for anywhere in it. A criterion matches a whole cell, so every lookup and criteria
49107
49229
  * caller anchors; `SEARCH`, which looks for a substring, does not; and a `D` function's criteria
49108
49230
  * table is the prefix form — `DSUM` with the criterion `appl` takes the row whose value is
49109
49231
  * `Apple`, where `COUNTIF` with the same criterion takes none.