@synopackageland/ui 0.22.0 → 0.23.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -0
  3. package/dist/cli.js +0 -0
  4. package/dist/components/app/app-layout/AppLayout.vue.d.ts +5 -2
  5. package/dist/components/composite/about-dialog/AboutDialog.vue.d.ts +1 -1
  6. package/dist/components/composite/adaptive-panel/AdaptivePanel.vue.d.ts +1 -1
  7. package/dist/components/composite/disclosure-row/DisclosureRow.vue.d.ts +39 -0
  8. package/dist/components/composite/record-panel/RecordPanel.vue.d.ts +1 -1
  9. package/dist/components/containers/split-pane/SplitPane.vue.d.ts +1 -1
  10. package/dist/components/feedback/validation-popup/ValidationPopup.vue.d.ts +1 -1
  11. package/dist/components/primitives/button/Button.vue.d.ts +7 -1
  12. package/dist/components/primitives/checkbox/CheckboxGroup.vue.d.ts +1 -1
  13. package/dist/components/primitives/dropdown-menu/types.d.ts +6 -0
  14. package/dist/components/primitives/pagination/Pagination.vue.d.ts +1 -1
  15. package/dist/components/primitives/popover/Popover.vue.d.ts +1 -1
  16. package/dist/components/primitives/progress/Progress.vue.d.ts +1 -1
  17. package/dist/components/primitives/tooltip/tooltipStyle.d.ts +1 -1
  18. package/dist/components/rich-text-editor/RichTextEditor.vue.d.ts +1 -1
  19. package/dist/feedback/StatusSlot.vue.d.ts +1 -1
  20. package/dist/grid-core/theme.d.ts +2 -1
  21. package/dist/grid.js +253 -251
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.js +13855 -13595
  24. package/dist/json/catalog.d.ts +2 -0
  25. package/dist/json/registry.d.ts +34 -0
  26. package/dist/json-ai-prompt.md +1 -1
  27. package/dist/json-catalog.schema.json +2 -1
  28. package/dist/json-preview/preview.js +8669 -8605
  29. package/dist/json.js +23 -23
  30. package/dist/lib/adaptiveLayout.d.ts +17 -0
  31. package/dist/lib/scroll.d.ts +31 -0
  32. package/dist/lib/typeScale.d.ts +20 -0
  33. package/dist/reka-runtime.json +1 -1
  34. package/dist/theme.css +1 -1
  35. package/dist/themes/dsm7-embedded-theme.css +1 -1
  36. package/dist/themes/dsm7-embedded.css +1 -1
  37. package/dist/themes/dsm7.css +1 -1
  38. package/docs/button-policy.md +19 -2
  39. package/docs/mobile-native.md +142 -29
  40. package/package.json +67 -59
package/dist/grid.js CHANGED
@@ -779,9 +779,10 @@ const ro = (e, t) => t ? Math.max(t - (e.iconSizeMD - e.iconSizeXS) / 2, 0) : 0,
779
779
  interactionLineColorHighlight: "--ui-accent-9"
780
780
  }, zn = {
781
781
  fontFamily: "--ui-font-sans",
782
- fontSizeSM: "--ui-font-size",
782
+ /** Cell text: the grid's own size (14px on a phone), else the body size. */
783
+ fontSizeSM: "--ui-grid-font-size",
783
784
  fontSizeXS: "--ui-font-size-sm"
784
- }, ia = (e, t = {}) => {
785
+ }, ia = { fontSizeSM: "--ui-font-size" }, aa = (e, t = {}) => {
785
786
  const n = { ...co };
786
787
  for (const [i, a] of Object.entries(uo)) {
787
788
  const s = e(a)?.trim();
@@ -790,11 +791,12 @@ const ro = (e, t) => t ? Math.max(t - (e.iconSizeMD - e.iconSizeXS) / 2, 0) : 0,
790
791
  const o = e(zn.fontFamily)?.trim();
791
792
  o && (n.fontFamily = o);
792
793
  for (const i of ["fontSizeSM", "fontSizeXS"]) {
793
- const a = Number.parseFloat(e(zn[i]) ?? "");
794
- Number.isFinite(a) && a > 0 && (n[i] = a);
794
+ const a = ia[i];
795
+ let s = Number.parseFloat(e(zn[i]) ?? "");
796
+ !(s > 0) && a && (s = Number.parseFloat(e(a) ?? "")), Number.isFinite(s) && s > 0 && (n[i] = s);
795
797
  }
796
798
  return { ...n, ...t };
797
- }, aa = (e) => {
799
+ }, sa = (e) => {
798
800
  const t = getComputedStyle(e), n = e.ownerDocument.createElement("span");
799
801
  n.setAttribute("aria-hidden", "true"), n.style.cssText = "position:absolute;width:0;height:0;overflow:hidden;visibility:hidden;pointer-events:none", e.appendChild(n);
800
802
  const o = new Set(Object.values(uo));
@@ -802,35 +804,35 @@ const ro = (e, t) => t ? Math.max(t - (e.iconSizeMD - e.iconSizeXS) / 2, 0) : 0,
802
804
  const s = t.getPropertyValue(a).trim();
803
805
  return !s || !o.has(a) ? s : (n.style.color = "", n.style.color = `var(${a})`, getComputedStyle(n).color || s);
804
806
  }, { dispose: () => n.remove() });
805
- }, sa = (e, t = {}) => {
806
- const n = aa(e);
807
+ }, ra = (e, t = {}) => {
808
+ const n = sa(e);
807
809
  try {
808
810
  const o = e.closest('[data-ui-color-scheme="dark"]') != null;
809
- return ia(n, { themeKey: o ? "dark" : "light", ...t });
811
+ return aa(n, { themeKey: o ? "dark" : "light", ...t });
810
812
  } finally {
811
813
  n.dispose();
812
814
  }
813
815
  }, ho = '[role="dialog"],[role="alertdialog"],[aria-modal="true"]';
