@rowsncolumns/spreadsheet 10.3.0 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/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 +407 -77
- 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 +218 -42
- 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/resizer/index.d.ts.map +1 -1
- package/dist/cjs/components/resizer/index.js +10 -5
- 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-search/index.d.ts.map +1 -1
- package/dist/cjs/components/sheet-search/index.js +6 -2
- 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-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +6 -3
- 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-header-actions.d.ts.map +1 -1
- package/dist/cjs/hooks/use-header-actions.js +17 -10
- 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-move-columns-rows.d.ts.map +1 -1
- package/dist/cjs/hooks/use-move-columns-rows.js +21 -15
- 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-move.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-move.js +14 -6
- 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-resize.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-resize.js +13 -6
- 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 +177 -55
- 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 +38 -18
- package/dist/cjs/hooks/use-touch.d.ts.map +1 -1
- package/dist/cjs/hooks/use-touch.js +16 -8
- 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 +346 -26
- 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 +207 -47
- 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/resizer/index.d.ts.map +1 -1
- package/dist/esm/components/resizer/index.js +8 -4
- 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-search/index.d.ts.map +1 -1
- package/dist/esm/components/sheet-search/index.js +5 -2
- 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-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +6 -4
- 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-header-actions.d.ts.map +1 -1
- package/dist/esm/hooks/use-header-actions.js +11 -4
- 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-move-columns-rows.d.ts.map +1 -1
- package/dist/esm/hooks/use-move-columns-rows.js +12 -6
- 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-move.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-move.js +11 -4
- 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-resize.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-resize.js +11 -5
- 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 +172 -54
- 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 +36 -19
- package/dist/esm/hooks/use-touch.d.ts.map +1 -1
- package/dist/esm/hooks/use-touch.js +15 -7
- 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 +8 -6
- 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,26 +1,46 @@
|
|
|
1
1
|
import type { CellInterface } from "@rowsncolumns/grid";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import type { DraggableBounds } from "react-draggable";
|
|
4
|
-
type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "onResize" | "children"> & {
|
|
4
|
+
type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "onResize" | "children" | "onCopy" | "onCut" | "onPaste" | "onDoubleClick"> & {
|
|
5
5
|
id: string | number;
|
|
6
6
|
height: number;
|
|
7
7
|
width: number;
|
|
8
8
|
offsetXPixels: number;
|
|
9
9
|
offsetYPixels: number;
|
|
10
|
+
/**
|
|
11
|
+
* Second anchor of a "Move and size with cells" object: the cell its
|
|
12
|
+
* bottom-right corner sits in plus the pixel offsets into it. When set the
|
|
13
|
+
* frame spans the two anchors, so a column / row resize between them
|
|
14
|
+
* stretches it; `width` / `height` are the fallback size.
|
|
15
|
+
*/
|
|
16
|
+
toCell?: CellInterface;
|
|
17
|
+
toOffsetXPixels?: number;
|
|
18
|
+
toOffsetYPixels?: number;
|
|
10
19
|
isSelected: boolean;
|
|
11
20
|
borderColor?: string;
|
|
12
21
|
lockAspectRatio?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Stacking rank among the sheet's floating objects (1 = back-most); the
|
|
24
|
+
* selected object is lifted above every unselected one.
|
|
25
|
+
*/
|
|
26
|
+
zIndex?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Rectangle (grid pixel space) the object must stay inside — the sheet
|
|
29
|
+
* body. Drags, nudges and resizes are clamped so no edge leaves it.
|
|
30
|
+
*/
|
|
13
31
|
bounds?: DraggableBounds;
|
|
14
32
|
scale?: number;
|
|
15
33
|
resizable?: boolean;
|
|
16
34
|
draggable?: boolean;
|
|
17
35
|
rotatable?: boolean;
|
|
18
36
|
/**
|
|
19
|
-
* Callback when user moves an embed
|
|
37
|
+
* Callback when user moves an embed. `width` / `height` are the frame's
|
|
38
|
+
* on-screen size (grid pixel space), so the host can re-anchor its
|
|
39
|
+
* bottom-right corner too.
|
|
20
40
|
* @param top
|
|
21
41
|
* @param left
|
|
22
42
|
*/
|
|
23
|
-
onMove?(id: string | number, x: number, y: number): void;
|
|
43
|
+
onMove?(id: string | number, x: number, y: number, width: number, height: number): void;
|
|
24
44
|
/**
|
|
25
45
|
* Callback when user resizes
|
|
26
46
|
* @param width
|
|
@@ -32,12 +52,49 @@ type EmbedDraggableProps = Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "on
|
|
|
32
52
|
* @param id
|
|
33
53
|
*/
|
|
34
54
|
onDelete?(id: string | number): void;
|
|
55
|
+
/**
|
|
56
|
+
* Ctrl/Cmd + D while the embed has focus
|
|
57
|
+
* @param id
|
|
58
|
+
*/
|
|
59
|
+
onDuplicate?(id: string | number): void;
|
|
60
|
+
/**
|
|
61
|
+
* Clipboard events while the embed has focus (the grid's cell editor
|
|
62
|
+
* never sees them — the focused embed is their target)
|
|
63
|
+
*/
|
|
64
|
+
onCopy?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
|
|
65
|
+
onCut?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
|
|
66
|
+
onPaste?(id: string | number, e: React.ClipboardEvent<HTMLDivElement>): void;
|
|
67
|
+
/**
|
|
68
|
+
* Escape: drop the selection and hand focus back to the grid
|
|
69
|
+
* @param id
|
|
70
|
+
*/
|
|
71
|
+
onDeselect?(id: string | number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Double-click on the object (Excel opens the format pane; the chart
|
|
74
|
+
* editor here)
|
|
75
|
+
* @param id
|
|
76
|
+
*/
|
|
77
|
+
onDoubleClick?(id: string | number): void;
|
|
78
|
+
/**
|
|
79
|
+
* Snap a point (grid pixel space) to the nearest cell corner. Alt-drag / Alt-resize
|
|
80
|
+
* snap through this; without it the modifier is inert.
|
|
81
|
+
*/
|
|
82
|
+
snapToGrid?(x: number, y: number): {
|
|
83
|
+
x: number;
|
|
84
|
+
y: number;
|
|
85
|
+
} | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Right-click, Shift+F10 or the ContextMenu key on the object. Receives
|
|
88
|
+
* the viewport point the menu should open at and the object's element, so
|
|
89
|
+
* the host can return focus to it once the menu closes.
|
|
90
|
+
*/
|
|
91
|
+
onRequestContextMenu?(id: string | number, clientX: number, clientY: number, element: HTMLDivElement): void;
|
|
35
92
|
/**
|
|
36
93
|
* Anchor cell
|
|
37
94
|
*/
|
|
38
95
|
anchorCell: CellInterface;
|
|
39
96
|
children: (width: number, height: number) => React.ReactNode;
|
|
40
97
|
};
|
|
41
|
-
export declare const EmbedDraggable: ({ id, scale, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, resizable, draggable, children, onMove, onResize, onDelete, onMouseMove, onPointerDown, bounds, anchorCell, }: EmbedDraggableProps) => React.JSX.Element;
|
|
98
|
+
export declare const EmbedDraggable: ({ id, scale, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, zIndex, resizable, draggable, children, onMove, onResize, onDelete, onDuplicate, onCopy, onCut, onPaste, onDeselect, onDoubleClick, snapToGrid, onRequestContextMenu, onMouseMove, onPointerDown, bounds, anchorCell, toCell, toOffsetXPixels, toOffsetYPixels, }: EmbedDraggableProps) => React.JSX.Element;
|
|
42
99
|
export {};
|
|
43
100
|
//# sourceMappingURL=embed-draggable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"embed-draggable.d.ts","sourceRoot":"","sources":["../../../../components/embeds/embed-draggable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,mBAAmB,GAAG,IAAI,CAC7B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAClC,IAAI,GACJ,UAAU,GACV,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,eAAe,CAClB,GAAG;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,CACL,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;;OAIG;IACH,QAAQ,CAAC,CACP,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IACR;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC5E,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC3E,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC7E;;;OAGG;IACH,UAAU,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE;;;;OAIG;IACH,oBAAoB,CAAC,CACnB,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,IAAI,CAAC;IACR;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D,CAAC;AA4DF,eAAO,MAAM,cAAc,GAAI,uWAgC5B,mBAAmB,sBA8VrB,CAAC"}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import { useGridContext } from "@rowsncolumns/grid";
|
|
1
|
+
import { getOwnerDocument, useGridContext } from "@rowsncolumns/grid";
|
|
2
2
|
import { cn } from "@rowsncolumns/ui";
|
|
3
3
|
import React, { useCallback, useRef, useState } from "react";
|
|
4
|
-
import
|
|
4
|
+
import { DraggableCore } from "react-draggable";
|
|
5
5
|
import { Resizable } from "react-resizable";
|
|
6
6
|
import { useIsomorphicLayoutEffect } from "../../hooks/use-isomorphic-layout-effect";
|
|
7
|
+
/** Lifts the selected object over every unselected one (ranks count from 1 per object). */
|
|
8
|
+
const SELECTED_Z_INDEX_LIFT = 100_000;
|
|
9
|
+
const ARROW_KEY_DELTAS = {
|
|
10
|
+
ArrowLeft: [-1, 0],
|
|
11
|
+
ArrowRight: [1, 0],
|
|
12
|
+
ArrowUp: [0, -1],
|
|
13
|
+
ArrowDown: [0, 1],
|
|
14
|
+
};
|
|
15
|
+
/** Excel nudges a selected object 1px per arrow press; Shift makes it a coarse step. */
|
|
16
|
+
const NUDGE_STEP = 1;
|
|
17
|
+
const NUDGE_STEP_SHIFT = 10;
|
|
18
|
+
/** Corner handles are two letters ("ne"); edge handles one ("n"). */
|
|
19
|
+
const isCornerHandle = (handle) => handle.length === 2;
|
|
20
|
+
/** Top-left corner that keeps a `width` × `height` object inside `bounds`; the top-left edges win when it does not fit. */
|
|
21
|
+
const clampToBounds = (x, y, width, height, bounds) => ({
|
|
22
|
+
x: Math.max(bounds?.left ?? -Infinity, Math.min((bounds?.right ?? Infinity) - width, x)),
|
|
23
|
+
y: Math.max(bounds?.top ?? -Infinity, Math.min((bounds?.bottom ?? Infinity) - height, y)),
|
|
24
|
+
});
|
|
25
|
+
/** Clamp one edge of a resize into `[min, max]`. */
|
|
26
|
+
const clampEdge = (value, min, max) => Math.min(max ?? Infinity, Math.max(min ?? -Infinity, value));
|
|
7
27
|
const resizeHandles = [
|
|
8
28
|
"se",
|
|
9
29
|
"n",
|
|
@@ -14,11 +34,18 @@ const resizeHandles = [
|
|
|
14
34
|
"nw",
|
|
15
35
|
"sw",
|
|
16
36
|
];
|
|
17
|
-
export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, resizable = true, draggable = true, children, onMove, onResize, onDelete, onMouseMove, onPointerDown, bounds, anchorCell, }) => {
|
|
37
|
+
export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, offsetYPixels, isSelected, borderColor, lockAspectRatio, zIndex, resizable = true, draggable = true, children, onMove, onResize, onDelete, onDuplicate, onCopy, onCut, onPaste, onDeselect, onDoubleClick, snapToGrid, onRequestContextMenu, onMouseMove, onPointerDown, bounds, anchorCell, toCell, toOffsetXPixels = 0, toOffsetYPixels = 0, }) => {
|
|
18
38
|
const { getCellOffsetFromCoords } = useGridContext();
|
|
19
39
|
const position = getCellOffsetFromCoords?.(anchorCell);
|
|
20
40
|
const x = (position?.x ?? 0) + offsetXPixels;
|
|
21
41
|
const y = (position?.y ?? 0) + offsetYPixels;
|
|
42
|
+
// Two anchors: the frame is whatever lies between them (a collapsed span
|
|
43
|
+
// after a delete draws nothing rather than a negative box)
|
|
44
|
+
const toPosition = toCell ? getCellOffsetFromCoords?.(toCell) : undefined;
|
|
45
|
+
if (toPosition) {
|
|
46
|
+
width = Math.max(0, toPosition.x + toOffsetXPixels - x);
|
|
47
|
+
height = Math.max(0, toPosition.y + toOffsetYPixels - y);
|
|
48
|
+
}
|
|
22
49
|
const [dimensions, setDimensions] = useState(() => ({
|
|
23
50
|
internalWidth: width,
|
|
24
51
|
internalHeight: height,
|
|
@@ -28,58 +55,153 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
|
|
|
28
55
|
const { internalWidth, internalHeight, internalX, internalY } = dimensions;
|
|
29
56
|
const incomingDimensionRef = useRef(undefined);
|
|
30
57
|
const nodeRef = useRef(null);
|
|
58
|
+
// Geometry currently on screen — what the end-of-gesture callbacks report, independent of
|
|
59
|
+
// whether the last `setDimensions` has rendered yet.
|
|
60
|
+
const appliedRef = useRef(dimensions);
|
|
61
|
+
// Where the pointer would have put the object with no snapping. The displayed geometry is
|
|
62
|
+
// derived from it on every event, so a snap never feeds back into the next pointer delta.
|
|
63
|
+
const gestureRef = useRef(dimensions);
|
|
64
|
+
// Shift on a corner handle keeps the aspect ratio for the rest of the gesture
|
|
65
|
+
const [shiftLocksAspectRatio, setShiftLocksAspectRatio] = useState(false);
|
|
66
|
+
const commit = useCallback((next) => {
|
|
67
|
+
appliedRef.current = next;
|
|
68
|
+
setDimensions(next);
|
|
69
|
+
}, []);
|
|
31
70
|
// Focus if selected index changes
|
|
32
71
|
useIsomorphicLayoutEffect(() => {
|
|
33
|
-
if (isSelected &&
|
|
72
|
+
if (isSelected &&
|
|
73
|
+
getOwnerDocument(nodeRef.current)?.activeElement !== nodeRef.current) {
|
|
34
74
|
nodeRef.current?.focus({ preventScroll: true });
|
|
35
75
|
}
|
|
36
76
|
}, [isSelected]);
|
|
37
|
-
//
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
77
|
+
// Starts moving
|
|
78
|
+
const handleMoveStart = useCallback((e) => {
|
|
79
|
+
gestureRef.current = { ...appliedRef.current };
|
|
80
|
+
if (e.altKey) {
|
|
81
|
+
// Alt+mousedown must not start a native selection / focus change
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
}
|
|
44
84
|
}, []);
|
|
85
|
+
// Handle move. Update internal state; Alt snaps the top-left corner to the cell grid
|
|
86
|
+
const handleMove = useCallback((e, data) => {
|
|
87
|
+
const raw = gestureRef.current;
|
|
88
|
+
raw.internalX += data.deltaX;
|
|
89
|
+
raw.internalY += data.deltaY;
|
|
90
|
+
const { internalWidth, internalHeight } = appliedRef.current;
|
|
91
|
+
let next = clampToBounds(raw.internalX, raw.internalY, internalWidth, internalHeight, bounds);
|
|
92
|
+
if (e.altKey && snapToGrid) {
|
|
93
|
+
const snapped = snapToGrid(next.x, next.y);
|
|
94
|
+
if (snapped) {
|
|
95
|
+
next = clampToBounds(snapped.x, snapped.y, internalWidth, internalHeight, bounds);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
commit({ ...appliedRef.current, internalX: next.x, internalY: next.y });
|
|
99
|
+
}, [bounds, snapToGrid, commit]);
|
|
45
100
|
// Ends moving
|
|
46
|
-
const handleMoveEnd = useCallback((
|
|
47
|
-
|
|
48
|
-
|
|
101
|
+
const handleMoveEnd = useCallback(() => {
|
|
102
|
+
const { internalX, internalY, internalWidth, internalHeight } = appliedRef.current;
|
|
103
|
+
if (incomingDimensionRef.current?.x === internalX &&
|
|
104
|
+
incomingDimensionRef.current?.y === internalY) {
|
|
49
105
|
return;
|
|
50
106
|
}
|
|
51
|
-
onMove?.(id,
|
|
107
|
+
onMove?.(id, internalX, internalY, internalWidth, internalHeight);
|
|
52
108
|
}, [onMove, id]);
|
|
53
|
-
//
|
|
109
|
+
// Arrow keys nudge the object by whole pixels, clamped like a drag is
|
|
110
|
+
const handleNudge = useCallback((dx, dy) => {
|
|
111
|
+
const { x: nextX, y: nextY } = clampToBounds(internalX + dx, internalY + dy, internalWidth, internalHeight, bounds);
|
|
112
|
+
if (nextX === internalX && nextY === internalY) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
commit({ ...appliedRef.current, internalX: nextX, internalY: nextY });
|
|
116
|
+
onMove?.(id, nextX, nextY, internalWidth, internalHeight);
|
|
117
|
+
}, [
|
|
118
|
+
bounds,
|
|
119
|
+
internalX,
|
|
120
|
+
internalY,
|
|
121
|
+
internalWidth,
|
|
122
|
+
internalHeight,
|
|
123
|
+
onMove,
|
|
124
|
+
id,
|
|
125
|
+
commit,
|
|
126
|
+
]);
|
|
127
|
+
// Starts resizing
|
|
128
|
+
const handleResizeStart = useCallback((e, { handle }) => {
|
|
129
|
+
gestureRef.current = { ...appliedRef.current };
|
|
130
|
+
setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(e.shiftKey));
|
|
131
|
+
}, []);
|
|
132
|
+
// Resizing: Update internal state; Alt snaps the dragged edges to the cell grid
|
|
54
133
|
const handleResize = useCallback((e, { size, handle }) => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
134
|
+
const { altKey, shiftKey } = e;
|
|
135
|
+
setShiftLocksAspectRatio(isCornerHandle(handle) && Boolean(shiftKey));
|
|
136
|
+
// `size` is the rendered size (`dimensions`) plus this event's pointer delta
|
|
137
|
+
const deltaHeight = size.height - dimensions.internalHeight;
|
|
138
|
+
const deltaWidth = size.width - dimensions.internalWidth;
|
|
139
|
+
const raw = gestureRef.current;
|
|
140
|
+
const movesTop = handle[0] === "n";
|
|
141
|
+
const movesLeft = handle[handle.length - 1] === "w";
|
|
142
|
+
raw.internalWidth += deltaWidth;
|
|
143
|
+
raw.internalHeight += deltaHeight;
|
|
144
|
+
if (movesTop) {
|
|
145
|
+
raw.internalY -= deltaHeight;
|
|
146
|
+
}
|
|
147
|
+
if (movesLeft) {
|
|
148
|
+
raw.internalX -= deltaWidth;
|
|
149
|
+
}
|
|
150
|
+
const movesRight = handle[handle.length - 1] === "e";
|
|
151
|
+
const movesBottom = handle[0] === "s";
|
|
152
|
+
// The dragged edges stop at the sheet body; the opposite edges never move
|
|
153
|
+
const rawRight = raw.internalX + raw.internalWidth;
|
|
154
|
+
const rawBottom = raw.internalY + raw.internalHeight;
|
|
155
|
+
let left = movesLeft
|
|
156
|
+
? clampEdge(raw.internalX, bounds?.left, undefined)
|
|
157
|
+
: raw.internalX;
|
|
158
|
+
let top = movesTop
|
|
159
|
+
? clampEdge(raw.internalY, bounds?.top, undefined)
|
|
160
|
+
: raw.internalY;
|
|
161
|
+
let right = movesRight
|
|
162
|
+
? clampEdge(rawRight, undefined, bounds?.right)
|
|
163
|
+
: rawRight;
|
|
164
|
+
let bottom = movesBottom
|
|
165
|
+
? clampEdge(rawBottom, undefined, bounds?.bottom)
|
|
166
|
+
: rawBottom;
|
|
167
|
+
if (altKey && snapToGrid) {
|
|
168
|
+
const snappedLeft = movesLeft ? snapToGrid(left, top)?.x : undefined;
|
|
169
|
+
const snappedRight = movesRight ? snapToGrid(right, top)?.x : undefined;
|
|
170
|
+
const snappedTop = movesTop ? snapToGrid(left, top)?.y : undefined;
|
|
171
|
+
const snappedBottom = movesBottom
|
|
172
|
+
? snapToGrid(left, bottom)?.y
|
|
173
|
+
: undefined;
|
|
174
|
+
// A snap that would collapse the object keeps the unsnapped edge
|
|
175
|
+
if (snappedLeft !== undefined && snappedLeft < right) {
|
|
176
|
+
left = snappedLeft;
|
|
177
|
+
}
|
|
178
|
+
if (snappedRight !== undefined && snappedRight > left) {
|
|
179
|
+
right = snappedRight;
|
|
180
|
+
}
|
|
181
|
+
if (snappedTop !== undefined && snappedTop < bottom) {
|
|
182
|
+
top = snappedTop;
|
|
62
183
|
}
|
|
63
|
-
if (
|
|
64
|
-
|
|
184
|
+
if (snappedBottom !== undefined && snappedBottom > top) {
|
|
185
|
+
bottom = snappedBottom;
|
|
65
186
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
187
|
+
}
|
|
188
|
+
commit({
|
|
189
|
+
internalX: left,
|
|
190
|
+
internalY: top,
|
|
191
|
+
internalWidth: right - left,
|
|
192
|
+
internalHeight: bottom - top,
|
|
73
193
|
});
|
|
74
|
-
}, []);
|
|
194
|
+
}, [dimensions, snapToGrid, commit]);
|
|
75
195
|
// Resize ends
|
|
76
|
-
const handleResizeEnd = useCallback((
|
|
77
|
-
|
|
78
|
-
|
|
196
|
+
const handleResizeEnd = useCallback(() => {
|
|
197
|
+
setShiftLocksAspectRatio(false);
|
|
198
|
+
const { internalX, internalY, internalWidth, internalHeight } = appliedRef.current;
|
|
199
|
+
if (incomingDimensionRef.current?.width === internalWidth &&
|
|
200
|
+
incomingDimensionRef.current?.height === internalHeight) {
|
|
79
201
|
return;
|
|
80
202
|
}
|
|
81
|
-
onResize?.(id,
|
|
82
|
-
}, [onResize, id, scale
|
|
203
|
+
onResize?.(id, internalX, internalY, internalWidth / scale, internalHeight / scale);
|
|
204
|
+
}, [onResize, id, scale]);
|
|
83
205
|
// When state is saved, update internal state
|
|
84
206
|
useIsomorphicLayoutEffect(() => {
|
|
85
207
|
incomingDimensionRef.current = {
|
|
@@ -88,28 +210,66 @@ export const EmbedDraggable = ({ id, scale = 1, height, width, offsetXPixels, of
|
|
|
88
210
|
width,
|
|
89
211
|
height,
|
|
90
212
|
};
|
|
91
|
-
|
|
213
|
+
commit({
|
|
92
214
|
internalX: x,
|
|
93
215
|
internalY: y,
|
|
94
216
|
internalHeight: height,
|
|
95
217
|
internalWidth: width,
|
|
96
218
|
});
|
|
97
|
-
}, [width, height, x, y]);
|
|
98
|
-
return (React.createElement(
|
|
99
|
-
|
|
100
|
-
y: internalY,
|
|
101
|
-
}, bounds: bounds, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore, .plot-container .draglayer", scale: 1, disabled: !draggable },
|
|
102
|
-
React.createElement(Resizable, { width: internalWidth, height: internalHeight, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
|
|
219
|
+
}, [width, height, x, y, commit]);
|
|
220
|
+
return (React.createElement(DraggableCore, { nodeRef: nodeRef, onStart: handleMoveStart, onDrag: handleMove, onStop: handleMoveEnd, cancel: ".react-resizable-handle, .rnc-draggable-ignore", scale: 1, disabled: !draggable },
|
|
221
|
+
React.createElement(Resizable, { width: internalWidth, height: internalHeight, onResizeStart: handleResizeStart, onResize: handleResize, onResizeStop: handleResizeEnd, lockAspectRatio: lockAspectRatio || shiftLocksAspectRatio, resizeHandles: resizable ? resizeHandles : [] },
|
|
103
222
|
React.createElement("div", { className: cn("text-rnc-foreground text-sm pointer-events-auto border border-solid border-transparent flex select-none box-content absolute rnc-embed-component outline-none", isSelected ? "[&_.react-resizable-handle]:bg-[#1a73e8]" : undefined, isSelected ? "rnc-embed-active" : undefined), style: {
|
|
104
223
|
width: internalWidth,
|
|
105
224
|
height: internalHeight,
|
|
225
|
+
transform: `translate(${internalX}px, ${internalY}px)`,
|
|
106
226
|
borderColor,
|
|
107
|
-
zIndex: isSelected
|
|
227
|
+
zIndex: isSelected
|
|
228
|
+
? (zIndex ?? 0) + SELECTED_Z_INDEX_LIFT
|
|
229
|
+
: zIndex,
|
|
108
230
|
}, tabIndex: 0, onKeyDown: (e) => {
|
|
109
231
|
if (e.key === "Backspace" || e.key === "Delete") {
|
|
110
232
|
onDelete?.(id);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if ((e.metaKey || e.ctrlKey) &&
|
|
236
|
+
!e.altKey &&
|
|
237
|
+
!e.shiftKey &&
|
|
238
|
+
e.key.toLowerCase() === "d" &&
|
|
239
|
+
onDuplicate) {
|
|
240
|
+
e.preventDefault();
|
|
241
|
+
onDuplicate(id);
|
|
242
|
+
return;
|
|
111
243
|
}
|
|
112
|
-
|
|
244
|
+
if (e.key === "Escape") {
|
|
245
|
+
e.preventDefault();
|
|
246
|
+
onDeselect?.(id);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (e.key === "Alt") {
|
|
250
|
+
// Alt is a snap modifier here; keep it from opening the browser menu bar
|
|
251
|
+
e.preventDefault();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const delta = ARROW_KEY_DELTAS[e.key];
|
|
255
|
+
if (delta && draggable) {
|
|
256
|
+
// The grid must not scroll while the object is being nudged
|
|
257
|
+
e.preventDefault();
|
|
258
|
+
const step = e.shiftKey ? NUDGE_STEP_SHIFT : NUDGE_STEP;
|
|
259
|
+
handleNudge(delta[0] * step, delta[1] * step);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (e.key === "ContextMenu" || (e.key === "F10" && e.shiftKey)) {
|
|
263
|
+
e.preventDefault();
|
|
264
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
265
|
+
onRequestContextMenu?.(id, rect.left, rect.top, e.currentTarget);
|
|
266
|
+
}
|
|
267
|
+
}, onCopy: onCopy ? (e) => onCopy(id, e) : undefined, onCut: onCut ? (e) => onCut(id, e) : undefined, onPaste: onPaste ? (e) => onPaste(id, e) : undefined, ref: nodeRef, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick ? () => onDoubleClick(id) : undefined, onContextMenu: (e) => {
|
|
113
268
|
e.stopPropagation();
|
|
269
|
+
if (!onRequestContextMenu) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
e.preventDefault();
|
|
273
|
+
onRequestContextMenu(id, e.clientX, e.clientY, e.currentTarget);
|
|
114
274
|
} }, children(internalWidth, internalHeight)))));
|
|
115
275
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel groups a date column's AutoFilter checklist into a Year → Month → Day
|
|
3
|
+
* tree with tri-state parents. The checklist only knows each cell's DISPLAYED
|
|
4
|
+
* text, so a value is treated as a date when it parses as one AND looks like
|
|
5
|
+
* one — digits separated by `/ - .` or a month name — which keeps plain
|
|
6
|
+
* numbers ("2026") and text out. The tree is built only when every non-blank
|
|
7
|
+
* value in the column is such a date (a mixed column stays a flat list, as a
|
|
8
|
+
* text column would). Newest first at every level, matching Excel.
|
|
9
|
+
*/
|
|
10
|
+
export type DateTreeNode = {
|
|
11
|
+
/** Stable key: `y:2026`, `m:2026-09`, `d:2026-09-29`. */
|
|
12
|
+
key: string;
|
|
13
|
+
label: string;
|
|
14
|
+
/** Every checklist value (display text) under this node. */
|
|
15
|
+
values: string[];
|
|
16
|
+
children?: DateTreeNode[];
|
|
17
|
+
};
|
|
18
|
+
/** The calendar date a checklist value displays, or `undefined` when it is not a date. */
|
|
19
|
+
export declare const parseFilterDateValue: (value: string) => Date | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Year → Month → Day nodes for `values`, or `undefined` when the column is
|
|
22
|
+
* not a date column. `blankLabel` (the "(Blanks)" entry) is skipped; callers
|
|
23
|
+
* render it beside the tree.
|
|
24
|
+
*/
|
|
25
|
+
export declare const buildDateTree: (values: readonly string[], blankLabel: string) => DateTreeNode[] | undefined;
|
|
26
|
+
/** `true` all checked, `false` none, `"mixed"` some — the tri-state of a node or the whole list. */
|
|
27
|
+
export declare const triState: (values: readonly string[], isVisible: (value: string) => boolean) => boolean | "mixed";
|
|
28
|
+
//# sourceMappingURL=date-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-tree.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/date-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAqBF,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,IAAI,GAAG,SAS3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,MAAM,EAAE,EACzB,YAAY,MAAM,KACjB,YAAY,EAAE,GAAG,SAgDnB,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,QAAQ,GACnB,QAAQ,SAAS,MAAM,EAAE,EACzB,WAAW,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,KACpC,OAAO,GAAG,OAOZ,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel groups a date column's AutoFilter checklist into a Year → Month → Day
|
|
3
|
+
* tree with tri-state parents. The checklist only knows each cell's DISPLAYED
|
|
4
|
+
* text, so a value is treated as a date when it parses as one AND looks like
|
|
5
|
+
* one — digits separated by `/ - .` or a month name — which keeps plain
|
|
6
|
+
* numbers ("2026") and text out. The tree is built only when every non-blank
|
|
7
|
+
* value in the column is such a date (a mixed column stays a flat list, as a
|
|
8
|
+
* text column would). Newest first at every level, matching Excel.
|
|
9
|
+
*/
|
|
10
|
+
const MIN_YEAR = 1900;
|
|
11
|
+
const MAX_YEAR = 2199;
|
|
12
|
+
const DATE_SHAPE = /(\d[/.\-]\d)|([A-Za-z]{3,}.*\d)|(\d.*[A-Za-z]{3,})/;
|
|
13
|
+
const MONTH_NAMES = [
|
|
14
|
+
"January",
|
|
15
|
+
"February",
|
|
16
|
+
"March",
|
|
17
|
+
"April",
|
|
18
|
+
"May",
|
|
19
|
+
"June",
|
|
20
|
+
"July",
|
|
21
|
+
"August",
|
|
22
|
+
"September",
|
|
23
|
+
"October",
|
|
24
|
+
"November",
|
|
25
|
+
"December",
|
|
26
|
+
];
|
|
27
|
+
/** The calendar date a checklist value displays, or `undefined` when it is not a date. */
|
|
28
|
+
export const parseFilterDateValue = (value) => {
|
|
29
|
+
const trimmed = value.trim();
|
|
30
|
+
if (!trimmed || !DATE_SHAPE.test(trimmed))
|
|
31
|
+
return undefined;
|
|
32
|
+
const parsed = new Date(trimmed);
|
|
33
|
+
const time = parsed.getTime();
|
|
34
|
+
if (Number.isNaN(time))
|
|
35
|
+
return undefined;
|
|
36
|
+
const year = parsed.getFullYear();
|
|
37
|
+
if (year < MIN_YEAR || year > MAX_YEAR)
|
|
38
|
+
return undefined;
|
|
39
|
+
return parsed;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Year → Month → Day nodes for `values`, or `undefined` when the column is
|
|
43
|
+
* not a date column. `blankLabel` (the "(Blanks)" entry) is skipped; callers
|
|
44
|
+
* render it beside the tree.
|
|
45
|
+
*/
|
|
46
|
+
export const buildDateTree = (values, blankLabel) => {
|
|
47
|
+
const dated = [];
|
|
48
|
+
for (const value of values) {
|
|
49
|
+
if (value === blankLabel)
|
|
50
|
+
continue;
|
|
51
|
+
const date = parseFilterDateValue(value);
|
|
52
|
+
if (!date)
|
|
53
|
+
return undefined;
|
|
54
|
+
dated.push({ value, date });
|
|
55
|
+
}
|
|
56
|
+
if (!dated.length)
|
|
57
|
+
return undefined;
|
|
58
|
+
const years = new Map();
|
|
59
|
+
for (const { value, date } of dated) {
|
|
60
|
+
const y = date.getFullYear();
|
|
61
|
+
const m = date.getMonth();
|
|
62
|
+
const d = date.getDate();
|
|
63
|
+
const months = years.get(y) ?? new Map();
|
|
64
|
+
years.set(y, months);
|
|
65
|
+
const days = months.get(m) ?? new Map();
|
|
66
|
+
months.set(m, days);
|
|
67
|
+
const bucket = days.get(d) ?? [];
|
|
68
|
+
days.set(d, bucket);
|
|
69
|
+
if (!bucket.includes(value))
|
|
70
|
+
bucket.push(value);
|
|
71
|
+
}
|
|
72
|
+
const desc = (a, b) => b - a;
|
|
73
|
+
return [...years.keys()].sort(desc).map((y) => {
|
|
74
|
+
const months = years.get(y);
|
|
75
|
+
const monthNodes = [...months.keys()].sort(desc).map((m) => {
|
|
76
|
+
const days = months.get(m);
|
|
77
|
+
const dayNodes = [...days.keys()].sort(desc).map((d) => ({
|
|
78
|
+
key: `d:${y}-${m + 1}-${d}`,
|
|
79
|
+
label: String(d),
|
|
80
|
+
values: days.get(d),
|
|
81
|
+
}));
|
|
82
|
+
return {
|
|
83
|
+
key: `m:${y}-${m + 1}`,
|
|
84
|
+
label: MONTH_NAMES[m],
|
|
85
|
+
values: dayNodes.flatMap((node) => node.values),
|
|
86
|
+
children: dayNodes,
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
key: `y:${y}`,
|
|
91
|
+
label: String(y),
|
|
92
|
+
values: monthNodes.flatMap((node) => node.values),
|
|
93
|
+
children: monthNodes,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
/** `true` all checked, `false` none, `"mixed"` some — the tri-state of a node or the whole list. */
|
|
98
|
+
export const triState = (values, isVisible) => {
|
|
99
|
+
let checked = 0;
|
|
100
|
+
for (const value of values) {
|
|
101
|
+
if (isVisible(value))
|
|
102
|
+
checked++;
|
|
103
|
+
}
|
|
104
|
+
if (checked === 0)
|
|
105
|
+
return values.length === 0 ? true : false;
|
|
106
|
+
return checked === values.length ? true : "mixed";
|
|
107
|
+
};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { ConditionType } from "../../types";
|
|
2
|
+
import type { ConditionType, FilterConditionJoin } from "../../types";
|
|
3
|
+
/** Excel's "Top 10…" AutoFilter: the four `NUMBER_TOP_*` / `NUMBER_BOTTOM_*` condition types. */
|
|
4
|
+
export declare const isTop10ConditionType: (type: ConditionType | undefined) => type is "NUMBER_TOP_N" | "NUMBER_BOTTOM_N" | "NUMBER_TOP_PERCENT" | "NUMBER_BOTTOM_PERCENT";
|
|
5
|
+
export declare const top10ConditionType: (direction: "top" | "bottom", unit: "items" | "percent") => ConditionType;
|
|
3
6
|
type FilterByConditionProps = {
|
|
4
7
|
conditionType?: ConditionType;
|
|
5
8
|
fromValue: string;
|
|
@@ -7,7 +10,16 @@ type FilterByConditionProps = {
|
|
|
7
10
|
onChangeFromValue(value: string): void;
|
|
8
11
|
onChangeToValue(value: string): void;
|
|
9
12
|
onChangeConditionType?(type: ConditionType | undefined): void;
|
|
13
|
+
/** Excel's Custom AutoFilter second clause and its And / Or join. */
|
|
14
|
+
condition2Type?: ConditionType;
|
|
15
|
+
condition2From: string;
|
|
16
|
+
condition2To: string;
|
|
17
|
+
conditionJoin: FilterConditionJoin;
|
|
18
|
+
onChangeCondition2Type(type: ConditionType | undefined): void;
|
|
19
|
+
onChangeCondition2From(value: string): void;
|
|
20
|
+
onChangeCondition2To(value: string): void;
|
|
21
|
+
onChangeConditionJoin(join: FilterConditionJoin): void;
|
|
10
22
|
};
|
|
11
|
-
export declare const FilterByCondition: ({ conditionType, fromValue, toValue, onChangeToValue, onChangeFromValue, onChangeConditionType, }: FilterByConditionProps) => React.JSX.Element;
|
|
23
|
+
export declare const FilterByCondition: ({ conditionType, fromValue, toValue, onChangeToValue, onChangeFromValue, onChangeConditionType, condition2Type, condition2From, condition2To, conditionJoin, onChangeCondition2Type, onChangeCondition2From, onChangeCondition2To, onChangeConditionJoin, }: FilterByConditionProps) => React.JSX.Element;
|
|
12
24
|
export {};
|
|
13
25
|
//# sourceMappingURL=filter-by-condition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-by-condition.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-condition.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter-by-condition.d.ts","sourceRoot":"","sources":["../../../../components/filter-box/filter-by-condition.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,iGAAiG;AACjG,eAAO,MAAM,oBAAoB,GAAI,MAAM,aAAa,GAAG,SAAS,gGAIlC,CAAC;AAEnC,eAAO,MAAM,kBAAkB,GAC7B,WAAW,KAAK,GAAG,QAAQ,EAC3B,MAAM,OAAO,GAAG,SAAS,KACxB,aAO4B,CAAC;AAchC,KAAK,sBAAsB,GAAG;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,qBAAqB,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9D,qEAAqE;IACrE,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9D,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxD,CAAC;AAsKF,eAAO,MAAM,iBAAiB,GAAI,6PAe/B,sBAAsB,sBAuFxB,CAAC"}
|