@gridsheet/preact-core 3.0.0-rc.2 → 3.0.0-rc.5

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 (43) hide show
  1. package/dist/components/ColumnMenuFilterSection.d.ts +5 -0
  2. package/dist/components/ColumnMenuLabelSection.d.ts +5 -0
  3. package/dist/components/ColumnMenuSortSection.d.ts +5 -0
  4. package/dist/components/ContextMenu.d.ts +0 -19
  5. package/dist/components/GridSheet.d.ts +6 -4
  6. package/dist/components/MenuItem.d.ts +18 -0
  7. package/dist/components/PluginBase.d.ts +2 -2
  8. package/dist/components/StoreObserver.d.ts +7 -4
  9. package/dist/constants.d.ts +3 -0
  10. package/dist/formula/evaluator.d.ts +28 -25
  11. package/dist/formula/formula-error.d.ts +1 -1
  12. package/dist/formula/functions/__async.d.ts +9 -9
  13. package/dist/formula/functions/__base.d.ts +14 -21
  14. package/dist/formula/functions/__utils.d.ts +2 -2
  15. package/dist/formula/functions/minus.d.ts +0 -1
  16. package/dist/formula/solver.d.ts +25 -14
  17. package/dist/index.d.ts +16 -13
  18. package/dist/index.js +5115 -4714
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/autofill.d.ts +3 -3
  21. package/dist/lib/{hub.d.ts → book.d.ts} +28 -27
  22. package/dist/lib/cell.d.ts +6 -4
  23. package/dist/lib/clipboard.d.ts +7 -7
  24. package/dist/lib/coords.d.ts +13 -1
  25. package/dist/lib/dom.d.ts +5 -0
  26. package/dist/lib/input.d.ts +2 -2
  27. package/dist/lib/label.d.ts +4 -0
  28. package/dist/lib/menu.d.ts +99 -0
  29. package/dist/lib/popup.d.ts +24 -0
  30. package/dist/lib/reference.d.ts +10 -4
  31. package/dist/lib/sheet.d.ts +507 -2
  32. package/dist/lib/sheet_utils.d.ts +55 -0
  33. package/dist/lib/spatial.d.ts +5 -20
  34. package/dist/lib/virtualization.d.ts +4 -4
  35. package/dist/policy/core.d.ts +13 -13
  36. package/dist/sentinels.d.ts +3 -2
  37. package/dist/store/actions.d.ts +3 -3
  38. package/dist/store/dispatchers.d.ts +38 -34
  39. package/dist/store/helpers.d.ts +10 -5
  40. package/dist/styles/minified.d.ts +2 -2
  41. package/dist/types.d.ts +51 -35
  42. package/package.json +1 -1
  43. package/dist/lib/table.d.ts +0 -484
@@ -1,6 +1,6 @@
1
1
  import { FC, ReactNode } from 'react';
2
2
  import { CellPatchType, CellType, OperationType, PointType } from '../types';
3
- import { Table, UserTable } from '../lib/table';
3
+ import { Sheet, UserSheet } from '../lib/sheet';
4
4
  import { FormulaError } from '../formula/formula-error';
5
5
  import { Time } from '../lib/time';
6
6
  export type AutocompleteOption = {
@@ -12,18 +12,18 @@ export type AutocompleteOption = {
12
12
  }>;
13
13
  };
14
14
  export type SelectProps = {
15
- table: UserTable;
15
+ sheet: UserSheet;
16
16
  point: PointType;
17
17
  current?: CellType;
18
18
  next?: CellType;
19
19
  operation: OperationType;
20
20
  };
21
21
  export type SerializeForClipboardProps = {
22
- table: UserTable;
22
+ sheet: UserSheet;
23
23
  point: PointType;
24
24
  };
25
25
  export type SelectFallbackProps = {
26
- table: UserTable;
26
+ sheet: UserSheet;
27
27
  point: PointType;
28
28
  value: any;
29
29
  };
@@ -31,20 +31,20 @@ export type Scalar = string | number | boolean | null | undefined;
31
31
  export type ScalarProps<T = any> = {
32
32
  value?: T;
33
33
  cell?: CellType<T>;
34
- table: Table;
34
+ sheet: Sheet;
35
35
  point: PointType;
36
36
  };
37
37
  export type RenderProps<T = any> = {
38
- value?: T;
38
+ value: T;
39
39
  cell?: CellType<T>;
40
- table: Table;
40
+ sheet: Sheet;
41
41
  point: PointType;
42
- sync?: (table: UserTable) => void;
42
+ apply?: (sheet: UserSheet) => void;
43
43
  };
44
44
  export type SerializeProps<T = any> = {
45
45
  value: T;
46
46
  cell?: CellType<T>;
47
- table: Table;
47
+ sheet: Sheet;
48
48
  point: PointType;
49
49
  };
