@iyulab/flex-table 0.39.0 → 0.40.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.
@@ -329,12 +329,11 @@ var l = r`
329
329
  color: var(--ft-active-color);
330
330
  }
331
331
 
332
- .ft-cell.ft-type-number {
333
- text-align: right;
334
- font-variant-numeric: tabular-nums;
335
- }
332
+ .ft-cell.ft-type-number { font-variant-numeric: tabular-nums; }
336
333
 
337
- .ft-cell.ft-type-boolean { text-align: center; }
334
+ /* 셀 정렬은 열의 실효 정렬(align, 없으면 type 기본값)에서 온다 — 논리값이라 RTL 에서 뒤집힌다. */
335
+ .ft-cell.ft-align-center { text-align: center; }
336
+ .ft-cell.ft-align-end { text-align: end; }
338
337
  .ft-bool { color: var(--ft-bool-color); }
339
338
 
340
339
  .ft-empty {
@@ -1628,7 +1627,7 @@ function D(e, t, n) {
1628
1627
  //#endregion
1629
1628
  //#region src/renderers/cell-renderer.ts
1630
1629
  function O(e, t, n) {
1631
- return n.renderer ? n.renderer(e, t, n) : n.format ? typeof n.format == "function" ? n.format(e, t, n) : b(e, n.format) : ee(e, n);
1630
+ return n.render ? n.render(e, t, n) : n.format ? typeof n.format == "function" ? n.format(e, t, n) : b(e, n.format) : ee(e, n);
1632
1631
  }
1633
1632
  function ee(e, t) {
1634
1633
  if (e == null) return "";
@@ -2115,27 +2114,27 @@ function L(e) {
2115
2114
  function R(e) {
2116
2115
  return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
2117
2116
  }
2118
- function z(e) {
2117
+ function me(e) {
2119
2118
  let t = "";
2120
2119
  for (e++; e > 0;) t = String.fromCharCode(64 + (e % 26 || 26)) + t, e = Math.floor((e - 1) / 26);
2121
2120
  return t;
2122
2121
  }
2123
- function B(e, t) {
2124
- return z(t) + (e + 1);
2122
+ function z(e, t) {
2123
+ return me(t) + (e + 1);
2125
2124
  }
2126
- function me(e) {
2125
+ function he(e) {
2127
2126
  let t = Date.UTC(1899, 11, 30);
2128
2127
  return (e.getTime() - t) / 864e5;
2129
2128
  }
2130
- var he = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n</Types>", ge = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\n</Relationships>", _e = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n <sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>\n</workbook>", ve = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>", ye = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n <numFmts count=\"1\"><numFmt numFmtId=\"164\" formatCode=\"yyyy-mm-dd\"/></numFmts>\n <fonts count=\"2\">\n <font><sz val=\"11\"/><name val=\"Calibri\"/></font>\n <font><sz val=\"11\"/><b/><name val=\"Calibri\"/></font>\n </fonts>\n <fills count=\"2\">\n <fill><patternFill patternType=\"none\"/></fill>\n <fill><patternFill patternType=\"gray125\"/></fill>\n </fills>\n <borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>\n <cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n <cellXfs count=\"3\">\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\n <xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/>\n <xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyFont=\"1\"/>\n </cellXfs>\n</styleSheet>";
2131
- function be(e, t) {
2132
- let n = [], r = t.map((e, t) => `<c r="${B(0, t)}" t="str" s="2"><v>${R(e.header)}</v></c>`);
2129
+ var ge = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n</Types>", _e = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\n</Relationships>", ve = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n <sheets><sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/></sheets>\n</workbook>", ye = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\n</Relationships>", be = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n <numFmts count=\"1\"><numFmt numFmtId=\"164\" formatCode=\"yyyy-mm-dd\"/></numFmts>\n <fonts count=\"2\">\n <font><sz val=\"11\"/><name val=\"Calibri\"/></font>\n <font><sz val=\"11\"/><b/><name val=\"Calibri\"/></font>\n </fonts>\n <fills count=\"2\">\n <fill><patternFill patternType=\"none\"/></fill>\n <fill><patternFill patternType=\"gray125\"/></fill>\n </fills>\n <borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders>\n <cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>\n <cellXfs count=\"3\">\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\n <xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/>\n <xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyFont=\"1\"/>\n </cellXfs>\n</styleSheet>";
2130
+ function xe(e, t) {
2131
+ let n = [], r = t.map((e, t) => `<c r="${z(0, t)}" t="str" s="2"><v>${R(e.label)}</v></c>`);
2133
2132
  return n.push(`<row r="1">${r.join("")}</row>`), e.forEach((e, r) => {
2134
2133
  let i = t.map((t, n) => {
2135
- let i = B(r + 1, n), a = e[t.key];
2134
+ let i = z(r + 1, n), a = e[t.key];
2136
2135
  if (a == null) return `<c r="${i}" t="str"><v></v></c>`;
2137
2136
  let o = t.type ?? "text";
2138
- return o === "number" && typeof a == "number" ? `<c r="${i}"><v>${a}</v></c>` : (o === "date" || o === "datetime") && a instanceof Date ? `<c r="${i}" s="1"><v>${me(a).toFixed(6)}</v></c>` : o === "boolean" ? `<c r="${i}" t="b"><v>${+!!a}</v></c>` : `<c r="${i}" t="str"><v>${R(String(a))}</v></c>`;
2137
+ return o === "number" && typeof a == "number" ? `<c r="${i}"><v>${a}</v></c>` : (o === "date" || o === "datetime") && a instanceof Date ? `<c r="${i}" s="1"><v>${he(a).toFixed(6)}</v></c>` : o === "boolean" ? `<c r="${i}" t="b"><v>${+!!a}</v></c>` : `<c r="${i}" t="str"><v>${R(String(a))}</v></c>`;
2139
2138
  });
2140
2139
  n.push(`<row r="${r + 2}">${i.join("")}</row>`);
2141
2140
  }), `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -2143,24 +2142,24 @@ function be(e, t) {
2143
2142
  <sheetData>${n.join("")}</sheetData>
2144
2143
  </worksheet>`;
2145
2144
  }
2146
- function xe(e, t) {
2147
- let n = be(e, t);
2145
+ function Se(e, t) {
2146
+ let n = xe(e, t);
2148
2147
  return pe([
2149
2148
  {
2150
2149
  name: "[Content_Types].xml",
2151
- data: I.encode(he)
2150
+ data: I.encode(ge)
2152
2151
  },
2153
2152
  {
2154
2153
  name: "_rels/.rels",
2155
- data: I.encode(ge)
2154
+ data: I.encode(_e)
2156
2155
  },
2157
2156
  {
2158
2157
  name: "xl/workbook.xml",
2159
- data: I.encode(_e)
2158
+ data: I.encode(ve)
2160
2159
  },
2161
2160
  {
2162
2161
  name: "xl/_rels/workbook.xml.rels",
2163
- data: I.encode(ve)
2162
+ data: I.encode(ye)
2164
2163
  },
2165
2164
  {
2166
2165
  name: "xl/worksheets/sheet1.xml",
@@ -2168,30 +2167,30 @@ function xe(e, t) {
2168
2167
  },
2169
2168
  {
2170
2169
  name: "xl/styles.xml",
2171
- data: I.encode(ye)
2170
+ data: I.encode(be)
2172
2171
  }
2173
2172
  ]);
2174
2173
  }
2175
2174
  //#endregion
2176
2175
  //#region src/export/export.ts
2177
- function V(e, t, n) {
2176
+ function B(e, t, n) {
2178
2177
  switch (n) {
2179
- case "csv": return H(e, t, ",");
2180
- case "tsv": return H(e, t, " ");
2181
- case "json": return Ce(e, t);
2182
- case "xlsx": return xe(e, t);
2178
+ case "csv": return V(e, t, ",");
2179
+ case "tsv": return V(e, t, " ");
2180
+ case "json": return we(e, t);
2181
+ case "xlsx": return Se(e, t);
2183
2182
  }
2184
2183
  }
2185
- function Se(e, t) {
2184
+ function Ce(e, t) {
2186
2185
  return e == null ? "" : (t.type === "date" || t.type === "datetime") && e instanceof Date ? e.toISOString() : String(e);
2187
2186
  }
2188
- function H(e, t, n) {
2189
- return [t.map((e) => U(e.header, n)).join(n), ...e.map((e) => t.map((t) => U(Se(e[t.key], t), n)).join(n))].join("\n");
2187
+ function V(e, t, n) {
2188
+ return [t.map((e) => H(e.label, n)).join(n), ...e.map((e) => t.map((t) => H(Ce(e[t.key], t), n)).join(n))].join("\n");
2190
2189
  }
2191
- function U(e, t) {
2190
+ function H(e, t) {
2192
2191
  return e.includes(t) || e.includes("\"") || e.includes("\n") || e.includes("\r") ? "\"" + e.replace(/"/g, "\"\"") + "\"" : e;
2193
2192
  }
2194
- function Ce(e, t) {
2193
+ function we(e, t) {
2195
2194
  let n = e.map((e) => {
2196
2195
  let n = {};
2197
2196
  for (let r of t) {
@@ -2202,35 +2201,35 @@ function Ce(e, t) {
2202
2201
  });
2203
2202
  return JSON.stringify(n, null, 2);
2204
2203
  }
2205
- function we(e, t, n) {
2204
+ function Te(e, t, n) {
2206
2205
  let r = new Blob([e], { type: n }), i = URL.createObjectURL(r), a = document.createElement("a");
2207
2206
  a.href = i, a.download = t, a.style.display = "none", document.body.appendChild(a), a.click(), document.body.removeChild(a), setTimeout(() => URL.revokeObjectURL(i), 100);
2208
2207
  }
2209
- var Te = {
2208
+ var Ee = {
2210
2209
  csv: "text/csv;charset=utf-8",
2211
2210
  tsv: "text/tab-separated-values;charset=utf-8",
2212
2211
  json: "application/json;charset=utf-8",
2213
2212
  xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2214
- }, Ee = {
2213
+ }, De = {
2215
2214
  csv: ".csv",
2216
2215
  tsv: ".tsv",
2217
2216
  json: ".json",
2218
2217
  xlsx: ".xlsx"
2219
2218
  };
2220
- function De(e) {
2221
- return Te[e];
2222
- }
2223
2219
  function Oe(e) {
2224
2220
  return Ee[e];
2225
2221
  }
2222
+ function ke(e) {
2223
+ return De[e];
2224
+ }
2226
2225
  //#endregion
2227
2226
  //#region src/export/xlsx-reader.ts
2228
- function ke(e) {
2227
+ function Ae(e) {
2229
2228
  for (let t = e.byteLength - 22; t >= 0; t--) if (e.getUint32(t, !0) === 101010256) return t;
2230
2229
  throw Error("XLSX: End of central directory not found — not a valid ZIP file");
2231
2230
  }
2232
- function Ae(e) {
2233
- let t = ke(e), n = e.getUint32(t + 16, !0), r = e.getUint32(t + 12, !0), i = new TextDecoder("utf-8"), a = [], o = n, s = n + r;
2231
+ function je(e) {
2232
+ let t = Ae(e), n = e.getUint32(t + 16, !0), r = e.getUint32(t + 12, !0), i = new TextDecoder("utf-8"), a = [], o = n, s = n + r;
2234
2233
  for (; o < s && e.getUint32(o, !0) === 33639248;) {
2235
2234
  let t = e.getUint16(o + 10, !0), n = e.getUint32(o + 20, !0), r = e.getUint32(o + 24, !0), s = e.getUint16(o + 28, !0), c = e.getUint16(o + 30, !0), l = e.getUint16(o + 32, !0), u = e.getUint32(o + 42, !0), d = i.decode(new Uint8Array(e.buffer, o + 46, s));
2236
2235
  a.push({
@@ -2243,7 +2242,7 @@ function Ae(e) {
2243
2242
  }
2244
2243
  return a;
2245
2244
  }
2246
- async function je(e) {
2245
+ async function Me(e) {
2247
2246
  let t = new DecompressionStream("deflate-raw"), n = t.writable.getWriter(), r = t.readable.getReader();
2248
2247
  n.write(e), n.close();
2249
2248
  let i = [];
@@ -2256,28 +2255,28 @@ async function je(e) {
2256
2255
  for (let e of i) o.set(e, s), s += e.length;
2257
2256
  return o;
2258
2257
  }
2259
- async function Me(e, t) {
2258
+ async function Ne(e, t) {
2260
2259
  let n = t.localHeaderOffset, r = e.getUint16(n + 26, !0), i = e.getUint16(n + 28, !0), a = n + 30 + r + i, o = new Uint8Array(e.buffer, a, t.compressedSize);
2261
2260
  if (t.compressionMethod === 0) return o.slice();
2262
- if (t.compressionMethod === 8) return je(o);
2261
+ if (t.compressionMethod === 8) return Me(o);
2263
2262
  throw Error(`XLSX: Unsupported compression method ${t.compressionMethod}`);
2264
2263
  }
2265
- async function Ne(e) {
2266
- let t = new DataView(e), n = Ae(t), r = /* @__PURE__ */ new Map();
2267
- for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await Me(t, e));
2264
+ async function Pe(e) {
2265
+ let t = new DataView(e), n = je(t), r = /* @__PURE__ */ new Map();
2266
+ for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await Ne(t, e));
2268
2267
  return r;
2269
2268
  }
2270
- var Pe = new TextDecoder("utf-8");
2271
- function W(e) {
2272
- let t = Pe.decode(e);
2269
+ var Fe = new TextDecoder("utf-8");
2270
+ function U(e) {
2271
+ let t = Fe.decode(e);
2273
2272
  return new DOMParser().parseFromString(t, "application/xml");
2274
2273
  }
2275
- function Fe(e) {
2274
+ function Ie(e) {
2276
2275
  if (!e) return [];
2277
- let t = W(e);
2276
+ let t = U(e);
2278
2277
  return Array.from(t.querySelectorAll("si")).map((e) => Array.from(e.querySelectorAll("t")).map((e) => e.textContent ?? "").join(""));
2279
2278
  }
2280
- var Ie = /* @__PURE__ */ new Set([
2279
+ var Le = /* @__PURE__ */ new Set([
2281
2280
  14,
2282
2281
  15,
2283
2282
  16,
@@ -2297,37 +2296,37 @@ var Ie = /* @__PURE__ */ new Set([
2297
2296
  57,
2298
2297
  58
2299
2298
  ]);
2300
- function Le(e) {
2299
+ function Re(e) {
2301
2300
  let t = e.replace(/"[^"]*"/g, "").replace(/\\./g, "").replace(/\[[^\]]*\]/g, "").split(";")[0];
2302
2301
  return /[dy]/i.test(t);
2303
2302
  }
2304
- function Re(e) {
2303
+ function ze(e) {
2305
2304
  let t = /* @__PURE__ */ new Set();
2306
2305
  if (!e) return t;
2307
- let n = W(e), r = /* @__PURE__ */ new Map();
2306
+ let n = U(e), r = /* @__PURE__ */ new Map();
2308
2307
  for (let e of Array.from(n.querySelectorAll("numFmts > numFmt"))) r.set(parseInt(e.getAttribute("numFmtId") ?? "", 10), e.getAttribute("formatCode") ?? "");
2309
2308
  return Array.from(n.querySelectorAll("cellXfs > xf")).forEach((e, n) => {
2310
2309
  let i = parseInt(e.getAttribute("numFmtId") ?? "0", 10), a = r.get(i);
2311
- (a === void 0 ? Ie.has(i) : Le(a)) && t.add(n);
2310
+ (a === void 0 ? Le.has(i) : Re(a)) && t.add(n);
2312
2311
  }), t;
2313
2312
  }
2314
- function ze(e) {
2313
+ function Be(e) {
2315
2314
  if (!e) return !1;
2316
- let t = W(e).querySelector("workbookPr")?.getAttribute("date1904");
2315
+ let t = U(e).querySelector("workbookPr")?.getAttribute("date1904");
2317
2316
  return t === "1" || t === "true";
2318
2317
  }
2319
- function Be(e, t) {
2318
+ function Ve(e, t) {
2320
2319
  return new Date((t ? Date.UTC(1904, 0, 1) : Date.UTC(1899, 11, 30)) + Math.floor(e) * 864e5).toISOString().slice(0, 10);
2321
2320
  }
2322
- function Ve(e, t, n, r) {
2323
- let i = W(e).querySelectorAll("row");
2321
+ function He(e, t, n, r) {
2322
+ let i = U(e).querySelectorAll("row");
2324
2323
  if (i.length === 0) return [];
2325
2324
  let a = 0, o = /* @__PURE__ */ new Map();
2326
2325
  for (let e of i) {
2327
2326
  let i = parseInt(e.getAttribute("r") ?? "1", 10) - 1, s = /* @__PURE__ */ new Map();
2328
2327
  o.set(i, s);
2329
2328
  for (let i of e.querySelectorAll("c")) {
2330
- let e = He(i.getAttribute("r") ?? "");
2329
+ let e = Ue(i.getAttribute("r") ?? "");
2331
2330
  e > a && (a = e);
2332
2331
  let o = i.getAttribute("t") ?? "", c = i.getAttribute("s") ?? "", l = i.querySelector("v")?.textContent ?? "", u = i.querySelector("is > t")?.textContent ?? null, d;
2333
2332
  if (o === "s") d = t[parseInt(l, 10)] ?? "";
@@ -2336,7 +2335,7 @@ function Ve(e, t, n, r) {
2336
2335
  else if (l === "") d = "";
2337
2336
  else {
2338
2337
  let e = parseFloat(l);
2339
- d = c !== "" && n.has(parseInt(c, 10)) && !isNaN(e) && e >= 0 ? Be(e, r) : l;
2338
+ d = c !== "" && n.has(parseInt(c, 10)) && !isNaN(e) && e >= 0 ? Ve(e, r) : l;
2340
2339
  }
2341
2340
  s.set(e, d);
2342
2341
  }
@@ -2350,13 +2349,13 @@ function Ve(e, t, n, r) {
2350
2349
  }
2351
2350
  return c;
2352
2351
  }
2353
- function He(e) {
2352
+ function Ue(e) {
2354
2353
  let t = 0, n = 0;
2355
2354
  for (; n < e.length && e[n] >= "A" && e[n] <= "Z";) t = t * 26 + (e.charCodeAt(n) - 64), n++;
2356
2355
  return t - 1;
2357
2356
  }
2358
- async function G(e) {
2359
- let t = await Ne(e), n = Fe(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
2357
+ async function W(e) {
2358
+ let t = await Pe(e), n = Ie(t.get("xl/sharedStrings.xml")), r = t.get("xl/worksheets/sheet1.xml");
2360
2359
  if (!r) {
2361
2360
  for (let [e, n] of t) if (e.toLowerCase().includes("worksheets/sheet")) {
2362
2361
  r = n;
@@ -2364,7 +2363,7 @@ async function G(e) {
2364
2363
  }
2365
2364
  }
2366
2365
  if (!r) throw Error("XLSX: No worksheet found");
2367
- let i = Re(t.get("xl/styles.xml")), a = ze(t.get("xl/workbook.xml")), o = Ve(r, n, i, a);
2366
+ let i = ze(t.get("xl/styles.xml")), a = Be(t.get("xl/workbook.xml")), o = He(r, n, i, a);
2368
2367
  return o.length === 0 ? {
2369
2368
  headers: [],
2370
2369
  rows: []
@@ -2374,6 +2373,11 @@ async function G(e) {
2374
2373
  };
2375
2374
  }
2376
2375
  //#endregion
2376
+ //#region src/models/types.ts
2377
+ function G(e) {
2378
+ return e.align ? e.align : e.type === "number" ? "end" : e.type === "boolean" ? "center" : "start";
2379
+ }
2380
+ //#endregion
2377
2381
  //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorate.js
2378
2382
  function K(e, t, n, r) {
2379
2383
  var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
@@ -2390,7 +2394,7 @@ var q = {
2390
2394
  lt: "<",
2391
2395
  gte: "≥",
2392
2396
  lte: "≤"
2393
- }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, Ue = 200, $ = class extends n {
2397
+ }, J = 120, Y = 40, X = 20, Z = 32, Q = 5, We = 200, $ = class extends n {
2394
2398
  constructor(...e) {
2395
2399
  super(...e), this.columns = [], this._data = [], this._inUndoRedo = !1, this.clearUndoOnDataChange = !1, this.clearSelectionOnDataChange = !1, this._rowHeightFromCss = Z, this.showRowNumbers = !1, this.theme = void 0, this.maxRows = 0, this.editable = !0, this.showFilters = !1, this.showContextMenu = !1, this.frozenRows = 0, this.emptyMessage = "No data", this.noMatchingMessage = "No matching data", this.loading = !1, this.importEnabled = !1, this.selectable = !1, this.dataMode = "client", this.footerData = null, this.stylesheets = [], this._scrollTop = 0, this._scrollLeft = 0, this._viewportHeight = 0, this._viewportWidth = 0, this._colLeftOffsets = [], this._totalRowWidth = 0, this._baseStyleSheets = [], this._activeCell = null, this._editingCell = null, this._sortCriteria = [], this._selection = new j(), this._editing = new se(), this._rowSelection = new M(), this._undo = new N(), this._filters = [], this._filteredIndices = [], this._sortedIndices = [], this._openFilterKey = null, this._rowSelectionVersion = 0, this._lastCheckboxRowIndex = null, this._checkboxShiftPending = !1, this._autocompleteState = null, this._headerMenu = null, this._bodyContextMenu = null, this._commentPopup = null, this._viewDirty = !0, this._isDragging = !1, this._wasDrag = !1, this._resizing = null, this._resizeCleanup = null, this._wasHeaderDrag = !1, this._wasRowDrag = !1, this._colDrag = null, this._colDragIndicatorLeft = null, this._fillDrag = null, this._rowDrag = null, this._rowDragIndicatorY = null, this._findState = null, this._columnWidths = /* @__PURE__ */ new Map(), this._hostResizeObserver = null, this._comments = /* @__PURE__ */ new Map(), this._isDragOver = !1, this._warnedUnconstrained = !1, this._onCommentPopupOutsideClick = () => {
2396
2400
  this._commitCommentPopup();
@@ -2757,12 +2761,12 @@ var q = {
2757
2761
  if (!t) return "";
2758
2762
  let n = this.visibleColumns.slice(t.startCol, t.endCol + 1), r = [];
2759
2763
  for (let e = t.startRow; e <= t.endRow; e++) r.push(this.data[this._toDataIndex(e)]);
2760
- return V(r, n, e);
2764
+ return B(r, n, e);
2761
2765
  }
2762
- return V(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2766
+ return B(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
2763
2767
  }
2764
2768
  exportToFile(e, t) {
2765
- we(this.exportToString(e), t ?? `export${Oe(e)}`, De(e));
2769
+ Te(this.exportToString(e), t ?? `export${ke(e)}`, Oe(e));
2766
2770
  }
2767
2771
  setComment(e, t, n) {
2768
2772
  let r = this.getComment(e, t);
@@ -2819,7 +2823,7 @@ var q = {
2819
2823
  async importFromFile(e) {
2820
2824
  let t = e.name.toLowerCase();
2821
2825
  if (t.endsWith(".xlsx")) {
2822
- let t = await G(await e.arrayBuffer());
2826
+ let t = await W(await e.arrayBuffer());
2823
2827
  this._applyImportedSheet(t);
2824
2828
  } else if (t.endsWith(".csv") || t.endsWith(".tsv")) {
2825
2829
  let t = P(await e.text());
@@ -2878,12 +2882,12 @@ var q = {
2878
2882
  _buildHeaderColumnMap(e) {
2879
2883
  let t = /* @__PURE__ */ new Map();
2880
2884
  for (let n of e) {
2881
- let e = this.columns.find((e) => e.header === n);
2885
+ let e = this.columns.find((e) => e.label === n);
2882
2886
  if (e) {
2883
2887
  t.set(n, e.key);
2884
2888
  continue;
2885
2889
  }
2886
- let r = this.columns.find((e) => e.header.toLowerCase() === n.toLowerCase());
2890
+ let r = this.columns.find((e) => e.label.toLowerCase() === n.toLowerCase());
2887
2891
  r && t.set(n, r.key);
2888
2892
  }
2889
2893
  return t;
@@ -3042,7 +3046,7 @@ var q = {
3042
3046
  e !== this._viewportHeight && (this._viewportHeight = e), t !== this._viewportWidth && (this._viewportWidth = t), this._warnIfUnconstrained();
3043
3047
  }
3044
3048
  _warnIfUnconstrained() {
3045
- this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < Ue || this.scrollHeight > this.clientHeight + 1 || (this._warnedUnconstrained = !0, console.warn(`[@iyulab/flex-table] ${this._visibleRowCount} rows but the host has no height constraint — it grew to fit every row, so virtual scrolling is off and all rows are rendered. Give the host a height (e.g. height: 400px, or flex: 1 1 auto with min-height: 0 inside a sized parent) so it becomes the scroll container.`));
3049
+ this._warnedUnconstrained || process.env.NODE_ENV === "production" || this._visibleRowCount < We || this.scrollHeight > this.clientHeight + 1 || (this._warnedUnconstrained = !0, console.warn(`[@iyulab/flex-table] ${this._visibleRowCount} rows but the host has no height constraint — it grew to fit every row, so virtual scrolling is off and all rows are rendered. Give the host a height (e.g. height: 400px, or flex: 1 1 auto with min-height: 0 inside a sized parent) so it becomes the scroll container.`));
3046
3050
  }
3047
3051
  _onScroll() {
3048
3052
  this._scrollTop = this.scrollTop, this._scrollLeft = this.scrollLeft;
@@ -3686,40 +3690,40 @@ var q = {
3686
3690
  return Math.min(n, i);
3687
3691
  }
3688
3692
  _renderHeaderCell(e, t) {
3689
- let n = e.sortable !== !1, r = this._sortCriteria.find((t) => t.key === e.key), o = this._sortCriteria.length > 1 ? this._sortCriteria.findIndex((t) => t.key === e.key) : -1, s = this._filters.some((t) => t.key === e.key), c = e.pinned === "left", l = e.pinned === "right", u = [
3693
+ let n = e.sortable !== !1, r = this._sortCriteria.find((t) => t.key === e.key), o = this._sortCriteria.length > 1 ? this._sortCriteria.findIndex((t) => t.key === e.key) : -1, s = this._filters.some((t) => t.key === e.key), c = e.pinned === "left", l = e.pinned === "right", u = c || l, d = e.headerAlign ?? G(e), f = [
3690
3694
  "ft-header-cell",
3691
3695
  n ? "ft-sortable" : "",
3692
- c || l ? "ft-pinned" : "",
3693
- e.headerAlign === "center" ? "ft-header-align-center" : "",
3694
- e.headerAlign === "end" ? "ft-header-align-end" : ""
3695
- ].filter(Boolean).join(" "), d = n ? r ? r.direction === "asc" ? "ascending" : "descending" : "none" : void 0, f = this._getColWidth(e), p = this.headerHeight, m = this._colLeftOffsets[t] ?? 0, h;
3696
- h = c ? `position: absolute; top: 0; left: ${this._scrollLeft + this._getPinnedLeft(t)}px; width: ${f}px; height: ${p}px; z-index: 4;` : l ? `position: absolute; top: 0; left: ${this._getPinnedRightLeft(t)}px; width: ${f}px; height: ${p}px; z-index: 4;` : `left: ${m}px; width: ${f}px; height: ${p}px;`;
3697
- let g = this._colDrag?.active && this._colDrag.colIndex === t, _ = [...u.split(" "), g ? "ft-col-dragging" : ""].filter(Boolean).join(" "), v = this.columns, y = v.findIndex((t) => t.key === e.key), b = [];
3698
- if (y > 0) for (let e = y - 1; e >= 0 && v[e].hidden; e--) b.push(v[e]);
3699
- let x = b.length > 0;
3696
+ u ? "ft-pinned" : "",
3697
+ d === "center" ? "ft-header-align-center" : "",
3698
+ d === "end" ? "ft-header-align-end" : ""
3699
+ ].filter(Boolean).join(" "), p = n ? r ? r.direction === "asc" ? "ascending" : "descending" : "none" : void 0, m = this._getColWidth(e), h = this.headerHeight, g = this._colLeftOffsets[t] ?? 0, _;
3700
+ _ = c ? `position: absolute; top: 0; left: ${this._scrollLeft + this._getPinnedLeft(t)}px; width: ${m}px; height: ${h}px; z-index: 4;` : l ? `position: absolute; top: 0; left: ${this._getPinnedRightLeft(t)}px; width: ${m}px; height: ${h}px; z-index: 4;` : `left: ${g}px; width: ${m}px; height: ${h}px;`;
3701
+ let v = this._colDrag?.active && this._colDrag.colIndex === t, y = [...f.split(" "), v ? "ft-col-dragging" : ""].filter(Boolean).join(" "), b = this.columns, x = b.findIndex((t) => t.key === e.key), S = [];
3702
+ if (x > 0) for (let e = x - 1; e >= 0 && b[e].hidden; e--) S.push(b[e]);
3703
+ let C = S.length > 0;
3700
3704
  return i`
3701
- <div class=${_}
3705
+ <div class=${y}
3702
3706
  role="columnheader"
3703
3707
  data-col-index=${t}
3704
- style=${h}
3705
- aria-sort=${d ?? a}
3708
+ style=${_}
3709
+ aria-sort=${p ?? a}
3706
3710
  @contextmenu=${(t) => this._onHeaderContextMenu(t, e)}
3707
3711
  @mousedown=${(n) => this._onHeaderMouseDown(n, e, t)}
3708
3712
  @click=${n ? (t) => this._onHeaderClick(t, e) : void 0}>
3709
- ${x ? i`
3713
+ ${C ? i`
3710
3714
  <button class="ft-hidden-col-indicator"
3711
3715
  title=${A("showHiddenColumns")}
3712
3716
  @click=${(t) => {
3713
3717
  t.stopPropagation(), this._showHiddenBefore(e);
3714
3718
  }}>&#x276F;</button>
3715
3719
  ` : ""}
3716
- <span>${e.header}</span>
3720
+ <span>${e.label}</span>
3717
3721
  ${r ? i`<span class="ft-sort-indicator">${r.direction === "asc" ? "▲" : "▼"}</span>` : ""}
3718
3722
  ${o >= 0 ? i`<span class="ft-sort-order">${o + 1}</span>` : ""}
3719
3723
  <button class="ft-column-menu-btn ${s ? "ft-filter-active" : ""}"
3720
3724
  type="button"
3721
3725
  title=${A("columnMenu")}
3722
- aria-label=${A("columnMenuFor", { header: e.header })}
3726
+ aria-label=${A("columnMenuFor", { header: e.label })}
3723
3727
  aria-haspopup="menu"
3724
3728
  aria-expanded=${this._headerMenu?.key === e.key ? "true" : "false"}
3725
3729
  @mousedown=${(e) => e.stopPropagation()}
@@ -3752,7 +3756,7 @@ var q = {
3752
3756
  }, this.dispatchEvent(new CustomEvent("header-context-menu", {
3753
3757
  detail: {
3754
3758
  key: t.key,
3755
- header: t.header,
3759
+ label: t.label,
3756
3760
  x: e.clientX,
3757
3761
  y: e.clientY
3758
3762
  },
@@ -3838,8 +3842,8 @@ var q = {
3838
3842
  }}>${t}</button>
3839
3843
  `;
3840
3844
  return i`
3841
- <div class="ft-header-menu" role="menu" aria-label=${A("columnMenuRegion", { header: o.header })}
3842
- style="position: fixed; left: ${t}px; top: ${n}px; z-index: 200;"
3845
+ <div class="ft-header-menu" role="menu" aria-label=${A("columnMenuRegion", { header: o.label })}
3846
+ style="position: fixed; left: ${t}px; top: ${n}px; z-index: var(--u-layer-floating, 1000);"
3843
3847
  @mousedown=${(e) => e.stopPropagation()}
3844
3848
  @keydown=${(e) => this._onHeaderMenuKeydown(e)}>
3845
3849
  ${o.sortable === !1 ? a : i`
@@ -3853,7 +3857,7 @@ var q = {
3853
3857
  <div class="ft-header-menu-separator" role="separator"></div>
3854
3858
  ` : a}
3855
3859
  ${c("hide", A("hideColumn"), () => this._setColumnHidden(e, !0))}
3856
- ${r.map((e) => c("show", A("showColumn", { header: e.header }), () => this._setColumnHidden(e.key, !1)))}
3860
+ ${r.map((e) => c("show", A("showColumn", { header: e.label }), () => this._setColumnHidden(e.key, !1)))}
3857
3861
  <div class="ft-header-menu-separator" role="separator"></div>
3858
3862
  ${c("autofit", A("autoFitWidth"), () => this._autoFitColumn(e))}
3859
3863
  ${c("wider", A("wider"), () => this._resizeColumnBy(e, X), !0)}
@@ -3876,7 +3880,7 @@ var q = {
3876
3880
  `, f = i`<div class="ft-context-menu-separator" role="separator"></div>`;
3877
3881
  return i`
3878
3882
  <div class="ft-body-context-menu" role="menu" aria-label=${A("cellActions")}
3879
- style="position: fixed; left: ${n}px; top: ${r}px; z-index: 200;"
3883
+ style="position: fixed; left: ${n}px; top: ${r}px; z-index: var(--u-layer-floating, 1000);"
3880
3884
  @mousedown=${(e) => e.stopPropagation()}
3881
3885
  @keydown=${(e) => this._onMenuKeydown(e, ".ft-body-context-menu", l)}>
3882
3886
  ${d(A("copy"), () => this._handleCopy(!1))}
@@ -3922,7 +3926,7 @@ var q = {
3922
3926
  let { x: e, y: t } = this._commentPopup, n = e + 240 > window.innerWidth ? e - 240 : e, r = t + 150 > window.innerHeight ? t - 150 : t;
3923
3927
  return i`
3924
3928
  <div class="ft-comment-popup"
3925
- style="position: fixed; left: ${n}px; top: ${r}px; z-index: 201;"
3929
+ style="position: fixed; left: ${n}px; top: ${r}px; z-index: calc(var(--u-layer-floating, 1000) + 1);"
3926
3930
  @mousedown=${(e) => e.stopPropagation()}>
3927
3931
  <textarea class="ft-comment-popup-textarea"
3928
3932
  rows="4"
@@ -4316,10 +4320,10 @@ var q = {
4316
4320
  }
4317
4321
  _startColumnGhost(e) {
4318
4322
  let t = document.createElement("div");
4319
- t.textContent = this._colDrag.col.header ?? this._colDrag.col.key, t.style.cssText = [
4323
+ t.textContent = this._colDrag.col.label ?? this._colDrag.col.key, t.style.cssText = [
4320
4324
  "position:fixed",
4321
4325
  "pointer-events:none",
4322
- "z-index:9999",
4326
+ "z-index:var(--u-layer-overlay, 9999)",
4323
4327
  "opacity:0.85",
4324
4328
  `background:${getComputedStyle(this).getPropertyValue("--ft-header-bg") || "#f0f0f0"}`,
4325
4329
  `border:2px solid ${getComputedStyle(this).getPropertyValue("--ft-active-color") || "#3b82f6"}`,
@@ -4486,7 +4490,7 @@ var q = {
4486
4490
  a.textContent = i, a.style.cssText = [
4487
4491
  "position:fixed",
4488
4492
  "pointer-events:none",
4489
- "z-index:9999",
4493
+ "z-index:var(--u-layer-overlay, 9999)",
4490
4494
  "opacity:0.85",
4491
4495
  "background:#e8f0fe",
4492
4496
  "border:2px solid #3b82f6",
@@ -4844,6 +4848,7 @@ var q = {
4844
4848
  let _ = o || c, v = this._isCellInvalid(n, r), y = (this._findState?.results ?? []).findIndex((e) => e.row === n && e.col === r), b = y >= 0, x = b && y === this._findState.currentIndex, S = [
4845
4849
  "ft-cell",
4846
4850
  `ft-type-${t.type ?? "text"}`,
4851
+ `ft-align-${G(t)}`,
4847
4852
  o ? "ft-active" : "",
4848
4853
  c ? "ft-selected" : "",
4849
4854
  d ? "ft-pinned" : "",
@@ -5002,4 +5007,4 @@ K([s({ type: Array })], $.prototype, "columns", void 0), K([s({
5002
5007
  attribute: "max-undo-size"
5003
5008
  })], $.prototype, "maxUndoSize", null), K([c()], $.prototype, "_scrollTop", void 0), K([c()], $.prototype, "_scrollLeft", void 0), K([c()], $.prototype, "_viewportHeight", void 0), K([c()], $.prototype, "_viewportWidth", void 0), K([c()], $.prototype, "_activeCell", void 0), K([c()], $.prototype, "_editingCell", void 0), K([c()], $.prototype, "_sortCriteria", void 0), K([c()], $.prototype, "_openFilterKey", void 0), K([c()], $.prototype, "_rowSelectionVersion", void 0), K([c()], $.prototype, "_autocompleteState", void 0), K([c()], $.prototype, "_headerMenu", void 0), K([c()], $.prototype, "_bodyContextMenu", void 0), K([c()], $.prototype, "_commentPopup", void 0), K([c()], $.prototype, "_isDragOver", void 0), $ = K([o("flex-table")], $);
5004
5009
  //#endregion
5005
- export { k as a, M as i, V as n, O as o, N as r, $ as t };
5010
+ export { M as a, N as i, G as n, k as o, B as r, O as s, $ as t };
@@ -88,7 +88,7 @@ export declare class FlexTable extends LitElement {
88
88
  /**
89
89
  * Constructable stylesheets adopted into this element's shadow root, in addition to the
90
90
  * grid's own styles. Cell renderers run inside the shadow root, so external document
91
- * stylesheets (class-based utilities, design-system CSS) don't reach elements a `renderer`
91
+ * stylesheets (class-based utilities, design-system CSS) don't reach elements a `render` function
92
92
  * returns — this is the escape hatch for that. Not an attribute (a `CSSStyleSheet` can't be
93
93
  * serialized to one) — set it as a property.
94
94
  */
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "./flex-table-JGaGcJTl.js";
2
- export { a as FlexTable, t as RowSelectionState, i as UndoStack, n as exportData, e as flexTableLocale, r as renderCell };
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./flex-table-CDEu8YQE.js";
2
+ export { o as FlexTable, e as RowSelectionState, t as UndoStack, n as effectiveAlign, i as exportData, r as flexTableLocale, a as renderCell };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { FlexTable } from './flex-table.js';
2
- export type { ColumnDefinition, ColumnType, DataRow, CellRenderer, CellEditor, CellValidator, SelectionMode, DataMode, CellStyle, ConditionalRule } from './models/types.js';
2
+ export type { ColumnDefinition, ColumnType, ColumnAlign, DataRow, CellRenderer, CellEditor, CellValidator, SelectionMode, DataMode, CellStyle, ConditionalRule } from './models/types.js';
3
+ export { effectiveAlign } from './models/types.js';
3
4
  export type { CellPosition, CellRange } from './core/selection.js';
4
5
  export type { SortCriteria, SortDirection } from './core/sorting.js';
5
6
  export type { ColumnFilter, FilterPredicate, FilterErrorCallback } from './core/filtering.js';
@@ -4,6 +4,13 @@ import type { TemplateResult } from 'lit';
4
4
  * Any string is accepted as a type — unknown types fall back to 'text' behavior.
5
5
  */
6
6
  export type ColumnType = 'text' | 'number' | 'boolean' | 'date' | 'datetime' | 'select' | (string & {});
7
+ /** Logical horizontal alignment — `start`/`end` follow the writing direction. */
8
+ export type ColumnAlign = 'start' | 'center' | 'end';
9
+ /** The alignment a column's cells render with: `align`, or the default derived from `type`. */
10
+ export declare function effectiveAlign(col: {
11
+ align?: ColumnAlign;
12
+ type?: ColumnType;
13
+ }): ColumnAlign;
7
14
  /** Option item for select columns */
8
15
  export interface SelectOption {
9
16
  label: string;
@@ -47,8 +54,8 @@ export type DataMode = 'client' | 'server';
47
54
  export interface ColumnDefinition<T = DataRow> {
48
55
  /** Unique key matching data property names */
49
56
  key: string;
50
- /** Display header text */
51
- header: string;
57
+ /** Column header text */
58
+ label: string;
52
59
  /** Data type for rendering/editing (default: 'text'). Unknown types fall back to 'text'. */
53
60
  type?: ColumnType;
54
61
  /** Column width in pixels (default: auto) */
@@ -60,14 +67,19 @@ export interface ColumnDefinition<T = DataRow> {
60
67
  /** Whether the column is sortable (default: true) */
61
68
  sortable?: boolean;
62
69
  /**
63
- * Horizontal alignment of the header label (default: 'start').
64
- * Independent of cell content alignment — a consumer centering cell content
65
- * via a custom `renderer` (e.g. an icon-only action column) sets this to
66
- * 'center' so the header visually matches.
70
+ * Horizontal alignment of cell content. Logical values, so right-to-left locales mirror.
71
+ * Default: derived from `type` — 'end' for 'number', 'center' for 'boolean', 'start' otherwise.
72
+ */
73
+ align?: ColumnAlign;
74
+ /**
75
+ * Horizontal alignment of the header label.
76
+ * Default: the column's effective cell alignment (`align`, or the `type` default above), so a
77
+ * right-aligned number column gets a right-aligned header. Set it only when the header should
78
+ * differ from its values.
67
79
  */
68
- headerAlign?: 'start' | 'center' | 'end';
80
+ headerAlign?: ColumnAlign;
69
81
  /** Custom cell renderer — overrides built-in type rendering */
70
- renderer?: CellRenderer<T>;
82
+ render?: CellRenderer<T>;
71
83
  /** Whether the column is editable (default: true — follows global editable setting) */
72
84
  editable?: boolean;
73
85
  /** Custom cell editor — overrides built-in type editing */
@@ -1,2 +1,2 @@
1
- export { useODataSource, buildSearchExpression, parseOrderBy } from './use-odata-source.js';
2
- export type { UseODataSourceOptions, UseODataSourceResult } from './types.js';
1
+ export { buildSearchExpression, parseOrderBy, buildODataQuery } from './query.js';
2
+ export type { ODataQueryState } from './query.js';
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, t as n } from "../use-odata-source-BiZrIEVV.js";
2
- export { n as buildSearchExpression, t as parseOrderBy, e as useODataSource };
1
+ import { n as e, r as t, t as n } from "../query-Dw4iO0ir.js";
2
+ export { n as buildODataQuery, e as buildSearchExpression, t as parseOrderBy };