@rowsncolumns/spreadsheet-state 29.0.0 → 29.1.1
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/dist/cjs/api/anchored-objects.d.ts +131 -7
- package/dist/cjs/api/anchored-objects.d.ts.map +1 -1
- package/dist/cjs/api/anchored-objects.js +488 -43
- package/dist/cjs/api/copy-paste.d.ts +1 -2
- package/dist/cjs/api/copy-paste.d.ts.map +1 -1
- package/dist/cjs/api/copy-paste.js +1 -3
- package/dist/cjs/api/filter.d.ts +15 -1
- package/dist/cjs/api/filter.d.ts.map +1 -1
- package/dist/cjs/api/filter.js +32 -2
- package/dist/cjs/api/formula.d.ts +63 -0
- package/dist/cjs/api/formula.d.ts.map +1 -1
- package/dist/cjs/api/formula.js +278 -8
- package/dist/cjs/api/paint-format.d.ts +22 -1
- package/dist/cjs/api/paint-format.d.ts.map +1 -1
- package/dist/cjs/api/paint-format.js +57 -1
- package/dist/cjs/api/sort.d.ts +23 -1
- package/dist/cjs/api/sort.d.ts.map +1 -1
- package/dist/cjs/api/sort.js +52 -6
- package/dist/cjs/api/structural-guards.d.ts +57 -0
- package/dist/cjs/api/structural-guards.d.ts.map +1 -1
- package/dist/cjs/api/structural-guards.js +93 -1
- package/dist/cjs/api/structural-table-refs.d.ts +58 -3
- package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
- package/dist/cjs/api/structural-table-refs.js +177 -16
- package/dist/cjs/api/table.d.ts +26 -2
- package/dist/cjs/api/table.d.ts.map +1 -1
- package/dist/cjs/api/table.js +93 -60
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +53 -8
- package/dist/cjs/atoms/creating-table.atom.d.ts +22 -0
- package/dist/cjs/atoms/creating-table.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/creating-table.atom.js +4 -0
- package/dist/cjs/atoms/dialog-state.atom.d.ts +8 -0
- package/dist/cjs/atoms/dialog-state.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/dialog-state.atom.js +28 -0
- package/dist/cjs/atoms/editing-slicer.atom.d.ts +9 -0
- package/dist/cjs/atoms/editing-slicer.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/editing-slicer.atom.js +6 -0
- package/dist/cjs/atoms/index.d.ts +4 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +4 -0
- package/dist/cjs/atoms/inserting-slicer.atom.d.ts +8 -0
- package/dist/cjs/atoms/inserting-slicer.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/inserting-slicer.atom.js +5 -0
- package/dist/cjs/atoms/resizing-table.atom.d.ts +8 -0
- package/dist/cjs/atoms/resizing-table.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/resizing-table.atom.js +5 -0
- package/dist/cjs/commands.d.ts +129 -2
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/components/editors/embed-editor.d.ts +4 -2
- package/dist/cjs/components/editors/embed-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/embed-editor.js +38 -9
- package/dist/cjs/components/editors/slicer-editor.d.ts +15 -0
- package/dist/cjs/components/editors/slicer-editor.d.ts.map +1 -0
- package/dist/cjs/components/editors/slicer-editor.js +87 -0
- package/dist/cjs/components/editors/table-editor.d.ts +58 -2
- package/dist/cjs/components/editors/table-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/table-editor.js +261 -20
- package/dist/cjs/components/index.d.ts +1 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +1 -0
- package/dist/cjs/constants.d.ts +9 -1
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +12 -0
- package/dist/cjs/generated-names.d.ts +13 -3
- package/dist/cjs/generated-names.d.ts.map +1 -1
- package/dist/cjs/generated-names.js +3 -1
- package/dist/cjs/helpers.d.ts +5 -0
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +10 -1
- package/dist/cjs/hooks/use-on-change-batch.d.ts +19 -2
- package/dist/cjs/hooks/use-on-change-batch.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-batch.js +43 -35
- package/dist/cjs/hooks/use-on-change-calculated-column.d.ts +10 -1
- package/dist/cjs/hooks/use-on-change-calculated-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-calculated-column.js +17 -5
- package/dist/cjs/hooks/use-on-change-table-column.d.ts +6 -1
- package/dist/cjs/hooks/use-on-change-table-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change-table-column.js +17 -5
- package/dist/cjs/hooks/use-on-change.d.ts +36 -3
- package/dist/cjs/hooks/use-on-change.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-change.js +218 -136
- package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts +17 -0
- package/dist/cjs/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-create-custom-table-style.js +28 -0
- package/dist/cjs/hooks/use-on-create-named-range.d.ts +4 -2
- package/dist/cjs/hooks/use-on-create-named-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-create-named-range.js +11 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-left.js +3 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-cells-shift-up.js +3 -1
- package/dist/cjs/hooks/use-on-delete-column.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-column.js +3 -1
- package/dist/cjs/hooks/use-on-delete-row.d.ts +2 -1
- package/dist/cjs/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-row.js +3 -1
- package/dist/cjs/hooks/use-on-delete-sheet.d.ts +10 -1
- package/dist/cjs/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-sheet.js +19 -1
- package/dist/cjs/hooks/use-on-delete-table-row.d.ts +4 -1
- package/dist/cjs/hooks/use-on-delete-table-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-table-row.js +19 -1
- package/dist/cjs/hooks/use-on-delete.d.ts +5 -2
- package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete.js +5 -1
- package/dist/cjs/hooks/use-on-embeds.d.ts +7 -4
- package/dist/cjs/hooks/use-on-embeds.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-embeds.js +26 -24
- package/dist/cjs/hooks/use-on-fill.d.ts +17 -2
- package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-fill.js +29 -15
- package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-filter-table.js +209 -103
- package/dist/cjs/hooks/use-on-import-excel.d.ts +2 -1
- package/dist/cjs/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-import-excel.js +22 -19
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-down.js +3 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-cells-shift-right.js +3 -1
- package/dist/cjs/hooks/use-on-insert-column.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-column.js +3 -1
- package/dist/cjs/hooks/use-on-insert-row.d.ts +2 -1
- package/dist/cjs/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-row.js +3 -1
- package/dist/cjs/hooks/use-on-insert-table-row.d.ts +5 -2
- package/dist/cjs/hooks/use-on-insert-table-row.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-insert-table-row.js +19 -1
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-merge-unmerge-cells.js +14 -1
- package/dist/cjs/hooks/use-on-move-columns.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-columns.js +14 -1
- package/dist/cjs/hooks/use-on-move-rows.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-rows.js +14 -1
- package/dist/cjs/hooks/use-on-move-selection.d.ts +3 -1
- package/dist/cjs/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-move-selection.js +88 -25
- package/dist/cjs/hooks/use-on-paste.d.ts +22 -1
- package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-paste.js +993 -776
- package/dist/cjs/hooks/use-on-remove-duplicates.d.ts +5 -2
- package/dist/cjs/hooks/use-on-remove-duplicates.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-remove-duplicates.js +5 -1
- package/dist/cjs/hooks/use-on-request-create-table.d.ts +13 -0
- package/dist/cjs/hooks/use-on-request-create-table.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-create-table.js +44 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts +7 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-insert-slicer.js +15 -0
- package/dist/cjs/hooks/use-on-request-resize-table.d.ts +7 -0
- package/dist/cjs/hooks/use-on-request-resize-table.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-request-resize-table.js +15 -0
- package/dist/cjs/hooks/use-on-resize-table.d.ts +5 -1
- package/dist/cjs/hooks/use-on-resize-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-resize-table.js +110 -33
- package/dist/cjs/hooks/use-on-sort-column.d.ts +28 -3
- package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-column.js +136 -90
- package/dist/cjs/hooks/use-on-sort-range.d.ts +26 -3
- package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-range.js +113 -67
- package/dist/cjs/hooks/use-on-sort-table.d.ts +18 -1
- package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-sort-table.js +128 -98
- package/dist/cjs/hooks/use-on-subtotal.d.ts +10 -3
- package/dist/cjs/hooks/use-on-subtotal.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-subtotal.js +13 -9
- package/dist/cjs/hooks/use-on-table.d.ts +39 -7
- package/dist/cjs/hooks/use-on-table.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-table.js +257 -49
- package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts +23 -0
- package/dist/cjs/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-undo-calculated-column.js +70 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-undo-table-auto-expansion.js +96 -0
- package/dist/cjs/hooks/use-on-update-named-range.d.ts +4 -2
- package/dist/cjs/hooks/use-on-update-named-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-update-named-range.js +13 -1
- package/dist/cjs/hooks/use-sheet-properties.d.ts +1 -0
- package/dist/cjs/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sheet-properties.js +54 -34
- package/dist/cjs/hooks/use-slicers.d.ts +2 -2
- package/dist/cjs/hooks/use-slicers.d.ts.map +1 -1
- package/dist/cjs/hooks/use-slicers.js +17 -26
- package/dist/cjs/hooks/use-sparkline-groups.d.ts +50 -0
- package/dist/cjs/hooks/use-sparkline-groups.d.ts.map +1 -0
- package/dist/cjs/hooks/use-sparkline-groups.js +192 -0
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +56 -10
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +323 -100
- package/dist/cjs/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/cjs/hooks/use-structured-reference.js +17 -0
- package/dist/cjs/hooks/use-undo-redo-actions.d.ts +2 -1
- package/dist/cjs/hooks/use-undo-redo-actions.d.ts.map +1 -1
- package/dist/cjs/hooks/use-undo-redo-actions.js +10 -2
- package/dist/cjs/hooks/use-undo-redo.d.ts +12 -0
- package/dist/cjs/hooks/use-undo-redo.d.ts.map +1 -1
- package/dist/cjs/hooks/use-undo-redo.js +169 -10
- package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/utils/sort-rows.js +4 -3
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/interface/apply-fill.d.ts +26 -3
- package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
- package/dist/cjs/interface/apply-fill.js +207 -98
- package/dist/cjs/interface/change-batch.d.ts +1 -1
- package/dist/cjs/interface/change-batch.d.ts.map +1 -1
- package/dist/cjs/interface/change-batch.js +112 -15
- package/dist/cjs/interface/change-calculated-column.d.ts +6 -2
- package/dist/cjs/interface/change-calculated-column.d.ts.map +1 -1
- package/dist/cjs/interface/change-calculated-column.js +87 -17
- package/dist/cjs/interface/change-table-column.d.ts +81 -7
- package/dist/cjs/interface/change-table-column.d.ts.map +1 -1
- package/dist/cjs/interface/change-table-column.js +336 -76
- package/dist/cjs/interface/create-table.d.ts +15 -3
- package/dist/cjs/interface/create-table.d.ts.map +1 -1
- package/dist/cjs/interface/create-table.js +100 -25
- package/dist/cjs/interface/delete-cells-shift-left.d.ts +1 -1
- package/dist/cjs/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-left.js +17 -2
- package/dist/cjs/interface/delete-cells-shift-up.d.ts +1 -1
- package/dist/cjs/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells-shift-up.js +17 -2
- package/dist/cjs/interface/delete-cells.d.ts +1 -1
- package/dist/cjs/interface/delete-cells.d.ts.map +1 -1
- package/dist/cjs/interface/delete-cells.js +106 -44
- package/dist/cjs/interface/delete-column.d.ts +1 -1
- package/dist/cjs/interface/delete-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-column.js +16 -3
- package/dist/cjs/interface/delete-row.d.ts +1 -1
- package/dist/cjs/interface/delete-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-row.js +230 -19
- package/dist/cjs/interface/delete-sheet.d.ts +2 -2
- package/dist/cjs/interface/delete-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/delete-sheet.js +149 -2
- package/dist/cjs/interface/delete-table-column.d.ts +1 -1
- package/dist/cjs/interface/delete-table-column.d.ts.map +1 -1
- package/dist/cjs/interface/delete-table-column.js +11 -1
- package/dist/cjs/interface/delete-table-row.d.ts +1 -1
- package/dist/cjs/interface/delete-table-row.d.ts.map +1 -1
- package/dist/cjs/interface/delete-table-row.js +361 -275
- package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/cjs/interface/duplicate-sheet.js +83 -31
- package/dist/cjs/interface/embeds.d.ts +10 -1
- package/dist/cjs/interface/embeds.d.ts.map +1 -1
- package/dist/cjs/interface/embeds.js +120 -6
- package/dist/cjs/interface/insert-cells-shift-down.d.ts +1 -1
- package/dist/cjs/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-down.js +11 -1
- package/dist/cjs/interface/insert-cells-shift-right.d.ts +1 -1
- package/dist/cjs/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/cjs/interface/insert-cells-shift-right.js +11 -1
- package/dist/cjs/interface/insert-column.d.ts +2 -2
- package/dist/cjs/interface/insert-column.d.ts.map +1 -1
- package/dist/cjs/interface/insert-column.js +68 -38
- package/dist/cjs/interface/insert-row.d.ts +1 -1
- package/dist/cjs/interface/insert-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-row.js +10 -2
- package/dist/cjs/interface/insert-table-row.d.ts +2 -1
- package/dist/cjs/interface/insert-table-row.d.ts.map +1 -1
- package/dist/cjs/interface/insert-table-row.js +70 -19
- package/dist/cjs/interface/remove-duplicates.d.ts +1 -1
- package/dist/cjs/interface/remove-duplicates.d.ts.map +1 -1
- package/dist/cjs/interface/remove-duplicates.js +46 -6
- package/dist/cjs/interface/remove-table.d.ts +1 -1
- package/dist/cjs/interface/remove-table.d.ts.map +1 -1
- package/dist/cjs/interface/remove-table.js +72 -16
- package/dist/cjs/interface/slicers.d.ts +12 -1
- package/dist/cjs/interface/slicers.d.ts.map +1 -1
- package/dist/cjs/interface/slicers.js +47 -2
- package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/cjs/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/cjs/interface/spreadsheet-interface.js +64 -1
- package/dist/cjs/interface/table-totalrow.d.ts +13 -1
- package/dist/cjs/interface/table-totalrow.d.ts.map +1 -1
- package/dist/cjs/interface/table-totalrow.js +107 -73
- package/dist/cjs/interface/table-utils.d.ts +59 -6
- package/dist/cjs/interface/table-utils.d.ts.map +1 -1
- package/dist/cjs/interface/table-utils.js +211 -15
- package/dist/cjs/interface/update-table.d.ts +16 -1
- package/dist/cjs/interface/update-table.d.ts.map +1 -1
- package/dist/cjs/interface/update-table.js +190 -44
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/test-setup.d.ts.map +1 -1
- package/dist/cjs/test-setup.js +6 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/validation-schema/table.schema.d.ts +11 -0
- package/dist/cjs/validation-schema/table.schema.d.ts.map +1 -1
- package/dist/cjs/validation-schema/table.schema.js +20 -3
- package/dist/esm/api/anchored-objects.d.ts +131 -7
- package/dist/esm/api/anchored-objects.d.ts.map +1 -1
- package/dist/esm/api/anchored-objects.js +399 -15
- package/dist/esm/api/copy-paste.d.ts +1 -2
- package/dist/esm/api/copy-paste.d.ts.map +1 -1
- package/dist/esm/api/copy-paste.js +1 -3
- package/dist/esm/api/filter.d.ts +15 -1
- package/dist/esm/api/filter.d.ts.map +1 -1
- package/dist/esm/api/filter.js +28 -0
- package/dist/esm/api/formula.d.ts +63 -0
- package/dist/esm/api/formula.d.ts.map +1 -1
- package/dist/esm/api/formula.js +235 -8
- package/dist/esm/api/paint-format.d.ts +22 -1
- package/dist/esm/api/paint-format.d.ts.map +1 -1
- package/dist/esm/api/paint-format.js +44 -1
- package/dist/esm/api/sort.d.ts +23 -1
- package/dist/esm/api/sort.d.ts.map +1 -1
- package/dist/esm/api/sort.js +45 -6
- package/dist/esm/api/structural-guards.d.ts +57 -0
- package/dist/esm/api/structural-guards.d.ts.map +1 -1
- package/dist/esm/api/structural-guards.js +85 -0
- package/dist/esm/api/structural-table-refs.d.ts +58 -3
- package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
- package/dist/esm/api/structural-table-refs.js +126 -6
- package/dist/esm/api/table.d.ts +26 -2
- package/dist/esm/api/table.d.ts.map +1 -1
- package/dist/esm/api/table.js +70 -48
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +53 -8
- package/dist/esm/atoms/creating-table.atom.d.ts +22 -0
- package/dist/esm/atoms/creating-table.atom.d.ts.map +1 -0
- package/dist/esm/atoms/creating-table.atom.js +4 -0
- package/dist/esm/atoms/dialog-state.atom.d.ts +8 -0
- package/dist/esm/atoms/dialog-state.atom.d.ts.map +1 -1
- package/dist/esm/atoms/dialog-state.atom.js +12 -0
- package/dist/esm/atoms/editing-slicer.atom.d.ts +9 -0
- package/dist/esm/atoms/editing-slicer.atom.d.ts.map +1 -0
- package/dist/esm/atoms/editing-slicer.atom.js +6 -0
- package/dist/esm/atoms/index.d.ts +4 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +4 -0
- package/dist/esm/atoms/inserting-slicer.atom.d.ts +8 -0
- package/dist/esm/atoms/inserting-slicer.atom.d.ts.map +1 -0
- package/dist/esm/atoms/inserting-slicer.atom.js +5 -0
- package/dist/esm/atoms/resizing-table.atom.d.ts +8 -0
- package/dist/esm/atoms/resizing-table.atom.d.ts.map +1 -0
- package/dist/esm/atoms/resizing-table.atom.js +5 -0
- package/dist/esm/commands.d.ts +129 -2
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/components/editors/embed-editor.d.ts +4 -2
- package/dist/esm/components/editors/embed-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/embed-editor.js +40 -6
- package/dist/esm/components/editors/slicer-editor.d.ts +15 -0
- package/dist/esm/components/editors/slicer-editor.d.ts.map +1 -0
- package/dist/esm/components/editors/slicer-editor.js +85 -0
- package/dist/esm/components/editors/table-editor.d.ts +58 -2
- package/dist/esm/components/editors/table-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/table-editor.js +243 -19
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/constants.d.ts +9 -1
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +12 -0
- package/dist/esm/generated-names.d.ts +13 -3
- package/dist/esm/generated-names.d.ts.map +1 -1
- package/dist/esm/generated-names.js +3 -1
- package/dist/esm/helpers.d.ts +5 -0
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +7 -1
- package/dist/esm/hooks/use-on-change-batch.d.ts +19 -2
- package/dist/esm/hooks/use-on-change-batch.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-batch.js +19 -3
- package/dist/esm/hooks/use-on-change-calculated-column.d.ts +10 -1
- package/dist/esm/hooks/use-on-change-calculated-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-calculated-column.js +17 -5
- package/dist/esm/hooks/use-on-change-table-column.d.ts +6 -1
- package/dist/esm/hooks/use-on-change-table-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change-table-column.js +17 -5
- package/dist/esm/hooks/use-on-change.d.ts +36 -3
- package/dist/esm/hooks/use-on-change.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-change.js +214 -124
- package/dist/esm/hooks/use-on-create-custom-table-style.d.ts +17 -0
- package/dist/esm/hooks/use-on-create-custom-table-style.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-create-custom-table-style.js +26 -0
- package/dist/esm/hooks/use-on-create-named-range.d.ts +4 -2
- package/dist/esm/hooks/use-on-create-named-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-create-named-range.js +11 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-left.js +3 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-cells-shift-up.js +3 -1
- package/dist/esm/hooks/use-on-delete-column.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-column.js +3 -1
- package/dist/esm/hooks/use-on-delete-row.d.ts +2 -1
- package/dist/esm/hooks/use-on-delete-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-row.js +3 -1
- package/dist/esm/hooks/use-on-delete-sheet.d.ts +10 -1
- package/dist/esm/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-sheet.js +19 -1
- package/dist/esm/hooks/use-on-delete-table-row.d.ts +4 -1
- package/dist/esm/hooks/use-on-delete-table-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-table-row.js +19 -1
- package/dist/esm/hooks/use-on-delete.d.ts +5 -2
- package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete.js +5 -1
- package/dist/esm/hooks/use-on-embeds.d.ts +7 -4
- package/dist/esm/hooks/use-on-embeds.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-embeds.js +23 -6
- package/dist/esm/hooks/use-on-fill.d.ts +17 -2
- package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-fill.js +27 -1
- package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-filter-table.js +97 -26
- package/dist/esm/hooks/use-on-import-excel.d.ts +2 -1
- package/dist/esm/hooks/use-on-import-excel.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-import-excel.js +4 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-down.js +3 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-cells-shift-right.js +3 -1
- package/dist/esm/hooks/use-on-insert-column.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-column.js +3 -1
- package/dist/esm/hooks/use-on-insert-row.d.ts +2 -1
- package/dist/esm/hooks/use-on-insert-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-row.js +3 -1
- package/dist/esm/hooks/use-on-insert-table-row.d.ts +5 -2
- package/dist/esm/hooks/use-on-insert-table-row.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-insert-table-row.js +19 -1
- package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts +3 -2
- package/dist/esm/hooks/use-on-merge-unmerge-cells.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-merge-unmerge-cells.js +12 -1
- package/dist/esm/hooks/use-on-move-columns.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-columns.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-columns.js +14 -1
- package/dist/esm/hooks/use-on-move-rows.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-rows.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-rows.js +14 -1
- package/dist/esm/hooks/use-on-move-selection.d.ts +3 -1
- package/dist/esm/hooks/use-on-move-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-move-selection.js +44 -1
- package/dist/esm/hooks/use-on-paste.d.ts +22 -1
- package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-paste.js +815 -672
- package/dist/esm/hooks/use-on-remove-duplicates.d.ts +5 -2
- package/dist/esm/hooks/use-on-remove-duplicates.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-remove-duplicates.js +5 -1
- package/dist/esm/hooks/use-on-request-create-table.d.ts +13 -0
- package/dist/esm/hooks/use-on-request-create-table.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-create-table.js +43 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.d.ts +7 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-insert-slicer.js +15 -0
- package/dist/esm/hooks/use-on-request-resize-table.d.ts +7 -0
- package/dist/esm/hooks/use-on-request-resize-table.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-request-resize-table.js +15 -0
- package/dist/esm/hooks/use-on-resize-table.d.ts +5 -1
- package/dist/esm/hooks/use-on-resize-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-resize-table.js +107 -27
- package/dist/esm/hooks/use-on-sort-column.d.ts +28 -3
- package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-column.js +105 -68
- package/dist/esm/hooks/use-on-sort-range.d.ts +26 -3
- package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-range.js +100 -64
- package/dist/esm/hooks/use-on-sort-table.d.ts +18 -1
- package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-sort-table.js +107 -86
- package/dist/esm/hooks/use-on-subtotal.d.ts +10 -3
- package/dist/esm/hooks/use-on-subtotal.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-subtotal.js +7 -5
- package/dist/esm/hooks/use-on-table.d.ts +39 -7
- package/dist/esm/hooks/use-on-table.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-table.js +234 -26
- package/dist/esm/hooks/use-on-undo-calculated-column.d.ts +23 -0
- package/dist/esm/hooks/use-on-undo-calculated-column.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-undo-calculated-column.js +62 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts +28 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-undo-table-auto-expansion.js +75 -0
- package/dist/esm/hooks/use-on-update-named-range.d.ts +4 -2
- package/dist/esm/hooks/use-on-update-named-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-update-named-range.js +13 -1
- package/dist/esm/hooks/use-sheet-properties.d.ts +1 -0
- package/dist/esm/hooks/use-sheet-properties.d.ts.map +1 -1
- package/dist/esm/hooks/use-sheet-properties.js +38 -19
- package/dist/esm/hooks/use-slicers.d.ts +2 -2
- package/dist/esm/hooks/use-slicers.d.ts.map +1 -1
- package/dist/esm/hooks/use-slicers.js +16 -8
- package/dist/esm/hooks/use-sparkline-groups.d.ts +50 -0
- package/dist/esm/hooks/use-sparkline-groups.d.ts.map +1 -0
- package/dist/esm/hooks/use-sparkline-groups.js +146 -0
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +56 -10
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +260 -30
- package/dist/esm/hooks/use-structured-reference.d.ts.map +1 -1
- package/dist/esm/hooks/use-structured-reference.js +17 -0
- package/dist/esm/hooks/use-undo-redo-actions.d.ts +2 -1
- package/dist/esm/hooks/use-undo-redo-actions.d.ts.map +1 -1
- package/dist/esm/hooks/use-undo-redo-actions.js +8 -2
- package/dist/esm/hooks/use-undo-redo.d.ts +12 -0
- package/dist/esm/hooks/use-undo-redo.d.ts.map +1 -1
- package/dist/esm/hooks/use-undo-redo.js +158 -7
- package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
- package/dist/esm/hooks/utils/sort-rows.js +4 -3
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/interface/apply-fill.d.ts +26 -3
- package/dist/esm/interface/apply-fill.d.ts.map +1 -1
- package/dist/esm/interface/apply-fill.js +188 -88
- package/dist/esm/interface/change-batch.d.ts +1 -1
- package/dist/esm/interface/change-batch.d.ts.map +1 -1
- package/dist/esm/interface/change-batch.js +89 -8
- package/dist/esm/interface/change-calculated-column.d.ts +6 -2
- package/dist/esm/interface/change-calculated-column.d.ts.map +1 -1
- package/dist/esm/interface/change-calculated-column.js +81 -16
- package/dist/esm/interface/change-table-column.d.ts +81 -7
- package/dist/esm/interface/change-table-column.d.ts.map +1 -1
- package/dist/esm/interface/change-table-column.js +295 -67
- package/dist/esm/interface/create-table.d.ts +15 -3
- package/dist/esm/interface/create-table.d.ts.map +1 -1
- package/dist/esm/interface/create-table.js +103 -27
- package/dist/esm/interface/delete-cells-shift-left.d.ts +1 -1
- package/dist/esm/interface/delete-cells-shift-left.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-left.js +17 -2
- package/dist/esm/interface/delete-cells-shift-up.d.ts +1 -1
- package/dist/esm/interface/delete-cells-shift-up.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells-shift-up.js +17 -2
- package/dist/esm/interface/delete-cells.d.ts +1 -1
- package/dist/esm/interface/delete-cells.d.ts.map +1 -1
- package/dist/esm/interface/delete-cells.js +69 -30
- package/dist/esm/interface/delete-column.d.ts +1 -1
- package/dist/esm/interface/delete-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-column.js +16 -3
- package/dist/esm/interface/delete-row.d.ts +1 -1
- package/dist/esm/interface/delete-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-row.js +180 -16
- package/dist/esm/interface/delete-sheet.d.ts +2 -2
- package/dist/esm/interface/delete-sheet.d.ts.map +1 -1
- package/dist/esm/interface/delete-sheet.js +132 -1
- package/dist/esm/interface/delete-table-column.d.ts +1 -1
- package/dist/esm/interface/delete-table-column.d.ts.map +1 -1
- package/dist/esm/interface/delete-table-column.js +11 -1
- package/dist/esm/interface/delete-table-row.d.ts +1 -1
- package/dist/esm/interface/delete-table-row.d.ts.map +1 -1
- package/dist/esm/interface/delete-table-row.js +312 -232
- package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
- package/dist/esm/interface/duplicate-sheet.js +73 -26
- package/dist/esm/interface/embeds.d.ts +10 -1
- package/dist/esm/interface/embeds.d.ts.map +1 -1
- package/dist/esm/interface/embeds.js +84 -5
- package/dist/esm/interface/insert-cells-shift-down.d.ts +1 -1
- package/dist/esm/interface/insert-cells-shift-down.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-down.js +11 -1
- package/dist/esm/interface/insert-cells-shift-right.d.ts +1 -1
- package/dist/esm/interface/insert-cells-shift-right.d.ts.map +1 -1
- package/dist/esm/interface/insert-cells-shift-right.js +11 -1
- package/dist/esm/interface/insert-column.d.ts +2 -2
- package/dist/esm/interface/insert-column.d.ts.map +1 -1
- package/dist/esm/interface/insert-column.js +49 -23
- package/dist/esm/interface/insert-row.d.ts +1 -1
- package/dist/esm/interface/insert-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-row.js +10 -2
- package/dist/esm/interface/insert-table-row.d.ts +2 -1
- package/dist/esm/interface/insert-table-row.d.ts.map +1 -1
- package/dist/esm/interface/insert-table-row.js +67 -12
- package/dist/esm/interface/remove-duplicates.d.ts +1 -1
- package/dist/esm/interface/remove-duplicates.d.ts.map +1 -1
- package/dist/esm/interface/remove-duplicates.js +41 -6
- package/dist/esm/interface/remove-table.d.ts +1 -1
- package/dist/esm/interface/remove-table.d.ts.map +1 -1
- package/dist/esm/interface/remove-table.js +58 -10
- package/dist/esm/interface/slicers.d.ts +12 -1
- package/dist/esm/interface/slicers.d.ts.map +1 -1
- package/dist/esm/interface/slicers.js +44 -2
- package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/esm/interface/spreadsheet-interface.d.ts.map +1 -1
- package/dist/esm/interface/spreadsheet-interface.js +73 -1
- package/dist/esm/interface/table-totalrow.d.ts +13 -1
- package/dist/esm/interface/table-totalrow.d.ts.map +1 -1
- package/dist/esm/interface/table-totalrow.js +98 -68
- package/dist/esm/interface/table-utils.d.ts +59 -6
- package/dist/esm/interface/table-utils.d.ts.map +1 -1
- package/dist/esm/interface/table-utils.js +155 -14
- package/dist/esm/interface/update-table.d.ts +16 -1
- package/dist/esm/interface/update-table.d.ts.map +1 -1
- package/dist/esm/interface/update-table.js +203 -42
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/test-setup.d.ts.map +1 -1
- package/dist/esm/test-setup.js +6 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/validation-schema/table.schema.d.ts +11 -0
- package/dist/esm/validation-schema/table.schema.d.ts.map +1 -1
- package/dist/esm/validation-schema/table.schema.js +15 -2
- package/package.json +19 -11
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { __read, __values } from "tslib";
|
|
2
|
-
import { isNil, isNumber } from "@rowsncolumns/utils";
|
|
2
|
+
import { getTotalsRowFormula, isNil, isNumber } from "@rowsncolumns/utils";
|
|
3
3
|
import { produceWithPatches } from "immer";
|
|
4
4
|
import { createSheetCellIdentifier } from "../api/formula";
|
|
5
5
|
import { createSheetDraft } from "../api/immer-utils";
|
|
6
6
|
import { SheetCell } from "../sheet-cell";
|
|
7
7
|
/**
|
|
8
|
-
* Add a total row to a table
|
|
8
|
+
* Add a total row to a table the way Excel does when Total Row is switched on:
|
|
9
|
+
* "Total" in the first column and ONE structured-reference `SUBTOTAL` in the
|
|
10
|
+
* last column — Sum (`109`) when that column's body is all numbers, Count
|
|
11
|
+
* (`103`) otherwise; every other totals cell stays blank. A single-column
|
|
12
|
+
* table gets the formula.
|
|
9
13
|
*
|
|
10
14
|
* Expects `updatedTable.range` to already include the total row, i.e.
|
|
11
15
|
* `range.endRowIndex` is the row the totals are written to.
|
|
@@ -15,104 +19,134 @@ export var addTotalRow = function (_a) {
|
|
|
15
19
|
return function (sheetId, updatedTable, saveHistory) {
|
|
16
20
|
// We need to track this for history. Precedent cells
|
|
17
21
|
var recalcCells = new Map();
|
|
18
|
-
/**
|
|
19
|
-
* 1. Validate number columns
|
|
20
|
-
* 2. Add Subtotal function
|
|
21
|
-
*/
|
|
22
|
-
var numberColumnIndexes = [];
|
|
23
22
|
var sheetCell = new SheetCell();
|
|
24
23
|
var _a = updatedTable.range, startRowIndex = _a.startRowIndex, startColumnIndex = _a.startColumnIndex, endRowIndex = _a.endRowIndex, endColumnIndex = _a.endColumnIndex;
|
|
25
|
-
// Add total text
|
|
26
24
|
var totalRowIndex = endRowIndex;
|
|
25
|
+
var bodyStartRowIndex = startRowIndex + (updatedTable.headerRow !== false ? 1 : 0);
|
|
27
26
|
/**
|
|
28
27
|
* Update sheet
|
|
29
28
|
*/
|
|
30
29
|
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
31
30
|
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
// Is every non-blank body cell of the column a number? Dates are
|
|
33
|
+
// stored as numbers, but summing them is meaningless.
|
|
34
|
+
var isNumericColumn = function (columnIndex) {
|
|
35
|
+
var _a, _b, _c;
|
|
36
36
|
var values = [];
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
columnIndex: columnIndex,
|
|
43
|
-
}, cellData, { locale: locale });
|
|
44
|
-
var effectiveValue = sheetCell.getEffectiveValue();
|
|
37
|
+
for (var rowIndex = bodyStartRowIndex; rowIndex < totalRowIndex; rowIndex++) {
|
|
38
|
+
var cellData = (_c = (_b = (_a = draft[sheetId]) === null || _a === void 0 ? void 0 : _a[rowIndex]) === null || _b === void 0 ? void 0 : _b.values) === null || _c === void 0 ? void 0 : _c[columnIndex];
|
|
39
|
+
sheetCell.assign(sheetId, { rowIndex: rowIndex, columnIndex: columnIndex }, cellData, {
|
|
40
|
+
locale: locale,
|
|
41
|
+
});
|
|
45
42
|
var numberFormat = sheetCell.getNumberFormat();
|
|
46
|
-
// Dates are stored as numbers, but summing them is meaningless
|
|
47
43
|
if ((numberFormat === null || numberFormat === void 0 ? void 0 : numberFormat.type) === "DATE" ||
|
|
48
44
|
(numberFormat === null || numberFormat === void 0 ? void 0 : numberFormat.type) === "DATE_TIME") {
|
|
49
|
-
|
|
50
|
-
break;
|
|
45
|
+
return false;
|
|
51
46
|
}
|
|
47
|
+
var effectiveValue = sheetCell.getEffectiveValue();
|
|
52
48
|
if (!isNil(effectiveValue)) {
|
|
53
49
|
values.push(effectiveValue);
|
|
54
50
|
}
|
|
55
51
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
return values.length > 0 && values.every(isNumber);
|
|
53
|
+
};
|
|
54
|
+
var currentSheet = createSheetDraft(draft, sheetId, totalRowIndex);
|
|
55
|
+
var writeTotalCell = function (columnIndex, value) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
sheetCell.assign(sheetId, { rowIndex: totalRowIndex, columnIndex: columnIndex }, (_b = (_a = currentSheet[totalRowIndex]) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b[columnIndex], { locale: locale });
|
|
58
|
+
sheetCell.setUserEnteredValue(value);
|
|
59
|
+
// The totals row's bold and top rule come from the table style's
|
|
60
|
+
// `totalRow` band, not from an explicit cell format.
|
|
61
|
+
currentSheet[totalRowIndex].values[columnIndex] =
|
|
62
|
+
sheetCell.getCellData();
|
|
63
|
+
};
|
|
64
|
+
var writeTotalFormula = function (columnIndex, formula) {
|
|
65
|
+
writeTotalCell(columnIndex, formula);
|
|
66
|
+
var position = { rowIndex: totalRowIndex, columnIndex: columnIndex, sheetId: sheetId };
|
|
67
|
+
enqueueCalculation({ type: "add", position: position });
|
|
68
|
+
recalcCells.set(createSheetCellIdentifier(sheetId, totalRowIndex, columnIndex), position);
|
|
69
|
+
};
|
|
70
|
+
// A column with a recorded `totalsRowFunction` (the totals dropdown's
|
|
71
|
+
// choice, kept across toggles) regenerates that; the others take
|
|
72
|
+
// Excel's defaults below.
|
|
73
|
+
var recorded = new Set();
|
|
74
|
+
for (var columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
|
|
75
|
+
var column = (_a = updatedTable.columns) === null || _a === void 0 ? void 0 : _a[columnIndex - startColumnIndex];
|
|
76
|
+
var fn = column === null || column === void 0 ? void 0 : column.totalsRowFunction;
|
|
77
|
+
if (!fn)
|
|
78
|
+
continue;
|
|
79
|
+
recorded.add(columnIndex);
|
|
80
|
+
var formula = (column === null || column === void 0 ? void 0 : column.name)
|
|
81
|
+
? getTotalsRowFormula(fn, updatedTable.title, column.name)
|
|
82
|
+
: undefined;
|
|
83
|
+
if (formula)
|
|
84
|
+
writeTotalFormula(columnIndex, formula);
|
|
85
|
+
}
|
|
86
|
+
var lastColumnName = (_c = (_b = updatedTable.columns) === null || _b === void 0 ? void 0 : _b[endColumnIndex - startColumnIndex]) === null || _c === void 0 ? void 0 : _c.name;
|
|
87
|
+
var lastColumnFormula = lastColumnName && !recorded.has(endColumnIndex)
|
|
88
|
+
? getTotalsRowFormula(isNumericColumn(endColumnIndex) ? "sum" : "count", updatedTable.title, lastColumnName)
|
|
89
|
+
: undefined;
|
|
90
|
+
// The total label owns the first column unless the formula needs it
|
|
91
|
+
// (single-column table).
|
|
92
|
+
if (!recorded.has(startColumnIndex) &&
|
|
93
|
+
(endColumnIndex > startColumnIndex || !lastColumnFormula)) {
|
|
94
|
+
writeTotalCell(startColumnIndex, "Total");
|
|
59
95
|
}
|
|
96
|
+
if (lastColumnFormula) {
|
|
97
|
+
writeTotalFormula(endColumnIndex, lastColumnFormula);
|
|
98
|
+
}
|
|
99
|
+
}), 3), nextState = _a[0], patches = _a[1], inversePatches = _a[2];
|
|
100
|
+
saveHistory({
|
|
101
|
+
sheetData: { patches: patches, inversePatches: inversePatches },
|
|
102
|
+
recalcCells: { undo: recalcCells, redo: recalcCells },
|
|
103
|
+
});
|
|
104
|
+
return nextState;
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Rewrite the totals-row cells of `columnIndexes` from their column's recorded
|
|
110
|
+
* `totalsRowFunction` (the totals dropdown's choice): a function writes its
|
|
111
|
+
* structured `SUBTOTAL`, `none` (or no name to reference) clears the cell.
|
|
112
|
+
*
|
|
113
|
+
* Expects `table.range` to include the total row (`range.endRowIndex`).
|
|
114
|
+
*/
|
|
115
|
+
export var setTotalRowFunctions = function (_a) {
|
|
116
|
+
var locale = _a.locale, onChangeSheetData = _a.onChangeSheetData, enqueueCalculation = _a.enqueueCalculation;
|
|
117
|
+
return function (sheetId, table, columnIndexes, saveHistory) {
|
|
118
|
+
var recalcCells = new Map();
|
|
119
|
+
var sheetCell = new SheetCell();
|
|
120
|
+
var totalRowIndex = table.range.endRowIndex;
|
|
121
|
+
onChangeSheetData === null || onChangeSheetData === void 0 ? void 0 : onChangeSheetData(function (prevSheetData) {
|
|
122
|
+
var _a = __read(produceWithPatches(prevSheetData, function (draft) {
|
|
123
|
+
var e_1, _a;
|
|
124
|
+
var _b, _c, _d;
|
|
60
125
|
var currentSheet = createSheetDraft(draft, sheetId, totalRowIndex);
|
|
61
|
-
sheetCell.assign(sheetId, {
|
|
62
|
-
rowIndex: totalRowIndex,
|
|
63
|
-
columnIndex: startColumnIndex,
|
|
64
|
-
}, (_f = (_e = currentSheet[totalRowIndex]) === null || _e === void 0 ? void 0 : _e.values) === null || _f === void 0 ? void 0 : _f[startColumnIndex], { locale: locale });
|
|
65
|
-
// Add total text
|
|
66
|
-
sheetCell.setUserEnteredValue("Total");
|
|
67
|
-
// Bold, can be overridden by user
|
|
68
|
-
sheetCell.setUserEnteredFormat("textFormat", {
|
|
69
|
-
bold: true,
|
|
70
|
-
});
|
|
71
|
-
// Set cell data
|
|
72
|
-
currentSheet[totalRowIndex].values[startColumnIndex] =
|
|
73
|
-
sheetCell.getCellData();
|
|
74
126
|
try {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
sheetCell.assign(sheetId, {
|
|
85
|
-
columnIndex: columnIndex,
|
|
86
|
-
rowIndex: rowIndex,
|
|
87
|
-
}, cellData, { locale: locale });
|
|
88
|
-
var columnName = (_l = (_k = updatedTable.columns) === null || _k === void 0 ? void 0 : _k[columnIndex - startColumnIndex]) === null || _l === void 0 ? void 0 : _l.name;
|
|
89
|
-
if (columnName) {
|
|
90
|
-
sheetCell.setUserEnteredValue("=SUBTOTAL(109, [".concat(columnName, "])"));
|
|
127
|
+
for (var columnIndexes_1 = __values(columnIndexes), columnIndexes_1_1 = columnIndexes_1.next(); !columnIndexes_1_1.done; columnIndexes_1_1 = columnIndexes_1.next()) {
|
|
128
|
+
var columnIndex = columnIndexes_1_1.value;
|
|
129
|
+
var column = (_b = table.columns) === null || _b === void 0 ? void 0 : _b[columnIndex - table.range.startColumnIndex];
|
|
130
|
+
var formula = (column === null || column === void 0 ? void 0 : column.totalsRowFunction) && column.name
|
|
131
|
+
? getTotalsRowFormula(column.totalsRowFunction, table.title, column.name)
|
|
132
|
+
: undefined;
|
|
133
|
+
sheetCell.assign(sheetId, { rowIndex: totalRowIndex, columnIndex: columnIndex }, formula ? (_d = (_c = currentSheet[totalRowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[columnIndex] : undefined, { locale: locale });
|
|
134
|
+
if (formula) {
|
|
135
|
+
sheetCell.setUserEnteredValue(formula);
|
|
91
136
|
// Bold, can be overridden by user
|
|
92
|
-
sheetCell.setUserEnteredFormat("textFormat", {
|
|
93
|
-
bold: true,
|
|
94
|
-
});
|
|
95
|
-
// Set cell data
|
|
96
|
-
currentSheet[totalRowIndex].values[columnIndex] =
|
|
97
|
-
sheetCell.getCellData();
|
|
98
|
-
var position = {
|
|
99
|
-
rowIndex: rowIndex,
|
|
100
|
-
columnIndex: columnIndex,
|
|
101
|
-
sheetId: sheetId,
|
|
102
|
-
};
|
|
103
|
-
enqueueCalculation({
|
|
104
|
-
type: "add",
|
|
105
|
-
position: position,
|
|
106
|
-
});
|
|
107
|
-
// Add sheet id
|
|
108
|
-
recalcCells.set(createSheetCellIdentifier(sheetId, rowIndex, columnIndex), position);
|
|
137
|
+
sheetCell.setUserEnteredFormat("textFormat", { bold: true });
|
|
109
138
|
}
|
|
139
|
+
currentSheet[totalRowIndex].values[columnIndex] =
|
|
140
|
+
sheetCell.getCellData();
|
|
141
|
+
var position = { rowIndex: totalRowIndex, columnIndex: columnIndex, sheetId: sheetId };
|
|
142
|
+
enqueueCalculation({ type: "add", position: position });
|
|
143
|
+
recalcCells.set(createSheetCellIdentifier(sheetId, totalRowIndex, columnIndex), position);
|
|
110
144
|
}
|
|
111
145
|
}
|
|
112
146
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
113
147
|
finally {
|
|
114
148
|
try {
|
|
115
|
-
if (
|
|
149
|
+
if (columnIndexes_1_1 && !columnIndexes_1_1.done && (_a = columnIndexes_1.return)) _a.call(columnIndexes_1);
|
|
116
150
|
}
|
|
117
151
|
finally { if (e_1) throw e_1.error; }
|
|
118
152
|
}
|
|
@@ -1,21 +1,74 @@
|
|
|
1
|
-
import type { GridRange } from "@rowsncolumns/common-types";
|
|
2
|
-
import type { CellData, TableView } from "@rowsncolumns/spreadsheet";
|
|
1
|
+
import type { GridRange, SelectionArea } from "@rowsncolumns/common-types";
|
|
2
|
+
import type { CellData, Column, TableView } from "@rowsncolumns/spreadsheet";
|
|
3
3
|
import type { Draft } from "immer";
|
|
4
4
|
import type { GeneratedNames } from "../generated-names";
|
|
5
|
+
import type { SheetData } from "../hooks/use-spreadsheet-state";
|
|
6
|
+
/**
|
|
7
|
+
* Does any cell of `rowIndex` within a table's columns hold a value or formula?
|
|
8
|
+
* Decides whether switching Total Row on must first shift the row below the
|
|
9
|
+
* table down (Excel inserts a row rather than overwrite data).
|
|
10
|
+
*/
|
|
11
|
+
export declare const tableRowHasContent: <T extends CellData>(rows: SheetData<T>[number] | undefined, rowIndex: number, startColumnIndex: number, endColumnIndex: number) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Excel's Header Row → ON re-adds the header ABOVE the data when the row above the table is free:
|
|
14
|
+
* it exists, holds no value or formula in the table's columns, and belongs to no other table.
|
|
15
|
+
* Otherwise the first data row becomes the header row in place.
|
|
16
|
+
*/
|
|
17
|
+
export declare const tableHeaderRowAboveIsFree: <T extends CellData>({ sheetId, table, sheetData, tables, }: {
|
|
18
|
+
sheetId: number;
|
|
19
|
+
table: TableView;
|
|
20
|
+
sheetData: SheetData<T> | undefined;
|
|
21
|
+
tables: TableView[] | undefined;
|
|
22
|
+
}) => boolean;
|
|
5
23
|
export declare const rangesOverlap: (a: GridRange, b: GridRange) => boolean;
|
|
6
24
|
export declare const tableWouldOverlap: (candidate: {
|
|
7
25
|
sheetId: number;
|
|
8
26
|
range: GridRange;
|
|
9
27
|
id?: TableView["id"];
|
|
10
28
|
}, existing: TableView[] | undefined) => boolean;
|
|
11
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Excel: a table's header names are unique, compared case-insensitively — a duplicate takes the
|
|
31
|
+
* next free numeric suffix (`Name`, `Name2`, `Name3`).
|
|
32
|
+
*/
|
|
33
|
+
export declare const getUniqueTableColumnName: (name: string, taken: Iterable<string>) => string;
|
|
34
|
+
type TableHeaderNamesOptions = {
|
|
12
35
|
sheetId: number;
|
|
13
|
-
draft: Draft<any>;
|
|
14
36
|
range: GridRange;
|
|
15
37
|
getFormattedValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | null | undefined;
|
|
16
|
-
locale?: string;
|
|
17
38
|
generatedNames?: GeneratedNames;
|
|
39
|
+
/** Columns the table already names, by position — kept as they are; only the rest are derived. */
|
|
40
|
+
columns?: (Column | undefined)[] | null;
|
|
18
41
|
};
|
|
19
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The header names a table takes over `range` (Excel): a column the table already names keeps
|
|
44
|
+
* that name; every other column takes its header cell's display text, de-duplicated against the
|
|
45
|
+
* names before it (`Name`, `Name2`, …), and a blank header cell takes the first free `ColumnN`.
|
|
46
|
+
*/
|
|
47
|
+
export declare const getTableHeaderNames: ({ sheetId, range, getFormattedValue, generatedNames, columns, }: TableHeaderNamesOptions) => string[];
|
|
48
|
+
type AddTableColumnOptions<T extends CellData> = TableHeaderNamesOptions & {
|
|
49
|
+
draft: Draft<any>;
|
|
50
|
+
locale?: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Write a table's header row: every header cell holds its column's name as TEXT (Excel stores
|
|
54
|
+
* headers as text — a `2024` header becomes the string "2024"), so a blank, numeric, formula or
|
|
55
|
+
* de-duplicated header cell is (re)written; a text cell already reading its name is left alone.
|
|
56
|
+
* The names come from {@link getTableHeaderNames}, so the table's `columns` and its cells agree.
|
|
57
|
+
*/
|
|
58
|
+
export declare const addTableColumn: <T extends CellData>({ draft, sheetId, range, getFormattedValue, locale, generatedNames, columns, }: AddTableColumnOptions<T>) => string[];
|
|
59
|
+
export type TableHeaderRefill = {
|
|
60
|
+
tableId: TableView["id"];
|
|
61
|
+
rowIndex: number;
|
|
62
|
+
columnIndex: number;
|
|
63
|
+
/** Position of the header within `table.columns`. */
|
|
64
|
+
dimensionIndex: number;
|
|
65
|
+
name: string;
|
|
66
|
+
};
|
|
67
|
+
export declare const getTableHeaderRefills: ({ sheetId, tables, selections, generatedNames, }: {
|
|
68
|
+
sheetId: number;
|
|
69
|
+
tables: TableView[] | undefined;
|
|
70
|
+
selections: Pick<SelectionArea, "range">[];
|
|
71
|
+
generatedNames?: GeneratedNames;
|
|
72
|
+
}) => TableHeaderRefill[];
|
|
20
73
|
export {};
|
|
21
74
|
//# sourceMappingURL=table-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-utils.d.ts","sourceRoot":"","sources":["../../../interface/table-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"table-utils.d.ts","sourceRoot":"","sources":["../../../interface/table-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,QAAQ,EACnD,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EACtC,UAAU,MAAM,EAChB,kBAAkB,MAAM,EACxB,gBAAgB,MAAM,KACrB,OAUF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,QAAQ,EAAE,wCAK3D;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;CACjC,KAAG,OAqBH,CAAC;AAKF,eAAO,MAAM,aAAa,GAAI,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,OAMxD,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,WAAW;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;CAAE,EACtE,UAAU,SAAS,EAAE,GAAG,SAAS,KAChC,OAQF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,EACZ,OAAO,QAAQ,CAAC,MAAM,CAAC,KACtB,MAaF,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kGAAkG;IAClG,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,iEAMjC,uBAAuB,KAAG,MAAM,EA2BlC,CAAC;AAEF,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI,uBAAuB,GAAG;IACzE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA6BF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,QAAQ,EAAE,gFAQhD,qBAAqB,CAAC,CAAC,CAAC,aAyC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAMF,eAAO,MAAM,qBAAqB,GAAI,kDAKnC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,KAAG,iBAAiB,EAuCpB,CAAC"}
|
|
@@ -1,6 +1,45 @@
|
|
|
1
|
+
import { __assign, __read, __spreadArray, __values } from "tslib";
|
|
2
|
+
import { getCellUserEnteredValue } from "@rowsncolumns/utils";
|
|
1
3
|
import { createSheetDraft } from "../api/immer-utils";
|
|
2
4
|
import { getNextTableColumnName } from "../helpers";
|
|
3
5
|
import { SheetCell } from "../sheet-cell";
|
|
6
|
+
/**
|
|
7
|
+
* Does any cell of `rowIndex` within a table's columns hold a value or formula?
|
|
8
|
+
* Decides whether switching Total Row on must first shift the row below the
|
|
9
|
+
* table down (Excel inserts a row rather than overwrite data).
|
|
10
|
+
*/
|
|
11
|
+
export var tableRowHasContent = function (rows, rowIndex, startColumnIndex, endColumnIndex) {
|
|
12
|
+
var _a;
|
|
13
|
+
var values = (_a = rows === null || rows === void 0 ? void 0 : rows[rowIndex]) === null || _a === void 0 ? void 0 : _a.values;
|
|
14
|
+
if (!values)
|
|
15
|
+
return false;
|
|
16
|
+
for (var columnIndex = startColumnIndex; columnIndex <= endColumnIndex; columnIndex++) {
|
|
17
|
+
var ue = getCellUserEnteredValue(values[columnIndex]);
|
|
18
|
+
if (ue && Object.values(ue).some(function (value) { return value !== undefined && value !== null; })) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Excel's Header Row → ON re-adds the header ABOVE the data when the row above the table is free:
|
|
26
|
+
* it exists, holds no value or formula in the table's columns, and belongs to no other table.
|
|
27
|
+
* Otherwise the first data row becomes the header row in place.
|
|
28
|
+
*/
|
|
29
|
+
export var tableHeaderRowAboveIsFree = function (_a) {
|
|
30
|
+
var sheetId = _a.sheetId, table = _a.table, sheetData = _a.sheetData, tables = _a.tables;
|
|
31
|
+
var rowIndex = table.range.startRowIndex - 1;
|
|
32
|
+
if (rowIndex < 1)
|
|
33
|
+
return false;
|
|
34
|
+
if (tableRowHasContent(sheetData === null || sheetData === void 0 ? void 0 : sheetData[sheetId], rowIndex, table.range.startColumnIndex, table.range.endColumnIndex)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return !tableWouldOverlap({
|
|
38
|
+
sheetId: sheetId,
|
|
39
|
+
id: table.id,
|
|
40
|
+
range: __assign(__assign({}, table.range), { startRowIndex: rowIndex, endRowIndex: rowIndex }),
|
|
41
|
+
}, tables);
|
|
42
|
+
};
|
|
4
43
|
// Excel rejects (recovers + drops) tables whose rectangles overlap on the same
|
|
5
44
|
// sheet. Validate before mutating state so we never accumulate bad data that
|
|
6
45
|
// later fails to export cleanly.
|
|
@@ -19,26 +58,183 @@ export var tableWouldOverlap = function (candidate, existing) {
|
|
|
19
58
|
rangesOverlap(t.range, candidate.range);
|
|
20
59
|
});
|
|
21
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* Excel: a table's header names are unique, compared case-insensitively — a duplicate takes the
|
|
63
|
+
* next free numeric suffix (`Name`, `Name2`, `Name3`).
|
|
64
|
+
*/
|
|
65
|
+
export var getUniqueTableColumnName = function (name, taken) {
|
|
66
|
+
var e_1, _a;
|
|
67
|
+
var lower = new Set();
|
|
68
|
+
try {
|
|
69
|
+
for (var taken_1 = __values(taken), taken_1_1 = taken_1.next(); !taken_1_1.done; taken_1_1 = taken_1.next()) {
|
|
70
|
+
var existing = taken_1_1.value;
|
|
71
|
+
lower.add(existing.toLowerCase());
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
75
|
+
finally {
|
|
76
|
+
try {
|
|
77
|
+
if (taken_1_1 && !taken_1_1.done && (_a = taken_1.return)) _a.call(taken_1);
|
|
78
|
+
}
|
|
79
|
+
finally { if (e_1) throw e_1.error; }
|
|
80
|
+
}
|
|
81
|
+
if (!lower.has(name.toLowerCase())) {
|
|
82
|
+
return name;
|
|
83
|
+
}
|
|
84
|
+
var suffix = 2;
|
|
85
|
+
while (lower.has("".concat(name).concat(suffix).toLowerCase())) {
|
|
86
|
+
suffix++;
|
|
87
|
+
}
|
|
88
|
+
return "".concat(name).concat(suffix);
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The header names a table takes over `range` (Excel): a column the table already names keeps
|
|
92
|
+
* that name; every other column takes its header cell's display text, de-duplicated against the
|
|
93
|
+
* names before it (`Name`, `Name2`, …), and a blank header cell takes the first free `ColumnN`.
|
|
94
|
+
*/
|
|
95
|
+
export var getTableHeaderNames = function (_a) {
|
|
96
|
+
var _b;
|
|
97
|
+
var sheetId = _a.sheetId, range = _a.range, getFormattedValue = _a.getFormattedValue, generatedNames = _a.generatedNames, columns = _a.columns;
|
|
98
|
+
var names = [];
|
|
99
|
+
var reserved = (columns !== null && columns !== void 0 ? columns : []).flatMap(function (column) {
|
|
100
|
+
return (column === null || column === void 0 ? void 0 : column.name) ? [{ name: column.name }] : [];
|
|
101
|
+
});
|
|
102
|
+
for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
|
|
103
|
+
var existing = (_b = columns === null || columns === void 0 ? void 0 : columns[columnIndex - range.startColumnIndex]) === null || _b === void 0 ? void 0 : _b.name;
|
|
104
|
+
if (existing) {
|
|
105
|
+
names.push(existing);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
var text = getFormattedValue(sheetId, range.startRowIndex, columnIndex);
|
|
109
|
+
var taken = __spreadArray(__spreadArray([], __read(reserved), false), __read(names.map(function (name) { return ({ name: name }); })), false);
|
|
110
|
+
names.push(text
|
|
111
|
+
? getUniqueTableColumnName(text, taken.map(function (column) { return column.name; }))
|
|
112
|
+
: getNextTableColumnName(taken, generatedNames));
|
|
113
|
+
}
|
|
114
|
+
return names;
|
|
115
|
+
};
|
|
116
|
+
/** True when the cell is plain text (not a number, boolean or formula) reading exactly `text`. */
|
|
117
|
+
var isTextCellReading = function (cellData, text, formattedValue) {
|
|
118
|
+
if (!cellData) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
var ue = cellData.ue;
|
|
122
|
+
var typed = (ue === null || ue === void 0 ? void 0 : ue.fv) != null ||
|
|
123
|
+
(ue === null || ue === void 0 ? void 0 : ue.formulaValue) != null ||
|
|
124
|
+
(ue === null || ue === void 0 ? void 0 : ue.nv) != null ||
|
|
125
|
+
(ue === null || ue === void 0 ? void 0 : ue.numberValue) != null ||
|
|
126
|
+
(ue === null || ue === void 0 ? void 0 : ue.bv) != null ||
|
|
127
|
+
(ue === null || ue === void 0 ? void 0 : ue.boolValue) != null;
|
|
128
|
+
if (typed) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return ((ue === null || ue === void 0 ? void 0 : ue.sv) === text ||
|
|
132
|
+
(ue === null || ue === void 0 ? void 0 : ue.stringValue) === text ||
|
|
133
|
+
(cellData.ss != null && formattedValue === text));
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Write a table's header row: every header cell holds its column's name as TEXT (Excel stores
|
|
137
|
+
* headers as text — a `2024` header becomes the string "2024"), so a blank, numeric, formula or
|
|
138
|
+
* de-duplicated header cell is (re)written; a text cell already reading its name is left alone.
|
|
139
|
+
* The names come from {@link getTableHeaderNames}, so the table's `columns` and its cells agree.
|
|
140
|
+
*/
|
|
22
141
|
export var addTableColumn = function (_a) {
|
|
23
142
|
var _b, _c, _d;
|
|
24
|
-
var draft = _a.draft, sheetId = _a.sheetId, range = _a.range, getFormattedValue = _a.getFormattedValue, locale = _a.locale, generatedNames = _a.generatedNames;
|
|
25
|
-
|
|
26
|
-
|
|
143
|
+
var draft = _a.draft, sheetId = _a.sheetId, range = _a.range, getFormattedValue = _a.getFormattedValue, locale = _a.locale, generatedNames = _a.generatedNames, columns = _a.columns;
|
|
144
|
+
var names = getTableHeaderNames({
|
|
145
|
+
sheetId: sheetId,
|
|
146
|
+
range: range,
|
|
147
|
+
getFormattedValue: getFormattedValue,
|
|
148
|
+
generatedNames: generatedNames,
|
|
149
|
+
columns: columns,
|
|
150
|
+
});
|
|
27
151
|
var sheetCell = new SheetCell();
|
|
28
152
|
var currentSheet = createSheetDraft(draft, sheetId, range.startRowIndex);
|
|
29
153
|
for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
sheetCell.getCellData();
|
|
39
|
-
}
|
|
40
|
-
columns.push({
|
|
41
|
-
name: formattedValue || columnName,
|
|
154
|
+
var name_1 = names[columnIndex - range.startColumnIndex];
|
|
155
|
+
var cellData = (_d = (_c = (_b = draft === null || draft === void 0 ? void 0 : draft[sheetId]) === null || _b === void 0 ? void 0 : _b[range.startRowIndex]) === null || _c === void 0 ? void 0 : _c.values) === null || _d === void 0 ? void 0 : _d[columnIndex];
|
|
156
|
+
if (isTextCellReading(cellData, name_1, getFormattedValue(sheetId, range.startRowIndex, columnIndex))) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
sheetCell.assign(sheetId, { rowIndex: range.startRowIndex, columnIndex: columnIndex }, cellData, { locale: locale });
|
|
160
|
+
sheetCell.setUserEnteredValue(name_1, undefined, {
|
|
161
|
+
disableTypeInference: true,
|
|
42
162
|
});
|
|
163
|
+
currentSheet[range.startRowIndex].values[columnIndex] =
|
|
164
|
+
sheetCell.getCellData();
|
|
165
|
+
}
|
|
166
|
+
return names;
|
|
167
|
+
};
|
|
168
|
+
// Excel keeps a table under Delete / Clear contents: the cells empty out but
|
|
169
|
+
// the table stays, and a cleared header cell falls back to the first free
|
|
170
|
+
// generic `ColumnN` name — a table column is never nameless. Names the table
|
|
171
|
+
// still uses (uncleared headers) stay reserved so the refills never collide.
|
|
172
|
+
export var getTableHeaderRefills = function (_a) {
|
|
173
|
+
var e_2, _b;
|
|
174
|
+
var _c;
|
|
175
|
+
var sheetId = _a.sheetId, tables = _a.tables, selections = _a.selections, generatedNames = _a.generatedNames;
|
|
176
|
+
var refills = [];
|
|
177
|
+
var _loop_1 = function (table) {
|
|
178
|
+
var e_3, _f, e_4, _g;
|
|
179
|
+
if (table.sheetId !== sheetId || table.headerRow === false)
|
|
180
|
+
return "continue";
|
|
181
|
+
var _h = table.range, rowIndex = _h.startRowIndex, startColumnIndex = _h.startColumnIndex, endColumnIndex = _h.endColumnIndex;
|
|
182
|
+
var cleared = new Set();
|
|
183
|
+
try {
|
|
184
|
+
for (var selections_1 = (e_3 = void 0, __values(selections)), selections_1_1 = selections_1.next(); !selections_1_1.done; selections_1_1 = selections_1.next()) {
|
|
185
|
+
var range = selections_1_1.value.range;
|
|
186
|
+
if (rowIndex < range.startRowIndex || rowIndex > range.endRowIndex) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
for (var columnIndex = Math.max(startColumnIndex, range.startColumnIndex); columnIndex <= Math.min(endColumnIndex, range.endColumnIndex); columnIndex++) {
|
|
190
|
+
cleared.add(columnIndex);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
195
|
+
finally {
|
|
196
|
+
try {
|
|
197
|
+
if (selections_1_1 && !selections_1_1.done && (_f = selections_1.return)) _f.call(selections_1);
|
|
198
|
+
}
|
|
199
|
+
finally { if (e_3) throw e_3.error; }
|
|
200
|
+
}
|
|
201
|
+
if (!cleared.size)
|
|
202
|
+
return "continue";
|
|
203
|
+
var columns = ((_c = table.columns) !== null && _c !== void 0 ? _c : []).filter(function (_, dimensionIndex) { return !cleared.has(startColumnIndex + dimensionIndex); });
|
|
204
|
+
try {
|
|
205
|
+
for (var _j = (e_4 = void 0, __values(__spreadArray([], __read(cleared), false).sort(function (a, b) { return a - b; }))), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
206
|
+
var columnIndex = _k.value;
|
|
207
|
+
var name_2 = getNextTableColumnName(columns, generatedNames);
|
|
208
|
+
columns.push({ name: name_2 });
|
|
209
|
+
refills.push({
|
|
210
|
+
tableId: table.id,
|
|
211
|
+
rowIndex: rowIndex,
|
|
212
|
+
columnIndex: columnIndex,
|
|
213
|
+
dimensionIndex: columnIndex - startColumnIndex,
|
|
214
|
+
name: name_2,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
219
|
+
finally {
|
|
220
|
+
try {
|
|
221
|
+
if (_k && !_k.done && (_g = _j.return)) _g.call(_j);
|
|
222
|
+
}
|
|
223
|
+
finally { if (e_4) throw e_4.error; }
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
try {
|
|
227
|
+
for (var _d = __values(tables !== null && tables !== void 0 ? tables : []), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
228
|
+
var table = _e.value;
|
|
229
|
+
_loop_1(table);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
233
|
+
finally {
|
|
234
|
+
try {
|
|
235
|
+
if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
|
|
236
|
+
}
|
|
237
|
+
finally { if (e_2) throw e_2.error; }
|
|
43
238
|
}
|
|
239
|
+
return refills;
|
|
44
240
|
};
|
|
@@ -1,4 +1,19 @@
|
|
|
1
|
+
import type { GridRange } from "@rowsncolumns/common-types";
|
|
1
2
|
import type { CellData, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
2
3
|
import type { UseOnTableProps } from "../hooks/use-on-table";
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The range an update gives `table`: an explicit range that differs from the current one is taken
|
|
6
|
+
* as is (Excel's Resize Table — the dialog's range wins, whatever toggles ride along); else the
|
|
7
|
+
* current range grown by one row when the update turns the total row on and shrunk by one when it
|
|
8
|
+
* turns it off, with the header row toggle moving the top edge (Excel): OFF drops the header row
|
|
9
|
+
* out of the table (the range starts one row lower — never past the last data row), ON re-adds a
|
|
10
|
+
* header row ABOVE the data when `headerRowAboveIsFree` (see `tableHeaderRowAboveIsFree`), else
|
|
11
|
+
* the first data row becomes the header in place. Same rule as the rnc engine's
|
|
12
|
+
* `table_spec_range`. The hook's refusal guard and the update itself must agree on it, so both
|
|
13
|
+
* resolve it here.
|
|
14
|
+
*/
|
|
15
|
+
export declare const resolveUpdatedTableRange: (table: TableView, updatedTable: Partial<TableView>, { headerRowAboveIsFree }?: {
|
|
16
|
+
headerRowAboveIsFree?: boolean;
|
|
17
|
+
}) => GridRange;
|
|
18
|
+
export declare const updateTable: <T extends CellData, S extends Sheet>({ locale, tables, namedRanges, enqueueCalculation, enqueueGraphOperation, getGraphNodes, createHistory, onChangeTables, onChangeSheetData, getFormattedValue, getDependents, generatedNames, sheetData, rowCount, columnCount, cellXfsRegistry, sharedStringRegistry, getSheetName, getActiveCell, enqueueStructureChange, onChangeSheets, onChangeDataValidations, onChangeConditionalFormats, }: Pick<UseOnTableProps<T, S>, "locale" | "tables" | "namedRanges" | "enqueueCalculation" | "getDependents" | "createHistory" | "onChangeTables" | "onChangeSheetData" | "getFormattedValue" | "generatedNames" | "sheetData" | "rowCount" | "columnCount" | "cellXfsRegistry" | "sharedStringRegistry" | "getSheetName" | "getActiveCell" | "enqueueGraphOperation" | "enqueueStructureChange" | "onChangeSheets" | "onChangeDataValidations" | "onChangeConditionalFormats"> & Partial<Pick<UseOnTableProps<T, S>, "getGraphNodes">>) => (sheetId: number, tableId: TableView["id"], updatedTable: Partial<TableView>) => void;
|
|
4
19
|
//# sourceMappingURL=update-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-table.d.ts","sourceRoot":"","sources":["../../../interface/update-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"update-table.d.ts","sourceRoot":"","sources":["../../../interface/update-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAEV,QAAQ,EACR,KAAK,EACL,SAAS,EACV,MAAM,2BAA2B,CAAC;AAOnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAyB7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GACnC,OAAO,SAAS,EAChB,cAAc,OAAO,CAAC,SAAS,CAAC,EAChC,2BAAkC;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAO,KACxE,SA2BF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,KAAK,EAAE,mYAwB9D,IAAI,CACL,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EACnB,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,GAChB,WAAW,GACX,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,eAAe,GACf,uBAAuB,GACvB,wBAAwB,GACxB,gBAAgB,GAChB,yBAAyB,GACzB,4BAA4B,CAC/B,GACC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,MAEnD,SAAS,MAAM,EACf,SAAS,SAAS,CAAC,IAAI,CAAC,EACxB,cAAc,OAAO,CAAC,SAAS,CAAC,SAmTnC,CAAC"}
|