dirvi-lib 0.10.0 → 0.11.0-beta.12
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/app/app-methods.d.ts +53 -0
- package/dist/app/app-methods.d.ts.map +1 -0
- package/dist/app/index.d.ts +1 -1
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/app/reducer/effect-to-action.d.ts +2 -2
- package/dist/app/reducer/effect-to-action.d.ts.map +1 -1
- package/dist/app/reducer/effect-to-action.js +87 -32
- package/dist/app/reducer/reducer-action.d.ts +12 -6
- package/dist/app/reducer/reducer-action.d.ts.map +1 -1
- package/dist/app/reducer/reducer.d.ts +4 -2
- package/dist/app/reducer/reducer.d.ts.map +1 -1
- package/dist/app/reducer/reducer.js +106 -72
- package/dist/feedback/feedback.impl.d.ts.map +1 -1
- package/dist/feedback/feedback.types.d.ts +1 -1
- package/dist/feedback/feedback.types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/input/application/intent-to-effect.d.ts +2 -2
- package/dist/input/application/intent-to-effect.d.ts.map +1 -1
- package/dist/input/application/intent-to-effect.js +10 -11
- package/dist/input/application/parse-ex-command.d.ts +17 -0
- package/dist/input/application/parse-ex-command.d.ts.map +1 -0
- package/dist/input/application/{parse-command.js → parse-ex-command.js} +84 -54
- package/dist/input/application/parse-normal-command.d.ts +1 -1
- package/dist/input/application/parse-normal-command.d.ts.map +1 -1
- package/dist/input/domain/effect.d.ts +20 -9
- package/dist/input/domain/effect.d.ts.map +1 -1
- package/dist/state-and-nav/cursor.d.ts +89 -0
- package/dist/state-and-nav/cursor.d.ts.map +1 -0
- package/dist/state-and-nav/cursor.js +84 -0
- package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.impl.d.ts +1 -1
- package/dist/state-and-nav/fold-node/deprecated/fold-node.impl.d.ts.map +1 -0
- package/dist/state-and-nav/fold-node/deprecated/fold-node.test.d.ts.map +1 -0
- package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.test.js +2 -2
- package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.types.d.ts +2 -2
- package/dist/state-and-nav/fold-node/deprecated/fold-node.types.d.ts.map +1 -0
- package/dist/{trees → state-and-nav}/fold-node/fold-node.impl.d.ts +3 -3
- package/dist/state-and-nav/fold-node/fold-node.impl.d.ts.map +1 -0
- package/dist/{trees → state-and-nav}/fold-node/fold-node.impl.js +2 -2
- package/dist/{trees → state-and-nav}/fold-node/fold-node.model.d.ts +1 -1
- package/dist/state-and-nav/fold-node/fold-node.model.d.ts.map +1 -0
- package/dist/{trees → state-and-nav}/fold-node/fold-node.types.d.ts +2 -2
- package/dist/state-and-nav/fold-node/fold-node.types.d.ts.map +1 -0
- package/dist/state-and-nav/fold-node/index.d.ts.map +1 -0
- package/dist/state-and-nav/index.d.ts +16 -0
- package/dist/state-and-nav/index.d.ts.map +1 -0
- package/dist/state-and-nav/index.js +6 -0
- package/dist/state-and-nav/nav/nav.ordered.impl.d.ts +12 -0
- package/dist/state-and-nav/nav/nav.ordered.impl.d.ts.map +1 -0
- package/dist/state-and-nav/nav/nav.ordered.impl.js +77 -0
- package/dist/state-and-nav/nav/nav.traversal.d.ts +11 -0
- package/dist/state-and-nav/nav/nav.traversal.d.ts.map +1 -0
- package/dist/state-and-nav/nav/nav.traversal.js +204 -0
- package/dist/{trees/nav-node/nav-node.types.d.ts → state-and-nav/nav/nav.types.d.ts} +37 -23
- package/dist/state-and-nav/nav/nav.types.d.ts.map +1 -0
- package/dist/state-and-nav/nav/nav.unordered.impl.d.ts +13 -0
- package/dist/state-and-nav/nav/nav.unordered.impl.d.ts.map +1 -0
- package/dist/state-and-nav/nav/nav.unordered.impl.js +77 -0
- package/dist/state-and-nav/state/state.impl.d.ts +9 -0
- package/dist/state-and-nav/state/state.impl.d.ts.map +1 -0
- package/dist/{trees → state-and-nav}/state/state.impl.js +62 -9
- package/dist/state-and-nav/state/state.schemas.d.ts +2 -0
- package/dist/state-and-nav/state/state.schemas.d.ts.map +1 -0
- package/dist/state-and-nav/state/state.schemas.js +39 -0
- package/dist/state-and-nav/state/state.types.d.ts +72 -0
- package/dist/state-and-nav/state/state.types.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.arb.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.arb.debug.test.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.impl.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.schemas.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.test.d.ts.map +1 -0
- package/dist/state-and-nav/tree/deprecated/tree-node.types.d.ts.map +1 -0
- package/dist/state-and-nav/tree/index.d.ts +7 -0
- package/dist/state-and-nav/tree/index.d.ts.map +1 -0
- package/dist/state-and-nav/tree/index.js +1 -0
- package/dist/state-and-nav/tree/tree-node.arb.d.ts +94 -0
- package/dist/state-and-nav/tree/tree-node.arb.d.ts.map +1 -0
- package/dist/state-and-nav/tree/tree-node.arb.debug.test.d.ts +2 -0
- package/dist/state-and-nav/tree/tree-node.arb.debug.test.d.ts.map +1 -0
- package/dist/state-and-nav/tree/tree-node.arb.debug.test.js +54 -0
- package/dist/state-and-nav/tree/tree-node.arb.js +188 -0
- package/dist/state-and-nav/tree/tree-node.model.d.ts +194 -0
- package/dist/state-and-nav/tree/tree-node.model.d.ts.map +1 -0
- package/dist/state-and-nav/tree/tree-node.model.js +110 -0
- package/dist/state-and-nav/tree/tree-node.test.d.ts +2 -0
- package/dist/state-and-nav/tree/tree-node.test.d.ts.map +1 -0
- package/dist/state-and-nav/tree/tree-node.test.js +234 -0
- package/dist/{trees/tree-node/tree-node.impl.d.ts → state-and-nav/tree/tree.impl.d.ts} +3 -3
- package/dist/state-and-nav/tree/tree.impl.d.ts.map +1 -0
- package/dist/{trees/tree-node/tree-node.impl.js → state-and-nav/tree/tree.impl.js} +20 -17
- package/dist/{trees/tree-node/tree-node.types.d.ts → state-and-nav/tree/tree.types.d.ts} +67 -47
- package/dist/state-and-nav/tree/tree.types.d.ts.map +1 -0
- package/dist/state-and-nav/tree/tree.types.js +1 -0
- package/package.json +4 -3
- package/dist/app/app-api.d.ts +0 -74
- package/dist/app/app-api.d.ts.map +0 -1
- package/dist/app/app-api.js +0 -11
- package/dist/input/application/parse-command.d.ts +0 -14
- package/dist/input/application/parse-command.d.ts.map +0 -1
- package/dist/trees/cursor.d.ts +0 -59
- package/dist/trees/cursor.d.ts.map +0 -1
- package/dist/trees/cursor.js +0 -55
- package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts.map +0 -1
- package/dist/trees/fold-node/deprecated/fold-node.test.d.ts.map +0 -1
- package/dist/trees/fold-node/deprecated/fold-node.types.d.ts.map +0 -1
- package/dist/trees/fold-node/fold-node.impl.d.ts.map +0 -1
- package/dist/trees/fold-node/fold-node.model.d.ts.map +0 -1
- package/dist/trees/fold-node/fold-node.types.d.ts.map +0 -1
- package/dist/trees/fold-node/index.d.ts.map +0 -1
- package/dist/trees/index.d.ts +0 -9
- package/dist/trees/index.d.ts.map +0 -1
- package/dist/trees/index.js +0 -8
- package/dist/trees/nav-node/nav-node.impl.d.ts +0 -29
- package/dist/trees/nav-node/nav-node.impl.d.ts.map +0 -1
- package/dist/trees/nav-node/nav-node.impl.js +0 -223
- package/dist/trees/nav-node/nav-node.types.d.ts.map +0 -1
- package/dist/trees/state/state.impl.d.ts +0 -8
- package/dist/trees/state/state.impl.d.ts.map +0 -1
- package/dist/trees/state/state.schemas.d.ts +0 -25
- package/dist/trees/state/state.schemas.d.ts.map +0 -1
- package/dist/trees/state/state.schemas.js +0 -17
- package/dist/trees/state/state.types.d.ts +0 -36
- package/dist/trees/state/state.types.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.arb.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.arb.debug.test.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.impl.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.schemas.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.test.d.ts.map +0 -1
- package/dist/trees/tree-node/deprecated/tree-node.types.d.ts.map +0 -1
- package/dist/trees/tree-node/index.d.ts +0 -5
- package/dist/trees/tree-node/index.d.ts.map +0 -1
- package/dist/trees/tree-node/index.js +0 -2
- package/dist/trees/tree-node/tree-node.arb.d.ts +0 -104
- package/dist/trees/tree-node/tree-node.arb.d.ts.map +0 -1
- package/dist/trees/tree-node/tree-node.arb.js +0 -188
- package/dist/trees/tree-node/tree-node.impl.d.ts.map +0 -1
- package/dist/trees/tree-node/tree-node.model.d.ts +0 -78
- package/dist/trees/tree-node/tree-node.model.d.ts.map +0 -1
- package/dist/trees/tree-node/tree-node.model.js +0 -37
- package/dist/trees/tree-node/tree-node.types.d.ts.map +0 -1
- /package/dist/{trees/fold-node/deprecated/fold-node.types.js → app/app-methods.js} +0 -0
- /package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.impl.js +0 -0
- /package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.test.d.ts +0 -0
- /package/dist/{trees/fold-node → state-and-nav/fold-node/deprecated}/fold-node.types.js +0 -0
- /package/dist/{trees → state-and-nav}/fold-node/fold-node.model.js +0 -0
- /package/dist/{trees/nav-node/nav-node.types.js → state-and-nav/fold-node/fold-node.types.js} +0 -0
- /package/dist/{trees → state-and-nav}/fold-node/index.d.ts +0 -0
- /package/dist/{trees → state-and-nav}/fold-node/index.js +0 -0
- /package/dist/{trees/state/state.types.js → state-and-nav/nav/nav.types.js} +0 -0
- /package/dist/{trees/tree-node/deprecated/tree-node.types.js → state-and-nav/state/state.types.js} +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.debug.test.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.debug.test.js +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.js +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.impl.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.impl.js +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.schemas.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.schemas.js +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.test.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.test.js +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.types.d.ts +0 -0
- /package/dist/{trees/tree-node → state-and-nav/tree/deprecated}/tree-node.types.js +0 -0
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
import type { InputModeState } from './input-mode-state.js';
|
|
2
|
-
import type { SerializableKey, TreeNode } from '../../
|
|
2
|
+
import type { SerializableKey, TreeNode } from '../../state-and-nav/index.js';
|
|
3
3
|
/**
|
|
4
|
-
* An effect
|
|
4
|
+
* An effect is some execution to be done in `App`, that could affect the shell
|
|
5
|
+
* or current app of dirvi.
|
|
6
|
+
*
|
|
7
|
+
* It is produced by interpreting an intent against the current state.
|
|
5
8
|
*
|
|
6
9
|
* @typeParam Id - The sibling-unique tree-node ID type.
|
|
7
10
|
* @typeParam Value - Application-owned data stored in each tree node.
|
|
8
11
|
*/
|
|
9
12
|
export type Effect<Id extends SerializableKey, Value> = Readonly<{
|
|
13
|
+
effectType: 'quit';
|
|
14
|
+
exitMessage: string;
|
|
15
|
+
}> | Readonly<{
|
|
16
|
+
effectType: 'listApps';
|
|
17
|
+
}> | Readonly<{
|
|
18
|
+
effectType: 'switchApp';
|
|
19
|
+
appId: string;
|
|
20
|
+
input: string | undefined;
|
|
21
|
+
}> | Readonly<{
|
|
10
22
|
effectType: 'dispatchEffectAction';
|
|
11
23
|
action: EffectAction<Id, Value>;
|
|
12
24
|
}> | Readonly<{
|
|
@@ -19,19 +31,18 @@ export type Effect<Id extends SerializableKey, Value> = Readonly<{
|
|
|
19
31
|
}> | Readonly<{
|
|
20
32
|
effectType: 'loadView';
|
|
21
33
|
name: string;
|
|
22
|
-
}> | Readonly<{
|
|
23
|
-
effectType: 'emitVisibleLeavesPaths';
|
|
24
34
|
}> | Readonly<{
|
|
25
35
|
effectType: 'listFolds';
|
|
26
|
-
}> | Readonly<{
|
|
27
|
-
effectType: 'quit';
|
|
28
|
-
exitMessage: string;
|
|
29
36
|
}> | Readonly<{
|
|
30
37
|
effectType: 'setInputState';
|
|
31
38
|
inputState: InputModeState;
|
|
32
39
|
}> | Readonly<{
|
|
33
|
-
effectType: '
|
|
34
|
-
|
|
40
|
+
effectType: 'userExCommand';
|
|
41
|
+
name: string;
|
|
42
|
+
args: readonly string[];
|
|
43
|
+
}> | Readonly<{
|
|
44
|
+
effectType: 'emitError';
|
|
45
|
+
message: string;
|
|
35
46
|
}>;
|
|
36
47
|
/**
|
|
37
48
|
* A user-facing reference to a fold tree.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/input/domain/effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/input/domain/effect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* A root-relative path identifying the current tree position.
|
|
4
|
+
*
|
|
5
|
+
* The empty path identifies the tree root. A non-empty path identifies a
|
|
6
|
+
* descendant by following child IDs from the root.
|
|
7
|
+
*
|
|
8
|
+
* For example, given:
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* root
|
|
12
|
+
* └── src
|
|
13
|
+
* └── main.ts
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* the cursors are:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* { path: [] } // root
|
|
20
|
+
* { path: ['src'] } // src
|
|
21
|
+
* { path: ['src', 'main.ts'] } // main.ts
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @typeParam Id - The type of node IDs.
|
|
25
|
+
*/
|
|
26
|
+
export type NodeCursor<Id> = Readonly<{
|
|
27
|
+
path: readonly Id[];
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Fold cursors identify a contiguous fold run by its parent path and the ID of
|
|
31
|
+
* its first hidden child.
|
|
32
|
+
*/
|
|
33
|
+
export type FoldCursor<Id> = Readonly<{
|
|
34
|
+
parentPath: readonly Id[];
|
|
35
|
+
firstId: Id;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* A position in navigation.
|
|
39
|
+
*
|
|
40
|
+
* Unordered navigation uses node cursors only. Ordered navigation may also
|
|
41
|
+
* use fold cursors to identify inline fold blocks.
|
|
42
|
+
*/
|
|
43
|
+
export type Cursor<Id> = NodeCursor<Id> | FoldCursor<Id>;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a schema for cursors.
|
|
46
|
+
*
|
|
47
|
+
* The schema validates the IDs in the path using the param, but does not verify
|
|
48
|
+
* that the path exists in a particular tree.
|
|
49
|
+
*
|
|
50
|
+
* @typeParam IdSchema - type passed on so the parsed output can include `Id`
|
|
51
|
+
* type.
|
|
52
|
+
* @param idSchema - schema for the `Id` type.
|
|
53
|
+
*/
|
|
54
|
+
export declare function createCursorSchema<IdSchema extends z.ZodTypeAny>(idSchema: IdSchema): z.ZodUnion<readonly [z.ZodObject<{
|
|
55
|
+
path: z.ZodArray<IdSchema>;
|
|
56
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
57
|
+
parentPath: z.ZodArray<IdSchema>;
|
|
58
|
+
firstId: IdSchema;
|
|
59
|
+
}, z.core.$strict>]>;
|
|
60
|
+
/**
|
|
61
|
+
* Operations for comparing and inspecting cursors.
|
|
62
|
+
*
|
|
63
|
+
* @typeParam Id - The type of node IDs.
|
|
64
|
+
*/
|
|
65
|
+
export type CursorMethods<Id> = {
|
|
66
|
+
isNodeCursor(cursor: Cursor<Id>): cursor is NodeCursor<Id>;
|
|
67
|
+
isFoldCursor(cursor: Cursor<Id>): cursor is FoldCursor<Id>;
|
|
68
|
+
/**
|
|
69
|
+
* Tests whether two cursors identify the same tree position.
|
|
70
|
+
*/
|
|
71
|
+
equal(left: Cursor<Id>, right: Cursor<Id>): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Returns a mutable copy of the path to the cursor, returning the path of the
|
|
74
|
+
* first hidden child represented by a fold cursor.
|
|
75
|
+
*
|
|
76
|
+
* The empty path identifies the tree root.
|
|
77
|
+
*/
|
|
78
|
+
getPath(cursor: Cursor<Id>): Id[];
|
|
79
|
+
/**
|
|
80
|
+
* Tests whether the cursor's path is within the subtree at `path`.
|
|
81
|
+
* A fold cursor uses its first hidden child's path as its representative path.
|
|
82
|
+
*
|
|
83
|
+
* The subtree includes the node at `path` itself. Therefore, equal
|
|
84
|
+
* paths return `true`, and an empty `path` contains every cursor.
|
|
85
|
+
*/
|
|
86
|
+
cursorBelongsToSubtree(cursor: Cursor<Id>, path: readonly Id[]): boolean;
|
|
87
|
+
};
|
|
88
|
+
export declare function createCursorMethods<Id>(): CursorMethods<Id>;
|
|
89
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/state-and-nav/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,IAAI,QAAQ,CAAC;IACpC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,IAAI,QAAQ,CAAC;IACpC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;IAC1B,OAAO,EAAE,EAAE,CAAC;CACb,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;AAEzD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,CAAC,CAAC,UAAU,EAC9D,QAAQ,EAAE,QAAQ;;;;;qBAanB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,EAAE,IAAI;IAC9B,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC3D,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;IAElC;;;;;;OAMG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC;CAC1E,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,CAqC3D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a schema for cursors.
|
|
4
|
+
*
|
|
5
|
+
* The schema validates the IDs in the path using the param, but does not verify
|
|
6
|
+
* that the path exists in a particular tree.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam IdSchema - type passed on so the parsed output can include `Id`
|
|
9
|
+
* type.
|
|
10
|
+
* @param idSchema - schema for the `Id` type.
|
|
11
|
+
*/
|
|
12
|
+
export function createCursorSchema(idSchema) {
|
|
13
|
+
const pathSchema = z.array(idSchema);
|
|
14
|
+
return z.union([
|
|
15
|
+
z.object({
|
|
16
|
+
path: pathSchema,
|
|
17
|
+
}).strict(),
|
|
18
|
+
z.object({
|
|
19
|
+
parentPath: pathSchema,
|
|
20
|
+
firstId: idSchema,
|
|
21
|
+
}).strict(),
|
|
22
|
+
]);
|
|
23
|
+
}
|
|
24
|
+
export function createCursorMethods() {
|
|
25
|
+
function isNodeCursor(cursor) {
|
|
26
|
+
return 'path' in cursor;
|
|
27
|
+
}
|
|
28
|
+
function isFoldCursor(cursor) {
|
|
29
|
+
return !isNodeCursor(cursor);
|
|
30
|
+
}
|
|
31
|
+
function getPath(cursor) {
|
|
32
|
+
return isNodeCursor(cursor)
|
|
33
|
+
? [...cursor.path]
|
|
34
|
+
: [...cursor.parentPath, cursor.firstId];
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
isNodeCursor,
|
|
38
|
+
isFoldCursor,
|
|
39
|
+
equal(left, right) {
|
|
40
|
+
if (isNodeCursor(left)) {
|
|
41
|
+
return isNodeCursor(right) && idPathEqual(left.path, right.path);
|
|
42
|
+
}
|
|
43
|
+
return (isFoldCursor(right) &&
|
|
44
|
+
left.firstId === right.firstId &&
|
|
45
|
+
idPathEqual(left.parentPath, right.parentPath));
|
|
46
|
+
},
|
|
47
|
+
getPath,
|
|
48
|
+
cursorBelongsToSubtree(cursor, path) {
|
|
49
|
+
return isPathPrefix(path, getPath(cursor));
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Returns true when both root-relative paths contain the same IDs in the same
|
|
55
|
+
* order.
|
|
56
|
+
*/
|
|
57
|
+
function idPathEqual(left, right) {
|
|
58
|
+
if (left.length !== right.length) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
for (let index = 0; index < left.length; index += 1) {
|
|
62
|
+
if (left[index] !== right[index]) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns true when `prefix` is a prefix of `path`.
|
|
70
|
+
*
|
|
71
|
+
* Equal paths are included. An empty prefix is therefore a prefix of every
|
|
72
|
+
* path.
|
|
73
|
+
*/
|
|
74
|
+
function isPathPrefix(prefix, path) {
|
|
75
|
+
if (prefix.length > path.length) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
for (let index = 0; index < prefix.length; index += 1) {
|
|
79
|
+
if (prefix[index] !== path[index]) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.impl.d.ts","sourceRoot":"","sources":["../../../../src/state-and-nav/fold-node/deprecated/fold-node.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,eAAe,EAC9D,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,GAC3B,eAAe,CAAC,EAAE,CAAC,CA0WrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.test.d.ts","sourceRoot":"","sources":["../../../../src/state-and-nav/fold-node/deprecated/fold-node.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { createTreeMethods } from '../../tree/index.js';
|
|
3
3
|
import { createFoldNodeService } from './fold-node.impl.js';
|
|
4
|
-
const foldNodeApi =
|
|
4
|
+
const foldNodeApi = createTreeMethods();
|
|
5
5
|
const service = createFoldNodeService(foldNodeApi);
|
|
6
6
|
function createFoldNode(id, options = {}) {
|
|
7
7
|
const node = foldNodeApi.createLoadedBranch(id, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TreeNode,
|
|
1
|
+
import type { TreeNode, TreeMethods, SerializableKey } from '../../tree/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Application-specific state stored in each fold-tree node.
|
|
4
4
|
*
|
|
@@ -18,7 +18,7 @@ export type FoldNode<Id extends SerializableKey> = TreeNode<Id, FoldNodeValue<Id
|
|
|
18
18
|
/**
|
|
19
19
|
* Generic structural operations specialized to a fold-state tree.
|
|
20
20
|
*/
|
|
21
|
-
export type FoldNodeApi<Id extends SerializableKey> =
|
|
21
|
+
export type FoldNodeApi<Id extends SerializableKey> = TreeMethods<Id, FoldNodeValue<Id>>;
|
|
22
22
|
/**
|
|
23
23
|
* Semantic operations for managing fold state.
|
|
24
24
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.types.d.ts","sourceRoot":"","sources":["../../../../src/state-and-nav/fold-node/deprecated/fold-node.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CAAC;IAC/D,cAAc,EAAE,SAAS,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CACzD,EAAE,EACF,aAAa,CAAC,EAAE,CAAC,CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,eAAe,IAAI,WAAW,CAC/D,EAAE,EACF,aAAa,CAAC,EAAE,CAAC,CAClB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,eAAe,IAAI;IACxD;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEtC;;;;;;;;;;;;;;OAcG;IACH,sBAAsB,CACpB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,SAAS,EAAE,EAAE,EACnB,OAAO,EAAE,EAAE,GACV,OAAO,CAAC;IAEX;;;;OAIG;IACH,mBAAmB,CACjB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,SAAS,EAAE,EAAE,GAClB,EAAE,EAAE,GAAG,SAAS,CAAC;IAEpB;;;;;;;;;;;;;;;;;OAiBG;IACH,oBAAoB,CAClB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,SAAS,EAAE,EAAE,EACnB,OAAO,EAAE,EAAE,GACV,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE5B;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAAuB,CACrB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,SAAS,EAAE,EAAE,EACnB,OAAO,EAAE,EAAE,GACV,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,wBAAwB,CACtB,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,IAAI,EAAE,SAAS,EAAE,EAAE,GAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;CAC7B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SerializableKey,
|
|
2
|
-
import type {
|
|
1
|
+
import type { SerializableKey, TreeMethods } from '../tree/index.js';
|
|
2
|
+
import type { FoldMethods } from './fold-node.types.js';
|
|
3
3
|
/**
|
|
4
4
|
* IDs of direct source-tree entries hidden at one source-tree branch.
|
|
5
5
|
*/
|
|
@@ -11,6 +11,6 @@ type HiddenEntryIds<Id extends SerializableKey> = readonly Id[];
|
|
|
11
11
|
* Each fold tree preserves its own hidden-entry definition. An entry is hidden
|
|
12
12
|
* by the aggregate when at least one active fold tree hides it.
|
|
13
13
|
*/
|
|
14
|
-
export declare function
|
|
14
|
+
export declare function createFoldMethods<Id extends SerializableKey>(foldTreeApi: TreeMethods<Id, HiddenEntryIds<Id>>): FoldMethods<Id>;
|
|
15
15
|
export {};
|
|
16
16
|
//# sourceMappingURL=fold-node.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.impl.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/fold-node/fold-node.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAIV,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,KAAK,cAAc,CAAC,EAAE,SAAS,eAAe,IAAI,SAAS,EAAE,EAAE,CAAC;AA0ChE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,eAAe,EAC1D,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,GAC/C,WAAW,CAAC,EAAE,CAAC,CA8nBjB"}
|
|
@@ -17,7 +17,7 @@ function hasUniqueValues(values) {
|
|
|
17
17
|
* Each fold tree preserves its own hidden-entry definition. An entry is hidden
|
|
18
18
|
* by the aggregate when at least one active fold tree hides it.
|
|
19
19
|
*/
|
|
20
|
-
export function
|
|
20
|
+
export function createFoldMethods(foldTreeApi) {
|
|
21
21
|
function createEmptyFoldTree(rootId) {
|
|
22
22
|
const tree = foldTreeApi.createLoadedBranch(rootId, [], []);
|
|
23
23
|
/*
|
|
@@ -180,7 +180,7 @@ export function createFoldsApi(foldTreeApi) {
|
|
|
180
180
|
return foldTreeApi.withLoadedChildren(tree, updatedChildren);
|
|
181
181
|
}
|
|
182
182
|
function foldTreeToModel(tree) {
|
|
183
|
-
return foldTreeApi.
|
|
183
|
+
return foldTreeApi.matchByKind(tree, {
|
|
184
184
|
leaf: () => {
|
|
185
185
|
throw new Error('Fold trees must contain loaded branch nodes');
|
|
186
186
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.model.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/fold-node/fold-node.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYxD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CAAC;IAC/D;;OAEG;IACH,EAAE,EAAE,EAAE,CAAC;IAEP;;;;;OAKG;IACH,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC;IAE9B;;;;OAIG;IACH,QAAQ,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,SAAS,eAAe,EAClE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GACtB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CA0B9B;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CAAC;IAC/D;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,eAAe,IAAI,QAAQ,CAAC;IAC5D,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CACtE,CAAC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,eAAe,EAC/D,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GACtB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAmB3B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SerializableKey } from '../tree
|
|
1
|
+
import type { SerializableKey } from '../tree/index.js';
|
|
2
2
|
import type { FoldSlotModel, FoldsModel } from './fold-node.model.js';
|
|
3
3
|
declare const foldsBrand: unique symbol;
|
|
4
4
|
/**
|
|
@@ -39,7 +39,7 @@ export type Folds<Id extends SerializableKey> = {
|
|
|
39
39
|
readonly id: Id;
|
|
40
40
|
};
|
|
41
41
|
};
|
|
42
|
-
export type
|
|
42
|
+
export type FoldMethods<Id extends SerializableKey> = Readonly<{
|
|
43
43
|
/**
|
|
44
44
|
* Creates Folds with its required primary fold tree in slot zero.
|
|
45
45
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold-node.types.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/fold-node/fold-node.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/fold-node/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type { SerializableKey } from './tree/index.js';
|
|
2
|
+
export type { TreeNode } from './tree/index.js';
|
|
3
|
+
export type { Folds } from './fold-node/index.js';
|
|
4
|
+
export type { Cursor } from './cursor.js';
|
|
5
|
+
export type { TreeMethods } from './tree/index.js';
|
|
6
|
+
export { createTreeMethods } from './tree/index.js';
|
|
7
|
+
export type { FoldIndex, FoldMethods } from './fold-node/index.js';
|
|
8
|
+
export { createFoldMethods } from './fold-node/index.js';
|
|
9
|
+
export type { CursorMethods } from './cursor.js';
|
|
10
|
+
export { createCursorMethods } from './cursor.js';
|
|
11
|
+
export type { State, StateMethods } from './state/state.types.js';
|
|
12
|
+
export { createStateApi } from './state/state.impl.js';
|
|
13
|
+
export type { NavEntry, NavFold, NavNode, NavMethods, NavBranch } from './nav/nav.types.js';
|
|
14
|
+
export { createOrderedNavMethods } from './nav/nav.ordered.impl.js';
|
|
15
|
+
export { createUnorderedNavMethods } from './nav/nav.unordered.impl.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state-and-nav/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createTreeMethods } from './tree/index.js';
|
|
2
|
+
export { createFoldMethods } from './fold-node/index.js';
|
|
3
|
+
export { createCursorMethods } from './cursor.js';
|
|
4
|
+
export { createStateApi } from './state/state.impl.js';
|
|
5
|
+
export { createOrderedNavMethods } from './nav/nav.ordered.impl.js';
|
|
6
|
+
export { createUnorderedNavMethods } from './nav/nav.unordered.impl.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SerializableKey, TreeMethods } from '../tree/index.js';
|
|
2
|
+
import type { FoldMethods } from '../fold-node/index.js';
|
|
3
|
+
import type { CursorMethods } from '../cursor.js';
|
|
4
|
+
import type { NavMethods } from './nav.types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates an ordered navigation projection.
|
|
7
|
+
*
|
|
8
|
+
* Source sibling order is preserved. Each maximal contiguous run of hidden
|
|
9
|
+
* direct children becomes one inline fold marker.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createOrderedNavMethods<Id extends SerializableKey, Value>(treeMethods: TreeMethods<Id, Value>, foldMethods: FoldMethods<Id>, cursorMethods: CursorMethods<Id>): NavMethods<Id, Value>;
|
|
12
|
+
//# sourceMappingURL=nav.ordered.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.ordered.impl.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/nav/nav.ordered.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAY,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAIV,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAGxB;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EACvE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,EACnC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,EAC5B,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,GAC/B,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAmGvB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { createNavTraversalMethods } from './nav.traversal.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an ordered navigation projection.
|
|
4
|
+
*
|
|
5
|
+
* Source sibling order is preserved. Each maximal contiguous run of hidden
|
|
6
|
+
* direct children becomes one inline fold marker.
|
|
7
|
+
*/
|
|
8
|
+
export function createOrderedNavMethods(treeMethods, foldMethods, cursorMethods) {
|
|
9
|
+
/**
|
|
10
|
+
* Projects loaded direct children without changing their source order.
|
|
11
|
+
*/
|
|
12
|
+
function createNavNode(entries, foldRoot, parentPath) {
|
|
13
|
+
const visibleEntries = [];
|
|
14
|
+
let foldedEntries;
|
|
15
|
+
for (const entry of entries) {
|
|
16
|
+
const entryId = treeMethods.id(entry);
|
|
17
|
+
const entryPath = [...parentPath, entryId];
|
|
18
|
+
const navigationEntry = createNavEntry(entry, foldRoot, entryPath);
|
|
19
|
+
const isFolded = foldMethods.isEntryHiddenAtPath(foldRoot, parentPath, entryId);
|
|
20
|
+
if (isFolded) {
|
|
21
|
+
/*
|
|
22
|
+
* Append a marker when a hidden run begins. Subsequent hidden
|
|
23
|
+
* siblings extend that same marker until a visible sibling ends it.
|
|
24
|
+
*/
|
|
25
|
+
if (foldedEntries === undefined) {
|
|
26
|
+
foldedEntries = {
|
|
27
|
+
folded: [],
|
|
28
|
+
};
|
|
29
|
+
visibleEntries.push(foldedEntries);
|
|
30
|
+
}
|
|
31
|
+
/*
|
|
32
|
+
* Retain the complete projection for later fold inspection.
|
|
33
|
+
* Ordinary traversal never descends into this hidden projection.
|
|
34
|
+
*/
|
|
35
|
+
foldedEntries.folded.push(navigationEntry);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
foldedEntries = undefined;
|
|
39
|
+
visibleEntries.push(navigationEntry);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
entries: visibleEntries,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function createNavEntry(entry, foldRoot, entryPath) {
|
|
46
|
+
return treeMethods.matchByKind(entry, {
|
|
47
|
+
leaf: ({ id }) => ({
|
|
48
|
+
id,
|
|
49
|
+
}),
|
|
50
|
+
unloadedBranch: ({ id }) => ({
|
|
51
|
+
id,
|
|
52
|
+
children: null,
|
|
53
|
+
}),
|
|
54
|
+
loadedBranch: ({ id, children }) => ({
|
|
55
|
+
id,
|
|
56
|
+
children: createNavNode(children, foldRoot, entryPath),
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function createRootNavBranch(root, foldRoot) {
|
|
61
|
+
return treeMethods.matchByKind(root, {
|
|
62
|
+
leaf: () => undefined,
|
|
63
|
+
unloadedBranch: ({ id }) => ({
|
|
64
|
+
id,
|
|
65
|
+
children: null,
|
|
66
|
+
}),
|
|
67
|
+
loadedBranch: ({ id, children }) => ({
|
|
68
|
+
id,
|
|
69
|
+
children: createNavNode(children, foldRoot, []),
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
...createNavTraversalMethods(cursorMethods, true),
|
|
75
|
+
from: createRootNavBranch,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CursorMethods } from '../cursor.js';
|
|
2
|
+
import type { SerializableKey } from '../tree/index.js';
|
|
3
|
+
import type { NavMethods } from './nav.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shared navigation operations over both projection styles.
|
|
6
|
+
*
|
|
7
|
+
* Fold summaries exist in either projection, but only ordered navigation
|
|
8
|
+
* exposes them as cursor destinations.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createNavTraversalMethods<Id extends SerializableKey, Value>(cursorMethods: CursorMethods<Id>, navigateFolds: boolean): Omit<NavMethods<Id, Value>, 'from'>;
|
|
11
|
+
//# sourceMappingURL=nav.traversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.traversal.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/nav/nav.traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,aAAa,EAAc,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAIV,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAExB;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EACzE,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC,EAChC,aAAa,EAAE,OAAO,GACrB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAsSrC"}
|