@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.
- package/CHANGELOG.md +39 -0
- package/README.md +43 -28
- package/dist/array/index.d.ts +2 -3
- package/dist/array/index.js +2 -56
- package/dist/array/use-array-source.d.ts +1 -24
- package/dist/array/view.d.ts +24 -0
- package/dist/{flex-table-JGaGcJTl.js → flex-table-CDEu8YQE.js} +106 -101
- package/dist/flex-table.d.ts +1 -1
- package/dist/flex-table.js +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/models/types.d.ts +20 -8
- package/dist/odata/index.d.ts +2 -2
- package/dist/odata/index.js +2 -2
- package/dist/odata/query.d.ts +72 -0
- package/dist/odata/use-odata-source.d.ts +0 -51
- package/dist/query-Dw4iO0ir.js +37 -0
- package/dist/react.d.ts +8 -4
- package/dist/react.js +142 -6
- package/dist/view-DiLr-TdY.js +13 -0
- package/package.json +1 -1
- package/dist/use-odata-source-BiZrIEVV.js +0 -118
|
@@ -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
|
-
|
|
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.
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
2117
2116
|
}
|
|
2118
|
-
function
|
|
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
|
|
2124
|
-
return
|
|
2122
|
+
function z(e, t) {
|
|
2123
|
+
return me(t) + (e + 1);
|
|
2125
2124
|
}
|
|
2126
|
-
function
|
|
2125
|
+
function he(e) {
|
|
2127
2126
|
let t = Date.UTC(1899, 11, 30);
|
|
2128
2127
|
return (e.getTime() - t) / 864e5;
|
|
2129
2128
|
}
|
|
2130
|
-
var
|
|
2131
|
-
function
|
|
2132
|
-
let n = [], r = t.map((e, t) => `<c r="${
|
|
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 =
|
|
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>${
|
|
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
|
|
2147
|
-
let n =
|
|
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(
|
|
2150
|
+
data: I.encode(ge)
|
|
2152
2151
|
},
|
|
2153
2152
|
{
|
|
2154
2153
|
name: "_rels/.rels",
|
|
2155
|
-
data: I.encode(
|
|
2154
|
+
data: I.encode(_e)
|
|
2156
2155
|
},
|
|
2157
2156
|
{
|
|
2158
2157
|
name: "xl/workbook.xml",
|
|
2159
|
-
data: I.encode(
|
|
2158
|
+
data: I.encode(ve)
|
|
2160
2159
|
},
|
|
2161
2160
|
{
|
|
2162
2161
|
name: "xl/_rels/workbook.xml.rels",
|
|
2163
|
-
data: I.encode(
|
|
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(
|
|
2170
|
+
data: I.encode(be)
|
|
2172
2171
|
}
|
|
2173
2172
|
]);
|
|
2174
2173
|
}
|
|
2175
2174
|
//#endregion
|
|
2176
2175
|
//#region src/export/export.ts
|
|
2177
|
-
function
|
|
2176
|
+
function B(e, t, n) {
|
|
2178
2177
|
switch (n) {
|
|
2179
|
-
case "csv": return
|
|
2180
|
-
case "tsv": return
|
|
2181
|
-
case "json": return
|
|
2182
|
-
case "xlsx": return
|
|
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
|
|
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
|
|
2189
|
-
return [t.map((e) =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
|
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
|
|
2233
|
-
let t =
|
|
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
|
|
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
|
|
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
|
|
2261
|
+
if (t.compressionMethod === 8) return Me(o);
|
|
2263
2262
|
throw Error(`XLSX: Unsupported compression method ${t.compressionMethod}`);
|
|
2264
2263
|
}
|
|
2265
|
-
async function
|
|
2266
|
-
let t = new DataView(e), n =
|
|
2267
|
-
for (let e of n) e.compressedSize === 0 && e.name.endsWith("/") || r.set(e.name, await
|
|
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
|
|
2271
|
-
function
|
|
2272
|
-
let t =
|
|
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
|
|
2274
|
+
function Ie(e) {
|
|
2276
2275
|
if (!e) return [];
|
|
2277
|
-
let t =
|
|
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
|
|
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
|
|
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
|
|
2303
|
+
function ze(e) {
|
|
2305
2304
|
let t = /* @__PURE__ */ new Set();
|
|
2306
2305
|
if (!e) return t;
|
|
2307
|
-
let n =
|
|
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 ?
|
|
2310
|
+
(a === void 0 ? Le.has(i) : Re(a)) && t.add(n);
|
|
2312
2311
|
}), t;
|
|
2313
2312
|
}
|
|
2314
|
-
function
|
|
2313
|
+
function Be(e) {
|
|
2315
2314
|
if (!e) return !1;
|
|
2316
|
-
let t =
|
|
2315
|
+
let t = U(e).querySelector("workbookPr")?.getAttribute("date1904");
|
|
2317
2316
|
return t === "1" || t === "true";
|
|
2318
2317
|
}
|
|
2319
|
-
function
|
|
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
|
|
2323
|
-
let i =
|
|
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 =
|
|
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 ?
|
|
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
|
|
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
|
|
2359
|
-
let t = await
|
|
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 =
|
|
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,
|
|
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
|
|
2764
|
+
return B(r, n, e);
|
|
2761
2765
|
}
|
|
2762
|
-
return
|
|
2766
|
+
return B(this._sortedIndices.map((e) => this.data[e]), this.visibleColumns, e);
|
|
2763
2767
|
}
|
|
2764
2768
|
exportToFile(e, t) {
|
|
2765
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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 <
|
|
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
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
].filter(Boolean).join(" "),
|
|
3696
|
-
|
|
3697
|
-
let
|
|
3698
|
-
if (
|
|
3699
|
-
let
|
|
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=${
|
|
3705
|
-
aria-sort=${
|
|
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
|
-
${
|
|
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
|
}}>❯</button>
|
|
3715
3719
|
` : ""}
|
|
3716
|
-
<span>${e.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
3842
|
-
style="position: fixed; left: ${t}px; top: ${n}px; z-index:
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
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 {
|
|
5010
|
+
export { M as a, N as i, G as n, k as o, B as r, O as s, $ as t };
|
package/dist/flex-table.d.ts
CHANGED
|
@@ -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 `
|
|
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
|
*/
|
package/dist/flex-table.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i,
|
|
2
|
-
export {
|
|
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';
|
package/dist/models/types.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
51
|
-
|
|
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
|
|
64
|
-
*
|
|
65
|
-
|
|
66
|
-
|
|
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?:
|
|
80
|
+
headerAlign?: ColumnAlign;
|
|
69
81
|
/** Custom cell renderer — overrides built-in type rendering */
|
|
70
|
-
|
|
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 */
|
package/dist/odata/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type {
|
|
1
|
+
export { buildSearchExpression, parseOrderBy, buildODataQuery } from './query.js';
|
|
2
|
+
export type { ODataQueryState } from './query.js';
|
package/dist/odata/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { n as
|
|
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 };
|