@fuaran-ui/ops 0.2.0 → 0.3.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.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defaults, projectSelectionField, controlValueDefaults } from '@fuaran-ui/schema';
1
+ import { FORM_FIELD_KIND_NAMES, NODE_KIND_GROUPS, defaults, projectSelectionField, controlValueDefaults } from '@fuaran-ui/schema';
2
2
 
3
3
  // src/encode.ts
4
4
  var assertNever = (x) => {
@@ -935,6 +935,25 @@ var formFieldKind = (autoBind, k) => {
935
935
  if (k.constraints.step !== void 0) fields.push(["step", num(k.constraints.step)]);
936
936
  return caseObj("Date", fields);
937
937
  }
938
+ case "DateRange": {
939
+ const staticPair = (p) => jObject([
940
+ ["from", str(p[0])],
941
+ ["to", str(p[1])]
942
+ ]);
943
+ const fields = [
944
+ ...handlerField("onChange", k.onChange),
945
+ ...valueField(
946
+ k.value,
947
+ controlValueDefaults.dateRange,
948
+ (v) => v.kind === "Static" ? staticPair(v.value) : binding(v, staticPair)
949
+ ),
950
+ ["variant", str(k.variant)]
951
+ ];
952
+ if (k.constraints.min !== void 0) fields.push(["min", str(k.constraints.min)]);
953
+ if (k.constraints.max !== void 0) fields.push(["max", str(k.constraints.max)]);
954
+ if (k.constraints.step !== void 0) fields.push(["step", num(k.constraints.step)]);
955
+ return caseObj("DateRange", fields);
956
+ }
938
957
  default:
939
958
  return assertNever(k);
940
959
  }
@@ -4337,6 +4356,41 @@ var decodeBindingFloatPair = (p, j) => {
4337
4356
  }
4338
4357
  return decodeBinding(p, j, parseStaticFloatPair, [0, 0]);
4339
4358
  };
4359
+ var parseStaticStringPair = (p, v) => {
4360
+ const ordered = (a, b) => a > b ? makeError(
4361
+ "WRONG_TYPE",
4362
+ p,
4363
+ `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`,
4364
+ 'ordered ISO-8601 pair ({"from": <iso>, "to": <iso>} with from <= to)'
4365
+ ) : ok([a, b]);
4366
+ if (v.kind === "JObject") {
4367
+ const from = v.fields.get("from");
4368
+ const to = v.fields.get("to");
4369
+ if (from !== void 0 && to !== void 0) {
4370
+ const a = requireString(`${p}.from`, from);
4371
+ if (!a.ok) return a;
4372
+ const b = requireString(`${p}.to`, to);
4373
+ if (!b.ok) return b;
4374
+ return ordered(a.value, b.value);
4375
+ }
4376
+ return wrongType(p, "object with from and to ISO-8601 strings");
4377
+ }
4378
+ if (v.kind === "JArray" && v.items.length === 2) {
4379
+ const a = requireString(`${p}[0]`, v.items[0]);
4380
+ if (!a.ok) return a;
4381
+ const b = requireString(`${p}[1]`, v.items[1]);
4382
+ if (!b.ok) return b;
4383
+ return ordered(a.value, b.value);
4384
+ }
4385
+ return wrongType(p, "date-range pair ({from, to} object or [from, to] array)");
4386
+ };
4387
+ var decodeBindingStringPair = (p, j) => {
4388
+ if (j.kind === "JObject" && j.fields.get("$type") === void 0 && j.fields.get("from") !== void 0 && j.fields.get("to") !== void 0) {
4389
+ const parsed = parseStaticStringPair(p, j);
4390
+ return parsed.ok ? ok({ kind: "Static", value: parsed.value }) : parsed;
4391
+ }
4392
+ return decodeBinding(p, j, parseStaticStringPair, ["", ""]);
4393
+ };
4340
4394
  var parseStaticStringList = (p, v) => {
4341
4395
  if (v.kind === "JNull") return ok([]);
4342
4396
  if (v.kind === "JString" && v.value === OPAQUE2) return ok([OPAQUE2]);
@@ -5184,6 +5238,7 @@ var decodeDisplayKind = (path, j) => {
5184
5238
  );
5185
5239
  }
