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