@gridsheet/preact-core 3.0.0-rc.1 → 3.0.0-rc.10

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 (150) hide show
  1. package/LICENSE +190 -0
  2. package/dist/hooks-DPIr6WaL.mjs +1434 -0
  3. package/dist/hooks-DPIr6WaL.mjs.map +1 -0
  4. package/dist/index.d.ts +3 -32
  5. package/dist/index.js +1876 -10670
  6. package/dist/index.js.map +1 -1
  7. package/dist/react-core/src/components/ColumnMenuFilterSection.d.ts +5 -0
  8. package/dist/react-core/src/components/ColumnMenuLabelSection.d.ts +5 -0
  9. package/dist/react-core/src/components/ColumnMenuSortSection.d.ts +5 -0
  10. package/dist/react-core/src/components/ContextMenu.d.ts +2 -0
  11. package/dist/{components → react-core/src/components}/FunctionGuide.d.ts +4 -4
  12. package/dist/react-core/src/components/GridSheet.d.ts +7 -0
  13. package/dist/react-core/src/components/MenuItem.d.ts +18 -0
  14. package/dist/{components → react-core/src/components}/PluginBase.d.ts +2 -2
  15. package/dist/react-core/src/components/StoreObserver.d.ts +14 -0
  16. package/dist/{components → react-core/src/components}/useAutocomplete.d.ts +1 -3
  17. package/dist/react-core/src/index.d.ts +17 -0
  18. package/dist/react-core/src/lib/clipboard.d.ts +18 -0
  19. package/dist/{components → react-core/src/lib}/hooks.d.ts +2 -0
  20. package/dist/react-core/src/lib/menu.d.ts +99 -0
  21. package/dist/react-core/src/lib/style.d.ts +12 -0
  22. package/dist/react-core/src/policy/checkbox.d.ts +3 -0
  23. package/dist/react-core/src/spellbook.d.ts +6 -0
  24. package/dist/{store → react-core/src/store}/actions.d.ts +3 -3
  25. package/dist/react-core/src/store/applyers.d.ts +40 -0
  26. package/dist/react-core/src/store/helpers.d.ts +33 -0
  27. package/dist/react-core/src/types.d.ts +101 -0
  28. package/dist/spellbook.d.ts +2 -0
  29. package/dist/spellbook.js +10 -0
  30. package/dist/spellbook.js.map +1 -0
  31. package/package.json +26 -10
  32. package/dist/components/ContextMenu.d.ts +0 -21
  33. package/dist/components/GridSheet.d.ts +0 -5
  34. package/dist/components/StoreObserver.d.ts +0 -11
  35. package/dist/constants.d.ts +0 -17
  36. package/dist/formula/evaluator.d.ts +0 -138
  37. package/dist/formula/functions/__async.d.ts +0 -62
  38. package/dist/formula/functions/__base.d.ts +0 -53
  39. package/dist/formula/functions/__utils.d.ts +0 -19
  40. package/dist/formula/functions/abs.d.ts +0 -9
  41. package/dist/formula/functions/acos.d.ts +0 -9
  42. package/dist/formula/functions/add.d.ts +0 -10
  43. package/dist/formula/functions/and.d.ts +0 -9
  44. package/dist/formula/functions/asin.d.ts +0 -9
  45. package/dist/formula/functions/atan.d.ts +0 -9
  46. package/dist/formula/functions/atan2.d.ts +0 -9
  47. package/dist/formula/functions/average.d.ts +0 -9
  48. package/dist/formula/functions/col.d.ts +0 -9
  49. package/dist/formula/functions/concat.d.ts +0 -9
  50. package/dist/formula/functions/concatenate.d.ts +0 -9
  51. package/dist/formula/functions/cos.d.ts +0 -9
  52. package/dist/formula/functions/count.d.ts +0 -9
  53. package/dist/formula/functions/counta.d.ts +0 -9
  54. package/dist/formula/functions/countif.d.ts +0 -10
  55. package/dist/formula/functions/divide.d.ts +0 -9
  56. package/dist/formula/functions/eq.d.ts +0 -9
  57. package/dist/formula/functions/exp.d.ts +0 -9
  58. package/dist/formula/functions/gt.d.ts +0 -9
  59. package/dist/formula/functions/gte.d.ts +0 -9
  60. package/dist/formula/functions/hlookup.d.ts +0 -10
  61. package/dist/formula/functions/if.d.ts +0 -9
  62. package/dist/formula/functions/iferror.d.ts +0 -12
  63. package/dist/formula/functions/index.d.ts +0 -10
  64. package/dist/formula/functions/len.d.ts +0 -9
  65. package/dist/formula/functions/lenb.d.ts +0 -9
  66. package/dist/formula/functions/ln.d.ts +0 -9
  67. package/dist/formula/functions/log.d.ts +0 -9
  68. package/dist/formula/functions/log10.d.ts +0 -9
  69. package/dist/formula/functions/lt.d.ts +0 -9
  70. package/dist/formula/functions/lte.d.ts +0 -9
  71. package/dist/formula/functions/match.d.ts +0 -10
  72. package/dist/formula/functions/match.test.d.ts +0 -2
  73. package/dist/formula/functions/max.d.ts +0 -9
  74. package/dist/formula/functions/min.d.ts +0 -9
  75. package/dist/formula/functions/minus.d.ts +0 -10
  76. package/dist/formula/functions/mod.d.ts +0 -9
  77. package/dist/formula/functions/multiply.d.ts +0 -9
  78. package/dist/formula/functions/ne.d.ts +0 -9
  79. package/dist/formula/functions/not.d.ts +0 -9
  80. package/dist/formula/functions/now.d.ts +0 -9
  81. package/dist/formula/functions/or.d.ts +0 -9
  82. package/dist/formula/functions/pi.d.ts +0 -9
  83. package/dist/formula/functions/power.d.ts +0 -9
  84. package/dist/formula/functions/product.d.ts +0 -9
  85. package/dist/formula/functions/radians.d.ts +0 -9
  86. package/dist/formula/functions/rand.d.ts +0 -9
  87. package/dist/formula/functions/round.d.ts +0 -9
  88. package/dist/formula/functions/rounddown.d.ts +0 -9
  89. package/dist/formula/functions/roundup.d.ts +0 -9
  90. package/dist/formula/functions/row.d.ts +0 -9
  91. package/dist/formula/functions/sin.d.ts +0 -9
  92. package/dist/formula/functions/sqrt.d.ts +0 -9
  93. package/dist/formula/functions/sum.d.ts +0 -9
  94. package/dist/formula/functions/sumif.d.ts +0 -10
  95. package/dist/formula/functions/tan.d.ts +0 -9
  96. package/dist/formula/functions/uminus.d.ts +0 -9
  97. package/dist/formula/functions/vlookup.d.ts +0 -10
  98. package/dist/formula/mapping.d.ts +0 -10
  99. package/dist/formula/solver.d.ts +0 -26
  100. package/dist/lib/autofill.d.ts +0 -17
  101. package/dist/lib/cell.d.ts +0 -15
  102. package/dist/lib/clipboard.d.ts +0 -3
  103. package/dist/lib/coords.d.ts +0 -10
  104. package/dist/lib/date.d.ts +0 -2
  105. package/dist/lib/filter.d.ts +0 -7
  106. package/dist/lib/hub.d.ts +0 -136
  107. package/dist/lib/input.d.ts +0 -15
  108. package/dist/lib/operation.d.ts +0 -34
  109. package/dist/lib/palette.d.ts +0 -2
  110. package/dist/lib/reference.d.ts +0 -13
  111. package/dist/lib/sheet.d.ts +0 -3
  112. package/dist/lib/spatial.d.ts +0 -94
  113. package/dist/lib/table.d.ts +0 -463
  114. package/dist/lib/time.d.ts +0 -25
  115. package/dist/lib/virtualization.d.ts +0 -22
  116. package/dist/parsers/core.d.ts +0 -38
  117. package/dist/policy/core.d.ts +0 -54
  118. package/dist/renderers/checkbox.d.ts +0 -5
  119. package/dist/renderers/core.d.ts +0 -66
  120. package/dist/renderers/thousand_separator.d.ts +0 -3
  121. package/dist/sentinels.d.ts +0 -23
  122. package/dist/store/dispatchers.d.ts +0 -36
  123. package/dist/store/helpers.d.ts +0 -25
  124. package/dist/styles/embedder.d.ts +0 -2
  125. package/dist/styles/minified.d.ts +0 -3
  126. package/dist/styles/utils.d.ts +0 -52
  127. package/dist/types.d.ts +0 -365
  128. package/dist/utils.d.ts +0 -2
  129. /package/dist/{components → react-core/src/components}/Cell.d.ts +0 -0
  130. /package/dist/{components → react-core/src/components}/CellStateOverlay.d.ts +0 -0
  131. /package/dist/{components → react-core/src/components}/ColumnMenu.d.ts +0 -0
  132. /package/dist/{components → react-core/src/components}/Editor.d.ts +0 -0
  133. /package/dist/{components → react-core/src/components}/EditorOptions.d.ts +0 -0
  134. /package/dist/{components → react-core/src/components}/Emitter.d.ts +0 -0
  135. /package/dist/{components → react-core/src/components}/Fixed.d.ts +0 -0
  136. /package/dist/{components → react-core/src/components}/FormulaBar.d.ts +0 -0
  137. /package/dist/{components → react-core/src/components}/HeaderCellLeft.d.ts +0 -0
  138. /package/dist/{components → react-core/src/components}/HeaderCellTop.d.ts +0 -0
  139. /package/dist/{components → react-core/src/components}/Resizer.d.ts +0 -0
  140. /package/dist/{components → react-core/src/components}/RowMenu.d.ts +0 -0
  141. /package/dist/{components → react-core/src/components}/ScrollHandle.d.ts +0 -0
  142. /package/dist/{components → react-core/src/components}/SearchBar.d.ts +0 -0
  143. /package/dist/{components → react-core/src/components}/Tabular.d.ts +0 -0
  144. /package/dist/{components → react-core/src/components}/svg/AddIcon.d.ts +0 -0
  145. /package/dist/{components → react-core/src/components}/svg/Base.d.ts +0 -0
  146. /package/dist/{components → react-core/src/components}/svg/CloseIcon.d.ts +0 -0
  147. /package/dist/{components → react-core/src/components}/svg/SearchIcon.d.ts +0 -0
  148. /package/dist/{lib → react-core/src/lib}/events.d.ts +0 -0
  149. /package/dist/{lib → react-core/src/lib}/paste.d.ts +0 -0
  150. /package/dist/{store → react-core/src/store}/index.d.ts +0 -0
