@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
@@ -9,18 +9,39 @@
9
9
  */
10
10
  export { enableSheet } from '../sheet-enable.js';
11
11
  export { createTableRegistry, isValidTableName, resolveTableRange, columnIndexOf, rowCountOf, type TableRegion, type TableRegistry, type TableRange, type TableSpecifier, } from './tables.js';
12
+ export { TABLE_STYLES, DEFAULT_TABLE_STYLE, NO_TABLE_STYLE, findTableStyle, tableStyleColours, tableStyleLabel, type TableStyle, type TableStyleTone, type TableStyleColours, } from './table-styles.js';
12
13
  export { goalSeek, goalSeekCell, type GoalSeekOptions, type GoalSeekResult, type GoalSeekSheet, type CellAddress as GoalSeekCellAddress, } from './goal-seek.js';
14
+ export { evaluationSteps, printNode, printValue, type EvaluationStep, } from './evaluate-steps.js';
15
+ export { checkSheet, describeFinding, ERROR_MEANINGS, type ErrorFinding, type ErrorFindingKind, type SheetReader, } from './error-check.js';
16
+ export { imageCall, isDrawableImageSource, type ImageCall } from './cell-images.js';
17
+ export { livePresence, presenceOnSheet, presenceAnchor, presenceColour, presenceInitials, PRESENCE_COLOURS, type SheetPresence, } from './presence.js';
13
18
  export { default as SvSheetTabs } from '../SvSheetTabs.svelte';
14
- export { createWorkbook, isValidSheetName, type Workbook, type SheetData, type WorkbookOptions, } from './workbook.js';
19
+ export { createWorkbook, isValidSheetName, cleanIteration, DEFAULT_ITERATION, type Workbook, type SheetData, type WorkbookOptions, type IterationSettings, } from './workbook.js';
15
20
  export { setWorkbook, getWorkbook } from './shortcuts.js';
16
21
  export { createSheetDocument, type SheetDocument, type SheetDocumentInit, type SheetState, type SheetStateEntry, type PerSheetState, type SheetChangeReason, } from './document.js';
17
22
  export { shiftRect, shiftRects, subtractRect, rectContains, rectsIntersect, remapNotes, lineShift, type NotesMap } from './rects.js';
18
- export { isLocked, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE } from './protection.js';
19
- export { commentAt, withComment, listComments, nextComment } from './comments.js';
23
+ export { isLocked, cellLocked, inEditRange, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE, PROTECTION_PERMISSIONS, defaultProtection, copyProtection, newEditRangeId, parseRangeText, rangeText, type ProtectionAllow, type ProtectionPermission, type EditRange, type SheetProtection, } from './protection.js';
24
+ export { commentAt, withComment, withThread, threadAt, threadOf, threadText, notesOf, isThreaded, listComments, nextComment, type CommentEntry, type CommentThread, type CommentValue, type CommentsMap, } from './comments.js';
20
25
  export { ruleAt, rulesIn, checkEntry, listChoices, shiftValidation, removeValidation, describeRule, dateValue, validationId, DEFAULT_ALERT_MESSAGE, OPERATOR_LABELS, type ValidationRule, type ValidationAllow, type ValidationOperator, type ValidationContext, type ValidationVerdict, type ValidationSpec, } from './validation.js';
21
- export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, type CfRule, type CfRuleBody, type CfStyledRule, type CfBody, type CfPreset, type CfStyle, type CfStats, type CfResult, type CfContext, type CfOperator, type CfTextMatch, type CfIconSet, type CfScaleColors, type CfKind, } from './conditional-formats.js';
26
+ export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, DATA_BAR_NEGATIVE_COLOR, type CfRule, type CfRuleBody, type CfStyledRule, type CfBody, type CfPreset, type CfStyle, type CfStats, type CfResult, type CfContext, type CfOperator, type CfTextMatch, type CfIconSet, type CfScaleColors, type CfKind, } from './conditional-formats.js';
22
27
  export { mergePlan, unmergePlan, mergeDropsValues, mergesIn, mergeAt as sheetMergeAt, isCoveredCell, selectionMerged, toGridMerges, sortBlockedByMerges, reorderMerges, normalRect, type MergeKind, type MergePlan, } from './merges.js';
