@svgrid/enterprise 3.0.1 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +94 -24
- package/README.md +36 -4
- package/dist/SvAdvancedFilter.svelte +1 -1
- package/dist/SvAlertsManager.svelte +2 -1
- package/dist/SvBoard.svelte +2 -1
- package/dist/SvExportMenu.svelte +4 -1
- package/dist/SvExportMenu.svelte.d.ts +0 -13
- package/dist/SvExpressionEditor.svelte +3 -3
- package/dist/SvFormulaBar.svelte +680 -0
- package/dist/SvFormulaBar.svelte.d.ts +69 -0
- package/dist/SvGridAlerts.svelte +49 -9
- package/dist/SvGridBoard.svelte +13 -8
- package/dist/SvGridBulkEditDrawer.svelte +26 -2
- package/dist/SvGridEditPanel.svelte +3 -0
- package/dist/SvGridScheduler.svelte +69 -40
- package/dist/SvGridSelectionBar.svelte +10 -3
- package/dist/SvPivotDesigner.svelte +263 -54
- package/dist/SvPivotDesigner.svelte.d.ts +27 -20
- package/dist/SvRibbonIcon.svelte +46 -0
- package/dist/SvRibbonIcon.svelte.d.ts +17 -0
- package/dist/SvSchemaChart.svelte +4 -2
- package/dist/SvSheet.svelte +7914 -0
- package/dist/SvSheet.svelte.d.ts +215 -0
- package/dist/SvSheetChartSetup.svelte +151 -0
- package/dist/SvSheetChartSetup.svelte.d.ts +18 -0
- package/dist/SvSheetComment.svelte +283 -0
- package/dist/SvSheetComment.svelte.d.ts +22 -0
- package/dist/SvSheetConditionalFormat.svelte +159 -0
- package/dist/SvSheetConditionalFormat.svelte.d.ts +14 -0
- package/dist/SvSheetDataValidation.svelte +273 -0
- package/dist/SvSheetDataValidation.svelte.d.ts +14 -0
- package/dist/SvSheetEditRanges.svelte +217 -0
- package/dist/SvSheetEditRanges.svelte.d.ts +15 -0
- package/dist/SvSheetErrors.svelte +125 -0
- package/dist/SvSheetErrors.svelte.d.ts +20 -0
- package/dist/SvSheetEvaluate.svelte +133 -0
- package/dist/SvSheetEvaluate.svelte.d.ts +15 -0
- package/dist/SvSheetFilterMenu.svelte +320 -0
- package/dist/SvSheetFilterMenu.svelte.d.ts +22 -0
- package/dist/SvSheetFindReplace.svelte +132 -0
- package/dist/SvSheetFindReplace.svelte.d.ts +10 -0
- package/dist/SvSheetFormatCells.svelte +465 -0
- package/dist/SvSheetFormatCells.svelte.d.ts +17 -0
- package/dist/SvSheetGoalSeek.svelte +145 -0
- package/dist/SvSheetGoalSeek.svelte.d.ts +12 -0
- package/dist/SvSheetInsertFunction.svelte +149 -0
- package/dist/SvSheetInsertFunction.svelte.d.ts +8 -0
- package/dist/SvSheetIteration.svelte +81 -0
- package/dist/SvSheetIteration.svelte.d.ts +10 -0
- package/dist/SvSheetLink.svelte +99 -0
- package/dist/SvSheetLink.svelte.d.ts +17 -0
- package/dist/SvSheetListPicker.svelte +91 -0
- package/dist/SvSheetListPicker.svelte.d.ts +10 -0
- package/dist/SvSheetManageRules.svelte +187 -0
- package/dist/SvSheetManageRules.svelte.d.ts +16 -0
- package/dist/SvSheetNameManager.svelte +227 -0
- package/dist/SvSheetNameManager.svelte.d.ts +11 -0
- package/dist/SvSheetPageSetup.svelte +159 -0
- package/dist/SvSheetPageSetup.svelte.d.ts +13 -0
- package/dist/SvSheetPasteSpecial.svelte +107 -0
- package/dist/SvSheetPasteSpecial.svelte.d.ts +12 -0
- package/dist/SvSheetPivot.svelte +220 -0
- package/dist/SvSheetPivot.svelte.d.ts +21 -0
- package/dist/SvSheetProtectSheet.svelte +81 -0
- package/dist/SvSheetProtectSheet.svelte.d.ts +11 -0
- package/dist/SvSheetRemoveDuplicates.svelte +152 -0
- package/dist/SvSheetRemoveDuplicates.svelte.d.ts +12 -0
- package/dist/SvSheetRibbon.svelte +1254 -0
- package/dist/SvSheetRibbon.svelte.d.ts +34 -0
- package/dist/SvSheetSizeDialog.svelte +60 -0
- package/dist/SvSheetSizeDialog.svelte.d.ts +11 -0
- package/dist/SvSheetSort.svelte +218 -0
- package/dist/SvSheetSort.svelte.d.ts +28 -0
- package/dist/SvSheetSparklines.svelte +135 -0
- package/dist/SvSheetSparklines.svelte.d.ts +14 -0
- package/dist/SvSheetTable.svelte +160 -0
- package/dist/SvSheetTable.svelte.d.ts +24 -0
- package/dist/SvSheetTabs.svelte +571 -0
- package/dist/SvSheetTabs.svelte.d.ts +50 -0
- package/dist/SvSheetTabs.test-harness.svelte.d.ts +17 -0
- package/dist/SvSheetTabs.test-harness.svelte.js +22 -0
- package/dist/SvSheetTextToColumns.svelte +172 -0
- package/dist/SvSheetTextToColumns.svelte.d.ts +13 -0
- package/dist/SvSheetValidationAlert.svelte +85 -0
- package/dist/SvSheetValidationAlert.svelte.d.ts +15 -0
- package/dist/advanced-filter-enable.js +1 -1
- package/dist/alerts/alert-engine.d.ts +6 -0
- package/dist/alerts/alert-engine.js +21 -4
- package/dist/alerts/alert-formats.js +2 -0
- package/dist/alerts/alert-types.d.ts +1 -1
- package/dist/alerts.d.ts +1 -1
- package/dist/alerts.js +2 -2
- package/dist/board.js +2 -2
- package/dist/bulk-edit.d.ts +3 -1
- package/dist/bulk-edit.js +1 -1
- package/dist/cdn/svgrid-enterprise.svelte-external.js +43538 -6539
- package/dist/designer/assets/GridMenus-8gTNssgV.js +8 -0
- package/dist/designer/assets/SvChartMenu-BDoeqGz6.js +1 -0
- package/dist/designer/assets/SvChartMenu-BYO9cYdy.css +1 -0
- package/dist/designer/assets/SvDateRangeInput-BBRzrQeg.js +1 -0
- package/dist/designer/assets/SvDateTimePicker-DCPg7WGN.js +1 -0
- package/dist/designer/assets/SvGridCellEditor-DMoWJjEI.js +4 -0
- package/dist/designer/assets/SvGridChart-BgLuPO7I.css +1 -0
- package/dist/designer/assets/SvGridChart-Cy1ATrWh.js +3 -0
- package/dist/designer/assets/SvGridChartBuilder-08YWWeqY.css +1 -0
- package/dist/designer/assets/SvGridChartBuilder-eQ3mn0L9.js +1 -0
- package/dist/designer/assets/SvGridChartPanel-4Pc8y5yO.css +1 -0
- package/dist/designer/assets/SvGridChartPanel-CATdVc9X.js +4 -0
- package/dist/designer/assets/{SvGridChartView-DUc-1RUf.css → SvGridChartView-7msfnWZT.css} +1 -1
- package/dist/designer/assets/SvGridChartView-CmsZtCED.js +1 -0
- package/dist/designer/assets/SvGridDropdown-Cjz0H-fI.js +1 -0
- package/dist/designer/assets/SvListBox-BDS66lmZ.js +110 -0
- package/dist/designer/assets/SvMenuList-DJ47ba1h.css +1 -0
- package/dist/designer/assets/SvMenuList-Dgq2D5VN.js +1 -0
- package/dist/designer/assets/SvTabs-2mHC6oaz.js +1 -0
- package/dist/designer/assets/SvTabs-DKmwb5p1.css +1 -0
- package/dist/designer/assets/cell-formatting-BbubJTVz.js +1 -0
- package/dist/designer/assets/chart-Cn7MnNqA.js +1 -0
- package/dist/designer/assets/chart-export-B6bkQ3X8.js +11 -0
- package/dist/designer/assets/chart-export-pdf-BbA28-gt.js +11 -0
- package/dist/designer/assets/chart-panel-messages-Dz7PTIqT.js +1 -0
- package/dist/designer/assets/chart-summary-BD1qYB2R.js +1 -0
- package/dist/designer/assets/chart-trend-B8xr5LuD.js +1 -0
- package/dist/designer/assets/chart-validate-BMqM-qkF.js +1 -0
- package/dist/designer/assets/column-resize-BYDzR1Ve.js +1 -0
- package/dist/designer/assets/date-format-B8JbEtIG.js +1 -0
- package/dist/designer/assets/date-format-DKS-z0xS.css +1 -0
- package/dist/designer/assets/{dismissable-BO547MH9.js → dismissable-ChWRPkoa.js} +1 -1
- package/dist/designer/assets/editor-contract-Bpoa7A5g.js +1 -0
- package/dist/designer/assets/{export-format-D-eP4b2l.js → export-format-DGckmgKr.js} +1 -1
- package/dist/designer/assets/focus-trap-V2-6Fy9I.js +1 -0
- package/dist/designer/assets/{index-C_a9Cj8Y.js → index-D5bVbuzI.js} +318 -315
- package/dist/designer/assets/index-_JVFxt02.css +1 -0
- package/dist/designer/assets/list-option-BP_dWS66.js +1 -0
- package/dist/designer/assets/row-resize-BInFWCpr.js +1 -0
- package/dist/designer/assets/server-block-cache-CXJKkJpy.js +1 -0
- package/dist/designer/assets/src-CITpcm6b.js +1 -0
- package/dist/designer/assets/src-DUQ4xE3x.js +58 -0
- package/dist/designer/assets/validate-C3B8QKsM.js +1 -0
- package/dist/designer/index.html +29 -19
- package/dist/export-pdf.d.ts +164 -0
- package/dist/export-pdf.js +346 -15
- package/dist/export.js +25 -10
- package/dist/gantt/SvGridGantt.svelte +2890 -0
- package/dist/gantt/SvGridGantt.svelte.d.ts +30 -0
- package/dist/gantt/gantt-config.d.ts +73 -0
- package/dist/gantt/gantt-config.js +1 -0
- package/dist/gantt/gantt-critical-path.d.ts +67 -0
- package/dist/gantt/gantt-critical-path.js +207 -0
- package/dist/gantt/gantt-model.d.ts +257 -0
- package/dist/gantt/gantt-model.js +651 -0
- package/dist/gantt/gantt-resources.d.ts +59 -0
- package/dist/gantt/gantt-resources.js +71 -0
- package/dist/gantt/gantt.d.ts +7 -0
- package/dist/gantt/gantt.js +36 -0
- package/dist/gantt/index.d.ts +15 -0
- package/dist/gantt/index.js +22 -0
- package/dist/gantt/timeline-arrows.d.ts +102 -0
- package/dist/gantt/timeline-arrows.js +181 -0
- package/dist/import.d.ts +2 -2
- package/dist/import.js +1 -1
- package/dist/index.d.ts +93 -3
- package/dist/index.js +107 -3
- package/dist/install.js +13 -1
- package/dist/license-core.d.ts +17 -1
- package/dist/license-core.js +16 -5
- package/dist/license.d.ts +18 -2
- package/dist/license.js +71 -6
- package/dist/node/studio.js +203 -9
- package/dist/pivot-chart.d.ts +25 -1
- package/dist/pivot-chart.js +25 -69
- package/dist/pivot-enable.js +2 -2
- package/dist/scheduler-dependencies.d.ts +35 -0
- package/dist/scheduler-dependencies.js +36 -1
- package/dist/scheduler.js +2 -2
- package/dist/selection-bar.js +2 -2
- package/dist/server/SvGroupCell.svelte +213 -0
- package/dist/server/SvGroupCell.svelte.d.ts +62 -0
- package/dist/server/SvRowGroupPanel.svelte +322 -0
- package/dist/server/SvRowGroupPanel.svelte.d.ts +37 -0
- package/dist/server/enable.d.ts +17 -0
- package/dist/server/enable.js +49 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.js +24 -0
- package/dist/server/messages.d.ts +45 -0
- package/dist/server/messages.js +35 -0
- package/dist/server/server-group-model.d.ts +104 -0
- package/dist/server/server-group-model.js +272 -0
- package/dist/server/server-pivot.d.ts +46 -0
- package/dist/server/server-pivot.js +57 -0
- package/dist/server/server-row-model.d.ts +547 -0
- package/dist/server/server-row-model.js +1551 -0
- package/dist/server/server-selection.d.ts +99 -0
- package/dist/server/server-selection.js +215 -0
- package/dist/server/svgrid-adapter.d.ts +155 -0
- package/dist/server/svgrid-adapter.js +202 -0
- package/dist/sheet/address.d.ts +43 -0
- package/dist/sheet/address.js +81 -0
- package/dist/sheet/ast.d.ts +138 -0
- package/dist/sheet/ast.js +70 -0
- package/dist/sheet/auto-filter.d.ts +120 -0
- package/dist/sheet/auto-filter.js +295 -0
- package/dist/sheet/autocomplete.d.ts +51 -0
- package/dist/sheet/autocomplete.js +248 -0
- package/dist/sheet/cell-images.d.ts +39 -0
- package/dist/sheet/cell-images.js +90 -0
- package/dist/sheet/cell-types.d.ts +58 -0
- package/dist/sheet/cell-types.js +96 -0
- package/dist/sheet/coerce.d.ts +71 -0
- package/dist/sheet/coerce.js +289 -0
- package/dist/sheet/commands.d.ts +89 -0
- package/dist/sheet/commands.js +230 -0
- package/dist/sheet/comments.d.ts +63 -0
- package/dist/sheet/comments.js +131 -0
- package/dist/sheet/conditional-formats.d.ts +167 -0
- package/dist/sheet/conditional-formats.js +341 -0
- package/dist/sheet/csv.d.ts +32 -0
- package/dist/sheet/csv.js +158 -0
- package/dist/sheet/culture.d.ts +87 -0
- package/dist/sheet/culture.js +247 -0
- package/dist/sheet/delta.d.ts +102 -0
- package/dist/sheet/delta.js +203 -0
- package/dist/sheet/deps.d.ts +104 -0
- package/dist/sheet/deps.js +274 -0
- package/dist/sheet/document.d.ts +252 -0
- package/dist/sheet/document.js +465 -0
- package/dist/sheet/edit-keys.d.ts +14 -0
- package/dist/sheet/edit-keys.js +40 -0
- package/dist/sheet/engine.d.ts +67 -0
- package/dist/sheet/engine.js +19 -0
- package/dist/sheet/entry.d.ts +35 -0
- package/dist/sheet/entry.js +226 -0
- package/dist/sheet/error-check.d.ts +49 -0
- package/dist/sheet/error-check.js +83 -0
- package/dist/sheet/evaluate-steps.d.ts +48 -0
- package/dist/sheet/evaluate-steps.js +196 -0
- package/dist/sheet/evaluate.d.ts +128 -0
- package/dist/sheet/evaluate.js +1049 -0
- package/dist/sheet/filter-files.d.ts +37 -0
- package/dist/sheet/filter-files.js +465 -0
- package/dist/sheet/find-replace.d.ts +62 -0
- package/dist/sheet/find-replace.js +152 -0
- package/dist/sheet/format-store.d.ts +114 -0
- package/dist/sheet/format-store.js +243 -0
- package/dist/sheet/freeze.d.ts +54 -0
- package/dist/sheet/freeze.js +58 -0
- package/dist/sheet/from-rows.d.ts +14 -0
- package/dist/sheet/from-rows.js +50 -0
- package/dist/sheet/function-catalog.d.ts +10 -0
- package/dist/sheet/function-catalog.js +385 -0
- package/dist/sheet/functions.d.ts +28 -0
- package/dist/sheet/functions.js +634 -0
- package/dist/sheet/goal-seek.d.ts +73 -0
- package/dist/sheet/goal-seek.js +153 -0
- package/dist/sheet/index.d.ts +80 -0
- package/dist/sheet/index.js +80 -0
- package/dist/sheet/links.d.ts +57 -0
- package/dist/sheet/links.js +174 -0
- package/dist/sheet/merges.d.ts +71 -0
- package/dist/sheet/merges.js +137 -0
- package/dist/sheet/messages.d.ts +778 -0
- package/dist/sheet/messages.js +806 -0
- package/dist/sheet/names.d.ts +31 -0
- package/dist/sheet/names.js +87 -0
- package/dist/sheet/navigate.d.ts +52 -0
- package/dist/sheet/navigate.js +135 -0
- package/dist/sheet/number-format.d.ts +110 -0
- package/dist/sheet/number-format.js +905 -0
- package/dist/sheet/objects.d.ts +106 -0
- package/dist/sheet/objects.js +149 -0
- package/dist/sheet/ods-document.d.ts +44 -0
- package/dist/sheet/ods-document.js +1275 -0
- package/dist/sheet/open-file.d.ts +26 -0
- package/dist/sheet/open-file.js +56 -0
- package/dist/sheet/outline.d.ts +82 -0
- package/dist/sheet/outline.js +228 -0
- package/dist/sheet/packs/array.d.ts +16 -0
- package/dist/sheet/packs/array.js +172 -0
- package/dist/sheet/packs/database.d.ts +42 -0
- package/dist/sheet/packs/database.js +142 -0
- package/dist/sheet/packs/engineering.d.ts +2 -0
- package/dist/sheet/packs/engineering.js +296 -0
- package/dist/sheet/packs/financial.d.ts +5 -0
- package/dist/sheet/packs/financial.js +220 -0
- package/dist/sheet/packs/math-stats.d.ts +2 -0
- package/dist/sheet/packs/math-stats.js +372 -0
- package/dist/sheet/packs/special.d.ts +44 -0
- package/dist/sheet/packs/special.js +187 -0
- package/dist/sheet/packs/stats-dist.d.ts +2 -0
- package/dist/sheet/packs/stats-dist.js +785 -0
- package/dist/sheet/packs/text-date.d.ts +2 -0
- package/dist/sheet/packs/text-date.js +332 -0
- package/dist/sheet/packs/trig.d.ts +2 -0
- package/dist/sheet/packs/trig.js +73 -0
- package/dist/sheet/page-setup.d.ts +73 -0
- package/dist/sheet/page-setup.js +73 -0
- package/dist/sheet/palette.d.ts +19 -0
- package/dist/sheet/palette.js +84 -0
- package/dist/sheet/parse.d.ts +13 -0
- package/dist/sheet/parse.js +140 -0
- package/dist/sheet/paste-special.d.ts +186 -0
- package/dist/sheet/paste-special.js +601 -0
- package/dist/sheet/pivot-range.d.ts +160 -0
- package/dist/sheet/pivot-range.js +333 -0
- package/dist/sheet/presence.d.ts +73 -0
- package/dist/sheet/presence.js +79 -0
- package/dist/sheet/print.d.ts +104 -0
- package/dist/sheet/print.js +169 -0
- package/dist/sheet/protection.d.ts +75 -0
- package/dist/sheet/protection.js +101 -0
- package/dist/sheet/rects.d.ts +45 -0
- package/dist/sheet/rects.js +112 -0
- package/dist/sheet/refs.d.ts +130 -0
- package/dist/sheet/refs.js +413 -0
- package/dist/sheet/ribbon-icons.d.ts +31 -0
- package/dist/sheet/ribbon-icons.js +536 -0
- package/dist/sheet/ribbon.d.ts +173 -0
- package/dist/sheet/ribbon.js +1054 -0
- package/dist/sheet/sheet-kinds.d.ts +74 -0
- package/dist/sheet/sheet-kinds.js +91 -0
- package/dist/sheet/shortcuts.d.ts +174 -0
- package/dist/sheet/shortcuts.js +674 -0
- package/dist/sheet/sort.d.ts +51 -0
- package/dist/sheet/sort.js +107 -0
- package/dist/sheet/sparklines.d.ts +111 -0
- package/dist/sheet/sparklines.js +204 -0
- package/dist/sheet/structure.d.ts +87 -0
- package/dist/sheet/structure.js +166 -0
- package/dist/sheet/table-styles.d.ts +74 -0
- package/dist/sheet/table-styles.js +152 -0
- package/dist/sheet/tables.d.ts +89 -0
- package/dist/sheet/tables.js +178 -0
- package/dist/sheet/tokenize.d.ts +71 -0
- package/dist/sheet/tokenize.js +355 -0
- package/dist/sheet/transforms.d.ts +76 -0
- package/dist/sheet/transforms.js +154 -0
- package/dist/sheet/validation.d.ts +108 -0
- package/dist/sheet/validation.js +278 -0
- package/dist/sheet/workbook.d.ts +217 -0
- package/dist/sheet/workbook.js +1120 -0
- package/dist/sheet/xls-cfb.d.ts +32 -0
- package/dist/sheet/xls-cfb.js +290 -0
- package/dist/sheet/xls-document.d.ts +10 -0
- package/dist/sheet/xls-document.js +1243 -0
- package/dist/sheet/xls-formula.d.ts +40 -0
- package/dist/sheet/xls-formula.js +569 -0
- package/dist/sheet/xlsx-document.d.ts +108 -0
- package/dist/sheet/xlsx-document.js +1849 -0
- package/dist/sheet/xlsx-drawing.d.ts +99 -0
- package/dist/sheet/xlsx-drawing.js +420 -0
- package/dist/sheet-enable.d.ts +6 -0
- package/dist/sheet-enable.js +45 -0
- package/dist/sheet-text.d.ts +7 -0
- package/dist/sheet-text.js +29 -0
- package/dist/sources/auth-supabase.js +2 -2
- package/dist/sources/realtime-supabase.js +2 -2
- package/dist/sources/rest.d.ts +6 -2
- package/dist/sources/rest.js +42 -7
- package/dist/sources/supabase.d.ts +10 -1
- package/dist/sources/supabase.js +73 -40
- package/dist/studio/emit-project.js +14 -1
- package/dist/studio/index.js +1 -1
- package/dist/studio/project.d.ts +11 -2
- package/dist/studio/project.js +5 -2
- package/dist/studio/ui-components.generated.js +170 -3
- package/dist/sveltekit/in-memory.d.ts +2 -2
- package/dist/sveltekit/in-memory.js +125 -4
- package/dist/sveltekit/index.d.ts +1 -1
- package/dist/sveltekit/index.js +1 -1
- package/dist/sveltekit/query-plan.d.ts +50 -4
- package/dist/sveltekit/query-plan.js +25 -3
- package/dist/sveltekit/sql-source.d.ts +6 -0
- package/dist/sveltekit/sql-source.js +34 -6
- package/dist/sveltekit/sql.d.ts +31 -0
- package/dist/sveltekit/sql.js +135 -25
- package/dist/sveltekit/transport.d.ts +10 -2
- package/dist/sveltekit/transport.js +30 -6
- package/dist/upgrade-prompt.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/watermark.js +35 -2
- package/dist/wc/GridMenus-By9vPuq0.js +1088 -0
- package/dist/wc/SvChartMenu-CQNrQGT2.js +308 -0
- package/dist/wc/SvDateRangeInput-DR6m7bSM.js +199 -0
- package/dist/wc/SvDateTimePicker-D-vRnaMo.js +771 -0
- package/dist/wc/SvField-B_kurx_P.js +149 -0
- package/dist/wc/SvGrid.helpers-BdVDtjUm.js +135 -0
- package/dist/wc/SvGridCellEditor-Bnf1Kr5C.js +560 -0
- package/dist/wc/SvGridChart-BqUJh2pG.js +3572 -0
- package/dist/wc/SvGridChartBuilder-CGycC5cn.js +988 -0
- package/dist/wc/SvGridChartPanel-CRnizsHD.js +1746 -0
- package/dist/wc/SvGridChartView-D1pa_xMy.js +47 -0
- package/dist/wc/SvGridDropdown-45WsObLL.js +259 -0
- package/dist/wc/SvModal-DrfOYYyX.js +189 -0
- package/dist/wc/cell-formatting-CBfgahv1.js +86 -0
- package/dist/wc/chart-6OXlybVT.js +4341 -0
- package/dist/wc/chart-export-CeSADGfi.js +135 -0
- package/dist/wc/chart-export-pdf-BGko7MER.js +104 -0
- package/dist/wc/chart-summary-2m3ia1-n.js +137 -0
- package/dist/wc/chart-trend-CQOQtTMl.js +50 -0
- package/dist/wc/chart-validate-CD6ptiwg.js +180 -0
- package/dist/wc/client-DQIzjDBG.js +3064 -0
- package/dist/wc/column-resize-DUPgynvc.js +101 -0
- package/dist/wc/date-format-DS-z_h9v.js +1130 -0
- package/dist/wc/dismissable-CQ6XFXsk.js +45 -0
- package/dist/wc/editor-contract-peBDxir_.js +22 -0
- package/dist/wc/editor-registry-DxGKqcvx.js +24 -0
- package/dist/wc/focus-trap-Dbb2tJxb.js +65 -0
- package/dist/wc/list-option-DrRyivWp.js +82 -0
- package/dist/wc/popover-WsGlvtQv.js +69 -0
- package/dist/wc/positioning-BiKLfu1E.js +112 -0
- package/dist/wc/react.d.ts +41 -0
- package/dist/wc/react.js +90 -0
- package/dist/wc/rolldown-runtime-Dy4uBu1J.js +11 -0
- package/dist/wc/row-drag-touch-CycRR65n.js +93 -0
- package/dist/wc/row-resize-limG_N1z.js +111 -0
- package/dist/wc/sv-sheet-element.d.ts +97 -0
- package/dist/wc/sv-sheet-element.js +44213 -0
- package/dist/wc/svelte-virtualizer.svelte-CXtQy2TQ.js +530 -0
- package/dist/wc/validate-BqDthkNr.js +88 -0
- package/dist/wc/vue.d.ts +31 -0
- package/dist/wc/vue.js +75 -0
- package/package.json +36 -6
- package/dist/designer/assets/GridMenus-B1JtIN21.js +0 -8
- package/dist/designer/assets/SvDateRangeInput-CjO7nn_x.js +0 -1
- package/dist/designer/assets/SvDateTimePicker-ByBD_ov6.js +0 -1
- package/dist/designer/assets/SvField-YDLipR6O.css +0 -1
- package/dist/designer/assets/SvField-cj1PFNgZ.js +0 -1
- package/dist/designer/assets/SvGridCellEditor-0W1L2hJ1.js +0 -2
- package/dist/designer/assets/SvGridChart-DBOR4xcz.js +0 -2
- package/dist/designer/assets/SvGridChart-fkMWeh1J.css +0 -1
- package/dist/designer/assets/SvGridChartPanel-symrhNnR.js +0 -11
- package/dist/designer/assets/SvGridChartView-BmRxq6mU.js +0 -1
- package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +0 -1
- package/dist/designer/assets/SvListBox-1oUF6Iav.js +0 -110
- package/dist/designer/assets/cell-formatting-wr5wm7US.js +0 -1
- package/dist/designer/assets/chart-DXFganU8.js +0 -1
- package/dist/designer/assets/column-resize-C_inr5zT.js +0 -1
- package/dist/designer/assets/date-format-DGagAqRc.css +0 -1
- package/dist/designer/assets/date-format-onlYDsrY.js +0 -1
- package/dist/designer/assets/easing-zaypKrr0.js +0 -3
- package/dist/designer/assets/index-k2stW6L8.css +0 -1
- package/dist/designer/assets/row-resize-B0FWHcNr.js +0 -1
- package/dist/designer/assets/src-D9p27OGC.js +0 -58
- package/dist/designer/assets/validate-h-aslRV9.js +0 -1
package/dist/node/studio.js
CHANGED
|
@@ -8511,6 +8511,7 @@ var GENERATED_UI_SURFACE = {
|
|
|
8511
8511
|
"key": "data",
|
|
8512
8512
|
"label": "Data",
|
|
8513
8513
|
"type": "json",
|
|
8514
|
+
"description": "The rows to render. Optional only because `rowModel` can supply them instead; a grid with neither renders empty. When both are present `data` wins.",
|
|
8514
8515
|
"group": "common"
|
|
8515
8516
|
},
|
|
8516
8517
|
{
|
|
@@ -8533,6 +8534,13 @@ var GENERATED_UI_SURFACE = {
|
|
|
8533
8534
|
"description": "Scheduler / calendar mode. When set, the grid renders its rows as events on a Month / Week / Day / Agenda calendar instead of a table. See .",
|
|
8534
8535
|
"group": "common"
|
|
8535
8536
|
},
|
|
8537
|
+
{
|
|
8538
|
+
"key": "gantt",
|
|
8539
|
+
"label": "Gantt",
|
|
8540
|
+
"type": "json",
|
|
8541
|
+
"description": "Gantt mode. When set, the grid renders its rows as a task table beside a time chart: one bar per row by start / end, a work-breakdown tree from `parentField`, and dependency arrows. See . A view of the grid like the board and scheduler; the renderer ships in `@svgrid/enterprise` (call `enableGanttView()`).",
|
|
8542
|
+
"group": "common"
|
|
8543
|
+
},
|
|
8536
8544
|
{
|
|
8537
8545
|
"key": "chart",
|
|
8538
8546
|
"label": "Chart",
|
|
@@ -8949,11 +8957,42 @@ var GENERATED_UI_SURFACE = {
|
|
|
8949
8957
|
"description": "Prepend a header row (the column labels) to copied cell ranges, so pasting into Excel / Sheets includes the headers. Applies per copied range.",
|
|
8950
8958
|
"group": "common"
|
|
8951
8959
|
},
|
|
8960
|
+
{
|
|
8961
|
+
"key": "processCellForFill",
|
|
8962
|
+
"label": "Process Cell For Fill",
|
|
8963
|
+
"type": "json",
|
|
8964
|
+
"description": "Decide what the fill handle writes into one cell, ahead of the grid's own pattern rules (series, weekdays, \"Item 1\"). Receives the source cell's value and how far the target sits from it; return the value to write, or `undefined` to let the pattern decide. A spreadsheet uses it to move a formula's references by the distance filled, which the pattern rules would otherwise mangle (\"=A1+B1\" reads as \"Item 1\").",
|
|
8965
|
+
"code": true,
|
|
8966
|
+
"group": "advanced"
|
|
8967
|
+
},
|
|
8952
8968
|
{
|
|
8953
8969
|
"key": "processCellForClipboard",
|
|
8954
8970
|
"label": "Process Cell For Clipboard",
|
|
8955
8971
|
"type": "json",
|
|
8956
|
-
"
|
|
8972
|
+
"code": true,
|
|
8973
|
+
"group": "advanced"
|
|
8974
|
+
},
|
|
8975
|
+
{
|
|
8976
|
+
"key": "includeCollapsedRows",
|
|
8977
|
+
"label": "Include Collapsed Rows",
|
|
8978
|
+
"type": "json",
|
|
8979
|
+
"description": "Whether a collapsed row still takes part in a copy or a fill that spans it. Left out, both skip every collapsed row, which is what \"filter, copy, paste\" needs and what a fill dragged over a filtered list expects: the series runs over the rows that show. A spreadsheet answers per row: a row hidden by hand is copied and filled, as Excel does, while a row a filter folded away is not.",
|
|
8980
|
+
"code": true,
|
|
8981
|
+
"group": "advanced"
|
|
8982
|
+
},
|
|
8983
|
+
{
|
|
8984
|
+
"key": "clipboardHtml",
|
|
8985
|
+
"label": "Clipboard Html",
|
|
8986
|
+
"type": "json",
|
|
8987
|
+
"description": "An HTML rendering of what Ctrl+C copies, written to the clipboard as `text/html` beside the TSV. Excel and Google Sheets read the HTML first, so a table with inline styles pastes into them with its formats, and the same markup can carry what the text cannot (a formula in a `data-` attribute) for a round trip back into a grid that reads it. Called after every cell has been through `processCellForClipboard`, with the rectangles copied and the text about to be written. Return nothing to write text alone. Runs synchronously inside the key press, which is what the clipboard needs.",
|
|
8988
|
+
"code": true,
|
|
8989
|
+
"group": "advanced"
|
|
8990
|
+
},
|
|
8991
|
+
{
|
|
8992
|
+
"key": "processCellFromClipboard",
|
|
8993
|
+
"label": "Process Cell From Clipboard",
|
|
8994
|
+
"type": "json",
|
|
8995
|
+
"description": "Transform each cell on its way IN from the clipboard, before the grid coerces it for the column's editor. Symmetric with `processCellForClipboard`: the pair is what lets a round trip survive. Receives the raw clipboard text for the cell plus where it is landing. Return the value to write, or `undefined` to leave the cell untouched. This is also the seam a feature pack uses to take over a paste entirely: `@svgrid/enterprise`'s paste-special reads the clipboard's `text/html` for formats and formulas and writes through here.",
|
|
8957
8996
|
"code": true,
|
|
8958
8997
|
"group": "advanced"
|
|
8959
8998
|
},
|
|
@@ -8964,6 +9003,13 @@ var GENERATED_UI_SURFACE = {
|
|
|
8964
9003
|
"description": "Inline cell editing: F2 or double-click opens an editor in the active cell, Enter commits, Esc cancels. Off by default. A column still needs an `editorType` to pick its editor (text, number, date, checkbox, list, ...); without one it gets a plain text editor. `editable` is the shortcut alias and wins over this.",
|
|
8965
9004
|
"group": "common"
|
|
8966
9005
|
},
|
|
9006
|
+
{
|
|
9007
|
+
"key": "editOnSecondClick",
|
|
9008
|
+
"label": "Edit On Second Click",
|
|
9009
|
+
"type": "boolean",
|
|
9010
|
+
"description": "A click on the cell that is already active opens its editor, the way a second click on a selected file name starts renaming it. On by default. A spreadsheet turns it off: Excel edits on double-click or F2 only, and a user clicking the cell they are on to get back to it after a dialog would otherwise find the next shortcut typed into an editor.",
|
|
9011
|
+
"group": "common"
|
|
9012
|
+
},
|
|
8967
9013
|
{
|
|
8968
9014
|
"key": "fullRowEditing",
|
|
8969
9015
|
"label": "Full Row Editing",
|
|
@@ -9139,6 +9185,34 @@ var GENERATED_UI_SURFACE = {
|
|
|
9139
9185
|
"description": "Which rows feed the min/max range that `colorScale` / `dataBar` formats scale against. - `filtered` (default): every row that survives the filters, ignoring the page slice. The scale follows what you filtered to but does not shift when you page, so the same value keeps the same colour on page 1 and page 2. - `visible`: only the rows currently on screen. Rescales per page - use it when you want each page's heat map normalized to that page. - `all`: the full unfiltered dataset, for a scale that stays put as you filter.",
|
|
9140
9186
|
"group": "common"
|
|
9141
9187
|
},
|
|
9188
|
+
{
|
|
9189
|
+
"key": "rowPlaceholder",
|
|
9190
|
+
"label": "Row Placeholder",
|
|
9191
|
+
"type": "json",
|
|
9192
|
+
"description": "Marks a row as one whose data has not arrived: `\"loading\"` draws a shimmer in every cell, `\"failed\"` draws a full-width \"could not load\" row with a Retry button, and `null` (the default for every row) renders normally. Placeholder rows are inert - not selectable, not editable, and skipped by cell navigation - because there is nothing there to act on yet. `createServerDataSource` in `infinite` mode fills the gaps with rows this recognises, so the usual wiring is `rowPlaceholder={rowPlaceholderState}` (or nothing at all, via `rowModel`).",
|
|
9193
|
+
"code": true,
|
|
9194
|
+
"group": "advanced"
|
|
9195
|
+
},
|
|
9196
|
+
{
|
|
9197
|
+
"key": "rowModel",
|
|
9198
|
+
"label": "Row Model",
|
|
9199
|
+
"type": "json",
|
|
9200
|
+
"description": "Drive the grid from a row model instead of wiring a dozen props. `createServerDataSource` returns one, and so does the Enterprise server-side row model, so server-backed grids become: ```svelte <SvGrid rowModel={ctl} {columns} /> ``` The model supplies `data`, `loading`, `getRowId`, the external sort and filter wiring, the visible range, placeholder rows, group accessors, selection and paging - each one only if it implements that part. A prop written explicitly on the grid always wins, so you can adopt it and still override one piece.",
|
|
9201
|
+
"group": "common"
|
|
9202
|
+
},
|
|
9203
|
+
{
|
|
9204
|
+
"key": "pivotResultColumns",
|
|
9205
|
+
"label": "Pivot Result Columns",
|
|
9206
|
+
"type": "json",
|
|
9207
|
+
"description": "Columns that REPLACE `columns` while set. The server-side row model supplies them in pivot mode - one column per pivoted value, grouped under a header per pivot key - and clears them when pivot mode ends, so `columns` stays the app's own list. Rarely set by hand.",
|
|
9208
|
+
"group": "common"
|
|
9209
|
+
},
|
|
9210
|
+
{
|
|
9211
|
+
"key": "rowSelectionModel",
|
|
9212
|
+
"label": "Row Selection Model",
|
|
9213
|
+
"type": "json",
|
|
9214
|
+
"group": "common"
|
|
9215
|
+
},
|
|
9142
9216
|
{
|
|
9143
9217
|
"key": "isDetailRow",
|
|
9144
9218
|
"label": "Is Detail Row",
|
|
@@ -9147,11 +9221,41 @@ var GENERATED_UI_SURFACE = {
|
|
|
9147
9221
|
"code": true,
|
|
9148
9222
|
"group": "advanced"
|
|
9149
9223
|
},
|
|
9224
|
+
{
|
|
9225
|
+
"key": "detailRowHeight",
|
|
9226
|
+
"label": "Detail Row Height",
|
|
9227
|
+
"type": "number",
|
|
9228
|
+
"description": "The height of a detail row, in px, or a function of its data. With it the virtualizer can size detail rows, so master-detail works with `virtualization` on (the panel scrolls inside its cell when taller). Without it a detail row is auto height, which needs `virtualization={false}`.",
|
|
9229
|
+
"group": "common"
|
|
9230
|
+
},
|
|
9231
|
+
{
|
|
9232
|
+
"key": "showDetailToggle",
|
|
9233
|
+
"label": "Show Detail Toggle",
|
|
9234
|
+
"type": "boolean",
|
|
9235
|
+
"description": "A row-header column of chevrons that open and close detail rows. It sits with the row-number and selection columns: sticky at the left, no column menu, not resizable, not reorderable, outside the active cell and the selection. The chevron calls `onDetailToggle` (or, on a server row model, the model's own toggle) and reads `isDetailOpen` for its direction; `hasDetail` hides it on rows that have nothing to open. Detail rows themselves get an empty cell.",
|
|
9236
|
+
"group": "common"
|
|
9237
|
+
},
|
|
9238
|
+
{
|
|
9239
|
+
"key": "isDetailOpen",
|
|
9240
|
+
"label": "Is Detail Open",
|
|
9241
|
+
"type": "json",
|
|
9242
|
+
"description": "Whether the detail under a row is open: the chevron's direction and `aria-expanded`.",
|
|
9243
|
+
"code": true,
|
|
9244
|
+
"group": "advanced"
|
|
9245
|
+
},
|
|
9246
|
+
{
|
|
9247
|
+
"key": "hasDetail",
|
|
9248
|
+
"label": "Has Detail",
|
|
9249
|
+
"type": "json",
|
|
9250
|
+
"description": "Whether a row has a detail to open; the chevron is left out where this returns false.",
|
|
9251
|
+
"code": true,
|
|
9252
|
+
"group": "advanced"
|
|
9253
|
+
},
|
|
9150
9254
|
{
|
|
9151
9255
|
"key": "serverGroup",
|
|
9152
9256
|
"label": "Server Group",
|
|
9153
9257
|
"type": "json",
|
|
9154
|
-
"description": "Server-side group / tree keyboard + accessibility, built into the grid. When set, the grid uses the treegrid role and marks matching rows with `aria-level` / `aria-expanded`, and ArrowRight / ArrowLeft expand / collapse the focused group row (no app-level key handling). Pair with `serverGroupRows` + `SvGroupCell` for the visual expander. Every accessor receives the row data.",
|
|
9258
|
+
"description": "Server-side group / tree keyboard + accessibility, built into the grid. When set, the grid uses the treegrid role and marks matching rows with `aria-level` / `aria-expanded`, and ArrowRight / ArrowLeft expand / collapse the focused group row (no app-level key handling). Pair with `serverGroupRows` + `SvGroupCell` from `@svgrid/enterprise` for the visual expander, or drive it from your own tree state. Every accessor receives the row data.",
|
|
9155
9259
|
"group": "common"
|
|
9156
9260
|
},
|
|
9157
9261
|
{
|
|
@@ -9169,6 +9273,27 @@ var GENERATED_UI_SURFACE = {
|
|
|
9169
9273
|
"description": "Rows to pin to the TOP of the grid - rendered above the regular rows and sticky-positioned so they stay visible while the user scrolls. Typical use: a \"totals\" or \"headline\" row that should always be in view. Rows are read-only (no inline editing, no row-selection checkbox). They share the column schema with the main grid; field/format/cell/cellClass all apply.",
|
|
9170
9274
|
"group": "common"
|
|
9171
9275
|
},
|
|
9276
|
+
{
|
|
9277
|
+
"key": "frozenRows",
|
|
9278
|
+
"label": "Frozen Rows",
|
|
9279
|
+
"type": "number",
|
|
9280
|
+
"description": "Freeze the first N rows: they stay under the header while the body scrolls, and unlike `pinnedTopRows` they are the grid's own rows, still editable, selectable and numbered as rows 1..N. Excel's Freeze Panes, for the row half; the column half is `columnPinning`. Under `virtualization` the frozen rows are always rendered and the window skips them.",
|
|
9281
|
+
"group": "common"
|
|
9282
|
+
},
|
|
9283
|
+
{
|
|
9284
|
+
"key": "stickyGroupRows",
|
|
9285
|
+
"label": "Sticky Group Rows",
|
|
9286
|
+
"type": "boolean",
|
|
9287
|
+
"description": "Keep the group a row belongs to in view: while the rows of an open group scroll past, the group's row (and its parents' rows) stay under the header, the way a section heading stays put in a long list, so a screen deep inside a 60,000-row group still says which group it is. Works for server-side groups (`rowModel` / `serverGroup`), client grouping and tree data. Under `virtualization` the band shows a copy of each ancestor row; without it the rows themselves stick. Off by default.",
|
|
9288
|
+
"group": "common"
|
|
9289
|
+
},
|
|
9290
|
+
{
|
|
9291
|
+
"key": "mergedCells",
|
|
9292
|
+
"label": "Merged Cells",
|
|
9293
|
+
"type": "json",
|
|
9294
|
+
"description": "Merged cells: rectangles drawn as one cell, a spreadsheet's Merge & Center. Each entry is the top-left cell (display indices) and how many rows and columns it covers. The origin's td takes the span and shows the origin's value; the covered cells are not drawn, a selection grows to whole merges, the active cell inside a merge is its origin, and the arrow keys step over a merge as one cell. A merge that crosses the frozen boundary or the rendered window is drawn in parts, one per band. The grid does not write into covered cells on its own; a consumer that merges cells keeps them empty or marks them read-only through the column's `editable`.",
|
|
9295
|
+
"group": "common"
|
|
9296
|
+
},
|
|
9172
9297
|
{
|
|
9173
9298
|
"key": "pinnedBottomRows",
|
|
9174
9299
|
"label": "Pinned Bottom Rows",
|
|
@@ -9245,6 +9370,24 @@ var GENERATED_UI_SURFACE = {
|
|
|
9245
9370
|
"prop": "onPaginationChange",
|
|
9246
9371
|
"description": "Fires when the user changes page or page size while `externalPagination` is on. Fetch that page and update `data` / `rowCount` / `pageIndex`."
|
|
9247
9372
|
},
|
|
9373
|
+
{
|
|
9374
|
+
"key": "columnResize",
|
|
9375
|
+
"label": "Column Resize",
|
|
9376
|
+
"prop": "onColumnResize",
|
|
9377
|
+
"description": "The user dragged a column's edge (or double-clicked it to autosize). Programmatic `api.setColumnWidth` does not fire it."
|
|
9378
|
+
},
|
|
9379
|
+
{
|
|
9380
|
+
"key": "rowResize",
|
|
9381
|
+
"label": "Row Resize",
|
|
9382
|
+
"prop": "onRowResize",
|
|
9383
|
+
"description": "The user dragged a row's edge, or double-clicked it: `height` is then `null`, the row back at its declared height. Programmatic `api.setRowHeight` does not fire it."
|
|
9384
|
+
},
|
|
9385
|
+
{
|
|
9386
|
+
"key": "pasteClipboard",
|
|
9387
|
+
"label": "Paste Clipboard",
|
|
9388
|
+
"prop": "onPasteClipboard",
|
|
9389
|
+
"description": "Take over a paste. Receives the clipboard's `text/plain` and, when the source put one there, its `text/html` (Excel's carries formats and formulas; a grid's own `clipboardHtml` carries whatever it chose to). Return `true` to say the paste was applied; anything else lets the grid paste the text as it always has. Runs inside one history group, so every `setCellValue` and `recordUndo` the handler makes is one Ctrl+Z. With this set, Ctrl+V lets the browser's own `paste` event through (that is where the unsanitised HTML is), and the async Clipboard API is the fallback for a browser that does not deliver it. `source` says which path the payload came by."
|
|
9390
|
+
},
|
|
9248
9391
|
{
|
|
9249
9392
|
"key": "apiReady",
|
|
9250
9393
|
"label": "Api Ready",
|
|
@@ -9261,7 +9404,7 @@ var GENERATED_UI_SURFACE = {
|
|
|
9261
9404
|
"key": "cellSelectionChange",
|
|
9262
9405
|
"label": "Cell Selection Change",
|
|
9263
9406
|
"prop": "onCellSelectionChange",
|
|
9264
|
-
"description": "Fires whenever the cell
|
|
9407
|
+
"description": "Fires whenever the cell selection changes (mouse, keyboard, or `api.selectCells()`). `ranges` is every selected rectangle, matching `api.getSelected()`: the ones a Ctrl+click committed and the active one last, each `[rowStart, colStart, rowEnd, colEnd]` in grid coords. Empty array when the user clears the selection."
|
|
9265
9408
|
},
|
|
9266
9409
|
{
|
|
9267
9410
|
"key": "sortingChange",
|
|
@@ -9329,6 +9472,24 @@ var GENERATED_UI_SURFACE = {
|
|
|
9329
9472
|
"prop": "onScrollBottomReached",
|
|
9330
9473
|
"description": "Fires once each time the body is scrolled to (within ~32px of) the bottom. Re-arms after the user scrolls back up. The canonical hook for infinite / lazy loading - append more rows to `data` when it fires."
|
|
9331
9474
|
},
|
|
9475
|
+
{
|
|
9476
|
+
"key": "visibleRangeChange",
|
|
9477
|
+
"label": "Visible Range Change",
|
|
9478
|
+
"prop": "onVisibleRangeChange",
|
|
9479
|
+
"description": "Fires when the range of rows on screen changes, with the first and last row INDEX (not pixels). Coalesced to one call per frame, so it is cheap to wire to something that fetches. This is the hook a block-loading data source needs and `onScrollBottomReached` cannot give it: \"the user is looking at rows 4,000-4,020\" answers which block to fetch and which to keep, while \"they hit the bottom\" only ever means \"append more\". Both are free; use this one with `createServerDataSource({ mode: 'infinite' })`, or let `rowModel` wire it for you. Reports `0, data.length - 1` when virtualization is off, since every row really is rendered."
|
|
9480
|
+
},
|
|
9481
|
+
{
|
|
9482
|
+
"key": "retryRow",
|
|
9483
|
+
"label": "Retry Row",
|
|
9484
|
+
"prop": "onRetryRow",
|
|
9485
|
+
"description": "Called by the Retry button on a `\"failed\"` placeholder row."
|
|
9486
|
+
},
|
|
9487
|
+
{
|
|
9488
|
+
"key": "detailToggle",
|
|
9489
|
+
"label": "Detail Toggle",
|
|
9490
|
+
"prop": "onDetailToggle",
|
|
9491
|
+
"description": "Open or close the detail under a row. The chevron of `showDetailToggle` and Ctrl+Enter on a row call it; you keep the open set and insert or remove the detail row in `data`. A server row model supplies its own (the `rowModel` prop wires `toggleDetail`), so this is the client side."
|
|
9492
|
+
},
|
|
9332
9493
|
{
|
|
9333
9494
|
"key": "columnOrderChange",
|
|
9334
9495
|
"label": "Column Order Change",
|
|
@@ -9340,6 +9501,12 @@ var GENERATED_UI_SURFACE = {
|
|
|
9340
9501
|
"label": "Row Drag End",
|
|
9341
9502
|
"prop": "onRowDragEnd",
|
|
9342
9503
|
"description": "Fires on the TARGET grid after a managed row drag settles, with the moved row, its landing index, whether it stayed in the same grid, and the source / target grid ids. Use it to mirror the move into your own state (persistence, server sync). The grid has already applied the change to its internal data by the time this fires."
|
|
9504
|
+
},
|
|
9505
|
+
{
|
|
9506
|
+
"key": "rowDrop",
|
|
9507
|
+
"label": "Row Drop",
|
|
9508
|
+
"prop": "onRowDrop",
|
|
9509
|
+
"description": "Take the drop yourself. With this set the grid keeps the drag affordance and the drop indicator but does not touch its data: the handler gets the dragged row, the row it landed on (null for the empty space below the rows) and the side - `before` / `after`, or `into` when it landed on the middle of a group or tree row, which makes it that row's child. The path for a `rowModel`, whose rows the grid does not own: hand the move to the model (`moveRow`) or to your server. Only fires within one grid; a drop from another grid stays managed."
|
|
9343
9510
|
}
|
|
9344
9511
|
]
|
|
9345
9512
|
}
|
|
@@ -12086,6 +12253,10 @@ var blockPalette = [
|
|
|
12086
12253
|
kind: "detail",
|
|
12087
12254
|
label: "Detail page"
|
|
12088
12255
|
},
|
|
12256
|
+
{
|
|
12257
|
+
kind: "sheet",
|
|
12258
|
+
label: "Spreadsheet"
|
|
12259
|
+
},
|
|
12089
12260
|
{
|
|
12090
12261
|
kind: "filter",
|
|
12091
12262
|
label: "Filter panel"
|
|
@@ -12277,6 +12448,10 @@ function defaultBlockConfig(kind, entity) {
|
|
|
12277
12448
|
...metrics.length ? { metricFields: metrics } : {}
|
|
12278
12449
|
};
|
|
12279
12450
|
}
|
|
12451
|
+
case "sheet": return {
|
|
12452
|
+
kind,
|
|
12453
|
+
totals: entity.fields.some((f) => f.type === "number" && !f.primaryKey)
|
|
12454
|
+
};
|
|
12280
12455
|
case "component": return {
|
|
12281
12456
|
kind,
|
|
12282
12457
|
component: "",
|
|
@@ -12308,6 +12483,7 @@ var DEFAULT_SPAN = {
|
|
|
12308
12483
|
board: 3,
|
|
12309
12484
|
calendar: 3,
|
|
12310
12485
|
detail: 3,
|
|
12486
|
+
sheet: 3,
|
|
12311
12487
|
component: 1
|
|
12312
12488
|
};
|
|
12313
12489
|
function makeBlock(kind, entity, taken) {
|
|
@@ -13227,6 +13403,7 @@ function dockPaneTitle(block) {
|
|
|
13227
13403
|
accordion: "Accordion",
|
|
13228
13404
|
kpi: "KPI",
|
|
13229
13405
|
gauge: "Gauge",
|
|
13406
|
+
sheet: "Spreadsheet",
|
|
13230
13407
|
component: "Component"
|
|
13231
13408
|
}[c.kind] || "Panel";
|
|
13232
13409
|
}
|
|
@@ -15851,7 +16028,7 @@ function hasFieldConditions(schema) {
|
|
|
15851
16028
|
*
|
|
15852
16029
|
* `version.test.ts` asserts this matches `package.json`, so the two cannot drift.
|
|
15853
16030
|
*/
|
|
15854
|
-
var SVGRID_VERSION = "3.0.
|
|
16031
|
+
var SVGRID_VERSION = "3.0.3";
|
|
15855
16032
|
//#endregion
|
|
15856
16033
|
//#region src/studio/emit-project.ts
|
|
15857
16034
|
var has = (blocks, kind) => blocks.some((b) => b.config.kind === kind);
|
|
@@ -16189,6 +16366,17 @@ ${panels}
|
|
|
16189
16366
|
const onOpen = openRoute ? ` onOpen={(id) => goto('/${openRoute}?id=' + encodeURIComponent(id))}` : "";
|
|
16190
16367
|
return ` <div ${wrapperStyle(block)}${cls}>
|
|
16191
16368
|
<SvBoard schema={${schemaVar}} rows={allRows} loading={!allRowsReady} groupBy=${JSON.stringify(cfg.groupBy)} titleField=${JSON.stringify(asText(cfg.titleField))}${badge}${sub}${onOpen} height={${h}} onMove={(id, value) => { allRows = allRows.map((r) => String((r as Record<string, unknown>)[idField]) === String(id) ? ({ ...r, ['${cfg.groupBy}']: value }) : r) }} />
|
|
16369
|
+
</div>`;
|
|
16370
|
+
}
|
|
16371
|
+
case "sheet": {
|
|
16372
|
+
const h = block.height ?? 480;
|
|
16373
|
+
const specs = (cfg.fields?.length ? cfg.fields : entity.fields.map((f) => f.field)).map((field) => ({
|
|
16374
|
+
field,
|
|
16375
|
+
label: entity.fields.find((f) => f.field === field)?.label ?? field
|
|
16376
|
+
}));
|
|
16377
|
+
const sheetName = (entity.label ?? entity.name).replace(/[[\]:*?/\\]/g, " ").trim().slice(0, 31) || "Sheet1";
|
|
16378
|
+
return ` <div ${wrapperStyle(block, `min-height: ${h}px`)}${cls}>
|
|
16379
|
+
{#if allRowsReady}<SvSheet data={[{ name: ${JSON.stringify(sheetName)}, cells: sheetCellsFromRows(${rowsExpr}, ${JSON.stringify(specs)}, { totals: ${cfg.totals ? "true" : "false"} }) }]} height={${h}} />{/if}
|
|
16192
16380
|
</div>`;
|
|
16193
16381
|
}
|
|
16194
16382
|
case "calendar": {
|
|
@@ -17524,7 +17712,7 @@ function screenPage(schema, rawSchema, screen, resolve, rawResolve, accessEnable
|
|
|
17524
17712
|
const apiVarFor = (b) => codeGrid && b.id === codeGridBlockId ? "gridApi" : b.config.kind === "grid" && gridHasExport(b.config) ? `gridApi_${b.id.replace(/-/g, "_")}` : void 0;
|
|
17525
17713
|
const exportApiVars = blocks.filter((b) => b.config.kind === "grid" && gridHasExport(b.config) && !(codeGrid && b.id === codeGridBlockId)).map((b) => `gridApi_${b.id.replace(/-/g, "_")}`);
|
|
17526
17714
|
const needsGridApiType = codeGrid || exportApiVars.length > 0;
|
|
17527
|
-
const needsAllRows = hasAgg || hasMD || hasPivot || hasBoundComponent || hasGroupedGrid || hasTreeGrid || hasSchedulerGrid || has(allBlocks, "board") || has(allBlocks, "calendar") || has(allBlocks, "detail");
|
|
17715
|
+
const needsAllRows = hasAgg || hasMD || hasPivot || hasBoundComponent || hasGroupedGrid || hasTreeGrid || hasSchedulerGrid || has(allBlocks, "board") || has(allBlocks, "calendar") || has(allBlocks, "detail") || has(allBlocks, "sheet");
|
|
17528
17716
|
const gridSpecs = [];
|
|
17529
17717
|
if (needsController) gridSpecs.push("SvGrid", "createServerDataSource", ...hasRowActions || hasCellRenderers || hasTreeGrid ? ["renderSnippet", "type CellContext"] : [], "type ServerState");
|
|
17530
17718
|
if (usesScheduler) gridSpecs.push("SvGrid");
|
|
@@ -17550,6 +17738,7 @@ function screenPage(schema, rawSchema, screen, resolve, rawResolve, accessEnable
|
|
|
17550
17738
|
if (has(allBlocks, "board")) entImports.push("SvBoard");
|
|
17551
17739
|
if (has(allBlocks, "calendar")) entImports.push("schemaToColumns");
|
|
17552
17740
|
if (has(allBlocks, "detail")) entImports.push("SvRecordDetail");
|
|
17741
|
+
if (has(allBlocks, "sheet")) entImports.push("SvSheet", "sheetCellsFromRows");
|
|
17553
17742
|
if (has(allBlocks, "kpi") || has(allBlocks, "gauge") || hasAggregateBinding) entImports.push("reduceValue");
|
|
17554
17743
|
const kpiCfgs = allBlocks.filter((b) => b.config.kind === "kpi").map((b) => b.config);
|
|
17555
17744
|
if (kpiCfgs.some((c) => c.format && c.format !== "auto")) entImports.push("formatKpiValue");
|
|
@@ -41575,21 +41764,26 @@ function parseLicenseExpiry(key) {
|
|
|
41575
41764
|
function checkLicenseKey(key, now = /* @__PURE__ */ new Date()) {
|
|
41576
41765
|
if (key == null || key === "") return {
|
|
41577
41766
|
status: "unset",
|
|
41578
|
-
valid: false
|
|
41767
|
+
valid: false,
|
|
41768
|
+
edition: "suite"
|
|
41579
41769
|
};
|
|
41580
41770
|
if (!key.startsWith("SVENTERPRISE-")) return {
|
|
41581
41771
|
status: "invalid",
|
|
41582
|
-
valid: false
|
|
41772
|
+
valid: false,
|
|
41773
|
+
edition: "suite"
|
|
41583
41774
|
};
|
|
41584
41775
|
if (REVOKED_KEYS.has(key)) return {
|
|
41585
41776
|
status: "revoked",
|
|
41586
|
-
valid: false
|
|
41777
|
+
valid: false,
|
|
41778
|
+
edition: "suite"
|
|
41587
41779
|
};
|
|
41588
41780
|
const expiresAt = parseLicenseExpiry(key) ?? void 0;
|
|
41589
41781
|
const expired = expiresAt ? now.getTime() > expiresAt.getTime() : void 0;
|
|
41782
|
+
const status = key.startsWith("SVENTERPRISE-DEV") ? "dev" : key.startsWith("SVENTERPRISE-EVAL") ? "eval" : "licensed";
|
|
41590
41783
|
return {
|
|
41591
|
-
status
|
|
41784
|
+
status,
|
|
41592
41785
|
valid: true,
|
|
41786
|
+
edition: status === "licensed" && key.startsWith(`SVENTERPRISE-GRID-`) ? "grid" : "suite",
|
|
41593
41787
|
expiresAt,
|
|
41594
41788
|
expired
|
|
41595
41789
|
};
|
package/dist/pivot-chart.d.ts
CHANGED
|
@@ -13,16 +13,40 @@
|
|
|
13
13
|
* measure). The grand-total column is excluded unless `includeTotals`.
|
|
14
14
|
* - values = each leaf row's aggregated cell for that series column.
|
|
15
15
|
*/
|
|
16
|
-
import type
|
|
16
|
+
import { type CellFormatConfig, type ChartSpec, type ChartType, type TableFeatures } from '@svgrid/grid';
|
|
17
17
|
import type { PivotResult } from './pivot.js';
|
|
18
|
+
/** Options for {@link pivotToChartSpec}: the chart type and stacking, whether totals chart, a category cap, the measure's format and the value-axis name. */
|
|
18
19
|
export type PivotChartOptions = {
|
|
19
20
|
/** Chart type. Default `'bar'`. */
|
|
20
21
|
type?: ChartType;
|
|
21
22
|
/** Stack the series. Default false. */
|
|
22
23
|
stacked?: boolean;
|
|
24
|
+
/** Stack to 100%. Implies `stacked`. Default false. */
|
|
25
|
+
stacked100?: boolean;
|
|
23
26
|
/** Include the grand-total column / row as a series / category. Default false. */
|
|
24
27
|
includeTotals?: boolean;
|
|
25
28
|
/** Cap the number of categories (row leaves) charted. */
|
|
26
29
|
maxCategories?: number;
|
|
30
|
+
/**
|
|
31
|
+
* The measure's cell format, carried to the chart as `valueFormat` (with
|
|
32
|
+
* `currency` and `locale`), so a cell the table shows as "$469,662" charts
|
|
33
|
+
* as "$470k" on the axis and "$469,662" in the tooltip rather than "470k".
|
|
34
|
+
* The designer passes the first value chip's format; with several
|
|
35
|
+
* measures in different formats, pass none and the chart formats plainly.
|
|
36
|
+
*/
|
|
37
|
+
format?: CellFormatConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Name the value axis. Default: the measure's label when the layout has
|
|
40
|
+
* one measure, nothing otherwise.
|
|
41
|
+
*/
|
|
42
|
+
yAxisTitle?: string | null;
|
|
27
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* A computed pivot as a `ChartSpec` for the free chart: row leaves become
|
|
46
|
+
* categories (nested rows a grouped axis), column leaves the series, totals
|
|
47
|
+
* left out unless asked for, the measure's format carried over and an empty
|
|
48
|
+
* cell read as a gap. The designer's Chart view is this function, and the
|
|
49
|
+
* grid's own Chart panel runs the same mapping (`pivotResultToChartSpec` in
|
|
50
|
+
* `@svgrid/grid`) in pivot mode.
|
|
51
|
+
*/
|
|
28
52
|
export declare function pivotToChartSpec<TFeatures extends TableFeatures>(result: PivotResult<TFeatures>, opts?: PivotChartOptions): ChartSpec;
|
package/dist/pivot-chart.js
CHANGED
|
@@ -1,71 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pivot -> chart bridge.
|
|
3
|
+
*
|
|
4
|
+
* Turns a computed {@link PivotResult} (the row/column/value matrix the pivot
|
|
5
|
+
* engine produces) into a core {@link ChartSpec} the free `SvGridChart` can
|
|
6
|
+
* render - so one pivot layout drives both a table and a chart (the Excel
|
|
7
|
+
* PivotTable <-> PivotChart pairing).
|
|
8
|
+
*
|
|
9
|
+
* Mapping:
|
|
10
|
+
* - categories = the row-axis LEAF rows (deepest grouping; subtotals and the
|
|
11
|
+
* grand-total row are skipped). With no row dims, the single total row.
|
|
12
|
+
* - series = the column-axis leaf value columns (one per col-path x
|
|
13
|
+
* measure). The grand-total column is excluded unless `includeTotals`.
|
|
14
|
+
* - values = each leaf row's aggregated cell for that series column.
|
|
15
|
+
*/
|
|
16
|
+
import { pivotResultToChartSpec } from '@svgrid/grid';
|
|
17
|
+
/**
|
|
18
|
+
* A computed pivot as a `ChartSpec` for the free chart: row leaves become
|
|
19
|
+
* categories (nested rows a grouped axis), column leaves the series, totals
|
|
20
|
+
* left out unless asked for, the measure's format carried over and an empty
|
|
21
|
+
* cell read as a gap. The designer's Chart view is this function, and the
|
|
22
|
+
* grid's own Chart panel runs the same mapping (`pivotResultToChartSpec` in
|
|
23
|
+
* `@svgrid/grid`) in pivot mode.
|
|
24
|
+
*/
|
|
1
25
|
export function pivotToChartSpec(result, opts = {}) {
|
|
2
|
-
|
|
3
|
-
// Category rows: the row-axis leaves. Fall back to the grand-total (single
|
|
4
|
-
// "All") row when no row dims are configured, then to every row.
|
|
5
|
-
let catRows = result.rows.filter((r) => r.__pivotKind === 'leaf');
|
|
6
|
-
if (!catRows.length)
|
|
7
|
-
catRows = result.rows.filter((r) => r.__pivotKind === 'grandTotal');
|
|
8
|
-
if (!catRows.length)
|
|
9
|
-
catRows = result.rows.slice();
|
|
10
|
-
if (opts.maxCategories && catRows.length > opts.maxCategories) {
|
|
11
|
-
catRows = catRows.slice(0, opts.maxCategories);
|
|
12
|
-
}
|
|
13
|
-
// Categories are the leaf's OWN label; when rows are nested, emit a parent
|
|
14
|
-
// tier (categoryGroups) so the axis reads "Americas | Canada · USA ..." as a
|
|
15
|
-
// grouped axis rather than colliding on a bare repeated leaf label.
|
|
16
|
-
const byId = new Map(result.rows.map((r) => [r.__pivotId, r]));
|
|
17
|
-
const ownLabel = (r) => String(r.__pivotLabel ?? '').trim() || '(blank)';
|
|
18
|
-
const categories = catRows.map(ownLabel);
|
|
19
|
-
const parentOf = (r) => r.__pivotParentId ? byId.get(r.__pivotParentId) : undefined;
|
|
20
|
-
const nested = catRows.length > 0 && catRows.every((r) => parentOf(r) !== undefined);
|
|
21
|
-
let categoryGroups;
|
|
22
|
-
if (nested) {
|
|
23
|
-
categoryGroups = [];
|
|
24
|
-
let prevId;
|
|
25
|
-
for (const r of catRows) {
|
|
26
|
-
const pid = r.__pivotParentId;
|
|
27
|
-
const last = categoryGroups[categoryGroups.length - 1];
|
|
28
|
-
if (last && pid === prevId)
|
|
29
|
-
last.span += 1;
|
|
30
|
-
else {
|
|
31
|
-
categoryGroups.push({ label: ownLabel(parentOf(r)), span: 1 });
|
|
32
|
-
prevId = pid;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
const leaves = [];
|
|
37
|
-
const walk = (cols, path) => {
|
|
38
|
-
for (const c of cols ?? []) {
|
|
39
|
-
if (!c || c.id === '__pivotRowHeader')
|
|
40
|
-
continue;
|
|
41
|
-
// Skip the grand-total column group (and its leaves) unless asked for.
|
|
42
|
-
if (!opts.includeTotals && typeof c.id === 'string' && c.id.startsWith('pv_group__grand'))
|
|
43
|
-
continue;
|
|
44
|
-
if (Array.isArray(c.columns))
|
|
45
|
-
walk(c.columns, [...path, String(c.header ?? '')]);
|
|
46
|
-
else if (typeof c.id === 'string')
|
|
47
|
-
leaves.push({ id: c.id, path, header: String(c.header ?? '') });
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
walk(result.columns, []);
|
|
51
|
-
const filtered = opts.includeTotals ? leaves : leaves.filter((l) => !l.id.includes('__total'));
|
|
52
|
-
const uniqueHeaders = new Set(filtered.map((l) => l.header));
|
|
53
|
-
const series = filtered.map((l) => ({
|
|
54
|
-
label: l.path.length === 0
|
|
55
|
-
? l.header
|
|
56
|
-
: uniqueHeaders.size > 1
|
|
57
|
-
? [...l.path, l.header].join(' · ')
|
|
58
|
-
: l.path.join(' · '),
|
|
59
|
-
values: catRows.map((r) => {
|
|
60
|
-
const v = r[l.id];
|
|
61
|
-
return typeof v === 'number' ? v : Number(v) || 0;
|
|
62
|
-
}),
|
|
63
|
-
}));
|
|
64
|
-
return {
|
|
65
|
-
type,
|
|
66
|
-
categories,
|
|
67
|
-
series,
|
|
68
|
-
...(categoryGroups && categoryGroups.length > 1 ? { categoryGroups } : {}),
|
|
69
|
-
...(opts.stacked ? { stacked: true } : {}),
|
|
70
|
-
};
|
|
26
|
+
return pivotResultToChartSpec(result, opts);
|
|
71
27
|
}
|
package/dist/pivot-enable.js
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* prop + config types for free and looks the engine up through the
|
|
7
7
|
* `registerPivotEngine` seam.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* grid shows the
|
|
9
|
+
* Like the rest of Enterprise it runs without a license key during the
|
|
10
|
+
* evaluation; the grid shows the watermark and a one-time console notice.
|
|
11
11
|
*
|
|
12
12
|
* ```ts
|
|
13
13
|
* import { setLicenseKey, enablePivot } from '@svgrid/enterprise'
|
|
@@ -63,6 +63,12 @@ export declare function hasCycle(deps: ReadonlyArray<SchedulerDependency>): bool
|
|
|
63
63
|
* FS / SS / FF / SF semantics plus `lag` (minutes).
|
|
64
64
|
*/
|
|
65
65
|
export declare function requiredStart(predTimes: EventTimes, dep: SchedulerDependency, successorDurationMs: number): Date;
|
|
66
|
+
/** A hard limit on where one event may be scheduled, from a planning
|
|
67
|
+
* constraint (`SNET`, `FNLT` and the rest). Both ends are optional. */
|
|
68
|
+
export type CascadeBound = {
|
|
69
|
+
minStart?: Date;
|
|
70
|
+
maxEnd?: Date;
|
|
71
|
+
};
|
|
66
72
|
/** Options for {@link cascade}. */
|
|
67
73
|
export type CascadeOptions = {
|
|
68
74
|
/**
|
|
@@ -71,6 +77,35 @@ export type CascadeOptions = {
|
|
|
71
77
|
* shifts / business hours; omit for calendar-time scheduling).
|
|
72
78
|
*/
|
|
73
79
|
snapForward?: (start: Date) => Date;
|
|
80
|
+
/**
|
|
81
|
+
* Only what lies downstream of these keys may move: their successors,
|
|
82
|
+
* transitively, and never the keys themselves. A move passes the moved
|
|
83
|
+
* task (a phase move its whole subtree), so a task dropped too early for
|
|
84
|
+
* its predecessor stays where it was dropped with the link drawn as
|
|
85
|
+
* violated instead of springing forward, and a violation elsewhere in the
|
|
86
|
+
* plan is left alone until its own task moves. Omitted, every task in the
|
|
87
|
+
* graph is eligible.
|
|
88
|
+
*/
|
|
89
|
+
from?: Iterable<string>;
|
|
90
|
+
/**
|
|
91
|
+
* Per-key limits the cascade may not push past. A `minStart` raises the floor
|
|
92
|
+
* (the event cannot begin before it); a `maxEnd` caps the ceiling, and a
|
|
93
|
+
* cascade that would need to go further stops AT the cap rather than moving
|
|
94
|
+
* past it. The link is then left unsatisfied, which {@link violations}
|
|
95
|
+
* reports - the honest outcome, because a constraint and a link that
|
|
96
|
+
* disagree have no schedule that satisfies both.
|
|
97
|
+
*/
|
|
98
|
+
bounds?: ReadonlyMap<string, CascadeBound>;
|
|
99
|
+
/**
|
|
100
|
+
* The span a pushed event keeps. By default it keeps its calendar length:
|
|
101
|
+
* `end = start + (end - start)`. A day-granular planner passes working-time
|
|
102
|
+
* arithmetic here so a five-working-day task pushed over a weekend stays
|
|
103
|
+
* five working days long instead of shrinking to three. `endFor` gives the
|
|
104
|
+
* new end for a new start; `startFor` the new start for a capped end (the
|
|
105
|
+
* ceiling case). Both receive the event's times before the push.
|
|
106
|
+
*/
|
|
107
|
+
endFor?: (start: Date, original: EventTimes) => Date;
|
|
108
|
+
startFor?: (end: Date, original: EventTimes) => Date;
|
|
74
109
|
};
|
|
75
110
|
/**
|
|
76
111
|
* Forward-cascade successors so every dependency is satisfied. `times` maps row
|
|
@@ -120,8 +120,26 @@ export function cascade(times, deps, opts = {}) {
|
|
|
120
120
|
const cur = new Map();
|
|
121
121
|
for (const [k, v] of times)
|
|
122
122
|
cur.set(k, { start: v.start, end: v.end });
|
|
123
|
+
// With roots, the eligible set is their downstream closure minus the roots.
|
|
124
|
+
let eligible = null;
|
|
125
|
+
if (opts.from) {
|
|
126
|
+
const roots = new Set(opts.from);
|
|
127
|
+
eligible = new Set();
|
|
128
|
+
const stack = [...roots];
|
|
129
|
+
while (stack.length) {
|
|
130
|
+
const k = stack.pop();
|
|
131
|
+
for (const dep of graph.succ.get(k) ?? []) {
|
|
132
|
+
if (cyclicIds.has(dep.id) || roots.has(dep.to) || eligible.has(dep.to))
|
|
133
|
+
continue;
|
|
134
|
+
eligible.add(dep.to);
|
|
135
|
+
stack.push(dep.to);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
123
139
|
const changed = new Map();
|
|
124
140
|
for (const key of order) {
|
|
141
|
+
if (eligible && !eligible.has(key))
|
|
142
|
+
continue;
|
|
125
143
|
const links = graph.pred.get(key);
|
|
126
144
|
if (!links || !links.length)
|
|
127
145
|
continue;
|
|
@@ -140,12 +158,29 @@ export function cascade(times, deps, opts = {}) {
|
|
|
140
158
|
if (req > minStartMs)
|
|
141
159
|
minStartMs = req;
|
|
142
160
|
}
|
|
161
|
+
// A floor constraint applies whether or not a link moved the event.
|
|
162
|
+
const bound = opts.bounds?.get(key);
|
|
163
|
+
if (bound?.minStart && bound.minStart.getTime() > minStartMs) {
|
|
164
|
+
minStartMs = bound.minStart.getTime();
|
|
165
|
+
}
|
|
143
166
|
if (minStartMs <= self.start.getTime())
|
|
144
167
|
continue; // already legal - never pull earlier
|
|
145
168
|
let newStart = new Date(minStartMs);
|
|
146
169
|
if (opts.snapForward)
|
|
147
170
|
newStart = opts.snapForward(newStart);
|
|
148
|
-
|
|
171
|
+
// A ceiling stops the cascade at the cap instead of pushing past it. The
|
|
172
|
+
// link stays unsatisfied and `violations` says so, rather than the
|
|
173
|
+
// constraint being silently overrun.
|
|
174
|
+
if (bound?.maxEnd) {
|
|
175
|
+
const latestStart = opts.startFor
|
|
176
|
+
? opts.startFor(bound.maxEnd, self).getTime()
|
|
177
|
+
: bound.maxEnd.getTime() - durationMs;
|
|
178
|
+
if (newStart.getTime() > latestStart)
|
|
179
|
+
newStart = new Date(latestStart);
|
|
180
|
+
}
|
|
181
|
+
if (newStart.getTime() <= self.start.getTime())
|
|
182
|
+
continue;
|
|
183
|
+
const newEnd = opts.endFor ? opts.endFor(newStart, self) : new Date(newStart.getTime() + durationMs);
|
|
149
184
|
const next = { start: newStart, end: newEnd };
|
|
150
185
|
cur.set(key, next);
|
|
151
186
|
changed.set(key, next);
|
package/dist/scheduler.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* its config types for free; the *renderer* (SvGridScheduler) is Pro and plugs
|
|
6
6
|
* in through the grid's `registerSchedulerView` seam.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* grid shows the
|
|
8
|
+
* Like the rest of Enterprise it runs without a license key during the
|
|
9
|
+
* evaluation; the grid shows the watermark and a one-time console notice.
|
|
10
10
|
*
|
|
11
11
|
* ```ts
|
|
12
12
|
* import { setLicenseKey, enableSchedulerView } from '@svgrid/enterprise'
|
package/dist/selection-bar.js
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* `registerSelectionBarView` seam. Without it the grid shows a short upsell
|
|
10
10
|
* note where the bar would be.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* the grid shows the
|
|
12
|
+
* Like the rest of Enterprise it runs without a license key during the
|
|
13
|
+
* evaluation; the grid shows the watermark and a one-time console notice.
|
|
14
14
|
*
|
|
15
15
|
* ```ts
|
|
16
16
|
* import { setLicenseKey, enableSelectionBar } from '@svgrid/enterprise'
|