@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
package/dist/esm/api/sort.js
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import { isNil } from "@rowsncolumns/utils";
|
|
2
|
+
/**
|
|
3
|
+
* The text order both engines sort with: case- and accent-insensitive,
|
|
4
|
+
* digit runs by numeric value ("a2" < "a10"). `rnc_cellmodel::collate_text`
|
|
5
|
+
* is its Rust twin.
|
|
6
|
+
*/
|
|
2
7
|
const { compare: comparator } = new Intl.Collator("en", {
|
|
3
8
|
numeric: true,
|
|
4
9
|
sensitivity: "base",
|
|
5
10
|
});
|
|
11
|
+
export const isSortErrorValue = (value) => typeof value === "object" && value !== null && "sortError" in value;
|
|
12
|
+
/**
|
|
13
|
+
* The value a sort compares for a cell: its error when it has one, else the
|
|
14
|
+
* effective value, else the display text.
|
|
15
|
+
*/
|
|
16
|
+
export const getCellSortValue = (cell) => cell.error
|
|
17
|
+
? { sortError: cell.formattedValue ?? "" }
|
|
18
|
+
: (cell.getEffectiveValue() ?? cell.formattedValue);
|
|
19
|
+
/** Excel's ascending order of value types: numbers < text < logicals < errors. */
|
|
20
|
+
const tierOf = (value) => typeof value === "number"
|
|
21
|
+
? 0
|
|
22
|
+
: typeof value === "string"
|
|
23
|
+
? 1
|
|
24
|
+
: typeof value === "boolean"
|
|
25
|
+
? 2
|
|
26
|
+
: 3;
|
|
27
|
+
/**
|
|
28
|
+
* Excel's sort order: numbers < text < logicals < errors, blanks last in
|
|
29
|
+
* BOTH directions, text compared case-insensitively through the collator.
|
|
30
|
+
*/
|
|
6
31
|
export const cellValueSorter = (left, right, sortOrder) => {
|
|
7
32
|
const isEmpty = (value) => {
|
|
8
33
|
if (isNil(value)) {
|
|
@@ -12,7 +37,7 @@ export const cellValueSorter = (left, right, sortOrder) => {
|
|
|
12
37
|
};
|
|
13
38
|
const leftEmpty = isEmpty(left);
|
|
14
39
|
const rightEmpty = isEmpty(right);
|
|
15
|
-
//
|
|
40
|
+
// Blanks stay last regardless of direction.
|
|
16
41
|
if (leftEmpty && rightEmpty) {
|
|
17
42
|
return 0;
|
|
18
43
|
}
|
|
@@ -22,12 +47,26 @@ export const cellValueSorter = (left, right, sortOrder) => {
|
|
|
22
47
|
if (rightEmpty) {
|
|
23
48
|
return -1;
|
|
24
49
|
}
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
50
|
+
const direction = sortOrder === "ASCENDING" ? 1 : -1;
|
|
51
|
+
const leftTier = tierOf(left);
|
|
52
|
+
const rightTier = tierOf(right);
|
|
53
|
+
if (leftTier !== rightTier) {
|
|
54
|
+
return direction * Math.sign(leftTier - rightTier);
|
|
55
|
+
}
|
|
56
|
+
let comparisonResult = 0;
|
|
57
|
+
if (typeof left === "number" && typeof right === "number") {
|
|
58
|
+
comparisonResult = left - right;
|
|
59
|
+
}
|
|
60
|
+
else if (typeof left === "string" && typeof right === "string") {
|
|
61
|
+
comparisonResult = comparator(left, right);
|
|
62
|
+
}
|
|
63
|
+
else if (typeof left === "boolean" && typeof right === "boolean") {
|
|
64
|
+
// FALSE before TRUE.
|
|
65
|
+
comparisonResult = Number(left) - Number(right);
|
|
66
|
+
}
|
|
67
|
+
// Errors compare equal: Excel keeps them in their original order.
|
|
29
68
|
if (comparisonResult !== 0) {
|
|
30
|
-
return
|
|
69
|
+
return direction * Math.sign(comparisonResult);
|
|
31
70
|
}
|
|
32
71
|
return 0;
|
|
33
72
|
};
|
|
@@ -46,6 +46,24 @@ export declare const findTornArray: (arrayRanges: readonly GridRange[] | undefin
|
|
|
46
46
|
* inside the deleted block. */
|
|
47
47
|
export declare const isRangeInsideBand: (range: GridRange, band: StructuralBand) => boolean;
|
|
48
48
|
export declare const isRangeInsideBlock: (outer: GridRange, inner: GridRange) => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* T-07 — the Excel refusal for defining a table over `range` (create / update): another table on
|
|
51
|
+
* the sheet (`table-overlap`, judged first) or a merged cell (`table-merged-cells`). `excludeTableId`
|
|
52
|
+
* leaves the table being edited out. `insertedRows`, when given, is a one-or-more-row insert that
|
|
53
|
+
* runs first (the Create Table dialog's header row): tables and merges wholly inside its band are
|
|
54
|
+
* judged at their shifted position.
|
|
55
|
+
*/
|
|
56
|
+
export declare const getTableRangeRefusal: ({ sheetId, range, tables, merges, excludeTableId, insertedRows, }: {
|
|
57
|
+
sheetId: number;
|
|
58
|
+
range: GridRange;
|
|
59
|
+
tables?: readonly TableView[] | null;
|
|
60
|
+
merges?: readonly GridRange[] | null;
|
|
61
|
+
excludeTableId?: TableView["id"];
|
|
62
|
+
insertedRows?: {
|
|
63
|
+
band: StructuralBand;
|
|
64
|
+
count: number;
|
|
65
|
+
};
|
|
66
|
+
}) => StructuralRefusal | undefined;
|
|
49
67
|
/**
|
|
50
68
|
* The Excel refusal (if any) for an insert/delete-cells shift of `range`. Checks run in Excel's
|
|
51
69
|
* order: array tear, merge tear, table tear, off-sheet push. `undefined` means the edit may proceed.
|
|
@@ -63,6 +81,45 @@ export declare const getShiftCellsRefusal: <T extends CellData>({ direction, ran
|
|
|
63
81
|
tables?: readonly TableView[] | null;
|
|
64
82
|
arrayRanges?: readonly GridRange[] | null;
|
|
65
83
|
}) => StructuralRefusal | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* T-46 — the refusal (if any) for a drag-move / cut of `from` onto `to`. Excel moves a table whole
|
|
86
|
+
* when the block contains it, but refuses to move PART of a table (the block covers some of its
|
|
87
|
+
* cells) and refuses a block landing on another table's cells; a block that is a whole table
|
|
88
|
+
* landing on another table is a table overlap. A same-table column reorder is decided before this.
|
|
89
|
+
*/
|
|
90
|
+
export declare const getMoveRangeRefusal: ({ sheetId, from, to, toSheetId, tables, }: {
|
|
91
|
+
sheetId: number;
|
|
92
|
+
from: GridRange;
|
|
93
|
+
to: GridRange;
|
|
94
|
+
/** The destination sheet — a cut + paste can land on another sheet; defaults to `sheetId`. */
|
|
95
|
+
toSheetId?: number;
|
|
96
|
+
tables?: readonly TableView[] | null;
|
|
97
|
+
}) => StructuralRefusal | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* T-81 — the refusal for a fill whose filled cells (`target` minus `source`) reach a table's totals
|
|
100
|
+
* row. Excel's fill handle never extends over a totals row (the row is derived, not data), so the
|
|
101
|
+
* whole fill is refused and nothing is written. A fill whose source IS the totals row (filling away
|
|
102
|
+
* from the table) is not affected.
|
|
103
|
+
*/
|
|
104
|
+
export declare const getFillTotalsRowRefusal: ({ sheetId, source, target, tables, }: {
|
|
105
|
+
sheetId: number;
|
|
106
|
+
source: GridRange;
|
|
107
|
+
target: GridRange;
|
|
108
|
+
tables?: readonly TableView[] | null;
|
|
109
|
+
}) => StructuralRefusal | undefined;
|
|
110
|
+
/**
|
|
111
|
+
* T-47 — the refusal (if any) for Insert / Delete Table Rows (`axis: "row"`) or Table Columns
|
|
112
|
+
* (`axis: "column"`) on `table`. The edit shifts the cells of the table's band — its columns from
|
|
113
|
+
* the table down to the sheet edge, or its rows from the table right to the sheet edge. Another
|
|
114
|
+
* table wholly inside that band moves with it; one the band reaches but does not contain would be
|
|
115
|
+
* torn apart, so Excel refuses the edit.
|
|
116
|
+
*/
|
|
117
|
+
export declare const getTableEditRefusal: ({ sheetId, table, axis, tables, }: {
|
|
118
|
+
sheetId: number;
|
|
119
|
+
table: TableView;
|
|
120
|
+
axis: "row" | "column";
|
|
121
|
+
tables?: readonly TableView[] | null;
|
|
122
|
+
}) => StructuralRefusal | undefined;
|
|
66
123
|
/**
|
|
67
124
|
* INS-06 / INS-09 — the refusal for a whole-row (`axis: "row"`) or whole-column insert of `count`
|
|
68
125
|
* lines before `referenceIndex`, given the hard grid cap (`maxRowCount` / `maxColumnCount`). Blank
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-guards.d.ts","sourceRoot":"","sources":["../../../api/structural-guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"structural-guards.d.ts","sourceRoot":"","sources":["../../../api/structural-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -126,6 +126,31 @@ export const findTornArray = (arrayRanges, band, deletedBlock) => findTornRange(
|
|
|
126
126
|
* inside the deleted block. */
|
|
127
127
|
export const isRangeInsideBand = (range, band) => rangeContains(band, range);
|
|
128
128
|
export const isRangeInsideBlock = rangeContains;
|
|
129
|
+
/**
|
|
130
|
+
* T-07 — the Excel refusal for defining a table over `range` (create / update): another table on
|
|
131
|
+
* the sheet (`table-overlap`, judged first) or a merged cell (`table-merged-cells`). `excludeTableId`
|
|
132
|
+
* leaves the table being edited out. `insertedRows`, when given, is a one-or-more-row insert that
|
|
133
|
+
* runs first (the Create Table dialog's header row): tables and merges wholly inside its band are
|
|
134
|
+
* judged at their shifted position.
|
|
135
|
+
*/
|
|
136
|
+
export const getTableRangeRefusal = ({ sheetId, range, tables, merges, excludeTableId, insertedRows, }) => {
|
|
137
|
+
const shifted = (candidate) => insertedRows && isRangeInsideBand(candidate, insertedRows.band)
|
|
138
|
+
? {
|
|
139
|
+
...candidate,
|
|
140
|
+
startRowIndex: candidate.startRowIndex + insertedRows.count,
|
|
141
|
+
endRowIndex: candidate.endRowIndex + insertedRows.count,
|
|
142
|
+
}
|
|
143
|
+
: candidate;
|
|
144
|
+
if (tables?.some((table) => table.sheetId === sheetId &&
|
|
145
|
+
table.id !== excludeTableId &&
|
|
146
|
+
rangesIntersect(shifted(table.range), range))) {
|
|
147
|
+
return structuralRefusal("table-overlap");
|
|
148
|
+
}
|
|
149
|
+
if (merges?.some((merge) => rangesIntersect(shifted(merge), range))) {
|
|
150
|
+
return structuralRefusal("table-merged-cells");
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
};
|
|
129
154
|
/**
|
|
130
155
|
* The Excel refusal (if any) for an insert/delete-cells shift of `range`. Checks run in Excel's
|
|
131
156
|
* order: array tear, merge tear, table tear, off-sheet push. `undefined` means the edit may proceed.
|
|
@@ -161,6 +186,66 @@ export const getShiftCellsRefusal = ({ direction, range, sheetId, rows, rowCount
|
|
|
161
186
|
}
|
|
162
187
|
return undefined;
|
|
163
188
|
};
|
|
189
|
+
/**
|
|
190
|
+
* T-46 — the refusal (if any) for a drag-move / cut of `from` onto `to`. Excel moves a table whole
|
|
191
|
+
* when the block contains it, but refuses to move PART of a table (the block covers some of its
|
|
192
|
+
* cells) and refuses a block landing on another table's cells; a block that is a whole table
|
|
193
|
+
* landing on another table is a table overlap. A same-table column reorder is decided before this.
|
|
194
|
+
*/
|
|
195
|
+
export const getMoveRangeRefusal = ({ sheetId, from, to, toSheetId = sheetId, tables, }) => {
|
|
196
|
+
const sheetTables = tables?.filter((table) => table.sheetId === sheetId);
|
|
197
|
+
const destinationTables = toSheetId === sheetId
|
|
198
|
+
? sheetTables
|
|
199
|
+
: tables?.filter((table) => table.sheetId === toSheetId);
|
|
200
|
+
if (!sheetTables?.length && !destinationTables?.length)
|
|
201
|
+
return undefined;
|
|
202
|
+
const moved = sheetTables?.filter((table) => rangeContains(from, table.range)) ?? [];
|
|
203
|
+
if (sheetTables?.some((table) => !moved.includes(table) && rangesIntersect(table.range, from))) {
|
|
204
|
+
return structuralRefusal("torn-table");
|
|
205
|
+
}
|
|
206
|
+
if (destinationTables?.some((table) => !moved.includes(table) && rangesIntersect(table.range, to))) {
|
|
207
|
+
return structuralRefusal(moved.length ? "table-overlap" : "torn-table");
|
|
208
|
+
}
|
|
209
|
+
return undefined;
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* T-81 — the refusal for a fill whose filled cells (`target` minus `source`) reach a table's totals
|
|
213
|
+
* row. Excel's fill handle never extends over a totals row (the row is derived, not data), so the
|
|
214
|
+
* whole fill is refused and nothing is written. A fill whose source IS the totals row (filling away
|
|
215
|
+
* from the table) is not affected.
|
|
216
|
+
*/
|
|
217
|
+
export const getFillTotalsRowRefusal = ({ sheetId, source, target, tables, }) => tables?.some((table) => {
|
|
218
|
+
if (table.sheetId !== sheetId || !table.totalRow)
|
|
219
|
+
return false;
|
|
220
|
+
const totalsRow = table.range.endRowIndex;
|
|
221
|
+
if (totalsRow < target.startRowIndex || totalsRow > target.endRowIndex) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
const hit = {
|
|
225
|
+
startRowIndex: totalsRow,
|
|
226
|
+
endRowIndex: totalsRow,
|
|
227
|
+
startColumnIndex: Math.max(table.range.startColumnIndex, target.startColumnIndex),
|
|
228
|
+
endColumnIndex: Math.min(table.range.endColumnIndex, target.endColumnIndex),
|
|
229
|
+
};
|
|
230
|
+
return hit.startColumnIndex <= hit.endColumnIndex && !rangeContains(source, hit);
|
|
231
|
+
})
|
|
232
|
+
? structuralRefusal("table-totals-fill")
|
|
233
|
+
: undefined;
|
|
234
|
+
/**
|
|
235
|
+
* T-47 — the refusal (if any) for Insert / Delete Table Rows (`axis: "row"`) or Table Columns
|
|
236
|
+
* (`axis: "column"`) on `table`. The edit shifts the cells of the table's band — its columns from
|
|
237
|
+
* the table down to the sheet edge, or its rows from the table right to the sheet edge. Another
|
|
238
|
+
* table wholly inside that band moves with it; one the band reaches but does not contain would be
|
|
239
|
+
* torn apart, so Excel refuses the edit.
|
|
240
|
+
*/
|
|
241
|
+
export const getTableEditRefusal = ({ sheetId, table, axis, tables, }) => {
|
|
242
|
+
const band = axis === "row"
|
|
243
|
+
? { ...table.range, endRowIndex: Number.POSITIVE_INFINITY }
|
|
244
|
+
: { ...table.range, endColumnIndex: Number.POSITIVE_INFINITY };
|
|
245
|
+
return findTornTable(tables?.filter((other) => other.id !== table.id), sheetId, band)
|
|
246
|
+
? structuralRefusal("torn-table")
|
|
247
|
+
: undefined;
|
|
248
|
+
};
|
|
164
249
|
/**
|
|
165
250
|
* INS-06 / INS-09 — the refusal for a whole-row (`axis: "row"`) or whole-column insert of `count`
|
|
166
251
|
* lines before `referenceIndex`, given the hard grid cap (`maxRowCount` / `maxColumnCount`). Blank
|
|
@@ -27,9 +27,10 @@ export type RemovedTableParts = {
|
|
|
27
27
|
}>;
|
|
28
28
|
};
|
|
29
29
|
/**
|
|
30
|
-
* Which tables / table columns `deleteRow` (a table goes
|
|
31
|
-
*
|
|
32
|
-
*
|
|
30
|
+
* Which tables / table columns `deleteRow` (a table goes only when every one
|
|
31
|
+
* of its rows is deleted — losing its header row keeps it, the next row
|
|
32
|
+
* becomes the header) or `deleteColumn` (a table goes when every column is
|
|
33
|
+
* deleted; otherwise the covered columns are spliced out) removes for the band
|
|
33
34
|
* `[minIndex, maxIndex]` on `sheetId`. Mirrors the table updates those
|
|
34
35
|
* interfaces apply to `tables`.
|
|
35
36
|
*/
|
|
@@ -59,6 +60,60 @@ export type BreakStructuredRefsParams<T extends CellData> = {
|
|
|
59
60
|
* when it is available (cost O(formula cells)); without one the draft is swept.
|
|
60
61
|
*/
|
|
61
62
|
export declare const breakStructuredRefsForRemovedTableParts: <T extends CellData>({ draft, sheetId, axis, referenceIndex, count, removed, getGraphNodes, enqueueCalculation, enqueueGraphOperation, recalcCells, locale, cellXfsRegistry, sharedStringRegistry, }: BreakStructuredRefsParams<T>) => void;
|
|
63
|
+
export type RewriteFormulasParams<T extends CellData> = Pick<BreakStructuredRefsParams<T>, "draft" | "getGraphNodes" | "enqueueCalculation" | "enqueueGraphOperation" | "recalcCells" | "locale" | "cellXfsRegistry" | "sharedStringRegistry">;
|
|
64
|
+
/**
|
|
65
|
+
* Column `oldName` of `table` was renamed `newName` (a header-cell edit):
|
|
66
|
+
* rewrite every structured reference to it across the workbook, including the
|
|
67
|
+
* bare `[@Old]` forms of the formulas that sit inside the table.
|
|
68
|
+
*/
|
|
69
|
+
export declare const renameTableColumnInFormulas: <T extends CellData>({ table, oldName, newName, ...params }: RewriteFormulasParams<T> & {
|
|
70
|
+
table: Pick<TableView, "title" | "sheetId" | "range">;
|
|
71
|
+
oldName: string;
|
|
72
|
+
newName: string;
|
|
73
|
+
}) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Several columns of `table` were renamed at once (a header row re-derived
|
|
76
|
+
* after a row delete, several header cells written by one paste /
|
|
77
|
+
* change-batch): `renames` maps each LOWER-CASED old name to its new name and
|
|
78
|
+
* every formula is rewritten in ONE pass, so `Name` → `Qty` and `Qty` → `Name`
|
|
79
|
+
* swap instead of chaining into the same column.
|
|
80
|
+
*/
|
|
81
|
+
export declare const renameTableColumnsInFormulas: <T extends CellData>({ table, renames, ...params }: RewriteFormulasParams<T> & {
|
|
82
|
+
table: Pick<TableView, "title" | "sheetId" | "range">;
|
|
83
|
+
renames: ReadonlyMap<string, string>;
|
|
84
|
+
}) => void;
|
|
85
|
+
/**
|
|
86
|
+
* The header cells one write renamed (`planHeaderCellRenames`), applied per
|
|
87
|
+
* table as a single multi-column rename.
|
|
88
|
+
*/
|
|
89
|
+
export declare const renameHeaderCellsInFormulas: <T extends CellData>({ headerRenames, ...params }: RewriteFormulasParams<T> & {
|
|
90
|
+
headerRenames: readonly {
|
|
91
|
+
table: Pick<TableView, "id" | "title" | "sheetId" | "range">;
|
|
92
|
+
oldName: string | undefined;
|
|
93
|
+
newName: string;
|
|
94
|
+
}[];
|
|
95
|
+
}) => void;
|
|
96
|
+
/**
|
|
97
|
+
* `table` is being converted to a range (Excel's Convert to Range): rewrite
|
|
98
|
+
* every structured reference into it across the workbook to the A1 reference
|
|
99
|
+
* it resolves to — `T[Col]` → `$B$2:$B$9`, `[@Col]` → `B3`,
|
|
100
|
+
* `T[[#Headers],[Col]]` → `$B$1`, qualified with the table's sheet from another
|
|
101
|
+
* sheet — so the formulas keep their values once the table is gone. Runs
|
|
102
|
+
* BEFORE the table is removed; the bare `[@Col]` forms belong to the formulas
|
|
103
|
+
* that sit inside the table.
|
|
104
|
+
*/
|
|
105
|
+
export declare const convertTableReferencesToA1InFormulas: <T extends CellData>({ table, getSheetName, ...params }: RewriteFormulasParams<T> & {
|
|
106
|
+
table: Pick<TableView, "title" | "sheetId" | "range" | "headerRow" | "totalRow" | "columns">;
|
|
107
|
+
getSheetName(sheetId: number): string;
|
|
108
|
+
}) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Table `oldName` was renamed `newName` (the Edit Table dialog / `updateTable`):
|
|
111
|
+
* rewrite `Old[…]` → `New[…]` in every formula across the workbook.
|
|
112
|
+
*/
|
|
113
|
+
export declare const renameTableInFormulas: <T extends CellData>({ oldName, newName, ...params }: RewriteFormulasParams<T> & {
|
|
114
|
+
oldName: string;
|
|
115
|
+
newName: string;
|
|
116
|
+
}) => void;
|
|
62
117
|
/**
|
|
63
118
|
* Drop the materialised spill cells of every dynamic-array anchor that sits
|
|
64
119
|
* inside the deleted band `[minIndex, maxIndex]` (rows or columns) of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-table-refs.d.ts","sourceRoot":"","sources":["../../../api/structural-table-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"structural-table-refs.d.ts","sourceRoot":"","sources":["../../../api/structural-table-refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { isCellNode } from "@rowsncolumns/dag";
|
|
2
2
|
import { addressToCell, getCellUserEnteredValue, getExtendedValueFormula, } from "@rowsncolumns/utils";
|
|
3
3
|
import { SheetCell } from "../sheet-cell";
|
|
4
|
-
import { breakTableColumnsInFormula, breakTableReferencesInFormula, createSheetCellIdentifier, } from "./formula";
|
|
4
|
+
import { breakTableColumnsInFormula, breakTableReferencesInFormula, convertStructuredRefsToA1InFormula, createSheetCellIdentifier, renameTableColumnsInFormula, renameTableInFormula, } from "./formula";
|
|
5
5
|
import { createSheetDraft } from "./immer-utils";
|
|
6
6
|
/**
|
|
7
|
-
* Which tables / table columns `deleteRow` (a table goes
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Which tables / table columns `deleteRow` (a table goes only when every one
|
|
8
|
+
* of its rows is deleted — losing its header row keeps it, the next row
|
|
9
|
+
* becomes the header) or `deleteColumn` (a table goes when every column is
|
|
10
|
+
* deleted; otherwise the covered columns are spliced out) removes for the band
|
|
10
11
|
* `[minIndex, maxIndex]` on `sheetId`. Mirrors the table updates those
|
|
11
12
|
* interfaces apply to `tables`.
|
|
12
13
|
*/
|
|
@@ -16,8 +17,8 @@ export const collectRemovedTableParts = (tables, sheetId, axis, minIndex, maxInd
|
|
|
16
17
|
if (table.sheetId !== sheetId || !table.title)
|
|
17
18
|
continue;
|
|
18
19
|
if (axis === "row") {
|
|
19
|
-
const { startRowIndex } = table.range;
|
|
20
|
-
if (
|
|
20
|
+
const { startRowIndex, endRowIndex } = table.range;
|
|
21
|
+
if (minIndex <= startRowIndex && maxIndex >= endRowIndex) {
|
|
21
22
|
removed.tables.push(table.title);
|
|
22
23
|
}
|
|
23
24
|
continue;
|
|
@@ -107,6 +108,125 @@ export const breakStructuredRefsForRemovedTableParts = ({ draft, sheetId, axis,
|
|
|
107
108
|
recalcCells.set(createSheetCellIdentifier(nextPosition.sheetId, nextPosition.rowIndex, nextPosition.columnIndex), { ...nextPosition, force: true });
|
|
108
109
|
}
|
|
109
110
|
};
|
|
111
|
+
/**
|
|
112
|
+
* Apply `rewrite` to the text of every formula cell across all sheets (from
|
|
113
|
+
* the dependency graph when available, else a draft sweep), writing back the
|
|
114
|
+
* ones it changed and re-entering them in the graph for recalculation. Cells
|
|
115
|
+
* keep their position — this is the in-place rewrite behind a table / table
|
|
116
|
+
* column rename.
|
|
117
|
+
*/
|
|
118
|
+
const rewriteFormulasInDraft = ({ draft, getGraphNodes, enqueueCalculation, enqueueGraphOperation, recalcCells, locale, cellXfsRegistry, sharedStringRegistry, }, rewrite) => {
|
|
119
|
+
const sheetCell = new SheetCell();
|
|
120
|
+
for (const pos of collectFormulaPositions(draft, getGraphNodes)) {
|
|
121
|
+
const currentSheet = createSheetDraft(draft, pos.sheetId, pos.rowIndex);
|
|
122
|
+
const cellData = currentSheet[pos.rowIndex]?.values?.[pos.columnIndex];
|
|
123
|
+
const formula = getExtendedValueFormula(getCellUserEnteredValue(cellData));
|
|
124
|
+
if (!formula || !formula.includes("["))
|
|
125
|
+
continue;
|
|
126
|
+
const updated = rewrite(formula, pos);
|
|
127
|
+
if (updated === formula)
|
|
128
|
+
continue;
|
|
129
|
+
sheetCell.assign(pos.sheetId, { rowIndex: pos.rowIndex, columnIndex: pos.columnIndex }, cellData, { locale, cellXfsRegistry, sharedStringRegistry });
|
|
130
|
+
sheetCell.setFormulaValue(updated, false);
|
|
131
|
+
currentSheet[pos.rowIndex].values[pos.columnIndex] =
|
|
132
|
+
sheetCell.getCellData();
|
|
133
|
+
const enqueueOperation = sheetCell.ephemeral()
|
|
134
|
+
? enqueueCalculation
|
|
135
|
+
: enqueueGraphOperation;
|
|
136
|
+
enqueueOperation?.({ type: "remove", position: pos });
|
|
137
|
+
enqueueOperation?.({ type: "add", position: pos, force: true });
|
|
138
|
+
recalcCells.set(createSheetCellIdentifier(pos.sheetId, pos.rowIndex, pos.columnIndex), { ...pos, force: true });
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Column `oldName` of `table` was renamed `newName` (a header-cell edit):
|
|
143
|
+
* rewrite every structured reference to it across the workbook, including the
|
|
144
|
+
* bare `[@Old]` forms of the formulas that sit inside the table.
|
|
145
|
+
*/
|
|
146
|
+
export const renameTableColumnInFormulas = ({ table, oldName, newName, ...params }) => {
|
|
147
|
+
if (!oldName || !newName || oldName === newName)
|
|
148
|
+
return;
|
|
149
|
+
renameTableColumnsInFormulas({
|
|
150
|
+
...params,
|
|
151
|
+
table,
|
|
152
|
+
renames: new Map([[oldName.toLowerCase(), newName]]),
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Several columns of `table` were renamed at once (a header row re-derived
|
|
157
|
+
* after a row delete, several header cells written by one paste /
|
|
158
|
+
* change-batch): `renames` maps each LOWER-CASED old name to its new name and
|
|
159
|
+
* every formula is rewritten in ONE pass, so `Name` → `Qty` and `Qty` → `Name`
|
|
160
|
+
* swap instead of chaining into the same column.
|
|
161
|
+
*/
|
|
162
|
+
export const renameTableColumnsInFormulas = ({ table, renames, ...params }) => {
|
|
163
|
+
if (renames.size === 0)
|
|
164
|
+
return;
|
|
165
|
+
rewriteFormulasInDraft(params, (formula, pos) => {
|
|
166
|
+
let updated = table.title
|
|
167
|
+
? renameTableColumnsInFormula(formula, table.title, renames)
|
|
168
|
+
: formula;
|
|
169
|
+
if (pos.sheetId === table.sheetId &&
|
|
170
|
+
isWithinRange(table.range, pos.rowIndex, pos.columnIndex)) {
|
|
171
|
+
updated = renameTableColumnsInFormula(updated, undefined, renames);
|
|
172
|
+
}
|
|
173
|
+
return updated;
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* The header cells one write renamed (`planHeaderCellRenames`), applied per
|
|
178
|
+
* table as a single multi-column rename.
|
|
179
|
+
*/
|
|
180
|
+
export const renameHeaderCellsInFormulas = ({ headerRenames, ...params }) => {
|
|
181
|
+
const byTable = new Map();
|
|
182
|
+
for (const { table, oldName, newName } of headerRenames) {
|
|
183
|
+
if (!oldName || oldName === newName)
|
|
184
|
+
continue;
|
|
185
|
+
const entry = byTable.get(table.id) ?? { table, renames: new Map() };
|
|
186
|
+
entry.renames.set(oldName.toLowerCase(), newName);
|
|
187
|
+
byTable.set(table.id, entry);
|
|
188
|
+
}
|
|
189
|
+
for (const { table, renames } of byTable.values()) {
|
|
190
|
+
renameTableColumnsInFormulas({ ...params, table, renames });
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* `table` is being converted to a range (Excel's Convert to Range): rewrite
|
|
195
|
+
* every structured reference into it across the workbook to the A1 reference
|
|
196
|
+
* it resolves to — `T[Col]` → `$B$2:$B$9`, `[@Col]` → `B3`,
|
|
197
|
+
* `T[[#Headers],[Col]]` → `$B$1`, qualified with the table's sheet from another
|
|
198
|
+
* sheet — so the formulas keep their values once the table is gone. Runs
|
|
199
|
+
* BEFORE the table is removed; the bare `[@Col]` forms belong to the formulas
|
|
200
|
+
* that sit inside the table.
|
|
201
|
+
*/
|
|
202
|
+
export const convertTableReferencesToA1InFormulas = ({ table, getSheetName, ...params }) => {
|
|
203
|
+
if (!table.title)
|
|
204
|
+
return;
|
|
205
|
+
const target = {
|
|
206
|
+
title: table.title,
|
|
207
|
+
range: table.range,
|
|
208
|
+
headerRow: table.headerRow,
|
|
209
|
+
totalRow: table.totalRow,
|
|
210
|
+
columnNames: (table.columns ?? []).map((column) => column.name),
|
|
211
|
+
};
|
|
212
|
+
const tableSheetName = getSheetName(table.sheetId);
|
|
213
|
+
rewriteFormulasInDraft(params, (formula, pos) => convertStructuredRefsToA1InFormula(formula, target, {
|
|
214
|
+
tableSheetName,
|
|
215
|
+
formulaSheetName: getSheetName(pos.sheetId),
|
|
216
|
+
formulaRowIndex: pos.rowIndex,
|
|
217
|
+
inTable: pos.sheetId === table.sheetId &&
|
|
218
|
+
isWithinRange(table.range, pos.rowIndex, pos.columnIndex),
|
|
219
|
+
}));
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Table `oldName` was renamed `newName` (the Edit Table dialog / `updateTable`):
|
|
223
|
+
* rewrite `Old[…]` → `New[…]` in every formula across the workbook.
|
|
224
|
+
*/
|
|
225
|
+
export const renameTableInFormulas = ({ oldName, newName, ...params }) => {
|
|
226
|
+
if (!oldName || !newName || oldName === newName)
|
|
227
|
+
return;
|
|
228
|
+
rewriteFormulasInDraft(params, (formula) => renameTableInFormula(formula, oldName, newName));
|
|
229
|
+
};
|
|
110
230
|
const collectFormulaPositions = (draft, getGraphNodes) => {
|
|
111
231
|
if (getGraphNodes) {
|
|
112
232
|
let graphNodes;
|
package/dist/esm/api/table.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { type ParsedToken } from "@rowsncolumns/calculator";
|
|
2
|
-
import type { CellInterface, GridRange } from "@rowsncolumns/common-types";
|
|
2
|
+
import type { CellInterface, ExtendedValue, GridRange } from "@rowsncolumns/common-types";
|
|
3
3
|
import type { BandedRange, FilterView, TableView } from "@rowsncolumns/spreadsheet";
|
|
4
|
+
/**
|
|
5
|
+
* Excel's default for the Create Table dialog's "My table has headers": checked when the
|
|
6
|
+
* range's first row reads as a header row — it holds at least one value, every value in it is
|
|
7
|
+
* text (a number or boolean there means the data starts on the first row), and at least one row
|
|
8
|
+
* of data lies below it. A single-row range defaults to unchecked.
|
|
9
|
+
*/
|
|
10
|
+
export declare const guessTableHasHeaders: ({ sheetId, range, getEffectiveExtendedValue, }: {
|
|
11
|
+
sheetId: number;
|
|
12
|
+
range: GridRange;
|
|
13
|
+
getEffectiveExtendedValue: (sheetId: number, rowIndex: number, columnIndex: number) => ExtendedValue | null | undefined;
|
|
14
|
+
}) => boolean;
|
|
4
15
|
/**
|
|
5
16
|
* Get table column index
|
|
6
17
|
* @param sheetId
|
|
@@ -25,7 +36,20 @@ export declare const findAdjacentTable: (sheetId: number, cell: CellInterface, t
|
|
|
25
36
|
* @returns
|
|
26
37
|
*/
|
|
27
38
|
export declare const findAdjacentBandedRange: (sheetId: number, cell: CellInterface, bandedRanges: BandedRange[] | undefined, getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined) => readonly [BandedRange | undefined, boolean, boolean];
|
|
28
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Excel's calculated-column fill decision, shared with the Rust engine's
|
|
41
|
+
* `auto_fill_calculated_column` (rowsncolumns/spreadsheet#681): a formula just
|
|
42
|
+
* written into a table body cell fills the whole column when every OTHER body
|
|
43
|
+
* cell of that column is either empty (a fresh column) or holds the same
|
|
44
|
+
* formula relative to its row (a consistent calculated column, which the new
|
|
45
|
+
* formula overwrites). A literal anywhere, or two rows that disagree, leave
|
|
46
|
+
* the edit a one-cell exception. The column's cells are the reference — not
|
|
47
|
+
* the formula recorded on `columns[].formula`, which has no row of its own —
|
|
48
|
+
* so the overwrite works from any row, not only the one the column was
|
|
49
|
+
* created from (#668 T-50). A consistent column is a calculated column
|
|
50
|
+
* whatever its formula references (`=TODAY()`, `=1`), like Excel (#668 T-29).
|
|
51
|
+
*/
|
|
52
|
+
export declare const isTableColumnCellsFillable: (sheetId: number, range: GridRange, excludeCell: CellInterface, currentValue: string | boolean | undefined, activeSheetName: string, getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined) => boolean;
|
|
29
53
|
export declare const addTableNameToTokens: (tokens: ParsedToken[], title: string) => string;
|
|
30
54
|
export declare const removeTableName: (tokens: ParsedToken[], title: string) => string;
|
|
31
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../api/table.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../api/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACV,MAAM,2BAA2B,CAAC;AAmBnC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,gDAIlC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,yBAAyB,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;CACvC,KAAG,OA8BH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,uBAiBhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,GAAG,IAAI,0BAMvC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,QAAQ,SAAS,EAAE,GAAG,SAAS,EAC/B,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,uDA8DxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,MAAM,aAAa,EACnB,cAAc,WAAW,EAAE,GAAG,SAAS,EACvC,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,yDA8CxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,SAAS,EAChB,aAAa,aAAa,EAC1B,cAAc,MAAM,GAAG,OAAO,GAAG,SAAS,EAC1C,iBAAiB,MAAM,EACvB,qBAAqB,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,YAuDxB,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WAyBxE,CAAC;AAcF,eAAO,MAAM,eAAe,GAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,MAAM,WA2BnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,SAAS,GAAG,UAAU,EAC7B,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,SAoDvB,CAAC"}
|