23
- export { distinctValues, hiddenRowsFor, passesFilter, isFiltering, withColumnFilter, valuesFilter, shiftAutoFilter, describeFilter, type AutoFilterState, type ColumnFilter, type FilterCondition, type FilterValue, } from './auto-filter.js';
28
+ export { distinctValues, hiddenRowsFor, passesFilter, isFiltering, withColumnFilter, valuesFilter, shiftAutoFilter, describeFilter, datePeriodBounds, distinctFills, isDateColumn, type AutoFilterState, type ColumnFilter, type FilterCondition, type FilterValue, type DatePeriod, type FilterContext, } from './auto-filter.js';
29
+ export { sortOrder, guessHeaderRow, type SortKey, type SortDirection } from './sort.js';
30
+ export { documentToXlsxParts, documentFromXlsxParts, documentToXlsx, documentFromXlsx } from './xlsx-document.js';
31
+ export { csvText, csvRows, guessCsvSeparator, sheetStateFromCsv } from './csv.js';
32
+ export { sheetStateFromOds, documentFromOds, documentToOds, documentToOdsParts, formulaFromOdf, formulaToOdf } from './ods-document.js';
33
+ export { sheetStateFromXls, documentFromXls, documentToXls, isXlsFile } from './xls-document.js';
34
+ export { documentFromFile, readSpreadsheetFile, type OpenedFile } from './open-file.js';
35
+ export { defaultPageSetup, copyPageSetup, marginPresetOf, shiftPageSetup, marginsCss, MARGIN_PRESETS, PAPER_SIZES, type PageSetup, type PageMargins, type PageOrientation, type PaperSize, type MarginPreset, } from './page-setup.js';
36
+ export { sheetPrintHtml, printAreas, type SheetPrintInput, type SheetPrintCell } from './print.js';
37
+ export { sheetCellsFromRows, cellTextOf, type SheetField, type SheetFromRowsOptions } from './from-rows.js';
38
+ export { builtinEngine, type SheetEngine, type SheetEngineHost, type SheetEngineCell, type SheetEngineResult } from './engine.js';
39
+ export { chartSpecOf, chartFromRange, shiftObject, shiftObjects, objectAt, copyObject, objectId, SHEET_CHART_TYPES, type SheetObject, type SheetChartObject, type SheetImageObject, type ObjectAnchor, type SheetChartType, } from './objects.js';
40
+ export { sparklineSeries, sparklineAt, sparklineScale, sparklinesFromRange, clearSparklines, shiftSparkline, shiftSparklines, copySparkline, sparklineId, isColumnLocation, SPARKLINE_TYPES, type SparklineGroup, type SheetSparklineType, } from './sparklines.js';
41
+ export { pivotFields, pivotFieldValues, pivotRecords, filteredRecords, pivotBlock, pivotLayout, pivotDrill, pivotFromRange, pivotWrittenRect, flattenPivotColumns, ALL_VALUES, shiftPivot, shiftPivots, copyPivot, pivotId, SHEET_PIVOT_AGGS, type SheetPivot, type SheetPivotValue, type SheetPivotAgg, type SheetPivotFilter, type PivotLayout, type PivotDrill, } from './pivot-range.js';
42
+ export { createDeltaStream, applySheetDelta, partsOfReasons, type SheetDelta, type SheetDeltaStream, type SheetDeltaOptions, type SheetCellWrite, } from './delta.js';
43
+ export { linkAt, setLink, removeLink, listLinks, shiftLinks, copyLinks, parseLinkTarget, isSafeLinkTarget, linkTitle, type SheetLink, type LinksMap, type LinkTarget, } from './links.js';
44
+ export { default as SvSheetSort } from '../SvSheetSort.svelte';
24
45
  export { splitText, textToColumns, guessDelimiter, findDuplicates, removeDuplicates, type SplitOptions, type DuplicateOptions, type DuplicateReport, } from './transforms.js';
25
46
  export { insertRows, deleteRows, insertColumns, deleteColumns, axisForSelection, setStructureTarget, getStructureTarget, rewriteFormulas, type StructureTarget, } from './structure.js';
26
47
  export { findAll, findNext, replaceOne, replaceAll, replaceInText, cellMatches, setFindTarget, getFindTarget, type FindOptions, type FindHit, type FindTarget, } from './find-replace.js';
