@gridsheet/web 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # @gridsheet/web
2
+
3
+ The **web/DOM rendering layer** for [GridSheet](https://gridsheet.walkframe.com/).
4
+
5
+ It builds on the headless [`@gridsheet/engine`](https://www.npmjs.com/package/@gridsheet/engine) (the framework-agnostic model + formula engine) and adds the browser-specific helpers the framework bindings need: DOM focus/selection, text input, popup positioning, virtualization, and style embedding. It also re-exports the full `@gridsheet/engine` API, so `@gridsheet/react-core` / `@gridsheet/preact-core` can pull both the model and the DOM helpers from here.
6
+
7
+ It is **not intended to be used directly** by application developers.
8
+
9
+ ## For application developers
10
+
11
+ Please use one of the framework-specific packages:
12
+
13
+ - **React**: [`@gridsheet/react-core`](https://www.npmjs.com/package/@gridsheet/react-core)
14
+ - **Preact**: [`@gridsheet/preact-core`](https://www.npmjs.com/package/@gridsheet/preact-core)
15
+ - **Vue**: [`@gridsheet/vue-core`](https://www.npmjs.com/package/@gridsheet/vue-core)
16
+
17
+ For **headless** use (CLI, extension host, backend, CI — no rendering), use [`@gridsheet/engine`](https://www.npmjs.com/package/@gridsheet/engine) directly.
18
+
19
+ ## License
20
+
21
+ Apache-2.0
@@ -0,0 +1,8 @@
1
+ export * from '@gridsheet/engine';
2
+ export { focus, preventSafariBounce } from './lib/dom';
3
+ export { insertTextAtCursor, isFocus, insertRef, isRefInsertable, expandInput, resetInput, handleFormulaQuoteAutoClose, } from './lib/input';
4
+ export { smartScroll, virtualize, getAreaInTabular, getCellRectPositions } from './lib/virtualization';
5
+ export { calcBelowPosition, clampLeft, calcSideStyle, clampPopup, hAlignTransform } from './lib/popup';
6
+ export type { HAlign, VAlign, PopupPosition, SideStyle } from './lib/popup';
7
+ export { embedStyle } from './styles/embedder';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGvD,OAAO,EACL,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACX,UAAU,EACV,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGvG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvG,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,201 @@
1
+ import { Lexer as F, splitRef as A, a2p as I, toSheetPrefix as M, grantAddressAbsolute as B, DEFAULT_WIDTH as z, DEFAULT_HEIGHT as S, OVERSCAN_X as T, OVERSCAN_Y as R, range as E, binarySearch as P } from "@gridsheet/engine";
2
+ export * from "@gridsheet/engine";
3
+ const j = (e) => {
4
+ e == null || e.focus({ preventScroll: !0 });
5
+ }, H = () => typeof navigator < "u" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent), $ = (e) => {
6
+ if (!H())
7
+ return () => {
8
+ };
9
+ const o = (t) => {
10
+ const { scrollTop: n, scrollHeight: l, clientHeight: g, scrollLeft: c, scrollWidth: d, clientWidth: f } = e, u = t.deltaY < 0 && n <= 0, b = t.deltaY > 0 && n + g >= l, m = t.deltaX < 0 && c <= 0, x = t.deltaX > 0 && c + f >= d;
11
+ (u || b || m || x) && (t.preventDefault(), window.scrollBy({ top: t.deltaY, left: t.deltaX, behavior: "auto" }));
12
+ };
13
+ let i = 0, a = 0;
14
+ const r = (t) => {
15
+ t.touches.length === 1 && (i = t.touches[0].clientX, a = t.touches[0].clientY);
16
+ }, s = (t) => {
17
+ if (t.touches.length !== 1)
18
+ return;
19
+ const { scrollTop: n, scrollHeight: l, clientHeight: g, scrollLeft: c, scrollWidth: d, clientWidth: f } = e, u = t.touches[0].clientX - i, b = t.touches[0].clientY - a, m = b > 0 && n <= 0, x = b < 0 && n + g >= l, y = u > 0 && c <= 0, p = u < 0 && c + f >= d;
20
+ (m || x || y || p) && t.preventDefault();
21
+ };
22
+ return e.addEventListener("wheel", o, { passive: !1 }), e.addEventListener("touchstart", r, { passive: !0 }), e.addEventListener("touchmove", s, { passive: !1 }), () => {
23
+ e.removeEventListener("wheel", o), e.removeEventListener("touchstart", r), e.removeEventListener("touchmove", s);
24
+ };
25
+ }, v = (e, o) => {
26
+ var a;
27
+ j(e), !((a = document.execCommand) != null && a.call(document, "insertText", !1, o)) && e.setRangeText(o, e.selectionStart, e.selectionEnd, "end");
28
+ }, Y = ({ input: e, ref: o, dryRun: i = !1 }) => {
29
+ var n;
30
+ if (!((n = e == null ? void 0 : e.value) != null && n.startsWith("=")) || e.selectionStart === 0)
31
+ return !1;
32
+ const a = new F(e.value.substring(1));
33
+ a.tokenize();
34
+ const [r, s] = a.getTokenIndexByCharPosition(e.selectionStart - 1);
35
+ let t = a.tokens[r];
36
+ if ((t == null ? void 0 : t.type) === "SPACE" && (t = a.tokens[r - 1]), t == null || t.type === "OPEN" || t.type === "COMMA" || t.type === "INFIX_OPERATOR" || t.type === "PREFIX_OPERATOR")
37
+ i || v(e, o);
38
+ else if (t.type === "REF" || t.type === "RANGE") {
39
+ if (!i) {
40
+ const { sheetName: l, addresses: g } = A(o), { addresses: c } = A(t.entity), d = c.map((b) => I(b));
41
+ c.length === 2 && g.length === 1 && g.push(g[0]), o = M(l) + g.map((b, m) => {
42
+ var x, y;
43
+ return B(b, !!((x = d[m]) != null && x.absX), !!((y = d[m]) != null && y.absY));
44
+ }).join(":");
45
+ const [f, u] = a.getTokenPositionRange(r + 1, 1);
46
+ e.setSelectionRange(f, u), v(e, o);
47
+ }
48
+ } else
49
+ return !1;
50
+ return !0;
51
+ }, X = (e) => Y({ input: e, ref: "", dryRun: !0 }), N = (e) => {
52
+ e != null && (e.style.width = `${e.scrollWidth}px`, e.style.height = `${e.scrollHeight}px`);
53
+ }, _ = (e, o, i) => {
54
+ var t, n;
55
+ const a = e == null ? void 0 : e.style;
56
+ if (a == null)
57
+ return;
58
+ const r = ((t = o.getCell({ x: i.x, y: 0 }, { resolution: "SYSTEM" })) == null ? void 0 : t.width) ?? z, s = ((n = o.getCell(i, { resolution: "SYSTEM" })) == null ? void 0 : n.height) ?? S;
59
+ a.width = `${r}px`, a.height = `${s}px`;
60
+ }, U = (e) => typeof window > "u" || e == null ? !1 : document.activeElement === e, V = (e, o) => {
61
+ const i = e.currentTarget;
62
+ if (!o.startsWith("="))
63
+ return !1;
64
+ const { selectionStart: r, selectionEnd: s } = i;
65
+ if (e.key === '"') {
66
+ if (r !== s) {
67
+ e.preventDefault();
68
+ const g = o.slice(r, s);
69
+ return v(i, `"${g}"`), requestAnimationFrame(() => {
70
+ i.setSelectionRange(r + 1, s + 1);
71
+ }), !0;
72
+ }
73
+ const t = o[r], n = o.slice(1, r);
74
+ let l = 0;
75
+ for (let g = 0; g < n.length; g++)
76
+ n[g] === '"' && (g + 1 < n.length && n[g + 1] === '"' ? g++ : l++);
77
+ return l % 2 === 1 && t === '"' ? (e.preventDefault(), i.setSelectionRange(r + 1, r + 1), !0) : (e.preventDefault(), v(i, '""'), requestAnimationFrame(() => {
78
+ i.setSelectionRange(r + 1, r + 1);
79
+ }), !0);
80
+ }
81
+ return e.key === "Backspace" && r === s && r > 0 && o[r - 1] === '"' && o[r] === '"' ? (e.preventDefault(), i.setRangeText("", r - 1, r + 1, "end"), i.dispatchEvent(new Event("input", { bubbles: !0 })), !0) : !1;
82
+ }, O = (e, { y: o, x: i }) => {
83
+ var g;
84
+ const a = e.getCell({ y: 0, x: i }, { resolution: "SYSTEM" }), r = e.getCell({ y: o, x: 0 }, { resolution: "SYSTEM" }), s = ((g = e.getSystem({ y: 0, x: i })) == null ? void 0 : g.offsetLeft) ?? 0, t = e.getOffsetTop(o), n = (a == null ? void 0 : a.width) || z, l = r != null && r.filtered ? 0 : (r == null ? void 0 : r.height) || S;
85
+ return {
86
+ top: t,
87
+ left: s,
88
+ bottom: t + l,
89
+ right: s + n,
90
+ width: n,
91
+ height: l
92
+ };
93
+ }, L = (e) => {
94
+ const o = e.scrollTop, i = e.scrollLeft, a = e.clientHeight, r = e.clientWidth, s = o + a, t = i + r;
95
+ return { top: o, left: i, bottom: s, right: t, height: a, width: r };
96
+ }, q = (e, o) => {
97
+ var x, y;
98
+ if (o == null)
99
+ return null;
100
+ let i = 0, a = 0, r = e.numRows, s = e.numCols;
101
+ const { top: t, left: n, bottom: l, right: g } = L(o);
102
+ let c = 0, d = 0;
103
+ for (let p = 1; p <= e.numCols; p++) {
104
+ const w = ((x = e.getCell({ y: 0, x: p }, { resolution: "SYSTEM" })) == null ? void 0 : x.width) || z;
105
+ if (c += w, a === 0 && c > n && (a = Math.max(p - T, 1)), c > g) {
106
+ s = Math.min(p + T, e.numCols);
107
+ break;
108
+ }
109
+ }
110
+ for (let p = 1; p <= e.numRows; p++) {
111
+ if (e.isRowFiltered(p))
112
+ continue;
113
+ const w = ((y = e.getCell({ y: p, x: 0 }, { resolution: "SYSTEM" })) == null ? void 0 : y.height) || S;
114
+ if (d += w, i === 0 && d > t && (i = Math.max(p - R, 1)), d > l) {
115
+ r = Math.min(p + R, e.numRows);
116
+ break;
117
+ }
118
+ }
119
+ const f = i === 0 ? [] : E(i, r).filter((p) => !e.isRowFiltered(p)), u = E(a, s), b = e.getRectSize({
120
+ top: 1,
121
+ left: 1,
122
+ bottom: i,
123
+ right: a
124
+ }), m = e.getRectSize({
125
+ top: r,
126
+ left: s,
127
+ bottom: e.numRows,
128
+ right: e.numCols
129
+ });
130
+ return {
131
+ ys: f,
132
+ xs: u,
133
+ adjuster: {
134
+ top: b.height,
135
+ left: b.width,
136
+ bottom: m.height,
137
+ right: m.width
138
+ }
139
+ };
140
+ }, G = (e, o, i, a = "auto") => {
141
+ if (o == null)
142
+ return;
143
+ const r = L(o), s = O(e, i), t = s.top - e.headerHeight, n = s.left - e.headerWidth, l = s.bottom - r.height + 1, g = s.right - r.width + 1, c = t < r.top, d = n < r.left, f = s.bottom > r.bottom, u = s.right > r.right;
144
+ d ? c ? o.scrollTo({ left: n, top: t, behavior: a }) : f ? o.scrollTo({ left: n, top: l, behavior: a }) : o.scrollTo({ left: n, top: r.top, behavior: a }) : u ? c ? o.scrollTo({ left: g, top: t, behavior: a }) : f ? o.scrollTo({ left: g, top: l, behavior: a }) : o.scrollTo({ left: g, top: r.top, behavior: a }) : c ? o.scrollTo({ left: r.left, top: t, behavior: a }) : f && o.scrollTo({ left: r.left, top: l, behavior: a });
145
+ }, k = (e, o, i, a) => {
146
+ var s;
147
+ const r = P(
148
+ 0,
149
+ e.length - 1,
150
+ (t) => o(e[t].getBoundingClientRect()) < i,
151
+ !1
152
+ );
153
+ return parseInt(((s = e[r]) == null ? void 0 : s.dataset[a]) ?? "1");
154
+ }, Q = (e) => {
155
+ const {
156
+ top: o,
157
+ left: i,
158
+ bottom: a,
159
+ right: r
160
+ } = e.getBoundingClientRect(), s = Array.from(e.querySelectorAll(".gs-th-left")), t = Array.from(e.querySelectorAll(".gs-th-top")), n = k(s, (d) => d.top, o, "y"), l = k(s, (d) => d.bottom, a + 1, "y"), g = k(t, (d) => d.left, i, "x"), c = k(t, (d) => d.right, r + 1, "x");
161
+ return { top: n, left: g, bottom: l, right: c };
162
+ }, h = 8, J = (e, o = 260, i = h) => e.right - o >= i ? { x: e.right, y: e.bottom, hAlign: "right" } : { x: Math.max(e.left, i), y: e.bottom, hAlign: "left" }, K = (e, o, i = h) => {
163
+ const r = e + o - (window.innerWidth - i);
164
+ return r > 0 ? e - r : e;
165
+ }, Z = (e, o = h) => {
166
+ if (e.style.left = `calc(100% + ${o}px)`, e.style.right = "auto", e.getBoundingClientRect().right > window.innerWidth - h) {
167
+ const a = { left: "auto", right: `calc(100% + ${o}px)` };
168
+ return e.style.left = a.left, e.style.right = a.right, a;
169
+ }
170
+ return { left: `calc(100% + ${o}px)`, right: "auto" };
171
+ }, ee = (e) => {
172
+ const o = e.getBoundingClientRect(), i = window.innerWidth, a = window.innerHeight;
173
+ o.right > i - h && (e.style.left = `${parseFloat(e.style.left || "0") - (o.right - (i - h))}px`), o.bottom > a - h && (e.style.top = `${parseFloat(e.style.top || "0") - (o.bottom - (a - h))}px`);
174
+ }, oe = (e) => e === "right" ? "translateX(-100%)" : "none", C = 1786834463, W = `.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:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);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 var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);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}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.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 var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);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:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.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 6px;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:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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;flex:1;min-width:0;display:flex;align-items:center}.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 var(--gs-accent,#2563eb);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:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);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:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.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;text-align:left;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:var(--gs-fg,#1f2328);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.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:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.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:var(--gs-accent,#2563eb)}.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 var(--gs-border,#e3e6ea)}.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:'‹\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\00a0›'}.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;padding:3px 0;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);border-bottom: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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}@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:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}`, re = () => {
175
+ if (typeof window > "u" || document.querySelector(`style.gs-styling[data-modified-at='${C}']`))
176
+ return;
177
+ const o = document.createElement("style");
178
+ document.head.appendChild(o), o.setAttribute("class", "gs-styling"), o.setAttribute("data-modified-at", `${C}`), o.innerText = W;
179
+ };
180
+ export {
181
+ J as calcBelowPosition,
182
+ Z as calcSideStyle,
183
+ K as clampLeft,
184
+ ee as clampPopup,
185
+ re as embedStyle,
186
+ N as expandInput,
187
+ j as focus,
188
+ Q as getAreaInTabular,
189
+ O as getCellRectPositions,
190
+ oe as hAlignTransform,
191
+ V as handleFormulaQuoteAutoClose,
192
+ Y as insertRef,
193
+ v as insertTextAtCursor,
194
+ U as isFocus,
195
+ X as isRefInsertable,
196
+ $ as preventSafariBounce,
197
+ _ as resetInput,
198
+ G as smartScroll,
199
+ q as virtualize
200
+ };
201
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/lib/dom.ts","../src/lib/input.ts","../src/lib/virtualization.ts","../src/lib/popup.ts","../src/styles/minified.ts","../src/styles/embedder.ts"],"sourcesContent":["export const focus = (el: HTMLElement | null | undefined) => {\n el?.focus({ preventScroll: true });\n};\n\nconst isSafari = (): boolean =>\n typeof navigator !== 'undefined' && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n/**\n * Prevents Safari elastic bounce (rubber-band) at scroll boundaries.\n * No-op on non-Safari browsers. Returns a cleanup function to remove the listeners.\n */\nexport const preventSafariBounce = (el: HTMLDivElement): (() => void) => {\n if (!isSafari()) {\n return () => {};\n }\n const preventBounce = (e: WheelEvent) => {\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const atTop = e.deltaY < 0 && scrollTop <= 0;\n const atBottom = e.deltaY > 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = e.deltaX < 0 && scrollLeft <= 0;\n const atRight = e.deltaX > 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n window.scrollBy({ top: e.deltaY, left: e.deltaX, behavior: 'auto' });\n }\n };\n\n let touchStartX = 0;\n let touchStartY = 0;\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length === 1) {\n touchStartX = e.touches[0].clientX;\n touchStartY = e.touches[0].clientY;\n }\n };\n\n const preventTouchBounce = (e: TouchEvent) => {\n if (e.touches.length !== 1) {\n return;\n }\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = el;\n const dx = e.touches[0].clientX - touchStartX;\n const dy = e.touches[0].clientY - touchStartY;\n const atTop = dy > 0 && scrollTop <= 0;\n const atBottom = dy < 0 && scrollTop + clientHeight >= scrollHeight;\n const atLeft = dx > 0 && scrollLeft <= 0;\n const atRight = dx < 0 && scrollLeft + clientWidth >= scrollWidth;\n if (atTop || atBottom || atLeft || atRight) {\n e.preventDefault();\n }\n };\n\n el.addEventListener('wheel', preventBounce, { passive: false });\n el.addEventListener('touchstart', onTouchStart, { passive: true });\n el.addEventListener('touchmove', preventTouchBounce, { passive: false });\n\n return () => {\n el.removeEventListener('wheel', preventBounce);\n el.removeEventListener('touchstart', onTouchStart);\n el.removeEventListener('touchmove', preventTouchBounce);\n };\n};\n","import {\n type PointType,\n type Sheet,\n Lexer,\n splitRef,\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n a2p,\n grantAddressAbsolute,\n toSheetPrefix,\n} from '@gridsheet/engine';\nimport { focus } from './dom';\n\nexport const insertTextAtCursor = (input: HTMLTextAreaElement, text: string) => {\n focus(input);\n const deprecated = !document.execCommand?.('insertText', false, text);\n if (!deprecated) {\n return;\n }\n input.setRangeText(text, input.selectionStart, input.selectionEnd, 'end');\n return;\n};\n\ntype InsertRefProps = {\n input: HTMLTextAreaElement | null;\n ref: string;\n dryRun?: boolean;\n};\n\nexport const insertRef = ({ input, ref, dryRun = false }: InsertRefProps): boolean => {\n // dryRun is used to check if the ref can be inserted without actually inserting it\n if (!input?.value?.startsWith('=') || input.selectionStart === 0) {\n return false;\n }\n const lexer = new Lexer(input.value.substring(1));\n lexer.tokenize();\n const [tokenIndex, _] = lexer.getTokenIndexByCharPosition(input.selectionStart - 1);\n let token = lexer.tokens[tokenIndex];\n if (token?.type === 'SPACE') {\n token = lexer.tokens[tokenIndex - 1];\n }\n if (\n token == null ||\n token.type === 'OPEN' ||\n token.type === 'COMMA' ||\n token.type === 'INFIX_OPERATOR' ||\n token.type === 'PREFIX_OPERATOR'\n ) {\n if (!dryRun) {\n insertTextAtCursor(input, ref);\n }\n } else if (token.type === 'REF' || token.type === 'RANGE') {\n if (!dryRun) {\n // keep the absolute/relative state of the token\n const { sheetName: refSheetName, addresses: refAddresses } = splitRef(ref);\n const { addresses: tokenAddresses } = splitRef(token.entity as string);\n\n const tokenAbsolutes = tokenAddresses.map((a) => a2p(a));\n if (tokenAddresses.length === 2 && refAddresses.length === 1) {\n refAddresses.push(refAddresses[0]);\n }\n ref =\n toSheetPrefix(refSheetName) +\n refAddresses\n .map((r, i) => {\n return grantAddressAbsolute(r, !!tokenAbsolutes[i]?.absX, !!tokenAbsolutes[i]?.absY);\n })\n .join(':');\n\n const [start, end] = lexer.getTokenPositionRange(tokenIndex + 1, 1);\n input.setSelectionRange(start, end);\n insertTextAtCursor(input, ref);\n }\n } else {\n return false;\n }\n return true;\n};\n\nexport const isRefInsertable = (input: HTMLTextAreaElement | null): boolean => {\n return insertRef({ input, ref: '', dryRun: true });\n};\n\nexport const expandInput = (input: HTMLTextAreaElement | null) => {\n if (input == null) {\n return;\n }\n input.style.width = `${input.scrollWidth}px`;\n input.style.height = `${input.scrollHeight}px`;\n};\n\nexport const resetInput = (input: HTMLTextAreaElement | null, sheet: Sheet, point: PointType) => {\n const style = input?.style;\n if (style == null) {\n return;\n }\n const width = sheet.getCell({ x: point.x, y: 0 }, { resolution: 'SYSTEM' })?.width ?? DEFAULT_WIDTH;\n const height = sheet.getCell(point, { resolution: 'SYSTEM' })?.height ?? DEFAULT_HEIGHT;\n style.width = `${width}px`;\n style.height = `${height}px`;\n};\n\nexport const isFocus = (input: HTMLTextAreaElement | null): boolean => {\n if (typeof window === 'undefined' || input == null) {\n return false;\n }\n return document.activeElement === input;\n};\n\n/**\n * Handles auto-close behavior for double quotes in formula editing.\n * - Typing `\"` inserts `\"\"` and places cursor between them.\n * - Typing `\"` when cursor is right before an auto-closed `\"` skips over it.\n * - Backspace between empty `\"\"` deletes both quotes.\n *\n * Returns true if the event was handled (caller should preventDefault), false otherwise.\n */\nexport const handleFormulaQuoteAutoClose = (\n e: { key: string; preventDefault(): void; currentTarget: HTMLTextAreaElement },\n inputting: string,\n): boolean => {\n const input = e.currentTarget;\n const isFormula = inputting.startsWith('=');\n if (!isFormula) {\n return false;\n }\n\n const { selectionStart, selectionEnd } = input;\n\n if (e.key === '\"') {\n // If text is selected, wrap it in quotes\n if (selectionStart !== selectionEnd) {\n e.preventDefault();\n const selectedText = inputting.slice(selectionStart, selectionEnd);\n insertTextAtCursor(input, `\"${selectedText}\"`);\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionEnd + 1);\n });\n return true;\n }\n\n const charAfter = inputting[selectionStart];\n\n // Count unescaped double quotes before cursor (after '=') to determine if we're inside a string\n const beforeCursor = inputting.slice(1, selectionStart); // skip '='\n let quoteCount = 0;\n for (let i = 0; i < beforeCursor.length; i++) {\n if (beforeCursor[i] === '\"') {\n // Skip escaped double quotes (\"\") inside strings\n if (i + 1 < beforeCursor.length && beforeCursor[i + 1] === '\"') {\n i++; // skip the next quote\n } else {\n quoteCount++;\n }\n }\n }\n\n // If odd number of quotes before cursor, we're inside a string.\n // If the next char is `\"`, it's the closing quote — skip over it.\n if (quoteCount % 2 === 1 && charAfter === '\"') {\n e.preventDefault();\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n return true;\n }\n\n // Otherwise, insert `\"\"` and place cursor in between\n e.preventDefault();\n insertTextAtCursor(input, '\"\"');\n requestAnimationFrame(() => {\n input.setSelectionRange(selectionStart + 1, selectionStart + 1);\n });\n return true;\n }\n\n if (e.key === 'Backspace') {\n // If cursor is between `\"\"`, delete both\n if (\n selectionStart === selectionEnd &&\n selectionStart > 0 &&\n inputting[selectionStart - 1] === '\"' &&\n inputting[selectionStart] === '\"'\n ) {\n e.preventDefault();\n input.setRangeText('', selectionStart - 1, selectionStart + 1, 'end');\n input.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n }\n\n return false;\n};\n","import {\n DEFAULT_HEIGHT,\n DEFAULT_WIDTH,\n OVERSCAN_X,\n OVERSCAN_Y,\n range,\n binarySearch,\n type BinarySearchPredicate,\n Sheet,\n type AreaType,\n type PointType,\n type Virtualization,\n} from '@gridsheet/engine';\n\nexport const getCellRectPositions = (sheet: Sheet, { y, x }: PointType) => {\n const colCell = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' });\n const rowCell = sheet.getCell({ y, x: 0 }, { resolution: 'SYSTEM' });\n const left = sheet.getSystem({ y: 0, x })?.offsetLeft ?? 0;\n const top = sheet.getOffsetTop(y);\n const w = colCell?.width || DEFAULT_WIDTH;\n const h = rowCell?.filtered ? 0 : rowCell?.height || DEFAULT_HEIGHT;\n return {\n top,\n left,\n bottom: top + h,\n right: left + w,\n width: w,\n height: h,\n };\n};\n\nexport const getScreenRect = (e: HTMLDivElement) => {\n const top = e.scrollTop,\n left = e.scrollLeft;\n const height = e.clientHeight,\n width = e.clientWidth;\n const bottom = top + height,\n right = left + width;\n return { top, left, bottom, right, height, width };\n};\n\nexport const virtualize = (sheet: Sheet, e: HTMLDivElement | null): Virtualization | null => {\n if (e == null) {\n return null;\n }\n let boundaryTop = 0,\n boundaryLeft = 0,\n boundaryBottom = sheet.numRows,\n boundaryRight = sheet.numCols;\n\n const { top, left, bottom, right } = getScreenRect(e);\n let width = 0,\n height = 0;\n for (let x = 1; x <= sheet.numCols; x++) {\n const w = sheet.getCell({ y: 0, x }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n width += w;\n if (boundaryLeft === 0 && width > left) {\n boundaryLeft = Math.max(x - OVERSCAN_X, 1);\n }\n if (width > right) {\n boundaryRight = Math.min(x + OVERSCAN_X, sheet.numCols);\n break;\n }\n }\n // This loop breaks early once visible bottom is found — O(visible_rows), not O(numRows).\n for (let y = 1; y <= sheet.numRows; y++) {\n if (sheet.isRowFiltered(y)) {\n continue;\n }\n const h = sheet.getCell({ y, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n height += h;\n if (boundaryTop === 0 && height > top) {\n boundaryTop = Math.max(y - OVERSCAN_Y, 1);\n }\n if (height > bottom) {\n boundaryBottom = Math.min(y + OVERSCAN_Y, sheet.numRows);\n break;\n }\n }\n const ys = boundaryTop === 0 ? [] : range(boundaryTop, boundaryBottom).filter((y) => !sheet.isRowFiltered(y));\n const xs = range(boundaryLeft, boundaryRight);\n const before = sheet.getRectSize({\n top: 1,\n left: 1,\n bottom: boundaryTop,\n right: boundaryLeft,\n });\n const after = sheet.getRectSize({\n top: boundaryBottom,\n left: boundaryRight,\n bottom: sheet.numRows,\n right: sheet.numCols,\n });\n return {\n ys,\n xs,\n adjuster: {\n top: before.height,\n left: before.width,\n bottom: after.height,\n right: after.width,\n },\n };\n};\n\nexport const smartScroll = (\n sheet: Sheet,\n e: HTMLDivElement | null,\n targetPoint: PointType,\n behavior: ScrollBehavior = 'auto',\n) => {\n if (e == null) {\n return;\n }\n const screen = getScreenRect(e);\n const target = getCellRectPositions(sheet, targetPoint);\n\n // when header is sticky\n const up = target.top - sheet.headerHeight;\n const left = target.left - sheet.headerWidth;\n const down = target.bottom - screen.height + 1;\n const right = target.right - screen.width + 1;\n\n const isTopOver = up < screen.top;\n const isLeftOver = left < screen.left;\n const isBottomOver = target.bottom > screen.bottom;\n const isRightOver = target.right > screen.right;\n\n if (isLeftOver) {\n if (isTopOver) {\n // go left up\n e.scrollTo({ left, top: up, behavior });\n } else if (isBottomOver) {\n // go left down\n e.scrollTo({ left, top: down, behavior });\n } else {\n // go left\n e.scrollTo({ left, top: screen.top, behavior });\n }\n } else if (isRightOver) {\n if (isTopOver) {\n // go right up\n e.scrollTo({ left: right, top: up, behavior });\n } else if (isBottomOver) {\n // go right down\n e.scrollTo({ left: right, top: down, behavior });\n } else {\n // go right\n e.scrollTo({ left: right, top: screen.top, behavior });\n }\n } else {\n if (isTopOver) {\n // go up\n e.scrollTo({ left: screen.left, top: up, behavior });\n } else if (isBottomOver) {\n // go down\n e.scrollTo({ left: screen.left, top: down, behavior });\n } else {\n // go nowhere\n }\n }\n};\n\ntype PositionGetter = (rect: DOMRect) => number;\n\nconst findVisibleElement = (\n elements: HTMLTableHeaderCellElement[],\n getPosition: PositionGetter,\n boundary: number,\n dataKey: string,\n): number => {\n const index = binarySearch(\n 0,\n elements.length - 1,\n (mid) => getPosition(elements[mid].getBoundingClientRect()) < boundary,\n false,\n );\n return parseInt(elements[index]?.dataset[dataKey] ?? '1');\n};\n\nexport const getAreaInTabular = (tabularElement: HTMLDivElement): AreaType => {\n const {\n top: topPosition,\n left: leftPosition,\n bottom: bottomPosition,\n right: rightPosition,\n } = tabularElement.getBoundingClientRect();\n\n const rows = Array.from(tabularElement.querySelectorAll('.gs-th-left')) as HTMLTableHeaderCellElement[];\n const cols = Array.from(tabularElement.querySelectorAll('.gs-th-top')) as HTMLTableHeaderCellElement[];\n\n const top = findVisibleElement(rows, (rect) => rect.top, topPosition, 'y');\n const bottom = findVisibleElement(rows, (rect) => rect.bottom, bottomPosition + 1, 'y');\n const left = findVisibleElement(cols, (rect) => rect.left, leftPosition, 'x');\n const right = findVisibleElement(cols, (rect) => rect.right, rightPosition + 1, 'x');\n\n return { top, left, bottom, right };\n};\n","/**\n * lib/popup.ts\n *\n * Utility functions for computing the position of floating UI elements\n * (tooltips, dropdowns, autocomplete lists, function guides, etc.)\n * so they don't overflow the viewport.\n */\n\nconst MARGIN = 8; // px gap from the viewport edge\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type HAlign = 'left' | 'right';\nexport type VAlign = 'top' | 'bottom';\n\nexport type PopupPosition = {\n x: number;\n y: number;\n hAlign: HAlign;\n};\n\n// ---------------------------------------------------------------------------\n// calcBelowPosition\n//\n// Places a popup BELOW an anchor rect.\n// Prefers aligning the popup's RIGHT edge to rect.right (hAlign='right'),\n// but falls back to aligning its LEFT edge to rect.left (hAlign='left')\n// when there is not enough room on the left side of the viewport.\n//\n// In the 'right' case the caller should apply translateX(-100%) to shift the\n// popup leftward so its right edge lands at x.\n// In the 'left' case x is the desired left edge directly.\n//\n// Usage: error triangle tooltip, any anchored-to-element popup.\n// ---------------------------------------------------------------------------\nexport const calcBelowPosition = (rect: DOMRect, maxWidth = 260, margin = MARGIN): PopupPosition => {\n if (rect.right - maxWidth >= margin) {\n return { x: rect.right, y: rect.bottom, hAlign: 'right' };\n }\n return { x: Math.max(rect.left, margin), y: rect.bottom, hAlign: 'left' };\n};\n\n// ---------------------------------------------------------------------------\n// clampLeft\n//\n// Given the desired left position of a popup and its rendered width,\n// returns an adjusted left value that keeps the popup within the viewport.\n//\n// Usage: EditorOptions dropdown, FunctionGuide floating panel.\n// ---------------------------------------------------------------------------\nexport const clampLeft = (left: number, width: number, margin = MARGIN): number => {\n const rightEdge = left + width;\n const overflow = rightEdge - (window.innerWidth - margin);\n return overflow > 0 ? left - overflow : left;\n};\n\n// ---------------------------------------------------------------------------\n// calcSidePosition\n//\n// Places a popup to the LEFT or RIGHT of an anchor element.\n// Prefers the right side; falls back to the left side if the right side\n// overflows the viewport.\n//\n// Resets the element to the preferred (right-side) position BEFORE measuring,\n// so that stale styles from a previous render don't corrupt the measurement.\n//\n// Applies the final styles directly to the element and also returns them.\n//\n// Usage: FunctionGuide guide1 (option tooltip panel).\n// ---------------------------------------------------------------------------\nexport type SideStyle = { left: string; right: string };\n\nexport const calcSideStyle = (el: HTMLElement, gap = MARGIN): SideStyle => {\n // 1. Reset to preferred position so getBoundingClientRect reflects the right side.\n el.style.left = `calc(100% + ${gap}px)`;\n el.style.right = 'auto';\n\n // 2. Measure after reset.\n const rect = el.getBoundingClientRect();\n if (rect.right > window.innerWidth - MARGIN) {\n const flipped: SideStyle = { left: 'auto', right: `calc(100% + ${gap}px)` };\n el.style.left = flipped.left;\n el.style.right = flipped.right;\n return flipped;\n }\n return { left: `calc(100% + ${gap}px)`, right: 'auto' };\n};\n\n// ---------------------------------------------------------------------------\n// clampPopup\n//\n// Adjusts a rendered popup element's position so it stays within the viewport.\n// Applies left/top corrections directly as inline styles to avoid re-renders.\n// Call this inside useLayoutEffect with no dependency array so it runs after\n// every render (content changes may change the popup dimensions).\n//\n// Usage: ContextMenu, FunctionGuide guide2, any popup that can change size.\n// ---------------------------------------------------------------------------\nexport const clampPopup = (el: HTMLElement): void => {\n const rect = el.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (rect.right > vw - MARGIN) {\n el.style.left = `${parseFloat(el.style.left || '0') - (rect.right - (vw - MARGIN))}px`;\n }\n if (rect.bottom > vh - MARGIN) {\n el.style.top = `${parseFloat(el.style.top || '0') - (rect.bottom - (vh - MARGIN))}px`;\n }\n};\n\n// ---------------------------------------------------------------------------\n// hAlignTransform\n//\n// Returns the CSS transform string for a popup based on its horizontal alignment.\n// 'right' → shift left by full width so the popup's right edge sits at x.\n// 'left' → no transform needed.\n// ---------------------------------------------------------------------------\nexport const hAlignTransform = (hAlign: HAlign): string => (hAlign === 'right' ? 'translateX(-100%)' : 'none');\n","// pnpm generate-style\nexport const LAST_MODIFIED = 1786834463;\nexport 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:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);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 var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);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}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.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 var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);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:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.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 6px;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:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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;flex:1;min-width:0;display:flex;align-items:center}.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 var(--gs-accent,#2563eb);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:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);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:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.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;text-align:left;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:var(--gs-fg,#1f2328);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.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:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.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:var(--gs-accent,#2563eb)}.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 var(--gs-border,#e3e6ea)}.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:'‹\\\\00a0'}.gs-th-left.gs-sort-fixed .gs-th-inner::after{content:'\\\\00a0›'}.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;padding:3px 0;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);border-bottom: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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}@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:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}`;\n","import { CSS, LAST_MODIFIED } from './minified';\n\nexport const embedStyle = () => {\n if (typeof window === 'undefined') {\n return;\n }\n const exists = document.querySelector(`style.gs-styling[data-modified-at='${LAST_MODIFIED}']`);\n if (exists) {\n return;\n }\n const style = document.createElement('style');\n document.head.appendChild(style);\n style.setAttribute('class', 'gs-styling');\n style.setAttribute('data-modified-at', `${LAST_MODIFIED}`);\n style.innerText = CSS;\n};\n"],"names":["focus","el","isSafari","preventSafariBounce","preventBounce","e","scrollTop","scrollHeight","clientHeight","scrollLeft","scrollWidth","clientWidth","atTop","atBottom","atLeft","atRight","touchStartX","touchStartY","onTouchStart","preventTouchBounce","dx","dy","insertTextAtCursor","input","text","_a","insertRef","ref","dryRun","lexer","Lexer","tokenIndex","_","token","refSheetName","refAddresses","splitRef","tokenAddresses","tokenAbsolutes","a","a2p","toSheetPrefix","r","i","grantAddressAbsolute","_b","start","end","isRefInsertable","expandInput","resetInput","sheet","point","style","width","DEFAULT_WIDTH","height","DEFAULT_HEIGHT","isFocus","handleFormulaQuoteAutoClose","inputting","selectionStart","selectionEnd","selectedText","charAfter","beforeCursor","quoteCount","getCellRectPositions","y","x","colCell","rowCell","left","top","w","h","getScreenRect","bottom","right","virtualize","boundaryTop","boundaryLeft","boundaryBottom","boundaryRight","OVERSCAN_X","OVERSCAN_Y","ys","range","xs","before","after","smartScroll","targetPoint","behavior","screen","target","up","down","isTopOver","isLeftOver","isBottomOver","isRightOver","findVisibleElement","elements","getPosition","boundary","dataKey","index","binarySearch","mid","getAreaInTabular","tabularElement","topPosition","leftPosition","bottomPosition","rightPosition","rows","cols","rect","MARGIN","calcBelowPosition","maxWidth","margin","clampLeft","overflow","calcSideStyle","gap","flipped","clampPopup","vw","vh","hAlignTransform","hAlign","LAST_MODIFIED","CSS","embedStyle"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const focus: (el: HTMLElement | null | undefined) => void;
2
+ /**
3
+ * Prevents Safari elastic bounce (rubber-band) at scroll boundaries.
4
+ * No-op on non-Safari browsers. Returns a cleanup function to remove the listeners.
5
+ */
6
+ export declare const preventSafariBounce: (el: HTMLDivElement) => (() => void);
7
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/lib/dom.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,IAAI,WAAW,GAAG,IAAI,GAAG,SAAS,SAEvD,CAAC;AAKF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,cAAc,KAAG,CAAC,MAAM,IAAI,CAmDnE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { PointType, Sheet } from '@gridsheet/engine';
2
+ export declare const insertTextAtCursor: (input: HTMLTextAreaElement, text: string) => void;
3
+ type InsertRefProps = {
4
+ input: HTMLTextAreaElement | null;
5
+ ref: string;
6
+ dryRun?: boolean;
7
+ };
8
+ export declare const insertRef: ({ input, ref, dryRun }: InsertRefProps) => boolean;
9
+ export declare const isRefInsertable: (input: HTMLTextAreaElement | null) => boolean;
10
+ export declare const expandInput: (input: HTMLTextAreaElement | null) => void;
11
+ export declare const resetInput: (input: HTMLTextAreaElement | null, sheet: Sheet, point: PointType) => void;
12
+ export declare const isFocus: (input: HTMLTextAreaElement | null) => boolean;
13
+ /**
14
+ * Handles auto-close behavior for double quotes in formula editing.
15
+ * - Typing `"` inserts `""` and places cursor between them.
16
+ * - Typing `"` when cursor is right before an auto-closed `"` skips over it.
17
+ * - Backspace between empty `""` deletes both quotes.
18
+ *
19
+ * Returns true if the event was handled (caller should preventDefault), false otherwise.
20
+ */
21
+ export declare const handleFormulaQuoteAutoClose: (e: {
22
+ key: string;
23
+ preventDefault(): void;
24
+ currentTarget: HTMLTextAreaElement;
25
+ }, inputting: string) => boolean;
26
+ export {};
27
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EAQX,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,kBAAkB,GAAI,OAAO,mBAAmB,EAAE,MAAM,MAAM,SAQ1E,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,wBAAgC,cAAc,KAAG,OAgD1E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,OAAO,mBAAmB,GAAG,IAAI,KAAG,OAEnE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,mBAAmB,GAAG,IAAI,SAM5D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,mBAAmB,GAAG,IAAI,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS,SAS3F,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,OAAO,mBAAmB,GAAG,IAAI,KAAG,OAK3D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,IAAI,IAAI,CAAC;IAAC,aAAa,EAAE,mBAAmB,CAAA;CAAE,EAC9E,WAAW,MAAM,KAChB,OAsEF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * lib/popup.ts
3
+ *
4
+ * Utility functions for computing the position of floating UI elements
5
+ * (tooltips, dropdowns, autocomplete lists, function guides, etc.)
6
+ * so they don't overflow the viewport.
7
+ */
8
+ export type HAlign = 'left' | 'right';
9
+ export type VAlign = 'top' | 'bottom';
10
+ export type PopupPosition = {
11
+ x: number;
12
+ y: number;
13
+ hAlign: HAlign;
14
+ };
15
+ export declare const calcBelowPosition: (rect: DOMRect, maxWidth?: number, margin?: number) => PopupPosition;
16
+ export declare const clampLeft: (left: number, width: number, margin?: number) => number;
17
+ export type SideStyle = {
18
+ left: string;
19
+ right: string;
20
+ };
21
+ export declare const calcSideStyle: (el: HTMLElement, gap?: number) => SideStyle;
22
+ export declare const clampPopup: (el: HTMLElement) => void;
23
+ export declare const hAlignTransform: (hAlign: HAlign) => string;
24
+ //# sourceMappingURL=popup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.d.ts","sourceRoot":"","sources":["../../src/lib/popup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAgBF,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,EAAE,iBAAc,EAAE,eAAe,KAAG,aAKlF,CAAC;AAUF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,eAAe,KAAG,MAIxE,CAAC;AAgBF,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,eAAO,MAAM,aAAa,GAAI,IAAI,WAAW,EAAE,YAAY,KAAG,SAc7D,CAAC;AAYF,eAAO,MAAM,UAAU,GAAI,IAAI,WAAW,KAAG,IAW5C,CAAC;AASF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAA6D,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Sheet, AreaType, PointType, Virtualization } from '@gridsheet/engine';
2
+ export declare const getCellRectPositions: (sheet: Sheet, { y, x }: PointType) => {
3
+ top: number;
4
+ left: number;
5
+ bottom: number;
6
+ right: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export declare const getScreenRect: (e: HTMLDivElement) => {
11
+ top: number;
12
+ left: number;
13
+ bottom: number;
14
+ right: number;
15
+ height: number;
16
+ width: number;
17
+ };
18
+ export declare const virtualize: (sheet: Sheet, e: HTMLDivElement | null) => Virtualization | null;
19
+ export declare const smartScroll: (sheet: Sheet, e: HTMLDivElement | null, targetPoint: PointType, behavior?: ScrollBehavior) => void;
20
+ export declare const getAreaInTabular: (tabularElement: HTMLDivElement) => AreaType;
21
+ //# sourceMappingURL=virtualization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualization.d.ts","sourceRoot":"","sources":["../../src/lib/virtualization.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,EAAE,UAAU,SAAS;;;;;;;CAerE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,GAAG,cAAc;;;;;;;CAQ9C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,GAAG,cAAc,GAAG,IAAI,KAAG,cAAc,GAAG,IA8DpF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,GAAG,cAAc,GAAG,IAAI,EACxB,aAAa,SAAS,EACtB,WAAU,cAAuB,SAoDlC,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,cAAc,KAAG,QAiBjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const embedStyle: () => void;
2
+ //# sourceMappingURL=embedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/styles/embedder.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,YAatB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const LAST_MODIFIED = 1786834463;
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:color-mix(in srgb,var(--gs-accent,#2563eb) 8%,transparent);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 var(--gs-accent,#2563eb);box-sizing:border-box}.gs-root1 .gs-line span{font-size:10px;padding:3px;background-color:var(--gs-accent,#2563eb);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}:where(.gs-root1[data-mode=light],.gs-editor[data-mode=light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}.gs-root1{background-color:var(--gs-bg);color:var(--gs-fg)}.gs-root1 .gs-main{background-color:var(--gs-canvas)}.gs-root1 .gs-tabular{background-color:var(--gs-canvas)}.gs-root1 .gs-sheet-body-data{background-color:var(--gs-surface)}.gs-root1 .gs-formula-bar{background-color:var(--gs-header-bg)}.gs-root1 .gs-formula-bar-editor-inner{color:var(--gs-fg)}.gs-root1 .gs-cell{border:solid 1px var(--gs-border)}.gs-root1 .gs-adjuster{background-color:var(--gs-border)}.gs-root1 .gs-tabular-inner{background-color:var(--gs-border)}.gs-root1 .gs-large-editor textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-root1 .gs-th{background-color:var(--gs-header-bg);color:var(--gs-header-fg)}.gs-root1 .gs-th-top{border-left:solid 1px var(--gs-border)}.gs-root1 .gs-th-top .gs-th-inner{border-top:solid var(--gs-mx-bt,1px) var(--gs-border)}.gs-root1 .gs-th-left{border-top:solid 1px var(--gs-border)}.gs-root1 .gs-th-left .gs-th-inner{border-left:solid var(--gs-mx-bl,1px) var(--gs-border)}.gs-root1 .gs-search-bar{color:color-mix(in srgb,var(--gs-fg) 40%,transparent)}.gs-root1 .gs-search-bar textarea{color:var(--gs-fg);caret-color:var(--gs-fg)}.gs-editor.gs-editing textarea{caret-color:var(--gs-fg)}.gs-editor.gs-editing .gs-editor-hl{background-color:var(--gs-editor-surface);color:var(--gs-fg)}.gs-editor .gs-editor-options{color:var(--gs-fg);background-color:var(--gs-editor-surface);border:solid 1px var(--gs-border)}:where(.gs-root1[data-mode=dark],.gs-editor[data-mode=dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb}@media (prefers-color-scheme:dark){:where(.gs-root1[data-mode=auto],.gs-editor[data-mode=auto]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-canvas:transparent;--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6}}:where(.gs-root1[data-mode=inherit-light],.gs-editor[data-mode=inherit-light]){--gs-fg:#1f2328;--gs-muted-fg:#6b7280;--gs-border:#e3e6ea;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#ffffff;--gs-editor-surface:#ffffff;--gs-header-bg:#f4f5f7;--gs-header-fg:#59616b;--gs-accent:#2563eb;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}:where(.gs-root1[data-mode=inherit-dark],.gs-editor[data-mode=inherit-dark]){--gs-fg:#e4e6e9;--gs-muted-fg:#8b9096;--gs-border:#2c2f34;--gs-bg:rgba(128, 128, 128, 0.07);--gs-surface:#1c1e21;--gs-editor-surface:#1c1e21;--gs-header-bg:#212327;--gs-header-fg:#a6abb2;--gs-accent:#3b82f6;--gs-bg:transparent;--gs-canvas:transparent;--gs-surface:transparent;--gs-header-bg:transparent}.gs-root1[data-mode=inherit-dark] .gs-adjuster,.gs-root1[data-mode=inherit-dark] .gs-tabular-inner,.gs-root1[data-mode=inherit-light] .gs-adjuster,.gs-root1[data-mode=inherit-light] .gs-tabular-inner{background-color:transparent}.gs-root1[data-mode=inherit-light] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-mode=inherit-dark] .gs-th{background-color:rgba(128,128,128,.1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.gs-root1[data-gridlines=horizontal] .gs-cell{border-left-color:transparent;border-right-color:transparent}.gs-root1[data-gridlines=none] .gs-cell{border-color:transparent}.gs-root1[data-density=comfortable] .gs-cell-rendered{padding:0 10px}.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 var(--gs-accent,#2563eb)}.gs-cell.gs-selecting{z-index:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 7%,transparent)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 65%,transparent);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:10px;font-weight:500;font-style:normal;font-family:inherit;letter-spacing:.2px;line-height:1.4;position:absolute;top:0;right:0;background-color:var(--gs-accent,#2563eb);color:#fff;padding:1px 5px;border-bottom-left-radius:4px;display:none;opacity:.92}.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 6px;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:var(--gs-accent,#2563eb);position:absolute;width:7px;height:7px;bottom:0;right:0;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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);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:var(--gs-accent,#2563eb);cursor:pointer;font-weight:700;letter-spacing:1px}.gs-column-menu .gs-filter-actions .gs-filter-apply-btn:hover{border-color:var(--gs-accent,#2563eb)}.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:var(--gs-accent,#2563eb);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.gs-column-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent)}.gs-row-menu .gs-row-fixed-check.gs-row-fixed-active{color:var(--gs-accent,#2563eb)}.gs-row-menu-btn{top:50%;transform:translateY(-50%);right:2px}.gs-row-menu-btn.gs-active{opacity:1;background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent);border-color:var(--gs-accent,#2563eb);color:var(--gs-accent,#2563eb)}.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;flex:1;min-width:0;display:flex;align-items:center}.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 var(--gs-accent,#2563eb);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:inherit;font-weight:500;position:absolute;top:0;right:0;margin-top:-17px;margin-right:-2px;padding:1px 5px;border-top-left-radius:4px;border-top-right-radius:4px;font-size:10px;background-color:var(--gs-accent,#2563eb);color:#fff;z-index:1}.gs-formula-bar{width:100%;position:relative;display:flex;align-items:stretch;box-sizing:border-box;border-style:solid;border-color:var(--gs-border,#e3e6ea);border-width:var(--gs-fb-bt,1px) var(--gs-fb-br,1px) var(--gs-fb-bb,1px) var(--gs-fb-bl,1px);padding:3px 6px;gap:6px}.gs-formula-bar .gs-selecting-address{display:flex;align-items:center;justify-content:center;min-width:38px;padding:0 4px;color:var(--gs-muted-fg,#6b7280);font-size:12px;font-variant-numeric:tabular-nums;text-align:center}.gs-formula-bar[data-spill=true]{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 6%,var(--gs-header-bg,#f4f5f7))}.gs-formula-bar[data-spill=true] .gs-selecting-address{color:var(--gs-accent,#2563eb);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:flex;align-items:center;justify-content:center;align-self:center;width:26px;height:18px;flex-shrink:0;color:var(--gs-muted-fg,#6b7280);font-style:italic;font-family:inherit;font-weight:400;text-align:center;font-size:13px;letter-spacing:.3px;border-radius:4px;background-color:color-mix(in srgb,var(--gs-fg,#1f2328) 6%,transparent)}.gs-formula-bar .gs-editor-hl{z-index:0;overflow-y:auto;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;text-align:left;line-height:24px}.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;text-align:left;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:var(--gs-fg,#1f2328);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:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);color:var(--gs-accent,#2563eb);font-weight:500}.gs-editor-option-selected:hover{background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 18%,transparent)}.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:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-opt{color:#888;font-size:11px}.gs-fn-guide1-arg-iter{font-weight:600;color:var(--gs-accent,#2563eb)}.gs-fn-guide1-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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-portal{display:contents}.gs-editor-portal[data-mode=dark] .gs-editor-options,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-options,.gs-editor[data-mode=dark] .gs-editor-options,.gs-editor[data-mode=inherit-dark] .gs-editor-options{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5)}.gs-editor-portal[data-mode=dark] .gs-editor-option,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option,.gs-editor[data-mode=dark] .gs-editor-option,.gs-editor[data-mode=inherit-dark] .gs-editor-option{color:#ccc}.gs-editor-portal[data-mode=dark] .gs-editor-option:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option:hover,.gs-editor[data-mode=dark] .gs-editor-option:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option:hover{background-color:#333}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected,.gs-editor[data-mode=dark] .gs-editor-option-selected,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected{background-color:#094771;color:#fff}.gs-editor-portal[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=dark] .gs-editor-option-selected:hover,.gs-editor[data-mode=inherit-dark] .gs-editor-option-selected:hover{background-color:#0d5a8f}.gs-editor-portal[data-mode=dark] .gs-editor-option-tab,.gs-editor-portal[data-mode=inherit-dark] .gs-editor-option-tab,.gs-editor[data-mode=dark] .gs-editor-option-tab,.gs-editor[data-mode=inherit-dark] .gs-editor-option-tab{color:#777;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide1,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1,.gs-editor[data-mode=dark] .gs-fn-guide1,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1{background:#252526;border-color:#454545;color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-example,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-example,.gs-editor[data-mode=dark] .gs-fn-guide1-example,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-example{background:#1e1e1e;border-color:#333;color:#d4d4d4}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-desc{color:#aaa}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-args,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-args,.gs-editor[data-mode=dark] .gs-fn-guide1-args,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-args{border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-iter,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-name{color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-opt,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-opt{color:#777}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=dark] .gs-fn-guide1-arg-desc,.gs-editor[data-mode=inherit-dark] .gs-fn-guide1-arg-desc{color:#999}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category,.gs-editor[data-mode=dark] .gs-fn-guide-category,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category{background:#2a2d3e;color:#7986cb;border-color:#3d4166}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-math,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-math{background:#0d2137;color:#64b5f6;border-color:#1a3a5c}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-statistics,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-statistics{background:#0d2218;color:#66bb6a;border-color:#1a3d2a}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-text,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-text{background:#2e2200;color:#ffd54f;border-color:#4d3900}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-time,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-time{background:#2d0d1e;color:#f48fb1;border-color:#4d1a33}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-lookup,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-lookup{background:#260d33;color:#ce93d8;border-color:#3d1a54}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-logical,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-logical{background:#0d2421;color:#4db6ac;border-color:#1a3d39}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-information,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-information{background:#0d2426;color:#4dd0e1;border-color:#1a3d40}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-finance,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-finance{background:#2e1500;color:#ffb74d;border-color:#4d2800}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-engineering,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-engineering{background:#1e1714;color:#bcaaa4;border-color:#332c28}.gs-editor-portal[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=dark] .gs-fn-guide-category.gs-fn-guide-category-other,.gs-editor[data-mode=inherit-dark] .gs-fn-guide-category.gs-fn-guide-category-other{background:#1e1e1e;color:#9e9e9e;border-color:#333}.gs-editor-portal[data-mode=dark] .gs-fn-guide2,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2,.gs-editor[data-mode=dark] .gs-fn-guide2,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2{background:#252526;border-color:#454545;box-shadow:0 4px 12px rgba(0,0,0,.5);color:#ccc}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-name,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-name,.gs-editor[data-mode=dark] .gs-fn-guide2-name,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-name{color:#dfdbdb;background:#333;border-color:#444}.gs-editor-portal[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=dark] .gs-fn-guide2 .gs-active-arg,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2 .gs-active-arg{color:#fff;background-color:#094771}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=dark] .gs-fn-guide2-arg-type,.gs-editor[data-mode=inherit-dark] .gs-fn-guide2-arg-type{background:#094771;color:#4fc1ff}.gs-editor-portal[data-mode=dark] .gs-fn-guide2-desc,.gs-editor-portal[data-mode=inherit-dark] .gs-fn-guide2-desc,.gs-editor[data-mode=dark] .gs-fn-guide2-desc,.gs-editor[data-mode=inherit-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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);padding:2px 4px;margin:0 -4px;border-radius:4px}.gs-fn-guide2-arg-type{color:var(--gs-accent,#2563eb);padding:0 4px;background:color-mix(in srgb,var(--gs-accent,#2563eb) 12%,transparent);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:flex;box-sizing:border-box;position:relative}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=horizontal] .gs-tabular{justify-content:safe center}.gs-root1[data-matrix-align=both] .gs-tabular,.gs-root1[data-matrix-align=vertical] .gs-tabular{align-items:safe center}.gs-tabular-inner{flex:0 0 auto;position:relative;overflow:hidden;overflow:clip;box-sizing:border-box;border-right:solid var(--gs-mx-br,1px) var(--gs-border,#e3e6ea);border-bottom:solid var(--gs-mx-bb,1px) var(--gs-border,#e3e6ea)}.gs-tabular-inner>table{table-layout:fixed;border-collapse:collapse;border-spacing:0}.gs-main[data-overflow-x=true] .gs-tabular-inner{border-right-width:0}.gs-main[data-overflow-y=true] .gs-tabular-inner{border-bottom-width:0}.gs-main::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:3;border:0 solid var(--gs-border,#e3e6ea)}.gs-main[data-overflow-x=true]::after{border-right-width:var(--gs-mx-br,1px)}.gs-main[data-overflow-y=true]::after{border-bottom-width:var(--gs-mx-bb,1px)}.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:var(--gs-accent,#2563eb)}.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 var(--gs-border,#e3e6ea)}.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;padding:3px 0;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);border-bottom: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:var(--gs-accent,#2563eb);background-color:color-mix(in srgb,var(--gs-accent,#2563eb) 22%,transparent);border-color:var(--gs-accent,#2563eb)}.gs-search-range span{white-space:nowrap;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.gs-loading-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:color-mix(in srgb,var(--gs-surface,#fff) 70%,transparent);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:all}.gs-loading-spinner{width:32px;height:32px;border:3px solid color-mix(in srgb,var(--gs-fg,#1f2328) 12%,transparent);border-top-color:var(--gs-accent,#2563eb);border-radius:50%;animation:spin .8s linear infinite}@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:color-mix(in srgb,var(--gs-accent,#2563eb) 15%,transparent);opacity:0}.gs-flash-overlay--active{animation:gs-flash .6s ease-out forwards}";
3
+ //# sourceMappingURL=minified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minified.d.ts","sourceRoot":"","sources":["../../src/styles/minified.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,GAAG,imuCAAikuC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@gridsheet/web",
3
+ "version": "3.3.0",
4
+ "description": "Web/DOM rendering layer for gridsheet, built on @gridsheet/engine (DOM, input, popup, virtualization, styles); re-exports the full engine API.",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "rm -rf ./dist || true && vite build",
17
+ "less": "lessc --clean-css ./src/styles/root.less ./src/styles/root.min.css",
18
+ "generate-style": "node ./src/generate-style.js"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/walkframe/gridsheet.git"
23
+ },
24
+ "keywords": [
25
+ "spreadsheet",
26
+ "spread-sheet",
27
+ "excel",
28
+ "gridsheet",
29
+ "formula",
30
+ "cell",
31
+ "grid"
32
+ ],
33
+ "author": "righ",
34
+ "license": "Apache-2.0",
35
+ "files": [
36
+ "dist/",
37
+ "package.json",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "bugs": {
42
+ "url": "https://github.com/walkframe/gridsheet/issues"
43
+ },
44
+ "homepage": "https://gridsheet.walkframe.com/",
45
+ "packageManager": "pnpm@10.6.5",
46
+ "devDependencies": {
47
+ "less": "^4.1.3",
48
+ "less-plugin-clean-css": "^1.5.1",
49
+ "typescript": "^5.8.2",
50
+ "vite": "^6.2.2",
51
+ "vite-plugin-dts": "^4.5.3"
52
+ },
53
+ "dependencies": {
54
+ "@gridsheet/engine": "workspace:*"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public"
58
+ }
59
+ }