@rowsncolumns/spreadsheet 10.3.1 → 10.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
- package/dist/cjs/api/banded-ranges.js +40 -14
- package/dist/cjs/api/calculated-column-fill.d.ts +43 -0
- package/dist/cjs/api/calculated-column-fill.d.ts.map +1 -0
- package/dist/cjs/api/calculated-column-fill.js +16 -0
- package/dist/cjs/api/chart-sheet.d.ts +8 -0
- package/dist/cjs/api/chart-sheet.d.ts.map +1 -0
- package/dist/cjs/api/chart-sheet.js +20 -0
- package/dist/cjs/api/chart-source-ranges.d.ts +64 -0
- package/dist/cjs/api/chart-source-ranges.d.ts.map +1 -0
- package/dist/cjs/api/chart-source-ranges.js +175 -0
- package/dist/cjs/api/selections.d.ts +3 -3
- package/dist/cjs/api/selections.d.ts.map +1 -1
- package/dist/cjs/api/selections.js +28 -2
- package/dist/cjs/api/spreadsheet-api.d.ts +16 -3
- package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/cjs/api/spreadsheet-api.js +22 -2
- package/dist/cjs/api/table-auto-expansion.d.ts +37 -0
- package/dist/cjs/api/table-auto-expansion.d.ts.map +1 -0
- package/dist/cjs/api/table-auto-expansion.js +16 -0
- package/dist/cjs/api/table.d.ts +49 -1
- package/dist/cjs/api/table.d.ts.map +1 -1
- package/dist/cjs/api/table.js +145 -1
- package/dist/cjs/api/validation.d.ts +26 -1
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +127 -9
- package/dist/cjs/atoms/calculated-column-fill.atom.d.ts +15 -0
- package/dist/cjs/atoms/calculated-column-fill.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/calculated-column-fill.atom.js +18 -0
- package/dist/cjs/atoms/chart-actions.atom.d.ts +40 -0
- package/dist/cjs/atoms/chart-actions.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/chart-actions.atom.js +66 -0
- package/dist/cjs/atoms/index.d.ts +5 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +5 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.d.ts +28 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/move-chart-dialog.atom.js +34 -0
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts +9 -1
- package/dist/cjs/atoms/selected-chart-embed.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/selected-chart-embed.atom.js +18 -1
- package/dist/cjs/atoms/selected-chart-series.atom.d.ts +24 -0
- package/dist/cjs/atoms/selected-chart-series.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/selected-chart-series.atom.js +11 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/sheet-context.atom.js +5 -2
- package/dist/cjs/atoms/sparkline-dialog.atom.d.ts +34 -0
- package/dist/cjs/atoms/sparkline-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/sparkline-dialog.atom.js +30 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.d.ts +14 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/table-auto-expansion.atom.js +17 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.d.ts +25 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/calculated-column-smart-tag/index.js +31 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +393 -72
- package/dist/cjs/components/canvas-grid/typings.d.ts +127 -14
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +3 -3
- package/dist/cjs/components/cell/typings.d.ts +13 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-filter/index.js +13 -2
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +4 -1
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts +28 -5
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline-math.js +93 -5
- package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline.js +3 -3
- package/dist/cjs/components/cell-structured/types.d.ts +1 -1
- package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
- package/dist/cjs/components/chart-sheet-view/index.d.ts +27 -0
- package/dist/cjs/components/chart-sheet-view/index.d.ts.map +1 -0
- package/dist/cjs/components/chart-sheet-view/index.js +35 -0
- package/dist/cjs/components/context-menu/embed-context-menu.d.ts +48 -0
- package/dist/cjs/components/context-menu/embed-context-menu.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/embed-context-menu.js +123 -0
- package/dist/cjs/components/context-menu/index.d.ts +23 -2
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/index.js +217 -39
- package/dist/cjs/components/context-menu/total-row-function-menu.d.ts +33 -0
- package/dist/cjs/components/context-menu/total-row-function-menu.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/total-row-function-menu.js +58 -0
- package/dist/cjs/components/context-menu/total-row-functions.d.ts +12 -12
- package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/total-row-functions.js +39 -39
- package/dist/cjs/components/embeds/chart-component.d.ts +17 -0
- package/dist/cjs/components/embeds/chart-component.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-draggable.d.ts +61 -4
- package/dist/cjs/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-draggable.js +214 -39
- package/dist/cjs/components/filter-box/date-tree.d.ts +28 -0
- package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -0
- package/dist/cjs/components/filter-box/date-tree.js +147 -0
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts +14 -2
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/filter-by-condition.js +95 -19
- package/dist/cjs/components/filter-box/filter-by-value.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/filter-by-value.js +126 -40
- package/dist/cjs/components/filter-box/index.d.ts +7 -1
- package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/index.js +102 -11
- package/dist/cjs/components/move-chart-dialog/index.d.ts +34 -0
- package/dist/cjs/components/move-chart-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/move-chart-dialog/index.js +96 -0
- package/dist/cjs/components/print-preview/page-block.d.ts +9 -1
- package/dist/cjs/components/print-preview/page-block.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/page-block.js +28 -2
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts +8 -1
- package/dist/cjs/components/print-preview/print-preview-dialog.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/print-preview-dialog.js +144 -3
- package/dist/cjs/components/print-preview/run-print.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/run-print.js +19 -7
- package/dist/cjs/components/print-preview/use-page-layout.d.ts +47 -0
- package/dist/cjs/components/print-preview/use-page-layout.d.ts.map +1 -1
- package/dist/cjs/components/print-preview/use-page-layout.js +81 -7
- package/dist/cjs/components/selection/index.d.ts +1 -1
- package/dist/cjs/components/selection/index.d.ts.map +1 -1
- package/dist/cjs/components/selection/index.js +6 -2
- package/dist/cjs/components/selection/types.d.ts +15 -0
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/index.js +2 -2
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts +1 -1
- package/dist/cjs/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/sheet-tab.js +3 -1
- package/dist/cjs/components/sparkline-dialog/index.d.ts +43 -0
- package/dist/cjs/components/sparkline-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/sparkline-dialog/index.js +127 -0
- package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/subtotal-dialog/index.js +10 -1
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/table-auto-expansion-smart-tag/index.js +31 -0
- package/dist/cjs/components/toolbar/index.d.ts +1 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/index.js +1 -0
- package/dist/cjs/components/toolbar/insert-menu.d.ts +2 -1
- package/dist/cjs/components/toolbar/insert-menu.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/insert-menu.js +24 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +4 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.js +11 -5
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts +31 -0
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/sparkline-actions.js +273 -0
- package/dist/cjs/components/toolbar/table-actions.d.ts +9 -1
- package/dist/cjs/components/toolbar/table-actions.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-actions.js +17 -7
- package/dist/cjs/components/toolbar/table-style-selector.d.ts +38 -2
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-style-selector.js +241 -389
- package/dist/cjs/config.d.ts +2 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +31 -1
- package/dist/cjs/helpers.d.ts +1 -1
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +13 -2
- package/dist/cjs/hooks/use-cell-renderer.d.ts +16 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +20 -8
- package/dist/cjs/hooks/use-chart-clipboard.d.ts +55 -0
- package/dist/cjs/hooks/use-chart-clipboard.d.ts.map +1 -0
- package/dist/cjs/hooks/use-chart-clipboard.js +231 -0
- package/dist/cjs/hooks/use-chart-source-ranges.d.ts +27 -0
- package/dist/cjs/hooks/use-chart-source-ranges.d.ts.map +1 -0
- package/dist/cjs/hooks/use-chart-source-ranges.js +211 -0
- package/dist/cjs/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/cjs/hooks/use-context-setter.js +3 -1
- package/dist/cjs/hooks/use-editable.d.ts +9 -1
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +25 -1
- package/dist/cjs/hooks/use-embeds-charts.d.ts +64 -4
- package/dist/cjs/hooks/use-embeds-charts.d.ts.map +1 -1
- package/dist/cjs/hooks/use-embeds-charts.js +412 -41
- package/dist/cjs/hooks/use-grid-children.d.ts +2 -2
- package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/cjs/hooks/use-grid-children.js +12 -6
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts +2 -2
- package/dist/cjs/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +2 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +8 -2
- package/dist/cjs/hooks/use-reveal-chart-embed.d.ts +17 -0
- package/dist/cjs/hooks/use-reveal-chart-embed.d.ts.map +1 -0
- package/dist/cjs/hooks/use-reveal-chart-embed.js +40 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -1
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +37 -7
- package/dist/cjs/hooks/use-selection.d.ts +9 -1
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +118 -30
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts +1 -1
- package/dist/cjs/hooks/use-structured-reference-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-structured-reference-selection.js +10 -0
- package/dist/cjs/hooks/use-table-hit-zones.d.ts +61 -0
- package/dist/cjs/hooks/use-table-hit-zones.d.ts.map +1 -0
- package/dist/cjs/hooks/use-table-hit-zones.js +157 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts +7 -0
- package/dist/cjs/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-table-resizer.js +22 -10
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +17 -1
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +289 -4
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils/copy-as-picture.d.ts +13 -0
- package/dist/cjs/utils/copy-as-picture.d.ts.map +1 -0
- package/dist/cjs/utils/copy-as-picture.js +70 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.d.ts +19 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.d.ts.map +1 -0
- package/dist/cjs/utils/pivot-chart-field-buttons.js +25 -0
- package/dist/cjs/utils/z-order.d.ts +47 -0
- package/dist/cjs/utils/z-order.d.ts.map +1 -0
- package/dist/cjs/utils/z-order.js +124 -0
- package/dist/esm/api/banded-ranges.d.ts.map +1 -1
- package/dist/esm/api/banded-ranges.js +39 -12
- package/dist/esm/api/calculated-column-fill.d.ts +43 -0
- package/dist/esm/api/calculated-column-fill.d.ts.map +1 -0
- package/dist/esm/api/calculated-column-fill.js +10 -0
- package/dist/esm/api/chart-sheet.d.ts +8 -0
- package/dist/esm/api/chart-sheet.d.ts.map +1 -0
- package/dist/esm/api/chart-sheet.js +15 -0
- package/dist/esm/api/chart-source-ranges.d.ts +64 -0
- package/dist/esm/api/chart-source-ranges.d.ts.map +1 -0
- package/dist/esm/api/chart-source-ranges.js +168 -0
- package/dist/esm/api/selections.d.ts +3 -3
- package/dist/esm/api/selections.d.ts.map +1 -1
- package/dist/esm/api/selections.js +26 -2
- package/dist/esm/api/spreadsheet-api.d.ts +16 -3
- package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/esm/api/spreadsheet-api.js +18 -2
- package/dist/esm/api/table-auto-expansion.d.ts +37 -0
- package/dist/esm/api/table-auto-expansion.d.ts.map +1 -0
- package/dist/esm/api/table-auto-expansion.js +10 -0
- package/dist/esm/api/table.d.ts +49 -1
- package/dist/esm/api/table.d.ts.map +1 -1
- package/dist/esm/api/table.js +138 -1
- package/dist/esm/api/validation.d.ts +26 -1
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +119 -9
- package/dist/esm/atoms/calculated-column-fill.atom.d.ts +15 -0
- package/dist/esm/atoms/calculated-column-fill.atom.d.ts.map +1 -0
- package/dist/esm/atoms/calculated-column-fill.atom.js +12 -0
- package/dist/esm/atoms/chart-actions.atom.d.ts +40 -0
- package/dist/esm/atoms/chart-actions.atom.d.ts.map +1 -0
- package/dist/esm/atoms/chart-actions.atom.js +58 -0
- package/dist/esm/atoms/index.d.ts +5 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +5 -0
- package/dist/esm/atoms/move-chart-dialog.atom.d.ts +28 -0
- package/dist/esm/atoms/move-chart-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/move-chart-dialog.atom.js +25 -0
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts +9 -1
- package/dist/esm/atoms/selected-chart-embed.atom.d.ts.map +1 -1
- package/dist/esm/atoms/selected-chart-embed.atom.js +19 -2
- package/dist/esm/atoms/selected-chart-series.atom.d.ts +24 -0
- package/dist/esm/atoms/selected-chart-series.atom.d.ts.map +1 -0
- package/dist/esm/atoms/selected-chart-series.atom.js +4 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/esm/atoms/sheet-context.atom.js +2 -0
- package/dist/esm/atoms/sparkline-dialog.atom.d.ts +34 -0
- package/dist/esm/atoms/sparkline-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/sparkline-dialog.atom.js +21 -0
- package/dist/esm/atoms/table-auto-expansion.atom.d.ts +14 -0
- package/dist/esm/atoms/table-auto-expansion.atom.d.ts.map +1 -0
- package/dist/esm/atoms/table-auto-expansion.atom.js +11 -0
- package/dist/esm/components/calculated-column-smart-tag/index.d.ts +25 -0
- package/dist/esm/components/calculated-column-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/calculated-column-smart-tag/index.js +25 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +332 -21
- package/dist/esm/components/canvas-grid/typings.d.ts +127 -14
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +3 -3
- package/dist/esm/components/cell/typings.d.ts +13 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
- package/dist/esm/components/cell-filter/index.js +14 -3
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +4 -1
- package/dist/esm/components/cell-structured/sparkline-math.d.ts +28 -5
- package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline-math.js +58 -4
- package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline.js +3 -3
- package/dist/esm/components/cell-structured/types.d.ts +1 -1
- package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
- package/dist/esm/components/chart-sheet-view/index.d.ts +27 -0
- package/dist/esm/components/chart-sheet-view/index.d.ts.map +1 -0
- package/dist/esm/components/chart-sheet-view/index.js +30 -0
- package/dist/esm/components/context-menu/embed-context-menu.d.ts +48 -0
- package/dist/esm/components/context-menu/embed-context-menu.d.ts.map +1 -0
- package/dist/esm/components/context-menu/embed-context-menu.js +112 -0
- package/dist/esm/components/context-menu/index.d.ts +23 -2
- package/dist/esm/components/context-menu/index.d.ts.map +1 -1
- package/dist/esm/components/context-menu/index.js +174 -38
- package/dist/esm/components/context-menu/total-row-function-menu.d.ts +33 -0
- package/dist/esm/components/context-menu/total-row-function-menu.d.ts.map +1 -0
- package/dist/esm/components/context-menu/total-row-function-menu.js +50 -0
- package/dist/esm/components/context-menu/total-row-functions.d.ts +12 -12
- package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -1
- package/dist/esm/components/context-menu/total-row-functions.js +29 -31
- package/dist/esm/components/embeds/chart-component.d.ts +17 -0
- package/dist/esm/components/embeds/chart-component.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-draggable.d.ts +61 -4
- package/dist/esm/components/embeds/embed-draggable.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-draggable.js +204 -45
- package/dist/esm/components/filter-box/date-tree.d.ts +28 -0
- package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -0
- package/dist/esm/components/filter-box/date-tree.js +107 -0
- package/dist/esm/components/filter-box/filter-by-condition.d.ts +14 -2
- package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/esm/components/filter-box/filter-by-condition.js +72 -16
- package/dist/esm/components/filter-box/filter-by-value.d.ts.map +1 -1
- package/dist/esm/components/filter-box/filter-by-value.js +110 -39
- package/dist/esm/components/filter-box/index.d.ts +7 -1
- package/dist/esm/components/filter-box/index.d.ts.map +1 -1
- package/dist/esm/components/filter-box/index.js +88 -2
- package/dist/esm/components/move-chart-dialog/index.d.ts +34 -0
- package/dist/esm/components/move-chart-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/move-chart-dialog/index.js +88 -0
- package/dist/esm/components/print-preview/page-block.d.ts +9 -1
- package/dist/esm/components/print-preview/page-block.d.ts.map +1 -1
- package/dist/esm/components/print-preview/page-block.js +27 -2
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts +8 -1
- package/dist/esm/components/print-preview/print-preview-dialog.d.ts.map +1 -1
- package/dist/esm/components/print-preview/print-preview-dialog.js +92 -4
- package/dist/esm/components/print-preview/run-print.d.ts.map +1 -1
- package/dist/esm/components/print-preview/run-print.js +17 -7
- package/dist/esm/components/print-preview/use-page-layout.d.ts +47 -0
- package/dist/esm/components/print-preview/use-page-layout.d.ts.map +1 -1
- package/dist/esm/components/print-preview/use-page-layout.js +55 -0
- package/dist/esm/components/selection/index.d.ts +1 -1
- package/dist/esm/components/selection/index.d.ts.map +1 -1
- package/dist/esm/components/selection/index.js +6 -2
- package/dist/esm/components/selection/types.d.ts +15 -0
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/index.js +2 -2
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts +1 -1
- package/dist/esm/components/sheet-tabs/sheet-tab.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/sheet-tab.js +4 -2
- package/dist/esm/components/sparkline-dialog/index.d.ts +43 -0
- package/dist/esm/components/sparkline-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/sparkline-dialog/index.js +123 -0
- package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/subtotal-dialog/index.js +10 -1
- package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts +24 -0
- package/dist/esm/components/table-auto-expansion-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/table-auto-expansion-smart-tag/index.js +25 -0
- package/dist/esm/components/toolbar/index.d.ts +1 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -1
- package/dist/esm/components/toolbar/index.js +1 -0
- package/dist/esm/components/toolbar/insert-menu.d.ts +2 -1
- package/dist/esm/components/toolbar/insert-menu.d.ts.map +1 -1
- package/dist/esm/components/toolbar/insert-menu.js +24 -1
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts +4 -1
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/merge-cells-selector.js +10 -6
- package/dist/esm/components/toolbar/sparkline-actions.d.ts +31 -0
- package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -0
- package/dist/esm/components/toolbar/sparkline-actions.js +238 -0
- package/dist/esm/components/toolbar/table-actions.d.ts +9 -1
- package/dist/esm/components/toolbar/table-actions.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-actions.js +15 -7
- package/dist/esm/components/toolbar/table-style-selector.d.ts +38 -2
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-style-selector.js +210 -399
- package/dist/esm/config.d.ts +2 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +30 -0
- package/dist/esm/helpers.d.ts +1 -1
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +12 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts +16 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +14 -4
- package/dist/esm/hooks/use-chart-clipboard.d.ts +55 -0
- package/dist/esm/hooks/use-chart-clipboard.d.ts.map +1 -0
- package/dist/esm/hooks/use-chart-clipboard.js +213 -0
- package/dist/esm/hooks/use-chart-source-ranges.d.ts +27 -0
- package/dist/esm/hooks/use-chart-source-ranges.d.ts.map +1 -0
- package/dist/esm/hooks/use-chart-source-ranges.js +186 -0
- package/dist/esm/hooks/use-context-setter.d.ts.map +1 -1
- package/dist/esm/hooks/use-context-setter.js +3 -1
- package/dist/esm/hooks/use-editable.d.ts +9 -1
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +25 -1
- package/dist/esm/hooks/use-embeds-charts.d.ts +64 -4
- package/dist/esm/hooks/use-embeds-charts.d.ts.map +1 -1
- package/dist/esm/hooks/use-embeds-charts.js +394 -39
- package/dist/esm/hooks/use-grid-children.d.ts +2 -2
- package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/esm/hooks/use-grid-children.js +8 -2
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts +2 -2
- package/dist/esm/hooks/use-isomorphic-layout-effect.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts +2 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +8 -2
- package/dist/esm/hooks/use-reveal-chart-embed.d.ts +17 -0
- package/dist/esm/hooks/use-reveal-chart-embed.d.ts.map +1 -0
- package/dist/esm/hooks/use-reveal-chart-embed.js +35 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts +13 -1
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +35 -6
- package/dist/esm/hooks/use-selection.d.ts +9 -1
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +122 -30
- package/dist/esm/hooks/use-structured-reference-selection.d.ts +1 -1
- package/dist/esm/hooks/use-structured-reference-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-structured-reference-selection.js +16 -0
- package/dist/esm/hooks/use-table-hit-zones.d.ts +61 -0
- package/dist/esm/hooks/use-table-hit-zones.d.ts.map +1 -0
- package/dist/esm/hooks/use-table-hit-zones.js +146 -0
- package/dist/esm/hooks/use-table-resizer.d.ts +7 -0
- package/dist/esm/hooks/use-table-resizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-table-resizer.js +21 -10
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +13 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +289 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils/copy-as-picture.d.ts +13 -0
- package/dist/esm/utils/copy-as-picture.d.ts.map +1 -0
- package/dist/esm/utils/copy-as-picture.js +45 -0
- package/dist/esm/utils/pivot-chart-field-buttons.d.ts +19 -0
- package/dist/esm/utils/pivot-chart-field-buttons.d.ts.map +1 -0
- package/dist/esm/utils/pivot-chart-field-buttons.js +18 -0
- package/dist/esm/utils/z-order.d.ts +47 -0
- package/dist/esm/utils/z-order.d.ts.map +1 -0
- package/dist/esm/utils/z-order.js +111 -0
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +12 -10
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts +0 -2
- package/dist/cjs/components/cell-editor/helpers.spec.d.ts.map +0 -1
- package/dist/cjs/components/cell-editor/helpers.spec.js +0 -32
- package/dist/esm/components/cell-editor/helpers.spec.d.ts +0 -2
- package/dist/esm/components/cell-editor/helpers.spec.d.ts.map +0 -1
- package/dist/esm/components/cell-editor/helpers.spec.js +0 -30
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { CellFormat, GridRange } from "@rowsncolumns/common-types";
|
|
3
|
-
import type { PageBlock as PageBlockType } from "./use-page-layout";
|
|
3
|
+
import type { PageBlock as PageBlockType, PrintedChart } from "./use-page-layout";
|
|
4
4
|
import { type HeaderFooterFields, type Margins, type PrintAlignment, type PrintVerticalAlignment } from "./settings";
|
|
5
5
|
export type CellAccess = {
|
|
6
6
|
sheetId: number;
|
|
@@ -57,6 +57,14 @@ export type PageBlockProps = CellAccess & {
|
|
|
57
57
|
* is dropped so the iframe-side rendering doesn't waste ink on it.
|
|
58
58
|
*/
|
|
59
59
|
screen?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Charts whose anchor cell lands on this page (`placeChartsOnPages`),
|
|
62
|
+
* drawn over the cells at their sheet position. `imageUrl` is the
|
|
63
|
+
* renderer's PNG capture; without one a titled frame stands in.
|
|
64
|
+
*/
|
|
65
|
+
charts?: Array<PrintedChart & {
|
|
66
|
+
imageUrl?: string;
|
|
67
|
+
}>;
|
|
60
68
|
};
|
|
61
69
|
export declare const PageBlock: React.FC<PageBlockProps>;
|
|
62
70
|
//# sourceMappingURL=page-block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-block.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/page-block.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACV,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"page-block.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/page-block.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACV,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,SAAS,IAAI,aAAa,EAC1B,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,cAAc,CAAC;IACpC,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,kBAAkB,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,IAAI,CAAC;KACX,CAAC;IACF;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD,CAAC;AA+HF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA2T9C,CAAC"}
|
|
@@ -109,7 +109,7 @@ const HeaderFooterStrip = ({ position, data }) => {
|
|
|
109
109
|
React.createElement("div", { style: { ...cellBase, justifyContent: "center" } }, center),
|
|
110
110
|
React.createElement("div", { style: { ...cellBase, justifyContent: "flex-end" } }, right)));
|
|
111
111
|
};
|
|
112
|
-
export const PageBlock = ({ block, pageWidth, pageHeight, margins, scale, showGridlines, showNotes, horizontalAlignment, verticalAlignment, sheetId, getFormattedValue, getEffectiveFormat, getColumnWidth, getRowHeight, merges, hasNote, frozenRowStart, frozenRowEnd, frozenColumnStart, frozenColumnEnd, headerFooter, screen = true, }) => {
|
|
112
|
+
export const PageBlock = ({ block, pageWidth, pageHeight, margins, scale, showGridlines, showNotes, horizontalAlignment, verticalAlignment, sheetId, getFormattedValue, getEffectiveFormat, getColumnWidth, getRowHeight, merges, hasNote, frozenRowStart, frozenRowEnd, frozenColumnStart, frozenColumnEnd, headerFooter, screen = true, charts, }) => {
|
|
113
113
|
const showFrozenRows = frozenRowStart !== undefined &&
|
|
114
114
|
frozenRowEnd !== undefined &&
|
|
115
115
|
frozenRowEnd >= frozenRowStart;
|
|
@@ -171,6 +171,9 @@ export const PageBlock = ({ block, pageWidth, pageHeight, margins, scale, showGr
|
|
|
171
171
|
alignItems: VALIGN_TO_FLEX[verticalAlignment],
|
|
172
172
|
};
|
|
173
173
|
const tableWrap = {
|
|
174
|
+
// Charts are absolutely positioned over the table in unscaled px, so
|
|
175
|
+
// the same transform scales them with the cells they anchor to.
|
|
176
|
+
position: "relative",
|
|
174
177
|
// The content box is the printable area; the table is the actual
|
|
175
178
|
// sheet slice scaled by the user-selected scale factor. Using a
|
|
176
179
|
// CSS `transform: scale(...)` instead of resizing each cell keeps
|
|
@@ -303,6 +306,28 @@ export const PageBlock = ({ block, pageWidth, pageHeight, margins, scale, showGr
|
|
|
303
306
|
} }, value)),
|
|
304
307
|
noted ? React.createElement("span", { style: noteMarkerStyle }) : null));
|
|
305
308
|
})));
|
|
306
|
-
})))
|
|
309
|
+
}))),
|
|
310
|
+
charts?.map((chart) => {
|
|
311
|
+
const frame = {
|
|
312
|
+
position: "absolute",
|
|
313
|
+
left: chart.left,
|
|
314
|
+
top: chart.top,
|
|
315
|
+
width: chart.width,
|
|
316
|
+
height: chart.height,
|
|
317
|
+
overflow: "hidden",
|
|
318
|
+
backgroundColor: "white",
|
|
319
|
+
};
|
|
320
|
+
return (React.createElement("div", { key: chart.chartId, "data-print-chart": chart.chartId, style: frame }, chart.imageUrl ? (React.createElement("img", { src: chart.imageUrl, alt: chart.title ?? "Chart", style: { width: "100%", height: "100%", display: "block" } })) : (React.createElement("div", { style: {
|
|
321
|
+
width: "100%",
|
|
322
|
+
height: "100%",
|
|
323
|
+
boxSizing: "border-box",
|
|
324
|
+
border: "1px solid #d1d5db",
|
|
325
|
+
display: "flex",
|
|
326
|
+
alignItems: "center",
|
|
327
|
+
justifyContent: "center",
|
|
328
|
+
fontSize: 12,
|
|
329
|
+
color: "#6b7280",
|
|
330
|
+
} }, chart.title ?? "Chart"))));
|
|
331
|
+
}))),
|
|
307
332
|
headerFooter ? (React.createElement(HeaderFooterStrip, { position: "footer", data: headerFooter })) : null));
|
|
308
333
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { CellData, CellFormat } from "@rowsncolumns/common-types";
|
|
3
3
|
import type { SelectionArea } from "@rowsncolumns/grid";
|
|
4
|
-
import type { Sheet } from "../../types";
|
|
4
|
+
import type { EmbeddedChart, Sheet } from "../../types";
|
|
5
5
|
export type PrintPreviewDialogProps = {
|
|
6
6
|
isOpen: boolean;
|
|
7
7
|
onClose: () => void;
|
|
@@ -44,6 +44,13 @@ export type PrintPreviewDialogProps = {
|
|
|
44
44
|
* marker.
|
|
45
45
|
*/
|
|
46
46
|
getCellData?: (sheetId: number, rowIndex: number, columnIndex: number) => CellData | null | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* The workbook's charts — same array the grid renders. Each prints on
|
|
49
|
+
* the page its anchor cell lands on, as the PNG the mounted renderer
|
|
50
|
+
* captures (`exportPng`); a chart on a sheet that is not on screen has
|
|
51
|
+
* no renderer to capture and prints as a titled frame.
|
|
52
|
+
*/
|
|
53
|
+
charts?: EmbeddedChart[];
|
|
47
54
|
};
|
|
48
55
|
export declare const PrintPreviewDialog: React.FC<PrintPreviewDialogProps>;
|
|
49
56
|
//# sourceMappingURL=print-preview-dialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-preview-dialog.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/print-preview-dialog.tsx"],"names":[],"mappings":"AAYA,OAAO,
|
|
1
|
+
{"version":3,"file":"print-preview-dialog.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/print-preview-dialog.tsx"],"names":[],"mappings":"AAYA,OAAO,KAMN,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EAEX,MAAM,4BAA4B,CAAC;AAKpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AA4BxD,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7D;;;;OAIG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAgEF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAusBhE,CAAC"}
|
|
@@ -9,14 +9,22 @@
|
|
|
9
9
|
// `frozenColumnCount`, per-row/column metadata sizes) or passed
|
|
10
10
|
// alongside (`getFormattedValue`, `getEffectiveFormat`, …) — no
|
|
11
11
|
// adapter object, no nested PrintSheet construction.
|
|
12
|
-
import React, { useCallback, useMemo, useRef, useState } from "react";
|
|
12
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
13
13
|
import { Button, IconButton, Select, SelectContent, SelectItem, SelectPortal, SelectTrigger, SelectValue, } from "@rowsncolumns/ui";
|
|
14
14
|
import { Cross2Icon } from "@rowsncolumns/icons";
|
|
15
15
|
import { PageBlock } from "./page-block";
|
|
16
|
+
import { useGetChartActions } from "../../atoms/chart-actions.atom";
|
|
16
17
|
import { DEFAULT_COLUMN_WIDTH, DEFAULT_ROW_HEIGHT } from "../../config";
|
|
17
18
|
import { DEFAULT_PRINT_SETTINGS, PAPER_SIZES, resolveContentArea, resolveMargins, resolvePageDimensions, } from "./settings";
|
|
18
|
-
import { computePageLayout, measureRange, resolveScale, } from "./use-page-layout";
|
|
19
|
+
import { computePageLayout, measureRange, placeChartsOnPages, resolveScale, } from "./use-page-layout";
|
|
19
20
|
import { runPrint } from "./run-print";
|
|
21
|
+
/** A PNG blob as a `data:` URL — the print iframe needs no live object URLs. */
|
|
22
|
+
const blobToDataUrl = (blob) => new Promise((resolve) => {
|
|
23
|
+
const reader = new FileReader();
|
|
24
|
+
reader.onload = () => resolve(typeof reader.result === "string" ? reader.result : undefined);
|
|
25
|
+
reader.onerror = () => resolve(undefined);
|
|
26
|
+
reader.readAsDataURL(blob);
|
|
27
|
+
});
|
|
20
28
|
const resolveSheet = (sheet, options) => {
|
|
21
29
|
const defaultColumnWidth = sheet.defaultColumnWidth ?? DEFAULT_COLUMN_WIDTH;
|
|
22
30
|
const defaultRowHeight = sheet.defaultRowHeight ?? DEFAULT_ROW_HEIGHT;
|
|
@@ -35,9 +43,10 @@ const resolveSheet = (sheet, options) => {
|
|
|
35
43
|
const labelClass = "text-xs font-medium text-rnc-foreground/80 mb-1 block";
|
|
36
44
|
const fieldRowClass = "mb-3";
|
|
37
45
|
const controlClass = "w-full text-xs border border-solid border-rnc-border rounded-sm px-2 py-1.5 bg-rnc-background text-rnc-foreground focus:outline-none focus:ring-1 focus:ring-ring";
|
|
38
|
-
export const PrintPreviewDialog = ({ isOpen, onClose, sheets, activeSheetId, selections, title, getFormattedValue, getEffectiveFormat, getDataRowCount, getDataColumnCount, getCellData, }) => {
|
|
46
|
+
export const PrintPreviewDialog = ({ isOpen, onClose, sheets, activeSheetId, selections, title, getFormattedValue, getEffectiveFormat, getDataRowCount, getDataColumnCount, getCellData, charts, }) => {
|
|
39
47
|
const [settings, setSettings] = useState(DEFAULT_PRINT_SETTINGS);
|
|
40
48
|
const printContainerRef = useRef(null);
|
|
49
|
+
const getChartActions = useGetChartActions();
|
|
41
50
|
// Look up the active sheet from the supplied list. When the id
|
|
42
51
|
// doesn't match anything (shouldn't happen) we render nothing.
|
|
43
52
|
const activeSheetSource = useMemo(() => sheets.find((s) => s.sheetId === activeSheetId), [sheets, activeSheetId]);
|
|
@@ -117,6 +126,80 @@ export const PrintPreviewDialog = ({ isOpen, onClose, sheets, activeSheetId, sel
|
|
|
117
126
|
}
|
|
118
127
|
return out;
|
|
119
128
|
}, [isOpen, settings, sheetsForScope]);
|
|
129
|
+
// Chart PNGs, captured from the mounted renderers each time the dialog
|
|
130
|
+
// opens (a Data → chart edit while it is open is not re-captured).
|
|
131
|
+
const [chartImages, setChartImages] = useState({});
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (!isOpen || !charts?.length)
|
|
134
|
+
return;
|
|
135
|
+
let cancelled = false;
|
|
136
|
+
const sheetIds = new Set(sheetsForScope.map((sheet) => sheet.sheetId));
|
|
137
|
+
void Promise.all(charts
|
|
138
|
+
.filter((chart) => sheetIds.has(chart.position?.sheetId))
|
|
139
|
+
.map(async (chart) => {
|
|
140
|
+
const blob = await getChartActions(chart.chartId)
|
|
141
|
+
?.exportPng?.()
|
|
142
|
+
.catch(() => undefined);
|
|
143
|
+
const url = blob ? await blobToDataUrl(blob) : undefined;
|
|
144
|
+
return [String(chart.chartId), url];
|
|
145
|
+
})).then((entries) => {
|
|
146
|
+
if (cancelled)
|
|
147
|
+
return;
|
|
148
|
+
const next = {};
|
|
149
|
+
for (const [chartId, url] of entries)
|
|
150
|
+
if (url)
|
|
151
|
+
next[chartId] = url;
|
|
152
|
+
setChartImages(next);
|
|
153
|
+
});
|
|
154
|
+
return () => {
|
|
155
|
+
cancelled = true;
|
|
156
|
+
};
|
|
157
|
+
}, [isOpen, charts, sheetsForScope, getChartActions]);
|
|
158
|
+
// Which page each chart prints on (Excel: the page its anchor lands on).
|
|
159
|
+
const printedCharts = useMemo(() => {
|
|
160
|
+
const bySheetAndPage = new Map();
|
|
161
|
+
if (!charts?.length)
|
|
162
|
+
return bySheetAndPage;
|
|
163
|
+
for (const sheet of sheetsForScope) {
|
|
164
|
+
const bounds = sheet.printBounds ?? {
|
|
165
|
+
startRow: 1,
|
|
166
|
+
endRow: Math.max(1, sheet.rowCount),
|
|
167
|
+
startColumn: 1,
|
|
168
|
+
endColumn: Math.max(1, sheet.columnCount),
|
|
169
|
+
};
|
|
170
|
+
const blocks = pages
|
|
171
|
+
.filter((page) => page.sheet === sheet)
|
|
172
|
+
.map((page) => page.block);
|
|
173
|
+
const placed = placeChartsOnPages({
|
|
174
|
+
charts: charts
|
|
175
|
+
.filter((chart) => chart.position?.overlayPosition?.anchorCell)
|
|
176
|
+
.map((chart) => ({
|
|
177
|
+
chartId: chart.chartId,
|
|
178
|
+
title: chart.spec.title,
|
|
179
|
+
sheetId: chart.position.sheetId,
|
|
180
|
+
anchorCell: chart.position.overlayPosition.anchorCell,
|
|
181
|
+
offsetXPixels: chart.position.overlayPosition.offsetXPixels,
|
|
182
|
+
offsetYPixels: chart.position.overlayPosition.offsetYPixels,
|
|
183
|
+
widthPixels: chart.position.overlayPosition.widthPixels,
|
|
184
|
+
heightPixels: chart.position.overlayPosition.heightPixels,
|
|
185
|
+
})),
|
|
186
|
+
sheetId: sheet.sheetId,
|
|
187
|
+
blocks,
|
|
188
|
+
startRow: bounds.startRow,
|
|
189
|
+
startColumn: bounds.startColumn,
|
|
190
|
+
repeatRows: settings.repeatFrozenRows && sheet.frozenRows ? sheet.frozenRows : 0,
|
|
191
|
+
repeatColumns: settings.repeatFrozenColumns && sheet.frozenColumns
|
|
192
|
+
? sheet.frozenColumns
|
|
193
|
+
: 0,
|
|
194
|
+
getColumnWidth: sheet.getColumnWidth,
|
|
195
|
+
getRowHeight: sheet.getRowHeight,
|
|
196
|
+
});
|
|
197
|
+
for (const [pageIndex, list] of placed) {
|
|
198
|
+
bySheetAndPage.set(`${sheet.sheetId}:${pageIndex}`, list);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return bySheetAndPage;
|
|
202
|
+
}, [charts, sheetsForScope, pages, settings.repeatFrozenRows, settings.repeatFrozenColumns]);
|
|
120
203
|
// Single Date snapshot reused by every page so the printed copies
|
|
121
204
|
// agree on "now" — Google Sheets does the same so a multi-page print
|
|
122
205
|
// doesn't tick over a minute mid-document.
|
|
@@ -196,7 +279,12 @@ export const PrintPreviewDialog = ({ isOpen, onClose, sheets, activeSheetId, sel
|
|
|
196
279
|
i + 1,
|
|
197
280
|
" of ",
|
|
198
281
|
pages.length),
|
|
199
|
-
React.createElement(PageBlock, { block: block, pageWidth: pageDims.width, pageHeight: pageDims.height, margins: margins, scale: computeScaleForSheet(sheet), showGridlines: settings.showGridlines, showNotes: settings.showNotes, horizontalAlignment: settings.horizontalAlignment, verticalAlignment: settings.verticalAlignment, sheetId: sheet.sheetId, getFormattedValue: getFormattedValue, getEffectiveFormat: getEffectiveFormat, getColumnWidth: sheet.getColumnWidth, getRowHeight: sheet.getRowHeight, merges: sheet.merges, hasNote: hasNote,
|
|
282
|
+
React.createElement(PageBlock, { block: block, pageWidth: pageDims.width, pageHeight: pageDims.height, margins: margins, scale: computeScaleForSheet(sheet), showGridlines: settings.showGridlines, showNotes: settings.showNotes, horizontalAlignment: settings.horizontalAlignment, verticalAlignment: settings.verticalAlignment, sheetId: sheet.sheetId, getFormattedValue: getFormattedValue, getEffectiveFormat: getEffectiveFormat, getColumnWidth: sheet.getColumnWidth, getRowHeight: sheet.getRowHeight, merges: sheet.merges, hasNote: hasNote, charts: printedCharts
|
|
283
|
+
.get(`${sheet.sheetId}:${block.index}`)
|
|
284
|
+
?.map((chart) => ({
|
|
285
|
+
...chart,
|
|
286
|
+
imageUrl: chartImages[chart.chartId],
|
|
287
|
+
})), frozenRowStart: repeatRows > 0 ? bounds.startRow : undefined, frozenRowEnd: repeatRows > 0
|
|
200
288
|
? bounds.startRow + repeatRows - 1
|
|
201
289
|
: undefined, frozenColumnStart: repeatColumns > 0 ? bounds.startColumn : undefined, frozenColumnEnd: repeatColumns > 0
|
|
202
290
|
? bounds.startColumn + repeatColumns - 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-print.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/run-print.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,eAAe,GAAG;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAuDF,eAAO,MAAM,QAAQ,GAAI,MAAM,eAAe,KAAG,
|
|
1
|
+
{"version":3,"file":"run-print.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/run-print.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,eAAe,GAAG;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAuDF,eAAO,MAAM,QAAQ,GAAI,MAAM,eAAe,KAAG,IA+DhD,CAAC"}
|
|
@@ -95,13 +95,23 @@ export const runPrint = (opts) => {
|
|
|
95
95
|
// Delay so afterprint has a chance to fire first.
|
|
96
96
|
setTimeout(cleanup, 1000);
|
|
97
97
|
}, { once: true });
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
98
|
+
// Chart PNGs are `<img>`s in the injected HTML; print once every one
|
|
99
|
+
// has decoded so no page goes out with an empty chart frame.
|
|
100
|
+
const pending = Array.from(win.document.images)
|
|
101
|
+
.filter((img) => !img.complete)
|
|
102
|
+
.map((img) => new Promise((resolve) => {
|
|
103
|
+
img.addEventListener("load", () => resolve(), { once: true });
|
|
104
|
+
img.addEventListener("error", () => resolve(), { once: true });
|
|
105
|
+
}));
|
|
106
|
+
void Promise.all(pending).then(() => {
|
|
107
|
+
try {
|
|
108
|
+
win.focus();
|
|
109
|
+
win.print();
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
cleanup();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
105
115
|
};
|
|
106
116
|
iframe.addEventListener("load", onLoad, { once: true });
|
|
107
117
|
};
|
|
@@ -10,6 +10,53 @@ export type PageBlock = {
|
|
|
10
10
|
height: number;
|
|
11
11
|
};
|
|
12
12
|
export type PageOrder = "over-then-down" | "down-then-over";
|
|
13
|
+
/**
|
|
14
|
+
* A chart laid onto one printed page: its frame in unscaled sheet px
|
|
15
|
+
* relative to the page table's top-left (the repeated frozen prefix
|
|
16
|
+
* included), so the page's `transform: scale()` sizes it with the cells.
|
|
17
|
+
*/
|
|
18
|
+
export type PrintedChart = {
|
|
19
|
+
chartId: string;
|
|
20
|
+
title?: string;
|
|
21
|
+
left: number;
|
|
22
|
+
top: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
};
|
|
26
|
+
export type PrintedChartSource = {
|
|
27
|
+
chartId: string | number;
|
|
28
|
+
title?: string | null;
|
|
29
|
+
sheetId: number;
|
|
30
|
+
anchorCell: {
|
|
31
|
+
rowIndex: number;
|
|
32
|
+
columnIndex: number;
|
|
33
|
+
};
|
|
34
|
+
offsetXPixels?: number | null;
|
|
35
|
+
offsetYPixels?: number | null;
|
|
36
|
+
widthPixels?: number | null;
|
|
37
|
+
heightPixels?: number | null;
|
|
38
|
+
};
|
|
39
|
+
export type PlaceChartsInput = {
|
|
40
|
+
charts: readonly PrintedChartSource[];
|
|
41
|
+
sheetId: number;
|
|
42
|
+
blocks: readonly PageBlock[];
|
|
43
|
+
/** The printed range — where the repeated frozen prefix starts. */
|
|
44
|
+
startRow: number;
|
|
45
|
+
startColumn: number;
|
|
46
|
+
repeatRows?: number;
|
|
47
|
+
repeatColumns?: number;
|
|
48
|
+
getColumnWidth: (columnIndex: number) => number;
|
|
49
|
+
getRowHeight: (rowIndex: number) => number;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Excel prints a floating object on the page its anchor cell lands on.
|
|
53
|
+
* Each chart goes to the first page whose block (or repeated frozen
|
|
54
|
+
* prefix) contains the anchor; a chart anchored outside the printed
|
|
55
|
+
* range is not printed. The frame is positioned from the anchor cell's
|
|
56
|
+
* offset within that page plus the chart's own pixel offsets and keeps
|
|
57
|
+
* its on-sheet size — a chart that overhangs the page is clipped by it.
|
|
58
|
+
*/
|
|
59
|
+
export declare const placeChartsOnPages: ({ charts, sheetId, blocks, startRow, startColumn, repeatRows, repeatColumns, getColumnWidth, getRowHeight, }: PlaceChartsInput) => Map<number, PrintedChart[]>;
|
|
13
60
|
export type PageLayoutInput = {
|
|
14
61
|
startRow: number;
|
|
15
62
|
endRow: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-page-layout.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/use-page-layout.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA2CF,eAAO,MAAM,iBAAiB,GAAI,OAAO,eAAe,KAAG,SAAS,EAwEnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,gBAAgB,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACrC,cAAc,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAClC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAMjC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,EACjD,aAAa,MAAM,EACnB,YAAY,MAAM,EAClB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,eAAe,MAAM,KACpB,MAmBF,CAAC"}
|
|
1
|
+
{"version":3,"file":"use-page-layout.d.ts","sourceRoot":"","sources":["../../../../components/print-preview/use-page-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,61 @@
|
|
|
11
11
|
// iterate row-bands top to bottom. Page index walks row-bands within a
|
|
12
12
|
// column-band first, mirroring Excel. The opposite order would be a
|
|
13
13
|
// trivial swap if/when we add the `overThenDown` toggle.
|
|
14
|
+
const DEFAULT_PRINTED_CHART_WIDTH = 300;
|
|
15
|
+
const DEFAULT_PRINTED_CHART_HEIGHT = 200;
|
|
16
|
+
const sumSizes = (from, toExclusive, size) => {
|
|
17
|
+
let total = 0;
|
|
18
|
+
for (let i = from; i < toExclusive; i++)
|
|
19
|
+
total += size(i);
|
|
20
|
+
return total;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Excel prints a floating object on the page its anchor cell lands on.
|
|
24
|
+
* Each chart goes to the first page whose block (or repeated frozen
|
|
25
|
+
* prefix) contains the anchor; a chart anchored outside the printed
|
|
26
|
+
* range is not printed. The frame is positioned from the anchor cell's
|
|
27
|
+
* offset within that page plus the chart's own pixel offsets and keeps
|
|
28
|
+
* its on-sheet size — a chart that overhangs the page is clipped by it.
|
|
29
|
+
*/
|
|
30
|
+
export const placeChartsOnPages = ({ charts, sheetId, blocks, startRow, startColumn, repeatRows = 0, repeatColumns = 0, getColumnWidth, getRowHeight, }) => {
|
|
31
|
+
const placed = new Map();
|
|
32
|
+
const frozenRowEnd = startRow + repeatRows - 1;
|
|
33
|
+
const frozenColumnEnd = startColumn + repeatColumns - 1;
|
|
34
|
+
const frozenRowsHeight = sumSizes(startRow, frozenRowEnd + 1, getRowHeight);
|
|
35
|
+
const frozenColumnsWidth = sumSizes(startColumn, frozenColumnEnd + 1, getColumnWidth);
|
|
36
|
+
for (const chart of charts) {
|
|
37
|
+
if (chart.sheetId !== sheetId)
|
|
38
|
+
continue;
|
|
39
|
+
const { rowIndex, columnIndex } = chart.anchorCell;
|
|
40
|
+
const inFrozenRows = repeatRows > 0 && rowIndex >= startRow && rowIndex <= frozenRowEnd;
|
|
41
|
+
const inFrozenColumns = repeatColumns > 0 && columnIndex >= startColumn && columnIndex <= frozenColumnEnd;
|
|
42
|
+
const block = blocks.find((b) => (inFrozenRows || (rowIndex >= b.startRow && rowIndex <= b.endRow)) &&
|
|
43
|
+
(inFrozenColumns ||
|
|
44
|
+
(columnIndex >= b.startColumn && columnIndex <= b.endColumn)));
|
|
45
|
+
if (!block)
|
|
46
|
+
continue;
|
|
47
|
+
const left = (inFrozenColumns
|
|
48
|
+
? sumSizes(startColumn, columnIndex, getColumnWidth)
|
|
49
|
+
: frozenColumnsWidth +
|
|
50
|
+
sumSizes(block.startColumn, columnIndex, getColumnWidth)) +
|
|
51
|
+
(chart.offsetXPixels ?? 0);
|
|
52
|
+
const top = (inFrozenRows
|
|
53
|
+
? sumSizes(startRow, rowIndex, getRowHeight)
|
|
54
|
+
: frozenRowsHeight + sumSizes(block.startRow, rowIndex, getRowHeight)) +
|
|
55
|
+
(chart.offsetYPixels ?? 0);
|
|
56
|
+
const list = placed.get(block.index) ?? [];
|
|
57
|
+
list.push({
|
|
58
|
+
chartId: String(chart.chartId),
|
|
59
|
+
title: chart.title ?? undefined,
|
|
60
|
+
left,
|
|
61
|
+
top,
|
|
62
|
+
width: chart.widthPixels ?? DEFAULT_PRINTED_CHART_WIDTH,
|
|
63
|
+
height: chart.heightPixels ?? DEFAULT_PRINTED_CHART_HEIGHT,
|
|
64
|
+
});
|
|
65
|
+
placed.set(block.index, list);
|
|
66
|
+
}
|
|
67
|
+
return placed;
|
|
68
|
+
};
|
|
14
69
|
/**
|
|
15
70
|
* Slice the [startColumn..endColumn] range into bands such that each
|
|
16
71
|
* band's summed (scaled) width fits inside `contentWidth`. A single
|
|
@@ -5,5 +5,5 @@ import type { SelectionNewProps } from "./types";
|
|
|
5
5
|
* @param param0
|
|
6
6
|
* @returns
|
|
7
7
|
*/
|
|
8
|
-
export declare const Selection: React.MemoExoticComponent<({ x, y, width, height, fillHandleSize, showFillHandle, offset, stroke, strokeLeftColor, strokeTopColor, strokeRightColor, strokeBottomColor, strokeWidth, strokeTopWidth, strokeRightWidth, strokeBottomWidth, strokeLeftWidth, strokeStyle, fillOpacity, draggable, isDragging, borderCoverWidth, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit, PasteMenu, FillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag, insertOptions, onChooseInsertOption, SuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }: SelectionNewProps) => React.JSX.Element>;
|
|
8
|
+
export declare const Selection: React.MemoExoticComponent<({ x, y, width, height, fillHandleSize, showFillHandle, offset, stroke, strokeLeftColor, strokeTopColor, strokeRightColor, strokeBottomColor, strokeWidth, strokeTopWidth, strokeRightWidth, strokeBottomWidth, strokeLeftWidth, strokeStyle, fillOpacity, draggable, isDragging, borderCoverWidth, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit, PasteMenu, FillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag, insertOptions, onChooseInsertOption, tableAutoExpansion, onChooseTableAutoExpansionOption, calculatedColumnFill, onChooseCalculatedColumnOption, SuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }: SelectionNewProps) => React.JSX.Element>;
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/selection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/selection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAiBpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,SAAS,urCA8EjB,iBAAiB,uBA0VrB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { memo } from "react";
|
|
2
2
|
import { InsertOptionsSmartTag as DefaultInsertOptionsSmartTag } from "../insert-options-smart-tag";
|
|
3
|
+
import { TableAutoExpansionSmartTag } from "../table-auto-expansion-smart-tag";
|
|
4
|
+
import { CalculatedColumnSmartTag } from "../calculated-column-smart-tag";
|
|
3
5
|
import { FillOptionsMenu as DefaultFillOptionsMenu } from "./fill-options-menu";
|
|
4
6
|
import { MagicFill } from "./magic-fill";
|
|
5
7
|
import { PasteMenu as DefaultPasteMenu } from "./paste-menu";
|
|
@@ -12,7 +14,7 @@ import { SelectionTitle } from "./title";
|
|
|
12
14
|
* @param param0
|
|
13
15
|
* @returns
|
|
14
16
|
*/
|
|
15
|
-
export const Selection = memo(({ x = 0, y = 0, width = 0, height = 0, fillHandleSize = 8, showFillHandle, offset = 0, stroke, strokeLeftColor = stroke, strokeTopColor = stroke, strokeRightColor = stroke, strokeBottomColor = stroke, strokeWidth = 0, strokeTopWidth = strokeWidth, strokeRightWidth = strokeWidth, strokeBottomWidth = strokeWidth, strokeLeftWidth = strokeWidth, strokeStyle = "solid", fillOpacity = 1, draggable, isDragging, borderCoverWidth = 5, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent = SelectionTitle, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize = 6, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent = MagicFill, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit = DefaultQuickEdit, PasteMenu = DefaultPasteMenu, FillOptionsMenu = DefaultFillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag = DefaultInsertOptionsSmartTag, insertOptions, onChooseInsertOption, SuggestionAction = DefaultSuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }) => {
|
|
17
|
+
export const Selection = memo(({ x = 0, y = 0, width = 0, height = 0, fillHandleSize = 8, showFillHandle, offset = 0, stroke, strokeLeftColor = stroke, strokeTopColor = stroke, strokeRightColor = stroke, strokeBottomColor = stroke, strokeWidth = 0, strokeTopWidth = strokeWidth, strokeRightWidth = strokeWidth, strokeBottomWidth = strokeWidth, strokeLeftWidth = strokeWidth, strokeStyle = "solid", fillOpacity = 1, draggable, isDragging, borderCoverWidth = 5, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent = SelectionTitle, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize = 6, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent = MagicFill, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit = DefaultQuickEdit, PasteMenu = DefaultPasteMenu, FillOptionsMenu = DefaultFillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag = DefaultInsertOptionsSmartTag, insertOptions, onChooseInsertOption, tableAutoExpansion, onChooseTableAutoExpansionOption, calculatedColumnFill, onChooseCalculatedColumnOption, SuggestionAction = DefaultSuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }) => {
|
|
16
18
|
// Show paste menu
|
|
17
19
|
const finalShowPasteMenu = !showPasteMenu
|
|
18
20
|
? false
|
|
@@ -191,6 +193,8 @@ export const Selection = memo(({ x = 0, y = 0, width = 0, height = 0, fillHandle
|
|
|
191
193
|
type === "quickedit" ? (React.createElement(QuickEdit, { x: x, y: y, width: width, height: height, range: range, sheetId: sheetId, onRemoveQuickEdit: onRemoveQuickEdit })) : null,
|
|
192
194
|
finalShowPasteMenu && (React.createElement(PasteMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, onSplitTextToColumns: onSplitTextToColumns })),
|
|
193
195
|
fillOptions && type === "selection" && onChooseFillType ? (React.createElement(FillOptionsMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, mode: fillOptions.mode, fillType: fillOptions.fillType, hasDates: fillOptions.hasDates, onChooseFillType: onChooseFillType, onOpenSeriesDialog: onOpenFillSeriesDialog, onClose: onCloseFillOptions })) : null,
|
|
194
|
-
insertOptions && onChooseInsertOption ? (React.createElement(InsertOptionsSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, axis: insertOptions.axis, option: insertOptions.option, onChooseOption: onChooseInsertOption })) : null
|
|
196
|
+
insertOptions && onChooseInsertOption ? (React.createElement(InsertOptionsSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, axis: insertOptions.axis, option: insertOptions.option, onChooseOption: onChooseInsertOption })) : null,
|
|
197
|
+
tableAutoExpansion && onChooseTableAutoExpansionOption ? (React.createElement(TableAutoExpansionSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, canStop: tableAutoExpansion.canStop, onChooseOption: onChooseTableAutoExpansionOption })) : null,
|
|
198
|
+
calculatedColumnFill && onChooseCalculatedColumnOption ? (React.createElement(CalculatedColumnSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, kind: calculatedColumnFill.kind, canStop: calculatedColumnFill.canStop, onChooseOption: onChooseCalculatedColumnOption })) : null));
|
|
195
199
|
});
|
|
196
200
|
Selection.displayName = "Selection";
|
|
@@ -5,6 +5,8 @@ import type { Maybe, PivotTable, SheetRange } from "../../types";
|
|
|
5
5
|
import type { AutoFillType, TableView } from "../../types";
|
|
6
6
|
import type { SelectionAttributes } from "../canvas-grid/typings";
|
|
7
7
|
import type { InsertOptionsSmartTagProps } from "../insert-options-smart-tag";
|
|
8
|
+
import type { TableAutoExpansionSmartTagProps } from "../table-auto-expansion-smart-tag";
|
|
9
|
+
import type { CalculatedColumnSmartTagProps } from "../calculated-column-smart-tag";
|
|
8
10
|
import type { FillOptionsMenuProps } from "./fill-options-menu";
|
|
9
11
|
import type { MagicFillContentProps, MagicFillProps } from "./magic-fill";
|
|
10
12
|
import type { PasteMenuProps } from "./paste-menu";
|
|
@@ -49,6 +51,19 @@ export type SelectionNewProps = SelectionProps<SelectionAttributes> & {
|
|
|
49
51
|
*/
|
|
50
52
|
insertOptions?: Pick<InsertOptionsSmartTagProps, "axis" | "option">;
|
|
51
53
|
onChooseInsertOption?: InsertOptionsSmartTagProps["onChooseOption"];
|
|
54
|
+
/**
|
|
55
|
+
* Pending AutoCorrect smart tag for THIS selection (present only on the active cell right after a
|
|
56
|
+
* table auto-expanded): "Undo Table AutoExpansion" / "Stop Automatically Expanding Tables".
|
|
57
|
+
*/
|
|
58
|
+
tableAutoExpansion?: Pick<TableAutoExpansionSmartTagProps, "canStop">;
|
|
59
|
+
onChooseTableAutoExpansionOption?: TableAutoExpansionSmartTagProps["onChooseOption"];
|
|
60
|
+
/**
|
|
61
|
+
* Pending AutoCorrect smart tag for THIS selection (the active cell right after a formula typed
|
|
62
|
+
* into a table column): "Undo Calculated Column" / "Overwrite all cells in this column with this
|
|
63
|
+
* formula" / "Stop automatically creating calculated columns".
|
|
64
|
+
*/
|
|
65
|
+
calculatedColumnFill?: Pick<CalculatedColumnSmartTagProps, "kind" | "canStop">;
|
|
66
|
+
onChooseCalculatedColumnOption?: CalculatedColumnSmartTagProps["onChooseOption"];
|
|
52
67
|
SuggestionAction?: React.ComponentType<SuggestionActionProps>;
|
|
53
68
|
readonly?: boolean;
|
|
54
69
|
showPasteMenu?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/selection/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/selection/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sheet-tabs/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAyB,MAAM,OAAO,CAAC;AAI9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,KAAK,EAAE,QAAQ,CAAC,EAAE,KAClB,MACjD,CAAC;AAEF;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAAE,EAC3C,MAAM,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAiC,EACjC,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,sBAA8B,GAC/B,EAAE,cAAc,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sheet-tabs/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAyB,MAAM,OAAO,CAAC;AAI9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,KAAK,EAAE,QAAQ,CAAC,EAAE,KAClB,MACjD,CAAC;AAEF;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAAE,EAC3C,MAAM,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAiC,EACjC,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,sBAA8B,GAC/B,EAAE,cAAc,CAAC,CAAC,CAAC,qBAqUnB;AAED,eAAO,MAAM,SAAS,EAA+B,OAAO,kBAAkB,CAAC"}
|
|
@@ -201,7 +201,7 @@ function SheetTabsComponent({ sheets, activeSheetId, onRenameSheet, protectedRan
|
|
|
201
201
|
React.createElement(ChevronRightIcon, null)))) : null,
|
|
202
202
|
React.createElement(StyledSheetTabWrapper, { ref: scrollContainerRef, className: containerClassName },
|
|
203
203
|
React.createElement(Separator, { ref: separatorRef, decorative: true, orientation: "vertical" }),
|
|
204
|
-
visibleSheets.map(({ sheetId, title, tabColor }, index) => {
|
|
204
|
+
visibleSheets.map(({ sheetId, title, tabColor, type }, index) => {
|
|
205
205
|
const isSelected = sheetId === activeSheetId;
|
|
206
206
|
const canMoveLeft = canMoveToLeft(sheetId, index);
|
|
207
207
|
const canMoveRight = canMoveToRight(sheetId, index);
|
|
@@ -211,7 +211,7 @@ function SheetTabsComponent({ sheets, activeSheetId, onRenameSheet, protectedRan
|
|
|
211
211
|
? isProtectedSheet(sheetId, protectedRanges)
|
|
212
212
|
: false;
|
|
213
213
|
return (React.createElement(Fragment, { key: sheetId },
|
|
214
|
-
React.createElement(SheetTab, { canDelete: canDelete, canHide: canHide, isSelected: isSelected, sheetId: sheetId, title: title, tabColor: tabColor, canMoveLeft: canMoveLeft, canMoveRight: canMoveRight, isProtected: isProtected, onRenameSheet: onRenameSheet, canRename: canRename, ContextMenu: ContextMenu, ColorSelector: ColorSelector, onMoveSheet: handleMoveSheet, onHideSheet: onHideSheet, onShowSheet: onShowSheet, hiddenSheets: hiddenSheets, onAddUserDefinedColor: onAddUserDefinedColor, onChangeSheetTabColor: onChangeSheetTabColor, onCopySheet: onCopySheet, onDeleteSheet: onDeleteSheet, onDuplicateSheet: onDuplicateSheet, onProtectSheet: onProtectSheet, onUnProtectSheet: onUnProtectSheet, userDefinedColors: userDefinedColors, tabClassName: tabClassName, onChangeActiveSheet: onChangeActiveSheet, theme: theme, readonly: readonly })));
|
|
214
|
+
React.createElement(SheetTab, { canDelete: canDelete, canHide: canHide, isSelected: isSelected, sheetId: sheetId, title: title, tabColor: tabColor, type: type, canMoveLeft: canMoveLeft, canMoveRight: canMoveRight, isProtected: isProtected, onRenameSheet: onRenameSheet, canRename: canRename, ContextMenu: ContextMenu, ColorSelector: ColorSelector, onMoveSheet: handleMoveSheet, onHideSheet: onHideSheet, onShowSheet: onShowSheet, hiddenSheets: hiddenSheets, onAddUserDefinedColor: onAddUserDefinedColor, onChangeSheetTabColor: onChangeSheetTabColor, onCopySheet: onCopySheet, onDeleteSheet: onDeleteSheet, onDuplicateSheet: onDuplicateSheet, onProtectSheet: onProtectSheet, onUnProtectSheet: onUnProtectSheet, userDefinedColors: userDefinedColors, tabClassName: tabClassName, onChangeActiveSheet: onChangeActiveSheet, theme: theme, readonly: readonly })));
|
|
215
215
|
}))))));
|
|
216
216
|
}
|
|
217
217
|
export const SheetTabs = memo(SheetTabsComponent);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { Sheet } from "../../types";
|
|
3
3
|
import type { SheetTabsProps } from "./types";
|
|
4
|
-
type SheetTabProps<S extends Sheet> = Omit<SheetTabsProps<S>, "sheets" | "activeSheetId" | "onMoveSheet"> & Pick<Sheet, "title" | "sheetId" | "tabColor"> & {
|
|
4
|
+
type SheetTabProps<S extends Sheet> = Omit<SheetTabsProps<S>, "sheets" | "activeSheetId" | "onMoveSheet"> & Pick<Sheet, "title" | "sheetId" | "tabColor" | "type"> & {
|
|
5
5
|
isSelected?: boolean;
|
|
6
6
|
canDelete?: boolean;
|
|
7
7
|
canHide?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-tab.d.ts","sourceRoot":"","sources":["../../../../components/sheet-tabs/sheet-tab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sheet-tab.d.ts","sourceRoot":"","sources":["../../../../components/sheet-tabs/sheet-tab.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAMlE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,KAAK,aAAa,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CACxC,cAAc,CAAC,CAAC,CAAC,EACjB,QAAQ,GAAG,eAAe,GAAG,aAAa,CAC3C,GACC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IACrE,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;IACrE,YAAY,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD,CAAC;AAoPJ,eAAO,MAAM,QAAQ,EAA0C,CAC7D,CAAC,SAAS,KAAK,EAEf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,KAC1D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useSortable } from "@dnd-kit/sortable";
|
|
2
2
|
import { CSS } from "@dnd-kit/utilities";
|
|
3
|
-
import { LockClosedIcon, TriangleDownIcon } from "@rowsncolumns/icons";
|
|
3
|
+
import { BarChartIcon, LockClosedIcon, TriangleDownIcon, } from "@rowsncolumns/icons";
|
|
4
4
|
import { DropdownMenu, DropdownMenuTrigger, IconButton, Separator, } from "@rowsncolumns/ui";
|
|
5
5
|
import { moveSelectionToEndOfActiveInput } from "@rowsncolumns/utils";
|
|
6
6
|
import React, { forwardRef, memo, useRef, useState } from "react";
|
|
@@ -10,7 +10,7 @@ import { useMergeRefs } from "../../hooks/use-merge.refs";
|
|
|
10
10
|
import { getStringifiedColor } from "../../themes";
|
|
11
11
|
import { SheetTabContextMenu } from "./context-menu";
|
|
12
12
|
import { StyledIconWrapper, StyledSheetTab, StyledSheetTabTitle, StyledTabColor, } from "./style";
|
|
13
|
-
function SheetTabComponent({ title, sheetId, isSelected, onChangeActiveSheet, onRenameSheet, tabClassName, tabColor, theme, isProtected, onMoveSheet, onHideSheet, onShowSheet, onUnProtectSheet, onProtectSheet, onDeleteSheet, onDuplicateSheet, onChangeSheetTabColor, canDelete, canRename, canHide, canMoveRight, canMoveLeft, userDefinedColors, onAddUserDefinedColor, hiddenSheets, ContextMenu = SheetTabContextMenu, ColorSelector, readonly, }, forwardedRef) {
|
|
13
|
+
function SheetTabComponent({ title, sheetId, isSelected, onChangeActiveSheet, onRenameSheet, tabClassName, tabColor, type, theme, isProtected, onMoveSheet, onHideSheet, onShowSheet, onUnProtectSheet, onProtectSheet, onDeleteSheet, onDuplicateSheet, onChangeSheetTabColor, canDelete, canRename, canHide, canMoveRight, canMoveLeft, userDefinedColors, onAddUserDefinedColor, hiddenSheets, ContextMenu = SheetTabContextMenu, ColorSelector, readonly, }, forwardedRef) {
|
|
14
14
|
const [isEditing, setIsEditing] = useState(false);
|
|
15
15
|
const [isOpen, setIsOpen] = useState(false);
|
|
16
16
|
const inputRef = useRef(null);
|
|
@@ -118,6 +118,8 @@ function SheetTabComponent({ title, sheetId, isSelected, onChangeActiveSheet, on
|
|
|
118
118
|
tabColor ? (React.createElement(StyledTabColor, { style: {
|
|
119
119
|
backgroundColor: getStringifiedColor(tabColor, theme),
|
|
120
120
|
} })) : null,
|
|
121
|
+
type === "chartsheet" ? (React.createElement(StyledIconWrapper, { className: "text-rnc-foreground/70", "data-chart-sheet-icon": "true", "aria-label": "Chart sheet" },
|
|
122
|
+
React.createElement(BarChartIcon, null))) : null,
|
|
121
123
|
isProtected ? (React.createElement(StyledIconWrapper, null,
|
|
122
124
|
React.createElement(LockClosedIcon, null))) : null,
|
|
123
125
|
React.createElement(StyledSheetTabTitle, { role: "button", ref: inputRef, contentEditable: isEditing, onKeyDown: handleKeyDown, onDoubleClick: () => startEditing(), onBlur: handleBlur, suppressContentEditableWarning: true }, title),
|