@odoo/o-spreadsheet 19.5.0-alpha.7 → 19.5.0-alpha.8

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.
Files changed (42) hide show
  1. package/dist/o_spreadsheet.cjs +27312 -26508
  2. package/dist/o_spreadsheet.css +47 -17
  3. package/dist/o_spreadsheet.esm.js +27312 -26508
  4. package/dist/o_spreadsheet.iife.js +27302 -26498
  5. package/dist/o_spreadsheet.min.iife.js +396 -396
  6. package/dist/o_spreadsheet.xml +120 -52
  7. package/dist/types/collaborative/ot/ot_helpers.d.ts +3 -1
  8. package/dist/types/components/clickable_cells_overlay/clickable_cells_overlay.d.ts +20 -0
  9. package/dist/types/components/dashboard/dashboard.d.ts +5 -12
  10. package/dist/types/components/error_tooltip/error_tooltip.d.ts +2 -0
  11. package/dist/types/components/figures/figure/figure.d.ts +3 -6
  12. package/dist/types/components/figures/figure_carousel/figure_carousel.d.ts +9 -2
  13. package/dist/types/components/figures/figure_chart/figure_chart.d.ts +1 -2
  14. package/dist/types/components/figures/figure_image/figure_image.d.ts +1 -2
  15. package/dist/types/components/filters/filter_menu/filter_menu.d.ts +1 -0
  16. package/dist/types/components/grid/grid.d.ts +2 -0
  17. package/dist/types/components/grid_overlay/grid_overlay.d.ts +6 -5
  18. package/dist/types/components/helpers/wheel_hook.d.ts +1 -1
  19. package/dist/types/components/link/link_display/link_display.d.ts +1 -0
  20. package/dist/types/components/link/link_editor/link_editor.d.ts +1 -0
  21. package/dist/types/components/scrollbar/scrollbar_vertical.d.ts +2 -1
  22. package/dist/types/components/side_panel/carousel_panel/carousel_panel.d.ts +6 -1
  23. package/dist/types/components/standalone_viewport/standalone_viewport.d.ts +55 -0
  24. package/dist/types/components/standalone_viewport/standalone_viewport_store.d.ts +28 -0
  25. package/dist/types/components/tables/hovered_table_store.d.ts +3 -6
  26. package/dist/types/helpers/internal_viewport.d.ts +19 -10
  27. package/dist/types/helpers/misc.d.ts +1 -0
  28. package/dist/types/helpers/viewport_collection.d.ts +40 -9
  29. package/dist/types/helpers/zones.d.ts +1 -0
  30. package/dist/types/index.d.ts +4 -0
  31. package/dist/types/plugins/core/carousel.d.ts +8 -4
  32. package/dist/types/plugins/ui_feature/ui_sheet.d.ts +2 -1
  33. package/dist/types/plugins/ui_stateful/header_positions.d.ts +2 -1
  34. package/dist/types/store_engine/dependency_container.d.ts +5 -0
  35. package/dist/types/store_engine/store_hooks.d.ts +6 -0
  36. package/dist/types/stores/main_viewport_store.d.ts +11 -0
  37. package/dist/types/stores/viewports_store.d.ts +18 -3
  38. package/dist/types/types/commands.d.ts +3 -3
  39. package/dist/types/types/figure.d.ts +26 -3
  40. package/dist/types/types/getters.d.ts +22 -0
  41. package/dist/types/types/misc.d.ts +4 -0
  42. package/package.json +2 -2