@@ -35,19 +56,25 @@ export { RIBBON_ICONS, RIBBON_ICON_NAMES, type RibbonIconName, type IconPath } f
35
56
  export { THEME_COLOURS, STANDARD_COLOURS, ALL_COLOURS, tint, type PaletteColour } from './palette.js';
36
57
  export { default as SvRibbonIcon } from '../SvRibbonIcon.svelte';
37
58
  export { move, selectRegion, selectLine, applyFormat, toggleFormat, preset, autoSum, structural, switchSheet, gridOf, } from './shortcuts.js';
38
- export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, type CompiledFormat, type FormatPresetName, } from './number-format.js';
59
+ export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, FORMAT_CATEGORY_PATTERNS, SPECIAL_FORMATS, formatCategory, accountingPattern, accountingParts, type CompiledFormat, type FormatPresetName, type SpecialFormatName, } from './number-format.js';
39
60
  export { createFormatStore, entryToStyle, type SheetFormatStore, type CellFormatEntry, type CellAddressLookup, } from './format-store.js';
40
61
  export { createNames, isValidName, type SheetNames, type DefinedName, } from './names.js';
62
+ export { defaultSheetMessages, defaultSheetTextMessages, defaultDialogMessages, ribbonMessageDefaults, resolveSheetMessages, formatMessage, type SheetMessages, type SheetTextMessages, type SheetDialogMessages, type SheetLocalization, } from './messages.js';
41
63
  export { suggestFunctions, applySuggestion, signatureAt, partialAt, SIGNATURES, type FunctionSuggestion, } from './autocomplete.js';
42
64
  export { setFormatTarget, getFormatTarget, setFormatDialogHandler, type SheetFormatTarget, } from './shortcuts.js';
43
65
  export { parseFormula, parse, } from './parse.js';
44
66
  export { tokenize, type Token } from './tokenize.js';
45
- export { evaluate, formatValue, type EvalContext } from './evaluate.js';
67
+ export { evaluate, evaluateSpill, formatValue, type EvalContext } from './evaluate.js';
68
+ export { ARRAY_FUNCTIONS, type ArrayFunction, type Grid as SpillGrid } from './packs/array.js';
46
69
  export { FUNCTIONS, withCustomFunctions, type SheetFunction, type FnArgs, } from './functions.js';
47
- export { translateFormula, fixupReferences, renameSheetReferences, formatFormula, referenceSpans, REFERENCE_COLOURS, type StructuralEdit, type EditScope, type ReferenceSpan, } from './refs.js';
70
+ export { translateFormula, fixupReferences, renameSheetReferences, formatFormula, referenceSpans, repointReferences, REFERENCE_COLOURS, type StructuralEdit, type EditScope, type ReferenceSpan, type CellMove, } from './refs.js';
48
71
  export { createDependencyGraph, precedentsOf, cellKey, parseCellKey, type DependencyGraph, type CellKey, } from './deps.js';
49
72
  export { parseA1, formatA1, colToLetters, lettersToCol, type CellRef, } from './address.js';
50
73
  export { isError, type CellValue, type SheetError, type Node as FormulaNode, } from './ast.js';
51
74
  export { SHEET_BINDINGS, handleSheetKey, type SheetBinding, type SheetCommand, } from './shortcuts.js';
52
75
  export { edgeOfRegion, currentRegion, isWholeSheet, wholeSheet, isBlankValue, type Direction, type Grid, type Cell, type Rect, } from './navigate.js';
53
76
  export { fillDown, fillRight, fillSelection, stampDate, stampNow, copyFromAbove, copyValueFromAbove, guessSumRange, looksNumeric, numericAt, targetRect, setFillTranslator, setSheetValueProbe, getSheetValueProbe, type FillTranslator, type SheetValueProbe, } from './commands.js';
77
+ export { cultureFromLocale, formulaToCulture, formulaFromCulture, parseNumberInCulture, formatNumberInCulture, slashDateParts, isInvariant, INVARIANT_CULTURE, type SheetCulture, } from './culture.js';
78
+ export { emptyOutline, groupLines, ungroupLines, clearOutline, toggleCollapsed, showLevel, hiddenByOutline, detailRange, shiftOutline, autoOutline, outlineLevel, isOutlined, deepestLevel, MAX_OUTLINE_LEVEL, type OutlineState, type OutlineSide, } from './outline.js';
79
+ export { cellTypeAt, isChecked, toggledValue, radioIndex, applyCellType, removeCellTypes, shiftCellTypes, checkboxValues, newCellTypeId, copyCellType, CHECKED, UNCHECKED, type CellTypeRegion, type CellTypeKind, } from './cell-types.js';
80
+ export { projectGridSheet, rowOfRecord, recordOfRow, isRecordRow, columnOfField, copyGridSheet, coerceFieldValue, emptyGridSheet, type SheetKind, type GridSheetSpec, type GridSheetField, } from './sheet-kinds.js';
@@ -9,18 +9,39 @@
9
9
  */
