@svgrid/enterprise 3.0.2 → 3.1.0

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-BSjv6Qec.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
@@ -59,6 +59,96 @@ export function registerPdfFonts(pdfMake, vfsModule) {
59
59
  pdfMake.vfs = vfs;
60
60
  return true;
61
61
  }
62
+ /** `rgb(...)` / `rgba(...)` / `#hex` -> `#rrggbb`, or null for transparent and anything else. */
63
+ export function cssColorToHex(value) {
64
+ if (!value)
65
+ return null;
66
+ const v = value.trim();
67
+ const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(v);
68
+ if (hex) {
69
+ const h = hex[1];
70
+ return '#' + (h.length === 3 ? h.split('').map((c) => c + c).join('') : h).toLowerCase();
71
+ }
72
+ const rgb = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,/]+([\d.]+%?))?\s*\)$/i.exec(v);
73
+ if (!rgb)
74
+ return null;
75
+ const alpha = rgb[4] === undefined ? 1 : rgb[4].endsWith('%') ? Number(rgb[4].slice(0, -1)) / 100 : Number(rgb[4]);
76
+ if (!(alpha > 0.05))
77
+ return null;
78
+ const to = (n) => Math.max(0, Math.min(255, Math.round(Number(n)))).toString(16).padStart(2, '0');
79
+ return '#' + to(rgb[1]) + to(rgb[2]) + to(rgb[3]);
80
+ }
81
+ /** Relative luminance of a `#rrggbb`, 0 (black) to 1 (white). */
82
+ export function hexLuminance(hex) {
83
+ const n = parseInt(hex.slice(1), 16);
84
+ const ch = (c) => {
85
+ const s = c / 255;
86
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
87
+ };
88
+ return 0.2126 * ch((n >> 16) & 255) + 0.7152 * ch((n >> 8) & 255) + 0.0722 * ch(n & 255);
89
+ }
90
+ /**
91
+ * Read the colours a mounted grid is drawn with, from computed styles: the
92
+ * header cell's fill and text, a body cell's text and line colour, the
93
+ * stripe of an alternate row, a group row's fill and text. Colours that are
94
+ * transparent or unreadable are left out, and under a dark theme (a dark
95
+ * body background) only the header colours are reported, since the page
96
+ * the PDF prints on is white.
97
+ */
98
+ export function readGridPdfTheme(root) {
99
+ if (!root || typeof getComputedStyle !== 'function')
100
+ return {};
101
+ const q = (sel) => root.querySelector(sel);
102
+ const style = (el, prop) => (el ? cssColorToHex(getComputedStyle(el).getPropertyValue(prop)) : null);
103
+ // The fill an element shows is the first painted background on the way
104
+ // up: a header cell is transparent over its column, a body cell over its
105
+ // row, the grid over the page. The walk goes past the root because a
106
+ // dark page is often what a dark theme's grid sits on, unpainted itself.
107
+ const fill = (el) => {
108
+ for (let node = el; node; node = node.parentElement) {
109
+ const c = style(node, 'background-color');
110
+ if (c)
111
+ return c;
112
+ }
113
+ return null;
114
+ };
115
+ // A data column, not the row-number gutter or the checkbox column, and
116
+ // a data row, not the header row (which is a `.sv-grid-row` too).
117
+ const plain = ':not([class*="row-number"]):not([class*="selection"])';
118
+ const header = q(`.sv-grid-head .sv-grid-column${plain}`) ?? q('.sv-grid-header-cell') ?? q('thead th');
119
+ const cell = q(`.sv-grid-body .sv-grid-row:not(.sv-grid-row-alt):not(.sv-grid-header-row) .sv-grid-cell${plain}`) ?? q('tbody td');
120
+ const alt = q(`.sv-grid-body .sv-grid-row-alt .sv-grid-cell${plain}`);
121
+ const group = q('.sv-grid-group-row .sv-grid-cell');
122
+ const out = {};
123
+ const headerFill = fill(header);
124
+ const headerText = style(header, 'color');
125
+ if (headerFill)
126
+ out.headerColor = headerFill;
127
+ if (headerText)
128
+ out.headerTextColor = headerText;
129
+ const bodyBg = cell ? fill(cell.parentElement) : fill(q('.sv-grid-container') ?? root);
130
+ const text = style(cell, 'color');
131
+ // Dark: a dark ground, or light text (which would vanish on the white page
132
+ // whatever the ground was).
133
+ const dark = (bodyBg ? hexLuminance(bodyBg) < 0.4 : false) || (text ? hexLuminance(text) > 0.5 : false);
134
+ if (dark)
135
+ return out;
136
+ if (text)
137
+ out.textColor = text;
138
+ const line = style(cell, 'border-bottom-color') ?? style(header, 'border-bottom-color');
139
+ if (line)
140
+ out.borderColor = line;
141
+ const stripe = style(alt, 'background-color');
142
+ if (stripe && stripe !== bodyBg)
143
+ out.zebraColor = stripe;
144
+ const groupFill = style(group, 'background-color');
145
+ const groupText = style(group, 'color');
146
+ if (groupFill && groupFill !== bodyBg)
147
+ out.groupColor = groupFill;
148
+ if (groupText)
149
+ out.groupTextColor = groupText;
150
+ return out;
151
+ }
62
152
  /** Page sizes in pt (portrait), for the content width the charts fill. */
