@atscript/ui-table 0.1.140 → 0.1.142
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/dist/index.cjs +259 -26
- package/dist/index.d.cts +178 -17
- package/dist/index.d.mts +178 -17
- package/dist/index.mjs +255 -27
- package/package.json +8 -8
package/dist/index.mjs
CHANGED
|
@@ -45,6 +45,19 @@ function filledFilterCount(filters) {
|
|
|
45
45
|
for (const path in filters) if (filters[path].some(isFilled)) count++;
|
|
46
46
|
return count;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* `filters` without the fields that have no filled condition — the shape
|
|
50
|
+
* table state holds (a field with nothing filled has no entry). Returns
|
|
51
|
+
* `filters` itself when every field has one; never mutates it.
|
|
52
|
+
*
|
|
53
|
+
* @since 0.1.142
|
|
54
|
+
*/
|
|
55
|
+
function compactFieldFilters(filters) {
|
|
56
|
+
if (filledFilterCount(filters) === Object.keys(filters).length) return filters;
|
|
57
|
+
const out = {};
|
|
58
|
+
for (const path in filters) if (filters[path].some(isFilled)) out[path] = filters[path];
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
48
61
|
/** Summarize a field's conditions into a human-readable token label. */
|
|
49
62
|
function filterTokenLabel(path, conditions, columnLabel) {
|
|
50
63
|
const filled = conditions.filter(isFilled);
|
|
@@ -527,6 +540,7 @@ function fieldsOf(expr, out) {
|
|
|
527
540
|
else if (!out.includes(key)) out.push(key);
|
|
528
541
|
return out;
|
|
529
542
|
}
|
|
543
|
+
/** @internal Module-shared with the URL parser; not a package export. */
|
|
530
544
|
function unsupported(reason, expr) {
|
|
531
545
|
const fields = fieldsOf(expr, []);
|
|
532
546
|
return {
|
|
@@ -752,10 +766,10 @@ function warnUnsupported(issue) {
|
|
|
752
766
|
/**
|
|
753
767
|
* Split a Uniquery `FilterExpr` into what the table's field-filter model
|
|
754
768
|
* holds exactly (`filters`), what it cannot hold but carries as residual
|
|
755
|
-
* conditions (`residual`, with `carry`),
|
|
756
|
-
* (`
|
|
757
|
-
* `
|
|
758
|
-
* `
|
|
769
|
+
* conditions (`residual`, with `carry`), what it leaves out (`unsupported`)
|
|
770
|
+
* and what names a field outside `knownFields` (`unknown`). Nothing is
|
|
771
|
+
* approximated: `filters AND residual` selects `expr` minus the
|
|
772
|
+
* `unsupported` and `unknown` pieces.
|
|
759
773
|
*
|
|
760
774
|
* Never throws, never warns — the caller decides how to report.
|
|
761
775
|
*
|
|
@@ -766,7 +780,8 @@ function decomposeUniqueryFilter(expr, opts = {}) {
|
|
|
766
780
|
const result = {
|
|
767
781
|
filters,
|
|
768
782
|
residual: [],
|
|
769
|
-
unsupported: []
|
|
783
|
+
unsupported: [],
|
|
784
|
+
unknown: []
|
|
770
785
|
};
|
|
771
786
|
if (!expr) return result;
|
|
772
787
|
const knownFields = opts.knownFields;
|
|
@@ -787,8 +802,12 @@ function decomposeUniqueryFilter(expr, opts = {}) {
|
|
|
787
802
|
}];
|
|
788
803
|
}
|
|
789
804
|
const positives = /* @__PURE__ */ new Map();
|
|
805
|
+
const unknown = /* @__PURE__ */ new Map();
|
|
790
806
|
for (const term of out.terms) {
|
|
791
|
-
if (!isKnown(term.field))
|
|
807
|
+
if (!isKnown(term.field)) {
|
|
808
|
+
unknown.set(term.expr, [term.field]);
|
|
809
|
+
continue;
|
|
810
|
+
}
|
|
792
811
|
const list = filters[term.field] ??= [];
|
|
793
812
|
if (isNegative(term)) {
|
|
794
813
|
list.push(...term.conds);
|
|
@@ -818,11 +837,16 @@ function decomposeUniqueryFilter(expr, opts = {}) {
|
|
|
818
837
|
}
|
|
819
838
|
for (const issue of out.issues) {
|
|
820
839
|
const fields = issue.fields;
|
|
821
|
-
|
|
822
|
-
if (
|
|
840
|
+
const outside = fields.filter((f) => !isKnown(f));
|
|
841
|
+
if (outside.length > 0) unknown.set(issue.expr, outside);
|
|
842
|
+
else if (opts.carry && fields.length > 0) carried.push(issue.expr);
|
|
823
843
|
else result.unsupported.push(issue);
|
|
824
844
|
}
|
|
825
845
|
result.residual = normalizeResidualFilters(carried);
|
|
846
|
+
result.unknown = [...unknown].map(([expr, fields]) => ({
|
|
847
|
+
expr,
|
|
848
|
+
fields
|
|
849
|
+
}));
|
|
826
850
|
return result;
|
|
827
851
|
}
|
|
828
852
|
/**
|
|
@@ -873,9 +897,10 @@ function normalizeResidualFilters(exprs) {
|
|
|
873
897
|
* to a dev-mode `console.warn` when no handler is given. To keep those
|
|
874
898
|
* pieces instead, use {@link decomposeUniqueryFilter} with `carry`.
|
|
875
899
|
*
|
|
876
|
-
*
|
|
877
|
-
* silently: they are not this table's (a host page flag, a
|
|
878
|
-
*
|
|
900
|
+
* Pieces that name a field outside `knownFields` (when provided) are ignored
|
|
901
|
+
* silently: they are not this table's (a host page flag, a hidden or stale
|
|
902
|
+
* column). Since 0.1.141 that includes a piece mixing known and unknown
|
|
903
|
+
* fields — {@link decomposeUniqueryFilter} lists them as `unknown`.
|
|
879
904
|
*
|
|
880
905
|
* Returns `{}` for an empty/missing expression. Never throws.
|
|
881
906
|
*/
|
|
@@ -1145,6 +1170,176 @@ function resolveSystemPresets(input) {
|
|
|
1145
1170
|
}, ...named];
|
|
1146
1171
|
}
|
|
1147
1172
|
//#endregion
|
|
1173
|
+
//#region src/presets/prune-preset-snapshot.ts
|
|
1174
|
+
/** `[kept, dropped]` in one pass. */
|
|
1175
|
+
function partition(list, keep) {
|
|
1176
|
+
const kept = [];
|
|
1177
|
+
const dropped = [];
|
|
1178
|
+
for (const x of list) (keep(x) ? kept : dropped).push(x);
|
|
1179
|
+
return [kept, dropped];
|
|
1180
|
+
}
|
|
1181
|
+
/** The columns aspect, an empty width map spelled by omission — the way capture writes it. */
|
|
1182
|
+
function columnsAspect(columnNames, columnWidths) {
|
|
1183
|
+
return columnWidths && Object.keys(columnWidths).length > 0 ? {
|
|
1184
|
+
columnNames,
|
|
1185
|
+
columnWidths
|
|
1186
|
+
} : { columnNames };
|
|
1187
|
+
}
|
|
1188
|
+
/**
|
|
1189
|
+
* Remove every entry of `snapshot` that names a field outside `known`, per
|
|
1190
|
+
* aspect:
|
|
1191
|
+
*
|
|
1192
|
+
* - `columns.columnNames` — unknown names go, the rest keep their order. When
|
|
1193
|
+
* none survives, it falls back to every column, never an empty grid.
|
|
1194
|
+
* - `columns.columnWidths` — unknown keys go.
|
|
1195
|
+
* - `filters` (displayed inputs) and `filterOps` — entries on a field outside
|
|
1196
|
+
* `known.server` go. A field's conditions are one AND-ed conjunct, so
|
|
1197
|
+
* dropping one only broadens the result.
|
|
1198
|
+
* - `sorters` — unknown entries go, the rest keep their priority.
|
|
1199
|
+
* - `itemsPerPage` — untouched.
|
|
1200
|
+
*
|
|
1201
|
+
* `dropped` is `null` when nothing user-visible went (a width-only drop is
|
|
1202
|
+
* hygiene). The input is never mutated.
|
|
1203
|
+
*
|
|
1204
|
+
* @since 0.1.141
|
|
1205
|
+
*/
|
|
1206
|
+
function prunePresetSnapshot(snapshot, known) {
|
|
1207
|
+
const isColumn = (p) => known.columns.has(p);
|
|
1208
|
+
const isServer = (p) => known.server.has(p);
|
|
1209
|
+
const out = { ...snapshot };
|
|
1210
|
+
const dropped = {
|
|
1211
|
+
fields: [],
|
|
1212
|
+
columns: [],
|
|
1213
|
+
filterFields: [],
|
|
1214
|
+
filters: {},
|
|
1215
|
+
residual: [],
|
|
1216
|
+
sorters: []
|
|
1217
|
+
};
|
|
1218
|
+
if (snapshot.columns) {
|
|
1219
|
+
const [names, gone] = partition(snapshot.columns.columnNames, isColumn);
|
|
1220
|
+
const [widths] = partition(Object.entries(snapshot.columns.columnWidths ?? {}), ([p]) => isColumn(p));
|
|
1221
|
+
dropped.columns = gone;
|
|
1222
|
+
out.columns = columnsAspect(names.length > 0 || gone.length === 0 ? names : [...known.columns], Object.fromEntries(widths));
|
|
1223
|
+
}
|
|
1224
|
+
if (snapshot.filters) [out.filters, dropped.filterFields] = partition(snapshot.filters, isServer);
|
|
1225
|
+
if (snapshot.filterOps) {
|
|
1226
|
+
const [kept, gone] = partition(Object.entries(snapshot.filterOps), ([p]) => isServer(p));
|
|
1227
|
+
out.filterOps = Object.fromEntries(kept);
|
|
1228
|
+
dropped.filters = Object.fromEntries(gone);
|
|
1229
|
+
}
|
|
1230
|
+
if (snapshot.sorters) [out.sorters, dropped.sorters] = partition(snapshot.sorters, (s) => isColumn(s.field));
|
|
1231
|
+
dropped.fields = [...new Set([
|
|
1232
|
+
...dropped.columns,
|
|
1233
|
+
...dropped.filterFields,
|
|
1234
|
+
...Object.keys(dropped.filters),
|
|
1235
|
+
...dropped.sorters.map((s) => s.field)
|
|
1236
|
+
])];
|
|
1237
|
+
return {
|
|
1238
|
+
snapshot: out,
|
|
1239
|
+
dropped: dropped.fields.length > 0 ? dropped : null
|
|
1240
|
+
};
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* Spell a snapshot the way table state holds it, so it compares equal to a
|
|
1244
|
+
* capture of the state it produces:
|
|
1245
|
+
*
|
|
1246
|
+
* - `columns.columnWidths` — an entry equal to its column's default width, or
|
|
1247
|
+
* on a path with no default (not a column), goes; an emptied map is
|
|
1248
|
+
* omitted. Capture writes overrides only.
|
|
1249
|
+
* - `filterOps` — a field with no filled condition goes
|
|
1250
|
+
* (`compactFieldFilters`). Table state never holds one.
|
|
1251
|
+
*
|
|
1252
|
+
* `defaultWidths` maps each column path to its default width — the `d` of
|
|
1253
|
+
* its `ColumnWidthsMap` entry. Other aspects pass through. Returns `snapshot`
|
|
1254
|
+
* itself when nothing changes; the input is never mutated.
|
|
1255
|
+
*
|
|
1256
|
+
* @since 0.1.142
|
|
1257
|
+
*/
|
|
1258
|
+
function canonicalPresetSnapshot(snapshot, defaultWidths) {
|
|
1259
|
+
let out = snapshot;
|
|
1260
|
+
const columns = snapshot.columns;
|
|
1261
|
+
if (columns?.columnWidths) {
|
|
1262
|
+
const entries = Object.entries(columns.columnWidths);
|
|
1263
|
+
const [kept] = partition(entries, ([p, w]) => {
|
|
1264
|
+
const d = defaultWidths[p];
|
|
1265
|
+
return d !== void 0 && d !== w;
|
|
1266
|
+
});
|
|
1267
|
+
if (kept.length !== entries.length || kept.length === 0) out = {
|
|
1268
|
+
...out,
|
|
1269
|
+
columns: columnsAspect(columns.columnNames, Object.fromEntries(kept))
|
|
1270
|
+
};
|
|
1271
|
+
}
|
|
1272
|
+
if (snapshot.filterOps) {
|
|
1273
|
+
const filterOps = compactFieldFilters(snapshot.filterOps);
|
|
1274
|
+
if (filterOps !== snapshot.filterOps) out = {
|
|
1275
|
+
...out,
|
|
1276
|
+
filterOps
|
|
1277
|
+
};
|
|
1278
|
+
}
|
|
1279
|
+
return out;
|
|
1280
|
+
}
|
|
1281
|
+
/**
|
|
1282
|
+
* Split residual filter conditions, in one pass, into the ones that name
|
|
1283
|
+
* only `known` fields and the ones that do not. A condition naming any
|
|
1284
|
+
* unknown field is dropped WHOLE — never pruned inside an `$or` (that would
|
|
1285
|
+
* narrow the result) or a `$not` (that would invert it). Each condition is an
|
|
1286
|
+
* AND-ed conjunct, so dropping one only broadens the result.
|
|
1287
|
+
*
|
|
1288
|
+
* `dropped` holds the conditions in `residual` and the unknown paths in
|
|
1289
|
+
* `fields`; `null` when every condition is kept.
|
|
1290
|
+
*
|
|
1291
|
+
* @since 0.1.141
|
|
1292
|
+
*/
|
|
1293
|
+
function pruneResidualFilters(exprs, known) {
|
|
1294
|
+
const kept = [];
|
|
1295
|
+
const residual = [];
|
|
1296
|
+
const fields = /* @__PURE__ */ new Set();
|
|
1297
|
+
for (const expr of exprs) {
|
|
1298
|
+
const unknown = filterExprFields(expr).filter((p) => !known.has(p));
|
|
1299
|
+
if (unknown.length === 0) {
|
|
1300
|
+
kept.push(expr);
|
|
1301
|
+
continue;
|
|
1302
|
+
}
|
|
1303
|
+
residual.push(expr);
|
|
1304
|
+
for (const p of unknown) fields.add(p);
|
|
1305
|
+
}
|
|
1306
|
+
if (residual.length === 0) return {
|
|
1307
|
+
kept,
|
|
1308
|
+
dropped: null
|
|
1309
|
+
};
|
|
1310
|
+
return {
|
|
1311
|
+
kept,
|
|
1312
|
+
dropped: {
|
|
1313
|
+
fields: [...fields],
|
|
1314
|
+
columns: [],
|
|
1315
|
+
filterFields: [],
|
|
1316
|
+
filters: {},
|
|
1317
|
+
residual,
|
|
1318
|
+
sorters: []
|
|
1319
|
+
}
|
|
1320
|
+
};
|
|
1321
|
+
}
|
|
1322
|
+
/**
|
|
1323
|
+
* Append what a prune dropped back onto a snapshot captured from (pruned)
|
|
1324
|
+
* table state, so overwriting a preset with a narrower view does not destroy
|
|
1325
|
+
* the parts the saver cannot see. Column names, filter inputs and sorters go
|
|
1326
|
+
* after the captured ones; field filters are added back. Only aspects
|
|
1327
|
+
* `captured` carries are touched; widths of hidden columns are not kept.
|
|
1328
|
+
*
|
|
1329
|
+
* @since 0.1.141
|
|
1330
|
+
*/
|
|
1331
|
+
function restoreDroppedEntries(captured, dropped) {
|
|
1332
|
+
const out = { ...captured };
|
|
1333
|
+
if (captured.columns) out.columns = columnsAspect([...captured.columns.columnNames, ...dropped.columns], captured.columns.columnWidths);
|
|
1334
|
+
if (captured.filters) out.filters = [...captured.filters, ...dropped.filterFields];
|
|
1335
|
+
if (captured.filterOps) out.filterOps = {
|
|
1336
|
+
...captured.filterOps,
|
|
1337
|
+
...dropped.filters
|
|
1338
|
+
};
|
|
1339
|
+
if (captured.sorters) out.sorters = [...captured.sorters, ...dropped.sorters];
|
|
1340
|
+
return out;
|
|
1341
|
+
}
|
|
1342
|
+
//#endregion
|
|
1148
1343
|
//#region src/presets/preset-dirty.ts
|
|
1149
1344
|
/**
|
|
1150
1345
|
* JSON-stringify with object keys sorted alphabetically at every depth so
|
|
@@ -1748,6 +1943,20 @@ const CONSUMED_CONTROLS = new Set([
|
|
|
1748
1943
|
"$skip",
|
|
1749
1944
|
URL_SNAPSHOT_KEY
|
|
1750
1945
|
]);
|
|
1946
|
+
function toSet(paths) {
|
|
1947
|
+
if (!paths) return null;
|
|
1948
|
+
return paths instanceof Set ? paths : new Set(paths);
|
|
1949
|
+
}
|
|
1950
|
+
/**
|
|
1951
|
+
* `field=value` (or `field=null`) — the one filter shape a host page flag
|
|
1952
|
+
* shares, so a bare one on an unknown field is not reported as dropped.
|
|
1953
|
+
*/
|
|
1954
|
+
function isBareEquality(expr) {
|
|
1955
|
+
const keys = Object.keys(expr);
|
|
1956
|
+
if (keys.length !== 1 || keys[0].startsWith("$")) return false;
|
|
1957
|
+
const v = expr[keys[0]];
|
|
1958
|
+
return v === null || typeof v !== "object";
|
|
1959
|
+
}
|
|
1751
1960
|
/**
|
|
1752
1961
|
* Characters that can only appear in a uniqu filter key, never in a page flag:
|
|
1753
1962
|
* comparison operators, `^` (OR), `( )` (groups) and `{ }` (`$in` lists).
|
|
@@ -1774,9 +1983,10 @@ function urlQueryConsumesKey(key) {
|
|
|
1774
1983
|
/**
|
|
1775
1984
|
* Parse a URL query string back into the table state subset.
|
|
1776
1985
|
*
|
|
1777
|
-
* Robust by design — schema drift
|
|
1778
|
-
* recipient's view:
|
|
1779
|
-
* - unknown fields (not in `knownFields`) →
|
|
1986
|
+
* Robust by design — schema drift, fields hidden from the recipient and
|
|
1987
|
+
* copy-paste errors must not break the recipient's view:
|
|
1988
|
+
* - unknown fields (not in `knownFields`) → dropped, listed in `unknown` /
|
|
1989
|
+
* `unknownSorters` (the parser does not warn — the caller decides)
|
|
1780
1990
|
* - filter pieces field filters cannot express (cross-field OR, unknown
|
|
1781
1991
|
* operator, …) → left out of `filters` and listed in `unsupported`, never
|
|
1782
1992
|
* approximated (the parser does not warn — the caller decides). Unless
|
|
@@ -1809,12 +2019,15 @@ function urlQueryStringToState(urlString, opts = {}) {
|
|
|
1809
2019
|
const sortersGate = resolveAspectGate(opts.sync?.sorters);
|
|
1810
2020
|
const searchOff = opts.sync?.search === false;
|
|
1811
2021
|
const paginationOff = opts.sync?.pagination === false;
|
|
1812
|
-
const knownSet =
|
|
2022
|
+
const knownSet = toSet(opts.knownFields);
|
|
2023
|
+
const localSet = toSet(opts.localFields);
|
|
2024
|
+
const isHidden = (f) => !!knownSet && !knownSet.has(f) && !localSet?.has(f);
|
|
1813
2025
|
let filterKnown;
|
|
1814
2026
|
if (filtersGate === "all") filterKnown = knownSet ?? void 0;
|
|
1815
2027
|
else if (filtersGate !== "none") if (knownSet) {
|
|
1816
|
-
|
|
1817
|
-
for (const path of filtersGate) if (knownSet.has(path))
|
|
2028
|
+
const owned = /* @__PURE__ */ new Set();
|
|
2029
|
+
for (const path of filtersGate) if (knownSet.has(path)) owned.add(path);
|
|
2030
|
+
filterKnown = owned;
|
|
1818
2031
|
} else filterKnown = filtersGate;
|
|
1819
2032
|
const decomposed = filtersGate === "none" ? null : decomposeUniqueryFilter(parsed.filter, {
|
|
1820
2033
|
knownFields: filterKnown,
|
|
@@ -1822,20 +2035,19 @@ function urlQueryStringToState(urlString, opts = {}) {
|
|
|
1822
2035
|
});
|
|
1823
2036
|
const filters = decomposed?.filters ?? {};
|
|
1824
2037
|
const sorters = [];
|
|
2038
|
+
const unknownSorters = [];
|
|
1825
2039
|
if (sortersGate !== "none") {
|
|
1826
2040
|
const $sort = parsed.controls?.$sort;
|
|
1827
2041
|
if ($sort && typeof $sort === "object") for (const field in $sort) {
|
|
1828
|
-
if (knownSet && !knownSet.has(field)) continue;
|
|
1829
2042
|
if (!gateOwns(sortersGate, field)) continue;
|
|
1830
2043
|
const dir = $sort[field];
|
|
1831
|
-
if (dir
|
|
2044
|
+
if (dir !== 1 && dir !== -1) continue;
|
|
2045
|
+
const sorter = {
|
|
1832
2046
|
field,
|
|
1833
|
-
direction: "asc"
|
|
1834
|
-
}
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
direction: "desc"
|
|
1838
|
-
});
|
|
2047
|
+
direction: dir === 1 ? "asc" : "desc"
|
|
2048
|
+
};
|
|
2049
|
+
if (!knownSet || knownSet.has(field)) sorters.push(sorter);
|
|
2050
|
+
else if (isHidden(field)) unknownSorters.push(sorter);
|
|
1839
2051
|
}
|
|
1840
2052
|
}
|
|
1841
2053
|
const $search = parsed.controls?.$search;
|
|
@@ -1844,8 +2056,24 @@ function urlQueryStringToState(urlString, opts = {}) {
|
|
|
1844
2056
|
sorters,
|
|
1845
2057
|
searchTerm: !searchOff && typeof $search === "string" ? $search : ""
|
|
1846
2058
|
};
|
|
1847
|
-
|
|
2059
|
+
const unsupported$1 = decomposed?.unsupported ?? [];
|
|
2060
|
+
const unknown = [];
|
|
2061
|
+
for (const piece of decomposed?.unknown ?? []) {
|
|
2062
|
+
const hidden = piece.fields.filter(isHidden);
|
|
2063
|
+
if (hidden.length > 0) {
|
|
2064
|
+
if (!isBareEquality(piece.expr)) unknown.push({
|
|
2065
|
+
expr: piece.expr,
|
|
2066
|
+
fields: hidden
|
|
2067
|
+
});
|
|
2068
|
+
continue;
|
|
2069
|
+
}
|
|
2070
|
+
const issue = unsupported("cross-field", piece.expr);
|
|
2071
|
+
if (issue.fields.some((f) => filterKnown?.has(f))) unsupported$1.push(issue);
|
|
2072
|
+
}
|
|
2073
|
+
if (unsupported$1.length) out.unsupported = unsupported$1;
|
|
1848
2074
|
if (decomposed?.residual.length) out.residual = decomposed.residual;
|
|
2075
|
+
if (unknown.length) out.unknown = unknown;
|
|
2076
|
+
if (unknownSorters.length) out.unknownSorters = unknownSorters;
|
|
1849
2077
|
if (opts.sync?.snapshot !== false && parsed.controls && "$snapshot" in parsed.controls) out.snapshot = true;
|
|
1850
2078
|
if (!searchOff) {
|
|
1851
2079
|
const $relevance = parsed.controls?.$relevance;
|
|
@@ -2397,4 +2625,4 @@ function sortRowsLocally(rows, sorters, getValue = (row, field) => row[field]) {
|
|
|
2397
2625
|
});
|
|
2398
2626
|
}
|
|
2399
2627
|
//#endregion
|
|
2400
|
-
export { APP_CONF_PREFIX, AppPrefsClient, DEFAULT_EXPORT_PAGE_SIZE, DEFAULT_ROW_HEIGHT_PX, DEV, DRAFT_PERSISTED_ASPECTS, ExportAbortError, MAX_DEFAULT_COLUMN_WIDTH_PX, NULL_OPS, PRESET_ASPECTS, PresetsClient, PresetsHttpError, RESERVED_ID_PREFIXES, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, URL_SNAPSHOT_KEY, USER_CONF_PREFIX, appConfId, arraysEqual, blockStartFor, buildTableQuery, cellAsString, clampTopIndex, collectExportRows, columnDefaultCondition, columnFilterConditions, columnFilterType, computeDefaultColumnWidth, conditionLabel, conditionsForType, csvCell, dateShortcuts, debounce, decomposeUniqueryFilter, defaultCondition, derivePresetAspects, deserializeDraft, draftMatchesPreset, escapeRegex, filledFilterCount, filterExprFields, filterExprKey, filterTokenLabel, filtersToUniqueryFilter, formatFilterCondition, formatFilterExpr, fromWireSnapshot, gateOwns, hasSecondValue, isAuthError, isColumnFilterable, isDirtyAgainst, isEmptyDraft, isFilled, isSimpleEq, isSystemPresetId, isUnavailableError, mergeDisplayColumns, mergeFilters, mergeSorters, normaliseSystemPresetId, normalizeResidualFilters, pageAlignedBlocksFor, parseColumnFilterInput, parseFilterInput, planFetch, reconcileColumnWidthDefaults, reorderColumnNames, residualGateOwns, resolveAspectGate, resolveExportValue, resolveSystemPresets, rowsToPks, sameColumnSet, serializeDraft, setsEqual, sortRowsLocally, sortersEqual, stableStringify, stateToUrlQueryString, toCsv, toWireSnapshot, togglePk, trimSelection, unescapeRegex, uniqueryFilterToFieldFilters, urlQueryConsumesKey, urlQueryStringToState, userConfId, walkBackwardAbsorb, walkForwardAbsorb, withStableOrder };
|
|
2628
|
+
export { APP_CONF_PREFIX, AppPrefsClient, DEFAULT_EXPORT_PAGE_SIZE, DEFAULT_ROW_HEIGHT_PX, DEV, DRAFT_PERSISTED_ASPECTS, ExportAbortError, MAX_DEFAULT_COLUMN_WIDTH_PX, NULL_OPS, PRESET_ASPECTS, PresetsClient, PresetsHttpError, RESERVED_ID_PREFIXES, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, URL_SNAPSHOT_KEY, USER_CONF_PREFIX, appConfId, arraysEqual, blockStartFor, buildTableQuery, canonicalPresetSnapshot, cellAsString, clampTopIndex, collectExportRows, columnDefaultCondition, columnFilterConditions, columnFilterType, compactFieldFilters, computeDefaultColumnWidth, conditionLabel, conditionsForType, csvCell, dateShortcuts, debounce, decomposeUniqueryFilter, defaultCondition, derivePresetAspects, deserializeDraft, draftMatchesPreset, escapeRegex, filledFilterCount, filterExprFields, filterExprKey, filterTokenLabel, filtersToUniqueryFilter, formatFilterCondition, formatFilterExpr, fromWireSnapshot, gateOwns, hasSecondValue, isAuthError, isColumnFilterable, isDirtyAgainst, isEmptyDraft, isFilled, isSimpleEq, isSystemPresetId, isUnavailableError, mergeDisplayColumns, mergeFilters, mergeSorters, normaliseSystemPresetId, normalizeResidualFilters, pageAlignedBlocksFor, parseColumnFilterInput, parseFilterInput, planFetch, prunePresetSnapshot, pruneResidualFilters, reconcileColumnWidthDefaults, reorderColumnNames, residualGateOwns, resolveAspectGate, resolveExportValue, resolveSystemPresets, restoreDroppedEntries, rowsToPks, sameColumnSet, serializeDraft, setsEqual, sortRowsLocally, sortersEqual, stableStringify, stateToUrlQueryString, toCsv, toWireSnapshot, togglePk, trimSelection, unescapeRegex, uniqueryFilterToFieldFilters, urlQueryConsumesKey, urlQueryStringToState, userConfId, walkBackwardAbsorb, walkForwardAbsorb, withStableOrder };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atscript/ui-table",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.142",
|
|
4
4
|
"description": "Framework-agnostic filter model, filter-to-Uniquery conversion, and preset serialization for atscript tables",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"atscript",
|
|
@@ -42,18 +42,18 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@atscript/ui": "0.1.
|
|
45
|
+
"@atscript/ui": "0.1.142"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@atscript/db-client": "^0.1.
|
|
49
|
-
"@uniqu/core": "^0.1.
|
|
50
|
-
"@uniqu/url": "^0.1.
|
|
48
|
+
"@atscript/db-client": "^0.1.136",
|
|
49
|
+
"@uniqu/core": "^0.1.11",
|
|
50
|
+
"@uniqu/url": "^0.1.11",
|
|
51
51
|
"vitest": "npm:@voidzero-dev/vite-plus-test@0.1.14"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@atscript/db-client": "^0.1.
|
|
55
|
-
"@uniqu/core": "^0.1.
|
|
56
|
-
"@uniqu/url": "^0.1.
|
|
54
|
+
"@atscript/db-client": "^0.1.136",
|
|
55
|
+
"@uniqu/core": "^0.1.11",
|
|
56
|
+
"@uniqu/url": "^0.1.11"
|
|
57
57
|
},
|
|
58
58
|
"scripts": {
|
|
59
59
|
"build": "vp pack",
|