50
50
  export type PolicyMixinType = {
@@ -62,7 +62,7 @@ export type PolicyMixinType = {
62
62
  renderArray?: (props: RenderProps<any[]>) => any;
63
63
  renderObject?: (props: RenderProps<any>) => any;
64
64
  renderNull?: (props: RenderProps<null | undefined>) => any;
65
- renderTable?: (props: RenderProps<Table>) => any;
65
+ renderSheet?: (props: RenderProps<UserSheet>) => any;
66
66
  renderRowHeaderLabel?: (n: number) => string | null;
67
67
  renderColHeaderLabel?: (n: number) => string | null;
68
68
  serialize?: (props: SerializeProps) => string;
@@ -123,7 +123,7 @@ export declare class Policy implements PolicyMixinType {
123
123
  renderArray(props: RenderProps<any[]>): any;
124
124
  renderObject({ value }: RenderProps<any>): any;
125
125
  renderNull(_props: RenderProps<null | undefined>): any;
126
- renderTable({ value }: RenderProps<Table>): any;
126
+ renderSheet({ value: childSheet, ...rest }: RenderProps<UserSheet>): any;
127
127
  renderRowHeaderLabel(_n: number): string | null;
128
128
  renderColHeaderLabel(_n: number): string | null;
129
129
  toScalar(props: ScalarProps): Scalar;
@@ -132,9 +132,9 @@ export declare class Policy implements PolicyMixinType {
132
132
  toScalarBool({ value }: ScalarProps<boolean>): Scalar;
133
133
  toScalarDate({ value }: ScalarProps<Date>): Scalar;
134
134
  toScalarTime({ value }: ScalarProps<Time>): Scalar;
135
- toScalarArray({ value, cell, table, point }: ScalarProps<any[]>): Scalar;
135
+ toScalarArray({ value, cell, sheet, point }: ScalarProps<any[]>): Scalar;
136
136
  toScalarNull(_props: ScalarProps<null | undefined>): Scalar;
137
- serialize({ value, cell, table, point }: SerializeProps): string;
137
+ serialize({ value, cell, sheet, point }: SerializeProps): string;
138
138
  serializeString({ value }: SerializeProps<string>): string;
139
139
  serializeBool({ value }: SerializeProps<boolean>): string;
140
140
  serializeNumber({ value }: SerializeProps<number>): string;
@@ -26,14 +26,15 @@ export declare class Pending<T = unknown> {
26
26
  * return new Spilling([[1, 2], [3, 4]]);
27
27
  *
28
28
  * The solver detects Spilling via `Spilling.is()` and calls
29
- * `table.spill(origin, result.matrix)` to perform obstruction checks
29
+ * `sheet.spill(origin, result.matrix)` to perform obstruction checks
30
30
  * and write values into the solvedCaches.
31
31
  */
32
32
  export declare class Spilling {
33
33
  readonly __gsType: "Spilling";
34
34
  /** The 2D matrix of resolved values. matrix[row][col] */
35
35
  readonly matrix: any[][];
36
- constructor(matrix: any[][]);
36
+ constructor(matrix: any[] | any[][]);
37
+ private ensure2D;
37
38
  static is(obj: any): obj is Spilling;
38
39
  }
39
40
  //# sourceMappingURL=sentinels.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { StoreType, RectType, ZoneType, PointType, RangeType, PositionType, RawCellType, OperatorType, FilterConfig } from '../types';
2
- import { Table } from '../lib/table';
2
+ import { Sheet } from '../lib/sheet';
3
3
  type StoreWithCallback = StoreType & {
4
4
  callback?: (store: StoreType) => void;
5
5
  };
@@ -64,9 +64,9 @@ export declare const setEntering: (payload: boolean) => {
64
64
  type: number;
65
65
  value: boolean;
66
66
  };
67
- export declare const updateTable: (payload: Table) => {
67
+ export declare const updateSheet: (payload: Sheet) => {
68
68
  type: number;
69
- value: Table;
69
+ value: Sheet;
70
70
  };
71
71
  export declare const setEditorRect: (payload: RectType) => {
72
72
  type: number;
@@ -1,36 +1,40 @@
1
- import { ContextMenuProps, FilterConfig } from '../types';
2
- export declare const copier: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
3
- export declare const cutter: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
4
- export declare const paster: ({ store, dispatch }: ContextMenuProps, onlyValue?: boolean) => Promise<void>;
5
- export declare const undoer: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
6
- export declare const redoer: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
7
- export declare const rowsInserterAbove: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
8
- export declare const rowsInserterBelow: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
9
- export declare const colsInserterLeft: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
10
- export declare const colsInserterRight: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
11
- export declare const rowsRemover: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
12
- export declare const colsRemover: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
13
- export declare const rowsSorterAsc: ({ store, dispatch }: ContextMenuProps, x: number) => Promise<void>;
14
- export declare const rowsSorterDesc: ({ store, dispatch }: ContextMenuProps, x: number) => Promise<void>;
15
- export declare const rowsFilterer: ({ store, dispatch }: ContextMenuProps, x: number, filter: FilterConfig) => Promise<void>;
16
- export declare const rowsFilterClearer: ({ store, dispatch }: ContextMenuProps, x?: number) => Promise<void>;
17
- export declare const searcher: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
18
- export declare const syncers: {
19
- copy: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
20
- cut: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
21
- paste: ({ store, dispatch }: ContextMenuProps, onlyValue?: boolean) => Promise<void>;
22
- undo: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
23
- redo: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
24
- insertRowsAbove: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
25
- insertRowsBelow: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
26
- insertColsLeft: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
27
- insertColsRight: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
28
- removeRows: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
29
- removeCols: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
30
- sortRowsAsc: ({ store, dispatch }: ContextMenuProps, x: number) => Promise<void>;
31
- sortRowsDesc: ({ store, dispatch }: ContextMenuProps, x: number) => Promise<void>;
32
- filterRows: ({ store, dispatch }: ContextMenuProps, x: number, filter: FilterConfig) => Promise<void>;
33
- clearFilter: ({ store, dispatch }: ContextMenuProps, x?: number) => Promise<void>;
34
- search: ({ store, dispatch }: ContextMenuProps) => Promise<void>;
1
+ import { StoreDispatchType, FilterConfig } from '../types';
2
+ export declare const copier: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
3
+ export declare const cutter: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
4
+ export declare const paster: ({ store, dispatch }: StoreDispatchType, onlyValue?: boolean) => Promise<void>;
5
+ export declare const undoer: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
6
+ export declare const redoer: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
7
+ export declare const rowsInserterAbove: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
8
+ export declare const rowsInserterBelow: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
9
+ export declare const colsInserterLeft: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
10
+ export declare const colsInserterRight: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
11
+ export declare const rowsRemover: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
12
+ export declare const colsRemover: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
13
+ export declare const rowsSorterAsc: ({ store, dispatch }: StoreDispatchType, x: number) => Promise<void>;
14
+ export declare const rowsSorterDesc: ({ store, dispatch }: StoreDispatchType, x: number) => Promise<void>;
15
+ export declare const rowsFilterer: ({ store, dispatch }: StoreDispatchType, x: number, filter: FilterConfig) => Promise<void>;
16
+ export declare const rowsFilterClearer: ({ store, dispatch }: StoreDispatchType, x?: number) => Promise<void>;
17
+ export declare const rowSortFixedToggler: ({ store, dispatch }: StoreDispatchType, y: number) => void;
18
+ export declare const rowFilterFixedToggler: ({ store, dispatch }: StoreDispatchType, y: number) => void;
19
+ export declare const searcher: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
20
+ export declare const applyers: {
21
+ copy: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
22
+ cut: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
23
+ paste: ({ store, dispatch }: StoreDispatchType, onlyValue?: boolean) => Promise<void>;
24
+ undo: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
25
+ redo: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
26
+ insertRowsAbove: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
27
+ insertRowsBelow: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
28
+ insertColsLeft: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
29
+ insertColsRight: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
30
+ removeRows: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
31
+ removeCols: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
32
+ sortRowsAsc: ({ store, dispatch }: StoreDispatchType, x: number) => Promise<void>;
33
+ sortRowsDesc: ({ store, dispatch }: StoreDispatchType, x: number) => Promise<void>;
34
+ filterRows: ({ store, dispatch }: StoreDispatchType, x: number, filter: FilterConfig) => Promise<void>;
35
+ clearFilter: ({ store, dispatch }: StoreDispatchType, x?: number) => Promise<void>;
36
+ toggleSortFixed: ({ store, dispatch }: StoreDispatchType, y: number) => void;
37
+ toggleFilterFixed: ({ store, dispatch }: StoreDispatchType, y: number) => void;
38
+ search: ({ store, dispatch }: StoreDispatchType) => Promise<void>;
35
39
  };
36
40
  //# sourceMappingURL=dispatchers.d.ts.map
@@ -1,6 +1,11 @@
1
- import { Table } from '../lib/table';
2
- import { PointType, StoreType } from '../types';
3
- export declare const restrictPoints: (store: StoreType, table: Table) => {
1
+ import { Sheet } from '../lib/sheet';
2
+ import { PointType, StorePatchType, StoreType } from '../types';
3
+ /**
4
+ * Strip redundant fields from a StorePatchType before recording in history.
5
+ * - selectingZone with endY === -1 && endX === -1 is a no-selection sentinel and need not be stored.
6
+ */
7
+ export declare const compactReflection: (reflection: StorePatchType) => StorePatchType;
8
+ export declare const restrictPoints: (store: StoreType, sheet: Sheet) => {
4
9
  choosing: PointType;
5
10
  selectingZone: {
6
11
  startY: number;
@@ -10,11 +15,11 @@ export declare const restrictPoints: (store: StoreType, table: Table) => {
10
15
  };
11
16
  };
12
17
  export declare const flashSheet: (el: HTMLElement | null) => void;
13
- export declare const flashWithCallback: (store: StoreType, table: Table, callback: ((s: StoreType) => void) | undefined) => StoreType & {
18
+ export declare const flashWithCallback: (store: StoreType, sheet: Sheet, callback: ((s: StoreType) => void) | undefined) => StoreType & {
14
19
  callback?: (store: StoreType) => void;
15
20
  };
16
21
  export declare const shouldTracking: (operation: string) => boolean;
17
- export declare const initSearchStatement: (table: Table, store: StoreType) => {
22
+ export declare const initSearchStatement: (sheet: Sheet, store: StoreType) => {
18
23
  matchingCells: never[];
19
24
  searchQuery?: undefined;
20
25
  matchingCellIndex?: undefined;
@@ -1,3 +1,3 @@
1
- export declare const LAST_MODIFIED = 1774000888;
2
- export declare const CSS = ".gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:rgba(0,127,255,.08);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px #07f;box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:#07f;color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}.gs-root1[data-mode=light]{background-color:#e2e2e2;color:#000}.gs-root1[data-mode=light] .gs-main{background-color:#e2e2e2;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd}.gs-root1[data-mode=light] .gs-tabular{background-color:#e2e2e2}.gs-root1[data-mode=light] .gs-formula-bar{background-color:#efefef}.gs-root1[data-mode=light] .gs-formula-bar-editor-inner{color:#555}.gs-root1[data-mode=light] .gs-cell{background-color:#f7f7f7;border-top:solid 1px #ddd;border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-adjuster{background-color:#ddd}.gs-root1[data-mode=light] .gs-tabular-inner{background-color:#ddd}.gs-root1[data-mode=light] .gs-th{background-color:#efefef;color:#666}.gs-root1[data-mode=light] .gs-th-top{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-search-bar{color:rgba(0,0,0,.3)}.gs-editor[data-mode=light].gs-editing textarea{caret-color:#000000}.gs-editor[data-mode=light].gs-editing .gs-editor-hl{background-color:#f7f7f7;color:#000}.gs-editor[data-mode=light] .gs-editor-options{color:#000;background-color:#f7f7f7;border:solid 1px #ddd}.gs-root1[data-mode=dark]{background-color:#5a5a5a;color:#eee}.gs-root1[data-mode=dark] .gs-main{background-color:#3f3f3f;border-right:solid 1px #5a5a5a;border-bottom:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-tabular{background-color:#3f3f3f}.gs-root1[data-mode=dark] .gs-formula-bar{background-color:#4f4f4f}.gs-root1[data-mode=dark] .gs-formula-bar-editor-inner{color:#bbb}.gs-root1[data-mode=dark] .gs-cell{background-color:#212121;border-top:solid 1px #5a5a5a;border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-adjuster{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-tabular-inner{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-large-editor textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-th{background-color:#4f4f4f;color:#eee}.gs-root1[data-mode=dark] .gs-th-top{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-search-bar textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-search-bar{color:rgba(255,255,255,.3)}.gs-editor[data-mode=dark].gs-editing textarea{caret-color:#eeeeee}.gs-editor[data-mode=dark].gs-editing .gs-editor-hl{background-color:#212121;color:#eee}.gs-editor[data-mode=dark] .gs-editor-options{color:#eee;background-color:#5a5a5a;border:solid 1px #5a5a5a}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px #0077ff}.gs-cell.gs-selecting{z-index:1}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:rgba(100,140,255,.6);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:3px solid rgba(200,0,0,.9);border-right:3px solid rgba(200,0,0,.9);border-bottom:3px solid transparent;border-left:3px solid transparent;z-index:1}.gs-cell .gs-cell-label{font-size:8px;font-weight:400;font-style:normal;font-family:math,monospace,serif;letter-spacing:1px;line-height:14px;position:absolute;top:0;right:0;background-color:rgba(0,128,255,.6);color:rgba(255,255,255,.6);padding:0 2px;display:none;opacity:.7}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 2px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:#07f;position:absolute;width:7px;height:7px;bottom:0;right:0;margin-right:-3.5px;margin-bottom:-3.5px;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-cell[data-x=\"1\"]{border-left:none}.gs-cell[data-y=\"1\"]{border-top:none}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:#07f}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:#07f;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:#07f}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:#07f;border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:#e0edff;border-color:#07f;color:#07f}.gs-column-menu-btn.gs-active{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;display:table-cell}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px #07f;margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:math,monospace,serif;position:absolute;top:0;right:0;margin-top:-15px;margin-right:-2px;padding:0 2px;font-size:10px;background-color:rgba(0,119,255,.75);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box}.gs-formula-bar .gs-selecting-address{display:table-cell;vertical-align:middle;width:60px;color:rgba(200,200,200);font-size:13px;text-align:center}.gs-formula-bar[data-spill=true]{background-color:rgba(0,119,255,.04)}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:rgba(80,160,255,.9);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar[data-spill=true] .gs-editor-hl .gs-spill-origin-formula{opacity:.5}.gs-formula-bar .gs-fx{display:table-cell;vertical-align:middle;width:30px;color:rgba(200,200,200);font-style:italic;font-family:cursive;text-align:center;border-left:solid 1px rgba(128,128,128,.5);font-size:15px}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all}.gs-formula-bar .gs-editor-hl .gs-spill-origin-formula{opacity:.5}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:#ebf5ff;color:#06c;font-weight:500}.gs-editor-option-selected:hover{background-color:#e0f0ff}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:#06c}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:#06c}.gs-fn-guide1-arg-type{color:#06c;padding:0 4px;background:#ebf5ff;border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor[data-mode=dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor[data-mode=dark] .gs-editor-option{color:#ccc}.gs-editor[data-mode=dark] .gs-editor-option:hover{background-color:#333}.gs-editor[data-mode=dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor[data-mode=dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor[data-mode=dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor[data-mode=dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor[data-mode=dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor[data-mode=dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor[data-mode=dark] .gs-fn-guide1-args{border-color:#333}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor[data-mode=dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor[data-mode=dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor[data-mode=dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:#06c;background-color:#ebf5ff;padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:#06c;padding:0 4px;background:#ebf5ff;border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:block;box-sizing:border-box;overscroll-behavior:none;position:relative}.gs-tabular-inner>table{table-layout:fixed;border-collapse:separate;border-spacing:0}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:#07f}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px #ddd}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-search-bar{width:100%;display:flex;align-items:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:#07f;background-color:rgba(200,200,255,.5);border-color:#07f}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:rgba(0,119,255,.15);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}";
1
+ export declare const LAST_MODIFIED = 1774701851;
2
+ export declare const CSS = ".gs-root1{display:inline-block;position:relative;border-spacing:0;width:fit-content;max-width:100%;overflow:auto;font-family:\"SF Pro Text\",\"SF Pro Icons\",\"Helvetica Neue\",Helvetica,Arial,Meiryo,sans-serif;visibility:hidden;opacity:0}.gs-root1.gs-initialized{visibility:visible;opacity:1;transition:opacity .2s ease-in-out}.gs-root1 .gs-main{flex:1;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.gs-root1 .gs-resizing{width:100%;height:100%;position:absolute;background-color:rgba(0,127,255,.08);top:0;left:0;z-index:2}.gs-root1 .gs-line-horizontal{width:100%}.gs-root1 .gs-line-vertical{height:100%}.gs-root1 .gs-line{position:relative;top:0;left:0;border:dotted 1px #07f;box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:#07f;color:#fff;margin:0;position:absolute;top:0;left:0}.gs-root1 .gs-scroll-handle{width:100%;height:100%;cursor:cell}.gs-hidden{visibility:hidden;position:absolute;top:0;left:0;width:0;height:0;overflow:hidden;pointer-events:none;z-index:-1}.gs-fixed{position:fixed;top:0;left:0;z-index:1}.gs-root1[data-mode=light]{background-color:#e2e2e2;color:#000}.gs-root1[data-mode=light] .gs-main{background-color:#e2e2e2;border-right:solid 1px #ddd;border-bottom:solid 1px #ddd}.gs-root1[data-mode=light] .gs-tabular{background-color:#e2e2e2}.gs-root1[data-mode=light] .gs-sheet-body-data{background-color:#f7f7f7}.gs-root1[data-mode=light] .gs-formula-bar{background-color:#efefef}.gs-root1[data-mode=light] .gs-formula-bar-editor-inner{color:#555}.gs-root1[data-mode=light] .gs-cell{border:solid 1px #ddd}.gs-root1[data-mode=light] .gs-adjuster{background-color:#ddd}.gs-root1[data-mode=light] .gs-tabular-inner{background-color:#ddd}.gs-root1[data-mode=light] .gs-th{background-color:#efefef;color:#666}.gs-root1[data-mode=light] .gs-th-top{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-top .gs-th-inner{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left{border-top:solid 1px #ddd}.gs-root1[data-mode=light] .gs-th-left .gs-th-inner{border-left:solid 1px #ddd}.gs-root1[data-mode=light] .gs-search-bar{color:rgba(0,0,0,.3)}.gs-editor[data-mode=light].gs-editing textarea{caret-color:#000000}.gs-editor[data-mode=light].gs-editing .gs-editor-hl{background-color:#f7f7f7;color:#000}.gs-editor[data-mode=light] .gs-editor-options{color:#000;background-color:#f7f7f7;border:solid 1px #ddd}.gs-root1[data-mode=dark]{background-color:#5a5a5a;color:#eee}.gs-root1[data-mode=dark] .gs-main{background-color:#3f3f3f;border-right:solid 1px #5a5a5a;border-bottom:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-tabular{background-color:#3f3f3f}.gs-root1[data-mode=dark] .gs-sheet-body-data{background-color:#212121}.gs-root1[data-mode=dark] .gs-formula-bar{background-color:#4f4f4f}.gs-root1[data-mode=dark] .gs-formula-bar-editor-inner{color:#bbb}.gs-root1[data-mode=dark] .gs-cell{background-color:#212121;border:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-adjuster{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-tabular-inner{background-color:#5a5a5a}.gs-root1[data-mode=dark] .gs-large-editor textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-th{background-color:#4f4f4f;color:#eee}.gs-root1[data-mode=dark] .gs-th-top{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-top .gs-th-inner{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left{border-top:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-th-left .gs-th-inner{border-left:solid 1px #5a5a5a}.gs-root1[data-mode=dark] .gs-search-bar textarea{color:#eee;caret-color:#eeeeee}.gs-root1[data-mode=dark] .gs-search-bar{color:rgba(255,255,255,.3)}.gs-editor[data-mode=dark].gs-editing textarea{caret-color:#eeeeee}.gs-editor[data-mode=dark].gs-editing .gs-editor-hl{background-color:#212121;color:#eee}.gs-editor[data-mode=dark] .gs-editor-options{color:#eee;background-color:#5a5a5a;border:solid 1px #5a5a5a}.gs-cell{transition:border-color .2s ease;padding:0;margin:0;box-sizing:border-box;position:relative;font-size:13px;letter-spacing:1px;line-height:24px;cursor:cell;user-select:none;-webkit-user-select:none;-moz-user-select:none}.gs-cell.gs-copying textarea:focus{outline:solid 1px #0077ff}.gs-cell.gs-selecting{z-index:1}.gs-cell.gs-selecting .gs-cell-label{display:block}.gs-cell.gs-choosing{margin-top:-1px;margin-left:-1px;z-index:1}.gs-cell.gs-choosing.gs-editing{color:transparent}.gs-cell.gs-choosing .gs-cell-label{display:block}.gs-cell.gs-pending .gs-cell-rendered{position:relative;overflow:hidden}.gs-cell.gs-pending .gs-cell-rendered::after{content:'';position:absolute;bottom:0;left:0;height:4px;width:40%;border-radius:1px;background:rgba(100,140,255,.6);animation:gs-pending-slide 1.4s ease-in-out infinite}.gs-cell .gs-formula-error-triangle{position:absolute;top:0;right:0;border-top:4px solid rgba(200,0,0,.9);border-right:4px solid rgba(200,0,0,.9);border-bottom:4px solid transparent;border-left:4px solid transparent;z-index:2;cursor:help}.gs-cell .gs-cell-label{font-size:8px;font-weight:400;font-style:normal;font-family:math,monospace,serif;letter-spacing:1px;line-height:14px;position:absolute;top:0;right:0;background-color:rgba(0,128,255,.6);color:rgba(255,255,255,.6);padding:0 2px;display:none;opacity:.7}.gs-cell .gs-cell-inner-wrap{width:100%;height:100%;position:absolute;top:0;left:0}.gs-cell .gs-cell-inner{width:100%;height:100%;overflow:hidden;display:flex;box-sizing:border-box;border:none!important}.gs-cell .gs-cell-rendered{overflow:hidden;white-space:pre-wrap;cursor:cell;word-wrap:break-word;word-break:break-all;padding:0 2px;width:100%;height:100%}.gs-cell .gs-cell-rendered>*{position:relative}.gs-cell .gs-cell-rendered>.backface{z-index:0}.gs-cell .gs-autofill-drag{background-color:#07f;position:absolute;width:7px;height:7px;bottom:0;right:0;margin-right:-3.5px;margin-bottom:-3.5px;cursor:crosshair;z-index:1}.gs-th[data-x=\"1\"] .gs-th-inner-wrap{border-left:none}.gs-th[data-y=\"1\"] .gs-th-inner-wrap{border-top:none}.gs-formula-error-tooltip{position:fixed;background-color:rgba(35,8,8,.94);color:#fff;padding:6px 10px;border-radius:4px;border-left:3px solid rgba(220,50,50,.8);font-size:12px;line-height:1.5;max-width:260px;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(0,0,0,.4);z-index:100;pointer-events:none;letter-spacing:.3px}.gs-menu-modal{width:100%;height:100vh;z-index:12}.gs-label-input-label{font-size:13px;letter-spacing:1px}.gs-menu-divider{background-color:#aaa;padding:0;margin:5px 0;height:1px;list-style-type:none}.gs-menu-btn{position:absolute;background-color:rgba(128,128,128,.3);border:1px solid #ccc;border-radius:50%;cursor:pointer;font-size:12px;font-weight:700;line-height:1;color:#888;width:18px;height:18px;padding:0;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s ease;z-index:2}.gs-context-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-context-menu:hover{opacity:1}.gs-context-menu .gs-menu-items{color:#555;margin:0;padding:0;min-width:250px}.gs-menu-item{padding:5px 10px;list-style-type:none;display:flex}.gs-menu-item.gs-enabled{cursor:pointer}.gs-menu-item.gs-enabled:hover{background-color:#eee}.gs-menu-item.gs-disabled{opacity:.5;cursor:not-allowed}.gs-menu-item .gs-menu-name{font-size:13px;letter-spacing:1px;flex:1}.gs-menu-shortcut{font-size:10px;line-height:20px;color:#999}.gs-menu-shortcut:before{content:\"( \"}.gs-menu-shortcut:after{content:\" )\"}.gs-menu-shortcut .gs-menu-underline{text-decoration:underline}.gs-column-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-column-menu:hover{opacity:1}.gs-column-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-column-menu .gs-column-menu-sort{align-items:center}.gs-column-menu .gs-column-menu-sort .gs-sort-buttons{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-column-menu-sort .gs-sort-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-column-menu-sort .gs-sort-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-label{padding:5px 10px}.gs-column-menu .gs-label-input-row{display:flex;gap:4px;align-items:center}.gs-column-menu .gs-label-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:100px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-label-input:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-label-apply-btn{font-size:12px;padding:4px 8px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;font-weight:700;letter-spacing:.5px}.gs-column-menu .gs-label-apply-btn:hover:not(:disabled){border-color:#555}.gs-column-menu .gs-label-apply-btn:disabled{opacity:.5;cursor:not-allowed}.gs-column-menu .gs-column-menu-filter{padding:5px 10px;list-style-type:none;font-size:13px}.gs-column-menu .gs-filter-header{display:flex;align-items:center;gap:8px}.gs-column-menu .gs-filter-header .gs-filter-add-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:rgba(180,180,180,.1);cursor:pointer;color:#555;letter-spacing:1px}.gs-column-menu .gs-filter-header .gs-filter-add-btn:hover{border-color:#555}.gs-column-menu .gs-filter-mode-toggle{display:flex;gap:6px;margin-left:auto}.gs-column-menu .gs-filter-mode-toggle label{display:flex;align-items:center;gap:3px;font-size:11px;font-weight:700;letter-spacing:.5px;color:#888;cursor:pointer;user-select:none}.gs-column-menu .gs-filter-mode-toggle label input[type=radio]{margin:0;cursor:pointer}.gs-column-menu .gs-filter-mode-toggle label.gs-active{color:#07f}.gs-column-menu .gs-filter-mode-toggle.gs-disabled{opacity:.4;pointer-events:none}.gs-column-menu .gs-filter-conditions{display:flex;flex-direction:column;gap:5px;margin-top:6px;max-height:200px;overflow-y:auto}.gs-column-menu .gs-filter-condition-row{display:flex;gap:4px;align-items:normal}.gs-column-menu .gs-filter-method-select{font-size:12px;padding:4px 4px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;background-color:#fff;box-shadow:none;min-width:40px;max-width:80px;cursor:pointer}.gs-column-menu .gs-filter-method-select:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-filter-value-input{flex:1;font-size:13px;padding:4px 6px;border:none;border-bottom:1px solid #ccc;border-radius:0;outline:0;min-width:0;width:80px;background-color:transparent;box-shadow:none}.gs-column-menu .gs-filter-value-input:focus{border-bottom-color:#07f;outline:0;box-shadow:none}.gs-column-menu .gs-filter-remove-btn{font-size:12px;padding:0;border:none;border-radius:3px;background-color:transparent;cursor:pointer;color:#999;line-height:1;flex-shrink:0}.gs-column-menu .gs-filter-remove-btn:hover{color:#c33}.gs-column-menu .gs-filter-actions{display:flex;gap:4px;margin-top:10px;align-items:center}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#c33;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-all-btn:hover{border-color:#c33}.gs-column-menu .gs-filter-actions .gs-filter-actions-right{display:flex;gap:4px;margin-left:auto}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn{font-size:12px;padding:3px 9px;border:1px solid transparent;border-radius:3px;background-color:transparent;cursor:pointer;color:#e08000;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-reset-btn:hover{border-color:#e08000}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn{font-size:12px;padding:3px 6px;border:1px solid transparent;border-radius:3px;background-color:transparent;color:#07f;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:#07f}.gs-column-menu-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px;gap:12px;min-width:180px}.gs-column-menu-waiting .gs-waiting-message{font-size:13px;font-weight:700;color:#555;letter-spacing:.5px}.gs-column-menu-waiting .gs-waiting-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:#07f;border-radius:50%;animation:spin .8s linear infinite}.gs-column-menu-waiting .gs-waiting-cancel-btn{font-size:12px;padding:4px 18px;border:1px solid #c33;border-radius:3px;background-color:transparent;color:#c33;cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu-waiting .gs-waiting-cancel-btn:hover{background-color:#c33;color:#fff}.gs-column-menu-btn{right:4px;top:50%;transform:translateY(-50%)}.gs-column-menu-btn.gs-filtered{opacity:1;background-color:#e0edff;border-color:#07f;color:#07f}.gs-column-menu-btn.gs-active{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-top:hover .gs-column-menu-btn{opacity:1}.gs-row-menu{z-index:12;position:fixed;background-color:#fff;padding:5px 0;border-radius:5px;box-shadow:rgba(60,64,67,.3) 0 1px 2px 0,rgba(60,64,67,.15) 0 1px 3px 1px;opacity:.9;transition:opacity .15s ease}.gs-row-menu:hover{opacity:1}.gs-row-menu ul{color:#555;margin:0;padding:0;min-width:200px}.gs-row-menu .gs-row-fixed-toggle{display:flex;align-items:center;gap:6px}.gs-row-menu .gs-row-fixed-check{font-size:12px;width:14px;text-align:center;color:rgba(0,119,255,.1)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:#07f}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-left:hover .gs-row-menu-btn{opacity:1}.gs-corner-menu-btn{bottom:2px;right:2px}.gs-corner-menu-btn:hover{opacity:1;background-color:#d0e0ff;border-color:#07f;color:#07f}.gs-th-left.gs-th-top:hover .gs-corner-menu-btn{opacity:1}.gs-editor-hl{padding:0 2px!important;position:absolute;font-family:monospace,Arial;font-size:12px;line-height:24px;letter-spacing:1px}.gs-formula-bar-editor-inner{position:relative;display:table-cell}.gs-editor{opacity:0;z-index:-1}.gs-editor .gs-editor-inner{position:relative}.gs-editor .gs-editor-hl{box-sizing:content-box;border:solid 2px #07f;margin:-2px -1px}.gs-editor textarea{width:100%;padding:0 2px!important;position:absolute;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;top:0;left:0;border:none;outline:0;background-color:transparent;color:transparent;resize:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;overflow:hidden;cursor:default;white-space:pre;height:auto}.gs-editor.gs-editing{z-index:11;opacity:1}.gs-editor.gs-editing .gs-cell-label{pointer-events:none;font-family:math,monospace,serif;position:absolute;top:0;right:0;margin-top:-15px;margin-right:-2px;padding:0 2px;font-size:10px;background-color:rgba(0,119,255,.75);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:table;align-items:center;justify-content:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box}.gs-formula-bar .gs-selecting-address{display:table-cell;vertical-align:middle;width:60px;color:rgba(200,200,200);font-size:13px;text-align:center}.gs-formula-bar[data-spill=true]{background-color:rgba(0,119,255,.04)}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:rgba(80,160,255,.9);font-style:italic}.gs-formula-bar[data-spill=true] .gs-selecting-address::after{content:\"\\2196\";margin-left:2px;font-style:normal;font-size:9px}.gs-formula-bar .gs-fx{display:table-cell;vertical-align:middle;width:30px;color:rgba(200,200,200);font-style:italic;font-family:cursive;text-align:center;border-left:solid 1px rgba(128,128,128,.5);font-size:15px}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all}.gs-formula-bar textarea{position:relative;z-index:1;width:100%;vertical-align:bottom;color:transparent;border:none;background-color:transparent;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;resize:vertical;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all}.gs-token-type-INVALID_REF{color:red}.gs-token-type-VALUE.gs-token-entity-type-boolean,.gs-token-type-VALUE.gs-token-entity-type-number{color:#39f}.gs-token-type-VALUE.gs-token-entity-type-string{color:#090}.gs-editor-options{position:fixed;z-index:1000;padding:4px;background:var(--gs-bg,#fff);box-shadow:0 4px 12px rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-radius:6px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;overflow:visible}.gs-editor-option{position:relative;cursor:pointer;list-style:none;padding:6px 12px;font-size:13px;border-radius:4px;color:#333;margin-bottom:2px}.gs-editor-option-content{display:flex;justify-content:space-between;width:100%;align-items:center}.gs-editor-option-tab{font-size:10px;color:#aaa;margin-left:8px;padding:2px 4px;border:1px solid #ddd;border-radius:3px;background:#f9f9f9}.gs-editor-option:last-child{margin-bottom:0}.gs-editor-option:hover{background-color:#f5f5f5}.gs-editor-option-selected{background-color:#ebf5ff;color:#06c;font-weight:500}.gs-editor-option-selected:hover{background-color:#e0f0ff}.gs-fn-guide1{position:absolute;top:-4px;left:calc(100% + 8px);background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333}.gs-fn-guide1-tooltip{margin-bottom:8px;line-height:1.4;font-size:13px}.gs-fn-guide1-example{font-family:monospace;font-weight:600;font-size:13px;margin-bottom:8px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.gs-fn-guide1-desc{font-size:13px;color:#555;margin-bottom:12px;line-height:1.4}.gs-fn-guide1-desc p{margin:0 0 6px 0}.gs-fn-guide1-desc p:last-child{margin-bottom:0}.gs-fn-guide1-args{border-top:1px solid #eee;padding-top:10px}.gs-fn-guide1-arg{margin-bottom:6px;line-height:1.4;font-size:12px}.gs-fn-guide1-arg-name{font-weight:600;color:#06c}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:#06c}.gs-fn-guide1-arg-type{color:#06c;padding:0 4px;background:#ebf5ff;border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide1-arg-desc{color:#666}.gs-fn-guide-category{position:absolute;top:-11px;right:8px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:4px;background:#e8eaf6;color:#3949ab;border:1px solid #c5cae9;white-space:nowrap}.gs-fn-guide-category.gs-fn-guide-category-math{background:#e3f2fd;color:#1565c0;border-color:#bbdefb}.gs-fn-guide-category.gs-fn-guide-category-statistics{background:#e8f5e9;color:#2e7d32;border-color:#c8e6c9}.gs-fn-guide-category.gs-fn-guide-category-text{background:#fff8e1;color:#f57f17;border-color:#ffecb3}.gs-fn-guide-category.gs-fn-guide-category-time{background:#fce4ec;color:#880e4f;border-color:#f8bbd0}.gs-fn-guide-category.gs-fn-guide-category-lookup{background:#f3e5f5;color:#6a1b9a;border-color:#e1bee7}.gs-fn-guide-category.gs-fn-guide-category-logical{background:#e0f2f1;color:#00695c;border-color:#b2dfdb}.gs-fn-guide-category.gs-fn-guide-category-information{background:#e0f7fa;color:#006064;border-color:#b2ebf2}.gs-fn-guide-category.gs-fn-guide-category-finance{background:#fff3e0;color:#e65100;border-color:#ffe0b2}.gs-fn-guide-category.gs-fn-guide-category-engineering{background:#efebe9;color:#4e342e;border-color:#d7ccc8}.gs-fn-guide-category.gs-fn-guide-category-other{background:#f5f5f5;color:#616161;border-color:#e0e0e0}.gs-editor[data-mode=dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor[data-mode=dark] .gs-editor-option{color:#ccc}.gs-editor[data-mode=dark] .gs-editor-option:hover{background-color:#333}.gs-editor[data-mode=dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor[data-mode=dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor[data-mode=dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor[data-mode=dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor[data-mode=dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor[data-mode=dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor[data-mode=dark] .gs-fn-guide1-args{border-color:#333}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor[data-mode=dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor[data-mode=dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor[data-mode=dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor[data-mode=dark] .gs-fn-guide2-desc{color:#aaa;border-top-color:#333}.gs-fn-guide2{position:fixed;left:0;background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.12);border-radius:6px;padding:12px 16px;width:280px;z-index:1000;cursor:default;white-space:normal;color:#333;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;transition:opacity .1s ease-in-out}.gs-fn-guide2.gs-fn-guide2-hidden{opacity:0!important;pointer-events:none!important}.gs-fn-guide2-name{font-family:monospace;font-weight:700;font-size:13px;color:#1a1a1a;background:#f5f5f5;padding:6px 8px;border-radius:4px;border:1px solid #eee;display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%;box-sizing:border-box;margin-bottom:8px}.gs-fn-guide2-args-inline{font-size:13px;font-family:monospace;line-height:1.5;margin-bottom:8px;color:#666}.gs-fn-guide2-args-inline span{transition:all .2s ease-in-out}.gs-fn-guide2 .gs-active-arg{font-weight:700;color:#06c;background-color:#ebf5ff;padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:#06c;padding:0 4px;background:#ebf5ff;border-radius:3px;font-size:11px;margin:0 4px}.gs-fn-guide2-desc{font-size:12px;color:#555;line-height:1.4;border-top:1px solid #eee;padding-top:8px;margin-top:4px}.gs-fn-guide2-desc p{margin:0}.gs-fn-guide2-desc-more{font-style:italic;color:#888;margin-top:4px!important;font-size:11px}.gs-adjuster{padding:0}.gs-table{margin:0}.gs-tabular{overflow:auto;display:block;box-sizing:border-box;position:relative}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-th{z-index:2;padding:0;position:sticky;font-size:13px;font-weight:400;box-sizing:border-box;vertical-align:top}.gs-th .gs-resizer{position:absolute;border-color:transparent;box-sizing:border-box;z-index:2}.gs-th .gs-resizer:hover{background-color:#07f}.gs-th .gs-resizer.gs-protected{display:none}.gs-th-inner{height:100%;box-sizing:border-box;vertical-align:middle;overflow:hidden;display:flex;align-items:center;justify-content:center}.gs-th-inner-wrap{height:100%;box-sizing:border-box;background-color:transparent}.gs-th-top{top:0;overflow:hidden}.gs-th-top .gs-resizer{top:0;right:0;width:3px;cursor:e-resize}.gs-th-top .gs-resizer.gs-dragging{border-right-style:dotted;height:1000000px!important;cursor:e-resize}.gs-th-left{left:0;overflow:hidden;min-width:30px;border-top:solid 1px #ddd}.gs-th-left .gs-resizer{left:0;bottom:0;height:3px;cursor:n-resize}.gs-th-left .gs-resizer.gs-dragging{border-bottom-style:dotted;width:1000000px!important;cursor:n-resize}.gs-th-top.gs-th-left{top:0;left:0;z-index:3;border:none!important}.gs-th-left.gs-filter-fixed .gs-th-inner::before{content:'\u2039\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\00a0\u203A'}.gs-col-addr{position:absolute;top:2px;right:4px;font-size:9px;opacity:.5;line-height:1;letter-spacing:.3px;pointer-events:none}.gs-search-bar{width:100%;display:flex;align-items:center;border-top:solid 1px rgba(128,128,128,.3);border-left:solid 1px rgba(128,128,128,.3);border-right:solid 1px rgba(128,128,128,.3);box-sizing:border-box;background-color:rgba(200,50,0,.2)}.gs-search-bar.gs-search-found{background-color:rgba(0,200,100,.2)}.gs-search-bar .gs-search-bar-inner{border-left:solid 1px rgba(128,128,128,.5)}.gs-search-bar .gs-search-bar-icon{border-left:solid 1px rgba(128,128,128,.3);display:flex;align-items:center;justify-content:center;width:30px;flex-shrink:0}.gs-search-bar .gs-search-input-wrapper{flex-grow:1;position:relative;display:flex;align-items:center;height:100%}.gs-search-bar .gs-search-input-ghost{position:absolute;left:2px;right:2px;top:0;bottom:0;pointer-events:none;font-size:12px;font-family:monospace,Arial;line-height:24px;letter-spacing:1px;white-space:pre-wrap;word-break:break-all;color:transparent;overflow:hidden}.gs-search-bar .gs-search-input-ghost .gs-search-ghost-hint{color:#aaa}.gs-search-bar textarea{background-color:transparent;border:none;padding:0 2px;box-sizing:border-box;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:12px;font-family:monospace,Arial;height:24px;line-height:24px;min-height:24px;letter-spacing:1px;caret-color:rgba(128,128,128);white-space:pre-wrap;word-break:break-all;flex-grow:1;width:100%;resize:none}.gs-search-progress{color:#999;font-size:13px;width:60px;flex-shrink:0;white-space:nowrap;text-align:center}.gs-search-close{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;flex-shrink:0}.gs-search-buttons{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}.gs-search-button{display:inline-flex;cursor:pointer;margin:0 2px}.gs-search-button span{display:inline-block;font-size:11px;padding:3px 5px;background-color:rgba(128,128,128,.1);border:1px solid rgba(128,128,128,.3);border-radius:3px;transition:all .15s ease;line-height:1}.gs-search-button span:hover{background-color:rgba(128,128,128,.2)}.gs-search-button span.gs-search-button-on{color:#07f;background-color:rgba(200,200,255,.5);border-color:#07f}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes gs-pending-slide{0%{left:-40%}100%{left:100%}}@keyframes gs-pending-pulse{0%{left:0;width:0}50%{left:0;width:100%}100%{left:100%;width:0}}@keyframes gs-flash{0%{opacity:0}20%{opacity:1}100%{opacity:0}}.gs-flash-overlay{position:absolute;inset:0;pointer-events:none;z-index:9999;background:rgba(0,119,255,.15);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}";
3
3
  //# sourceMappingURL=minified.d.ts.map
package/dist/types.d.ts CHANGED
@@ -1,9 +1,22 @@
1
- import { UserTable, Table } from './lib/table';
2
- import { FC, RefObject, CSSProperties, KeyboardEvent } from 'react';
3
- import { HubType, TransmitProps } from './lib/hub';
1
+ import { UserSheet, Sheet, SheetLimits } from './lib/sheet';
2
+ import { RefObject, CSSProperties, KeyboardEvent } from 'react';
3
+ import { BookType, TransmitProps } from './lib/book';
4
4
  import { PolicyType } from './policy/core';
5
5
  import { Dispatcher } from './store';
6
- export type RefEvaluation = 'COMPLETE' | 'TABLE' | 'RAW' | 'SYSTEM';
6
+ import { ContextMenuItemDescriptor, RowMenuItemDescriptor, ColMenuItemDescriptor } from './lib/menu';
7
+ /**
8
+ * Controls how formula values are resolved when reading a cell.
9
+ *
10
+ * - `'RESOLVED'` (default) — Fully evaluates formulas to a scalar value.
11
+ * Range references (e.g. `=C1:F1`) are unwrapped to the top-left scalar.
12
+ * - `'EVALUATED'` — Evaluates formulas one level deep but keeps range/Sheet
13
+ * results intact. Use this when you need the `Sheet` object a range formula
14
+ * produces (e.g. in `renderSheet` policy hooks).
15
+ * - `'RAW'` — Returns the formula string with cell addresses resolved to their
16
+ * display form; does not evaluate.
17
+ * - `'SYSTEM'` — Returns the raw stored value with no evaluation or transformation.
18
+ */
19
+ export type Resolution = 'RESOLVED' | 'EVALUATED' | 'RAW' | 'SYSTEM';
7
20
  export type Y = number;
8
21
  export type X = number;
9
22
  export type Height = number;
@@ -28,7 +41,7 @@ export type CursorStateType = {
28
41
  selectingTo: PointType;
29
42
  };
30
43
  export type FeedbackType = (args: {
31
- table: UserTable;
44
+ sheet: UserSheet;
32
45
  points?: CursorStateType;
33
46
  }) => void;
34
47
  export type ModeType = 'light' | 'dark';
@@ -43,13 +56,17 @@ export type System = {
43
56
  id?: string;
44
57
  sheetId?: number;
45
58
  changedTime?: number;
46
- /** Cumulative top offset (px) from table origin. Set on row-header cells (x=0). */
59
+ /** Cumulative top offset (px) from sheet origin. Set on row-header cells (x=0). */
47
60
  offsetTop?: number;
48
- /** Cumulative left offset (px) from table origin. Set on col-header cells (y=0). */
61
+ /** Cumulative left offset (px) from sheet origin. Set on col-header cells (y=0). */
49
62
  offsetLeft?: number;
50
63
  tmpAsyncCaches?: Record<string, AsyncCache>;
51
64
  /** Address of the origin cell whose array formula spilled its value into this cell. */
52
65
  spilledFrom?: Address;
66
+ /** IDs of cells whose formula depends on this cell. */
67
+ dependents?: Set<Id>;
68
+ /** IDs of cells that this cell's formula depends on. */
69
+ dependencies?: Set<Id>;
53
70
  };
54
71
  export type FilterConditionMethod = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'blank' | 'nonblank' | 'includes' | 'excludes';
55
72
  export type FilterCondition = {
@@ -72,13 +89,16 @@ export type CellType<T = any, Custom = any> = {
72
89
  custom?: Custom;
73
90
  formulaEnabled?: boolean;
74
91
  prevention?: OperationType;
75
- _sys?: System;
76
92
  /** Cached result from an async formula. Stored directly on the cell for serializability. */
77
93
  asyncCaches?: Record<string, AsyncCache>;
78
94
  /** Filter configuration. Set on col-header cells (y=0). */
79
95
  filter?: FilterConfig;
80
96
  /** Whether this row is hidden by a filter. Set on row-header cells (x=0). */
81
97
  filtered?: boolean;
98
+ /** If true, this row is excluded from sort and stays at its original position. Set on row-header cells (x=0). */
99
+ sortFixed?: boolean;
100
+ /** If true, this row is always visible regardless of active filters. Set on row-header cells (x=0). */
101
+ filterFixed?: boolean;
82
102
  };
83
103
  export type RawCellType = {
84
104
  value?: string;
@@ -95,19 +115,20 @@ export type CellsByAddressType = {
95
115
  export type CellsByIdType = {
96
116
  [id: Id]: CellType | undefined;
97
117
  };
118
+ export type SystemsByIdType = {
119
+ [id: Id]: System;
120
+ };
98
121
  export type OptionsType = {
99
122
  sheetHeight?: number;
100
123
  sheetWidth?: number;
101
124
  sheetResize?: CSSProperties['resize'];
102
125
  editingOnEnter?: boolean;
103
- showAddress?: boolean;
104
126
  showFormulaBar?: boolean;
105
- minNumRows?: number;
106
- maxNumRows?: number;
107
- minNumCols?: number;
108
- maxNumCols?: number;
127
+ limits?: SheetLimits;
109
128
  mode?: ModeType;
110
- contextMenuItems?: FC<ContextMenuProps>[];
129
+ contextMenu?: ContextMenuItemDescriptor[];
130
+ rowMenu?: RowMenuItemDescriptor[];
131
+ colMenu?: ColMenuItemDescriptor[];
111
132
  };
112
133
  export type RangeType = {
113
134
  start: number;
@@ -122,7 +143,7 @@ export type ExtraPointType = {
122
143
  x: X;
123
144
  absY?: boolean;
124
145
  absX?: boolean;
125
- table?: Table;
146
+ sheet?: Sheet;
126
147
  };
127
148
  export type PositionType = {
128
149
  y: Y;
@@ -143,7 +164,7 @@ export type AreaType = {
143
164
  export type WriterType = (value: string) => void;
144
165
  export type StoreType = {
145
166
  sheetId: number;
146
- tableReactive: RefObject<Table>;
167
+ sheetReactive: RefObject<Sheet>;
147
168
  rootRef: RefObject<HTMLDivElement>;
148
169
  flashRef: RefObject<HTMLDivElement>;
149
170
  mainRef: RefObject<HTMLDivElement>;
@@ -163,10 +184,6 @@ export type StoreType = {
163
184
  dragging: boolean;
164
185
  sheetHeight: number;
165
186
  sheetWidth: number;
166
- minNumRows: number;
167
- maxNumRows: number;
168
- minNumCols: number;
169
- maxNumCols: number;
170
187
  mode: ModeType;
171
188
  searchQuery?: string;
172
189
  searchCaseSensitive: boolean;
@@ -175,9 +192,10 @@ export type StoreType = {
175
192
  matchingCells: string[];
176
193
  matchingCellIndex: number;
177
194
  editingOnEnter: boolean;
178
- showAddress: boolean;
179
195
  contextMenuPosition: PositionType;
180
- contextMenuItems: FC<ContextMenuProps>[];
196
+ contextMenu: ContextMenuItemDescriptor[];
197
+ rowMenu: RowMenuItemDescriptor[];
198
+ colMenu: ColMenuItemDescriptor[];
181
199
  resizingPositionY: [Y, Y, Y];
182
200
  resizingPositionX: [X, X, X];
183
201
  columnMenuState: {
@@ -194,22 +212,21 @@ export type Manager<T> = {
194
212
  instance: T;
195
213
  sync: T extends StoreType ? Dispatcher : (instance: T) => void;
196
214
  };
197
- export type Connector = {
198
- tableManager: {
199
- table: UserTable;
200
- sync: (table: UserTable) => void;
201
- };
202
- storeManager: {
203
- store: StoreType;
204
- sync: (store: StoreType) => void;
205
- dispatch: Dispatcher;
206
- };
215
+ export type SheetHandle = {
216
+ sheet: UserSheet;
217
+ apply: (sheet: UserSheet) => void;
218
+ };
219
+ export type StoreHandle = {
220
+ store: StoreType;
221
+ apply: (store: StoreType) => void;
222
+ dispatch: Dispatcher;
207
223
  };
208
224
  export type Props = {
209
225
  initialCells: CellsByAddressType;
210
226
  sheetName?: string;
211
- hub?: HubType;
212
- connector?: RefObject<Connector | null>;
227
+ book?: BookType;
228
+ sheetRef?: RefObject<SheetHandle | null>;
229
+ storeRef?: RefObject<StoreHandle | null>;
213
230
  options?: OptionsType;
214
231
  className?: string;
215
232
  style?: CSSProperties;
@@ -349,5 +366,4 @@ export type EditorEventWithNativeEvent = EditorEvent & {
349
366
  isComposing: boolean;
350
367
  };
351
368
  };
352
- export type ContextMenuProps = StoreDispatchType;
353
369
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gridsheet/preact-core",
3
- "version": "3.0.0-rc.2",
3
+ "version": "3.0.0-rc.5",
4
4
  "description": "Spreadsheet component for Preact",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",