63
153
  const PAGE_PT = {
64
154
  A4: [595.28, 841.89], A3: [841.89, 1190.55], A5: [419.53, 595.28], LETTER: [612, 792], LEGAL: [612, 1008],
@@ -95,29 +185,79 @@ export async function resolvePdfCharts(charts, rasterize) {
95
185
  export function buildPdfDocDefinition(params) {
96
186
  const { columns } = params;
97
187
  const o = params.opts ?? {};
188
+ const st = params.styles ?? {};
189
+ const theme = params.theme ?? {};
98
190
  const now = params.now ?? new Date(0);
99
191
  const fontSize = o.fontSize ?? 8;
100
- const headerColor = o.headerColor ?? '#334155';
101
- const headerTextColor = o.headerTextColor ?? '#ffffff';
192
+ // Explicit PDF options, then the blanket styles, then the grid on screen, then the slate defaults.
193
+ const headerColor = o.headerColor ?? st.headerRow?.backgroundColor ?? theme.headerColor ?? '#334155';
194
+ const headerTextColor = o.headerTextColor ?? st.headerRow?.color ?? theme.headerTextColor ?? '#ffffff';
102
195
  const zebra = o.zebra ?? true;
103
- const zebraColor = o.zebraColor ?? '#f1f5f9';
104
- const groupColor = o.groupColor ?? '#e2e8f0';
105
- const groupTextColor = o.groupTextColor ?? '#0f172a';
106
- const subtotalColor = o.subtotalColor ?? '#f8fafc';
196
+ const zebraColor = o.zebraColor ?? st.rowAlternate?.backgroundColor ?? theme.zebraColor ?? '#f1f5f9';
197
+ const groupColor = o.groupColor ?? theme.groupColor ?? '#e2e8f0';
198
+ const groupTextColor = o.groupTextColor ?? theme.groupTextColor ?? '#0f172a';
199
+ const subtotalColor = o.subtotalColor ?? theme.subtotalColor ?? '#f8fafc';
200
+ const textColor = o.textColor ?? st.rows?.color ?? theme.textColor;
201
+ const borderColor = o.borderColor ?? theme.borderColor ?? '#e2e8f0';
107
202
  const repeatHeader = o.repeatHeader ?? true;
203
+ const isBold = (w) => w === 'bold' || (typeof w === 'number' && w >= 600);
204
+ const ptSize = (v) => {
205
+ if (v === undefined)
206
+ return undefined;
207
+ const n = typeof v === 'number' ? v : parseFloat(v);
208
+ return Number.isFinite(n) && n > 0 ? n : undefined;
209
+ };
210
+ /** Lay one cell style over a cell, keys the style names. */
211
+ const applyStyle = (cell, s) => {
212
+ if (!s)
213
+ return;
214
+ if (s.backgroundColor)
215
+ cell.fillColor = s.backgroundColor;
216
+ if (s.color)
217
+ cell.color = s.color;
218
+ if (isBold(s.fontWeight))
219
+ cell.bold = true;
220
+ else if (s.fontWeight === 'normal')
221
+ cell.bold = false;
222
+ if (s.fontStyle === 'italic')
223
+ cell.italics = true;
224
+ const size = ptSize(s.fontSize);
225
+ if (size)
226
+ cell.fontSize = size;
227
+ if (s.textAlign)
228
+ cell.alignment = s.textAlign;
229
+ };
230
+ // Per-cell overrides by A1 reference: row 1 is the header, so a data row
231
+ // `r` (0-based) is row `r + 2`, matching the xlsx and html writers.
232
+ const cellRefs = new Map();
233
+ for (const [ref, s] of Object.entries(st.cells ?? {})) {
234
+ const m = /^([A-Z]+)(\d+)$/i.exec(ref.trim());
235
+ if (!m)
236
+ continue;
237
+ let col = 0;
238
+ for (const ch of m[1].toUpperCase())
239
+ col = col * 26 + (ch.charCodeAt(0) - 64);
240
+ cellRefs.set(`${Number(m[2]) - 1}:${col - 1}`, s);
241
+ }
108
242
  const orientation = o.pageOrientation ??
109
243
  (columns.length > (o.autoLandscapeThreshold ?? 8) ? 'landscape' : 'portrait');
110
244
  const widths = Array.isArray(o.columnWidths)
111
245
  ? o.columnWidths
112
246
  : columns.map(() => (o.columnWidths === 'auto' ? 'auto' : '*'));
113
247
  // Header row.
114
- const headerRow = columns.map((c) => ({
115
- text: c.header,
116
- bold: true,
117
- alignment: c.align ?? 'left',
118
- color: headerTextColor,
119
- fillColor: headerColor,
120
- }));
248
+ const headerRow = columns.map((c, ci) => {
249
+ const cell = {
250
+ text: c.header,
251
+ bold: true,
252
+ alignment: c.align ?? 'left',
253
+ color: headerTextColor,
254
+ fillColor: headerColor,
255
+ };
256
+ // The blanket header style already set the colours above; its weight, size and alignment apply here.
257
+ applyStyle(cell, st.headerRow ? { ...st.headerRow, backgroundColor: undefined, color: undefined } : undefined);
258
+ applyStyle(cell, cellRefs.get(`0:${ci}`));
259
+ return cell;
260
+ });
121
261
  // Normalize to a structured body: `body` wins, else wrap flat `rows`.
122
262
  const model = params.body ?? (params.rows ?? []).map((cells) => ({ kind: 'data', cells }));
123
263
  // Track which body-row indices are plain data rows, so zebra striping only
@@ -154,6 +294,13 @@ export function buildPdfDocDefinition(params) {
154
294
  const ord = dataOrdinal++;
155
295
  bodyCells.push(columns.map((c, ci) => {
156
296
  const cell = { text: row.cells[ci] ?? '', alignment: c.align ?? 'left' };
297
+ if (textColor)
298
+ cell.color = textColor;
299
+ // Blanket row style, the zebra text colour on alternate rows, then the A1 override.
300
+ applyStyle(cell, st.rows ? { ...st.rows, backgroundColor: undefined } : undefined);
301
+ if (zebra && ord % 2 === 1 && st.rowAlternate?.color)
302
+ cell.color = st.rowAlternate.color;
303
+ applyStyle(cell, cellRefs.get(`${ord + 1}:${ci}`));
157
304
  const s = dataCellStyle?.(ord, ci);
158
305
  if (s) {
159
306
  if (s.fill)
@@ -174,6 +321,37 @@ export function buildPdfDocDefinition(params) {
174
321
  }));
175
322
  }
176
323
  });
324
+ // Merged data cells: pdfmake spans from the top-left cell and expects the
325
+ // covered cells to be present and empty. Only flat exports: with group
326
+ // or subtotal rows the data row numbering would not be the body's.
327
+ if (params.merges?.length && !params.body) {
328
+ const dataRowsAt = [...dataRowIdx].sort((a, b) => a - b);
329
+ for (const m of params.merges) {
330
+ const rs = Math.max(1, Math.floor(m.rowSpan ?? 1));
331
+ const cs = Math.max(1, Math.floor(m.colSpan ?? 1));
332
+ if (rs === 1 && cs === 1)
333
+ continue;
334
+ const top = dataRowsAt[m.row];
335
+ if (top === undefined || m.col < 0 || m.col >= columns.length)
336
+ continue;
337
+ const anchor = bodyCells[top]?.[m.col];
338
+ if (!anchor)
339
+ continue;
340
+ if (rs > 1)
341
+ anchor.rowSpan = Math.min(rs, bodyCells.length - top);
342
+ if (cs > 1)
343
+ anchor.colSpan = Math.min(cs, columns.length - m.col);
344
+ for (let r = 0; r < (anchor.rowSpan ?? 1); r += 1) {
345
+ for (let c = 0; c < (anchor.colSpan ?? 1); c += 1) {
346
+ if (r === 0 && c === 0)
347
+ continue;
348
+ const covered = bodyCells[top + r]?.[m.col + c];
349
+ if (covered)
350
+ covered.text = '';
351
+ }
352
+ }
353
+ }
354
+ }
177
355
  const table = {
178
356
  table: {
179
357
  headerRows: repeatHeader ? 1 : 0,
@@ -186,15 +364,37 @@ export function buildPdfDocDefinition(params) {
186
364
  fillColor: (rowIndex) => zebra && rowIndex > 0 && rowIndex % 2 === 0 && dataRowIdx.has(rowIndex) ? zebraColor : null,
187
365
  hLineWidth: () => 0.5,
188
366
  vLineWidth: () => 0.5,
189
- hLineColor: () => '#e2e8f0',
190
- vLineColor: () => '#e2e8f0',
367
+ hLineColor: () => borderColor,
368
+ vLineColor: () => borderColor,
191
369
  paddingTop: () => 3,
192
370
  paddingBottom: () => 3,
193
371
  paddingLeft: () => 5,
194
372
  paddingRight: () => 5,
195
373
  },
196
374
  };
375
+ // The lines `ExportOptions.header` / `footer` carry: text with a style, an
376
+ // image, or a left / centre / right triple, above and below the table the
377
+ // way the xlsx writer puts them in rows around it.
378
+ const pageLines = (lines, margin) => (lines ?? []).map((line) => {
379
+ if ('image' in line) {
380
+ return { image: line.image, ...(line.width ? { width: line.width } : {}), ...(line.height ? { height: line.height } : {}), margin };
381
+ }
382
+ if ('text' in line) {
383
+ const cell = { text: line.text };
384
+ applyStyle(cell, line.style);
385
+ return { ...cell, margin };
386
+ }
387
+ return {
388
+ columns: [
389
+ { text: line.left ?? '', alignment: 'left' },
390
+ { text: line.center ?? '', alignment: 'center' },
391
+ { text: line.right ?? '', alignment: 'right' },
392
+ ],
393
+ margin,
394
+ };
395
+ });
197
396
  const content = [];
397
+ content.push(...pageLines(params.headerLines, [0, 0, 0, 4]));
198
398
  if (o.logo)
199
399
  content.push({ image: o.logo, width: o.logoWidth ?? 90, margin: [0, 0, 0, 8] });
200
400
  if (o.title)
@@ -253,6 +453,7 @@ export function buildPdfDocDefinition(params) {
253
453
  content.push({ text: '', margin: [0, 0, 0, 12] });
254
454
  content.push(...chartBlocks);
255
455
  }
456
+ content.push(...pageLines(params.footerLines, [0, 4, 0, 0]));
256
457
  const def = {
257
458
  pageSize: o.pageSize ?? 'A4',
258
459
  pageOrientation: orientation,
package/dist/export.js CHANGED
@@ -6,7 +6,7 @@ import { installSmartShim } from './smart-shim.js';
6
6
  import { downloadBlobFile, downloadTextFile, serializeDelimited, serializeHtml, serializeJson, serializeMarkdown, serializeXml, } from './export-serialize.js';
7
7
  import { serializeSpreadsheetML } from './export-xls.js';
8
8
  import { buildXlsxParts, packageXlsx } from './export-ooxml.js';
9
- import { buildPdfDocDefinition, registerPdfFonts, resolvePdfCharts } from './export-pdf.js';
9
+ import { buildPdfDocDefinition, readGridPdfTheme, registerPdfFonts, resolvePdfCharts } from './export-pdf.js';
10
10
  import { buildConditionalResolver } from './export-conditional.js';
11
11
  /** Formats served by the native, dependency-free, streaming serializers. */
12
12
  const NATIVE_TEXT_FORMATS = [
@@ -634,6 +634,10 @@ async function exportPdf(api, opts) {
634
634
  ...opts.pdf,
635
635
  pageOrientation: opts.pdf?.pageOrientation ?? opts.pageOrientation,
636
636
  };
637
+ // The grid on screen lends its colours unless told not to; explicit
638
+ // `pdf` colours and `styles` still win inside the builder.
639
+ const theme = pdfOpts.matchTheme === false ? {} : readGridPdfTheme(api.getElement?.() ?? null);
640
+ const lines = { headerLines: opts.header, footerLines: opts.footer };
637
641
  // Charts handed over as elements are rasterised here, once, through the
638
642
  // grid chart's own PNG path at 2x, so the page gets the picture on screen.
639
643
  // The rasteriser comes from the grid's barrel, imported on demand: the
@@ -649,7 +653,7 @@ async function exportPdf(api, opts) {
649
653
  // Conditional formatting is skipped for grouped PDFs (group / subtotal
650
654
  // rows own the layout); the grid colors still show on screen.
651
655
  const body = buildGroupedPdfBody(cols, sourceRows, effGroupBy);
652
- def = buildPdfDocDefinition({ columns, body, opts: pdfOpts, charts, now });
656
+ def = buildPdfDocDefinition({ columns, body, opts: pdfOpts, styles: opts.styles, theme, ...lines, charts, now });
653
657
  }
654
658
  else {
655
659
  const projected = await projectRows(sourceRows, cols, opts);
@@ -673,6 +677,10 @@ async function exportPdf(api, opts) {
673
677
  },
674
678
  dataCellLink: link,
675
679
  opts: pdfOpts,
680
+ styles: opts.styles,
681
+ theme,
682
+ ...lines,
683
+ merges: opts.merges,
676
684
  charts,
677
685
  now,
678
686
  });