@svgrid/enterprise 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +94 -20
- package/dist/SvFormulaBar.svelte.d.ts +7 -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 +198 -40
- package/dist/SvPivotDesigner.svelte.d.ts +27 -20
- package/dist/SvSheet.svelte +4043 -243
- package/dist/SvSheet.svelte.d.ts +76 -3
- package/dist/SvSheetChartSetup.svelte +151 -0
- package/dist/SvSheetChartSetup.svelte.d.ts +18 -0
- package/dist/SvSheetComment.svelte +216 -31
- package/dist/SvSheetComment.svelte.d.ts +11 -11
- package/dist/SvSheetConditionalFormat.svelte +28 -31
- package/dist/SvSheetDataValidation.svelte +66 -42
- 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 +137 -34
- package/dist/SvSheetFilterMenu.svelte.d.ts +5 -0
- package/dist/SvSheetFindReplace.svelte +19 -19
- package/dist/SvSheetFormatCells.svelte +125 -81
- package/dist/SvSheetGoalSeek.svelte +17 -16
- package/dist/SvSheetInsertFunction.svelte +15 -13
- 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 +4 -2
- package/dist/SvSheetListPicker.svelte.d.ts +0 -6
- package/dist/SvSheetManageRules.svelte +20 -18
- package/dist/SvSheetNameManager.svelte +17 -15
- package/dist/SvSheetPageSetup.svelte +159 -0
- package/dist/SvSheetPageSetup.svelte.d.ts +13 -0
- package/dist/SvSheetPasteSpecial.svelte +22 -20
- 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 +13 -10
- package/dist/SvSheetRibbon.svelte +104 -51
- package/dist/SvSheetSizeDialog.svelte +4 -2
- 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 +161 -31
- package/dist/SvSheetTabs.svelte.d.ts +22 -8
- package/dist/SvSheetTextToColumns.svelte +20 -20
- package/dist/SvSheetValidationAlert.svelte +8 -6
- 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 +39827 -16429
- package/dist/designer/assets/GridMenus-8gTNssgV.js +8 -0
- package/dist/designer/assets/{SvChartMenu-D9hEeHar.js → SvChartMenu-BDoeqGz6.js} +1 -1
- package/dist/designer/assets/{SvDateTimePicker-DARvKUL2.js → SvDateTimePicker-DCPg7WGN.js} +1 -1
- package/dist/designer/assets/SvGridCellEditor-DMoWJjEI.js +4 -0
- package/dist/designer/assets/{SvGridChart-B8j1SSy3.js → SvGridChart-Cy1ATrWh.js} +2 -2
- package/dist/designer/assets/SvGridChartBuilder-eQ3mn0L9.js +1 -0
- package/dist/designer/assets/{SvGridChartPanel-pT6ITc2P.js → SvGridChartPanel-CATdVc9X.js} +3 -3
- package/dist/designer/assets/{SvGridChartView-bg281UA1.js → SvGridChartView-CmsZtCED.js} +1 -1
- package/dist/designer/assets/SvGridDropdown-Cjz0H-fI.js +1 -0
- package/dist/designer/assets/{SvTabs-UFCMTHXS.js → SvTabs-2mHC6oaz.js} +1 -1
- package/dist/designer/assets/cell-formatting-BbubJTVz.js +1 -0
- package/dist/designer/assets/{chart-cIPUsbM5.js → chart-Cn7MnNqA.js} +1 -1
- package/dist/designer/assets/{chart-panel-messages-DtTxpBUU.js → chart-panel-messages-Dz7PTIqT.js} +1 -1
- package/dist/designer/assets/{chart-summary-Czu_5epb.js → chart-summary-BD1qYB2R.js} +1 -1
- package/dist/designer/assets/{chart-trend-D5I5VEe8.js → chart-trend-B8xr5LuD.js} +1 -1
- package/dist/designer/assets/{dismissable-BO547MH9.js → dismissable-ChWRPkoa.js} +1 -1
- package/dist/designer/assets/{export-format-D-eP4b2l.js → export-format-DGckmgKr.js} +1 -1
- package/dist/designer/assets/{focus-trap-CAreAhlU.js → focus-trap-V2-6Fy9I.js} +1 -1
- package/dist/designer/assets/{index-DwU7CAMm.js → index-D5bVbuzI.js} +317 -315
- package/dist/designer/assets/index-_JVFxt02.css +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-DUQ4xE3x.js +58 -0
- package/dist/designer/assets/validate-C3B8QKsM.js +1 -0
- package/dist/designer/index.html +17 -16
- package/dist/export-pdf.d.ts +75 -0
- package/dist/export-pdf.js +216 -15
- package/dist/export.js +10 -2
- 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 +34 -7
- package/dist/index.js +44 -7
- package/dist/install.js +8 -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 +140 -8
- 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/ast.d.ts +45 -1
- package/dist/sheet/ast.js +14 -0
- package/dist/sheet/auto-filter.d.ts +58 -4
- package/dist/sheet/auto-filter.js +159 -11
- package/dist/sheet/autocomplete.d.ts +9 -0
- package/dist/sheet/autocomplete.js +90 -4
- 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 +40 -0
- package/dist/sheet/coerce.js +170 -3
- package/dist/sheet/comments.d.ts +43 -9
- package/dist/sheet/comments.js +85 -27
- package/dist/sheet/conditional-formats.d.ts +29 -6
- package/dist/sheet/conditional-formats.js +37 -12
- 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 +45 -1
- package/dist/sheet/deps.js +77 -2
- package/dist/sheet/document.d.ts +106 -4
- package/dist/sheet/document.js +204 -3
- package/dist/sheet/engine.d.ts +67 -0
- package/dist/sheet/engine.js +19 -0
- package/dist/sheet/entry.d.ts +8 -4
- package/dist/sheet/entry.js +171 -21
- 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 +67 -0
- package/dist/sheet/evaluate.js +725 -13
- package/dist/sheet/filter-files.d.ts +37 -0
- package/dist/sheet/filter-files.js +465 -0
- package/dist/sheet/format-store.d.ts +15 -0
- package/dist/sheet/format-store.js +11 -1
- package/dist/sheet/from-rows.d.ts +14 -0
- package/dist/sheet/from-rows.js +50 -0
- package/dist/sheet/function-catalog.d.ts +1 -1
- package/dist/sheet/function-catalog.js +296 -5
- package/dist/sheet/functions.js +363 -91
- package/dist/sheet/index.d.ts +35 -8
- package/dist/sheet/index.js +35 -8
- package/dist/sheet/links.d.ts +57 -0
- package/dist/sheet/links.js +174 -0
- package/dist/sheet/messages.d.ts +778 -0
- package/dist/sheet/messages.js +806 -0
- package/dist/sheet/number-format.d.ts +52 -5
- package/dist/sheet/number-format.js +465 -68
- 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/parse.js +42 -10
- package/dist/sheet/paste-special.d.ts +22 -0
- package/dist/sheet/paste-special.js +14 -5
- 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 +55 -1
- package/dist/sheet/protection.js +55 -2
- package/dist/sheet/rects.d.ts +1 -1
- package/dist/sheet/refs.d.ts +48 -0
- package/dist/sheet/refs.js +155 -8
- package/dist/sheet/ribbon-icons.d.ts +1 -1
- package/dist/sheet/ribbon-icons.js +186 -0
- package/dist/sheet/ribbon.d.ts +1 -1
- package/dist/sheet/ribbon.js +324 -23
- package/dist/sheet/sheet-kinds.d.ts +74 -0
- package/dist/sheet/sheet-kinds.js +91 -0
- package/dist/sheet/shortcuts.d.ts +13 -3
- package/dist/sheet/shortcuts.js +63 -12
- 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/table-styles.d.ts +74 -0
- package/dist/sheet/table-styles.js +152 -0
- package/dist/sheet/tables.d.ts +19 -0
- package/dist/sheet/tables.js +31 -0
- package/dist/sheet/tokenize.d.ts +18 -1
- package/dist/sheet/tokenize.js +60 -9
- package/dist/sheet/validation.d.ts +16 -0
- package/dist/sheet/validation.js +37 -0
- package/dist/sheet/workbook.d.ts +148 -3
- package/dist/sheet/workbook.js +742 -31
- 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.js +6 -7
- 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 +107 -2
- 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 +30 -5
- package/dist/designer/assets/GridMenus-BlsvL_aU.js +0 -8
- package/dist/designer/assets/SvGridCellEditor-C7uQXYds.js +0 -4
- package/dist/designer/assets/SvGridChartBuilder-kvyIU_Rl.js +0 -1
- package/dist/designer/assets/SvGridDropdown-Bb3HH2Aj.js +0 -1
- package/dist/designer/assets/cell-formatting-wr5wm7US.js +0 -1
- package/dist/designer/assets/index-CMFgAoVV.css +0 -1
- package/dist/designer/assets/row-resize-DLktcqUK.js +0 -1
- package/dist/designer/assets/src-EdI3Xqds.js +0 -58
- package/dist/designer/assets/validate-h-aslRV9.js +0 -1
package/dist/sheet/validation.js
CHANGED
|
@@ -239,3 +239,40 @@ export function describeRule(rule) {
|
|
|
239
239
|
case 'custom': return `Custom: ${v1}`;
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Excel's Circle Invalid Data: every cell under a rule whose current text
|
|
244
|
+
* breaks it. Blank cells count when the rule says they do. The rectangles
|
|
245
|
+
* are clipped to `rows` by `cols`, the sheet's used extent, so a rule over
|
|
246
|
+
* a whole column costs the cells that hold something.
|
|
247
|
+
*/
|
|
248
|
+
export function invalidCells(rules, ctx, rawAt, rows, cols) {
|
|
249
|
+
const out = [];
|
|
250
|
+
const seen = new Set();
|
|
251
|
+
for (const rule of rules) {
|
|
252
|
+
if (rule.allow === 'any')
|
|
253
|
+
continue;
|
|
254
|
+
for (const [r1, c1, r2, c2] of rule.rects) {
|
|
255
|
+
const rowEnd = Math.min(r2, rows - 1);
|
|
256
|
+
const colEnd = Math.min(c2, cols - 1);
|
|
257
|
+
for (let r = Math.max(0, r1); r <= rowEnd; r += 1) {
|
|
258
|
+
for (let c = Math.max(0, c1); c <= colEnd; c += 1) {
|
|
259
|
+
const key = r * 1048576 + c;
|
|
260
|
+
if (seen.has(key))
|
|
261
|
+
continue;
|
|
262
|
+
seen.add(key);
|
|
263
|
+
// The rule that applies is the last one covering the cell, which
|
|
264
|
+
// may not be this one.
|
|
265
|
+
const applies = ruleAt(rules, r, c);
|
|
266
|
+
if (!applies || applies.allow === 'any')
|
|
267
|
+
continue;
|
|
268
|
+
const text = rawAt(r, c);
|
|
269
|
+
if (text.trim() === '' && applies.ignoreBlank)
|
|
270
|
+
continue;
|
|
271
|
+
if (!checkEntry(applies, text, { row: r, col: c }, ctx).ok)
|
|
272
|
+
out.push({ row: r, col: c });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return out;
|
|
278
|
+
}
|
package/dist/sheet/workbook.d.ts
CHANGED
|
@@ -1,12 +1,40 @@
|
|
|
1
1
|
import { type SheetFunction } from './functions.js';
|
|
2
2
|
import { isError, type CellValue } from './ast.js';
|
|
3
|
+
import { type TableRegion, type TableRegistry } from './tables.js';
|
|
3
4
|
import { type SheetNames } from './names.js';
|
|
4
|
-
import { type StructuralEdit } from './refs.js';
|
|
5
|
+
import { type CellMove, type StructuralEdit } from './refs.js';
|
|
6
|
+
import { type SheetEngine } from './engine.js';
|
|
5
7
|
export type SheetData = {
|
|
6
8
|
name: string;
|
|
7
9
|
/** Row-major raw text. Ragged is fine; a missing cell reads as empty. */
|
|
8
10
|
cells: string[][];
|
|
9
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Excel's Enable iterative calculation, under File > Options > Formulas.
|
|
14
|
+
*
|
|
15
|
+
* A circular reference is normally an error: every cell in the loop shows
|
|
16
|
+
* #CYCLE!. Some models are written as one on purpose, though, because the
|
|
17
|
+
* answer is a fixed point rather than a mistake: a bonus that is a share of
|
|
18
|
+
* the profit the bonus is subtracted from, an interest charge on a balance
|
|
19
|
+
* the charge is added to. Excel solves those by running the loop over and
|
|
20
|
+
* over from the values it last had, and stopping when either the answer
|
|
21
|
+
* stops moving or the passes run out.
|
|
22
|
+
*/
|
|
23
|
+
export type IterationSettings = {
|
|
24
|
+
/** Off by default, which is Excel's default and keeps a cycle an error. */
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
/** Passes before the answer is taken as it stands. Excel's default is 100. */
|
|
27
|
+
maxIterations: number;
|
|
28
|
+
/** The largest move that still counts as settled. Excel's default is 0.001. */
|
|
29
|
+
maxChange: number;
|
|
30
|
+
};
|
|
31
|
+
export declare const DEFAULT_ITERATION: IterationSettings;
|
|
32
|
+
/** Excel's text prefix. A cell typed as `'007` holds the text `007`: the
|
|
33
|
+
* apostrophe says "what follows is text", and it is not part of the value,
|
|
34
|
+
* so it is never displayed, printed, exported or compared. */
|
|
35
|
+
export declare const TEXT_PREFIX = "'";
|
|
36
|
+
/** The value a typed text stands for once the prefix is taken off. */
|
|
37
|
+
export declare const withoutTextPrefix: (text: string) => string;
|
|
10
38
|
export type WorkbookOptions = {
|
|
11
39
|
/** Extra functions merged over the built-ins. */
|
|
12
40
|
functions?: Record<string, SheetFunction>;
|
|
@@ -17,6 +45,30 @@ export type WorkbookOptions = {
|
|
|
17
45
|
col: number;
|
|
18
46
|
value: CellValue;
|
|
19
47
|
}>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Fires for every RAW WRITE, with the text as typed rather than the value
|
|
50
|
+
* it computes: one call per `setRaw` that changed something, and one per
|
|
51
|
+
* cell a structural edit rewrote. This is the seam a delta stream reads
|
|
52
|
+
* (`sheet/delta.ts`), since a collaborator has to receive `=SUM(A1:A9)`
|
|
53
|
+
* rather than 42.
|
|
54
|
+
*/
|
|
55
|
+
onWrite?(change: {
|
|
56
|
+
sheet: string;
|
|
57
|
+
row: number;
|
|
58
|
+
col: number;
|
|
59
|
+
text: string;
|
|
60
|
+
}): void;
|
|
61
|
+
/**
|
|
62
|
+
* What works a formula out. The built-in parser and evaluator unless an
|
|
63
|
+
* application hands over an evaluator of its own. The workbook keeps the
|
|
64
|
+
* dependency graph, the cache, the cycles and the spills whichever engine
|
|
65
|
+
* answers.
|
|
66
|
+
*/
|
|
67
|
+
engine?: SheetEngine;
|
|
68
|
+
/** Tables the workbook starts with, for a document being restored. */
|
|
69
|
+
tables?: ReadonlyArray<TableRegion>;
|
|
70
|
+
/** Iterative calculation, off unless a model needs it. */
|
|
71
|
+
iteration?: Partial<IterationSettings>;
|
|
20
72
|
};
|
|
21
73
|
/** One cell read as text that has not been written: what a validation rule checks. */
|
|
22
74
|
export type CellOverride = {
|
|
@@ -28,11 +80,25 @@ export type Workbook = {
|
|
|
28
80
|
readonly sheets: ReadonlyArray<string>;
|
|
29
81
|
readonly active: string;
|
|
30
82
|
readonly names: SheetNames;
|
|
83
|
+
/**
|
|
84
|
+
* Excel's tables, which is what a structured reference resolves through.
|
|
85
|
+
* Defining one here is what makes `=SUM(Orders[Amount])` mean anything;
|
|
86
|
+
* the shell's Insert > Table does it, and a document restores it.
|
|
87
|
+
*/
|
|
88
|
+
readonly tables: TableRegistry;
|
|
31
89
|
setActive(name: string): void;
|
|
32
90
|
addSheet(name?: string, at?: number): string;
|
|
33
91
|
removeSheet(name: string): boolean;
|
|
34
92
|
renameSheet(from: string, to: string): boolean;
|
|
35
93
|
moveSheet(name: string, to: number): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Copy a sheet's cells into a new sheet placed right after it, named
|
|
96
|
+
* `to` or Excel's "Name (2)", and make it active. The new sheet's
|
|
97
|
+
* formulas read their own sheet where the old ones read theirs, because
|
|
98
|
+
* an unqualified reference is relative to the sheet it sits on. Returns
|
|
99
|
+
* the new name, or null when `from` is unknown or `to` is taken.
|
|
100
|
+
*/
|
|
101
|
+
copySheet(from: string, to?: string): string | null;
|
|
36
102
|
/** The raw text of a cell: the formula as typed, or the literal. */
|
|
37
103
|
getRaw(sheet: string, row: number, col: number): string;
|
|
38
104
|
/** Write raw text and recalculate whatever depends on it. */
|
|
@@ -45,28 +111,107 @@ export type Workbook = {
|
|
|
45
111
|
* What `text` would be worth in a cell of `sheet`, without putting it in
|
|
46
112
|
* one: a formula is evaluated there (names and other sheets included), a
|
|
47
113
|
* literal is coerced the way a typed one is. Data validation checks its
|
|
48
|
-
* bounds and custom rules through this
|
|
114
|
+
* bounds and custom rules through this, and conditional formatting its
|
|
115
|
+
* formula rules, with `at` naming the cell the text is read for.
|
|
49
116
|
*/
|
|
50
|
-
evaluateText(sheet: string, text: string, override?: CellOverride
|
|
117
|
+
evaluateText(sheet: string, text: string, override?: CellOverride, at?: {
|
|
118
|
+
row: number;
|
|
119
|
+
col: number;
|
|
120
|
+
}): CellValue;
|
|
51
121
|
/**
|
|
52
122
|
* The values of a range reference, or of a name that refers to one, as a
|
|
53
123
|
* grid; null when `text` is not a reference. A list source.
|
|
54
124
|
*/
|
|
55
125
|
evaluateRange(sheet: string, text: string): CellValue[][] | null;
|
|
126
|
+
/**
|
|
127
|
+
* Tell the workbook which rows are folded away, and by what: `'filter'`
|
|
128
|
+
* for an AutoFilter, `'hand'` for Hide Rows, null for a row on the
|
|
129
|
+
* screen. Only `SUBTOTAL` reads it, which is how a total under a filtered
|
|
130
|
+
* list follows the filter. Pass null to forget the source again.
|
|
131
|
+
*/
|
|
132
|
+
setHiddenRows(source: ((sheet: string, row: number) => 'filter' | 'hand' | null) | null): void;
|
|
56
133
|
/** Apply a structural edit to one sheet, rewriting every formula in the
|
|
57
134
|
* WORKBOOK that pointed into it. */
|
|
58
135
|
applyStructuralEdit(sheet: string, edit: StructuralEdit): void;
|
|
136
|
+
/**
|
|
137
|
+
* A block of cells has been MOVED (cut and pasted, or dragged): point
|
|
138
|
+
* every reference to those cells at where they now are, across the whole
|
|
139
|
+
* workbook and the defined names, as Excel does. The cells themselves are
|
|
140
|
+
* moved by whoever did the moving; this is only the repointing.
|
|
141
|
+
*/
|
|
142
|
+
repointAfterMove(move: CellMove): void;
|
|
143
|
+
/**
|
|
144
|
+
* Excel's Trace Precedents: the cells a formula reads directly, on any
|
|
145
|
+
* sheet. Empty for a literal. A whole-column reference contributes its
|
|
146
|
+
* used rows.
|
|
147
|
+
*/
|
|
148
|
+
precedents(sheet: string, row: number, col: number): Array<{
|
|
149
|
+
sheet: string;
|
|
150
|
+
row: number;
|
|
151
|
+
col: number;
|
|
152
|
+
}>;
|
|
153
|
+
/**
|
|
154
|
+
* Excel's Trace Dependents: the formulas that read a cell directly. Every
|
|
155
|
+
* formula in the workbook is evaluated first, so a dependent that was
|
|
156
|
+
* never on screen is found too.
|
|
157
|
+
*/
|
|
158
|
+
dependents(sheet: string, row: number, col: number): Array<{
|
|
159
|
+
sheet: string;
|
|
160
|
+
row: number;
|
|
161
|
+
col: number;
|
|
162
|
+
}>;
|
|
163
|
+
/**
|
|
164
|
+
* Hear about every raw write, with the text as typed. Returns the
|
|
165
|
+
* unsubscribe. The delta stream reads this; a mirror of the cells in
|
|
166
|
+
* another store can too.
|
|
167
|
+
*/
|
|
168
|
+
subscribeWrites(listener: (change: {
|
|
169
|
+
sheet: string;
|
|
170
|
+
row: number;
|
|
171
|
+
col: number;
|
|
172
|
+
text: string;
|
|
173
|
+
}) => void): () => void;
|
|
59
174
|
/** Recompute everything. Rarely needed; `setRaw` keeps itself current. */
|
|
60
175
|
recalculate(): void;
|
|
176
|
+
/** How circular references are treated, as the Formulas tab sets it. */
|
|
177
|
+
readonly iteration: IterationSettings;
|
|
178
|
+
/**
|
|
179
|
+
* Turn iterative calculation on or off, or change its limits, and
|
|
180
|
+
* recalculate: the cells in a cycle go from #CYCLE! to their fixed point,
|
|
181
|
+
* or back.
|
|
182
|
+
*/
|
|
183
|
+
setIteration(next: Partial<IterationSettings>): void;
|
|
184
|
+
/**
|
|
185
|
+
* The spill a cell belongs to: the anchor holding the array formula and
|
|
186
|
+
* the rectangle its answer covers, for the anchor itself and every cell
|
|
187
|
+
* it spills into; null for a cell that is neither.
|
|
188
|
+
*/
|
|
189
|
+
spillOf(sheet: string, row: number, col: number): {
|
|
190
|
+
anchor: {
|
|
191
|
+
row: number;
|
|
192
|
+
col: number;
|
|
193
|
+
};
|
|
194
|
+
rect: readonly [number, number, number, number];
|
|
195
|
+
} | null;
|
|
196
|
+
/** Every spill on a sheet, anchors computed, for a writer that saves the ranges. */
|
|
197
|
+
spills(sheet: string): Array<{
|
|
198
|
+
row: number;
|
|
199
|
+
col: number;
|
|
200
|
+
rect: readonly [number, number, number, number];
|
|
201
|
+
}>;
|
|
61
202
|
rowCount(sheet: string): number;
|
|
62
203
|
colCount(sheet: string): number;
|
|
63
204
|
serialize(): {
|
|
64
205
|
sheets: SheetData[];
|
|
65
206
|
active: string;
|
|
66
207
|
names: Record<string, string>;
|
|
208
|
+
tables?: TableRegion[];
|
|
209
|
+
iteration?: IterationSettings;
|
|
67
210
|
};
|
|
68
211
|
};
|
|
69
212
|
/** A name Excel would accept for a sheet. */
|
|
70
213
|
export declare function isValidSheetName(name: string): boolean;
|
|
214
|
+
/** Iteration settings with the defaults filled in and the numbers sane. */
|
|
215
|
+
export declare function cleanIteration(next?: Partial<IterationSettings> | null): IterationSettings;
|
|
71
216
|
export declare function createWorkbook(initial?: ReadonlyArray<SheetData>, options?: WorkbookOptions): Workbook;
|
|
72
217
|
export { isError };
|