@rowsncolumns/spreadsheet 10.3.1 → 10.4.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/banded-ranges.d.ts.map +1 -1
- package/dist/cjs/api/banded-ranges.js +40 -14
- package/dist/cjs/api/calculated-column-fill.d.ts +43 -0
- package/dist/cjs/api/calculated-column-fill.d.ts.map +1 -0
- package/dist/cjs/api/calculated-column-fill.js +16 -0
- package/dist/cjs/api/chart-sheet.d.ts +8 -0
- package/dist/cjs/api/chart-sheet.d.ts.map +1 -0
- package/dist/cjs/api/chart-sheet.js +20 -0
- package/dist/cjs/api/chart-source-ranges.d.ts +64 -0
- package/dist/cjs/api/chart-source-ranges.d.ts.map +1 -0
- package/dist/cjs/api/chart-source-ranges.js +175 -0
- package/dist/cjs/api/selections.d.ts +3 -3
- package/dist/cjs/api/selections.d.ts.map +1 -1
- package/dist/cjs/api/selections.js +28 -2
- package/dist/cjs/api/spreadsheet-api.d.ts +16 -3
- package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/cjs/api/spreadsheet-api.js +22 -2
- package/dist/cjs/api/table-auto-expansion.d.ts +37 -0
- package/dist/cjs/api/table-auto-expansion.d.ts.map +1 -0
- package/dist/cjs/api/table-auto-expansion.js +16 -0
- package/dist/cjs/api/table.d.ts +49 -1
- package/dist/cjs/api/table.d.ts.map +1 -1
- package/dist/cjs/api/table.js +145 -1
- package/dist/cjs/api/validation.d.ts +26 -1
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +127 -9
- package/dist/cjs/atoms/calculated-column-fill.atom.d.ts +15 -0
- package/dist/cjs/atoms/calculated-column-fill.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/calculated-column-fill.atom.js +18 -0
- package/dist/cjs/atoms/chart-actions.atom.d.ts +40 -0
- package/dist/cjs/atoms/chart-actions.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/chart-actions.atom.js +66 -0
- package/dist/cjs/atoms/index.d.ts +5 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +5 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.d.ts +28 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.js +34 -0
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +9 -1
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/selected-chart-embed.atom.js +18 -1
- package/dist/cjs/atoms/selected-chart-series.atom.d.ts +24 -0
- package/dist/cjs/atoms/selected-chart-series.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/selected-chart-series.atom.js +11 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/sheet-context.atom.js +5 -2
- package/dist/cjs/atoms/sparkline-dialog.atom.d.ts +34 -0
- package/dist/cjs/atoms/sparkline-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/sparkline-dialog.atom.js +30 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.d.ts +14 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.js +17 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.d.ts +25 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.js +31 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +393 -72
- package/dist/cjs/components/canvas-grid/typings.d.ts +127 -14
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +3 -3
- package/dist/cjs/components/cell/typings.d.ts +13 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-filter/index.js +13 -2
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +4 -1
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts +28 -5
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline-math.js +93 -5
- package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline.js +3 -3
- package/dist/cjs/components/cell-structured/types.d.ts +1 -1
- package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
- package/dist/cjs/components/chart-sheet-view/index.d.ts +27 -0
- package/dist/cjs/components/chart-sheet-view/index.d.ts.map +1 -0
- package/dist/cjs/components/chart-sheet-view/index.js +35 -0
- package/dist/cjs/components/context-menu/embed-context-menu.d.ts +48 -0
- package/dist/cjs/components/context-menu/embed-context-menu.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/embed-context-menu.js +123 -0
- package/dist/cjs/components/context-menu/index.d.ts +23 -2
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/index.js +217 -39
- package/dist/cjs/components/context-menu/total-row-function-menu.d.ts +33 -0
- package/dist/cjs/components/context-menu/total-row-function-menu.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/total-row-function-menu.js +58 -0
- package/dist/cjs/components/context-menu/total-row-functions.d.ts +12 -12
- package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/total-row-functions.js +39 -39
- package/dist/cjs/components/embeds/chart-component.d.ts +17 -0
- package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-draggable.d.ts +61 -4
- package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-draggable.js +214 -39
- package/dist/cjs/components/filter-box/date-tree.d.ts +28 -0
- package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/date-tree.js +147 -0
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts +14 -2
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/filter-by-condition.js +95 -19
- package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/filter-by-value.js +126 -40
- package/dist/cjs/components/filter-box/index.d.ts +7 -1
- package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/index.js +102 -11
- package/dist/cjs/components/move-chart-dialog/index.d.ts +34 -0
- package/dist/cjs/components/move-chart-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/move-chart-dialog/index.js +96 -0
- package/dist/cjs/components/print-preview/page-block.d.ts +9 -1
- package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/page-block.js +28 -2
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +8 -1
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/print-preview-dialog.js +144 -3
- package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/run-print.js +19 -7
- package/dist/cjs/components/print-preview/use-page-layout.d.ts +47 -0
- package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/use-page-layout.js +81 -7
- package/dist/cjs/components/selection/index.d.ts +1 -1
- package/dist/cjs/components/selection/index.d.ts.map +1 -1
- package/dist/cjs/components/selection/index.js +6 -2
- package/dist/cjs/components/selection/types.d.ts +15 -0
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/index.js +2 -2
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
- package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
- package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/sparkline-dialog/index.js +127 -0
- package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/subtotal-dialog/index.js +10 -1
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
- package/dist/cjs/components/toolbar/index.d.ts +1 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/index.js +1 -0
- package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
- package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/insert-menu.js +24 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
- package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
- package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-actions.js +17 -7
- package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
- package/dist/cjs/config.d.ts +2 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +31 -1
- package/dist/cjs/helpers.d.ts +1 -1
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +13 -2
- package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +20 -8
- package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
- package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
- package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
- package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
- package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
- package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
- package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/cjs/hooks/use-context-setter.js +3 -1
- package/dist/cjs/hooks/use-editable.d.ts +9 -1
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +25 -1
- package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
- package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
- package/dist/cjs/hooks/use-embeds-charts.js +412 -41
- package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
- package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/cjs/hooks/use-grid-children.js +12 -6
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
- package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
- package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
- package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +37 -7
- package/dist/cjs/hooks/use-selection.d.ts +9 -1
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +118 -30
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
- package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
- package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
- package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-table-resizer.js +22 -10
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +17 -1
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +289 -4
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
- package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
- package/dist/cjs/utils/copy-as-picture.js +70 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
- package/dist/cjs/utils/z-order.d.ts +47 -0
- package/dist/cjs/utils/z-order.d.ts.map +1 -0
- package/dist/cjs/utils/z-order.js +124 -0
- package/dist/esm/api/banded-ranges.d.ts.map +1 -1
- package/dist/esm/api/banded-ranges.js +39 -12
- package/dist/esm/api/calculated-column-fill.d.ts +43 -0
- package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
- package/dist/esm/api/calculated-column-fill.js +10 -0
- package/dist/esm/api/chart-sheet.d.ts +8 -0
- package/dist/esm/api/chart-sheet.d.ts.map +1 -0
- package/dist/esm/api/chart-sheet.js +15 -0
- package/dist/esm/api/chart-source-ranges.d.ts +64 -0
- package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
- package/dist/esm/api/chart-source-ranges.js +168 -0
- package/dist/esm/api/selections.d.ts +3 -3
- package/dist/esm/api/selections.d.ts.map +1 -1
- package/dist/esm/api/selections.js +26 -2
- package/dist/esm/api/spreadsheet-api.d.ts +16 -3
- package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/esm/api/spreadsheet-api.js +18 -2
- package/dist/esm/api/table-auto-expansion.d.ts +37 -0
- package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
- package/dist/esm/api/table-auto-expansion.js +10 -0
- package/dist/esm/api/table.d.ts +49 -1
- package/dist/esm/api/table.d.ts.map +1 -1
- package/dist/esm/api/table.js +138 -1
- package/dist/esm/api/validation.d.ts +26 -1
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +119 -9
- package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
- package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
- package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
- package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
- package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
- package/dist/esm/atoms/chart-actions.atom.js +58 -0
- package/dist/esm/atoms/index.d.ts +5 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +5 -0
- package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
- package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
- package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
- package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
- package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
- package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/esm/atoms/sheet-context.atom.js +2 -0
- package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
- package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
- package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
- package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
- package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
- package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
- package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +332 -21
- package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +3 -3
- package/dist/esm/components/cell/typings.d.ts +13 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
- package/dist/esm/components/cell-filter/index.js +14 -3
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
- package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
- package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
- package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline.js +3 -3
- package/dist/esm/components/cell-structured/types.d.ts +1 -1
- package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
- package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
- package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
- package/dist/esm/components/chart-sheet-view/index.js +30 -0
- package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
- package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
- package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
- package/dist/esm/components/context-menu/index.d.ts +23 -2
- package/dist/esm/components/context-menu/index.d.ts.map +1 -1
- package/dist/esm/components/context-menu/index.js +174 -38
- package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
- package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
- package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
- package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
- package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
- package/dist/esm/components/context-menu/total-row-functions.js +29 -31
- package/dist/esm/components/embeds/chart-component.d.ts +17 -0
- package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
- package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-draggable.js +204 -45
- package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
- package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
- package/dist/esm/components/filter-box/date-tree.js +107 -0
- package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
- package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
- package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
- package/dist/esm/components/filter-box/filter-by-value.js +110 -39
- package/dist/esm/components/filter-box/index.d.ts +7 -1
- package/dist/esm/components/filter-box/index.d.ts.map +1 -1
- package/dist/esm/components/filter-box/index.js +88 -2
- package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
- package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/move-chart-dialog/index.js +88 -0
- package/dist/esm/components/print-preview/page-block.d.ts +9 -1
- package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
- package/dist/esm/components/print-preview/page-block.js +27 -2
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
- package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
- package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
- package/dist/esm/components/print-preview/run-print.js +17 -7
- package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
- package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
- package/dist/esm/components/print-preview/use-page-layout.js +55 -0
- package/dist/esm/components/selection/index.d.ts +1 -1
- package/dist/esm/components/selection/index.d.ts.map +1 -1
- package/dist/esm/components/selection/index.js +6 -2
- package/dist/esm/components/selection/types.d.ts +15 -0
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/index.js +2 -2
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
- package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
- package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/sparkline-dialog/index.js +123 -0
- package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/subtotal-dialog/index.js +10 -1
- package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
- package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
- package/dist/esm/components/toolbar/index.d.ts +1 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -1
- package/dist/esm/components/toolbar/index.js +1 -0
- package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
- package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
- package/dist/esm/components/toolbar/insert-menu.js +24 -1
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
- package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
- package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
- package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
- package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
- package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-actions.js +15 -7
- package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-style-selector.js +210 -399
- package/dist/esm/config.d.ts +2 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +30 -0
- package/dist/esm/helpers.d.ts +1 -1
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +12 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +14 -4
- package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
- package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
- package/dist/esm/hooks/use-chart-clipboard.js +213 -0
- package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
- package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
- package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
- package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/esm/hooks/use-context-setter.js +3 -1
- package/dist/esm/hooks/use-editable.d.ts +9 -1
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +25 -1
- package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
- package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
- package/dist/esm/hooks/use-embeds-charts.js +394 -39
- package/dist/esm/hooks/use-grid-children.d.ts +2 -2
- package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/esm/hooks/use-grid-children.js +8 -2
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +8 -2
- package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
- package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
- package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +35 -6
- package/dist/esm/hooks/use-selection.d.ts +9 -1
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +122 -30
- package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
- package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
- package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
- package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
- package/dist/esm/hooks/use-table-hit-zones.js +146 -0
- package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
- package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-table-resizer.js +21 -10
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +13 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +289 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/copy-as-picture.d.ts +13 -0
- package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
- package/dist/esm/utils/copy-as-picture.js +45 -0
- package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
- package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
- package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
- package/dist/esm/utils/z-order.d.ts +47 -0
- package/dist/esm/utils/z-order.d.ts.map +1 -0
- package/dist/esm/utils/z-order.js +111 -0
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +12 -10
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
- package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
- package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
- package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
- package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
|
@@ -4,8 +4,7 @@ import { canUseDOM, getOwnerDocument } from "@rowsncolumns/grid";
|
|
|
4
4
|
import { getBoundedCells, MouseButtonCodes } from "@rowsncolumns/grid";
|
|
5
5
|
import { isCellWithinBounds } from "@rowsncolumns/grid";
|
|
6
6
|
import { cellIdentifier, Grid as BaseGrid, isEqualCells, } from "@rowsncolumns/grid";
|
|
7
|
-
import {
|
|
8
|
-
import { cn, Skeleton, tryParseRichText } from "@rowsncolumns/ui";
|
|
7
|
+
import { cn, DropdownMenuContent, DropdownMenuPortal, Skeleton, tryParseRichText, } from "@rowsncolumns/ui";
|
|
9
8
|
import { cellToAddress, getCellEffectiveFormat, getContrastColor, getFormulaLocale, isConditionalFormatFormulaRule, isDataValidationFormulaRule, isNil, isNilOrBlank, iterateCellsInRange, localizeCellInput, localizeFormula, localizeFunctionDescriptions, log, resolveDefaultHorizontalAlignment, ssfFormatColor, uuid, } from "@rowsncolumns/utils";
|
|
10
9
|
import { useStore } from "jotai";
|
|
11
10
|
import merge from "lodash/merge";
|
|
@@ -13,6 +12,8 @@ import throttle from "lodash/throttle";
|
|
|
13
12
|
import React, { forwardRef, memo, startTransition, useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
14
13
|
import { getBandedCells } from "../../api/banded-ranges";
|
|
15
14
|
import { clearRangeForInsertedBand, formatsForInsertOption, insertedBandHasValues, } from "../../api/insert-options";
|
|
15
|
+
import { keepsCalculatedColumnTag, } from "../../api/calculated-column-fill";
|
|
16
|
+
import { keepsTableAutoExpansionTag, } from "../../api/table-auto-expansion";
|
|
16
17
|
import { CF_INITIAL_WINDOW, cfWindowForViewport, isSameCfWindow, } from "../../api/cf-window";
|
|
17
18
|
import { generateSelectionsFromFormula } from "../../api/selections";
|
|
18
19
|
import { SpreadsheetApi } from "../../api/spreadsheet-api";
|
|
@@ -21,7 +22,7 @@ import { getDataValidationTooltipContent } from "../../api/validation-tooltip";
|
|
|
21
22
|
import { resolveGoToSpecial } from "../../api/go-to-special";
|
|
22
23
|
import { checkExcelValidationValue, isFormulaEntry, } from "../../api/excel-validation-kinds";
|
|
23
24
|
import { checkBooleanRule, decideValidationCommit, isCellLockedUnderProtection, isProtectedCell, isProtectedSheet, showValidationDropdownArrow, } from "../../api/validation";
|
|
24
|
-
import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useOpenFillSeriesDialog, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
|
|
25
|
+
import { useFormulaModeValue, useIsEvaluateFormulaDialogMounted, useIsGoToDialogMounted, useIsMoveOverwriteConfirmMounted, useIsPasteSpecialDialogMounted, useOpenEvaluateFormulaDialog, useOpenGoToDialog, useOpenMoveOverwriteConfirm, useOpenPasteSpecialDialog, useSetNoteEditorCell, useSetPinnedTooltip, useFillOptionsState, useInsertOptionsState, useTableAutoExpansionState, useCalculatedColumnFillState, useOpenFillSeriesDialog, useShowPasteMenu, useShowValidationAlert, } from "../../atoms";
|
|
25
26
|
import { useActiveEditor } from "../../atoms/active-editor.atom";
|
|
26
27
|
import { useAddWatch, useIsWatchWindowMounted, useSetWatchWindowContext, } from "../../atoms/watch-window.atom";
|
|
27
28
|
import { useEditingCell } from "../../atoms/editing-cell.atom";
|
|
@@ -37,9 +38,12 @@ import { useBorderStyles } from "../../hooks/use-border-styles";
|
|
|
37
38
|
import { useCallbackRef } from "../../hooks/use-callback-ref";
|
|
38
39
|
import { useCellPopover } from "../../hooks/use-cell-popover";
|
|
39
40
|
import { useCellRenderer } from "../../hooks/use-cell-renderer";
|
|
41
|
+
import { useChartSourceRanges } from "../../hooks/use-chart-source-ranges";
|
|
40
42
|
import { useConditionalFormatting } from "../../hooks/use-conditional-formatting";
|
|
41
43
|
import { DefaultContextMenuWrapper, useContextMenu, } from "../../hooks/use-context-menu";
|
|
42
44
|
import { useContextSetter } from "../../hooks/use-context-setter";
|
|
45
|
+
import { useRevealChartEmbed } from "../../hooks/use-reveal-chart-embed";
|
|
46
|
+
import { useChartClipboard } from "../../hooks/use-chart-clipboard";
|
|
43
47
|
import { useCopyPasteCut } from "../../hooks/use-copy-paste-cut";
|
|
44
48
|
import { useCreateAddressFromSelection } from "../../hooks/use-create-address-from-selection";
|
|
45
49
|
import { useCreateFormulaTokenizer } from "../../hooks/use-create-formula-tokenizer";
|
|
@@ -49,6 +53,7 @@ import { useEditorChange } from "../../hooks/use-editor-change";
|
|
|
49
53
|
import { useEditorKeydown } from "../../hooks/use-editor-keydown";
|
|
50
54
|
import { useEditorSubmit } from "../../hooks/use-editor-submit";
|
|
51
55
|
import { useEmbedsCharts } from "../../hooks/use-embeds-charts";
|
|
56
|
+
import { ChartSheetView } from "../chart-sheet-view";
|
|
52
57
|
import { useExpandCell } from "../../hooks/use-expand-cell";
|
|
53
58
|
import { useExportRange } from "../../hooks/use-export-range";
|
|
54
59
|
import { useFilter } from "../../hooks/use-filter";
|
|
@@ -80,6 +85,7 @@ import { useSheetChangeHandler } from "../../hooks/use-sheet-change-handler";
|
|
|
80
85
|
import { useSizer } from "../../hooks/use-sizer";
|
|
81
86
|
import { useStableRef } from "../../hooks/use-stable-ref";
|
|
82
87
|
import { useOnStructuredReferenceSelection } from "../../hooks/use-structured-reference-selection";
|
|
88
|
+
import { useTableHitZones } from "../../hooks/use-table-hit-zones";
|
|
83
89
|
import { useTableResizer } from "../../hooks/use-table-resizer";
|
|
84
90
|
import { useDelayedValue } from "../../hooks/use-delayed-value";
|
|
85
91
|
import { useTooltip } from "../../hooks/use-tooltip";
|
|
@@ -91,6 +97,9 @@ import { fillRangeForSeriesSpec, seedRangeForSeriesSpec } from "../../api/fill-s
|
|
|
91
97
|
import { Cell as DefaultCell } from "../cell";
|
|
92
98
|
import { CellEditor as DefaultCellEditor } from "../cell-editor";
|
|
93
99
|
import { ContextMenu as DefaultContextMenu } from "../context-menu";
|
|
100
|
+
import { ContextMenuDropdown } from "../context-menu/menu";
|
|
101
|
+
import { StyledContextMenuWrapper } from "../context-menu/style";
|
|
102
|
+
import { TotalRowFunctionMenuItems } from "../context-menu/total-row-function-menu";
|
|
94
103
|
import { FillHandle } from "../fill-handle";
|
|
95
104
|
import { FilterBox as DefaultFilterBox } from "../filter-box";
|
|
96
105
|
import { HeaderCell as DefaultHeaderCell } from "../header-cell";
|
|
@@ -105,8 +114,10 @@ import { getNestedPropertyNames } from "./helpers";
|
|
|
105
114
|
* @param CanvasGridMethods
|
|
106
115
|
* @returns
|
|
107
116
|
*/
|
|
117
|
+
/** Where the grid focuses when no cell is given (A1); mirrors spreadsheet-state's `defaultCellCoords` without importing it — that package depends on this one. */
|
|
118
|
+
const defaultCellCoords = { rowIndex: 1, columnIndex: 1 };
|
|
108
119
|
function CanvasGridComponent(props, forwardedRef) {
|
|
109
|
-
const { licenseKey, sheetId, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRemoveTable, onCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
|
|
120
|
+
const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
|
|
110
121
|
// Host-driven filter props. `hostHiddenRowRanges`
|
|
111
122
|
// supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
|
|
112
123
|
// column's distinct values. Both let a million-row filter render without scanning
|
|
@@ -197,6 +208,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
197
208
|
// Auto Fill Options smart tag / right-drag fill menu + Series dialog
|
|
198
209
|
const [fillOptions, setFillOptions] = useFillOptionsState();
|
|
199
210
|
const [insertOptions, setInsertOptions] = useInsertOptionsState();
|
|
211
|
+
const [tableAutoExpansion, setTableAutoExpansion] = useTableAutoExpansionState();
|
|
212
|
+
const [calculatedColumnFill, setCalculatedColumnFill] = useCalculatedColumnFillState();
|
|
200
213
|
const openFillSeriesDialog = useOpenFillSeriesDialog();
|
|
201
214
|
// Shared state
|
|
202
215
|
const formulaMode = useFormulaModeValue();
|
|
@@ -502,6 +515,11 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
502
515
|
const tableHeaderCells = useMemo(() => {
|
|
503
516
|
return getTableHeaderCells(activeTables, basicFilter);
|
|
504
517
|
}, [activeTables, basicFilter]);
|
|
518
|
+
/** A cell on a table's totals row (its in-cell arrow opens the function picker). */
|
|
519
|
+
const isTableTotalsCell = useCallback((rowIndex, columnIndex) => !!activeTables?.some((table) => table.totalRow &&
|
|
520
|
+
rowIndex === table.range.endRowIndex &&
|
|
521
|
+
columnIndex >= table.range.startColumnIndex &&
|
|
522
|
+
columnIndex <= table.range.endColumnIndex), [activeTables]);
|
|
505
523
|
/**
|
|
506
524
|
* Retrieve banded cells
|
|
507
525
|
*/
|
|
@@ -528,6 +546,13 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
528
546
|
lastScheduledScrollRef.current = Date.now();
|
|
529
547
|
gridRef.current?.scrollToCell(cell, align);
|
|
530
548
|
}, []);
|
|
549
|
+
// Excel scrolls to a chart / picture it has just inserted or restored.
|
|
550
|
+
const scrollToChart = useRevealChartEmbed({
|
|
551
|
+
charts,
|
|
552
|
+
embeds,
|
|
553
|
+
sheetId,
|
|
554
|
+
scrollToCell,
|
|
555
|
+
});
|
|
531
556
|
/**
|
|
532
557
|
* Scroll to bottom of the sheet
|
|
533
558
|
*/
|
|
@@ -692,7 +717,13 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
692
717
|
* position offset
|
|
693
718
|
*/
|
|
694
719
|
const getRelativePositionFromOffset = useCallback((x, y) => {
|
|
695
|
-
|
|
720
|
+
const grid = gridRef.current;
|
|
721
|
+
if (grid) {
|
|
722
|
+
return grid.getRelativePositionFromOffset(x, y);
|
|
723
|
+
}
|
|
724
|
+
// A chartsheet mounts no grid; overlays position against the wrapper itself.
|
|
725
|
+
const rect = gridContainerRef.current?.getBoundingClientRect();
|
|
726
|
+
return rect ? { x: x - rect.left, y: y - rect.top } : undefined;
|
|
696
727
|
}, []);
|
|
697
728
|
/**
|
|
698
729
|
* Get scroll position
|
|
@@ -1115,10 +1146,11 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
1115
1146
|
// time — `uf.textFormat.underline` is merged on top below, so a user
|
|
1116
1147
|
// who explicitly sets underline=false still wins.
|
|
1117
1148
|
const defaultTextFormat = {
|
|
1118
|
-
bold:
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1149
|
+
bold: bandedCellFormat?.textFormat?.bold ??
|
|
1150
|
+
(isTableHeader(rowIndex, columnIndex) &&
|
|
1151
|
+
isTableHeaderThemed(rowIndex, columnIndex)
|
|
1152
|
+
? true
|
|
1153
|
+
: undefined),
|
|
1122
1154
|
fontFamily: theme.primaryFontFamily,
|
|
1123
1155
|
color: isHyperlink
|
|
1124
1156
|
? theme.themeColors.hyperlink
|
|
@@ -1739,7 +1771,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
1739
1771
|
/* Data validation arrow */
|
|
1740
1772
|
const dataValidation = getDataValidationRule(sheetId, rowIndex, columnIndex);
|
|
1741
1773
|
const additionalCellSpacing = getAdditionalCellSpacing?.(sheetId, rowIndex, columnIndex) ?? 0;
|
|
1742
|
-
const showArrow = showValidationDropdownArrow(dataValidation)
|
|
1774
|
+
const showArrow = showValidationDropdownArrow(dataValidation) ||
|
|
1775
|
+
isTableTotalsCell(rowIndex, columnIndex);
|
|
1743
1776
|
const showChip = getCellMetaType(sheetId, rowIndex, columnIndex) === "people";
|
|
1744
1777
|
const [expandable] = getCellGroupingInfo(sheetId, rowIndex, columnIndex);
|
|
1745
1778
|
const iconSpacing = DEFAULT_CELL_SPACING;
|
|
@@ -1789,6 +1822,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
1789
1822
|
getCellGroupingInfo,
|
|
1790
1823
|
getAdditionalCellSpacing,
|
|
1791
1824
|
getEffectiveCellFormat,
|
|
1825
|
+
isTableTotalsCell,
|
|
1792
1826
|
]);
|
|
1793
1827
|
/**
|
|
1794
1828
|
* Column resizer
|
|
@@ -2121,6 +2155,101 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2121
2155
|
useEffect(() => {
|
|
2122
2156
|
setInsertOptions(null);
|
|
2123
2157
|
}, [activeCell.rowIndex, activeCell.columnIndex, sheetId, setInsertOptions]);
|
|
2158
|
+
/**
|
|
2159
|
+
* Excel's AutoCorrect smart tag after a table auto-expanded. "Undo Table
|
|
2160
|
+
* AutoExpansion" resizes the table back to its pre-growth range and clears
|
|
2161
|
+
* what the growth wrote (calculated-column formulas, generated headers,
|
|
2162
|
+
* inherited formats) in one undo step — the user's own value stays, like
|
|
2163
|
+
* Excel; "Stop Automatically Expanding Tables" hands the option to the host.
|
|
2164
|
+
*/
|
|
2165
|
+
const handleChooseTableAutoExpansionOption = useCallback((option) => {
|
|
2166
|
+
if (!tableAutoExpansion)
|
|
2167
|
+
return;
|
|
2168
|
+
if (option === "undo") {
|
|
2169
|
+
if (onUndoTableAutoExpansion) {
|
|
2170
|
+
onUndoTableAutoExpansion(tableAutoExpansion);
|
|
2171
|
+
}
|
|
2172
|
+
else {
|
|
2173
|
+
const table = tables?.find((candidate) => candidate.id === tableAutoExpansion.tableId &&
|
|
2174
|
+
candidate.sheetId === tableAutoExpansion.sheetId);
|
|
2175
|
+
if (table) {
|
|
2176
|
+
onResizeTable?.(tableAutoExpansion.sheetId, table, tableAutoExpansion.previousRange);
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
else {
|
|
2181
|
+
onChangeAutoExpandTables?.(false);
|
|
2182
|
+
}
|
|
2183
|
+
setTableAutoExpansion(null);
|
|
2184
|
+
focusSheet();
|
|
2185
|
+
}, [
|
|
2186
|
+
tableAutoExpansion,
|
|
2187
|
+
tables,
|
|
2188
|
+
onResizeTable,
|
|
2189
|
+
onUndoTableAutoExpansion,
|
|
2190
|
+
onChangeAutoExpandTables,
|
|
2191
|
+
setTableAutoExpansion,
|
|
2192
|
+
focusSheet,
|
|
2193
|
+
]);
|
|
2194
|
+
// The tag survives the commit's own cursor advance (Enter / Tab) and any cell
|
|
2195
|
+
// of the grown table; moving anywhere else, or switching sheet, drops it.
|
|
2196
|
+
useEffect(() => {
|
|
2197
|
+
if (tableAutoExpansion &&
|
|
2198
|
+
!keepsTableAutoExpansionTag(tableAutoExpansion, sheetId, activeCell)) {
|
|
2199
|
+
setTableAutoExpansion(null);
|
|
2200
|
+
}
|
|
2201
|
+
}, [
|
|
2202
|
+
tableAutoExpansion,
|
|
2203
|
+
activeCell.rowIndex,
|
|
2204
|
+
activeCell.columnIndex,
|
|
2205
|
+
activeCell,
|
|
2206
|
+
sheetId,
|
|
2207
|
+
setTableAutoExpansion,
|
|
2208
|
+
]);
|
|
2209
|
+
/**
|
|
2210
|
+
* Excel's AutoCorrect smart tag after a formula typed into a table column.
|
|
2211
|
+
* "Undo Calculated Column" reverts the fill alone (the typed cell keeps its
|
|
2212
|
+
* formula); "Overwrite all cells in this column with this formula" fills the
|
|
2213
|
+
* column over the cells that kept it from filling; "Stop automatically
|
|
2214
|
+
* creating calculated columns" hands the option to the host.
|
|
2215
|
+
*/
|
|
2216
|
+
const handleChooseCalculatedColumnOption = useCallback((option) => {
|
|
2217
|
+
if (!calculatedColumnFill)
|
|
2218
|
+
return;
|
|
2219
|
+
if (option === "undo") {
|
|
2220
|
+
onUndoCalculatedColumn?.(calculatedColumnFill);
|
|
2221
|
+
}
|
|
2222
|
+
else if (option === "overwrite") {
|
|
2223
|
+
onOverwriteCalculatedColumn?.(calculatedColumnFill);
|
|
2224
|
+
}
|
|
2225
|
+
else {
|
|
2226
|
+
onChangeAutoCalculatedColumns?.(false);
|
|
2227
|
+
}
|
|
2228
|
+
setCalculatedColumnFill(null);
|
|
2229
|
+
focusSheet();
|
|
2230
|
+
}, [
|
|
2231
|
+
calculatedColumnFill,
|
|
2232
|
+
onUndoCalculatedColumn,
|
|
2233
|
+
onOverwriteCalculatedColumn,
|
|
2234
|
+
onChangeAutoCalculatedColumns,
|
|
2235
|
+
setCalculatedColumnFill,
|
|
2236
|
+
focusSheet,
|
|
2237
|
+
]);
|
|
2238
|
+
// The tag survives the commit's own cursor advance and any cell of the
|
|
2239
|
+
// column; moving anywhere else, or switching sheet, drops it.
|
|
2240
|
+
useEffect(() => {
|
|
2241
|
+
if (calculatedColumnFill &&
|
|
2242
|
+
!keepsCalculatedColumnTag(calculatedColumnFill, sheetId, activeCell)) {
|
|
2243
|
+
setCalculatedColumnFill(null);
|
|
2244
|
+
}
|
|
2245
|
+
}, [
|
|
2246
|
+
calculatedColumnFill,
|
|
2247
|
+
activeCell.rowIndex,
|
|
2248
|
+
activeCell.columnIndex,
|
|
2249
|
+
activeCell,
|
|
2250
|
+
sheetId,
|
|
2251
|
+
setCalculatedColumnFill,
|
|
2252
|
+
]);
|
|
2124
2253
|
/**
|
|
2125
2254
|
* Run Excel's Series dialog result: the target range's first row (Series
|
|
2126
2255
|
* in Columns) / first column (Rows) is the seed line; `stop` may shrink or
|
|
@@ -2250,6 +2379,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2250
2379
|
isColumnHeader,
|
|
2251
2380
|
isTouchDevice,
|
|
2252
2381
|
dataRegionBoundaries,
|
|
2382
|
+
tables,
|
|
2383
|
+
onInsertTableRow,
|
|
2253
2384
|
});
|
|
2254
2385
|
/**
|
|
2255
2386
|
* Copy, Paste and Cut hook
|
|
@@ -2263,6 +2394,37 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2263
2394
|
onCopy,
|
|
2264
2395
|
onCut,
|
|
2265
2396
|
});
|
|
2397
|
+
/**
|
|
2398
|
+
* Ctrl+C / Ctrl+X / Ctrl+V / Ctrl+D on a selected chart. The focused chart is
|
|
2399
|
+
* the target of those events (see `EmbedDraggable`); a paste that lands in the
|
|
2400
|
+
* cell editor while a chart is on the clipboard is claimed here first.
|
|
2401
|
+
*/
|
|
2402
|
+
const chartClipboard = useChartClipboard({
|
|
2403
|
+
sheetId,
|
|
2404
|
+
activeCell,
|
|
2405
|
+
charts,
|
|
2406
|
+
readonly,
|
|
2407
|
+
onCreateChart,
|
|
2408
|
+
onDeleteChart,
|
|
2409
|
+
onCopyChart,
|
|
2410
|
+
onCutChart,
|
|
2411
|
+
focusSheet,
|
|
2412
|
+
});
|
|
2413
|
+
const { copyChart, cutChart, pasteChart, duplicateChart, clearChartClipboard } = chartClipboard;
|
|
2414
|
+
const handleEditorCopy = useCallback((e) => {
|
|
2415
|
+
clearChartClipboard();
|
|
2416
|
+
onInternalCopy(e);
|
|
2417
|
+
}, [clearChartClipboard, onInternalCopy]);
|
|
2418
|
+
const handleEditorCut = useCallback((e) => {
|
|
2419
|
+
clearChartClipboard();
|
|
2420
|
+
onInternalCut(e);
|
|
2421
|
+
}, [clearChartClipboard, onInternalCut]);
|
|
2422
|
+
const handleEditorPaste = useCallback((e) => {
|
|
2423
|
+
if (pasteChart(e)) {
|
|
2424
|
+
return;
|
|
2425
|
+
}
|
|
2426
|
+
onInternalPaste(e);
|
|
2427
|
+
}, [pasteChart, onInternalPaste]);
|
|
2266
2428
|
/**
|
|
2267
2429
|
* Context menu "Insert Cut Cells" (Excel: Ctrl+X, right-click the destination). A cut of
|
|
2268
2430
|
* whole rows / columns dropped on a row / column header inserts them BEFORE the clicked
|
|
@@ -2499,14 +2661,18 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2499
2661
|
});
|
|
2500
2662
|
/**
|
|
2501
2663
|
* Get bounds of chart overlay
|
|
2502
|
-
* Within the grid body
|
|
2664
|
+
* Within the grid body: from the first cell's top-left corner to the last
|
|
2665
|
+
* row's bottom edge and last column's right edge, so an object can never be
|
|
2666
|
+
* dragged or resized past the sheet (Excel snaps it back inside).
|
|
2503
2667
|
*/
|
|
2504
2668
|
const getChartBounds = useCallback(() => {
|
|
2505
2669
|
return {
|
|
2506
2670
|
left: getColumnOffset(1),
|
|
2507
2671
|
top: getRowOffset(1),
|
|
2672
|
+
right: getColumnOffset(columnCount + 1),
|
|
2673
|
+
bottom: getRowOffset(rowCount + 1),
|
|
2508
2674
|
};
|
|
2509
|
-
}, [getRowOffset, getColumnOffset]);
|
|
2675
|
+
}, [getRowOffset, getColumnOffset, rowCount, columnCount]);
|
|
2510
2676
|
// Show notes editor
|
|
2511
2677
|
const onInsertNote = useCallback((sheetId, cell) => {
|
|
2512
2678
|
setNoteEditorCell({
|
|
@@ -2551,11 +2717,38 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2551
2717
|
});
|
|
2552
2718
|
focusSheet();
|
|
2553
2719
|
}, [setQuickEditState, enableQuickEdit, focusSheet]);
|
|
2720
|
+
/**
|
|
2721
|
+
* Opens the cell editor pre-filled (the totals row's "More Functions…").
|
|
2722
|
+
* `editCell` comes from `useEditable` below; this stable wrapper lets the
|
|
2723
|
+
* context menu reach it.
|
|
2724
|
+
*/
|
|
2725
|
+
const requestEditCell = useCallbackRef((targetSheetId, cell, initialValue) => editCell(targetSheetId, cell, initialValue));
|
|
2726
|
+
/**
|
|
2727
|
+
* The context menu's table Select items: replace the selection with a
|
|
2728
|
+
* range and park the active cell at its top-left, without scrolling.
|
|
2729
|
+
*/
|
|
2730
|
+
const selectRangeFromMenu = useCallback((targetSheetId, range) => {
|
|
2731
|
+
setActiveCell(targetSheetId, { rowIndex: range.startRowIndex, columnIndex: range.startColumnIndex }, false);
|
|
2732
|
+
onChangeSelections?.(targetSheetId, [{ range }]);
|
|
2733
|
+
}, [setActiveCell, onChangeSelections]);
|
|
2734
|
+
// Excel's table hit zones (header top edge / corner / row left edge).
|
|
2735
|
+
const { cursor: tableHitCursor, onMouseMove: onMouseMoveTableHitZones, onMouseDown: onMouseDownTableHitZones, clearHitZone: clearTableHitZone, } = useTableHitZones({
|
|
2736
|
+
sheetId,
|
|
2737
|
+
tables: activeTables,
|
|
2738
|
+
selections,
|
|
2739
|
+
frozenRows,
|
|
2740
|
+
frozenColumns,
|
|
2741
|
+
getCellCoordsFromOffset,
|
|
2742
|
+
getRelativePositionFromOffset,
|
|
2743
|
+
getCellOffsetFromCoords,
|
|
2744
|
+
getScrollPosition,
|
|
2745
|
+
onSelectRange: selectRangeFromMenu,
|
|
2746
|
+
});
|
|
2554
2747
|
/**
|
|
2555
2748
|
* Get context Menu component
|
|
2556
2749
|
*/
|
|
2557
2750
|
const getContextMenu = useCallback((cell) => {
|
|
2558
|
-
return (React.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: insertRowWithOptions, onInsertColumn: insertColumnWithOptions, rowCount: rowCount, columnCount: columnCount, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, hasCutSelection: isCutPending && copiedSheetId === sheetId, onInsertCutCells: insertCutCellsFromMenu, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, onRequestAddWatch: requestAddWatch, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onGoalSeek: onGoalSeek, onSubtotal: onSubtotal, onAdvancedFilter: onAdvancedFilter, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
|
|
2751
|
+
return (React.createElement(ContextMenu, { activeCell: activeCell, selections: selections, sheetId: sheetId, frozenRows: frozenRows, frozenColumns: frozenColumns, onHideColumn: isRestricted ? undefined : onHideColumn, onShowColumn: isRestricted ? undefined : onShowColumn, onShowRow: isRestricted ? undefined : onShowRow, onHideRow: isRestricted ? undefined : onHideRow, onGroupRows: isRestricted ? undefined : onGroupRows, onUngroupRows: isRestricted ? undefined : onUngroupRows, onGroupColumns: isRestricted ? undefined : onGroupColumns, onUngroupColumns: isRestricted ? undefined : onUngroupColumns, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, onDeleteColumn: onDeleteColumn, onDeleteRow: onDeleteRow, onInsertRow: insertRowWithOptions, onInsertColumn: insertColumnWithOptions, rowCount: rowCount, columnCount: columnCount, onInsertCellsShiftDown: onInsertCellsShiftDown, onInsertCellsShiftRight: onInsertCellsShiftRight, onDeleteCellsShiftLeft: onDeleteCellsShiftLeft, onDeleteCellsShiftUp: onDeleteCellsShiftUp, onClearContents: onClearContents, onFreezeColumn: onFreezeColumn, onFreezeRow: onFreezeRow, focusSheet: focusSheet, onSortColumn: onSortColumn, onInsertNote: onInsertNote, onProtectRange: onProtectRange, onUnProtectRange: onUnProtectRange, onSortRange: onSortRange, onRequestDefineNamedRange: onRequestDefineNamedRange, protectedRanges: protectedRanges, isRowHeader: isRowHeader(cell.columnIndex), isColumnHeader: isColumnHeader(cell.rowIndex), selectedRowHeadersIds: selectedRowHeadersIds, selectedColumnHeadersIds: selectedColumnHeadersIds, onCopy: copy, onCut: cut, hasCutSelection: isCutPending && copiedSheetId === sheetId, onInsertCutCells: insertCutCellsFromMenu, onPaste: paste, onRequestPasteSpecial: requestPasteSpecial, onRequestEvaluateFormula: requestEvaluateFormula, onRequestAddWatch: requestAddWatch, isActiveCellFormula: Boolean(getFormulaValue(sheetId, activeCell.rowIndex, activeCell.columnIndex)), onRequestResize: onRequestResize, isSheetFocused: isSheetFocused, tables: activeTables, pivotTables: pivotTables, basicFilter: basicFilter, onRequestEditTable: onRequestEditTable, onRequestResizeTable: onRequestResizeTable, onRequestInsertSlicer: onRequestInsertSlicer, onRequestEditPivotTable: onRequestEditPivotTable, onRemoveTable: onRemoveTable, onRequestDeletePivotTable: onRequestDeletePivotTable, onRequestCreatePivotChart: onRequestCreatePivotChart, onPivotDrillDown: onPivotDrillDown, onRequestFormatCells: onRequestFormatCells, onRequestConditionalFormat: onRequestConditionalFormat, onRequestDataValidation: onRequestDataValidation, onClearFormatting: onClearFormatting, onCreateTable: onCreateTable, onRequestCreateTable: onRequestCreateTable, onCreateBasicFilter: onCreateBasicFilter, onInsertTableColumn: onInsertTableColumn, onDeleteTableColumn: onDeleteTableColumn, onInsertTableRow: onInsertTableRow, onDeleteTableRow: onDeleteTableRow, onUpdateTable: onUpdateTable, onRequestEditCell: requestEditCell, onSelectRange: selectRangeFromMenu, onFilterTable: onFilterTable, onSortTable: onSortTable, getFormattedValue: getFormattedValue, getFormattedValuesFromRange: getFormattedValuesFromRange, isTableHeader: isTableHeader, readonly: readonly, onSplitTextToColumns: onSplitTextToColumns, onRemoveDuplicates: onRemoveDuplicates, onGoalSeek: onGoalSeek, onSubtotal: onSubtotal, onAdvancedFilter: onAdvancedFilter, onChange: onChange, getCellData: getCellData, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
|
|
2559
2752
|
}, [
|
|
2560
2753
|
isRestricted,
|
|
2561
2754
|
activeCell,
|
|
@@ -2606,6 +2799,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2606
2799
|
onFilterTable,
|
|
2607
2800
|
onSortTable,
|
|
2608
2801
|
onRequestEditTable,
|
|
2802
|
+
onRequestResizeTable,
|
|
2803
|
+
onRequestInsertSlicer,
|
|
2609
2804
|
onRequestEditPivotTable,
|
|
2610
2805
|
onRemoveTable,
|
|
2611
2806
|
onRequestFormatCells,
|
|
@@ -2614,8 +2809,12 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2614
2809
|
onRequestDataValidation,
|
|
2615
2810
|
onCreateBasicFilter,
|
|
2616
2811
|
onCreateTable,
|
|
2812
|
+
onRequestCreateTable,
|
|
2617
2813
|
onDeleteTableColumn,
|
|
2618
2814
|
onInsertTableRow,
|
|
2815
|
+
onUpdateTable,
|
|
2816
|
+
requestEditCell,
|
|
2817
|
+
selectRangeFromMenu,
|
|
2619
2818
|
getFormattedValue,
|
|
2620
2819
|
getFormattedValuesFromRange,
|
|
2621
2820
|
onInsertTableColumn,
|
|
@@ -2631,6 +2830,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2631
2830
|
onChange,
|
|
2632
2831
|
getCellData,
|
|
2633
2832
|
onRequestDeletePivotTable,
|
|
2833
|
+
onRequestCreatePivotChart,
|
|
2634
2834
|
isHiddenColumn,
|
|
2635
2835
|
isHiddenRow,
|
|
2636
2836
|
onShowColumn,
|
|
@@ -2694,6 +2894,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2694
2894
|
onUndo,
|
|
2695
2895
|
onRedo,
|
|
2696
2896
|
onCreateTable,
|
|
2897
|
+
onRequestCreateTable,
|
|
2697
2898
|
onCreateBasicFilter,
|
|
2698
2899
|
clearCopiedSelections,
|
|
2699
2900
|
onRequestSearch,
|
|
@@ -2780,9 +2981,11 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2780
2981
|
scrollToCell,
|
|
2781
2982
|
containerWidth: width,
|
|
2782
2983
|
containerHeight: height,
|
|
2783
|
-
onCopy:
|
|
2784
|
-
onPaste:
|
|
2785
|
-
onCut:
|
|
2984
|
+
onCopy: handleEditorCopy,
|
|
2985
|
+
onPaste: handleEditorPaste,
|
|
2986
|
+
onCut: handleEditorCut,
|
|
2987
|
+
tables,
|
|
2988
|
+
onInsertTableRow,
|
|
2786
2989
|
});
|
|
2787
2990
|
/**
|
|
2788
2991
|
* Move rows and columns
|
|
@@ -2925,7 +3128,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2925
3128
|
/**
|
|
2926
3129
|
* Displays resizable/draggable charts
|
|
2927
3130
|
*/
|
|
2928
|
-
const { chartComponents, embedComponents, slicerComponents, onMouseDown: onMouseDownCharts, } = useEmbedsCharts({
|
|
3131
|
+
const { chartComponents, embedComponents, slicerComponents, contextMenuComponent: embedContextMenuComponent, onMouseDown: onMouseDownCharts, requestChartContextMenu, } = useEmbedsCharts({
|
|
2929
3132
|
charts,
|
|
2930
3133
|
embeds,
|
|
2931
3134
|
slicers,
|
|
@@ -2936,14 +3139,20 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2936
3139
|
getCellOffsetFromCoords,
|
|
2937
3140
|
getAbsolutePositionFromOffset,
|
|
2938
3141
|
getCellCoordsFromOffset,
|
|
3142
|
+
getRelativePositionFromOffset,
|
|
2939
3143
|
getScrollPosition,
|
|
3144
|
+
ContextMenuWrapper,
|
|
3145
|
+
focusSheet,
|
|
2940
3146
|
selectedColor: chartSelectedColor,
|
|
2941
3147
|
onMoveChart,
|
|
2942
3148
|
onResizeChart,
|
|
3149
|
+
chartClipboard,
|
|
2943
3150
|
onMoveEmbed,
|
|
2944
3151
|
onResizeEmbed,
|
|
2945
3152
|
onDeleteEmbed,
|
|
2946
3153
|
onDeleteChart,
|
|
3154
|
+
onUpdateChart,
|
|
3155
|
+
onChangeZOrder,
|
|
2947
3156
|
onRequestEditEmbed,
|
|
2948
3157
|
onMoveSlicer,
|
|
2949
3158
|
onResizeSlicer,
|
|
@@ -3013,6 +3222,55 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3013
3222
|
onExpandCollapse?.(sheetId, cell, groupKeys, newExpandedState, childrenCount);
|
|
3014
3223
|
}
|
|
3015
3224
|
}, [onExpandCollapse, getCellGroupKeys, getChildrenCount]);
|
|
3225
|
+
/**
|
|
3226
|
+
* The totals-function picker a totals cell's in-cell arrow opens (Excel):
|
|
3227
|
+
* anchored at the cell's bottom-right corner like the filter dropdown.
|
|
3228
|
+
*/
|
|
3229
|
+
const [totalsPicker, setTotalsPicker] = useState(null);
|
|
3230
|
+
const closeTotalsPicker = useCallback(() => setTotalsPicker(null), []);
|
|
3231
|
+
const handleTotalsArrowClick = useCallback((cell) => {
|
|
3232
|
+
const table = activeTables?.find((candidate) => candidate.totalRow &&
|
|
3233
|
+
cell.rowIndex === candidate.range.endRowIndex &&
|
|
3234
|
+
isCellWithinBounds(cell, candidate.range));
|
|
3235
|
+
const cellPosition = getCellOffsetFromCoords(cell);
|
|
3236
|
+
const scrollPosition = getScrollPosition();
|
|
3237
|
+
if (!table || !cellPosition) {
|
|
3238
|
+
return;
|
|
3239
|
+
}
|
|
3240
|
+
const { x = 0, y = 0, width = 0, height = 0 } = cellPosition;
|
|
3241
|
+
const scrollX = isFrozenColumn(cell.columnIndex)
|
|
3242
|
+
? 0
|
|
3243
|
+
: scrollPosition.scrollLeft;
|
|
3244
|
+
const scrollY = isFrozenRow(cell.rowIndex) ? 0 : scrollPosition.scrollTop;
|
|
3245
|
+
setActiveCell(sheetId, cell, false);
|
|
3246
|
+
setTotalsPicker({
|
|
3247
|
+
table,
|
|
3248
|
+
cell,
|
|
3249
|
+
left: x + width - scrollX,
|
|
3250
|
+
top: y + height - scrollY,
|
|
3251
|
+
});
|
|
3252
|
+
}, [
|
|
3253
|
+
activeTables,
|
|
3254
|
+
getCellOffsetFromCoords,
|
|
3255
|
+
getScrollPosition,
|
|
3256
|
+
isFrozenColumn,
|
|
3257
|
+
isFrozenRow,
|
|
3258
|
+
setActiveCell,
|
|
3259
|
+
sheetId,
|
|
3260
|
+
]);
|
|
3261
|
+
const totalsPickerComponent = totalsPicker ? (React.createElement(StyledContextMenuWrapper, { style: {
|
|
3262
|
+
transform: `translate3d(${totalsPicker.left}px, ${totalsPicker.top}px, 0)`,
|
|
3263
|
+
} },
|
|
3264
|
+
React.createElement(ContextMenuDropdown, { isOpen: true, onOpenChange: (open) => {
|
|
3265
|
+
if (!open)
|
|
3266
|
+
closeTotalsPicker();
|
|
3267
|
+
} },
|
|
3268
|
+
React.createElement(DropdownMenuPortal, null,
|
|
3269
|
+
React.createElement(DropdownMenuContent, { align: "end", sideOffset: 0, onCloseAutoFocus: (event) => {
|
|
3270
|
+
event.preventDefault();
|
|
3271
|
+
focusSheet();
|
|
3272
|
+
}, onMouseMove: (e) => e.stopPropagation() },
|
|
3273
|
+
React.createElement(TotalRowFunctionMenuItems, { sheetId: sheetId, table: totalsPicker.table, cell: totalsPicker.cell, readonly: readonly, getCellData: getCellData, onChange: onChange, onClearContents: onClearContents, onUpdateTable: onUpdateTable, onRequestEditCell: requestEditCell })))))) : null;
|
|
3016
3274
|
/**
|
|
3017
3275
|
* Capture mouse move events
|
|
3018
3276
|
*/
|
|
@@ -3023,8 +3281,10 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3023
3281
|
isDraggingHeader ||
|
|
3024
3282
|
isSelectionInProgress ||
|
|
3025
3283
|
isFilling) {
|
|
3284
|
+
clearTableHitZone();
|
|
3026
3285
|
return;
|
|
3027
3286
|
}
|
|
3287
|
+
onMouseMoveTableHitZones(e);
|
|
3028
3288
|
const coords = getCellCoordsFromOffset(e.clientX, e.clientY);
|
|
3029
3289
|
if (!coords || isEqualCells(hoveredCellRef.current, coords)) {
|
|
3030
3290
|
return;
|
|
@@ -3038,6 +3298,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3038
3298
|
isSelectionInProgress,
|
|
3039
3299
|
isFilling,
|
|
3040
3300
|
hoveredCellRef,
|
|
3301
|
+
onMouseMoveTableHitZones,
|
|
3302
|
+
clearTableHitZone,
|
|
3041
3303
|
]);
|
|
3042
3304
|
// Mouse move throttler
|
|
3043
3305
|
const mouseMoveThrottler = useCallbackRef(throttle(handleMouseMove, mouseMoveThrottleTimeout, {
|
|
@@ -3074,8 +3336,12 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3074
3336
|
selectionMode: "append",
|
|
3075
3337
|
}));
|
|
3076
3338
|
}
|
|
3077
|
-
//
|
|
3078
|
-
|
|
3339
|
+
// A table hit zone (header edge / corner / row edge) selects the table
|
|
3340
|
+
// part instead of starting a cell selection.
|
|
3341
|
+
if (!onMouseDownTableHitZones(e)) {
|
|
3342
|
+
// Pass it on to use selection hook
|
|
3343
|
+
onMouseDownSelection(e);
|
|
3344
|
+
}
|
|
3079
3345
|
// Charts
|
|
3080
3346
|
onMouseDownCharts?.();
|
|
3081
3347
|
/**
|
|
@@ -3087,6 +3353,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3087
3353
|
}
|
|
3088
3354
|
// Hide filter
|
|
3089
3355
|
hideFilter();
|
|
3356
|
+
closeTotalsPicker();
|
|
3090
3357
|
// Hide popover
|
|
3091
3358
|
hideCellPopover();
|
|
3092
3359
|
// Hide paste mnenu
|
|
@@ -3097,8 +3364,10 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3097
3364
|
onUnpinTooltip();
|
|
3098
3365
|
}, [
|
|
3099
3366
|
onMouseDownSelection,
|
|
3367
|
+
onMouseDownTableHitZones,
|
|
3100
3368
|
onRequestCloseContextMenu,
|
|
3101
3369
|
hideFilter,
|
|
3370
|
+
closeTotalsPicker,
|
|
3102
3371
|
onMouseDownCharts,
|
|
3103
3372
|
formulaMode,
|
|
3104
3373
|
setFormulaState,
|
|
@@ -3224,6 +3493,8 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3224
3493
|
*/
|
|
3225
3494
|
const [cellBackgroundRenderer, cellRenderer, cellOverlayRenderer, headerCellRenderer,] = useCellRenderer({
|
|
3226
3495
|
sheetId,
|
|
3496
|
+
isTableTotalsCell,
|
|
3497
|
+
onTotalsArrowClick: handleTotalsArrowClick,
|
|
3227
3498
|
formulaLocale,
|
|
3228
3499
|
showGridLines,
|
|
3229
3500
|
scale,
|
|
@@ -3262,6 +3533,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3262
3533
|
getNote,
|
|
3263
3534
|
getComment,
|
|
3264
3535
|
getEffectiveValue,
|
|
3536
|
+
getSparklineGroup,
|
|
3265
3537
|
getFormattedValue,
|
|
3266
3538
|
getCellImageUrl,
|
|
3267
3539
|
getEffectiveCellFormat,
|
|
@@ -3333,6 +3605,20 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3333
3605
|
scrollToCell,
|
|
3334
3606
|
tokenizer: localeTokenizer,
|
|
3335
3607
|
});
|
|
3608
|
+
/**
|
|
3609
|
+
* Selected chart: outline its source ranges on this sheet and re-bind
|
|
3610
|
+
* them when a corner handle is dragged (Excel's chart data highlight).
|
|
3611
|
+
*/
|
|
3612
|
+
const { chartSourceBorderStyles, onMouseDownChartSourceResizeHandle } = useChartSourceRanges({
|
|
3613
|
+
charts,
|
|
3614
|
+
sheetId,
|
|
3615
|
+
getSheetName,
|
|
3616
|
+
readonly,
|
|
3617
|
+
onUpdateChart,
|
|
3618
|
+
getCellBounds,
|
|
3619
|
+
getCellCoordsFromOffset,
|
|
3620
|
+
scrollToCell,
|
|
3621
|
+
});
|
|
3336
3622
|
/**
|
|
3337
3623
|
* Hide fill handle
|
|
3338
3624
|
* 1. When user is in edit mode
|
|
@@ -3365,6 +3651,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3365
3651
|
isFillShrink: fillShrink !== undefined,
|
|
3366
3652
|
onSelectionMouseDown: onSelectionElementMouseDown,
|
|
3367
3653
|
onMouseDownResizeHandle: onMouseDownResizeHandle,
|
|
3654
|
+
onMouseDownChartSourceResizeHandle,
|
|
3368
3655
|
onMouseDownMoveSelection: onMouseDownMoveSelection,
|
|
3369
3656
|
isDraggingMoveSelection: isDraggingMoveSelection,
|
|
3370
3657
|
onChangeActiveCell,
|
|
@@ -3397,6 +3684,12 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3397
3684
|
onCloseFillOptions: handleCloseFillOptions,
|
|
3398
3685
|
insertOptions,
|
|
3399
3686
|
onChooseInsertOption: handleChooseInsertOption,
|
|
3687
|
+
tableAutoExpansion,
|
|
3688
|
+
canStopAutoExpandingTables: !!onChangeAutoExpandTables,
|
|
3689
|
+
onChooseTableAutoExpansionOption: handleChooseTableAutoExpansionOption,
|
|
3690
|
+
calculatedColumnFill,
|
|
3691
|
+
canStopAutoCalculatedColumns: !!onChangeAutoCalculatedColumns,
|
|
3692
|
+
onChooseCalculatedColumnOption: handleChooseCalculatedColumnOption,
|
|
3400
3693
|
hoveredCell: delayedHoveredCell,
|
|
3401
3694
|
onRemoveQuickEdit,
|
|
3402
3695
|
onAddQuickEdit,
|
|
@@ -3431,6 +3724,10 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3431
3724
|
agentSuggestions,
|
|
3432
3725
|
quickEditValues,
|
|
3433
3726
|
});
|
|
3727
|
+
// A selected chart's source outlines draw on top of the other range borders.
|
|
3728
|
+
const gridBorderStyles = useMemo(() => chartSourceBorderStyles.length
|
|
3729
|
+
? [...finalBorderStyles, ...chartSourceBorderStyles]
|
|
3730
|
+
: finalBorderStyles, [finalBorderStyles, chartSourceBorderStyles]);
|
|
3434
3731
|
// Hidden column markers
|
|
3435
3732
|
const [hiddenColumnMarkers, frozenHiddenColumnMarkers, hiddenRowMarkers, frozenHiddenRowMarkers,] = useHiddenDimensionMarkers({
|
|
3436
3733
|
sheetId,
|
|
@@ -3558,6 +3855,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3558
3855
|
getNextFocusableCell,
|
|
3559
3856
|
onEditorKeyDown,
|
|
3560
3857
|
scrollToCell,
|
|
3858
|
+
scrollToChart,
|
|
3561
3859
|
scrollToBottom,
|
|
3562
3860
|
focusSheet,
|
|
3563
3861
|
canEditCell,
|
|
@@ -3717,6 +4015,10 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3717
4015
|
scrollToCell,
|
|
3718
4016
|
commit,
|
|
3719
4017
|
openFillSeriesDialog: () => openFillSeriesDialogForRef.current?.(),
|
|
4018
|
+
copyChart,
|
|
4019
|
+
cutChart,
|
|
4020
|
+
pasteChart,
|
|
4021
|
+
duplicateChart,
|
|
3720
4022
|
};
|
|
3721
4023
|
setSpreadsheetApi(new SpreadsheetApi(propsReferenceRef, stableMethods, store, instanceStore, instanceId));
|
|
3722
4024
|
}, []);
|
|
@@ -3781,6 +4083,13 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3781
4083
|
* in formula mode
|
|
3782
4084
|
*/
|
|
3783
4085
|
const enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
|
|
4086
|
+
// A chartsheet IS its chart: no grid, headers, editor or cell menus — only the chart and its
|
|
4087
|
+
// context menu (Excel).
|
|
4088
|
+
if (sheetType === "chartsheet") {
|
|
4089
|
+
return (React.createElement("div", { className: cn("rnc-canvas-wrapper after:box-border before:box-border [&_*]:box-border flex min-h-0 min-w-0 relative z-[1] flex-1 bg-rnc-background", className), ref: gridContainerRef, role: "application", "aria-label": "Chart sheet", ...rest },
|
|
4090
|
+
React.createElement(ChartSheetViewComponent, { sheetId: sheetId, chart: charts?.find((chart) => chart.position?.sheetId === sheetId), width: width, height: height, theme: theme, backgroundColor: cellBackgroundColor, readonly: readonly, getChartComponent: getChartComponent, onDeleteChart: onDeleteChart, onUpdateChart: onUpdateChart, onRequestContextMenu: requestChartContextMenu }),
|
|
4091
|
+
embedContextMenuComponent));
|
|
4092
|
+
}
|
|
3784
4093
|
return (React.createElement("div", { className: cn("rnc-canvas-wrapper after:box-border before:box-border [&_*]:box-border flex min-h-0 min-w-0 relative z-[1] flex-1 bg-rnc-background", className), ref: gridContainerRef,
|
|
3785
4094
|
// The grid paints to <canvas>, so there is no per-cell DOM for a screen
|
|
3786
4095
|
// reader to traverse. role="application" passes keystrokes through to our
|
|
@@ -3795,11 +4104,11 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3795
4104
|
// Bind to outer container, so it always takes
|
|
3796
4105
|
// priority over other components
|
|
3797
4106
|
// generated by hooks
|
|
3798
|
-
onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest },
|
|
4107
|
+
onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel, ...rest, style: tableHitCursor ? { ...rest.style, cursor: tableHitCursor } : rest.style },
|
|
3799
4108
|
width === 0 || height === 0 ? (React.createElement("div", { className: "flex border-solid border-rnc-border border border-t border-b flex-1 justify-center items-center" },
|
|
3800
4109
|
React.createElement("div", { className: "space-y-2" },
|
|
3801
4110
|
React.createElement(Skeleton, { className: "h-4 w-[250px]" }),
|
|
3802
|
-
React.createElement(Skeleton, { className: "h-4 w-[250px]" })))) : (React.createElement(BaseGrid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles:
|
|
4111
|
+
React.createElement(Skeleton, { className: "h-4 w-[250px]" })))) : (React.createElement(BaseGrid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: gridBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: FillHandle, showFillHandle: showFillHandle, fillHandleSize: fillHandleSize, showGridLines: showGridLines, enableCellOverlay: true, enableCellBackground: true, enableSelectionDrag: enableSelectionDrag, showFrozenColumnShadow: showFrozenSeparator, showFrozenRowShadow: showFrozenSeparator, selectionBorderColor: selectionBorderColor, selectionBackgroundColor: selectionBackgroundColor, fillhandleBorderColor: cellBackgroundColor, isDraggingSelection: isDragging, fillSelection: fillShrinkOverlay ?? fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
|
|
3803
4112
|
// Dimension of fill handle
|
|
3804
4113
|
scrollToCellOffset: 4, scrollbarSize: scrollbarSize, isHiddenCell: isHiddenCell, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, visibleRowRanges: visibleRowRanges, isHiddenOverlay: isHiddenOverlay, isHiddenBackground: isHiddenBackground, overlayRenderer: cellOverlayRenderer, backgroundRenderer: cellBackgroundRenderer, shadowSettings: shadowSettings, onScroll: handleScroll, onViewPortChange: handleViewPortChange, autoFocus: autoFocus, snap: scrollSnap, scrollThrottleTimeout: scrollThrottleTimeout, preventBrowserDefaultScroll: preventBrowserDefaultScroll, showHeaders: showHeaders, gridChildren: gridChildren, onTouchStart: onTouchStart, onDimensionsChange: onDimensionsChange, extendScrollSize: isTouchDevice || isFirefox, isTouchDevice: isTouchDevice, frozenShadowThickness: frozenShadowThickness, onAfterScrollToCell: onAfterScrollToCell, estimatedRowHeight: defaultRowHeight, estimatedColumnWidth: defaultColumnWidth, footerHeight: footerHeight, footerComponent: footerComponent, getOverflowBuffer: getOverflowBuffer, getFrozenColumnOverflowCells: getFrozenColumnOverflowCells })),
|
|
3805
4114
|
tooltipComponent,
|
|
@@ -3807,7 +4116,9 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3807
4116
|
draggableColumns,
|
|
3808
4117
|
draggableRows,
|
|
3809
4118
|
contextMenuComponent,
|
|
4119
|
+
embedContextMenuComponent,
|
|
3810
4120
|
filterComponent,
|
|
4121
|
+
totalsPickerComponent,
|
|
3811
4122
|
headerResizer,
|
|
3812
4123
|
validatorResult,
|
|
3813
4124
|
React.createElement("div", { "aria-live": "polite", "aria-atomic": "true", style: {
|