10
10
  export { enableSheet } from '../sheet-enable.js';
11
11
  export { createTableRegistry, isValidTableName, resolveTableRange, columnIndexOf, rowCountOf, } from './tables.js';
12
+ export { TABLE_STYLES, DEFAULT_TABLE_STYLE, NO_TABLE_STYLE, findTableStyle, tableStyleColours, tableStyleLabel, } from './table-styles.js';
12
13
  export { goalSeek, goalSeekCell, } from './goal-seek.js';
14
+ export { evaluationSteps, printNode, printValue, } from './evaluate-steps.js';
15
+ export { checkSheet, describeFinding, ERROR_MEANINGS, } from './error-check.js';
16
+ export { imageCall, isDrawableImageSource } from './cell-images.js';
17
+ export { livePresence, presenceOnSheet, presenceAnchor, presenceColour, presenceInitials, PRESENCE_COLOURS, } from './presence.js';
13
18
  export { default as SvSheetTabs } from '../SvSheetTabs.svelte';
14
- export { createWorkbook, isValidSheetName, } from './workbook.js';
19
+ export { createWorkbook, isValidSheetName, cleanIteration, DEFAULT_ITERATION, } from './workbook.js';
15
20
  export { setWorkbook, getWorkbook } from './shortcuts.js';
16
21
  export { createSheetDocument, } from './document.js';
17
22
  export { shiftRect, shiftRects, subtractRect, rectContains, rectsIntersect, remapNotes, lineShift } from './rects.js';
18
- export { isLocked, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE } from './protection.js';
19
- export { commentAt, withComment, listComments, nextComment } from './comments.js';
23
+ export { isLocked, cellLocked, inEditRange, rectsHaveLocked, rectsMixLocked, PROTECTED_MESSAGE, PROTECTION_PERMISSIONS, defaultProtection, copyProtection, newEditRangeId, parseRangeText, rangeText, } from './protection.js';
24
+ export { commentAt, withComment, withThread, threadAt, threadOf, threadText, notesOf, isThreaded, listComments, nextComment, } from './comments.js';
20
25
  export { ruleAt, rulesIn, checkEntry, listChoices, shiftValidation, removeValidation, describeRule, dateValue, validationId, DEFAULT_ALERT_MESSAGE, OPERATOR_LABELS, } from './validation.js';
21
- export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, } from './conditional-formats.js';
26
+ export { ruleStats, evaluateCf, shiftCf, removeCf, cfIn, describeCf, scaleColor, iconIndex, hasStyle, cfId, CF_PRESET_STYLES, COLOR_SCALES, DATA_BAR_COLOR, DATA_BAR_NEGATIVE_COLOR, } from './conditional-formats.js';
22
27
  export { mergePlan, unmergePlan, mergeDropsValues, mergesIn, mergeAt as sheetMergeAt, isCoveredCell, selectionMerged, toGridMerges, sortBlockedByMerges, reorderMerges, normalRect, } from './merges.js';
