@svgrid/enterprise 3.0.1 → 3.0.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 (445) hide show
  1. package/LICENSE +94 -24
  2. package/README.md +36 -4
  3. package/dist/SvAdvancedFilter.svelte +1 -1
  4. package/dist/SvAlertsManager.svelte +2 -1
  5. package/dist/SvBoard.svelte +2 -1
  6. package/dist/SvExportMenu.svelte +4 -1
  7. package/dist/SvExportMenu.svelte.d.ts +0 -13
  8. package/dist/SvExpressionEditor.svelte +3 -3
  9. package/dist/SvFormulaBar.svelte +680 -0
  10. package/dist/SvFormulaBar.svelte.d.ts +69 -0
  11. package/dist/SvGridAlerts.svelte +49 -9
  12. package/dist/SvGridBoard.svelte +13 -8
  13. package/dist/SvGridBulkEditDrawer.svelte +26 -2
  14. package/dist/SvGridEditPanel.svelte +3 -0
  15. package/dist/SvGridScheduler.svelte +69 -40
  16. package/dist/SvGridSelectionBar.svelte +10 -3
  17. package/dist/SvPivotDesigner.svelte +263 -54
  18. package/dist/SvPivotDesigner.svelte.d.ts +27 -20
  19. package/dist/SvRibbonIcon.svelte +46 -0
  20. package/dist/SvRibbonIcon.svelte.d.ts +17 -0
  21. package/dist/SvSchemaChart.svelte +4 -2
  22. package/dist/SvSheet.svelte +7914 -0
  23. package/dist/SvSheet.svelte.d.ts +215 -0
  24. package/dist/SvSheetChartSetup.svelte +151 -0
  25. package/dist/SvSheetChartSetup.svelte.d.ts +18 -0
  26. package/dist/SvSheetComment.svelte +283 -0
  27. package/dist/SvSheetComment.svelte.d.ts +22 -0
  28. package/dist/SvSheetConditionalFormat.svelte +159 -0
  29. package/dist/SvSheetConditionalFormat.svelte.d.ts +14 -0
  30. package/dist/SvSheetDataValidation.svelte +273 -0
  31. package/dist/SvSheetDataValidation.svelte.d.ts +14 -0
  32. package/dist/SvSheetEditRanges.svelte +217 -0
  33. package/dist/SvSheetEditRanges.svelte.d.ts +15 -0
  34. package/dist/SvSheetErrors.svelte +125 -0
  35. package/dist/SvSheetErrors.svelte.d.ts +20 -0
  36. package/dist/SvSheetEvaluate.svelte +133 -0
  37. package/dist/SvSheetEvaluate.svelte.d.ts +15 -0
  38. package/dist/SvSheetFilterMenu.svelte +320 -0
  39. package/dist/SvSheetFilterMenu.svelte.d.ts +22 -0
  40. package/dist/SvSheetFindReplace.svelte +132 -0
  41. package/dist/SvSheetFindReplace.svelte.d.ts +10 -0
  42. package/dist/SvSheetFormatCells.svelte +465 -0
  43. package/dist/SvSheetFormatCells.svelte.d.ts +17 -0
  44. package/dist/SvSheetGoalSeek.svelte +145 -0
  45. package/dist/SvSheetGoalSeek.svelte.d.ts +12 -0
  46. package/dist/SvSheetInsertFunction.svelte +149 -0
  47. package/dist/SvSheetInsertFunction.svelte.d.ts +8 -0
  48. package/dist/SvSheetIteration.svelte +81 -0
  49. package/dist/SvSheetIteration.svelte.d.ts +10 -0
  50. package/dist/SvSheetLink.svelte +99 -0
  51. package/dist/SvSheetLink.svelte.d.ts +17 -0
  52. package/dist/SvSheetListPicker.svelte +91 -0
  53. package/dist/SvSheetListPicker.svelte.d.ts +10 -0
  54. package/dist/SvSheetManageRules.svelte +187 -0
  55. package/dist/SvSheetManageRules.svelte.d.ts +16 -0
  56. package/dist/SvSheetNameManager.svelte +227 -0
  57. package/dist/SvSheetNameManager.svelte.d.ts +11 -0
  58. package/dist/SvSheetPageSetup.svelte +159 -0
  59. package/dist/SvSheetPageSetup.svelte.d.ts +13 -0
  60. package/dist/SvSheetPasteSpecial.svelte +107 -0
  61. package/dist/SvSheetPasteSpecial.svelte.d.ts +12 -0
  62. package/dist/SvSheetPivot.svelte +220 -0
  63. package/dist/SvSheetPivot.svelte.d.ts +21 -0
  64. package/dist/SvSheetProtectSheet.svelte +81 -0
  65. package/dist/SvSheetProtectSheet.svelte.d.ts +11 -0
  66. package/dist/SvSheetRemoveDuplicates.svelte +152 -0
  67. package/dist/SvSheetRemoveDuplicates.svelte.d.ts +12 -0
  68. package/dist/SvSheetRibbon.svelte +1254 -0
  69. package/dist/SvSheetRibbon.svelte.d.ts +34 -0
  70. package/dist/SvSheetSizeDialog.svelte +60 -0
  71. package/dist/SvSheetSizeDialog.svelte.d.ts +11 -0
  72. package/dist/SvSheetSort.svelte +218 -0
  73. package/dist/SvSheetSort.svelte.d.ts +28 -0
  74. package/dist/SvSheetSparklines.svelte +135 -0
  75. package/dist/SvSheetSparklines.svelte.d.ts +14 -0
  76. package/dist/SvSheetTable.svelte +160 -0
  77. package/dist/SvSheetTable.svelte.d.ts +24 -0
  78. package/dist/SvSheetTabs.svelte +571 -0
  79. package/dist/SvSheetTabs.svelte.d.ts +50 -0
  80. package/dist/SvSheetTabs.test-harness.svelte.d.ts +17 -0
  81. package/dist/SvSheetTabs.test-harness.svelte.js +22 -0
  82. package/dist/SvSheetTextToColumns.svelte +172 -0
  83. package/dist/SvSheetTextToColumns.svelte.d.ts +13 -0
  84. package/dist/SvSheetValidationAlert.svelte +85 -0
  85. package/dist/SvSheetValidationAlert.svelte.d.ts +15 -0
  86. package/dist/advanced-filter-enable.js +1 -1
  87. package/dist/alerts/alert-engine.d.ts +6 -0
  88. package/dist/alerts/alert-engine.js +21 -4
  89. package/dist/alerts/alert-formats.js +2 -0
  90. package/dist/alerts/alert-types.d.ts +1 -1
  91. package/dist/alerts.d.ts +1 -1
  92. package/dist/alerts.js +2 -2
  93. package/dist/board.js +2 -2
  94. package/dist/bulk-edit.d.ts +3 -1
  95. package/dist/bulk-edit.js +1 -1
  96. package/dist/cdn/svgrid-enterprise.svelte-external.js +43538 -6539
  97. package/dist/designer/assets/GridMenus-8gTNssgV.js +8 -0
  98. package/dist/designer/assets/SvChartMenu-BDoeqGz6.js +1 -0
  99. package/dist/designer/assets/SvChartMenu-BYO9cYdy.css +1 -0
  100. package/dist/designer/assets/SvDateRangeInput-BBRzrQeg.js +1 -0
  101. package/dist/designer/assets/SvDateTimePicker-DCPg7WGN.js +1 -0
  102. package/dist/designer/assets/SvGridCellEditor-DMoWJjEI.js +4 -0
  103. package/dist/designer/assets/SvGridChart-BgLuPO7I.css +1 -0
  104. package/dist/designer/assets/SvGridChart-Cy1ATrWh.js +3 -0
  105. package/dist/designer/assets/SvGridChartBuilder-08YWWeqY.css +1 -0
  106. package/dist/designer/assets/SvGridChartBuilder-eQ3mn0L9.js +1 -0
  107. package/dist/designer/assets/SvGridChartPanel-4Pc8y5yO.css +1 -0
  108. package/dist/designer/assets/SvGridChartPanel-CATdVc9X.js +4 -0
  109. package/dist/designer/assets/{SvGridChartView-DUc-1RUf.css → SvGridChartView-7msfnWZT.css} +1 -1
  110. package/dist/designer/assets/SvGridChartView-CmsZtCED.js +1 -0
  111. package/dist/designer/assets/SvGridDropdown-Cjz0H-fI.js +1 -0
  112. package/dist/designer/assets/SvListBox-BDS66lmZ.js +110 -0
  113. package/dist/designer/assets/SvMenuList-DJ47ba1h.css +1 -0
  114. package/dist/designer/assets/SvMenuList-Dgq2D5VN.js +1 -0
  115. package/dist/designer/assets/SvTabs-2mHC6oaz.js +1 -0
  116. package/dist/designer/assets/SvTabs-DKmwb5p1.css +1 -0
  117. package/dist/designer/assets/cell-formatting-BbubJTVz.js +1 -0
  118. package/dist/designer/assets/chart-Cn7MnNqA.js +1 -0
  119. package/dist/designer/assets/chart-export-B6bkQ3X8.js +11 -0
  120. package/dist/designer/assets/chart-export-pdf-BbA28-gt.js +11 -0
  121. package/dist/designer/assets/chart-panel-messages-Dz7PTIqT.js +1 -0
  122. package/dist/designer/assets/chart-summary-BD1qYB2R.js +1 -0
  123. package/dist/designer/assets/chart-trend-B8xr5LuD.js +1 -0
  124. package/dist/designer/assets/chart-validate-BMqM-qkF.js +1 -0
  125. package/dist/designer/assets/column-resize-BYDzR1Ve.js +1 -0
  126. package/dist/designer/assets/date-format-B8JbEtIG.js +1 -0
  127. package/dist/designer/assets/date-format-DKS-z0xS.css +1 -0
  128. package/dist/designer/assets/{dismissable-BO547MH9.js → dismissable-ChWRPkoa.js} +1 -1
  129. package/dist/designer/assets/editor-contract-Bpoa7A5g.js +1 -0
  130. package/dist/designer/assets/{export-format-D-eP4b2l.js → export-format-DGckmgKr.js} +1 -1
  131. package/dist/designer/assets/focus-trap-V2-6Fy9I.js +1 -0
  132. package/dist/designer/assets/{index-C_a9Cj8Y.js → index-D5bVbuzI.js} +318 -315
  133. package/dist/designer/assets/index-_JVFxt02.css +1 -0
  134. package/dist/designer/assets/list-option-BP_dWS66.js +1 -0
  135. package/dist/designer/assets/row-resize-BInFWCpr.js +1 -0
  136. package/dist/designer/assets/server-block-cache-CXJKkJpy.js +1 -0
  137. package/dist/designer/assets/src-CITpcm6b.js +1 -0
  138. package/dist/designer/assets/src-DUQ4xE3x.js +58 -0
  139. package/dist/designer/assets/validate-C3B8QKsM.js +1 -0
  140. package/dist/designer/index.html +29 -19
  141. package/dist/export-pdf.d.ts +164 -0
  142. package/dist/export-pdf.js +346 -15
  143. package/dist/export.js +25 -10
  144. package/dist/gantt/SvGridGantt.svelte +2890 -0
  145. package/dist/gantt/SvGridGantt.svelte.d.ts +30 -0
  146. package/dist/gantt/gantt-config.d.ts +73 -0
  147. package/dist/gantt/gantt-config.js +1 -0
  148. package/dist/gantt/gantt-critical-path.d.ts +67 -0
  149. package/dist/gantt/gantt-critical-path.js +207 -0
  150. package/dist/gantt/gantt-model.d.ts +257 -0
  151. package/dist/gantt/gantt-model.js +651 -0
  152. package/dist/gantt/gantt-resources.d.ts +59 -0
  153. package/dist/gantt/gantt-resources.js +71 -0
  154. package/dist/gantt/gantt.d.ts +7 -0
  155. package/dist/gantt/gantt.js +36 -0
  156. package/dist/gantt/index.d.ts +15 -0
  157. package/dist/gantt/index.js +22 -0
  158. package/dist/gantt/timeline-arrows.d.ts +102 -0
  159. package/dist/gantt/timeline-arrows.js +181 -0
  160. package/dist/import.d.ts +2 -2
  161. package/dist/import.js +1 -1
  162. package/dist/index.d.ts +93 -3
  163. package/dist/index.js +107 -3
  164. package/dist/install.js +13 -1
  165. package/dist/license-core.d.ts +17 -1
  166. package/dist/license-core.js +16 -5
  167. package/dist/license.d.ts +18 -2
  168. package/dist/license.js +71 -6
  169. package/dist/node/studio.js +203 -9
  170. package/dist/pivot-chart.d.ts +25 -1
  171. package/dist/pivot-chart.js +25 -69
  172. package/dist/pivot-enable.js +2 -2
  173. package/dist/scheduler-dependencies.d.ts +35 -0
  174. package/dist/scheduler-dependencies.js +36 -1
  175. package/dist/scheduler.js +2 -2
  176. package/dist/selection-bar.js +2 -2
  177. package/dist/server/SvGroupCell.svelte +213 -0
  178. package/dist/server/SvGroupCell.svelte.d.ts +62 -0
  179. package/dist/server/SvRowGroupPanel.svelte +322 -0
  180. package/dist/server/SvRowGroupPanel.svelte.d.ts +37 -0
  181. package/dist/server/enable.d.ts +17 -0
  182. package/dist/server/enable.js +49 -0
  183. package/dist/server/index.d.ts +22 -0
  184. package/dist/server/index.js +24 -0
  185. package/dist/server/messages.d.ts +45 -0
  186. package/dist/server/messages.js +35 -0
  187. package/dist/server/server-group-model.d.ts +104 -0
  188. package/dist/server/server-group-model.js +272 -0
  189. package/dist/server/server-pivot.d.ts +46 -0
  190. package/dist/server/server-pivot.js +57 -0
  191. package/dist/server/server-row-model.d.ts +547 -0
  192. package/dist/server/server-row-model.js +1551 -0
  193. package/dist/server/server-selection.d.ts +99 -0
  194. package/dist/server/server-selection.js +215 -0
  195. package/dist/server/svgrid-adapter.d.ts +155 -0
  196. package/dist/server/svgrid-adapter.js +202 -0
  197. package/dist/sheet/address.d.ts +43 -0
  198. package/dist/sheet/address.js +81 -0
  199. package/dist/sheet/ast.d.ts +138 -0
  200. package/dist/sheet/ast.js +70 -0
  201. package/dist/sheet/auto-filter.d.ts +120 -0
  202. package/dist/sheet/auto-filter.js +295 -0
  203. package/dist/sheet/autocomplete.d.ts +51 -0
  204. package/dist/sheet/autocomplete.js +248 -0
  205. package/dist/sheet/cell-images.d.ts +39 -0
  206. package/dist/sheet/cell-images.js +90 -0
  207. package/dist/sheet/cell-types.d.ts +58 -0
  208. package/dist/sheet/cell-types.js +96 -0
  209. package/dist/sheet/coerce.d.ts +71 -0
  210. package/dist/sheet/coerce.js +289 -0
  211. package/dist/sheet/commands.d.ts +89 -0
  212. package/dist/sheet/commands.js +230 -0
  213. package/dist/sheet/comments.d.ts +63 -0
  214. package/dist/sheet/comments.js +131 -0
  215. package/dist/sheet/conditional-formats.d.ts +167 -0
  216. package/dist/sheet/conditional-formats.js +341 -0
  217. package/dist/sheet/csv.d.ts +32 -0
  218. package/dist/sheet/csv.js +158 -0
  219. package/dist/sheet/culture.d.ts +87 -0
  220. package/dist/sheet/culture.js +247 -0
  221. package/dist/sheet/delta.d.ts +102 -0
  222. package/dist/sheet/delta.js +203 -0
  223. package/dist/sheet/deps.d.ts +104 -0
  224. package/dist/sheet/deps.js +274 -0
  225. package/dist/sheet/document.d.ts +252 -0
  226. package/dist/sheet/document.js +465 -0
  227. package/dist/sheet/edit-keys.d.ts +14 -0
  228. package/dist/sheet/edit-keys.js +40 -0
  229. package/dist/sheet/engine.d.ts +67 -0
  230. package/dist/sheet/engine.js +19 -0
  231. package/dist/sheet/entry.d.ts +35 -0
  232. package/dist/sheet/entry.js +226 -0
  233. package/dist/sheet/error-check.d.ts +49 -0
  234. package/dist/sheet/error-check.js +83 -0
  235. package/dist/sheet/evaluate-steps.d.ts +48 -0
  236. package/dist/sheet/evaluate-steps.js +196 -0
  237. package/dist/sheet/evaluate.d.ts +128 -0
  238. package/dist/sheet/evaluate.js +1049 -0
  239. package/dist/sheet/filter-files.d.ts +37 -0
  240. package/dist/sheet/filter-files.js +465 -0
  241. package/dist/sheet/find-replace.d.ts +62 -0
  242. package/dist/sheet/find-replace.js +152 -0
  243. package/dist/sheet/format-store.d.ts +114 -0
  244. package/dist/sheet/format-store.js +243 -0
  245. package/dist/sheet/freeze.d.ts +54 -0
  246. package/dist/sheet/freeze.js +58 -0
  247. package/dist/sheet/from-rows.d.ts +14 -0
  248. package/dist/sheet/from-rows.js +50 -0
  249. package/dist/sheet/function-catalog.d.ts +10 -0
  250. package/dist/sheet/function-catalog.js +385 -0
  251. package/dist/sheet/functions.d.ts +28 -0
  252. package/dist/sheet/functions.js +634 -0
  253. package/dist/sheet/goal-seek.d.ts +73 -0
  254. package/dist/sheet/goal-seek.js +153 -0
  255. package/dist/sheet/index.d.ts +80 -0
  256. package/dist/sheet/index.js +80 -0
  257. package/dist/sheet/links.d.ts +57 -0
  258. package/dist/sheet/links.js +174 -0
  259. package/dist/sheet/merges.d.ts +71 -0
  260. package/dist/sheet/merges.js +137 -0
  261. package/dist/sheet/messages.d.ts +778 -0
  262. package/dist/sheet/messages.js +806 -0
  263. package/dist/sheet/names.d.ts +31 -0
  264. package/dist/sheet/names.js +87 -0
  265. package/dist/sheet/navigate.d.ts +52 -0
  266. package/dist/sheet/navigate.js +135 -0
  267. package/dist/sheet/number-format.d.ts +110 -0
  268. package/dist/sheet/number-format.js +905 -0
  269. package/dist/sheet/objects.d.ts +106 -0
  270. package/dist/sheet/objects.js +149 -0
  271. package/dist/sheet/ods-document.d.ts +44 -0
  272. package/dist/sheet/ods-document.js +1275 -0
  273. package/dist/sheet/open-file.d.ts +26 -0
  274. package/dist/sheet/open-file.js +56 -0
  275. package/dist/sheet/outline.d.ts +82 -0
  276. package/dist/sheet/outline.js +228 -0
  277. package/dist/sheet/packs/array.d.ts +16 -0
  278. package/dist/sheet/packs/array.js +172 -0
  279. package/dist/sheet/packs/database.d.ts +42 -0
  280. package/dist/sheet/packs/database.js +142 -0
  281. package/dist/sheet/packs/engineering.d.ts +2 -0
  282. package/dist/sheet/packs/engineering.js +296 -0
  283. package/dist/sheet/packs/financial.d.ts +5 -0
  284. package/dist/sheet/packs/financial.js +220 -0
  285. package/dist/sheet/packs/math-stats.d.ts +2 -0
  286. package/dist/sheet/packs/math-stats.js +372 -0
  287. package/dist/sheet/packs/special.d.ts +44 -0
  288. package/dist/sheet/packs/special.js +187 -0
  289. package/dist/sheet/packs/stats-dist.d.ts +2 -0
  290. package/dist/sheet/packs/stats-dist.js +785 -0
  291. package/dist/sheet/packs/text-date.d.ts +2 -0
  292. package/dist/sheet/packs/text-date.js +332 -0
  293. package/dist/sheet/packs/trig.d.ts +2 -0
  294. package/dist/sheet/packs/trig.js +73 -0
  295. package/dist/sheet/page-setup.d.ts +73 -0
  296. package/dist/sheet/page-setup.js +73 -0
  297. package/dist/sheet/palette.d.ts +19 -0
  298. package/dist/sheet/palette.js +84 -0
  299. package/dist/sheet/parse.d.ts +13 -0
  300. package/dist/sheet/parse.js +140 -0
  301. package/dist/sheet/paste-special.d.ts +186 -0
  302. package/dist/sheet/paste-special.js +601 -0
  303. package/dist/sheet/pivot-range.d.ts +160 -0
  304. package/dist/sheet/pivot-range.js +333 -0
  305. package/dist/sheet/presence.d.ts +73 -0
  306. package/dist/sheet/presence.js +79 -0
  307. package/dist/sheet/print.d.ts +104 -0
  308. package/dist/sheet/print.js +169 -0
  309. package/dist/sheet/protection.d.ts +75 -0
  310. package/dist/sheet/protection.js +101 -0
  311. package/dist/sheet/rects.d.ts +45 -0
  312. package/dist/sheet/rects.js +112 -0
  313. package/dist/sheet/refs.d.ts +130 -0
  314. package/dist/sheet/refs.js +413 -0
  315. package/dist/sheet/ribbon-icons.d.ts +31 -0
  316. package/dist/sheet/ribbon-icons.js +536 -0
  317. package/dist/sheet/ribbon.d.ts +173 -0
  318. package/dist/sheet/ribbon.js +1054 -0
  319. package/dist/sheet/sheet-kinds.d.ts +74 -0
  320. package/dist/sheet/sheet-kinds.js +91 -0
  321. package/dist/sheet/shortcuts.d.ts +174 -0
  322. package/dist/sheet/shortcuts.js +674 -0
  323. package/dist/sheet/sort.d.ts +51 -0
  324. package/dist/sheet/sort.js +107 -0
  325. package/dist/sheet/sparklines.d.ts +111 -0
  326. package/dist/sheet/sparklines.js +204 -0
  327. package/dist/sheet/structure.d.ts +87 -0
  328. package/dist/sheet/structure.js +166 -0
  329. package/dist/sheet/table-styles.d.ts +74 -0
  330. package/dist/sheet/table-styles.js +152 -0
  331. package/dist/sheet/tables.d.ts +89 -0
  332. package/dist/sheet/tables.js +178 -0
  333. package/dist/sheet/tokenize.d.ts +71 -0
  334. package/dist/sheet/tokenize.js +355 -0
  335. package/dist/sheet/transforms.d.ts +76 -0
  336. package/dist/sheet/transforms.js +154 -0
  337. package/dist/sheet/validation.d.ts +108 -0
  338. package/dist/sheet/validation.js +278 -0
  339. package/dist/sheet/workbook.d.ts +217 -0
  340. package/dist/sheet/workbook.js +1120 -0
  341. package/dist/sheet/xls-cfb.d.ts +32 -0
  342. package/dist/sheet/xls-cfb.js +290 -0
  343. package/dist/sheet/xls-document.d.ts +10 -0
  344. package/dist/sheet/xls-document.js +1243 -0
  345. package/dist/sheet/xls-formula.d.ts +40 -0
  346. package/dist/sheet/xls-formula.js +569 -0
  347. package/dist/sheet/xlsx-document.d.ts +108 -0
  348. package/dist/sheet/xlsx-document.js +1849 -0
  349. package/dist/sheet/xlsx-drawing.d.ts +99 -0
  350. package/dist/sheet/xlsx-drawing.js +420 -0
  351. package/dist/sheet-enable.d.ts +6 -0
  352. package/dist/sheet-enable.js +45 -0
  353. package/dist/sheet-text.d.ts +7 -0
  354. package/dist/sheet-text.js +29 -0
  355. package/dist/sources/auth-supabase.js +2 -2
  356. package/dist/sources/realtime-supabase.js +2 -2
  357. package/dist/sources/rest.d.ts +6 -2
  358. package/dist/sources/rest.js +42 -7
  359. package/dist/sources/supabase.d.ts +10 -1
  360. package/dist/sources/supabase.js +73 -40
  361. package/dist/studio/emit-project.js +14 -1
  362. package/dist/studio/index.js +1 -1
  363. package/dist/studio/project.d.ts +11 -2
  364. package/dist/studio/project.js +5 -2
  365. package/dist/studio/ui-components.generated.js +170 -3
  366. package/dist/sveltekit/in-memory.d.ts +2 -2
  367. package/dist/sveltekit/in-memory.js +125 -4
  368. package/dist/sveltekit/index.d.ts +1 -1
  369. package/dist/sveltekit/index.js +1 -1
  370. package/dist/sveltekit/query-plan.d.ts +50 -4
  371. package/dist/sveltekit/query-plan.js +25 -3
  372. package/dist/sveltekit/sql-source.d.ts +6 -0
  373. package/dist/sveltekit/sql-source.js +34 -6
  374. package/dist/sveltekit/sql.d.ts +31 -0
  375. package/dist/sveltekit/sql.js +135 -25
  376. package/dist/sveltekit/transport.d.ts +10 -2
  377. package/dist/sveltekit/transport.js +30 -6
  378. package/dist/upgrade-prompt.d.ts +1 -1
  379. package/dist/version.d.ts +1 -1
  380. package/dist/version.js +1 -1
  381. package/dist/watermark.js +35 -2
  382. package/dist/wc/GridMenus-By9vPuq0.js +1088 -0
  383. package/dist/wc/SvChartMenu-CQNrQGT2.js +308 -0
  384. package/dist/wc/SvDateRangeInput-DR6m7bSM.js +199 -0
  385. package/dist/wc/SvDateTimePicker-D-vRnaMo.js +771 -0
  386. package/dist/wc/SvField-B_kurx_P.js +149 -0
  387. package/dist/wc/SvGrid.helpers-BdVDtjUm.js +135 -0
  388. package/dist/wc/SvGridCellEditor-Bnf1Kr5C.js +560 -0
  389. package/dist/wc/SvGridChart-BqUJh2pG.js +3572 -0
  390. package/dist/wc/SvGridChartBuilder-CGycC5cn.js +988 -0
  391. package/dist/wc/SvGridChartPanel-CRnizsHD.js +1746 -0
  392. package/dist/wc/SvGridChartView-D1pa_xMy.js +47 -0
  393. package/dist/wc/SvGridDropdown-45WsObLL.js +259 -0
  394. package/dist/wc/SvModal-DrfOYYyX.js +189 -0
  395. package/dist/wc/cell-formatting-CBfgahv1.js +86 -0
  396. package/dist/wc/chart-6OXlybVT.js +4341 -0
  397. package/dist/wc/chart-export-CeSADGfi.js +135 -0
  398. package/dist/wc/chart-export-pdf-BGko7MER.js +104 -0
  399. package/dist/wc/chart-summary-2m3ia1-n.js +137 -0
  400. package/dist/wc/chart-trend-CQOQtTMl.js +50 -0
  401. package/dist/wc/chart-validate-CD6ptiwg.js +180 -0
  402. package/dist/wc/client-DQIzjDBG.js +3064 -0
  403. package/dist/wc/column-resize-DUPgynvc.js +101 -0
  404. package/dist/wc/date-format-DS-z_h9v.js +1130 -0
  405. package/dist/wc/dismissable-CQ6XFXsk.js +45 -0
  406. package/dist/wc/editor-contract-peBDxir_.js +22 -0
  407. package/dist/wc/editor-registry-DxGKqcvx.js +24 -0
  408. package/dist/wc/focus-trap-Dbb2tJxb.js +65 -0
  409. package/dist/wc/list-option-DrRyivWp.js +82 -0
  410. package/dist/wc/popover-WsGlvtQv.js +69 -0
  411. package/dist/wc/positioning-BiKLfu1E.js +112 -0
  412. package/dist/wc/react.d.ts +41 -0
  413. package/dist/wc/react.js +90 -0
  414. package/dist/wc/rolldown-runtime-Dy4uBu1J.js +11 -0
  415. package/dist/wc/row-drag-touch-CycRR65n.js +93 -0
  416. package/dist/wc/row-resize-limG_N1z.js +111 -0
  417. package/dist/wc/sv-sheet-element.d.ts +97 -0
  418. package/dist/wc/sv-sheet-element.js +44213 -0
  419. package/dist/wc/svelte-virtualizer.svelte-CXtQy2TQ.js +530 -0
  420. package/dist/wc/validate-BqDthkNr.js +88 -0
  421. package/dist/wc/vue.d.ts +31 -0
  422. package/dist/wc/vue.js +75 -0
  423. package/package.json +36 -6
  424. package/dist/designer/assets/GridMenus-B1JtIN21.js +0 -8
  425. package/dist/designer/assets/SvDateRangeInput-CjO7nn_x.js +0 -1
  426. package/dist/designer/assets/SvDateTimePicker-ByBD_ov6.js +0 -1
  427. package/dist/designer/assets/SvField-YDLipR6O.css +0 -1
  428. package/dist/designer/assets/SvField-cj1PFNgZ.js +0 -1
  429. package/dist/designer/assets/SvGridCellEditor-0W1L2hJ1.js +0 -2
  430. package/dist/designer/assets/SvGridChart-DBOR4xcz.js +0 -2
  431. package/dist/designer/assets/SvGridChart-fkMWeh1J.css +0 -1
  432. package/dist/designer/assets/SvGridChartPanel-symrhNnR.js +0 -11
  433. package/dist/designer/assets/SvGridChartView-BmRxq6mU.js +0 -1
  434. package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +0 -1
  435. package/dist/designer/assets/SvListBox-1oUF6Iav.js +0 -110
  436. package/dist/designer/assets/cell-formatting-wr5wm7US.js +0 -1
  437. package/dist/designer/assets/chart-DXFganU8.js +0 -1
  438. package/dist/designer/assets/column-resize-C_inr5zT.js +0 -1
  439. package/dist/designer/assets/date-format-DGagAqRc.css +0 -1
  440. package/dist/designer/assets/date-format-onlYDsrY.js +0 -1
  441. package/dist/designer/assets/easing-zaypKrr0.js +0 -3
  442. package/dist/designer/assets/index-k2stW6L8.css +0 -1
  443. package/dist/designer/assets/row-resize-B0FWHcNr.js +0 -1
  444. package/dist/designer/assets/src-D9p27OGC.js +0 -58
  445. package/dist/designer/assets/validate-h-aslRV9.js +0 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Reference rewriting. The one module allowed to move a reference.
