@fuaran-ui/ops 0.3.0 → 0.5.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/dist/index.cjs +102 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +102 -11
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1048,6 +1048,16 @@ var staticStringOpt = (v) => v === void 0 ? "null" : str(v);
|
|
|
1048
1048
|
var staticStringList = (v) => jArray(v.map(str));
|
|
1049
1049
|
var staticFloatSeq = (v) => jArray(v.map(num));
|
|
1050
1050
|
var staticMarkerSeq = (v) => jArray(v.map(mapMarker));
|
|
1051
|
+
var rowValue = (row) => {
|
|
1052
|
+
if (row === null || typeof row !== "object") return "{}";
|
|
1053
|
+
const fields = [];
|
|
1054
|
+
for (const [k, v] of Object.entries(row)) {
|
|
1055
|
+
if (v === null || v === void 0) continue;
|
|
1056
|
+
fields.push([k, objValue(v)]);
|
|
1057
|
+
}
|
|
1058
|
+
return jObject(fields);
|
|
1059
|
+
};
|
|
1060
|
+
var staticRowSeq = (v) => jArray(v.map(rowValue));
|
|
1051
1061
|
var cellKindErased = (k) => {
|
|
1052
1062
|
switch (k.kind) {
|
|
1053
1063
|
case "Text":
|
|
@@ -1092,6 +1102,16 @@ var cellKindErased = (k) => {
|
|
|
1092
1102
|
["labelFn", CLOSURE],
|
|
1093
1103
|
["toneFn", CLOSURE]
|
|
1094
1104
|
]);
|
|
1105
|
+
// Phase 750 — the declarative pill. `default` is omitted-when-`Default` (the Phase
|
|
1106
|
+
// 460 discipline); `jObject` Ordinal-sorts, so push order is irrelevant.
|
|
1107
|
+
case "TonedPill": {
|
|
1108
|
+
const fields = [
|
|
1109
|
+
["field", str(k.field)],
|
|
1110
|
+
["map", jObject(Object.entries(k.map).map(([v, t]) => [v, str(t)]))]
|
|
1111
|
+
];
|
|
1112
|
+
if (k.defaultTone !== "Default") fields.push(["default", str(k.defaultTone)]);
|
|
1113
|
+
return caseObj("TonedPill", fields);
|
|
1114
|
+
}
|
|
1095
1115
|
case "Progress":
|
|
1096
1116
|
return caseObj("Progress", [
|
|
1097
1117
|
["fractionFn", CLOSURE],
|
|
@@ -1119,7 +1139,8 @@ var gridSpec = (s) => {
|
|
|
1119
1139
|
["columns", jArray(s.columns.map(columnErased))],
|
|
1120
1140
|
// 0.2.0 omitted-when-false.
|
|
1121
1141
|
...s.editable ? [["editable", bool(true)]] : [],
|
|
1122
|
-
|
|
1142
|
+
// fuaran#665 — rows are a typed Static payload now, not the opaque residual.
|
|
1143
|
+
["source", binding(s.source, staticRowSeq)]
|
|
1123
1144
|
];
|
|
1124
1145
|
if (s.onRowClick !== void 0) fields.push(["onRowClick", CLOSURE]);
|
|
1125
1146
|
if (s.rowKey !== void 0) fields.push(["rowKey", CLOSURE]);
|
|
@@ -1137,7 +1158,8 @@ var gridSpec = (s) => {
|
|
|
1137
1158
|
var chartSpec = (s) => {
|
|
1138
1159
|
const fields = [
|
|
1139
1160
|
["kind", str(s.kind)],
|
|
1140
|
-
|
|
1161
|
+
// fuaran#665 — rows are a typed Static payload now, not the opaque residual.
|
|
1162
|
+
["source", binding(s.source, staticRowSeq)],
|
|
1141
1163
|
["stacked", bool(s.stacked)],
|
|
1142
1164
|
["xField", str(s.xField)],
|
|
1143
1165
|
["yFields", jArray(s.yFields.map(str))]
|
|
@@ -3016,14 +3038,18 @@ var EMPHASIS_ALIASES = {
|
|
|
3016
3038
|
Subtle: "Quiet",
|
|
3017
3039
|
Muted: "Quiet"
|
|
3018
3040
|
};
|
|
3041
|
+
var TONE_NAMES = [
|
|
3042
|
+
"Default",
|
|
3043
|
+
"Subdued",
|
|
3044
|
+
"Brand",
|
|
3045
|
+
"Success",
|
|
3046
|
+
"Warning",
|
|
3047
|
+
"Critical",
|
|
3048
|
+
"Info"
|
|
3049
|
+
];
|
|
3019
3050
|
var decodeTone = (p, j) => {
|
|
3020
3051
|
if (j.kind === "JString" && j.value in TONE_ALIASES) return ok(TONE_ALIASES[j.value]);
|
|
3021
|
-
return bareEnum(
|
|
3022
|
-
p,
|
|
3023
|
-
j,
|
|
3024
|
-
["Default", "Subdued", "Brand", "Success", "Warning", "Critical", "Info"],
|
|
3025
|
-
"ToneVariant"
|
|
3026
|
-
);
|
|
3052
|
+
return bareEnum(p, j, TONE_NAMES, "ToneVariant");
|
|
3027
3053
|
};
|
|
3028
3054
|
var decodeWeight = (p, j) => (
|
|
3029
3055
|
// StyleWeight deliberately not aliased — `Bold`/`Heavy` is font-weight intent, but
|
|
@@ -4409,6 +4435,17 @@ var parseStaticFloatSeq = (p, v) => {
|
|
|
4409
4435
|
return traverseIndexed(arr.value, (i, el) => requireFloat(`${p}[${i}]`, el));
|
|
4410
4436
|
};
|
|
4411
4437
|
var decodeBindingFloatSeq = (p, j) => decodeBinding(p, j, parseStaticFloatSeq, []);
|
|
4438
|
+
var parseStaticRows = (p, v) => {
|
|
4439
|
+
if (v.kind === "JNull") return ok([]);
|
|
4440
|
+
if (v.kind === "JString" && v.value === OPAQUE2) return ok([]);
|
|
4441
|
+
const arr = requireArray(p, v);
|
|
4442
|
+
if (!arr.ok) return arr;
|
|
4443
|
+
return traverseIndexed(
|
|
4444
|
+
arr.value,
|
|
4445
|
+
(i, el) => el.kind === "JObject" ? ok(decodeAstValue(el)) : wrongType(`${p}[${i}]`, "row object")
|
|
4446
|
+
);
|
|
4447
|
+
};
|
|
4448
|
+
var decodeBindingRows = (p, j) => decodeBinding(p, j, parseStaticRows, []);
|
|
4412
4449
|
var decodeMapMarker = (path, j) => {
|
|
4413
4450
|
const fo = requireObject(path, j);
|
|
4414
4451
|
if (!fo.ok) return fo;
|
|
@@ -5621,6 +5658,56 @@ var decodeInputKind = (path, j) => {
|
|
|
5621
5658
|
return unknownDuCase(path, d.value, "Form | Filters | Button | FileUpload | Select");
|
|
5622
5659
|
}
|
|
5623
5660
|
};
|
|
5661
|
+
var decodeToneMap = (path, j) => {
|
|
5662
|
+
const fo = requireObject(path, j);
|
|
5663
|
+
if (!fo.ok) return fo;
|
|
5664
|
+
const out = {};
|
|
5665
|
+
for (const [k, v] of fo.value) {
|
|
5666
|
+
const entryPath = `${path}.${k}`;
|
|
5667
|
+
const t = decodeTone(entryPath, v);
|
|
5668
|
+
if (!t.ok) {
|
|
5669
|
+
if (t.error.code !== "UNKNOWN_DU_CASE") return t;
|
|
5670
|
+
const got = v.kind === "JString" ? v.value : "";
|
|
5671
|
+
return makeError(
|
|
5672
|
+
"UNKNOWN_DU_CASE",
|
|
5673
|
+
entryPath,
|
|
5674
|
+
`tone-map value '${got}' for '${k}' is not a ToneVariant`,
|
|
5675
|
+
TONE_NAMES.join(" | ")
|
|
5676
|
+
);
|
|
5677
|
+
}
|
|
5678
|
+
out[k] = t.value;
|
|
5679
|
+
}
|
|
5680
|
+
return ok(out);
|
|
5681
|
+
};
|
|
5682
|
+
var TONE_MAP_KEYS = ["map", "toneMap", "tones"];
|
|
5683
|
+
var decodeTonedPill = (path, f) => {
|
|
5684
|
+
const field2 = reqField(
|
|
5685
|
+
path,
|
|
5686
|
+
f,
|
|
5687
|
+
"field",
|
|
5688
|
+
"TonedPill row-field name (drives the label and the map key)",
|
|
5689
|
+
requireString
|
|
5690
|
+
);
|
|
5691
|
+
if (!field2.ok) return field2;
|
|
5692
|
+
const map = reqFieldAliased(
|
|
5693
|
+
path,
|
|
5694
|
+
f,
|
|
5695
|
+
"map",
|
|
5696
|
+
["toneMap", "tones"],
|
|
5697
|
+
"TonedPill value\u2192ToneVariant map",
|
|
5698
|
+
decodeToneMap
|
|
5699
|
+
);
|
|
5700
|
+
if (!map.ok) return map;
|
|
5701
|
+
const defaultTone = optField(path, f, "default", decodeTone);
|
|
5702
|
+
if (!defaultTone.ok) return defaultTone;
|
|
5703
|
+
const k = {
|
|
5704
|
+
kind: "TonedPill",
|
|
5705
|
+
field: field2.value,
|
|
5706
|
+
map: map.value,
|
|
5707
|
+
defaultTone: defaultTone.value ?? "Default"
|
|
5708
|
+
};
|
|
5709
|
+
return ok(k);
|
|
5710
|
+
};
|
|
5624
5711
|
var decodeCellKindErased = (path, j) => {
|
|
5625
5712
|
const fo = requireObject(path, j);
|
|
5626
5713
|
if (!fo.ok) return fo;
|
|
@@ -5673,6 +5760,8 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5673
5760
|
return ok(k);
|
|
5674
5761
|
}
|
|
5675
5762
|
case "Pill": {
|
|
5763
|
+
if (TONE_MAP_KEYS.some((key) => tryField(f, key) !== void 0))
|
|
5764
|
+
return decodeTonedPill(path, f);
|
|
5676
5765
|
const k = {
|
|
5677
5766
|
kind: "Pill",
|
|
5678
5767
|
label: () => ({ kind: "Literal", value: CLOSURE2 }),
|
|
@@ -5680,6 +5769,8 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5680
5769
|
};
|
|
5681
5770
|
return ok(k);
|
|
5682
5771
|
}
|
|
5772
|
+
case "TonedPill":
|
|
5773
|
+
return decodeTonedPill(path, f);
|
|
5683
5774
|
case "Progress": {
|
|
5684
5775
|
const k = { kind: "Progress", fraction: () => 0 };
|
|
5685
5776
|
return ok(k);
|
|
@@ -5695,7 +5786,7 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5695
5786
|
return unknownDuCase(
|
|
5696
5787
|
path,
|
|
5697
5788
|
d.value,
|
|
5698
|
-
"Text | Numeric | Date | Editable | Checkbox | Button | ButtonGroup | Link | Pill | Progress | Custom"
|
|
5789
|
+
"Text | Numeric | Date | Editable | Checkbox | Button | ButtonGroup | Link | Pill | TonedPill | Progress | Custom"
|
|
5699
5790
|
);
|
|
5700
5791
|
}
|
|
5701
5792
|
};
|
|
@@ -5784,7 +5875,7 @@ var decodeGridSpec = (path, j) => {
|
|
|
5784
5875
|
"source",
|
|
5785
5876
|
["data", "rows"],
|
|
5786
5877
|
"Grid source binding",
|
|
5787
|
-
|
|
5878
|
+
decodeBindingRows
|
|
5788
5879
|
);
|
|
5789
5880
|
if (!source.ok) return source;
|
|
5790
5881
|
const hasRowClick = tryField(f, "onRowClick") !== void 0;
|
|
@@ -5825,7 +5916,7 @@ var decodeChartSpec = (path, j) => {
|
|
|
5825
5916
|
"source",
|
|
5826
5917
|
["data"],
|
|
5827
5918
|
"Chart source binding",
|
|
5828
|
-
|
|
5919
|
+
decodeBindingRows
|
|
5829
5920
|
);
|
|
5830
5921
|
if (!source.ok) return source;
|
|
5831
5922
|
const xField = reqField(path, f, "xField", "xField string", requireString);
|