23
- export { distinctValues, hiddenRowsFor, passesFilter, isFiltering, withColumnFilter, valuesFilter, shiftAutoFilter, describeFilter, } from './auto-filter.js';
28
+ export { distinctValues, hiddenRowsFor, passesFilter, isFiltering, withColumnFilter, valuesFilter, shiftAutoFilter, describeFilter, datePeriodBounds, distinctFills, isDateColumn, } from './auto-filter.js';
29
+ export { sortOrder, guessHeaderRow } from './sort.js';
30
+ export { documentToXlsxParts, documentFromXlsxParts, documentToXlsx, documentFromXlsx } from './xlsx-document.js';
31
+ export { csvText, csvRows, guessCsvSeparator, sheetStateFromCsv } from './csv.js';
32
+ export { sheetStateFromOds, documentFromOds, documentToOds, documentToOdsParts, formulaFromOdf, formulaToOdf } from './ods-document.js';
33
+ export { sheetStateFromXls, documentFromXls, documentToXls, isXlsFile } from './xls-document.js';
34
+ export { documentFromFile, readSpreadsheetFile } from './open-file.js';
35
+ export { defaultPageSetup, copyPageSetup, marginPresetOf, shiftPageSetup, marginsCss, MARGIN_PRESETS, PAPER_SIZES, } from './page-setup.js';
36
+ export { sheetPrintHtml, printAreas } from './print.js';
37
+ export { sheetCellsFromRows, cellTextOf } from './from-rows.js';
38
+ export { builtinEngine } from './engine.js';
39
+ export { chartSpecOf, chartFromRange, shiftObject, shiftObjects, objectAt, copyObject, objectId, SHEET_CHART_TYPES, } from './objects.js';
40
+ export { sparklineSeries, sparklineAt, sparklineScale, sparklinesFromRange, clearSparklines, shiftSparkline, shiftSparklines, copySparkline, sparklineId, isColumnLocation, SPARKLINE_TYPES, } from './sparklines.js';
41
+ export { pivotFields, pivotFieldValues, pivotRecords, filteredRecords, pivotBlock, pivotLayout, pivotDrill, pivotFromRange, pivotWrittenRect, flattenPivotColumns, ALL_VALUES, shiftPivot, shiftPivots, copyPivot, pivotId, SHEET_PIVOT_AGGS, } from './pivot-range.js';
42
+ export { createDeltaStream, applySheetDelta, partsOfReasons, } from './delta.js';
43
+ export { linkAt, setLink, removeLink, listLinks, shiftLinks, copyLinks, parseLinkTarget, isSafeLinkTarget, linkTitle, } from './links.js';
44
+ export { default as SvSheetSort } from '../SvSheetSort.svelte';
24
45
  export { splitText, textToColumns, guessDelimiter, findDuplicates, removeDuplicates, } from './transforms.js';
25
46
  export { insertRows, deleteRows, insertColumns, deleteColumns, axisForSelection, setStructureTarget, getStructureTarget, rewriteFormulas, } from './structure.js';
26
47
  export { findAll, findNext, replaceOne, replaceAll, replaceInText, cellMatches, setFindTarget, getFindTarget, } from './find-replace.js';
@@ -35,19 +56,25 @@ export { RIBBON_ICONS, RIBBON_ICON_NAMES } from './ribbon-icons.js';
35
56
  export { THEME_COLOURS, STANDARD_COLOURS, ALL_COLOURS, tint } from './palette.js';
36
57
  export { default as SvRibbonIcon } from '../SvRibbonIcon.svelte';
37
58
  export { move, selectRegion, selectLine, applyFormat, toggleFormat, preset, autoSum, structural, switchSheet, gridOf, } from './shortcuts.js';
38
- export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, } from './number-format.js';
59
+ export { compileNumberFormat, formatWithPattern, FORMAT_PRESETS, FORMAT_CATEGORY_PATTERNS, SPECIAL_FORMATS, formatCategory, accountingPattern, accountingParts, } from './number-format.js';
39
60
  export { createFormatStore, entryToStyle, } from './format-store.js';
40
61
  export { createNames, isValidName, } from './names.js';
62
+ export { defaultSheetMessages, defaultSheetTextMessages, defaultDialogMessages, ribbonMessageDefaults, resolveSheetMessages, formatMessage, } from './messages.js';
41
63
  export { suggestFunctions, applySuggestion, signatureAt, partialAt, SIGNATURES, } from './autocomplete.js';
42
64
  export { setFormatTarget, getFormatTarget, setFormatDialogHandler, } from './shortcuts.js';
43
65
  export { parseFormula, parse, } from './parse.js';
44
66
  export { tokenize } from './tokenize.js';
45
- export { evaluate, formatValue } from './evaluate.js';
67
+ export { evaluate, evaluateSpill, formatValue } from './evaluate.js';
68
+ export { ARRAY_FUNCTIONS } from './packs/array.js';
46
69
  export { FUNCTIONS, withCustomFunctions, } from './functions.js';
