@svgrid/enterprise 3.0.2 → 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 (364) 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 +94 -20
  10. package/dist/SvFormulaBar.svelte.d.ts +7 -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 +198 -40
  18. package/dist/SvPivotDesigner.svelte.d.ts +27 -20
  19. package/dist/SvSheet.svelte +4043 -243
  20. package/dist/SvSheet.svelte.d.ts +76 -3
  21. package/dist/SvSheetChartSetup.svelte +151 -0
  22. package/dist/SvSheetChartSetup.svelte.d.ts +18 -0
  23. package/dist/SvSheetComment.svelte +216 -31
  24. package/dist/SvSheetComment.svelte.d.ts +11 -11
  25. package/dist/SvSheetConditionalFormat.svelte +28 -31
  26. package/dist/SvSheetDataValidation.svelte +66 -42
  27. package/dist/SvSheetEditRanges.svelte +217 -0
  28. package/dist/SvSheetEditRanges.svelte.d.ts +15 -0
  29. package/dist/SvSheetErrors.svelte +125 -0
  30. package/dist/SvSheetErrors.svelte.d.ts +20 -0
  31. package/dist/SvSheetEvaluate.svelte +133 -0
  32. package/dist/SvSheetEvaluate.svelte.d.ts +15 -0
  33. package/dist/SvSheetFilterMenu.svelte +137 -34
  34. package/dist/SvSheetFilterMenu.svelte.d.ts +5 -0
  35. package/dist/SvSheetFindReplace.svelte +19 -19
  36. package/dist/SvSheetFormatCells.svelte +125 -81
  37. package/dist/SvSheetGoalSeek.svelte +17 -16
  38. package/dist/SvSheetInsertFunction.svelte +15 -13
  39. package/dist/SvSheetIteration.svelte +81 -0
  40. package/dist/SvSheetIteration.svelte.d.ts +10 -0
  41. package/dist/SvSheetLink.svelte +99 -0
  42. package/dist/SvSheetLink.svelte.d.ts +17 -0
  43. package/dist/SvSheetListPicker.svelte +4 -2
  44. package/dist/SvSheetListPicker.svelte.d.ts +0 -6
  45. package/dist/SvSheetManageRules.svelte +20 -18
  46. package/dist/SvSheetNameManager.svelte +17 -15
  47. package/dist/SvSheetPageSetup.svelte +159 -0
  48. package/dist/SvSheetPageSetup.svelte.d.ts +13 -0
  49. package/dist/SvSheetPasteSpecial.svelte +22 -20
  50. package/dist/SvSheetPivot.svelte +220 -0
  51. package/dist/SvSheetPivot.svelte.d.ts +21 -0
  52. package/dist/SvSheetProtectSheet.svelte +81 -0
  53. package/dist/SvSheetProtectSheet.svelte.d.ts +11 -0
  54. package/dist/SvSheetRemoveDuplicates.svelte +13 -10
  55. package/dist/SvSheetRibbon.svelte +104 -51
  56. package/dist/SvSheetSizeDialog.svelte +4 -2
  57. package/dist/SvSheetSort.svelte +218 -0
  58. package/dist/SvSheetSort.svelte.d.ts +28 -0
  59. package/dist/SvSheetSparklines.svelte +135 -0
  60. package/dist/SvSheetSparklines.svelte.d.ts +14 -0
  61. package/dist/SvSheetTable.svelte +160 -0
  62. package/dist/SvSheetTable.svelte.d.ts +24 -0
  63. package/dist/SvSheetTabs.svelte +161 -31
  64. package/dist/SvSheetTabs.svelte.d.ts +22 -8
  65. package/dist/SvSheetTextToColumns.svelte +20 -20
  66. package/dist/SvSheetValidationAlert.svelte +8 -6
  67. package/dist/advanced-filter-enable.js +1 -1
  68. package/dist/alerts/alert-engine.d.ts +6 -0
  69. package/dist/alerts/alert-engine.js +21 -4
  70. package/dist/alerts/alert-formats.js +2 -0
  71. package/dist/alerts/alert-types.d.ts +1 -1
  72. package/dist/alerts.d.ts +1 -1
  73. package/dist/alerts.js +2 -2
  74. package/dist/board.js +2 -2
  75. package/dist/bulk-edit.d.ts +3 -1
  76. package/dist/bulk-edit.js +1 -1
  77. package/dist/cdn/svgrid-enterprise.svelte-external.js +39827 -16429
  78. package/dist/designer/assets/GridMenus-8gTNssgV.js +8 -0
  79. package/dist/designer/assets/{SvChartMenu-D9hEeHar.js → SvChartMenu-BDoeqGz6.js} +1 -1
  80. package/dist/designer/assets/{SvDateTimePicker-DARvKUL2.js → SvDateTimePicker-DCPg7WGN.js} +1 -1
  81. package/dist/designer/assets/SvGridCellEditor-DMoWJjEI.js +4 -0
  82. package/dist/designer/assets/{SvGridChart-B8j1SSy3.js → SvGridChart-Cy1ATrWh.js} +2 -2
  83. package/dist/designer/assets/SvGridChartBuilder-eQ3mn0L9.js +1 -0
  84. package/dist/designer/assets/{SvGridChartPanel-pT6ITc2P.js → SvGridChartPanel-CATdVc9X.js} +3 -3
  85. package/dist/designer/assets/{SvGridChartView-bg281UA1.js → SvGridChartView-CmsZtCED.js} +1 -1
  86. package/dist/designer/assets/SvGridDropdown-Cjz0H-fI.js +1 -0
  87. package/dist/designer/assets/{SvTabs-UFCMTHXS.js → SvTabs-2mHC6oaz.js} +1 -1
  88. package/dist/designer/assets/cell-formatting-BbubJTVz.js +1 -0
  89. package/dist/designer/assets/{chart-cIPUsbM5.js → chart-Cn7MnNqA.js} +1 -1
  90. package/dist/designer/assets/{chart-panel-messages-DtTxpBUU.js → chart-panel-messages-Dz7PTIqT.js} +1 -1
  91. package/dist/designer/assets/{chart-summary-Czu_5epb.js → chart-summary-BD1qYB2R.js} +1 -1
  92. package/dist/designer/assets/{chart-trend-D5I5VEe8.js → chart-trend-B8xr5LuD.js} +1 -1
  93. package/dist/designer/assets/{dismissable-BO547MH9.js → dismissable-ChWRPkoa.js} +1 -1
  94. package/dist/designer/assets/{export-format-D-eP4b2l.js → export-format-DGckmgKr.js} +1 -1
  95. package/dist/designer/assets/{focus-trap-CAreAhlU.js → focus-trap-V2-6Fy9I.js} +1 -1
  96. package/dist/designer/assets/{index-DwU7CAMm.js → index-D5bVbuzI.js} +317 -315
  97. package/dist/designer/assets/index-_JVFxt02.css +1 -0
  98. package/dist/designer/assets/row-resize-BInFWCpr.js +1 -0
  99. package/dist/designer/assets/server-block-cache-CXJKkJpy.js +1 -0
  100. package/dist/designer/assets/src-DUQ4xE3x.js +58 -0
  101. package/dist/designer/assets/validate-C3B8QKsM.js +1 -0
  102. package/dist/designer/index.html +17 -16
  103. package/dist/export-pdf.d.ts +75 -0
  104. package/dist/export-pdf.js +216 -15
  105. package/dist/export.js +10 -2
  106. package/dist/gantt/SvGridGantt.svelte +2890 -0
  107. package/dist/gantt/SvGridGantt.svelte.d.ts +30 -0
  108. package/dist/gantt/gantt-config.d.ts +73 -0
  109. package/dist/gantt/gantt-config.js +1 -0
  110. package/dist/gantt/gantt-critical-path.d.ts +67 -0
  111. package/dist/gantt/gantt-critical-path.js +207 -0
  112. package/dist/gantt/gantt-model.d.ts +257 -0
  113. package/dist/gantt/gantt-model.js +651 -0
  114. package/dist/gantt/gantt-resources.d.ts +59 -0
  115. package/dist/gantt/gantt-resources.js +71 -0
  116. package/dist/gantt/gantt.d.ts +7 -0
  117. package/dist/gantt/gantt.js +36 -0
  118. package/dist/gantt/index.d.ts +15 -0
  119. package/dist/gantt/index.js +22 -0
  120. package/dist/gantt/timeline-arrows.d.ts +102 -0
  121. package/dist/gantt/timeline-arrows.js +181 -0
  122. package/dist/import.d.ts +2 -2
  123. package/dist/import.js +1 -1
  124. package/dist/index.d.ts +34 -7
  125. package/dist/index.js +44 -7
  126. package/dist/install.js +8 -1
  127. package/dist/license-core.d.ts +17 -1
  128. package/dist/license-core.js +16 -5
  129. package/dist/license.d.ts +18 -2
  130. package/dist/license.js +71 -6
  131. package/dist/node/studio.js +140 -8
  132. package/dist/pivot-enable.js +2 -2
  133. package/dist/scheduler-dependencies.d.ts +35 -0
  134. package/dist/scheduler-dependencies.js +36 -1
  135. package/dist/scheduler.js +2 -2
  136. package/dist/selection-bar.js +2 -2
  137. package/dist/server/SvGroupCell.svelte +213 -0
  138. package/dist/server/SvGroupCell.svelte.d.ts +62 -0
  139. package/dist/server/SvRowGroupPanel.svelte +322 -0
  140. package/dist/server/SvRowGroupPanel.svelte.d.ts +37 -0
  141. package/dist/server/enable.d.ts +17 -0
  142. package/dist/server/enable.js +49 -0
  143. package/dist/server/index.d.ts +22 -0
  144. package/dist/server/index.js +24 -0
  145. package/dist/server/messages.d.ts +45 -0
  146. package/dist/server/messages.js +35 -0
  147. package/dist/server/server-group-model.d.ts +104 -0
  148. package/dist/server/server-group-model.js +272 -0
  149. package/dist/server/server-pivot.d.ts +46 -0
  150. package/dist/server/server-pivot.js +57 -0
  151. package/dist/server/server-row-model.d.ts +547 -0
  152. package/dist/server/server-row-model.js +1551 -0
  153. package/dist/server/server-selection.d.ts +99 -0
  154. package/dist/server/server-selection.js +215 -0
  155. package/dist/server/svgrid-adapter.d.ts +155 -0
  156. package/dist/server/svgrid-adapter.js +202 -0
  157. package/dist/sheet/ast.d.ts +45 -1
  158. package/dist/sheet/ast.js +14 -0
  159. package/dist/sheet/auto-filter.d.ts +58 -4
  160. package/dist/sheet/auto-filter.js +159 -11
  161. package/dist/sheet/autocomplete.d.ts +9 -0
  162. package/dist/sheet/autocomplete.js +90 -4
  163. package/dist/sheet/cell-images.d.ts +39 -0
  164. package/dist/sheet/cell-images.js +90 -0
  165. package/dist/sheet/cell-types.d.ts +58 -0
  166. package/dist/sheet/cell-types.js +96 -0
  167. package/dist/sheet/coerce.d.ts +40 -0
  168. package/dist/sheet/coerce.js +170 -3
  169. package/dist/sheet/comments.d.ts +43 -9
  170. package/dist/sheet/comments.js +85 -27
  171. package/dist/sheet/conditional-formats.d.ts +29 -6
  172. package/dist/sheet/conditional-formats.js +37 -12
  173. package/dist/sheet/csv.d.ts +32 -0
  174. package/dist/sheet/csv.js +158 -0
  175. package/dist/sheet/culture.d.ts +87 -0
  176. package/dist/sheet/culture.js +247 -0
  177. package/dist/sheet/delta.d.ts +102 -0
  178. package/dist/sheet/delta.js +203 -0
  179. package/dist/sheet/deps.d.ts +45 -1
  180. package/dist/sheet/deps.js +77 -2
  181. package/dist/sheet/document.d.ts +106 -4
  182. package/dist/sheet/document.js +204 -3
  183. package/dist/sheet/engine.d.ts +67 -0
  184. package/dist/sheet/engine.js +19 -0
  185. package/dist/sheet/entry.d.ts +8 -4
  186. package/dist/sheet/entry.js +171 -21
  187. package/dist/sheet/error-check.d.ts +49 -0
  188. package/dist/sheet/error-check.js +83 -0
  189. package/dist/sheet/evaluate-steps.d.ts +48 -0
  190. package/dist/sheet/evaluate-steps.js +196 -0
  191. package/dist/sheet/evaluate.d.ts +67 -0
  192. package/dist/sheet/evaluate.js +725 -13
  193. package/dist/sheet/filter-files.d.ts +37 -0
  194. package/dist/sheet/filter-files.js +465 -0
  195. package/dist/sheet/format-store.d.ts +15 -0
  196. package/dist/sheet/format-store.js +11 -1
  197. package/dist/sheet/from-rows.d.ts +14 -0
  198. package/dist/sheet/from-rows.js +50 -0
  199. package/dist/sheet/function-catalog.d.ts +1 -1
  200. package/dist/sheet/function-catalog.js +296 -5
  201. package/dist/sheet/functions.js +363 -91
  202. package/dist/sheet/index.d.ts +35 -8
  203. package/dist/sheet/index.js +35 -8
  204. package/dist/sheet/links.d.ts +57 -0
  205. package/dist/sheet/links.js +174 -0
  206. package/dist/sheet/messages.d.ts +778 -0
  207. package/dist/sheet/messages.js +806 -0
  208. package/dist/sheet/number-format.d.ts +52 -5
  209. package/dist/sheet/number-format.js +465 -68
  210. package/dist/sheet/objects.d.ts +106 -0
  211. package/dist/sheet/objects.js +149 -0
  212. package/dist/sheet/ods-document.d.ts +44 -0
  213. package/dist/sheet/ods-document.js +1275 -0
  214. package/dist/sheet/open-file.d.ts +26 -0
  215. package/dist/sheet/open-file.js +56 -0
  216. package/dist/sheet/outline.d.ts +82 -0
  217. package/dist/sheet/outline.js +228 -0
  218. package/dist/sheet/packs/array.d.ts +16 -0
  219. package/dist/sheet/packs/array.js +172 -0
  220. package/dist/sheet/packs/database.d.ts +42 -0
  221. package/dist/sheet/packs/database.js +142 -0
  222. package/dist/sheet/packs/engineering.d.ts +2 -0
  223. package/dist/sheet/packs/engineering.js +296 -0
  224. package/dist/sheet/packs/financial.d.ts +5 -0
  225. package/dist/sheet/packs/financial.js +220 -0
  226. package/dist/sheet/packs/math-stats.d.ts +2 -0
  227. package/dist/sheet/packs/math-stats.js +372 -0
  228. package/dist/sheet/packs/special.d.ts +44 -0
  229. package/dist/sheet/packs/special.js +187 -0
  230. package/dist/sheet/packs/stats-dist.d.ts +2 -0
  231. package/dist/sheet/packs/stats-dist.js +785 -0
  232. package/dist/sheet/packs/text-date.d.ts +2 -0
  233. package/dist/sheet/packs/text-date.js +332 -0
  234. package/dist/sheet/packs/trig.d.ts +2 -0
  235. package/dist/sheet/packs/trig.js +73 -0
  236. package/dist/sheet/page-setup.d.ts +73 -0
  237. package/dist/sheet/page-setup.js +73 -0
  238. package/dist/sheet/parse.js +42 -10
  239. package/dist/sheet/paste-special.d.ts +22 -0
  240. package/dist/sheet/paste-special.js +14 -5
  241. package/dist/sheet/pivot-range.d.ts +160 -0
  242. package/dist/sheet/pivot-range.js +333 -0
  243. package/dist/sheet/presence.d.ts +73 -0
  244. package/dist/sheet/presence.js +79 -0
  245. package/dist/sheet/print.d.ts +104 -0
  246. package/dist/sheet/print.js +169 -0
  247. package/dist/sheet/protection.d.ts +55 -1
  248. package/dist/sheet/protection.js +55 -2
  249. package/dist/sheet/rects.d.ts +1 -1
  250. package/dist/sheet/refs.d.ts +48 -0
  251. package/dist/sheet/refs.js +155 -8
  252. package/dist/sheet/ribbon-icons.d.ts +1 -1
  253. package/dist/sheet/ribbon-icons.js +186 -0
  254. package/dist/sheet/ribbon.d.ts +1 -1
  255. package/dist/sheet/ribbon.js +324 -23
  256. package/dist/sheet/sheet-kinds.d.ts +74 -0
  257. package/dist/sheet/sheet-kinds.js +91 -0
  258. package/dist/sheet/shortcuts.d.ts +13 -3
  259. package/dist/sheet/shortcuts.js +63 -12
  260. package/dist/sheet/sort.d.ts +51 -0
  261. package/dist/sheet/sort.js +107 -0
  262. package/dist/sheet/sparklines.d.ts +111 -0
  263. package/dist/sheet/sparklines.js +204 -0
  264. package/dist/sheet/table-styles.d.ts +74 -0
  265. package/dist/sheet/table-styles.js +152 -0
  266. package/dist/sheet/tables.d.ts +19 -0
  267. package/dist/sheet/tables.js +31 -0
  268. package/dist/sheet/tokenize.d.ts +18 -1
  269. package/dist/sheet/tokenize.js +60 -9
  270. package/dist/sheet/validation.d.ts +16 -0
  271. package/dist/sheet/validation.js +37 -0
  272. package/dist/sheet/workbook.d.ts +148 -3
  273. package/dist/sheet/workbook.js +742 -31
  274. package/dist/sheet/xls-cfb.d.ts +32 -0
  275. package/dist/sheet/xls-cfb.js +290 -0
  276. package/dist/sheet/xls-document.d.ts +10 -0
  277. package/dist/sheet/xls-document.js +1243 -0
  278. package/dist/sheet/xls-formula.d.ts +40 -0
  279. package/dist/sheet/xls-formula.js +569 -0
  280. package/dist/sheet/xlsx-document.d.ts +108 -0
  281. package/dist/sheet/xlsx-document.js +1849 -0
  282. package/dist/sheet/xlsx-drawing.d.ts +99 -0
  283. package/dist/sheet/xlsx-drawing.js +420 -0
  284. package/dist/sheet-enable.js +6 -7
  285. package/dist/sheet-text.d.ts +7 -0
  286. package/dist/sheet-text.js +29 -0
  287. package/dist/sources/auth-supabase.js +2 -2
  288. package/dist/sources/realtime-supabase.js +2 -2
  289. package/dist/sources/rest.d.ts +6 -2
  290. package/dist/sources/rest.js +42 -7
  291. package/dist/sources/supabase.d.ts +10 -1
  292. package/dist/sources/supabase.js +73 -40
  293. package/dist/studio/emit-project.js +14 -1
  294. package/dist/studio/index.js +1 -1
  295. package/dist/studio/project.d.ts +11 -2
  296. package/dist/studio/project.js +5 -2
  297. package/dist/studio/ui-components.generated.js +107 -2
  298. package/dist/sveltekit/in-memory.d.ts +2 -2
  299. package/dist/sveltekit/in-memory.js +125 -4
  300. package/dist/sveltekit/index.d.ts +1 -1
  301. package/dist/sveltekit/index.js +1 -1
  302. package/dist/sveltekit/query-plan.d.ts +50 -4
  303. package/dist/sveltekit/query-plan.js +25 -3
  304. package/dist/sveltekit/sql-source.d.ts +6 -0
  305. package/dist/sveltekit/sql-source.js +34 -6
  306. package/dist/sveltekit/sql.d.ts +31 -0
  307. package/dist/sveltekit/sql.js +135 -25
  308. package/dist/sveltekit/transport.d.ts +10 -2
  309. package/dist/sveltekit/transport.js +30 -6
  310. package/dist/upgrade-prompt.d.ts +1 -1
  311. package/dist/version.d.ts +1 -1
  312. package/dist/version.js +1 -1
  313. package/dist/watermark.js +35 -2
  314. package/dist/wc/GridMenus-By9vPuq0.js +1088 -0
  315. package/dist/wc/SvChartMenu-CQNrQGT2.js +308 -0
  316. package/dist/wc/SvDateRangeInput-DR6m7bSM.js +199 -0
  317. package/dist/wc/SvDateTimePicker-D-vRnaMo.js +771 -0
  318. package/dist/wc/SvField-B_kurx_P.js +149 -0
  319. package/dist/wc/SvGrid.helpers-BdVDtjUm.js +135 -0
  320. package/dist/wc/SvGridCellEditor-Bnf1Kr5C.js +560 -0
  321. package/dist/wc/SvGridChart-BqUJh2pG.js +3572 -0
  322. package/dist/wc/SvGridChartBuilder-CGycC5cn.js +988 -0
  323. package/dist/wc/SvGridChartPanel-CRnizsHD.js +1746 -0
  324. package/dist/wc/SvGridChartView-D1pa_xMy.js +47 -0
  325. package/dist/wc/SvGridDropdown-45WsObLL.js +259 -0
  326. package/dist/wc/SvModal-DrfOYYyX.js +189 -0
  327. package/dist/wc/cell-formatting-CBfgahv1.js +86 -0
  328. package/dist/wc/chart-6OXlybVT.js +4341 -0
  329. package/dist/wc/chart-export-CeSADGfi.js +135 -0
  330. package/dist/wc/chart-export-pdf-BGko7MER.js +104 -0
  331. package/dist/wc/chart-summary-2m3ia1-n.js +137 -0
  332. package/dist/wc/chart-trend-CQOQtTMl.js +50 -0
  333. package/dist/wc/chart-validate-CD6ptiwg.js +180 -0
  334. package/dist/wc/client-DQIzjDBG.js +3064 -0
  335. package/dist/wc/column-resize-DUPgynvc.js +101 -0
  336. package/dist/wc/date-format-DS-z_h9v.js +1130 -0
  337. package/dist/wc/dismissable-CQ6XFXsk.js +45 -0
  338. package/dist/wc/editor-contract-peBDxir_.js +22 -0
  339. package/dist/wc/editor-registry-DxGKqcvx.js +24 -0
  340. package/dist/wc/focus-trap-Dbb2tJxb.js +65 -0
  341. package/dist/wc/list-option-DrRyivWp.js +82 -0
  342. package/dist/wc/popover-WsGlvtQv.js +69 -0
  343. package/dist/wc/positioning-BiKLfu1E.js +112 -0
  344. package/dist/wc/react.d.ts +41 -0
  345. package/dist/wc/react.js +90 -0
  346. package/dist/wc/rolldown-runtime-Dy4uBu1J.js +11 -0
  347. package/dist/wc/row-drag-touch-CycRR65n.js +93 -0
  348. package/dist/wc/row-resize-limG_N1z.js +111 -0
  349. package/dist/wc/sv-sheet-element.d.ts +97 -0
  350. package/dist/wc/sv-sheet-element.js +44213 -0
  351. package/dist/wc/svelte-virtualizer.svelte-CXtQy2TQ.js +530 -0
  352. package/dist/wc/validate-BqDthkNr.js +88 -0
  353. package/dist/wc/vue.d.ts +31 -0
  354. package/dist/wc/vue.js +75 -0
  355. package/package.json +30 -5
  356. package/dist/designer/assets/GridMenus-BlsvL_aU.js +0 -8
  357. package/dist/designer/assets/SvGridCellEditor-C7uQXYds.js +0 -4
  358. package/dist/designer/assets/SvGridChartBuilder-kvyIU_Rl.js +0 -1
  359. package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +0 -1
  360. package/dist/designer/assets/cell-formatting-wr5wm7US.js +0 -1
  361. package/dist/designer/assets/index-CMFgAoVV.css +0 -1
  362. package/dist/designer/assets/row-resize-DLktcqUK.js +0 -1
  363. package/dist/designer/assets/src-EdI3Xqds.js +0 -58
  364. package/dist/designer/assets/validate-h-aslRV9.js +0 -1
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The container an .xls file is: a Compound File, which is a FAT filesystem
3
+ * in a file.
4
+ *
5
+ * Excel 97-2003 does not hold XML in a zip; it holds named streams in a
6
+ * little filesystem, and the one that matters is `Workbook` (`Book` in the
7
+ * oldest files). The layout is a header, a table of sector chains, a
8
+ * directory of entries, and - for anything under 4096 bytes - a second,
9
+ * finer allocation inside a stream of its own.
10
+ *
11
+ * Only what reading and writing a workbook needs is here: whole streams by
12
+ * name, and a writer that lays a few of them out again.
13
+ */
14
+ /** Whether these bytes are a compound file at all, which is how an .xls is
15
+ * told from a zip without looking at the name. */
16
+ export declare function isCompoundFile(bytes: Uint8Array): boolean;
17
+ /** The streams a compound file holds, by name. */
18
+ export declare function readCompoundFile(bytes: Uint8Array): Map<string, Uint8Array>;
19
+ /**
20
+ * A compound file holding the streams given, in the order given.
21
+ *
22
+ * Two allocations, as the format asks: anything from 4096 bytes up gets
23
+ * sectors of its own, and everything smaller is packed into the mini
24
+ * stream, which is itself a chain of ordinary sectors owned by the root
25
+ * entry. A reader decides which of the two a stream lives in by its size
26
+ * alone, so a small stream laid out the big way is one no other program
27
+ * can find.
28
+ */
29
+ export declare function writeCompoundFile(streams: Array<{
30
+ name: string;
31
+ data: Uint8Array;
32
+ }>): Uint8Array;
@@ -0,0 +1,290 @@
1
+ /**
2
+ * The container an .xls file is: a Compound File, which is a FAT filesystem
3
+ * in a file.
4
+ *
5
+ * Excel 97-2003 does not hold XML in a zip; it holds named streams in a
6
+ * little filesystem, and the one that matters is `Workbook` (`Book` in the
7
+ * oldest files). The layout is a header, a table of sector chains, a
8
+ * directory of entries, and - for anything under 4096 bytes - a second,
9
+ * finer allocation inside a stream of its own.
10
+ *
11
+ * Only what reading and writing a workbook needs is here: whole streams by
12
+ * name, and a writer that lays a few of them out again.
13
+ */
14
+ const SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
15
+ const END_OF_CHAIN = 0xfffffffe;
16
+ const FREE_SECTOR = 0xffffffff;
17
+ const DIFAT_SECTOR = 0xfffffffc;
18
+ const FAT_SECTOR = 0xfffffffd;
19
+ /** Streams smaller than this live in the mini stream. */
20
+ const MINI_CUTOFF = 4096;
21
+ const DIR_ENTRY_SIZE = 128;
22
+ /** Whether these bytes are a compound file at all, which is how an .xls is
23
+ * told from a zip without looking at the name. */
24
+ export function isCompoundFile(bytes) {
25
+ return SIGNATURE.every((b, i) => bytes[i] === b);
26
+ }
27
+ /** The streams a compound file holds, by name. */
28
+ export function readCompoundFile(bytes) {
29
+ if (!isCompoundFile(bytes))
30
+ throw new Error('@svgrid/enterprise: not an .xls file: the compound file signature is missing');
31
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
32
+ const sectorSize = 1 << view.getUint16(0x1e, true);
33
+ const miniSectorSize = 1 << view.getUint16(0x20, true);
34
+ const fatCount = view.getUint32(0x2c, true);
35
+ const dirStart = view.getUint32(0x30, true);
36
+ const miniFatStart = view.getUint32(0x3c, true);
37
+ const difatStart = view.getUint32(0x44, true);
38
+ const difatCount = view.getUint32(0x48, true);
39
+ const sectorAt = (id) => {
40
+ const offset = (id + 1) * sectorSize;
41
+ if (offset + sectorSize > bytes.length)
42
+ throw new Error('@svgrid/enterprise: the .xls file is truncated');
43
+ return bytes.subarray(offset, offset + sectorSize);
44
+ };
45
+ // The FAT's own sectors are listed in the header, and for a big file in a
46
+ // chain of DIFAT sectors after it.
47
+ const fatSectors = [];
48
+ for (let i = 0; i < 109 && fatSectors.length < fatCount; i += 1) {
49
+ const id = view.getUint32(0x4c + i * 4, true);
50
+ if (id === FREE_SECTOR)
51
+ break;
52
+ fatSectors.push(id);
53
+ }
54
+ let next = difatStart;
55
+ for (let n = 0; n < difatCount && next !== END_OF_CHAIN && next !== FREE_SECTOR; n += 1) {
56
+ const sector = sectorAt(next);
57
+ const inner = new DataView(sector.buffer, sector.byteOffset, sector.byteLength);
58
+ for (let i = 0; i < (sectorSize / 4) - 1; i += 1) {
59
+ const id = inner.getUint32(i * 4, true);
60
+ if (id === FREE_SECTOR)
61
+ continue;
62
+ fatSectors.push(id);
63
+ }
64
+ next = inner.getUint32(sectorSize - 4, true);
65
+ }
66
+ const fat = [];
67
+ for (const id of fatSectors) {
68
+ const sector = sectorAt(id);
69
+ const inner = new DataView(sector.buffer, sector.byteOffset, sector.byteLength);
70
+ for (let i = 0; i < sectorSize / 4; i += 1)
71
+ fat.push(inner.getUint32(i * 4, true));
72
+ }
73
+ /** Every sector of a chain, in order. */
74
+ const chainOf = (start, table) => {
75
+ const out = [];
76
+ let id = start;
77
+ // The cap is the table's own size: a corrupt file cannot loop forever.
78
+ while (id !== END_OF_CHAIN && id !== FREE_SECTOR && id !== FAT_SECTOR && id !== DIFAT_SECTOR && out.length <= table.length) {
79
+ out.push(id);
80
+ id = table[id] ?? END_OF_CHAIN;
81
+ }
82
+ return out;
83
+ };
84
+ const readChain = (start, size) => {
85
+ const out = new Uint8Array(size);
86
+ let written = 0;
87
+ for (const id of chainOf(start, fat)) {
88
+ const sector = sectorAt(id);
89
+ const take = Math.min(sectorSize, size - written);
90
+ if (take <= 0)
91
+ break;
92
+ out.set(sector.subarray(0, take), written);
93
+ written += take;
94
+ }
95
+ return out;
96
+ };
97
+ // The directory: one 128-byte entry per stream, the first being the root,
98
+ // whose own stream holds every small stream end to end.
99
+ const dirBytes = readChain(dirStart, chainOf(dirStart, fat).length * sectorSize);
100
+ const entries = [];
101
+ for (let offset = 0; offset + DIR_ENTRY_SIZE <= dirBytes.length; offset += DIR_ENTRY_SIZE) {
102
+ const nameLength = new DataView(dirBytes.buffer, dirBytes.byteOffset + offset, DIR_ENTRY_SIZE).getUint16(0x40, true);
103
+ let name = '';
104
+ for (let i = 0; i + 1 < Math.max(nameLength - 2, 0); i += 2) {
105
+ name += String.fromCharCode(dirBytes[offset + i] | (dirBytes[offset + i + 1] << 8));
106
+ }
107
+ const entry = new DataView(dirBytes.buffer, dirBytes.byteOffset + offset, DIR_ENTRY_SIZE);
108
+ entries.push({
109
+ name,
110
+ type: dirBytes[offset + 0x42],
111
+ chain: { start: entry.getUint32(0x74, true), size: entry.getUint32(0x78, true) },
112
+ });
113
+ }
114
+ const root = entries[0];
115
+ const miniStream = root && root.chain.size > 0 ? readChain(root.chain.start, root.chain.size) : new Uint8Array(0);
116
+ const miniFat = [];
117
+ if (miniFatStart !== END_OF_CHAIN && miniFatStart !== FREE_SECTOR) {
118
+ for (const id of chainOf(miniFatStart, fat)) {
119
+ const sector = sectorAt(id);
120
+ const inner = new DataView(sector.buffer, sector.byteOffset, sector.byteLength);
121
+ for (let i = 0; i < sectorSize / 4; i += 1)
122
+ miniFat.push(inner.getUint32(i * 4, true));
123
+ }
124
+ }
125
+ const readMini = (start, size) => {
126
+ const out = new Uint8Array(size);
127
+ let written = 0;
128
+ for (const id of chainOf(start, miniFat)) {
129
+ const from = id * miniSectorSize;
130
+ const take = Math.min(miniSectorSize, size - written);
131
+ if (take <= 0)
132
+ break;
133
+ out.set(miniStream.subarray(from, from + take), written);
134
+ written += take;
135
+ }
136
+ return out;
137
+ };
138
+ const streams = new Map();
139
+ for (const entry of entries) {
140
+ // Type 2 is a stream; 1 is a storage (a folder) and 5 the root.
141
+ if (entry.type !== 2 || entry.chain.size === 0)
142
+ continue;
143
+ streams.set(entry.name, entry.chain.size < MINI_CUTOFF
144
+ ? readMini(entry.chain.start, entry.chain.size)
145
+ : readChain(entry.chain.start, entry.chain.size));
146
+ }
147
+ return streams;
148
+ }
149
+ /**
150
+ * A compound file holding the streams given, in the order given.
151
+ *
152
+ * Two allocations, as the format asks: anything from 4096 bytes up gets
153
+ * sectors of its own, and everything smaller is packed into the mini
154
+ * stream, which is itself a chain of ordinary sectors owned by the root
155
+ * entry. A reader decides which of the two a stream lives in by its size
156
+ * alone, so a small stream laid out the big way is one no other program
157
+ * can find.
158
+ */
159
+ export function writeCompoundFile(streams) {
160
+ const SECTOR = 512;
161
+ const MINI = 64;
162
+ const sectorsFor = (size) => Math.ceil(size / SECTOR);
163
+ const dirEntries = streams.length + 1;
164
+ const dirSectors = Math.max(1, Math.ceil((dirEntries * DIR_ENTRY_SIZE) / SECTOR));
165
+ const small = streams.filter((s) => s.data.length > 0 && s.data.length < MINI_CUTOFF);
166
+ const miniSectors = small.reduce((sum, s) => sum + Math.ceil(s.data.length / MINI), 0);
167
+ const miniStreamSize = miniSectors * MINI;
168
+ const miniFatSectors = miniSectors ? Math.ceil((miniSectors * 4) / SECTOR) : 0;
169
+ // Lay the sectors out: the big streams, the mini stream, the mini FAT,
170
+ // the directory, and the FAT that describes all of it.
171
+ const placed = new Map();
172
+ const miniAt = new Map();
173
+ let cursor = 0;
174
+ for (const stream of streams) {
175
+ if (stream.data.length === 0 || stream.data.length < MINI_CUTOFF)
176
+ continue;
177
+ const count = sectorsFor(stream.data.length);
178
+ placed.set(stream.name, { start: cursor, count });
179
+ cursor += count;
180
+ }
181
+ let miniCursor = 0;
182
+ for (const stream of small) {
183
+ const count = Math.ceil(stream.data.length / MINI);
184
+ miniAt.set(stream.name, { start: miniCursor, count });
185
+ miniCursor += count;
186
+ }
187
+ const miniStart = cursor;
188
+ cursor += sectorsFor(miniStreamSize);
189
+ const miniFatStart = cursor;
190
+ cursor += miniFatSectors;
191
+ const dirStart = cursor;
192
+ cursor += dirSectors;
193
+ const beforeFat = cursor;
194
+ // The FAT must describe itself, so its size settles in a step or two.
195
+ let fatSectors = 1;
196
+ for (;;) {
197
+ const needed = Math.max(1, Math.ceil((beforeFat + fatSectors) / (SECTOR / 4)));
198
+ if (needed === fatSectors)
199
+ break;
200
+ fatSectors = needed;
201
+ }
202
+ const fatStart = beforeFat;
203
+ const totalSectors = fatStart + fatSectors;
204
+ const out = new Uint8Array((totalSectors + 1) * SECTOR).fill(0);
205
+ const view = new DataView(out.buffer);
206
+ const sectorOffset = (id) => (id + 1) * SECTOR;
207
+ // Header.
208
+ out.set(SIGNATURE, 0);
209
+ view.setUint16(0x18, 0x003e, true); // minor version
210
+ view.setUint16(0x1a, 0x0003, true); // major version 3: 512-byte sectors
211
+ view.setUint16(0x1c, 0xfffe, true); // little endian
212
+ view.setUint16(0x1e, 9, true); // sector shift
213
+ view.setUint16(0x20, 6, true); // mini sector shift
214
+ view.setUint32(0x2c, fatSectors, true);
215
+ view.setUint32(0x30, dirStart, true);
216
+ view.setUint32(0x38, MINI_CUTOFF, true);
217
+ view.setUint32(0x3c, miniFatSectors ? miniFatStart : END_OF_CHAIN, true);
218
+ view.setUint32(0x40, miniFatSectors, true);
219
+ view.setUint32(0x44, END_OF_CHAIN, true); // no DIFAT beyond the header
220
+ view.setUint32(0x48, 0, true);
221
+ for (let i = 0; i < 109; i += 1)
222
+ view.setUint32(0x4c + i * 4, i < fatSectors ? fatStart + i : FREE_SECTOR, true);
223
+ // The streams themselves: the big ones in their sectors, the small ones
224
+ // end to end inside the mini stream.
225
+ for (const stream of streams) {
226
+ const where = placed.get(stream.name);
227
+ if (where)
228
+ out.set(stream.data, sectorOffset(where.start));
229
+ }
230
+ for (const stream of small) {
231
+ const where = miniAt.get(stream.name);
232
+ out.set(stream.data, sectorOffset(miniStart) + where.start * MINI);
233
+ }
234
+ // The directory: the root first, then one entry per stream, as a flat
235
+ // list - the root's child is the first stream and each names the next.
236
+ const writeEntry = (index, name, type, colour, left, right, child, start, size) => {
237
+ const base = sectorOffset(dirStart) + index * DIR_ENTRY_SIZE;
238
+ for (let i = 0; i < name.length; i += 1)
239
+ view.setUint16(base + i * 2, name.charCodeAt(i), true);
240
+ view.setUint16(base + 0x40, (name.length + 1) * 2, true);
241
+ out[base + 0x42] = type;
242
+ out[base + 0x43] = colour;
243
+ view.setUint32(base + 0x44, left, true);
244
+ view.setUint32(base + 0x48, right, true);
245
+ view.setUint32(base + 0x4c, child, true);
246
+ view.setUint32(base + 0x74, start, true);
247
+ view.setUint32(base + 0x78, size, true);
248
+ };
249
+ writeEntry(0, 'Root Entry', 5, 1, FREE_SECTOR, FREE_SECTOR, streams.length ? 1 : FREE_SECTOR, miniStreamSize ? miniStart : END_OF_CHAIN, miniStreamSize);
250
+ streams.forEach((stream, i) => {
251
+ const mini = miniAt.get(stream.name);
252
+ const big = placed.get(stream.name);
253
+ const start = mini ? mini.start : big ? big.start : END_OF_CHAIN;
254
+ writeEntry(i + 1, stream.name, 2, 1, FREE_SECTOR, i + 2 <= streams.length ? i + 2 : FREE_SECTOR, FREE_SECTOR, start, stream.data.length);
255
+ });
256
+ // Unused directory slots are marked empty.
257
+ for (let i = dirEntries; i < dirSectors * (SECTOR / DIR_ENTRY_SIZE); i += 1) {
258
+ const base = sectorOffset(dirStart) + i * DIR_ENTRY_SIZE;
259
+ out[base + 0x42] = 0;
260
+ view.setUint32(base + 0x44, FREE_SECTOR, true);
261
+ view.setUint32(base + 0x48, FREE_SECTOR, true);
262
+ view.setUint32(base + 0x4c, FREE_SECTOR, true);
263
+ }
264
+ // The mini FAT: one chain per small stream, in the same order.
265
+ const miniFat = new Array(miniFatSectors * (SECTOR / 4)).fill(FREE_SECTOR);
266
+ for (const stream of small) {
267
+ const where = miniAt.get(stream.name);
268
+ for (let i = 0; i < where.count; i += 1) {
269
+ miniFat[where.start + i] = i === where.count - 1 ? END_OF_CHAIN : where.start + i + 1;
270
+ }
271
+ }
272
+ for (let i = 0; i < miniFat.length; i += 1)
273
+ view.setUint32(sectorOffset(miniFatStart) + i * 4, miniFat[i], true);
274
+ // The FAT: each chain, then the FAT's own sectors.
275
+ const fat = new Array(fatSectors * (SECTOR / 4)).fill(FREE_SECTOR);
276
+ const chain = (start, count) => {
277
+ for (let i = 0; i < count; i += 1)
278
+ fat[start + i] = i === count - 1 ? END_OF_CHAIN : start + i + 1;
279
+ };
280
+ for (const where of placed.values())
281
+ chain(where.start, where.count);
282
+ chain(miniStart, sectorsFor(miniStreamSize));
283
+ chain(miniFatStart, miniFatSectors);
284
+ chain(dirStart, dirSectors);
285
+ for (let i = 0; i < fatSectors; i += 1)
286
+ fat[fatStart + i] = FAT_SECTOR;
287
+ for (let i = 0; i < fat.length; i += 1)
288
+ view.setUint32(sectorOffset(fatStart) + i * 4, fat[i], true);
289
+ return out;
290
+ }
@@ -0,0 +1,10 @@
1
+ import type { SheetState } from './document.js';
2
+ import type { SheetDocument } from './document.js';
3
+ /** The document an .xls holds, as a saved state. */
4
+ export declare function sheetStateFromXls(bytes: Uint8Array): SheetState;
5
+ /** Whether these bytes are an .xls at all, which is how the opener tells one. */
6
+ export declare const isXlsFile: (bytes: Uint8Array) => boolean;
7
+ /** The document an .xls file holds, as a saved state. */
8
+ export declare function documentFromXls(file: Blob | ArrayBuffer | Uint8Array): Promise<SheetState>;
9
+ /** The bytes of an .xls holding this document. */
10
+ export declare function documentToXls(doc: SheetDocument): Uint8Array;