@@ -0,0 +1,55 @@
1
+ import { Component } from "../../owl3_compatibility_layer";
2
+ import { RendererStore } from "../../stores/renderer_store";
3
+ import { ViewportsStore } from "../../stores/viewports_store";
4
+ import { HeaderIndex } from "../../types/misc";
5
+ import { Rect } from "../../types/rendering";
6
+ import { SpreadsheetChildEnv } from "../../types/spreadsheet_env";
7
+ import { Store } from "../../types/store_engine";
8
+ import { ClickableCellsOverlay } from "../clickable_cells_overlay/clickable_cells_overlay";
9
+ import { GridOverlay } from "../grid_overlay/grid_overlay";
10
+ import { GridPopover } from "../grid_popover/grid_popover";
11
+ import { CellPopoverStore } from "../popover/cell_popover_store";
12
+ import { VerticalScrollBar } from "../scrollbar/scrollbar_vertical";
13
+ interface ColResizer {
14
+ col: HeaderIndex;
15
+ style: string;
16
+ }
17
+ interface DnDResizeState {
18
+ col: HeaderIndex | undefined;
19
+ }
20
+ export declare class StandaloneViewport extends Component<SpreadsheetChildEnv> {
21
+ static template: string;
22
+ static components: {
23
+ VerticalScrollBar: typeof VerticalScrollBar;
24
+ GridOverlay: typeof GridOverlay;
25
+ ClickableCellsOverlay: typeof ClickableCellsOverlay;
26
+ GridPopover: typeof GridPopover;
27
+ };
28
+ protected props: import("@odoo/owl").PropsWithDefaults<{
29
+ range: import("../..").Range;
30
+ canResizeColumns: boolean;
31
+ zoomLevel: number;
32
+ onResizeColumns?: ((columnWeights: number[] | undefined) => void) | undefined;
33
+ columnWeights?: number[] | undefined;
34
+ }, "canResizeColumns">;
35
+ private canvasRef;
36
+ private containerRef;
37
+ private store;
38
+ dndState: DnDResizeState;
39
+ onMouseWheel: (ev: WheelEvent) => void;
40
+ rendererStore: Store<RendererStore>;
41
+ viewStore: Store<ViewportsStore>;
42
+ cellPopoverStore: Store<CellPopoverStore>;
43
+ setup(): void;
44
+ get containerWidth(): number;
45
+ get containerHeight(): number;
46
+ get hasVerticalScrollBar(): boolean | 0;
47
+ get scrollBarContainerStyle(): string;
48
+ onCellDoubleClicked(col: HeaderIndex, row: HeaderIndex, ev: MouseEvent): void;
49
+ get gridOverlayDimensions(): string;
50
+ get colResizers(): ColResizer[];
51
+ onResizerPointerDown(ev: MouseEvent, resizer: ColResizer): void;
52
+ onResizerDoubleClick(): void;
53
+ getGridRect(): Rect;
54
+ }
55
+ export {};
@@ -0,0 +1,28 @@
1
+ import { SpreadsheetStore } from "../../stores/spreadsheet_store";
2
+ import { Command } from "../../types/commands";
3
+ import { HeaderDimensions, HeaderIndex, UID } from "../../types/misc";
4
+ import { Range } from "../../types/range";
5
+ import { GridRenderingContext } from "../../types/rendering";
6
+ import { Get } from "../../types/store_engine";
7
+ export declare class StandaloneViewportStore extends SpreadsheetStore {
8
+ mutators: readonly ["setContainerSize", "setRange", "resizeColumn", "setCustomColWeights"];
9
+ cachedColDimensions: Record<HeaderIndex, HeaderDimensions> | undefined;
10
+ private containerWidth;
11
+ private containerHeight;
12
+ private range;
13
+ private customColWeights;
14
+ private viewStore;
15
+ constructor(get: Get, range: Range, customColWeights?: number[]);
16
+ handle(cmd: Command): void;
17
+ setContainerSize(width: number, height: number): "noStateChange" | undefined;
18
+ setRange(range: Range): "noStateChange" | undefined;
19
+ setCustomColWeights(weights: number[] | undefined): "noStateChange" | undefined;
20
+ resizeColumn(resizedCol: HeaderIndex, weightDelta: number, weightsAtStartOfDrag: number[]): void;
21
+ private changeColumnWeights;
22
+ get renderingContext(): Omit<GridRenderingContext, "ctx" | "thinLineWidth">;
23
+ get headerDimensionsCallback(): (sheetId: UID, dimension: "COL" | "ROW", index: number) => HeaderDimensions;
24
+ getHeaderDimensions(sheetId: UID, dimension: "COL" | "ROW", index: number): HeaderDimensions;
25
+ get columnWeights(): number[];
26
+ private computeColDimensions;
27
+ private normalizeWeights;
28
+ }
@@ -1,14 +1,11 @@
1
1
  import { PositionMap } from "../../helpers/cells/position_map";
2
2
  import { SpreadsheetStore } from "../../stores/spreadsheet_store";
3
- import { Command } from "../../types/commands";
4
- import { Color, Position } from "../../types/misc";
3
+ import { CellPosition, Color } from "../../types/misc";
5
4
  export declare class HoveredTableStore extends SpreadsheetStore {
6
5
  mutators: readonly ["clear", "hover"];
7
- col: number | undefined;
8
- row: number | undefined;
6
+ position: CellPosition | undefined;
9
7
  overlayColors: PositionMap<Color>;
10
- handle(cmd: Command): void;
11
- hover(position: Partial<Position>): "noStateChange" | undefined;
8
+ hover(position: CellPosition | undefined): "noStateChange" | undefined;
12
9
  clear(): void;
13
10
  private computeOverlay;
14
11
  }
