@svgrid/enterprise 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-BSjv6Qec.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/refs.js
CHANGED
|
@@ -50,7 +50,9 @@ function render(node) {
|
|
|
50
50
|
case 'num': return String(node.v);
|
|
51
51
|
case 'str': return `"${node.v.replace(/"/g, '""')}"`;
|
|
52
52
|
case 'bool': return node.v ? 'TRUE' : 'FALSE';
|
|
53
|
+
case 'err': return node.v;
|
|
53
54
|
case 'ref': return node.ref.col < 0 || (node.ref.row ?? 0) < 0 ? '#REF!' : formatA1(node.ref);
|
|
55
|
+
case 'spill': return node.ref.col < 0 || (node.ref.row ?? 0) < 0 ? '#REF!' : `${formatA1(node.ref)}#`;
|
|
54
56
|
case 'range': {
|
|
55
57
|
if (isBroken(node.from) || isBroken(node.to))
|
|
56
58
|
return '#REF!';
|
|
@@ -66,6 +68,16 @@ function render(node) {
|
|
|
66
68
|
const to = formatA1({ ...node.to, sheet: null });
|
|
67
69
|
return `${from}:${to}`;
|
|
68
70
|
}
|
|
71
|
+
case 'ref3d': {
|
|
72
|
+
if (isBroken(node.from) || isBroken(node.to))
|
|
73
|
+
return '#REF!';
|
|
74
|
+
const q = (s) => (/^[A-Za-z_][A-Za-z0-9_.]*$/.test(s) ? s : `'${s.replace(/'/g, "''")}'`);
|
|
75
|
+
const cell = formatA1({ ...node.from, sheet: null });
|
|
76
|
+
const to = node.from.row === node.to.row && node.from.col === node.to.col
|
|
77
|
+
? ''
|
|
78
|
+
: `:${formatA1({ ...node.to, sheet: null })}`;
|
|
79
|
+
return `${q(node.sheetFrom)}:${q(node.sheetTo)}!${cell}${to}`;
|
|
80
|
+
}
|
|
69
81
|
case 'name': return node.name;
|
|
70
82
|
case 'table': {
|
|
71
83
|
// Re-serialised, never translated: the whole point of a structured
|
|
@@ -90,16 +102,20 @@ function render(node) {
|
|
|
90
102
|
// from precedence. Emitting the operands bare turns =(A1+B1)*2 into
|
|
91
103
|
// =A2+B2*2, which is a silent wrong answer on every fill and paste.
|
|
92
104
|
//
|
|
93
|
-
// Which SIDE needs one at equal precedence depends on associativity
|
|
94
|
-
//
|
|
95
|
-
// a-b-c
|
|
96
|
-
//
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const rightMin = rightAssociative ? prec : prec + 1;
|
|
105
|
+
// Which SIDE needs one at equal precedence depends on associativity,
|
|
106
|
+
// and every operator here binds left, `^` included: the RIGHT operand
|
|
107
|
+
// is the one that needs the bracket, because a-(b-c) is not a-b-c and
|
|
108
|
+
// a^(b^c) is not a^b^c.
|
|
109
|
+
const leftMin = prec;
|
|
110
|
+
const rightMin = prec + 1;
|
|
100
111
|
return `${wrap(node.left, leftMin)}${node.op}${wrap(node.right, rightMin)}`;
|
|
101
112
|
}
|
|
102
|
-
|
|
113
|
+
// `(` is the call node an immediate or curried lambda builds:
|
|
114
|
+
// LAMBDA(x, x*2)(21) is the callee, then its arguments.
|
|
115
|
+
case 'fn': return node.name === '('
|
|
116
|
+
? `${render(node.args[0])}(${node.args.slice(1).map(render).join(',')})`
|
|
117
|
+
: `${node.name}(${node.args.map(render).join(',')})`;
|
|
118
|
+
case 'empty': return '';
|
|
103
119
|
}
|
|
104
120
|
}
|
|
105
121
|
/**
|
|
@@ -125,13 +141,125 @@ export function translateFormula(text, dRow, dCol) {
|
|
|
125
141
|
const moved = mapNode(ast, (n) => {
|
|
126
142
|
if (n.k === 'ref')
|
|
127
143
|
return { ...n, ref: translateRef(n.ref, dRow, dCol) };
|
|
144
|
+
if (n.k === 'spill')
|
|
145
|
+
return { ...n, ref: translateRef(n.ref, dRow, dCol) };
|
|
128
146
|
if (n.k === 'range') {
|
|
129
147
|
return { ...n, from: translateRef(n.from, dRow, dCol), to: translateRef(n.to, dRow, dCol) };
|
|
130
148
|
}
|
|
149
|
+
if (n.k === 'ref3d') {
|
|
150
|
+
return { ...n, from: translateRef(n.from, dRow, dCol), to: translateRef(n.to, dRow, dCol) };
|
|
151
|
+
}
|
|
131
152
|
return n;
|
|
132
153
|
});
|
|
133
154
|
return formatFormula(moved);
|
|
134
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* A formula for a cell that a transposed paste moves from `source` to
|
|
158
|
+
* `dest`, its relative references turned with it.
|
|
159
|
+
*
|
|
160
|
+
* Excel rotates a relative offset on a transpose: a reference `dr` rows
|
|
161
|
+
* and `dc` columns away becomes `dc` rows and `dr` columns away. A cell
|
|
162
|
+
* inside the block moved the same way, so a formula that read the price
|
|
163
|
+
* beside it still reads that price, now above it, which is what makes a
|
|
164
|
+
* transposed totals column still total. A reference outside the block is
|
|
165
|
+
* turned too, as Excel turns it. Absolute parts stay where they point.
|
|
166
|
+
* A column-only reference has no row to turn and is left as it is.
|
|
167
|
+
*/
|
|
168
|
+
export function transposeFormula(text, source, dest) {
|
|
169
|
+
if (typeof text !== 'string' || !text.startsWith('='))
|
|
170
|
+
return text;
|
|
171
|
+
let ast;
|
|
172
|
+
try {
|
|
173
|
+
ast = parseFormula(text);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return text;
|
|
177
|
+
}
|
|
178
|
+
const turn = (ref) => {
|
|
179
|
+
if (ref.row === null)
|
|
180
|
+
return ref;
|
|
181
|
+
return {
|
|
182
|
+
...ref,
|
|
183
|
+
row: ref.rowAbs ? ref.row : dest.row + (ref.col - source.col),
|
|
184
|
+
col: ref.colAbs ? ref.col : dest.col + (ref.row - source.row),
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
const moved = mapNode(ast, (n) => {
|
|
188
|
+
if (n.k === 'ref')
|
|
189
|
+
return { ...n, ref: turn(n.ref) };
|
|
190
|
+
if (n.k === 'spill')
|
|
191
|
+
return { ...n, ref: turn(n.ref) };
|
|
192
|
+
if (n.k === 'range') {
|
|
193
|
+
// A turned range may come out with its corners swapped; a range is
|
|
194
|
+
// spelled top-left to bottom-right, so put them back in order.
|
|
195
|
+
const a = turn(n.from);
|
|
196
|
+
const b = turn(n.to);
|
|
197
|
+
const from = { ...a, row: a.row === null || b.row === null ? a.row : Math.min(a.row, b.row), col: Math.min(a.col, b.col), rowAbs: a.rowAbs, colAbs: a.colAbs };
|
|
198
|
+
const to = { ...b, row: a.row === null || b.row === null ? b.row : Math.max(a.row, b.row), col: Math.max(a.col, b.col), rowAbs: b.rowAbs, colAbs: b.colAbs };
|
|
199
|
+
return { ...n, from, to };
|
|
200
|
+
}
|
|
201
|
+
return n;
|
|
202
|
+
});
|
|
203
|
+
return formatFormula(moved);
|
|
204
|
+
}
|
|
205
|
+
const inside = (move, row, col) => row !== null && row >= move.top && row <= move.bottom && col >= move.left && col <= move.right;
|
|
206
|
+
/**
|
|
207
|
+
* Point every reference to a moved cell at where the cell now is.
|
|
208
|
+
*
|
|
209
|
+
* This is what a cut and paste owes the rest of the workbook, and Excel does
|
|
210
|
+
* it: moving A1 to D1 rewrites `=A1*2` as `=D1*2` rather than leaving it
|
|
211
|
+
* reading an emptied cell. A `$` makes no difference - the cell moved, so
|
|
212
|
+
* every way of naming it moves - and a RANGE only follows when the whole of
|
|
213
|
+
* it moved, which is why `=SUM(A1:A2)` stays as it is when only A1 goes.
|
|
214
|
+
*
|
|
215
|
+
* `self` is the sheet the formula lives on, so an unqualified reference is
|
|
216
|
+
* read against the right geometry; a reference that lands on another sheet
|
|
217
|
+
* takes that sheet's name, as Excel writes it.
|
|
218
|
+
*/
|
|
219
|
+
export function repointReferences(text, move, self) {
|
|
220
|
+
if (typeof text !== 'string' || !text.startsWith('='))
|
|
221
|
+
return text;
|
|
222
|
+
if (move.dRow === 0 && move.dCol === 0 && move.sheet === move.toSheet)
|
|
223
|
+
return text;
|
|
224
|
+
let ast;
|
|
225
|
+
try {
|
|
226
|
+
ast = parseFormula(text);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return text;
|
|
230
|
+
}
|
|
231
|
+
const names = (sheet) => (sheet ?? self ?? '').toLowerCase() === move.sheet.toLowerCase();
|
|
232
|
+
const landed = (ref) => ({
|
|
233
|
+
...ref,
|
|
234
|
+
row: ref.row === null ? null : ref.row + move.dRow,
|
|
235
|
+
col: ref.col + move.dCol,
|
|
236
|
+
// Unqualified only when the formula already lives on the sheet it landed on.
|
|
237
|
+
sheet: move.toSheet.toLowerCase() === (self ?? '').toLowerCase() ? null : move.toSheet,
|
|
238
|
+
});
|
|
239
|
+
const moved = mapNode(ast, (n) => {
|
|
240
|
+
if (n.k === 'ref') {
|
|
241
|
+
if (!names(n.ref.sheet) || !inside(move, n.ref.row, n.ref.col))
|
|
242
|
+
return n;
|
|
243
|
+
return { ...n, ref: landed(n.ref) };
|
|
244
|
+
}
|
|
245
|
+
if (n.k === 'spill') {
|
|
246
|
+
if (!names(n.ref.sheet) || !inside(move, n.ref.row, n.ref.col))
|
|
247
|
+
return n;
|
|
248
|
+
return { ...n, ref: landed(n.ref) };
|
|
249
|
+
}
|
|
250
|
+
if (n.k === 'range') {
|
|
251
|
+
const sheet = n.from.sheet ?? n.to.sheet;
|
|
252
|
+
if (!names(sheet))
|
|
253
|
+
return n;
|
|
254
|
+
if (!inside(move, n.from.row, n.from.col) || !inside(move, n.to.row, n.to.col))
|
|
255
|
+
return n;
|
|
256
|
+
return { ...n, from: landed(n.from), to: landed(n.to) };
|
|
257
|
+
}
|
|
258
|
+
return n;
|
|
259
|
+
});
|
|
260
|
+
const next = formatFormula(moved);
|
|
261
|
+
return next === text ? text : next;
|
|
262
|
+
}
|
|
135
263
|
export const REFERENCE_COLOURS = ['#1e6fd9', '#d62828', '#8e44ad', '#0f9d58', '#e67e22', '#0097a7'];
|
|
136
264
|
export function referenceSpans(text, colours = REFERENCE_COLOURS) {
|
|
137
265
|
const out = [];
|
|
@@ -186,11 +314,22 @@ export function renameSheetReferences(text, from, to) {
|
|
|
186
314
|
changed = true;
|
|
187
315
|
return { ...ref, sheet: to };
|
|
188
316
|
};
|
|
317
|
+
const swapName = (name) => {
|
|
318
|
+
if (name.toLowerCase() !== wanted)
|
|
319
|
+
return name;
|
|
320
|
+
changed = true;
|
|
321
|
+
return to;
|
|
322
|
+
};
|
|
189
323
|
const moved = mapNode(ast, (n) => {
|
|
190
324
|
if (n.k === 'ref')
|
|
191
325
|
return { ...n, ref: swap(n.ref) };
|
|
326
|
+
if (n.k === 'spill')
|
|
327
|
+
return { ...n, ref: swap(n.ref) };
|
|
192
328
|
if (n.k === 'range')
|
|
193
329
|
return { ...n, from: swap(n.from), to: swap(n.to) };
|
|
330
|
+
// A 3D reference names its sheets by string, either end of the tab range.
|
|
331
|
+
if (n.k === 'ref3d')
|
|
332
|
+
return { ...n, sheetFrom: swapName(n.sheetFrom), sheetTo: swapName(n.sheetTo) };
|
|
194
333
|
return n;
|
|
195
334
|
});
|
|
196
335
|
return changed ? formatFormula(moved) : text;
|
|
@@ -243,6 +382,14 @@ export function fixupReferences(text, edit, scope) {
|
|
|
243
382
|
const next = fixRef(n.ref, edit);
|
|
244
383
|
return next === null ? { k: 'ref', ref: broken } : { ...n, ref: next };
|
|
245
384
|
}
|
|
385
|
+
if (n.k === 'spill') {
|
|
386
|
+
// The anchor moving carries the spill with it; the anchor being
|
|
387
|
+
// deleted takes the whole array reference to #REF!.
|
|
388
|
+
if (!touched(n.ref.sheet))
|
|
389
|
+
return n;
|
|
390
|
+
const next = fixRef(n.ref, edit);
|
|
391
|
+
return next === null ? { k: 'ref', ref: broken } : { ...n, ref: next };
|
|
392
|
+
}
|
|
246
393
|
if (n.k === 'range') {
|
|
247
394
|
if (!touched(n.from.sheet ?? n.to.sheet))
|
|
248
395
|
return n;
|
|
@@ -25,7 +25,7 @@ export type IconPath = {
|
|
|
25
25
|
/** Dashed stroke, for the "no border" sides. */
|
|
26
26
|
dash?: string;
|
|
27
27
|
};
|
|
28
|
-
export type RibbonIconName = 'undo' | 'redo' | 'paste' | 'cut' | 'copy' | 'paste-special' | 'font-grow' | 'font-shrink' | 'borders' | 'border-none' | 'border-bottom' | 'border-top' | 'border-left' | 'border-right' | 'border-all' | 'border-outside' | 'border-thick-bottom' | 'fill-colour' | 'font-colour' | 'align-left' | 'align-center' | 'align-right' | 'wrap' | 'dec-more' | 'dec-less' | 'insert-cells' | 'delete-cells' | 'freeze' | 'unfreeze' | 'autosum' | 'fill-down' | 'fill-right' | 'clear' | 'find' | 'filter' | 'sort-asc' | 'sort-desc' | 'chart' | 'table' | 'function' | 'new-sheet' | 'name-manager' | 'show-formulas' | 'calculate' | 'goal-seek' | 'text-to-columns' | 'remove-duplicates' | 'chevron-down' | 'format-cells' | 'format-painter' | 'protect' | 'unprotect' | 'lock' | 'comment' | 'comment-delete' | 'comment-prev' | 'comment-next' | 'comments-all' | 'validation' | 'cf' | 'cf-greater' | 'cf-less' | 'cf-between' | 'cf-equal' | 'cf-text' | 'cf-duplicates' | 'cf-top' | 'cf-bottom' | 'cf-above' | 'cf-below' | 'cf-bar' | 'cf-scale' | 'cf-icons' | 'merge' | 'unmerge' | 'gridlines' | 'formula-bar' | 'headings' | 'font' | 'number' | 'clear-formats' | 'column-width' | 'row-height' | 'hide' | 'unhide';
|
|
28
|
+
export type RibbonIconName = 'undo' | 'redo' | 'paste' | 'cut' | 'copy' | 'paste-special' | 'font-grow' | 'font-shrink' | 'borders' | 'border-none' | 'border-bottom' | 'border-top' | 'border-left' | 'border-right' | 'border-all' | 'border-outside' | 'border-thick-bottom' | 'fill-colour' | 'font-colour' | 'align-left' | 'align-center' | 'align-right' | 'wrap' | 'valign-top' | 'valign-center' | 'valign-bottom' | 'dec-more' | 'dec-less' | 'insert-cells' | 'delete-cells' | 'freeze' | 'unfreeze' | 'autosum' | 'fill-down' | 'fill-right' | 'clear' | 'find' | 'filter' | 'sort-asc' | 'sort-desc' | 'sort' | 'chart' | 'table' | 'function' | 'new-sheet' | 'file-new' | 'file-open' | 'file-save' | 'file-csv' | 'cf-formula' | 'trace-precedents' | 'trace-dependents' | 'remove-arrows' | 'name-manager' | 'show-formulas' | 'calculate' | 'goal-seek' | 'evaluate-formula' | 'error-checking' | 'text-to-columns' | 'remove-duplicates' | 'chevron-down' | 'format-cells' | 'format-painter' | 'protect' | 'unprotect' | 'lock' | 'edit-ranges' | 'print' | 'page-setup' | 'margins' | 'orientation' | 'paper' | 'print-area' | 'print-titles' | 'picture' | 'chart-setup' | 'sparkline-line' | 'sparkline-column' | 'sparkline-winloss' | 'pivot' | 'link' | 'unlink' | 'comment' | 'comment-delete' | 'comment-prev' | 'comment-next' | 'comments-all' | 'validation' | 'cf' | 'cf-greater' | 'cf-less' | 'cf-between' | 'cf-equal' | 'cf-text' | 'cf-duplicates' | 'cf-top' | 'cf-bottom' | 'cf-above' | 'cf-below' | 'cf-bar' | 'cf-scale' | 'cf-icons' | 'merge' | 'unmerge' | 'gridlines' | 'formula-bar' | 'headings' | 'font' | 'number' | 'clear-formats' | 'column-width' | 'row-height' | 'hide' | 'unhide' | 'group-rows' | 'group-cols' | 'ungroup-rows' | 'ungroup-cols' | 'show-detail' | 'hide-detail' | 'checkbox' | 'cell-button';
|
|
29
29
|
export declare const RIBBON_ICONS: Record<RibbonIconName, ReadonlyArray<IconPath>>;
|
|
30
30
|
/** The names, for tests and for anyone building their own toolbar. */
|
|
31
31
|
export declare const RIBBON_ICON_NAMES: RibbonIconName[];
|
|
@@ -91,6 +91,10 @@ export const RIBBON_ICONS = {
|
|
|
91
91
|
'align-left': [{ d: 'M2.5 3.5h11M2.5 6.5h7M2.5 9.5h11M2.5 12.5h7' }],
|
|
92
92
|
'align-center': [{ d: 'M2.5 3.5h11M4.5 6.5h7M2.5 9.5h11M4.5 12.5h7' }],
|
|
93
93
|
'align-right': [{ d: 'M2.5 3.5h11M6.5 6.5h7M2.5 9.5h11M6.5 12.5h7' }],
|
|
94
|
+
// A rule at the anchored edge, with the text lines pushed against it.
|
|
95
|
+
'valign-top': [{ d: 'M2.5 3.5h11M5 6.5h6M5 8.5h6' }],
|
|
96
|
+
'valign-center': [{ d: 'M5 5.5h6M5 8h6M5 10.5h6' }],
|
|
97
|
+
'valign-bottom': [{ d: 'M5 7.5h6M5 9.5h6M2.5 12.5h11' }],
|
|
94
98
|
wrap: [
|
|
95
99
|
{ d: 'M2.5 4h11M2.5 8h8a2.25 2.25 0 0 1 0 4.5H8.5M2.5 12h3' },
|
|
96
100
|
{ d: 'M10 10.5l-2 2 2 2' },
|
|
@@ -205,6 +209,11 @@ export const RIBBON_ICONS = {
|
|
|
205
209
|
{ d: 'M3 13.5l2-4 2 4M3.6 12.3h2.8', width: 1.2 },
|
|
206
210
|
{ d: 'M12 2.5v11M9.5 11l2.5 2.5 2.5-2.5' },
|
|
207
211
|
],
|
|
212
|
+
// Excel's Sort: an arrow each way beside three bars of falling length.
|
|
213
|
+
sort: [
|
|
214
|
+
{ d: 'M4 2.5v11M1.5 5L4 2.5 6.5 5', width: 1.3 },
|
|
215
|
+
{ d: 'M9 3.5h5.5M9 8h4M9 12.5h2.5', width: 1.3 },
|
|
216
|
+
],
|
|
208
217
|
chart: [
|
|
209
218
|
{ d: 'M2.5 2.5v11h11' },
|
|
210
219
|
{ d: 'M4.5 13.5V8h2.5v5.5M8 13.5V4.5h2.5v9M11.5 13.5V10h2v3.5' },
|
|
@@ -224,6 +233,129 @@ export const RIBBON_ICONS = {
|
|
|
224
233
|
...SHEET,
|
|
225
234
|
{ d: 'M8.2 6.5v5M5.7 9h5', width: 1.7 },
|
|
226
235
|
],
|
|
236
|
+
// Formula auditing: a dot and an arrow between two cells, and the arrow
|
|
237
|
+
// struck out.
|
|
238
|
+
'trace-precedents': [
|
|
239
|
+
{ d: 'M2.5 3.5h4v4h-4zM9.5 8.5h4v4h-4z' },
|
|
240
|
+
{ d: 'M4.5 7.5v3h4.5M7.5 9l1.5 1.5L7.5 12', width: 1.3 },
|
|
241
|
+
],
|
|
242
|
+
'trace-dependents': [
|
|
243
|
+
{ d: 'M2.5 3.5h4v4h-4zM9.5 8.5h4v4h-4z' },
|
|
244
|
+
{ d: 'M6.5 5.5h5v2.5M10 6.5l1.5 1.5L13 6.5', width: 1.3 },
|
|
245
|
+
],
|
|
246
|
+
'remove-arrows': [
|
|
247
|
+
{ d: 'M2.5 8h9M9.5 6l2 2-2 2', width: 1.3 },
|
|
248
|
+
{ d: 'M11 3l3 3M14 3l-3 3', width: 1.3 },
|
|
249
|
+
],
|
|
250
|
+
// Evaluate Formula: an fx with a step under it. Error Checking: a cell
|
|
251
|
+
// with a warning triangle on it.
|
|
252
|
+
'evaluate-formula': [
|
|
253
|
+
{ d: 'M4 8V4.5a1.5 1.5 0 0 1 3 0M2.5 6h3M8.5 3.5l4 4.5M12.5 3.5l-4 4.5', width: 1.3 },
|
|
254
|
+
{ d: 'M2.5 13.5h3v-2.5h3v-2.5h3', width: 1.3 },
|
|
255
|
+
],
|
|
256
|
+
'error-checking': [
|
|
257
|
+
{ d: 'M2.5 2.5h7v5h-7z' },
|
|
258
|
+
{ d: 'M7 14.5l4-7 4 7z', width: 1.2 },
|
|
259
|
+
{ d: 'M11 10v2M11 13.2h.01', width: 1.3 },
|
|
260
|
+
],
|
|
261
|
+
// A formula rule: an fx over a shaded cell.
|
|
262
|
+
'cf-formula': [
|
|
263
|
+
{ d: 'M2 10.5h12v3.5H2z', fill: true },
|
|
264
|
+
{ d: 'M5 8V4.5a1.5 1.5 0 0 1 3 0M3.5 6h3M9.5 3.5l3 4.5M12.5 3.5l-3 4.5', width: 1.3 },
|
|
265
|
+
],
|
|
266
|
+
// The File tab: a blank page, an opening folder, a floppy, a page of
|
|
267
|
+
// commas.
|
|
268
|
+
'file-new': [
|
|
269
|
+
...SHEET,
|
|
270
|
+
],
|
|
271
|
+
'file-open': [
|
|
272
|
+
{ d: 'M1.5 4.5v9h11l2-6H4l-2 6' },
|
|
273
|
+
{ d: 'M1.5 4.5v-2h4l1.5 1.5h5.5v2.5' },
|
|
274
|
+
],
|
|
275
|
+
'file-save': [
|
|
276
|
+
{ d: 'M2.5 2.5h9l2 2v9h-11z' },
|
|
277
|
+
{ d: 'M5 2.5v3.5h5V2.5M4.5 13.5V9h7v4.5' },
|
|
278
|
+
],
|
|
279
|
+
'file-csv': [
|
|
280
|
+
...SHEET,
|
|
281
|
+
{ d: 'M6 8.5h1M9 8.5h1M6 11h1M9 11h1', width: 1.7 },
|
|
282
|
+
],
|
|
283
|
+
// A framed picture with a hill and a sun in it, the way every icon set draws one.
|
|
284
|
+
picture: [
|
|
285
|
+
{ d: 'M2.5 3.5h11v9h-11z' },
|
|
286
|
+
{ d: 'M2.5 10.5l3.5-3.5 2.5 2.5 2-2 3 3' },
|
|
287
|
+
{ d: 'M10.5 6a.9.9 0 1 0 .01 0z', fill: true },
|
|
288
|
+
],
|
|
289
|
+
// The chart's bars with a cog beside them: its settings.
|
|
290
|
+
'chart-setup': [
|
|
291
|
+
{ d: 'M2.5 13.5h7M3.5 13.5v-4M6 13.5v-7' },
|
|
292
|
+
{ d: 'M11.5 5.5a2 2 0 1 0 .01 0z' },
|
|
293
|
+
{ d: 'M11.5 2.5v1.2M11.5 7.3v1.2M14.5 5.5h-1.2M9.7 5.5H8.5', width: 1.2 },
|
|
294
|
+
],
|
|
295
|
+
// A chain of two links, and the same broken in the middle.
|
|
296
|
+
link: [
|
|
297
|
+
{ d: 'M6.5 9.5l3-3' },
|
|
298
|
+
{ d: 'M8.5 4.5l1-1a2.5 2.5 0 0 1 3.5 3.5l-1 1' },
|
|
299
|
+
{ d: 'M7.5 11.5l-1 1a2.5 2.5 0 0 1-3.5-3.5l1-1' },
|
|
300
|
+
],
|
|
301
|
+
unlink: [
|
|
302
|
+
{ d: 'M9 4l.5-.5a2.5 2.5 0 0 1 3.5 3.5l-1 1' },
|
|
303
|
+
{ d: 'M7 12l-.5.5a2.5 2.5 0 0 1-3.5-3.5l1-1' },
|
|
304
|
+
{ d: 'M2.5 2.5l11 11', width: 1.2 },
|
|
305
|
+
],
|
|
306
|
+
// A PivotTable: a grid whose first row and column are the axes it is
|
|
307
|
+
// summarised by, the body blocked in.
|
|
308
|
+
pivot: [
|
|
309
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
310
|
+
{ d: 'M2.5 6h11M6 2.5v11' },
|
|
311
|
+
{ d: 'M7.5 7.5h2v2h-2zM10.5 7.5h2v2h-2zM7.5 10.5h2v2h-2zM10.5 10.5h2v2h-2z', fill: true },
|
|
312
|
+
],
|
|
313
|
+
// The three sparklines, each drawn as what it draws: a line over a cell,
|
|
314
|
+
// a run of small columns, and the win/loss pair above and below the axis.
|
|
315
|
+
'sparkline-line': [
|
|
316
|
+
{ d: 'M2.5 11.5l3-4 3 2 5-6' },
|
|
317
|
+
{ d: 'M2.5 13.5h11', width: 1.2 },
|
|
318
|
+
],
|
|
319
|
+
'sparkline-column': [
|
|
320
|
+
{ d: 'M3 13.5v-4M6 13.5v-7M9 13.5v-3M12 13.5v-8' },
|
|
321
|
+
],
|
|
322
|
+
'sparkline-winloss': [
|
|
323
|
+
{ d: 'M2.5 8h11', width: 1.2 },
|
|
324
|
+
{ d: 'M3.5 8V5M6.5 8v3M9.5 8V5M12.5 8v3' },
|
|
325
|
+
],
|
|
326
|
+
// A printer: the tray, the page going in, the page coming out.
|
|
327
|
+
print: [
|
|
328
|
+
{ d: 'M4.5 6V2.5h7V6' },
|
|
329
|
+
{ d: 'M2.5 6h11v5h-2.5v3h-6v-3H2.5z' },
|
|
330
|
+
{ d: 'M5 11h6' },
|
|
331
|
+
],
|
|
332
|
+
// Page Layout: a page with its margins marked, and the same page in
|
|
333
|
+
// each of the other guises.
|
|
334
|
+
'page-setup': [
|
|
335
|
+
{ d: 'M3.5 1.5h9v13h-9z' },
|
|
336
|
+
{ d: 'M5.5 3.5h5v9h-5z', width: 1 },
|
|
337
|
+
],
|
|
338
|
+
margins: [
|
|
339
|
+
{ d: 'M3.5 1.5h9v13h-9z' },
|
|
340
|
+
{ d: 'M5.5 1.5v13M10.5 1.5v13M3.5 3.5h9M3.5 12.5h9', width: 1 },
|
|
341
|
+
],
|
|
342
|
+
orientation: [
|
|
343
|
+
{ d: 'M2 4.5h7v9H2z' },
|
|
344
|
+
{ d: 'M9 2.5h5v5H9z' },
|
|
345
|
+
],
|
|
346
|
+
paper: [
|
|
347
|
+
{ d: 'M3.5 1.5h9v13h-9z' },
|
|
348
|
+
{ d: 'M5.5 5h5M5.5 8h5M5.5 11h3', width: 1.3 },
|
|
349
|
+
],
|
|
350
|
+
'print-area': [
|
|
351
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
352
|
+
{ d: 'M5 5h6v6H5z', fill: true },
|
|
353
|
+
],
|
|
354
|
+
'print-titles': [
|
|
355
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
356
|
+
{ d: 'M2.5 5.5h11', width: 2 },
|
|
357
|
+
{ d: 'M2.5 8.5h11M2.5 11.5h11', width: 1 },
|
|
358
|
+
],
|
|
227
359
|
'name-manager': [
|
|
228
360
|
{ d: 'M2.5 3.5A1 1 0 0 1 3.5 2.5h4.6l5.4 5.4-4.9 4.9L3.5 8.4a1 1 0 0 1-1-1z' },
|
|
229
361
|
{ d: 'M5.6 5.6h.01', width: 2.2 },
|
|
@@ -233,6 +365,53 @@ export const RIBBON_ICONS = {
|
|
|
233
365
|
{ d: 'M6.3 10.5V7a1.2 1.2 0 0 1 1.2-1.2M5.2 8h2.4', width: 1.4 },
|
|
234
366
|
{ d: 'M8.6 8l2.4 2.5M11 8l-2.4 2.5', width: 1.2 },
|
|
235
367
|
],
|
|
368
|
+
/* Outlining. The bracket down the left is the outline bar Excel draws
|
|
369
|
+
beside the row numbers; the box at its end is the collapse button,
|
|
370
|
+
carrying a minus where the group is open and a plus where it is shut.
|
|
371
|
+
The column pair is the same glyph turned a quarter turn. */
|
|
372
|
+
'group-rows': [
|
|
373
|
+
{ d: 'M4.5 3.5h7M4.5 6h7M4.5 8.5h7' },
|
|
374
|
+
{ d: 'M2.5 3v6.5' },
|
|
375
|
+
{ d: 'M2.5 12.5h3' },
|
|
376
|
+
{ d: 'M1 11h3v3h-3z' },
|
|
377
|
+
{ d: 'M1.8 12.5h1.4' },
|
|
378
|
+
],
|
|
379
|
+
'group-cols': [
|
|
380
|
+
{ d: 'M3.5 4.5v7M6 4.5v7M8.5 4.5v7' },
|
|
381
|
+
{ d: 'M3 2.5h6.5' },
|
|
382
|
+
{ d: 'M12.5 2.5v3' },
|
|
383
|
+
{ d: 'M11 1h3v3h-3z' },
|
|
384
|
+
{ d: 'M12.5 1.8v1.4' },
|
|
385
|
+
],
|
|
386
|
+
'ungroup-rows': [
|
|
387
|
+
{ d: 'M4.5 3.5h7M4.5 6h7M4.5 8.5h7' },
|
|
388
|
+
{ d: 'M1 11h3v3h-3z', dash: DASHED },
|
|
389
|
+
{ d: 'M2.5 3v6.5', dash: DASHED },
|
|
390
|
+
],
|
|
391
|
+
'ungroup-cols': [
|
|
392
|
+
{ d: 'M3.5 4.5v7M6 4.5v7M8.5 4.5v7' },
|
|
393
|
+
{ d: 'M11 1h3v3h-3z', dash: DASHED },
|
|
394
|
+
{ d: 'M12.5 2.5v3', dash: DASHED },
|
|
395
|
+
],
|
|
396
|
+
/* Show Detail is a plus in a box, Hide Detail a minus: the two faces of
|
|
397
|
+
the same collapse button, which is what the commands do to it. */
|
|
398
|
+
'show-detail': [
|
|
399
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
400
|
+
{ d: 'M5.5 8h5M8 5.5v5' },
|
|
401
|
+
],
|
|
402
|
+
'hide-detail': [
|
|
403
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
404
|
+
{ d: 'M5.5 8h5' },
|
|
405
|
+
],
|
|
406
|
+
/* A ticked box, and a button with a rounded face. */
|
|
407
|
+
checkbox: [
|
|
408
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
409
|
+
{ d: 'M5 8l2.2 2.4L11.5 5.5' },
|
|
410
|
+
],
|
|
411
|
+
'cell-button': [
|
|
412
|
+
{ d: 'M2 4.5h12a1.5 1.5 0 0 1 1.5 1.5v4a1.5 1.5 0 0 1-1.5 1.5H2A1.5 1.5 0 0 1 .5 10V6A1.5 1.5 0 0 1 2 4.5z' },
|
|
413
|
+
{ d: 'M4.5 8h7' },
|
|
414
|
+
],
|
|
236
415
|
calculate: [
|
|
237
416
|
{ d: 'M4 1.5h8a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-11a1 1 0 0 1 1-1z' },
|
|
238
417
|
{ d: 'M5 3.5h6v2.5H5z' },
|
|
@@ -281,6 +460,13 @@ export const RIBBON_ICONS = {
|
|
|
281
460
|
{ d: 'M9 10h5v4H9z' },
|
|
282
461
|
{ d: 'M10 10V8.8a1.5 1.5 0 0 1 3 0' },
|
|
283
462
|
],
|
|
463
|
+
// A sheet with a block picked out and a pencil over it: the ranges that take an edit.
|
|
464
|
+
'edit-ranges': [
|
|
465
|
+
{ d: 'M2.5 2.5h11v11h-11z' },
|
|
466
|
+
{ d: 'M2.5 6h11M6 2.5v11' },
|
|
467
|
+
{ d: 'M7.5 7.5h4.5v4.5H7.5z', fill: true },
|
|
468
|
+
{ d: 'M10.5 13.5l3-3 1 1-3 3h-1z' },
|
|
469
|
+
],
|
|
284
470
|
// A speech bubble, and the same bubble with a mark inside or beside it.
|
|
285
471
|
comment: [
|
|
286
472
|
{ d: BUBBLE },
|
package/dist/sheet/ribbon.d.ts
CHANGED
|
@@ -122,7 +122,7 @@ export type RibbonItem = {
|
|
|
122
122
|
split?: boolean;
|
|
123
123
|
};
|
|
124
124
|
/** Actions the ribbon delegates to the host rather than running itself. */
|
|
125
|
-
export type RibbonActionId = 'paste-special' | 'format-cells' | 'find-replace' | 'insert-function' | 'name-manager' | 'text-to-columns' | 'remove-duplicates' | 'goal-seek' | 'insert-chart' | 'insert-table' | 'recalculate' | 'toggle-formulas' | 'sort-asc' | 'sort-desc' | 'toggle-filter' | 'freeze-panes' | 'unfreeze-panes' | 'hide-rows' | 'hide-columns' | 'unhide-rows' | 'unhide-columns' | 'row-height' | 'column-width' | 'autofit-rows' | 'autofit-columns' | 'paste-values' | 'paste-formulas' | 'paste-formats' | 'paste-transpose' | 'format-painter' | 'protect-sheet' | 'unprotect-sheet' | 'toggle-lock' | 'new-comment' | 'edit-comment' | 'delete-comment' | 'prev-comment' | 'next-comment' | 'toggle-comments' | 'data-validation' | 'open-list' | 'freeze-top-row' | 'freeze-first-column' | 'toggle-gridlines' | 'toggle-formula-bar' | 'toggle-headings' | 'toggle-ribbon' | 'cf-greater' | 'cf-less' | 'cf-between' | 'cf-equal' | 'cf-text' | 'cf-duplicates' | 'cf-top10' | 'cf-bottom10' | 'cf-above-average' | 'cf-below-average' | 'cf-data-bar' | 'cf-color-scale-3' | 'cf-color-scale-2' | 'cf-icon-set' | 'cf-clear-selection' | 'cf-clear-sheet' | 'cf-manage' | 'merge-center' | 'merge-across' | 'merge-cells' | 'unmerge-cells';
|
|
125
|
+
export type RibbonActionId = 'file-new' | 'file-open' | 'file-save-xlsx' | 'file-export-csv' | 'file-save-ods' | 'file-save-xls' | 'file-print' | 'page-portrait' | 'page-landscape' | 'paper-a4' | 'paper-a3' | 'paper-a5' | 'paper-letter' | 'paper-legal' | 'paper-tabloid' | 'margins-normal' | 'margins-narrow' | 'margins-wide' | 'print-area-set' | 'print-area-clear' | 'print-titles' | 'page-setup' | 'print-gridlines' | 'print-headings' | 'paste-special' | 'cut' | 'undo' | 'redo' | 'format-cells' | 'find-replace' | 'insert-function' | 'name-manager' | 'text-to-columns' | 'remove-duplicates' | 'goal-seek' | 'insert-chart' | 'insert-picture' | 'chart-setup' | 'delete-object' | 'delete-sheet' | 'sparkline-line' | 'sparkline-column' | 'sparkline-winloss' | 'sparkline-setup' | 'clear-sparklines' | 'insert-pivot' | 'refresh-pivot' | 'insert-link' | 'remove-table' | 'table-style' | 'pivot-details' | 'remove-link' | 'insert-table' | 'recalculate' | 'insert-checkbox' | 'insert-cell-button' | 'clear-cell-type' | 'group-rows' | 'group-cols' | 'auto-outline' | 'ungroup-rows' | 'ungroup-cols' | 'clear-outline' | 'show-detail' | 'hide-detail' | 'calc-options' | 'evaluate-formula' | 'error-checking' | 'toggle-formulas' | 'trace-precedents' | 'trace-dependents' | 'remove-arrows' | 'sort-asc' | 'sort-desc' | 'sort-custom' | 'toggle-filter' | 'freeze-panes' | 'unfreeze-panes' | 'hide-rows' | 'hide-columns' | 'unhide-rows' | 'unhide-columns' | 'row-height' | 'column-width' | 'autofit-rows' | 'autofit-columns' | 'paste-values' | 'paste-formulas' | 'paste-formats' | 'paste-transpose' | 'format-painter' | 'protect-sheet' | 'unprotect-sheet' | 'allow-edit-ranges' | 'toggle-lock' | 'new-comment' | 'edit-comment' | 'delete-comment' | 'prev-comment' | 'next-comment' | 'toggle-comments' | 'data-validation' | 'circle-invalid' | 'clear-circles' | 'open-list' | 'freeze-top-row' | 'freeze-first-column' | 'toggle-gridlines' | 'toggle-formula-bar' | 'toggle-headings' | 'toggle-ribbon' | 'cf-greater' | 'cf-less' | 'cf-between' | 'cf-equal' | 'cf-text' | 'cf-duplicates' | 'cf-top10' | 'cf-bottom10' | 'cf-above-average' | 'cf-below-average' | 'cf-data-bar' | 'cf-color-scale-3' | 'cf-color-scale-2' | 'cf-icon-set' | 'cf-formula' | 'cf-clear-selection' | 'cf-clear-sheet' | 'cf-manage' | 'merge-center' | 'merge-across' | 'merge-cells' | 'unmerge-cells';
|
|
126
126
|
export type RibbonGroup = {
|
|
127
127
|
id: string;
|
|
128
128
|
/** Printed under the group, which is what makes a ribbon a ribbon. */
|