@fuaran-ui/ops 0.2.0 → 0.4.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 +166 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +167 -14
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -937,6 +937,25 @@ var formFieldKind = (autoBind, k) => {
|
|
|
937
937
|
if (k.constraints.step !== void 0) fields.push(["step", num(k.constraints.step)]);
|
|
938
938
|
return caseObj("Date", fields);
|
|
939
939
|
}
|
|
940
|
+
case "DateRange": {
|
|
941
|
+
const staticPair = (p) => jObject([
|
|
942
|
+
["from", str(p[0])],
|
|
943
|
+
["to", str(p[1])]
|
|
944
|
+
]);
|
|
945
|
+
const fields = [
|
|
946
|
+
...handlerField("onChange", k.onChange),
|
|
947
|
+
...valueField(
|
|
948
|
+
k.value,
|
|
949
|
+
schema.controlValueDefaults.dateRange,
|
|
950
|
+
(v) => v.kind === "Static" ? staticPair(v.value) : binding(v, staticPair)
|
|
951
|
+
),
|
|
952
|
+
["variant", str(k.variant)]
|
|
953
|
+
];
|
|
954
|
+
if (k.constraints.min !== void 0) fields.push(["min", str(k.constraints.min)]);
|
|
955
|
+
if (k.constraints.max !== void 0) fields.push(["max", str(k.constraints.max)]);
|
|
956
|
+
if (k.constraints.step !== void 0) fields.push(["step", num(k.constraints.step)]);
|
|
957
|
+
return caseObj("DateRange", fields);
|
|
958
|
+
}
|
|
940
959
|
default:
|
|
941
960
|
return assertNever(k);
|
|
942
961
|
}
|
|
@@ -1073,6 +1092,16 @@ var cellKindErased = (k) => {
|
|
|
1073
1092
|
["labelFn", CLOSURE],
|
|
1074
1093
|
["toneFn", CLOSURE]
|
|
1075
1094
|
]);
|
|
1095
|
+
// Phase 750 — the declarative pill. `default` is omitted-when-`Default` (the Phase
|
|
1096
|
+
// 460 discipline); `jObject` Ordinal-sorts, so push order is irrelevant.
|
|
1097
|
+
case "TonedPill": {
|
|
1098
|
+
const fields = [
|
|
1099
|
+
["field", str(k.field)],
|
|
1100
|
+
["map", jObject(Object.entries(k.map).map(([v, t]) => [v, str(t)]))]
|
|
1101
|
+
];
|
|
1102
|
+
if (k.defaultTone !== "Default") fields.push(["default", str(k.defaultTone)]);
|
|
1103
|
+
return caseObj("TonedPill", fields);
|
|
1104
|
+
}
|
|
1076
1105
|
case "Progress":
|
|
1077
1106
|
return caseObj("Progress", [
|
|
1078
1107
|
["fractionFn", CLOSURE],
|
|
@@ -2997,14 +3026,18 @@ var EMPHASIS_ALIASES = {
|
|
|
2997
3026
|
Subtle: "Quiet",
|
|
2998
3027
|
Muted: "Quiet"
|
|
2999
3028
|
};
|
|
3029
|
+
var TONE_NAMES = [
|
|
3030
|
+
"Default",
|
|
3031
|
+
"Subdued",
|
|
3032
|
+
"Brand",
|
|
3033
|
+
"Success",
|
|
3034
|
+
"Warning",
|
|
3035
|
+
"Critical",
|
|
3036
|
+
"Info"
|
|
3037
|
+
];
|
|
3000
3038
|
var decodeTone = (p, j) => {
|
|
3001
3039
|
if (j.kind === "JString" && j.value in TONE_ALIASES) return ok(TONE_ALIASES[j.value]);
|
|
3002
|
-
return bareEnum(
|
|
3003
|
-
p,
|
|
3004
|
-
j,
|
|
3005
|
-
["Default", "Subdued", "Brand", "Success", "Warning", "Critical", "Info"],
|
|
3006
|
-
"ToneVariant"
|
|
3007
|
-
);
|
|
3040
|
+
return bareEnum(p, j, TONE_NAMES, "ToneVariant");
|
|
3008
3041
|
};
|
|
3009
3042
|
var decodeWeight = (p, j) => (
|
|
3010
3043
|
// StyleWeight deliberately not aliased — `Bold`/`Heavy` is font-weight intent, but
|
|
@@ -4339,6 +4372,41 @@ var decodeBindingFloatPair = (p, j) => {
|
|
|
4339
4372
|
}
|
|
4340
4373
|
return decodeBinding(p, j, parseStaticFloatPair, [0, 0]);
|
|
4341
4374
|
};
|
|
4375
|
+
var parseStaticStringPair = (p, v) => {
|
|
4376
|
+
const ordered = (a, b) => a > b ? makeError(
|
|
4377
|
+
"WRONG_TYPE",
|
|
4378
|
+
p,
|
|
4379
|
+
`date-range start '${a}' is after end '${b}' \u2014 a DateRange pair is ordered (from <= to); ISO-8601 strings of one variant compare lexicographically, so swap the two values`,
|
|
4380
|
+
'ordered ISO-8601 pair ({"from": <iso>, "to": <iso>} with from <= to)'
|
|
4381
|
+
) : ok([a, b]);
|
|
4382
|
+
if (v.kind === "JObject") {
|
|
4383
|
+
const from = v.fields.get("from");
|
|
4384
|
+
const to = v.fields.get("to");
|
|
4385
|
+
if (from !== void 0 && to !== void 0) {
|
|
4386
|
+
const a = requireString(`${p}.from`, from);
|
|
4387
|
+
if (!a.ok) return a;
|
|
4388
|
+
const b = requireString(`${p}.to`, to);
|
|
4389
|
+
if (!b.ok) return b;
|
|
4390
|
+
return ordered(a.value, b.value);
|
|
4391
|
+
}
|
|
4392
|
+
return wrongType(p, "object with from and to ISO-8601 strings");
|
|
4393
|
+
}
|
|
4394
|
+
if (v.kind === "JArray" && v.items.length === 2) {
|
|
4395
|
+
const a = requireString(`${p}[0]`, v.items[0]);
|
|
4396
|
+
if (!a.ok) return a;
|
|
4397
|
+
const b = requireString(`${p}[1]`, v.items[1]);
|
|
4398
|
+
if (!b.ok) return b;
|
|
4399
|
+
return ordered(a.value, b.value);
|
|
4400
|
+
}
|
|
4401
|
+
return wrongType(p, "date-range pair ({from, to} object or [from, to] array)");
|
|
4402
|
+
};
|
|
4403
|
+
var decodeBindingStringPair = (p, j) => {
|
|
4404
|
+
if (j.kind === "JObject" && j.fields.get("$type") === void 0 && j.fields.get("from") !== void 0 && j.fields.get("to") !== void 0) {
|
|
4405
|
+
const parsed = parseStaticStringPair(p, j);
|
|
4406
|
+
return parsed.ok ? ok({ kind: "Static", value: parsed.value }) : parsed;
|
|
4407
|
+
}
|
|
4408
|
+
return decodeBinding(p, j, parseStaticStringPair, ["", ""]);
|
|
4409
|
+
};
|
|
4342
4410
|
var parseStaticStringList = (p, v) => {
|
|
4343
4411
|
if (v.kind === "JNull") return ok([]);
|
|
4344
4412
|
if (v.kind === "JString" && v.value === OPAQUE2) return ok([OPAQUE2]);
|
|
@@ -5186,6 +5254,7 @@ var decodeDisplayKind = (path, j) => {
|
|
|
5186
5254
|
);
|
|
5187
5255
|
}
|
|
5188
5256
|
};
|
|
5257
|
+
var WRONG_FORM_FIELD_KIND_HINT = schema.FORM_FIELD_KIND_NAMES.join(" | ");
|
|
5189
5258
|
var decodeFormFieldKind = (autoBind, path, j) => {
|
|
5190
5259
|
const fo = requireObject(path, j);
|
|
5191
5260
|
if (!fo.ok) return fo;
|
|
@@ -5335,12 +5404,35 @@ var decodeFormFieldKind = (autoBind, path, j) => {
|
|
|
5335
5404
|
}
|
|
5336
5405
|
});
|
|
5337
5406
|
}
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
"
|
|
5407
|
+
case "DateRange": {
|
|
5408
|
+
const value = valueOr(
|
|
5409
|
+
decodeBindingStringPair,
|
|
5410
|
+
schema.controlValueDefaults.dateRange,
|
|
5411
|
+
"Binding<[from, to]> ISO-8601 pair value"
|
|
5343
5412
|
);
|
|
5413
|
+
if (!value.ok) return value;
|
|
5414
|
+
const variant = reqField(path, f, "variant", "DateVariant", decodeDateVariant);
|
|
5415
|
+
if (!variant.ok) return variant;
|
|
5416
|
+
const min = optField(path, f, "min", requireString);
|
|
5417
|
+
if (!min.ok) return min;
|
|
5418
|
+
const max = optField(path, f, "max", requireString);
|
|
5419
|
+
if (!max.ok) return max;
|
|
5420
|
+
const step = optField(path, f, "step", requireFloat);
|
|
5421
|
+
if (!step.ok) return step;
|
|
5422
|
+
return ok({
|
|
5423
|
+
kind: "DateRange",
|
|
5424
|
+
value: value.value,
|
|
5425
|
+
...onChangeField,
|
|
5426
|
+
variant: variant.value,
|
|
5427
|
+
constraints: {
|
|
5428
|
+
...min.value !== void 0 ? { min: min.value } : {},
|
|
5429
|
+
...max.value !== void 0 ? { max: max.value } : {},
|
|
5430
|
+
...step.value !== void 0 ? { step: step.value } : {}
|
|
5431
|
+
}
|
|
5432
|
+
});
|
|
5433
|
+
}
|
|
5434
|
+
default:
|
|
5435
|
+
return unknownDuCase(path, d.value, WRONG_FORM_FIELD_KIND_HINT);
|
|
5344
5436
|
}
|
|
5345
5437
|
};
|
|
5346
5438
|
var decodeFormField = (path, j) => {
|
|
@@ -5543,6 +5635,56 @@ var decodeInputKind = (path, j) => {
|
|
|
5543
5635
|
return unknownDuCase(path, d.value, "Form | Filters | Button | FileUpload | Select");
|
|
5544
5636
|
}
|
|
5545
5637
|
};
|
|
5638
|
+
var decodeToneMap = (path, j) => {
|
|
5639
|
+
const fo = requireObject(path, j);
|
|
5640
|
+
if (!fo.ok) return fo;
|
|
5641
|
+
const out = {};
|
|
5642
|
+
for (const [k, v] of fo.value) {
|
|
5643
|
+
const entryPath = `${path}.${k}`;
|
|
5644
|
+
const t = decodeTone(entryPath, v);
|
|
5645
|
+
if (!t.ok) {
|
|
5646
|
+
if (t.error.code !== "UNKNOWN_DU_CASE") return t;
|
|
5647
|
+
const got = v.kind === "JString" ? v.value : "";
|
|
5648
|
+
return makeError(
|
|
5649
|
+
"UNKNOWN_DU_CASE",
|
|
5650
|
+
entryPath,
|
|
5651
|
+
`tone-map value '${got}' for '${k}' is not a ToneVariant`,
|
|
5652
|
+
TONE_NAMES.join(" | ")
|
|
5653
|
+
);
|
|
5654
|
+
}
|
|
5655
|
+
out[k] = t.value;
|
|
5656
|
+
}
|
|
5657
|
+
return ok(out);
|
|
5658
|
+
};
|
|
5659
|
+
var TONE_MAP_KEYS = ["map", "toneMap", "tones"];
|
|
5660
|
+
var decodeTonedPill = (path, f) => {
|
|
5661
|
+
const field2 = reqField(
|
|
5662
|
+
path,
|
|
5663
|
+
f,
|
|
5664
|
+
"field",
|
|
5665
|
+
"TonedPill row-field name (drives the label and the map key)",
|
|
5666
|
+
requireString
|
|
5667
|
+
);
|
|
5668
|
+
if (!field2.ok) return field2;
|
|
5669
|
+
const map = reqFieldAliased(
|
|
5670
|
+
path,
|
|
5671
|
+
f,
|
|
5672
|
+
"map",
|
|
5673
|
+
["toneMap", "tones"],
|
|
5674
|
+
"TonedPill value\u2192ToneVariant map",
|
|
5675
|
+
decodeToneMap
|
|
5676
|
+
);
|
|
5677
|
+
if (!map.ok) return map;
|
|
5678
|
+
const defaultTone = optField(path, f, "default", decodeTone);
|
|
5679
|
+
if (!defaultTone.ok) return defaultTone;
|
|
5680
|
+
const k = {
|
|
5681
|
+
kind: "TonedPill",
|
|
5682
|
+
field: field2.value,
|
|
5683
|
+
map: map.value,
|
|
5684
|
+
defaultTone: defaultTone.value ?? "Default"
|
|
5685
|
+
};
|
|
5686
|
+
return ok(k);
|
|
5687
|
+
};
|
|
5546
5688
|
var decodeCellKindErased = (path, j) => {
|
|
5547
5689
|
const fo = requireObject(path, j);
|
|
5548
5690
|
if (!fo.ok) return fo;
|
|
@@ -5595,6 +5737,8 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5595
5737
|
return ok(k);
|
|
5596
5738
|
}
|
|
5597
5739
|
case "Pill": {
|
|
5740
|
+
if (TONE_MAP_KEYS.some((key) => tryField(f, key) !== void 0))
|
|
5741
|
+
return decodeTonedPill(path, f);
|
|
5598
5742
|
const k = {
|
|
5599
5743
|
kind: "Pill",
|
|
5600
5744
|
label: () => ({ kind: "Literal", value: CLOSURE2 }),
|
|
@@ -5602,6 +5746,8 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5602
5746
|
};
|
|
5603
5747
|
return ok(k);
|
|
5604
5748
|
}
|
|
5749
|
+
case "TonedPill":
|
|
5750
|
+
return decodeTonedPill(path, f);
|
|
5605
5751
|
case "Progress": {
|
|
5606
5752
|
const k = { kind: "Progress", fraction: () => 0 };
|
|
5607
5753
|
return ok(k);
|
|
@@ -5617,7 +5763,7 @@ var decodeCellKindErased = (path, j) => {
|
|
|
5617
5763
|
return unknownDuCase(
|
|
5618
5764
|
path,
|
|
5619
5765
|
d.value,
|
|
5620
|
-
"Text | Numeric | Date | Editable | Checkbox | Button | ButtonGroup | Link | Pill | Progress | Custom"
|
|
5766
|
+
"Text | Numeric | Date | Editable | Checkbox | Button | ButtonGroup | Link | Pill | TonedPill | Progress | Custom"
|
|
5621
5767
|
);
|
|
5622
5768
|
}
|
|
5623
5769
|
};
|
|
@@ -6302,6 +6448,13 @@ var decodeEffectClass = (path, j) => {
|
|
|
6302
6448
|
);
|
|
6303
6449
|
return ok({ hostEffect: host.value, determinism: det.value });
|
|
6304
6450
|
};
|
|
6451
|
+
var WRONG_NODE_KIND_HINT = (() => {
|
|
6452
|
+
const primitives = schema.NODE_KIND_GROUPS.filter((g) => g.label !== "Structural").map(
|
|
6453
|
+
(g) => `${"AEIOU".includes(g.label[0]) ? "an" : "a"} ${g.label} primitive (${g.kinds.join(" | ")})`
|
|
6454
|
+
).join(", ");
|
|
6455
|
+
const structural = schema.NODE_KIND_GROUPS.find((g) => g.label === "Structural")?.kinds ?? [];
|
|
6456
|
+
return `${primitives}, or ${structural.join(" | ")}`;
|
|
6457
|
+
})();
|
|
6305
6458
|
var decodeNodeKind = (path, j) => {
|
|
6306
6459
|
const fo = requireObject(path, j);
|
|
6307
6460
|
if (!fo.ok) return fo;
|
|
@@ -6556,7 +6709,7 @@ var decodeNodeKind = (path, j) => {
|
|
|
6556
6709
|
"WRONG_NODE_KIND",
|
|
6557
6710
|
`${path}.$type`,
|
|
6558
6711
|
`unknown NodeKind discriminator '${d.value}'`,
|
|
6559
|
-
|
|
6712
|
+
WRONG_NODE_KIND_HINT
|
|
6560
6713
|
);
|
|
6561
6714
|
}
|
|
6562
6715
|
};
|