@rowsncolumns/spreadsheet 10.2.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +100 -0
- package/Readme.md +9 -0
- package/dist/cjs/api/animate.d.ts +36 -0
- package/dist/cjs/api/animate.d.ts.map +1 -0
- package/dist/cjs/api/animate.js +123 -0
- package/dist/cjs/api/banded-ranges.d.ts +16 -0
- package/dist/cjs/api/banded-ranges.d.ts.map +1 -0
- package/dist/cjs/api/banded-ranges.js +134 -0
- package/dist/cjs/api/cf-engine.d.ts +36 -0
- package/dist/cjs/api/cf-engine.d.ts.map +1 -0
- package/dist/cjs/api/cf-engine.js +73 -0
- package/dist/cjs/api/cf-overlays.d.ts +7 -0
- package/dist/cjs/api/cf-overlays.d.ts.map +1 -0
- package/dist/cjs/api/cf-overlays.js +136 -0
- package/dist/cjs/api/cf-window.d.ts +45 -0
- package/dist/cjs/api/cf-window.d.ts.map +1 -0
- package/dist/cjs/api/cf-window.js +143 -0
- package/dist/cjs/api/colors.d.ts +8 -0
- package/dist/cjs/api/colors.d.ts.map +1 -0
- package/dist/cjs/api/colors.js +31 -0
- package/dist/cjs/api/copy-paste.d.ts +10 -0
- package/dist/cjs/api/copy-paste.d.ts.map +1 -0
- package/dist/cjs/api/copy-paste.js +28 -0
- package/dist/cjs/api/fill-patterns.d.ts +5 -0
- package/dist/cjs/api/fill-patterns.d.ts.map +1 -0
- package/dist/cjs/api/fill-patterns.js +202 -0
- package/dist/cjs/api/font-loader.d.ts +8 -0
- package/dist/cjs/api/font-loader.d.ts.map +1 -0
- package/dist/cjs/api/font-loader.js +162 -0
- package/dist/cjs/api/heatmap.d.ts +4 -0
- package/dist/cjs/api/heatmap.d.ts.map +1 -0
- package/dist/cjs/api/heatmap.js +177 -0
- package/dist/cjs/api/scheduler.d.ts +8 -0
- package/dist/cjs/api/scheduler.d.ts.map +1 -0
- package/dist/cjs/api/scheduler.js +19 -0
- package/dist/cjs/api/scroller.d.ts +134 -0
- package/dist/cjs/api/scroller.d.ts.map +1 -0
- package/dist/cjs/api/scroller.js +702 -0
- package/dist/cjs/api/selections.d.ts +111 -0
- package/dist/cjs/api/selections.d.ts.map +1 -0
- package/dist/cjs/api/selections.js +407 -0
- package/dist/cjs/api/spreadsheet-api.d.ts +271 -0
- package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -0
- package/dist/cjs/api/spreadsheet-api.js +811 -0
- package/dist/cjs/api/table.d.ts +11 -0
- package/dist/cjs/api/table.d.ts.map +1 -0
- package/dist/cjs/api/table.js +17 -0
- package/dist/cjs/api/validation.d.ts +98 -0
- package/dist/cjs/api/validation.d.ts.map +1 -0
- package/dist/cjs/api/validation.js +506 -0
- package/dist/cjs/atoms/active-editor.atom.d.ts +8 -0
- package/dist/cjs/atoms/active-editor.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/active-editor.atom.js +12 -0
- package/dist/cjs/atoms/cell-input-context.atom.d.ts +15 -0
- package/dist/cjs/atoms/cell-input-context.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/cell-input-context.atom.js +24 -0
- package/dist/cjs/atoms/editing-cell.atom.d.ts +7 -0
- package/dist/cjs/atoms/editing-cell.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/editing-cell.atom.js +9 -0
- package/dist/cjs/atoms/formula-bar-editor-value.atom.d.ts +19 -0
- package/dist/cjs/atoms/formula-bar-editor-value.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/formula-bar-editor-value.atom.js +44 -0
- package/dist/cjs/atoms/formula-mode.atom.d.ts +7 -0
- package/dist/cjs/atoms/formula-mode.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/formula-mode.atom.js +11 -0
- package/dist/cjs/atoms/formula-selection-state.atom.d.ts +16 -0
- package/dist/cjs/atoms/formula-selection-state.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/formula-selection-state.atom.js +32 -0
- package/dist/cjs/atoms/formula-selections.atom.d.ts +8 -0
- package/dist/cjs/atoms/formula-selections.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/formula-selections.atom.js +9 -0
- package/dist/cjs/atoms/index.d.ts +18 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -0
- package/dist/cjs/atoms/index.js +22 -0
- package/dist/cjs/atoms/loading-indicator.atom.d.ts +12 -0
- package/dist/cjs/atoms/loading-indicator.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/loading-indicator.atom.js +22 -0
- package/dist/cjs/atoms/magic-fill-state.atom.d.ts +5 -0
- package/dist/cjs/atoms/magic-fill-state.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/magic-fill-state.atom.js +12 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts +6 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/paste-menu.atom.js +9 -0
- package/dist/cjs/atoms/persistent-tooltip.atom.d.ts +11 -0
- package/dist/cjs/atoms/persistent-tooltip.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/persistent-tooltip.atom.js +34 -0
- package/dist/cjs/atoms/popover.atom.d.ts +7 -0
- package/dist/cjs/atoms/popover.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/popover.atom.js +9 -0
- package/dist/cjs/atoms/range-selector.atom.d.ts +6 -0
- package/dist/cjs/atoms/range-selector.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/range-selector.atom.js +11 -0
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +6 -0
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/selected-chart-embed.atom.js +9 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts +66 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/sheet-context.atom.js +142 -0
- package/dist/cjs/atoms/sheet-status-display.atom.d.ts +15 -0
- package/dist/cjs/atoms/sheet-status-display.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/sheet-status-display.atom.js +18 -0
- package/dist/cjs/atoms/show-formula-help.atom.d.ts +8 -0
- package/dist/cjs/atoms/show-formula-help.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/show-formula-help.atom.js +20 -0
- package/dist/cjs/atoms/sort-dialog.atom.d.ts +22 -0
- package/dist/cjs/atoms/sort-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/sort-dialog.atom.js +14 -0
- package/dist/cjs/atoms/spreadsheet-api.atom.d.ts +5 -0
- package/dist/cjs/atoms/spreadsheet-api.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/spreadsheet-api.atom.js +11 -0
- package/dist/cjs/atoms/validation-alert.atom.d.ts +27 -0
- package/dist/cjs/atoms/validation-alert.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/validation-alert.atom.js +23 -0
- package/dist/cjs/components/bottom-bar/index.d.ts +7 -0
- package/dist/cjs/components/bottom-bar/index.d.ts.map +1 -0
- package/dist/cjs/components/bottom-bar/index.js +11 -0
- package/dist/cjs/components/canvas-grid/helpers.d.ts +15 -0
- package/dist/cjs/components/canvas-grid/helpers.d.ts.map +1 -0
- package/dist/cjs/components/canvas-grid/helpers.js +53 -0
- package/dist/cjs/components/canvas-grid/index.d.ts +7 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -0
- package/dist/cjs/components/canvas-grid/index.js +3413 -0
- package/dist/cjs/components/canvas-grid/typings.d.ts +2027 -0
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -0
- package/dist/cjs/components/canvas-grid/typings.js +9 -0
- package/dist/cjs/components/cell/alignment.d.ts +70 -0
- package/dist/cjs/components/cell/alignment.d.ts.map +1 -0
- package/dist/cjs/components/cell/alignment.js +137 -0
- package/dist/cjs/components/cell/cell-background.d.ts +15 -0
- package/dist/cjs/components/cell/cell-background.d.ts.map +1 -0
- package/dist/cjs/components/cell/cell-background.js +171 -0
- package/dist/cjs/components/cell/cell-text-runs.d.ts +98 -0
- package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -0
- package/dist/cjs/components/cell/cell-text-runs.js +470 -0
- package/dist/cjs/components/cell/helpers.d.ts +3 -0
- package/dist/cjs/components/cell/helpers.d.ts.map +1 -0
- package/dist/cjs/components/cell/helpers.js +20 -0
- package/dist/cjs/components/cell/index.d.ts +4 -0
- package/dist/cjs/components/cell/index.d.ts.map +1 -0
- package/dist/cjs/components/cell/index.js +272 -0
- package/dist/cjs/components/cell/rich-text.d.ts +82 -0
- package/dist/cjs/components/cell/rich-text.d.ts.map +1 -0
- package/dist/cjs/components/cell/rich-text.js +211 -0
- package/dist/cjs/components/cell/typings.d.ts +190 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -0
- package/dist/cjs/components/cell/typings.js +2 -0
- package/dist/cjs/components/cell-arrow/index.d.ts +14 -0
- package/dist/cjs/components/cell-arrow/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-arrow/index.js +28 -0
- package/dist/cjs/components/cell-calculated/index.d.ts +17 -0
- package/dist/cjs/components/cell-calculated/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-calculated/index.js +20 -0
- package/dist/cjs/components/cell-checkbox/index.d.ts +14 -0
- package/dist/cjs/components/cell-checkbox/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-checkbox/index.js +29 -0
- package/dist/cjs/components/cell-diff/index.d.ts +42 -0
- package/dist/cjs/components/cell-diff/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-diff/index.js +94 -0
- package/dist/cjs/components/cell-editor/calendar-popup.d.ts +9 -0
- package/dist/cjs/components/cell-editor/calendar-popup.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/calendar-popup.js +25 -0
- package/dist/cjs/components/cell-editor/formula-result-preview.d.ts +9 -0
- package/dist/cjs/components/cell-editor/formula-result-preview.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/formula-result-preview.js +26 -0
- package/dist/cjs/components/cell-editor/helpers.d.ts +11 -0
- package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/helpers.js +41 -0
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts +2 -0
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/helpers.spec.js +18 -0
- package/dist/cjs/components/cell-editor/index.d.ts +146 -0
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/index.js +268 -0
- package/dist/cjs/components/cell-editor/style.d.ts +9 -0
- package/dist/cjs/components/cell-editor/style.d.ts.map +1 -0
- package/dist/cjs/components/cell-editor/style.js +31 -0
- package/dist/cjs/components/cell-error/index.d.ts +14 -0
- package/dist/cjs/components/cell-error/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-error/index.js +24 -0
- package/dist/cjs/components/cell-expand/index.d.ts +15 -0
- package/dist/cjs/components/cell-expand/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-expand/index.js +31 -0
- package/dist/cjs/components/cell-filter/index.d.ts +21 -0
- package/dist/cjs/components/cell-filter/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-filter/index.js +40 -0
- package/dist/cjs/components/cell-group/index.d.ts +17 -0
- package/dist/cjs/components/cell-group/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-group/index.js +32 -0
- package/dist/cjs/components/cell-input/cell-input.d.ts +123 -0
- package/dist/cjs/components/cell-input/cell-input.d.ts.map +1 -0
- package/dist/cjs/components/cell-input/cell-input.js +68 -0
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts +21 -0
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -0
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +63 -0
- package/dist/cjs/components/cell-input/index.d.ts +3 -0
- package/dist/cjs/components/cell-input/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-input/index.js +5 -0
- package/dist/cjs/components/cell-input/style.d.ts +6 -0
- package/dist/cjs/components/cell-input/style.d.ts.map +1 -0
- package/dist/cjs/components/cell-input/style.js +14 -0
- package/dist/cjs/components/cell-overlay/index.d.ts +25 -0
- package/dist/cjs/components/cell-overlay/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-overlay/index.js +161 -0
- package/dist/cjs/components/cell-structured/index.d.ts +8 -0
- package/dist/cjs/components/cell-structured/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-structured/index.js +21 -0
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts +54 -0
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -0
- package/dist/cjs/components/cell-structured/sparkline-math.js +111 -0
- package/dist/cjs/components/cell-structured/sparkline.d.ts +6 -0
- package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -0
- package/dist/cjs/components/cell-structured/sparkline.js +256 -0
- package/dist/cjs/components/cell-structured/types.d.ts +23 -0
- package/dist/cjs/components/cell-structured/types.d.ts.map +1 -0
- package/dist/cjs/components/cell-structured/types.js +2 -0
- package/dist/cjs/components/cell-tooltip/index.d.ts +28 -0
- package/dist/cjs/components/cell-tooltip/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-tooltip/index.js +55 -0
- package/dist/cjs/components/cell-tooltip/note-editor.d.ts +12 -0
- package/dist/cjs/components/cell-tooltip/note-editor.d.ts.map +1 -0
- package/dist/cjs/components/cell-tooltip/note-editor.js +26 -0
- package/dist/cjs/components/cell-tooltip/style.d.ts +3 -0
- package/dist/cjs/components/cell-tooltip/style.d.ts.map +1 -0
- package/dist/cjs/components/cell-tooltip/style.js +11 -0
- package/dist/cjs/components/context-menu/index.d.ts +80 -0
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/index.js +666 -0
- package/dist/cjs/components/context-menu/menu.d.ts +10 -0
- package/dist/cjs/components/context-menu/menu.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/menu.js +15 -0
- package/dist/cjs/components/context-menu/style.d.ts +6 -0
- package/dist/cjs/components/context-menu/style.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/style.js +16 -0
- package/dist/cjs/components/embeds/chart-component.d.ts +16 -0
- package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -0
- package/dist/cjs/components/embeds/chart-component.js +12 -0
- package/dist/cjs/components/embeds/embed-component.d.ts +17 -0
- package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -0
- package/dist/cjs/components/embeds/embed-component.js +128 -0
- package/dist/cjs/components/embeds/embed-draggable.d.ts +43 -0
- package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -0
- package/dist/cjs/components/embeds/embed-draggable.js +117 -0
- package/dist/cjs/components/embeds/index.d.ts +5 -0
- package/dist/cjs/components/embeds/index.d.ts.map +1 -0
- package/dist/cjs/components/embeds/index.js +7 -0
- package/dist/cjs/components/embeds/shape-geometry.d.ts +10 -0
- package/dist/cjs/components/embeds/shape-geometry.d.ts.map +1 -0
- package/dist/cjs/components/embeds/shape-geometry.js +265 -0
- package/dist/cjs/components/embeds/shape-svg.d.ts +56 -0
- package/dist/cjs/components/embeds/shape-svg.d.ts.map +1 -0
- package/dist/cjs/components/embeds/shape-svg.js +165 -0
- package/dist/cjs/components/embeds/slicer-component.d.ts +27 -0
- package/dist/cjs/components/embeds/slicer-component.d.ts.map +1 -0
- package/dist/cjs/components/embeds/slicer-component.js +283 -0
- package/dist/cjs/components/fill-handle/index.d.ts +7 -0
- package/dist/cjs/components/fill-handle/index.d.ts.map +1 -0
- package/dist/cjs/components/fill-handle/index.js +19 -0
- package/dist/cjs/components/filter-box/filter-by-color.d.ts +28 -0
- package/dist/cjs/components/filter-box/filter-by-color.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/filter-by-color.js +104 -0
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts +13 -0
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/filter-by-condition.js +47 -0
- package/dist/cjs/components/filter-box/filter-by-value.d.ts +9 -0
- package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/filter-by-value.js +86 -0
- package/dist/cjs/components/filter-box/index.d.ts +50 -0
- package/dist/cjs/components/filter-box/index.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/index.js +357 -0
- package/dist/cjs/components/floating-cell-editor/index.d.ts +83 -0
- package/dist/cjs/components/floating-cell-editor/index.d.ts.map +1 -0
- package/dist/cjs/components/floating-cell-editor/index.js +180 -0
- package/dist/cjs/components/formula-bar/index.d.ts +11 -0
- package/dist/cjs/components/formula-bar/index.d.ts.map +1 -0
- package/dist/cjs/components/formula-bar/index.js +19 -0
- package/dist/cjs/components/formula-bar/style.d.ts +4 -0
- package/dist/cjs/components/formula-bar/style.d.ts.map +1 -0
- package/dist/cjs/components/formula-bar/style.js +16 -0
- package/dist/cjs/components/formula-input/index.d.ts +17 -0
- package/dist/cjs/components/formula-input/index.d.ts.map +1 -0
- package/dist/cjs/components/formula-input/index.js +92 -0
- package/dist/cjs/components/grid-footer/index.d.ts +14 -0
- package/dist/cjs/components/grid-footer/index.d.ts.map +1 -0
- package/dist/cjs/components/grid-footer/index.js +40 -0
- package/dist/cjs/components/header-cell/index.d.ts +10 -0
- package/dist/cjs/components/header-cell/index.d.ts.map +1 -0
- package/dist/cjs/components/header-cell/index.js +25 -0
- package/dist/cjs/components/header-menu/index.d.ts +13 -0
- package/dist/cjs/components/header-menu/index.d.ts.map +1 -0
- package/dist/cjs/components/header-menu/index.js +19 -0
- package/dist/cjs/components/header-move/index.d.ts +23 -0
- package/dist/cjs/components/header-move/index.d.ts.map +1 -0
- package/dist/cjs/components/header-move/index.js +46 -0
- package/dist/cjs/components/header-resizer/index.d.ts +19 -0
- package/dist/cjs/components/header-resizer/index.d.ts.map +1 -0
- package/dist/cjs/components/header-resizer/index.js +38 -0
- package/dist/cjs/components/hidden-markers/index.d.ts +15 -0
- package/dist/cjs/components/hidden-markers/index.d.ts.map +1 -0
- package/dist/cjs/components/hidden-markers/index.js +47 -0
- package/dist/cjs/components/hidden-markers/style.d.ts +5 -0
- package/dist/cjs/components/hidden-markers/style.d.ts.map +1 -0
- package/dist/cjs/components/hidden-markers/style.js +11 -0
- package/dist/cjs/components/insert-function-dialog/index.d.ts +32 -0
- package/dist/cjs/components/insert-function-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/insert-function-dialog/index.js +84 -0
- package/dist/cjs/components/loading-indicator/index.d.ts +7 -0
- package/dist/cjs/components/loading-indicator/index.d.ts.map +1 -0
- package/dist/cjs/components/loading-indicator/index.js +14 -0
- package/dist/cjs/components/outline-gutter/index.d.ts +44 -0
- package/dist/cjs/components/outline-gutter/index.d.ts.map +1 -0
- package/dist/cjs/components/outline-gutter/index.js +450 -0
- package/dist/cjs/components/pivot-placeholder/index.d.ts +12 -0
- package/dist/cjs/components/pivot-placeholder/index.d.ts.map +1 -0
- package/dist/cjs/components/pivot-placeholder/index.js +24 -0
- package/dist/cjs/components/print-preview/cell-styles.d.ts +18 -0
- package/dist/cjs/components/print-preview/cell-styles.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/cell-styles.js +181 -0
- package/dist/cjs/components/print-preview/index.d.ts +5 -0
- package/dist/cjs/components/print-preview/index.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/index.js +9 -0
- package/dist/cjs/components/print-preview/page-block.d.ts +62 -0
- package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/page-block.js +322 -0
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +49 -0
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/print-preview-dialog.js +374 -0
- package/dist/cjs/components/print-preview/run-print.d.ts +11 -0
- package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/run-print.js +72 -0
- package/dist/cjs/components/print-preview/settings.d.ts +130 -0
- package/dist/cjs/components/print-preview/settings.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/settings.js +236 -0
- package/dist/cjs/components/print-preview/use-page-layout.d.ts +60 -0
- package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -0
- package/dist/cjs/components/print-preview/use-page-layout.js +161 -0
- package/dist/cjs/components/range-selector/index.d.ts +25 -0
- package/dist/cjs/components/range-selector/index.d.ts.map +1 -0
- package/dist/cjs/components/range-selector/index.js +250 -0
- package/dist/cjs/components/resizer/index.d.ts +9 -0
- package/dist/cjs/components/resizer/index.d.ts.map +1 -0
- package/dist/cjs/components/resizer/index.js +46 -0
- package/dist/cjs/components/selection/avatar.d.ts +14 -0
- package/dist/cjs/components/selection/avatar.d.ts.map +1 -0
- package/dist/cjs/components/selection/avatar.js +17 -0
- package/dist/cjs/components/selection/index.d.ts +9 -0
- package/dist/cjs/components/selection/index.d.ts.map +1 -0
- package/dist/cjs/components/selection/index.js +179 -0
- package/dist/cjs/components/selection/magic-fill.d.ts +26 -0
- package/dist/cjs/components/selection/magic-fill.d.ts.map +1 -0
- package/dist/cjs/components/selection/magic-fill.js +60 -0
- package/dist/cjs/components/selection/paste-menu.d.ts +10 -0
- package/dist/cjs/components/selection/paste-menu.d.ts.map +1 -0
- package/dist/cjs/components/selection/paste-menu.js +35 -0
- package/dist/cjs/components/selection/quick-edit.d.ts +14 -0
- package/dist/cjs/components/selection/quick-edit.d.ts.map +1 -0
- package/dist/cjs/components/selection/quick-edit.js +41 -0
- package/dist/cjs/components/selection/style.d.ts +15 -0
- package/dist/cjs/components/selection/style.d.ts.map +1 -0
- package/dist/cjs/components/selection/style.js +47 -0
- package/dist/cjs/components/selection/suggestion-action.d.ts +22 -0
- package/dist/cjs/components/selection/suggestion-action.d.ts.map +1 -0
- package/dist/cjs/components/selection/suggestion-action.js +61 -0
- package/dist/cjs/components/selection/title.d.ts +45 -0
- package/dist/cjs/components/selection/title.d.ts.map +1 -0
- package/dist/cjs/components/selection/title.js +93 -0
- package/dist/cjs/components/selection/types.d.ts +43 -0
- package/dist/cjs/components/selection/types.d.ts.map +1 -0
- package/dist/cjs/components/selection/types.js +2 -0
- package/dist/cjs/components/selection-input/index.d.ts +19 -0
- package/dist/cjs/components/selection-input/index.d.ts.map +1 -0
- package/dist/cjs/components/selection-input/index.js +30 -0
- package/dist/cjs/components/selection-input/style.d.ts +3 -0
- package/dist/cjs/components/selection-input/style.d.ts.map +1 -0
- package/dist/cjs/components/selection-input/style.js +11 -0
- package/dist/cjs/components/sheet-search/index.d.ts +41 -0
- package/dist/cjs/components/sheet-search/index.d.ts.map +1 -0
- package/dist/cjs/components/sheet-search/index.js +115 -0
- package/dist/cjs/components/sheet-status/index.d.ts +40 -0
- package/dist/cjs/components/sheet-status/index.d.ts.map +1 -0
- package/dist/cjs/components/sheet-status/index.js +154 -0
- package/dist/cjs/components/sheet-status/style.d.ts +4 -0
- package/dist/cjs/components/sheet-status/style.d.ts.map +1 -0
- package/dist/cjs/components/sheet-status/style.js +17 -0
- package/dist/cjs/components/sheet-switcher/index.d.ts +12 -0
- package/dist/cjs/components/sheet-switcher/index.d.ts.map +1 -0
- package/dist/cjs/components/sheet-switcher/index.js +39 -0
- package/dist/cjs/components/sheet-switcher/new-sheet-button.d.ts +4 -0
- package/dist/cjs/components/sheet-switcher/new-sheet-button.d.ts.map +1 -0
- package/dist/cjs/components/sheet-switcher/new-sheet-button.js +12 -0
- package/dist/cjs/components/sheet-tabs/context-menu.d.ts +43 -0
- package/dist/cjs/components/sheet-tabs/context-menu.d.ts.map +1 -0
- package/dist/cjs/components/sheet-tabs/context-menu.js +58 -0
- package/dist/cjs/components/sheet-tabs/index.d.ts +18 -0
- package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -0
- package/dist/cjs/components/sheet-tabs/index.js +231 -0
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +21 -0
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -0
- package/dist/cjs/components/sheet-tabs/sheet-tab.js +135 -0
- package/dist/cjs/components/sheet-tabs/style.d.ts +10 -0
- package/dist/cjs/components/sheet-tabs/style.d.ts.map +1 -0
- package/dist/cjs/components/sheet-tabs/style.js +38 -0
- package/dist/cjs/components/sheet-tabs/types.d.ts +45 -0
- package/dist/cjs/components/sheet-tabs/types.d.ts.map +1 -0
- package/dist/cjs/components/sheet-tabs/types.js +2 -0
- package/dist/cjs/components/sort-range-dialog/index.d.ts +66 -0
- package/dist/cjs/components/sort-range-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/sort-range-dialog/index.js +260 -0
- package/dist/cjs/components/toolbar/background-color-selector.d.ts +19 -0
- package/dist/cjs/components/toolbar/background-color-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/background-color-selector.js +34 -0
- package/dist/cjs/components/toolbar/border-color-selector.d.ts +18 -0
- package/dist/cjs/components/toolbar/border-color-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/border-color-selector.js +31 -0
- package/dist/cjs/components/toolbar/border-line-style-options.d.ts +9 -0
- package/dist/cjs/components/toolbar/border-line-style-options.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/border-line-style-options.js +48 -0
- package/dist/cjs/components/toolbar/border-line-style-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/border-line-style-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/border-line-style-selector.js +25 -0
- package/dist/cjs/components/toolbar/border-location-options.d.ts +11 -0
- package/dist/cjs/components/toolbar/border-location-options.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/border-location-options.js +71 -0
- package/dist/cjs/components/toolbar/border-selector.d.ts +20 -0
- package/dist/cjs/components/toolbar/border-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/border-selector.js +65 -0
- package/dist/cjs/components/toolbar/buttons.d.ts +55 -0
- package/dist/cjs/components/toolbar/buttons.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/buttons.js +216 -0
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts +25 -0
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/cell-style-selector.js +531 -0
- package/dist/cjs/components/toolbar/color-selector.d.ts +13 -0
- package/dist/cjs/components/toolbar/color-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/color-selector.js +57 -0
- package/dist/cjs/components/toolbar/font-family-selector.d.ts +22 -0
- package/dist/cjs/components/toolbar/font-family-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/font-family-selector.js +183 -0
- package/dist/cjs/components/toolbar/font-size-selector.d.ts +10 -0
- package/dist/cjs/components/toolbar/font-size-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/font-size-selector.js +149 -0
- package/dist/cjs/components/toolbar/index.d.ts +25 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/index.js +27 -0
- package/dist/cjs/components/toolbar/insert-menu.d.ts +22 -0
- package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/insert-menu.js +146 -0
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +15 -0
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/merge-cells-selector.js +56 -0
- package/dist/cjs/components/toolbar/scale-selector.d.ts +13 -0
- package/dist/cjs/components/toolbar/scale-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/scale-selector.js +78 -0
- package/dist/cjs/components/toolbar/style.d.ts +3 -0
- package/dist/cjs/components/toolbar/style.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/style.js +11 -0
- package/dist/cjs/components/toolbar/table-actions.d.ts +15 -0
- package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/table-actions.js +47 -0
- package/dist/cjs/components/toolbar/table-style-selector.d.ts +25 -0
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/table-style-selector.js +494 -0
- package/dist/cjs/components/toolbar/text-color-selector.d.ts +20 -0
- package/dist/cjs/components/toolbar/text-color-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-color-selector.js +34 -0
- package/dist/cjs/components/toolbar/text-format-selector.d.ts +23 -0
- package/dist/cjs/components/toolbar/text-format-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-format-selector.js +263 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts +10 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.js +42 -0
- package/dist/cjs/components/toolbar/text-vertical-align-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/text-vertical-align-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-vertical-align-selector.js +42 -0
- package/dist/cjs/components/toolbar/text-wrap-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/text-wrap-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-wrap-selector.js +41 -0
- package/dist/cjs/components/toolbar/theme-selector.d.ts +10 -0
- package/dist/cjs/components/toolbar/theme-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/theme-selector.js +32 -0
- package/dist/cjs/components/toolbar/toolbar.d.ts +12 -0
- package/dist/cjs/components/toolbar/toolbar.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/toolbar.js +145 -0
- package/dist/cjs/components/toolbar/types.d.ts +2 -0
- package/dist/cjs/components/toolbar/types.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/types.js +2 -0
- package/dist/cjs/components/toolbar/view-menu.d.ts +25 -0
- package/dist/cjs/components/toolbar/view-menu.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/view-menu.js +46 -0
- package/dist/cjs/components/validation-alert-dialog/index.d.ts +15 -0
- package/dist/cjs/components/validation-alert-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/validation-alert-dialog/index.js +69 -0
- package/dist/cjs/config.d.ts +107 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +270 -0
- package/dist/cjs/helpers/merged-cell-borders.d.ts +26 -0
- package/dist/cjs/helpers/merged-cell-borders.d.ts.map +1 -0
- package/dist/cjs/helpers/merged-cell-borders.js +44 -0
- package/dist/cjs/helpers.d.ts +118 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +524 -0
- package/dist/cjs/hooks/index.d.ts +11 -0
- package/dist/cjs/hooks/index.d.ts.map +1 -0
- package/dist/cjs/hooks/index.js +13 -0
- package/dist/cjs/hooks/show-zeros.d.ts +13 -0
- package/dist/cjs/hooks/show-zeros.d.ts.map +1 -0
- package/dist/cjs/hooks/show-zeros.js +24 -0
- package/dist/cjs/hooks/use-async.d.ts +2 -0
- package/dist/cjs/hooks/use-async.d.ts.map +1 -0
- package/dist/cjs/hooks/use-async.js +37 -0
- package/dist/cjs/hooks/use-border-styles.d.ts +31 -0
- package/dist/cjs/hooks/use-border-styles.d.ts.map +1 -0
- package/dist/cjs/hooks/use-border-styles.js +433 -0
- package/dist/cjs/hooks/use-callback-ref.d.ts +6 -0
- package/dist/cjs/hooks/use-callback-ref.d.ts.map +1 -0
- package/dist/cjs/hooks/use-callback-ref.js +27 -0
- package/dist/cjs/hooks/use-cell-diff-highlight.d.ts +43 -0
- package/dist/cjs/hooks/use-cell-diff-highlight.d.ts.map +1 -0
- package/dist/cjs/hooks/use-cell-diff-highlight.js +83 -0
- package/dist/cjs/hooks/use-cell-popover.d.ts +55 -0
- package/dist/cjs/hooks/use-cell-popover.d.ts.map +1 -0
- package/dist/cjs/hooks/use-cell-popover.js +99 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts +226 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-cell-renderer.js +361 -0
- package/dist/cjs/hooks/use-column-color-icons.d.ts +43 -0
- package/dist/cjs/hooks/use-column-color-icons.d.ts.map +1 -0
- package/dist/cjs/hooks/use-column-color-icons.js +86 -0
- package/dist/cjs/hooks/use-conditional-formatting.d.ts +35 -0
- package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/hooks/use-conditional-formatting.js +720 -0
- package/dist/cjs/hooks/use-context-menu.d.ts +52 -0
- package/dist/cjs/hooks/use-context-menu.d.ts.map +1 -0
- package/dist/cjs/hooks/use-context-menu.js +83 -0
- package/dist/cjs/hooks/use-context-setter.d.ts +3 -0
- package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -0
- package/dist/cjs/hooks/use-context-setter.js +132 -0
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts +45 -0
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -0
- package/dist/cjs/hooks/use-copy-paste-cut.js +329 -0
- package/dist/cjs/hooks/use-create-address-from-selection.d.ts +15 -0
- package/dist/cjs/hooks/use-create-address-from-selection.d.ts.map +1 -0
- package/dist/cjs/hooks/use-create-address-from-selection.js +75 -0
- package/dist/cjs/hooks/use-create-formula-tokenizer.d.ts +15 -0
- package/dist/cjs/hooks/use-create-formula-tokenizer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-create-formula-tokenizer.js +67 -0
- package/dist/cjs/hooks/use-delayed-value.d.ts +8 -0
- package/dist/cjs/hooks/use-delayed-value.d.ts.map +1 -0
- package/dist/cjs/hooks/use-delayed-value.js +34 -0
- package/dist/cjs/hooks/use-editable.d.ts +366 -0
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -0
- package/dist/cjs/hooks/use-editable.js +823 -0
- package/dist/cjs/hooks/use-editor-cancel.d.ts +25 -0
- package/dist/cjs/hooks/use-editor-cancel.d.ts.map +1 -0
- package/dist/cjs/hooks/use-editor-cancel.js +51 -0
- package/dist/cjs/hooks/use-editor-change.d.ts +13 -0
- package/dist/cjs/hooks/use-editor-change.d.ts.map +1 -0
- package/dist/cjs/hooks/use-editor-change.js +72 -0
- package/dist/cjs/hooks/use-editor-keydown.d.ts +11 -0
- package/dist/cjs/hooks/use-editor-keydown.d.ts.map +1 -0
- package/dist/cjs/hooks/use-editor-keydown.js +47 -0
- package/dist/cjs/hooks/use-editor-submit.d.ts +58 -0
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -0
- package/dist/cjs/hooks/use-editor-submit.js +97 -0
- package/dist/cjs/hooks/use-embeds-charts.d.ts +193 -0
- package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -0
- package/dist/cjs/hooks/use-embeds-charts.js +284 -0
- package/dist/cjs/hooks/use-expand-cell.d.ts +35 -0
- package/dist/cjs/hooks/use-expand-cell.d.ts.map +1 -0
- package/dist/cjs/hooks/use-expand-cell.js +53 -0
- package/dist/cjs/hooks/use-export-range.d.ts +36 -0
- package/dist/cjs/hooks/use-export-range.d.ts.map +1 -0
- package/dist/cjs/hooks/use-export-range.js +259 -0
- package/dist/cjs/hooks/use-filter.d.ts +46 -0
- package/dist/cjs/hooks/use-filter.d.ts.map +1 -0
- package/dist/cjs/hooks/use-filter.js +181 -0
- package/dist/cjs/hooks/use-flash.d.ts +18 -0
- package/dist/cjs/hooks/use-flash.d.ts.map +1 -0
- package/dist/cjs/hooks/use-flash.js +77 -0
- package/dist/cjs/hooks/use-fonts.d.ts +8 -0
- package/dist/cjs/hooks/use-fonts.d.ts.map +1 -0
- package/dist/cjs/hooks/use-fonts.js +24 -0
- package/dist/cjs/hooks/use-formula-range-helpers.d.ts +21 -0
- package/dist/cjs/hooks/use-formula-range-helpers.d.ts.map +1 -0
- package/dist/cjs/hooks/use-formula-range-helpers.js +67 -0
- package/dist/cjs/hooks/use-get-tooltip.d.ts +52 -0
- package/dist/cjs/hooks/use-get-tooltip.d.ts.map +1 -0
- package/dist/cjs/hooks/use-get-tooltip.js +64 -0
- package/dist/cjs/hooks/use-get-values-from-range.d.ts +44 -0
- package/dist/cjs/hooks/use-get-values-from-range.d.ts.map +1 -0
- package/dist/cjs/hooks/use-get-values-from-range.js +194 -0
- package/dist/cjs/hooks/use-grid-children.d.ts +31 -0
- package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -0
- package/dist/cjs/hooks/use-grid-children.js +139 -0
- package/dist/cjs/hooks/use-header-actions.d.ts +70 -0
- package/dist/cjs/hooks/use-header-actions.d.ts.map +1 -0
- package/dist/cjs/hooks/use-header-actions.js +256 -0
- package/dist/cjs/hooks/use-hidden-dimension-markers.d.ts +20 -0
- package/dist/cjs/hooks/use-hidden-dimension-markers.d.ts.map +1 -0
- package/dist/cjs/hooks/use-hidden-dimension-markers.js +138 -0
- package/dist/cjs/hooks/use-hidden-dimensions.d.ts +7 -0
- package/dist/cjs/hooks/use-hidden-dimensions.d.ts.map +1 -0
- package/dist/cjs/hooks/use-hidden-dimensions.js +60 -0
- package/dist/cjs/hooks/use-hovered-selection-ids.d.ts +9 -0
- package/dist/cjs/hooks/use-hovered-selection-ids.d.ts.map +1 -0
- package/dist/cjs/hooks/use-hovered-selection-ids.js +30 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +6 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.js +11 -0
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +57 -0
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -0
- package/dist/cjs/hooks/use-keyboard-handler.js +472 -0
- package/dist/cjs/hooks/use-licensekey-validator.d.ts +16 -0
- package/dist/cjs/hooks/use-licensekey-validator.d.ts.map +1 -0
- package/dist/cjs/hooks/use-licensekey-validator.js +180 -0
- package/dist/cjs/hooks/use-memo-compare.d.ts +2 -0
- package/dist/cjs/hooks/use-memo-compare.d.ts.map +1 -0
- package/dist/cjs/hooks/use-memo-compare.js +18 -0
- package/dist/cjs/hooks/use-merge.refs.d.ts +4 -0
- package/dist/cjs/hooks/use-merge.refs.d.ts.map +1 -0
- package/dist/cjs/hooks/use-merge.refs.js +29 -0
- package/dist/cjs/hooks/use-move-columns-rows.d.ts +46 -0
- package/dist/cjs/hooks/use-move-columns-rows.d.ts.map +1 -0
- package/dist/cjs/hooks/use-move-columns-rows.js +344 -0
- package/dist/cjs/hooks/use-navigate-sheet-range.d.ts +16 -0
- package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -0
- package/dist/cjs/hooks/use-navigate-sheet-range.js +36 -0
- package/dist/cjs/hooks/use-previous.d.ts +3 -0
- package/dist/cjs/hooks/use-previous.d.ts.map +1 -0
- package/dist/cjs/hooks/use-previous.js +12 -0
- package/dist/cjs/hooks/use-raf.d.ts +6 -0
- package/dist/cjs/hooks/use-raf.d.ts.map +1 -0
- package/dist/cjs/hooks/use-raf.js +35 -0
- package/dist/cjs/hooks/use-resize-observer.d.ts +6 -0
- package/dist/cjs/hooks/use-resize-observer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-resize-observer.js +46 -0
- package/dist/cjs/hooks/use-scale-listener.d.ts +11 -0
- package/dist/cjs/hooks/use-scale-listener.d.ts.map +1 -0
- package/dist/cjs/hooks/use-scale-listener.js +52 -0
- package/dist/cjs/hooks/use-selected-rows-columns.d.ts +21 -0
- package/dist/cjs/hooks/use-selected-rows-columns.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selected-rows-columns.js +74 -0
- package/dist/cjs/hooks/use-selection-aware-formatting.d.ts +13 -0
- package/dist/cjs/hooks/use-selection-aware-formatting.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-aware-formatting.js +49 -0
- package/dist/cjs/hooks/use-selection-change.d.ts +10 -0
- package/dist/cjs/hooks/use-selection-change.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-change.js +63 -0
- package/dist/cjs/hooks/use-selection-interceptors.d.ts +34 -0
- package/dist/cjs/hooks/use-selection-interceptors.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-interceptors.js +131 -0
- package/dist/cjs/hooks/use-selection-move.d.ts +31 -0
- package/dist/cjs/hooks/use-selection-move.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-move.js +155 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts +46 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-renderer.js +145 -0
- package/dist/cjs/hooks/use-selection-resize.d.ts +30 -0
- package/dist/cjs/hooks/use-selection-resize.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-resize.js +180 -0
- package/dist/cjs/hooks/use-selection.d.ts +185 -0
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection.js +1515 -0
- package/dist/cjs/hooks/use-sheet-change-handler.d.ts +3 -0
- package/dist/cjs/hooks/use-sheet-change-handler.d.ts.map +1 -0
- package/dist/cjs/hooks/use-sheet-change-handler.js +38 -0
- package/dist/cjs/hooks/use-sizer.d.ts +164 -0
- package/dist/cjs/hooks/use-sizer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-sizer.js +424 -0
- package/dist/cjs/hooks/use-spreadsheet-theme.d.ts +17 -0
- package/dist/cjs/hooks/use-spreadsheet-theme.d.ts.map +1 -0
- package/dist/cjs/hooks/use-spreadsheet-theme.js +55 -0
- package/dist/cjs/hooks/use-stable-ref.d.ts +2 -0
- package/dist/cjs/hooks/use-stable-ref.d.ts.map +1 -0
- package/dist/cjs/hooks/use-stable-ref.js +14 -0
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts +23 -0
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -0
- package/dist/cjs/hooks/use-structured-reference-selection.js +103 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts +23 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -0
- package/dist/cjs/hooks/use-table-resizer.js +112 -0
- package/dist/cjs/hooks/use-text-dimensions.d.ts +16 -0
- package/dist/cjs/hooks/use-text-dimensions.d.ts.map +1 -0
- package/dist/cjs/hooks/use-text-dimensions.js +40 -0
- package/dist/cjs/hooks/use-tooltip.d.ts +70 -0
- package/dist/cjs/hooks/use-tooltip.d.ts.map +1 -0
- package/dist/cjs/hooks/use-tooltip.js +79 -0
- package/dist/cjs/hooks/use-touch.d.ts +16 -0
- package/dist/cjs/hooks/use-touch.d.ts.map +1 -0
- package/dist/cjs/hooks/use-touch.js +237 -0
- package/dist/cjs/index.d.ts +69 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +81 -0
- package/dist/cjs/providers/spreadsheet-provider.d.ts +25 -0
- package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -0
- package/dist/cjs/providers/spreadsheet-provider.js +40 -0
- package/dist/cjs/release-date.d.ts +2 -0
- package/dist/cjs/release-date.d.ts.map +1 -0
- package/dist/cjs/release-date.js +7 -0
- package/dist/cjs/signals/scroll-subscriber.d.ts +4 -0
- package/dist/cjs/signals/scroll-subscriber.d.ts.map +1 -0
- package/dist/cjs/signals/scroll-subscriber.js +5 -0
- package/dist/cjs/test-setup.d.ts +2 -0
- package/dist/cjs/test-setup.d.ts.map +1 -0
- package/dist/cjs/test-setup.js +17 -0
- package/dist/cjs/themes.d.ts +13 -0
- package/dist/cjs/themes.d.ts.map +1 -0
- package/dist/cjs/themes.js +251 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +1215 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +12 -0
- package/dist/cjs/utils/maybe.d.ts +12 -0
- package/dist/cjs/utils/maybe.d.ts.map +1 -0
- package/dist/cjs/utils/maybe.js +19 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +24 -0
- package/dist/esm/api/animate.d.ts +36 -0
- package/dist/esm/api/animate.d.ts.map +1 -0
- package/dist/esm/api/animate.js +117 -0
- package/dist/esm/api/banded-ranges.d.ts +16 -0
- package/dist/esm/api/banded-ranges.d.ts.map +1 -0
- package/dist/esm/api/banded-ranges.js +118 -0
- package/dist/esm/api/cf-engine.d.ts +36 -0
- package/dist/esm/api/cf-engine.d.ts.map +1 -0
- package/dist/esm/api/cf-engine.js +54 -0
- package/dist/esm/api/cf-overlays.d.ts +7 -0
- package/dist/esm/api/cf-overlays.d.ts.map +1 -0
- package/dist/esm/api/cf-overlays.js +118 -0
- package/dist/esm/api/cf-window.d.ts +45 -0
- package/dist/esm/api/cf-window.d.ts.map +1 -0
- package/dist/esm/api/cf-window.js +109 -0
- package/dist/esm/api/colors.d.ts +8 -0
- package/dist/esm/api/colors.d.ts.map +1 -0
- package/dist/esm/api/colors.js +27 -0
- package/dist/esm/api/copy-paste.d.ts +10 -0
- package/dist/esm/api/copy-paste.d.ts.map +1 -0
- package/dist/esm/api/copy-paste.js +23 -0
- package/dist/esm/api/fill-patterns.d.ts +5 -0
- package/dist/esm/api/fill-patterns.d.ts.map +1 -0
- package/dist/esm/api/fill-patterns.js +196 -0
- package/dist/esm/api/font-loader.d.ts +8 -0
- package/dist/esm/api/font-loader.d.ts.map +1 -0
- package/dist/esm/api/font-loader.js +67 -0
- package/dist/esm/api/heatmap.d.ts +4 -0
- package/dist/esm/api/heatmap.d.ts.map +1 -0
- package/dist/esm/api/heatmap.js +167 -0
- package/dist/esm/api/scheduler.d.ts +8 -0
- package/dist/esm/api/scheduler.d.ts.map +1 -0
- package/dist/esm/api/scheduler.js +6 -0
- package/dist/esm/api/scroller.d.ts +134 -0
- package/dist/esm/api/scroller.d.ts.map +1 -0
- package/dist/esm/api/scroller.js +704 -0
- package/dist/esm/api/selections.d.ts +111 -0
- package/dist/esm/api/selections.d.ts.map +1 -0
- package/dist/esm/api/selections.js +365 -0
- package/dist/esm/api/spreadsheet-api.d.ts +271 -0
- package/dist/esm/api/spreadsheet-api.d.ts.map +1 -0
- package/dist/esm/api/spreadsheet-api.js +649 -0
- package/dist/esm/api/table.d.ts +11 -0
- package/dist/esm/api/table.d.ts.map +1 -0
- package/dist/esm/api/table.js +11 -0
- package/dist/esm/api/validation.d.ts +98 -0
- package/dist/esm/api/validation.d.ts.map +1 -0
- package/dist/esm/api/validation.js +470 -0
- package/dist/esm/atoms/active-editor.atom.d.ts +8 -0
- package/dist/esm/atoms/active-editor.atom.d.ts.map +1 -0
- package/dist/esm/atoms/active-editor.atom.js +6 -0
- package/dist/esm/atoms/cell-input-context.atom.d.ts +15 -0
- package/dist/esm/atoms/cell-input-context.atom.d.ts.map +1 -0
- package/dist/esm/atoms/cell-input-context.atom.js +20 -0
- package/dist/esm/atoms/editing-cell.atom.d.ts +7 -0
- package/dist/esm/atoms/editing-cell.atom.d.ts.map +1 -0
- package/dist/esm/atoms/editing-cell.atom.js +4 -0
- package/dist/esm/atoms/formula-bar-editor-value.atom.d.ts +19 -0
- package/dist/esm/atoms/formula-bar-editor-value.atom.d.ts.map +1 -0
- package/dist/esm/atoms/formula-bar-editor-value.atom.js +17 -0
- package/dist/esm/atoms/formula-mode.atom.d.ts +7 -0
- package/dist/esm/atoms/formula-mode.atom.d.ts.map +1 -0
- package/dist/esm/atoms/formula-mode.atom.js +5 -0
- package/dist/esm/atoms/formula-selection-state.atom.d.ts +16 -0
- package/dist/esm/atoms/formula-selection-state.atom.d.ts.map +1 -0
- package/dist/esm/atoms/formula-selection-state.atom.js +14 -0
- package/dist/esm/atoms/formula-selections.atom.d.ts +8 -0
- package/dist/esm/atoms/formula-selections.atom.d.ts.map +1 -0
- package/dist/esm/atoms/formula-selections.atom.js +4 -0
- package/dist/esm/atoms/index.d.ts +18 -0
- package/dist/esm/atoms/index.d.ts.map +1 -0
- package/dist/esm/atoms/index.js +17 -0
- package/dist/esm/atoms/loading-indicator.atom.d.ts +12 -0
- package/dist/esm/atoms/loading-indicator.atom.d.ts.map +1 -0
- package/dist/esm/atoms/loading-indicator.atom.js +17 -0
- package/dist/esm/atoms/magic-fill-state.atom.d.ts +5 -0
- package/dist/esm/atoms/magic-fill-state.atom.d.ts.map +1 -0
- package/dist/esm/atoms/magic-fill-state.atom.js +6 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts +6 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts.map +1 -0
- package/dist/esm/atoms/paste-menu.atom.js +4 -0
- package/dist/esm/atoms/persistent-tooltip.atom.d.ts +11 -0
- package/dist/esm/atoms/persistent-tooltip.atom.d.ts.map +1 -0
- package/dist/esm/atoms/persistent-tooltip.atom.js +13 -0
- package/dist/esm/atoms/popover.atom.d.ts +7 -0
- package/dist/esm/atoms/popover.atom.d.ts.map +1 -0
- package/dist/esm/atoms/popover.atom.js +4 -0
- package/dist/esm/atoms/range-selector.atom.d.ts +6 -0
- package/dist/esm/atoms/range-selector.atom.d.ts.map +1 -0
- package/dist/esm/atoms/range-selector.atom.js +7 -0
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts +6 -0
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -0
- package/dist/esm/atoms/selected-chart-embed.atom.js +4 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts +66 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -0
- package/dist/esm/atoms/sheet-context.atom.js +73 -0
- package/dist/esm/atoms/sheet-status-display.atom.d.ts +15 -0
- package/dist/esm/atoms/sheet-status-display.atom.d.ts.map +1 -0
- package/dist/esm/atoms/sheet-status-display.atom.js +11 -0
- package/dist/esm/atoms/show-formula-help.atom.d.ts +8 -0
- package/dist/esm/atoms/show-formula-help.atom.d.ts.map +1 -0
- package/dist/esm/atoms/show-formula-help.atom.js +13 -0
- package/dist/esm/atoms/sort-dialog.atom.d.ts +22 -0
- package/dist/esm/atoms/sort-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/sort-dialog.atom.js +9 -0
- package/dist/esm/atoms/spreadsheet-api.atom.d.ts +5 -0
- package/dist/esm/atoms/spreadsheet-api.atom.d.ts.map +1 -0
- package/dist/esm/atoms/spreadsheet-api.atom.js +4 -0
- package/dist/esm/atoms/validation-alert.atom.d.ts +27 -0
- package/dist/esm/atoms/validation-alert.atom.d.ts.map +1 -0
- package/dist/esm/atoms/validation-alert.atom.js +15 -0
- package/dist/esm/components/bottom-bar/index.d.ts +7 -0
- package/dist/esm/components/bottom-bar/index.d.ts.map +1 -0
- package/dist/esm/components/bottom-bar/index.js +5 -0
- package/dist/esm/components/canvas-grid/helpers.d.ts +15 -0
- package/dist/esm/components/canvas-grid/helpers.d.ts.map +1 -0
- package/dist/esm/components/canvas-grid/helpers.js +36 -0
- package/dist/esm/components/canvas-grid/index.d.ts +7 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -0
- package/dist/esm/components/canvas-grid/index.js +3260 -0
- package/dist/esm/components/canvas-grid/typings.d.ts +2027 -0
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -0
- package/dist/esm/components/canvas-grid/typings.js +8 -0
- package/dist/esm/components/cell/alignment.d.ts +70 -0
- package/dist/esm/components/cell/alignment.d.ts.map +1 -0
- package/dist/esm/components/cell/alignment.js +127 -0
- package/dist/esm/components/cell/cell-background.d.ts +15 -0
- package/dist/esm/components/cell/cell-background.d.ts.map +1 -0
- package/dist/esm/components/cell/cell-background.js +142 -0
- package/dist/esm/components/cell/cell-text-runs.d.ts +98 -0
- package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -0
- package/dist/esm/components/cell/cell-text-runs.js +379 -0
- package/dist/esm/components/cell/helpers.d.ts +3 -0
- package/dist/esm/components/cell/helpers.d.ts.map +1 -0
- package/dist/esm/components/cell/helpers.js +11 -0
- package/dist/esm/components/cell/index.d.ts +4 -0
- package/dist/esm/components/cell/index.d.ts.map +1 -0
- package/dist/esm/components/cell/index.js +257 -0
- package/dist/esm/components/cell/rich-text.d.ts +82 -0
- package/dist/esm/components/cell/rich-text.d.ts.map +1 -0
- package/dist/esm/components/cell/rich-text.js +167 -0
- package/dist/esm/components/cell/typings.d.ts +190 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -0
- package/dist/esm/components/cell/typings.js +1 -0
- package/dist/esm/components/cell-arrow/index.d.ts +14 -0
- package/dist/esm/components/cell-arrow/index.d.ts.map +1 -0
- package/dist/esm/components/cell-arrow/index.js +22 -0
- package/dist/esm/components/cell-calculated/index.d.ts +17 -0
- package/dist/esm/components/cell-calculated/index.d.ts.map +1 -0
- package/dist/esm/components/cell-calculated/index.js +14 -0
- package/dist/esm/components/cell-checkbox/index.d.ts +14 -0
- package/dist/esm/components/cell-checkbox/index.d.ts.map +1 -0
- package/dist/esm/components/cell-checkbox/index.js +23 -0
- package/dist/esm/components/cell-diff/index.d.ts +42 -0
- package/dist/esm/components/cell-diff/index.d.ts.map +1 -0
- package/dist/esm/components/cell-diff/index.js +90 -0
- package/dist/esm/components/cell-editor/calendar-popup.d.ts +9 -0
- package/dist/esm/components/cell-editor/calendar-popup.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/calendar-popup.js +19 -0
- package/dist/esm/components/cell-editor/formula-result-preview.d.ts +9 -0
- package/dist/esm/components/cell-editor/formula-result-preview.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/formula-result-preview.js +20 -0
- package/dist/esm/components/cell-editor/helpers.d.ts +11 -0
- package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/helpers.js +34 -0
- package/dist/esm/components/cell-editor/helpers.spec.d.ts +2 -0
- package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/helpers.spec.js +16 -0
- package/dist/esm/components/cell-editor/index.d.ts +146 -0
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/index.js +266 -0
- package/dist/esm/components/cell-editor/style.d.ts +9 -0
- package/dist/esm/components/cell-editor/style.d.ts.map +1 -0
- package/dist/esm/components/cell-editor/style.js +11 -0
- package/dist/esm/components/cell-error/index.d.ts +14 -0
- package/dist/esm/components/cell-error/index.d.ts.map +1 -0
- package/dist/esm/components/cell-error/index.js +18 -0
- package/dist/esm/components/cell-expand/index.d.ts +15 -0
- package/dist/esm/components/cell-expand/index.d.ts.map +1 -0
- package/dist/esm/components/cell-expand/index.js +25 -0
- package/dist/esm/components/cell-filter/index.d.ts +21 -0
- package/dist/esm/components/cell-filter/index.d.ts.map +1 -0
- package/dist/esm/components/cell-filter/index.js +34 -0
- package/dist/esm/components/cell-group/index.d.ts +17 -0
- package/dist/esm/components/cell-group/index.d.ts.map +1 -0
- package/dist/esm/components/cell-group/index.js +26 -0
- package/dist/esm/components/cell-input/cell-input.d.ts +123 -0
- package/dist/esm/components/cell-input/cell-input.d.ts.map +1 -0
- package/dist/esm/components/cell-input/cell-input.js +63 -0
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts +21 -0
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -0
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +57 -0
- package/dist/esm/components/cell-input/index.d.ts +3 -0
- package/dist/esm/components/cell-input/index.d.ts.map +1 -0
- package/dist/esm/components/cell-input/index.js +2 -0
- package/dist/esm/components/cell-input/style.d.ts +6 -0
- package/dist/esm/components/cell-input/style.d.ts.map +1 -0
- package/dist/esm/components/cell-input/style.js +6 -0
- package/dist/esm/components/cell-overlay/index.d.ts +25 -0
- package/dist/esm/components/cell-overlay/index.d.ts.map +1 -0
- package/dist/esm/components/cell-overlay/index.js +155 -0
- package/dist/esm/components/cell-structured/index.d.ts +8 -0
- package/dist/esm/components/cell-structured/index.d.ts.map +1 -0
- package/dist/esm/components/cell-structured/index.js +16 -0
- package/dist/esm/components/cell-structured/sparkline-math.d.ts +54 -0
- package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -0
- package/dist/esm/components/cell-structured/sparkline-math.js +80 -0
- package/dist/esm/components/cell-structured/sparkline.d.ts +6 -0
- package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -0
- package/dist/esm/components/cell-structured/sparkline.js +246 -0
- package/dist/esm/components/cell-structured/types.d.ts +23 -0
- package/dist/esm/components/cell-structured/types.d.ts.map +1 -0
- package/dist/esm/components/cell-structured/types.js +1 -0
- package/dist/esm/components/cell-tooltip/index.d.ts +28 -0
- package/dist/esm/components/cell-tooltip/index.d.ts.map +1 -0
- package/dist/esm/components/cell-tooltip/index.js +50 -0
- package/dist/esm/components/cell-tooltip/note-editor.d.ts +12 -0
- package/dist/esm/components/cell-tooltip/note-editor.d.ts.map +1 -0
- package/dist/esm/components/cell-tooltip/note-editor.js +19 -0
- package/dist/esm/components/cell-tooltip/style.d.ts +3 -0
- package/dist/esm/components/cell-tooltip/style.d.ts.map +1 -0
- package/dist/esm/components/cell-tooltip/style.js +4 -0
- package/dist/esm/components/context-menu/index.d.ts +80 -0
- package/dist/esm/components/context-menu/index.d.ts.map +1 -0
- package/dist/esm/components/context-menu/index.js +591 -0
- package/dist/esm/components/context-menu/menu.d.ts +10 -0
- package/dist/esm/components/context-menu/menu.d.ts.map +1 -0
- package/dist/esm/components/context-menu/menu.js +9 -0
- package/dist/esm/components/context-menu/style.d.ts +6 -0
- package/dist/esm/components/context-menu/style.d.ts.map +1 -0
- package/dist/esm/components/context-menu/style.js +7 -0
- package/dist/esm/components/embeds/chart-component.d.ts +16 -0
- package/dist/esm/components/embeds/chart-component.d.ts.map +1 -0
- package/dist/esm/components/embeds/chart-component.js +7 -0
- package/dist/esm/components/embeds/embed-component.d.ts +17 -0
- package/dist/esm/components/embeds/embed-component.d.ts.map +1 -0
- package/dist/esm/components/embeds/embed-component.js +124 -0
- package/dist/esm/components/embeds/embed-draggable.d.ts +43 -0
- package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -0
- package/dist/esm/components/embeds/embed-draggable.js +115 -0
- package/dist/esm/components/embeds/index.d.ts +5 -0
- package/dist/esm/components/embeds/index.d.ts.map +1 -0
- package/dist/esm/components/embeds/index.js +4 -0
- package/dist/esm/components/embeds/shape-geometry.d.ts +10 -0
- package/dist/esm/components/embeds/shape-geometry.d.ts.map +1 -0
- package/dist/esm/components/embeds/shape-geometry.js +224 -0
- package/dist/esm/components/embeds/shape-svg.d.ts +56 -0
- package/dist/esm/components/embeds/shape-svg.d.ts.map +1 -0
- package/dist/esm/components/embeds/shape-svg.js +149 -0
- package/dist/esm/components/embeds/slicer-component.d.ts +27 -0
- package/dist/esm/components/embeds/slicer-component.d.ts.map +1 -0
- package/dist/esm/components/embeds/slicer-component.js +231 -0
- package/dist/esm/components/fill-handle/index.d.ts +7 -0
- package/dist/esm/components/fill-handle/index.d.ts.map +1 -0
- package/dist/esm/components/fill-handle/index.js +13 -0
- package/dist/esm/components/filter-box/filter-by-color.d.ts +28 -0
- package/dist/esm/components/filter-box/filter-by-color.d.ts.map +1 -0
- package/dist/esm/components/filter-box/filter-by-color.js +88 -0
- package/dist/esm/components/filter-box/filter-by-condition.d.ts +13 -0
- package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -0
- package/dist/esm/components/filter-box/filter-by-condition.js +34 -0
- package/dist/esm/components/filter-box/filter-by-value.d.ts +9 -0
- package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -0
- package/dist/esm/components/filter-box/filter-by-value.js +76 -0
- package/dist/esm/components/filter-box/index.d.ts +50 -0
- package/dist/esm/components/filter-box/index.d.ts.map +1 -0
- package/dist/esm/components/filter-box/index.js +337 -0
- package/dist/esm/components/floating-cell-editor/index.d.ts +83 -0
- package/dist/esm/components/floating-cell-editor/index.d.ts.map +1 -0
- package/dist/esm/components/floating-cell-editor/index.js +168 -0
- package/dist/esm/components/formula-bar/index.d.ts +11 -0
- package/dist/esm/components/formula-bar/index.d.ts.map +1 -0
- package/dist/esm/components/formula-bar/index.js +14 -0
- package/dist/esm/components/formula-bar/style.d.ts +4 -0
- package/dist/esm/components/formula-bar/style.d.ts.map +1 -0
- package/dist/esm/components/formula-bar/style.js +6 -0
- package/dist/esm/components/formula-input/index.d.ts +17 -0
- package/dist/esm/components/formula-input/index.d.ts.map +1 -0
- package/dist/esm/components/formula-input/index.js +85 -0
- package/dist/esm/components/grid-footer/index.d.ts +14 -0
- package/dist/esm/components/grid-footer/index.d.ts.map +1 -0
- package/dist/esm/components/grid-footer/index.js +33 -0
- package/dist/esm/components/header-cell/index.d.ts +10 -0
- package/dist/esm/components/header-cell/index.d.ts.map +1 -0
- package/dist/esm/components/header-cell/index.js +21 -0
- package/dist/esm/components/header-menu/index.d.ts +13 -0
- package/dist/esm/components/header-menu/index.d.ts.map +1 -0
- package/dist/esm/components/header-menu/index.js +13 -0
- package/dist/esm/components/header-move/index.d.ts +23 -0
- package/dist/esm/components/header-move/index.d.ts.map +1 -0
- package/dist/esm/components/header-move/index.js +48 -0
- package/dist/esm/components/header-resizer/index.d.ts +19 -0
- package/dist/esm/components/header-resizer/index.d.ts.map +1 -0
- package/dist/esm/components/header-resizer/index.js +33 -0
- package/dist/esm/components/hidden-markers/index.d.ts +15 -0
- package/dist/esm/components/hidden-markers/index.d.ts.map +1 -0
- package/dist/esm/components/hidden-markers/index.js +39 -0
- package/dist/esm/components/hidden-markers/style.d.ts +5 -0
- package/dist/esm/components/hidden-markers/style.d.ts.map +1 -0
- package/dist/esm/components/hidden-markers/style.js +4 -0
- package/dist/esm/components/insert-function-dialog/index.d.ts +32 -0
- package/dist/esm/components/insert-function-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/insert-function-dialog/index.js +75 -0
- package/dist/esm/components/loading-indicator/index.d.ts +7 -0
- package/dist/esm/components/loading-indicator/index.d.ts.map +1 -0
- package/dist/esm/components/loading-indicator/index.js +8 -0
- package/dist/esm/components/outline-gutter/index.d.ts +44 -0
- package/dist/esm/components/outline-gutter/index.d.ts.map +1 -0
- package/dist/esm/components/outline-gutter/index.js +395 -0
- package/dist/esm/components/pivot-placeholder/index.d.ts +12 -0
- package/dist/esm/components/pivot-placeholder/index.d.ts.map +1 -0
- package/dist/esm/components/pivot-placeholder/index.js +18 -0
- package/dist/esm/components/print-preview/cell-styles.d.ts +18 -0
- package/dist/esm/components/print-preview/cell-styles.d.ts.map +1 -0
- package/dist/esm/components/print-preview/cell-styles.js +174 -0
- package/dist/esm/components/print-preview/index.d.ts +5 -0
- package/dist/esm/components/print-preview/index.d.ts.map +1 -0
- package/dist/esm/components/print-preview/index.js +2 -0
- package/dist/esm/components/print-preview/page-block.d.ts +62 -0
- package/dist/esm/components/print-preview/page-block.d.ts.map +1 -0
- package/dist/esm/components/print-preview/page-block.js +308 -0
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts +49 -0
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -0
- package/dist/esm/components/print-preview/print-preview-dialog.js +322 -0
- package/dist/esm/components/print-preview/run-print.d.ts +11 -0
- package/dist/esm/components/print-preview/run-print.d.ts.map +1 -0
- package/dist/esm/components/print-preview/run-print.js +107 -0
- package/dist/esm/components/print-preview/settings.d.ts +130 -0
- package/dist/esm/components/print-preview/settings.d.ts.map +1 -0
- package/dist/esm/components/print-preview/settings.js +227 -0
- package/dist/esm/components/print-preview/use-page-layout.d.ts +60 -0
- package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -0
- package/dist/esm/components/print-preview/use-page-layout.js +133 -0
- package/dist/esm/components/range-selector/index.d.ts +25 -0
- package/dist/esm/components/range-selector/index.d.ts.map +1 -0
- package/dist/esm/components/range-selector/index.js +236 -0
- package/dist/esm/components/resizer/index.d.ts +9 -0
- package/dist/esm/components/resizer/index.d.ts.map +1 -0
- package/dist/esm/components/resizer/index.js +39 -0
- package/dist/esm/components/selection/avatar.d.ts +14 -0
- package/dist/esm/components/selection/avatar.d.ts.map +1 -0
- package/dist/esm/components/selection/avatar.js +15 -0
- package/dist/esm/components/selection/index.d.ts +9 -0
- package/dist/esm/components/selection/index.d.ts.map +1 -0
- package/dist/esm/components/selection/index.js +192 -0
- package/dist/esm/components/selection/magic-fill.d.ts +26 -0
- package/dist/esm/components/selection/magic-fill.d.ts.map +1 -0
- package/dist/esm/components/selection/magic-fill.js +52 -0
- package/dist/esm/components/selection/paste-menu.d.ts +10 -0
- package/dist/esm/components/selection/paste-menu.d.ts.map +1 -0
- package/dist/esm/components/selection/paste-menu.js +29 -0
- package/dist/esm/components/selection/quick-edit.d.ts +14 -0
- package/dist/esm/components/selection/quick-edit.d.ts.map +1 -0
- package/dist/esm/components/selection/quick-edit.js +41 -0
- package/dist/esm/components/selection/style.d.ts +15 -0
- package/dist/esm/components/selection/style.d.ts.map +1 -0
- package/dist/esm/components/selection/style.js +22 -0
- package/dist/esm/components/selection/suggestion-action.d.ts +22 -0
- package/dist/esm/components/selection/suggestion-action.d.ts.map +1 -0
- package/dist/esm/components/selection/suggestion-action.js +53 -0
- package/dist/esm/components/selection/title.d.ts +45 -0
- package/dist/esm/components/selection/title.d.ts.map +1 -0
- package/dist/esm/components/selection/title.js +95 -0
- package/dist/esm/components/selection/types.d.ts +43 -0
- package/dist/esm/components/selection/types.d.ts.map +1 -0
- package/dist/esm/components/selection/types.js +1 -0
- package/dist/esm/components/selection-input/index.d.ts +19 -0
- package/dist/esm/components/selection-input/index.d.ts.map +1 -0
- package/dist/esm/components/selection-input/index.js +27 -0
- package/dist/esm/components/selection-input/style.d.ts +3 -0
- package/dist/esm/components/selection-input/style.d.ts.map +1 -0
- package/dist/esm/components/selection-input/style.js +4 -0
- package/dist/esm/components/sheet-search/index.d.ts +41 -0
- package/dist/esm/components/sheet-search/index.d.ts.map +1 -0
- package/dist/esm/components/sheet-search/index.js +106 -0
- package/dist/esm/components/sheet-status/index.d.ts +40 -0
- package/dist/esm/components/sheet-status/index.d.ts.map +1 -0
- package/dist/esm/components/sheet-status/index.js +155 -0
- package/dist/esm/components/sheet-status/style.d.ts +4 -0
- package/dist/esm/components/sheet-status/style.d.ts.map +1 -0
- package/dist/esm/components/sheet-status/style.js +7 -0
- package/dist/esm/components/sheet-switcher/index.d.ts +12 -0
- package/dist/esm/components/sheet-switcher/index.d.ts.map +1 -0
- package/dist/esm/components/sheet-switcher/index.js +33 -0
- package/dist/esm/components/sheet-switcher/new-sheet-button.d.ts +4 -0
- package/dist/esm/components/sheet-switcher/new-sheet-button.d.ts.map +1 -0
- package/dist/esm/components/sheet-switcher/new-sheet-button.js +7 -0
- package/dist/esm/components/sheet-tabs/context-menu.d.ts +43 -0
- package/dist/esm/components/sheet-tabs/context-menu.d.ts.map +1 -0
- package/dist/esm/components/sheet-tabs/context-menu.js +50 -0
- package/dist/esm/components/sheet-tabs/index.d.ts +18 -0
- package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -0
- package/dist/esm/components/sheet-tabs/index.js +217 -0
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +21 -0
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -0
- package/dist/esm/components/sheet-tabs/sheet-tab.js +131 -0
- package/dist/esm/components/sheet-tabs/style.d.ts +10 -0
- package/dist/esm/components/sheet-tabs/style.d.ts.map +1 -0
- package/dist/esm/components/sheet-tabs/style.js +16 -0
- package/dist/esm/components/sheet-tabs/types.d.ts +45 -0
- package/dist/esm/components/sheet-tabs/types.d.ts.map +1 -0
- package/dist/esm/components/sheet-tabs/types.js +1 -0
- package/dist/esm/components/sort-range-dialog/index.d.ts +66 -0
- package/dist/esm/components/sort-range-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/sort-range-dialog/index.js +215 -0
- package/dist/esm/components/toolbar/background-color-selector.d.ts +19 -0
- package/dist/esm/components/toolbar/background-color-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/background-color-selector.js +28 -0
- package/dist/esm/components/toolbar/border-color-selector.d.ts +18 -0
- package/dist/esm/components/toolbar/border-color-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/border-color-selector.js +25 -0
- package/dist/esm/components/toolbar/border-line-style-options.d.ts +9 -0
- package/dist/esm/components/toolbar/border-line-style-options.d.ts.map +1 -0
- package/dist/esm/components/toolbar/border-line-style-options.js +42 -0
- package/dist/esm/components/toolbar/border-line-style-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/border-line-style-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/border-line-style-selector.js +19 -0
- package/dist/esm/components/toolbar/border-location-options.d.ts +11 -0
- package/dist/esm/components/toolbar/border-location-options.d.ts.map +1 -0
- package/dist/esm/components/toolbar/border-location-options.js +64 -0
- package/dist/esm/components/toolbar/border-selector.d.ts +20 -0
- package/dist/esm/components/toolbar/border-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/border-selector.js +59 -0
- package/dist/esm/components/toolbar/buttons.d.ts +55 -0
- package/dist/esm/components/toolbar/buttons.d.ts.map +1 -0
- package/dist/esm/components/toolbar/buttons.js +165 -0
- package/dist/esm/components/toolbar/cell-style-selector.d.ts +25 -0
- package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/cell-style-selector.js +521 -0
- package/dist/esm/components/toolbar/color-selector.d.ts +13 -0
- package/dist/esm/components/toolbar/color-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/color-selector.js +52 -0
- package/dist/esm/components/toolbar/font-family-selector.d.ts +22 -0
- package/dist/esm/components/toolbar/font-family-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/font-family-selector.js +167 -0
- package/dist/esm/components/toolbar/font-size-selector.d.ts +10 -0
- package/dist/esm/components/toolbar/font-size-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/font-size-selector.js +139 -0
- package/dist/esm/components/toolbar/index.d.ts +25 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -0
- package/dist/esm/components/toolbar/index.js +24 -0
- package/dist/esm/components/toolbar/insert-menu.d.ts +22 -0
- package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -0
- package/dist/esm/components/toolbar/insert-menu.js +143 -0
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts +15 -0
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/merge-cells-selector.js +48 -0
- package/dist/esm/components/toolbar/scale-selector.d.ts +13 -0
- package/dist/esm/components/toolbar/scale-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/scale-selector.js +72 -0
- package/dist/esm/components/toolbar/style.d.ts +3 -0
- package/dist/esm/components/toolbar/style.d.ts.map +1 -0
- package/dist/esm/components/toolbar/style.js +5 -0
- package/dist/esm/components/toolbar/table-actions.d.ts +15 -0
- package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -0
- package/dist/esm/components/toolbar/table-actions.js +37 -0
- package/dist/esm/components/toolbar/table-style-selector.d.ts +25 -0
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/table-style-selector.js +501 -0
- package/dist/esm/components/toolbar/text-color-selector.d.ts +20 -0
- package/dist/esm/components/toolbar/text-color-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-color-selector.js +28 -0
- package/dist/esm/components/toolbar/text-format-selector.d.ts +23 -0
- package/dist/esm/components/toolbar/text-format-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-format-selector.js +257 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts +10 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.js +36 -0
- package/dist/esm/components/toolbar/text-vertical-align-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/text-vertical-align-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-vertical-align-selector.js +36 -0
- package/dist/esm/components/toolbar/text-wrap-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/text-wrap-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-wrap-selector.js +35 -0
- package/dist/esm/components/toolbar/theme-selector.d.ts +10 -0
- package/dist/esm/components/toolbar/theme-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/theme-selector.js +27 -0
- package/dist/esm/components/toolbar/toolbar.d.ts +12 -0
- package/dist/esm/components/toolbar/toolbar.d.ts.map +1 -0
- package/dist/esm/components/toolbar/toolbar.js +133 -0
- package/dist/esm/components/toolbar/types.d.ts +2 -0
- package/dist/esm/components/toolbar/types.d.ts.map +1 -0
- package/dist/esm/components/toolbar/types.js +1 -0
- package/dist/esm/components/toolbar/view-menu.d.ts +25 -0
- package/dist/esm/components/toolbar/view-menu.d.ts.map +1 -0
- package/dist/esm/components/toolbar/view-menu.js +41 -0
- package/dist/esm/components/validation-alert-dialog/index.d.ts +15 -0
- package/dist/esm/components/validation-alert-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/validation-alert-dialog/index.js +63 -0
- package/dist/esm/config.d.ts +107 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +266 -0
- package/dist/esm/helpers/merged-cell-borders.d.ts +26 -0
- package/dist/esm/helpers/merged-cell-borders.d.ts.map +1 -0
- package/dist/esm/helpers/merged-cell-borders.js +42 -0
- package/dist/esm/helpers.d.ts +118 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +455 -0
- package/dist/esm/hooks/index.d.ts +11 -0
- package/dist/esm/hooks/index.d.ts.map +1 -0
- package/dist/esm/hooks/index.js +10 -0
- package/dist/esm/hooks/show-zeros.d.ts +13 -0
- package/dist/esm/hooks/show-zeros.d.ts.map +1 -0
- package/dist/esm/hooks/show-zeros.js +19 -0
- package/dist/esm/hooks/use-async.d.ts +2 -0
- package/dist/esm/hooks/use-async.d.ts.map +1 -0
- package/dist/esm/hooks/use-async.js +22 -0
- package/dist/esm/hooks/use-border-styles.d.ts +31 -0
- package/dist/esm/hooks/use-border-styles.d.ts.map +1 -0
- package/dist/esm/hooks/use-border-styles.js +423 -0
- package/dist/esm/hooks/use-callback-ref.d.ts +6 -0
- package/dist/esm/hooks/use-callback-ref.d.ts.map +1 -0
- package/dist/esm/hooks/use-callback-ref.js +15 -0
- package/dist/esm/hooks/use-cell-diff-highlight.d.ts +43 -0
- package/dist/esm/hooks/use-cell-diff-highlight.d.ts.map +1 -0
- package/dist/esm/hooks/use-cell-diff-highlight.js +84 -0
- package/dist/esm/hooks/use-cell-popover.d.ts +55 -0
- package/dist/esm/hooks/use-cell-popover.d.ts.map +1 -0
- package/dist/esm/hooks/use-cell-popover.js +91 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts +226 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -0
- package/dist/esm/hooks/use-cell-renderer.js +372 -0
- package/dist/esm/hooks/use-column-color-icons.d.ts +43 -0
- package/dist/esm/hooks/use-column-color-icons.d.ts.map +1 -0
- package/dist/esm/hooks/use-column-color-icons.js +83 -0
- package/dist/esm/hooks/use-conditional-formatting.d.ts +35 -0
- package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -0
- package/dist/esm/hooks/use-conditional-formatting.js +497 -0
- package/dist/esm/hooks/use-context-menu.d.ts +52 -0
- package/dist/esm/hooks/use-context-menu.d.ts.map +1 -0
- package/dist/esm/hooks/use-context-menu.js +75 -0
- package/dist/esm/hooks/use-context-setter.d.ts +3 -0
- package/dist/esm/hooks/use-context-setter.d.ts.map +1 -0
- package/dist/esm/hooks/use-context-setter.js +128 -0
- package/dist/esm/hooks/use-copy-paste-cut.d.ts +45 -0
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -0
- package/dist/esm/hooks/use-copy-paste-cut.js +253 -0
- package/dist/esm/hooks/use-create-address-from-selection.d.ts +15 -0
- package/dist/esm/hooks/use-create-address-from-selection.d.ts.map +1 -0
- package/dist/esm/hooks/use-create-address-from-selection.js +69 -0
- package/dist/esm/hooks/use-create-formula-tokenizer.d.ts +15 -0
- package/dist/esm/hooks/use-create-formula-tokenizer.d.ts.map +1 -0
- package/dist/esm/hooks/use-create-formula-tokenizer.js +48 -0
- package/dist/esm/hooks/use-delayed-value.d.ts +8 -0
- package/dist/esm/hooks/use-delayed-value.d.ts.map +1 -0
- package/dist/esm/hooks/use-delayed-value.js +30 -0
- package/dist/esm/hooks/use-editable.d.ts +366 -0
- package/dist/esm/hooks/use-editable.d.ts.map +1 -0
- package/dist/esm/hooks/use-editable.js +803 -0
- package/dist/esm/hooks/use-editor-cancel.d.ts +25 -0
- package/dist/esm/hooks/use-editor-cancel.d.ts.map +1 -0
- package/dist/esm/hooks/use-editor-cancel.js +45 -0
- package/dist/esm/hooks/use-editor-change.d.ts +13 -0
- package/dist/esm/hooks/use-editor-change.d.ts.map +1 -0
- package/dist/esm/hooks/use-editor-change.js +67 -0
- package/dist/esm/hooks/use-editor-keydown.d.ts +11 -0
- package/dist/esm/hooks/use-editor-keydown.d.ts.map +1 -0
- package/dist/esm/hooks/use-editor-keydown.js +42 -0
- package/dist/esm/hooks/use-editor-submit.d.ts +58 -0
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -0
- package/dist/esm/hooks/use-editor-submit.js +83 -0
- package/dist/esm/hooks/use-embeds-charts.d.ts +193 -0
- package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -0
- package/dist/esm/hooks/use-embeds-charts.js +276 -0
- package/dist/esm/hooks/use-expand-cell.d.ts +35 -0
- package/dist/esm/hooks/use-expand-cell.d.ts.map +1 -0
- package/dist/esm/hooks/use-expand-cell.js +46 -0
- package/dist/esm/hooks/use-export-range.d.ts +36 -0
- package/dist/esm/hooks/use-export-range.d.ts.map +1 -0
- package/dist/esm/hooks/use-export-range.js +227 -0
- package/dist/esm/hooks/use-filter.d.ts +46 -0
- package/dist/esm/hooks/use-filter.d.ts.map +1 -0
- package/dist/esm/hooks/use-filter.js +184 -0
- package/dist/esm/hooks/use-flash.d.ts +18 -0
- package/dist/esm/hooks/use-flash.d.ts.map +1 -0
- package/dist/esm/hooks/use-flash.js +68 -0
- package/dist/esm/hooks/use-fonts.d.ts +8 -0
- package/dist/esm/hooks/use-fonts.d.ts.map +1 -0
- package/dist/esm/hooks/use-fonts.js +14 -0
- package/dist/esm/hooks/use-formula-range-helpers.d.ts +21 -0
- package/dist/esm/hooks/use-formula-range-helpers.d.ts.map +1 -0
- package/dist/esm/hooks/use-formula-range-helpers.js +60 -0
- package/dist/esm/hooks/use-get-tooltip.d.ts +52 -0
- package/dist/esm/hooks/use-get-tooltip.d.ts.map +1 -0
- package/dist/esm/hooks/use-get-tooltip.js +57 -0
- package/dist/esm/hooks/use-get-values-from-range.d.ts +44 -0
- package/dist/esm/hooks/use-get-values-from-range.d.ts.map +1 -0
- package/dist/esm/hooks/use-get-values-from-range.js +108 -0
- package/dist/esm/hooks/use-grid-children.d.ts +31 -0
- package/dist/esm/hooks/use-grid-children.d.ts.map +1 -0
- package/dist/esm/hooks/use-grid-children.js +129 -0
- package/dist/esm/hooks/use-header-actions.d.ts +70 -0
- package/dist/esm/hooks/use-header-actions.d.ts.map +1 -0
- package/dist/esm/hooks/use-header-actions.js +248 -0
- package/dist/esm/hooks/use-hidden-dimension-markers.d.ts +20 -0
- package/dist/esm/hooks/use-hidden-dimension-markers.d.ts.map +1 -0
- package/dist/esm/hooks/use-hidden-dimension-markers.js +128 -0
- package/dist/esm/hooks/use-hidden-dimensions.d.ts +7 -0
- package/dist/esm/hooks/use-hidden-dimensions.d.ts.map +1 -0
- package/dist/esm/hooks/use-hidden-dimensions.js +56 -0
- package/dist/esm/hooks/use-hovered-selection-ids.d.ts +9 -0
- package/dist/esm/hooks/use-hovered-selection-ids.d.ts.map +1 -0
- package/dist/esm/hooks/use-hovered-selection-ids.js +25 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +6 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.js +8 -0
- package/dist/esm/hooks/use-keyboard-handler.d.ts +57 -0
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -0
- package/dist/esm/hooks/use-keyboard-handler.js +472 -0
- package/dist/esm/hooks/use-licensekey-validator.d.ts +16 -0
- package/dist/esm/hooks/use-licensekey-validator.d.ts.map +1 -0
- package/dist/esm/hooks/use-licensekey-validator.js +140 -0
- package/dist/esm/hooks/use-memo-compare.d.ts +2 -0
- package/dist/esm/hooks/use-memo-compare.d.ts.map +1 -0
- package/dist/esm/hooks/use-memo-compare.js +13 -0
- package/dist/esm/hooks/use-merge.refs.d.ts +4 -0
- package/dist/esm/hooks/use-merge.refs.d.ts.map +1 -0
- package/dist/esm/hooks/use-merge.refs.js +16 -0
- package/dist/esm/hooks/use-move-columns-rows.d.ts +46 -0
- package/dist/esm/hooks/use-move-columns-rows.d.ts.map +1 -0
- package/dist/esm/hooks/use-move-columns-rows.js +333 -0
- package/dist/esm/hooks/use-navigate-sheet-range.d.ts +16 -0
- package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -0
- package/dist/esm/hooks/use-navigate-sheet-range.js +30 -0
- package/dist/esm/hooks/use-previous.d.ts +3 -0
- package/dist/esm/hooks/use-previous.d.ts.map +1 -0
- package/dist/esm/hooks/use-previous.js +9 -0
- package/dist/esm/hooks/use-raf.d.ts +6 -0
- package/dist/esm/hooks/use-raf.d.ts.map +1 -0
- package/dist/esm/hooks/use-raf.js +27 -0
- package/dist/esm/hooks/use-resize-observer.d.ts +6 -0
- package/dist/esm/hooks/use-resize-observer.d.ts.map +1 -0
- package/dist/esm/hooks/use-resize-observer.js +40 -0
- package/dist/esm/hooks/use-scale-listener.d.ts +11 -0
- package/dist/esm/hooks/use-scale-listener.d.ts.map +1 -0
- package/dist/esm/hooks/use-scale-listener.js +47 -0
- package/dist/esm/hooks/use-selected-rows-columns.d.ts +21 -0
- package/dist/esm/hooks/use-selected-rows-columns.d.ts.map +1 -0
- package/dist/esm/hooks/use-selected-rows-columns.js +69 -0
- package/dist/esm/hooks/use-selection-aware-formatting.d.ts +13 -0
- package/dist/esm/hooks/use-selection-aware-formatting.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-aware-formatting.js +39 -0
- package/dist/esm/hooks/use-selection-change.d.ts +10 -0
- package/dist/esm/hooks/use-selection-change.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-change.js +57 -0
- package/dist/esm/hooks/use-selection-interceptors.d.ts +34 -0
- package/dist/esm/hooks/use-selection-interceptors.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-interceptors.js +129 -0
- package/dist/esm/hooks/use-selection-move.d.ts +31 -0
- package/dist/esm/hooks/use-selection-move.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-move.js +136 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts +46 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-renderer.js +139 -0
- package/dist/esm/hooks/use-selection-resize.d.ts +30 -0
- package/dist/esm/hooks/use-selection-resize.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-resize.js +160 -0
- package/dist/esm/hooks/use-selection.d.ts +185 -0
- package/dist/esm/hooks/use-selection.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection.js +1559 -0
- package/dist/esm/hooks/use-sheet-change-handler.d.ts +3 -0
- package/dist/esm/hooks/use-sheet-change-handler.d.ts.map +1 -0
- package/dist/esm/hooks/use-sheet-change-handler.js +33 -0
- package/dist/esm/hooks/use-sizer.d.ts +164 -0
- package/dist/esm/hooks/use-sizer.d.ts.map +1 -0
- package/dist/esm/hooks/use-sizer.js +357 -0
- package/dist/esm/hooks/use-spreadsheet-theme.d.ts +17 -0
- package/dist/esm/hooks/use-spreadsheet-theme.d.ts.map +1 -0
- package/dist/esm/hooks/use-spreadsheet-theme.js +50 -0
- package/dist/esm/hooks/use-stable-ref.d.ts +2 -0
- package/dist/esm/hooks/use-stable-ref.d.ts.map +1 -0
- package/dist/esm/hooks/use-stable-ref.js +10 -0
- package/dist/esm/hooks/use-structured-reference-selection.d.ts +23 -0
- package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -0
- package/dist/esm/hooks/use-structured-reference-selection.js +118 -0
- package/dist/esm/hooks/use-table-resizer.d.ts +23 -0
- package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -0
- package/dist/esm/hooks/use-table-resizer.js +108 -0
- package/dist/esm/hooks/use-text-dimensions.d.ts +16 -0
- package/dist/esm/hooks/use-text-dimensions.d.ts.map +1 -0
- package/dist/esm/hooks/use-text-dimensions.js +35 -0
- package/dist/esm/hooks/use-tooltip.d.ts +70 -0
- package/dist/esm/hooks/use-tooltip.d.ts.map +1 -0
- package/dist/esm/hooks/use-tooltip.js +83 -0
- package/dist/esm/hooks/use-touch.d.ts +16 -0
- package/dist/esm/hooks/use-touch.d.ts.map +1 -0
- package/dist/esm/hooks/use-touch.js +224 -0
- package/dist/esm/index.d.ts +69 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +75 -0
- package/dist/esm/providers/spreadsheet-provider.d.ts +25 -0
- package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -0
- package/dist/esm/providers/spreadsheet-provider.js +27 -0
- package/dist/esm/release-date.d.ts +2 -0
- package/dist/esm/release-date.d.ts.map +1 -0
- package/dist/esm/release-date.js +3 -0
- package/dist/esm/signals/scroll-subscriber.d.ts +4 -0
- package/dist/esm/signals/scroll-subscriber.d.ts.map +1 -0
- package/dist/esm/signals/scroll-subscriber.js +2 -0
- package/dist/esm/test-setup.d.ts +2 -0
- package/dist/esm/test-setup.d.ts.map +1 -0
- package/dist/esm/test-setup.js +15 -0
- package/dist/esm/themes.d.ts +13 -0
- package/dist/esm/themes.d.ts.map +1 -0
- package/dist/esm/themes.js +264 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +1215 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/utils/maybe.d.ts +12 -0
- package/dist/esm/utils/maybe.d.ts.map +1 -0
- package/dist/esm/utils/maybe.js +14 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +22 -0
- package/dist/spreadsheet.min.css +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,3413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CanvasGrid = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var calculator_1 = require("@rowsncolumns/calculator");
|
|
6
|
+
var grid_1 = require("@rowsncolumns/grid");
|
|
7
|
+
var grid_2 = require("@rowsncolumns/grid");
|
|
8
|
+
var grid_3 = require("@rowsncolumns/grid");
|
|
9
|
+
var grid_4 = require("@rowsncolumns/grid");
|
|
10
|
+
var grid_5 = require("@rowsncolumns/grid");
|
|
11
|
+
var spreadsheet_state_1 = require("@rowsncolumns/spreadsheet-state");
|
|
12
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
13
|
+
var utils_1 = require("@rowsncolumns/utils");
|
|
14
|
+
var jotai_1 = require("jotai");
|
|
15
|
+
var merge_1 = tslib_1.__importDefault(require("lodash/merge"));
|
|
16
|
+
var throttle_1 = tslib_1.__importDefault(require("lodash/throttle"));
|
|
17
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
18
|
+
var banded_ranges_1 = require("../../api/banded-ranges");
|
|
19
|
+
var cf_window_1 = require("../../api/cf-window");
|
|
20
|
+
var selections_1 = require("../../api/selections");
|
|
21
|
+
var spreadsheet_api_1 = require("../../api/spreadsheet-api");
|
|
22
|
+
var table_1 = require("../../api/table");
|
|
23
|
+
var validation_1 = require("../../api/validation");
|
|
24
|
+
var atoms_1 = require("../../atoms");
|
|
25
|
+
var active_editor_atom_1 = require("../../atoms/active-editor.atom");
|
|
26
|
+
var editing_cell_atom_1 = require("../../atoms/editing-cell.atom");
|
|
27
|
+
var formula_bar_editor_value_atom_1 = require("../../atoms/formula-bar-editor-value.atom");
|
|
28
|
+
var formula_selection_state_atom_1 = require("../../atoms/formula-selection-state.atom");
|
|
29
|
+
var formula_selections_atom_1 = require("../../atoms/formula-selections.atom");
|
|
30
|
+
var magic_fill_state_atom_1 = require("../../atoms/magic-fill-state.atom");
|
|
31
|
+
var show_formula_help_atom_1 = require("../../atoms/show-formula-help.atom");
|
|
32
|
+
var spreadsheet_api_atom_1 = require("../../atoms/spreadsheet-api.atom");
|
|
33
|
+
var config_1 = require("../../config");
|
|
34
|
+
var helpers_1 = require("../../helpers");
|
|
35
|
+
var use_border_styles_1 = require("../../hooks/use-border-styles");
|
|
36
|
+
var use_callback_ref_1 = require("../../hooks/use-callback-ref");
|
|
37
|
+
var use_cell_popover_1 = require("../../hooks/use-cell-popover");
|
|
38
|
+
var use_cell_renderer_1 = require("../../hooks/use-cell-renderer");
|
|
39
|
+
var use_conditional_formatting_1 = require("../../hooks/use-conditional-formatting");
|
|
40
|
+
var use_context_menu_1 = require("../../hooks/use-context-menu");
|
|
41
|
+
var use_context_setter_1 = require("../../hooks/use-context-setter");
|
|
42
|
+
var use_copy_paste_cut_1 = require("../../hooks/use-copy-paste-cut");
|
|
43
|
+
var use_create_address_from_selection_1 = require("../../hooks/use-create-address-from-selection");
|
|
44
|
+
var use_create_formula_tokenizer_1 = require("../../hooks/use-create-formula-tokenizer");
|
|
45
|
+
var use_editable_1 = require("../../hooks/use-editable");
|
|
46
|
+
var use_editor_cancel_1 = require("../../hooks/use-editor-cancel");
|
|
47
|
+
var use_editor_change_1 = require("../../hooks/use-editor-change");
|
|
48
|
+
var use_editor_keydown_1 = require("../../hooks/use-editor-keydown");
|
|
49
|
+
var use_editor_submit_1 = require("../../hooks/use-editor-submit");
|
|
50
|
+
var use_embeds_charts_1 = require("../../hooks/use-embeds-charts");
|
|
51
|
+
var use_expand_cell_1 = require("../../hooks/use-expand-cell");
|
|
52
|
+
var use_export_range_1 = require("../../hooks/use-export-range");
|
|
53
|
+
var use_filter_1 = require("../../hooks/use-filter");
|
|
54
|
+
var use_flash_1 = require("../../hooks/use-flash");
|
|
55
|
+
var use_get_tooltip_1 = require("../../hooks/use-get-tooltip");
|
|
56
|
+
var use_get_values_from_range_1 = require("../../hooks/use-get-values-from-range");
|
|
57
|
+
var use_grid_children_1 = require("../../hooks/use-grid-children");
|
|
58
|
+
var use_header_actions_1 = require("../../hooks/use-header-actions");
|
|
59
|
+
var use_hidden_dimension_markers_1 = require("../../hooks/use-hidden-dimension-markers");
|
|
60
|
+
var use_hidden_dimensions_1 = require("../../hooks/use-hidden-dimensions");
|
|
61
|
+
var use_hovered_selection_ids_1 = require("../../hooks/use-hovered-selection-ids");
|
|
62
|
+
var use_isomorphic_layout_effect_1 = require("../../hooks/use-isomorphic-layout-effect");
|
|
63
|
+
var use_keyboard_handler_1 = require("../../hooks/use-keyboard-handler");
|
|
64
|
+
var use_licensekey_validator_1 = require("../../hooks/use-licensekey-validator");
|
|
65
|
+
var use_move_columns_rows_1 = require("../../hooks/use-move-columns-rows");
|
|
66
|
+
var use_navigate_sheet_range_1 = require("../../hooks/use-navigate-sheet-range");
|
|
67
|
+
var use_raf_1 = require("../../hooks/use-raf");
|
|
68
|
+
var use_resize_observer_1 = require("../../hooks/use-resize-observer");
|
|
69
|
+
var use_scale_listener_1 = require("../../hooks/use-scale-listener");
|
|
70
|
+
var use_selected_rows_columns_1 = require("../../hooks/use-selected-rows-columns");
|
|
71
|
+
var use_selection_1 = require("../../hooks/use-selection");
|
|
72
|
+
var use_selection_change_1 = require("../../hooks/use-selection-change");
|
|
73
|
+
var use_selection_interceptors_1 = require("../../hooks/use-selection-interceptors");
|
|
74
|
+
var use_selection_move_1 = require("../../hooks/use-selection-move");
|
|
75
|
+
var use_selection_renderer_1 = require("../../hooks/use-selection-renderer");
|
|
76
|
+
var use_selection_resize_1 = require("../../hooks/use-selection-resize");
|
|
77
|
+
var use_sheet_change_handler_1 = require("../../hooks/use-sheet-change-handler");
|
|
78
|
+
var use_sizer_1 = require("../../hooks/use-sizer");
|
|
79
|
+
var use_stable_ref_1 = require("../../hooks/use-stable-ref");
|
|
80
|
+
var use_structured_reference_selection_1 = require("../../hooks/use-structured-reference-selection");
|
|
81
|
+
var use_table_resizer_1 = require("../../hooks/use-table-resizer");
|
|
82
|
+
var use_delayed_value_1 = require("../../hooks/use-delayed-value");
|
|
83
|
+
var use_tooltip_1 = require("../../hooks/use-tooltip");
|
|
84
|
+
var use_touch_1 = require("../../hooks/use-touch");
|
|
85
|
+
var spreadsheet_provider_1 = require("../../providers/spreadsheet-provider");
|
|
86
|
+
var scroll_subscriber_1 = require("../../signals/scroll-subscriber");
|
|
87
|
+
var themes_1 = require("../../themes");
|
|
88
|
+
var cell_1 = require("../cell");
|
|
89
|
+
var cell_editor_1 = require("../cell-editor");
|
|
90
|
+
var context_menu_1 = require("../context-menu");
|
|
91
|
+
var fill_handle_1 = require("../fill-handle");
|
|
92
|
+
var filter_box_1 = require("../filter-box");
|
|
93
|
+
var header_cell_1 = require("../header-cell");
|
|
94
|
+
var header_move_1 = require("../header-move");
|
|
95
|
+
var pivot_placeholder_1 = require("../pivot-placeholder");
|
|
96
|
+
var title_1 = require("../selection/title");
|
|
97
|
+
var cell_structured_1 = require("./../cell-structured");
|
|
98
|
+
var helpers_2 = require("./helpers");
|
|
99
|
+
/**
|
|
100
|
+
* CanvasGrid Component
|
|
101
|
+
* @param ShetGridProps
|
|
102
|
+
* @param CanvasGridMethods
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
function CanvasGridComponent(props, forwardedRef) {
|
|
106
|
+
var licenseKey = props.licenseKey, sheetId = props.sheetId, instanceId = props.instanceId, _a = props.activeCell, activeCell = _a === void 0 ? config_1.DEFAULT_ACTIVE_CELL : _a, _b = props.selections, selections = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, _c = props.frozenColumnCount, frozenColumnCount = _c === void 0 ? 0 : _c, _d = props.frozenRowCount, frozenRowCount = _d === void 0 ? 0 : _d, _e = props.rowCount, rowCount = _e === void 0 ? config_1.DEFAULT_ROW_COUNT : _e, _f = props.columnCount, columnCount = _f === void 0 ? config_1.DEFAULT_COLUMN_COUNT : _f, autoFocus = props.autoFocus, basicFilter = props.basicFilter, tables = props.tables, namedRanges = props.namedRanges, _g = props.bandedRanges, bandedRanges = _g === void 0 ? config_1.DEFAULT_ARRAY : _g, _h = props.tableBorderColor, tableBorderColor = _h === void 0 ? "#008000" : _h, _j = props.filterIconColor, filterIconColor = _j === void 0 ? "#008000" : _j, conditionalFormats = props.conditionalFormats, _k = props.showFilterIcon, showFilterIcon = _k === void 0 ? true : _k, _l = props.showCalculatedColumnIcon, showCalculatedColumnIcon = _l === void 0 ? true : _l, _m = props.showHeaders, showHeaders = _m === void 0 ? true : _m, _o = props.defaultColumnWidth, defaultColumnWidth = _o === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _o, _p = props.defaultRowHeight, defaultRowHeight = _p === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _p, _q = props.columnHeaderHeight, columnHeaderHeight = _q === void 0 ? config_1.COLUMN_HEADER_HEIGHT : _q, _r = props.rowHeaderWidth, rowHeaderWidth = _r === void 0 ? config_1.ROW_HEADER_WIDTH : _r, _s = props.gridLineColor, gridLineColor = _s === void 0 ? config_1.GRIDLINE_COLOR : _s, _t = props.cellBackgroundColor, cellBackgroundColor = _t === void 0 ? config_1.DEFAULT_CELL_BACKGROUND_COLOR : _t, _u = props.cellColor, cellColor = _u === void 0 ? config_1.DEFAULT_CELL_COLOR : _u, _v = props.headerBorderColor, headerBorderColor = _v === void 0 ? config_1.DEFAULT_HEADER_BORDER_COLOR : _v, _w = props.headerBackgroundColor, headerBackgroundColor = _w === void 0 ? config_1.DEFAULT_HEADER_BG : _w, _x = props.headerColor, headerColor = _x === void 0 ? config_1.DEFAULT_HEADER_COLOR : _x, _y = props.headerActiveBackgroundColor, headerActiveBackgroundColor = _y === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_BG : _y, _z = props.headerSelectedBackgroundColor, headerSelectedBackgroundColor = _z === void 0 ? config_1.DEFAULT_HEADER_SELECTED_BG : _z, _0 = props.headerSelectedColor, headerSelectedColor = _0 === void 0 ? "white" : _0, _1 = props.headerTableBackgroundColor, headerTableBackgroundColor = _1 === void 0 ? config_1.DEFAULT_HEADER_TABLE_BG : _1, _2 = props.headerTableActiveBackgroundColor, headerTableActiveBackgroundColor = _2 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_TABLE_BG : _2, _3 = props.headerTableSelectedBackgroundColor, headerTableSelectedBackgroundColor = _3 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_TABLE_BG : _3, _4 = props.frozenShadowColor, frozenShadowColor = _4 === void 0 ? headerBorderColor : _4, _5 = props.frozenShadowThickness, frozenShadowThickness = _5 === void 0 ? 1 : _5, _6 = props.selectionBackgroundColor, selectionBackgroundColor = _6 === void 0 ? config_1.SELECTION_BG : _6, _7 = props.selectionBorderColor, selectionBorderColor = _7 === void 0 ? config_1.SELECTION_BORDER : _7, _8 = props.selectionDragBorderColor, selectionDragBorderColor = _8 === void 0 ? config_1.SELECTION_BORDER : _8, chartSelectedColor = props.chartSelectedColor, _9 = props.chipBackgroundColor, chipBackgroundColor = _9 === void 0 ? config_1.CHIP_COLOR : _9, _10 = props.merges, merges = _10 === void 0 ? config_1.DEFAULT_ARRAY : _10, borderStyles = props.borderStyles, protectedRanges = props.protectedRanges, _11 = props.isWorkbookProtected, isWorkbookProtectedProp = _11 === void 0 ? false : _11, getSheetProtection = props.getSheetProtection, pivotTables = props.pivotTables, charts = props.charts, embeds = props.embeds, slicers = props.slicers, _12 = props.rowMetadata, rowMetadata = _12 === void 0 ? config_1.DEFAULT_ARRAY : _12, _13 = props.columnMetadata, columnMetadata = _13 === void 0 ? config_1.DEFAULT_ARRAY : _13, _14 = props.scale, scale = _14 === void 0 ? 1 : _14, _15 = props.zoomSpeed, zoomSpeed = _15 === void 0 ? 1 : _15, _16 = props.overscanCount, overscanCount = _16 === void 0 ? 3 : _16, _17 = props.enableEditOnEnterKey, enableEditOnEnterKey = _17 === void 0 ? true : _17, _18 = props.enableTextOverflow, enableTextOverflow = _18 === void 0 ? true : _18, _showGridLines = props.showGridLines, _19 = props.showFormulas, showFormulas = _19 === void 0 ? false : _19, _20 = props.protectFormulas, protectFormulas = _20 === void 0 ? false : _20, _21 = props.showFrozenSeparator, showFrozenSeparator = _21 === void 0 ? true : _21, _22 = props.HeaderCell, HeaderCell = _22 === void 0 ? header_cell_1.HeaderCell : _22, _23 = props.Cell, Cell = _23 === void 0 ? cell_1.Cell : _23, _24 = props.SelectionTitleComponent, SelectionTitleComponent = _24 === void 0 ? title_1.SelectionTitle : _24, _25 = props.CellEditor, CellEditor = _25 === void 0 ? cell_editor_1.CellEditor : _25, CellTooltip = props.CellTooltip, _26 = props.ContextMenu, ContextMenu = _26 === void 0 ? context_menu_1.ContextMenu : _26, _27 = props.ContextMenuWrapper, ContextMenuWrapper = _27 === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _27, _28 = props.FilterBox, FilterBox = _28 === void 0 ? filter_box_1.FilterBox : _28, _29 = props.HeaderMoveDragComponent, HeaderMoveDragComponent = _29 === void 0 ? header_move_1.HeaderMoveDragComponent : _29, SuggestionsDropdown = props.SuggestionsDropdown, _30 = props.stickyEditor, stickyEditor = _30 === void 0 ? true : _30, _31 = props.scrollSnap, scrollSnap = _31 === void 0 ? false : _31, scrollThrottleTimeout = props.scrollThrottleTimeout, preventBrowserDefaultScroll = props.preventBrowserDefaultScroll, _32 = props.mouseMoveThrottleTimeout, mouseMoveThrottleTimeout = _32 === void 0 ? 60 : _32, _33 = props.tooltipIntentInterval, tooltipIntentInterval = _33 === void 0 ? 60 : _33, selectionPolicy = props.selectionPolicy, users = props.users, userId = props.userId, renderCollaboratorCursor = props.renderCollaboratorCursor, functionDescriptions = props.functionDescriptions, _34 = props.showHeaderMenuButton, showHeaderMenuButton = _34 === void 0 ? true : _34, _35 = props.scrollbarSize, scrollbarSize = _35 === void 0 ? config_1.SCROLLBAR_SIZE : _35, _36 = props.theme, theme = _36 === void 0 ? config_1.defaultSpreadsheetTheme : _36, _37 = props.showNotes, showNotes = _37 === void 0 ? true : _37, _38 = props.showComments, showComments = _38 === void 0 ? true : _38, locale = props.locale, agentSuggestions = props.agentSuggestions, onReviewSuggestion = props.onReviewSuggestion, onShowFormulas = props.onShowFormulas, getDataRowCount = props.getDataRowCount, getChartComponent = props.getChartComponent, getEmbedComponent = props.getEmbedComponent, getSlicerComponent = props.getSlicerComponent, onChange = props.onChange, onChangeBatch = props.onChangeBatch, onExpandCollapse = props.onExpandCollapse, onPivotDrillDown = props.onPivotDrillDown, onDelete = props.onDelete, onChangeEditorValue = props.onChangeEditorValue, onFill = props.onFill, onRequestCalculate = props.onRequestCalculate, onChangeActiveCell = props.onChangeActiveCell, onChangeActiveSheet = props.onChangeActiveSheet, onChangeSelections = props.onChangeSelections, getSheetName = props.getSheetName, getSheetId = props.getSheetId, getCellData = props.getCellData, getNoteProp = props.getNote, getTextFormatRuns = props.getTextFormatRuns, getDataValidation = props.getDataValidation, getEffectiveFormat = props.getEffectiveFormat, getFormattedValueProp = props.getFormattedValue, getTooltipContent = props.getTooltipContent, errorResolutionComponent = props.errorResolutionComponent, getEffectiveValueProp = props.getEffectiveValue, getUserEnteredExtendedValue = props.getUserEnteredExtendedValue, getEffectiveExtendedValue = props.getEffectiveExtendedValue, getSheetRowCount = props.getSheetRowCount, getSheetColumnCount = props.getSheetColumnCount, getCellPopoverContent = props.getCellPopoverContent, onScroll = props.onScroll, onViewPortChange = props.onViewPortChange, _39 = props.windowConditionalFormats, windowConditionalFormats = _39 === void 0 ? false : _39, _40 = props.engineConditionalFormatResults, engineConditionalFormatResults = _40 === void 0 ? false : _40, onResize = props.onResize, onAutoResize = props.onAutoResize, onHideColumn = props.onHideColumn, onHideRow = props.onHideRow, onShowColumn = props.onShowColumn, onShowRow = props.onShowRow, onGroupRows = props.onGroupRows, onUngroupRows = props.onUngroupRows, onCollapseRowGroup = props.onCollapseRowGroup, onExpandRowGroup = props.onExpandRowGroup, onGroupColumns = props.onGroupColumns, onUngroupColumns = props.onUngroupColumns, onCollapseColumnGroup = props.onCollapseColumnGroup, onExpandColumnGroup = props.onExpandColumnGroup, onSetOutlineDepth = props.onSetOutlineDepth, onDeleteRow = props.onDeleteRow, onDeleteColumn = props.onDeleteColumn, onInsertRow = props.onInsertRow, onInsertColumn = props.onInsertColumn, onInsertCellsShiftDown = props.onInsertCellsShiftDown, onInsertCellsShiftRight = props.onInsertCellsShiftRight, onDeleteCellsShiftLeft = props.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = props.onDeleteCellsShiftUp, onClearContents = props.onClearContents, onMoveColumns = props.onMoveColumns, onMoveRows = props.onMoveRows, onSelectNextSheet = props.onSelectNextSheet, onSelectPreviousSheet = props.onSelectPreviousSheet, onCreateNewSheet = props.onCreateNewSheet, onKeyDown = props.onKeyDown, onChangeFormatting = props.onChangeFormatting, onRepeatFormatting = props.onRepeatFormatting, onClearFormatting = props.onClearFormatting, onRequestEditProtectedRange = props.onRequestEditProtectedRange, onMoveChart = props.onMoveChart, onResizeChart = props.onResizeChart, onDeleteChart = props.onDeleteChart, onMoveEmbed = props.onMoveEmbed, onResizeEmbed = props.onResizeEmbed, onDeleteEmbed = props.onDeleteEmbed, onRequestEditEmbed = props.onRequestEditEmbed, onMoveSlicer = props.onMoveSlicer, onResizeSlicer = props.onResizeSlicer, onDeleteSlicer = props.onDeleteSlicer, onRequestEditSlicer = props.onRequestEditSlicer, onFillRange = props.onFillRange, disableFillRightShortcut = props.disableFillRightShortcut, onMoveSelection = props.onMoveSelection, onInsertTime = props.onInsertTime, onInsertDate = props.onInsertDate, onInsertDateTime = props.onInsertDateTime, onInsertAutoSum = props.onInsertAutoSum, onUndo = props.onUndo, onRedo = props.onRedo, onPaste = props.onPaste, onCopy = props.onCopy, onCut = props.onCut, onSortColumn = props.onSortColumn, onSortTable = props.onSortTable, onFilterTable = props.onFilterTable, onFilterPivot = props.onFilterPivot, onResizeTable = props.onResizeTable, onRequestEditTable = props.onRequestEditTable, onRequestEditPivotTable = props.onRequestEditPivotTable, onRequestDeletePivotTable = props.onRequestDeletePivotTable, onRemoveTable = props.onRemoveTable, onCreateTable = props.onCreateTable, onInsertTableColumn = props.onInsertTableColumn, onDeleteTableColumn = props.onDeleteTableColumn, onInsertTableRow = props.onInsertTableRow, onDeleteTableRow = props.onDeleteTableRow, onCreateBasicFilter = props.onCreateBasicFilter, onRequestDefineNamedRange = props.onRequestDefineNamedRange, onRequestFormatCells = props.onRequestFormatCells, onRequestConditionalFormat = props.onRequestConditionalFormat, onRequestDataValidation = props.onRequestDataValidation, onRequestInsertComment = props.onRequestInsertComment, onRequestInsertLink = props.onRequestInsertLink, onFreezeColumn = props.onFreezeColumn, onFreezeRow = props.onFreezeRow, onUpdateNote = props.onUpdateNote, onProtectRange = props.onProtectRange, onUnProtectRange = props.onUnProtectRange, onSortRange = props.onSortRange, onRequestSearch = props.onRequestSearch, onRequestReplace = props.onRequestReplace, onRequestResize = props.onRequestResize, _41 = props.getRowHeaderText, getRowHeaderText = _41 === void 0 ? helpers_1.getDefaultRowHeader : _41, _42 = props.getColumnHeaderText, getColumnHeaderText = _42 === void 0 ? helpers_1.getDefaultColumnHeader : _42, getAdditionalCellSpacing = props.getAdditionalCellSpacing, _43 = props.tokenizer, defaultTokenizer = _43 === void 0 ? calculator_1.tokenize : _43, onChangeScale = props.onChangeScale, onRemoveLink = props.onRemoveLink, onSelectLink = props.onSelectLink, onSplitTextToColumns = props.onSplitTextToColumns, onRemoveDuplicates = props.onRemoveDuplicates, onRequestExpand = props.onRequestExpand, cellExpandPredicate = props.cellExpandPredicate, _44 = props.StructuredResult, StructuredResult = _44 === void 0 ? cell_structured_1.StructuredResultRenderer : _44, getMentions = props.getMentions, getStructuredPropertiesProp = props.getStructuredProperties, getFunctionParameterSuggestions = props.getFunctionParameterSuggestions, shouldFetchFunctionParameters = props.shouldFetchFunctionParameters, MentionTagComponent = props.MentionTagComponent, MentionDropdownItemComponent = props.MentionDropdownItemComponent, _45 = props.showSelectionResizeHandles, showSelectionResizeHandles = _45 === void 0 ? true : _45, enableMagicFill = props.enableMagicFill, _46 = props.enableQuickEdit, enableQuickEdit = _46 === void 0 ? true : _46, MagicFillComponent = props.MagicFillComponent, MagicFillContent = props.MagicFillContent, QuickEdit = props.QuickEdit, PasteMenu = props.PasteMenu, SuggestionAction = props.SuggestionAction, HiddenRowMarkers = props.HiddenRowMarkers, HiddenColumnMarkers = props.HiddenColumnMarkers, enableResizerOverflow = props.enableResizerOverflow, className = props.className, _47 = props.defaultFontSizePoint, defaultFontSizePoint = _47 === void 0 ? config_1.DEFAULT_FONT_SIZE_PT : _47, readonly = props.readonly, _48 = props.isComparing, isComparing = _48 === void 0 ? false : _48, getCellDiff = props.getCellDiff, enableDataBoundaryNavigation = props.enableDataBoundaryNavigation, footerHeight = props.footerHeight, footerComponent = props.footerComponent, arrowComponents = props.arrowComponents,
|
|
107
|
+
// Host-driven filter props. `hostHiddenRowRanges`
|
|
108
|
+
// supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
|
|
109
|
+
// column's distinct values. Both let a million-row filter render without scanning
|
|
110
|
+
// or materializing per-row state. Destructured here so they're excluded from
|
|
111
|
+
// `...rest` (never spread onto BaseGrid).
|
|
112
|
+
hostHiddenRowRanges = props.hostHiddenRowRanges, getFilterValues = props.getFilterValues, getFilterColors = props.getFilterColors,
|
|
113
|
+
// Optional full-store per-cell reader for data-validation source ranges (dropdown
|
|
114
|
+
// options + commit-time checks). Windowed hosts supply an off-window-safe reader;
|
|
115
|
+
// defaults to `getFormattedValue` inside `useGetValuesFromRange`.
|
|
116
|
+
getValidationSourceValue = props.getValidationSourceValue,
|
|
117
|
+
// Unused props only for api
|
|
118
|
+
onChangeBorder = props.onChangeBorder, onDuplicateSheet = props.onDuplicateSheet, onCreateConditionalFormattingRule = props.onCreateConditionalFormattingRule, onDeleteConditionalFormattingRule = props.onDeleteConditionalFormattingRule, onUpdateConditionalFormattingRule = props.onUpdateConditionalFormattingRule, onCreateDataValidationRule = props.onCreateDataValidationRule, onUpdateDataValidationRule = props.onUpdateDataValidationRule, onDeleteDataValidationRule = props.onDeleteDataValidationRule, onCreateChart = props.onCreateChart, onDeleteSheet = props.onDeleteSheet, onCreateEmbed = props.onCreateEmbed, onDecreaseIndent = props.onDecreaseIndent, onIncreaseIndent = props.onIncreaseIndent, onChangeTheme = props.onChangeTheme, onChangeDecimals = props.onChangeDecimals, onUpdateSheet = props.onUpdateSheet, onChangeBatchStream = props.onChangeBatchStream, onBlur = props.onBlur, rest = tslib_1.__rest(props, ["licenseKey", "sheetId", "instanceId", "activeCell", "selections", "frozenColumnCount", "frozenRowCount", "rowCount", "columnCount", "autoFocus", "basicFilter", "tables", "namedRanges", "bandedRanges", "tableBorderColor", "filterIconColor", "conditionalFormats", "showFilterIcon", "showCalculatedColumnIcon", "showHeaders", "defaultColumnWidth", "defaultRowHeight", "columnHeaderHeight", "rowHeaderWidth", "gridLineColor", "cellBackgroundColor", "cellColor", "headerBorderColor", "headerBackgroundColor", "headerColor", "headerActiveBackgroundColor", "headerSelectedBackgroundColor", "headerSelectedColor", "headerTableBackgroundColor", "headerTableActiveBackgroundColor", "headerTableSelectedBackgroundColor", "frozenShadowColor", "frozenShadowThickness", "selectionBackgroundColor", "selectionBorderColor", "selectionDragBorderColor", "chartSelectedColor", "chipBackgroundColor", "merges", "borderStyles", "protectedRanges", "isWorkbookProtected", "getSheetProtection", "pivotTables", "charts", "embeds", "slicers", "rowMetadata", "columnMetadata", "scale", "zoomSpeed", "overscanCount", "enableEditOnEnterKey", "enableTextOverflow", "showGridLines", "showFormulas", "protectFormulas", "showFrozenSeparator", "HeaderCell", "Cell", "SelectionTitleComponent", "CellEditor", "CellTooltip", "ContextMenu", "ContextMenuWrapper", "FilterBox", "HeaderMoveDragComponent", "SuggestionsDropdown", "stickyEditor", "scrollSnap", "scrollThrottleTimeout", "preventBrowserDefaultScroll", "mouseMoveThrottleTimeout", "tooltipIntentInterval", "selectionPolicy", "users", "userId", "renderCollaboratorCursor", "functionDescriptions", "showHeaderMenuButton", "scrollbarSize", "theme", "showNotes", "showComments", "locale", "agentSuggestions", "onReviewSuggestion", "onShowFormulas", "getDataRowCount", "getChartComponent", "getEmbedComponent", "getSlicerComponent", "onChange", "onChangeBatch", "onExpandCollapse", "onPivotDrillDown", "onDelete", "onChangeEditorValue", "onFill", "onRequestCalculate", "onChangeActiveCell", "onChangeActiveSheet", "onChangeSelections", "getSheetName", "getSheetId", "getCellData", "getNote", "getTextFormatRuns", "getDataValidation", "getEffectiveFormat", "getFormattedValue", "getTooltipContent", "errorResolutionComponent", "getEffectiveValue", "getUserEnteredExtendedValue", "getEffectiveExtendedValue", "getSheetRowCount", "getSheetColumnCount", "getCellPopoverContent", "onScroll", "onViewPortChange", "windowConditionalFormats", "engineConditionalFormatResults", "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", "onMoveSelection", "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", "getColumnHeaderText", "getAdditionalCellSpacing", "tokenizer", "onChangeScale", "onRemoveLink", "onSelectLink", "onSplitTextToColumns", "onRemoveDuplicates", "onRequestExpand", "cellExpandPredicate", "StructuredResult", "getMentions", "getStructuredProperties", "getFunctionParameterSuggestions", "shouldFetchFunctionParameters", "MentionTagComponent", "MentionDropdownItemComponent", "showSelectionResizeHandles", "enableMagicFill", "enableQuickEdit", "MagicFillComponent", "MagicFillContent", "QuickEdit", "PasteMenu", "SuggestionAction", "HiddenRowMarkers", "HiddenColumnMarkers", "enableResizerOverflow", "className", "defaultFontSizePoint", "readonly", "isComparing", "getCellDiff", "enableDataBoundaryNavigation", "footerHeight", "footerComponent", "arrowComponents", "hostHiddenRowRanges", "getFilterValues", "getFilterColors", "getValidationSourceValue", "onChangeBorder", "onDuplicateSheet", "onCreateConditionalFormattingRule", "onDeleteConditionalFormattingRule", "onUpdateConditionalFormattingRule", "onCreateDataValidationRule", "onUpdateDataValidationRule", "onDeleteDataValidationRule", "onCreateChart", "onDeleteSheet", "onCreateEmbed", "onDecreaseIndent", "onIncreaseIndent", "onChangeTheme", "onChangeDecimals", "onUpdateSheet", "onChangeBatchStream", "onBlur"]);
|
|
119
|
+
/**
|
|
120
|
+
* Fire onBlur only when the cell editor blurs to an element outside the
|
|
121
|
+
* spreadsheet. Routed through `useEditable` so we hook the always-focused
|
|
122
|
+
* cell editor rather than relying on descendant blur bubbling.
|
|
123
|
+
*/
|
|
124
|
+
var handleEditorBlur = (0, react_1.useCallback)(function (e, isEditing) {
|
|
125
|
+
var _a;
|
|
126
|
+
if ((_a = gridContainerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e, isEditing);
|
|
130
|
+
}, [onBlur]);
|
|
131
|
+
var showGridLines = _showGridLines !== null && _showGridLines !== void 0 ? _showGridLines : true;
|
|
132
|
+
var gridRef = (0, react_1.useRef)(null);
|
|
133
|
+
// Hovered cell state (immediate, updated on mousemove)
|
|
134
|
+
var _49 = tslib_1.__read((0, react_1.useState)(), 2), hoveredCell = _49[0], setHoveredCell = _49[1];
|
|
135
|
+
// Delayed hovered cell for tooltips and selection titles
|
|
136
|
+
var delayedHoveredCell = (0, use_delayed_value_1.useDelayedValue)(hoveredCell, tooltipIntentInterval);
|
|
137
|
+
// Text overflow functionality
|
|
138
|
+
// Store overflow width AND the x-offset of the cell to avoid recalculating on scroll
|
|
139
|
+
var overflowMapRef = (0, react_1.useRef)(new Map());
|
|
140
|
+
// Calculate overflow buffer JIT to avoid re-renders
|
|
141
|
+
var getOverflowBuffer = (0, react_1.useCallback)(function (scrollLeft) {
|
|
142
|
+
var e_1, _a;
|
|
143
|
+
var map = overflowMapRef.current;
|
|
144
|
+
var maxBuffer = 0;
|
|
145
|
+
try {
|
|
146
|
+
for (var _b = tslib_1.__values(map.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
147
|
+
var _d = _c.value, width_1 = _d.width, cellX = _d.x;
|
|
148
|
+
// Check if the overflowing content intersects with the viewport
|
|
149
|
+
if (cellX < scrollLeft && cellX + width_1 > scrollLeft) {
|
|
150
|
+
var requiredBuffer = scrollLeft - cellX;
|
|
151
|
+
if (requiredBuffer > maxBuffer) {
|
|
152
|
+
maxBuffer = requiredBuffer;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
158
|
+
finally {
|
|
159
|
+
try {
|
|
160
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
161
|
+
}
|
|
162
|
+
finally { if (e_1) throw e_1.error; }
|
|
163
|
+
}
|
|
164
|
+
return maxBuffer;
|
|
165
|
+
}, []);
|
|
166
|
+
// Get frozen column cells that overflow into the body area
|
|
167
|
+
// These need to be rendered in the body cells so the overflow scrolls with the body
|
|
168
|
+
// Caches the previous Set and returns the same reference when membership is unchanged
|
|
169
|
+
// so downstream consumers can rely on referential equality.
|
|
170
|
+
var frozenColumnOverflowCellsRef = (0, react_1.useRef)(new Set());
|
|
171
|
+
var getFrozenColumnOverflowCells = (0, react_1.useCallback)(function (frozenColumnWidth, frozenCols) {
|
|
172
|
+
var e_2, _a, e_3, _b;
|
|
173
|
+
var map = overflowMapRef.current;
|
|
174
|
+
var next = new Set();
|
|
175
|
+
try {
|
|
176
|
+
for (var _c = tslib_1.__values(map.entries()), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
177
|
+
var _e = tslib_1.__read(_d.value, 2), cellId = _e[0], _f = _e[1], width_2 = _f.width, cellX = _f.x;
|
|
178
|
+
// cellIdentifier format: "rowIndex,columnIndex"
|
|
179
|
+
var _g = tslib_1.__read(cellId.split(","), 2), colStr = _g[1];
|
|
180
|
+
var columnIndex = parseInt(colStr, 10);
|
|
181
|
+
// Only include cells in frozen columns that overflow beyond the frozen boundary
|
|
182
|
+
if (columnIndex < frozenCols && cellX + width_2 > frozenColumnWidth) {
|
|
183
|
+
next.add(cellId);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
188
|
+
finally {
|
|
189
|
+
try {
|
|
190
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
191
|
+
}
|
|
192
|
+
finally { if (e_2) throw e_2.error; }
|
|
193
|
+
}
|
|
194
|
+
var prev = frozenColumnOverflowCellsRef.current;
|
|
195
|
+
if (prev.size === next.size) {
|
|
196
|
+
var same = true;
|
|
197
|
+
try {
|
|
198
|
+
for (var next_1 = tslib_1.__values(next), next_1_1 = next_1.next(); !next_1_1.done; next_1_1 = next_1.next()) {
|
|
199
|
+
var id = next_1_1.value;
|
|
200
|
+
if (!prev.has(id)) {
|
|
201
|
+
same = false;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
207
|
+
finally {
|
|
208
|
+
try {
|
|
209
|
+
if (next_1_1 && !next_1_1.done && (_b = next_1.return)) _b.call(next_1);
|
|
210
|
+
}
|
|
211
|
+
finally { if (e_3) throw e_3.error; }
|
|
212
|
+
}
|
|
213
|
+
if (same)
|
|
214
|
+
return prev;
|
|
215
|
+
}
|
|
216
|
+
frozenColumnOverflowCellsRef.current = next;
|
|
217
|
+
return next;
|
|
218
|
+
}, []);
|
|
219
|
+
// Show formula help dropdown
|
|
220
|
+
var showFormulaHelp = (0, show_formula_help_atom_1.useShowFormulaHelpValue)();
|
|
221
|
+
var onHideFormulaHelp = (0, show_formula_help_atom_1.useOnHideFormulaHelp)();
|
|
222
|
+
var onShowFormulaHelp = (0, show_formula_help_atom_1.useOnShowFormulaHelp)();
|
|
223
|
+
// Cell editor
|
|
224
|
+
var cellEditorInstance = (0, formula_bar_editor_value_atom_1.useCellEditorInstance)();
|
|
225
|
+
// Paste menu
|
|
226
|
+
var _50 = tslib_1.__read((0, atoms_1.useShowPasteMenu)(), 2), showPasteMenu = _50[0], setShowPasteMenu = _50[1];
|
|
227
|
+
// Shared state
|
|
228
|
+
var formulaMode = (0, atoms_1.useFormulaModeValue)();
|
|
229
|
+
var formulaSelections = (0, formula_selections_atom_1.useFormulaSelections)();
|
|
230
|
+
var _51 = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), editingCellCoordinate = _51[0], setEditingCellCoordinate = _51[1];
|
|
231
|
+
var setFormulabarEditorValue = (0, formula_bar_editor_value_atom_1.useSetFormulabarEditorValue)();
|
|
232
|
+
var setFormulaBarTextFormatRuns = (0, formula_bar_editor_value_atom_1.useSetFormulaBarTextFormatRuns)();
|
|
233
|
+
var canSelectCells = (0, formula_selection_state_atom_1.useFormulaCanSelectCells)();
|
|
234
|
+
var selectionMode = (0, formula_selection_state_atom_1.useFormulaSelectionMode)();
|
|
235
|
+
var setFormulaState = (0, formula_selection_state_atom_1.useSetFormulaSelectionState)();
|
|
236
|
+
var activeEditor = (0, active_editor_atom_1.useActiveEditor)();
|
|
237
|
+
// Magic fill state
|
|
238
|
+
var _52 = tslib_1.__read((0, magic_fill_state_atom_1.useQuickEditState)(), 2), quickEditValues = _52[0], setQuickEditState = _52[1];
|
|
239
|
+
var setNoteEditorCell = (0, atoms_1.useSetNoteEditorCell)();
|
|
240
|
+
var setPinnedTooltip = (0, atoms_1.useSetPinnedTooltip)();
|
|
241
|
+
var setSpreadsheetApi = (0, spreadsheet_api_atom_1.useSetSpreadsheetApi)();
|
|
242
|
+
var propsReferenceRef = (0, react_1.useRef)(null);
|
|
243
|
+
var lastScheduledScrollRef = (0, react_1.useRef)(0);
|
|
244
|
+
// Spreadsheet jotai store
|
|
245
|
+
var store = (0, jotai_1.useStore)();
|
|
246
|
+
var instanceStore = (0, jotai_1.useStore)({ store: spreadsheet_provider_1.multiInstanceStore });
|
|
247
|
+
// To access closures
|
|
248
|
+
var hoveredCellRef = (0, use_stable_ref_1.useStableRef)(hoveredCell);
|
|
249
|
+
var _53 = tslib_1.__read((0, use_resize_observer_1.useResizeObserver)(), 2), gridContainerRef = _53[0], _54 = _53[1], width = _54.width, height = _54.height;
|
|
250
|
+
var defaultFrozenDims = showHeaders ? 1 : 0;
|
|
251
|
+
var frozenRows = Math.max(defaultFrozenDims, (frozenRowCount !== null && frozenRowCount !== void 0 ? frozenRowCount : 0) + defaultFrozenDims);
|
|
252
|
+
var frozenColumns = Math.max(defaultFrozenDims, (frozenColumnCount !== null && frozenColumnCount !== void 0 ? frozenColumnCount : 0) + defaultFrozenDims);
|
|
253
|
+
var selectionTopBound = 1;
|
|
254
|
+
var selectionLeftBound = 1;
|
|
255
|
+
var fillHandleSize = 8;
|
|
256
|
+
// Clamp to max allowable columns/rows in excel
|
|
257
|
+
// Rows start with zero index. Header is considered 1 row. Hence + 1
|
|
258
|
+
var sheetRowCount = Math.min(config_1.MAX_ROW_COUNT + 1, rowCount + 1);
|
|
259
|
+
var sheetColumnCount = Math.min(config_1.MAX_COLUMN_COUNT + 1, columnCount + 1);
|
|
260
|
+
// License key validator
|
|
261
|
+
var _55 = tslib_1.__read((0, use_licensekey_validator_1.useLicenseKeyValidator)({
|
|
262
|
+
licenseKey: licenseKey,
|
|
263
|
+
}), 3), _ = _55[0], licenseType = _55[1], validatorResult = _55[2];
|
|
264
|
+
var isRestricted = licenseType === "solo";
|
|
265
|
+
// Grid line width
|
|
266
|
+
var gridLineWidth = 1 * scale;
|
|
267
|
+
// When sheet is changed, we have to scroll to the last saved scroll
|
|
268
|
+
// position of the sheet
|
|
269
|
+
// It can happen that user switched to a sheet
|
|
270
|
+
// And triggered a scroll to a cell in an inactive sheet
|
|
271
|
+
// scrollToCell() + onChangeActiveSheet()
|
|
272
|
+
// This triggers multiple scrolls, one that happens immediately and another in useEffect
|
|
273
|
+
// So we check if introduce a simple hack to check if there is enough interval
|
|
274
|
+
// between scrollToCell and sheet-change scroll
|
|
275
|
+
var isSheetScrollScheduled = (0, react_1.useCallback)(function () {
|
|
276
|
+
return Date.now() - lastScheduledScrollRef.current > 100;
|
|
277
|
+
}, []);
|
|
278
|
+
// Get sheet dimensions
|
|
279
|
+
var getSheetDimensions = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
|
|
280
|
+
return [
|
|
281
|
+
width - scrollbarSize - rowHeaderWidth,
|
|
282
|
+
height - scrollbarSize - columnHeaderHeight,
|
|
283
|
+
];
|
|
284
|
+
}, [width, height, rowHeaderWidth, columnHeaderHeight, scrollbarSize]));
|
|
285
|
+
// Row header
|
|
286
|
+
var isRowHeader = (0, react_1.useCallback)(function (columnIndex) { return columnIndex === 0; }, []);
|
|
287
|
+
// Column header header
|
|
288
|
+
var isColumnHeader = (0, react_1.useCallback)(function (rowIndex) { return rowIndex === 0; }, []);
|
|
289
|
+
/**
|
|
290
|
+
* Hidden rows for
|
|
291
|
+
* Used for basicFilter + tables + manual show hide of cols/rows
|
|
292
|
+
*/
|
|
293
|
+
// When the host supplies the basic filter's hidden
|
|
294
|
+
// body-row ranges as compact sorted [start, end] (inclusive, grid row-index space)
|
|
295
|
+
// tuples, derive row-hidden state via binary search instead of materializing a
|
|
296
|
+
// per-row `hiddenByFilter` flag for every hidden row in `rowMetadata`. This lets a
|
|
297
|
+
// million-row filter render without ~1M rowMetadata entries. `undefined` = host is
|
|
298
|
+
// not driving filter visibility, so the original `rowMetadata.hiddenByFilter` path
|
|
299
|
+
// is used unchanged.
|
|
300
|
+
var isRowHiddenByHostFilter = (0, react_1.useCallback)(function (rowIndex) {
|
|
301
|
+
var ranges = hostHiddenRowRanges;
|
|
302
|
+
if (!ranges) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
var lo = 0;
|
|
306
|
+
var hi = ranges.length - 1;
|
|
307
|
+
while (lo <= hi) {
|
|
308
|
+
var mid = (lo + hi) >> 1;
|
|
309
|
+
var range = ranges[mid];
|
|
310
|
+
if (rowIndex < range[0]) {
|
|
311
|
+
hi = mid - 1;
|
|
312
|
+
}
|
|
313
|
+
else if (rowIndex > range[1]) {
|
|
314
|
+
lo = mid + 1;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return false;
|
|
321
|
+
}, [hostHiddenRowRanges]);
|
|
322
|
+
var isHiddenRow = (0, react_1.useCallback)(function (rowIndex) {
|
|
323
|
+
var _a, _b, _c, _d, _e;
|
|
324
|
+
if (isColumnHeader(rowIndex)) {
|
|
325
|
+
return !showHeaders;
|
|
326
|
+
}
|
|
327
|
+
// Host filter ranges replace per-row hiddenByFilter when supplied.
|
|
328
|
+
if (hostHiddenRowRanges) {
|
|
329
|
+
return !!(isRowHiddenByHostFilter(rowIndex) ||
|
|
330
|
+
((_a = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _a === void 0 ? void 0 : _a.hiddenByUser) ||
|
|
331
|
+
((_b = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _b === void 0 ? void 0 : _b.hiddenByGroup));
|
|
332
|
+
}
|
|
333
|
+
return !!(((_c = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _c === void 0 ? void 0 : _c.hiddenByFilter) ||
|
|
334
|
+
((_d = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _d === void 0 ? void 0 : _d.hiddenByUser) ||
|
|
335
|
+
((_e = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _e === void 0 ? void 0 : _e.hiddenByGroup));
|
|
336
|
+
}, [
|
|
337
|
+
rowMetadata,
|
|
338
|
+
isColumnHeader,
|
|
339
|
+
showHeaders,
|
|
340
|
+
hostHiddenRowRanges,
|
|
341
|
+
isRowHiddenByHostFilter,
|
|
342
|
+
]);
|
|
343
|
+
/**
|
|
344
|
+
* Check if a row is hidden by filter
|
|
345
|
+
*/
|
|
346
|
+
var isHiddenRowByFilter = (0, react_1.useCallback)(function (rowIndex) {
|
|
347
|
+
var _a;
|
|
348
|
+
if (isColumnHeader(rowIndex)) {
|
|
349
|
+
return !showHeaders;
|
|
350
|
+
}
|
|
351
|
+
// Host filter ranges replace per-row hiddenByFilter when supplied.
|
|
352
|
+
if (hostHiddenRowRanges) {
|
|
353
|
+
return isRowHiddenByHostFilter(rowIndex);
|
|
354
|
+
}
|
|
355
|
+
return !!((_a = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _a === void 0 ? void 0 : _a.hiddenByFilter);
|
|
356
|
+
}, [
|
|
357
|
+
rowMetadata,
|
|
358
|
+
isColumnHeader,
|
|
359
|
+
showHeaders,
|
|
360
|
+
hostHiddenRowRanges,
|
|
361
|
+
isRowHiddenByHostFilter,
|
|
362
|
+
]);
|
|
363
|
+
/**
|
|
364
|
+
* For hidden columns
|
|
365
|
+
* Grid skips rendering gridlines and cell rendering
|
|
366
|
+
* Used for basicFilter + tables + manual show hide of cols/rows
|
|
367
|
+
*/
|
|
368
|
+
var isHiddenColumn = (0, react_1.useCallback)(function (columnIndex) {
|
|
369
|
+
var _a, _b, _c;
|
|
370
|
+
if (isRowHeader(columnIndex)) {
|
|
371
|
+
return !showHeaders;
|
|
372
|
+
}
|
|
373
|
+
return !!(((_a = columnMetadata === null || columnMetadata === void 0 ? void 0 : columnMetadata[columnIndex]) === null || _a === void 0 ? void 0 : _a.hiddenByFilter) ||
|
|
374
|
+
((_b = columnMetadata === null || columnMetadata === void 0 ? void 0 : columnMetadata[columnIndex]) === null || _b === void 0 ? void 0 : _b.hiddenByUser) ||
|
|
375
|
+
((_c = columnMetadata === null || columnMetadata === void 0 ? void 0 : columnMetadata[columnIndex]) === null || _c === void 0 ? void 0 : _c.hiddenByGroup));
|
|
376
|
+
}, [columnMetadata, isRowHeader, showHeaders]);
|
|
377
|
+
/**
|
|
378
|
+
* Compute visible row ranges for efficient Grid iteration.
|
|
379
|
+
* Instead of checking isHiddenRow for each row (O(n)),
|
|
380
|
+
* we compute ranges from the sparse rowMetadata (O(h log h) where h = hidden rows).
|
|
381
|
+
*/
|
|
382
|
+
var visibleRowRanges = (0, react_1.useMemo)(function () {
|
|
383
|
+
var e_4, _a, e_5, _b, e_6, _c, e_7, _d;
|
|
384
|
+
var _e, _f;
|
|
385
|
+
// When the host supplies compact filter-hidden
|
|
386
|
+
// ranges, build visible ranges by complementing them merged with the SPARSE
|
|
387
|
+
// user/group hides — no per-row hiddenByFilter materialization, so a million-row
|
|
388
|
+
// filter doesn't allocate ~1M rowMetadata entries.
|
|
389
|
+
if (hostHiddenRowRanges) {
|
|
390
|
+
var hidden = [];
|
|
391
|
+
try {
|
|
392
|
+
for (var hostHiddenRowRanges_1 = tslib_1.__values(hostHiddenRowRanges), hostHiddenRowRanges_1_1 = hostHiddenRowRanges_1.next(); !hostHiddenRowRanges_1_1.done; hostHiddenRowRanges_1_1 = hostHiddenRowRanges_1.next()) {
|
|
393
|
+
var range = hostHiddenRowRanges_1_1.value;
|
|
394
|
+
hidden.push([range[0], range[1]]);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
398
|
+
finally {
|
|
399
|
+
try {
|
|
400
|
+
if (hostHiddenRowRanges_1_1 && !hostHiddenRowRanges_1_1.done && (_a = hostHiddenRowRanges_1.return)) _a.call(hostHiddenRowRanges_1);
|
|
401
|
+
}
|
|
402
|
+
finally { if (e_4) throw e_4.error; }
|
|
403
|
+
}
|
|
404
|
+
try {
|
|
405
|
+
for (var _g = tslib_1.__values(Object.keys(rowMetadata !== null && rowMetadata !== void 0 ? rowMetadata : {})), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
406
|
+
var key = _h.value;
|
|
407
|
+
var i = Number(key);
|
|
408
|
+
if (((_e = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[i]) === null || _e === void 0 ? void 0 : _e.hiddenByUser) || ((_f = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[i]) === null || _f === void 0 ? void 0 : _f.hiddenByGroup)) {
|
|
409
|
+
hidden.push([i, i]);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
414
|
+
finally {
|
|
415
|
+
try {
|
|
416
|
+
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
417
|
+
}
|
|
418
|
+
finally { if (e_5) throw e_5.error; }
|
|
419
|
+
}
|
|
420
|
+
hidden.sort(function (a, b) { return a[0] - b[0]; });
|
|
421
|
+
var visible = [];
|
|
422
|
+
var cursor = 0;
|
|
423
|
+
try {
|
|
424
|
+
for (var hidden_1 = tslib_1.__values(hidden), hidden_1_1 = hidden_1.next(); !hidden_1_1.done; hidden_1_1 = hidden_1.next()) {
|
|
425
|
+
var _j = tslib_1.__read(hidden_1_1.value, 2), s = _j[0], e = _j[1];
|
|
426
|
+
if (s > cursor) {
|
|
427
|
+
visible.push({ start: cursor, end: s - 1 });
|
|
428
|
+
}
|
|
429
|
+
cursor = Math.max(cursor, e + 1);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
433
|
+
finally {
|
|
434
|
+
try {
|
|
435
|
+
if (hidden_1_1 && !hidden_1_1.done && (_c = hidden_1.return)) _c.call(hidden_1);
|
|
436
|
+
}
|
|
437
|
+
finally { if (e_6) throw e_6.error; }
|
|
438
|
+
}
|
|
439
|
+
if (cursor <= sheetRowCount - 1) {
|
|
440
|
+
visible.push({ start: cursor, end: sheetRowCount - 1 });
|
|
441
|
+
}
|
|
442
|
+
return visible.length ? visible : [{ start: 0, end: sheetRowCount - 1 }];
|
|
443
|
+
}
|
|
444
|
+
// Get sorted hidden row indices from rowMetadata. Must include
|
|
445
|
+
// `hiddenByGroup` (outline collapse) — without it BaseGrid skips
|
|
446
|
+
// the row-iteration fast path and still calls the cell renderer
|
|
447
|
+
// with height=0, which makes overlays like conditional-format icon
|
|
448
|
+
// sets stack on top of each other at the collapse boundary.
|
|
449
|
+
var hiddenRows = Object.keys(rowMetadata !== null && rowMetadata !== void 0 ? rowMetadata : {})
|
|
450
|
+
.map(Number)
|
|
451
|
+
.filter(function (i) {
|
|
452
|
+
var _a, _b, _c;
|
|
453
|
+
return ((_a = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[i]) === null || _a === void 0 ? void 0 : _a.hiddenByFilter) ||
|
|
454
|
+
((_b = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[i]) === null || _b === void 0 ? void 0 : _b.hiddenByUser) ||
|
|
455
|
+
((_c = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[i]) === null || _c === void 0 ? void 0 : _c.hiddenByGroup);
|
|
456
|
+
})
|
|
457
|
+
.sort(function (a, b) { return a - b; });
|
|
458
|
+
// Use `sheetRowCount - 1` (not `rowCount - 1`) as the upper bound.
|
|
459
|
+
// BaseGrid is fed `sheetRowCount = rowCount + 1` so index 0 can hold
|
|
460
|
+
// the column-header row; data rows shift to 1..rowCount. Capping at
|
|
461
|
+
// `rowCount - 1` here drops the last data row from the visible
|
|
462
|
+
// ranges — BaseGrid is told the slot exists but `getVisibleRowIndices`
|
|
463
|
+
// never emits it, so the renderer skips it and selections that clamp
|
|
464
|
+
// to that index hang in empty space below the last painted row.
|
|
465
|
+
if (hiddenRows.length === 0) {
|
|
466
|
+
return [{ start: 0, end: sheetRowCount - 1 }];
|
|
467
|
+
}
|
|
468
|
+
// Build visible ranges from gaps between hidden rows
|
|
469
|
+
var ranges = [];
|
|
470
|
+
var prevEnd = -1;
|
|
471
|
+
try {
|
|
472
|
+
for (var hiddenRows_1 = tslib_1.__values(hiddenRows), hiddenRows_1_1 = hiddenRows_1.next(); !hiddenRows_1_1.done; hiddenRows_1_1 = hiddenRows_1.next()) {
|
|
473
|
+
var hiddenRow = hiddenRows_1_1.value;
|
|
474
|
+
if (hiddenRow > prevEnd + 1) {
|
|
475
|
+
ranges.push({ start: prevEnd + 1, end: hiddenRow - 1 });
|
|
476
|
+
}
|
|
477
|
+
prevEnd = hiddenRow;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
481
|
+
finally {
|
|
482
|
+
try {
|
|
483
|
+
if (hiddenRows_1_1 && !hiddenRows_1_1.done && (_d = hiddenRows_1.return)) _d.call(hiddenRows_1);
|
|
484
|
+
}
|
|
485
|
+
finally { if (e_7) throw e_7.error; }
|
|
486
|
+
}
|
|
487
|
+
// Add final range if there are visible rows after the last hidden row
|
|
488
|
+
if (prevEnd < sheetRowCount - 1) {
|
|
489
|
+
ranges.push({ start: prevEnd + 1, end: sheetRowCount - 1 });
|
|
490
|
+
}
|
|
491
|
+
return ranges;
|
|
492
|
+
}, [hostHiddenRowRanges, rowMetadata, sheetRowCount]);
|
|
493
|
+
/**
|
|
494
|
+
* The pivot table (if any) whose output range covers a cell on the
|
|
495
|
+
* given sheet. Used to make pivot output read-only and to offer the
|
|
496
|
+
* drill-down context-menu action.
|
|
497
|
+
*/
|
|
498
|
+
var getPivotTableAtCell = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
499
|
+
return pivotTables === null || pivotTables === void 0 ? void 0 : pivotTables.find(function (pv) {
|
|
500
|
+
var _a;
|
|
501
|
+
return ((_a = pv.pivotRange) === null || _a === void 0 ? void 0 : _a.sheetId) === sheetId &&
|
|
502
|
+
(0, grid_4.isCellWithinBounds)({ rowIndex: rowIndex, columnIndex: columnIndex }, pv.pivotRange);
|
|
503
|
+
});
|
|
504
|
+
}, [pivotTables]);
|
|
505
|
+
/**
|
|
506
|
+
* Worksheet-protection lookup, identity-stable so it can ride the grid
|
|
507
|
+
* context without churning it on re-renders.
|
|
508
|
+
*/
|
|
509
|
+
var getSheetProtectionStable = (0, use_callback_ref_1.useCallbackRef)(getSheetProtection);
|
|
510
|
+
/**
|
|
511
|
+
* Check if the cell can be edited
|
|
512
|
+
*/
|
|
513
|
+
var canEditCell = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (sheetId, cell) {
|
|
514
|
+
var _a;
|
|
515
|
+
// Readonly mode
|
|
516
|
+
if (readonly) {
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
var rowIndex = cell.rowIndex, columnIndex = cell.columnIndex;
|
|
520
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
// Pivot output is read-only in Excel — you can't type into a
|
|
524
|
+
// pivot cell. Treat every cell inside a pivot range as
|
|
525
|
+
// non-editable; mutations happen through the pivot editor.
|
|
526
|
+
if (getPivotTableAtCell(sheetId, rowIndex, columnIndex)) {
|
|
527
|
+
return false;
|
|
528
|
+
}
|
|
529
|
+
// Excel worksheet protection: while `<sheetProtection sheet>` is
|
|
530
|
+
// active, LOCKED cells refuse edits — a cell is locked unless its
|
|
531
|
+
// `protection.locked` is `false` (Excel's default) — and unlocked
|
|
532
|
+
// cells stay editable.
|
|
533
|
+
var lockedBySheetProtection = (0, validation_1.isCellLockedUnderProtection)(getSheetProtection === null || getSheetProtection === void 0 ? void 0 : getSheetProtection(sheetId), (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.protection);
|
|
534
|
+
var canEdit = !lockedBySheetProtection &&
|
|
535
|
+
(protectedRanges
|
|
536
|
+
? !(0, validation_1.isProtectedCell)(sheetId, cell, protectedRanges)
|
|
537
|
+
: true);
|
|
538
|
+
// User is trying to edit a protected cell
|
|
539
|
+
if (!canEdit) {
|
|
540
|
+
onRequestEditProtectedRange === null || onRequestEditProtectedRange === void 0 ? void 0 : onRequestEditProtectedRange(sheetId, cell);
|
|
541
|
+
}
|
|
542
|
+
return canEdit;
|
|
543
|
+
}, [
|
|
544
|
+
readonly,
|
|
545
|
+
protectedRanges,
|
|
546
|
+
getSheetProtection,
|
|
547
|
+
getCellData,
|
|
548
|
+
isRowHeader,
|
|
549
|
+
isColumnHeader,
|
|
550
|
+
onRequestEditProtectedRange,
|
|
551
|
+
getPivotTableAtCell,
|
|
552
|
+
]));
|
|
553
|
+
/**
|
|
554
|
+
* Can edit sheet
|
|
555
|
+
*/
|
|
556
|
+
var isSheetProtected = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (sheetId) {
|
|
557
|
+
// Protected sheet
|
|
558
|
+
if (readonly) {
|
|
559
|
+
return true;
|
|
560
|
+
}
|
|
561
|
+
return (0, validation_1.isProtectedSheet)(sheetId, protectedRanges !== null && protectedRanges !== void 0 ? protectedRanges : undefined);
|
|
562
|
+
}, [protectedRanges, readonly]));
|
|
563
|
+
/**
|
|
564
|
+
* Workbook-level structural protection. Readonly mode implies
|
|
565
|
+
* workbook protection too — nothing structural should mutate.
|
|
566
|
+
*/
|
|
567
|
+
var isWorkbookProtected = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () { return readonly || isWorkbookProtectedProp; }, [readonly, isWorkbookProtectedProp]));
|
|
568
|
+
// Active sheet tables
|
|
569
|
+
var activeTables = (0, react_1.useMemo)(function () { return tables === null || tables === void 0 ? void 0 : tables.filter(function (table) { return table.sheetId === sheetId; }); }, [tables, sheetId]);
|
|
570
|
+
/**
|
|
571
|
+
* Get filter header cells for both
|
|
572
|
+
* basicFilter + tables
|
|
573
|
+
*/
|
|
574
|
+
var tableHeaderCells = (0, react_1.useMemo)(function () {
|
|
575
|
+
return (0, helpers_1.getTableHeaderCells)(activeTables, basicFilter);
|
|
576
|
+
}, [activeTables, basicFilter]);
|
|
577
|
+
/**
|
|
578
|
+
* Retrieve banded cells
|
|
579
|
+
*/
|
|
580
|
+
var bandedCells = (0, react_1.useMemo)(function () {
|
|
581
|
+
return (0, banded_ranges_1.getBandedCells)((bandedRanges !== null && bandedRanges !== void 0 ? bandedRanges : undefined) || [], theme, sheetId, isHiddenRow, isHiddenColumn);
|
|
582
|
+
}, [bandedRanges, theme, sheetId, isHiddenRow, isHiddenColumn]);
|
|
583
|
+
/**
|
|
584
|
+
* Focus active editor
|
|
585
|
+
*/
|
|
586
|
+
var focusActiveEditor = (0, react_1.useCallback)(function (moveSelectionToEnd) {
|
|
587
|
+
if (moveSelectionToEnd === void 0) { moveSelectionToEnd = true; }
|
|
588
|
+
if (!activeEditor) {
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
// Slate editor looses focus on Formula bar input otherwise
|
|
592
|
+
// Edit: Remove scheduleNormalPriorityCallback(() => {
|
|
593
|
+
activeEditor === null || activeEditor === void 0 ? void 0 : activeEditor.focus(moveSelectionToEnd);
|
|
594
|
+
}, [activeEditor]);
|
|
595
|
+
/**
|
|
596
|
+
* Scroll to cell in the grid
|
|
597
|
+
* @param cell
|
|
598
|
+
* @returns
|
|
599
|
+
*/
|
|
600
|
+
var scrollToCell = (0, react_1.useCallback)(function (cell, align) {
|
|
601
|
+
var _a;
|
|
602
|
+
lastScheduledScrollRef.current = Date.now();
|
|
603
|
+
(_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.scrollToCell(cell, align);
|
|
604
|
+
}, []);
|
|
605
|
+
/**
|
|
606
|
+
* Scroll to bottom of the sheet
|
|
607
|
+
*/
|
|
608
|
+
var scrollToBottom = (0, react_1.useCallback)(function () {
|
|
609
|
+
var _a;
|
|
610
|
+
(_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.scrollToBottom();
|
|
611
|
+
}, []);
|
|
612
|
+
/**
|
|
613
|
+
* Get current grid ref
|
|
614
|
+
*/
|
|
615
|
+
var getGridRef = (0, react_1.useCallback)(function () { return gridRef.current; }, []);
|
|
616
|
+
/**
|
|
617
|
+
* Redraws a grid
|
|
618
|
+
*/
|
|
619
|
+
var redrawGrid = (0, react_1.useCallback)(function () {
|
|
620
|
+
var _a;
|
|
621
|
+
(_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.redrawGrid();
|
|
622
|
+
}, []);
|
|
623
|
+
/**
|
|
624
|
+
* Scroll to a portion of the grid
|
|
625
|
+
*/
|
|
626
|
+
var scrollTo = (0, react_1.useCallback)(function (scrollCoords, immediate) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo(scrollCoords, immediate); }, []);
|
|
627
|
+
/**
|
|
628
|
+
* Get Absolute position (to document)
|
|
629
|
+
*/
|
|
630
|
+
var getAbsolutePositionFromOffset = (0, react_1.useCallback)(function (x, y) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getAbsolutePositionFromOffset(x, y); }, []);
|
|
631
|
+
/**
|
|
632
|
+
* Get row offset
|
|
633
|
+
*/
|
|
634
|
+
var getRowOffset = (0, react_1.useCallback)(function (rowIndex) { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getRowOffset(rowIndex)) !== null && _b !== void 0 ? _b : 0; }, []);
|
|
635
|
+
/**
|
|
636
|
+
* Get column offset
|
|
637
|
+
*/
|
|
638
|
+
var getColumnOffset = (0, react_1.useCallback)(function (columnIndex) { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getColumnOffset(columnIndex)) !== null && _b !== void 0 ? _b : 0; }, []);
|
|
639
|
+
// Handle text overflow
|
|
640
|
+
var handleOverflow = (0, react_1.useCallback)(function (rowIndex, columnIndex, overflow) {
|
|
641
|
+
var _a, _b;
|
|
642
|
+
var id = (0, grid_5.cellIdentifier)(rowIndex, columnIndex);
|
|
643
|
+
var map = overflowMapRef.current;
|
|
644
|
+
var current = (_b = (_a = map.get(id)) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
|
|
645
|
+
if (current !== overflow) {
|
|
646
|
+
if (overflow === 0) {
|
|
647
|
+
map.delete(id);
|
|
648
|
+
}
|
|
649
|
+
else {
|
|
650
|
+
// Only fetch column offset when the overflow state *changes*, not on every scroll
|
|
651
|
+
var cellX = getColumnOffset(columnIndex);
|
|
652
|
+
map.set(id, { width: overflow, x: cellX });
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}, [getColumnOffset]);
|
|
656
|
+
var mergedCellMap = (0, react_1.useMemo)(function () {
|
|
657
|
+
var e_8, _a;
|
|
658
|
+
var mergedCellMap = new Map();
|
|
659
|
+
if (merges) {
|
|
660
|
+
for (var i = 0; i < merges.length; i++) {
|
|
661
|
+
var bounds = merges[i];
|
|
662
|
+
try {
|
|
663
|
+
for (var _b = (e_8 = void 0, tslib_1.__values((0, grid_3.getBoundedCells)(bounds))), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
664
|
+
var cell = _c.value;
|
|
665
|
+
mergedCellMap.set(cell, bounds);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
669
|
+
finally {
|
|
670
|
+
try {
|
|
671
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
672
|
+
}
|
|
673
|
+
finally { if (e_8) throw e_8.error; }
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
return mergedCellMap;
|
|
678
|
+
}, [merges]);
|
|
679
|
+
/**
|
|
680
|
+
* Check if a cell is merged cell
|
|
681
|
+
*/
|
|
682
|
+
var isMergedCell = (0, react_1.useCallback)(function (_a) {
|
|
683
|
+
var rowIndex = _a.rowIndex, columnIndex = _a.columnIndex;
|
|
684
|
+
return mergedCellMap.has((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
685
|
+
}, [mergedCellMap]);
|
|
686
|
+
/**
|
|
687
|
+
* Get cell bounds
|
|
688
|
+
* @param cell
|
|
689
|
+
* @returns
|
|
690
|
+
*/
|
|
691
|
+
var getCellBounds = (0, react_1.useCallback)(function (_a, spanMerges) {
|
|
692
|
+
var rowIndex = _a.rowIndex, columnIndex = _a.columnIndex;
|
|
693
|
+
if (spanMerges === void 0) { spanMerges = true; }
|
|
694
|
+
if (spanMerges) {
|
|
695
|
+
var isMerged = isMergedCell({ rowIndex: rowIndex, columnIndex: columnIndex });
|
|
696
|
+
if (isMerged)
|
|
697
|
+
return mergedCellMap.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
698
|
+
}
|
|
699
|
+
return {
|
|
700
|
+
startRowIndex: rowIndex,
|
|
701
|
+
startColumnIndex: columnIndex,
|
|
702
|
+
endColumnIndex: columnIndex,
|
|
703
|
+
endRowIndex: rowIndex,
|
|
704
|
+
};
|
|
705
|
+
// gridRef.current?.getCellBounds(cell) ?? convertCellToRange(cell),
|
|
706
|
+
}, [mergedCellMap, isMergedCell]);
|
|
707
|
+
/* Get viewport of the grid */
|
|
708
|
+
var getViewPort = (0, react_1.useCallback)(function () {
|
|
709
|
+
var _a, _b;
|
|
710
|
+
return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getViewPort()) !== null && _b !== void 0 ? _b : {
|
|
711
|
+
rowStartIndex: 0,
|
|
712
|
+
rowStopIndex: 0,
|
|
713
|
+
columnStartIndex: 0,
|
|
714
|
+
columnStopIndex: 0,
|
|
715
|
+
visibleRowStartIndex: 0,
|
|
716
|
+
visibleRowStopIndex: 0,
|
|
717
|
+
visibleColumnStartIndex: 0,
|
|
718
|
+
visibleColumnStopIndex: 0,
|
|
719
|
+
};
|
|
720
|
+
}, [scale]);
|
|
721
|
+
/**
|
|
722
|
+
* Get cell coordinates from x and y position
|
|
723
|
+
* @param x
|
|
724
|
+
* @param y
|
|
725
|
+
* @returns
|
|
726
|
+
*/
|
|
727
|
+
var getCellCoordsFromOffset = (0, react_1.useCallback)(function (x, y, includeFrozen) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getCellCoordsFromOffset(x, y, includeFrozen); }, [scale]);
|
|
728
|
+
/**
|
|
729
|
+
* Get cells coords
|
|
730
|
+
* caters to merged cells
|
|
731
|
+
*/
|
|
732
|
+
var getActualCellCoords = (0, react_1.useCallback)(function (coords) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getActualCellCoords(coords); }, [scale]);
|
|
733
|
+
/**
|
|
734
|
+
* Get cell offset from cell coords. Readonly mode, so
|
|
735
|
+
* lastMeasuredColumnIndex or lastMeasuredRowIndex will
|
|
736
|
+
* not get updated
|
|
737
|
+
* @param cell
|
|
738
|
+
* @returns
|
|
739
|
+
*/
|
|
740
|
+
var getCellOffsetFromCoords = (0, react_1.useCallback)(function (cell) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getCellOffsetFromCoords(cell, true); }, [scale]);
|
|
741
|
+
/**
|
|
742
|
+
* Canvas grid keeps track of lastMeasuredColumnIndex and
|
|
743
|
+
* lastMeasuredRowIndex so that it does not recalc grid
|
|
744
|
+
* dimension on every render
|
|
745
|
+
*/
|
|
746
|
+
var resetLastMeasuredIndices = (0, react_1.useCallback)(function (cell) { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndices(cell, false); }, [scale]);
|
|
747
|
+
/**
|
|
748
|
+
* Focus sheet
|
|
749
|
+
*/
|
|
750
|
+
var focusSheet = (0, use_raf_1.useRaf)(function () {
|
|
751
|
+
// Only suppress refocus when we're certain focus moved to a focusable
|
|
752
|
+
// element outside the grid (e.g. another asset pane in a split view).
|
|
753
|
+
// Mirrors the relatedTarget-outside-grid guard in handleEditorBlur. A
|
|
754
|
+
// user gesture on the grid focuses the tabIndex=0 container first, so
|
|
755
|
+
// this only suppresses render-driven refocus; a null container ref
|
|
756
|
+
// (mid mount/unmount) falls through to the original focus behavior.
|
|
757
|
+
var activeElement = grid_2.canUseDOM ? document.activeElement : null;
|
|
758
|
+
var gridContainer = gridContainerRef.current;
|
|
759
|
+
if (activeElement &&
|
|
760
|
+
activeElement !== document.body &&
|
|
761
|
+
gridContainer &&
|
|
762
|
+
!gridContainer.contains(activeElement)) {
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
if (!activeEditor || activeEditor === cellEditorInstance) {
|
|
766
|
+
cellEditorInstance === null || cellEditorInstance === void 0 ? void 0 : cellEditorInstance.focus();
|
|
767
|
+
}
|
|
768
|
+
}, [activeEditor, cellEditorInstance]);
|
|
769
|
+
/**
|
|
770
|
+
* Canvas layers
|
|
771
|
+
*/
|
|
772
|
+
var getCanvasLayers = (0, react_1.useCallback)(function () { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.stage) === null || _b === void 0 ? void 0 : _b.getLayers(); }, []);
|
|
773
|
+
/**
|
|
774
|
+
* Row Header canvas layer layers
|
|
775
|
+
*/
|
|
776
|
+
var getRowHeaderCanvasLayer = (0, react_1.useCallback)(function () { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.rowHeaderStage) === null || _b === void 0 ? void 0 : _b.getLayers(); }, []);
|
|
777
|
+
/**
|
|
778
|
+
* Column Header canvas layer layers
|
|
779
|
+
*/
|
|
780
|
+
var getColumnHeaderCanvasLayer = (0, react_1.useCallback)(function () { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.columnHeaderStage) === null || _b === void 0 ? void 0 : _b.getLayers(); }, []);
|
|
781
|
+
/**
|
|
782
|
+
* Get relative position from
|
|
783
|
+
* position offset
|
|
784
|
+
*/
|
|
785
|
+
var getRelativePositionFromOffset = (0, react_1.useCallback)(function (x, y) {
|
|
786
|
+
var _a;
|
|
787
|
+
return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getRelativePositionFromOffset(x, y);
|
|
788
|
+
}, []);
|
|
789
|
+
/**
|
|
790
|
+
* Get scroll position
|
|
791
|
+
* @returns ScrollCoords
|
|
792
|
+
*/
|
|
793
|
+
var getScrollPosition = (0, react_1.useCallback)(function () { var _a, _b; return (_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getScrollPosition()) !== null && _b !== void 0 ? _b : config_1.DEFAULT_SCROLL_POSITION; }, []);
|
|
794
|
+
// Does the column contains a table
|
|
795
|
+
var columnContainsTable = (0, react_1.useCallback)(function (columnIndex) {
|
|
796
|
+
var _a = tslib_1.__read(tableHeaderCells, 2), _ = _a[0], tableColumnHeaderIds = _a[1];
|
|
797
|
+
return tableColumnHeaderIds.get(columnIndex);
|
|
798
|
+
}, [tableHeaderCells]);
|
|
799
|
+
// Does the row contains a table
|
|
800
|
+
var rowsContainsTable = (0, react_1.useCallback)(function (rowIndex) {
|
|
801
|
+
var _a = tslib_1.__read(tableHeaderCells, 3), _ = _a[0], tableRowHeaderIds = _a[2];
|
|
802
|
+
return tableRowHeaderIds.get(rowIndex);
|
|
803
|
+
}, [tableHeaderCells]);
|
|
804
|
+
// Is table header
|
|
805
|
+
var isTableHeader = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
806
|
+
var _a = tslib_1.__read(tableHeaderCells, 1), headerCells = _a[0];
|
|
807
|
+
return headerCells.has((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
808
|
+
}, [tableHeaderCells]);
|
|
809
|
+
// Is table header filter active
|
|
810
|
+
var isTableHeaderFilterActive = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
811
|
+
var _a;
|
|
812
|
+
var _b = tslib_1.__read(tableHeaderCells, 1), headerCells = _b[0];
|
|
813
|
+
return (_a = headerCells.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex))) === null || _a === void 0 ? void 0 : _a.isFilterActive;
|
|
814
|
+
}, [tableHeaderCells]);
|
|
815
|
+
// Is table header filter active
|
|
816
|
+
var getTableHeaderSortOrder = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
817
|
+
var _a;
|
|
818
|
+
var _b = tslib_1.__read(tableHeaderCells, 1), headerCells = _b[0];
|
|
819
|
+
return (_a = headerCells.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex))) === null || _a === void 0 ? void 0 : _a.sortOrder;
|
|
820
|
+
}, [tableHeaderCells]);
|
|
821
|
+
// Is calculated column header
|
|
822
|
+
var isCalculatedColumnHeader = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
823
|
+
var _a = tslib_1.__read(tableHeaderCells, 4), calculatedColumnHeaders = _a[3];
|
|
824
|
+
return calculatedColumnHeaders.has((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
825
|
+
}, [tableHeaderCells]);
|
|
826
|
+
// Check if table header is themed
|
|
827
|
+
// So it will not be displayed in bold font
|
|
828
|
+
var isTableHeaderThemed = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
829
|
+
var _a = tslib_1.__read(tableHeaderCells, 1), headerCells = _a[0];
|
|
830
|
+
var cell = headerCells.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
831
|
+
return (cell === null || cell === void 0 ? void 0 : cell.theme) && (cell === null || cell === void 0 ? void 0 : cell.theme) !== "None";
|
|
832
|
+
}, [tableHeaderCells]);
|
|
833
|
+
// Is Filter icon visible
|
|
834
|
+
var isTableFilterVisible = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
835
|
+
var _a;
|
|
836
|
+
var _b = tslib_1.__read(tableHeaderCells, 1), headerCells = _b[0];
|
|
837
|
+
return showFilterIcon
|
|
838
|
+
? (_a = headerCells.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex))) === null || _a === void 0 ? void 0 : _a.filterButton
|
|
839
|
+
: false;
|
|
840
|
+
}, [tableHeaderCells, showFilterIcon]);
|
|
841
|
+
// Frozen row
|
|
842
|
+
var isFrozenRow = (0, react_1.useCallback)(function (rowIndex) { return rowIndex < frozenRows; }, [frozenRows]);
|
|
843
|
+
// Frozen column
|
|
844
|
+
var isFrozenColumn = (0, react_1.useCallback)(function (columnIndex) { return columnIndex < frozenColumns; }, [frozenColumns]);
|
|
845
|
+
/**
|
|
846
|
+
* Get hyperlink of a cell
|
|
847
|
+
*/
|
|
848
|
+
var getCellMetaType = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
849
|
+
var _a;
|
|
850
|
+
return (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.metaType;
|
|
851
|
+
}, [getCellData]);
|
|
852
|
+
/**
|
|
853
|
+
* Get hyperlink of a cell
|
|
854
|
+
*/
|
|
855
|
+
var getHyperlink = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
856
|
+
var _a, _b;
|
|
857
|
+
return ((_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.hyperlink) !== null && _b !== void 0 ? _b : undefined);
|
|
858
|
+
}, [getCellData]);
|
|
859
|
+
/**
|
|
860
|
+
* Get value entered by the user in a cell
|
|
861
|
+
*/
|
|
862
|
+
var getUserEnteredValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
863
|
+
return getUserEnteredExtendedValue
|
|
864
|
+
? getUserEnteredExtendedValue(sheetId, rowIndex, columnIndex)
|
|
865
|
+
: (0, helpers_1.getCellUserEnteredValue)(getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex));
|
|
866
|
+
}, [getUserEnteredExtendedValue, getCellData]);
|
|
867
|
+
/**
|
|
868
|
+
* Get boolean value
|
|
869
|
+
*/
|
|
870
|
+
var getBooleanValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
871
|
+
return (0, helpers_1.getExtendedValueBool)(getUserEnteredValue === null || getUserEnteredValue === void 0 ? void 0 : getUserEnteredValue(sheetId, rowIndex, columnIndex));
|
|
872
|
+
}, [getUserEnteredValue]);
|
|
873
|
+
/**
|
|
874
|
+
* Get formula value entered by user
|
|
875
|
+
*/
|
|
876
|
+
var getFormulaValue = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
877
|
+
return (0, helpers_1.getExtendedValueFormula)(getUserEnteredValue === null || getUserEnteredValue === void 0 ? void 0 : getUserEnteredValue(sheetId, rowIndex, columnIndex));
|
|
878
|
+
}, [getUserEnteredValue]));
|
|
879
|
+
/**
|
|
880
|
+
* Get cell display value
|
|
881
|
+
*/
|
|
882
|
+
var getFormattedValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
883
|
+
// Row header (~1,2)
|
|
884
|
+
if (isRowHeader(columnIndex)) {
|
|
885
|
+
return getRowHeaderText(rowIndex);
|
|
886
|
+
}
|
|
887
|
+
// Column header (~A,B)
|
|
888
|
+
if (isColumnHeader(rowIndex)) {
|
|
889
|
+
return getColumnHeaderText(columnIndex);
|
|
890
|
+
}
|
|
891
|
+
if (showFormulas && !protectFormulas) {
|
|
892
|
+
var formulaValue = getFormulaValue(sheetId, rowIndex, columnIndex);
|
|
893
|
+
if (formulaValue) {
|
|
894
|
+
return formulaValue;
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
var formattedValue = getFormattedValueProp
|
|
898
|
+
? getFormattedValueProp === null || getFormattedValueProp === void 0 ? void 0 : getFormattedValueProp(sheetId, rowIndex, columnIndex)
|
|
899
|
+
: (0, helpers_1.getCellFormattedValue)(getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex));
|
|
900
|
+
// Temporary workaround for `richText`
|
|
901
|
+
if (!(0, utils_1.isNil)(formattedValue) && typeof formattedValue === "object") {
|
|
902
|
+
return (0, ui_1.tryParseRichText)(formattedValue);
|
|
903
|
+
}
|
|
904
|
+
return formattedValue !== null && formattedValue !== void 0 ? formattedValue : undefined;
|
|
905
|
+
}, [
|
|
906
|
+
getFormattedValueProp,
|
|
907
|
+
getCellData,
|
|
908
|
+
getFormulaValue,
|
|
909
|
+
showFormulas,
|
|
910
|
+
protectFormulas,
|
|
911
|
+
isRowHeader,
|
|
912
|
+
isColumnHeader,
|
|
913
|
+
getRowHeaderText,
|
|
914
|
+
getColumnHeaderText,
|
|
915
|
+
]);
|
|
916
|
+
/**
|
|
917
|
+
* Get information about cell grouping
|
|
918
|
+
*/
|
|
919
|
+
var getCellGroupingInfo = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
920
|
+
var _a, _b;
|
|
921
|
+
var cellData = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex);
|
|
922
|
+
return [
|
|
923
|
+
(_a = cellData === null || cellData === void 0 ? void 0 : cellData.expandable) !== null && _a !== void 0 ? _a : undefined,
|
|
924
|
+
(_b = cellData === null || cellData === void 0 ? void 0 : cellData.expanded) !== null && _b !== void 0 ? _b : undefined,
|
|
925
|
+
];
|
|
926
|
+
}, [getCellData]);
|
|
927
|
+
/**
|
|
928
|
+
* Get effective value of a cell
|
|
929
|
+
*/
|
|
930
|
+
var getEffectiveValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
931
|
+
return getEffectiveExtendedValue
|
|
932
|
+
? getEffectiveExtendedValue(sheetId, rowIndex, columnIndex)
|
|
933
|
+
: (0, helpers_1.getCellEffectiveValue)(getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex));
|
|
934
|
+
}, [getEffectiveExtendedValue, getCellData]);
|
|
935
|
+
/**
|
|
936
|
+
* Get validation value of a cell
|
|
937
|
+
*/
|
|
938
|
+
var getFormulaValidationValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex, ruleId) {
|
|
939
|
+
var _a, _b;
|
|
940
|
+
return (_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.conditionalFormattingResultById) === null || _b === void 0 ? void 0 : _b[ruleId];
|
|
941
|
+
}, [getCellData]);
|
|
942
|
+
/**
|
|
943
|
+
* Get formula error value entered by user
|
|
944
|
+
*/
|
|
945
|
+
var getErrorValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
946
|
+
return (0, helpers_1.getExtendedValueError)(getEffectiveValue === null || getEffectiveValue === void 0 ? void 0 : getEffectiveValue(sheetId, rowIndex, columnIndex));
|
|
947
|
+
}, [getEffectiveValue]);
|
|
948
|
+
/**
|
|
949
|
+
* Get notes. The host's `getNote` wins when provided — engines that keep
|
|
950
|
+
* notes off the cell data (rnc serves notes over their own channel) have
|
|
951
|
+
* no `.note` on `getCellData` cells to fall back to.
|
|
952
|
+
*/
|
|
953
|
+
var getNote = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
954
|
+
var _a, _b, _c;
|
|
955
|
+
return ((_c = (_a = getNoteProp === null || getNoteProp === void 0 ? void 0 : getNoteProp(sheetId, rowIndex, columnIndex)) !== null && _a !== void 0 ? _a : (_b = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _b === void 0 ? void 0 : _b.note) !== null && _c !== void 0 ? _c : undefined);
|
|
956
|
+
}, [getNoteProp, getCellData]);
|
|
957
|
+
/**
|
|
958
|
+
* Get comment
|
|
959
|
+
*/
|
|
960
|
+
var getComment = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
961
|
+
var _a, _b;
|
|
962
|
+
return ((_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.commentThreadId) !== null && _b !== void 0 ? _b : undefined);
|
|
963
|
+
}, [getCellData]);
|
|
964
|
+
/**
|
|
965
|
+
* Get citation
|
|
966
|
+
*/
|
|
967
|
+
var getCitation = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
968
|
+
var _a, _b;
|
|
969
|
+
return ((_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.citationId) !== null && _b !== void 0 ? _b : undefined);
|
|
970
|
+
}, [getCellData]);
|
|
971
|
+
/**
|
|
972
|
+
* Get Image url in a cell
|
|
973
|
+
* Users can add images in a cell using imageUrl property
|
|
974
|
+
*/
|
|
975
|
+
var getCellImageUrl = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
976
|
+
var _a, _b;
|
|
977
|
+
return ((_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.imageUrl) !== null && _b !== void 0 ? _b : undefined);
|
|
978
|
+
}, [getCellData]);
|
|
979
|
+
/**
|
|
980
|
+
* Returns cellFormat of a cell
|
|
981
|
+
* cellFormat = userEnteredFormat + formatFromFormulaCalculation
|
|
982
|
+
* Readable field.
|
|
983
|
+
*
|
|
984
|
+
* Use userEnteredFormat for write and generate effectiveFormat
|
|
985
|
+
*/
|
|
986
|
+
var getCellFormat = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
987
|
+
if (getEffectiveFormat) {
|
|
988
|
+
return getEffectiveFormat === null || getEffectiveFormat === void 0 ? void 0 : getEffectiveFormat(sheetId, rowIndex, columnIndex);
|
|
989
|
+
}
|
|
990
|
+
// For backwards compatiblity
|
|
991
|
+
var cellData = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex);
|
|
992
|
+
var effectiveFormat = (0, utils_1.getCellEffectiveFormat)(cellData);
|
|
993
|
+
if (!(0, helpers_1.isStyleReference)(effectiveFormat)) {
|
|
994
|
+
return effectiveFormat;
|
|
995
|
+
}
|
|
996
|
+
return undefined;
|
|
997
|
+
}, [getEffectiveFormat, getCellData]);
|
|
998
|
+
/**
|
|
999
|
+
* Get cell indent
|
|
1000
|
+
*/
|
|
1001
|
+
var getCellIndent = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1002
|
+
var _a, _b;
|
|
1003
|
+
var fmt = getCellFormat(sheetId, rowIndex, columnIndex);
|
|
1004
|
+
var indent = ((_a = fmt === null || fmt === void 0 ? void 0 : fmt.indent) !== null && _a !== void 0 ? _a : 0) + ((_b = fmt === null || fmt === void 0 ? void 0 : fmt.relativeIndent) !== null && _b !== void 0 ? _b : 0);
|
|
1005
|
+
return indent || undefined;
|
|
1006
|
+
}, [getCellFormat]);
|
|
1007
|
+
/**
|
|
1008
|
+
* Check if a cell data is a number
|
|
1009
|
+
*/
|
|
1010
|
+
var isNumberValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1011
|
+
var _a;
|
|
1012
|
+
var cellFormat = getCellFormat === null || getCellFormat === void 0 ? void 0 : getCellFormat(sheetId, rowIndex, columnIndex);
|
|
1013
|
+
return !!((_a = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _a === void 0 ? void 0 : _a.type);
|
|
1014
|
+
}, [getCellFormat]);
|
|
1015
|
+
/**
|
|
1016
|
+
* Get value entered by the user in a cell
|
|
1017
|
+
* If its a formula cell, formulaValue is used
|
|
1018
|
+
* Order of retrieval
|
|
1019
|
+
* 1. formulaValue
|
|
1020
|
+
* 2. numberValue
|
|
1021
|
+
* 3. stringValue
|
|
1022
|
+
* 4. formattedValue
|
|
1023
|
+
* If number -> trim formatted value
|
|
1024
|
+
*/
|
|
1025
|
+
var getUserEnteredStringValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1026
|
+
var _a, _b;
|
|
1027
|
+
var formulaValue = getFormulaValue(sheetId, rowIndex, columnIndex);
|
|
1028
|
+
if (formulaValue && !protectFormulas) {
|
|
1029
|
+
return formulaValue;
|
|
1030
|
+
}
|
|
1031
|
+
var userEnteredValue = getUserEnteredValue(sheetId, rowIndex, columnIndex);
|
|
1032
|
+
// Look for sv
|
|
1033
|
+
var stringValue = (0, helpers_1.getExtendedValueString)(userEnteredValue);
|
|
1034
|
+
if (stringValue) {
|
|
1035
|
+
return stringValue;
|
|
1036
|
+
}
|
|
1037
|
+
// Check for date value
|
|
1038
|
+
var numberFormatType = (_b = (_a = getCellFormat(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.numberFormat) === null || _b === void 0 ? void 0 : _b.type;
|
|
1039
|
+
if (numberFormatType === "DATE" || numberFormatType === "DATE_TIME") {
|
|
1040
|
+
return getFormattedValue(sheetId, rowIndex, columnIndex);
|
|
1041
|
+
}
|
|
1042
|
+
// If the cell is of type number, fallback to number
|
|
1043
|
+
var numberValue = (0, helpers_1.getExtendedValueNumber)(userEnteredValue);
|
|
1044
|
+
if (!(0, utils_1.isNil)(numberValue)) {
|
|
1045
|
+
return String(numberValue);
|
|
1046
|
+
}
|
|
1047
|
+
// This is used for Array return values, which do not have
|
|
1048
|
+
// formula value or user entered value
|
|
1049
|
+
return getFormattedValue(sheetId, rowIndex, columnIndex);
|
|
1050
|
+
}, [
|
|
1051
|
+
getUserEnteredValue,
|
|
1052
|
+
getFormulaValue,
|
|
1053
|
+
getFormattedValue,
|
|
1054
|
+
getCellFormat,
|
|
1055
|
+
protectFormulas,
|
|
1056
|
+
]);
|
|
1057
|
+
// Add a stable reference to get userEnteredString value
|
|
1058
|
+
var getUserEnteredStringValueStable = (0, use_callback_ref_1.useCallbackRef)(getUserEnteredStringValue);
|
|
1059
|
+
/**
|
|
1060
|
+
* Get cell value used for validations
|
|
1061
|
+
*/
|
|
1062
|
+
var getValidationValue = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex, rule) {
|
|
1063
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1064
|
+
// Formula-backed rules use the custom formula path
|
|
1065
|
+
if (rule && (0, utils_1.isConditionalFormatFormulaRule)(rule)) {
|
|
1066
|
+
return getFormulaValidationValue(sheetId, rowIndex, columnIndex, rule.id);
|
|
1067
|
+
}
|
|
1068
|
+
var effectiveValue = getEffectiveValue(sheetId, rowIndex, columnIndex);
|
|
1069
|
+
if (((_b = (_a = rule === null || rule === void 0 ? void 0 : rule.booleanRule) === null || _a === void 0 ? void 0 : _a.condition) === null || _b === void 0 ? void 0 : _b.type) === "ERROR" ||
|
|
1070
|
+
((_d = (_c = rule === null || rule === void 0 ? void 0 : rule.booleanRule) === null || _c === void 0 ? void 0 : _c.condition) === null || _d === void 0 ? void 0 : _d.type) === "NOT_ERROR") {
|
|
1071
|
+
return (0, helpers_1.getExtendedValueError)(effectiveValue);
|
|
1072
|
+
}
|
|
1073
|
+
return ((_f = (_e = (0, helpers_1.getExtendedValueBool)(effectiveValue)) !== null && _e !== void 0 ? _e : (0, helpers_1.getExtendedValueNumber)(effectiveValue)) !== null && _f !== void 0 ? _f : (0, helpers_1.getExtendedValueString)(effectiveValue));
|
|
1074
|
+
}, [getEffectiveValue, getFormulaValidationValue]);
|
|
1075
|
+
/**
|
|
1076
|
+
* Touch support
|
|
1077
|
+
* Mainly for scrolling
|
|
1078
|
+
*/
|
|
1079
|
+
var _56 = (0, use_touch_1.useTouch)({
|
|
1080
|
+
scrollTo: scrollTo,
|
|
1081
|
+
scale: scale,
|
|
1082
|
+
onChangeScale: onChangeScale,
|
|
1083
|
+
}), onTouchStart = _56.onTouchStart, onDimensionsChange = _56.onDimensionsChange, scrollToTouchDevice = _56.scrollToTouchDevice, onAfterScrollToCell = _56.onAfterScrollToCell;
|
|
1084
|
+
/**
|
|
1085
|
+
* Conditional-formatting evaluation window: the padded, tile-quantized
|
|
1086
|
+
* viewport. The raw viewport lives in a ref (no render per scroll frame);
|
|
1087
|
+
* state only updates when a tile boundary is crossed, inside
|
|
1088
|
+
* `startTransition` so the CF recompute is low-priority and interruptible —
|
|
1089
|
+
* scrolling never blocks on it.
|
|
1090
|
+
*/
|
|
1091
|
+
var _57 = tslib_1.__read((0, react_1.useState)(cf_window_1.CF_INITIAL_WINDOW), 2), cfWindow = _57[0], setCfWindow = _57[1];
|
|
1092
|
+
var cfWindowRef = (0, react_1.useRef)(null);
|
|
1093
|
+
var handleViewPortChange = (0, react_1.useCallback)(function (viewport) {
|
|
1094
|
+
onViewPortChange === null || onViewPortChange === void 0 ? void 0 : onViewPortChange(viewport);
|
|
1095
|
+
if (!windowConditionalFormats)
|
|
1096
|
+
return;
|
|
1097
|
+
var next = (0, cf_window_1.cfWindowForViewport)(viewport);
|
|
1098
|
+
if (!(0, cf_window_1.isSameCfWindow)(cfWindowRef.current, next)) {
|
|
1099
|
+
cfWindowRef.current = next;
|
|
1100
|
+
(0, react_1.startTransition)(function () { return setCfWindow(next); });
|
|
1101
|
+
}
|
|
1102
|
+
}, [onViewPortChange, windowConditionalFormats]);
|
|
1103
|
+
/**
|
|
1104
|
+
* Conditional Styles that should be applied to cell
|
|
1105
|
+
*/
|
|
1106
|
+
var conditionalFormatByCell = (0, use_conditional_formatting_1.useConditionalFormatting)({
|
|
1107
|
+
locale: locale,
|
|
1108
|
+
sheetId: sheetId,
|
|
1109
|
+
conditionalFormats: conditionalFormats !== null && conditionalFormats !== void 0 ? conditionalFormats : undefined,
|
|
1110
|
+
getValidationValue: getValidationValue,
|
|
1111
|
+
isNumberValue: isNumberValue,
|
|
1112
|
+
theme: theme,
|
|
1113
|
+
getSheetRowCount: getSheetRowCount,
|
|
1114
|
+
getSheetColumnCount: getSheetColumnCount,
|
|
1115
|
+
window: windowConditionalFormats ? cfWindow : undefined,
|
|
1116
|
+
// Aggregate rules (TOP/BOTTOM-N, DUPLICATE/UNIQUE, above/below-average)
|
|
1117
|
+
// consume the engine's per-cell stamps when the host declares them.
|
|
1118
|
+
getConditionalFormatResult: engineConditionalFormatResults
|
|
1119
|
+
? getFormulaValidationValue
|
|
1120
|
+
: undefined,
|
|
1121
|
+
});
|
|
1122
|
+
/**
|
|
1123
|
+
* Get conditional format of a cell
|
|
1124
|
+
*/
|
|
1125
|
+
var getConditionalCellFormat = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1126
|
+
return conditionalFormatByCell.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
1127
|
+
}, [conditionalFormatByCell]);
|
|
1128
|
+
/**
|
|
1129
|
+
* Get conditional format of a cell
|
|
1130
|
+
*/
|
|
1131
|
+
var getBandedCellFormat = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1132
|
+
return bandedCells.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
1133
|
+
}, [bandedCells]);
|
|
1134
|
+
/**
|
|
1135
|
+
* Get data validation of a cell
|
|
1136
|
+
*/
|
|
1137
|
+
var getDataValidationRule = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1138
|
+
var _a;
|
|
1139
|
+
return getDataValidation
|
|
1140
|
+
? getDataValidation(sheetId, rowIndex, columnIndex)
|
|
1141
|
+
: (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.dataValidation;
|
|
1142
|
+
}, [getCellData, getDataValidation]);
|
|
1143
|
+
// Get default horizontal alignment
|
|
1144
|
+
var getDefaultHorizontalAlignment = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1145
|
+
var _a, _b;
|
|
1146
|
+
var isBoolean = !(0, utils_1.isNil)(getBooleanValue(sheetId, rowIndex, columnIndex));
|
|
1147
|
+
var errorValue = getErrorValue(sheetId, rowIndex, columnIndex);
|
|
1148
|
+
// A checkbox cell centers regardless of its VALUE (Google Sheets):
|
|
1149
|
+
// a blank checkbox (no `ue` at all) and a windowed host whose lean
|
|
1150
|
+
// read reconstructs the boolean as text both miss the `bv` probe.
|
|
1151
|
+
var isCheckbox = ((_b = (_a = getDataValidationRule(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.condition) === null || _b === void 0 ? void 0 : _b.type) === "BOOLEAN";
|
|
1152
|
+
var nv = (0, helpers_1.getExtendedValueNumber)(getEffectiveValue(sheetId, rowIndex, columnIndex));
|
|
1153
|
+
if (errorValue || isBoolean || isCheckbox) {
|
|
1154
|
+
return "center";
|
|
1155
|
+
}
|
|
1156
|
+
if (typeof nv !== "undefined") {
|
|
1157
|
+
return "right";
|
|
1158
|
+
}
|
|
1159
|
+
return undefined;
|
|
1160
|
+
}, [getBooleanValue, getDataValidationRule, getEffectiveValue, getErrorValue]);
|
|
1161
|
+
/**
|
|
1162
|
+
* Get format specified in the cellData = effectiveFormat + conditonalFormat
|
|
1163
|
+
* https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#effectiveFormat
|
|
1164
|
+
*
|
|
1165
|
+
* More work to be done with effectiveFormat
|
|
1166
|
+
* G and MS combines effectiveformat
|
|
1167
|
+
* effectiveFormat = cellFormat (effective + user entered + formula) + conditionalFormatting
|
|
1168
|
+
*
|
|
1169
|
+
* We are generating conditionalFormatting on the component level,
|
|
1170
|
+
*/
|
|
1171
|
+
var getEffectiveCellFormat = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1172
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1173
|
+
var cellFormat = getCellFormat(sheetId, rowIndex, columnIndex);
|
|
1174
|
+
var isHyperlink = Boolean(getHyperlink(sheetId, rowIndex, columnIndex));
|
|
1175
|
+
var conditionalCellFormat = getConditionalCellFormat(sheetId, rowIndex, columnIndex);
|
|
1176
|
+
var bandedCellFormat = getBandedCellFormat(sheetId, rowIndex, columnIndex);
|
|
1177
|
+
// Conditional format cell color for
|
|
1178
|
+
// light and dark themes
|
|
1179
|
+
var conditionalFormatColor = (conditionalCellFormat === null || conditionalCellFormat === void 0 ? void 0 : conditionalCellFormat.backgroundColor) &&
|
|
1180
|
+
!((_a = conditionalCellFormat === null || conditionalCellFormat === void 0 ? void 0 : conditionalCellFormat.textFormat) === null || _a === void 0 ? void 0 : _a.color)
|
|
1181
|
+
? (0, utils_1.getContrastColor)((0, themes_1.getStringifiedColor)(conditionalCellFormat.backgroundColor, theme), (0, themes_1.getStringifiedColor)({ theme: 1 }, theme), (0, themes_1.getStringifiedColor)({ theme: 1, tint: 1 }, theme))
|
|
1182
|
+
: undefined;
|
|
1183
|
+
// Excel / Google Sheets: a number-format pattern can carry per-section
|
|
1184
|
+
// color directives like `[Blue]#,##0.00;[Red]-#,##0.00;[Green]"zero";[Magenta]@`.
|
|
1185
|
+
// The section is picked by the effective value's sign / type — section
|
|
1186
|
+
// 3 (the `@` branch) applies to string values. Excel applies the
|
|
1187
|
+
// matched section's color OVER the cell's font color at display time
|
|
1188
|
+
// (only conditional-format font colors rank higher), so the resolved
|
|
1189
|
+
// color is layered on top of `uf.textFormat.color` after the merge
|
|
1190
|
+
// below — the import path stores the cell's real font color and relies
|
|
1191
|
+
// on this value-current resolution for `[Red]`-style display colors.
|
|
1192
|
+
//
|
|
1193
|
+
// Prefer the string branch when both are present so non-numeric text
|
|
1194
|
+
// picks the `@` section instead of a number section computed from a
|
|
1195
|
+
// coerced NaN.
|
|
1196
|
+
var numberFormatPattern = (_b = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _b === void 0 ? void 0 : _b.pattern;
|
|
1197
|
+
var effectiveValueForColor = numberFormatPattern
|
|
1198
|
+
? getEffectiveValue(sheetId, rowIndex, columnIndex)
|
|
1199
|
+
: undefined;
|
|
1200
|
+
var valueForColor = effectiveValueForColor
|
|
1201
|
+
? (_d = (_c = (0, helpers_1.getExtendedValueString)(effectiveValueForColor)) !== null && _c !== void 0 ? _c : (0, helpers_1.getExtendedValueNumber)(effectiveValueForColor)) !== null && _d !== void 0 ? _d : (0, helpers_1.getExtendedValueBool)(effectiveValueForColor)
|
|
1202
|
+
: undefined;
|
|
1203
|
+
var patternColor = numberFormatPattern && valueForColor !== undefined
|
|
1204
|
+
? (0, utils_1.ssfFormatColor)(numberFormatPattern, valueForColor)
|
|
1205
|
+
: undefined;
|
|
1206
|
+
// Final text format. Hyperlink cells auto-derive underline at paint
|
|
1207
|
+
// time — `uf.textFormat.underline` is merged on top below, so a user
|
|
1208
|
+
// who explicitly sets underline=false still wins.
|
|
1209
|
+
var defaultTextFormat = {
|
|
1210
|
+
bold: isTableHeader(rowIndex, columnIndex) &&
|
|
1211
|
+
isTableHeaderThemed(rowIndex, columnIndex)
|
|
1212
|
+
? true
|
|
1213
|
+
: undefined,
|
|
1214
|
+
fontFamily: theme.primaryFontFamily,
|
|
1215
|
+
color: isHyperlink
|
|
1216
|
+
? theme.themeColors.hyperlink
|
|
1217
|
+
: (_g = (_f = patternColor !== null && patternColor !== void 0 ? patternColor : (_e = bandedCellFormat === null || bandedCellFormat === void 0 ? void 0 : bandedCellFormat.textFormat) === null || _e === void 0 ? void 0 : _e.color) !== null && _f !== void 0 ? _f : conditionalFormatColor) !== null && _g !== void 0 ? _g : (0, themes_1.getStringifiedColor)(cellColor, theme),
|
|
1218
|
+
underline: isHyperlink ? true : undefined,
|
|
1219
|
+
};
|
|
1220
|
+
var mergedFormat = (0, merge_1.default)({
|
|
1221
|
+
textFormat: defaultTextFormat,
|
|
1222
|
+
}, (0, helpers_1.definedProps)(cellFormat), conditionalCellFormat);
|
|
1223
|
+
// Number-format section colors beat the cell's font color (Excel
|
|
1224
|
+
// parity), but never a conditional-format font color or the
|
|
1225
|
+
// hyperlink color.
|
|
1226
|
+
if (patternColor &&
|
|
1227
|
+
!isHyperlink &&
|
|
1228
|
+
!((_h = conditionalCellFormat === null || conditionalCellFormat === void 0 ? void 0 : conditionalCellFormat.textFormat) === null || _h === void 0 ? void 0 : _h.color)) {
|
|
1229
|
+
mergedFormat.textFormat = tslib_1.__assign(tslib_1.__assign({}, mergedFormat.textFormat), { color: patternColor });
|
|
1230
|
+
}
|
|
1231
|
+
return tslib_1.__assign(tslib_1.__assign({}, bandedCellFormat), mergedFormat);
|
|
1232
|
+
}, [
|
|
1233
|
+
getCellFormat,
|
|
1234
|
+
getConditionalCellFormat,
|
|
1235
|
+
getBandedCellFormat,
|
|
1236
|
+
getHyperlink,
|
|
1237
|
+
isTableHeader,
|
|
1238
|
+
isTableHeaderThemed,
|
|
1239
|
+
getEffectiveValue,
|
|
1240
|
+
theme,
|
|
1241
|
+
cellColor,
|
|
1242
|
+
]);
|
|
1243
|
+
/**
|
|
1244
|
+
* Get horizontal alignment of editor
|
|
1245
|
+
*/
|
|
1246
|
+
var getEditorHorizontalAlignment = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1247
|
+
var _a, _b, _c;
|
|
1248
|
+
var isFormula = !!getFormulaValue(sheetId, rowIndex, columnIndex);
|
|
1249
|
+
var isBoolean = !(0, utils_1.isNil)(getBooleanValue(sheetId, rowIndex, columnIndex));
|
|
1250
|
+
// Boolean cell: Center align text
|
|
1251
|
+
// Formula cell: Always left align text in editor
|
|
1252
|
+
return isFormula
|
|
1253
|
+
? "left"
|
|
1254
|
+
: isBoolean
|
|
1255
|
+
? "center"
|
|
1256
|
+
: (_c = (_b = (_a = getEffectiveCellFormat(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.horizontalAlignment) !== null && _b !== void 0 ? _b : getDefaultHorizontalAlignment(sheetId, rowIndex, columnIndex)) !== null && _c !== void 0 ? _c : config_1.CELL_HORIZONTAL_ALIGNMENT;
|
|
1257
|
+
}, [
|
|
1258
|
+
getFormulaValue,
|
|
1259
|
+
getBooleanValue,
|
|
1260
|
+
getEffectiveCellFormat,
|
|
1261
|
+
getDefaultHorizontalAlignment,
|
|
1262
|
+
]);
|
|
1263
|
+
// Check if we need to wrap a cell
|
|
1264
|
+
var shouldWrapCell = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1265
|
+
var _a;
|
|
1266
|
+
return (((_a = getEffectiveCellFormat(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.wrapStrategy) ===
|
|
1267
|
+
"wrap");
|
|
1268
|
+
}, [getEffectiveCellFormat]);
|
|
1269
|
+
/**
|
|
1270
|
+
* Get formatting applied to a cell
|
|
1271
|
+
*/
|
|
1272
|
+
var getTextFormat = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1273
|
+
var _a, _b;
|
|
1274
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
1275
|
+
return config_1.HEADER_TEXT_FORMAT;
|
|
1276
|
+
}
|
|
1277
|
+
return ((_b = (_a = getEffectiveCellFormat === null || getEffectiveCellFormat === void 0 ? void 0 : getEffectiveCellFormat(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.textFormat) !== null && _b !== void 0 ? _b : config_1.DEFAULT_TEXT_FORMAT);
|
|
1278
|
+
}, [getEffectiveCellFormat, isRowHeader, isColumnHeader]);
|
|
1279
|
+
/**
|
|
1280
|
+
* Get cell selections from structured tables
|
|
1281
|
+
*/
|
|
1282
|
+
var getSelectionFromTable = (0, use_structured_reference_selection_1.useOnStructuredReferenceSelection)({
|
|
1283
|
+
tables: tables !== null && tables !== void 0 ? tables : undefined,
|
|
1284
|
+
getSheetName: getSheetName,
|
|
1285
|
+
});
|
|
1286
|
+
// Build case-insensitive lookup map for O(1) named range access
|
|
1287
|
+
var namedRangeMap = (0, react_1.useMemo)(function () {
|
|
1288
|
+
var map = new Map();
|
|
1289
|
+
namedRanges === null || namedRanges === void 0 ? void 0 : namedRanges.forEach(function (range) {
|
|
1290
|
+
map.set(range.name.toLowerCase(), range);
|
|
1291
|
+
});
|
|
1292
|
+
return map;
|
|
1293
|
+
}, [namedRanges]);
|
|
1294
|
+
/**
|
|
1295
|
+
* Get cell selections from named ranges
|
|
1296
|
+
*/
|
|
1297
|
+
var getSelectionFromNamedRange = (0, react_1.useCallback)(function (variableName) {
|
|
1298
|
+
// O(1) hash lookup instead of O(n) linear search
|
|
1299
|
+
var namedRange = namedRangeMap.get(variableName.toLowerCase());
|
|
1300
|
+
// Only return selection for names with ranges
|
|
1301
|
+
if (namedRange === null || namedRange === void 0 ? void 0 : namedRange.range) {
|
|
1302
|
+
return {
|
|
1303
|
+
range: namedRange.range,
|
|
1304
|
+
sheetName: getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(namedRange.range.sheetId),
|
|
1305
|
+
};
|
|
1306
|
+
}
|
|
1307
|
+
// Get static or formula value
|
|
1308
|
+
var result = namedRange === null || namedRange === void 0 ? void 0 : namedRange.value;
|
|
1309
|
+
if (!(0, utils_1.isNil)(result)) {
|
|
1310
|
+
return result;
|
|
1311
|
+
}
|
|
1312
|
+
return undefined;
|
|
1313
|
+
}, [namedRangeMap, getSheetName]);
|
|
1314
|
+
/**
|
|
1315
|
+
* Create a tokenizer for Rich text editor
|
|
1316
|
+
*/
|
|
1317
|
+
var tokenizer = (0, use_create_formula_tokenizer_1.useCreateFormulaTokenizer)({
|
|
1318
|
+
getSelectionFromNamedRange: getSelectionFromNamedRange,
|
|
1319
|
+
getSelectionFromTable: getSelectionFromTable,
|
|
1320
|
+
editingCellCoordinate: editingCellCoordinate,
|
|
1321
|
+
sheetId: sheetId,
|
|
1322
|
+
activeCell: activeCell,
|
|
1323
|
+
tokenizer: defaultTokenizer,
|
|
1324
|
+
});
|
|
1325
|
+
// Helper function to convert a selection to readable selection address
|
|
1326
|
+
var _58 = tslib_1.__read((0, use_create_address_from_selection_1.useCreateAddressFromSelection)({
|
|
1327
|
+
sheetId: sheetId,
|
|
1328
|
+
rowCount: rowCount,
|
|
1329
|
+
columnCount: columnCount,
|
|
1330
|
+
tables: tables !== null && tables !== void 0 ? tables : undefined,
|
|
1331
|
+
namedRanges: namedRanges !== null && namedRanges !== void 0 ? namedRanges : undefined,
|
|
1332
|
+
merges: merges,
|
|
1333
|
+
}), 2), getAddressFromSelection = _58[0], getR1C1AddressFromSelection = _58[1];
|
|
1334
|
+
/**
|
|
1335
|
+
* Exports a data region as image
|
|
1336
|
+
*/
|
|
1337
|
+
var exportRange = (0, use_export_range_1.useExportRange)({
|
|
1338
|
+
sheetId: sheetId,
|
|
1339
|
+
cellBackgroundColor: cellBackgroundColor,
|
|
1340
|
+
gridLineWidth: gridLineWidth,
|
|
1341
|
+
getCanvasLayers: getCanvasLayers,
|
|
1342
|
+
getRowHeaderCanvasLayer: getRowHeaderCanvasLayer,
|
|
1343
|
+
getColumnHeaderCanvasLayer: getColumnHeaderCanvasLayer,
|
|
1344
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
1345
|
+
getR1C1AddressFromSelection: getR1C1AddressFromSelection,
|
|
1346
|
+
getSheetName: getSheetName,
|
|
1347
|
+
getScrollPosition: getScrollPosition,
|
|
1348
|
+
getViewPort: getViewPort,
|
|
1349
|
+
getRowOffset: getRowOffset,
|
|
1350
|
+
getColumnOffset: getColumnOffset,
|
|
1351
|
+
getSheetDimensions: getSheetDimensions,
|
|
1352
|
+
scrollTo: scrollTo,
|
|
1353
|
+
scrollToCell: scrollToCell,
|
|
1354
|
+
scale: scale,
|
|
1355
|
+
onChangeScale: onChangeScale,
|
|
1356
|
+
});
|
|
1357
|
+
/**
|
|
1358
|
+
* Get all cell selections from formula string
|
|
1359
|
+
*/
|
|
1360
|
+
var getSelectionsFromFormula = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (value, cell) {
|
|
1361
|
+
var _a, _b;
|
|
1362
|
+
var editingSheetName = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName((_a = editingCellCoordinate === null || editingCellCoordinate === void 0 ? void 0 : editingCellCoordinate.sheetId) !== null && _a !== void 0 ? _a : sheetId);
|
|
1363
|
+
var editingSheetId = (_b = editingCellCoordinate === null || editingCellCoordinate === void 0 ? void 0 : editingCellCoordinate.sheetId) !== null && _b !== void 0 ? _b : sheetId;
|
|
1364
|
+
return (0, selections_1.generateSelectionsFromFormula)(value, editingSheetId, editingSheetName, cell, rowCount, columnCount, tokenizer, getSelectionFromTable, getSelectionFromNamedRange);
|
|
1365
|
+
}, [
|
|
1366
|
+
rowCount,
|
|
1367
|
+
columnCount,
|
|
1368
|
+
editingCellCoordinate,
|
|
1369
|
+
tokenizer,
|
|
1370
|
+
getSelectionFromTable,
|
|
1371
|
+
getSheetName,
|
|
1372
|
+
getSelectionFromNamedRange,
|
|
1373
|
+
sheetId,
|
|
1374
|
+
]));
|
|
1375
|
+
/**
|
|
1376
|
+
* Get user entered value from a range
|
|
1377
|
+
* of cells
|
|
1378
|
+
*/
|
|
1379
|
+
var _59 = tslib_1.__read((0, use_get_values_from_range_1.useGetValuesFromRange)({
|
|
1380
|
+
sheetId: sheetId,
|
|
1381
|
+
getSelectionsFromFormula: getSelectionsFromFormula,
|
|
1382
|
+
getFormattedValue: getFormattedValue,
|
|
1383
|
+
getValidationValue: getValidationValue,
|
|
1384
|
+
getSheetId: getSheetId,
|
|
1385
|
+
onRequestCalculate: onRequestCalculate,
|
|
1386
|
+
getValidationSourceValue: getValidationSourceValue,
|
|
1387
|
+
}), 3), getFormattedValuesFromAddress = _59[0], getEffectiveValuesFromRange = _59[1], getFormattedValuesFromAddressAsync = _59[2];
|
|
1388
|
+
/**
|
|
1389
|
+
* Get all formatted values from range as a single 1d array
|
|
1390
|
+
*/
|
|
1391
|
+
var getFormattedValuesFromRange = (0, react_1.useCallback)(function (sheetId, selections) {
|
|
1392
|
+
var e_9, _a, e_10, _b;
|
|
1393
|
+
var values = new Set();
|
|
1394
|
+
try {
|
|
1395
|
+
for (var selections_2 = tslib_1.__values(selections), selections_2_1 = selections_2.next(); !selections_2_1.done; selections_2_1 = selections_2.next()) {
|
|
1396
|
+
var range = selections_2_1.value.range;
|
|
1397
|
+
try {
|
|
1398
|
+
for (var _c = (e_10 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(range))), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
1399
|
+
var _e = tslib_1.__read(_d.value, 2), rowIndex = _e[0], columnIndex = _e[1];
|
|
1400
|
+
var formattedValue = getFormattedValue(sheetId, rowIndex, columnIndex);
|
|
1401
|
+
if (!(0, utils_1.isNil)(formattedValue)) {
|
|
1402
|
+
values.add(formattedValue);
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
1407
|
+
finally {
|
|
1408
|
+
try {
|
|
1409
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
1410
|
+
}
|
|
1411
|
+
finally { if (e_10) throw e_10.error; }
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
1416
|
+
finally {
|
|
1417
|
+
try {
|
|
1418
|
+
if (selections_2_1 && !selections_2_1.done && (_a = selections_2.return)) _a.call(selections_2);
|
|
1419
|
+
}
|
|
1420
|
+
finally { if (e_9) throw e_9.error; }
|
|
1421
|
+
}
|
|
1422
|
+
return tslib_1.__spreadArray([], tslib_1.__read(values), false);
|
|
1423
|
+
}, [getFormattedValue]);
|
|
1424
|
+
/**
|
|
1425
|
+
* Resolve commit-time data validation enforcement for a value being entered.
|
|
1426
|
+
* Returns the alert + decision when the value is invalid and the rule has an
|
|
1427
|
+
* error alert; otherwise `undefined` (no enforcement — the cell still gets the
|
|
1428
|
+
* flag-only red marker via `SheetCell.validate`). Formula-backed rules resolve
|
|
1429
|
+
* asynchronously through the calculator, so they fall back to flag-only here.
|
|
1430
|
+
*/
|
|
1431
|
+
var getCommitValidation = (0, react_1.useCallback)(function (validationSheetId, rowIndex, columnIndex, value, previousValue) {
|
|
1432
|
+
var _a, _b, _c;
|
|
1433
|
+
var rule = getDataValidationRule(validationSheetId, rowIndex, columnIndex);
|
|
1434
|
+
var alert = rule === null || rule === void 0 ? void 0 : rule.alert;
|
|
1435
|
+
if (!rule || !alert) {
|
|
1436
|
+
return undefined;
|
|
1437
|
+
}
|
|
1438
|
+
var isBlank = value === undefined ||
|
|
1439
|
+
value === null ||
|
|
1440
|
+
(typeof value === "string" && value === "");
|
|
1441
|
+
if (rule.allowBlank && isBlank) {
|
|
1442
|
+
return undefined;
|
|
1443
|
+
}
|
|
1444
|
+
if ((0, utils_1.isDataValidationFormulaRule)(rule)) {
|
|
1445
|
+
// Enforce synchronously only where `checkBooleanRule` can decide the typed
|
|
1446
|
+
// value without the calculator: CUSTOM_FORMULA's sync branch is a stub, the
|
|
1447
|
+
// DATE_* comparisons expect serial values (commit hands us the raw typed
|
|
1448
|
+
// string), and literal bounds may themselves be formulas/references. Those
|
|
1449
|
+
// stay flag-only via the async calc path; everything else (dropdown
|
|
1450
|
+
// lists/ranges, number/text bounds, blank/boolean/email/url) blocks or
|
|
1451
|
+
// warns at commit like Excel.
|
|
1452
|
+
var conditionType = (_a = rule.condition) === null || _a === void 0 ? void 0 : _a.type;
|
|
1453
|
+
var conditionValues = (_c = (_b = rule.condition) === null || _b === void 0 ? void 0 : _b.values) !== null && _c !== void 0 ? _c : [];
|
|
1454
|
+
var hasFormulaBound = conditionValues.some(function (entry) {
|
|
1455
|
+
return typeof (entry === null || entry === void 0 ? void 0 : entry.userEnteredValue) === "string" &&
|
|
1456
|
+
entry.userEnteredValue.trim().startsWith("=");
|
|
1457
|
+
});
|
|
1458
|
+
var syncEnforceable = conditionType !== "CUSTOM_FORMULA" &&
|
|
1459
|
+
!(conditionType === null || conditionType === void 0 ? void 0 : conditionType.startsWith("DATE_")) &&
|
|
1460
|
+
(conditionType === "ONE_OF_RANGE" || !hasFormulaBound);
|
|
1461
|
+
if (!syncEnforceable) {
|
|
1462
|
+
return undefined;
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
var isValid = (0, validation_1.checkBooleanRule)(rule, value, previousValue !== null && previousValue !== void 0 ? previousValue : undefined, getFormattedValuesFromAddress, { locale: locale });
|
|
1466
|
+
var decision = (0, validation_1.decideValidationCommit)(alert, Boolean(isValid));
|
|
1467
|
+
if (decision === "proceed") {
|
|
1468
|
+
return undefined;
|
|
1469
|
+
}
|
|
1470
|
+
return { decision: decision, alert: alert };
|
|
1471
|
+
}, [getDataValidationRule, getFormattedValuesFromAddress, locale]);
|
|
1472
|
+
/**
|
|
1473
|
+
* Opens the blocking data-validation alert dialog (Excel error alert).
|
|
1474
|
+
*/
|
|
1475
|
+
var showValidationAlert = (0, atoms_1.useShowValidationAlert)();
|
|
1476
|
+
/**
|
|
1477
|
+
* Screen-reader announcement for the active cell (address + value). Rendered
|
|
1478
|
+
* into a visually-hidden aria-live region below so keyboard navigation of the
|
|
1479
|
+
* canvas grid is audible to assistive technology.
|
|
1480
|
+
*/
|
|
1481
|
+
var activeCellAnnouncement = (0, react_1.useMemo)(function () {
|
|
1482
|
+
var _a;
|
|
1483
|
+
if (!activeCell)
|
|
1484
|
+
return "";
|
|
1485
|
+
var address = (_a = (0, utils_1.cellToAddress)(activeCell)) !== null && _a !== void 0 ? _a : "";
|
|
1486
|
+
var value = getFormattedValue(sheetId, activeCell.rowIndex, activeCell.columnIndex);
|
|
1487
|
+
return !(0, utils_1.isNilOrBlank)(value) ? "".concat(address, " ").concat(value) : address;
|
|
1488
|
+
}, [activeCell, getFormattedValue, sheetId]);
|
|
1489
|
+
/**
|
|
1490
|
+
* Has the row been resized by user
|
|
1491
|
+
*/
|
|
1492
|
+
var isRowResizedByUser = (0, react_1.useCallback)(function (rowIndex) { var _a; return !!((_a = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _a === void 0 ? void 0 : _a.resizedByUser); }, [rowMetadata]);
|
|
1493
|
+
/**
|
|
1494
|
+
* Check if the cell is banded
|
|
1495
|
+
*/
|
|
1496
|
+
var isBandedCell = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
1497
|
+
return bandedCells.has((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
1498
|
+
}, [bandedCells]);
|
|
1499
|
+
/**
|
|
1500
|
+
* Check if table header cell is calculated column
|
|
1501
|
+
*/
|
|
1502
|
+
var isCalculatedColumnHeaderCell = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
1503
|
+
/* Table header cells, Cell has filter icon */
|
|
1504
|
+
var _a = tslib_1.__read(tableHeaderCells, 4), calculatedHeaderCell = _a[3];
|
|
1505
|
+
return calculatedHeaderCell.has((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
1506
|
+
}, [tableHeaderCells]);
|
|
1507
|
+
/**
|
|
1508
|
+
* If a cell is hidden,
|
|
1509
|
+
* We tell the grid to skip rendering
|
|
1510
|
+
*/
|
|
1511
|
+
var isHiddenCell = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
1512
|
+
var _a;
|
|
1513
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
1514
|
+
return false;
|
|
1515
|
+
}
|
|
1516
|
+
if (isTableHeader(rowIndex, columnIndex)) {
|
|
1517
|
+
return false;
|
|
1518
|
+
}
|
|
1519
|
+
if (isBandedCell(rowIndex, columnIndex)) {
|
|
1520
|
+
return false;
|
|
1521
|
+
}
|
|
1522
|
+
if (getDataValidationRule(sheetId, rowIndex, columnIndex)) {
|
|
1523
|
+
return false;
|
|
1524
|
+
}
|
|
1525
|
+
// Show cells with diffs when comparing (including deleted cells)
|
|
1526
|
+
if (isComparing && (getCellDiff === null || getCellDiff === void 0 ? void 0 : getCellDiff(sheetId, rowIndex, columnIndex))) {
|
|
1527
|
+
return false;
|
|
1528
|
+
}
|
|
1529
|
+
var effectiveCellFormat = getEffectiveCellFormat(sheetId, rowIndex, columnIndex);
|
|
1530
|
+
var formattedValue = getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, columnIndex);
|
|
1531
|
+
// Structured result
|
|
1532
|
+
var structuredValue = (_a = getEffectiveValue(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.structuredValue;
|
|
1533
|
+
return (getNote(sheetId, rowIndex, columnIndex) === undefined &&
|
|
1534
|
+
getComment(sheetId, rowIndex, columnIndex) === undefined &&
|
|
1535
|
+
getCitation(sheetId, rowIndex, columnIndex) === undefined &&
|
|
1536
|
+
(0, utils_1.isNilOrBlank)(formattedValue) &&
|
|
1537
|
+
(0, utils_1.isNil)(structuredValue) &&
|
|
1538
|
+
getCellImageUrl(sheetId, rowIndex, columnIndex) === undefined &&
|
|
1539
|
+
(effectiveCellFormat === null || effectiveCellFormat === void 0 ? void 0 : effectiveCellFormat.backgroundColor) === undefined &&
|
|
1540
|
+
(effectiveCellFormat === null || effectiveCellFormat === void 0 ? void 0 : effectiveCellFormat.borders) === undefined);
|
|
1541
|
+
}, [
|
|
1542
|
+
sheetId,
|
|
1543
|
+
getFormattedValue,
|
|
1544
|
+
getCellImageUrl,
|
|
1545
|
+
getNote,
|
|
1546
|
+
getComment,
|
|
1547
|
+
getCitation,
|
|
1548
|
+
getEffectiveCellFormat,
|
|
1549
|
+
getDataValidationRule,
|
|
1550
|
+
getEffectiveValue,
|
|
1551
|
+
isRowHeader,
|
|
1552
|
+
isColumnHeader,
|
|
1553
|
+
isTableHeader,
|
|
1554
|
+
isBandedCell,
|
|
1555
|
+
isComparing,
|
|
1556
|
+
getCellDiff,
|
|
1557
|
+
]);
|
|
1558
|
+
/**
|
|
1559
|
+
* Can a cell overflow to adjoining cell
|
|
1560
|
+
*/
|
|
1561
|
+
var canOverflowToNextCell = (0, react_1.useCallback)(function (_a) {
|
|
1562
|
+
var rowIndex = _a.rowIndex, columnIndex = _a.columnIndex;
|
|
1563
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
1564
|
+
return false;
|
|
1565
|
+
}
|
|
1566
|
+
if (isTableHeader(rowIndex, columnIndex)) {
|
|
1567
|
+
return false;
|
|
1568
|
+
}
|
|
1569
|
+
if (isBandedCell(rowIndex, columnIndex)) {
|
|
1570
|
+
return false;
|
|
1571
|
+
}
|
|
1572
|
+
if (getDataValidationRule(sheetId, rowIndex, columnIndex)) {
|
|
1573
|
+
return false;
|
|
1574
|
+
}
|
|
1575
|
+
var _b = tslib_1.__read(getCellGroupingInfo(sheetId, rowIndex, columnIndex), 1), expandable = _b[0];
|
|
1576
|
+
if (expandable) {
|
|
1577
|
+
return false;
|
|
1578
|
+
}
|
|
1579
|
+
var formattedValue = getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, columnIndex);
|
|
1580
|
+
return (getNote(sheetId, rowIndex, columnIndex) === undefined &&
|
|
1581
|
+
(0, utils_1.isNilOrBlank)(formattedValue) &&
|
|
1582
|
+
getCellImageUrl(sheetId, rowIndex, columnIndex) === undefined);
|
|
1583
|
+
}, [
|
|
1584
|
+
sheetId,
|
|
1585
|
+
getFormattedValue,
|
|
1586
|
+
getCellGroupingInfo,
|
|
1587
|
+
getCellImageUrl,
|
|
1588
|
+
getNote,
|
|
1589
|
+
getDataValidationRule,
|
|
1590
|
+
isRowHeader,
|
|
1591
|
+
isColumnHeader,
|
|
1592
|
+
isTableHeader,
|
|
1593
|
+
isBandedCell,
|
|
1594
|
+
]);
|
|
1595
|
+
/**
|
|
1596
|
+
* If a cell is hidden,
|
|
1597
|
+
* We tell the grid to skip rendering
|
|
1598
|
+
*/
|
|
1599
|
+
var isHiddenOverlay = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
1600
|
+
var _a;
|
|
1601
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
1602
|
+
return true;
|
|
1603
|
+
}
|
|
1604
|
+
return (((_a = getEffectiveCellFormat(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.borders) ===
|
|
1605
|
+
undefined);
|
|
1606
|
+
}, [getEffectiveCellFormat, isRowHeader, isColumnHeader, sheetId]);
|
|
1607
|
+
/**
|
|
1608
|
+
* If a cell is hidden,
|
|
1609
|
+
* We tell the grid to skip rendering
|
|
1610
|
+
*/
|
|
1611
|
+
var isHiddenBackground = (0, react_1.useCallback)(function (rowIndex, columnIndex) {
|
|
1612
|
+
var _a, _b;
|
|
1613
|
+
if (isRowHeader(columnIndex) || isColumnHeader(rowIndex)) {
|
|
1614
|
+
return true;
|
|
1615
|
+
}
|
|
1616
|
+
if (isMergedCell({ rowIndex: rowIndex, columnIndex: columnIndex })) {
|
|
1617
|
+
return false;
|
|
1618
|
+
}
|
|
1619
|
+
// Skip the bg shape only when the cell has NO visible fill at all.
|
|
1620
|
+
// A cell counts as "has fill" if any of these are present:
|
|
1621
|
+
// - backgroundColor (solid)
|
|
1622
|
+
// - fillPattern (other than "none")
|
|
1623
|
+
// - gradient (with at least one stop)
|
|
1624
|
+
// The earlier version only checked backgroundColor, which
|
|
1625
|
+
// incorrectly hid pattern-only and gradient-only cells.
|
|
1626
|
+
var fmt = getEffectiveCellFormat(sheetId, rowIndex, columnIndex);
|
|
1627
|
+
if (!fmt)
|
|
1628
|
+
return true;
|
|
1629
|
+
if (!(0, utils_1.isNil)(fmt.backgroundColor)) {
|
|
1630
|
+
return false;
|
|
1631
|
+
}
|
|
1632
|
+
if (fmt.fillPattern && fmt.fillPattern !== "none") {
|
|
1633
|
+
return false;
|
|
1634
|
+
}
|
|
1635
|
+
if (fmt.gradient && ((_b = (_a = fmt.gradient.stops) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) {
|
|
1636
|
+
return false;
|
|
1637
|
+
}
|
|
1638
|
+
return true;
|
|
1639
|
+
}, [
|
|
1640
|
+
getEffectiveCellFormat,
|
|
1641
|
+
isRowHeader,
|
|
1642
|
+
isColumnHeader,
|
|
1643
|
+
isMergedCell,
|
|
1644
|
+
sheetId,
|
|
1645
|
+
]);
|
|
1646
|
+
/**
|
|
1647
|
+
* Row height getter
|
|
1648
|
+
*/
|
|
1649
|
+
var rowHeight = (0, react_1.useCallback)(function (rowIndex) {
|
|
1650
|
+
var _a, _b;
|
|
1651
|
+
if (isColumnHeader(rowIndex)) {
|
|
1652
|
+
return showHeaders ? columnHeaderHeight : 0;
|
|
1653
|
+
}
|
|
1654
|
+
if (isHiddenRow(rowIndex)) {
|
|
1655
|
+
return 0;
|
|
1656
|
+
}
|
|
1657
|
+
return (_b = (_a = rowMetadata === null || rowMetadata === void 0 ? void 0 : rowMetadata[rowIndex]) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : defaultRowHeight;
|
|
1658
|
+
}, [
|
|
1659
|
+
isHiddenRow,
|
|
1660
|
+
isColumnHeader,
|
|
1661
|
+
rowMetadata,
|
|
1662
|
+
columnHeaderHeight,
|
|
1663
|
+
defaultRowHeight,
|
|
1664
|
+
showHeaders,
|
|
1665
|
+
]);
|
|
1666
|
+
/**
|
|
1667
|
+
* Column width getter
|
|
1668
|
+
*/
|
|
1669
|
+
var columnWidth = (0, react_1.useCallback)(function (columnIndex) {
|
|
1670
|
+
var _a, _b;
|
|
1671
|
+
if (isRowHeader(columnIndex)) {
|
|
1672
|
+
return showHeaders ? rowHeaderWidth : 0;
|
|
1673
|
+
}
|
|
1674
|
+
if (isHiddenColumn(columnIndex)) {
|
|
1675
|
+
return 0;
|
|
1676
|
+
}
|
|
1677
|
+
return (_b = (_a = columnMetadata === null || columnMetadata === void 0 ? void 0 : columnMetadata[columnIndex]) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : defaultColumnWidth;
|
|
1678
|
+
}, [
|
|
1679
|
+
isHiddenColumn,
|
|
1680
|
+
isRowHeader,
|
|
1681
|
+
columnMetadata,
|
|
1682
|
+
rowHeaderWidth,
|
|
1683
|
+
defaultColumnWidth,
|
|
1684
|
+
showHeaders,
|
|
1685
|
+
]);
|
|
1686
|
+
/**
|
|
1687
|
+
* Get actual cell width with merged cells
|
|
1688
|
+
*/
|
|
1689
|
+
var getActualCellWidth = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
1690
|
+
var actualBounds = mergedCellMap.get((0, grid_5.cellIdentifier)(rowIndex, columnIndex));
|
|
1691
|
+
var cellWidth = columnWidth(columnIndex);
|
|
1692
|
+
if (actualBounds) {
|
|
1693
|
+
var left = actualBounds.startColumnIndex + 1;
|
|
1694
|
+
while (left <= actualBounds.endColumnIndex) {
|
|
1695
|
+
cellWidth += columnWidth(left);
|
|
1696
|
+
left++;
|
|
1697
|
+
}
|
|
1698
|
+
return cellWidth;
|
|
1699
|
+
}
|
|
1700
|
+
return cellWidth;
|
|
1701
|
+
}, [columnWidth, mergedCellMap]);
|
|
1702
|
+
/**
|
|
1703
|
+
* Gather selected headers
|
|
1704
|
+
* O(n)
|
|
1705
|
+
* Reduces Space Complexity by using `all`
|
|
1706
|
+
*/
|
|
1707
|
+
var _60 = tslib_1.__read((0, use_selected_rows_columns_1.useSelectedRowsColumns)({
|
|
1708
|
+
activeCell: activeCell,
|
|
1709
|
+
selections: selections,
|
|
1710
|
+
selectionLeftBound: selectionLeftBound,
|
|
1711
|
+
selectionTopBound: selectionTopBound,
|
|
1712
|
+
rowCount: rowCount,
|
|
1713
|
+
columnCount: columnCount,
|
|
1714
|
+
getCellBounds: getCellBounds,
|
|
1715
|
+
}), 6), selectedRows = _60[0], selectedColumns = _60[1], selectedRowHeaders = _60[2], selectedColumnHeaders = _60[3], selectedRowHeadersIds = _60[4], selectedColumnHeadersIds = _60[5];
|
|
1716
|
+
// Named ranges for editor dropdown
|
|
1717
|
+
var getNamedRanges = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
|
|
1718
|
+
return namedRanges === null || namedRanges === void 0 ? void 0 : namedRanges.map(function (range) { return ({
|
|
1719
|
+
title: range.name,
|
|
1720
|
+
category: "namedrange",
|
|
1721
|
+
}); });
|
|
1722
|
+
}, [namedRanges]));
|
|
1723
|
+
// Get cell properties
|
|
1724
|
+
var getStructuredProperties = (0, react_1.useCallback)(function (sheetName, rowIndex, columnIndex) {
|
|
1725
|
+
var _a, _b;
|
|
1726
|
+
var newSheetId = sheetName
|
|
1727
|
+
? (_a = getSheetId === null || getSheetId === void 0 ? void 0 : getSheetId(sheetName)) !== null && _a !== void 0 ? _a : sheetId
|
|
1728
|
+
: sheetId;
|
|
1729
|
+
// Pass it along to parent prop
|
|
1730
|
+
if (getStructuredPropertiesProp) {
|
|
1731
|
+
return getStructuredPropertiesProp(newSheetId, rowIndex, columnIndex);
|
|
1732
|
+
}
|
|
1733
|
+
// Get cell data
|
|
1734
|
+
var structuredValue = (_b = getEffectiveValue(newSheetId, rowIndex, columnIndex)) === null || _b === void 0 ? void 0 : _b.structuredValue;
|
|
1735
|
+
var propertyNames = structuredValue
|
|
1736
|
+
? (0, helpers_2.getNestedPropertyNames)(structuredValue)
|
|
1737
|
+
: [];
|
|
1738
|
+
return propertyNames.map(function (title) {
|
|
1739
|
+
return {
|
|
1740
|
+
title: title,
|
|
1741
|
+
category: "property",
|
|
1742
|
+
};
|
|
1743
|
+
});
|
|
1744
|
+
}, [
|
|
1745
|
+
getSheetId,
|
|
1746
|
+
getEffectiveValue,
|
|
1747
|
+
getCellData,
|
|
1748
|
+
sheetId,
|
|
1749
|
+
getStructuredPropertiesProp,
|
|
1750
|
+
]);
|
|
1751
|
+
// Table names for editor dropdown
|
|
1752
|
+
var getTableNames = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
|
|
1753
|
+
return tables === null || tables === void 0 ? void 0 : tables.map(function (_a) {
|
|
1754
|
+
var title = _a.title;
|
|
1755
|
+
return ({ title: title, category: "table" });
|
|
1756
|
+
});
|
|
1757
|
+
}, [tables]));
|
|
1758
|
+
// Column names for editor dropdown
|
|
1759
|
+
var getTableColumnNames = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (tableName) {
|
|
1760
|
+
var _a;
|
|
1761
|
+
var editingCell = editingCellCoordinate;
|
|
1762
|
+
var editingSheetId = editingCellCoordinate === null || editingCellCoordinate === void 0 ? void 0 : editingCellCoordinate.sheetId;
|
|
1763
|
+
var table = tables === null || tables === void 0 ? void 0 : tables.find(function (table) {
|
|
1764
|
+
if (tableName) {
|
|
1765
|
+
return table.title === tableName;
|
|
1766
|
+
}
|
|
1767
|
+
return editingCell
|
|
1768
|
+
? (0, grid_4.isCellWithinBounds)(editingCell, table.range) &&
|
|
1769
|
+
table.sheetId === editingSheetId
|
|
1770
|
+
: true;
|
|
1771
|
+
});
|
|
1772
|
+
if (!table) {
|
|
1773
|
+
return config_1.DEFAULT_ARRAY;
|
|
1774
|
+
}
|
|
1775
|
+
return (_a = table.columns) === null || _a === void 0 ? void 0 : _a.map(function (column) { return ({
|
|
1776
|
+
title: column.name,
|
|
1777
|
+
category: "column",
|
|
1778
|
+
}); });
|
|
1779
|
+
}, [tables, editingCellCoordinate]));
|
|
1780
|
+
/**
|
|
1781
|
+
* Mosue down interceptors for useSelection hook so
|
|
1782
|
+
* user can select entire column or row when selecting
|
|
1783
|
+
* header cells
|
|
1784
|
+
*/
|
|
1785
|
+
var _61 = (0, use_selection_interceptors_1.useSelectionInterceptors)({
|
|
1786
|
+
sheetId: sheetId,
|
|
1787
|
+
rowCount: rowCount,
|
|
1788
|
+
columnCount: columnCount,
|
|
1789
|
+
frozenColumns: frozenColumns,
|
|
1790
|
+
frozenRows: frozenRows,
|
|
1791
|
+
selectionLeftBound: selectionLeftBound,
|
|
1792
|
+
selectionTopBound: selectionTopBound,
|
|
1793
|
+
isHiddenColumn: isHiddenColumn,
|
|
1794
|
+
isHiddenRow: isHiddenRow,
|
|
1795
|
+
isRowHeader: isRowHeader,
|
|
1796
|
+
isColumnHeader: isColumnHeader,
|
|
1797
|
+
getViewPort: getViewPort,
|
|
1798
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
1799
|
+
scrollToCell: scrollToCell,
|
|
1800
|
+
isMergedCell: isMergedCell,
|
|
1801
|
+
}), onMouseDownInterceptor = _61.onMouseDownInterceptor, onMouseMoveInterceptor = _61.onMouseMoveInterceptor;
|
|
1802
|
+
/**
|
|
1803
|
+
* When user selections full rows
|
|
1804
|
+
* or columns, we have to ignore
|
|
1805
|
+
* merged cells
|
|
1806
|
+
*/
|
|
1807
|
+
var canSelectionSpanMergedCells = (0, react_1.useCallback)(function (start, end) {
|
|
1808
|
+
if (start.rowIndex < selectionTopBound && end.rowIndex === rowCount) {
|
|
1809
|
+
return false;
|
|
1810
|
+
}
|
|
1811
|
+
if (start.columnIndex < selectionLeftBound &&
|
|
1812
|
+
end.columnIndex === columnCount) {
|
|
1813
|
+
return false;
|
|
1814
|
+
}
|
|
1815
|
+
return true;
|
|
1816
|
+
}, [rowCount, columnCount, selectionTopBound, selectionLeftBound]);
|
|
1817
|
+
/**
|
|
1818
|
+
* For autofitting text, extra space is
|
|
1819
|
+
* added for filter icon, dropdown icon etc
|
|
1820
|
+
*/
|
|
1821
|
+
var getCellSpacing = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex, axis) {
|
|
1822
|
+
var _a, _b, _c;
|
|
1823
|
+
/**
|
|
1824
|
+
* Icons in cells do not affect
|
|
1825
|
+
* height of the rows. Explore later
|
|
1826
|
+
*/
|
|
1827
|
+
if (axis === "x") {
|
|
1828
|
+
return 0;
|
|
1829
|
+
}
|
|
1830
|
+
/* Data validation arrow */
|
|
1831
|
+
var dataValidation = getDataValidationRule(sheetId, rowIndex, columnIndex);
|
|
1832
|
+
var additionalCellSpacing = (_a = getAdditionalCellSpacing === null || getAdditionalCellSpacing === void 0 ? void 0 : getAdditionalCellSpacing(sheetId, rowIndex, columnIndex)) !== null && _a !== void 0 ? _a : 0;
|
|
1833
|
+
var showArrow = (0, validation_1.showValidationDropdownArrow)(dataValidation);
|
|
1834
|
+
var showChip = getCellMetaType(sheetId, rowIndex, columnIndex) === "people";
|
|
1835
|
+
var _d = tslib_1.__read(getCellGroupingInfo(sheetId, rowIndex, columnIndex), 1), expandable = _d[0];
|
|
1836
|
+
var iconSpacing = config_1.DEFAULT_CELL_SPACING;
|
|
1837
|
+
var expandableSpacing = expandable
|
|
1838
|
+
? (config_1.EXPAND_COLLAPSE_ICON_WIDTH + iconSpacing) * scale
|
|
1839
|
+
: 0;
|
|
1840
|
+
var indentSpacing = ((_b = getCellIndent(sheetId, rowIndex, columnIndex)) !== null && _b !== void 0 ? _b : 0) * config_1.INDENT_SPACING;
|
|
1841
|
+
// Cell has dropdown icon
|
|
1842
|
+
var arrowSpacing = showArrow
|
|
1843
|
+
? (config_1.ARROW_DOWN_WIDTH + iconSpacing) * scale
|
|
1844
|
+
: 0;
|
|
1845
|
+
// Cell has chip
|
|
1846
|
+
var chipSpacing = showChip ? (config_1.CHIP_SPACING + iconSpacing) * scale : 0;
|
|
1847
|
+
/* Calculated column icon */
|
|
1848
|
+
var calculatedIconWidth = showCalculatedColumnIcon &&
|
|
1849
|
+
isTableHeader(rowIndex, columnIndex) &&
|
|
1850
|
+
isCalculatedColumnHeaderCell(rowIndex, columnIndex)
|
|
1851
|
+
? (config_1.CALCULATED_ICON_WIDTH + iconSpacing) * scale
|
|
1852
|
+
: 0;
|
|
1853
|
+
/* Table header cells, Cell has filter icon */
|
|
1854
|
+
var tableFilterSpacing = isTableFilterVisible(rowIndex, columnIndex)
|
|
1855
|
+
? (config_1.FILTER_ICON_WIDTH + iconSpacing) * scale
|
|
1856
|
+
: 0;
|
|
1857
|
+
/* Conditional-format iconSet glyph reserved on the left of the cell.
|
|
1858
|
+
The cell renderer subtracts this from the text area, so row-height
|
|
1859
|
+
autofit must include it to measure wrapped text at the same width. */
|
|
1860
|
+
var conditionalIconSpacing = ((_c = getEffectiveCellFormat(sheetId, rowIndex, columnIndex)) === null || _c === void 0 ? void 0 : _c.conditionalIcon)
|
|
1861
|
+
? (config_1.CF_ICON_WIDTH + config_1.CF_ICON_SPACING) * scale
|
|
1862
|
+
: 0;
|
|
1863
|
+
return (arrowSpacing +
|
|
1864
|
+
chipSpacing +
|
|
1865
|
+
indentSpacing +
|
|
1866
|
+
expandableSpacing +
|
|
1867
|
+
calculatedIconWidth +
|
|
1868
|
+
tableFilterSpacing +
|
|
1869
|
+
conditionalIconSpacing +
|
|
1870
|
+
additionalCellSpacing);
|
|
1871
|
+
}, [
|
|
1872
|
+
isTableFilterVisible,
|
|
1873
|
+
getDataValidationRule,
|
|
1874
|
+
getCellMetaType,
|
|
1875
|
+
getCellIndent,
|
|
1876
|
+
showCalculatedColumnIcon,
|
|
1877
|
+
isTableHeader,
|
|
1878
|
+
isCalculatedColumnHeaderCell,
|
|
1879
|
+
scale,
|
|
1880
|
+
getCellGroupingInfo,
|
|
1881
|
+
getAdditionalCellSpacing,
|
|
1882
|
+
getEffectiveCellFormat,
|
|
1883
|
+
]);
|
|
1884
|
+
/**
|
|
1885
|
+
* Column resizer
|
|
1886
|
+
* Enables auto resizing
|
|
1887
|
+
* rows and columns
|
|
1888
|
+
*/
|
|
1889
|
+
var _62 = (0, use_sizer_1.useSizer)({
|
|
1890
|
+
frozenRows: frozenRows,
|
|
1891
|
+
frozenColumns: frozenColumns,
|
|
1892
|
+
scale: scale,
|
|
1893
|
+
minColumnDimension: config_1.MIN_COLUMN_WIDTH,
|
|
1894
|
+
minRowDimension: defaultRowHeight,
|
|
1895
|
+
cellHorizontalSpacing: 5, // 2 + 2 + (padding) + 1 border
|
|
1896
|
+
cellVerticalSpacing: 5, // 2 + 2 (padding) + 1 border
|
|
1897
|
+
isHiddenRow: isHiddenRow,
|
|
1898
|
+
isHiddenColumn: isHiddenColumn,
|
|
1899
|
+
getTextFormat: getTextFormat,
|
|
1900
|
+
getTextFormatRuns: getTextFormatRuns,
|
|
1901
|
+
getTextValue: getFormattedValue,
|
|
1902
|
+
getSpacing: getCellSpacing,
|
|
1903
|
+
getActualCellWidth: getActualCellWidth,
|
|
1904
|
+
shouldWrapCell: shouldWrapCell,
|
|
1905
|
+
columnWidth: columnWidth,
|
|
1906
|
+
getViewPort: getViewPort,
|
|
1907
|
+
columnCount: columnCount,
|
|
1908
|
+
rowCount: rowCount,
|
|
1909
|
+
getDataRowCount: getDataRowCount,
|
|
1910
|
+
fontSize: defaultFontSizePoint,
|
|
1911
|
+
resizeStrategy: "full",
|
|
1912
|
+
}), getColumnWidth = _62.getColumnWidth, getRowHeight = _62.getRowHeight, getCellDimensions = _62.getCellDimensions, getCellDimensionsStable = _62.getCellDimensionsStable, getTextDimension = _62.getTextDimension;
|
|
1913
|
+
/**
|
|
1914
|
+
* Called when user tries to
|
|
1915
|
+
* autofit a column or row
|
|
1916
|
+
*/
|
|
1917
|
+
var handleAutoFit = (0, react_1.useCallback)(function (index, axis) {
|
|
1918
|
+
var indexes = axis === "x" ? selectedRowHeadersIds : selectedColumnHeadersIds;
|
|
1919
|
+
// Callback
|
|
1920
|
+
onAutoResize === null || onAutoResize === void 0 ? void 0 : onAutoResize(sheetId, indexes.length && indexes.includes(index) ? indexes : [index], axis);
|
|
1921
|
+
// Keep the focus back
|
|
1922
|
+
focusSheet();
|
|
1923
|
+
}, [
|
|
1924
|
+
onAutoResize,
|
|
1925
|
+
focusSheet,
|
|
1926
|
+
selectedColumnHeadersIds,
|
|
1927
|
+
selectedRowHeadersIds,
|
|
1928
|
+
sheetId,
|
|
1929
|
+
]);
|
|
1930
|
+
/* Check if sheet is focused */
|
|
1931
|
+
var isSheetFocused = (0, react_1.useCallback)(function () {
|
|
1932
|
+
return grid_2.canUseDOM ? document.activeElement === (cellEditorInstance === null || cellEditorInstance === void 0 ? void 0 : cellEditorInstance.el()) : false;
|
|
1933
|
+
}, [cellEditorInstance]);
|
|
1934
|
+
/**
|
|
1935
|
+
* Get Cell Editor
|
|
1936
|
+
*/
|
|
1937
|
+
var getEditor = (0, react_1.useCallback)(function (props) {
|
|
1938
|
+
var _a = props.cell, cell = _a === void 0 ? spreadsheet_state_1.defaultCellCoords : _a, sheetId = props.sheetId, _b = props.editingSheetId, editingSheetId = _b === void 0 ? sheetId : _b;
|
|
1939
|
+
var _c = cell !== null && cell !== void 0 ? cell : spreadsheet_state_1.defaultCellCoords, rowIndex = _c.rowIndex, columnIndex = _c.columnIndex;
|
|
1940
|
+
var cellFormat = !(0, utils_1.isNil)(props.editingSheetId)
|
|
1941
|
+
? getEffectiveCellFormat(props.editingSheetId, rowIndex, columnIndex)
|
|
1942
|
+
: undefined;
|
|
1943
|
+
var dataValidation = getDataValidationRule(editingSheetId, rowIndex, columnIndex);
|
|
1944
|
+
var address = (0, utils_1.cellToAddress)(cell);
|
|
1945
|
+
var sheetName = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(sheetId);
|
|
1946
|
+
var editingSheetName = getSheetName === null || getSheetName === void 0 ? void 0 : getSheetName(editingSheetId);
|
|
1947
|
+
var effectiveValue = getEffectiveValue(editingSheetId, rowIndex, columnIndex);
|
|
1948
|
+
var horizontalAlignment = getEditorHorizontalAlignment(editingSheetId, rowIndex, columnIndex);
|
|
1949
|
+
return (react_1.default.createElement(CellEditor, tslib_1.__assign({}, props, { locale: locale, effectiveValue: effectiveValue, format: cellFormat, dataValidation: dataValidation, getRangeValues: getFormattedValuesFromAddress, getRangeValuesAsync: getFormattedValuesFromAddressAsync, scale: scale, sheetName: sheetName, editingSheetId: editingSheetId, sheetId: sheetId, editingSheetName: editingSheetName, address: address, theme: theme, tokenizer: tokenizer, horizontalAlignment: horizontalAlignment, defaultBackgroundColor: cellBackgroundColor, defaultTextColor: (0, themes_1.getStringifiedColor)(cellColor, theme), functionDescriptions: functionDescriptions !== null && functionDescriptions !== void 0 ? functionDescriptions : undefined, getNamedRanges: getNamedRanges, getTableNames: getTableNames, getStructuredProperties: getStructuredProperties, getTableColumnNames: getTableColumnNames, showFormulaHelp: showFormulaHelp, onHideFormulaHelp: onHideFormulaHelp, onShowFormulaHelp: onShowFormulaHelp, onRequestCalculate: onRequestCalculate, SuggestionsDropdown: SuggestionsDropdown, stickyEditor: stickyEditor, defaultFontSizePoint: defaultFontSizePoint, getMentions: getMentions, getFunctionParameterSuggestions: getFunctionParameterSuggestions, shouldFetchFunctionParameters: shouldFetchFunctionParameters, MentionTagComponent: MentionTagComponent, MentionDropdownItemComponent: MentionDropdownItemComponent })));
|
|
1950
|
+
}, [
|
|
1951
|
+
scale,
|
|
1952
|
+
getEffectiveCellFormat,
|
|
1953
|
+
getDataValidationRule,
|
|
1954
|
+
getFormattedValuesFromAddress,
|
|
1955
|
+
CellEditor,
|
|
1956
|
+
getSheetName,
|
|
1957
|
+
showFormulaHelp,
|
|
1958
|
+
onHideFormulaHelp,
|
|
1959
|
+
onShowFormulaHelp,
|
|
1960
|
+
tokenizer,
|
|
1961
|
+
cellBackgroundColor,
|
|
1962
|
+
cellColor,
|
|
1963
|
+
functionDescriptions,
|
|
1964
|
+
getNamedRanges,
|
|
1965
|
+
getTableNames,
|
|
1966
|
+
getStructuredProperties,
|
|
1967
|
+
getTableColumnNames,
|
|
1968
|
+
onRequestCalculate,
|
|
1969
|
+
getEffectiveValue,
|
|
1970
|
+
getEditorHorizontalAlignment,
|
|
1971
|
+
locale,
|
|
1972
|
+
theme,
|
|
1973
|
+
SuggestionsDropdown,
|
|
1974
|
+
stickyEditor,
|
|
1975
|
+
defaultFontSizePoint,
|
|
1976
|
+
getMentions,
|
|
1977
|
+
getFunctionParameterSuggestions,
|
|
1978
|
+
shouldFetchFunctionParameters,
|
|
1979
|
+
MentionTagComponent,
|
|
1980
|
+
MentionDropdownItemComponent,
|
|
1981
|
+
]);
|
|
1982
|
+
/**
|
|
1983
|
+
* Popover cell
|
|
1984
|
+
*/
|
|
1985
|
+
var _63 = (0, use_cell_popover_1.useCellPopover)({
|
|
1986
|
+
sheetId: sheetId,
|
|
1987
|
+
getCellPopoverContent: getCellPopoverContent !== null && getCellPopoverContent !== void 0 ? getCellPopoverContent : getFormattedValue,
|
|
1988
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
1989
|
+
getScrollPosition: getScrollPosition,
|
|
1990
|
+
isFrozenColumn: isFrozenColumn,
|
|
1991
|
+
isFrozenRow: isFrozenRow,
|
|
1992
|
+
onChangeActiveSheet: onChangeActiveSheet,
|
|
1993
|
+
}), popoverComponent = _63.popoverComponent, popoverRange = _63.popoverRange, showCellPopover = _63.showCellPopover, hideCellPopover = _63.hideCellPopover;
|
|
1994
|
+
/**
|
|
1995
|
+
* Get tooltip component of a cell
|
|
1996
|
+
* Only error, invalid values are
|
|
1997
|
+
* shown in tooltip
|
|
1998
|
+
*/
|
|
1999
|
+
/**
|
|
2000
|
+
* Compose host tooltip content with the data-validation input message.
|
|
2001
|
+
* Host-provided content wins; otherwise, when the cell is not already showing
|
|
2002
|
+
* an error / invalid marker, surface the rule's input message (Excel's
|
|
2003
|
+
* "show input message when cell is selected").
|
|
2004
|
+
*/
|
|
2005
|
+
var getTooltipContentWithValidation = (0, react_1.useCallback)(function (tooltipSheetId, rowIndex, columnIndex) {
|
|
2006
|
+
var hostContent = getTooltipContent === null || getTooltipContent === void 0 ? void 0 : getTooltipContent(tooltipSheetId, rowIndex, columnIndex);
|
|
2007
|
+
if (hostContent != null) {
|
|
2008
|
+
return hostContent;
|
|
2009
|
+
}
|
|
2010
|
+
var error = getErrorValue(tooltipSheetId, rowIndex, columnIndex);
|
|
2011
|
+
if ((error === null || error === void 0 ? void 0 : error.type) === "Error" || (error === null || error === void 0 ? void 0 : error.type) === "Invalid") {
|
|
2012
|
+
return undefined;
|
|
2013
|
+
}
|
|
2014
|
+
var rule = getDataValidationRule(tooltipSheetId, rowIndex, columnIndex);
|
|
2015
|
+
var inputMessage = rule === null || rule === void 0 ? void 0 : rule.inputMessage;
|
|
2016
|
+
if (!inputMessage || (!inputMessage.title && !inputMessage.message)) {
|
|
2017
|
+
return undefined;
|
|
2018
|
+
}
|
|
2019
|
+
return (react_1.default.createElement("div", { className: "bg-rnc-background text-rnc-foreground p-2 shadow-md rounded-md border-l-4 border-solid border-l-blue-700 max-w-[300px] flex flex-col gap-0.5" },
|
|
2020
|
+
inputMessage.title ? (react_1.default.createElement("div", { className: "font-bold font-system text-sm" }, inputMessage.title)) : null,
|
|
2021
|
+
inputMessage.message ? (react_1.default.createElement("div", { className: "text-xs font-system whitespace-pre-wrap" }, inputMessage.message)) : null));
|
|
2022
|
+
}, [getTooltipContent, getErrorValue, getDataValidationRule]);
|
|
2023
|
+
var getTooltip = (0, use_get_tooltip_1.useGetTooltip)({
|
|
2024
|
+
sheetId: sheetId,
|
|
2025
|
+
getErrorValue: getErrorValue,
|
|
2026
|
+
getNote: getNote,
|
|
2027
|
+
getFormattedValue: getFormattedValue,
|
|
2028
|
+
getHyperlink: getHyperlink,
|
|
2029
|
+
getTooltipContent: getTooltipContentWithValidation,
|
|
2030
|
+
errorResolutionComponent: errorResolutionComponent,
|
|
2031
|
+
CellTooltip: CellTooltip,
|
|
2032
|
+
showNotes: showNotes,
|
|
2033
|
+
});
|
|
2034
|
+
/**
|
|
2035
|
+
* Selection change handler
|
|
2036
|
+
*/
|
|
2037
|
+
var onSelectionChange = (0, use_selection_change_1.useSelectionChange)({
|
|
2038
|
+
onChangeSelections: onChangeSelections,
|
|
2039
|
+
getSheetName: getSheetName,
|
|
2040
|
+
sheetId: sheetId,
|
|
2041
|
+
});
|
|
2042
|
+
// DataRegion boundaries for selection
|
|
2043
|
+
var dataRegionBoundaries = (0, react_1.useMemo)(function () {
|
|
2044
|
+
return tables === null || tables === void 0 ? void 0 : tables.filter(function (table) { return table.sheetId === sheetId; }).map(function (table) { return table.range; });
|
|
2045
|
+
}, [tables, sheetId]);
|
|
2046
|
+
/**
|
|
2047
|
+
* Handle grid selections
|
|
2048
|
+
*/
|
|
2049
|
+
var _64 = (0, use_selection_1.useSelection)({
|
|
2050
|
+
sheetId: sheetId,
|
|
2051
|
+
getDataRowCount: getDataRowCount,
|
|
2052
|
+
enableDataBoundaryNavigation: enableDataBoundaryNavigation,
|
|
2053
|
+
allowDeselectSelection: false,
|
|
2054
|
+
formulaMode: formulaMode,
|
|
2055
|
+
enableSelectOnEnterKey: !enableEditOnEnterKey,
|
|
2056
|
+
newSelectionMode: formulaMode && canSelectCells ? selectionMode : "clear",
|
|
2057
|
+
activeCell: activeCell,
|
|
2058
|
+
selections: selections,
|
|
2059
|
+
onChangeSelections: onSelectionChange,
|
|
2060
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
2061
|
+
columnCount: columnCount,
|
|
2062
|
+
rowCount: rowCount,
|
|
2063
|
+
getValue: getUserEnteredStringValue,
|
|
2064
|
+
selectionLeftBound: selectionLeftBound,
|
|
2065
|
+
selectionTopBound: selectionTopBound,
|
|
2066
|
+
canSelectionSpanMergedCells: canSelectionSpanMergedCells,
|
|
2067
|
+
mouseDownInterceptor: onMouseDownInterceptor,
|
|
2068
|
+
mouseMoveInterceptor: onMouseMoveInterceptor,
|
|
2069
|
+
selectionPolicy: selectionPolicy,
|
|
2070
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2071
|
+
getCellBounds: getCellBounds,
|
|
2072
|
+
getViewPort: getViewPort,
|
|
2073
|
+
focus: focusSheet,
|
|
2074
|
+
scrollToCell: scrollToCell,
|
|
2075
|
+
isMergedCell: isMergedCell,
|
|
2076
|
+
onFill: onFill,
|
|
2077
|
+
onMoveSelection: onMoveSelection,
|
|
2078
|
+
isHiddenColumn: isHiddenColumn,
|
|
2079
|
+
isHiddenRow: isHiddenRow,
|
|
2080
|
+
isRowHeader: isRowHeader,
|
|
2081
|
+
isColumnHeader: isColumnHeader,
|
|
2082
|
+
isTouchDevice: helpers_1.isTouchDevice,
|
|
2083
|
+
dataRegionBoundaries: dataRegionBoundaries,
|
|
2084
|
+
}), onMouseDownSelection = _64.onMouseDown, onPointerDownSelection = _64.onPointerDown, onKeyDownSelection = _64.onKeyDown, fillSelection = _64.fillSelection, onFillHandleMouseDown = _64.onFillHandleMouseDown, onFillHandleDoubleClick = _64.onFillHandleDoubleClick, isDragging = _64.isDragging, isFilling = _64.isFilling, isSelectionInProgress = _64.isSelectionInProgress, draggedSelection = _64.draggedSelection, onSelectionMouseDown = _64.onSelectionMouseDown, setActiveCell = _64.setActiveCell, initialDraggedSelection = _64.initialDraggedSelection, updateSelectionStartEndReference = _64.updateSelectionStartEndReference, selectColumn = _64.selectColumn, getContentfulGridRangeAroundCell = _64.getContentfulGridRangeAroundCell, newSelection = _64.newSelection, modifySelection = _64.modifySelection, clearSelections = _64.clearSelections;
|
|
2085
|
+
/**
|
|
2086
|
+
* Copy, Paste and Cut hook
|
|
2087
|
+
*/
|
|
2088
|
+
var _65 = (0, use_copy_paste_cut_1.useCopyPasteCut)({
|
|
2089
|
+
activeCell: activeCell,
|
|
2090
|
+
selections: selections,
|
|
2091
|
+
sheetId: sheetId,
|
|
2092
|
+
focusSheet: focusSheet,
|
|
2093
|
+
onPaste: onPaste,
|
|
2094
|
+
onCopy: onCopy,
|
|
2095
|
+
onCut: onCut,
|
|
2096
|
+
}), copiedSelections = _65.copiedSelections, clearCopiedSelections = _65.clearCopiedSelections, copy = _65.copy, cut = _65.cut, paste = _65.paste, onInternalCopy = _65.onInternalCopy, onInternalCut = _65.onInternalCut, onInternalPaste = _65.onInternalPaste;
|
|
2097
|
+
/**
|
|
2098
|
+
* After formula mode
|
|
2099
|
+
* Recover old selections
|
|
2100
|
+
*/
|
|
2101
|
+
var restoreSelections = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
|
|
2102
|
+
if (!formulaMode || !formulaSelections.length) {
|
|
2103
|
+
return;
|
|
2104
|
+
}
|
|
2105
|
+
var len = selections.length - formulaSelections.length;
|
|
2106
|
+
onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId, selections.filter(function (_, i) { return i < len; }));
|
|
2107
|
+
}, [
|
|
2108
|
+
sheetId,
|
|
2109
|
+
selections,
|
|
2110
|
+
formulaMode,
|
|
2111
|
+
formulaSelections,
|
|
2112
|
+
onChangeSelections,
|
|
2113
|
+
]));
|
|
2114
|
+
/**
|
|
2115
|
+
* Callback when editor value changes
|
|
2116
|
+
*/
|
|
2117
|
+
var onEditorChange = (0, use_editor_change_1.useEditorChange)({
|
|
2118
|
+
selections: selections,
|
|
2119
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
2120
|
+
onChangeSelections: onChangeSelections,
|
|
2121
|
+
getSelectionsFromFormula: getSelectionsFromFormula,
|
|
2122
|
+
onChangeEditorValue: onChangeEditorValue,
|
|
2123
|
+
});
|
|
2124
|
+
// Get final row height to expand to based on value of a cell
|
|
2125
|
+
var getFinalRowHeight = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex, options) {
|
|
2126
|
+
var _a;
|
|
2127
|
+
if (isRowResizedByUser(rowIndex)) {
|
|
2128
|
+
return undefined;
|
|
2129
|
+
}
|
|
2130
|
+
var height = getCellDimensions(sheetId, rowIndex, columnIndex, "x", options).height;
|
|
2131
|
+
// The rest of the row's required height — the max content height
|
|
2132
|
+
// over every OTHER cell in the row (the edited column is excluded;
|
|
2133
|
+
// its requirement is the freshly measured `height` above). Already
|
|
2134
|
+
// floored at the default row height by `getRowHeight`.
|
|
2135
|
+
var currentRowHeight = (_a = getRowHeight === null || getRowHeight === void 0 ? void 0 : getRowHeight(sheetId, rowIndex,
|
|
2136
|
+
// Exclude columns within the selection
|
|
2137
|
+
function (colIndex) { return colIndex >= columnIndex && colIndex <= columnIndex; })) !== null && _a !== void 0 ? _a : defaultRowHeight;
|
|
2138
|
+
// Row auto-height = max requirement across ALL cells in the row —
|
|
2139
|
+
// committing a short value into one cell must not shrink a row that
|
|
2140
|
+
// another cell's wrapped/multi-line content keeps tall. Rows pinned
|
|
2141
|
+
// by a user drag never reach this point (`isRowResizedByUser` above).
|
|
2142
|
+
var finalHeight = Math.max(currentRowHeight, height / scale);
|
|
2143
|
+
if (finalHeight !== rowHeight(rowIndex)) {
|
|
2144
|
+
return finalHeight;
|
|
2145
|
+
}
|
|
2146
|
+
}, [
|
|
2147
|
+
scale,
|
|
2148
|
+
defaultRowHeight,
|
|
2149
|
+
isRowResizedByUser,
|
|
2150
|
+
getCellDimensions,
|
|
2151
|
+
rowHeight,
|
|
2152
|
+
getRowHeight,
|
|
2153
|
+
]));
|
|
2154
|
+
/**
|
|
2155
|
+
* Called when user submits a value
|
|
2156
|
+
* from the cell editor
|
|
2157
|
+
*/
|
|
2158
|
+
var onEditorSubmit = (0, use_editor_submit_1.useEditorSubmit)({
|
|
2159
|
+
sheetId: sheetId,
|
|
2160
|
+
onChangeActiveSheet: onChangeActiveSheet,
|
|
2161
|
+
setActiveCell: setActiveCell,
|
|
2162
|
+
onComplete: restoreSelections,
|
|
2163
|
+
onChange: onChange,
|
|
2164
|
+
getCommitValidation: getCommitValidation,
|
|
2165
|
+
showValidationAlert: showValidationAlert,
|
|
2166
|
+
});
|
|
2167
|
+
/**
|
|
2168
|
+
* User cancels editing the cell
|
|
2169
|
+
*/
|
|
2170
|
+
var onEditorCancel = (0, use_editor_cancel_1.useEditorCancel)({
|
|
2171
|
+
sheetId: sheetId,
|
|
2172
|
+
onChangeActiveSheet: onChangeActiveSheet,
|
|
2173
|
+
setActiveCell: setActiveCell,
|
|
2174
|
+
onComplete: restoreSelections,
|
|
2175
|
+
});
|
|
2176
|
+
/**
|
|
2177
|
+
* Use before edit to store editing cell reference
|
|
2178
|
+
*/
|
|
2179
|
+
var handleBeforeEdit = (0, react_1.useCallback)(function (sheetId, cell) {
|
|
2180
|
+
setEditingCellCoordinate(tslib_1.__assign(tslib_1.__assign({}, cell), { sheetId: sheetId }));
|
|
2181
|
+
}, [setEditingCellCoordinate]);
|
|
2182
|
+
/**
|
|
2183
|
+
* Callback on editor keydown
|
|
2184
|
+
* User can navigate between sheets
|
|
2185
|
+
* In formula mode, user can select cells
|
|
2186
|
+
*/
|
|
2187
|
+
var onEditorKeyDown = (0, use_editor_keydown_1.useEditorKeydown)({
|
|
2188
|
+
sheetId: sheetId,
|
|
2189
|
+
onSelectNextSheet: onSelectNextSheet,
|
|
2190
|
+
onSelectPreviousSheet: onSelectPreviousSheet,
|
|
2191
|
+
onKeyDownSelection: onKeyDownSelection,
|
|
2192
|
+
});
|
|
2193
|
+
/**
|
|
2194
|
+
* Get bounds of chart overlay
|
|
2195
|
+
* Within the grid body
|
|
2196
|
+
*/
|
|
2197
|
+
var getChartBounds = (0, react_1.useCallback)(function () {
|
|
2198
|
+
return {
|
|
2199
|
+
left: getColumnOffset(1),
|
|
2200
|
+
top: getRowOffset(1),
|
|
2201
|
+
};
|
|
2202
|
+
}, [getRowOffset, getColumnOffset]);
|
|
2203
|
+
// Show notes editor
|
|
2204
|
+
var onInsertNote = (0, react_1.useCallback)(function (sheetId, cell) {
|
|
2205
|
+
setNoteEditorCell(tslib_1.__assign(tslib_1.__assign({}, cell), { sheetId: sheetId }));
|
|
2206
|
+
}, [setNoteEditorCell]);
|
|
2207
|
+
// Show pinned tooltip
|
|
2208
|
+
var onPinToolTip = (0, react_1.useCallback)(function (sheetId, cell) {
|
|
2209
|
+
setPinnedTooltip(tslib_1.__assign({ sheetId: sheetId }, cell));
|
|
2210
|
+
}, [setPinnedTooltip]);
|
|
2211
|
+
// Unpin tooltip
|
|
2212
|
+
var onUnpinTooltip = (0, react_1.useCallback)(function () {
|
|
2213
|
+
setPinnedTooltip(undefined);
|
|
2214
|
+
}, [setPinnedTooltip]);
|
|
2215
|
+
/**
|
|
2216
|
+
* Add quick edit range
|
|
2217
|
+
*/
|
|
2218
|
+
var onAddQuickEdit = (0, react_1.useCallback)(function (range) {
|
|
2219
|
+
if (!enableQuickEdit) {
|
|
2220
|
+
return;
|
|
2221
|
+
}
|
|
2222
|
+
setQuickEditState(function (prev) {
|
|
2223
|
+
return tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(prev), false), [{ id: (0, utils_1.uuid)(), range: range }], false);
|
|
2224
|
+
});
|
|
2225
|
+
}, [setQuickEditState, enableQuickEdit]);
|
|
2226
|
+
/**
|
|
2227
|
+
* Remove quick edit
|
|
2228
|
+
*/
|
|
2229
|
+
var onRemoveQuickEdit = (0, react_1.useCallback)(function (range) {
|
|
2230
|
+
if (!enableQuickEdit) {
|
|
2231
|
+
return;
|
|
2232
|
+
}
|
|
2233
|
+
setQuickEditState(function (prev) {
|
|
2234
|
+
return prev.filter(function (item) {
|
|
2235
|
+
return !(range.sheetId === item.range.sheetId &&
|
|
2236
|
+
(0, grid_1.isAreasEqual)(item.range, range));
|
|
2237
|
+
});
|
|
2238
|
+
});
|
|
2239
|
+
focusSheet();
|
|
2240
|
+
}, [setQuickEditState, enableQuickEdit, focusSheet]);
|
|
2241
|
+
/**
|
|
2242
|
+
* Get context Menu component
|
|
2243
|
+
*/
|
|
2244
|
+
var getContextMenu = (0, react_1.useCallback)(function (cell) {
|
|
2245
|
+
return (react_1.default.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: onInsertRow, onInsertColumn: onInsertColumn, 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, onPaste: paste, 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, onAddQuickEdit: onAddQuickEdit, enableMagicFill: enableMagicFill }));
|
|
2246
|
+
}, [
|
|
2247
|
+
isRestricted,
|
|
2248
|
+
activeCell,
|
|
2249
|
+
sheetId,
|
|
2250
|
+
selections,
|
|
2251
|
+
frozenRows,
|
|
2252
|
+
frozenColumns,
|
|
2253
|
+
onHideColumn,
|
|
2254
|
+
ContextMenu,
|
|
2255
|
+
onHideRow,
|
|
2256
|
+
onDeleteColumn,
|
|
2257
|
+
onDeleteRow,
|
|
2258
|
+
onInsertColumn,
|
|
2259
|
+
onInsertRow,
|
|
2260
|
+
onInsertCellsShiftDown,
|
|
2261
|
+
onInsertCellsShiftRight,
|
|
2262
|
+
onDeleteCellsShiftLeft,
|
|
2263
|
+
onDeleteCellsShiftUp,
|
|
2264
|
+
onClearContents,
|
|
2265
|
+
onFreezeColumn,
|
|
2266
|
+
onFreezeRow,
|
|
2267
|
+
focusSheet,
|
|
2268
|
+
onSortColumn,
|
|
2269
|
+
copy,
|
|
2270
|
+
paste,
|
|
2271
|
+
cut,
|
|
2272
|
+
onInsertNote,
|
|
2273
|
+
onProtectRange,
|
|
2274
|
+
onUnProtectRange,
|
|
2275
|
+
onSortRange,
|
|
2276
|
+
onRequestDefineNamedRange,
|
|
2277
|
+
onRequestResize,
|
|
2278
|
+
isRowHeader,
|
|
2279
|
+
isColumnHeader,
|
|
2280
|
+
selectedRowHeadersIds,
|
|
2281
|
+
selectedColumnHeadersIds,
|
|
2282
|
+
protectedRanges,
|
|
2283
|
+
isSheetFocused,
|
|
2284
|
+
activeTables,
|
|
2285
|
+
basicFilter,
|
|
2286
|
+
pivotTables,
|
|
2287
|
+
isTableHeader,
|
|
2288
|
+
onFilterTable,
|
|
2289
|
+
onSortTable,
|
|
2290
|
+
onRequestEditTable,
|
|
2291
|
+
onRequestEditPivotTable,
|
|
2292
|
+
onRemoveTable,
|
|
2293
|
+
onRequestFormatCells,
|
|
2294
|
+
onClearFormatting,
|
|
2295
|
+
onRequestConditionalFormat,
|
|
2296
|
+
onRequestDataValidation,
|
|
2297
|
+
onCreateBasicFilter,
|
|
2298
|
+
onCreateTable,
|
|
2299
|
+
onDeleteTableColumn,
|
|
2300
|
+
onInsertTableRow,
|
|
2301
|
+
getFormattedValue,
|
|
2302
|
+
getFormattedValuesFromRange,
|
|
2303
|
+
onInsertTableColumn,
|
|
2304
|
+
onDeleteTableRow,
|
|
2305
|
+
readonly,
|
|
2306
|
+
onAddQuickEdit,
|
|
2307
|
+
enableMagicFill,
|
|
2308
|
+
onSplitTextToColumns,
|
|
2309
|
+
onRemoveDuplicates,
|
|
2310
|
+
onRequestDeletePivotTable,
|
|
2311
|
+
isHiddenColumn,
|
|
2312
|
+
isHiddenRow,
|
|
2313
|
+
onShowColumn,
|
|
2314
|
+
onShowRow,
|
|
2315
|
+
onGroupRows,
|
|
2316
|
+
onUngroupRows,
|
|
2317
|
+
onGroupColumns,
|
|
2318
|
+
onUngroupColumns,
|
|
2319
|
+
]);
|
|
2320
|
+
/**
|
|
2321
|
+
* Context menu hook
|
|
2322
|
+
* Displays Context menu when user right clicks
|
|
2323
|
+
* the grid
|
|
2324
|
+
*/
|
|
2325
|
+
var _66 = (0, use_context_menu_1.useContextMenu)({
|
|
2326
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2327
|
+
getRelativePositionFromOffset: getRelativePositionFromOffset,
|
|
2328
|
+
isRowHeader: isRowHeader,
|
|
2329
|
+
isColumnHeader: isColumnHeader,
|
|
2330
|
+
getContextMenu: getContextMenu,
|
|
2331
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2332
|
+
getScrollPosition: getScrollPosition,
|
|
2333
|
+
ContextMenuWrapper: ContextMenuWrapper,
|
|
2334
|
+
}), onContextMenu = _66.onContextMenu, contextMenuComponent = _66.contextMenuComponent, onRequestCloseContextMenu = _66.onRequestClose, showContextMenu = _66.showContextMenu;
|
|
2335
|
+
/**
|
|
2336
|
+
* Shortcut handlers for formatting
|
|
2337
|
+
* TODO: Decide on the output
|
|
2338
|
+
*/
|
|
2339
|
+
var onKeyDownFormatting = (0, use_keyboard_handler_1.useKeyboardHandler)({
|
|
2340
|
+
sheetId: sheetId,
|
|
2341
|
+
locale: locale,
|
|
2342
|
+
showFormulas: showFormulas,
|
|
2343
|
+
canEditCell: canEditCell,
|
|
2344
|
+
onShowFormulas: onShowFormulas,
|
|
2345
|
+
getCellFormat: getEffectiveCellFormat,
|
|
2346
|
+
activeCell: activeCell,
|
|
2347
|
+
selections: selections,
|
|
2348
|
+
selectedColumns: selectedColumns,
|
|
2349
|
+
selectedRows: selectedRows,
|
|
2350
|
+
onChangeFormatting: onChangeFormatting,
|
|
2351
|
+
onRepeatFormatting: onRepeatFormatting,
|
|
2352
|
+
onInsertNote: onInsertNote,
|
|
2353
|
+
onClearFormatting: onClearFormatting,
|
|
2354
|
+
onSelectNextSheet: onSelectNextSheet,
|
|
2355
|
+
onSelectPreviousSheet: onSelectPreviousSheet,
|
|
2356
|
+
onCreateNewSheet: onCreateNewSheet,
|
|
2357
|
+
onFillRange: onFillRange,
|
|
2358
|
+
disableFillRightShortcut: disableFillRightShortcut,
|
|
2359
|
+
onInsertTime: onInsertTime,
|
|
2360
|
+
onInsertDate: onInsertDate,
|
|
2361
|
+
onInsertDateTime: onInsertDateTime,
|
|
2362
|
+
onUndo: onUndo,
|
|
2363
|
+
onRedo: onRedo,
|
|
2364
|
+
onCreateTable: onCreateTable,
|
|
2365
|
+
onCreateBasicFilter: onCreateBasicFilter,
|
|
2366
|
+
clearCopiedSelections: clearCopiedSelections,
|
|
2367
|
+
onRequestSearch: onRequestSearch,
|
|
2368
|
+
onRequestReplace: onRequestReplace,
|
|
2369
|
+
onRequestFormatCells: onRequestFormatCells,
|
|
2370
|
+
onRequestInsertComment: onRequestInsertComment,
|
|
2371
|
+
onRequestInsertLink: onRequestInsertLink,
|
|
2372
|
+
onShowContextMenu: showContextMenu,
|
|
2373
|
+
onHideColumn: onHideColumn,
|
|
2374
|
+
onHideRow: onHideRow,
|
|
2375
|
+
onGroupRows: onGroupRows,
|
|
2376
|
+
onUngroupRows: onUngroupRows,
|
|
2377
|
+
onGroupColumns: onGroupColumns,
|
|
2378
|
+
onUngroupColumns: onUngroupColumns,
|
|
2379
|
+
onDeleteRow: onDeleteRow,
|
|
2380
|
+
onInsertRow: onInsertRow,
|
|
2381
|
+
onInsertAutoSum: onInsertAutoSum,
|
|
2382
|
+
onShowColumn: onShowColumn,
|
|
2383
|
+
onShowRow: onShowRow,
|
|
2384
|
+
onAddQuickEdit: onAddQuickEdit,
|
|
2385
|
+
isSheetFocused: isSheetFocused,
|
|
2386
|
+
defaultFontSizePoint: defaultFontSizePoint,
|
|
2387
|
+
});
|
|
2388
|
+
/**
|
|
2389
|
+
* Bind to keydown events
|
|
2390
|
+
* in the grid
|
|
2391
|
+
*/
|
|
2392
|
+
var handleKeyDown = (0, react_1.useCallback)(function (e) {
|
|
2393
|
+
// For moving around in the sheet
|
|
2394
|
+
onKeyDownSelection(e);
|
|
2395
|
+
// Disable all keys
|
|
2396
|
+
if (readonly) {
|
|
2397
|
+
return;
|
|
2398
|
+
}
|
|
2399
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
2400
|
+
onKeyDownFormatting === null || onKeyDownFormatting === void 0 ? void 0 : onKeyDownFormatting(e);
|
|
2401
|
+
}, [onKeyDownSelection, onKeyDown, onKeyDownFormatting, readonly]);
|
|
2402
|
+
/**
|
|
2403
|
+
* Allow grid to be ediable
|
|
2404
|
+
*/
|
|
2405
|
+
var _67 = (0, use_editable_1.useEditable)({
|
|
2406
|
+
sheetId: sheetId,
|
|
2407
|
+
enableEditOnEnterKey: enableEditOnEnterKey,
|
|
2408
|
+
canEdit: canEditCell,
|
|
2409
|
+
sticky: stickyEditor,
|
|
2410
|
+
getScrollPosition: getScrollPosition,
|
|
2411
|
+
hideOnBlur: formulaMode && canSelectCells ? false : true,
|
|
2412
|
+
isHiddenRow: isHiddenRow,
|
|
2413
|
+
isHiddenColumn: isHiddenColumn,
|
|
2414
|
+
columnCount: columnCount,
|
|
2415
|
+
rowCount: rowCount,
|
|
2416
|
+
frozenColumns: frozenColumns,
|
|
2417
|
+
frozenRows: frozenRows,
|
|
2418
|
+
activeCell: activeCell,
|
|
2419
|
+
selections: selections,
|
|
2420
|
+
getSheetColumnCount: getSheetColumnCount,
|
|
2421
|
+
getSheetRowCount: getSheetRowCount,
|
|
2422
|
+
getValue: getUserEnteredStringValue,
|
|
2423
|
+
getTextFormatRuns: getTextFormatRuns,
|
|
2424
|
+
getBooleanValue: getBooleanValue,
|
|
2425
|
+
getDataValidation: getDataValidationRule,
|
|
2426
|
+
selectionLeftBound: selectionLeftBound,
|
|
2427
|
+
selectionTopBound: selectionTopBound,
|
|
2428
|
+
editorBorderColor: selectionBorderColor,
|
|
2429
|
+
getEditor: getEditor,
|
|
2430
|
+
onBeforeEdit: handleBeforeEdit,
|
|
2431
|
+
onSubmit: onEditorSubmit,
|
|
2432
|
+
onCancel: onEditorCancel,
|
|
2433
|
+
onBlur: handleEditorBlur,
|
|
2434
|
+
onChange: onEditorChange,
|
|
2435
|
+
onChangeBatch: onChangeBatch,
|
|
2436
|
+
setActiveCell: setActiveCell,
|
|
2437
|
+
onDelete: onDelete,
|
|
2438
|
+
onKeyDown: handleKeyDown,
|
|
2439
|
+
onEditorKeyDown: onEditorKeyDown,
|
|
2440
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2441
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2442
|
+
getCellBounds: getCellBounds,
|
|
2443
|
+
getRowOffset: getRowOffset,
|
|
2444
|
+
getColumnOffset: getColumnOffset,
|
|
2445
|
+
getEditorAlignment: getEditorHorizontalAlignment,
|
|
2446
|
+
focus: focusSheet,
|
|
2447
|
+
getActualCellCoords: getActualCellCoords,
|
|
2448
|
+
scrollToCell: scrollToCell,
|
|
2449
|
+
containerWidth: width,
|
|
2450
|
+
containerHeight: height,
|
|
2451
|
+
onCopy: onInternalCopy,
|
|
2452
|
+
onPaste: onInternalPaste,
|
|
2453
|
+
onCut: onInternalCut,
|
|
2454
|
+
}), onMouseDownEditable = _67.onMouseDown, onDoubleClickEditable = _67.onDoubleClick, editorComponent = _67.editorComponent, isEditInProgress = _67.isEditInProgress, makeEditable = _67.makeEditable, editCell = _67.editCell, setEditorValue = _67.setEditorValue, hideEditor = _67.hideEditor, getNextFocusableCell = _67.getNextFocusableCell, submitEditor = _67.submitEditor, cancelEditor = _67.cancelEditor, commit = _67.commit;
|
|
2455
|
+
/**
|
|
2456
|
+
* Move rows and columns
|
|
2457
|
+
*/
|
|
2458
|
+
var _68 = (0, use_move_columns_rows_1.useMoveColumnsAndRows)({
|
|
2459
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2460
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2461
|
+
getRelativePositionFromOffset: getRelativePositionFromOffset,
|
|
2462
|
+
scrollToCell: scrollToCell,
|
|
2463
|
+
focusSheet: focusSheet,
|
|
2464
|
+
columns: formulaMode ? undefined : selectedColumnHeadersIds,
|
|
2465
|
+
rows: formulaMode ? undefined : selectedRowHeadersIds,
|
|
2466
|
+
selectionLeftBound: selectionLeftBound,
|
|
2467
|
+
selectionTopBound: selectionTopBound,
|
|
2468
|
+
onMoveColumns: onMoveColumns,
|
|
2469
|
+
onMoveRows: onMoveRows,
|
|
2470
|
+
containerWidth: width - scrollbarSize,
|
|
2471
|
+
containerHeight: height - scrollbarSize,
|
|
2472
|
+
getScrollPosition: getScrollPosition,
|
|
2473
|
+
onChangeSelections: onChangeSelections,
|
|
2474
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
2475
|
+
activeCell: activeCell,
|
|
2476
|
+
rowCount: rowCount,
|
|
2477
|
+
columnCount: columnCount,
|
|
2478
|
+
sheetId: sheetId,
|
|
2479
|
+
disabled: isRestricted,
|
|
2480
|
+
HeaderMoveDragComponent: HeaderMoveDragComponent,
|
|
2481
|
+
}), draggableColumns = _68.draggableColumns, draggableRows = _68.draggableRows, isDraggingRowsAndColumns = _68.isDragging;
|
|
2482
|
+
/**
|
|
2483
|
+
* Header actions
|
|
2484
|
+
*/
|
|
2485
|
+
var _69 = (0, use_header_actions_1.useHeaderActions)({
|
|
2486
|
+
activeCell: isSelectionInProgress || isFilling || isDragging ? null : hoveredCell,
|
|
2487
|
+
getScrollPosition: getScrollPosition,
|
|
2488
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2489
|
+
getRelativePositionFromOffset: getRelativePositionFromOffset,
|
|
2490
|
+
showContextMenu: showContextMenu,
|
|
2491
|
+
selectColumn: selectColumn,
|
|
2492
|
+
setActiveCell: setActiveCell,
|
|
2493
|
+
getViewPort: getViewPort,
|
|
2494
|
+
frozenRows: frozenRows,
|
|
2495
|
+
frozenColumns: frozenColumns,
|
|
2496
|
+
selectionTopBound: selectionTopBound,
|
|
2497
|
+
showHeaderMenuButton: showHeaderMenuButton,
|
|
2498
|
+
scale: scale,
|
|
2499
|
+
onResize: onResize,
|
|
2500
|
+
focusSheet: focusSheet,
|
|
2501
|
+
isRowHeader: isRowHeader,
|
|
2502
|
+
isColumnHeader: isColumnHeader,
|
|
2503
|
+
isHiddenColumn: isHiddenColumn,
|
|
2504
|
+
containerWidth: width - scrollbarSize,
|
|
2505
|
+
containerHeight: height - scrollbarSize,
|
|
2506
|
+
onAutoFit: handleAutoFit,
|
|
2507
|
+
backgroundColor: selectionBorderColor,
|
|
2508
|
+
sheetId: sheetId,
|
|
2509
|
+
selectedRowHeadersIds: selectedRowHeadersIds,
|
|
2510
|
+
selectedColumnHeadersIds: selectedColumnHeadersIds,
|
|
2511
|
+
enableResizerOverflow: enableResizerOverflow,
|
|
2512
|
+
}), headerMenuComponent = _69.headerMenuComponent, isHeaderMenuInFrozenColumn = _69.isHeaderMenuInFrozenColumn, headerResizer = _69.headerResizer, isDraggingHeader = _69.isDragging;
|
|
2513
|
+
/**
|
|
2514
|
+
* Close tooltip
|
|
2515
|
+
*/
|
|
2516
|
+
var onRequestCloseTooltip = (0, react_1.useCallback)(function () {
|
|
2517
|
+
setHoveredCell(undefined);
|
|
2518
|
+
}, []);
|
|
2519
|
+
// Scroll subscriber
|
|
2520
|
+
var handleScroll = (0, react_1.useCallback)(function (scrollPosition) {
|
|
2521
|
+
// Pass it to rxjs subscriber
|
|
2522
|
+
if (!isEditInProgress) {
|
|
2523
|
+
scroll_subscriber_1.scrollSubscriber.next(scrollPosition);
|
|
2524
|
+
}
|
|
2525
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll(scrollPosition);
|
|
2526
|
+
}, [onScroll, isEditInProgress]);
|
|
2527
|
+
/**
|
|
2528
|
+
* Tooltips
|
|
2529
|
+
*/
|
|
2530
|
+
var tooltipComponent = (0, use_tooltip_1.useTooltip)({
|
|
2531
|
+
sheetId: sheetId,
|
|
2532
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2533
|
+
activeCell: isDraggingHeader || isSelectionInProgress || isFilling || isDragging
|
|
2534
|
+
? null
|
|
2535
|
+
: delayedHoveredCell,
|
|
2536
|
+
getScrollPosition: getScrollPosition,
|
|
2537
|
+
getTooltip: getTooltip,
|
|
2538
|
+
isFrozenColumn: isFrozenColumn,
|
|
2539
|
+
isFrozenRow: isFrozenRow,
|
|
2540
|
+
onUpdateNote: onUpdateNote,
|
|
2541
|
+
onRemoveLink: onRemoveLink,
|
|
2542
|
+
onSelectLink: onSelectLink,
|
|
2543
|
+
onRequestClose: onRequestCloseTooltip,
|
|
2544
|
+
}).tooltipComponent;
|
|
2545
|
+
/**
|
|
2546
|
+
* Get filter component
|
|
2547
|
+
*/
|
|
2548
|
+
var getFilterComponent = (0, react_1.useCallback)(function (props) {
|
|
2549
|
+
return react_1.default.createElement(FilterBox, tslib_1.__assign({}, props, { sheetId: sheetId }));
|
|
2550
|
+
}, [sheetId, FilterBox]);
|
|
2551
|
+
/**
|
|
2552
|
+
* Show basicFilter panels
|
|
2553
|
+
*/
|
|
2554
|
+
var _70 = (0, use_filter_1.useFilter)({
|
|
2555
|
+
sheetId: sheetId,
|
|
2556
|
+
scale: scale,
|
|
2557
|
+
theme: theme,
|
|
2558
|
+
getActualCellCoords: getActualCellCoords,
|
|
2559
|
+
getScrollPosition: getScrollPosition,
|
|
2560
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2561
|
+
getFilterComponent: getFilterComponent,
|
|
2562
|
+
getFormattedValue: getFormattedValue,
|
|
2563
|
+
getEffectiveFormat: getEffectiveFormat,
|
|
2564
|
+
conditionalFormatByCell: conditionalFormatByCell,
|
|
2565
|
+
isFrozenColumn: isFrozenColumn,
|
|
2566
|
+
isFrozenRow: isFrozenRow,
|
|
2567
|
+
isHiddenRowByFilter: isHiddenRowByFilter,
|
|
2568
|
+
onSortTable: onSortTable,
|
|
2569
|
+
onFilterTable: onFilterTable,
|
|
2570
|
+
onInsertTableColumn: onInsertTableColumn,
|
|
2571
|
+
onDeleteTableColumn: onDeleteTableColumn,
|
|
2572
|
+
// Host-computed distinct values for the checklist.
|
|
2573
|
+
getFilterValues: getFilterValues,
|
|
2574
|
+
// Host-computed swatches for the "Filter by color" picker (windowed engines).
|
|
2575
|
+
getFilterColors: getFilterColors,
|
|
2576
|
+
// Live filter state so the open popup tracks Auto-apply spec changes.
|
|
2577
|
+
basicFilter: basicFilter,
|
|
2578
|
+
tables: activeTables,
|
|
2579
|
+
}), showFilter = _70.showFilter, hideFilter = _70.hideFilter, filterComponent = _70.filterComponent;
|
|
2580
|
+
// Table resize
|
|
2581
|
+
var _71 = (0, use_table_resizer_1.useTableResizer)({
|
|
2582
|
+
sheetId: sheetId,
|
|
2583
|
+
tables: tables !== null && tables !== void 0 ? tables : undefined,
|
|
2584
|
+
theme: theme,
|
|
2585
|
+
newSelection: newSelection,
|
|
2586
|
+
modifySelection: modifySelection,
|
|
2587
|
+
clearSelections: clearSelections,
|
|
2588
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2589
|
+
scrollToCell: scrollToCell,
|
|
2590
|
+
onResizeTable: onResizeTable,
|
|
2591
|
+
focusSheet: focusSheet,
|
|
2592
|
+
}), tableResizers = _71.tableResizers, isResizingTable = _71.isResizingTable;
|
|
2593
|
+
/**
|
|
2594
|
+
* Displays resizable/draggable charts
|
|
2595
|
+
*/
|
|
2596
|
+
var _72 = (0, use_embeds_charts_1.useEmbedsCharts)({
|
|
2597
|
+
charts: charts,
|
|
2598
|
+
embeds: embeds,
|
|
2599
|
+
slicers: slicers,
|
|
2600
|
+
sheetId: sheetId,
|
|
2601
|
+
scale: scale,
|
|
2602
|
+
frozenRows: frozenRows,
|
|
2603
|
+
frozenColumns: frozenColumns,
|
|
2604
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
2605
|
+
getAbsolutePositionFromOffset: getAbsolutePositionFromOffset,
|
|
2606
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2607
|
+
getScrollPosition: getScrollPosition,
|
|
2608
|
+
selectedColor: chartSelectedColor,
|
|
2609
|
+
onMoveChart: onMoveChart,
|
|
2610
|
+
onResizeChart: onResizeChart,
|
|
2611
|
+
onMoveEmbed: onMoveEmbed,
|
|
2612
|
+
onResizeEmbed: onResizeEmbed,
|
|
2613
|
+
onDeleteEmbed: onDeleteEmbed,
|
|
2614
|
+
onDeleteChart: onDeleteChart,
|
|
2615
|
+
onRequestEditEmbed: onRequestEditEmbed,
|
|
2616
|
+
onMoveSlicer: onMoveSlicer,
|
|
2617
|
+
onResizeSlicer: onResizeSlicer,
|
|
2618
|
+
onDeleteSlicer: onDeleteSlicer,
|
|
2619
|
+
onRequestEditSlicer: onRequestEditSlicer,
|
|
2620
|
+
onFilterTable: onFilterTable,
|
|
2621
|
+
onFilterPivot: onFilterPivot,
|
|
2622
|
+
tables: tables,
|
|
2623
|
+
pivotTables: pivotTables,
|
|
2624
|
+
getFormattedValue: getFormattedValue,
|
|
2625
|
+
getChartComponent: getChartComponent,
|
|
2626
|
+
getEmbedComponent: getEmbedComponent,
|
|
2627
|
+
getSlicerComponent: getSlicerComponent,
|
|
2628
|
+
getBounds: getChartBounds,
|
|
2629
|
+
theme: theme,
|
|
2630
|
+
backgroundColor: cellBackgroundColor,
|
|
2631
|
+
disabled: isRestricted,
|
|
2632
|
+
readonly: readonly,
|
|
2633
|
+
}), chartComponents = _72.chartComponents, embedComponents = _72.embedComponents, slicerComponents = _72.slicerComponents, onMouseDownCharts = _72.onMouseDown;
|
|
2634
|
+
/**
|
|
2635
|
+
* Callback when user clicks Filter icon
|
|
2636
|
+
* Show Filter dropdown here
|
|
2637
|
+
*/
|
|
2638
|
+
var handleFilterClick = (0, react_1.useCallback)(function (cell) {
|
|
2639
|
+
var activeFilter = basicFilter && (0, grid_4.isCellWithinBounds)(cell, basicFilter === null || basicFilter === void 0 ? void 0 : basicFilter.range)
|
|
2640
|
+
? basicFilter
|
|
2641
|
+
: activeTables === null || activeTables === void 0 ? void 0 : activeTables.find(function (table) {
|
|
2642
|
+
return (0, grid_4.isCellWithinBounds)(cell, table.range);
|
|
2643
|
+
});
|
|
2644
|
+
if (activeFilter) {
|
|
2645
|
+
showFilter(cell, activeFilter);
|
|
2646
|
+
}
|
|
2647
|
+
}, [showFilter, basicFilter, activeTables]);
|
|
2648
|
+
/**
|
|
2649
|
+
* Callback when user checks a cell
|
|
2650
|
+
*/
|
|
2651
|
+
var onChangeRef = (0, use_callback_ref_1.useCallbackRef)(onChange);
|
|
2652
|
+
var handleCheckboxClick = (0, react_1.useCallback)(function (cell, checked) {
|
|
2653
|
+
// If the checkbox is derived from a formula calculation
|
|
2654
|
+
// do not let users change it by toggling the checkbox
|
|
2655
|
+
var rowIndex = cell.rowIndex, columnIndex = cell.columnIndex;
|
|
2656
|
+
var isFormula = !!getFormulaValue(sheetId, rowIndex, columnIndex);
|
|
2657
|
+
if (isFormula) {
|
|
2658
|
+
(0, utils_1.log)("Checkbox selection is disabled for formula cells.");
|
|
2659
|
+
}
|
|
2660
|
+
else {
|
|
2661
|
+
onChangeRef === null || onChangeRef === void 0 ? void 0 : onChangeRef(sheetId, cell, checked, undefined, !checked, true);
|
|
2662
|
+
}
|
|
2663
|
+
}, [sheetId, getFormulaValue, onChangeRef]);
|
|
2664
|
+
/**
|
|
2665
|
+
* Get group keys of a cell
|
|
2666
|
+
*/
|
|
2667
|
+
var getCellGroupKeys = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
2668
|
+
var _a;
|
|
2669
|
+
return (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.groupKeys;
|
|
2670
|
+
}, [getCellData]);
|
|
2671
|
+
/**
|
|
2672
|
+
* Get children count
|
|
2673
|
+
*/
|
|
2674
|
+
var getChildrenCount = (0, react_1.useCallback)(function (sheetId, rowIndex, columnIndex) {
|
|
2675
|
+
var _a, _b;
|
|
2676
|
+
return (_b = (_a = getCellData === null || getCellData === void 0 ? void 0 : getCellData(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.childrenCount) !== null && _b !== void 0 ? _b : 0;
|
|
2677
|
+
}, [getCellData]);
|
|
2678
|
+
/**
|
|
2679
|
+
* Callback when user checks a cell
|
|
2680
|
+
*/
|
|
2681
|
+
var handleExpandCollapse = (0, react_1.useCallback)(function (sheetId, cell, newExpandedState) {
|
|
2682
|
+
var groupKeys = getCellGroupKeys(sheetId, cell.rowIndex, cell.columnIndex);
|
|
2683
|
+
var childrenCount = getChildrenCount(sheetId, cell.rowIndex, cell.columnIndex);
|
|
2684
|
+
if (groupKeys === null || groupKeys === void 0 ? void 0 : groupKeys.length) {
|
|
2685
|
+
onExpandCollapse === null || onExpandCollapse === void 0 ? void 0 : onExpandCollapse(sheetId, cell, groupKeys, newExpandedState, childrenCount);
|
|
2686
|
+
}
|
|
2687
|
+
}, [onExpandCollapse, getCellGroupKeys, getChildrenCount]);
|
|
2688
|
+
/**
|
|
2689
|
+
* Capture mouse move events
|
|
2690
|
+
*/
|
|
2691
|
+
var handleMouseMove = (0, react_1.useCallback)(function (e) {
|
|
2692
|
+
// A little bit of optimization here
|
|
2693
|
+
if (isDragging ||
|
|
2694
|
+
isDraggingRowsAndColumns ||
|
|
2695
|
+
isDraggingHeader ||
|
|
2696
|
+
isSelectionInProgress ||
|
|
2697
|
+
isFilling) {
|
|
2698
|
+
return;
|
|
2699
|
+
}
|
|
2700
|
+
var coords = getCellCoordsFromOffset(e.clientX, e.clientY);
|
|
2701
|
+
if (!coords || (0, grid_5.isEqualCells)(hoveredCellRef.current, coords)) {
|
|
2702
|
+
return;
|
|
2703
|
+
}
|
|
2704
|
+
setHoveredCell(coords);
|
|
2705
|
+
}, [
|
|
2706
|
+
getCellCoordsFromOffset,
|
|
2707
|
+
isDragging,
|
|
2708
|
+
isDraggingRowsAndColumns,
|
|
2709
|
+
isDraggingHeader,
|
|
2710
|
+
isSelectionInProgress,
|
|
2711
|
+
isFilling,
|
|
2712
|
+
hoveredCellRef,
|
|
2713
|
+
]);
|
|
2714
|
+
// Mouse move throttler
|
|
2715
|
+
var mouseMoveThrottler = (0, use_callback_ref_1.useCallbackRef)((0, throttle_1.default)(handleMouseMove, mouseMoveThrottleTimeout, {
|
|
2716
|
+
trailing: true,
|
|
2717
|
+
leading: true,
|
|
2718
|
+
}));
|
|
2719
|
+
/**
|
|
2720
|
+
* Bind to mousedown events
|
|
2721
|
+
* in the grid
|
|
2722
|
+
*/
|
|
2723
|
+
var handleMouseDown = (0, react_1.useCallback)(function (e) {
|
|
2724
|
+
// Ignore mousedown for touch devices
|
|
2725
|
+
// since we use onPointerDown
|
|
2726
|
+
if (helpers_1.isTouchDevice) {
|
|
2727
|
+
return;
|
|
2728
|
+
}
|
|
2729
|
+
var isMetaKey = e.nativeEvent.metaKey || e.nativeEvent.ctrlKey;
|
|
2730
|
+
var isRightClick = e.button === grid_3.MouseButtonCodes.right || e.ctrlKey;
|
|
2731
|
+
// Keep focus on grid
|
|
2732
|
+
if (!isRightClick && !e.isDefaultPrevented()) {
|
|
2733
|
+
focusSheet();
|
|
2734
|
+
}
|
|
2735
|
+
/**
|
|
2736
|
+
* In use-selection, we use a scheduler to append
|
|
2737
|
+
* cells
|
|
2738
|
+
*
|
|
2739
|
+
* This state update is queued, and update only
|
|
2740
|
+
* happens after selection changes.
|
|
2741
|
+
*
|
|
2742
|
+
*/
|
|
2743
|
+
if (formulaMode && isMetaKey) {
|
|
2744
|
+
setFormulaState(function (prev) { return (tslib_1.__assign(tslib_1.__assign({}, prev), { selectionMode: "append" })); });
|
|
2745
|
+
}
|
|
2746
|
+
// Pass it on to use selection hook
|
|
2747
|
+
onMouseDownSelection(e);
|
|
2748
|
+
// Charts
|
|
2749
|
+
onMouseDownCharts === null || onMouseDownCharts === void 0 ? void 0 : onMouseDownCharts();
|
|
2750
|
+
/**
|
|
2751
|
+
* Only hide contextmenu if user
|
|
2752
|
+
* is not pressing right click
|
|
2753
|
+
*/
|
|
2754
|
+
if (!isRightClick) {
|
|
2755
|
+
onRequestCloseContextMenu();
|
|
2756
|
+
}
|
|
2757
|
+
// Hide filter
|
|
2758
|
+
hideFilter();
|
|
2759
|
+
// Hide popover
|
|
2760
|
+
hideCellPopover();
|
|
2761
|
+
// Hide paste mnenu
|
|
2762
|
+
setShowPasteMenu(false);
|
|
2763
|
+
// Remove pinned tooltip
|
|
2764
|
+
onUnpinTooltip();
|
|
2765
|
+
}, [
|
|
2766
|
+
onMouseDownSelection,
|
|
2767
|
+
onRequestCloseContextMenu,
|
|
2768
|
+
hideFilter,
|
|
2769
|
+
onMouseDownCharts,
|
|
2770
|
+
formulaMode,
|
|
2771
|
+
setFormulaState,
|
|
2772
|
+
hideCellPopover,
|
|
2773
|
+
setShowPasteMenu,
|
|
2774
|
+
onUnpinTooltip,
|
|
2775
|
+
focusSheet,
|
|
2776
|
+
]);
|
|
2777
|
+
/**
|
|
2778
|
+
* Only for touch devices
|
|
2779
|
+
*/
|
|
2780
|
+
var handlePointerDown = (0, react_1.useCallback)(function (event) {
|
|
2781
|
+
onPointerDownSelection === null || onPointerDownSelection === void 0 ? void 0 : onPointerDownSelection(event);
|
|
2782
|
+
// // // Charts
|
|
2783
|
+
onMouseDownCharts === null || onMouseDownCharts === void 0 ? void 0 : onMouseDownCharts();
|
|
2784
|
+
// // // Pass it on to use editable hook
|
|
2785
|
+
onMouseDownEditable(event);
|
|
2786
|
+
// // Hide filter
|
|
2787
|
+
hideFilter();
|
|
2788
|
+
}, [
|
|
2789
|
+
hideFilter,
|
|
2790
|
+
onPointerDownSelection,
|
|
2791
|
+
onMouseDownEditable,
|
|
2792
|
+
onMouseDownCharts,
|
|
2793
|
+
]);
|
|
2794
|
+
/**
|
|
2795
|
+
* Keep focus on the editor
|
|
2796
|
+
*/
|
|
2797
|
+
var handlePointerUp = (0, react_1.useCallback)(function (event) {
|
|
2798
|
+
var isRightClick = event.button === grid_3.MouseButtonCodes.right || event.ctrlKey;
|
|
2799
|
+
// Always keep the focus on
|
|
2800
|
+
// on cell editor
|
|
2801
|
+
// If another editor is active, keep that
|
|
2802
|
+
if (!isRightClick) {
|
|
2803
|
+
focusSheet();
|
|
2804
|
+
}
|
|
2805
|
+
}, [focusSheet]);
|
|
2806
|
+
/**
|
|
2807
|
+
* Handle double clicks in the grid
|
|
2808
|
+
*/
|
|
2809
|
+
var handleDoubleClick = (0, react_1.useCallback)(function (e) {
|
|
2810
|
+
// Excel "Show Details": double-clicking a pivot VALUE cell drills
|
|
2811
|
+
// into the source rows behind it instead of entering edit mode. We
|
|
2812
|
+
// gate on a numeric effective value so only data / total cells
|
|
2813
|
+
// trigger it — text row-labels and headers fall through to the
|
|
2814
|
+
// editor (which is a no-op for pivot cells anyway).
|
|
2815
|
+
if (onPivotDrillDown) {
|
|
2816
|
+
var coords = getCellCoordsFromOffset(e.clientX, e.clientY);
|
|
2817
|
+
if (coords) {
|
|
2818
|
+
// Resolve the owning pivot from its range, not cellData.pivotId
|
|
2819
|
+
// — not every pivot cell carries that field, but range
|
|
2820
|
+
// containment is authoritative (same check canEditCell uses).
|
|
2821
|
+
var pivotTable = getPivotTableAtCell(sheetId, coords.rowIndex, coords.columnIndex);
|
|
2822
|
+
var numericValue = (0, helpers_1.getExtendedValueNumber)(getEffectiveValue(sheetId, coords.rowIndex, coords.columnIndex));
|
|
2823
|
+
if (pivotTable && !(0, utils_1.isNil)(numericValue)) {
|
|
2824
|
+
onPivotDrillDown(pivotTable.pivotId, coords.rowIndex, coords.columnIndex);
|
|
2825
|
+
return;
|
|
2826
|
+
}
|
|
2827
|
+
}
|
|
2828
|
+
}
|
|
2829
|
+
// Pass it on to editor
|
|
2830
|
+
onDoubleClickEditable === null || onDoubleClickEditable === void 0 ? void 0 : onDoubleClickEditable(e);
|
|
2831
|
+
}, [
|
|
2832
|
+
onDoubleClickEditable,
|
|
2833
|
+
onPivotDrillDown,
|
|
2834
|
+
getCellCoordsFromOffset,
|
|
2835
|
+
getPivotTableAtCell,
|
|
2836
|
+
getEffectiveValue,
|
|
2837
|
+
sheetId,
|
|
2838
|
+
]);
|
|
2839
|
+
/**
|
|
2840
|
+
* Get maximum text width
|
|
2841
|
+
* before it overflows into next cell
|
|
2842
|
+
*/
|
|
2843
|
+
var getMaximumOverflowTextWidth = (0, react_1.useCallback)(function (formattedValue, sheetId, rowIndex, columnIndex, canOverflowToNextCell, textFormat, shouldWrapOverride, direction) {
|
|
2844
|
+
var _a, _b, _c, _d, _e;
|
|
2845
|
+
if (direction === void 0) { direction = grid_1.Direction.Right; }
|
|
2846
|
+
// A format override makes the sizer measure the whole text
|
|
2847
|
+
// uniformly, ignoring per-segment rich-text runs. For cells that
|
|
2848
|
+
// carry runs (e.g. imported xlsx titles with mixed font sizes),
|
|
2849
|
+
// skip the override so run-aware measurement is used.
|
|
2850
|
+
var hasRichRuns = ((_b = (_a = getTextFormatRuns === null || getTextFormatRuns === void 0 ? void 0 : getTextFormatRuns(sheetId, rowIndex, columnIndex)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
2851
|
+
var textWidth = getCellDimensions(sheetId, rowIndex, columnIndex, "y", tslib_1.__assign(tslib_1.__assign({ textOverride: formattedValue }, (hasRichRuns ? {} : { textFormatOverride: textFormat })), { shouldWrapOverride: shouldWrapOverride })).width;
|
|
2852
|
+
var colWidth = columnWidth(columnIndex) * scale;
|
|
2853
|
+
if (textWidth < colWidth) {
|
|
2854
|
+
return [textWidth, config_1.DEFAULT_ARRAY];
|
|
2855
|
+
}
|
|
2856
|
+
var start = columnIndex;
|
|
2857
|
+
var columnSpans = [];
|
|
2858
|
+
var isMovingRight = direction === grid_1.Direction.Right;
|
|
2859
|
+
while (canOverflowToNextCell({
|
|
2860
|
+
rowIndex: rowIndex,
|
|
2861
|
+
columnIndex: isMovingRight ? ++start : --start,
|
|
2862
|
+
}) &&
|
|
2863
|
+
colWidth < textWidth) {
|
|
2864
|
+
var prev = isMovingRight ? start - 1 : start + 1;
|
|
2865
|
+
// For right aligned texts
|
|
2866
|
+
var borderColor = (_d = (_c = getEffectiveCellFormat(sheetId, rowIndex, isMovingRight ? start : prev)) === null || _c === void 0 ? void 0 : _c.backgroundColor) !== null && _d !== void 0 ? _d : (_e = getEffectiveCellFormat(sheetId, rowIndex, isMovingRight ? prev : start)) === null || _e === void 0 ? void 0 : _e.backgroundColor;
|
|
2867
|
+
var nextColWidth = columnWidth(start) * scale;
|
|
2868
|
+
columnSpans.push([
|
|
2869
|
+
start,
|
|
2870
|
+
getColumnOffset(start),
|
|
2871
|
+
nextColWidth,
|
|
2872
|
+
borderColor,
|
|
2873
|
+
]);
|
|
2874
|
+
colWidth += nextColWidth;
|
|
2875
|
+
}
|
|
2876
|
+
return [Math.min(textWidth, colWidth), columnSpans];
|
|
2877
|
+
}, [
|
|
2878
|
+
scale,
|
|
2879
|
+
getCellDimensions,
|
|
2880
|
+
getTextFormatRuns,
|
|
2881
|
+
columnWidth,
|
|
2882
|
+
getColumnOffset,
|
|
2883
|
+
getEffectiveCellFormat,
|
|
2884
|
+
]);
|
|
2885
|
+
/**
|
|
2886
|
+
* Render Cells in the grid
|
|
2887
|
+
*/
|
|
2888
|
+
var _73 = tslib_1.__read((0, use_cell_renderer_1.useCellRenderer)({
|
|
2889
|
+
sheetId: sheetId,
|
|
2890
|
+
showGridLines: showGridLines,
|
|
2891
|
+
scale: scale,
|
|
2892
|
+
enableTextOverflow: enableTextOverflow,
|
|
2893
|
+
isRowHeader: isRowHeader,
|
|
2894
|
+
isColumnHeader: isColumnHeader,
|
|
2895
|
+
canOverflowToNextCell: canOverflowToNextCell,
|
|
2896
|
+
getDefaultHorizontalAlignment: getDefaultHorizontalAlignment,
|
|
2897
|
+
selectedRows: selectedRows,
|
|
2898
|
+
selectedColumns: selectedColumns,
|
|
2899
|
+
selectedRowHeaders: selectedRowHeaders,
|
|
2900
|
+
selectedColumnHeaders: selectedColumnHeaders,
|
|
2901
|
+
cellBackgroundColor: cellBackgroundColor,
|
|
2902
|
+
headerBorderColor: headerBorderColor,
|
|
2903
|
+
headerBackgroundColor: headerBackgroundColor,
|
|
2904
|
+
headerColor: headerColor,
|
|
2905
|
+
headerActiveBackgroundColor: headerActiveBackgroundColor,
|
|
2906
|
+
headerSelectedBackgroundColor: headerSelectedBackgroundColor,
|
|
2907
|
+
headerSelectedColor: headerSelectedColor,
|
|
2908
|
+
headerTableBackgroundColor: headerTableBackgroundColor,
|
|
2909
|
+
headerTableActiveBackgroundColor: headerTableActiveBackgroundColor,
|
|
2910
|
+
headerTableSelectedBackgroundColor: headerTableSelectedBackgroundColor,
|
|
2911
|
+
chipBackgroundColor: chipBackgroundColor,
|
|
2912
|
+
filterIconColor: filterIconColor,
|
|
2913
|
+
columnContainsTable: columnContainsTable,
|
|
2914
|
+
rowsContainsTable: rowsContainsTable,
|
|
2915
|
+
isTableHeader: isTableHeader,
|
|
2916
|
+
isCalculatedColumnHeader: isCalculatedColumnHeader,
|
|
2917
|
+
isTableHeaderFilterActive: isTableHeaderFilterActive,
|
|
2918
|
+
isTableFilterVisible: isTableFilterVisible,
|
|
2919
|
+
getTableHeaderSortOrder: getTableHeaderSortOrder,
|
|
2920
|
+
showCalculatedColumnIcon: showCalculatedColumnIcon,
|
|
2921
|
+
showHeaders: showHeaders,
|
|
2922
|
+
getDataValidation: getDataValidationRule,
|
|
2923
|
+
getErrorValue: getErrorValue,
|
|
2924
|
+
getNote: getNote,
|
|
2925
|
+
getComment: getComment,
|
|
2926
|
+
getEffectiveValue: getEffectiveValue,
|
|
2927
|
+
getFormattedValue: getFormattedValue,
|
|
2928
|
+
getCellImageUrl: getCellImageUrl,
|
|
2929
|
+
getEffectiveCellFormat: getEffectiveCellFormat,
|
|
2930
|
+
getCellBounds: getCellBounds,
|
|
2931
|
+
getCellMetaType: getCellMetaType,
|
|
2932
|
+
getRowHeaderText: getRowHeaderText,
|
|
2933
|
+
getColumnHeaderText: getColumnHeaderText,
|
|
2934
|
+
getMaximumOverflowTextWidth: getMaximumOverflowTextWidth,
|
|
2935
|
+
getTextDimension: getTextDimension,
|
|
2936
|
+
getCellGroupingInfo: getCellGroupingInfo,
|
|
2937
|
+
getTextFormatRuns: getTextFormatRuns,
|
|
2938
|
+
onRequestEdit: makeEditable,
|
|
2939
|
+
onFilterClick: handleFilterClick,
|
|
2940
|
+
onCheckboxClick: handleCheckboxClick,
|
|
2941
|
+
onExpandCollapse: handleExpandCollapse,
|
|
2942
|
+
defaultFontSizePoint: defaultFontSizePoint,
|
|
2943
|
+
Cell: Cell,
|
|
2944
|
+
HeaderCell: HeaderCell,
|
|
2945
|
+
theme: theme,
|
|
2946
|
+
gridLineWidth: gridLineWidth,
|
|
2947
|
+
showNotes: showNotes,
|
|
2948
|
+
showComments: showComments,
|
|
2949
|
+
StructuredResult: StructuredResult,
|
|
2950
|
+
readonly: readonly,
|
|
2951
|
+
onOverflow: handleOverflow,
|
|
2952
|
+
isComparing: isComparing,
|
|
2953
|
+
getCellDiff: getCellDiff,
|
|
2954
|
+
}), 4), cellBackgroundRenderer = _73[0], cellRenderer = _73[1], cellOverlayRenderer = _73[2], headerCellRenderer = _73[3];
|
|
2955
|
+
/**
|
|
2956
|
+
* When user selects a selection for moving
|
|
2957
|
+
* If its a table, we select the entire column
|
|
2958
|
+
* if user selects a table header column
|
|
2959
|
+
*/
|
|
2960
|
+
var onSelectionElementMouseDown = (0, react_1.useCallback)(function (e, cell, selection, index, shouldClamp) {
|
|
2961
|
+
var _a;
|
|
2962
|
+
// Find the first cell in selection and
|
|
2963
|
+
// Check if its a table column
|
|
2964
|
+
// Disabled for now
|
|
2965
|
+
var firstCell = cell;
|
|
2966
|
+
var table = firstCell && isTableHeader(firstCell.rowIndex, firstCell.columnIndex)
|
|
2967
|
+
? (0, table_1.findActiveTableWithinCell)(sheetId, firstCell, tables)
|
|
2968
|
+
: undefined;
|
|
2969
|
+
if (firstCell && table) {
|
|
2970
|
+
var columnSelection = {
|
|
2971
|
+
range: tslib_1.__assign(tslib_1.__assign({}, table.range), { startColumnIndex: firstCell.columnIndex, endColumnIndex: Math.max(firstCell.columnIndex, (_a = selection === null || selection === void 0 ? void 0 : selection.range.endColumnIndex) !== null && _a !== void 0 ? _a : 0) }),
|
|
2972
|
+
};
|
|
2973
|
+
// Update column selection
|
|
2974
|
+
onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(sheetId, [columnSelection]);
|
|
2975
|
+
// Pass column
|
|
2976
|
+
onSelectionMouseDown === null || onSelectionMouseDown === void 0 ? void 0 : onSelectionMouseDown(e, cell, columnSelection, index, shouldClamp);
|
|
2977
|
+
}
|
|
2978
|
+
else {
|
|
2979
|
+
onSelectionMouseDown === null || onSelectionMouseDown === void 0 ? void 0 : onSelectionMouseDown(e, cell, selection, index, shouldClamp);
|
|
2980
|
+
}
|
|
2981
|
+
}, [onSelectionMouseDown, onChangeSelections, isTableHeader, tables, sheetId]);
|
|
2982
|
+
// Selection resize
|
|
2983
|
+
var onMouseDownResizeHandle = (0, use_selection_resize_1.useSelectionResize)({
|
|
2984
|
+
getCellBounds: getCellBounds,
|
|
2985
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2986
|
+
scrollToCell: scrollToCell,
|
|
2987
|
+
tokenizer: tokenizer,
|
|
2988
|
+
});
|
|
2989
|
+
// Selection move: drag a formula reference via its border covers
|
|
2990
|
+
var _74 = (0, use_selection_move_1.useSelectionMove)({
|
|
2991
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
2992
|
+
scrollToCell: scrollToCell,
|
|
2993
|
+
tokenizer: tokenizer,
|
|
2994
|
+
}), onMouseDownMoveSelection = _74.onMouseDownMoveSelection, isDraggingMoveSelection = _74.isDragging;
|
|
2995
|
+
/**
|
|
2996
|
+
* Hide fill handle
|
|
2997
|
+
* 1. When user is in edit mode
|
|
2998
|
+
* 2. When user is in formula mode and user has made selections
|
|
2999
|
+
*/
|
|
3000
|
+
var showFillHandle = !isSelectionInProgress &&
|
|
3001
|
+
!isEditInProgress &&
|
|
3002
|
+
!isResizingTable &&
|
|
3003
|
+
!(formulaMode && formulaSelections.length);
|
|
3004
|
+
/**
|
|
3005
|
+
* Flashing
|
|
3006
|
+
*/
|
|
3007
|
+
var _75 = (0, use_flash_1.useFlash)({
|
|
3008
|
+
theme: theme,
|
|
3009
|
+
}), flash = _75.flash, mark = _75.mark, unmark = _75.unmark, onFlashEnd = _75.onFlashEnd, flashingBorders = _75.flashingBorders;
|
|
3010
|
+
// Cache hover ids
|
|
3011
|
+
var cachedHoveredSelectionIds = (0, use_hovered_selection_ids_1.useHoveredSelectionIds)({
|
|
3012
|
+
selections: selections,
|
|
3013
|
+
hoveredCell: delayedHoveredCell,
|
|
3014
|
+
activeCell: activeCell,
|
|
3015
|
+
});
|
|
3016
|
+
/**
|
|
3017
|
+
* Selection Renderer
|
|
3018
|
+
*/
|
|
3019
|
+
var selectionRenderer = (0, use_selection_renderer_1.useSelectionRenderer)({
|
|
3020
|
+
sheetId: sheetId,
|
|
3021
|
+
scale: scale,
|
|
3022
|
+
onSelectionMouseDown: onSelectionElementMouseDown,
|
|
3023
|
+
onMouseDownResizeHandle: onMouseDownResizeHandle,
|
|
3024
|
+
onMouseDownMoveSelection: onMouseDownMoveSelection,
|
|
3025
|
+
isDraggingMoveSelection: isDraggingMoveSelection,
|
|
3026
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
3027
|
+
onChangeSelections: onChangeSelections,
|
|
3028
|
+
SelectionTitleComponent: SelectionTitleComponent,
|
|
3029
|
+
selectionCount: (formulaMode ? formulaSelections : selections).length,
|
|
3030
|
+
selectionBackgroundColor: selectionBackgroundColor,
|
|
3031
|
+
selectionBorderColor: selectionBorderColor,
|
|
3032
|
+
getSheetName: getSheetName,
|
|
3033
|
+
onRequestEditTable: onRequestEditTable,
|
|
3034
|
+
onRequestEditPivotTable: onRequestEditPivotTable,
|
|
3035
|
+
isResizingTable: isResizingTable,
|
|
3036
|
+
resizeHandleBorderColor: cellBackgroundColor,
|
|
3037
|
+
showSelectionResizeHandles: showSelectionResizeHandles,
|
|
3038
|
+
fillHandleSize: fillHandleSize,
|
|
3039
|
+
showFillHandle: showFillHandle,
|
|
3040
|
+
onFlashEnd: onFlashEnd,
|
|
3041
|
+
enableMagicFill: enableMagicFill && !isEditInProgress,
|
|
3042
|
+
MagicFillComponent: MagicFillComponent,
|
|
3043
|
+
MagicFillContent: MagicFillContent,
|
|
3044
|
+
QuickEdit: QuickEdit,
|
|
3045
|
+
PasteMenu: PasteMenu,
|
|
3046
|
+
SuggestionAction: SuggestionAction,
|
|
3047
|
+
readonly: readonly,
|
|
3048
|
+
onSplitTextToColumns: onSplitTextToColumns,
|
|
3049
|
+
showPasteMenu: showPasteMenu,
|
|
3050
|
+
hoveredCell: delayedHoveredCell,
|
|
3051
|
+
onRemoveQuickEdit: onRemoveQuickEdit,
|
|
3052
|
+
onAddQuickEdit: onAddQuickEdit,
|
|
3053
|
+
cachedHoveredSelectionIds: cachedHoveredSelectionIds,
|
|
3054
|
+
});
|
|
3055
|
+
/**
|
|
3056
|
+
* Create Range borders in the Grid
|
|
3057
|
+
* Used for
|
|
3058
|
+
* 1. Tables and basicFilter - check
|
|
3059
|
+
* 2. Selection drag/drop - check
|
|
3060
|
+
* 3. Collaborators - check
|
|
3061
|
+
*/
|
|
3062
|
+
var finalBorderStyles = (0, use_border_styles_1.useBorderStyles)({
|
|
3063
|
+
sheetId: sheetId,
|
|
3064
|
+
activeCell: activeCell,
|
|
3065
|
+
hoveredCell: delayedHoveredCell,
|
|
3066
|
+
tables: activeTables,
|
|
3067
|
+
pivotTables: pivotTables,
|
|
3068
|
+
basicFilter: basicFilter,
|
|
3069
|
+
borderStyles: borderStyles,
|
|
3070
|
+
copiedSelections: copiedSelections,
|
|
3071
|
+
flashingBorders: flashingBorders,
|
|
3072
|
+
draggedSelection: draggedSelection,
|
|
3073
|
+
initialDraggedSelection: initialDraggedSelection,
|
|
3074
|
+
selectionDragBorderColor: selectionDragBorderColor,
|
|
3075
|
+
selectionBorderColor: selectionBorderColor,
|
|
3076
|
+
tableBorderColor: tableBorderColor,
|
|
3077
|
+
users: isRestricted ? config_1.DEFAULT_ARRAY : users,
|
|
3078
|
+
userId: userId,
|
|
3079
|
+
renderCollaboratorCursor: renderCollaboratorCursor,
|
|
3080
|
+
theme: theme,
|
|
3081
|
+
agentSuggestions: agentSuggestions,
|
|
3082
|
+
quickEditValues: quickEditValues,
|
|
3083
|
+
});
|
|
3084
|
+
// Hidden column markers
|
|
3085
|
+
var _76 = tslib_1.__read((0, use_hidden_dimension_markers_1.useHiddenDimensionMarkers)({
|
|
3086
|
+
sheetId: sheetId,
|
|
3087
|
+
columnMetadata: columnMetadata,
|
|
3088
|
+
rowMetadata: rowMetadata,
|
|
3089
|
+
onShowColumn: onShowColumn,
|
|
3090
|
+
onShowRow: onShowRow,
|
|
3091
|
+
isFrozenColumn: isFrozenColumn,
|
|
3092
|
+
isFrozenRow: isFrozenRow,
|
|
3093
|
+
focusSheet: focusSheet,
|
|
3094
|
+
rowCount: rowCount,
|
|
3095
|
+
columnCount: columnCount,
|
|
3096
|
+
HiddenRowMarkers: HiddenRowMarkers,
|
|
3097
|
+
HiddenColumnMarkers: HiddenColumnMarkers,
|
|
3098
|
+
}), 4), hiddenColumnMarkers = _76[0], frozenHiddenColumnMarkers = _76[1], hiddenRowMarkers = _76[2], frozenHiddenRowMarkers = _76[3];
|
|
3099
|
+
// Zoom lister
|
|
3100
|
+
var onMouseWheel = (0, use_scale_listener_1.useScaleListener)({
|
|
3101
|
+
zoomSpeed: zoomSpeed,
|
|
3102
|
+
scale: scale,
|
|
3103
|
+
onChangeScale: onChangeScale,
|
|
3104
|
+
});
|
|
3105
|
+
/**
|
|
3106
|
+
* Frozen shadow settings
|
|
3107
|
+
*/
|
|
3108
|
+
var shadowSettings = (0, react_1.useMemo)(function () {
|
|
3109
|
+
return {
|
|
3110
|
+
stroke: frozenShadowColor,
|
|
3111
|
+
strokeWidth: frozenShadowThickness,
|
|
3112
|
+
};
|
|
3113
|
+
}, [frozenShadowColor, frozenShadowThickness]);
|
|
3114
|
+
/**
|
|
3115
|
+
* Helper function to navigate to sheet range
|
|
3116
|
+
*/
|
|
3117
|
+
var navigateToSheetRange = (0, use_navigate_sheet_range_1.useNavigateToSheetRange)({
|
|
3118
|
+
onChangeActiveSheet: onChangeActiveSheet,
|
|
3119
|
+
onChangeSelections: onChangeSelections,
|
|
3120
|
+
setActiveCell: setActiveCell,
|
|
3121
|
+
flash: flash,
|
|
3122
|
+
});
|
|
3123
|
+
// Dispatch keyboard event
|
|
3124
|
+
var dispatchEvent = (0, react_1.useCallback)(function (event) {
|
|
3125
|
+
var _a, _b;
|
|
3126
|
+
(_b = (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.container) === null || _b === void 0 ? void 0 : _b.dispatchEvent(event);
|
|
3127
|
+
}, []);
|
|
3128
|
+
// --- START SIDE EFFECTS ---
|
|
3129
|
+
// Expose grid methods in context and ref
|
|
3130
|
+
// Make sure these are useCallbackRef, so re-render
|
|
3131
|
+
// dont trigger infinite loop
|
|
3132
|
+
(0, use_context_setter_1.useContextSetter)(forwardedRef, {
|
|
3133
|
+
submitEditor: submitEditor,
|
|
3134
|
+
cancelEditor: cancelEditor,
|
|
3135
|
+
commit: commit,
|
|
3136
|
+
makeEditable: makeEditable,
|
|
3137
|
+
editCell: editCell,
|
|
3138
|
+
getNextFocusableCell: getNextFocusableCell,
|
|
3139
|
+
onEditorKeyDown: onEditorKeyDown,
|
|
3140
|
+
scrollToCell: scrollToCell,
|
|
3141
|
+
scrollToBottom: scrollToBottom,
|
|
3142
|
+
focusSheet: focusSheet,
|
|
3143
|
+
canEditCell: canEditCell,
|
|
3144
|
+
isSheetProtected: isSheetProtected,
|
|
3145
|
+
isWorkbookProtected: isWorkbookProtected,
|
|
3146
|
+
getSheetProtection: getSheetProtectionStable,
|
|
3147
|
+
getSelectionsFromFormula: getSelectionsFromFormula,
|
|
3148
|
+
getAddressFromSelection: getAddressFromSelection,
|
|
3149
|
+
getR1C1AddressFromSelection: getR1C1AddressFromSelection,
|
|
3150
|
+
tokenizer: tokenizer,
|
|
3151
|
+
setEditorValue: setEditorValue,
|
|
3152
|
+
getCellBounds: getCellBounds,
|
|
3153
|
+
getNamedRanges: getNamedRanges,
|
|
3154
|
+
getTableNames: getTableNames,
|
|
3155
|
+
getStructuredProperties: getStructuredProperties,
|
|
3156
|
+
getMentions: getMentions,
|
|
3157
|
+
getSheetName: getSheetName,
|
|
3158
|
+
getSheetId: getSheetId,
|
|
3159
|
+
getTableColumnNames: getTableColumnNames,
|
|
3160
|
+
updateSelectionStartEndReference: updateSelectionStartEndReference,
|
|
3161
|
+
getCellDimensions: getCellDimensionsStable,
|
|
3162
|
+
getRowHeight: getRowHeight,
|
|
3163
|
+
getColumnWidth: getColumnWidth,
|
|
3164
|
+
getContentfulGridRangeAroundCell: getContentfulGridRangeAroundCell,
|
|
3165
|
+
getCellCoordsFromOffset: getCellCoordsFromOffset,
|
|
3166
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
3167
|
+
getEffectiveValuesFromRange: getEffectiveValuesFromRange,
|
|
3168
|
+
getSheetDimensions: getSheetDimensions,
|
|
3169
|
+
getFinalRowHeight: getFinalRowHeight,
|
|
3170
|
+
onInsertNote: onInsertNote,
|
|
3171
|
+
onPinToolTip: onPinToolTip,
|
|
3172
|
+
onUnpinTooltip: onUnpinTooltip,
|
|
3173
|
+
showCellPopover: showCellPopover,
|
|
3174
|
+
redrawGrid: redrawGrid,
|
|
3175
|
+
flash: flash,
|
|
3176
|
+
navigateToSheetRange: navigateToSheetRange,
|
|
3177
|
+
mark: mark,
|
|
3178
|
+
unmark: unmark,
|
|
3179
|
+
exportRange: exportRange,
|
|
3180
|
+
getViewPort: getViewPort,
|
|
3181
|
+
setActiveCell: setActiveCell,
|
|
3182
|
+
getGridRef: getGridRef,
|
|
3183
|
+
dispatchEvent: dispatchEvent,
|
|
3184
|
+
splitTextToColumns: onSplitTextToColumns,
|
|
3185
|
+
copy: copy,
|
|
3186
|
+
paste: paste,
|
|
3187
|
+
cut: cut,
|
|
3188
|
+
});
|
|
3189
|
+
var cellExpandComponent = (0, use_expand_cell_1.useExpandCell)({
|
|
3190
|
+
sheetId: sheetId,
|
|
3191
|
+
theme: theme,
|
|
3192
|
+
activeCell: hoveredCell,
|
|
3193
|
+
iconColor: filterIconColor,
|
|
3194
|
+
onRequestExpand: onRequestExpand,
|
|
3195
|
+
cellExpandPredicate: cellExpandPredicate,
|
|
3196
|
+
getCellSpacing: getCellSpacing,
|
|
3197
|
+
onChangeActiveCell: onChangeActiveCell,
|
|
3198
|
+
getCellOffsetFromCoords: getCellOffsetFromCoords,
|
|
3199
|
+
getScrollPosition: getScrollPosition,
|
|
3200
|
+
isFrozenColumn: isFrozenColumn,
|
|
3201
|
+
isFrozenRow: isFrozenRow,
|
|
3202
|
+
});
|
|
3203
|
+
// Pivot placeholders
|
|
3204
|
+
var pivotPlaceholders = (0, react_1.useMemo)(function () {
|
|
3205
|
+
var e_11, _a;
|
|
3206
|
+
var _b, _c;
|
|
3207
|
+
var placeholders = [];
|
|
3208
|
+
var displayIdx = 0;
|
|
3209
|
+
try {
|
|
3210
|
+
for (var _d = tslib_1.__values(pivotTables !== null && pivotTables !== void 0 ? pivotTables : []), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
3211
|
+
var pivotTable = _e.value;
|
|
3212
|
+
if (!pivotTable.pivotRange &&
|
|
3213
|
+
pivotTable.targetPosition.sheetId === sheetId) {
|
|
3214
|
+
displayIdx++;
|
|
3215
|
+
var cellOffset = getCellOffsetFromCoords === null || getCellOffsetFromCoords === void 0 ? void 0 : getCellOffsetFromCoords(pivotTable.targetPosition);
|
|
3216
|
+
var displayName = pivotTable.name || "PivotTable".concat(displayIdx);
|
|
3217
|
+
placeholders.push(react_1.default.createElement(pivot_placeholder_1.PivotPlaceholder, { pivotTable: pivotTable, onRequestEditPivotTable: onRequestEditPivotTable, left: (_b = cellOffset === null || cellOffset === void 0 ? void 0 : cellOffset.x) !== null && _b !== void 0 ? _b : 0, top: (_c = cellOffset === null || cellOffset === void 0 ? void 0 : cellOffset.y) !== null && _c !== void 0 ? _c : 0, displayName: displayName, key: pivotTable.pivotId }));
|
|
3218
|
+
}
|
|
3219
|
+
}
|
|
3220
|
+
}
|
|
3221
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
3222
|
+
finally {
|
|
3223
|
+
try {
|
|
3224
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
3225
|
+
}
|
|
3226
|
+
finally { if (e_11) throw e_11.error; }
|
|
3227
|
+
}
|
|
3228
|
+
return placeholders;
|
|
3229
|
+
}, [pivotTables, sheetId, onRequestEditPivotTable, getCellOffsetFromCoords]);
|
|
3230
|
+
/**
|
|
3231
|
+
* Helper function to reset grid cache if column or
|
|
3232
|
+
* row dimension changes
|
|
3233
|
+
*/
|
|
3234
|
+
(0, use_hidden_dimensions_1.useHiddenDimensions)(columnMetadata, rowMetadata, sheetId, scale, resetLastMeasuredIndices, hostHiddenRowRanges, visibleRowRanges);
|
|
3235
|
+
// Callback when sheet changes
|
|
3236
|
+
(0, use_sheet_change_handler_1.useSheetChangeHandler)(sheetId,
|
|
3237
|
+
// Immediate callback for imperative methods
|
|
3238
|
+
function () {
|
|
3239
|
+
if (activeCell && selections) {
|
|
3240
|
+
updateSelectionStartEndReference(activeCell, selections);
|
|
3241
|
+
}
|
|
3242
|
+
// Clear text overflow values
|
|
3243
|
+
overflowMapRef.current.clear();
|
|
3244
|
+
},
|
|
3245
|
+
// Effects callbacks
|
|
3246
|
+
function (newScrollPosition) {
|
|
3247
|
+
// Update scrollPosition
|
|
3248
|
+
if (newScrollPosition && isSheetScrollScheduled()) {
|
|
3249
|
+
if (helpers_1.isTouchDevice) {
|
|
3250
|
+
scrollToTouchDevice(newScrollPosition);
|
|
3251
|
+
}
|
|
3252
|
+
else {
|
|
3253
|
+
scrollTo(newScrollPosition);
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
// Wait for sheet change to finish
|
|
3257
|
+
requestAnimationFrame(function () {
|
|
3258
|
+
var _a;
|
|
3259
|
+
// If user is not in formula mode and changing sheet.
|
|
3260
|
+
// The edit belongs to the sheet it was started on, so flush it —
|
|
3261
|
+
// `hideEditor()` alone threw the typed value away, leaving the cell
|
|
3262
|
+
// empty while the formula bar kept showing the abandoned text. Hosts
|
|
3263
|
+
// no longer need to call `commit()` before switching sheets.
|
|
3264
|
+
// `preserveActiveSheet` keeps the user on the sheet they moved to; the
|
|
3265
|
+
// value is still written back to the sheet it was typed on.
|
|
3266
|
+
// Formula mode is excluded: switching sheets mid-formula is how a
|
|
3267
|
+
// cross-sheet range is picked, so the editor has to stay open.
|
|
3268
|
+
//
|
|
3269
|
+
// Ordering here is load-bearing in both directions. It has to run
|
|
3270
|
+
// inside the rAF, after the sheet-change render has committed:
|
|
3271
|
+
// `useSpreadsheetState`'s `onChange` mints the shared-string id inside
|
|
3272
|
+
// the `onChangeSheetData` updater and flushes the registry right
|
|
3273
|
+
// after, which only lines up because React evaluates an updater
|
|
3274
|
+
// eagerly when the component has no pending update. Flushing from the
|
|
3275
|
+
// layout effect — while the host's active-sheet update is still in
|
|
3276
|
+
// flight — defers that updater past the flush, and the cell keeps an
|
|
3277
|
+
// `ss` pointer to an entry that never reaches the shared-strings table
|
|
3278
|
+
// and renders blank. It also has to run before the focus handling
|
|
3279
|
+
// below, so a throw in `focusSheet()` can't cost the user their edit.
|
|
3280
|
+
if (!formulaMode && !commit({ preserveActiveSheet: true })) {
|
|
3281
|
+
// Nothing was being edited — keep the original reset.
|
|
3282
|
+
hideEditor();
|
|
3283
|
+
}
|
|
3284
|
+
// Focus editor
|
|
3285
|
+
if (formulaMode && !(activeEditor === null || activeEditor === void 0 ? void 0 : activeEditor.isFocused())) {
|
|
3286
|
+
// When sheet is changed, we
|
|
3287
|
+
// need to keep the focus in the current
|
|
3288
|
+
// cursor
|
|
3289
|
+
focusActiveEditor(false);
|
|
3290
|
+
}
|
|
3291
|
+
else {
|
|
3292
|
+
// Keep focus back on sheet
|
|
3293
|
+
// Check if user is focused on the context menu
|
|
3294
|
+
if (grid_2.canUseDOM &&
|
|
3295
|
+
((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.getAttribute("role")) !== "menu") {
|
|
3296
|
+
focusSheet();
|
|
3297
|
+
}
|
|
3298
|
+
}
|
|
3299
|
+
});
|
|
3300
|
+
});
|
|
3301
|
+
// props reference for spreadsheet api
|
|
3302
|
+
propsReferenceRef.current = props;
|
|
3303
|
+
// Expose a spreadsheet API
|
|
3304
|
+
(0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
|
|
3305
|
+
var stableMethods = {
|
|
3306
|
+
getUserEnteredValue: getUserEnteredStringValueStable,
|
|
3307
|
+
scrollToCell: scrollToCell,
|
|
3308
|
+
commit: commit,
|
|
3309
|
+
};
|
|
3310
|
+
setSpreadsheetApi(new spreadsheet_api_1.SpreadsheetApi(propsReferenceRef, stableMethods, store, instanceStore, instanceId));
|
|
3311
|
+
}, []);
|
|
3312
|
+
// Update formulabar input value when activecell changes
|
|
3313
|
+
(0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
|
|
3314
|
+
if (formulaMode) {
|
|
3315
|
+
return;
|
|
3316
|
+
}
|
|
3317
|
+
if (editingCellCoordinate ||
|
|
3318
|
+
(0, grid_5.isEqualCells)(editingCellCoordinate, activeCell)) {
|
|
3319
|
+
// We are currently in edit mode
|
|
3320
|
+
// We should only update if the editing value changes
|
|
3321
|
+
return;
|
|
3322
|
+
}
|
|
3323
|
+
var rowIndex = activeCell.rowIndex, columnIndex = activeCell.columnIndex;
|
|
3324
|
+
var value = getUserEnteredStringValue(sheetId, rowIndex, columnIndex);
|
|
3325
|
+
var textFormatRuns = getTextFormatRuns === null || getTextFormatRuns === void 0 ? void 0 : getTextFormatRuns(sheetId, rowIndex, columnIndex);
|
|
3326
|
+
// Update formula bar input
|
|
3327
|
+
setFormulabarEditorValue(value !== null && value !== void 0 ? value : "");
|
|
3328
|
+
setFormulaBarTextFormatRuns(textFormatRuns);
|
|
3329
|
+
}, [
|
|
3330
|
+
activeCell,
|
|
3331
|
+
formulaMode,
|
|
3332
|
+
sheetId,
|
|
3333
|
+
editingCellCoordinate,
|
|
3334
|
+
getUserEnteredStringValue,
|
|
3335
|
+
setFormulabarEditorValue,
|
|
3336
|
+
setFormulaBarTextFormatRuns,
|
|
3337
|
+
]);
|
|
3338
|
+
// Keep active editor in focus
|
|
3339
|
+
// When user shows and hides the formula help
|
|
3340
|
+
(0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
|
|
3341
|
+
focusActiveEditor(false);
|
|
3342
|
+
}, [showFormulaHelp]);
|
|
3343
|
+
// --- END SIDE EFFECTS ---
|
|
3344
|
+
/**
|
|
3345
|
+
* Insert components inside the grid viewport
|
|
3346
|
+
*/
|
|
3347
|
+
var gridChildren = (0, use_grid_children_1.useGridChildren)({
|
|
3348
|
+
stickyEditor: stickyEditor,
|
|
3349
|
+
editorComponent: editorComponent,
|
|
3350
|
+
chartComponents: chartComponents,
|
|
3351
|
+
embedComponents: embedComponents,
|
|
3352
|
+
slicerComponents: slicerComponents,
|
|
3353
|
+
pivotPlaceholders: pivotPlaceholders,
|
|
3354
|
+
tableResizers: tableResizers,
|
|
3355
|
+
hiddenColumnMarkers: hiddenColumnMarkers,
|
|
3356
|
+
frozenHiddenColumnMarkers: frozenHiddenColumnMarkers,
|
|
3357
|
+
hiddenRowMarkers: hiddenRowMarkers,
|
|
3358
|
+
frozenHiddenRowMarkers: frozenHiddenRowMarkers,
|
|
3359
|
+
frozenRows: frozenRows,
|
|
3360
|
+
frozenColumns: frozenColumns,
|
|
3361
|
+
headerMenuComponent: headerMenuComponent,
|
|
3362
|
+
isHeaderMenuInFrozenColumn: isHeaderMenuInFrozenColumn,
|
|
3363
|
+
popoverComponent: popoverComponent,
|
|
3364
|
+
popoverRange: popoverRange,
|
|
3365
|
+
cellExpandComponent: cellExpandComponent,
|
|
3366
|
+
});
|
|
3367
|
+
/**
|
|
3368
|
+
* Only enable selection drag if user is not editing and not
|
|
3369
|
+
* in formula mode
|
|
3370
|
+
*/
|
|
3371
|
+
var enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
|
|
3372
|
+
return (react_1.default.createElement("div", tslib_1.__assign({ className: (0, ui_1.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,
|
|
3373
|
+
// The grid paints to <canvas>, so there is no per-cell DOM for a screen
|
|
3374
|
+
// reader to traverse. role="application" passes keystrokes through to our
|
|
3375
|
+
// custom keyboard handling, and the aria-live region below announces the
|
|
3376
|
+
// active cell on navigation. (A full off-screen role=grid/gridcell mirror
|
|
3377
|
+
// is a larger follow-up.)
|
|
3378
|
+
role: "application", "aria-label": "Spreadsheet grid",
|
|
3379
|
+
// css={{
|
|
3380
|
+
// backgroundColor: cellBackgroundColor,
|
|
3381
|
+
// }}
|
|
3382
|
+
onContextMenu: onContextMenu,
|
|
3383
|
+
// Bind to outer container, so it always takes
|
|
3384
|
+
// priority over other components
|
|
3385
|
+
// generated by hooks
|
|
3386
|
+
onMouseMove: mouseMoveThrottler, onWheel: onMouseWheel }, rest),
|
|
3387
|
+
width === 0 || height === 0 ? (react_1.default.createElement("div", { className: "flex border-solid border-rnc-border border border-t border-b flex-1 justify-center items-center" },
|
|
3388
|
+
react_1.default.createElement("div", { className: "space-y-2" },
|
|
3389
|
+
react_1.default.createElement(ui_1.Skeleton, { className: "h-4 w-[250px]" }),
|
|
3390
|
+
react_1.default.createElement(ui_1.Skeleton, { className: "h-4 w-[250px]" })))) : (react_1.default.createElement(grid_5.Grid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: finalBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: fill_handle_1.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: fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
|
|
3391
|
+
// Dimension of fill handle
|
|
3392
|
+
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: helpers_1.isTouchDevice || helpers_1.isFirefox, isTouchDevice: helpers_1.isTouchDevice, frozenShadowThickness: frozenShadowThickness, onAfterScrollToCell: onAfterScrollToCell, estimatedRowHeight: defaultRowHeight, estimatedColumnWidth: defaultColumnWidth, footerHeight: footerHeight, footerComponent: footerComponent, getOverflowBuffer: getOverflowBuffer, getFrozenColumnOverflowCells: getFrozenColumnOverflowCells })),
|
|
3393
|
+
tooltipComponent,
|
|
3394
|
+
stickyEditor ? editorComponent : null,
|
|
3395
|
+
draggableColumns,
|
|
3396
|
+
draggableRows,
|
|
3397
|
+
contextMenuComponent,
|
|
3398
|
+
filterComponent,
|
|
3399
|
+
headerResizer,
|
|
3400
|
+
validatorResult,
|
|
3401
|
+
react_1.default.createElement("div", { "aria-live": "polite", "aria-atomic": "true", style: {
|
|
3402
|
+
position: "absolute",
|
|
3403
|
+
width: 1,
|
|
3404
|
+
height: 1,
|
|
3405
|
+
margin: -1,
|
|
3406
|
+
padding: 0,
|
|
3407
|
+
overflow: "hidden",
|
|
3408
|
+
clip: "rect(0, 0, 0, 0)",
|
|
3409
|
+
whiteSpace: "nowrap",
|
|
3410
|
+
border: 0,
|
|
3411
|
+
} }, activeCellAnnouncement)));
|
|
3412
|
+
}
|
|
3413
|
+
exports.CanvasGrid = (0, react_1.memo)((0, react_1.forwardRef)(CanvasGridComponent));
|