@voidhash/mimic 0.0.2 → 0.0.4
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/.turbo/turbo-build.log +257 -42
- package/dist/Document.cjs +152 -0
- package/dist/Document.d.cts +67 -0
- package/dist/Document.d.cts.map +1 -0
- package/dist/Document.d.mts +68 -0
- package/dist/Document.d.mts.map +1 -0
- package/dist/Document.mjs +147 -0
- package/dist/Document.mjs.map +1 -0
- package/dist/EffectSchema.cjs +180 -0
- package/dist/EffectSchema.d.cts +84 -0
- package/dist/EffectSchema.d.cts.map +1 -0
- package/dist/EffectSchema.d.mts +84 -0
- package/dist/EffectSchema.d.mts.map +1 -0
- package/dist/EffectSchema.mjs +176 -0
- package/dist/EffectSchema.mjs.map +1 -0
- package/dist/FractionalIndex.cjs +365 -0
- package/dist/FractionalIndex.mjs +364 -0
- package/dist/FractionalIndex.mjs.map +1 -0
- package/dist/Operation.cjs +53 -0
- package/dist/Operation.d.cts +39 -0
- package/dist/Operation.d.cts.map +1 -0
- package/dist/Operation.d.mts +39 -0
- package/dist/Operation.d.mts.map +1 -0
- package/dist/Operation.mjs +46 -0
- package/dist/Operation.mjs.map +1 -0
- package/dist/OperationDefinition.cjs +13 -0
- package/dist/OperationDefinition.d.cts +12 -0
- package/dist/OperationDefinition.d.cts.map +1 -0
- package/dist/OperationDefinition.d.mts +12 -0
- package/dist/OperationDefinition.d.mts.map +1 -0
- package/dist/OperationDefinition.mjs +13 -0
- package/dist/OperationDefinition.mjs.map +1 -0
- package/dist/OperationPath.cjs +148 -0
- package/dist/OperationPath.d.cts +60 -0
- package/dist/OperationPath.d.cts.map +1 -0
- package/dist/OperationPath.d.mts +60 -0
- package/dist/OperationPath.d.mts.map +1 -0
- package/dist/OperationPath.mjs +138 -0
- package/dist/OperationPath.mjs.map +1 -0
- package/dist/{Presence-gWrmGBeu.cjs → Presence.cjs} +4 -39
- package/dist/{Presence-N8u7Eppr.d.mts → Presence.d.cts} +2 -2
- package/dist/Presence.d.cts.map +1 -0
- package/dist/{Presence-DKKP4v5X.d.cts → Presence.d.mts} +2 -2
- package/dist/Presence.d.mts.map +1 -0
- package/dist/{Presence-DdMVKcOv.mjs → Presence.mjs} +3 -28
- package/dist/Presence.mjs.map +1 -0
- package/dist/Primitive.cjs +52 -0
- package/dist/Primitive.d.cts +20 -0
- package/dist/Primitive.d.cts.map +1 -0
- package/dist/Primitive.d.mts +20 -0
- package/dist/Primitive.d.mts.map +1 -0
- package/dist/Primitive.mjs +48 -0
- package/dist/Primitive.mjs.map +1 -0
- package/dist/ProxyEnvironment.cjs +34 -0
- package/dist/ProxyEnvironment.d.cts +31 -0
- package/dist/ProxyEnvironment.d.cts.map +1 -0
- package/dist/ProxyEnvironment.d.mts +31 -0
- package/dist/ProxyEnvironment.d.mts.map +1 -0
- package/dist/ProxyEnvironment.mjs +29 -0
- package/dist/ProxyEnvironment.mjs.map +1 -0
- package/dist/Transaction.cjs +66 -0
- package/dist/Transaction.d.cts +56 -0
- package/dist/Transaction.d.cts.map +1 -0
- package/dist/Transaction.d.mts +56 -0
- package/dist/Transaction.d.mts.map +1 -0
- package/dist/Transaction.mjs +58 -0
- package/dist/Transaction.mjs.map +1 -0
- package/dist/Transform.cjs +11 -0
- package/dist/Transform.d.cts +21 -0
- package/dist/Transform.d.cts.map +1 -0
- package/dist/Transform.d.mts +21 -0
- package/dist/Transform.d.mts.map +1 -0
- package/dist/Transform.mjs +6 -0
- package/dist/Transform.mjs.map +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs +27 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs +27 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs +16 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs +16 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs +18 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs +12 -0
- package/dist/_virtual/rolldown_runtime.cjs +43 -0
- package/dist/{chunk-CLMFDpHK.mjs → _virtual/rolldown_runtime.mjs} +1 -1
- package/dist/client/ClientDocument.cjs +590 -0
- package/dist/client/ClientDocument.d.cts +161 -0
- package/dist/client/ClientDocument.d.cts.map +1 -0
- package/dist/client/ClientDocument.d.mts +162 -0
- package/dist/client/ClientDocument.d.mts.map +1 -0
- package/dist/client/ClientDocument.mjs +586 -0
- package/dist/client/ClientDocument.mjs.map +1 -0
- package/dist/client/Rebase.cjs +204 -0
- package/dist/client/Rebase.d.cts +87 -0
- package/dist/client/Rebase.d.cts.map +1 -0
- package/dist/client/Rebase.d.mts +88 -0
- package/dist/client/Rebase.d.mts.map +1 -0
- package/dist/client/Rebase.mjs +198 -0
- package/dist/client/Rebase.mjs.map +1 -0
- package/dist/client/StateMonitor.cjs +133 -0
- package/dist/client/StateMonitor.d.cts +122 -0
- package/dist/client/StateMonitor.d.cts.map +1 -0
- package/dist/client/StateMonitor.d.mts +122 -0
- package/dist/client/StateMonitor.d.mts.map +1 -0
- package/dist/client/StateMonitor.mjs +129 -0
- package/dist/client/StateMonitor.mjs.map +1 -0
- package/dist/client/Transport.cjs +11 -0
- package/dist/client/Transport.d.cts +237 -0
- package/dist/client/Transport.d.cts.map +1 -0
- package/dist/client/Transport.d.mts +237 -0
- package/dist/client/Transport.d.mts.map +1 -0
- package/dist/client/Transport.mjs +6 -0
- package/dist/client/Transport.mjs.map +1 -0
- package/dist/client/WebSocketTransport.cjs +396 -0
- package/dist/client/WebSocketTransport.d.cts +29 -0
- package/dist/client/WebSocketTransport.d.cts.map +1 -0
- package/dist/client/WebSocketTransport.d.mts +29 -0
- package/dist/client/WebSocketTransport.d.mts.map +1 -0
- package/dist/client/WebSocketTransport.mjs +392 -0
- package/dist/client/WebSocketTransport.mjs.map +1 -0
- package/dist/client/errors.cjs +135 -0
- package/dist/client/errors.d.cts +87 -0
- package/dist/client/errors.d.cts.map +1 -0
- package/dist/client/errors.d.mts +87 -0
- package/dist/client/errors.d.mts.map +1 -0
- package/dist/client/errors.mjs +127 -0
- package/dist/client/errors.mjs.map +1 -0
- package/dist/client/index.cjs +22 -1424
- package/dist/client/index.d.cts +8 -692
- package/dist/client/index.d.mts +8 -692
- package/dist/client/index.mjs +9 -1413
- package/dist/index.cjs +20 -2973
- package/dist/index.d.cts +12 -419
- package/dist/index.d.mts +12 -419
- package/dist/index.mjs +13 -2968
- package/dist/primitives/Array.cjs +302 -0
- package/dist/primitives/Array.d.cts +95 -0
- package/dist/primitives/Array.d.cts.map +1 -0
- package/dist/primitives/Array.d.mts +95 -0
- package/dist/primitives/Array.d.mts.map +1 -0
- package/dist/primitives/Array.mjs +301 -0
- package/dist/primitives/Array.mjs.map +1 -0
- package/dist/primitives/Boolean.cjs +95 -0
- package/dist/primitives/Boolean.d.cts +44 -0
- package/dist/primitives/Boolean.d.cts.map +1 -0
- package/dist/primitives/Boolean.d.mts +44 -0
- package/dist/primitives/Boolean.d.mts.map +1 -0
- package/dist/primitives/Boolean.mjs +94 -0
- package/dist/primitives/Boolean.mjs.map +1 -0
- package/dist/primitives/Either.cjs +200 -0
- package/dist/primitives/Either.d.cts +113 -0
- package/dist/primitives/Either.d.cts.map +1 -0
- package/dist/primitives/Either.d.mts +113 -0
- package/dist/primitives/Either.d.mts.map +1 -0
- package/dist/primitives/Either.mjs +199 -0
- package/dist/primitives/Either.mjs.map +1 -0
- package/dist/primitives/Lazy.cjs +46 -0
- package/dist/primitives/Lazy.d.cts +46 -0
- package/dist/primitives/Lazy.d.cts.map +1 -0
- package/dist/primitives/Lazy.d.mts +46 -0
- package/dist/primitives/Lazy.d.mts.map +1 -0
- package/dist/primitives/Lazy.mjs +46 -0
- package/dist/primitives/Lazy.mjs.map +1 -0
- package/dist/primitives/Literal.cjs +91 -0
- package/dist/primitives/Literal.d.cts +46 -0
- package/dist/primitives/Literal.d.cts.map +1 -0
- package/dist/primitives/Literal.d.mts +46 -0
- package/dist/primitives/Literal.d.mts.map +1 -0
- package/dist/primitives/Literal.mjs +90 -0
- package/dist/primitives/Literal.mjs.map +1 -0
- package/dist/primitives/Number.cjs +115 -0
- package/dist/primitives/Number.d.cts +54 -0
- package/dist/primitives/Number.d.cts.map +1 -0
- package/dist/primitives/Number.d.mts +54 -0
- package/dist/primitives/Number.d.mts.map +1 -0
- package/dist/primitives/Number.mjs +114 -0
- package/dist/primitives/Number.mjs.map +1 -0
- package/dist/primitives/String.cjs +127 -0
- package/dist/primitives/String.d.cts +56 -0
- package/dist/primitives/String.d.cts.map +1 -0
- package/dist/primitives/String.d.mts +56 -0
- package/dist/primitives/String.d.mts.map +1 -0
- package/dist/primitives/String.mjs +126 -0
- package/dist/primitives/String.mjs.map +1 -0
- package/dist/primitives/Struct.cjs +207 -0
- package/dist/primitives/Struct.d.cts +96 -0
- package/dist/primitives/Struct.d.cts.map +1 -0
- package/dist/primitives/Struct.d.mts +97 -0
- package/dist/primitives/Struct.d.mts.map +1 -0
- package/dist/primitives/Struct.mjs +206 -0
- package/dist/primitives/Struct.mjs.map +1 -0
- package/dist/primitives/Tree.cjs +575 -0
- package/dist/primitives/Tree.d.cts +185 -0
- package/dist/primitives/Tree.d.cts.map +1 -0
- package/dist/primitives/Tree.d.mts +185 -0
- package/dist/primitives/Tree.d.mts.map +1 -0
- package/dist/primitives/Tree.mjs +574 -0
- package/dist/primitives/Tree.mjs.map +1 -0
- package/dist/primitives/TreeNode.cjs +73 -0
- package/dist/primitives/TreeNode.d.cts +92 -0
- package/dist/primitives/TreeNode.d.cts.map +1 -0
- package/dist/primitives/TreeNode.d.mts +93 -0
- package/dist/primitives/TreeNode.d.mts.map +1 -0
- package/dist/primitives/TreeNode.mjs +72 -0
- package/dist/primitives/TreeNode.mjs.map +1 -0
- package/dist/primitives/Union.cjs +170 -0
- package/dist/primitives/Union.d.cts +81 -0
- package/dist/primitives/Union.d.cts.map +1 -0
- package/dist/primitives/Union.d.mts +81 -0
- package/dist/primitives/Union.d.mts.map +1 -0
- package/dist/primitives/Union.mjs +169 -0
- package/dist/primitives/Union.mjs.map +1 -0
- package/dist/primitives/shared.cjs +60 -0
- package/dist/primitives/shared.d.cts +147 -0
- package/dist/primitives/shared.d.cts.map +1 -0
- package/dist/primitives/shared.d.mts +147 -0
- package/dist/primitives/shared.d.mts.map +1 -0
- package/dist/primitives/shared.mjs +58 -0
- package/dist/primitives/shared.mjs.map +1 -0
- package/dist/server/ServerDocument.cjs +110 -0
- package/dist/server/ServerDocument.d.cts +98 -0
- package/dist/server/ServerDocument.d.cts.map +1 -0
- package/dist/server/ServerDocument.d.mts +99 -0
- package/dist/server/ServerDocument.d.mts.map +1 -0
- package/dist/server/ServerDocument.mjs +106 -0
- package/dist/server/ServerDocument.mjs.map +1 -0
- package/dist/server/errors.cjs +85 -0
- package/dist/server/errors.d.cts +53 -0
- package/dist/server/errors.d.cts.map +1 -0
- package/dist/server/errors.d.mts +53 -0
- package/dist/server/errors.d.mts.map +1 -0
- package/dist/server/errors.mjs +81 -0
- package/dist/server/errors.mjs.map +1 -0
- package/dist/server/index.cjs +9 -185
- package/dist/server/index.d.cts +3 -148
- package/dist/server/index.d.mts +3 -148
- package/dist/server/index.mjs +3 -181
- package/dist/types/index.cjs +16 -0
- package/dist/types/index.d.cts +16 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.mts +16 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/index.mjs +12 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/utils/tree-helpers.cjs +443 -0
- package/dist/utils/tree-helpers.d.cts +280 -0
- package/dist/utils/tree-helpers.d.cts.map +1 -0
- package/dist/utils/tree-helpers.d.mts +280 -0
- package/dist/utils/tree-helpers.d.mts.map +1 -0
- package/dist/utils/tree-helpers.mjs +439 -0
- package/dist/utils/tree-helpers.mjs.map +1 -0
- package/package.json +2 -2
- package/tsdown.config.ts +1 -1
- package/dist/Document-ChuFrTk1.cjs +0 -571
- package/dist/Document-CwiAFTIq.mjs +0 -438
- package/dist/Document-CwiAFTIq.mjs.map +0 -1
- package/dist/Presence-DKKP4v5X.d.cts.map +0 -1
- package/dist/Presence-DdMVKcOv.mjs.map +0 -1
- package/dist/Presence-N8u7Eppr.d.mts.map +0 -1
- package/dist/Primitive-DqQFc3Gu.d.mts +0 -1180
- package/dist/Primitive-DqQFc3Gu.d.mts.map +0 -1
- package/dist/Primitive-awpEjnKL.d.cts +0 -1180
- package/dist/Primitive-awpEjnKL.d.cts.map +0 -1
- package/dist/client/index.d.cts.map +0 -1
- package/dist/client/index.d.mts.map +0 -1
- package/dist/client/index.mjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/server/index.d.cts.map +0 -1
- package/dist/server/index.d.mts.map +0 -1
- package/dist/server/index.mjs.map +0 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { InferProxy, InferSetInput, InferUpdateInput, Primitive, PrimitiveInternal, Validator } from "./shared.cjs";
|
|
2
|
+
import { StructPrimitive, StructSetInput, StructUpdateValue } from "./Struct.cjs";
|
|
3
|
+
import { AnyTreeNodePrimitive, InferTreeNodeChildren, InferTreeNodeDataState, InferTreeNodeType } from "./TreeNode.cjs";
|
|
4
|
+
|
|
5
|
+
//#region src/primitives/Tree.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A node in the tree state (flat storage format)
|
|
9
|
+
*/
|
|
10
|
+
interface TreeNodeState {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly type: string;
|
|
13
|
+
readonly parentId: string | null;
|
|
14
|
+
readonly pos: string;
|
|
15
|
+
readonly data: unknown;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Typed node state for a specific node type
|
|
19
|
+
*/
|
|
20
|
+
interface TypedTreeNodeState<TNode extends AnyTreeNodePrimitive> {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
23
|
+
readonly parentId: string | null;
|
|
24
|
+
readonly pos: string;
|
|
25
|
+
readonly data: InferTreeNodeDataState<TNode>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The state type for trees - a flat array of nodes
|
|
29
|
+
*/
|
|
30
|
+
type TreeState<_TRoot extends AnyTreeNodePrimitive> = readonly TreeNodeState[];
|
|
31
|
+
/**
|
|
32
|
+
* Snapshot of a single node for UI rendering (data properties spread at node level)
|
|
33
|
+
*/
|
|
34
|
+
type TreeNodeSnapshot<TNode extends AnyTreeNodePrimitive> = {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
37
|
+
readonly children: TreeNodeSnapshot<InferTreeNodeChildren<TNode>>[];
|
|
38
|
+
} & InferTreeNodeDataState<TNode>;
|
|
39
|
+
/**
|
|
40
|
+
* Infer the snapshot type for a tree (recursive tree structure for UI)
|
|
41
|
+
*/
|
|
42
|
+
type InferTreeSnapshot<T extends TreePrimitive<any>> = T extends TreePrimitive<infer TRoot> ? TreeNodeSnapshot<TRoot> : never;
|
|
43
|
+
/**
|
|
44
|
+
* Helper type to infer the update value type from a TreeNode's data.
|
|
45
|
+
* Uses StructUpdateValue directly to get field-level partial update semantics.
|
|
46
|
+
* All fields are optional in update operations.
|
|
47
|
+
*/
|
|
48
|
+
type TreeNodeUpdateValue<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructUpdateValue<TFields> : InferUpdateInput<TNode["data"]>;
|
|
49
|
+
/**
|
|
50
|
+
* Helper type to infer the input type for node data (respects field defaults).
|
|
51
|
+
* Uses StructSetInput directly so that:
|
|
52
|
+
* - Fields that are required AND have no default must be provided
|
|
53
|
+
* - Fields that are optional OR have defaults can be omitted
|
|
54
|
+
*
|
|
55
|
+
* This bypasses the struct-level NeedsValue wrapper since tree inserts
|
|
56
|
+
* always require a data object (even if empty for all-optional fields).
|
|
57
|
+
*/
|
|
58
|
+
type TreeNodeDataSetInput<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TNode["data"]>;
|
|
59
|
+
/**
|
|
60
|
+
* Typed proxy for a specific node type - provides type-safe data access
|
|
61
|
+
*/
|
|
62
|
+
interface TypedNodeProxy<TNode extends AnyTreeNodePrimitive> {
|
|
63
|
+
/** The node ID */
|
|
64
|
+
readonly id: string;
|
|
65
|
+
/** The node type */
|
|
66
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
67
|
+
/** Access the node's data proxy */
|
|
68
|
+
readonly data: InferProxy<TNode["data"]>;
|
|
69
|
+
/** Get the raw node state */
|
|
70
|
+
get(): TypedTreeNodeState<TNode>;
|
|
71
|
+
/** Updates only the specified data fields (partial update, handles nested structs recursively) */
|
|
72
|
+
update(value: TreeNodeUpdateValue<TNode>): void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Node proxy with type narrowing capabilities
|
|
76
|
+
*/
|
|
77
|
+
interface TreeNodeProxyBase<_TRoot extends AnyTreeNodePrimitive> {
|
|
78
|
+
/** The node ID */
|
|
79
|
+
readonly id: string;
|
|
80
|
+
/** The node type (string) */
|
|
81
|
+
readonly type: string;
|
|
82
|
+
/** Type guard - narrows the proxy to a specific node type */
|
|
83
|
+
is<TNode extends AnyTreeNodePrimitive>(nodeType: TNode): this is TypedNodeProxy<TNode>;
|
|
84
|
+
/** Type assertion - returns typed proxy (throws if wrong type) */
|
|
85
|
+
as<TNode extends AnyTreeNodePrimitive>(nodeType: TNode): TypedNodeProxy<TNode>;
|
|
86
|
+
/** Get the raw node state */
|
|
87
|
+
get(): TreeNodeState;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Proxy for accessing and modifying tree nodes
|
|
91
|
+
*/
|
|
92
|
+
interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
93
|
+
/** Gets the entire tree state (flat array of nodes) */
|
|
94
|
+
get(): TreeState<TRoot$1>;
|
|
95
|
+
/** Replaces the entire tree */
|
|
96
|
+
set(nodes: TreeState<TRoot$1>): void;
|
|
97
|
+
/** Gets the root node state */
|
|
98
|
+
root(): TypedTreeNodeState<TRoot$1> | undefined;
|
|
99
|
+
/** Gets ordered children states of a parent (null for root's children) */
|
|
100
|
+
children(parentId: string | null): TreeNodeState[];
|
|
101
|
+
/** Gets a node proxy by ID with type narrowing capabilities */
|
|
102
|
+
node(id: string): TreeNodeProxyBase<TRoot$1> | undefined;
|
|
103
|
+
/** Insert a new node as the first child (applies defaults for node data) */
|
|
104
|
+
insertFirst<TNode extends AnyTreeNodePrimitive>(parentId: string | null, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
105
|
+
/** Insert a new node as the last child (applies defaults for node data) */
|
|
106
|
+
insertLast<TNode extends AnyTreeNodePrimitive>(parentId: string | null, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
107
|
+
/** Insert a new node at a specific index among siblings (applies defaults for node data) */
|
|
108
|
+
insertAt<TNode extends AnyTreeNodePrimitive>(parentId: string | null, index: number, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
109
|
+
/** Insert a new node after a sibling (applies defaults for node data) */
|
|
110
|
+
insertAfter<TNode extends AnyTreeNodePrimitive>(siblingId: string, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
111
|
+
/** Insert a new node before a sibling (applies defaults for node data) */
|
|
112
|
+
insertBefore<TNode extends AnyTreeNodePrimitive>(siblingId: string, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
113
|
+
/** Remove a node and all its descendants */
|
|
114
|
+
remove(id: string): void;
|
|
115
|
+
/** Move a node to a new parent at a specific index */
|
|
116
|
+
move(nodeId: string, newParentId: string | null, toIndex: number): void;
|
|
117
|
+
/** Move a node after a sibling */
|
|
118
|
+
moveAfter(nodeId: string, siblingId: string): void;
|
|
119
|
+
/** Move a node before a sibling */
|
|
120
|
+
moveBefore(nodeId: string, siblingId: string): void;
|
|
121
|
+
/** Move a node to be the first child of a parent */
|
|
122
|
+
moveToFirst(nodeId: string, newParentId: string | null): void;
|
|
123
|
+
/** Move a node to be the last child of a parent */
|
|
124
|
+
moveToLast(nodeId: string, newParentId: string | null): void;
|
|
125
|
+
/** Returns a typed proxy for a specific node's data */
|
|
126
|
+
at<TNode extends AnyTreeNodePrimitive>(id: string, nodeType: TNode): InferProxy<TNode["data"]>;
|
|
127
|
+
/** Updates only the specified data fields of a node (partial update) */
|
|
128
|
+
updateAt<TNode extends AnyTreeNodePrimitive>(id: string, nodeType: TNode, value: TreeNodeUpdateValue<TNode>): void;
|
|
129
|
+
/** Convert tree to a nested snapshot for UI rendering */
|
|
130
|
+
toSnapshot(): TreeNodeSnapshot<TRoot$1> | undefined;
|
|
131
|
+
}
|
|
132
|
+
interface TreePrimitiveSchema<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
133
|
+
readonly required: boolean;
|
|
134
|
+
readonly defaultValue: TreeState<TRoot$1> | undefined;
|
|
135
|
+
readonly root: TRoot$1;
|
|
136
|
+
readonly validators: readonly Validator<TreeState<TRoot$1>>[];
|
|
137
|
+
}
|
|
138
|
+
/** Input type for tree set() - tree state */
|
|
139
|
+
type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
|
|
140
|
+
/** Input type for tree update() - same as set() for trees */
|
|
141
|
+
type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
|
|
142
|
+
declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<TreeState<TRoot$1>, TreeProxy<TRoot$1>, TRequired, THasDefault, TreeSetInput<TRoot$1>, TreeUpdateInput<TRoot$1>> {
|
|
143
|
+
readonly _tag: "TreePrimitive";
|
|
144
|
+
readonly _State: TreeState<TRoot$1>;
|
|
145
|
+
readonly _Proxy: TreeProxy<TRoot$1>;
|
|
146
|
+
readonly _TRequired: TRequired;
|
|
147
|
+
readonly _THasDefault: THasDefault;
|
|
148
|
+
readonly TSetInput: TreeSetInput<TRoot$1>;
|
|
149
|
+
readonly TUpdateInput: TreeUpdateInput<TRoot$1>;
|
|
150
|
+
private readonly _schema;
|
|
151
|
+
private _nodeTypeRegistry;
|
|
152
|
+
private readonly _opDefinitions;
|
|
153
|
+
constructor(schema: TreePrimitiveSchema<TRoot$1>);
|
|
154
|
+
/** Mark this tree as required */
|
|
155
|
+
required(): TreePrimitive<TRoot$1, true, THasDefault>;
|
|
156
|
+
/** Set a default value for this tree */
|
|
157
|
+
default(defaultValue: TreeState<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
|
|
158
|
+
/** Get the root node type */
|
|
159
|
+
get root(): TRoot$1;
|
|
160
|
+
/** Add a custom validation rule */
|
|
161
|
+
refine(fn: (value: TreeState<TRoot$1>) => boolean, message: string): TreePrimitive<TRoot$1, TRequired, THasDefault>;
|
|
162
|
+
/**
|
|
163
|
+
* Build a registry of all node types reachable from root
|
|
164
|
+
*/
|
|
165
|
+
private _buildNodeTypeRegistry;
|
|
166
|
+
/**
|
|
167
|
+
* Get a node type primitive by its type string
|
|
168
|
+
*/
|
|
169
|
+
private _getNodeTypePrimitive;
|
|
170
|
+
/**
|
|
171
|
+
* Validate that a node type can be a child of a parent node type
|
|
172
|
+
*/
|
|
173
|
+
private _validateChildType;
|
|
174
|
+
readonly _internal: PrimitiveInternal<TreeState<TRoot$1>, TreeProxy<TRoot$1>>;
|
|
175
|
+
}
|
|
176
|
+
/** Options for creating a Tree primitive */
|
|
177
|
+
interface TreeOptions<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
178
|
+
/** The root node type */
|
|
179
|
+
readonly root: TRoot$1;
|
|
180
|
+
}
|
|
181
|
+
/** Creates a new TreePrimitive with the given root node type */
|
|
182
|
+
declare const Tree: <TRoot$1 extends AnyTreeNodePrimitive>(options: TreeOptions<TRoot$1>) => TreePrimitive<TRoot$1, false, false>;
|
|
183
|
+
//#endregion
|
|
184
|
+
export { InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
|
|
185
|
+
//# sourceMappingURL=Tree.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.d.cts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { InferProxy, InferSetInput, InferUpdateInput, Primitive, PrimitiveInternal, Validator } from "./shared.mjs";
|
|
2
|
+
import { StructPrimitive, StructSetInput, StructUpdateValue } from "./Struct.mjs";
|
|
3
|
+
import { AnyTreeNodePrimitive, InferTreeNodeChildren, InferTreeNodeDataState, InferTreeNodeType } from "./TreeNode.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/primitives/Tree.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A node in the tree state (flat storage format)
|
|
9
|
+
*/
|
|
10
|
+
interface TreeNodeState {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly type: string;
|
|
13
|
+
readonly parentId: string | null;
|
|
14
|
+
readonly pos: string;
|
|
15
|
+
readonly data: unknown;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Typed node state for a specific node type
|
|
19
|
+
*/
|
|
20
|
+
interface TypedTreeNodeState<TNode extends AnyTreeNodePrimitive> {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
23
|
+
readonly parentId: string | null;
|
|
24
|
+
readonly pos: string;
|
|
25
|
+
readonly data: InferTreeNodeDataState<TNode>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The state type for trees - a flat array of nodes
|
|
29
|
+
*/
|
|
30
|
+
type TreeState<_TRoot extends AnyTreeNodePrimitive> = readonly TreeNodeState[];
|
|
31
|
+
/**
|
|
32
|
+
* Snapshot of a single node for UI rendering (data properties spread at node level)
|
|
33
|
+
*/
|
|
34
|
+
type TreeNodeSnapshot<TNode extends AnyTreeNodePrimitive> = {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
37
|
+
readonly children: TreeNodeSnapshot<InferTreeNodeChildren<TNode>>[];
|
|
38
|
+
} & InferTreeNodeDataState<TNode>;
|
|
39
|
+
/**
|
|
40
|
+
* Infer the snapshot type for a tree (recursive tree structure for UI)
|
|
41
|
+
*/
|
|
42
|
+
type InferTreeSnapshot<T extends TreePrimitive<any>> = T extends TreePrimitive<infer TRoot> ? TreeNodeSnapshot<TRoot> : never;
|
|
43
|
+
/**
|
|
44
|
+
* Helper type to infer the update value type from a TreeNode's data.
|
|
45
|
+
* Uses StructUpdateValue directly to get field-level partial update semantics.
|
|
46
|
+
* All fields are optional in update operations.
|
|
47
|
+
*/
|
|
48
|
+
type TreeNodeUpdateValue<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructUpdateValue<TFields> : InferUpdateInput<TNode["data"]>;
|
|
49
|
+
/**
|
|
50
|
+
* Helper type to infer the input type for node data (respects field defaults).
|
|
51
|
+
* Uses StructSetInput directly so that:
|
|
52
|
+
* - Fields that are required AND have no default must be provided
|
|
53
|
+
* - Fields that are optional OR have defaults can be omitted
|
|
54
|
+
*
|
|
55
|
+
* This bypasses the struct-level NeedsValue wrapper since tree inserts
|
|
56
|
+
* always require a data object (even if empty for all-optional fields).
|
|
57
|
+
*/
|
|
58
|
+
type TreeNodeDataSetInput<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TNode["data"]>;
|
|
59
|
+
/**
|
|
60
|
+
* Typed proxy for a specific node type - provides type-safe data access
|
|
61
|
+
*/
|
|
62
|
+
interface TypedNodeProxy<TNode extends AnyTreeNodePrimitive> {
|
|
63
|
+
/** The node ID */
|
|
64
|
+
readonly id: string;
|
|
65
|
+
/** The node type */
|
|
66
|
+
readonly type: InferTreeNodeType<TNode>;
|
|
67
|
+
/** Access the node's data proxy */
|
|
68
|
+
readonly data: InferProxy<TNode["data"]>;
|
|
69
|
+
/** Get the raw node state */
|
|
70
|
+
get(): TypedTreeNodeState<TNode>;
|
|
71
|
+
/** Updates only the specified data fields (partial update, handles nested structs recursively) */
|
|
72
|
+
update(value: TreeNodeUpdateValue<TNode>): void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Node proxy with type narrowing capabilities
|
|
76
|
+
*/
|
|
77
|
+
interface TreeNodeProxyBase<_TRoot extends AnyTreeNodePrimitive> {
|
|
78
|
+
/** The node ID */
|
|
79
|
+
readonly id: string;
|
|
80
|
+
/** The node type (string) */
|
|
81
|
+
readonly type: string;
|
|
82
|
+
/** Type guard - narrows the proxy to a specific node type */
|
|
83
|
+
is<TNode extends AnyTreeNodePrimitive>(nodeType: TNode): this is TypedNodeProxy<TNode>;
|
|
84
|
+
/** Type assertion - returns typed proxy (throws if wrong type) */
|
|
85
|
+
as<TNode extends AnyTreeNodePrimitive>(nodeType: TNode): TypedNodeProxy<TNode>;
|
|
86
|
+
/** Get the raw node state */
|
|
87
|
+
get(): TreeNodeState;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Proxy for accessing and modifying tree nodes
|
|
91
|
+
*/
|
|
92
|
+
interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
93
|
+
/** Gets the entire tree state (flat array of nodes) */
|
|
94
|
+
get(): TreeState<TRoot$1>;
|
|
95
|
+
/** Replaces the entire tree */
|
|
96
|
+
set(nodes: TreeState<TRoot$1>): void;
|
|
97
|
+
/** Gets the root node state */
|
|
98
|
+
root(): TypedTreeNodeState<TRoot$1> | undefined;
|
|
99
|
+
/** Gets ordered children states of a parent (null for root's children) */
|
|
100
|
+
children(parentId: string | null): TreeNodeState[];
|
|
101
|
+
/** Gets a node proxy by ID with type narrowing capabilities */
|
|
102
|
+
node(id: string): TreeNodeProxyBase<TRoot$1> | undefined;
|
|
103
|
+
/** Insert a new node as the first child (applies defaults for node data) */
|
|
104
|
+
insertFirst<TNode extends AnyTreeNodePrimitive>(parentId: string | null, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
105
|
+
/** Insert a new node as the last child (applies defaults for node data) */
|
|
106
|
+
insertLast<TNode extends AnyTreeNodePrimitive>(parentId: string | null, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
107
|
+
/** Insert a new node at a specific index among siblings (applies defaults for node data) */
|
|
108
|
+
insertAt<TNode extends AnyTreeNodePrimitive>(parentId: string | null, index: number, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
109
|
+
/** Insert a new node after a sibling (applies defaults for node data) */
|
|
110
|
+
insertAfter<TNode extends AnyTreeNodePrimitive>(siblingId: string, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
111
|
+
/** Insert a new node before a sibling (applies defaults for node data) */
|
|
112
|
+
insertBefore<TNode extends AnyTreeNodePrimitive>(siblingId: string, nodeType: TNode, data: TreeNodeDataSetInput<TNode>): string;
|
|
113
|
+
/** Remove a node and all its descendants */
|
|
114
|
+
remove(id: string): void;
|
|
115
|
+
/** Move a node to a new parent at a specific index */
|
|
116
|
+
move(nodeId: string, newParentId: string | null, toIndex: number): void;
|
|
117
|
+
/** Move a node after a sibling */
|
|
118
|
+
moveAfter(nodeId: string, siblingId: string): void;
|
|
119
|
+
/** Move a node before a sibling */
|
|
120
|
+
moveBefore(nodeId: string, siblingId: string): void;
|
|
121
|
+
/** Move a node to be the first child of a parent */
|
|
122
|
+
moveToFirst(nodeId: string, newParentId: string | null): void;
|
|
123
|
+
/** Move a node to be the last child of a parent */
|
|
124
|
+
moveToLast(nodeId: string, newParentId: string | null): void;
|
|
125
|
+
/** Returns a typed proxy for a specific node's data */
|
|
126
|
+
at<TNode extends AnyTreeNodePrimitive>(id: string, nodeType: TNode): InferProxy<TNode["data"]>;
|
|
127
|
+
/** Updates only the specified data fields of a node (partial update) */
|
|
128
|
+
updateAt<TNode extends AnyTreeNodePrimitive>(id: string, nodeType: TNode, value: TreeNodeUpdateValue<TNode>): void;
|
|
129
|
+
/** Convert tree to a nested snapshot for UI rendering */
|
|
130
|
+
toSnapshot(): TreeNodeSnapshot<TRoot$1> | undefined;
|
|
131
|
+
}
|
|
132
|
+
interface TreePrimitiveSchema<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
133
|
+
readonly required: boolean;
|
|
134
|
+
readonly defaultValue: TreeState<TRoot$1> | undefined;
|
|
135
|
+
readonly root: TRoot$1;
|
|
136
|
+
readonly validators: readonly Validator<TreeState<TRoot$1>>[];
|
|
137
|
+
}
|
|
138
|
+
/** Input type for tree set() - tree state */
|
|
139
|
+
type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
|
|
140
|
+
/** Input type for tree update() - same as set() for trees */
|
|
141
|
+
type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
|
|
142
|
+
declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<TreeState<TRoot$1>, TreeProxy<TRoot$1>, TRequired, THasDefault, TreeSetInput<TRoot$1>, TreeUpdateInput<TRoot$1>> {
|
|
143
|
+
readonly _tag: "TreePrimitive";
|
|
144
|
+
readonly _State: TreeState<TRoot$1>;
|
|
145
|
+
readonly _Proxy: TreeProxy<TRoot$1>;
|
|
146
|
+
readonly _TRequired: TRequired;
|
|
147
|
+
readonly _THasDefault: THasDefault;
|
|
148
|
+
readonly TSetInput: TreeSetInput<TRoot$1>;
|
|
149
|
+
readonly TUpdateInput: TreeUpdateInput<TRoot$1>;
|
|
150
|
+
private readonly _schema;
|
|
151
|
+
private _nodeTypeRegistry;
|
|
152
|
+
private readonly _opDefinitions;
|
|
153
|
+
constructor(schema: TreePrimitiveSchema<TRoot$1>);
|
|
154
|
+
/** Mark this tree as required */
|
|
155
|
+
required(): TreePrimitive<TRoot$1, true, THasDefault>;
|
|
156
|
+
/** Set a default value for this tree */
|
|
157
|
+
default(defaultValue: TreeState<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
|
|
158
|
+
/** Get the root node type */
|
|
159
|
+
get root(): TRoot$1;
|
|
160
|
+
/** Add a custom validation rule */
|
|
161
|
+
refine(fn: (value: TreeState<TRoot$1>) => boolean, message: string): TreePrimitive<TRoot$1, TRequired, THasDefault>;
|
|
162
|
+
/**
|
|
163
|
+
* Build a registry of all node types reachable from root
|
|
164
|
+
*/
|
|
165
|
+
private _buildNodeTypeRegistry;
|
|
166
|
+
/**
|
|
167
|
+
* Get a node type primitive by its type string
|
|
168
|
+
*/
|
|
169
|
+
private _getNodeTypePrimitive;
|
|
170
|
+
/**
|
|
171
|
+
* Validate that a node type can be a child of a parent node type
|
|
172
|
+
*/
|
|
173
|
+
private _validateChildType;
|
|
174
|
+
readonly _internal: PrimitiveInternal<TreeState<TRoot$1>, TreeProxy<TRoot$1>>;
|
|
175
|
+
}
|
|
176
|
+
/** Options for creating a Tree primitive */
|
|
177
|
+
interface TreeOptions<TRoot$1 extends AnyTreeNodePrimitive> {
|
|
178
|
+
/** The root node type */
|
|
179
|
+
readonly root: TRoot$1;
|
|
180
|
+
}
|
|
181
|
+
/** Creates a new TreePrimitive with the given root node type */
|
|
182
|
+
declare const Tree: <TRoot$1 extends AnyTreeNodePrimitive>(options: TreeOptions<TRoot$1>) => TreePrimitive<TRoot$1, false, false>;
|
|
183
|
+
//#endregion
|
|
184
|
+
export { InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
|
|
185
|
+
//# sourceMappingURL=Tree.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tree.d.mts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":";;;;;;;AAkBA;AAWA;AAAkD,UAXjC,aAAA,CAWiC;EAEf,SAAA,EAAA,EAAA,MAAA;EAAlB,SAAA,IAAA,EAAA,MAAA;EAGuB,SAAA,QAAA,EAAA,MAAA,GAAA,IAAA;EAAvB,SAAA,GAAA,EAAA,MAAA;EAAsB,SAAA,IAAA,EAAA,OAAA;AAMvC;AAwDA;;;AAEiB,UArEA,kBAqEA,CAAA,cArEiC,oBAqEjC,CAAA,CAAA;EAC2C,SAAA,EAAA,EAAA,MAAA;EAAtB,SAAA,IAAA,EApErB,iBAoEqB,CApEH,KAoEG,CAAA;EAAjB,SAAA,QAAA,EAAA,MAAA,GAAA,IAAA;EACM,SAAA,GAAA,EAAA,MAAA;EAAvB,SAAA,IAAA,EAlEa,sBAkEb,CAlEoC,KAkEpC,CAAA;;AAKJ;;;AACY,KAlEA,SAkEA,CAAA,eAlEyB,oBAkEzB,CAAA,GAAA,SAlE0D,aAkE1D,EAAA;;;;AAOA,KAjBA,gBAiBmB,CAAA,cAjBY,oBAiBZ,CAAA,GAAA;EAAe,SAAA,EAAA,EAAA,MAAA;EAC5C,SAAA,IAAA,EAhBe,iBAgBf,CAhBiC,KAgBjC,CAAA;EAAsB,SAAA,QAAA,EAfH,gBAeG,CAfc,qBAed,CAfoC,KAepC,CAAA,CAAA,EAAA;CACA,GAfpB,sBAeoB,CAfG,KAeH,CAAA;;;;AACF,KAXV,iBAWU,CAAA,UAXkB,aAWlB,CAAA,GAAA,CAAA,CAAA,GAVpB,CAUoB,SAVV,aAUU,CAAA,KAAA,MAAA,CAAA,GAVmB,gBAUnB,CAVoC,KAUpC,CAAA,GAAA,KAAA;AAWtB;;;;;AAEM,KAhBM,mBAgBN,CAAA,cAhBwC,oBAgBxC,CAAA,GAfJ,KAeI,CAAA,MAAA,CAAA,SAfkB,eAelB,CAAA,KAAA,QAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAdA,iBAcA,CAdkB,OAclB,CAAA,GAbA,gBAaA,CAbiB,KAajB,CAAA,MAAA,CAAA,CAAA;;;;AAMN;;;;;;AAQ4B,KAhBhB,oBAgBgB,CAAA,cAhBmB,oBAgBnB,CAAA,GAf1B,KAe0B,CAAA,MAAA,CAAA,SAfJ,eAeI,CAAA,KAAA,QAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAdtB,cAcsB,CAdP,OAcO,CAAA,GAbtB,aAasB,CAbR,KAaQ,CAAA,MAAA,CAAA,CAAA;;;;AAEO,UAVlB,cAUkB,CAAA,cAVW,oBAUX,CAAA,CAAA;EAMlB;EAAiC,SAAA,EAAA,EAAA,MAAA;EAM/B;EACL,SAAA,IAAA,EAnBG,iBAmBH,CAnBqB,KAmBrB,CAAA;EACc;EAAf,SAAA,IAAA,EAlBI,UAkBJ,CAlBe,KAkBf,CAAA,MAAA,CAAA,CAAA;EAEM;EACL,GAAA,EAAA,EAnBL,kBAmBK,CAnBc,KAmBd,CAAA;EACM;EAAf,MAAA,CAAA,KAAA,EAlBW,mBAkBX,CAlB+B,KAkB/B,CAAA,CAAA,EAAA,IAAA;;;AAQL;;AAEmB,UAtBF,iBAsBE,CAAA,eAtB+B,oBAsB/B,CAAA,CAAA;EAAV;EAGc,SAAA,EAAA,EAAA,MAAA;EAAV;EAGgB,SAAA,IAAA,EAAA,MAAA;EAAnB;EAG2B,EAAA,CAAA,cAzBlB,oBAyBkB,CAAA,CAAA,QAAA,EAxBvB,KAwBuB,CAAA,EAAA,IAAA,IAvBxB,cAuBwB,CAvBT,KAuBS,CAAA;EAGC;EAAlB,EAAA,CAAA,cAxBD,oBAwBC,CAAA,CAAA,QAAA,EAvBN,KAuBM,CAAA,EAtBf,cAsBe,CAtBA,KAsBA,CAAA;EAGQ;EAEd,GAAA,EAAA,EAzBL,aAyBK;;;;;AAQiB,UA3Bd,SA2Bc,CAAA,gBA3BU,oBA2BV,CAAA,CAAA;EAArB;EAIe,GAAA,EAAA,EA7BhB,SA6BgB,CA7BN,OA6BM,CAAA;EAGX;EACiB,GAAA,CAAA,KAAA,EA9BlB,SA8BkB,CA9BR,OA8BQ,CAAA,CAAA,EAAA,IAAA;EAArB;EAIkB,IAAA,EAAA,EA/BlB,kBA+BkB,CA/BC,OA+BD,CAAA,GAAA,SAAA;EAEd;EACiB,QAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EA/BM,aA+BN,EAAA;EAArB;EAImB,IAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAhCT,iBAgCS,CAhCS,OAgCT,CAAA,GAAA,SAAA;EAEf;EACiB,WAAA,CAAA,cAhCH,oBAgCG,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,QAAA,EA9BjB,KA8BiB,EAAA,IAAA,EA7BrB,oBA6BqB,CA7BA,KA6BA,CAAA,CAAA,EAAA,MAAA;EAArB;EAsBS,UAAA,CAAA,cA/CQ,oBA+CR,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,QAAA,EA7CL,KA6CK,EAAA,IAAA,EA5CT,oBA4CS,CA5CY,KA4CZ,CAAA,CAAA,EAAA,MAAA;EAEL;EACE,QAAA,CAAA,cA3CS,oBA2CT,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAxCF,KAwCE,EAAA,IAAA,EAvCN,oBAuCM,CAvCe,KAuCf,CAAA,CAAA,EAAA,MAAA;EAAX;EAGoB,WAAA,CAAA,cAtCG,oBAsCH,CAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EApCX,KAoCW,EAAA,IAAA,EAnCf,oBAmCe,CAnCM,KAmCN,CAAA,CAAA,EAAA,MAAA;EAEX;EACiB,YAAA,CAAA,cAlCF,oBAkCE,CAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAhCjB,KAgCiB,EAAA,IAAA,EA/BrB,oBA+BqB,CA/BA,KA+BA,CAAA,CAAA,EAAA,MAAA;EAApB;EAIsB,MAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAjB;EAAgB,IAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAGtB;EAAkC,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAET;EAAV,UAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EACR;EACmC,WAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAV;EAAV,UAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAS;EAI7B,EAAA,CAAA,cAxBO,oBAwBK,CAAA,CAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAtBV,KAsBU,CAAA,EArBnB,UAqBmB,CArBR,KAqBQ,CAAA,MAAA,CAAA,CAAA;EAAe;EAAkC,QAAA,CAAA,cAlBhD,oBAkBgD,CAAA,CAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAhB3D,KAgB2D,EAAA,KAAA,EAf9D,mBAe8D,CAf1C,KAe0C,CAAA,CAAA,EAAA,IAAA;EAAV;EAAS,UAAA,EAAA,EAXxD,gBAWwD,CAXvC,OAWuC,CAAA,GAAA,SAAA;AAGxE;UAXU,mBAWgC,CAAA,gBAXE,oBAWF,CAAA,CAAA;EAAkC,SAAA,QAAA,EAAA,OAAA;EAAV,SAAA,YAAA,EATzC,SASyC,CAT/B,OAS+B,CAAA,GAAA,SAAA;EAAS,SAAA,IAAA,EAR1D,OAQ0D;EAE9D,SAAA,UAAa,EAAA,SATM,SASN,CATgB,SAShB,CAT0B,OAS1B,CAAA,CAAA,EAAA;;;AACH,KANX,YAMW,CAAA,gBANgB,oBAMhB,CAAA,GANwC,SAMxC,CANkD,OAMlD,CAAA;;AAAkB,KAH7B,eAG6B,CAAA,gBAHC,oBAGD,CAAA,GAHyB,SAGzB,CAHmC,OAGnC,CAAA;AAAkB,cAD9C,aAC8C,CAAA,gBADlB,oBACkB,EAAA,kBAAA,OAAA,GAAA,KAAA,EAAA,oBAAA,OAAA,GAAA,KAAA,CAAA,YAA9C,SAA8C,CAApC,SAAoC,CAA1B,OAA0B,CAAA,EAAlB,SAAkB,CAAR,OAAQ,CAAA,EAAA,SAAA,EAAW,WAAX,EAAwB,YAAxB,CAAqC,OAArC,CAAA,EAA6C,eAA7C,CAA6D,OAA7D,CAAA,CAAA,CAAA;EAAW,SAAA,IAAA,EAAA,eAAA;EAA0B,SAAA,MAAA,EAG5E,SAH4E,CAGlE,OAHkE,CAAA;EAAb,SAAA,MAAA,EAI/D,SAJ+D,CAIrD,OAJqD,CAAA;EAAqC,SAAA,UAAA,EAKhG,SALgG;EAAhB,SAAA,YAAA,EAM9E,WAN8E;EAG1E,SAAA,SAAA,EAIP,YAJO,CAIM,OAJN,CAAA;EAAV,SAAA,YAAA,EAKM,eALN,CAKsB,OALtB,CAAA;EACU,iBAAA,OAAA;EAAV,QAAA,iBAAA;EACI,iBAAA,cAAA;EACE,WAAA,CAAA,MAAA,EAkCJ,mBAlCI,CAkCgB,OAlChB,CAAA;EACU;EAAb,QAAA,CAAA,CAAA,EAsCT,aAtCS,CAsCK,OAtCL,EAAA,IAAA,EAsCkB,WAtClB,CAAA;EACmB;EAAhB,OAAA,CAAA,YAAA,EA6CF,SA7CE,CA6CQ,OA7CR,CAAA,CAAA,EA6CiB,aA7CjB,CA6C+B,OA7C/B,EA6CsC,SA7CtC,EAAA,IAAA,CAAA;EAgCgB;EAApB,IAAA,IAAA,CAAA,CAAA,EAqBR,OArBQ;EAKM;EAAa,MAAA,CAAA,EAAA,EAAA,CAAA,KAAA,EAqBpB,SArBoB,CAqBV,OArBU,CAAA,EAAA,GAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAqB4B,aArB5B,CAqB0C,OArB1C,EAqBiD,SArBjD,EAqB4D,WArB5D,CAAA;EAA3B;;;EAQ2C,QAAA,sBAAA;EAAO;;;EAajC,QAAA,qBAAA;EAAV;;;EAAgF,QAAA,kBAAA;EAAhC,SAAA,SAAA,EAwE/C,iBAxE+C,CAwE7B,SAxE6B,CAwEnB,OAxEmB,CAAA,EAwEX,SAxEW,CAwED,OAxEC,CAAA,CAAA;;;AAwED,UA8wBnD,WA9wBmD,CAAA,gBA8wBzB,oBA9wByB,CAAA,CAAA;EAAV;EAApC,SAAA,IAAA,EAgxBL,OAhxBK;;;AA8wBL,cAMJ,IANe,EAAA,CAAA,gBAMO,oBAJlB,CAAA,CAAA,OAAK,EAKX,WALW,CAKC,OALD,CAAA,EAAA,GAMnB,aANmB,CAML,OANK,EAAA,KAAA,EAAA,KAAA,CAAA"}
|