3
+ *
4
+ * Two jobs, both of which the demo engines could not do because they discarded
5
+ * `$` at parse time:
6
+ *
7
+ * - `translateFormula` shifts RELATIVE parts by a delta and leaves pinned
8
+ * parts alone. This is what makes fill-down, copy/paste and drag-fill
9
+ * correct: `=$A$1*B2` filled one row down becomes `=$A$1*B3`.
10
+ * - `fixupReferences` rewrites every formula in a sheet after rows or columns
11
+ * are inserted or removed. A reference to a deleted cell becomes `#REF!`;
12
+ * everything past the edit shifts; a range straddling an insertion grows.
13
+ *
14
+ * Both re-serialise from the AST rather than editing text, so `SUM( A1 : B2 )`
15
+ * comes back normalised instead of half-rewritten.
16
+ */
17
+ import { type Node } from './ast.js';
18
+ /** Serialise an AST back to formula text, with the leading `=`. */
19
+ export declare function formatFormula(node: Node): string;
20
+ /**
21
+ * Shift every relative reference in a formula by (dRow, dCol).
22
+ *
23
+ * Anything that is not a formula comes back untouched, so callers can pass a
24
+ * whole column of mixed literals and formulas through it.
25
+ */
26
+ export declare function translateFormula(text: unknown, dRow: number, dCol: number): unknown;
27
+ /**
28
+ * A formula for a cell that a transposed paste moves from `source` to
29
+ * `dest`, its relative references turned with it.
30
+ *
31
+ * Excel rotates a relative offset on a transpose: a reference `dr` rows
32
+ * and `dc` columns away becomes `dc` rows and `dr` columns away. A cell
33
+ * inside the block moved the same way, so a formula that read the price
34
+ * beside it still reads that price, now above it, which is what makes a
35
+ * transposed totals column still total. A reference outside the block is
36
+ * turned too, as Excel turns it. Absolute parts stay where they point.
37
+ * A column-only reference has no row to turn and is left as it is.
38
+ */
39
+ export declare function transposeFormula(text: unknown, source: {
40
+ row: number;
41
+ col: number;
42
+ }, dest: {
43
+ row: number;
44
+ col: number;
45
+ }): unknown;
46
+ /**
47
+ * Point every reference that names sheet `from` at `to` instead: what a
48
+ * sheet rename owes the formulas on the other sheets and the defined
49
+ * names, and what Excel does on one. Parsed and re-rendered rather than
50
+ * substituted as text, so a string literal that happens to contain the old
51
+ * name is left alone and a new name with a space comes out quoted. A
52
+ * formula that names no such sheet is returned as it was, untouched.
53
+ */
54
+ /**
55
+ * A block of cells that has MOVED: cut and pasted somewhere else, or dragged
56
+ * there. `sheet` is where it was, `toSheet` where it landed, and the rect is
57
+ * the block's old position, zero-based and inclusive.
58
+ */
59
+ export type CellMove = {
60
+ sheet: string;
61
+ toSheet: string;
62
+ top: number;
63
+ left: number;
64
+ bottom: number;
65
+ right: number;
66
+ dRow: number;
67
+ dCol: number;
68
+ };
69
+ /**
70
+ * Point every reference to a moved cell at where the cell now is.
71
+ *
72
+ * This is what a cut and paste owes the rest of the workbook, and Excel does
73
+ * it: moving A1 to D1 rewrites `=A1*2` as `=D1*2` rather than leaving it
74
+ * reading an emptied cell. A `$` makes no difference - the cell moved, so
75
+ * every way of naming it moves - and a RANGE only follows when the whole of
76
+ * it moved, which is why `=SUM(A1:A2)` stays as it is when only A1 goes.
77
+ *
78
+ * `self` is the sheet the formula lives on, so an unqualified reference is
79
+ * read against the right geometry; a reference that lands on another sheet
80
+ * takes that sheet's name, as Excel writes it.
81
+ */
82
+ export declare function repointReferences(text: unknown, move: CellMove, self: string | null): unknown;
83
+ /**
84
+ * Excel's reference colours: the A1 references in a formula being typed,
85
+ * each occurrence with the colour of its range, so the cells a formula
86
+ * names and the text that names them can be painted alike. Colours go by
87
+ * distinct range in order of first appearance, so `B5` twice is one
88
+ * colour; `$` anchors and case do not tell ranges apart; a reference into
89
+ * another sheet and anything inside a string are skipped. `rect` is
90
+ * [row1, col1, row2, col2], zero-based and normalised.
91
+ */
92
+ export type ReferenceSpan = {
93
+ start: number;
94
+ end: number;
95
+ key: string;
96
+ colour: string;
97
+ rect: readonly [number, number, number, number];
98
+ };
99
+ export declare const REFERENCE_COLOURS: ReadonlyArray<string>;
100
+ export declare function referenceSpans(text: string, colours?: ReadonlyArray<string>): ReferenceSpan[];
101
+ export declare function renameSheetReferences(text: unknown, from: string, to: string): unknown;
102
+ export type StructuralEdit = {
103
+ kind: 'insertRows' | 'deleteRows' | 'insertCols' | 'deleteCols';
104
+ /** 0-based index the edit happens at. */
105
+ at: number;
106
+ count: number;
107
+ };
108
+ /**
109
+ * Rewrite a formula's references after rows or columns are inserted or
110
+ * removed. A reference into the deleted span becomes `#REF!`.
111
+ *
112
+ * A RANGE only breaks when the edit removes all of it. Deleting rows inside a
113
+ * range shrinks it, which is what Excel does and what keeps `=SUM(A1:A10)`
114
+ * meaningful after you delete row 5.
115
+ */
116
+ /**
117
+ * Which sheet an edit happened on, and which sheet the formula being
118
+ * rewritten lives on. With a scope, only references INTO the edited sheet
119
+ * move: an unqualified reference belongs to `self`, a qualified one to the
120
+ * sheet it names. Without one every reference moves, which is right for a
121
+ * single grid that has no sheets to tell apart.
122
+ */
123
+ export type EditScope = {
124
+ /** The sheet the rows or columns were inserted in or deleted from. */
125
+ sheet: string;
126
+ /** The sheet the formula lives on; null for a defined name, which has no
127
+ * home sheet, so only its qualified references can match. */
128
+ self: string | null;
129
+ };
130
+ export declare function fixupReferences(text: unknown, edit: StructuralEdit, scope?: EditScope): unknown;
@@ -0,0 +1,413 @@
1
+ /**
2
+ * Reference rewriting. The one module allowed to move a reference.
3
+ *
4
+ * Two jobs, both of which the demo engines could not do because they discarded
5
+ * `$` at parse time:
6
+ *
7
+ * - `translateFormula` shifts RELATIVE parts by a delta and leaves pinned
8
+ * parts alone. This is what makes fill-down, copy/paste and drag-fill
9
+ * correct: `=$A$1*B2` filled one row down becomes `=$A$1*B3`.
10
+ * - `fixupReferences` rewrites every formula in a sheet after rows or columns
11
+ * are inserted or removed. A reference to a deleted cell becomes `#REF!`;
12
+ * everything past the edit shifts; a range straddling an insertion grows.
13
+ *
14
+ * Both re-serialise from the AST rather than editing text, so `SUM( A1 : B2 )`
15
+ * comes back normalised instead of half-rewritten.
16
+ */
17
+ import { mapNode, PRECEDENCE } from './ast.js';
18
+ import { formatA1, colToLetters, lettersToCol } from './address.js';
19
+ import { parseFormula } from './parse.js';
20
+ /** Shift a single reference's relative parts. */
21
+ function translateRef(ref, dRow, dCol) {
22
+ return {
23
+ ...ref,
24
+ col: ref.colAbs ? ref.col : ref.col + dCol,
25
+ row: ref.row === null || ref.rowAbs ? ref.row : ref.row + dRow,
26
+ };
27
+ }
28
+ /** True once a reference has been shifted off the sheet. */
29
+ function isBroken(ref) {
30
+ return ref.col < 0 || (ref.row !== null && ref.row < 0);
31
+ }
32
+ /** Serialise an AST back to formula text, with the leading `=`. */
33
+ export function formatFormula(node) {
34
+ return `=${render(node)}`;
35
+ }
36
+ /** Render `node` as an operand of something binding at `minPrec`, adding
37
+ * parentheses when it would otherwise re-associate. */
38
+ function wrap(node, minPrec) {
39
+ const text = render(node);
40
+ if (node.k === 'binary' && PRECEDENCE[node.op] < minPrec)
41
+ return `(${text})`;
42
+ // A unary minus has to be parenthesised inside anything tighter than it,
43
+ // so -(A1+B1) and 2^-A1 both survive.
44
+ if (node.k === 'unary' && node.op !== '%' && minPrec > 5)
45
+ return `(${text})`;
46
+ return text;
47
+ }
48
+ function render(node) {
49
+ switch (node.k) {
50
+ case 'num': return String(node.v);
51
+ case 'str': return `"${node.v.replace(/"/g, '""')}"`;
52
+ case 'bool': return node.v ? 'TRUE' : 'FALSE';
53
+ case 'err': return node.v;
54
+ case 'ref': return node.ref.col < 0 || (node.ref.row ?? 0) < 0 ? '#REF!' : formatA1(node.ref);
55
+ case 'spill': return node.ref.col < 0 || (node.ref.row ?? 0) < 0 ? '#REF!' : `${formatA1(node.ref)}#`;
56
+ case 'range': {
57
+ if (isBroken(node.from) || isBroken(node.to))
58
+ return '#REF!';
59
+ // A whole-column range prints as A:C, not A1:C.
60
+ if (node.from.row === null || node.to.row === null) {
61
+ const left = `${node.from.colAbs ? '$' : ''}${colToLetters(node.from.col)}`;
62
+ const right = `${node.to.colAbs ? '$' : ''}${colToLetters(node.to.col)}`;
63
+ const prefix = node.from.sheet ? `${formatA1({ ...node.from, row: null }).split('!')[0]}!` : '';
64
+ return `${prefix}${left}:${right}`;
65
+ }
66
+ const from = formatA1(node.from);
67
+ // The right-hand side drops a repeated sheet prefix: Sheet1!A1:B2.
68
+ const to = formatA1({ ...node.to, sheet: null });
69
+ return `${from}:${to}`;
70
+ }
71
+ case 'ref3d': {
72
+ if (isBroken(node.from) || isBroken(node.to))
73
+ return '#REF!';
74
+ const q = (s) => (/^[A-Za-z_][A-Za-z0-9_.]*$/.test(s) ? s : `'${s.replace(/'/g, "''")}'`);
75
+ const cell = formatA1({ ...node.from, sheet: null });
76
+ const to = node.from.row === node.to.row && node.from.col === node.to.col
77
+ ? ''
78
+ : `:${formatA1({ ...node.to, sheet: null })}`;
79
+ return `${q(node.sheetFrom)}:${q(node.sheetTo)}!${cell}${to}`;
80
+ }
81
+ case 'name': return node.name;
82
+ case 'table': {
83
+ // Re-serialised, never translated: the whole point of a structured
84
+ // reference is that it does not move when the formula does.
85
+ const parts = [];
86
+ if (node.specifier === '#ThisRow')
87
+ parts.push(node.column ? `@${node.column}` : '@');
88
+ else if (node.specifier !== '#Data')
89
+ parts.push(node.specifier);
90
+ if (node.specifier !== '#ThisRow' && node.column) {
91
+ parts.push(node.columnTo ? `[${node.column}]:[${node.columnTo}]` : node.column);
92
+ }
93
+ return `${node.table ?? ''}[${parts.join(',')}]`;
94
+ }
95
+ case 'unary':
96
+ return node.op === '%'
97
+ ? `${wrap(node.arg, 6)}%`
98
+ : `${node.op}${wrap(node.arg, 5)}`;
99
+ case 'binary': {
100
+ const prec = PRECEDENCE[node.op];
101
+ // The AST does not record parentheses, so they have to be reconstructed
102
+ // from precedence. Emitting the operands bare turns =(A1+B1)*2 into
103
+ // =A2+B2*2, which is a silent wrong answer on every fill and paste.
104
+ //
105
+ // Which SIDE needs one at equal precedence depends on associativity,
106
+ // and every operator here binds left, `^` included: the RIGHT operand
107
+ // is the one that needs the bracket, because a-(b-c) is not a-b-c and
108
+ // a^(b^c) is not a^b^c.
109
+ const leftMin = prec;
110
+ const rightMin = prec + 1;
111
+ return `${wrap(node.left, leftMin)}${node.op}${wrap(node.right, rightMin)}`;
112
+ }
113
+ // `(` is the call node an immediate or curried lambda builds:
114
+ // LAMBDA(x, x*2)(21) is the callee, then its arguments.
115
+ case 'fn': return node.name === '('
116
+ ? `${render(node.args[0])}(${node.args.slice(1).map(render).join(',')})`
117
+ : `${node.name}(${node.args.map(render).join(',')})`;
118
+ case 'empty': return '';
119
+ }
120
+ }
121
+ /**
122
+ * Shift every relative reference in a formula by (dRow, dCol).
123
+ *
124
+ * Anything that is not a formula comes back untouched, so callers can pass a
125
+ * whole column of mixed literals and formulas through it.
126
+ */
127
+ export function translateFormula(text, dRow, dCol) {
128
+ if (typeof text !== 'string' || !text.startsWith('='))
129
+ return text;
130
+ if (dRow === 0 && dCol === 0)
131
+ return text;
132
+ let ast;
133
+ try {
134
+ ast = parseFormula(text);
135
+ }
136
+ catch {
137
+ // Not parseable: leave it exactly as the user typed it. Rewriting a
138
+ // half-understood formula is worse than leaving it alone.
139
+ return text;
140
+ }
141
+ const moved = mapNode(ast, (n) => {
142
+ if (n.k === 'ref')
143
+ return { ...n, ref: translateRef(n.ref, dRow, dCol) };
144
+ if (n.k === 'spill')
145
+ return { ...n, ref: translateRef(n.ref, dRow, dCol) };
146
+ if (n.k === 'range') {
147
+ return { ...n, from: translateRef(n.from, dRow, dCol), to: translateRef(n.to, dRow, dCol) };
148
+ }
149
+ if (n.k === 'ref3d') {
150
+ return { ...n, from: translateRef(n.from, dRow, dCol), to: translateRef(n.to, dRow, dCol) };
151
+ }
152
+ return n;
153
+ });
154
+ return formatFormula(moved);
155
+ }
156
+ /**
157
+ * A formula for a cell that a transposed paste moves from `source` to
158
+ * `dest`, its relative references turned with it.
159
+ *
160
+ * Excel rotates a relative offset on a transpose: a reference `dr` rows
161
+ * and `dc` columns away becomes `dc` rows and `dr` columns away. A cell
162
+ * inside the block moved the same way, so a formula that read the price
163
+ * beside it still reads that price, now above it, which is what makes a
164
+ * transposed totals column still total. A reference outside the block is
165
+ * turned too, as Excel turns it. Absolute parts stay where they point.
166
+ * A column-only reference has no row to turn and is left as it is.
167
+ */
168
+ export function transposeFormula(text, source, dest) {
169
+ if (typeof text !== 'string' || !text.startsWith('='))
170
+ return text;
171
+ let ast;
172
+ try {
173
+ ast = parseFormula(text);
174
+ }
175
+ catch {
176
+ return text;
177
+ }
178
+ const turn = (ref) => {
179
+ if (ref.row === null)
180
+ return ref;
181
+ return {
182
+ ...ref,
183
+ row: ref.rowAbs ? ref.row : dest.row + (ref.col - source.col),
184
+ col: ref.colAbs ? ref.col : dest.col + (ref.row - source.row),
185
+ };
186
+ };
187
+ const moved = mapNode(ast, (n) => {
188
+ if (n.k === 'ref')
189
+ return { ...n, ref: turn(n.ref) };
190
+ if (n.k === 'spill')
191
+ return { ...n, ref: turn(n.ref) };
192
+ if (n.k === 'range') {
193
+ // A turned range may come out with its corners swapped; a range is
194
+ // spelled top-left to bottom-right, so put them back in order.
195
+ const a = turn(n.from);
196
+ const b = turn(n.to);
197
+ const from = { ...a, row: a.row === null || b.row === null ? a.row : Math.min(a.row, b.row), col: Math.min(a.col, b.col), rowAbs: a.rowAbs, colAbs: a.colAbs };
198
+ const to = { ...b, row: a.row === null || b.row === null ? b.row : Math.max(a.row, b.row), col: Math.max(a.col, b.col), rowAbs: b.rowAbs, colAbs: b.colAbs };
199
+ return { ...n, from, to };
200
+ }
201
+ return n;
202
+ });
203
+ return formatFormula(moved);
204
+ }
205
+ const inside = (move, row, col) => row !== null && row >= move.top && row <= move.bottom && col >= move.left && col <= move.right;
206
+ /**
207
+ * Point every reference to a moved cell at where the cell now is.
208
+ *
209
+ * This is what a cut and paste owes the rest of the workbook, and Excel does
210
+ * it: moving A1 to D1 rewrites `=A1*2` as `=D1*2` rather than leaving it
211
+ * reading an emptied cell. A `$` makes no difference - the cell moved, so
212
+ * every way of naming it moves - and a RANGE only follows when the whole of
213
+ * it moved, which is why `=SUM(A1:A2)` stays as it is when only A1 goes.
214
+ *
215
+ * `self` is the sheet the formula lives on, so an unqualified reference is
216
+ * read against the right geometry; a reference that lands on another sheet
217
+ * takes that sheet's name, as Excel writes it.
218
+ */
219
+ export function repointReferences(text, move, self) {
220
+ if (typeof text !== 'string' || !text.startsWith('='))
221
+ return text;
222
+ if (move.dRow === 0 && move.dCol === 0 && move.sheet === move.toSheet)
223
+ return text;
224
+ let ast;
225
+ try {
226
+ ast = parseFormula(text);
227
+ }
228
+ catch {
229
+ return text;
230
+ }
231
+ const names = (sheet) => (sheet ?? self ?? '').toLowerCase() === move.sheet.toLowerCase();
232
+ const landed = (ref) => ({
233
+ ...ref,
234
+ row: ref.row === null ? null : ref.row + move.dRow,
235
+ col: ref.col + move.dCol,
236
+ // Unqualified only when the formula already lives on the sheet it landed on.
237
+ sheet: move.toSheet.toLowerCase() === (self ?? '').toLowerCase() ? null : move.toSheet,
238
+ });
239
+ const moved = mapNode(ast, (n) => {
240
+ if (n.k === 'ref') {
241
+ if (!names(n.ref.sheet) || !inside(move, n.ref.row, n.ref.col))
242
+ return n;
243
+ return { ...n, ref: landed(n.ref) };
244
+ }
245
+ if (n.k === 'spill') {
246
+ if (!names(n.ref.sheet) || !inside(move, n.ref.row, n.ref.col))
247
+ return n;
248
+ return { ...n, ref: landed(n.ref) };
249
+ }
250
+ if (n.k === 'range') {
251
+ const sheet = n.from.sheet ?? n.to.sheet;
252
+ if (!names(sheet))
253
+ return n;
254
+ if (!inside(move, n.from.row, n.from.col) || !inside(move, n.to.row, n.to.col))
255
+ return n;
256
+ return { ...n, from: landed(n.from), to: landed(n.to) };
257
+ }
258
+ return n;
259
+ });
260
+ const next = formatFormula(moved);
261
+ return next === text ? text : next;
262
+ }
263
+ export const REFERENCE_COLOURS = ['#1e6fd9', '#d62828', '#8e44ad', '#0f9d58', '#e67e22', '#0097a7'];
264
+ export function referenceSpans(text, colours = REFERENCE_COLOURS) {
265
+ const out = [];
266
+ if (!text.startsWith('='))
267
+ return out;
268
+ const blanked = text
269
+ .replace(/"[^"]*"/g, (m) => ' '.repeat(m.length))
270
+ // A sheet-qualified reference belongs to another sheet.
271
+ .replace(/(?:'[^']*'|[A-Za-z_][\w.]*)!\$?[A-Z]{1,3}\$?\d+(?::\$?[A-Z]{1,3}\$?\d+)?/gi, (m) => ' '.repeat(m.length));
272
+ // Case-insensitive: a reference is typed as "b5" as often as "B5", and
273
+ // the engine reads both.
274
+ const re = /(?<![A-Za-z0-9_.!])\$?([A-Za-z]{1,3})\$?(\d{1,7})(?::\$?([A-Za-z]{1,3})\$?(\d{1,7}))?(?![A-Za-z0-9_(])/g;
275
+ const order = new Map();
276
+ for (const m of blanked.matchAll(re)) {
277
+ const key = m[0].replace(/\$/g, '').toUpperCase();
278
+ const c1 = lettersToCol(m[1].toUpperCase()), r1 = Number(m[2]) - 1;
279
+ const c2 = m[3] ? lettersToCol(m[3].toUpperCase()) : c1, r2 = m[4] ? Number(m[4]) - 1 : r1;
280
+ if (c1 < 0 || c2 < 0 || r1 < 0 || r2 < 0)
281
+ continue;
282
+ let index = order.get(key);
283
+ if (index === undefined) {
284
+ index = order.size;
285
+ order.set(key, index);
286
+ }
287
+ out.push({
288
+ start: m.index,
289
+ end: m.index + m[0].length,
290
+ key,
291
+ colour: colours[index % colours.length],
292
+ rect: [Math.min(r1, r2), Math.min(c1, c2), Math.max(r1, r2), Math.max(c1, c2)],
293
+ });
294
+ }
295
+ return out;
296
+ }
297
+ export function renameSheetReferences(text, from, to) {
298
+ if (typeof text !== 'string' || !text.startsWith('='))
299
+ return text;
300
+ const wanted = from.toLowerCase();
301
+ if (!text.toLowerCase().includes(wanted))
302
+ return text;
303
+ let ast;
304
+ try {
305
+ ast = parseFormula(text);
306
+ }
307
+ catch {
308
+ return text;
309
+ }
310
+ let changed = false;
311
+ const swap = (ref) => {
312
+ if (ref.sheet === null || ref.sheet.toLowerCase() !== wanted)
313
+ return ref;
314
+ changed = true;
315
+ return { ...ref, sheet: to };
316
+ };
317
+ const swapName = (name) => {
318
+ if (name.toLowerCase() !== wanted)
319
+ return name;
320
+ changed = true;
321
+ return to;
322
+ };
323
+ const moved = mapNode(ast, (n) => {
324
+ if (n.k === 'ref')
325
+ return { ...n, ref: swap(n.ref) };
326
+ if (n.k === 'spill')
327
+ return { ...n, ref: swap(n.ref) };
328
+ if (n.k === 'range')
329
+ return { ...n, from: swap(n.from), to: swap(n.to) };
330
+ // A 3D reference names its sheets by string, either end of the tab range.
331
+ if (n.k === 'ref3d')
332
+ return { ...n, sheetFrom: swapName(n.sheetFrom), sheetTo: swapName(n.sheetTo) };
333
+ return n;
334
+ });
335
+ return changed ? formatFormula(moved) : text;
336
+ }
337
+ /**
338
+ * Shift one coordinate through a structural edit. Returns null when the thing
339
+ * it pointed at was deleted, which becomes `#REF!`.
340
+ */
341
+ function shiftCoord(value, edit, inserting) {
342
+ if (inserting) {
343
+ return value >= edit.at ? value + edit.count : value;
344
+ }
345
+ if (value < edit.at)
346
+ return value;
347
+ if (value < edit.at + edit.count)
348
+ return null;
349
+ return value - edit.count;
350
+ }
351
+ function fixRef(ref, edit) {
352
+ const rows = edit.kind === 'insertRows' || edit.kind === 'deleteRows';
353
+ const inserting = edit.kind === 'insertRows' || edit.kind === 'insertCols';
354
+ if (rows) {
355
+ if (ref.row === null)
356
+ return ref;
357
+ const next = shiftCoord(ref.row, edit, inserting);
358
+ return next === null ? null : { ...ref, row: next };
359
+ }
360
+ const next = shiftCoord(ref.col, edit, inserting);
361
+ return next === null ? null : { ...ref, col: next };
362
+ }
363
+ const sameSheet = (a, b) => a !== null && a.toLowerCase() === b.toLowerCase();
364
+ export function fixupReferences(text, edit, scope) {
365
+ if (typeof text !== 'string' || !text.startsWith('='))
366
+ return text;
367
+ if (edit.count <= 0)
368
+ return text;
369
+ let ast;
370
+ try {
371
+ ast = parseFormula(text);
372
+ }
373
+ catch {
374
+ return text;
375
+ }
376
+ const broken = { col: -1, colAbs: false, row: -1, rowAbs: false, sheet: null };
377
+ const touched = (sheet) => !scope || sameSheet(sheet ?? scope.self, scope.sheet);
378
+ const moved = mapNode(ast, (n) => {
379
+ if (n.k === 'ref') {
380
+ if (!touched(n.ref.sheet))
381
+ return n;
382
+ const next = fixRef(n.ref, edit);
383
+ return next === null ? { k: 'ref', ref: broken } : { ...n, ref: next };
384
+ }
385
+ if (n.k === 'spill') {
386
+ // The anchor moving carries the spill with it; the anchor being
387
+ // deleted takes the whole array reference to #REF!.
388
+ if (!touched(n.ref.sheet))
389
+ return n;
390
+ const next = fixRef(n.ref, edit);
391
+ return next === null ? { k: 'ref', ref: broken } : { ...n, ref: next };
392
+ }
393
+ if (n.k === 'range') {
394
+ if (!touched(n.from.sheet ?? n.to.sheet))
395
+ return n;
396
+ const from = fixRef(n.from, edit);
397
+ const to = fixRef(n.to, edit);
398
+ // Both ends gone means the whole range was deleted.
399
+ if (from === null && to === null)
400
+ return { k: 'ref', ref: broken };
401
+ // One end gone: clamp it to the edit point so the range shrinks.
402
+ const rows = edit.kind === 'deleteRows';
403
+ const clamp = (ref) => rows ? { ...ref, row: Math.max(edit.at - 1, 0) } : { ...ref, col: Math.max(edit.at - 1, 0) };
404
+ return {
405
+ ...n,
406
+ from: from ?? clamp(n.from),
407
+ to: to ?? clamp(n.to),
408
+ };
409
+ }
410
+ return n;
411
+ });
412
+ return formatFormula(moved);
413
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The ribbon's icons, as path data on a 16 x 16 grid.
3
+ *
4
+ * Drawn here rather than pulled from an icon font or a package: the ribbon
5
+ * is the one place in the library that needs a coordinated set of command
6
+ * glyphs (a clipboard, scissors, a paint bucket, a funnel), and an icon set
7
+ * that is part of the source can be read, tested and tuned like anything
8
+ * else. `SvRibbonIcon.svelte` renders one by name; a large button draws the
9
+ * same paths at twice the size, which is why they are vectors.
10
+ *
11
+ * One style, one colour. These are line icons - a 1.4px stroke with round
12
+ * caps and joins, the way Excel's own monochrome set is drawn - and every
13
+ * one of them is `currentColor`, so they are black on a light ribbon and
14
+ * white on a dark one and never carry a colour of their own. The only fills
15
+ * are the small solid parts Excel also fills: a dot, a corner, the head of
16
+ * an arrow. Colour belongs to the colour bar under Fill Colour and Font
17
+ * Colour, which shows the colour the face will apply, not to the glyph.
18
+ */
19
+ export type IconPath = {
20
+ d: string;
21
+ /** Solid shape in the icon colour instead of a stroked outline. */
22
+ fill?: boolean;
23
+ /** Stroke width when not the default 1.4. */
24
+ width?: number;
25
+ /** Dashed stroke, for the "no border" sides. */
26
+ dash?: string;
27
+ };
28
+ export type RibbonIconName = 'undo' | 'redo' | 'paste' | 'cut' | 'copy' | 'paste-special' | 'font-grow' | 'font-shrink' | 'borders' | 'border-none' | 'border-bottom' | 'border-top' | 'border-left' | 'border-right' | 'border-all' | 'border-outside' | 'border-thick-bottom' | 'fill-colour' | 'font-colour' | 'align-left' | 'align-center' | 'align-right' | 'wrap' | 'valign-top' | 'valign-center' | 'valign-bottom' | 'dec-more' | 'dec-less' | 'insert-cells' | 'delete-cells' | 'freeze' | 'unfreeze' | 'autosum' | 'fill-down' | 'fill-right' | 'clear' | 'find' | 'filter' | 'sort-asc' | 'sort-desc' | 'sort' | 'chart' | 'table' | 'function' | 'new-sheet' | 'file-new' | 'file-open' | 'file-save' | 'file-csv' | 'cf-formula' | 'trace-precedents' | 'trace-dependents' | 'remove-arrows' | 'name-manager' | 'show-formulas' | 'calculate' | 'goal-seek' | 'evaluate-formula' | 'error-checking' | 'text-to-columns' | 'remove-duplicates' | 'chevron-down' | 'format-cells' | 'format-painter' | 'protect' | 'unprotect' | 'lock' | 'edit-ranges' | 'print' | 'page-setup' | 'margins' | 'orientation' | 'paper' | 'print-area' | 'print-titles' | 'picture' | 'chart-setup' | 'sparkline-line' | 'sparkline-column' | 'sparkline-winloss' | 'pivot' | 'link' | 'unlink' | 'comment' | 'comment-delete' | 'comment-prev' | 'comment-next' | 'comments-all' | 'validation' | 'cf' | 'cf-greater' | 'cf-less' | 'cf-between' | 'cf-equal' | 'cf-text' | 'cf-duplicates' | 'cf-top' | 'cf-bottom' | 'cf-above' | 'cf-below' | 'cf-bar' | 'cf-scale' | 'cf-icons' | 'merge' | 'unmerge' | 'gridlines' | 'formula-bar' | 'headings' | 'font' | 'number' | 'clear-formats' | 'column-width' | 'row-height' | 'hide' | 'unhide' | 'group-rows' | 'group-cols' | 'ungroup-rows' | 'ungroup-cols' | 'show-detail' | 'hide-detail' | 'checkbox' | 'cell-button';
29
+ export declare const RIBBON_ICONS: Record<RibbonIconName, ReadonlyArray<IconPath>>;
30
+ /** The names, for tests and for anyone building their own toolbar. */
31
+ export declare const RIBBON_ICON_NAMES: RibbonIconName[];