5186
5240
  };
5241
+ var WRONG_FORM_FIELD_KIND_HINT = FORM_FIELD_KIND_NAMES.join(" | ");
5187
5242
  var decodeFormFieldKind = (autoBind, path, j) => {
5188
5243
  const fo = requireObject(path, j);
5189
5244
  if (!fo.ok) return fo;
@@ -5333,12 +5388,35 @@ var decodeFormFieldKind = (autoBind, path, j) => {
5333
5388
  }
5334
5389
  });
5335
5390
  }
5336
- default:
5337
- return unknownDuCase(
5338
- path,
5339
- d.value,
5340
- "Text | Number | Checkbox | Choice | Range | RangedNumber | SegmentedChoice | TextArea | Date"
5391
+ case "DateRange": {
5392
+ const value = valueOr(
5393
+ decodeBindingStringPair,
5394
+ controlValueDefaults.dateRange,
5395
+ "Binding<[from, to]> ISO-8601 pair value"
5341
5396
  );
5397
+ if (!value.ok) return value;
5398
+ const variant = reqField(path, f, "variant", "DateVariant", decodeDateVariant);
5399
+ if (!variant.ok) return variant;
5400
+ const min = optField(path, f, "min", requireString);
5401
+ if (!min.ok) return min;
5402
+ const max = optField(path, f, "max", requireString);
5403
+ if (!max.ok) return max;
5404
+ const step = optField(path, f, "step", requireFloat);
5405
+ if (!step.ok) return step;
5406
+ return ok({
5407
+ kind: "DateRange",
5408
+ value: value.value,
5409
+ ...onChangeField,
5410
+ variant: variant.value,
5411
+ constraints: {
5412
+ ...min.value !== void 0 ? { min: min.value } : {},
5413
+ ...max.value !== void 0 ? { max: max.value } : {},
5414
+ ...step.value !== void 0 ? { step: step.value } : {}
5415
+ }
5416
+ });
5417
+ }
5418
+ default:
5419
+ return unknownDuCase(path, d.value, WRONG_FORM_FIELD_KIND_HINT);
5342
5420
  }
5343
5421
  };
5344
5422
  var decodeFormField = (path, j) => {
@@ -6300,6 +6378,13 @@ var decodeEffectClass = (path, j) => {
6300
6378
  );
6301
6379
  return ok({ hostEffect: host.value, determinism: det.value });
6302
6380
  };
6381
+ var WRONG_NODE_KIND_HINT = (() => {
6382
+ const primitives = NODE_KIND_GROUPS.filter((g) => g.label !== "Structural").map(
6383
+ (g) => `${"AEIOU".includes(g.label[0]) ? "an" : "a"} ${g.label} primitive (${g.kinds.join(" | ")})`
6384
+ ).join(", ");
6385
+ const structural = NODE_KIND_GROUPS.find((g) => g.label === "Structural")?.kinds ?? [];
6386
+ return `${primitives}, or ${structural.join(" | ")}`;
6387
+ })();
6303
6388
  var decodeNodeKind = (path, j) => {
6304
6389
  const fo = requireObject(path, j);
6305
6390
  if (!fo.ok) return fo;
@@ -6554,7 +6639,7 @@ var decodeNodeKind = (path, j) => {
6554
6639
  "WRONG_NODE_KIND",
6555
6640
  `${path}.$type`,
6556
6641
  `unknown NodeKind discriminator '${d.value}'`,
6557
- "a Layout primitive (Box | SplitPanel | Tabs | Stepper | SummaryList | Disclosure | Modal | ScrollArea), a Display primitive (Heading | Markdown | Metric | Badge | Sparkline | Callout | Progress | Skeleton | LabelValueRow | Link | Image | List | Toast), an Input primitive (Form | Filters | Button | FileUpload | Select), a Visualisation primitive (DataGrid | Chart | Map), or Custom | ErrorBoundary | FragmentDecl | FragmentRef | Mount"
6642
+ WRONG_NODE_KIND_HINT
6558
6643
  );
6559
6644
  }
6560
6645
  };