@rowsncolumns/spreadsheet-state 29.0.0 → 29.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/anchored-objects.d.ts +122 -6
- package/dist/cjs/api/anchored-objects.d.ts.map +1 -1
- package/dist/cjs/api/anchored-objects.js +464 -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 +9 -1
- package/dist/cjs/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-delete-sheet.js +17 -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 +322 -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 +10 -1
- 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 +10 -1
- 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 +81 -25
- 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 +9 -2
- 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 +223 -18
- 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 +118 -1
- 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 +10 -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 +10 -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 +67 -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 +9 -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 +122 -6
- package/dist/esm/api/anchored-objects.d.ts.map +1 -1
- package/dist/esm/api/anchored-objects.js +375 -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 +9 -1
- package/dist/esm/hooks/use-on-delete-sheet.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-delete-sheet.js +17 -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 +259 -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 +10 -1
- 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 +10 -1
- 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 +47 -14
- 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 +9 -2
- 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 +173 -15
- 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 +113 -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 +10 -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 +10 -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 +48 -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 +9 -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/filter.d.ts
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import type { ColorFilterCriteria, ConditionType, ConditionValue, FilterSpec, IconFilterCriteria } from "@rowsncolumns/spreadsheet";
|
|
1
|
+
import type { BooleanCondition, ColorFilterCriteria, ConditionType, ConditionValue, FilterConditionJoin, FilterCriteria, FilterSpec, IconFilterCriteria } from "@rowsncolumns/spreadsheet";
|
|
2
2
|
export type CreateFilterSpecsExtras = {
|
|
3
3
|
/** Pass `null` to clear an existing color filter on this column. */
|
|
4
4
|
colorFilter?: ColorFilterCriteria | null;
|
|
5
5
|
/** Pass `null` to clear an existing icon filter on this column. */
|
|
6
6
|
iconFilter?: IconFilterCriteria | null;
|
|
7
|
+
/**
|
|
8
|
+
* Custom AutoFilter second clause + join (Excel's And / Or). Pass `null`
|
|
9
|
+
* to drop an existing second clause; omit to preserve it.
|
|
10
|
+
*/
|
|
11
|
+
condition2?: BooleanCondition | null;
|
|
12
|
+
conditionJoin?: FilterConditionJoin | null;
|
|
7
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* Whether a column's criteria still filter anything. An entry with no
|
|
16
|
+
* condition, no value whitelist and no color / icon criterion is inert, so
|
|
17
|
+
* `createFilterSpecs` drops it — Excel's "Clear Filter From <column>" —
|
|
18
|
+
* instead of leaving a stale spec behind (the rnc engine's
|
|
19
|
+
* `upsert_filter_spec` removes such entries the same way).
|
|
20
|
+
*/
|
|
21
|
+
export declare const isFilterCriteriaActive: (criteria: FilterCriteria) => boolean;
|
|
8
22
|
/**
|
|
9
23
|
* Create a new filterspec
|
|
10
24
|
* @param filterSpecs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../api/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,mEAAmE;IACnE,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../api/filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,uBAAuB,GAAG;IACpC,oEAAoE;IACpE,WAAW,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,mEAAmE;IACnE,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GAAI,UAAU,cAAc,KAAG,OAO/D,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,aAAa,UAAU,EAAE,GAAG,SAAS,EACrC,aAAa,MAAM,EACnB,eAAe,aAAa,GAAG,SAAS,EACxC,iBAAiB,cAAc,EAAE,GAAG,SAAS,EAC7C,eAAe,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,EAC1C,SAAQ,uBAA4B,KACnC,UAAU,EAuDZ,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,GACzC,cAAa,UAAU,EAAO,+BAO/B,CAAC"}
|
package/dist/esm/api/filter.js
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a column's criteria still filter anything. An entry with no
|
|
3
|
+
* condition, no value whitelist and no color / icon criterion is inert, so
|
|
4
|
+
* `createFilterSpecs` drops it — Excel's "Clear Filter From <column>" —
|
|
5
|
+
* instead of leaving a stale spec behind (the rnc engine's
|
|
6
|
+
* `upsert_filter_spec` removes such entries the same way).
|
|
7
|
+
*/
|
|
8
|
+
export const isFilterCriteriaActive = (criteria) => Boolean(criteria.condition?.type ||
|
|
9
|
+
criteria.condition2?.type ||
|
|
10
|
+
criteria.visibleValues?.length ||
|
|
11
|
+
criteria.colorFilter ||
|
|
12
|
+
criteria.iconFilter);
|
|
1
13
|
/**
|
|
2
14
|
* Create a new filterspec
|
|
3
15
|
* @param filterSpecs
|
|
@@ -31,8 +43,24 @@ export const createFilterSpecs = (filterSpecs, columnIndex, conditionType, condi
|
|
|
31
43
|
: exists?.filterCriteria.iconFilter
|
|
32
44
|
? { iconFilter: exists.filterCriteria.iconFilter }
|
|
33
45
|
: {}),
|
|
46
|
+
...(extras.condition2 !== undefined
|
|
47
|
+
? extras.condition2
|
|
48
|
+
? {
|
|
49
|
+
condition2: extras.condition2,
|
|
50
|
+
conditionJoin: extras.conditionJoin ?? "AND",
|
|
51
|
+
}
|
|
52
|
+
: {}
|
|
53
|
+
: exists?.filterCriteria.condition2
|
|
54
|
+
? {
|
|
55
|
+
condition2: exists.filterCriteria.condition2,
|
|
56
|
+
conditionJoin: exists.filterCriteria.conditionJoin ?? "AND",
|
|
57
|
+
}
|
|
58
|
+
: {}),
|
|
34
59
|
},
|
|
35
60
|
};
|
|
61
|
+
if (!isFilterCriteriaActive(filterSpec.filterCriteria)) {
|
|
62
|
+
return (filterSpecs ?? []).filter((spec) => spec.columnIndex !== columnIndex);
|
|
63
|
+
}
|
|
36
64
|
if (exists && filterSpecs) {
|
|
37
65
|
return filterSpecs.map((spec) => {
|
|
38
66
|
if (spec.columnIndex === columnIndex) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GridRange } from "@rowsncolumns/common-types";
|
|
1
2
|
import type { ParsedToken } from "@rowsncolumns/spreadsheet";
|
|
2
3
|
export { ERROR_CIRCULAR_DEPENDENCY, ERROR_REFERENCE, formulaToRelativeReference, } from "@rowsncolumns/calculator";
|
|
3
4
|
export type { FormulaToRelativeReferenceOptions } from "@rowsncolumns/calculator";
|
|
@@ -39,6 +40,68 @@ export declare const breakTableReferencesInFormula: (formulaValue: string, table
|
|
|
39
40
|
* `=Table1[@#REF!]*2`). Keeps every other character of the reference as typed.
|
|
40
41
|
*/
|
|
41
42
|
export declare const breakTableColumnsInFormula: (formulaValue: string, tableName: string | undefined, columnNames: string[]) => string;
|
|
43
|
+
/**
|
|
44
|
+
* Rename the column `oldName` → `newName` inside the structured references to
|
|
45
|
+
* `tableName` (or, when `tableName` is undefined, the bare this-row form
|
|
46
|
+
* `[@Col]` whose table is implied by the formula's own cell): `Table1[Qty]`,
|
|
47
|
+
* `[@Qty]`, `Table1[[#Headers],[Qty]]` and `Table1[[Qty]:[Price]]` all follow
|
|
48
|
+
* a header-cell edit in Excel. Column names compare case-insensitively; every
|
|
49
|
+
* other character of the reference is kept as typed.
|
|
50
|
+
*/
|
|
51
|
+
export declare const renameTableColumnInFormula: (formulaValue: string, tableName: string | undefined, oldName: string, newName: string) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Rename several columns of `tableName` at once — `renames` maps each
|
|
54
|
+
* LOWER-CASED old name to its new name. One pass over the formula, so
|
|
55
|
+
* `Name` → `Qty` and `Qty` → `Name` swap instead of chaining into the same
|
|
56
|
+
* column (a header row re-derived after a row delete, or several header cells
|
|
57
|
+
* written by one paste / change-batch).
|
|
58
|
+
*/
|
|
59
|
+
export declare const renameTableColumnsInFormula: (formulaValue: string, tableName: string | undefined, renames: ReadonlyMap<string, string>) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Rename the table `oldName` → `newName` in every structured reference
|
|
62
|
+
* (`Old[Col]`, `Old[@Col]`, `Old[[#Headers],[Col]]`, `Old[#All]`) — Excel
|
|
63
|
+
* rewrites them all when a table is renamed. Table names compare
|
|
64
|
+
* case-insensitively; the bare `[@Col]` form names no table and is left alone.
|
|
65
|
+
*/
|
|
66
|
+
export declare const renameTableInFormula: (formulaValue: string, oldName: string, newName: string) => string;
|
|
67
|
+
/**
|
|
68
|
+
* Rename several tables at once — `renames` maps each LOWER-CASED old name to
|
|
69
|
+
* its new name. One pass, so `Sales` → `Sales2` and `Sales2` → `Sales3` never
|
|
70
|
+
* chain (a sheet duplicated with both tables re-points each reference exactly
|
|
71
|
+
* once).
|
|
72
|
+
*/
|
|
73
|
+
export declare const renameTablesInFormula: (formulaValue: string, renames: ReadonlyMap<string, string>) => string;
|
|
74
|
+
/** The table geometry a structured reference resolves against — the `TableView` fields that matter. */
|
|
75
|
+
export type StructuredRefTable = {
|
|
76
|
+
title: string;
|
|
77
|
+
range: GridRange;
|
|
78
|
+
headerRow?: boolean | null;
|
|
79
|
+
totalRow?: boolean | null;
|
|
80
|
+
/** Column names in header order. */
|
|
81
|
+
columnNames: string[];
|
|
82
|
+
};
|
|
83
|
+
export type ConvertStructuredRefsOptions = {
|
|
84
|
+
/** Name of the sheet the table lives on. */
|
|
85
|
+
tableSheetName: string;
|
|
86
|
+
/** Name of the sheet the formula cell lives on — the reference is sheet-qualified when it differs. */
|
|
87
|
+
formulaSheetName: string;
|
|
88
|
+
/** Row of the formula cell: what a this-row item (`[@Col]`) resolves to. */
|
|
89
|
+
formulaRowIndex: number;
|
|
90
|
+
/** Whether the formula cell sits inside the table, which the bare `[@Col]` / `[Col]` forms name. */
|
|
91
|
+
inTable: boolean;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Rewrite every structured reference into `table` — `T[Col]`, `T[[#Headers],[Col]]`, `T[#All]`,
|
|
95
|
+
* `T[[A]:[B]]`, `T[@Col]`, `T[[#This Row],[Col]]` and, inside the table, the bare `[@Col]` /
|
|
96
|
+
* `[Col]` forms — to the plain A1 reference it resolves to, the way Excel's Convert to Range
|
|
97
|
+
* rewrites formulas so their values keep working once the table is gone. Column, header, totals
|
|
98
|
+
* and whole-table items become absolute (`$B$2:$B$9`, `$B$1`), this-row items the relative
|
|
99
|
+
* same-row reference (`B3`), and the reference is qualified with the table's sheet when the
|
|
100
|
+
* formula lives on another one. A reference that cannot resolve (an unknown column, `#Headers`
|
|
101
|
+
* on a headerless table, `@` outside the table's data rows) becomes the `#REF!` it would have
|
|
102
|
+
* evaluated to. Returns the input unchanged when the formula never references the table.
|
|
103
|
+
*/
|
|
104
|
+
export declare const convertStructuredRefsToA1InFormula: (formulaValue: string, table: StructuredRefTable, options: ConvertStructuredRefsOptions) => string;
|
|
42
105
|
/**
|
|
43
106
|
* Converts tokens to string
|
|
44
107
|
* @param tokens
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../api/formula.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../api/formula.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,2BAA2B,CAAC;AAUpE,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAElF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WA4BhB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAehB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,WAYhB,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAgDxC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,GACxC,cAAc,MAAM,EACpB,WAAW,MAAM,KAChB,MA4BF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,aAAa,MAAM,EAAE,KACpB,MAMA,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,SAAS,MAAM,EACf,SAAS,MAAM,KACd,MAOe,CAAC;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,cAAc,MAAM,EACpB,WAAW,MAAM,GAAG,SAAS,EAC7B,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAGA,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,SAAS,MAAM,KACd,MAQF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,EACpB,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAiBF,CAAC;AA6EF,uGAAuG;AACvG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,oGAAoG;IACpG,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC,GAC7C,cAAc,MAAM,EACpB,OAAO,kBAAkB,EACzB,SAAS,4BAA4B,KACpC,MAkDF,CAAC;AA2HF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,WAU/C,CAAC;AAiBF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,aAAa,MAAM,WAGpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,GAAG,SAAS,YAGjE,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;;;;OAKG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBrE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,GAAG,SAAS,EAC3B,gBAAgB,MAAM,EACtB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAyKX,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,GAAG,SAAS,EAC3B,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,WAAW,KAAK,GAAG,QAAQ,EAC3B,iBAAiB,MAAM,EACvB,UAAS,6BAAkC,KAC1C,MAAM,GAAG,SAkPX,CAAC"}
|
package/dist/esm/api/formula.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cleanupColumnName, cleanupTableName, isRangeToken, lexify, stripPropertyFromCellRef, tokenVocabulary, } from "@rowsncolumns/calculator";
|
|
1
|
+
import { cleanupColumnName, cleanupSpecialItem, cleanupTableName, detectCurrentRow, isRangeToken, lexify, stripPropertyFromCellRef, tokenVocabulary, } from "@rowsncolumns/calculator";
|
|
2
2
|
import { addressToCell, alpha2number, cellToAddress, desanitizeSheetName, number2Alpha, sanitizeSheetName, } from "@rowsncolumns/utils";
|
|
3
3
|
export { ERROR_CIRCULAR_DEPENDENCY, ERROR_REFERENCE, formulaToRelativeReference, } from "@rowsncolumns/calculator";
|
|
4
4
|
/**
|
|
@@ -151,11 +151,79 @@ export const breakTableReferencesInFormula = (formulaValue, tableName) => {
|
|
|
151
151
|
* Excel's text for a deleted table column (`=Table1[@Qty]*2` →
|
|
152
152
|
* `=Table1[@#REF!]*2`). Keeps every other character of the reference as typed.
|
|
153
153
|
*/
|
|
154
|
-
export const breakTableColumnsInFormula = (formulaValue, tableName, columnNames) =>
|
|
155
|
-
|
|
154
|
+
export const breakTableColumnsInFormula = (formulaValue, tableName, columnNames) => replaceTableColumnsInFormula(formulaValue, tableName, columnNames, REF_ERROR_COLUMN);
|
|
155
|
+
/**
|
|
156
|
+
* Rename the column `oldName` → `newName` inside the structured references to
|
|
157
|
+
* `tableName` (or, when `tableName` is undefined, the bare this-row form
|
|
158
|
+
* `[@Col]` whose table is implied by the formula's own cell): `Table1[Qty]`,
|
|
159
|
+
* `[@Qty]`, `Table1[[#Headers],[Qty]]` and `Table1[[Qty]:[Price]]` all follow
|
|
160
|
+
* a header-cell edit in Excel. Column names compare case-insensitively; every
|
|
161
|
+
* other character of the reference is kept as typed.
|
|
162
|
+
*/
|
|
163
|
+
export const renameTableColumnInFormula = (formulaValue, tableName, oldName, newName) => oldName && newName && oldName !== newName
|
|
164
|
+
? renameTableColumnsInFormula(formulaValue, tableName, new Map([[oldName.toLowerCase(), newName]]))
|
|
165
|
+
: formulaValue;
|
|
166
|
+
/**
|
|
167
|
+
* Rename several columns of `tableName` at once — `renames` maps each
|
|
168
|
+
* LOWER-CASED old name to its new name. One pass over the formula, so
|
|
169
|
+
* `Name` → `Qty` and `Qty` → `Name` swap instead of chaining into the same
|
|
170
|
+
* column (a header row re-derived after a row delete, or several header cells
|
|
171
|
+
* written by one paste / change-batch).
|
|
172
|
+
*/
|
|
173
|
+
export const renameTableColumnsInFormula = (formulaValue, tableName, renames) => rewriteTableColumnsInFormula(formulaValue, tableName, (name) => renames.get(name));
|
|
174
|
+
/**
|
|
175
|
+
* Rename the table `oldName` → `newName` in every structured reference
|
|
176
|
+
* (`Old[Col]`, `Old[@Col]`, `Old[[#Headers],[Col]]`, `Old[#All]`) — Excel
|
|
177
|
+
* rewrites them all when a table is renamed. Table names compare
|
|
178
|
+
* case-insensitively; the bare `[@Col]` form names no table and is left alone.
|
|
179
|
+
*/
|
|
180
|
+
export const renameTableInFormula = (formulaValue, oldName, newName) => {
|
|
181
|
+
if (!oldName || !newName || oldName === newName) {
|
|
182
|
+
return formulaValue;
|
|
183
|
+
}
|
|
184
|
+
return renameTablesInFormula(formulaValue, new Map([[oldName.toLowerCase(), newName]]));
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Rename several tables at once — `renames` maps each LOWER-CASED old name to
|
|
188
|
+
* its new name. One pass, so `Sales` → `Sales2` and `Sales2` → `Sales3` never
|
|
189
|
+
* chain (a sheet duplicated with both tables re-points each reference exactly
|
|
190
|
+
* once).
|
|
191
|
+
*/
|
|
192
|
+
export const renameTablesInFormula = (formulaValue, renames) => {
|
|
193
|
+
if (!formulaValue.includes("[") || renames.size === 0) {
|
|
194
|
+
return formulaValue;
|
|
195
|
+
}
|
|
196
|
+
const tokens = cloneTokens(lexify(formulaValue).tokens);
|
|
197
|
+
let hasChanges = false;
|
|
198
|
+
for (const token of tokens) {
|
|
199
|
+
if (!isTableNameToken(token))
|
|
200
|
+
continue;
|
|
201
|
+
const newName = renames.get(cleanupTableName(token.image).trim().toLowerCase());
|
|
202
|
+
if (newName === undefined)
|
|
203
|
+
continue;
|
|
204
|
+
// The image is the name as typed plus its opening bracket.
|
|
205
|
+
token.image = newName + token.image.slice(token.image.indexOf("["));
|
|
206
|
+
hasChanges = true;
|
|
207
|
+
}
|
|
208
|
+
return hasChanges ? detokenize(tokens) : formulaValue;
|
|
209
|
+
};
|
|
210
|
+
const replaceTableColumnsInFormula = (formulaValue, tableName, columnNames, replacement) => {
|
|
211
|
+
if (columnNames.length === 0) {
|
|
156
212
|
return formulaValue;
|
|
157
213
|
}
|
|
158
214
|
const targets = new Set(columnNames.map((name) => name.toLowerCase()));
|
|
215
|
+
return rewriteTableColumnsInFormula(formulaValue, tableName, (name) => targets.has(name) ? replacement : undefined);
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Rewrite the column items of every structured reference into `tableName`
|
|
219
|
+
* (or, when undefined, the bare `[@Col]` forms) through `resolve`, which maps
|
|
220
|
+
* a LOWER-CASED column name to its replacement or `undefined` to leave it.
|
|
221
|
+
* Each item is resolved once, so a set of renames applies in a single pass.
|
|
222
|
+
*/
|
|
223
|
+
const rewriteTableColumnsInFormula = (formulaValue, tableName, resolve) => {
|
|
224
|
+
if (!formulaValue.includes("[")) {
|
|
225
|
+
return formulaValue;
|
|
226
|
+
}
|
|
159
227
|
const target = tableName?.toLowerCase();
|
|
160
228
|
const tokens = cloneTokens(lexify(formulaValue).tokens);
|
|
161
229
|
let hasChanges = false;
|
|
@@ -168,8 +236,9 @@ export const breakTableColumnsInFormula = (formulaValue, tableName, columnNames)
|
|
|
168
236
|
cleanupTableName(token.image).trim().toLowerCase() === target;
|
|
169
237
|
if (matches) {
|
|
170
238
|
for (let j = i + 1; j < end; j++) {
|
|
171
|
-
if (
|
|
239
|
+
if (replaceColumnToken(tokens[j], resolve)) {
|
|
172
240
|
hasChanges = true;
|
|
241
|
+
}
|
|
173
242
|
}
|
|
174
243
|
}
|
|
175
244
|
i = end;
|
|
@@ -177,26 +246,184 @@ export const breakTableColumnsInFormula = (formulaValue, tableName, columnNames)
|
|
|
177
246
|
}
|
|
178
247
|
// A bare `[@Col]` / `[Col]` names the table the formula cell sits in.
|
|
179
248
|
if (target === undefined && isTableColumnToken(token)) {
|
|
180
|
-
if (
|
|
249
|
+
if (replaceColumnToken(token, resolve))
|
|
181
250
|
hasChanges = true;
|
|
182
251
|
}
|
|
183
252
|
i++;
|
|
184
253
|
}
|
|
185
254
|
return hasChanges ? detokenize(tokens) : formulaValue;
|
|
186
255
|
};
|
|
187
|
-
const
|
|
256
|
+
const replaceColumnToken = (token, resolve) => {
|
|
188
257
|
if (!token || !isTableColumnToken(token))
|
|
189
258
|
return false;
|
|
190
259
|
const name = cleanupColumnName(token.image);
|
|
191
|
-
if (!name
|
|
260
|
+
if (!name)
|
|
261
|
+
return false;
|
|
262
|
+
const replacement = resolve(name.toLowerCase());
|
|
263
|
+
if (replacement === undefined)
|
|
192
264
|
return false;
|
|
193
265
|
const at = token.image.indexOf(name);
|
|
194
266
|
if (at === -1)
|
|
195
267
|
return false;
|
|
196
268
|
token.image =
|
|
197
|
-
token.image.slice(0, at) +
|
|
269
|
+
token.image.slice(0, at) + replacement + token.image.slice(at + name.length);
|
|
198
270
|
return true;
|
|
199
271
|
};
|
|
272
|
+
/**
|
|
273
|
+
* Rewrite every structured reference into `table` — `T[Col]`, `T[[#Headers],[Col]]`, `T[#All]`,
|
|
274
|
+
* `T[[A]:[B]]`, `T[@Col]`, `T[[#This Row],[Col]]` and, inside the table, the bare `[@Col]` /
|
|
275
|
+
* `[Col]` forms — to the plain A1 reference it resolves to, the way Excel's Convert to Range
|
|
276
|
+
* rewrites formulas so their values keep working once the table is gone. Column, header, totals
|
|
277
|
+
* and whole-table items become absolute (`$B$2:$B$9`, `$B$1`), this-row items the relative
|
|
278
|
+
* same-row reference (`B3`), and the reference is qualified with the table's sheet when the
|
|
279
|
+
* formula lives on another one. A reference that cannot resolve (an unknown column, `#Headers`
|
|
280
|
+
* on a headerless table, `@` outside the table's data rows) becomes the `#REF!` it would have
|
|
281
|
+
* evaluated to. Returns the input unchanged when the formula never references the table.
|
|
282
|
+
*/
|
|
283
|
+
export const convertStructuredRefsToA1InFormula = (formulaValue, table, options) => {
|
|
284
|
+
if (!formulaValue.includes("["))
|
|
285
|
+
return formulaValue;
|
|
286
|
+
const target = table.title.toLowerCase();
|
|
287
|
+
const tokens = cloneTokens(lexify(formulaValue).tokens);
|
|
288
|
+
const newTokens = [];
|
|
289
|
+
let hasChanges = false;
|
|
290
|
+
let i = 0;
|
|
291
|
+
while (i < tokens.length) {
|
|
292
|
+
const token = tokens[i];
|
|
293
|
+
if (isTableNameToken(token)) {
|
|
294
|
+
const end = structuredReferenceEnd(tokens, i);
|
|
295
|
+
if (cleanupTableName(token.image).trim().toLowerCase() !== target) {
|
|
296
|
+
// Another table's reference: keep it whole (its `@Col` items are not bare forms).
|
|
297
|
+
newTokens.push(...tokens.slice(i, end));
|
|
298
|
+
i = end;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
newTokens.push(collapseToReference(token, tokens[end - 1], resolveStructuredReference(table, tokens.slice(i + 1, end), options)));
|
|
302
|
+
hasChanges = true;
|
|
303
|
+
i = end;
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
// A bare `[@Col]` / `[Col]` names the table the formula cell sits in.
|
|
307
|
+
if (options.inTable &&
|
|
308
|
+
isTableColumnToken(token) &&
|
|
309
|
+
token.image.startsWith("[")) {
|
|
310
|
+
const end = structuredReferenceEnd(tokens, i);
|
|
311
|
+
newTokens.push(collapseToReference(token, tokens[end - 1], resolveStructuredReference(table, tokens.slice(i, end), options)));
|
|
312
|
+
hasChanges = true;
|
|
313
|
+
i = end;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
newTokens.push(token);
|
|
317
|
+
i++;
|
|
318
|
+
}
|
|
319
|
+
return hasChanges ? detokenize(newTokens) : formulaValue;
|
|
320
|
+
};
|
|
321
|
+
/** One reference token (or `#REF!`) standing in for the run `start … end` (see `collapseToRefError`). */
|
|
322
|
+
const collapseToReference = (start, end, image) => ({
|
|
323
|
+
...start,
|
|
324
|
+
image,
|
|
325
|
+
tokenType: image === REF_ERROR_TOKEN
|
|
326
|
+
? tokenVocabulary.RefError
|
|
327
|
+
: tokenVocabulary.Cell,
|
|
328
|
+
endOffset: end?.endOffset ?? start.endOffset,
|
|
329
|
+
endColumn: end?.endColumn ?? start.endColumn,
|
|
330
|
+
});
|
|
331
|
+
/**
|
|
332
|
+
* The A1 text the structured-reference `specifier` tokens (everything after the table name up to
|
|
333
|
+
* the closing bracket, or the bare column form) resolve to against `table`, or `#REF!`.
|
|
334
|
+
*/
|
|
335
|
+
const resolveStructuredReference = (table, specifier, { tableSheetName, formulaSheetName, formulaRowIndex }) => {
|
|
336
|
+
let thisRow = false;
|
|
337
|
+
const items = new Set();
|
|
338
|
+
const columns = [];
|
|
339
|
+
for (const token of specifier) {
|
|
340
|
+
const name = token.tokenType.name;
|
|
341
|
+
if (name === tokenVocabulary.SpecialItem.name) {
|
|
342
|
+
const item = cleanupSpecialItem(token.image).trim().toLowerCase();
|
|
343
|
+
if (item === "#this row")
|
|
344
|
+
thisRow = true;
|
|
345
|
+
else
|
|
346
|
+
items.add(item);
|
|
347
|
+
}
|
|
348
|
+
else if (name === tokenVocabulary.TableColumnName.name) {
|
|
349
|
+
if (detectCurrentRow(token.image))
|
|
350
|
+
thisRow = true;
|
|
351
|
+
const column = cleanupColumnName(token.image).trim();
|
|
352
|
+
if (column)
|
|
353
|
+
columns.push(column);
|
|
354
|
+
}
|
|
355
|
+
else if (name === tokenVocabulary.At.name) {
|
|
356
|
+
thisRow = true;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
const { range } = table;
|
|
360
|
+
const headerRow = table.headerRow ?? true;
|
|
361
|
+
const totalRow = table.totalRow ?? false;
|
|
362
|
+
const dataStartRowIndex = range.startRowIndex + (headerRow ? 1 : 0);
|
|
363
|
+
const dataEndRowIndex = range.endRowIndex - (totalRow ? 1 : 0);
|
|
364
|
+
// Column span: the named column, or the `[A]:[B]` pair (either order); none → every column.
|
|
365
|
+
let startColumnIndex = range.startColumnIndex;
|
|
366
|
+
let endColumnIndex = range.endColumnIndex;
|
|
367
|
+
if (columns.length) {
|
|
368
|
+
if (columns.length > 2)
|
|
369
|
+
return REF_ERROR_TOKEN;
|
|
370
|
+
const offsets = columns.map((column) => table.columnNames.findIndex((candidate) => candidate.toLowerCase() === column.toLowerCase()));
|
|
371
|
+
if (offsets.some((offset) => offset === -1))
|
|
372
|
+
return REF_ERROR_TOKEN;
|
|
373
|
+
startColumnIndex = range.startColumnIndex + Math.min(...offsets);
|
|
374
|
+
endColumnIndex = range.startColumnIndex + Math.max(...offsets);
|
|
375
|
+
}
|
|
376
|
+
// Row band.
|
|
377
|
+
let startRowIndex;
|
|
378
|
+
let endRowIndex;
|
|
379
|
+
if (thisRow) {
|
|
380
|
+
if (items.size ||
|
|
381
|
+
formulaRowIndex < dataStartRowIndex ||
|
|
382
|
+
formulaRowIndex > range.endRowIndex) {
|
|
383
|
+
return REF_ERROR_TOKEN;
|
|
384
|
+
}
|
|
385
|
+
startRowIndex = endRowIndex = formulaRowIndex;
|
|
386
|
+
}
|
|
387
|
+
else if (items.has("#all")) {
|
|
388
|
+
startRowIndex = range.startRowIndex;
|
|
389
|
+
endRowIndex = range.endRowIndex;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
const bands = [];
|
|
393
|
+
if (items.has("#headers")) {
|
|
394
|
+
if (!headerRow)
|
|
395
|
+
return REF_ERROR_TOKEN;
|
|
396
|
+
bands.push([range.startRowIndex, range.startRowIndex]);
|
|
397
|
+
}
|
|
398
|
+
if (items.has("#data") || (!items.has("#headers") && !items.has("#totals"))) {
|
|
399
|
+
if (dataStartRowIndex > dataEndRowIndex)
|
|
400
|
+
return REF_ERROR_TOKEN;
|
|
401
|
+
bands.push([dataStartRowIndex, dataEndRowIndex]);
|
|
402
|
+
}
|
|
403
|
+
if (items.has("#totals")) {
|
|
404
|
+
if (!totalRow)
|
|
405
|
+
return REF_ERROR_TOKEN;
|
|
406
|
+
bands.push([range.endRowIndex, range.endRowIndex]);
|
|
407
|
+
}
|
|
408
|
+
bands.sort((a, b) => a[0] - b[0]);
|
|
409
|
+
[startRowIndex, endRowIndex] = bands[0];
|
|
410
|
+
for (const [bandStart, bandEnd] of bands.slice(1)) {
|
|
411
|
+
// `[#Headers],[#Totals]` skips the data rows: not one rectangle.
|
|
412
|
+
if (bandStart > endRowIndex + 1)
|
|
413
|
+
return REF_ERROR_TOKEN;
|
|
414
|
+
endRowIndex = Math.max(endRowIndex, bandEnd);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const absolute = !thisRow;
|
|
418
|
+
const start = cellToAddress({ rowIndex: startRowIndex, columnIndex: startColumnIndex }, absolute, absolute);
|
|
419
|
+
const end = cellToAddress({ rowIndex: endRowIndex, columnIndex: endColumnIndex }, absolute, absolute);
|
|
420
|
+
if (!start || !end)
|
|
421
|
+
return REF_ERROR_TOKEN;
|
|
422
|
+
const prefix = tableSheetName.toLowerCase() !== formulaSheetName.toLowerCase()
|
|
423
|
+
? `${sanitizeSheetName(tableSheetName)}!`
|
|
424
|
+
: "";
|
|
425
|
+
return start === end ? `${prefix}${start}` : `${prefix}${start}:${end}`;
|
|
426
|
+
};
|
|
200
427
|
/**
|
|
201
428
|
* Converts tokens to string
|
|
202
429
|
* @param tokens
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { CellFormat, CellInterface, GridRange } from "@rowsncolumns/common-types";
|
|
2
|
+
import type { CellData } from "@rowsncolumns/spreadsheet";
|
|
3
|
+
import type { Draft } from "immer";
|
|
4
|
+
import type { CellXfsRegistry } from "../hooks/use-cellxfs-registry";
|
|
5
|
+
import type { SheetData } from "../hooks/use-spreadsheet-state";
|
|
6
|
+
import type { SharedStringRegistry } from "../hooks/use-ss-registry";
|
|
2
7
|
/**
|
|
3
8
|
* Format-painter pattern shared by both engines: the captured 2-D format grid plus the
|
|
4
9
|
* source block's merge configuration, re-based to the block's top-left so it can be tiled
|
|
@@ -49,7 +54,23 @@ export declare const getBandedCellFormat: (bandedCells: Map<string, CellFormat>
|
|
|
49
54
|
* Layer a cell's explicit format over the banded format the grid would paint beneath it, so the
|
|
50
55
|
* captured pattern carries the VISIBLE look (Sheets copies the alternating colours as static cell
|
|
51
56
|
* fills — it does not create a table or banding at the target). Explicit keys win; an explicit
|
|
52
|
-
* `undefined` never clobbers a banded value.
|
|
57
|
+
* `undefined` never clobbers a banded value. `textFormat` merges key-wise: an explicitly bold
|
|
58
|
+
* header keeps the contrast text colour the band paints it with.
|
|
53
59
|
*/
|
|
54
60
|
export declare const layerBandedFormat: (explicit: CellFormat | null | undefined, banded: CellFormat | undefined) => CellFormat | null | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Write the banded (table stripe) formats the grid paints under `range` into the cells as
|
|
63
|
+
* static formats — Excel's Convert to Range bakes the table style into the cell formats — each
|
|
64
|
+
* cell's explicit format layered on top exactly as the format painter captures it. Runs inside
|
|
65
|
+
* the caller's sheet-data draft; cells without a band are untouched.
|
|
66
|
+
*/
|
|
67
|
+
export declare const bakeBandedFormats: <T extends CellData>({ draft, sheetId, range, bandedCells, locale, cellXfsRegistry, sharedStringRegistry, }: {
|
|
68
|
+
draft: Draft<SheetData<T>>;
|
|
69
|
+
sheetId: number;
|
|
70
|
+
range: GridRange;
|
|
71
|
+
bandedCells: Map<string, CellFormat> | undefined | null;
|
|
72
|
+
locale?: string;
|
|
73
|
+
cellXfsRegistry?: CellXfsRegistry;
|
|
74
|
+
sharedStringRegistry?: SharedStringRegistry;
|
|
75
|
+
}) => void;
|
|
55
76
|
//# sourceMappingURL=paint-format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paint-format.d.ts","sourceRoot":"","sources":["../../../api/paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"paint-format.d.ts","sourceRoot":"","sources":["../../../api/paint-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACV,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,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;AAIrE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC;IAC7C,kFAAkF;IAClF,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,QAAQ,SAAS,KAChB,SAAS,EAaX,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,EACtC,YAAY,aAAa,KACxB,SAkBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC5C,gBAAgB,SAAS,EAAE,KAC1B,IAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,gBAAgB,SAAS,EAAE,EAC3B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,QAAQ,SAAS,KAChB,SAAS,EAqBX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,IAAI,EACvD,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,UAAU,GAAG,SACyC,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,QAAQ,UAAU,GAAG,SAAS,KAC7B,UAAU,GAAG,IAAI,GAAG,SActB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,QAAQ,EAAE,wFAQnD;IACD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,SA6CA,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { cellIdentifier, isCellWithinBounds } from "@rowsncolumns/grid";
|
|
2
|
+
import { SheetCell } from "../sheet-cell";
|
|
3
|
+
import { createSheetDraft } from "./immer-utils";
|
|
2
4
|
const rangeContains = (outer, inner) => inner.startRowIndex >= outer.startRowIndex &&
|
|
3
5
|
inner.endRowIndex <= outer.endRowIndex &&
|
|
4
6
|
inner.startColumnIndex >= outer.startColumnIndex &&
|
|
@@ -105,7 +107,8 @@ export const getBandedCellFormat = (bandedCells, rowIndex, columnIndex) => bande
|
|
|
105
107
|
* Layer a cell's explicit format over the banded format the grid would paint beneath it, so the
|
|
106
108
|
* captured pattern carries the VISIBLE look (Sheets copies the alternating colours as static cell
|
|
107
109
|
* fills — it does not create a table or banding at the target). Explicit keys win; an explicit
|
|
108
|
-
* `undefined` never clobbers a banded value.
|
|
110
|
+
* `undefined` never clobbers a banded value. `textFormat` merges key-wise: an explicitly bold
|
|
111
|
+
* header keeps the contrast text colour the band paints it with.
|
|
109
112
|
*/
|
|
110
113
|
export const layerBandedFormat = (explicit, banded) => {
|
|
111
114
|
if (!banded)
|
|
@@ -117,6 +120,46 @@ export const layerBandedFormat = (explicit, banded) => {
|
|
|
117
120
|
merged[key] = value;
|
|
118
121
|
}
|
|
119
122
|
}
|
|
123
|
+
if (explicit.textFormat && banded.textFormat) {
|
|
124
|
+
merged.textFormat = { ...banded.textFormat, ...explicit.textFormat };
|
|
125
|
+
}
|
|
120
126
|
}
|
|
121
127
|
return merged;
|
|
122
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* Write the banded (table stripe) formats the grid paints under `range` into the cells as
|
|
131
|
+
* static formats — Excel's Convert to Range bakes the table style into the cell formats — each
|
|
132
|
+
* cell's explicit format layered on top exactly as the format painter captures it. Runs inside
|
|
133
|
+
* the caller's sheet-data draft; cells without a band are untouched.
|
|
134
|
+
*/
|
|
135
|
+
export const bakeBandedFormats = ({ draft, sheetId, range, bandedCells, locale, cellXfsRegistry, sharedStringRegistry, }) => {
|
|
136
|
+
if (!bandedCells?.size)
|
|
137
|
+
return;
|
|
138
|
+
const sheetCell = new SheetCell();
|
|
139
|
+
for (let rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
|
|
140
|
+
for (let columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex; columnIndex++) {
|
|
141
|
+
const banded = getBandedCellFormat(bandedCells, rowIndex, columnIndex);
|
|
142
|
+
if (!banded)
|
|
143
|
+
continue;
|
|
144
|
+
const currentSheet = createSheetDraft(draft, sheetId, rowIndex);
|
|
145
|
+
sheetCell.assign(sheetId, { rowIndex, columnIndex }, currentSheet[rowIndex]?.values?.[columnIndex], { locale, cellXfsRegistry, sharedStringRegistry });
|
|
146
|
+
const baked = layerBandedFormat(sheetCell.userEnteredFormat, banded);
|
|
147
|
+
sheetCell.clearUserEnteredFormat();
|
|
148
|
+
for (const [key, value] of Object.entries(baked ?? {})) {
|
|
149
|
+
// A band carries `undefined` for the parts it does not paint (no border, no text
|
|
150
|
+
// colour) — those must not land as empty `{}` formats on the cell.
|
|
151
|
+
if (value === undefined)
|
|
152
|
+
continue;
|
|
153
|
+
if (typeof value === "object" &&
|
|
154
|
+
value !== null &&
|
|
155
|
+
Object.values(value).every((part) => part === undefined)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
sheetCell.setUserEnteredFormat(key, value);
|
|
159
|
+
}
|
|
160
|
+
currentSheet[rowIndex].values[columnIndex] =
|
|
161
|
+
sheetCell.getCellData();
|
|
162
|
+
cellXfsRegistry?.registerCellXfs(sheetCell);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
package/dist/esm/api/sort.d.ts
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
1
|
import type { SortOrder } from "@rowsncolumns/spreadsheet";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A cell whose effective value is an error (`#DIV/0!`, `#N/A`, …). Errors
|
|
4
|
+
* form the last value tier and keep their relative order, as in Excel.
|
|
5
|
+
*/
|
|
6
|
+
export type SortErrorValue = {
|
|
7
|
+
readonly sortError: string;
|
|
8
|
+
};
|
|
9
|
+
export type SortCellValue = string | number | boolean | SortErrorValue | undefined | null;
|
|
10
|
+
export declare const isSortErrorValue: (value: unknown) => value is SortErrorValue;
|
|
11
|
+
/**
|
|
12
|
+
* The value a sort compares for a cell: its error when it has one, else the
|
|
13
|
+
* effective value, else the display text.
|
|
14
|
+
*/
|
|
15
|
+
export declare const getCellSortValue: (cell: {
|
|
16
|
+
readonly error: unknown;
|
|
17
|
+
getEffectiveValue(): string | number | boolean | undefined;
|
|
18
|
+
readonly formattedValue: string | undefined | null;
|
|
19
|
+
}) => SortCellValue;
|
|
20
|
+
/**
|
|
21
|
+
* Excel's sort order: numbers < text < logicals < errors, blanks last in
|
|
22
|
+
* BOTH directions, text compared case-insensitively through the collator.
|
|
23
|
+
*/
|
|
24
|
+
export declare const cellValueSorter: (left: SortCellValue, right: SortCellValue, sortOrder: SortOrder) => number;
|
|
3
25
|
//# sourceMappingURL=sort.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../api/sort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../api/sort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAa3D;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,cAAc,GACd,SAAS,GACT,IAAI,CAAC;AAET,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cACU,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,iBAAiB,IAAI,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CACpD,KAAG,aAGmD,CAAC;AAYxD;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,aAAa,EACnB,OAAO,aAAa,EACpB,WAAW,SAAS,WA8CrB,CAAC"}
|