@sheetxl/studio-vanilla 0.4.8 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/browser/cjs/{CHSE1pa8SMApg4BM.cjs → B1UGqZP_7Z0Ewpog.cjs} +2 -2
- package/browser/cjs/{Cqymi9AOXO_JYvY4.cjs → B6m9VXoFseD4zuZ5.cjs} +2 -2
- package/browser/cjs/{oNi7wirDlZ81Lm0Z.cjs → BKePSaEpM6Z063z-.cjs} +1 -1
- package/browser/cjs/{3nTDo2EiTknjadbt.cjs → Bqn0ZeP_srNfL9rG.cjs} +1 -1
- package/browser/cjs/{6Wu3sLyx-7NM6CXS.cjs → C-izbj62pQuZjOrT.cjs} +62 -59
- package/browser/cjs/{C2B3wbeahcHlbOBZ.cjs → C-w-GX8N54TxTjjf.cjs} +2 -2
- package/browser/cjs/{euAV1pPrNOIb6DV4.cjs → C1QGdcqJ-9sdGTQR.cjs} +2 -2
- package/browser/cjs/{C6nZKAevPqj8zJY-.cjs → C38aiRglHLxZ8KRY.cjs} +2 -2
- package/browser/cjs/{BCnlTOmUDmizyvVV.cjs → C4JMn_hMnlOnDpQO.cjs} +2 -2
- package/browser/cjs/{D6pPBbRPLTNFSXuO.cjs → CApEj4LhhPUvQjIG.cjs} +1 -1
- package/browser/cjs/{B11W4AIKbkJQG6ug.cjs → CFcJbmmXjWjl6fQH.cjs} +2 -2
- package/browser/cjs/{Dds58NEqJ0OalWH3.cjs → CKiDbCZ6rGgXK7yN.cjs} +4 -4
- package/browser/cjs/CM8btXQsJbnFKXUm.cjs +6 -0
- package/browser/cjs/{CE5NVYltiso41NzK.cjs → Cb0K3Wzp7BAa4zni.cjs} +1 -1
- package/browser/cjs/{BIPxYhhi1F-y0gSm.cjs → CiAUhPU7v1BK-8Bb.cjs} +3 -3
- package/browser/cjs/{Dy4SB47It0LGbh2I.cjs → CsXS-EN0N5SZHTnQ.cjs} +1 -1
- package/browser/cjs/{CD_HItzF2RneMAER.cjs → Cu2eUomoF0HToa4l.cjs} +2 -2
- package/browser/cjs/{VJLb1uMfbKAUW1QF.cjs → Cy7ii9B_Vqx94pbu.cjs} +8 -8
- package/browser/cjs/{DWTMnPR33rKK87Xt.cjs → CzI4ZcsmzsyPBpWN.cjs} +5 -5
- package/browser/cjs/{BqLDj2GlSzX8ZN3l.cjs → DKHzUx2gKXwboKy1.cjs} +1 -1
- package/browser/cjs/{CTXKzcsm-W1ujL_U.cjs → DKc8wAq8dwbDddQn.cjs} +5 -5
- package/browser/cjs/{z1aNSOtWsEE21p2H.cjs → DMyKApbUVRtNYC4e.cjs} +2 -2
- package/browser/cjs/{bHWvGntvmuk8t7sX.cjs → DROR08HMGyg7rizQ.cjs} +2 -2
- package/browser/cjs/{i0D2haODisHW8uGg.cjs → DfGDZlbFVknGyu_X.cjs} +1 -1
- package/browser/cjs/{CcQjGGiCx6Qz7yJ4.cjs → OQdqVM_6m78kE5Aj.cjs} +1 -1
- package/browser/cjs/index.cjs +2 -2
- package/browser/cjs/{DMUSzq5n2k0WNFw6.cjs → v4OEtYXaUw_GeiXM.cjs} +1 -1
- package/{cdn/assets/CuG5WoZ4OOj9RCsv.js → browser/esm/4uEr84M4w57AMyDg.mjs} +3 -3
- package/{cdn/assets/CPi83FXApMlTaVbs.js → browser/esm/B8Ja5DlyKAy8xfQD.mjs} +1 -1
- package/{cdn/assets/O1XID2whLDb1cTWS.js → browser/esm/B9bN60uAvy62vnwt.mjs} +6 -6
- package/{cdn/assets/DppHXtCDGzttFdS4.js → browser/esm/BAOzSQdzHl43K9Hd.mjs} +6 -6
- package/browser/esm/{eXQ_1uhRMyN-hfDZ.mjs → BQYSD5Nb35y0WeeV.mjs} +1 -1
- package/browser/esm/{h4NbNvV8KCL9Tl1v.mjs → BVcaNvORp_uKPQgJ.mjs} +3 -3
- package/browser/esm/{D_FC0zteMRPriWTD.mjs → BqXO_cQhrMJu7JoQ.mjs} +1 -1
- package/{cdn/assets/Dbd0AFDlzQDW0tOg.js → browser/esm/C18A_DcIEHNYBDvR.mjs} +9 -9
- package/browser/esm/{EUFvcP5R4HFDLn2V.mjs → C7FoKZbSzjvuY3UB.mjs} +8 -8
- package/{cdn/assets/CjVsKZEPAncg5mIk.js → browser/esm/CCIJpHSbFPjTEF8S.mjs} +1 -1
- package/browser/esm/{2RGq163l1wYJKGsa.mjs → CHNPjJxb0GY_naLa.mjs} +6889 -6858
- package/browser/esm/{DnWiOUNTPvi_llPT.mjs → CKHsU9LUNYowimxS.mjs} +1 -1
- package/browser/esm/{DQ0Li3WfKbZxSFuB.mjs → C_Zx1tYjI3n7KKZH.mjs} +2 -2
- package/browser/esm/{B7qUiL1xPnzfOHZw.mjs → Cm-m3bZh0V44y0li.mjs} +1 -1
- package/browser/esm/{B1CYiJmSpyx4TD5r.mjs → D1e_ccSgcNXvWHgy.mjs} +16 -16
- package/browser/esm/{BP8kNG31HYSkk1VW.mjs → D47D26mVYSAdb5C8.mjs} +26 -26
- package/browser/esm/{CDkmbShJijwq4EBo.mjs → D9CdO3PtV12RnK8K.mjs} +59 -59
- package/browser/esm/{cSe92c0HnvbRwiVM.mjs → D9x-Q8y57gePf-tE.mjs} +98 -98
- package/{cdn/assets/CLA1BGtRbWm0K0U0.js → browser/esm/DHhXutXh7b5LsU1m.mjs} +2 -2
- package/{cdn/assets/xlL3Ai-ka9qMVeua.js → browser/esm/DIGFi66CQPMV3HsL.mjs} +1 -1
- package/{cdn/assets/DTvvMKZZfsVRhbow.js → browser/esm/DamiTeQsSMP2Cwld.mjs} +9 -9
- package/browser/esm/{DyUvHYGMNA9W2zL6.mjs → DhD48oFrbrnZ6Zg5.mjs} +1 -1
- package/browser/esm/{CA_DRvBOFOlhezCt.mjs → Ln2ZalJgj1CiJJue.mjs} +6 -6
- package/{cdn/assets/BEFQcBJ71bA297Zu.js → browser/esm/S9fgUO7h8YgZxoKH.mjs} +1 -1
- package/browser/esm/index.mjs +2 -2
- package/browser/esm/{DXyJaUwHLq39-Jfa.mjs → qVAHcpq07IhtAaQc.mjs} +5 -5
- package/browser/esm/{ClXspoNrNV-A8BaL.mjs → xrzJ8ILZHb118Oyt.mjs} +17 -17
- package/cdn/assets/{B2hDWpWSEoChxhVY.js → 2-xJlw77WsCoyz09.js} +5071 -5040
- package/cdn/assets/{Bvy1txLm7c3LbPL7.js → B-9FcTf3xBEVGdjV.js} +59 -59
- package/cdn/assets/{BXBP2rNGQxrgUPvU.js → B-p1i2SNRMunPXCF.js} +8 -8
- package/cdn/assets/{C1x5-f1q8NeSwRA2.js → B3J6oAmsS7oLNFPd.js} +3 -3
- package/{browser/esm/CPi83FXApMlTaVbs.mjs → cdn/assets/B8Ja5DlyKAy8xfQD.js} +1 -1
- package/{browser/esm/BM74iVi-iQkHbrfo.mjs → cdn/assets/BG3YTMAzNKPRGoLs.js} +6 -6
- package/cdn/assets/{eXQ_1uhRMyN-hfDZ.js → BQYSD5Nb35y0WeeV.js} +1 -1
- package/{browser/esm/Ckz080o58XOgRhqj.mjs → cdn/assets/BbzUpvQOkxsN-yIH.js} +2 -2
- package/cdn/assets/{D_FC0zteMRPriWTD.js → BqXO_cQhrMJu7JoQ.js} +1 -1
- package/{browser/esm/BEIn7yNWsHNJisB6.mjs → cdn/assets/Bt1JSlSpWXDOBfq3.js} +3 -3
- package/{browser/esm/CjVsKZEPAncg5mIk.mjs → cdn/assets/CCIJpHSbFPjTEF8S.js} +1 -1
- package/cdn/assets/{DnWiOUNTPvi_llPT.js → CKHsU9LUNYowimxS.js} +1 -1
- package/{browser/esm/C_hRuPoaT857EnC1.mjs → cdn/assets/CWLJZwD2GVXljoWG.js} +9 -9
- package/cdn/assets/{B7qUiL1xPnzfOHZw.js → Cm-m3bZh0V44y0li.js} +1 -1
- package/cdn/assets/{BgChN-ZVYUOMDX9_.js → CtQlXGkNWgI-vtGy.js} +26 -26
- package/{browser/esm/xlL3Ai-ka9qMVeua.mjs → cdn/assets/DIGFi66CQPMV3HsL.js} +1 -1
- package/{browser/esm/4C7Rg83L5RYFoOvl.mjs → cdn/assets/DK4S0DbayChkfTD6.js} +9 -9
- package/cdn/assets/{g4FhlroGKmJM7Utd.js → DQvsBz9F1GS_S7r9.js} +6 -6
- package/cdn/assets/{C5NMOq74C3Sme49x.js → DTOgv_zwXSur-yCq.js} +16 -16
- package/cdn/assets/{tJI1G_FjDgqWo3rJ.js → DYZjOnD8WWQkCYuH.js} +98 -98
- package/cdn/assets/{DyUvHYGMNA9W2zL6.js → DhD48oFrbrnZ6Zg5.js} +1 -1
- package/cdn/assets/{DuU1-7vd87A1wfGJ.js → DhyAyTCDkMBf392P.js} +2 -2
- package/cdn/assets/{CtDntnnwJW1rZ3sM.js → P7HeVw5SHROLSWBz.js} +5 -5
- package/{browser/esm/6KgR81NK4yzANTBT.mjs → cdn/assets/S4Z0SN8x6EltjsHT.js} +6 -6
- package/{browser/esm/BEFQcBJ71bA297Zu.mjs → cdn/assets/S9fgUO7h8YgZxoKH.js} +1 -1
- package/cdn/assets/{CpVan9KpuEGXgwIK.js → guYe4C_6pE93QsDV.js} +17 -17
- package/cdn/index.js +2 -2
- package/cdn/loader.js +1 -1
- package/package.json +3 -3
- package/types/index.d.ts +9 -9
- package/browser/cjs/BYhOQCFEzewgsKDn.cjs +0 -6
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as f, jsxs as ie, Fragment as Kt } from "react/jsx-runtime";
|
|
2
2
|
import * as we from "react";
|
|
3
3
|
import L, { memo as Me, forwardRef as le, useRef as se, useMemo as te, useState as re, useEffect as G, useLayoutEffect as dt, useCallback as ne, Component as Gt, createElement as he, createContext as yn, isValidElement as Zt, useContext as wn, cloneElement as vn } from "react";
|
|
4
|
-
import { g as xt,
|
|
4
|
+
import { g as xt, c as yt, u as et, d as En, e as Cn, f as Sn, h as Dn, j as Tn, s as je, l as wt, m as vt, n as Tt, o as Mn, p as On, q as Xt, r as Ln, _ as Wn, w as ae, K as Qt, A as Mt, X as pt, Q as Nn, x as xe, y as Jt, z as An, B as me, C as Yt, D as Rn, H as mt, J as en, L as In, N as Pn, S as Fn, O as jn, R as Hn, U as zn, W as _n, Z as qn, b as Bn, $ as $n, a0 as ht, a1 as Vn, a2 as Un, a3 as Kn, a4 as Gn, a5 as Zn, a6 as Xn, Y as Qn, a7 as ee, a8 as We, a9 as Ot, aa as Jn, ab as Yn, ac as eo, ad as to, ae as no, af as oo, ag as nt, ah as Ne, ai as ro, aj as ao, ak as io, al as so, am as Lt, an as Wt, ao as lo, ap as co, aq as uo, ar as po, as as Be } from "./CHNPjJxb0GY_naLa.mjs";
|
|
5
5
|
import { createPortal as mo } from "react-dom";
|
|
6
|
-
import { CommonUtils as ot, UndoManager as ho, Workbook as
|
|
6
|
+
import { CommonUtils as ot, UndoManager as ho, Workbook as Nt, PartialError as fo } from "@sheetxl/sdk";
|
|
7
7
|
/**
|
|
8
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.
|
|
8
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.10
|
|
9
9
|
*
|
|
10
10
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
11
11
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
@@ -18,10 +18,10 @@ const ko = je("div", { name: "MuiCollapse", slot: "Root", overridesResolver: (e,
|
|
|
18
18
|
const { ownerState: r } = e;
|
|
19
19
|
return [o.root, o[r.orientation], r.state === "entered" && o.entered, r.state === "exited" && !r.in && r.collapsedSize === "0px" && o.hidden];
|
|
20
20
|
} })(Mn(({ theme: e }) => ({ height: 0, overflow: "hidden", transition: e.transitions.create("height"), variants: [{ props: { orientation: "horizontal" }, style: { height: "auto", width: 0, transition: e.transitions.create("width") } }, { props: { state: "entered" }, style: { height: "auto", overflow: "visible" } }, { props: { state: "entered", orientation: "horizontal" }, style: { width: "auto" } }, { props: ({ ownerState: o }) => o.state === "exited" && !o.in && o.collapsedSize === "0px", style: { visibility: "hidden" } }] }))), bo = je("div", { name: "MuiCollapse", slot: "Wrapper", overridesResolver: (e, o) => o.wrapper })({ display: "flex", width: "100%", variants: [{ props: { orientation: "horizontal" }, style: { width: "auto", height: "100%" } }] }), xo = je("div", { name: "MuiCollapse", slot: "WrapperInner", overridesResolver: (e, o) => o.wrapperInner })({ width: "100%", variants: [{ props: { orientation: "horizontal" }, style: { width: "auto", height: "100%" } }] }), ft = we.forwardRef(function(e, o) {
|
|
21
|
-
const r = et({ props: e, name: "MuiCollapse" }), { addEndListener: t, children: n, className: a, collapsedSize: i = "0px", component: l, easing: s, in: c, onEnter: u, onEntered: p, onEntering: k, onExit: w, onExited: b, onExiting: g, orientation: y = "vertical", style: h, timeout: d = En.standard, TransitionComponent: S = Cn, ...v } = r,
|
|
21
|
+
const r = et({ props: e, name: "MuiCollapse" }), { addEndListener: t, children: n, className: a, collapsedSize: i = "0px", component: l, easing: s, in: c, onEnter: u, onEntered: p, onEntering: k, onExit: w, onExited: b, onExiting: g, orientation: y = "vertical", style: h, timeout: d = En.standard, TransitionComponent: S = Cn, ...v } = r, N = { ...r, orientation: y, collapsedSize: i }, D = ((E) => {
|
|
22
22
|
const { orientation: B, classes: $ } = E;
|
|
23
23
|
return vt({ root: ["root", `${B}`], entered: ["entered"], hidden: ["hidden"], wrapper: ["wrapper", `${B}`], wrapperInner: ["wrapperInner", `${B}`] }, go, $);
|
|
24
|
-
})(
|
|
24
|
+
})(N), j = Sn(), _ = Dn(), I = we.useRef(null), q = we.useRef(), K = typeof i == "number" ? `${i}px` : i, Q = y === "horizontal", de = Q ? "width" : "height", P = we.useRef(null), V = Tn(o, P), x = (E) => (B) => {
|
|
25
25
|
if (E) {
|
|
26
26
|
const $ = P.current;
|
|
27
27
|
B === void 0 ? E($) : E($, B);
|
|
@@ -31,27 +31,27 @@ const ko = je("div", { name: "MuiCollapse", slot: "Root", overridesResolver: (e,
|
|
|
31
31
|
}), F = x((E, B) => {
|
|
32
32
|
const $ = M();
|
|
33
33
|
I.current && Q && (I.current.style.position = "");
|
|
34
|
-
const { duration:
|
|
34
|
+
const { duration: J, easing: pe } = Tt({ style: h, timeout: d, easing: s }, { mode: "enter" });
|
|
35
35
|
if (d === "auto") {
|
|
36
36
|
const ve = j.transitions.getAutoHeightDuration($);
|
|
37
37
|
E.style.transitionDuration = `${ve}ms`, q.current = ve;
|
|
38
|
-
} else E.style.transitionDuration = typeof
|
|
38
|
+
} else E.style.transitionDuration = typeof J == "string" ? J : `${J}ms`;
|
|
39
39
|
E.style[de] = `${$}px`, E.style.transitionTimingFunction = pe, k && k(E, B);
|
|
40
40
|
}), H = x((E, B) => {
|
|
41
41
|
E.style[de] = "auto", p && p(E, B);
|
|
42
42
|
}), z = x((E) => {
|
|
43
43
|
E.style[de] = `${M()}px`, w && w(E);
|
|
44
|
-
}), ge = x(b),
|
|
45
|
-
const B = M(), { duration: $, easing:
|
|
44
|
+
}), ge = x(b), A = x((E) => {
|
|
45
|
+
const B = M(), { duration: $, easing: J } = Tt({ style: h, timeout: d, easing: s }, { mode: "exit" });
|
|
46
46
|
if (d === "auto") {
|
|
47
47
|
const pe = j.transitions.getAutoHeightDuration(B);
|
|
48
48
|
E.style.transitionDuration = `${pe}ms`, q.current = pe;
|
|
49
49
|
} else E.style.transitionDuration = typeof $ == "string" ? $ : `${$}ms`;
|
|
50
|
-
E.style[de] = K, E.style.transitionTimingFunction =
|
|
50
|
+
E.style[de] = K, E.style.transitionTimingFunction = J, g && g(E);
|
|
51
51
|
});
|
|
52
|
-
return f(S, { in: c, onEnter: T, onEntered: H, onEntering: F, onExit: z, onExited: ge, onExiting:
|
|
52
|
+
return f(S, { in: c, onEnter: T, onEntered: H, onEntering: F, onExit: z, onExited: ge, onExiting: A, addEndListener: (E) => {
|
|
53
53
|
d === "auto" && _.start(q.current || 0, E), t && t(P.current, E);
|
|
54
|
-
}, nodeRef: P, timeout: d === "auto" ? null : d, ...v, children: (E, { ownerState: B, ...$ }) => f(ko, { as: l, className: wt(D.root, a, { entered: D.entered, exited: !c && K === "0px" && D.hidden }[E]), style: { [Q ? "minWidth" : "minHeight"]: K, ...h }, ref: V, ownerState: { ...
|
|
54
|
+
}, nodeRef: P, timeout: d === "auto" ? null : d, ...v, children: (E, { ownerState: B, ...$ }) => f(ko, { as: l, className: wt(D.root, a, { entered: D.entered, exited: !c && K === "0px" && D.hidden }[E]), style: { [Q ? "minWidth" : "minHeight"]: K, ...h }, ref: V, ownerState: { ...N, state: E }, ...$, children: f(bo, { ownerState: { ...N, state: E }, className: D.wrapper, ref: I, children: f(xo, { ownerState: { ...N, state: E }, className: D.wrapperInner, children: n }) }) }) });
|
|
55
55
|
});
|
|
56
56
|
function yo(e) {
|
|
57
57
|
return xt("MuiCard", e);
|
|
@@ -77,7 +77,7 @@ const Co = je("div", { name: "MuiCardActions", slot: "Root", overridesResolver:
|
|
|
77
77
|
return vt({ root: ["root", !u && "spacing"] }, Eo, c);
|
|
78
78
|
})(i);
|
|
79
79
|
return f(Co, { className: wt(l.root, n), ownerState: i, ref: o, ...a });
|
|
80
|
-
}), gt = typeof Xt({}) == "function", Do = (e, o) => ({ WebkitFontSmoothing: "antialiased", MozOsxFontSmoothing: "grayscale", boxSizing: "border-box", WebkitTextSizeAdjust: "100%", ...o && !e.vars && { colorScheme: e.palette.mode } }), To = (e) => ({ color: (e.vars || e).palette.text.primary, ...e.typography.body1, backgroundColor: (e.vars || e).palette.background.default, "@media print": { backgroundColor: (e.vars || e).palette.common.white } }),
|
|
80
|
+
}), gt = typeof Xt({}) == "function", Do = (e, o) => ({ WebkitFontSmoothing: "antialiased", MozOsxFontSmoothing: "grayscale", boxSizing: "border-box", WebkitTextSizeAdjust: "100%", ...o && !e.vars && { colorScheme: e.palette.mode } }), To = (e) => ({ color: (e.vars || e).palette.text.primary, ...e.typography.body1, backgroundColor: (e.vars || e).palette.background.default, "@media print": { backgroundColor: (e.vars || e).palette.common.white } }), At = (e, o = !1) => {
|
|
81
81
|
const r = {};
|
|
82
82
|
o && e.colorSchemes && typeof e.getColorSchemeSelector == "function" && Object.entries(e.colorSchemes).forEach(([a, i]) => {
|
|
83
83
|
const l = e.getColorSchemeSelector(a);
|
|
@@ -86,8 +86,8 @@ const Co = je("div", { name: "MuiCardActions", slot: "Root", overridesResolver:
|
|
|
86
86
|
let t = { html: Do(e, o), "*, *::before, *::after": { boxSizing: "inherit" }, "strong, b": { fontWeight: e.typography.fontWeightBold }, body: { margin: 0, ...To(e), "&::backdrop": { backgroundColor: (e.vars || e).palette.background.default } }, ...r };
|
|
87
87
|
const n = e.components?.MuiCssBaseline?.styleOverrides;
|
|
88
88
|
return n && (t = [t, n]), t;
|
|
89
|
-
}, Qe = "mui-ecs", Mo = Xt(gt ? ({ theme: e, enableColorScheme: o }) =>
|
|
90
|
-
const r =
|
|
89
|
+
}, Qe = "mui-ecs", Mo = Xt(gt ? ({ theme: e, enableColorScheme: o }) => At(e, o) : ({ theme: e }) => ((o) => {
|
|
90
|
+
const r = At(o, !1), t = Array.isArray(r) ? r[0] : r;
|
|
91
91
|
return !o.vars && t && (t.html[`:root:has(${Qe})`] = { colorScheme: o.palette.mode }), o.colorSchemes && Object.entries(o.colorSchemes).forEach(([n, a]) => {
|
|
92
92
|
const i = o.getColorSchemeSelector(n);
|
|
93
93
|
i.startsWith("@") ? t[i] = { [`:root:not(:has(.${Qe}))`]: { colorScheme: a.palette?.mode } } : t[i.replace(/\s*&/, "")] = { [`&:not(:has(.${Qe}))`]: { colorScheme: a.palette?.mode } };
|
|
@@ -98,7 +98,7 @@ function Oo(e) {
|
|
|
98
98
|
return ie(we.Fragment, { children: [gt && f(Mo, { enableColorScheme: t }), !gt && !t && f("span", { className: Qe, style: { display: "none" } }), r] });
|
|
99
99
|
}
|
|
100
100
|
const Lo = Ln(f("path", { d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z" }), "CancelOutlined"), Wo = yn(null), rt = { didCatch: !1, error: null };
|
|
101
|
-
class
|
|
101
|
+
class No extends Gt {
|
|
102
102
|
constructor(o) {
|
|
103
103
|
super(o), this.resetErrorBoundary = this.resetErrorBoundary.bind(this), this.state = rt;
|
|
104
104
|
}
|
|
@@ -150,7 +150,7 @@ function fe() {
|
|
|
150
150
|
for (var e, o, r = 0, t = ""; r < arguments.length; ) (e = arguments[r++]) && (o = tn(e)) && (t && (t += " "), t += o);
|
|
151
151
|
return t;
|
|
152
152
|
}
|
|
153
|
-
let
|
|
153
|
+
let Ao = { data: "" }, Ro = /(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g, Io = /\/\*[^]*?\*\/| +/g, Rt = /\n+/g, ye = (e, o) => {
|
|
154
154
|
let r = "", t = "", n = "";
|
|
155
155
|
for (let a in e) {
|
|
156
156
|
let i = e[a];
|
|
@@ -175,8 +175,8 @@ function kt(e) {
|
|
|
175
175
|
})(p));
|
|
176
176
|
if (!ce[k]) {
|
|
177
177
|
let d = p !== i ? i : ((S) => {
|
|
178
|
-
let v,
|
|
179
|
-
for (; v = Ro.exec(S.replace(Io, "")); ) v[4] ? D.shift() : v[3] ? (
|
|
178
|
+
let v, N, D = [{}];
|
|
179
|
+
for (; v = Ro.exec(S.replace(Io, "")); ) v[4] ? D.shift() : v[3] ? (N = v[3].replace(Rt, " ").trim(), D.unshift(D[0][N] = D[0][N] || {})) : D[0][v[1]] = v[2].replace(Rt, " ").trim();
|
|
180
180
|
return D[0];
|
|
181
181
|
})(i);
|
|
182
182
|
ce[k] = ye(u ? { ["@keyframes " + k]: d } : d, s ? "" : "." + k);
|
|
@@ -191,7 +191,7 @@ function kt(e) {
|
|
|
191
191
|
c = p ? "." + p : u && typeof u == "object" ? u.props ? "" : ye(u, "") : u === !1 ? "" : u;
|
|
192
192
|
}
|
|
193
193
|
return i + l + (c ?? "");
|
|
194
|
-
}, "")) : r.reduce((i, l) => Object.assign(i, l && l.call ? l(o.p) : l), {}) : r, ((i) => typeof window == "object" ? ((i ? i.querySelector("#_goober") : window._goober) || Object.assign((i || document.head).appendChild(document.createElement("style")), { innerHTML: " ", id: "_goober" })).firstChild : i ||
|
|
194
|
+
}, "")) : r.reduce((i, l) => Object.assign(i, l && l.call ? l(o.p) : l), {}) : r, ((i) => typeof window == "object" ? ((i ? i.querySelector("#_goober") : window._goober) || Object.assign((i || document.head).appendChild(document.createElement("style")), { innerHTML: " ", id: "_goober" })).firstChild : i || Ao)(o.target), o.g, o.o, o.k);
|
|
195
195
|
var t, n, a;
|
|
196
196
|
}
|
|
197
197
|
function on(e, o, r) {
|
|
@@ -227,18 +227,18 @@ function It(e) {
|
|
|
227
227
|
kt.bind({ g: 1 }), kt.bind({ k: 1 });
|
|
228
228
|
var Pt = function() {
|
|
229
229
|
return "";
|
|
230
|
-
}, an = L.createContext({ enqueueSnackbar: Pt, closeSnackbar: Pt }), at = "@media (max-width:599.95px)",
|
|
230
|
+
}, an = L.createContext({ enqueueSnackbar: Pt, closeSnackbar: Pt }), at = "@media (max-width:599.95px)", Je = "@media (min-width:600px)", Ft = function(e) {
|
|
231
231
|
return e.charAt(0).toUpperCase() + e.slice(1);
|
|
232
232
|
}, Et = function(e) {
|
|
233
233
|
return "" + Ft(e.vertical) + Ft(e.horizontal);
|
|
234
234
|
}, $e = function(e) {
|
|
235
235
|
return !!e || e === 0;
|
|
236
|
-
}, Ve = "unmounted", Ce = "exited", Se = "entering",
|
|
236
|
+
}, Ve = "unmounted", Ce = "exited", Se = "entering", Ae = "entered", jt = "exiting", Ct = function(e) {
|
|
237
237
|
function o(t) {
|
|
238
238
|
var n;
|
|
239
239
|
n = e.call(this, t) || this;
|
|
240
240
|
var a, i = t.appear;
|
|
241
|
-
return n.appearStatus = null, t.in ? i ? (a = Ce, n.appearStatus = Se) : a =
|
|
241
|
+
return n.appearStatus = null, t.in ? i ? (a = Ce, n.appearStatus = Se) : a = Ae : a = t.unmountOnExit || t.mountOnEnter ? Ve : Ce, n.state = { status: a }, n.nextCallback = null, n;
|
|
242
242
|
}
|
|
243
243
|
rn(o, e), o.getDerivedStateFromProps = function(t, n) {
|
|
244
244
|
return t.in && n.status === Ve ? { status: Ce } : null;
|
|
@@ -250,7 +250,7 @@ var Pt = function() {
|
|
|
250
250
|
var n = null;
|
|
251
251
|
if (t !== this.props) {
|
|
252
252
|
var a = this.state.status;
|
|
253
|
-
this.props.in ? a !== Se && a !==
|
|
253
|
+
this.props.in ? a !== Se && a !== Ae && (n = Se) : a !== Se && a !== Ae || (n = jt);
|
|
254
254
|
}
|
|
255
255
|
this.updateStatus(!1, n);
|
|
256
256
|
}, r.componentWillUnmount = function() {
|
|
@@ -264,11 +264,11 @@ var Pt = function() {
|
|
|
264
264
|
var n = this, a = this.props.enter, i = t, l = this.getTimeouts();
|
|
265
265
|
t || a ? (this.props.onEnter && this.props.onEnter(this.node, i), this.safeSetState({ status: Se }, function() {
|
|
266
266
|
n.props.onEntering && n.props.onEntering(n.node, i), n.onTransitionEnd(l.enter, function() {
|
|
267
|
-
n.safeSetState({ status:
|
|
267
|
+
n.safeSetState({ status: Ae }, function() {
|
|
268
268
|
n.props.onEntered && n.props.onEntered(n.node, i);
|
|
269
269
|
});
|
|
270
270
|
});
|
|
271
|
-
})) : this.safeSetState({ status:
|
|
271
|
+
})) : this.safeSetState({ status: Ae }, function() {
|
|
272
272
|
n.props.onEntered && n.props.onEntered(n.node, i);
|
|
273
273
|
});
|
|
274
274
|
}, r.performExit = function() {
|
|
@@ -320,7 +320,7 @@ function bt(e, o) {
|
|
|
320
320
|
};
|
|
321
321
|
}, [e, o]);
|
|
322
322
|
}
|
|
323
|
-
function
|
|
323
|
+
function Ye(e) {
|
|
324
324
|
var o = e.timeout, r = e.style, t = r === void 0 ? {} : r, n = e.mode;
|
|
325
325
|
return { duration: typeof o == "object" ? o[n] || 0 : o, easing: t.transitionTimingFunction, delay: t.transitionDelay };
|
|
326
326
|
}
|
|
@@ -376,15 +376,15 @@ var cn = le(function(e, o) {
|
|
|
376
376
|
}, [n]);
|
|
377
377
|
return G(function() {
|
|
378
378
|
if (!a && n !== "down" && n !== "right") {
|
|
379
|
-
var d = function(v,
|
|
379
|
+
var d = function(v, N) {
|
|
380
380
|
var D;
|
|
381
381
|
function j() {
|
|
382
382
|
for (var _ = this, I = arguments.length, q = new Array(I), K = 0; K < I; K++) q[K] = arguments[K];
|
|
383
383
|
clearTimeout(D), D = setTimeout(function() {
|
|
384
384
|
v.apply(_, q);
|
|
385
|
-
},
|
|
385
|
+
}, N);
|
|
386
386
|
}
|
|
387
|
-
return
|
|
387
|
+
return N === void 0 && (N = 166), j.clear = function() {
|
|
388
388
|
clearTimeout(D);
|
|
389
389
|
}, j;
|
|
390
390
|
}(function() {
|
|
@@ -399,10 +399,10 @@ var cn = le(function(e, o) {
|
|
|
399
399
|
}, [a, h]), he(Ct, Object.assign({ appear: !0, nodeRef: b, onEnter: function(d, S) {
|
|
400
400
|
Ue(n, d), sn(d), c && c(d, S);
|
|
401
401
|
}, onEntered: u, onEntering: function(d) {
|
|
402
|
-
var S =
|
|
402
|
+
var S = Ye({ timeout: s, mode: "enter", style: W({}, i, { transitionTimingFunction: i?.transitionTimingFunction || "cubic-bezier(0.0, 0, 0.2, 1)" }) });
|
|
403
403
|
d.style.webkitTransition = Te("-webkit-transform", S), d.style.transition = Te("transform", S), d.style.webkitTransform = "none", d.style.transform = "none";
|
|
404
404
|
}, onExit: function(d) {
|
|
405
|
-
var S =
|
|
405
|
+
var S = Ye({ timeout: s, mode: "exit", style: W({}, i, { transitionTimingFunction: i?.transitionTimingFunction || "cubic-bezier(0.4, 0, 0.6, 1)" }) });
|
|
406
406
|
d.style.webkitTransition = Te("-webkit-transform", S), d.style.transition = Te("transform", S), Ue(n, d), p && p(d);
|
|
407
407
|
}, onExited: function(d) {
|
|
408
408
|
d.style.webkitTransition = "", d.style.transition = "", k && k(d);
|
|
@@ -443,13 +443,13 @@ var un = "notistack-CollapseWrapper", Po = function(e) {
|
|
|
443
443
|
}, onEntered: function(c) {
|
|
444
444
|
c.style.height = "auto";
|
|
445
445
|
}, onEntering: function(c) {
|
|
446
|
-
var u = s(), p =
|
|
446
|
+
var u = s(), p = Ye({ timeout: 175, mode: "enter" }), k = p.duration, w = p.easing;
|
|
447
447
|
c.style.transitionDuration = typeof k == "string" ? k : k + "ms", c.style.height = u + "px", c.style.transitionTimingFunction = w || "";
|
|
448
448
|
}, onExit: function(c) {
|
|
449
449
|
c.style.height = s() + "px";
|
|
450
450
|
}, onExited: n, onExiting: function(c) {
|
|
451
451
|
sn(c);
|
|
452
|
-
var u =
|
|
452
|
+
var u = Ye({ timeout: 175, mode: "exit" }), p = u.duration, k = u.easing;
|
|
453
453
|
c.style.transitionDuration = typeof p == "string" ? p : p + "ms", c.style.height = it, c.style.transitionTimingFunction = k || "";
|
|
454
454
|
}, nodeRef: i, timeout: 175 }, function(c, u) {
|
|
455
455
|
return he("div", Object.assign({ ref: l, className: fe(_t.root, c === "entered" && _t.entered), style: W({ pointerEvents: "all", overflow: "hidden", minHeight: it, transition: Te("height") }, c === "entered" && { overflow: "visible" }, {}, c === "exited" && !t && { visibility: "hidden" }) }, u), he("div", { ref: a, className: un, style: { display: "flex", width: "100%" } }, r));
|
|
@@ -507,7 +507,7 @@ var st, pn = le(function(e, o) {
|
|
|
507
507
|
} }), r);
|
|
508
508
|
});
|
|
509
509
|
pn.displayName = "Snackbar";
|
|
510
|
-
var zo = ze({ root: (st = { display: "flex", flexWrap: "wrap", flexGrow: 1 }, st[
|
|
510
|
+
var zo = ze({ root: (st = { display: "flex", flexWrap: "wrap", flexGrow: 1 }, st[Je] = { flexGrow: "initial", minWidth: "288px" }, st) }), St = le(function(e, o) {
|
|
511
511
|
var r = e.className, t = He(e, ["className"]);
|
|
512
512
|
return L.createElement("div", Object.assign({ ref: o, className: fe(zo.root, r) }, t));
|
|
513
513
|
});
|
|
@@ -541,16 +541,16 @@ var Ie, lt, Ge, Ze, ct, _o = Me(mn), qo = ze({ wrappedRoot: { width: "100%", pos
|
|
|
541
541
|
return W({}, q, ((Q = {})[K] = _[K], Q));
|
|
542
542
|
}, {});
|
|
543
543
|
}(c);
|
|
544
|
-
}, [c]), w = s.open, b = s.SnackbarProps, g = s.TransitionComponent, y = s.TransitionProps, h = s.transitionDuration, d = s.disableWindowBlurListener, S = s.content, v = He(s, ["open", "SnackbarProps", "TransitionComponent", "TransitionProps", "transitionDuration", "disableWindowBlurListener", "content", "entered", "requestClose", "onEnter", "onEntered", "onExit", "onExited"]),
|
|
544
|
+
}, [c]), w = s.open, b = s.SnackbarProps, g = s.TransitionComponent, y = s.TransitionProps, h = s.transitionDuration, d = s.disableWindowBlurListener, S = s.content, v = He(s, ["open", "SnackbarProps", "TransitionComponent", "TransitionProps", "transitionDuration", "disableWindowBlurListener", "content", "entered", "requestClose", "onEnter", "onEntered", "onExit", "onExited"]), N = W({ direction: (l = v.anchorOrigin, l.horizontal !== "center" ? qt[l.horizontal] : qt[l.vertical]), timeout: h }, y), D = S;
|
|
545
545
|
typeof D == "function" && (D = D(v.id, v.message));
|
|
546
546
|
var j = ["onEnter", "onEntered", "onExit", "onExited"].reduce(function(_, I) {
|
|
547
547
|
var q;
|
|
548
548
|
return W({}, _, ((q = {})[I] = Fe([e.snack[I], e[I]], v.id), q));
|
|
549
549
|
}, {});
|
|
550
|
-
return L.createElement(dn, { in: t, onExited: j.onExited }, L.createElement(pn, { open: w, id: v.id, disableWindowBlurListener: d, autoHideDuration: v.autoHideDuration, className: fe(qo.wrappedRoot, k.root, k[Fo(v.anchorOrigin)]), SnackbarProps: b, onClose: a }, L.createElement(g, Object.assign({},
|
|
550
|
+
return L.createElement(dn, { in: t, onExited: j.onExited }, L.createElement(pn, { open: w, id: v.id, disableWindowBlurListener: d, autoHideDuration: v.autoHideDuration, className: fe(qo.wrappedRoot, k.root, k[Fo(v.anchorOrigin)]), SnackbarProps: b, onClose: a }, L.createElement(g, Object.assign({}, N, { appear: !0, in: w, onExit: j.onExit, onExited: i, onEnter: j.onEnter, onEntered: Fe([j.onEntered, function() {
|
|
551
551
|
e.snack.requestClose && a(null, "instructed", e.snack.id);
|
|
552
552
|
}], v.id) }), D || L.createElement(p, Object.assign({}, v)))));
|
|
553
|
-
}, Pe = 20, ut = 6, $o = 2, Vt = "." + un, Xe = ze({ root: (Ie = { boxSizing: "border-box", display: "flex", maxHeight: "100%", position: "fixed", zIndex: 1400, height: "auto", width: "auto", transition: Te(["top", "right", "bottom", "left", "max-width"], { duration: 300, easing: "ease" }), pointerEvents: "none" }, Ie[Vt] = { padding: ut + "px 0px", transition: "padding 300ms ease 0ms" }, Ie.maxWidth = "calc(100% - " + 2 * Pe + "px)", Ie[at] = { width: "100%", maxWidth: "calc(100% - 32px)" }, Ie), rootDense: (lt = {}, lt[Vt] = { padding: $o + "px 0px" }, lt), top: { top: Pe - ut + "px", flexDirection: "column" }, bottom: { bottom: Pe - ut + "px", flexDirection: "column-reverse" }, left: (Ge = { left: Pe + "px" }, Ge[
|
|
553
|
+
}, Pe = 20, ut = 6, $o = 2, Vt = "." + un, Xe = ze({ root: (Ie = { boxSizing: "border-box", display: "flex", maxHeight: "100%", position: "fixed", zIndex: 1400, height: "auto", width: "auto", transition: Te(["top", "right", "bottom", "left", "max-width"], { duration: 300, easing: "ease" }), pointerEvents: "none" }, Ie[Vt] = { padding: ut + "px 0px", transition: "padding 300ms ease 0ms" }, Ie.maxWidth = "calc(100% - " + 2 * Pe + "px)", Ie[at] = { width: "100%", maxWidth: "calc(100% - 32px)" }, Ie), rootDense: (lt = {}, lt[Vt] = { padding: $o + "px 0px" }, lt), top: { top: Pe - ut + "px", flexDirection: "column" }, bottom: { bottom: Pe - ut + "px", flexDirection: "column-reverse" }, left: (Ge = { left: Pe + "px" }, Ge[Je] = { alignItems: "flex-start" }, Ge[at] = { left: "16px" }, Ge), right: (Ze = { right: Pe + "px" }, Ze[Je] = { alignItems: "flex-end" }, Ze[at] = { right: "16px" }, Ze), center: (ct = { left: "50%", transform: "translateX(-50%)" }, ct[Je] = { alignItems: "center" }, ct) }), Vo = Me(function(e) {
|
|
554
554
|
var o = e.classes, r = o === void 0 ? {} : o, t = e.anchorOrigin, n = e.dense, a = e.children, i = fe("notistack-SnackbarContainer", Xe[t.vertical], Xe[t.horizontal], Xe.root, r.containerRoot, r["containerAnchorOrigin" + Et(t)], n && Xe.rootDense);
|
|
555
555
|
return L.createElement("div", { className: i }, a);
|
|
556
556
|
}), Ut = function(e) {
|
|
@@ -564,12 +564,12 @@ var Ie, lt, Ge, Ze, ct, _o = Me(mn), qo = ze({ wrappedRoot: { width: "100%", pos
|
|
|
564
564
|
return function(h, d) {
|
|
565
565
|
return d === void 0 && (d = !1), d ? W({}, be[h], {}, y[h], {}, g[h]) : h === "autoHideDuration" ? (D = g.autoHideDuration, j = y.autoHideDuration, (_ = function(I) {
|
|
566
566
|
return typeof I == "number" || I === null;
|
|
567
|
-
})(D) ? D : _(j) ? j : be.autoHideDuration) : h === "transitionDuration" ? (S = g.transitionDuration, v = y.transitionDuration, (
|
|
567
|
+
})(D) ? D : _(j) ? j : be.autoHideDuration) : h === "transitionDuration" ? (S = g.transitionDuration, v = y.transitionDuration, (N = function(I, q) {
|
|
568
568
|
return q.some(function(K) {
|
|
569
569
|
return typeof I === K;
|
|
570
570
|
});
|
|
571
|
-
})(S, ["string", "number"]) ? S :
|
|
572
|
-
var S, v,
|
|
571
|
+
})(S, ["string", "number"]) ? S : N(S, ["object"]) ? W({}, be.transitionDuration, {}, N(v, ["object"]) && v, {}, S) : N(v, ["string", "number"]) ? v : N(v, ["object"]) ? W({}, be.transitionDuration, {}, v) : be.transitionDuration) : g[h] || y[h] || be[h];
|
|
572
|
+
var S, v, N, D, j, _;
|
|
573
573
|
};
|
|
574
574
|
}(u, t.props), b = W({ id: k }, u, { message: l, open: !0, entered: !1, requestClose: !1, persist: w("persist"), action: w("action"), content: w("content"), variant: w("variant"), anchorOrigin: w("anchorOrigin"), disableWindowBlurListener: w("disableWindowBlurListener"), autoHideDuration: w("autoHideDuration"), hideIconVariant: w("hideIconVariant"), TransitionComponent: w("TransitionComponent"), transitionDuration: w("transitionDuration"), TransitionProps: w("TransitionProps", !0), iconVariant: w("iconVariant", !0), style: w("style", !0), SnackbarProps: w("SnackbarProps", !0), className: fe(t.props.className, u.className) });
|
|
575
575
|
return b.persist && (b.autoHideDuration = void 0), t.setState(function(g) {
|
|
@@ -660,12 +660,12 @@ const ue = { card: "_card_1a398_7", actionRoot: "_actionRoot_1a398_11", icons: "
|
|
|
660
660
|
fn.displayName = "ToastError";
|
|
661
661
|
const gn = Me(le((e, o) => {
|
|
662
662
|
const { commands: r, commandHook: t, scope: n = "workbook", disabled: a = !1, ...i } = e, l = ae((c) => {
|
|
663
|
-
const u = { variant: ro.Menuitem, parentFloat: c.floatReference, commandHook: t, scope: n, disabled: a }, p = ie(Kt, { children: [f(nt, { ...u, command: r.getCommand("newWorkbook"), icon:
|
|
663
|
+
const u = { variant: ro.Menuitem, parentFloat: c.floatReference, commandHook: t, scope: n, disabled: a }, p = ie(Kt, { children: [f(nt, { ...u, command: r.getCommand("newWorkbook"), icon: Ne(f(ao, {})) }), f(io, { orientation: "horizontal" }), f(nt, { ...u, command: r.getCommand("openWorkbook"), icon: Ne(f(so, {})) }), f(Lt, { ...u, commands: r, quickCommand: "saveWorkbook", icon: Ne(f(uo, {})), createPopupPanel: (k) => {
|
|
664
664
|
const w = { ...u, parentFloat: k.floatReference, scope: "saveWorkbook" }, b = [];
|
|
665
665
|
return xe.getWriteFormats().forEach((g) => {
|
|
666
666
|
if (g.isDefault) return;
|
|
667
667
|
let y = null;
|
|
668
|
-
g.key === "CSV" ? y =
|
|
668
|
+
g.key === "CSV" ? y = Ne(f(lo, {})) : g.key === "Excel" && (y = Ne(f(co, {})));
|
|
669
669
|
const h = r.getCommand(`saveWorkbookAs${g.key}`);
|
|
670
670
|
h ? b.push(he(nt, { ...w, key: g.key, command: h, icon: y })) : console.warn(`Unable to resolve command: 'saveWorkbookAs${g.key}'`);
|
|
671
671
|
}), Wt({ ...k, children: b, onClick: () => {
|
|
@@ -699,7 +699,7 @@ const bn = Me(le((e, o) => {
|
|
|
699
699
|
h((V) => ({ ...V, isMounted: !0 }));
|
|
700
700
|
}, []), S = ne(() => {
|
|
701
701
|
h((V) => ({ ...V, isMounted: !1 }));
|
|
702
|
-
}, []), v = Gn(),
|
|
702
|
+
}, []), v = Gn(), N = Zn(), D = Xn(), j = se(/* @__PURE__ */ new Set()), _ = te(() => {
|
|
703
703
|
const V = (x, M) => {
|
|
704
704
|
if (M?.onceKey) {
|
|
705
705
|
if (j.current.has(M.onceKey)) return;
|
|
@@ -722,20 +722,20 @@ const bn = Me(le((e, o) => {
|
|
|
722
722
|
const F = { ...M, onKeyDown: (H) => {
|
|
723
723
|
u?.dispatchToFocusedCommand(H), H.isDefaultPrevented() || H.isPropagationStopped() || M?.onKeyDown?.(H);
|
|
724
724
|
} };
|
|
725
|
-
return v(x, { sort: () => import("./
|
|
726
|
-
}, showOptions:
|
|
725
|
+
return v(x, { sort: () => import("./qVAHcpq07IhtAaQc.mjs"), numberFormat: () => import("./BAOzSQdzHl43K9Hd.mjs"), hyperlink: () => import("./C18A_DcIEHNYBDvR.mjs"), comments: () => import("./Ln2ZalJgj1CiJJue.mjs"), find: () => import("./D1e_ccSgcNXvWHgy.mjs"), tableDetails: () => import("./DamiTeQsSMP2Cwld.mjs"), tableNew: () => import("./B9bN60uAvy62vnwt.mjs"), namedDetails: () => import("./C7FoKZbSzjvuY3UB.mjs") }[x], F, T);
|
|
726
|
+
}, showOptions: N, showInputOptions: D, showError: (x) => {
|
|
727
727
|
let M, T = Be.Error, F = "Unknown Error";
|
|
728
728
|
typeof x == "string" ? F = x : x instanceof Error && (M = x, x.message && (F = x.message)), x instanceof fo && (T = Be.Info), V(F, { type: T, enqueueProps: { error: M } });
|
|
729
729
|
} };
|
|
730
730
|
}, []), I = ne(() => {
|
|
731
731
|
}, []), q = ((V) => {
|
|
732
|
-
const { workbook: x, setWorkbook: M, importExportDisabled: T, workbookTitle: F = "export", setWorkbookTitle: H, notifier: z, requestWorkbookTitle: ge, themeOptions:
|
|
732
|
+
const { workbook: x, setWorkbook: M, importExportDisabled: T, workbookTitle: F = "export", setWorkbookTitle: H, notifier: z, requestWorkbookTitle: ge, themeOptions: A, undoManager: E, commands: B, onExecute: $ } = V, J = ae(A?.onModeChange, [A?.onModeChange]), pe = ae(A?.onEnabledDarkGridChange, [A?.onEnabledDarkGridChange]), ve = ae(A?.onEnabledDarkImagesChange, [A?.onEnabledDarkImagesChange]), Ee = ae(async (R = null, oe = null) => {
|
|
733
733
|
const O = [];
|
|
734
734
|
let m, C = null, X = null;
|
|
735
735
|
if (typeof R == "string" ? X = R : C = R, m = C ? R : await Qn.openFileDialog(X ?? xe.getAllReadFormatTypeAsString().join(",")), !m) return null;
|
|
736
|
-
const
|
|
736
|
+
const Y = { source: m, createWorkbookOptions: oe, onWarning: (tt) => {
|
|
737
737
|
O.push(tt);
|
|
738
|
-
} }, Le = await xe.read(
|
|
738
|
+
} }, Le = await xe.read(Y, z);
|
|
739
739
|
return O.length > 0 && (z?.showMessage?.("Some elements were not able to be imported. See console for details."), console.warn(`Import warnings:
|
|
740
740
|
` + O.join(`
|
|
741
741
|
`))), Le;
|
|
@@ -751,13 +751,13 @@ const bn = Me(le((e, o) => {
|
|
|
751
751
|
T || (xe.getWriteFormats().forEach((O) => {
|
|
752
752
|
const m = O.isDefault, C = { label: m ? "Save Workbook" : `Save Workbook as ${O.description}`, scopedLabels: { workbook: "Save", saveWorkbook: `as ${O.description}` }, tags: O.tags, description: `Save the workbook to the desktop${m ? "" : ` as ${O.description}`}.` };
|
|
753
753
|
m && (C.shortcut = { key: "S", modifiers: [We.Ctrl] }, R.push(new ee("saveWorkbookAs", U, { label: "Save Workbook As…", scopedLabels: { workbook: "Save as…", saveWorkbook: "as…" }, shortcut: [{ key: "S", modifiers: [We.Shift, We.Ctrl] }, { key: "F12" }], description: "Save the workbook to the desktop with the provided name." }, () => {
|
|
754
|
-
_e(x, null, O).catch((
|
|
755
|
-
z?.showError?.(
|
|
754
|
+
_e(x, null, O).catch((Y) => {
|
|
755
|
+
z?.showError?.(Y);
|
|
756
756
|
});
|
|
757
757
|
})));
|
|
758
758
|
const X = m ? "saveWorkbook" : `saveWorkbookAs${O.key}`;
|
|
759
|
-
R.push(new ee(X, U, C, (
|
|
760
|
-
_e(x,
|
|
759
|
+
R.push(new ee(X, U, C, (Y) => {
|
|
760
|
+
_e(x, Y ?? F, O).catch((Le) => {
|
|
761
761
|
z?.showError?.(Le);
|
|
762
762
|
});
|
|
763
763
|
}));
|
|
@@ -766,14 +766,14 @@ const bn = Me(le((e, o) => {
|
|
|
766
766
|
try {
|
|
767
767
|
const C = await Ee(O, m);
|
|
768
768
|
if (!C) return;
|
|
769
|
-
const X = C.title,
|
|
769
|
+
const X = C.title, Y = C.workbook, Le = Y.getSelectedSheet();
|
|
770
770
|
if (C.formatType.mimeType === "text/csv") {
|
|
771
771
|
const tt = x.findValidSheetName(X);
|
|
772
772
|
await x.doBatch(async () => {
|
|
773
773
|
const Dt = Le.getUsedRange();
|
|
774
774
|
Dt ? await x.getSheets().add({ name: tt, autoSelect: !0 }).getRange({ colStart: 0, rowStart: 0, colEnd: 0, rowEnd: 0 }).copyFrom(Dt) : z?.showMessage("The file appears to be blank.");
|
|
775
775
|
}, `Import CSV '${X}'`);
|
|
776
|
-
} else x?.close(), H?.(X), M(
|
|
776
|
+
} else x?.close(), H?.(X), M(Y);
|
|
777
777
|
} catch (C) {
|
|
778
778
|
z?.showError?.(C);
|
|
779
779
|
}
|
|
@@ -786,7 +786,7 @@ const bn = Me(le((e, o) => {
|
|
|
786
786
|
O && console.log("openWorkbookFromUrl", O);
|
|
787
787
|
})));
|
|
788
788
|
let oe = [];
|
|
789
|
-
return
|
|
789
|
+
return A && (oe = [new ee("themeMode", U, { label: "Light/Dark Mode", scopedLabels: { appearance: "Light/Dark Mode" }, description: "Toggle the application styling between light and dark mode." }), new ee("defaultThemeMode", U, { label: "Use System Light/Dark Mode", scopedLabels: { appearance: "Use System Default" }, description: "Use the system settings to determine styling for light and dark mode." }), new ee("enableDarkGrid", U, { label: "Enable Dark Grid", description: "Allow the grid to render in dark mode if dark mode is being used. This is ensures that the grid will render the colors as specified in another tools (for example Excel)." }), new ee("enableDarkImages", U, { label: "Enable Dark Images", description: "Allow the images to render in dark mode if dark mode is being used. This is ensures that the images will render the colors as specified in another tools (for example Excel). This only has any effect if the grid is in dark mode." })]), [...R, ...oe, new Ot("help", U, { label: "Show Help", description: "Provide Help.", shortcut: { key: "F1" } }, () => {
|
|
790
790
|
}), new Ot("showKeyboardShortcuts", U, { label: "Keyboard Shortcuts", description: "Show keyboard shortcuts.", shortcut: { key: "/", modifiers: [We.Ctrl] } }, () => {
|
|
791
791
|
}), new ee("gotoUrlGithub", U, { label: "Github", description: "Download examples, explore source code, and leave a star." }, () => {
|
|
792
792
|
window?.open("https://github.com/sheetxl/sheetxl");
|
|
@@ -797,29 +797,29 @@ const bn = Me(le((e, o) => {
|
|
|
797
797
|
}), new ee("gotoUrlIssue", U, { label: "Create Issue", description: "Create an issue to identify a bug or a feature request." }, () => {
|
|
798
798
|
window?.open("https://github.com/sheetxl/sheetxl/issues");
|
|
799
799
|
})];
|
|
800
|
-
}, [x, F, z, T,
|
|
800
|
+
}, [x, F, z, T, A, B, E]), Z = te(() => {
|
|
801
801
|
let R = null;
|
|
802
|
-
return R = B ? B.createChildGroup(U, "standaloneWorkbook", !1) : new
|
|
802
|
+
return R = B ? B.createChildGroup(U, "standaloneWorkbook", !1) : new Jt(U, "standaloneWorkbook"), R.addCommands(ke, !0), R;
|
|
803
803
|
}, [B, ke]);
|
|
804
|
-
|
|
804
|
+
Jn({ manager: E, commands: Z, notifier: z });
|
|
805
805
|
const { themeMode: Oe } = Qt();
|
|
806
806
|
G(() => {
|
|
807
|
-
if (!
|
|
808
|
-
const R =
|
|
809
|
-
Z.getCommand("themeMode").update({ state:
|
|
810
|
-
|
|
811
|
-
}), Z.getCommand("defaultThemeMode").update({ state: !
|
|
812
|
-
|
|
813
|
-
}), Z.getCommand("enableDarkGrid").update({ state:
|
|
814
|
-
pe(!
|
|
815
|
-
}), Z.getCommand("enableDarkImages").update({ state:
|
|
816
|
-
ve(!
|
|
807
|
+
if (!A || !Z) return;
|
|
808
|
+
const R = A.mode === "dark" || !A.mode && Oe === "dark";
|
|
809
|
+
Z.getCommand("themeMode").update({ state: A.mode ?? null, label: R ? "Dark Mode" : "Light Mode", scopedLabels: { appearance: R ? "Dark Mode" : "Light Mode" } }).updateCallback(() => {
|
|
810
|
+
J(R ? pt.Light : pt.Dark);
|
|
811
|
+
}), Z.getCommand("defaultThemeMode").update({ state: !A.mode }).updateCallback(() => {
|
|
812
|
+
J(null);
|
|
813
|
+
}), Z.getCommand("enableDarkGrid").update({ state: A.enableDarkGrid }).updateCallback(() => {
|
|
814
|
+
pe(!A.enableDarkGrid);
|
|
815
|
+
}), Z.getCommand("enableDarkImages").update({ state: A.enableDarkImages }).updateCallback(() => {
|
|
816
|
+
ve(!A.enableDarkImages);
|
|
817
817
|
});
|
|
818
|
-
}, [Oe,
|
|
819
|
-
const { showModal: qe } =
|
|
818
|
+
}, [Oe, A, ke]);
|
|
819
|
+
const { showModal: qe } = Yn();
|
|
820
820
|
return G(() => {
|
|
821
821
|
const R = () => new Promise((oe, O) => {
|
|
822
|
-
const m = L.lazy(() => import("./
|
|
822
|
+
const m = L.lazy(() => import("./D47D26mVYSAdb5C8.mjs")), C = qe(m, { title: "Shortcut Keys Reference", commands: Z, onDone: () => {
|
|
823
823
|
C.hide();
|
|
824
824
|
}, TransitionProps: { onExited: () => {
|
|
825
825
|
oe(!0);
|
|
@@ -848,69 +848,69 @@ const bn = Me(le((e, o) => {
|
|
|
848
848
|
}, [y]);
|
|
849
849
|
const [K, Q] = re(null);
|
|
850
850
|
G(() => {
|
|
851
|
-
y.starting.size !== 0 || y.running.size !== 0 ? Q(f(
|
|
851
|
+
y.starting.size !== 0 || y.running.size !== 0 ? Q(f(Yt, { icon: f(eo, { sx: { transform: "scale(0.7)", marginLeft: "-6px" } }), panel: !0, label: y.label, onMount: d, onUnmount: S, sx: { position: "absolute", left: "0", top: "0", width: "100%", height: "100%", zIndex: "9999" } })) : Q(null);
|
|
852
852
|
}, [y.starting, y.running]);
|
|
853
853
|
const de = te(() => f(to, { commands: q, disableHover: !0, sx: { padding: "0" }, buttonProps: { sx: { maxHeight: "22px" } } }), [q]), P = { notifier: _, commands: q };
|
|
854
854
|
return r && (P.statusBarProps = { childrenEnd: de }), ie(Kt, { children: [K, s ? L.cloneElement(s, P) : null] });
|
|
855
855
|
}));
|
|
856
856
|
bn.displayName = "SnackbarAndCommandsWrapper";
|
|
857
857
|
const xn = Me(le((e, o) => {
|
|
858
|
-
const { className: r, sx: t, style: n, onElementLoad: a, onError: i, undoManager: l, errorPanel: s = Wn, onKeyDown: c, workbook: u, createWorkbookOptions: p, onWorkbookChange: k, logo: w, importExportDisabled: b = !1, themeOptions: g, autoFocus: y = !1, commands: h, title: d, onTitleChange: S, titleProps: v, renderLoadingPanel:
|
|
858
|
+
const { className: r, sx: t, style: n, onElementLoad: a, onError: i, undoManager: l, errorPanel: s = Wn, onKeyDown: c, workbook: u, createWorkbookOptions: p, onWorkbookChange: k, logo: w, importExportDisabled: b = !1, themeOptions: g, autoFocus: y = !1, commands: h, title: d, onTitleChange: S, titleProps: v, renderLoadingPanel: N, ...D } = e, j = se(null), _ = ae(k, [k]), I = ae(S ?? v?.onTitleChange, [S ?? v?.onTitleChange]), q = v?.placeHolder ?? "Untitled", K = g?.mode, { themeMode: Q, source: de } = Qt({ mode: K }), P = te(() => ({ ...g, light: Mt(!1, ot.deepMerge(g?.theme ?? {}, g?.light ?? {})), dark: Mt(!0, ot.deepMerge(g?.theme ?? {}, g?.dark ?? {})) }), [g]), V = Q === pt.Dark, [x, M] = re(null);
|
|
859
859
|
G(() => {
|
|
860
860
|
M(l ?? new ho());
|
|
861
861
|
}, [l]);
|
|
862
|
-
const [T, F] = re(null), [H, z] = re(null), ge =
|
|
862
|
+
const [T, F] = re(null), [H, z] = re(null), ge = Nn();
|
|
863
863
|
dt(() => {
|
|
864
864
|
if (!u || Object.keys(u).length === 0 && !ot.isPromiseLike(u)) {
|
|
865
865
|
const m = { theme: ge.getDefaultTheme(), ...p };
|
|
866
|
-
z(new
|
|
866
|
+
z(new Nt(m));
|
|
867
867
|
} else z(u);
|
|
868
868
|
}, [u]), dt(() => {
|
|
869
869
|
if (H) {
|
|
870
|
-
if (H instanceof
|
|
870
|
+
if (H instanceof Nt) return F({ workbook: H }), void (u !== H && _?.(H));
|
|
871
871
|
(async () => {
|
|
872
872
|
try {
|
|
873
873
|
let m, C = await Promise.resolve(H);
|
|
874
|
-
C && C.source && (C = await xe.read(C)), C.workbook ? (
|
|
874
|
+
C && C.source && (C = await xe.read(C)), C.workbook ? (J(C.title), m = C.workbook) : m = C, _?.(m), F({ workbook: m });
|
|
875
875
|
} catch (m) {
|
|
876
876
|
_?.(null), F({ error: m });
|
|
877
877
|
}
|
|
878
878
|
})();
|
|
879
879
|
}
|
|
880
880
|
}, [H]);
|
|
881
|
-
const [
|
|
881
|
+
const [A, E] = re(null);
|
|
882
882
|
G(() => {
|
|
883
883
|
if (!x || !T) return;
|
|
884
884
|
x.clear();
|
|
885
885
|
const m = T?.workbook?.getTransactions();
|
|
886
886
|
return m ? m.addListener({ onCommitEnd: (C) => {
|
|
887
|
-
C.getDescription() ? x.addUndoOperation({ description: C.getDescription(), undo: () => (m.revert(C.getId()),
|
|
888
|
-
m.restore(C.getId()),
|
|
887
|
+
C.getDescription() ? x.addUndoOperation({ description: C.getDescription(), undo: () => (m.revert(C.getId()), A.source?.focus(), () => {
|
|
888
|
+
m.restore(C.getId()), A.source?.focus();
|
|
889
889
|
}) }) : console.warn("commit has no description", C);
|
|
890
890
|
} }) : void 0;
|
|
891
|
-
}, [x, T,
|
|
891
|
+
}, [x, T, A]);
|
|
892
892
|
const B = ae((m) => {
|
|
893
893
|
m ? x.setRepeatableOperation({ description: m.label(), repeat: async () => m.execute() }) : x.setRepeatableOperation(null);
|
|
894
|
-
}, [x]), [$,
|
|
894
|
+
}, [x]), [$, J] = re(d ?? v?.title ?? "");
|
|
895
895
|
G(() => {
|
|
896
|
-
|
|
896
|
+
J(d ?? v?.title ?? "");
|
|
897
897
|
}, [d ?? v?.title]), G(() => {
|
|
898
898
|
I?.($);
|
|
899
899
|
}, [$]);
|
|
900
900
|
const [pe, ve] = re(null), Ee = te(() => {
|
|
901
901
|
const m = () => ({ contains: (C) => !0, focus() {
|
|
902
902
|
} });
|
|
903
|
-
return h ? h.createChildGroup(m, "application", !1) : new
|
|
903
|
+
return h ? h.createChildGroup(m, "application", !1) : new Jt(m, "application");
|
|
904
904
|
}, [h]), _e = ae((m) => {
|
|
905
905
|
ve(m.source.getViewportElement()), E(m), Ee.activate("sheet"), a?.(m);
|
|
906
906
|
}, [Ee]);
|
|
907
907
|
G(() => {
|
|
908
|
-
|
|
909
|
-
}, [
|
|
908
|
+
A && y && A.source?.focus(typeof y == "object" ? y : void 0);
|
|
909
|
+
}, [A]);
|
|
910
910
|
const U = se(null), ke = ne((m) => {
|
|
911
911
|
let C = null;
|
|
912
|
-
return v?.hidden || (C = f(
|
|
913
|
-
|
|
912
|
+
return v?.hidden || (C = f(An, { ...v, style: { maxWidth: "100%", ...v?.style }, workbook: j.current, ref: U, title: $, placeHolder: q, onTitleChange: (X) => {
|
|
913
|
+
J(X);
|
|
914
914
|
} })), f(kn, { ...m, logo: w, mainElement: C, showFileMenu: !b, showAppearanceMenu: !!(P?.onEnabledDarkGridChange || P?.onEnabledDarkImagesChange || P?.onModeChange) });
|
|
915
915
|
}, [w, $, v, P, b, Ee]);
|
|
916
916
|
G(() => {
|
|
@@ -921,24 +921,24 @@ const xn = Me(le((e, o) => {
|
|
|
921
921
|
}, []);
|
|
922
922
|
const Z = te(() => {
|
|
923
923
|
const m = { transparentBackground: !0 };
|
|
924
|
-
return f(me, { sx: t, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, display: "flex", alignItems: "center", justifyContent: "center", ...n }, children:
|
|
925
|
-
}, [t, n,
|
|
924
|
+
return f(me, { sx: t, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, display: "flex", alignItems: "center", justifyContent: "center", ...n }, children: N?.(m) ?? f(Yt, { ...m }) });
|
|
925
|
+
}, [t, n, N]), Oe = ne(({ error: m }) => (i?.(m), f(s, { sx: t, style: n, error: m ?? "Unable to display empty workbook." })), [t, n, i]), qe = te(() => ({ ...t, "& .SnackbarContainer-root": { position: "absolute !important" }, "& .notistack-Snackbar": { minWidth: "unset" }, "& .notistack-MuiContent *": { fontFamily: (m) => m.typography.fontFamily }, "& #notistack-snackbar": { maxWidth: "560px", whiteSpace: "pre-wrap" }, "*": { userSelect: "none" } }), [t]), R = en([j, o]), oe = te(() => {
|
|
926
926
|
if (!T) return Z;
|
|
927
927
|
if (T.error || !T.workbook) return Oe({ error: T.error });
|
|
928
928
|
let m = null, C = null, X = !1;
|
|
929
|
-
return P && (m = V ? P.dark : P.light, C = V && P.enableDarkGrid ? P.dark : P.light, X = P.enableDarkImages), f(Rn, { sx: qe, style: n, tabIndex: 0, autoFocus: !0, workbook: T.workbook, ref: R, renderToolbar: ke, onElementLoad: _e, onRepeatCommandChange: B, onKeyDown: (
|
|
930
|
-
c?.(
|
|
931
|
-
}, renderLoadingPanel:
|
|
932
|
-
}, [T, $, x, Z,
|
|
933
|
-
let O = f(
|
|
929
|
+
return P && (m = V ? P.dark : P.light, C = V && P.enableDarkGrid ? P.dark : P.light, X = P.enableDarkImages), f(Rn, { sx: qe, style: n, tabIndex: 0, autoFocus: !0, workbook: T.workbook, ref: R, renderToolbar: ke, onElementLoad: _e, onRepeatCommandChange: B, onKeyDown: (Y) => {
|
|
930
|
+
c?.(Y);
|
|
931
|
+
}, renderLoadingPanel: N, gridTheme: C, headersTheme: m, enableDarkImages: X, className: mt(r, "sheetxl-workbook"), onContextMenu: (Y) => Y.preventDefault(), ...D }, "WorkbookElement");
|
|
932
|
+
}, [T, $, x, Z, N, P, D, ke, qe]);
|
|
933
|
+
let O = f(No, { fallbackRender: Oe, children: f(Uo, { maxSnack: 3, domRoot: pe, anchorOrigin: { vertical: "bottom", horizontal: "right" }, autoHideDuration: 3500, onClose: (m, C, X) => {
|
|
934
934
|
j.current?.focus();
|
|
935
|
-
}, Components: { error: fn }, iconVariant: { success: f(Fn, { style: { marginRight: "8px" }, children: f("path", { d: "M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z" }) }), error: f(Pn, { style: { marginRight: "8px" } }) }, children: f(In, { children: f(bn, { workbook: T?.workbook, setWorkbook: z, importExportDisabled: b, titlePlaceHolder: q, titleWorkbook: $, setWorkbookTitle:
|
|
935
|
+
}, Components: { error: fn }, iconVariant: { success: f(Fn, { style: { marginRight: "8px" }, children: f("path", { d: "M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z" }) }), error: f(Pn, { style: { marginRight: "8px" } }) }, children: f(In, { children: f(bn, { workbook: T?.workbook, setWorkbook: z, importExportDisabled: b, titlePlaceHolder: q, titleWorkbook: $, setWorkbookTitle: J, refWorkbookTitle: U, commands: Ee, undoManager: x, themeOptions: P, children: oe }) }) }) });
|
|
936
936
|
return P && (O = ie(jn, { theme: V ? P.dark : P.light, children: [P.cssBaseline ? f(Oo, {}) : null, O] })), O;
|
|
937
937
|
}));
|
|
938
938
|
xn.displayName = "EagerStudio";
|
|
939
939
|
const Go = Object.freeze(Object.defineProperty({ __proto__: null, default: xn }, Symbol.toStringTag, { value: "Module" })), er = Object.freeze(Object.defineProperty({ __proto__: null, E: Go, c: fe }, Symbol.toStringTag, { value: "Module" }));
|
|
940
940
|
export {
|
|
941
|
-
er as A,
|
|
942
941
|
ft as C,
|
|
942
|
+
er as a,
|
|
943
943
|
fe as h
|
|
944
944
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as z, jsxs as lt } from "react/jsx-runtime";
|
|
2
2
|
import k, { memo as es, useState as pe, useCallback as de, useLayoutEffect as rs, PureComponent as mt, Component as _t, isValidElement as ns } from "react";
|
|
3
|
-
import { M as os,
|
|
3
|
+
import { M as os, b as as, P as is, B as us, V as Su, I as ss, E as xt } from "./CHNPjJxb0GY_naLa.mjs";
|
|
4
4
|
/**
|
|
5
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.
|
|
5
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.10
|
|
6
6
|
*
|
|
7
7
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
8
8
|
* License: The license can be found at https://www.sheetxl.com/license.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Workbook as J } from "@sheetxl/sdk";
|
|
2
2
|
/**
|
|
3
|
-
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.
|
|
3
|
+
* @license @sheetxl/studio-vanilla - SheetXL Studio - Vanilla entry point for integrating SheetXL UI. - v0.4.10
|
|
4
4
|
*
|
|
5
5
|
* (C) 2025-present SheetXL Inc. & Michael T. Ford
|
|
6
6
|
* License: The license can be found at https://www.sheetxl.com/license.
|