814
- function ra(e) {
816
+ function la(e) {
815
817
  return (e instanceof Element ? e : e?.parentElement)?.closest(ho) ?? null;
816
818
  }
817
- function la(e, t) {
818
- const n = ra(e);
819
+ function ca(e, t) {
820
+ const n = la(e);
819
821
  return !!n && !n.contains(t);
820
822
  }
821
823
  function Mn(e, t) {
822
824
  return e.some((n) => n instanceof Element && n.matches(ho) && !t.some((o) => n.contains(o) || o.contains(n)));
823
825
  }
824
- function ca(e, t = e ?? null) {
826
+ function ua(e, t = e ?? null) {
825
827
  if (!e?.isConnected) return !1;
826
828
  const n = e.ownerDocument, o = n.activeElement;
827
- return o === e ? !0 : o && o !== n.body && la(o, t ?? e) ? !1 : (e.focus({ preventScroll: !0 }), n.activeElement === e);
829
+ return o === e ? !0 : o && o !== n.body && ca(o, t ?? e) ? !1 : (e.focus({ preventScroll: !0 }), n.activeElement === e);
828
830
  }
829
- const ua = /* @__PURE__ */ new Set(["Enter", "Escape", "Tab"]), da = 50;
831
+ const da = /* @__PURE__ */ new Set(["Enter", "Escape", "Tab"]), ha = 50;
830
832
  function mo(e) {
831
833
  return e.isComposing || e.keyCode === 229;
832
834
  }
833
- function ha(e) {
835
+ function ma(e) {
834
836
  const { keyCode: t, metaKey: n, ctrlKey: o } = e;
835
837
  return n || o || t === 32 ? !1 : t >= 65 && t <= 90 || // A-Z
836
838
  t >= 48 && t <= 57 || // 0-9 (ClosedParen..OpenParen)
@@ -853,10 +855,10 @@ function go(e, t = {}) {
853
855
  },
854
856
  ownsKey(c) {
855
857
  if (n || mo(c)) return !0;
856
- if (!ua.has(c.key)) return !1;
858
+ if (!da.has(c.key)) return !1;
857
859
  const l = a.get(c);
858
860
  if (l !== void 0) return l;
859
- const u = c.timeStamp - o <= da;
861
+ const u = c.timeStamp - o <= ha;
860
862
  return o = -1 / 0, a.set(c, u), u;
861
863
  },
862
864
  dispose() {
@@ -864,12 +866,12 @@ function go(e, t = {}) {
864
866
  }
865
867
  };
866
868
  }
867
- const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
869
+ const ga = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
868
870
  if (!e || t == null || t === n || !(t instanceof HTMLElement)) return !0;
869
871
  const o = t.isContentEditable || t.contentEditable === "true";
870
872
  return t.tagName !== "INPUT" && t.tagName !== "TEXTAREA" && !o;
871
- }, ga = /[\t\n\r"]/, fa = (e) => ga.test(e) ? `"${e.replace(/"/g, '""')}"` : e, pa = (e) => e.map((t) => t.map(fa).join(" ")).join(`\r
872
- `), Ca = (e) => {
873
+ }, fa = /[\t\n\r"]/, pa = (e) => fa.test(e) ? `"${e.replace(/"/g, '""')}"` : e, Ca = (e) => e.map((t) => t.map(pa).join(" ")).join(`\r
874
+ `), wa = (e) => {
873
875
  if (!e) return [];
874
876
  const t = [];
875
877
  let n = [], o = "", i = 0, a = !0;
@@ -881,7 +883,7 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
881
883
  for (; i < s; ) {
882
884
  const l = e[i];
883
885
  if (a && l === '"') {
884
- const u = wa(e, i + 1);
886
+ const u = va(e, i + 1);
885
887
  if (u === -1) {
886
888
  o += l, a = !1, i++;
887
889
  continue;
@@ -899,7 +901,7 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
899
901
  o += l, i++;
900
902
  }
901
903
  return c(), An(t);
902
- }, wa = (e, t) => {
904
+ }, va = (e, t) => {
903
905
  let n = t;
904
906
  for (; n < e.length; ) {
905
907
  const o = e.indexOf('"', n);
@@ -917,7 +919,7 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
917
919
  const t = Math.max(0, ...e.map((n) => n.length));
918
920
  for (const n of e) for (; n.length < t; ) n.push("");
919
921
  return e;
920
- }, va = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), Sa = (e) => e.length === 0 || e.length === 1 && e[0].length <= 1 ? void 0 : `<table><tbody>${e.map((n) => `<tr>${n.map((o) => `<td>${va(o).replace(/\r?\n/g, "<br>")}</td>`).join("")}</tr>`).join("")}</tbody></table>`, ya = (e, t) => {
922
+ }, Sa = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), ya = (e) => e.length === 0 || e.length === 1 && e[0].length <= 1 ? void 0 : `<table><tbody>${e.map((n) => `<tr>${n.map((o) => `<td>${Sa(o).replace(/\r?\n/g, "<br>")}</td>`).join("")}</tr>`).join("")}</tbody></table>`, ba = (e, t) => {
921
923
  const n = e.clipboardData;
922
924
  if (!n) return !1;
923
925
  try {
@@ -926,18 +928,18 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
926
928
  return !1;
927
929
  }
928
930
  return e.preventDefault(), !0;
929
- }, ba = () => ({
931
+ }, xa = () => ({
930
932
  clipboard: typeof navigator < "u" ? navigator.clipboard : void 0,
931
933
  ClipboardItem: typeof ClipboardItem < "u" ? ClipboardItem : void 0,
932
934
  hasFocus: () => typeof document < "u" ? document.hasFocus() : !0,
933
935
  onFocus: (e) => window.addEventListener("focus", e, { once: !0 })
934
- }), xa = (e, t = ba()) => {
936
+ }), Ra = (e, t = xa()) => {
935
937
  const { clipboard: n, ClipboardItem: o } = t, i = () => {
936
938
  if (o && n?.write) {
937
939
  const a = new o({
938
940
  "text/plain": e.then(({ text: s }) => new Blob([s], { type: "text/plain" })),
939
941
  // Null means no HTML; an empty table keeps the blob type valid in every browser.
940
- "text/html": e.then(({ text: s, html: r }) => new Blob([r ?? Ra(s)], { type: "text/html" }))
942
+ "text/html": e.then(({ text: s, html: r }) => new Blob([r ?? ka(s)], { type: "text/html" }))
941
943
  });
942
944
  return n.write([a]);
943
945
  }
@@ -954,7 +956,7 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
954
956
  }
955
957
  })) : Promise.reject(a);
956
958
  }
957
- }, Ra = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), it = (e, t, n) => Math.min(n, Math.max(t, e)), qe = (e, t) => {
959
+ }, ka = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"), it = (e, t, n) => Math.min(n, Math.max(t, e)), qe = (e, t) => {
958
960
  if (e.kind !== "cells" || e.ranges.length < 2 || t.rowCount <= 0 || t.columnCount <= 0) return null;
959
961
  const [n, o] = e.ranges, i = t.columnCount - 1, a = t.rowCount - 1;
960
962
  return {
@@ -991,17 +993,17 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
991
993
  default:
992
994
  return null;
993
995
  }
994
- }, ka = (e, t) => {
996
+ }, Ia = (e, t) => {
995
997
  if (e.kind === "cells") {
996
998
  const o = qe(e, t);
997
999
  return o ? [o.startColumn, o.startRow] : null;
998
1000
  }
999
1001
  const n = fo(e, t);
1000
1002
  return n ? [n.columns[0], n.rows[0]] : null;
1001
- }, Ia = (e) => e.rows.length * e.columns.length, Pa = (e, t, n) => {
1002
- const o = Ca(e);
1003
+ }, Pa = (e) => e.rows.length * e.columns.length, za = (e, t, n) => {
1004
+ const o = wa(e);
1003
1005
  if (o.length === 0) return null;
1004
- const i = ka(t, n);
1006
+ const i = Ia(t, n);
1005
1007
  if (!i) return null;
1006
1008
  const { rowCount: a, columnCount: s } = n;
1007
1009
  let r = o, c = !1;
@@ -1025,8 +1027,8 @@ const ma = ({ isEditing: e, eventTarget: t, hiddenFocusEl: n }) => {
1025
1027
  readonlyColumns: p,
1026
1028
  repeated: c
1027
1029
  };
1028
- }, Hn = (e, t) => e.rows.map((n) => e.columns.map((o) => t([o, n]))), It = (e) => ({ text: pa(e), html: Sa(e) }), za = (e, t) => !t || e.rows.every((n) => t(n));
1029
- function Ma(e) {
1030
+ }, Hn = (e, t) => e.rows.map((n) => e.columns.map((o) => t([o, n]))), It = (e) => ({ text: Ca(e), html: ya(e) }), Ma = (e, t) => !t || e.rows.every((n) => t(n));
1031
+ function Aa(e) {
1030
1032
  const t = e.equals ?? Object.is;
1031
1033
  let n = !1, o = null, i, a, s = !1, r = null, c = 0, l = !1;
1032
1034
  const u = {
@@ -1096,13 +1098,13 @@ function Fn(e) {
1096
1098
  function Nn(e, t) {
1097
1099
  return e.some((n) => n instanceof Node && t.some((o) => o === n || o.contains(n)));
1098
1100
  }
1099
- function Aa(e) {
1101
+ function Ea(e) {
1100
1102
  return e.some((t) => t instanceof Element && t.hasAttribute(po));
1101
1103
  }
1102
- function Ea(e, t) {
1104
+ function Ha(e, t) {
1103
1105
  return e.length > 0 && !e.includes(t);
1104
1106
  }
1105
- function Ha(e, t = 400) {
1107
+ function Ta(e, t = 400) {
1106
1108
  let n = 0;
1107
1109
  const o = () => {
1108
1110
  e.clearTimeout(n), e.removeEventListener("click", i, !0), e.removeEventListener("pointerdown", o, !0), e.removeEventListener("keydown", o, !0);
@@ -1111,19 +1113,19 @@ function Ha(e, t = 400) {
1111
1113
  };
1112
1114
  return e.addEventListener("click", i, !0), e.addEventListener("pointerdown", o, !0), e.addEventListener("keydown", o, !0), n = e.setTimeout(o, t), o;
1113
1115
  }
1114
- function Ta(e) {
1116
+ function Fa(e) {
1115
1117
  const t = e.document, n = { layers: [], guard: go(e), teardown: () => {
1116
1118
  } }, o = (a) => {
1117
1119
  if (Tn.has(a)) return;
1118
1120
  Tn.add(a);
1119
1121
  const s = a.composedPath();
1120
- if (!(Aa(s) || Ea(s, t)))
1122
+ if (!(Ea(s) || Ha(s, t)))
1121
1123
  for (const r of [...n.layers].reverse()) {
1122
1124
  if (r.disposed) continue;
1123
1125
  const c = Fn(r);
1124
1126
  if (Nn(s, c) || Mn(s, c)) return;
1125
1127
  if (r.options.onOutside?.(a) === "veto") {
1126
- a.preventDefault(), a.stopImmediatePropagation(), Ha(e);
1128
+ a.preventDefault(), a.stopImmediatePropagation(), Ta(e);
1127
1129
  return;
1128
1130
  }
1129
1131
  }
@@ -1140,8 +1142,8 @@ function Ta(e) {
1140
1142
  e.removeEventListener("pointerdown", o, !0), e.removeEventListener("keydown", i, !0), n.guard.dispose();
1141
1143
  }, n;
1142
1144
  }
1143
- function Fa(e, t) {
1144
- const n = Pt.get(e) ?? Ta(e);
1145
+ function Na(e, t) {
1146
+ const n = Pt.get(e) ?? Fa(e);
1145
1147
  Pt.set(e, n);
1146
1148
  const o = { options: t, disposed: !1 };
1147
1149
  return n.layers.push(o), {
@@ -1157,10 +1159,10 @@ function Ln(e) {
1157
1159
  const t = eo(e);
1158
1160
  return Array.isArray(t) ? [...t] : [t];
1159
1161
  }
1160
- function Na(e, t, n) {
1162
+ function La(e, t, n) {
1161
1163
  const o = ue(() => eo(t), (i, a, s) => {
1162
1164
  if (!i || typeof window > "u") return;
1163
- const r = Ln(e).find(Boolean)?.ownerDocument?.defaultView ?? window, c = Fa(r, {
1165
+ const r = Ln(e).find(Boolean)?.ownerDocument?.defaultView ?? window, c = Na(r, {
1164
1166
  elements: () => Ln(e),
1165
1167
  onOutside: (l) => n.onOutside?.(l),
1166
1168
  onEscape: (l) => n.onEscape?.(l)
@@ -1169,8 +1171,8 @@ function Na(e, t, n) {
1169
1171
  }, { immediate: !0, flush: "sync" });
1170
1172
  return qo() && to(o), o;
1171
1173
  }
1172
- const Co = 2, La = 4, zt = 20, Da = 2, Wa = 5, lt = 16;
1173
- function Ba(e, t, n) {
1174
+ const Co = 2, Da = 4, zt = 20, Wa = 2, Ba = 5, lt = 16;
1175
+ function Oa(e, t, n) {
1174
1176
  const o = e.createElement("canvas").getContext("2d");
1175
1177
  if (!o) return null;
1176
1178
  o.font = `${t}px ${n}`, o.textBaseline = "alphabetic";
@@ -1192,14 +1194,14 @@ function ut(e) {
1192
1194
  }
1193
1195
  function wo(e) {
1194
1196
  if (!Ut(e)) return e.rowHeight;
1195
- const { top: t, bottom: n, lineHeight: o } = ut(e), i = e.view ? 1 : Da, a = Math.min(Wa, Math.max(i, Math.ceil(e.lines)));
1197
+ const { top: t, bottom: n, lineHeight: o } = ut(e), i = e.view ? 1 : Wa, a = Math.min(Ba, Math.max(i, Math.ceil(e.lines)));
1196
1198
  return Math.max(e.rowHeight, t + n + a * o);
1197
1199
  }
1198
- function Oa(e, t) {
1200
+ function Va(e, t) {
1199
1201
  const { top: n, bottom: o, lineHeight: i } = ut(t);
1200
1202
  return Math.max(1, Math.round((e - n - o) / i));
1201
1203
  }
1202
- const Va = {
1204
+ const Ga = {
1203
1205
  display: "block",
1204
1206
  width: "100%",
1205
1207
  height: "100%",
@@ -1215,8 +1217,8 @@ const Va = {
1215
1217
  color: "transparent",
1216
1218
  font: "inherit"
1217
1219
  };
1218
- function Ga(e) {
1219
- if (!e.open) return Va;
1220
+ function Ua(e) {
1221
+ if (!e.open) return Ga;
1220
1222
  const { top: t, bottom: n, lineHeight: o } = ut(e), i = B.cellHorizontalPadding, a = Ut(e), s = e.invalid ? e.dangerColor : e.theme.cellLineColorActived;
1221
1223
  return {
1222
1224
  display: "block",
@@ -1238,12 +1240,12 @@ function Ga(e) {
1238
1240
  "caret-color": e.theme.cellTextColor,
1239
1241
  font: `${e.theme.fontSizeSM}px/${o}px ${e.theme.fontFamily}`,
1240
1242
  "text-align": e.kind === "number" && !e.view ? "right" : "left",
1241
- "border-radius": `${La}px`,
1243
+ "border-radius": `${Da}px`,
1242
1244
  "box-shadow": `0 0 0 ${Co}px ${s}`,
1243
1245
  transition: "none"
1244
1246
  };
1245
1247
  }
1246
- function Ua(e) {
1248
+ function Ka(e) {
1247
1249
  return {
1248
1250
  position: "absolute",
1249
1251
  left: `${B.cellHorizontalPadding}px`,
@@ -1260,7 +1262,7 @@ function Ua(e) {
1260
1262
  "pointer-events": "none"
1261
1263
  };
1262
1264
  }
1263
- function Ka(e) {
1265
+ function _a(e) {
1264
1266
  return {
1265
1267
  position: "absolute",
1266
1268
  left: `-${Co}px`,
@@ -1279,8 +1281,8 @@ function Ka(e) {
1279
1281
  "pointer-events": "none"
1280
1282
  };
1281
1283
  }
1282
- const _a = (e, t) => !!e && !!t && e[0] === t[0] && e[1] === t[1];
1283
- class $a {
1284
+ const $a = (e, t) => !!e && !!t && e[0] === t[0] && e[1] === t[1];
1285
+ class qa {
1284
1286
  session;
1285
1287
  options;
1286
1288
  mode = "edit";
@@ -1320,7 +1322,7 @@ class $a {
1320
1322
  get version() {
1321
1323
  return n().version;
1322
1324
  }
1323
- }, this.session = Ma({
1325
+ }, this.session = Aa({
1324
1326
  validate: (i, a) => this.mode === "edit" ? this.options.validate?.(a, i ?? "") : null,
1325
1327
  onCommit: (i, a, s) => {
1326
1328
  const { move: r, reason: c } = this.pending;
@@ -1335,7 +1337,7 @@ class $a {
1335
1337
  * edited (the IME keydown, then its `compositionstart`) changes nothing.
1336
1338
  */
1337
1339
  begin(t) {
1338
- if (this.state.active && _a(this.state.cell, t.cell)) return null;
1340
+ if (this.state.active && $a(this.state.cell, t.cell)) return null;
1339
1341
  this.state.active && this.commit("selection", "none");
1340
1342
  const n = t.mode === "edit" && (t.trigger === "key" || t.trigger === "composition");
1341
1343
  this.mode = t.mode, this.kind = t.kind, this.pending = { move: "none", reason: "blur" };
@@ -1401,10 +1403,10 @@ class $a {
1401
1403
  return this.pending.reason;
1402
1404
  }
1403
1405
  }
1404
- function qa(e) {
1406
+ function Xa(e) {
1405
1407
  const t = ce(1);
1406
1408
  let n = null;
1407
- const o = new $a({
1409
+ const o = new qa({
1408
1410
  validate: (u, h) => {
1409
1411
  const m = e.columnAt(u[0]);
1410
1412
  return m && e.validate ? e.validate(u, m, h) : null;
@@ -1441,7 +1443,7 @@ function qa(e) {
1441
1443
  if (!u || !g || h !== "long-text" && m !== "view") return;
1442
1444
  const C = { kind: h, view: m === "view", hint: h === "long-text" && m === "edit" && e.hasHint(), rowHeight: e.rowHeight(), textBox: e.textBox() }, { top: S, bottom: p } = ut(C), { height: w, padding: v, whiteSpace: y } = u.style;
1443
1445
  u.style.height = "0px", u.style.padding = `${S}px 8px ${p}px`, u.style.whiteSpace = "pre-wrap";
1444
- const R = Oa(u.scrollHeight, C);
1446
+ const R = Va(u.scrollHeight, C);
1445
1447
  u.style.height = w, u.style.padding = v, u.style.whiteSpace = y, R !== t.value && (t.value = R);
1446
1448
  }, l = {
1447
1449
  state: a,
@@ -1495,7 +1497,7 @@ function qa(e) {
1495
1497
  u && (n = go(u), m(() => {
1496
1498
  n?.dispose(), n = null;
1497
1499
  }));
1498
- }, { immediate: !0, flush: "sync" }), Na(
1500
+ }, { immediate: !0, flush: "sync" }), La(
1499
1501
  () => e.root() ?? null,
1500
1502
  () => a.value.active || e.hasSelection(),
1501
1503
  {
@@ -1509,7 +1511,7 @@ function qa(e) {
1509
1511
  }
1510
1512
  ), to(() => o.cancel()), l;
1511
1513
  }
1512
- const Xa = {
1514
+ const Ya = {
1513
1515
  text: "--ui-text",
1514
1516
  textMuted: "--ui-text-secondary",
1515
1517
  link: "--ui-accent-11",
@@ -1530,7 +1532,7 @@ const Xa = {
1530
1532
  avatarText: "--ui-text",
1531
1533
  badgeFill: "--ui-neutral-soft",
1532
1534
  badgeText: "--ui-neutral-text"
1533
- }, Ya = {
1535
+ }, ja = {
1534
1536
  neutral: { fill: "--ui-neutral-soft", color: "--ui-neutral-text" },
1535
1537
  info: { fill: "--ui-info-soft", color: "--ui-info-text" },
1536
1538
  success: { fill: "--ui-success-soft", color: "--ui-success-text" },
@@ -1575,10 +1577,10 @@ const Xa = {
1575
1577
  gray: { fill: "rgba(198, 212, 224, 0.4)", color: "#636b74" }
1576
1578
  },
1577
1579
  themeKey: "light"
1578
- }, ja = (e, t = {}) => {
1580
+ }, Qa = (e, t = {}) => {
1579
1581
  const n = (i, a) => e(i)?.trim() || a, o = { ...Ue, chips: { ...Ue.chips } };
1580
- for (const [i, a] of Object.entries(Xa)) o[i] = n(a, o[i]);
1581
- for (const [i, a] of Object.entries(Ya)) {
1582
+ for (const [i, a] of Object.entries(Ya)) o[i] = n(a, o[i]);
1583
+ for (const [i, a] of Object.entries(ja)) {
1582
1584
  const s = Ue.chips[i];
1583
1585
  o.chips[i] = { fill: n(a.fill, s.fill), color: n(a.color, s.color) };
1584
1586
  }
@@ -1591,7 +1593,7 @@ const Xa = {
1591
1593
  if (n.getPropertyValue(s).trim())
1592
1594
  return o.style.color = "", o.style.color = `var(${s})`, getComputedStyle(o).color || void 0;
1593
1595
  }, a = e.closest('[data-ui-color-scheme="dark"]') != null;
1594
- return ja(i, { themeKey: a ? "dark" : "light", ...t });
1596
+ return Qa(i, { themeKey: a ? "dark" : "light", ...t });
1595
1597
  } finally {
1596
1598
  o.remove();
1597
1599
  }
@@ -1602,7 +1604,7 @@ const Xa = {
1602
1604
  icon: Math.max(12, Math.min(16, e - 8)),
1603
1605
  fontSize: t,
1604
1606
  chipFontSize: Math.min(n, Math.max(10, e - 12))
1605
- }), Qa = 30, Za = 2, Ja = 1200, es = (e, t, n, o = Qa) => {
1607
+ }), Za = 30, Ja = 2, es = 1200, ts = (e, t, n, o = Za) => {
1606
1608
  const { x: i, y: a } = e, { containerWidth: s, containerHeight: r, freezeRegionWidth: c, columnInitSize: l, rowInitSize: u } = t;
1607
1609
  let h = 0, m = 0;
1608
1610
  if (!n || n === O.None || n === O.Columns) {
@@ -1610,11 +1612,11 @@ const Xa = {
1610
1612
  s - i < o ? h = 1 : i < c + o && !g && (h = -1);
1611
1613
  }
1612
1614
  return (!n || n === O.None || n === O.Rows) && (r - a < o ? m = 1 : a < u + o && (m = -1)), [h, m];
1613
- }, ts = (e, t, n) => {
1614
- const o = Math.min(1, e + t / Ja), i = o * t * Za + (n ?? 0), a = Math.floor(i);
1615
+ }, ns = (e, t, n) => {
1616
+ const o = Math.min(1, e + t / es), i = o * t * Ja + (n ?? 0), a = Math.floor(i);
1615
1617
  return { speed: o, motion: a, carry: n == null ? 0 : i - a };
1616
1618
  };
1617
- class ns {
1619
+ class os {
1618
1620
  direction = [0, 0];
1619
1621
  speed = 0;
1620
1622
  carry = 0;
@@ -1628,7 +1630,7 @@ class ns {
1628
1630
  return this.frameId != null;
1629
1631
  }
1630
1632
  update(t, n) {
1631
- const [o, i] = es(t, this.options.getBounds(), n);
1633
+ const [o, i] = ts(t, this.options.getBounds(), n);
1632
1634
  if (!(o === this.direction[0] && i === this.direction[1])) {
1633
1635
  if (this.direction = [o, i], this.cancel(), o === 0 && i === 0) {
1634
1636
  this.speed = 0, this.carry = 0;
@@ -1642,7 +1644,7 @@ class ns {
1642
1644
  }
1643
1645
  processFrame = (t) => {
1644
1646
  if (this.lastTime !== 0) {
1645
- const n = ts(this.speed, t - this.lastTime, this.options.carryFraction === !1 ? void 0 : this.carry);
1647
+ const n = ns(this.speed, t - this.lastTime, this.options.carryFraction === !1 ? void 0 : this.carry);
1646
1648
  this.speed = n.speed, this.carry = n.carry;
1647
1649
  const [o, i] = this.direction, a = o * n.motion, s = i * n.motion;
1648
1650
  (a !== 0 || s !== 0) && this.options.scrollBy(a, s), this.options.onTick?.(a, s);
@@ -1660,7 +1662,7 @@ const Wn = (e, t, n, o) => {
1660
1662
  const i = e.getColumnRelativeOffset(o, t);
1661
1663
  return V(n, i, i + B.columnResizeHandlerWidth / 2) ? o - 1 : o;
1662
1664
  };
1663
- class os {
1665
+ class is {
1664
1666
  state = Rt;
1665
1667
  hoveredIndex = -1;
1666
1668
  pressed = null;
@@ -1712,7 +1714,7 @@ class os {
1712
1714
  this.pressed = null, this.state = Rt, this.emit(), this.options.onResize?.(n, t);
1713
1715
  }
1714
1716
  }
1715
- class is {
1717
+ class as {
1716
1718
  defaultRowHeight;
1717
1719
  defaultColumnWidth;
1718
1720
  pureRowCount;
@@ -1867,12 +1869,12 @@ class is {
1867
1869
  this.rowCount = t, this.pureRowCount = n, this.rowInitSize = o, this.rowHeightMap = i, a != null && (this.defaultRowHeight = a), this.lastRowIndex = -1, this.rowMetaDataMap = {};
1868
1870
  }
1869
1871
  }
1870
- const as = 240, ss = ({
1872
+ const ss = 240, rs = ({
1871
1873
  containerWidth: e,
1872
1874
  columnInitSize: t,
1873
1875
  columnCount: n,
1874
1876
  getColumnWidth: o,
1875
- minScrollableWidth: i = as
1877
+ minScrollableWidth: i = ss
1876
1878
  }) => {
1877
1879
  const a = e - i;
1878
1880
  if (a <= t) return 0;
@@ -1880,7 +1882,7 @@ const as = 240, ss = ({
1880
1882
  for (let r = 0; r < n; r++)
1881
1883
  if (s += o(r) ?? 0, s > a) return r;
1882
1884
  return n;
1883
- }, rs = (e, t, n, o) => {
1885
+ }, ls = (e, t, n, o) => {
1884
1886
  const { pureRowCount: i, columnCount: a } = o, s = !!n.expand;
1885
1887
  let [r, c] = e.ranges[s ? 1 : 0];
1886
1888
  n.jump ? t === "up" ? c = 0 : t === "down" ? c = i - 1 : t === "left" ? r = 0 : r = a - 1 : t === "up" ? c = Math.max(c - 1, 0) : t === "down" ? c = Math.min(c + 1, i - 1) : t === "left" ? r = Math.max(r - 1, 0) : r = Math.min(r + 1, a - 1);
@@ -1893,7 +1895,7 @@ const as = 240, ss = ({
1893
1895
  }, Bn = (e, t, n) => {
1894
1896
  const [o, i] = e.ranges[0], s = [t ? Math.max(o - 1, 0) : Math.min(o + 1, n.columnCount - 1), i];
1895
1897
  return { selection: e.setRanges([s, s]), activeCell: s, scrollTo: s };
1896
- }, ls = (e, t) => e.setRanges([[0, 0], [t.columnCount - 1, t.pureRowCount - 1]]), cs = (e, t, n = !1) => {
1898
+ }, cs = (e, t) => e.setRanges([[0, 0], [t.columnCount - 1, t.pureRowCount - 1]]), us = (e, t, n = !1) => {
1897
1899
  let o = e.ranges[0];
1898
1900
  e.isColumnSelection && (o = [o[0], 0]);
1899
1901
  const [i, a] = o, s = n ? a : Math.min(a + 1, t.pureRowCount - 1), r = [i, s];
@@ -2000,7 +2002,7 @@ class oe {
2000
2002
  }
2001
2003
  }
2002
2004
  const Ge = new oe(H.None, []);
2003
- class us {
2005
+ class ds {
2004
2006
  selection = new oe();
2005
2007
  activeCell = null;
2006
2008
  isSelecting = !1;
@@ -2138,27 +2140,27 @@ class us {
2138
2140
  }
2139
2141
  }
2140
2142
  }
2141
- const ds = (e, t, n) => {
2143
+ const hs = (e, t, n) => {
2142
2144
  if (!Number.isFinite(t) || n <= 0) return null;
2143
2145
  const o = Math.min(n - 1, Math.max(0, Math.trunc(t))), i = { startColumn: e.startColumn, endColumn: e.endColumn };
2144
2146
  return o > e.endRow ? { source: e, target: { ...i, startRow: e.endRow + 1, endRow: o }, direction: "down" } : o < e.startRow ? { source: e, target: { ...i, startRow: o, endRow: e.startRow - 1 }, direction: "up" } : null;
2145
- }, hs = (e) => ({
2147
+ }, ms = (e) => ({
2146
2148
  startColumn: e.source.startColumn,
2147
2149
  endColumn: e.source.endColumn,
2148
2150
  startRow: Math.min(e.source.startRow, e.target.startRow),
2149
2151
  endRow: Math.max(e.source.endRow, e.target.endRow)
2150
- }), ms = (e) => typeof e == "number" && Number.isFinite(e), Er = (e, t, n = "down") => {
2152
+ }), gs = (e) => typeof e == "number" && Number.isFinite(e), Hr = (e, t, n = "down") => {
2151
2153
  if (t <= 0 || e.length === 0) return [];
2152
- const o = n === "down" ? e : [...e].reverse(), i = o.length >= 2 && o.every(ms) && o.some((s) => s !== o[0]), a = [];
2154
+ const o = n === "down" ? e : [...e].reverse(), i = o.length >= 2 && o.every(gs) && o.some((s) => s !== o[0]), a = [];
2153
2155
  if (i) {
2154
2156
  const s = o.slice(1).map((c, l) => c - o[l]);
2155
2157
  let r = o[o.length - 1];
2156
2158
  for (let c = 0; c < t; c++)
2157
- r += s[c % s.length], a.push(gs(r, o));
2159
+ r += s[c % s.length], a.push(fs(r, o));
2158
2160
  } else
2159
2161
  for (let s = 0; s < t; s++) a.push(o[s % o.length]);
2160
2162
  return n === "down" ? a : a.reverse();
2161
- }, gs = (e, t) => {
2163
+ }, fs = (e, t) => {
2162
2164
  const n = Math.max(...t.map((i) => (String(i).split(".")[1] ?? "").length));
2163
2165
  if (n > 12) return e;
2164
2166
  const o = 10 ** n;
@@ -2167,28 +2169,28 @@ const ds = (e, t, n) => {
2167
2169
  drag: X.Drag,
2168
2170
  expand: X.Expand,
2169
2171
  checkbox: X.Checkbox
2170
- }, fs = {
2172
+ }, ps = {
2171
2173
  none: $.None,
2172
2174
  cell: $.Cell,
2173
2175
  row: $.Row,
2174
2176
  column: $.Column,
2175
2177
  all: $.All
2176
- }, ps = {
2178
+ }, Cs = {
2177
2179
  none: de.None,
2178
2180
  column: de.Column,
2179
2181
  row: de.Row,
2180
2182
  all: de.All
2181
- }, Cs = {
2183
+ }, ws = {
2182
2184
  [H.None]: "none",
2183
2185
  [H.Cells]: "cells",
2184
2186
  [H.Rows]: "rows",
2185
2187
  [H.Columns]: "columns"
2186
- }, ws = {
2188
+ }, vs = {
2187
2189
  none: H.None,
2188
2190
  cells: H.Cells,
2189
2191
  rows: H.Rows,
2190
2192
  columns: H.Columns
2191
- }, On = { ArrowUp: "up", ArrowDown: "down", ArrowLeft: "left", ArrowRight: "right" }, vs = (e) => Math.max(B.rowHeadWidth, 46 + e.length * 24), Ss = 640, ys = 50, bs = (e, t) => ({
2193
+ }, On = { ArrowUp: "up", ArrowDown: "down", ArrowLeft: "left", ArrowRight: "right" }, Ss = (e) => Math.max(B.rowHeadWidth, 46 + e.length * 24), ys = 640, bs = 50, xs = (e, t) => ({
2192
2194
  id: e.id,
2193
2195
  name: e.name,
2194
2196
  width: t,
@@ -2197,8 +2199,8 @@ const ds = (e, t, n) => {
2197
2199
  isPrimary: e.isPrimary,
2198
2200
  description: e.description,
2199
2201
  hasIcon: e.hasIcon
2200
- }), So = (e, t) => e === t || !!e && !!t && e[0] === t[0] && e[1] === t[1], xs = (e, t) => e.kind === t.kind && So(e.activeCell, t.activeCell) && e.ranges.length === t.ranges.length && e.ranges.every((n, o) => n[0] === t.ranges[o][0] && n[1] === t.ranges[o][1]);
2201
- class Rs {
2202
+ }), So = (e, t) => e === t || !!e && !!t && e[0] === t[0] && e[1] === t[1], Rs = (e, t) => e.kind === t.kind && So(e.activeCell, t.activeCell) && e.ranges.length === t.ranges.length && e.ranges.every((n, o) => n[0] === t.ranges[o][0] && n[1] === t.ranges[o][1]);
2203
+ class ks {
2202
2204
  coord;
2203
2205
  scroll = { scrollTop: 0, scrollLeft: 0, isScrolling: !1 };
2204
2206
  mouseState = Ve;
@@ -2230,19 +2232,19 @@ class Rs {
2230
2232
  constructor(t, n) {
2231
2233
  this.config = t, this.hooks = n, this.coord = this.createCoordinate();
2232
2234
  const o = () => this.config;
2233
- this.selection = new us({
2235
+ this.selection = new ds({
2234
2236
  getPureRowCount: () => this.config.rowCount,
2235
2237
  get selectable() {
2236
- return fs[o().selectable];
2238
+ return ps[o().selectable];
2237
2239
  },
2238
2240
  onChange: () => {
2239
2241
  const i = this.getSelection();
2240
- xs(i, this.lastSelection) || (this.lastSelection = i, this.hooks.selectionChange(i), this.hooks.render());
2242
+ Rs(i, this.lastSelection) || (this.lastSelection = i, this.hooks.selectionChange(i), this.hooks.render());
2241
2243
  },
2242
2244
  onRowControlClick: (i, a) => {
2243
2245
  a === X.Expand && this.hooks.rowExpand(i);
2244
2246
  }
2245
- }), this.resize = new os({
2247
+ }), this.resize = new is({
2246
2248
  coordInstance: () => this.coord,
2247
2249
  scrollState: () => this.scroll,
2248
2250
  minWidth: (i) => this.config.columns[i]?.minWidth ?? B.columnMinWidth,
@@ -2257,12 +2259,12 @@ class Rs {
2257
2259
  scrollState: () => this.scroll,
2258
2260
  selection: () => this.selection.selection,
2259
2261
  get draggable() {
2260
- return ps[o().draggable];
2262
+ return Cs[o().draggable];
2261
2263
  },
2262
2264
  onChange: (i) => {
2263
2265
  this.dragState = i, this.hooks.render();
2264
2266
  }
2265
- }), this.dragState = this.drag.state, this.autoScroller = new ns({
2267
+ }), this.dragState = this.drag.state, this.autoScroller = new os({
2266
2268
  getBounds: () => ({
2267
2269
  containerWidth: this.coord.containerWidth,
2268
2270
  containerHeight: this.coord.containerHeight,
@@ -2282,18 +2284,18 @@ class Rs {
2282
2284
  * numbers only and no column is frozen.
2283
2285
  */
2284
2286
  get isPhone() {
2285
- return !!this.config.touch && this.width > 0 && this.width <= Ss;
2287
+ return !!this.config.touch && this.width > 0 && this.width <= ys;
2286
2288
  }
2287
2289
  visibleRowControls() {
2288
2290
  return this.isPhone ? [] : this.config.rowControls;
2289
2291
  }
2290
2292
  gutterWidth() {
2291
- return this.isPhone ? ys : vs(this.config.rowControls);
2293
+ return this.isPhone ? bs : Ss(this.config.rowControls);
2292
2294
  }
2293
2295
  // ---- configuration ----------------------------------------------------
2294
2296
  createCoordinate() {
2295
2297
  const { rowCount: t, rowHeight: n, headerHeight: o, columns: i, freezeColumnCount: a } = this.config;
2296
- return new is({
2298
+ return new as({
2297
2299
  rowHeight: n,
2298
2300
  columnWidth: B.columnWidth,
2299
2301
  rowCount: t,
@@ -2310,7 +2312,7 @@ class Rs {
2310
2312
  const { columns: t } = this.config, n = {};
2311
2313
  this.gridColumns = t.map((o, i) => {
2312
2314
  const a = this.widthOverrides.get(i) ?? o.width ?? B.columnWidth;
2313
- return n[i] = a, bs(o, a);
2315
+ return n[i] = a, xs(o, a);
2314
2316
  }), this.coord.refreshColumnDimensions({ columnCount: t.length, columnInitSize: this.gutterWidth(), columnWidthMap: n }), this.coord.freezeColumnCount = this.freezeCount(this.config.freezeColumnCount), this.invalidate();
2315
2317
  }
2316
2318
  /**
@@ -2319,7 +2321,7 @@ class Rs {
2319
2321
  */
2320
2322
  freezeCount(t) {
2321
2323
  const { columns: n } = this.config, o = Math.min(t, n.length);
2322
- return this.width <= 0 ? o : this.isPhone ? 0 : Math.min(o, ss({
2324
+ return this.width <= 0 ? o : this.isPhone ? 0 : Math.min(o, rs({
2323
2325
  containerWidth: this.width,
2324
2326
  columnInitSize: this.gutterWidth(),
2325
2327
  columnCount: n.length,
@@ -2378,10 +2380,10 @@ class Rs {
2378
2380
  // ---- selection --------------------------------------------------------
2379
2381
  getSelection() {
2380
2382
  const { selection: t, activeCell: n } = this.selection;
2381
- return { kind: Cs[t.type], ranges: t.ranges.map((o) => [o[0], o[1]]), activeCell: n ? [n[0], n[1]] : null };
2383
+ return { kind: ws[t.type], ranges: t.ranges.map((o) => [o[0], o[1]]), activeCell: n ? [n[0], n[1]] : null };
2382
2384
  }
2383
2385
  setSelection(t) {
2384
- const n = t.ranges.map((a) => [a[0], a[1]]), o = t.kind === "none" ? Ge : new oe(ws[t.kind], n), i = t.activeCell !== void 0 ? t.activeCell ? [t.activeCell[0], t.activeCell[1]] : null : t.kind === "cells" && n[0] ? [n[0][0], n[0][1]] : null;
2386
+ const n = t.ranges.map((a) => [a[0], a[1]]), o = t.kind === "none" ? Ge : new oe(vs[t.kind], n), i = t.activeCell !== void 0 ? t.activeCell ? [t.activeCell[0], t.activeCell[1]] : null : t.kind === "cells" && n[0] ? [n[0][0], n[0][1]] : null;
2385
2387
  this.selection.update({ selection: o, activeCell: i });
2386
2388
  }
2387
2389
  selectCell(t, n) {
@@ -2532,12 +2534,12 @@ class Rs {
2532
2534
  endFill(t) {
2533
2535
  const n = this.fillSource;
2534
2536
  this.fillSource = null;
2535
- const o = ds(n, this.fillTargetRow(t), this.config.rowCount);
2537
+ const o = hs(n, this.fillTargetRow(t), this.config.rowCount);
2536
2538
  if (!o) {
2537
2539
  this.hooks.render();
2538
2540
  return;
2539
2541
  }
2540
- const i = hs(o), a = this.selection.activeCell;
2542
+ const i = ms(o), a = this.selection.activeCell;
2541
2543
  this.selection.update({
2542
2544
  selection: this.selection.selection.set(H.Cells, [[i.startColumn, i.startRow], [i.endColumn, i.endRow]]),
2543
2545
  ...a ? {} : { activeCell: [n.startColumn, n.startRow] }
@@ -2653,7 +2655,7 @@ class Rs {
2653
2655
  moveAfterEdit(t, n) {
2654
2656
  const { rowCount: o, columns: i } = this.config;
2655
2657
  if (!o || !i.length) return;
2656
- const a = { pureRowCount: o, columnCount: i.length }, s = new oe(H.Cells, [[t[0], t[1]], [t[0], t[1]]]), r = n === "down" ? cs(s, a) : Bn(s, n === "left", a);
2658
+ const a = { pureRowCount: o, columnCount: i.length }, s = new oe(H.Cells, [[t[0], t[1]], [t[0], t[1]]]), r = n === "down" ? us(s, a) : Bn(s, n === "left", a);
2657
2659
  this.selection.update({ selection: r.selection, activeCell: r.activeCell }), this.scrollToCell(r.scrollTo);
2658
2660
  }
2659
2661
  /** An input method started composing on the selected cell. */
@@ -2678,7 +2680,7 @@ class Rs {
2678
2680
  const r = On[t.key];
2679
2681
  if (r) {
2680
2682
  if (t.altKey) return "ignore";
2681
- const c = rs(a, r, { expand: t.shiftKey, jump: t.commandKey }, i);
2683
+ const c = ls(a, r, { expand: t.shiftKey, jump: t.commandKey }, i);
2682
2684
  return this.selection.update({ selection: c.selection, ...c.activeCell ? { activeCell: c.activeCell } : {} }), this.scrollToCell(c.scrollTo), "prevent";
2683
2685
  }
2684
2686
  switch (t.key) {
@@ -2699,7 +2701,7 @@ class Rs {
2699
2701
  case "a":
2700
2702
  case "A":
2701
2703
  if (!t.commandKey || t.shiftKey || t.altKey) break;
2702
- return this.selection.update({ selection: ls(a, i) }), "prevent";
2704
+ return this.selection.update({ selection: cs(a, i) }), "prevent";
2703
2705
  case "Enter":
2704
2706
  return t.shiftKey || t.altKey || t.commandKey ? "ignore" : (this.requestEdit(s, "enter", !1), "prevent");
2705
2707
  case "F2":
@@ -2713,7 +2715,7 @@ class Rs {
2713
2715
  case "Escape":
2714
2716
  return "ignore";
2715
2717
  }
2716
- return ha(t) ? this.requestEdit(s, "key", !0) ? "pass" : "prevent" : "ignore";
2718
+ return ma(t) ? this.requestEdit(s, "key", !0) ? "pass" : "prevent" : "ignore";
2717
2719
  }
2718
2720
  // ---- drawing ----------------------------------------------------------
2719
2721
  /** Everything `drawGrid` needs except the theme and the cell/icon painters. */
@@ -2767,31 +2769,31 @@ class Rs {
2767
2769
  this.autoScroller.stop();
2768
2770
  }
2769
2771
  }
2770
- const ks = () => {
2772
+ const Is = () => {
2771
2773
  if (typeof navigator > "u") return !1;
2772
2774
  const e = navigator.userAgentData?.platform ?? navigator.platform ?? "";
2773
2775
  return /mac|iphone|ipad|ipod/i.test(e);
2774
2776
  }, Vn = (e, t) => {
2775
2777
  const n = Number.parseFloat(e.getPropertyValue(t));
2776
2778
  return Number.isFinite(n) && n > 0 ? n : void 0;
2777
- }, Is = (e, t = { rowHeight: B.rowHeight, headerHeight: B.columnHeadHeight }) => {
2779
+ }, Ps = (e, t = { rowHeight: B.rowHeight, headerHeight: B.columnHeadHeight }) => {
2778
2780
  const n = getComputedStyle(e);
2779
2781
  return {
2780
2782
  rowHeight: Vn(n, "--ui-grid-row-height") ?? t.rowHeight,
2781
2783
  headerHeight: Vn(n, "--ui-grid-header-height") ?? t.headerHeight
2782
2784
  };
2783
- }, Ps = (e, t, n) => n > 0 ? Math.max(0, Math.floor((e - t) / n)) : 0, zs = ["aria-labelledby", "aria-rowcount", "aria-colcount", "aria-readonly", "aria-busy", "data-ui-grid-skeleton"], Ms = ["id"], As = { role: "rowgroup" }, Es = {
2785
+ }, zs = (e, t, n) => n > 0 ? Math.max(0, Math.floor((e - t) / n)) : 0, Ms = ["aria-labelledby", "aria-rowcount", "aria-colcount", "aria-readonly", "aria-busy", "data-ui-grid-skeleton"], As = ["id"], Es = { role: "rowgroup" }, Hs = {
2784
2786
  role: "row",
2785
2787
  "aria-rowindex": "1"
2786
- }, Hs = ["id", "aria-colindex"], Ts = { role: "rowgroup" }, Fs = ["aria-rowindex", "aria-hidden"], Ns = ["id"], Ls = ["aria-colindex", "aria-selected", "aria-readonly"], Ds = ["id"], Ws = ["data-ui-grid-editing", "aria-labelledby", "aria-invalid", "aria-describedby", "readonly"], Bs = ["id"], Os = {
2788
+ }, Ts = ["id", "aria-colindex"], Fs = { role: "rowgroup" }, Ns = ["aria-rowindex", "aria-hidden"], Ls = ["id"], Ds = ["aria-colindex", "aria-selected", "aria-readonly"], Ws = ["id"], Bs = ["data-ui-grid-editing", "aria-labelledby", "aria-invalid", "aria-describedby", "readonly"], Os = ["id"], Vs = {
2787
2789
  key: 1,
2788
2790
  role: "status",
2789
2791
  class: "sr-only"
2790
- }, Vs = {
2792
+ }, Gs = {
2791
2793
  key: 2,
2792
2794
  "data-ui-grid-overlay": "",
2793
2795
  style: { position: "absolute", inset: "0", "pointer-events": "none", "z-index": "3" }
2794
- }, Gs = 6, Us = 250, Ks = 100, _s = 800, $s = 300, qs = 300, Hr = /* @__PURE__ */ Xo({
2796
+ }, Us = 6, Ks = 250, _s = 100, $s = 800, qs = 300, Xs = 300, Tr = /* @__PURE__ */ Xo({
2795
2797
  __name: "GridHost",
2796
2798
  props: {
2797
2799
  columns: {},
@@ -2827,7 +2829,7 @@ const ks = () => {
2827
2829
  setup(e, { expose: t, emit: n }) {
2828
2830
  const o = e, i = n, a = ni(), s = Yo(), r = xe(), c = xe(), l = xe(), u = xe(), h = xe(), m = ce({ rowHeight: B.rowHeight, headerHeight: B.columnHeadHeight }), g = ce({ ...co, ...o.themeOverrides }), C = ce({ width: 0, height: 0 }), S = ce({ kind: "none", ranges: [], activeCell: null }), p = ce({ width: 0, height: 0 }), w = xe(!1), v = xe(!1), y = ce(0);
2829
2831
  let R = Ue.danger;
2830
- const I = ce(null), k = _(() => o.rowHeight ?? m.value.rowHeight), P = _(() => o.headerHeight ?? m.value.headerHeight), A = _(() => Ps(C.value.height, P.value, k.value)), N = _(() => !o.loading && o.rowCount === 0), M = () => {
2832
+ const I = ce(null), k = _(() => o.rowHeight ?? m.value.rowHeight), P = _(() => o.headerHeight ?? m.value.headerHeight), A = _(() => zs(C.value.height, P.value, k.value)), N = _(() => !o.loading && o.rowCount === 0), M = () => {
2831
2833
  const d = o.loading && o.rowCount === 0;
2832
2834
  return {
2833
2835
  columns: o.columns,
@@ -2845,7 +2847,7 @@ const ks = () => {
2845
2847
  };
2846
2848
  }, E = () => o.loading && o.rowCount === 0;
2847
2849
  let F = 0, W, K = null, G = null;
2848
- const ke = () => o.editing || L.active, z = new Rs(M(), {
2850
+ const ke = () => o.editing || L.active, z = new ks(M(), {
2849
2851
  render: () => ge(),
2850
2852
  selectionChange: (d) => {
2851
2853
  const f = L.state.value.cell;
@@ -2884,7 +2886,7 @@ const ks = () => {
2884
2886
  visibleRangeChange: (d) => {
2885
2887
  E() || i("visible-range-change", d);
2886
2888
  }
2887
- }), L = qa({
2889
+ }), L = Xa({
2888
2890
  owner: () => h.value,
2889
2891
  root: () => r.value,
2890
2892
  enabled: () => !!o.getEditText,
@@ -3005,9 +3007,9 @@ const ks = () => {
3005
3007
  d.style.transform = `translate(${bt}px, ${xt}px)`, d.style.width = `${b.width}px`, d.style.height = `${b.height}px`;
3006
3008
  }
3007
3009
  function Pe() {
3008
- return ca(h.value, r.value ?? null);
3010
+ return ua(h.value, r.value ?? null);
3009
3011
  }
3010
- const ve = (d) => ks() ? d.metaKey : d.ctrlKey;
3012
+ const ve = (d) => Is() ? d.metaKey : d.ctrlKey;
3011
3013
  function ae(d) {
3012
3014
  const f = G ?? (G = r.value.getBoundingClientRect());
3013
3015
  return { x: d.clientX - f.left, y: d.clientY - f.top, shiftKey: d.shiftKey, commandKey: ve(d) };
@@ -3017,7 +3019,7 @@ const ks = () => {
3017
3019
  return d.clientX - b.left >= f.clientWidth || d.clientY - b.top >= f.clientHeight;
3018
3020
  }
3019
3021
  let le = null, q = null, Yt = -1 / 0, jt = -1 / 0, je = !1;
3020
- const Qe = () => typeof performance > "u" ? Date.now() : performance.now(), Qt = () => q != null || Qe() - Yt < _s;
3022
+ const Qe = () => typeof performance > "u" ? Date.now() : performance.now(), Qt = () => q != null || Qe() - Yt < $s;
3021
3023
  function Ze() {
3022
3024
  q && clearTimeout(q.timer), q = null, Yt = Qe();
3023
3025
  }
@@ -3030,23 +3032,23 @@ const ks = () => {
3030
3032
  id: d.pointerId,
3031
3033
  x: d.clientX,
3032
3034
  y: d.clientY,
3033
- flingStop: Qe() - jt < Ks,
3035
+ flingStop: Qe() - jt < _s,
3034
3036
  longPressed: !1,
3035
3037
  timer: setTimeout(() => {
3036
3038
  q !== f || f.flingStop || ke() || (f.longPressed = !0, z.longPress(ae(d)), ie());
3037
- }, Us)
3039
+ }, Ks)
3038
3040
  };
3039
3041
  q = f;
3040
3042
  }
3041
3043
  function Io(d) {
3042
3044
  const f = q;
3043
- !f || f.id !== d.pointerId || Math.hypot(d.clientX - f.x, d.clientY - f.y) > Gs && Ze();
3045
+ !f || f.id !== d.pointerId || Math.hypot(d.clientX - f.x, d.clientY - f.y) > Us && Ze();
3044
3046
  }
3045
3047
  function Po(d) {
3046
3048
  const f = q;
3047
3049
  !f || f.id !== d.pointerId || (Ze(), !(f.longPressed || f.flingStop) && (L.active && !L.commit("pointer") || o.editing || (z.tap(ae(d)), ie(), le && clearTimeout(le), le = setTimeout(() => {
3048
3050
  le = null, z.clearTapFeedback();
3049
- }, $s))));
3051
+ }, qs))));
3050
3052
  }
3051
3053
  function zo(d) {
3052
3054
  if (G = r.value.getBoundingClientRect(), d.pointerType === "touch") {
@@ -3151,20 +3153,20 @@ const ks = () => {
3151
3153
  fe && clearTimeout(fe), fe = null, h.value && !L.active && (h.value.value = "");
3152
3154
  }
3153
3155
  function pt(d, f, b, T) {
3154
- T && (Je = qe(d, ft()), ge()), i("clipboard-copy", { block: f, cellCount: Ia(f), cut: b, ok: T }), T && b && !o.readonly && i("clear-request", d);
3156
+ T && (Je = qe(d, ft()), ge()), i("clipboard-copy", { block: f, cellCount: Pa(f), cut: b, ok: T }), T && b && !o.readonly && i("clear-request", d);
3155
3157
  }
3156
3158
  function en(d, f) {
3157
3159
  const b = z.getSelection(), T = fo(b, ft());
3158
3160
  if (!T) return Promise.resolve(!1);
3159
- const U = za(T, o.isRowLoaded);
3161
+ const U = Ma(T, o.isRowLoaded);
3160
3162
  if (f && U) {
3161
- const be = ya(f, It(Hn(T, o.getCopyText ?? o.getCellText)));
3163
+ const be = ba(f, It(Hn(T, o.getCopyText ?? o.getCellText)));
3162
3164
  return pt(b, T, d, be), Promise.resolve(be);
3163
3165
  }
3164
3166
  f?.preventDefault();
3165
3167
  let Z;
3166
3168
  return U ? Z = Promise.resolve(It(Hn(T, o.getCopyText ?? o.getCellText))) : o.resolveCopy ? Z = o.resolveCopy(T).then(It) : Z = Promise.reject(new Error("Rows are not loaded")), Z.catch(() => {
3167
- }), xa(Z).then(
3169
+ }), Ra(Z).then(
3168
3170
  () => (pt(b, T, d, !0), !0),
3169
3171
  () => (pt(b, T, d, !1), !1)
3170
3172
  );
@@ -3174,14 +3176,14 @@ const ks = () => {
3174
3176
  }
3175
3177
  function nn(d) {
3176
3178
  if (o.readonly) return null;
3177
- const f = Pa(d, z.getSelection(), {
3179
+ const f = za(d, z.getSelection(), {
3178
3180
  ...ft(),
3179
3181
  isReadonlyColumn: (b) => !!o.columns[b]?.readonly
3180
3182
  });
3181
3183
  return f ? (De(), i("paste-request", f), f) : null;
3182
3184
  }
3183
3185
  function Wo(d) {
3184
- L.active || ma({ isEditing: o.editing, eventTarget: d.target, hiddenFocusEl: h.value ?? null }) && (d.preventDefault(), S.value.kind !== "none" && nn(d.clipboardData?.getData("text/plain") ?? ""));
3186
+ L.active || ga({ isEditing: o.editing, eventTarget: d.target, hiddenFocusEl: h.value ?? null }) && (d.preventDefault(), S.value.kind !== "none" && nn(d.clipboardData?.getData("text/plain") ?? ""));
3185
3187
  }
3186
3188
  const Ct = /* @__PURE__ */ new Map();
3187
3189
  let ze = null;
@@ -3192,7 +3194,7 @@ const ks = () => {
3192
3194
  for (const [f, b] of d) i("column-width-save", f, b);
3193
3195
  }
3194
3196
  function Bo(d, f) {
3195
- Ct.set(d, f), ze && clearTimeout(ze), ze = setTimeout(on, qs);
3197
+ Ct.set(d, f), ze && clearTimeout(ze), ze = setTimeout(on, Xs);
3196
3198
  }
3197
3199
  function Oo() {
3198
3200
  o.editing || (L.active || z.compositionStart(), L.active && L.compositionStart());
@@ -3214,7 +3216,7 @@ const ks = () => {
3214
3216
  }
3215
3217
  function ye() {
3216
3218
  const d = r.value;
3217
- d && (m.value = Is(d, m.value), g.value = sa(d, o.themeOverrides), R = vo(d).danger, I.value = Ba(d.ownerDocument, g.value.fontSizeSM, g.value.fontFamily), z.theme = g.value, yt(), z.invalidate());
3219
+ d && (m.value = Ps(d, m.value), g.value = ra(d, o.themeOverrides), R = vo(d).danger, I.value = Oa(d.ownerDocument, g.value.fontSizeSM, g.value.fontFamily), z.theme = g.value, yt(), z.invalidate());
3218
3220
  }
3219
3221
  function yt() {
3220
3222
  z.configure(M()), p.value = z.contentSize;
@@ -3255,7 +3257,7 @@ const ks = () => {
3255
3257
  theme: g.value,
3256
3258
  dangerColor: R,
3257
3259
  textBox: I.value
3258
- })), $o = _(() => Ga(et.value)), un = _(() => j.value.active ? wo(et.value) : k.value), tt = _(() => {
3260
+ })), $o = _(() => Ua(et.value)), un = _(() => j.value.active ? wo(et.value) : k.value), tt = _(() => {
3259
3261
  if (y.value, j.value.active) return j.value.error;
3260
3262
  const d = S.value.activeCell, f = d && o.cellStatus ? o.cellStatus(d) : null;
3261
3263
  return f?.state === "error" ? f.message : null;
@@ -3294,7 +3296,7 @@ const ks = () => {
3294
3296
  ee("span", {
3295
3297
  id: `${J(s)}-label`,
3296
3298
  class: "sr-only"
3297
- }, we(e.label), 9, Ms),
3299
+ }, we(e.label), 9, As),
3298
3300
  ee("canvas", {
3299
3301
  ref_key: "canvas",
3300
3302
  ref: c,
@@ -3321,18 +3323,18 @@ const ks = () => {
3321
3323
  style: Be({ width: `${p.value.width}px`, height: `${p.value.height}px` })
3322
3324
  }, null, 4)
3323
3325
  ], 544),
3324
- ee("div", As, [
3325
- ee("div", Es, [
3326
+ ee("div", Es, [
3327
+ ee("div", Hs, [
3326
3328
  (pe(!0), Ce(Zo, null, Jo(e.columns, (b, T) => (pe(), Ce("span", {
3327
3329
  id: rn(T),
3328
3330
  key: b.id,
3329
3331
  role: "columnheader",
3330
3332
  class: "sr-only",
3331
3333
  "aria-colindex": T + 1
3332
- }, we(b.name), 9, Hs))), 128))
3334
+ }, we(b.name), 9, Ts))), 128))
3333
3335
  ])
3334
3336
  ]),
3335
- ee("div", Ts, [
3337
+ ee("div", Fs, [
3336
3338
  ee("div", {
3337
3339
  role: "row",
3338
3340
  "aria-rowindex": Y.value ? Y.value[1] + 2 : 2,
@@ -3342,7 +3344,7 @@ const ks = () => {
3342
3344
  id: `${J(s)}-rowheader`,
3343
3345
  role: "rowheader",
3344
3346
  class: "sr-only"
3345
- }, we(Uo.value), 9, Ns),
3347
+ }, we(Uo.value), 9, Ls),
3346
3348
  ee("div", {
3347
3349
  ref_key: "focusCell",
3348
3350
  ref: u,
@@ -3356,7 +3358,7 @@ const ks = () => {
3356
3358
  ee("span", {
3357
3359
  id: `${J(s)}-cell`,
3358
3360
  class: "sr-only"
3359
- }, we(Ko.value), 9, Ds),
3361
+ }, we(Ko.value), 9, Ws),
3360
3362
  ee("textarea", {
3361
3363
  ref_key: "focusOwner",
3362
3364
  ref: h,
@@ -3378,21 +3380,21 @@ const ks = () => {
3378
3380
  onBlur: f[1] || (f[1] = (b) => J(L).blur()),
3379
3381
  onCopy: f[2] || (f[2] = (b) => tn(b, !1)),
3380
3382
  onCut: f[3] || (f[3] = (b) => tn(b, !0))
3381
- }, null, 44, Ws),
3383
+ }, null, 44, Bs),
3382
3384
  cn.value ? (pe(), Ce("span", {
3383
3385
  key: 0,
3384
3386
  "data-ui-grid-edit-hint": "",
3385
3387
  "aria-hidden": "true",
3386
- style: Be({ ...J(Ua)(et.value), top: `${un.value - J(lt)}px` })
3388
+ style: Be({ ...J(Ka)(et.value), top: `${un.value - J(lt)}px` })
3387
3389
  }, we(e.editHint), 5)) : Oe("", !0),
3388
3390
  tt.value ? (pe(), Ce("div", {
3389
3391
  key: 1,
3390
3392
  id: `${J(s)}-message`,
3391
3393
  "data-ui-grid-edit-message": "",
3392
- style: Be({ ...J(Ka)(et.value), top: `${un.value + 4}px` })
3393
- }, we(tt.value), 13, Bs)) : Oe("", !0)
3394
- ], 8, Ls)
3395
- ], 8, Fs)
3394
+ style: Be({ ...J(_a)(et.value), top: `${un.value + 4}px` })
3395
+ }, we(tt.value), 13, Os)) : Oe("", !0)
3396
+ ], 8, Ds)
3397
+ ], 8, Ns)
3396
3398
  ]),
3397
3399
  N.value ? (pe(), Ce("div", {
3398
3400
  key: 0,
@@ -3403,16 +3405,16 @@ const ks = () => {
3403
3405
  ei(we(J(a)("No data")), 1)
3404
3406
  ])
3405
3407
  ], 4)) : Oe("", !0),
3406
- e.loading ? (pe(), Ce("span", Os, we(J(a)("Loading")), 1)) : Oe("", !0),
3407
- d.$slots.overlay ? (pe(), Ce("div", Vs, [
3408
+ e.loading ? (pe(), Ce("span", Vs, we(J(a)("Loading")), 1)) : Oe("", !0),
3409
+ d.$slots.overlay ? (pe(), Ce("div", Gs, [
3408
3410
  hn(d.$slots, "overlay", {
3409
3411
  activeCell: Y.value,
3410
3412
  getCellRect: ln
3411
3413
  })
3412
3414
  ])) : Oe("", !0)
3413
- ], 40, zs));
3415
+ ], 40, Ms));
3414
3416
  }
3415
- }), Xs = (e, t = 500) => {
3417
+ }), Ys = (e, t = 500) => {
3416
3418
  const n = new ct(t);
3417
3419
  let o = !1;
3418
3420
  const i = () => {
@@ -3435,13 +3437,13 @@ const ks = () => {
3435
3437
  },
3436
3438
  clear: () => n.clear()
3437
3439
  };
3438
- }, Gn = ["en", "zh-TW", "zh-CN", "ja", "ko", "de", "fr", "es", "it"], Ys = /* @__PURE__ */ Symbol("syno-pkg-land-ui:locale"), Un = { enu: "en", cht: "zh-TW", chs: "zh-CN", jpn: "ja", krn: "ko", ger: "de", fre: "fr", spn: "es", ita: "it" };
3440
+ }, Gn = ["en", "zh-TW", "zh-CN", "ja", "ko", "de", "fr", "es", "it"], js = /* @__PURE__ */ Symbol("syno-pkg-land-ui:locale"), Un = { enu: "en", cht: "zh-TW", chs: "zh-CN", jpn: "ja", krn: "ko", ger: "de", fre: "fr", spn: "es", ita: "it" };
3439
3441
  function Kn(e) {
3440
3442
  if (!e) return;
3441
3443
  const n = e.trim().replaceAll("_", "-").toLowerCase();
3442
3444
  return Un[n] ? Un[n] : n.startsWith("zh") ? /-(hant|tw|hk|mo)\b/.test(n) ? "zh-TW" : "zh-CN" : Gn.find((i) => i.toLowerCase() === n) ?? Gn.find((i) => i === n.split("-")[0]);
3443
3445
  }
3444
- function js() {
3446
+ function Qs() {
3445
3447
  if (typeof window > "u") return "en";
3446
3448
  const e = window;
3447
3449
  let t;
@@ -3459,18 +3461,18 @@ function js() {
3459
3461
  }
3460
3462
  return "en";
3461
3463
  }
3462
- function Qs(e) {
3463
- const t = ti(Ys, null);
3464
+ function Zs(e) {
3465
+ const t = ti(js, null);
3464
3466
  let n;
3465
- return _(() => e() ?? t?.value ?? (n ??= js()));
3467
+ return _(() => e() ?? t?.value ?? (n ??= Qs()));
3466
3468
  }
3467
3469
  function yo(e, t) {
3468
3470
  return e.replace(/\{(\w+)\}/g, (n, o) => String(t[o] ?? n));
3469
3471
  }
3470
- const _e = 4, Re = 6, Zs = 4, Ae = 4, he = (e, t, n, o = "") => {
3472
+ const _e = 4, Re = 6, Js = 4, Ae = 4, he = (e, t, n, o = "") => {
3471
3473
  const i = `${o ? `${o} ` : ""}${t}px ${n}`;
3472
3474
  e.font !== i && (e.font = i);
3473
- }, Ee = (e, t, n) => $e(e, { text: t, fontSize: n, needRender: !1 }).width, Js = (e) => {
3475
+ }, Ee = (e, t, n) => $e(e, { text: t, fontSize: n, needRender: !1 }).width, er = (e) => {
3474
3476
  const t = e.trim();
3475
3477
  if (!t) return "";
3476
3478
  if (typeof Intl < "u" && typeof Intl.Segmenter == "function")
@@ -3492,7 +3494,7 @@ const _e = 4, Re = 6, Zs = 4, Ae = 4, he = (e, t, n, o = "") => {
3492
3494
  }).width;
3493
3495
  }, bo = (e, t, n, o, i) => {
3494
3496
  const { metrics: a, theme: s } = t;
3495
- D(e, { ...n, radius: Zs, fill: i.fill }), he(e, a.chipFontSize, s.fontFamily), $e(e, {
3497
+ D(e, { ...n, radius: Js, fill: i.fill }), he(e, a.chipFontSize, s.fontFamily), $e(e, {
3496
3498
  text: o,
3497
3499
  x: n.x + Re,
3498
3500
  y: n.y + (n.height - a.chipFontSize) / 2,
@@ -3520,7 +3522,7 @@ const _e = 4, Re = 6, Zs = 4, Ae = 4, he = (e, t, n, o = "") => {
3520
3522
  }, _t = (e, t, n) => (he(e, t.metrics.chipFontSize, t.theme.fontFamily), Ee(e, `+${n}`, t.metrics.chipFontSize) + 2 * Re), $t = (e, t, n, o, i) => {
3521
3523
  const { metrics: a, cellTheme: s } = t, r = t.y + (t.height - a.chip) / 2;
3522
3524
  bo(e, t, { x: n, y: r, width: i, height: a.chip }, `+${o}`, { fill: s.badgeFill, color: s.badgeText });
3523
- }, er = (e, t, n, o, i) => {
3525
+ }, tr = (e, t, n, o, i) => {
3524
3526
  const a = t + o / 2, s = n + o / 2 + o * 0.04, r = o / 2, c = r * 0.45;
3525
3527
  e.beginPath();
3526
3528
  for (let l = 0; l < 10; l++) {
@@ -3528,7 +3530,7 @@ const _e = 4, Re = 6, Zs = 4, Ae = 4, he = (e, t, n, o = "") => {
3528
3530
  l === 0 ? e.moveTo(m, g) : e.lineTo(m, g);
3529
3531
  }
3530
3532
  e.closePath(), e.fillStyle = i, e.fill();
3531
- }, tr = (e, t, n, o, i) => {
3533
+ }, nr = (e, t, n, o, i) => {
3532
3534
  const a = o;
3533
3535
  e.save(), e.strokeStyle = i, e.lineWidth = Math.max(1.25, a / 11), e.lineCap = "round", e.lineJoin = "round", e.beginPath(), e.moveTo(t + a * 0.45, n + a * 0.2), e.lineTo(t + a * 0.2, n + a * 0.2), e.lineTo(t + a * 0.2, n + a * 0.8), e.lineTo(t + a * 0.8, n + a * 0.8), e.lineTo(t + a * 0.8, n + a * 0.55), e.moveTo(t + a * 0.55, n + a * 0.2), e.lineTo(t + a * 0.8, n + a * 0.2), e.lineTo(t + a * 0.8, n + a * 0.45), e.moveTo(t + a * 0.8, n + a * 0.2), e.lineTo(t + a * 0.48, n + a * 0.52), e.stroke(), e.restore();
3534
3536
  };
@@ -3544,11 +3546,11 @@ class qt {
3544
3546
  this.cache.clear();
3545
3547
  }
3546
3548
  }
3547
- const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.y + t.height, nr = { type: "decimal", precision: 2 }, _n = (e, t) => {
3549
+ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.y + t.height, or = { type: "decimal", precision: 2 }, _n = (e, t) => {
3548
3550
  if (!Number.isFinite(e) || Math.abs(e) <= Number.MAX_SAFE_INTEGER) return e.toFixed(t);
3549
3551
  const n = String(e), o = n.includes("e") ? "" : "0".repeat(t);
3550
3552
  return o ? `${n}.${o}` : n;
3551
- }, or = (e, t = nr, n = "en-US") => {
3553
+ }, ir = (e, t = or, n = "en-US") => {
3552
3554
  if (e == null) return "";
3553
3555
  const o = Number(e), i = t.precision ?? 2;
3554
3556
  if (t.type === "currency") {
@@ -3556,34 +3558,34 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3556
3558
  return s + a + r;
3557
3559
  }
3558
3560
  return t.type === "percent" ? `${_n(o * 100, i)}%` : _n(o, i);
3559
- }, Tr = (e, t) => {
3561
+ }, Fr = (e, t) => {
3560
3562
  if (e == null || e === "") return null;
3561
3563
  const n = String(e), o = t?.type === "percent" || n.includes("%"), i = n.replace(/[^\d.+-]/g, "").replace(/([+\-.])+/g, "$1"), a = Number.parseFloat(i);
3562
3564
  return Number.isNaN(a) ? null : o ? a / 100 : a;
3563
- }, dt = (e) => e.map(String).filter(Boolean).join(", "), ir = (e, t) => {
3565
+ }, dt = (e) => e.map(String).filter(Boolean).join(", "), ar = (e, t) => {
3564
3566
  const n = t.chips[e.tone ?? "neutral"] ?? t.chips.neutral;
3565
3567
  return { fill: e.fill ?? n.fill, color: e.color ?? n.color };
3566
- }, ht = (e) => Math.max(0, e.width - 2 * e.metrics.padding), ar = {
3568
+ }, ht = (e) => Math.max(0, e.width - 2 * e.metrics.padding), sr = {
3567
3569
  draw: (e, t, n) => {
3568
3570
  me(e, t, n.text);
3569
3571
  },
3570
3572
  describe: (e) => e.text
3571
- }, sr = {
3573
+ }, rr = {
3572
3574
  draw: (e, t, n) => {
3573
3575
  me(e, t, n.text.replace(/\s*\n\s*/g, " "));
3574
3576
  },
3575
3577
  describe: (e) => e.text
3576
- }, rr = {
3578
+ }, lr = {
3577
3579
  draw: (e, t, n) => {
3578
3580
  me(e, t, n.text);
3579
3581
  },
3580
3582
  describe: (e) => e.text
3581
- }, lr = {
3583
+ }, cr = {
3582
3584
  draw: (e, t, n) => {
3583
3585
  me(e, t, n.text, { color: t.cellTheme.textMuted, align: n.align === "end" ? "right" : "left" });
3584
3586
  },
3585
3587
  describe: (e) => e.text
3586
- }, $n = (e, t) => e.text ?? or(e.value, e.format, t), cr = {
3588
+ }, $n = (e, t) => e.text ?? ir(e.value, e.format, t), ur = {
3587
3589
  draw: (e, t, n) => {
3588
3590
  me(e, t, $n(n, t.locale), { align: "right" });
3589
3591
  },
@@ -3591,10 +3593,10 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3591
3593
  }, qn = (e, t, n) => {
3592
3594
  const o = n.icon;
3593
3595
  return { x: e - n.padding - o, y: (t - o) / 2, width: o, height: o };
3594
- }, ur = {
3596
+ }, dr = {
3595
3597
  draw: (e, t, n) => {
3596
3598
  const { metrics: o, cellTheme: i } = t, a = qn(t.width, t.height, o);
3597
- n.text && (me(e, t, n.text, { color: i.link, maxWidth: Math.max(0, a.x - Ae - o.padding) }), tr(e, t.x + a.x, t.y + a.y, a.width, i.link));
3599
+ n.text && (me(e, t, n.text, { color: i.link, maxWidth: Math.max(0, a.x - Ae - o.padding) }), nr(e, t.x + a.x, t.y + a.y, a.width, i.link));
3598
3600
  },
3599
3601
  describe: (e) => e.text,
3600
3602
  hitTest: (e, { point: t, size: n, metrics: o }) => {
@@ -3605,7 +3607,7 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3605
3607
  }, Xn = (e, t, n) => {
3606
3608
  const o = n.icon;
3607
3609
  return { x: e / 2 - o / 2, y: t / 2 - o / 2, width: o, height: o };
3608
- }, Yn = (e) => ({ type: "update", value: !e.value }), dr = {
3610
+ }, Yn = (e) => ({ type: "update", value: !e.value }), hr = {
3609
3611
  draw: (e, t, n) => {
3610
3612
  const { cellTheme: o, metrics: i } = t, a = Xn(t.width, t.height, i);
3611
3613
  Bt(e, {
@@ -3626,12 +3628,12 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3626
3628
  return Xe(t, a) ? { action: Yn(e), area: a } : null;
3627
3629
  },
3628
3630
  keyAction: (e, t) => !e.readonly && (t === "Enter" || t === " ") ? Yn(e) : null
3629
- }, At = 2, st = (e) => Math.max(1, Math.min(10, Math.round(e.max ?? 5))), hr = {
3631
+ }, At = 2, st = (e) => Math.max(1, Math.min(10, Math.round(e.max ?? 5))), mr = {
3630
3632
  draw: (e, t, n) => {
3631
3633
  const { metrics: o, cellTheme: i } = t, a = o.icon, s = t.y + (t.height - a) / 2, r = st(n);
3632
3634
  let c = t.x + o.padding;
3633
3635
  for (let l = 0; l < r && c + a <= t.x + t.width - o.padding + At; l++)
3634
- er(e, c, s, a, n.value > l ? i.ratingOn : i.ratingOff), c += a + At;
3636
+ tr(e, c, s, a, n.value > l ? i.ratingOn : i.ratingOff), c += a + At;
3635
3637
  },
3636
3638
  describe: (e, { labels: t }) => e.value > 0 ? yo(t.rating, { value: e.value, max: st(e) }) : "",
3637
3639
  // Click the n-th star: value n; click the current value again: clear.
@@ -3661,12 +3663,12 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3661
3663
  const g = { x: l, y: c, width: h, height: o.chip };
3662
3664
  bo(e, t, g, n[m].label, n[m].colors), u.push({ x: l - t.x, y: c - t.y, width: h, height: o.chip }), l += h + _e;
3663
3665
  }), r.more > 0 && $t(e, t, l, r.more, r.badgeWidth), u;
3664
- }, mr = {
3666
+ }, gr = {
3665
3667
  draw: (e, t, n) => {
3666
- xo(e, t, n.options.map((o) => ({ label: o.label, colors: ir(o, t.cellTheme) })));
3668
+ xo(e, t, n.options.map((o) => ({ label: o.label, colors: ar(o, t.cellTheme) })));
3667
3669
  },
3668
3670
  describe: (e) => dt(e.options.map((t) => t.label))
3669
- }, gr = {
3671
+ }, fr = {
3670
3672
  draw: (e, t, n) => {
3671
3673
  const o = { fill: t.cellTheme.badgeFill, color: t.cellTheme.text }, i = xo(e, t, n.records.map((a) => ({ label: a.label, colors: o })));
3672
3674
  Nt.set(He("link", t, n.records.map((a) => a.id)), i);
@@ -3677,20 +3679,20 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3677
3679
  if (!t.wasActive && !o || !e) return null;
3678
3680
  const i = e.findIndex((a) => Xe(t.point, a));
3679
3681
  return i < 0 ? null : { action: n(i), area: e[i] };
3680
- }, fr = (e, t, n, o, i, a, s) => {
3682
+ }, pr = (e, t, n, o, i, a, s) => {
3681
3683
  const { cellTheme: r, theme: c } = t, l = s ? t.images.get(s) : void 0;
3682
3684
  if (e.save(), e.beginPath(), e.arc(n + i / 2, o + i / 2, i / 2, 0, Math.PI * 2), e.closePath(), l)
3683
3685
  e.clip(), e.drawImage(l, n, o, i, i);
3684
3686
  else {
3685
3687
  e.fillStyle = r.avatarFill, e.fill();
3686
- const u = Js(a);
3688
+ const u = er(a);
3687
3689
  if (u) {
3688
3690
  const h = Math.round(i * 0.55);
3689
3691
  he(e, h, c.fontFamily), e.fillStyle = r.avatarText, e.textAlign = "center", e.textBaseline = "middle", e.fillText(u, n + i / 2, o + i / 2 + 0.5);
3690
3692
  }
3691
3693
  }
3692
3694
  e.restore();
3693
- }, pr = {
3695
+ }, Cr = {
3694
3696
  draw: (e, t, n) => {
3695
3697
  const { metrics: o, theme: i } = t;
3696
3698
  if (!n.people.length) return;
@@ -3700,14 +3702,14 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3700
3702
  let l = t.x + o.padding;
3701
3703
  r.widths.forEach((u, h) => {
3702
3704
  const m = n.people[h];
3703
- fr(e, t, l, c, a, m.name, m.avatarUrl), u > a + Ae && me(e, t, m.name, { x: l + a + Ae, maxWidth: u - a - Ae - (h < r.widths.length - 1 || r.more ? Re : 0) }), l += u + _e;
3705
+ pr(e, t, l, c, a, m.name, m.avatarUrl), u > a + Ae && me(e, t, m.name, { x: l + a + Ae, maxWidth: u - a - Ae - (h < r.widths.length - 1 || r.more ? Re : 0) }), l += u + _e;
3704
3706
  }), r.more > 0 && $t(e, t, l, r.more, r.badgeWidth);
3705
3707
  },
3706
3708
  describe: (e) => dt(e.people.map((t) => t.name))
3707
3709
  }, jn = (e) => {
3708
3710
  const t = /\.([\p{L}\p{N}]{1,5})$/u.exec(e);
3709
3711
  return t ? t[1].toUpperCase() : "";
3710
- }, Lt = new qt(), Cr = {
3712
+ }, Lt = new qt(), wr = {
3711
3713
  draw: (e, t, n) => {
3712
3714
  const { metrics: o, cellTheme: i, theme: a } = t;
3713
3715
  if (!n.files.length) return;
@@ -3723,14 +3725,14 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3723
3725
  },
3724
3726
  describe: (e) => dt(e.files.map((t) => t.name)),
3725
3727
  hitTest: (e, t) => Ro(Lt.get(He("attachment", Xt(t), e.files.map((n) => n.id))), t, (n) => ({ type: "open-attachment", id: e.files[n].id }), !0)
3726
- }, Qn = (e) => `${Math.round(Math.max(0, Math.min(1, e)) * 100)}%`, wr = {
3728
+ }, Qn = (e) => `${Math.round(Math.max(0, Math.min(1, e)) * 100)}%`, vr = {
3727
3729
  draw: (e, t, n) => {
3728
3730
  if (n.value == null) return;
3729
3731
  const { metrics: o, cellTheme: i } = t, a = o.icon, s = Math.max(0, Math.min(1, n.value)), r = t.x + o.padding + a / 2, c = t.y + t.height / 2, l = a / 2 - 1.25;
3730
3732
  e.save(), e.lineWidth = 2.5, e.beginPath(), e.arc(r, c, l, 0, Math.PI * 2), e.strokeStyle = i.progressTrack, e.stroke(), s > 0 && (e.beginPath(), e.arc(r, c, l, -Math.PI / 2, -Math.PI / 2 + s * Math.PI * 2), e.strokeStyle = i.progressFill, e.lineCap = s < 1 ? "round" : "butt", e.stroke()), e.restore(), me(e, t, Qn(s), { x: t.x + o.padding + a + Ae + 2 });
3731
3733
  },
3732
3734
  describe: (e) => e.value == null ? "" : Qn(e.value)
3733
- }, Et = 10, Dt = new qt(), vr = {
3735
+ }, Et = 10, Dt = new qt(), Sr = {
3734
3736
  draw: (e, t, n) => {
3735
3737
  const { metrics: o, cellTheme: i, theme: a } = t;
3736
3738
  if (!n.label) return;
@@ -3745,34 +3747,34 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3745
3747
  return n && Xe(t.point, n) ? { action: { type: "press" }, area: n } : null;
3746
3748
  },
3747
3749
  keyAction: (e, t) => !e.disabled && (t === "Enter" || t === " ") ? { type: "press" } : null
3748
- }, Zn = 4, Sr = {
3749
- text: ar,
3750
- longText: sr,
3751
- number: cr,
3752
- select: mr,
3753
- person: pr,
3754
- date: rr,
3755
- boolean: dr,
3756
- rating: hr,
3757
- url: ur,
3758
- link: gr,
3759
- attachment: Cr,
3760
- progress: wr,
3761
- button: vr,
3762
- derived: lr
3763
- }, Fr = () => {
3750
+ }, Zn = 4, yr = {
3751
+ text: sr,
3752
+ longText: rr,
3753
+ number: ur,
3754
+ select: gr,
3755
+ person: Cr,
3756
+ date: lr,
3757
+ boolean: hr,
3758
+ rating: mr,
3759
+ url: dr,
3760
+ link: fr,
3761
+ attachment: wr,
3762
+ progress: vr,
3763
+ button: Sr,
3764
+ derived: cr
3765
+ }, Nr = () => {
3764
3766
  Nt.clear(), Lt.clear(), Dt.clear();
3765
- }, yr = 6, br = (e, t, n, o) => {
3767
+ }, br = 6, xr = (e, t, n, o) => {
3766
3768
  if (e.save(), n === "pending") {
3767
- const i = yr / 2, a = t.x + t.width - 3 - i, s = t.y + 3 + i;
3769
+ const i = br / 2, a = t.x + t.width - 3 - i, s = t.y + 3 + i;
3768
3770
  e.beginPath(), e.arc(a, s, i + 1, 0, Math.PI * 2), e.fillStyle = o.surface, e.fill(), e.beginPath(), e.arc(a, s, i, 0, Math.PI * 2), e.fillStyle = o.pending, e.fill();
3769
3771
  } else
3770
3772
  e.lineWidth = 2, e.strokeStyle = o.danger, e.strokeRect(t.x + 1, t.y + 1, t.width - 2, t.height - 2);
3771
3773
  e.restore();
3772
- }, Jn = (e, t) => !!e && !!t && e[0] === t[0] && e[1] === t[1], xr = (e) => {
3773
- const t = { ...Sr, ...e.renderers }, n = e.locale ?? "en-US";
3774
+ }, Jn = (e, t) => !!e && !!t && e[0] === t[0] && e[1] === t[1], Rr = (e) => {
3775
+ const t = { ...yr, ...e.renderers }, n = e.locale ?? "en-US";
3774
3776
  let o = e.labels, i = e.theme ?? Ue, a = null, s = null;
3775
- const r = Xs(() => e.onImageLoad?.()), c = (p) => ((!s || s.rowHeight !== p.height || s.fontSize !== p.theme.fontSizeSM || s.chipFontSize > p.theme.fontSizeXS) && (s = Dn(p.height, p.theme.fontSizeSM, p.theme.fontSizeXS)), s), l = (p) => {
3777
+ const r = Ys(() => e.onImageLoad?.()), c = (p) => ((!s || s.rowHeight !== p.height || s.fontSize !== p.theme.fontSizeSM || s.chipFontSize > p.theme.fontSizeXS) && (s = Dn(p.height, p.theme.fontSizeSM, p.theme.fontSizeXS)), s), l = (p) => {
3776
3778
  if (e.theme || a === p.theme) return;
3777
3779
  a = p.theme;
3778
3780
  const w = e.themeRoot?.();
@@ -3785,7 +3787,7 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3785
3787
  R && (p.save(), p.beginPath(), p.rect(w.x, w.y, w.width, w.height), p.clip(), R.draw(p, { ...w, cellTheme: i, metrics: c(w), images: r, labels: o, locale: n }, v), p.restore());
3786
3788
  }
3787
3789
  const y = e.getStatus?.(w.cell);
3788
- y && br(p, w, y, i);
3790
+ y && xr(p, w, y, i);
3789
3791
  }
3790
3792
  }, h = (p, w) => w?.type === "update" && e.isReadonly?.(p) ? null : w, m = (p) => {
3791
3793
  const w = e.getValue(p), v = w ? t[w.kind]?.describe(w, { labels: o, locale: n }) ?? "" : "", y = e.getStatus?.(p);
@@ -3835,7 +3837,7 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
3835
3837
  },
3836
3838
  clearImages: () => r.clear()
3837
3839
  };
3838
- }, Rr = {
3840
+ }, kr = {
3839
3841
  "{count} failed": "{count} failed",
3840
3842
  "{name} is not a JPEG, PNG, WebP or GIF image": "{name} is not a JPEG, PNG, WebP or GIF image",
3841
3843
  "{name}: {kind} images are not supported; on an iPhone, set Settings > Camera > Formats to Most Compatible": "{name}: {kind} images are not supported; on an iPhone, set Settings > Camera > Formats to Most Compatible",
@@ -4095,8 +4097,8 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
4095
4097
  "Rating {value} of {max}": "Rating {value} of {max}",
4096
4098
  Saving: "Saving",
4097
4099
  "Not saved": "Not saved"
4098
- }, kr = {
4099
- en: Rr,
4100
+ }, Ir = {
4101
+ en: kr,
4100
4102
  "zh-TW": {
4101
4103
  "{count} failed": "{count} 個失敗",
4102
4104
  "{name} is not a JPEG, PNG, WebP or GIF image": "{name} 不是 JPEG、PNG、WebP 或 GIF 圖片",
@@ -6186,27 +6188,27 @@ const Xe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
6186
6188
  "Not saved": "Non salvato"
6187
6189
  }
6188
6190
  };
6189
- function Ir(e, t, n = {}) {
6190
- return yo(kr[e][t], n);
6191
+ function Pr(e, t, n = {}) {
6192
+ return yo(Ir[e][t], n);
6191
6193
  }
6192
- function Pr() {
6193
- const e = Qs(() => {
6194
+ function zr() {
6195
+ const e = Zs(() => {
6194
6196
  });
6195
- return (t, n) => Ir(e.value, t, n);
6197
+ return (t, n) => Pr(e.value, t, n);
6196
6198
  }
6197
- const Nr = (e) => {
6198
- const t = Pr(), n = _(() => ({
6199
+ const Lr = (e) => {
6200
+ const t = zr(), n = _(() => ({
6199
6201
  checked: t("Checked"),
6200
6202
  unchecked: t("Not checked"),
6201
6203
  rating: t("Rating {value} of {max}", { value: "{value}", max: "{max}" }),
6202
6204
  saving: t("Saving"),
6203
6205
  failed: t("Not saved"),
6204
6206
  ...e.labels
6205
- })), o = xr({ ...e, labels: n.value });
6207
+ })), o = Rr({ ...e, labels: n.value });
6206
6208
  return ue(n, (i) => o.setLabels(i)), o;
6207
- }, zr = 300;
6208
- function Lr(e) {
6209
- const t = e.delayMs ?? zr, n = e.setTimer ?? ((l, u) => setTimeout(l, u)), o = e.clearTimer ?? ((l) => clearTimeout(l)), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
6209
+ }, Mr = 300;
6210
+ function Dr(e) {
6211
+ const t = e.delayMs ?? Mr, n = e.setTimer ?? ((l, u) => setTimeout(l, u)), o = e.clearTimer ?? ((l) => clearTimeout(l)), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
6210
6212
  let s = 0;
6211
6213
  const r = (l, u) => {
6212
6214
  const h = i.get(l);
@@ -6243,39 +6245,39 @@ function Lr(e) {
6243
6245
  }
6244
6246
  };
6245
6247
  }
6246
- function Dr(e) {
6248
+ function Wr(e) {
6247
6249
  return e ? e.state === "saving" ? "pending" : "error" : null;
6248
6250
  }
6249
6251
  export {
6250
- Xa as GRID_CELL_TOKENS,
6251
- Ya as GRID_CHIP_TOKENS,
6252
- Hr as GridHost,
6253
- zr as SAVING_MARK_DELAY_MS,
6254
- Ia as blockCellCount,
6255
- Pa as buildPasteProposal,
6252
+ Ya as GRID_CELL_TOKENS,
6253
+ ja as GRID_CHIP_TOKENS,
6254
+ Tr as GridHost,
6255
+ Mr as SAVING_MARK_DELAY_MS,
6256
+ Pa as blockCellCount,
6257
+ za as buildPasteProposal,
6256
6258
  qe as cellRange,
6257
- Dr as cellStatusMark,
6258
- Fr as clearGridCellRegions,
6259
- Lr as createCellStatusStore,
6260
- ja as createGridCellTheme,
6261
- xr as createGridCells,
6262
- Xs as createGridImageCache,
6263
- Sr as defaultGridCellRenderers,
6259
+ Wr as cellStatusMark,
6260
+ Nr as clearGridCellRegions,
6261
+ Dr as createCellStatusStore,
6262
+ Qa as createGridCellTheme,
6263
+ Rr as createGridCells,
6264
+ Ys as createGridImageCache,
6265
+ yr as defaultGridCellRenderers,
6264
6266
  Ue as defaultGridCellTheme,
6265
- br as drawGridCellStatus,
6266
- Er as fillSeries,
6267
- hs as filledRange,
6268
- or as formatGridNumber,
6267
+ xr as drawGridCellStatus,
6268
+ Hr as fillSeries,
6269
+ ms as filledRange,
6270
+ ir as formatGridNumber,
6269
6271
  Dn as gridCellMetrics,
6270
- Tr as parseGridNumber,
6271
- Ca as parseTsv,
6272
- ds as planFill,
6272
+ Fr as parseGridNumber,
6273
+ wa as parseTsv,
6274
+ hs as planFill,
6273
6275
  vo as readGridCellTheme,
6274
6276
  fo as selectionBlock,
6275
- ka as selectionStart,
6276
- Sa as toHtmlTable,
6277
- pa as toTsv,
6278
- Nr as useGridCells,
6279
- xa as writeClipboardAsync,
6280
- ya as writeClipboardEvent
6277
+ Ia as selectionStart,
6278
+ ya as toHtmlTable,
6279
+ Ca as toTsv,
6280
+ Lr as useGridCells,
6281
+ Ra as writeClipboardAsync,
6282
+ ba as writeClipboardEvent
6281
6283
  };