47
- export { translateFormula, fixupReferences, renameSheetReferences, formatFormula, referenceSpans, REFERENCE_COLOURS, } from './refs.js';
70
+ export { translateFormula, fixupReferences, renameSheetReferences, formatFormula, referenceSpans, repointReferences, REFERENCE_COLOURS, } from './refs.js';
48
71
  export { createDependencyGraph, precedentsOf, cellKey, parseCellKey, } from './deps.js';
49
72
  export { parseA1, formatA1, colToLetters, lettersToCol, } from './address.js';
50
73
  export { isError, } from './ast.js';
51
74
  export { SHEET_BINDINGS, handleSheetKey, } from './shortcuts.js';
52
75
  export { edgeOfRegion, currentRegion, isWholeSheet, wholeSheet, isBlankValue, } from './navigate.js';
53
76
  export { fillDown, fillRight, fillSelection, stampDate, stampNow, copyFromAbove, copyValueFromAbove, guessSumRange, looksNumeric, numericAt, targetRect, setFillTranslator, setSheetValueProbe, getSheetValueProbe, } from './commands.js';
77
+ export { cultureFromLocale, formulaToCulture, formulaFromCulture, parseNumberInCulture, formatNumberInCulture, slashDateParts, isInvariant, INVARIANT_CULTURE, } from './culture.js';
78
+ export { emptyOutline, groupLines, ungroupLines, clearOutline, toggleCollapsed, showLevel, hiddenByOutline, detailRange, shiftOutline, autoOutline, outlineLevel, isOutlined, deepestLevel, MAX_OUTLINE_LEVEL, } from './outline.js';
79
+ export { cellTypeAt, isChecked, toggledValue, radioIndex, applyCellType, removeCellTypes, shiftCellTypes, checkboxValues, newCellTypeId, copyCellType, CHECKED, UNCHECKED, } from './cell-types.js';
80
+ export { projectGridSheet, rowOfRecord, recordOfRow, isRecordRow, columnOfField, copyGridSheet, coerceFieldValue, emptyGridSheet, } from './sheet-kinds.js';
@@ -0,0 +1,57 @@
1
+ import type { StructuralEdit } from './refs.js';
2
+ export type SheetLink = {
3
+ /** Where it goes: a URL, or an address on this workbook. */
4
+ target: string;
5
+ /** Excel's ScreenTip: what hovering says, when it is not the target. */
6
+ tip?: string;
7
+ };
8
+ /** `r4` -> `B` -> the link on B5. */
9
+ export type LinksMap = Record<string, Record<string, SheetLink>>;
10
+ /** The link on a cell, or undefined. */
11
+ export declare function linkAt(links: LinksMap, row: number, col: number): SheetLink | undefined;
12
+ /** A copy with the link set on one cell. */
13
+ export declare function setLink(links: LinksMap, row: number, col: number, link: SheetLink): LinksMap;
14
+ /** A copy with the link removed from one cell, and the row dropped if empty. */
15
+ export declare function removeLink(links: LinksMap, row: number, col: number): LinksMap;
16
+ /** Every link, as rows and columns, for a writer or a test. */
17
+ export declare function listLinks(links: LinksMap): Array<{
18
+ row: number;
19
+ col: number;
20
+ link: SheetLink;
21
+ }>;
22
+ /** The links after an insert or delete: they move with their cells. */
23
+ export declare function shiftLinks(links: LinksMap, edit: StructuralEdit): LinksMap;
24
+ /** A deep enough copy to hand out or save. */
25
+ export declare function copyLinks(links: LinksMap): LinksMap;
26
+ /** Whether a target is one this shell will follow out of the page. */
27
+ export declare function isSafeLinkTarget(target: string): boolean;
28
+ export type LinkTarget = {
29
+ kind: 'external';
30
+ href: string;
31
+ } | {
32
+ kind: 'internal';
33
+ sheet: string | null;
34
+ row: number;
35
+ col: number;
36
+ } | {
37
+ kind: 'name';
38
+ name: string;
39
+ };
40
+ /**
41
+ * What a target means. An address wins over a name, so `B4` is a cell and
42
+ * `Sales` is a defined name; `Sheet1!B4` is the cell on that sheet.
43
+ */
44
+ export declare function parseLinkTarget(target: string): LinkTarget | null;
45
+ /** What a linked cell's title says: the tip, or where it goes. */
46
+ export declare function linkTitle(link: SheetLink): string;
47
+ /**
48
+ * The first argument of a top-level `=HYPERLINK(...)`, as it was written,
49
+ * so the caller can evaluate it and learn where the cell goes.
50
+ *
51
+ * Excel makes a cell holding that formula clickable, and the target is
52
+ * whatever the first argument works out to, which may be an expression
53
+ * (`"…/issues/" & A2`). Null for anything that is not that call, including
54
+ * one nested inside another formula, since only the outermost one decides
55
+ * where the cell goes.
56
+ */
57
+ export declare function hyperlinkArgument(text: string): string | null;
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Hyperlinks: Excel's Insert > Link, and the `HYPERLINK` function.
3
+ *
4
+ * A link belongs to a CELL rather than to its text, the way Excel keeps
5
+ * one: the cell still holds whatever was typed, and the link is kept beside
6
+ * it so that editing the text does not lose the target and clearing the
7
+ * cell does. That also means a link survives a format change, a sort of the
8
+ * text around it and a save, and moves with an insert or a delete.
9
+ *
10
+ * Two kinds of target, told apart by how they read rather than by a flag
11
+ * the user has to set:
12
+ *
13
+ * external `https://…`, `mailto:…`, anything with a scheme, opened in
14
+ * a new tab;
15
+ * internal `Sheet1!B4`, `B4`, or a defined name, which moves the
16
+ * selection instead of leaving the page.
17
+ *
18
+ * The map is keyed the way the comments map is (`r4` -> `B` -> the link),
19
+ * so the same `remapNotes` moves both when a row or column is inserted.
20
+ */
21
+ import { remapNotes } from './rects.js';
22
+ import { colToLetters, lettersToCol, parseA1 } from './address.js';
23
+ import { lineShift } from './rects.js';
24
+ /** The link on a cell, or undefined. */
25
+ export function linkAt(links, row, col) {
26
+ return links[`r${row}`]?.[colToLetters(col)];
27
+ }
28
+ /** A copy with the link set on one cell. */
29
+ export function setLink(links, row, col, link) {
30
+ const rowId = `r${row}`;
31
+ return { ...links, [rowId]: { ...(links[rowId] ?? {}), [colToLetters(col)]: { ...link } } };
32
+ }
33
+ /** A copy with the link removed from one cell, and the row dropped if empty. */
34
+ export function removeLink(links, row, col) {
35
+ const rowId = `r${row}`;
36
+ const line = links[rowId];
37
+ if (!line || !(colToLetters(col) in line))
38
+ return links;
39
+ const next = { ...line };
40
+ delete next[colToLetters(col)];
41
+ const out = { ...links };
42
+ if (Object.keys(next).length)
43
+ out[rowId] = next;
44
+ else
45
+ delete out[rowId];
46
+ return out;
47
+ }
48
+ /** Every link, as rows and columns, for a writer or a test. */
49
+ export function listLinks(links) {
50
+ const out = [];
51
+ for (const [rowId, line] of Object.entries(links)) {
52
+ const row = Number(rowId.slice(1));
53
+ if (!Number.isInteger(row))
54
+ continue;
55
+ for (const [columnId, link] of Object.entries(line)) {
56
+ const col = lettersToCol(columnId);
57
+ if (col >= 0)
58
+ out.push({ row, col, link: { ...link } });
59
+ }
60
+ }
61
+ return out.sort((a, b) => a.row - b.row || a.col - b.col);
62
+ }
63
+ /** The links after an insert or delete: they move with their cells. */
64
+ export function shiftLinks(links, edit) {
65
+ const rows = edit.kind === 'insertRows' || edit.kind === 'deleteRows';
66
+ return remapNotes(links, rows ? 'rows' : 'cols', lineShift(edit));
67
+ }
68
+ /** A deep enough copy to hand out or save. */
69
+ export function copyLinks(links) {
70
+ const out = {};
71
+ for (const [rowId, line] of Object.entries(links)) {
72
+ out[rowId] = Object.fromEntries(Object.entries(line).map(([c, link]) => [c, { ...link }]));
73
+ }
74
+ return out;
75
+ }
76
+ /** Anything with a scheme, or a bare `www.`, is a link out of the page. */
77
+ const EXTERNAL = /^(?:[a-z][a-z0-9+.-]*:|www\.)/i;
78
+ /**
79
+ * The schemes a cell's link may carry.
80
+ *
81
+ * A link is data: it is typed by a colleague, arrives on a delta stream, or
82
+ * comes out of a file someone sent. Following `javascript:` from one runs
83
+ * that text in the page, so the set of schemes that may be followed is
84
+ * named here rather than assumed, and anything else is not a link at all.
85
+ */
86
+ const SAFE_SCHEMES = new Set(['http', 'https', 'mailto', 'tel', 'sms', 'ftp', 'ftps']);
87
+ /** Whether a target is one this shell will follow out of the page. */
88
+ export function isSafeLinkTarget(target) {
89
+ const text = target.trim();
90
+ const scheme = /^([a-z][a-z0-9+.-]*):/i.exec(text);
91
+ return scheme ? SAFE_SCHEMES.has(scheme[1].toLowerCase()) : true;
92
+ }
93
+ /**
94
+ * What a target means. An address wins over a name, so `B4` is a cell and
95
+ * `Sales` is a defined name; `Sheet1!B4` is the cell on that sheet.
96
+ */
97
+ export function parseLinkTarget(target) {
98
+ // Not a string at all: a state built by hand, or one from a version that
99
+ // spelled a link differently. No link, rather than a thrown TypeError
100
+ // taking a whole Save As with it.
101
+ if (typeof target !== 'string')
102
+ return null;
103
+ const text = target.trim();
104
+ if (text === '')
105
+ return null;
106
+ // A scheme that is not one of the safe ones is not a link: null rather
107
+ // than an address, so nothing downstream can follow it or write it into
108
+ // a file.
109
+ if (!isSafeLinkTarget(text))
110
+ return null;
111
+ if (EXTERNAL.test(text))
112
+ return { kind: 'external', href: text.toLowerCase().startsWith('www.') ? `https://${text}` : text };
113
+ // `Sheet1!B4` and `'Two words'!B4`: the sheet is whatever is before the
114
+ // last `!`, which `parseA1` takes as an argument rather than parsing.
115
+ const bang = text.lastIndexOf('!');
116
+ const sheet = bang < 0 ? null : text.slice(0, bang).replace(/^'(.*)'$/, '$1').replace(/''/g, "'");
117
+ const cell = bang < 0 ? text : text.slice(bang + 1);
118
+ const ref = parseA1(cell, sheet);
119
+ if (ref && ref.row !== null)
120
+ return { kind: 'internal', sheet: ref.sheet, row: ref.row, col: ref.col };
121
+ return { kind: 'name', name: text };
122
+ }
123
+ /** What a linked cell's title says: the tip, or where it goes. */
124
+ export function linkTitle(link) {
125
+ return link.tip?.trim() ? link.tip : link.target;
126
+ }
127
+ /**
128
+ * The first argument of a top-level `=HYPERLINK(...)`, as it was written,
129
+ * so the caller can evaluate it and learn where the cell goes.
130
+ *
131
+ * Excel makes a cell holding that formula clickable, and the target is
132
+ * whatever the first argument works out to, which may be an expression
133
+ * (`"…/issues/" & A2`). Null for anything that is not that call, including
134
+ * one nested inside another formula, since only the outermost one decides
135
+ * where the cell goes.
136
+ */
137
+ export function hyperlinkArgument(text) {
138
+ const m = /^=\s*HYPERLINK\s*\(/i.exec(text.trim());
139
+ if (!m)
140
+ return null;
141
+ const inside = text.trim().slice(m[0].length);
142
+ let depth = 0;
143
+ let quoted = false;
144
+ for (let i = 0; i < inside.length; i += 1) {
145
+ const ch = inside[i];
146
+ if (quoted) {
147
+ // `""` inside a string is an escaped quote, not the end of one.
148
+ if (ch === '"') {
149
+ if (inside[i + 1] === '"')
150
+ i += 1;
151
+ else
152
+ quoted = false;
153
+ }
154
+ continue;
155
+ }
156
+ if (ch === '"') {
157
+ quoted = true;
158
+ continue;
159
+ }
160
+ if (ch === '(') {
161
+ depth += 1;
162
+ continue;
163
+ }
164
+ if (ch === ')') {
165
+ if (depth === 0)
166
+ return inside.slice(0, i).trim() || null;
167
+ depth -= 1;
168
+ continue;
169
+ }
170
+ if (ch === ',' && depth === 0)
171
+ return inside.slice(0, i).trim() || null;
172
+ }
173
+ return null;
174
+ }