@@ -1,5 +0,0 @@
1
- import { RenderProps } from './core';
2
- export declare const CheckboxRendererMixin: {
3
- bool({ value, sync, table, point }: RenderProps<boolean>): any;
4
- };
5
- //# sourceMappingURL=checkbox.d.ts.map
@@ -1,66 +0,0 @@
1
- import { CellType, PointType } from '../types';
2
- import { Table, UserTable } from '../lib/table';
3
- import { TimeDelta } from '../lib/time';
4
- type Condition = (value: any) => boolean;
5
- type Stringify = (value: any) => string;
6
- export type Props = {
7
- condition?: Condition;
8
- complement?: Stringify;
9
- mixins?: RendererMixinType[];
10
- };
11
- export type RendererCallProps = {
12
- table: Table;
13
- point: PointType;
14
- sync?: (table: UserTable) => void;
15
- };
16
- export type RenderProps<T extends any = any> = {
17
- value: T;
18
- cell?: CellType<T>;
19
- table: Table;
20
- point: PointType;
21
- sync?: (table: UserTable) => void;
22
- };
23
- export interface RendererMixinType {
24
- datetimeFormat?: string;
25
- dateFormat?: string;
26
- timeDeltaFormat?: string;
27
- decorate?(rendered: any, props: RenderProps): any;
28
- render?(props: RenderProps): any;
29
- stringify?(props: RenderProps): string;
30
- string?(props: RenderProps<string>): any;
31
- table?(props: RenderProps<Table>): any;
32
- bool?(props: RenderProps<boolean>): any;
33
- number?(props: RenderProps<number>): any;
34
- date?(props: RenderProps<Date>): any;
35
- timedelta?(props: RenderProps<TimeDelta>): any;
36
- array?(props: RenderProps<any[]>): any;
37
- object?(props: RenderProps<any>): any;
38
- null?(props: RenderProps<null | undefined>): any;
39
- }
40
- export declare class Renderer implements RendererMixinType {
41
- datetimeFormat: string;
42
- dateFormat: string;
43
- timeDeltaFormat: string;
44
- private condition?;
45
- private complement?;
46
- constructor(props?: Props);
47
- private applyMixins;
48
- call(props: RendererCallProps): any;
49
- decorate(rendered: any, props: RenderProps): any;
50
- render(props: RenderProps): any;
51
- pending(_props: RenderProps): any;
52
- stringify({ value, cell, table, point }: RenderProps): string;
53
- string({ value }: RenderProps<string>): any;
54
- table(props: RenderProps<Table>): any;
55
- bool({ value }: RenderProps<boolean>): any;
56
- number({ value }: RenderProps<number>): any;
57
- date({ value }: RenderProps<Date>): any;
58
- timedelta({ value }: RenderProps<TimeDelta>): string;
59
- array(props: RenderProps<any[]>): any;
60
- object({ value }: RenderProps<any>): any;
61
- null({}: RenderProps<null | undefined>): any;
62
- }
63
- export type RendererType = Renderer;
64
- export declare const defaultRenderer: Renderer;
65
- export {};
66
- //# sourceMappingURL=core.d.ts.map
@@ -1,3 +0,0 @@
1
- import { RendererMixinType } from './core';
2
- export declare const ThousandSeparatorRendererMixin: RendererMixinType;
3
- //# sourceMappingURL=thousand_separator.d.ts.map
@@ -1,23 +0,0 @@
1
- export declare class Sentinel {
2
- readonly code: string;
3
- readonly __isSentinel = true;
4
- constructor(code: string);
5
- is(obj: any): obj is this;
6
- static is(obj: any, code?: string): obj is Sentinel;
7
- }
8
- export declare const SOLVING: Sentinel;
9
- /**
10
- * Sentinel value representing an in-flight async formula computation.
11
- * Cells whose solved cache contains a Pending will render a loading indicator.
12
- * Dependent cells that encounter a Pending value also become pending.
13
- */
14
- export declare class Pending<T = unknown> {
15
- private static counter;
16
- private readonly id;
17
- readonly promise: Promise<T>;
18
- readonly __isPending = true;
19
- constructor(promise: Promise<T>);
20
- static is(obj: any): obj is Pending;
21
- toString(): string;
22
- }
23
- //# sourceMappingURL=sentinels.d.ts.map
@@ -1,36 +0,0 @@
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>;
35
- };
36
- //# sourceMappingURL=dispatchers.d.ts.map
@@ -1,25 +0,0 @@
1
- import { Table } from '../lib/table';
2
- import { PointType, StoreType } from '../types';
3
- export declare const restrictPoints: (store: StoreType, table: Table) => {
4
- choosing: PointType;
5
- selectingZone: {
6
- startY: number;
7
- startX: number;
8
- endY: number;
9
- endX: number;
10
- };
11
- };
12
- export declare const shouldTracking: (operation: string) => boolean;
13
- export declare const initSearchStatement: (table: Table, store: StoreType) => {
14
- matchingCells: never[];
15
- searchQuery?: undefined;
16
- matchingCellIndex?: undefined;
17
- choosing?: undefined;
18
- } | {
19
- matchingCells: string[];
20
- searchQuery: string;
21
- matchingCellIndex: number;
22
- choosing: PointType;
23
- };
24
- export declare const isXSheetFocused: (store: StoreType) => boolean;
25
- //# sourceMappingURL=helpers.d.ts.map
@@ -1,2 +0,0 @@
1
- export declare const embedStyle: () => void;
2
- //# sourceMappingURL=embedder.d.ts.map
@@ -1,3 +0,0 @@
1
- export declare const LAST_MODIFIED = 1772897729;
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 .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}.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-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-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:block;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: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-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
- //# sourceMappingURL=minified.d.ts.map
@@ -1,52 +0,0 @@
1
- import { CSSProperties } from 'react';
2
- type BorderStyleValue = string;
3
- interface BorderOptions {
4
- /**
5
- * Border CSS value to apply uniformly to all sides.
6
- * Individual sides (top, right, etc.) will override this if specified.
7
- *
8
- * Example: "1px solid #000"
9
- */
10
- all?: BorderStyleValue;
11
- /**
12
- * Border CSS value for the top side.
13
- *
14
- * Example: "2px dashed red"
15
- */
16
- top?: BorderStyleValue;
17
- /**
18
- * Border CSS value for the right side.
19
- */
20
- right?: BorderStyleValue;
21
- /**
22
- * Border CSS value for the bottom side.
23
- */
24
- bottom?: BorderStyleValue;
25
- /**
26
- * Border CSS value for the left side.
27
- */
28
- left?: BorderStyleValue;
29
- }
30
- /**
31
- * Generates a CSSProperties object with individual border styles.
32
- *
33
- * - If `all` is provided, it applies the same border style to all sides.
34
- * - If individual sides (top, right, bottom, left) are specified, they override `all`.
35
- * - Sides that are not specified will be omitted from the result,
36
- * which avoids unintentionally removing existing border styles during re-renders.
37
- * - The function does not output the shorthand `border` property, only individual sides.
38
- *
39
- * @param options Border configuration options.
40
- * @returns CSSProperties object with border styles.
41
- *
42
- * @example
43
- * makeBorder({ all: "1px solid #000" });
44
- * // → { borderTop: "1px solid #000", borderRight: "1px solid #000", borderBottom: "1px solid #000", borderLeft: "1px solid #000" }
45
- *
46
- * @example
47
- * makeBorder({ top: "2px dashed red", left: "1px solid blue" });
48
- * // → { borderTop: "2px dashed red", borderLeft: "1px solid blue" }
49
- */
50
- export declare function makeBorder(options: BorderOptions): CSSProperties;
51
- export {};
52
- //# sourceMappingURL=utils.d.ts.map
package/dist/types.d.ts DELETED
@@ -1,365 +0,0 @@
1
- import { RendererType } from './renderers/core';
2
- import { ParserType } from './parsers/core';
3
- import { UserTable, Table } from './lib/table';
4
- import { FC, RefObject, CSSProperties, KeyboardEvent } from 'react';
5
- import { HubType, TransmitProps } from './lib/hub';
6
- import { PolicyType } from './policy/core';
7
- import { Dispatcher } from './store';
8
- export type RefEvaluation = 'COMPLETE' | 'TABLE' | 'RAW' | 'SYSTEM';
9
- export type Y = number;
10
- export type X = number;
11
- export type Height = number;
12
- export type Width = number;
13
- export type ShapeType = {
14
- height: Height;
15
- width: Width;
16
- };
17
- export type RectType = {
18
- y: Y;
19
- x: X;
20
- height: Height;
21
- width: Width;
22
- };
23
- export type MatrixType<T = any> = T[][];
24
- export type Labeler = (n: number) => string;
25
- export type Renderers = {
26
- [s: string]: RendererType;
27
- };
28
- export type Parsers = {
29
- [s: string]: ParserType;
30
- };
31
- export type Labelers = {
32
- [s: string]: Labeler;
33
- };
34
- export type Policies = {
35
- [s: string]: PolicyType;
36
- };
37
- export type CursorStateType = {
38
- pointing: PointType;
39
- selectingFrom: PointType;
40
- selectingTo: PointType;
41
- };
42
- export type FeedbackType = (args: {
43
- table: UserTable;
44
- points?: CursorStateType;
45
- }) => void;
46
- export type ModeType = 'light' | 'dark';
47
- export type HeadersType = 'both' | 'vertical' | 'horizontal' | 'none';
48
- export type AsyncCache = {
49
- /** Cached result value from the async computation. */
50
- value: any;
51
- /** Absolute timestamp (ms since epoch) at which the cache expires. undefined means cache never expires. */
52
- expireTime?: number;
53
- };
54
- export type System = {
55
- id?: string;
56
- sheetId?: number;
57
- changedTime?: number;
58
- dependents?: Set<string>;
59
- /** Cumulative top offset (px) from table origin. Set on row-header cells (x=0). */
60
- offsetTop?: number;
61
- /** Cumulative left offset (px) from table origin. Set on col-header cells (y=0). */
62
- offsetLeft?: number;
63
- tmpAsyncCaches?: Record<string, AsyncCache>;
64
- };
65
- export type FilterConditionMethod = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'blank' | 'nonblank' | 'includes' | 'excludes';
66
- export type FilterCondition = {
67
- method: FilterConditionMethod;
68
- value: string[];
69
- };
70
- export type FilterConfig = {
71
- mode?: 'and' | 'or';
72
- conditions: FilterCondition[];
73
- };
74
- export type CellType<T = any, Custom = any> = {
75
- value?: T;
76
- style?: CSSProperties;
77
- justifyContent?: CSSProperties['justifyContent'];
78
- alignItems?: CSSProperties['alignItems'];
79
- label?: string;
80
- labeler?: string;
81
- width?: Width;
82
- height?: Height;
83
- renderer?: string;
84
- parser?: string;
85
- policy?: string;
86
- custom?: Custom;
87
- disableFormula?: boolean;
88
- prevention?: OperationType;
89
- _sys?: System;
90
- /** Cached result from an async formula. Stored directly on the cell for serializability. */
91
- asyncCaches?: Record<string, AsyncCache>;
92
- /** Filter configuration. Set on col-header cells (y=0). */
93
- filter?: FilterConfig;
94
- /** Whether this row is hidden by a filter. Set on row-header cells (x=0). */
95
- filtered?: boolean;
96
- };
97
- export type RawCellType = {
98
- value?: string;
99
- style?: CSSProperties;
100
- skip?: boolean;
101
- };
102
- export type CellPatchType = CellType;
103
- export type CellFilter = (cell: CellType) => boolean;
104
- export type CellsByAddressType = {
105
- [address: string]: CellType;
106
- };
107
- export type CellsByIdType = {
108
- [id: Id]: CellType | undefined;
109
- };
110
- export type OptionsType = {
111
- sheetHeight?: number;
112
- sheetWidth?: number;
113
- sheetResize?: CSSProperties['resize'];
114
- editingOnEnter?: boolean;
115
- showAddress?: boolean;
116
- showFormulaBar?: boolean;
117
- minNumRows?: number;
118
- maxNumRows?: number;
119
- minNumCols?: number;
120
- maxNumCols?: number;
121
- mode?: ModeType;
122
- contextMenuItems?: FC<ContextMenuProps>[];
123
- };
124
- export type RangeType = {
125
- start: number;
126
- end: number;
127
- };
128
- export type PointType = {
129
- y: Y;
130
- x: X;
131
- };
132
- export type ExtraPointType = {
133
- y: Y;
134
- x: X;
135
- absY?: boolean;
136
- absX?: boolean;
137
- table?: Table;
138
- };
139
- export type PositionType = {
140
- y: Y;
141
- x: X;
142
- };
143
- export type ZoneType = {
144
- startY: Y;
145
- startX: X;
146
- endY: Y;
147
- endX: X;
148
- };
149
- export type AreaType = {
150
- top: Y;
151
- left: X;
152
- bottom: Y;
153
- right: X;
154
- };
155
- export type WriterType = (value: string) => void;
156
- export type StoreType = {
157
- sheetId: number;
158
- tableReactive: RefObject<Table>;
159
- rootRef: RefObject<HTMLDivElement>;
160
- flashRef: RefObject<HTMLDivElement>;
161
- mainRef: RefObject<HTMLDivElement>;
162
- editorRef: RefObject<HTMLTextAreaElement>;
163
- largeEditorRef: RefObject<HTMLTextAreaElement>;
164
- tabularRef: RefObject<HTMLDivElement>;
165
- searchInputRef: RefObject<HTMLTextAreaElement>;
166
- entering: boolean;
167
- choosing: PointType;
168
- inputting: string;
169
- selectingZone: ZoneType;
170
- autofillDraggingTo: PointType | null;
171
- leftHeaderSelecting: boolean;
172
- topHeaderSelecting: boolean;
173
- editingAddress: string;
174
- editorRect: RectType;
175
- dragging: boolean;
176
- sheetHeight: number;
177
- sheetWidth: number;
178
- minNumRows: number;
179
- maxNumRows: number;
180
- minNumCols: number;
181
- maxNumCols: number;
182
- mode: ModeType;
183
- searchQuery?: string;
184
- searchCaseSensitive: boolean;
185
- searchRegex: boolean;
186
- searchRange?: ZoneType;
187
- matchingCells: string[];
188
- matchingCellIndex: number;
189
- editingOnEnter: boolean;
190
- showAddress: boolean;
191
- contextMenuPosition: PositionType;
192
- contextMenuItems: FC<ContextMenuProps>[];
193
- resizingPositionY: [Y, Y, Y];
194
- resizingPositionX: [X, X, X];
195
- columnMenuState: {
196
- x: number;
197
- position: PositionType;
198
- } | null;
199
- rowMenuState: {
200
- y: number;
201
- position: PositionType;
202
- } | null;
203
- editorHovering: boolean;
204
- };
205
- export type Manager<T> = {
206
- instance: T;
207
- sync: T extends StoreType ? Dispatcher : (instance: T) => void;
208
- };
209
- export type Connector = {
210
- tableManager: {
211
- table: UserTable;
212
- sync: (table: UserTable) => void;
213
- };
214
- storeManager: {
215
- store: StoreType;
216
- sync: (store: StoreType) => void;
217
- dispatch: Dispatcher;
218
- };
219
- };
220
- export type Props = {
221
- initialCells: CellsByAddressType;
222
- sheetName?: string;
223
- hub?: HubType;
224
- connector?: RefObject<Connector | null>;
225
- options?: OptionsType;
226
- className?: string;
227
- style?: CSSProperties;
228
- };
229
- export type Id = string;
230
- export type Ids = Id[];
231
- export type IdMatrix = Ids[];
232
- export type Address = string;
233
- export type MatricesByAddress<T> = {
234
- [origin: Address]: MatrixType<T>;
235
- };
236
- export type StorePatchType = {
237
- sheetId: number;
238
- choosing?: PointType;
239
- selectingZone?: ZoneType | undefined;
240
- sheetHeight?: number;
241
- sheetWidth?: number;
242
- transmit?: TransmitProps;
243
- };
244
- export type HistoryUpdateType = {
245
- operation: 'UPDATE';
246
- srcSheetId: number;
247
- dstSheetId: number;
248
- applyed: boolean;
249
- undoReflection?: StorePatchType;
250
- redoReflection?: StorePatchType;
251
- diffBefore: CellsByIdType;
252
- diffAfter: CellsByIdType;
253
- partial: boolean;
254
- };
255
- export type MoveRelation = {
256
- before?: string;
257
- after?: string;
258
- src: Address;
259
- dst?: Address;
260
- new?: Id;
261
- lost?: Id;
262
- };
263
- export type MoveRelations = MoveRelation[];
264
- export type HistoryMoveType = {
265
- operation: 'MOVE';
266
- srcSheetId: number;
267
- dstSheetId: number;
268
- applyed: boolean;
269
- undoReflection?: StorePatchType;
270
- redoReflection?: StorePatchType;
271
- diffBefore: CellsByIdType;
272
- diffAfter: CellsByIdType;
273
- moveRelations: MoveRelations;
274
- };
275
- export type HistoryInsertRowsType = {
276
- operation: 'INSERT_ROWS';
277
- srcSheetId: number;
278
- dstSheetId: number;
279
- applyed: boolean;
280
- undoReflection?: StorePatchType;
281
- redoReflection?: StorePatchType;
282
- y: number;
283
- numRows: number;
284
- idMatrix: IdMatrix;
285
- diffBefore?: CellsByIdType;
286
- diffAfter?: CellsByIdType;
287
- partial?: true;
288
- };
289
- export type HistoryRemoveRowsType = {
290
- operation: 'REMOVE_ROWS';
291
- srcSheetId: number;
292
- dstSheetId: number;
293
- applyed: boolean;
294
- undoReflection?: StorePatchType;
295
- redoReflection?: StorePatchType;
296
- ys: number[];
297
- diffBefore?: CellsByIdType;
298
- deleted: IdMatrix;
299
- };
300
- export type HistoryInsertColsType = {
301
- operation: 'INSERT_COLS';
302
- srcSheetId: number;
303
- dstSheetId: number;
304
- applyed: boolean;
305
- undoReflection?: StorePatchType;
306
- redoReflection?: StorePatchType;
307
- x: number;
308
- numCols: number;
309
- idMatrix: IdMatrix;
310
- diffBefore?: CellsByIdType;
311
- diffAfter?: CellsByIdType;
312
- partial?: true;
313
- };
314
- export type HistoryRemoveColsType = {
315
- operation: 'REMOVE_COLS';
316
- srcSheetId: number;
317
- dstSheetId: number;
318
- applyed: boolean;
319
- undoReflection?: StorePatchType;
320
- redoReflection?: StorePatchType;
321
- xs: number[];
322
- diffBefore?: CellsByIdType;
323
- deleted: IdMatrix;
324
- };
325
- export type HistorySortRowsType = {
326
- operation: 'SORT_ROWS';
327
- srcSheetId: number;
328
- dstSheetId: number;
329
- applyed: boolean;
330
- undoReflection?: StorePatchType;
331
- redoReflection?: StorePatchType;
332
- /** Mapping from original row index to new row index after sort */
333
- sortedRowMapping: {
334
- [beforeY: number]: number;
335
- };
336
- };
337
- export type HistoryType = HistoryUpdateType | HistoryMoveType | HistoryInsertRowsType | HistoryRemoveRowsType | HistoryInsertColsType | HistoryRemoveColsType | HistorySortRowsType;
338
- export type Virtualization = {
339
- xs: number[];
340
- ys: number[];
341
- adjuster: AreaType;
342
- };
343
- export type OperatorType = 'USER' | 'SYSTEM';
344
- export type OperationType = number;
345
- export type StoreDispatchType = {
346
- store: StoreType;
347
- dispatch: Dispatcher;
348
- };
349
- export type ContextsBySheetId = {
350
- [sheetId: string]: StoreDispatchType;
351
- };
352
- export type SheetIdsByName = {
353
- [sheetName: string]: number;
354
- };
355
- export type RefPaletteType = {
356
- [address: string]: number;
357
- };
358
- export type EditorEvent = KeyboardEvent<HTMLTextAreaElement>;
359
- export type EditorEventWithNativeEvent = EditorEvent & {
360
- nativeEvent: KeyboardEvent & {
361
- isComposing: boolean;
362
- };
363
- };
364
- export type ContextMenuProps = StoreDispatchType;
365
- //# sourceMappingURL=types.d.ts.map
package/dist/utils.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const setDefault: <K = PropertyKey, D = any>(target: any, key: K, defaultValue: D) => D;
2
- //# sourceMappingURL=utils.d.ts.map