@dxos/echo 0.10.0 → 0.11.1
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/lib/Annotation.mjs +3 -0
- package/dist/lib/Blob.mjs +160 -0
- package/dist/lib/Blob.mjs.map +1 -0
- package/dist/lib/Database.mjs +2 -0
- package/dist/lib/Entity.mjs +231 -0
- package/dist/lib/Entity.mjs.map +1 -0
- package/dist/lib/Err.mjs +105 -0
- package/dist/lib/Err.mjs.map +1 -0
- package/dist/lib/Feed.mjs +338 -0
- package/dist/lib/Feed.mjs.map +1 -0
- package/dist/lib/Filter.mjs +380 -0
- package/dist/lib/Filter.mjs.map +1 -0
- package/dist/lib/Format.mjs +47 -0
- package/dist/lib/Format.mjs.map +1 -0
- package/dist/lib/JsonSchema.mjs +21 -0
- package/dist/lib/JsonSchema.mjs.map +1 -0
- package/dist/lib/Key.mjs +15 -0
- package/dist/lib/Key.mjs.map +1 -0
- package/dist/lib/Migration.mjs +38 -0
- package/dist/lib/Migration.mjs.map +1 -0
- package/dist/lib/Obj.mjs +660 -0
- package/dist/lib/Obj.mjs.map +1 -0
- package/dist/lib/Order.mjs +65 -0
- package/dist/lib/Order.mjs.map +1 -0
- package/dist/lib/Query.mjs +336 -0
- package/dist/lib/Query.mjs.map +1 -0
- package/dist/lib/QueryResult.mjs +7 -0
- package/dist/lib/QueryResult.mjs.map +1 -0
- package/dist/lib/Ref.mjs +44 -0
- package/dist/lib/Ref.mjs.map +1 -0
- package/dist/lib/Registry.mjs +35 -0
- package/dist/lib/Registry.mjs.map +1 -0
- package/dist/lib/Relation.mjs +397 -0
- package/dist/lib/Relation.mjs.map +1 -0
- package/dist/lib/Scope.mjs +51 -0
- package/dist/lib/Scope.mjs.map +1 -0
- package/dist/lib/Tag.mjs +70 -0
- package/dist/lib/Tag.mjs.map +1 -0
- package/dist/lib/Text.mjs +82 -0
- package/dist/lib/Text.mjs.map +1 -0
- package/dist/lib/Type.mjs +371 -0
- package/dist/lib/Type.mjs.map +1 -0
- package/dist/lib/chunk-Annotation.mjs +221 -0
- package/dist/lib/chunk-Annotation.mjs.map +1 -0
- package/dist/lib/chunk-Database.mjs +918 -0
- package/dist/lib/chunk-Database.mjs.map +1 -0
- package/dist/lib/chunk-atom-snapshot.mjs +249 -0
- package/dist/lib/chunk-atom-snapshot.mjs.map +1 -0
- package/dist/lib/chunk-internal.mjs +2775 -0
- package/dist/lib/chunk-internal.mjs.map +1 -0
- package/dist/lib/chunk-json-schema.mjs +660 -0
- package/dist/lib/chunk-json-schema.mjs.map +1 -0
- package/dist/lib/chunk-number.mjs +164 -0
- package/dist/lib/chunk-number.mjs.map +1 -0
- package/dist/lib/chunk-ref-array.mjs +31 -0
- package/dist/lib/chunk-ref-array.mjs.map +1 -0
- package/dist/lib/chunk-ref.mjs +590 -0
- package/dist/lib/chunk-ref.mjs.map +1 -0
- package/dist/lib/chunk-rolldown-runtime.mjs +13 -0
- package/dist/lib/chunk-select.mjs +186 -0
- package/dist/lib/chunk-select.mjs.map +1 -0
- package/dist/lib/chunk-src.mjs +234 -0
- package/dist/lib/chunk-src.mjs.map +1 -0
- package/dist/lib/chunk-util.mjs +140 -0
- package/dist/lib/chunk-util.mjs.map +1 -0
- package/dist/lib/index.mjs +24 -0
- package/dist/lib/internal.mjs +10 -0
- package/dist/lib/testing.mjs +346 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/types/src/Aggregate.d.ts +86 -0
- package/dist/types/src/Aggregate.d.ts.map +1 -0
- package/dist/types/src/Blob.d.ts +153 -0
- package/dist/types/src/Blob.d.ts.map +1 -0
- package/dist/types/src/Blob.test.d.ts +2 -0
- package/dist/types/src/Blob.test.d.ts.map +1 -0
- package/dist/types/src/Database.d.ts +153 -4
- package/dist/types/src/Database.d.ts.map +1 -1
- package/dist/types/src/Err.d.ts +116 -0
- package/dist/types/src/Err.d.ts.map +1 -1
- package/dist/types/src/Feed.d.ts +116 -28
- package/dist/types/src/Feed.d.ts.map +1 -1
- package/dist/types/src/Feed.test.d.ts +2 -0
- package/dist/types/src/Feed.test.d.ts.map +1 -0
- package/dist/types/src/Filter.d.ts +14 -6
- package/dist/types/src/Filter.d.ts.map +1 -1
- package/dist/types/src/Hypergraph.d.ts +18 -0
- package/dist/types/src/Hypergraph.d.ts.map +1 -1
- package/dist/types/src/Json.d.ts.map +1 -1
- package/dist/types/src/Obj.d.ts +14 -1
- package/dist/types/src/Obj.d.ts.map +1 -1
- package/dist/types/src/Order.d.ts +9 -3
- package/dist/types/src/Order.d.ts.map +1 -1
- package/dist/types/src/Query.d.ts +107 -26
- package/dist/types/src/Query.d.ts.map +1 -1
- package/dist/types/src/Relation.d.ts +6 -0
- package/dist/types/src/Relation.d.ts.map +1 -1
- package/dist/types/src/Type.d.ts.map +1 -1
- package/dist/types/src/View.d.ts +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/api.d.ts +6 -0
- package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
- package/dist/types/src/internal/Entity/model.d.ts +3 -2
- package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
- package/dist/types/src/internal/Filter/match.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -8
- package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
- package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -1
- package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
- package/dist/types/src/internal/Query/pretty.d.ts.map +1 -1
- package/dist/types/src/internal/Query/query-result-effect.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/make-object.d.ts +13 -0
- package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -1
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts +12 -0
- package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/index.d.ts +1 -0
- package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/model-symbols.d.ts +5 -0
- package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
- package/dist/types/src/internal/common/types/projection.d.ts +32 -0
- package/dist/types/src/internal/common/types/projection.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +40 -35
- package/src/Aggregate.ts +105 -0
- package/src/Blob.test.ts +45 -0
- package/src/Blob.ts +205 -0
- package/src/Database.ts +207 -17
- package/src/Err.ts +36 -0
- package/src/Feed.test.ts +188 -0
- package/src/Feed.ts +238 -62
- package/src/Filter.ts +28 -10
- package/src/Hypergraph.ts +18 -0
- package/src/Json.ts +1 -0
- package/src/Obj.test.ts +2 -2
- package/src/Obj.ts +21 -1
- package/src/Order.ts +16 -9
- package/src/Query.test.ts +319 -2
- package/src/Query.ts +165 -51
- package/src/Relation.ts +14 -0
- package/src/Type.ts +5 -6
- package/src/index.ts +2 -0
- package/src/internal/Entity/api.ts +11 -1
- package/src/internal/Entity/model.ts +3 -0
- package/src/internal/Filter/match.ts +30 -1
- package/src/internal/JsonSchema/json-schema-type.ts +14 -2
- package/src/internal/JsonSchema/json-schema.test.ts +28 -1
- package/src/internal/JsonSchema/json-schema.ts +33 -6
- package/src/internal/Obj/atoms.ts +4 -2
- package/src/internal/Obj/json-serializer.test.ts +162 -2
- package/src/internal/Obj/json-serializer.ts +6 -0
- package/src/internal/Query/pretty.ts +19 -1
- package/src/internal/Query/query-result-effect.ts +2 -4
- package/src/internal/Ref/atoms.ts +1 -1
- package/src/internal/common/proxy/change-context.ts +1 -1
- package/src/internal/common/proxy/make-object.ts +42 -3
- package/src/internal/common/proxy/reactive.ts +5 -0
- package/src/internal/common/proxy/symbols.ts +1 -0
- package/src/internal/common/proxy/typed-handler.ts +71 -29
- package/src/internal/common/types/index.ts +1 -0
- package/src/internal/common/types/model-symbols.ts +6 -0
- package/src/internal/common/types/projection.ts +45 -0
- package/src/testing/test-data.ts +14 -14
- package/dist/lib/neutral/Annotation.mjs +0 -90
- package/dist/lib/neutral/Annotation.mjs.map +0 -7
- package/dist/lib/neutral/Database.mjs +0 -42
- package/dist/lib/neutral/Database.mjs.map +0 -7
- package/dist/lib/neutral/Entity.mjs +0 -76
- package/dist/lib/neutral/Entity.mjs.map +0 -7
- package/dist/lib/neutral/Err.mjs +0 -16
- package/dist/lib/neutral/Err.mjs.map +0 -7
- package/dist/lib/neutral/Feed.mjs +0 -50
- package/dist/lib/neutral/Feed.mjs.map +0 -7
- package/dist/lib/neutral/Filter.mjs +0 -72
- package/dist/lib/neutral/Filter.mjs.map +0 -7
- package/dist/lib/neutral/Format.mjs +0 -82
- package/dist/lib/neutral/Format.mjs.map +0 -7
- package/dist/lib/neutral/JsonSchema.mjs +0 -18
- package/dist/lib/neutral/JsonSchema.mjs.map +0 -7
- package/dist/lib/neutral/Key.mjs +0 -16
- package/dist/lib/neutral/Key.mjs.map +0 -7
- package/dist/lib/neutral/Migration.mjs +0 -18
- package/dist/lib/neutral/Migration.mjs.map +0 -7
- package/dist/lib/neutral/Obj.mjs +0 -128
- package/dist/lib/neutral/Obj.mjs.map +0 -7
- package/dist/lib/neutral/Order.mjs +0 -16
- package/dist/lib/neutral/Order.mjs.map +0 -7
- package/dist/lib/neutral/Query.mjs +0 -38
- package/dist/lib/neutral/Query.mjs.map +0 -7
- package/dist/lib/neutral/QueryResult.mjs +0 -2
- package/dist/lib/neutral/QueryResult.mjs.map +0 -7
- package/dist/lib/neutral/Ref.mjs +0 -25
- package/dist/lib/neutral/Ref.mjs.map +0 -7
- package/dist/lib/neutral/Registry.mjs +0 -14
- package/dist/lib/neutral/Registry.mjs.map +0 -7
- package/dist/lib/neutral/Relation.mjs +0 -97
- package/dist/lib/neutral/Relation.mjs.map +0 -7
- package/dist/lib/neutral/Scope.mjs +0 -12
- package/dist/lib/neutral/Scope.mjs.map +0 -7
- package/dist/lib/neutral/Tag.mjs +0 -32
- package/dist/lib/neutral/Tag.mjs.map +0 -7
- package/dist/lib/neutral/Text.mjs +0 -25
- package/dist/lib/neutral/Text.mjs.map +0 -7
- package/dist/lib/neutral/Type.mjs +0 -65
- package/dist/lib/neutral/Type.mjs.map +0 -7
- package/dist/lib/neutral/chunk-2HKGAQM4.mjs +0 -1394
- package/dist/lib/neutral/chunk-2HKGAQM4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-2ZHECXUR.mjs +0 -95
- package/dist/lib/neutral/chunk-2ZHECXUR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3KTE2Y7Q.mjs +0 -336
- package/dist/lib/neutral/chunk-3KTE2Y7Q.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3TN2VMI4.mjs +0 -714
- package/dist/lib/neutral/chunk-3TN2VMI4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-42L4HJ3Z.mjs +0 -104
- package/dist/lib/neutral/chunk-42L4HJ3Z.mjs.map +0 -7
- package/dist/lib/neutral/chunk-4A2NWKRJ.mjs +0 -747
- package/dist/lib/neutral/chunk-4A2NWKRJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +0 -25
- package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ACFAOTKJ.mjs +0 -1531
- package/dist/lib/neutral/chunk-ACFAOTKJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BEFR7LEA.mjs +0 -170
- package/dist/lib/neutral/chunk-BEFR7LEA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BXIKXT7Q.mjs +0 -89
- package/dist/lib/neutral/chunk-BXIKXT7Q.mjs.map +0 -7
- package/dist/lib/neutral/chunk-C57XMMBY.mjs +0 -206
- package/dist/lib/neutral/chunk-C57XMMBY.mjs.map +0 -7
- package/dist/lib/neutral/chunk-C62JYFAD.mjs +0 -183
- package/dist/lib/neutral/chunk-C62JYFAD.mjs.map +0 -7
- package/dist/lib/neutral/chunk-FSGX2R62.mjs +0 -48
- package/dist/lib/neutral/chunk-FSGX2R62.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HBXT3GSB.mjs +0 -459
- package/dist/lib/neutral/chunk-HBXT3GSB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-IQR45HAD.mjs +0 -31
- package/dist/lib/neutral/chunk-IQR45HAD.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KCBW4BR6.mjs +0 -424
- package/dist/lib/neutral/chunk-KCBW4BR6.mjs.map +0 -7
- package/dist/lib/neutral/chunk-L3E5IXAE.mjs +0 -575
- package/dist/lib/neutral/chunk-L3E5IXAE.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PRC4FEKJ.mjs +0 -56
- package/dist/lib/neutral/chunk-PRC4FEKJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SCT6FFCR.mjs +0 -351
- package/dist/lib/neutral/chunk-SCT6FFCR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TOCVVFK2.mjs +0 -75
- package/dist/lib/neutral/chunk-TOCVVFK2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-U53LSQQA.mjs +0 -41
- package/dist/lib/neutral/chunk-U53LSQQA.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UGFFV2FR.mjs +0 -27
- package/dist/lib/neutral/chunk-UGFFV2FR.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UWLP4RFM.mjs +0 -7
- package/dist/lib/neutral/chunk-UWLP4RFM.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UZHCQ6NI.mjs +0 -283
- package/dist/lib/neutral/chunk-UZHCQ6NI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WISOH2XH.mjs +0 -36
- package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WKIT2YY5.mjs +0 -34
- package/dist/lib/neutral/chunk-WKIT2YY5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XB6ISRAO.mjs +0 -271
- package/dist/lib/neutral/chunk-XB6ISRAO.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XXL42WCB.mjs +0 -84
- package/dist/lib/neutral/chunk-XXL42WCB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XXWK4J53.mjs +0 -117
- package/dist/lib/neutral/chunk-XXWK4J53.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -115
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/internal/index.mjs +0 -581
- package/dist/lib/neutral/internal/index.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/testing/index.mjs +0 -477
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
|
|
2
|
+
import { a as isEntity, b as getDictionary$1, i as update$1, n as get$1, r as set$1, t as snapshotForComparison, v as Dictionary$1, x as setDictionary$1, y as Key$1 } from "./chunk-atom-snapshot.mjs";
|
|
3
|
+
import { $ as ReferenceAnnotation, B as FormLayoutAnnotationId, D as DEFAULT_LAYOUT_NAME, Et as setDescriptionWithSchema, F as FormInlineAnnotation, G as HiddenAnnotation, J as IconFromRefAnnotation, L as FormInputAnnotation, N as FormCreateAnnotation, O as DescriptionAnnotation, Ot as setLabelWithSchema, P as FormCreateAnnotationId, U as GeneratorAnnotation, V as FormOrderedAnnotation, W as GeneratorAnnotationId, Y as LabelAnnotation, bt as getTypeAnnotation, dt as getFromAst$1, et as ReferenceAnnotationId, ht as getLabelWithSchema, j as FieldLookupAnnotationId, lt as getDescriptionWithSchema, nt as TypeAnnotation, q as IconAnnotation, wt as makeUserAnnotation, xt as getTypeIdentifierAnnotation, z as FormLayoutAnnotation } from "./chunk-Database.mjs";
|
|
4
|
+
import { g as subscribe } from "./chunk-ref.mjs";
|
|
5
|
+
import * as Function from "effect/Function";
|
|
6
|
+
import * as Option from "effect/Option";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import { assertArgument } from "@dxos/invariant";
|
|
9
|
+
import * as Atom from "@effect-atom/atom/Atom";
|
|
10
|
+
import * as Data from "effect/Data";
|
|
11
|
+
//#region src/internal/Annotation/atoms.ts
|
|
12
|
+
/**
|
|
13
|
+
* Atom family for an annotation value on an entity instance.
|
|
14
|
+
* Mirrors the object-property atom family: re-emits a fresh reference whenever the entity changes
|
|
15
|
+
* (so an in-place array mutation is observed) and dedupes primitive values via `!==`.
|
|
16
|
+
*/
|
|
17
|
+
var annotationFamily = Atom.family((target) => Atom.family((annotation) => {
|
|
18
|
+
const read = () => Option.map(get$1(target, annotation), snapshotForComparison);
|
|
19
|
+
return Atom.make((get) => {
|
|
20
|
+
let previous = read();
|
|
21
|
+
const unsubscribe = subscribe(target, () => {
|
|
22
|
+
const next = read();
|
|
23
|
+
if (!sameOption(previous, next)) {
|
|
24
|
+
previous = next;
|
|
25
|
+
get.setSelf(next);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
get.addFinalizer(() => unsubscribe());
|
|
29
|
+
return previous;
|
|
30
|
+
}).pipe(Atom.keepAlive);
|
|
31
|
+
}));
|
|
32
|
+
/**
|
|
33
|
+
* Atom family for a single key of a record-valued annotation on an entity instance.
|
|
34
|
+
* Keyed by a value-equal `Data.tuple([target, annotation, key])` so nested families are avoided.
|
|
35
|
+
*/
|
|
36
|
+
var annotationPropertyFamily = Atom.family(([target, annotation, key]) => {
|
|
37
|
+
const read = () => get$1(target, annotation).pipe(Option.map((value) => snapshotForComparison(value[key])), Option.getOrUndefined);
|
|
38
|
+
return Atom.make((get) => {
|
|
39
|
+
let previous = read();
|
|
40
|
+
const unsubscribe = subscribe(target, () => {
|
|
41
|
+
const next = read();
|
|
42
|
+
if (next !== previous) {
|
|
43
|
+
previous = next;
|
|
44
|
+
get.setSelf(next);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
get.addFinalizer(() => unsubscribe());
|
|
48
|
+
return previous;
|
|
49
|
+
}).pipe(Atom.keepAlive);
|
|
50
|
+
});
|
|
51
|
+
/** Equal when both empty, or both present with the same (snapshotted) value. */
|
|
52
|
+
var sameOption = (a, b) => Option.isNone(a) || Option.isNone(b) ? Option.isNone(a) && Option.isNone(b) : a.value === b.value;
|
|
53
|
+
/**
|
|
54
|
+
* Reactive atom for an annotation value on an entity instance. Emits a shallow snapshot (a fresh
|
|
55
|
+
* reference for objects/arrays) so dependent atoms recompute on change. Mirrors {@link makeProperty}.
|
|
56
|
+
*/
|
|
57
|
+
var makeAtom = (target, annotation) => {
|
|
58
|
+
assertArgument(isEntity(target), "target", "Must be a reactive ECHO entity");
|
|
59
|
+
return annotationFamily(target)(annotation);
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Reactive atom for a single key of a record-valued annotation on an entity instance.
|
|
63
|
+
*/
|
|
64
|
+
var makeProperty = (target, annotation, key) => {
|
|
65
|
+
assertArgument(isEntity(target), "target", "Must be a reactive ECHO entity");
|
|
66
|
+
return annotationPropertyFamily(Data.tuple(target, annotation, key));
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/Annotation.ts
|
|
70
|
+
var Annotation_exports = /* @__PURE__ */ __exportAll({
|
|
71
|
+
DEFAULT_LAYOUT_NAME: () => DEFAULT_LAYOUT_NAME,
|
|
72
|
+
DescriptionAnnotation: () => DescriptionAnnotation,
|
|
73
|
+
Dictionary: () => Dictionary,
|
|
74
|
+
FieldLookupAnnotationId: () => FieldLookupAnnotationId,
|
|
75
|
+
FormCreateAnnotation: () => FormCreateAnnotation,
|
|
76
|
+
FormCreateAnnotationId: () => FormCreateAnnotationId,
|
|
77
|
+
FormInlineAnnotation: () => FormInlineAnnotation,
|
|
78
|
+
FormInputAnnotation: () => FormInputAnnotation,
|
|
79
|
+
FormLayoutAnnotation: () => FormLayoutAnnotation,
|
|
80
|
+
FormLayoutAnnotationId: () => FormLayoutAnnotationId,
|
|
81
|
+
FormOrderedAnnotation: () => FormOrderedAnnotation,
|
|
82
|
+
GeneratorAnnotation: () => GeneratorAnnotation,
|
|
83
|
+
GeneratorAnnotationId: () => GeneratorAnnotationId,
|
|
84
|
+
HiddenAnnotation: () => HiddenAnnotation,
|
|
85
|
+
IconAnnotation: () => IconAnnotation,
|
|
86
|
+
IconFromRefAnnotation: () => IconFromRefAnnotation,
|
|
87
|
+
Key: () => Key,
|
|
88
|
+
LabelAnnotation: () => LabelAnnotation,
|
|
89
|
+
ReferenceAnnotation: () => ReferenceAnnotation,
|
|
90
|
+
ReferenceAnnotationId: () => ReferenceAnnotationId,
|
|
91
|
+
TypeAnnotation: () => TypeAnnotation,
|
|
92
|
+
TypeId: () => TypeId,
|
|
93
|
+
atom: () => atom,
|
|
94
|
+
atomProperty: () => atomProperty,
|
|
95
|
+
buildDictionary: () => buildDictionary,
|
|
96
|
+
get: () => get,
|
|
97
|
+
getDescriptionWithSchema: () => getDescriptionWithSchema,
|
|
98
|
+
getDictionary: () => getDictionary,
|
|
99
|
+
getFromAst: () => getFromAst,
|
|
100
|
+
getLabelWithSchema: () => getLabelWithSchema,
|
|
101
|
+
getTypeAnnotation: () => getTypeAnnotation,
|
|
102
|
+
getTypeIdentifierAnnotation: () => getTypeIdentifierAnnotation,
|
|
103
|
+
make: () => make,
|
|
104
|
+
set: () => set,
|
|
105
|
+
setDescriptionWithSchema: () => setDescriptionWithSchema,
|
|
106
|
+
setDictionary: () => setDictionary,
|
|
107
|
+
setLabelWithSchema: () => setLabelWithSchema,
|
|
108
|
+
update: () => update
|
|
109
|
+
});
|
|
110
|
+
var TypeId = "~@dxos/echo/Annotation";
|
|
111
|
+
var Key = Key$1;
|
|
112
|
+
/**
|
|
113
|
+
* Create a new schema annotation.
|
|
114
|
+
* Annotation can be assigned both to fields and to the schema itself.
|
|
115
|
+
* Annotation is serialized with the schema.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const ColorAnnotation = Annotation.make({
|
|
120
|
+
* id: 'org.dxos.annotation.color',
|
|
121
|
+
* schema: Schema.String,
|
|
122
|
+
* });
|
|
123
|
+
*
|
|
124
|
+
* const schema = Schema.String.annotations(ColorAnnotation.set('red'));
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
var make = makeUserAnnotation;
|
|
128
|
+
/**
|
|
129
|
+
* Get the value of an annotation from an entity instance or snapshot.
|
|
130
|
+
* For schema-level reads use the annotation instance method (e.g. `ColorAnnotation.get(schema)`).
|
|
131
|
+
* For getting an annotation value from a dictionary, use `getDictionary`.
|
|
132
|
+
*
|
|
133
|
+
* The value is read-only (schema types are readonly by default): to mutate an annotation (including
|
|
134
|
+
* in-place array splices) use `Annotation.update` or `Annotation.set`, which open a change transaction.
|
|
135
|
+
* A read-only return is sound regardless of context — the reactive proxy rejects mutation outside an
|
|
136
|
+
* `Obj.update`.
|
|
137
|
+
*/
|
|
138
|
+
var get = Function.dual(2, (target, annotation) => {
|
|
139
|
+
return get$1(target, annotation);
|
|
140
|
+
});
|
|
141
|
+
/**
|
|
142
|
+
* Set the value of an annotation on an entity instance.
|
|
143
|
+
* For schema-level writes use the annotation instance method (e.g. `ColorAnnotation.set('red')`).
|
|
144
|
+
* For setting an annotation value on a dictionary, use `setDictionary`.
|
|
145
|
+
*/
|
|
146
|
+
var set = Function.dual(3, (target, annotation, value) => {
|
|
147
|
+
return set$1(target, annotation, value);
|
|
148
|
+
});
|
|
149
|
+
/**
|
|
150
|
+
* Mutate an existing annotation value in place via a callback, wrapping the mutation in a change
|
|
151
|
+
* transaction (like `Obj.update`). The result is validated against the annotation's schema. Use when
|
|
152
|
+
* only an annotation needs to change; to mutate it alongside other changes (unvalidated), call
|
|
153
|
+
* `Annotation.get` inside an existing `Obj.update` instead. No-op when absent.
|
|
154
|
+
*/
|
|
155
|
+
var update = (target, annotation, mutator) => update$1(target, annotation, mutator);
|
|
156
|
+
var getFromAst = Function.dual(2, (ast, annotation) => {
|
|
157
|
+
return getFromAst$1(ast, annotation);
|
|
158
|
+
});
|
|
159
|
+
/**
|
|
160
|
+
* Reactive atom for an annotation value on an entity instance.
|
|
161
|
+
* Fires only when the annotation value changes (mirrors `Obj.atom`, scoped to one annotation).
|
|
162
|
+
*/
|
|
163
|
+
var atom = makeAtom;
|
|
164
|
+
/**
|
|
165
|
+
* Reactive atom for a single key of a record-valued annotation on an entity instance.
|
|
166
|
+
* Reactivity is scoped to that key, and the value type is preserved (mirrors `Obj.atomProperty`).
|
|
167
|
+
*/
|
|
168
|
+
var atomProperty = makeProperty;
|
|
169
|
+
/**
|
|
170
|
+
* Set of annotation values.
|
|
171
|
+
*
|
|
172
|
+
* Can be used inside an object/relation schema:
|
|
173
|
+
*
|
|
174
|
+
* ```ts
|
|
175
|
+
* const Person = Schema.Struct({
|
|
176
|
+
* name: Schema.String,
|
|
177
|
+
* extensions: Annotation.Dictionary,
|
|
178
|
+
* });
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
var Dictionary = Dictionary$1;
|
|
182
|
+
/**
|
|
183
|
+
* Get the value of an annotation from a Dictionary.
|
|
184
|
+
*/
|
|
185
|
+
var getDictionary = Function.dual(2, (values, annotation) => {
|
|
186
|
+
return getDictionary$1(values, annotation);
|
|
187
|
+
});
|
|
188
|
+
/**
|
|
189
|
+
* Set the value of an annotation in a Dictionary.
|
|
190
|
+
*
|
|
191
|
+
* Can also be used within Obj.update callback:
|
|
192
|
+
*
|
|
193
|
+
* ```ts
|
|
194
|
+
* Obj.update(obj, (obj) => {
|
|
195
|
+
* Annotation.setDictionary(obj.annotations, ColorAnnotation, 'red');
|
|
196
|
+
* });
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
var setDictionary = Function.dual(3, (values, annotation, value) => {
|
|
200
|
+
return setDictionary$1(values, annotation, value);
|
|
201
|
+
});
|
|
202
|
+
/**
|
|
203
|
+
* Build a dictionary by mutating it in a callback.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* const dictionary = Annotation.buildDictionary((dictionary) => {
|
|
208
|
+
* Annotation.setDictionary(dictionary, ColorAnnotation, 'red');
|
|
209
|
+
* Annotation.setDictionary(dictionary, SizeAnnotation, '10px');
|
|
210
|
+
* });
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
var buildDictionary = (build) => {
|
|
214
|
+
const dictionary = Schema.encodeSync(Dictionary)({});
|
|
215
|
+
build(dictionary);
|
|
216
|
+
return dictionary;
|
|
217
|
+
};
|
|
218
|
+
//#endregion
|
|
219
|
+
export { atom as a, get as c, make as d, set as f, TypeId as i, getDictionary as l, update as m, Dictionary as n, atomProperty as o, setDictionary as p, Key as r, buildDictionary as s, Annotation_exports as t, getFromAst as u };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=chunk-Annotation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-Annotation.mjs","names":[],"sources":["../../src/internal/Annotation/atoms.ts","../../src/Annotation.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Atom from '@effect-atom/atom/Atom';\nimport * as Data from 'effect/Data';\nimport * as Option from 'effect/Option';\n\nimport { assertArgument } from '@dxos/invariant';\n\nimport type * as Annotation from '../../Annotation';\nimport type * as Entity from '../../Entity';\nimport { snapshotForComparison } from '../common/atom-snapshot';\nimport { subscribe } from '../common/proxy/reactive';\nimport { isEntity } from '../Entity';\nimport { get as getAnnotation } from './entity-dictionary';\n\n/**\n * Atom family for an annotation value on an entity instance.\n * Mirrors the object-property atom family: re-emits a fresh reference whenever the entity changes\n * (so an in-place array mutation is observed) and dedupes primitive values via `!==`.\n */\nconst annotationFamily = Atom.family((target: Entity.Unknown) =>\n Atom.family(<T>(annotation: Annotation.Annotation<T>): Atom.Atom<Option.Option<T>> => {\n const read = (): Option.Option<T> => Option.map(getAnnotation(target, annotation), snapshotForComparison);\n\n return Atom.make<Option.Option<T>>((get) => {\n let previous = read();\n\n const unsubscribe = subscribe(target, () => {\n const next = read();\n if (!sameOption(previous, next)) {\n previous = next;\n get.setSelf(next);\n }\n });\n get.addFinalizer(() => unsubscribe());\n\n return previous;\n }).pipe(Atom.keepAlive);\n }),\n);\n\n/**\n * Atom family for a single key of a record-valued annotation on an entity instance.\n * Keyed by a value-equal `Data.tuple([target, annotation, key])` so nested families are avoided.\n */\nconst annotationPropertyFamily = Atom.family(\n ([target, annotation, key]: readonly [\n Entity.Unknown,\n Annotation.Annotation<Record<string, any>>,\n string,\n ]): Atom.Atom<any> => {\n const read = (): unknown =>\n getAnnotation(target, annotation).pipe(\n Option.map((value) => snapshotForComparison(value[key])),\n Option.getOrUndefined,\n );\n\n return Atom.make<unknown>((get) => {\n let previous = read();\n\n const unsubscribe = subscribe(target, () => {\n const next = read();\n if (next !== previous) {\n previous = next;\n get.setSelf(next);\n }\n });\n get.addFinalizer(() => unsubscribe());\n\n return previous;\n }).pipe(Atom.keepAlive);\n },\n);\n\n/** Equal when both empty, or both present with the same (snapshotted) value. */\nconst sameOption = <T>(a: Option.Option<T>, b: Option.Option<T>): boolean =>\n Option.isNone(a) || Option.isNone(b) ? Option.isNone(a) && Option.isNone(b) : a.value === b.value;\n\n/**\n * Reactive atom for an annotation value on an entity instance. Emits a shallow snapshot (a fresh\n * reference for objects/arrays) so dependent atoms recompute on change. Mirrors {@link makeProperty}.\n */\nexport const makeAtom = <T>(\n target: Entity.Unknown,\n annotation: Annotation.Annotation<T>,\n): Atom.Atom<Option.Option<T>> => {\n assertArgument(isEntity(target), 'target', 'Must be a reactive ECHO entity');\n return annotationFamily(target)(annotation);\n};\n\n/**\n * Reactive atom for a single key of a record-valued annotation on an entity instance.\n */\nexport const makeProperty = <V>(\n target: Entity.Unknown,\n annotation: Annotation.Annotation<Record<string, V>>,\n key: string,\n): Atom.Atom<V | undefined> => {\n assertArgument(isEntity(target), 'target', 'Must be a reactive ECHO entity');\n // The flattened family key is a single concrete tuple type, so the generic `V` is erased at the\n // family boundary and recovered here; no typed alternative exists for a per-call-generic family.\n return annotationPropertyFamily(\n Data.tuple(target, annotation as Annotation.Annotation<Record<string, any>>, key),\n ) as Atom.Atom<V | undefined>;\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nexport {\n DEFAULT_LAYOUT_NAME,\n DescriptionAnnotation,\n FieldLookupAnnotationId,\n FormCreateAnnotation,\n FormCreateAnnotationId,\n FormInlineAnnotation,\n FormInputAnnotation,\n FormLayoutAnnotation,\n FormLayoutAnnotationId,\n type FormLayoutMap,\n FormOrderedAnnotation,\n GeneratorAnnotation,\n GeneratorAnnotationId,\n type GeneratorAnnotationValue,\n HiddenAnnotation,\n IconAnnotation,\n IconFromRefAnnotation,\n LabelAnnotation,\n ReferenceAnnotation,\n ReferenceAnnotationId,\n type ReferenceAnnotationValue,\n TypeAnnotation,\n getDescriptionWithSchema,\n getLabelWithSchema,\n getTypeAnnotation,\n getTypeIdentifierAnnotation,\n setDescriptionWithSchema,\n setLabelWithSchema,\n} from './internal/Annotation';\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as Types from 'effect/Types';\n\nimport * as Entity from './Entity';\nimport * as internalAnnotations from './internal/Annotation';\nimport * as annotationAtoms from './internal/Annotation/atoms';\n\nexport const TypeId = '~@dxos/echo/Annotation' as const;\nexport type TypeId = typeof TypeId;\n\n// TODO(dmaretskyi): Reconcile different get/set styles: mutate in-place, return.\n// TODO(dmaretskyi): Reconcile Annotation methods vs static functions.\n// TODO(dmaretskyi): Reconcile Annotation.Key vs DXN -- work-out approach to versioning.\n\n/**\n * Annotation is a typed property that can be assigned to a schema or an entity instance.\n */\nexport interface Annotation<T> {\n [TypeId]: {\n _Type: T;\n };\n\n // TODO(dmaretskyi): Make this a DXN?\n /**\n * Unique fully-qualified identifier for the annotation.\n * @example \"org.dxos.annotation.color\"\n */\n readonly key: Key;\n\n /**\n * Schema of the annotation value.\n */\n readonly schema: Schema.Schema<T, unknown, never>;\n\n /**\n * Get the annotation value from an Effect schema.\n *\n * Only accepts `Schema.Schema.Any` — to read an annotation off a `Type.Type`\n * entity, unwrap it first with `Type.getSchema(entity)`. This keeps the\n * annotation pipeline single-shaped and forces annotations to live on the\n * source schema, not on the post-construction Type entity.\n */\n get: (schema: Schema.Schema.Any) => Option.Option<T>;\n /**\n * Get the annotation value from the AST.\n */\n getFromAst: (ast: SchemaAST.AST) => Option.Option<T>;\n /**\n * Set the annotation on an Effect schema.\n *\n * Only accepts `Schema.Schema.Any` — annotations must be applied to the\n * source schema BEFORE wrapping it with `Type.makeObject` / `Type.makeRelation`.\n * In a pipe, place every `Annotation.X.set(...)` before the `Type.make...` step.\n */\n set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;\n}\n\nexport const Key = internalAnnotations.Key;\nexport type Key = Schema.Schema.Type<typeof Key>;\n\ninterface MakeProps<T> {\n id: string;\n schema: Schema.Schema<T, any, never>;\n}\n\n/**\n * Create a new schema annotation.\n * Annotation can be assigned both to fields and to the schema itself.\n * Annotation is serialized with the schema.\n *\n * @example\n * ```ts\n * const ColorAnnotation = Annotation.make({\n * id: 'org.dxos.annotation.color',\n * schema: Schema.String,\n * });\n *\n * const schema = Schema.String.annotations(ColorAnnotation.set('red'));\n * ```\n */\nexport const make: <T>(props: MakeProps<T>) => Annotation<T> = internalAnnotations.makeUserAnnotation;\n\n/**\n * Get the value of an annotation from an entity instance or snapshot.\n * For schema-level reads use the annotation instance method (e.g. `ColorAnnotation.get(schema)`).\n * For getting an annotation value from a dictionary, use `getDictionary`.\n *\n * The value is read-only (schema types are readonly by default): to mutate an annotation (including\n * in-place array splices) use `Annotation.update` or `Annotation.set`, which open a change transaction.\n * A read-only return is sound regardless of context — the reactive proxy rejects mutation outside an\n * `Obj.update`.\n */\nexport const get: {\n <T>(annotation: Annotation<T>): (target: Entity.Unknown | Entity.Snapshot) => Option.Option<T>;\n <T>(target: Entity.Unknown | Entity.Snapshot, annotation: Annotation<T>): Option.Option<T>;\n} = Function.dual<\n <T>(annotation: Annotation<T>) => (target: Entity.Unknown | Entity.Snapshot) => Option.Option<T>,\n <T>(target: Entity.Unknown | Entity.Snapshot, annotation: Annotation<T>) => Option.Option<T>\n>(2, (target, annotation) => {\n return internalAnnotations.get(target, annotation);\n});\n\n/**\n * Set the value of an annotation on an entity instance.\n * For schema-level writes use the annotation instance method (e.g. `ColorAnnotation.set('red')`).\n * For setting an annotation value on a dictionary, use `setDictionary`.\n */\nexport const set: {\n <T>(annotation: Annotation<T>, value: T): (target: Entity.Mutable<Entity.Unknown>) => void;\n <T>(target: Entity.Mutable<Entity.Unknown>, annotation: Annotation<T>, value: T): void;\n} = Function.dual<\n <T>(annotation: Annotation<T>, value: T) => (target: Entity.Mutable<Entity.Unknown>) => void,\n <T>(target: Entity.Mutable<Entity.Unknown>, annotation: Annotation<T>, value: T) => void\n>(3, (target, annotation, value) => {\n return internalAnnotations.set(target, annotation, value);\n});\n\n/**\n * Mutate an existing annotation value in place via a callback, wrapping the mutation in a change\n * transaction (like `Obj.update`). The result is validated against the annotation's schema. Use when\n * only an annotation needs to change; to mutate it alongside other changes (unvalidated), call\n * `Annotation.get` inside an existing `Obj.update` instead. No-op when absent.\n */\nexport const update = <T>(\n target: Entity.Unknown,\n annotation: Annotation<T>,\n mutator: (value: Entity.Mutable<T>) => void,\n): void => internalAnnotations.update(target, annotation, mutator);\n\nexport const getFromAst: {\n <T>(annotation: Annotation<T>): (ast: SchemaAST.AST) => Option.Option<T>;\n <T>(ast: SchemaAST.AST, annotation: Annotation<T>): Option.Option<T>;\n} = Function.dual<\n <T>(annotation: Annotation<T>) => (ast: SchemaAST.AST) => Option.Option<T>,\n <T>(ast: SchemaAST.AST, annotation: Annotation<T>) => Option.Option<T>\n>(2, (ast, annotation) => {\n return internalAnnotations.getFromAst(ast, annotation);\n});\n\n/**\n * Reactive atom for an annotation value on an entity instance.\n * Fires only when the annotation value changes (mirrors `Obj.atom`, scoped to one annotation).\n */\nexport const atom = annotationAtoms.makeAtom;\n\n/**\n * Reactive atom for a single key of a record-valued annotation on an entity instance.\n * Reactivity is scoped to that key, and the value type is preserved (mirrors `Obj.atomProperty`).\n */\nexport const atomProperty = annotationAtoms.makeProperty;\n\n/**\n * Set of annotation values.\n *\n * Can be used inside an object/relation schema:\n *\n * ```ts\n * const Person = Schema.Struct({\n * name: Schema.String,\n * extensions: Annotation.Dictionary,\n * });\n * ```\n */\nexport const Dictionary = internalAnnotations.Dictionary;\nexport interface Dictionary extends Schema.Schema.Type<typeof Dictionary> {}\n\n/**\n * Get the value of an annotation from a Dictionary.\n */\nexport const getDictionary: {\n <T>(annotation: Annotation<T>): (values: Dictionary) => Option.Option<T>;\n <T>(values: Dictionary, annotation: Annotation<T>): Option.Option<T>;\n} = Function.dual<\n <T>(annotation: Annotation<T>) => (values: Dictionary) => Option.Option<T>,\n <T>(values: Dictionary, annotation: Annotation<T>) => Option.Option<T>\n>(2, (values, annotation) => {\n return internalAnnotations.getDictionary(values, annotation);\n});\n\n/**\n * Set the value of an annotation in a Dictionary.\n *\n * Can also be used within Obj.update callback:\n *\n * ```ts\n * Obj.update(obj, (obj) => {\n * Annotation.setDictionary(obj.annotations, ColorAnnotation, 'red');\n * });\n * ```\n */\nexport const setDictionary: {\n <T>(annotation: Annotation<T>, value: T): (values: Dictionary) => void;\n <T>(values: Types.Mutable<Dictionary>, annotation: Annotation<T>, value: T): void;\n} = Function.dual<\n <T>(annotation: Annotation<T>, value: T) => (values: Dictionary) => void,\n <T>(values: Types.Mutable<Dictionary>, annotation: Annotation<T>, value: T) => void\n>(3, (values, annotation, value) => {\n return internalAnnotations.setDictionary(values, annotation, value);\n});\n\n/**\n * Build a dictionary by mutating it in a callback.\n *\n * @example\n * ```ts\n * const dictionary = Annotation.buildDictionary((dictionary) => {\n * Annotation.setDictionary(dictionary, ColorAnnotation, 'red');\n * Annotation.setDictionary(dictionary, SizeAnnotation, '10px');\n * });\n * ```\n */\nexport const buildDictionary = (build: (dictionary: Types.Mutable<Dictionary>) => void): Dictionary => {\n const dictionary = Schema.encodeSync(Dictionary)({});\n build(dictionary);\n return dictionary;\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,IAAM,mBAAmB,KAAK,QAAQ,WACpC,KAAK,QAAW,eAAsE;CACpF,MAAM,aAA+B,OAAO,IAAI,MAAc,QAAQ,UAAU,GAAG,qBAAqB;CAExG,OAAO,KAAK,MAAwB,QAAQ;EAC1C,IAAI,WAAW,KAAK;EAEpB,MAAM,cAAc,UAAU,cAAc;GAC1C,MAAM,OAAO,KAAK;GAClB,IAAI,CAAC,WAAW,UAAU,IAAI,GAAG;IAC/B,WAAW;IACX,IAAI,QAAQ,IAAI;GAClB;EACF,CAAC;EACD,IAAI,mBAAmB,YAAY,CAAC;EAEpC,OAAO;CACT,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS;AACxB,CAAC,CACH;;;;;AAMA,IAAM,2BAA2B,KAAK,QACnC,CAAC,QAAQ,YAAY,SAIA;CACpB,MAAM,aACJ,MAAc,QAAQ,UAAU,CAAC,CAAC,KAChC,OAAO,KAAK,UAAU,sBAAsB,MAAM,IAAI,CAAC,GACvD,OAAO,cACT;CAEF,OAAO,KAAK,MAAe,QAAQ;EACjC,IAAI,WAAW,KAAK;EAEpB,MAAM,cAAc,UAAU,cAAc;GAC1C,MAAM,OAAO,KAAK;GAClB,IAAI,SAAS,UAAU;IACrB,WAAW;IACX,IAAI,QAAQ,IAAI;GAClB;EACF,CAAC;EACD,IAAI,mBAAmB,YAAY,CAAC;EAEpC,OAAO;CACT,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS;AACxB,CACF;;AAGA,IAAM,cAAiB,GAAqB,MAC1C,OAAO,OAAO,CAAC,KAAK,OAAO,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,OAAO,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE;;;;;AAM9F,IAAa,YACX,QACA,eACgC;CAChC,eAAe,SAAS,MAAM,GAAG,UAAU,gCAAgC;CAC3E,OAAO,iBAAiB,MAAM,CAAC,CAAC,UAAU;AAC5C;;;;AAKA,IAAa,gBACX,QACA,YACA,QAC6B;CAC7B,eAAe,SAAS,MAAM,GAAG,UAAU,gCAAgC;CAG3E,OAAO,yBACL,KAAK,MAAM,QAAQ,YAA0D,GAAG,CAClF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA,IAAa,SAAS;AAkDtB,IAAa,MAAM;;;;;;;;;;;;;;;;AAuBnB,IAAa,OAAkD;;;;;;;;;;;AAY/D,IAAa,MAGT,SAAS,KAGX,IAAI,QAAQ,eAAe;CAC3B,OAAO,MAAwB,QAAQ,UAAU;AACnD,CAAC;;;;;;AAOD,IAAa,MAGT,SAAS,KAGX,IAAI,QAAQ,YAAY,UAAU;CAClC,OAAO,MAAwB,QAAQ,YAAY,KAAK;AAC1D,CAAC;;;;;;;AAQD,IAAa,UACX,QACA,YACA,YACS,SAA2B,QAAQ,YAAY,OAAO;AAEjE,IAAa,aAGT,SAAS,KAGX,IAAI,KAAK,eAAe;CACxB,OAAO,aAA+B,KAAK,UAAU;AACvD,CAAC;;;;;AAMD,IAAa,OAAO;;;;;AAMpB,IAAa,eAAe;;;;;;;;;;;;;AAc5B,IAAa,aAAa;;;;AAM1B,IAAa,gBAGT,SAAS,KAGX,IAAI,QAAQ,eAAe;CAC3B,OAAO,gBAAkC,QAAQ,UAAU;AAC7D,CAAC;;;;;;;;;;;;AAaD,IAAa,gBAGT,SAAS,KAGX,IAAI,QAAQ,YAAY,UAAU;CAClC,OAAO,gBAAkC,QAAQ,YAAY,KAAK;AACpE,CAAC;;;;;;;;;;;;AAaD,IAAa,mBAAmB,UAAuE;CACrG,MAAM,aAAa,OAAO,WAAW,UAAU,CAAC,CAAC,CAAC,CAAC;CACnD,MAAM,UAAU;CAChB,OAAO;AACT"}
|