@@ -1,10 +1,17 @@
1
- import { RenderingGetters } from "../types/getters";
1
+ import { ViewportsGetters } from "../types/getters";
2
2
  import { Dimension, HeaderIndex, Pixel, Position, UID, Zone } from "../types/misc";
3
3
  import { DOMCoordinates, DOMDimension, Rect } from "../types/rendering";
4
+ interface InternalViewportArgs {
5
+ getters: ViewportsGetters;
6
+ sheetId: UID;
7
+ boundaries: Zone;
8
+ sizeInGrid: DOMDimension;
9
+ canScrollVertically: boolean;
10
+ canScrollHorizontally: boolean;
11
+ offsets: DOMCoordinates;
12
+ getFooterSize: () => number;
13
+ }
4
14
  export declare class InternalViewport {
5
- private getters;
6
- private sheetId;
7
- private boundaries;
8
15
  top: HeaderIndex;
9
16
  bottom: HeaderIndex;
10
17
  left: HeaderIndex;
@@ -15,12 +22,13 @@ export declare class InternalViewport {
15
22
  canScrollHorizontally: boolean;
16
23
  viewportWidth: Pixel;
17
24
  viewportHeight: Pixel;
18
- offsetCorrectionX: Pixel;
19
- offsetCorrectionY: Pixel;
20
- constructor(getters: RenderingGetters, sheetId: UID, boundaries: Zone, sizeInGrid: DOMDimension, options: {
21
- canScrollVertically: boolean;
22
- canScrollHorizontally: boolean;
23
- }, offsets: DOMCoordinates);
25
+ boundaryLeftX: Pixel;
26
+ boundaryTopY: Pixel;
27
+ private getters;
28
+ private sheetId;
29
+ private boundaries;
30
+ private getFooterSize;
31
+ constructor(args: InternalViewportArgs);
24
32
  /** Returns the maximum size (in Pixels) of the viewport relative to its allocated client size
25
33
  * When the viewport grid size is smaller than its client width (resp. height), it will return
26
34
  * the client width (resp. height).
@@ -85,3 +93,4 @@ export declare class InternalViewport {
85
93
  * */
86
94
  private get snapCorrection();
87
95
  }
96
+ export {};
@@ -233,4 +233,5 @@ export declare function defaultDict<T>(def: T): {
233
233
  get: (key: string) => T;
234
234
  set: (key: string, value: T) => void;
235
235
  };
236
+ export declare function sumArray(array: number[]): number;
236
237
  export declare function repeat<T>(array: T[], times: number): T[];
@@ -1,14 +1,28 @@
1
1
  import { AnchorOffset, Figure, FigureUI } from "../types/figure";
2
- import { RenderingGetters } from "../types/getters";
2
+ import { ViewportsGetters } from "../types/getters";
3
3
  import { CellPosition, Dimension, HeaderDimensions, HeaderIndex, PaneDivision, Pixel, PixelPosition, Position, SheetViewDimensions, UID, Zone } from "../types/misc";
4
4
  import { DOMCoordinates, DOMDimension, EdgeScrollInfo, Rect, SheetDOMScrollInfo, Viewport } from "../types/rendering";
5
5
  import { InternalViewport } from "./internal_viewport";
6
6
  type SheetViewports = {
7
- topLeft: InternalViewport | undefined;
8
- bottomLeft: InternalViewport | undefined;
9
- topRight: InternalViewport | undefined;
7
+ topLeft?: InternalViewport;
8
+ bottomLeft?: InternalViewport;
9
+ topRight?: InternalViewport;
10
10
  bottomRight: InternalViewport;
11
11
  };
12
+ interface PositionedViewport {
13
+ viewport: InternalViewport;
14
+ viewportX: Pixel;
15
+ viewportY: Pixel;
16
+ }
17
+ interface ViewportCollectionArgs {
18
+ getters: ViewportsGetters;
19
+ paneDivision: Record<UID, PaneDivision>;
20
+ sheetViewWidth: Pixel;
21
+ sheetViewHeight: Pixel;
22
+ zoomLevel: number;
23
+ getFooterSize: () => number;
24
+ zoneToDisplay?: Zone;
25
+ }
12
26
  /**
13
27
  * EdgeScrollCases Schema
14
28
  *
@@ -45,15 +59,18 @@ type SheetViewports = {
45
59
  * ↓ ↓
46
60
  */
47
61
  export declare class ViewportCollection {
62
+ getters: ViewportsGetters;
63
+ viewports: Record<UID, SheetViewports | undefined>;
64
+ private gridOffsetX;
65
+ private gridOffsetY;
48
66
  private paneDivision;
49
67
  private sheetViewWidth;
50
68
  private sheetViewHeight;
51
69
  private zoomLevel;
52
- getters: RenderingGetters;
53
- viewports: Record<UID, SheetViewports | undefined>;
54
- private gridOffsetX;
55
- private gridOffsetY;
56
- constructor(getters: RenderingGetters, paneDivision: Record<UID, PaneDivision>, sheetViewWidth?: Pixel, sheetViewHeight?: Pixel, zoomLevel?: number);
70
+ private getFooterSize;
71
+ private zoneToDisplay?;
72
+ constructor(args: ViewportCollectionArgs);
73
+ changeViewportArgs(args: Partial<ViewportCollectionArgs>): void;
57
74
  /**
58
75
  * Return the index of a column given an offset x, based on the viewport left
59
76
  * visible cell.
@@ -141,6 +158,11 @@ export declare class ViewportCollection {
141
158
  }[];
142
159
  getViewportZoomLevel(): number;
143
160
  ensureMainViewportExist(sheetId: UID): void;
161
+ getPanesDimensions(sheetId: UID): {
162
+ paneWidth: number;
163
+ paneHeight: number;
164
+ };
165
+ getPositionedViewports(sheetId: UID): PositionedViewport[];
144
166
  getSubViewports(sheetId: UID): InternalViewport[];
145
167
  checkPositiveDimension(dims: SheetViewDimensions): boolean;
146
168
  checkValuesAreDifferent(dims: SheetViewDimensions): boolean;
@@ -164,6 +186,15 @@ export declare class ViewportCollection {
164
186
  y: number | Pixel;
165
187
  };
166
188
  resetViewports(sheetId: UID): void;
189
+ /**
190
+ * Depending on how `this.zoneToDisplay` intersects the viewports, we may need to reorganize the viewports to ensure that
191
+ * `viewports.bottomRight` is always defined.
192
+ *
193
+ * For example if `this.zoneToDisplay` is only intersecting the bottom-left viewport, we need to treat the bottom-left
194
+ * viewport as the bottom-right viewport.
195
+ */
196
+ private reorganizeViewportZones;
197
+ private getViewportZones;
167
198
  /**
168
199
  * Adjust the viewport such that the anchor position is visible
169
200
  */
@@ -204,3 +204,4 @@ export declare function mergeContiguousZones(zones: Zone[]): Zone[];
204
204
  * ]
205
205
  */
206
206
  export declare function splitZone(z1: Zone, z2: Zone): Zone[];
207
+ export declare function haveSameNumberOfCols(z1: Zone | UnboundedZone, z2: Zone | UnboundedZone): boolean;
@@ -233,9 +233,11 @@ import { AutofillStore } from "./components/autofill/autofill_store";
233
233
  import { TableAutofillStore } from "./components/autofill/table_autofill_store";
234
234
  import { Composer } from "./components/composer/composer/composer";
235
235
  import { StandaloneComposer } from "./components/composer/standalone_composer/standalone_composer";
236
+ import { isMobileOS } from "./components/helpers/dom_helpers";
236
237
  import { Select } from "./components/select/select";
237
238
  import { ChartRangeDataSourceComponent } from "./components/side_panel/chart/building_blocks/range_data_source/range_data_source";
238
239
  import { CalendarButton } from "./components/side_panel/criterion_form/calendar_button/calendar_button";
240
+ import { Spreadsheet } from "./components/spreadsheet/spreadsheet";
239
241
  import { TopBar } from "./components/top_bar/top_bar";
240
242
  import { createComputeFunction } from "./functions/create_compute_function";
241
243
  import { PositionMap } from "./helpers/cells/position_map";
@@ -324,6 +326,7 @@ export declare const helpers: {
324
326
  isSingleCellReference: typeof isSingleCellReference;
325
327
  computeCachedTextDimension: typeof computeCachedTextDimension;
326
328
  createComputeFunction: typeof createComputeFunction;
329
+ isMobileOS: typeof isMobileOS;
327
330
  };
328
331
  export declare const links: {
329
332
  isMarkdownLink: typeof isMarkdownLink;
@@ -395,6 +398,7 @@ export declare const components: {
395
398
  TopBar: typeof TopBar;
396
399
  Composer: typeof Composer;
397
400
  CalendarButton: typeof CalendarButton;
401
+ Spreadsheet: typeof Spreadsheet;
398
402
  };
399
403
  export declare const hooks: {
400
404
  useDragAndDropListItems: typeof useDragAndDropListItems;
@@ -1,19 +1,23 @@
1
1
  import { CommandResult, CoreCommand } from "../../types/commands";
2
- import { Carousel } from "../../types/figure";
3
- import { UID } from "../../types/misc";
2
+ import { Carousel, CarouselData } from "../../types/figure";
3
+ import { RangeAdapterFunctions, UID } from "../../types/misc";
4
4
  import { WorkbookData } from "../../types/workbook_data";
5
5
  import { CorePlugin } from "../core_plugin";
6
6
  interface CarouselState {
7
7
  readonly carousels: Record<UID, Record<UID, Carousel | undefined> | undefined>;
8
8
  }
9
9
  export declare class CarouselPlugin extends CorePlugin<CarouselState> implements CarouselState {
10
- static getters: readonly ["getCarousel", "doesCarouselExist"];
10
+ static getters: readonly ["getCarousel", "doesCarouselExist", "carouselToCarouselData"];
11
11
  readonly carousels: Record<UID, Record<UID, Carousel | undefined> | undefined>;
12
- allowDispatch(cmd: CoreCommand): CommandResult.Success | CommandResult.InvalidFigureId | CommandResult.DuplicatedFigureId;
12
+ adaptRanges(rangeAdapterFunctions: RangeAdapterFunctions): void;
13
+ allowDispatch(cmd: CoreCommand): CommandResult.Success | CommandResult.InvalidRange | CommandResult.InvalidFigureId | CommandResult.DuplicatedFigureId;
13
14
  handle(cmd: CoreCommand): void;
14
15
  doesCarouselExist(figureId: UID): boolean;
15
16
  getCarousel(figureId: UID): Carousel;
16
17
  private removeDeletedCharts;
18
+ private carouselDataToCarousel;
19
+ carouselToCarouselData(carousel: Carousel): CarouselData;
20
+ private areDataViewRangesValid;
17
21
  import(data: WorkbookData): void;
18
22
  export(data: WorkbookData): void;
19
23
  }
@@ -3,7 +3,7 @@ import { CellPosition, Pixel, Style, UID, VerticalAlign, Zone } from "../../type
3
3
  import { Rect } from "../../types/rendering";
4
4
  import { UIPlugin } from "../ui_plugin";
5
5
  export declare class SheetUIPlugin extends UIPlugin {
6
- static getters: readonly ["getCellWidth", "getTextWidth", "getCellText", "getCellMultiLineText", "getMultilineTextSize", "getContiguousZone", "computeTextYCoordinate"];
6
+ static getters: readonly ["getCellWidth", "getTextWidth", "getCellText", "getCellMultiLineText", "getMultilineTextSize", "getContiguousZone", "computeTextYCoordinate", "getZoneMaxWidth"];
7
7
  private ctx;
8
8
  allowDispatch(cmd: LocalCommand): CommandResult | CommandResult[];
9
9
  handle(cmd: Command): void;
@@ -40,6 +40,7 @@ export declare class SheetUIPlugin extends UIPlugin {
40
40
  * If the cell is part of a merge, the check applies to the main cell of the merge.
41
41
  */
42
42
  private isCellEmpty;
43
+ getZoneMaxWidth(sheetId: UID, zone: Zone): number;
43
44
  private getColMaxWidth;
44
45
  /**
45
46
  * Check that any "sheetId" in the command matches an existing
@@ -2,7 +2,7 @@ import { Command } from "../../types/commands";
2
2
  import { Dimension, HeaderDimensions, HeaderIndex, Pixel, UID } from "../../types/misc";
3
3
  import { UIPlugin } from "../ui_plugin";
4
4
  export declare class HeaderPositionsUIPlugin extends UIPlugin {
5
- static getters: readonly ["getColDimensions", "getRowDimensions", "getColRowOffset"];
5
+ static getters: readonly ["getColDimensions", "getRowDimensions", "getHeaderDimensions", "getColRowOffset"];
6
6
  private headerPositions;
7
7
  private isDirty;
8
8
  handle(cmd: Command): void;
@@ -15,6 +15,7 @@ export declare class HeaderPositionsUIPlugin extends UIPlugin {
15
15
  * Returns the size, start and end coordinates of a row an unfolded sheet
16
16
  */
17
17
  getRowDimensions(sheetId: UID, row: HeaderIndex): HeaderDimensions;
18
+ getHeaderDimensions(sheetId: UID, dimension: "COL" | "ROW", index: number): HeaderDimensions;
18
19
  /**
19
20
  * Returns the offset of a header (determined by the dimension) at the given index
20
21
  * based on the referenceIndex given. If start === 0, this method will return
@@ -9,6 +9,10 @@ interface StoreUpdateEvent {
9
9
  export declare class DependencyContainer extends EventBus<StoreUpdateEvent> {
10
10
  private dependencies;
11
11
  private factory;
12
+ private parent?;
13
+ /** If the dependency container has a parent, those are the store that will be owned by this container instead of its parent */
14
+ private ownStores;
15
+ constructor(parent?: DependencyContainer, extendedStores?: StoreConstructor[]);
12
16
  /**
13
17
  * Injects a store instance in the dependency container.
14
18
  * Useful for injecting an external store that is not created by the container.
@@ -22,5 +26,6 @@ export declare class DependencyContainer extends EventBus<StoreUpdateEvent> {
22
26
  instantiate<T>(Store: StoreConstructor<T>, ...args: StoreParams<StoreConstructor<T>>): T;
23
27
  resetStores(): void;
24
28
  dispose(): void;
29
+ trigger(type: StoreUpdateEvent["type"], payload?: Omit<StoreUpdateEvent, "type">): void;
25
30
  }
26
31
  export {};
@@ -1,8 +1,14 @@
1
1
  import { LocalStoreConstructor, Store, StoreConstructor, StoreParams } from "../types/store_engine";
2
+ import { DependencyContainer } from "./dependency_container";
2
3
  /**
3
4
  * This hook should be used at the root of your app to provide the store container.
4
5
  */
5
6
  export declare function useStoreProvider(): any;
7
+ /**
8
+ * This create a new store dependency container. The store given in the extended store array will be owned by this
9
+ * new container, the other stores will be owned by the parent container.
10
+ */
11
+ export declare function useChildStoreProvider(extendedStores: StoreConstructor[]): DependencyContainer;
6
12
  /**
7
13
  * Get the instance of a store.
8
14
  */
@@ -0,0 +1,11 @@
1
+ import { Command } from "../types/commands";
2
+ import { SpreadsheetStore } from "./spreadsheet_store";
3
+ /**
4
+ * The goal of this store is to make its attached viewport store follow the active sheet
5
+ */
6
+ export declare class MainViewportStore extends SpreadsheetStore {
7
+ private viewStore;
8
+ private sheetIdAtFinalize;
9
+ protected handle(cmd: Command): void;
10
+ protected finalize(): void;
11
+ }
@@ -1,9 +1,10 @@
1
- import { CellPosition, FigureUI, HeaderIndex, Pixel, SheetViewDimensions } from "..";
1
+ import { CellPosition, FigureUI, HeaderDimensions, HeaderIndex, Pixel, SheetViewDimensions, UID, ViewportsGetters, Zone } from "..";
2
2
  import { ViewportCollection } from "../helpers/viewport_collection";
3
3
  import { Command } from "../types/commands";
4
4
  import { DOMCoordinates, DOMDimension, Rect, SheetDOMScrollInfo, Viewport } from "../types/rendering";
5
5
  import { Get } from "../types/store_engine";
6
6
  import { SpreadsheetStore } from "./spreadsheet_store";
7
+ type getHeaderDimensionsCallback = (sheetId: UID, dimension: "COL" | "ROW", index: number) => HeaderDimensions;
7
8
  /**
8
9
  * Viewport store.
9
10
  *
@@ -11,16 +12,21 @@ import { SpreadsheetStore } from "./spreadsheet_store";
11
12
  *
12
13
  */
13
14
  export declare class ViewportsStore extends SpreadsheetStore {
14
- mutators: readonly ["setViewportOffset", "resizeSheetView", "setZoom", "shiftViewportDown", "shiftViewportUp", "scrollToCell"];
15
+ mutators: readonly ["setViewportOffset", "resizeSheetView", "setZoom", "shiftViewportDown", "shiftViewportUp", "scrollToCell", "setDisplayedSheetId", "setViewportArgs", "rebuildViewports"];
16
+ private getHeaderDimensionsCallback;
17
+ private getFooterSizeCallback;
18
+ private zoneToDisplay;
15
19
  viewports: ViewportCollection;
16
20
  private sheetsWithDirtyViewports;
17
21
  private shouldRepositionViewports;
22
+ displayedSheetId: UID;
18
23
  constructor(get: Get);
19
24
  private handleEvent;
20
25
  handle(cmd: Command): void;
21
26
  finalize(): void;
22
27
  private setViewports;
23
28
  private syncPaneDivision;
29
+ setDisplayedSheetId(sheetId: UID): void;
24
30
  setViewportOffset(offset: {
25
31
  offsetX: Pixel;
26
32
  offsetY: Pixel;
@@ -29,7 +35,7 @@ export declare class ViewportsStore extends SpreadsheetStore {
29
35
  setZoom(zoom: number): "noStateChange" | undefined;
30
36
  shiftViewportDown(): void;
31
37
  shiftViewportUp(): void;
32
- scrollToCell(col: HeaderIndex, row: HeaderIndex): void;
38
+ scrollToCell(sheetId: UID, col: HeaderIndex, row: HeaderIndex): void;
33
39
  get sheetViewDimensionWithHeaders(): DOMDimension;
34
40
  get sheetViewDimension(): DOMDimension;
35
41
  get gridOffset(): DOMCoordinates;
@@ -70,4 +76,13 @@ export declare class ViewportsStore extends SpreadsheetStore {
70
76
  */
71
77
  private shiftVertically;
72
78
  private getPaneDivisions;
79
+ private getFooterSize;
80
+ setViewportArgs(args: {
81
+ getHeaderDimensions?: getHeaderDimensionsCallback;
82
+ getFooterSize?: () => Pixel;
83
+ zoneToDisplay?: Zone;
84
+ }): void;
85
+ rebuildViewports(): void;
86
+ buildViewportGetters(getHeaderDimensions: (sheetId: UID, dimension: "COL" | "ROW", index: number) => HeaderDimensions): ViewportsGetters;
73
87
  }
88
+ export {};
@@ -4,7 +4,7 @@ import { ChartDefinition } from "./chart/chart";
4
4
  import { ConditionalFormat } from "./conditional_formatting";
5
5
  import { ClipboardPasteOptions, ParsedOsClipboardContentWithImageData } from "./clipboard";
6
6
  import { DataValidationRule } from "./data_validation";
7
- import { AnchorOffset, Carousel, CarouselItem, Figure, FigureSize } from "./figure";
7
+ import { AnchorOffset, CarouselData, CarouselItem, Figure, FigureSize } from "./figure";
8
8
  import { SearchOptions } from "./find_and_replace";
9
9
  import { Image } from "./image";
10
10
  import { Locale } from "./locale";
@@ -284,12 +284,12 @@ export interface UpdateChartRegionCommand {
284
284
  }
285
285
  export interface CreateCarouselCommand extends BaseFigureCommand {
286
286
  type: "CREATE_CAROUSEL";
287
- definition: Carousel;
287
+ definition: CarouselData;
288
288
  }
289
289
  export interface UpdateCarouselCommand extends SheetDependentCommand {
290
290
  type: "UPDATE_CAROUSEL";
291
291
  figureId: UID;
292
- definition: Carousel;
292
+ definition: CarouselData;
293
293
  }
294
294
  export interface AddNewChartToCarouselCommand extends SheetDependentCommand {
295
295
  type: "ADD_NEW_CHART_TO_CAROUSEL";
@@ -1,5 +1,6 @@
1
1
  import { TitleDesign } from "./chart/chart";
2
2
  import { HeaderIndex, Pixel, PixelPosition, UID } from "./misc";
3
+ import { Range, RangeData } from "./range";
3
4
  import { DOMCoordinates } from "./rendering";
4
5
  export interface FigureInfo {
5
6
  id: UID;
@@ -29,11 +30,33 @@ export interface Carousel {
29
30
  readonly items: CarouselItem[];
30
31
  readonly title?: TitleDesign;
31
32
  }
33
+ export interface CarouselDataViewItem {
34
+ type: "carouselDataView";
35
+ title?: string;
36
+ range?: Range;
37
+ rangeData?: never;
38
+ /**
39
+ * The weights of the columns define the ratio of the width of each column relative to the other columns and the figure width.
40
+ *
41
+ * For example if the carousel data view is 500px wide, and the weights are [250, 250, 500], the first two columns
42
+ * will be 125px wide and the last column will be 250px wide.
43
+ */
44
+ columnWeights?: number[];
45
+ }
32
46
  export type CarouselItem = {
33
47
  type: "chart";
34
48
  chartId: UID;
35
49
  title?: string;
36
- } | {
37
- type: "carouselDataView";
50
+ } | CarouselDataViewItem;
51
+ export interface CarouselData extends Omit<Carousel, "items"> {
52
+ readonly items: CarouselItemData[];
53
+ }
54
+ export interface CarouselDataViewItemData extends Omit<CarouselDataViewItem, "range" | "rangeData"> {
55
+ rangeData?: RangeData;
56
+ range?: never;
57
+ }
58
+ export type CarouselItemData = {
59
+ type: "chart";
60
+ chartId: UID;
38
61
  title?: string;
39
- };
62
+ } | CarouselDataViewItemData;
@@ -40,3 +40,25 @@ export type RenderingGetters = {
40
40
  isDashboard: () => boolean;
41
41
  } & CoreGetters & PluginGetters<typeof HistoryPlugin> & PluginGetters<typeof ClipboardPlugin> & PluginGetters<typeof EvaluationPlugin> & PluginGetters<typeof EvaluationChartPlugin> & PluginGetters<typeof EvaluationConditionalFormatPlugin> & PluginGetters<typeof HeaderVisibilityUIPlugin> & PluginGetters<typeof CustomColorsPlugin> & PluginGetters<typeof CollaborativePlugin> & PluginGetters<typeof SortPlugin> & PluginGetters<typeof UIOptionsPlugin> & PluginGetters<typeof SheetUIPlugin> & PluginGetters<typeof FilterEvaluationPlugin> & PluginGetters<typeof FingerprintPlugin> & PluginGetters<typeof SubtotalEvaluationPlugin> & PluginGetters<typeof HeaderSizeUIPlugin> & PluginGetters<typeof EvaluationDataValidationPlugin> & PluginGetters<typeof HeaderPositionsUIPlugin> & PluginGetters<typeof TableStylePlugin> & PluginGetters<typeof CellComputedStylePlugin> & PluginGetters<typeof DynamicTablesPlugin> & PluginGetters<typeof PivotUIPlugin> & PluginGetters<typeof TableComputedStylePlugin> & PluginGetters<typeof GeoFeaturePlugin> & PluginGetters<typeof PivotPresencePlugin> & PluginGetters<typeof TableComputedStylePlugin> & PluginGetters<typeof CellIconPlugin> & PluginGetters<typeof DynamicTranslate> & PluginGetters<typeof FormulaTrackerPlugin> & PluginGetters<typeof LockSheetPlugin> & PluginGetters<typeof CarouselUIPlugin> & PluginGetters<typeof ColorThemeUIPlugin> & PluginGetters<typeof FigureUIPlugin>;
42
42
  export type Getters = RenderingGetters & PluginGetters<typeof GridSelectionPlugin>;
43
+ export interface ViewportsGetters {
44
+ getColDimensions: Getters["getColDimensions"];
45
+ getRowDimensions: Getters["getRowDimensions"];
46
+ findLastVisibleColRowIndex: Getters["findLastVisibleColRowIndex"];
47
+ isReadonly: Getters["isReadonly"];
48
+ getMainCellPosition: Getters["getMainCellPosition"];
49
+ getNextVisibleCellPosition: Getters["getNextVisibleCellPosition"];
50
+ getColRowOffset: Getters["getColRowOffset"];
51
+ isColHidden: Getters["isColHidden"];
52
+ isRowHidden: Getters["isRowHidden"];
53
+ isHeaderHidden: Getters["isHeaderHidden"];
54
+ getNumberHeaders: Getters["getNumberHeaders"];
55
+ getHeaderSize: Getters["getHeaderSize"];
56
+ getColSize: Getters["getColSize"];
57
+ getRowSize: Getters["getRowSize"];
58
+ getSheetIds: Getters["getSheetIds"];
59
+ tryGetSheet: Getters["tryGetSheet"];
60
+ getNumberCols: Getters["getNumberCols"];
61
+ getNumberRows: Getters["getNumberRows"];
62
+ getSheetZone: Getters["getSheetZone"];
63
+ getFigures: Getters["getFigures"];
64
+ }
@@ -332,6 +332,10 @@ export interface Offset {
332
332
  col: number;
333
333
  row: number;
334
334
  }
335
+ export interface PixelOffset {
336
+ offsetX: Pixel;
337
+ offsetY: Pixel;
338
+ }
335
339
  export type DebouncedFunction<T> = T & {
336
340
  stopDebounce: () => void;
337
341
  isDebouncePending: () => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "19.5.0-alpha.7",
3
+ "version": "19.5.0-alpha.8",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o_spreadsheet.cjs",
@@ -141,7 +141,7 @@
141
141
  "xmlSelfClosingSpace": false
142
142
  },
143
143
  "dependencies": {
144
- "@odoo/owl": "3.0.0-alpha.43",
144
+ "@odoo/owl": "3.0.0-alpha.45",
145
145
  "bootstrap": "5.3.3",
146
146
  "font-awesome": "^4.7.0",
147
147
  "rbush": "^3.0.1"