dirvi-lib 0.11.0-beta.6 → 0.11.0-beta.7

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.
Files changed (158) hide show
  1. package/dist/app/app-api.d.ts +7 -25
  2. package/dist/app/app-api.d.ts.map +1 -1
  3. package/dist/app/app-api.js +1 -11
  4. package/dist/app/index.d.ts +1 -0
  5. package/dist/app/index.d.ts.map +1 -1
  6. package/dist/app/index.js +1 -0
  7. package/dist/app/node-presentation.d.ts +13 -0
  8. package/dist/app/node-presentation.d.ts.map +1 -0
  9. package/dist/app/reducer/effect-to-action.d.ts +2 -2
  10. package/dist/app/reducer/effect-to-action.d.ts.map +1 -1
  11. package/dist/app/reducer/effect-to-action.js +87 -32
  12. package/dist/app/reducer/reducer-action.d.ts +12 -6
  13. package/dist/app/reducer/reducer-action.d.ts.map +1 -1
  14. package/dist/app/reducer/reducer.d.ts +4 -2
  15. package/dist/app/reducer/reducer.d.ts.map +1 -1
  16. package/dist/app/reducer/reducer.js +102 -68
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/input/application/intent-to-effect.d.ts +2 -2
  21. package/dist/input/application/intent-to-effect.d.ts.map +1 -1
  22. package/dist/input/application/intent-to-effect.js +8 -9
  23. package/dist/input/application/parse-ex-command.d.ts +1 -1
  24. package/dist/input/application/parse-ex-command.d.ts.map +1 -1
  25. package/dist/input/application/parse-normal-command.d.ts +1 -1
  26. package/dist/input/application/parse-normal-command.d.ts.map +1 -1
  27. package/dist/input/domain/effect.d.ts +1 -2
  28. package/dist/input/domain/effect.d.ts.map +1 -1
  29. package/dist/state-and-nav/cursor.d.ts +89 -0
  30. package/dist/state-and-nav/cursor.d.ts.map +1 -0
  31. package/dist/state-and-nav/cursor.js +84 -0
  32. package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.impl.d.ts +1 -1
  33. package/dist/state-and-nav/fold-node/deprecated/fold-node.impl.d.ts.map +1 -0
  34. package/dist/state-and-nav/fold-node/deprecated/fold-node.test.d.ts.map +1 -0
  35. package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.test.js +2 -2
  36. package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.types.d.ts +2 -2
  37. package/dist/state-and-nav/fold-node/deprecated/fold-node.types.d.ts.map +1 -0
  38. package/dist/{trees → state-and-nav}/fold-node/fold-node.impl.d.ts +3 -3
  39. package/dist/state-and-nav/fold-node/fold-node.impl.d.ts.map +1 -0
  40. package/dist/{trees → state-and-nav}/fold-node/fold-node.impl.js +1 -1
  41. package/dist/{trees → state-and-nav}/fold-node/fold-node.model.d.ts +1 -1
  42. package/dist/state-and-nav/fold-node/fold-node.model.d.ts.map +1 -0
  43. package/dist/{trees → state-and-nav}/fold-node/fold-node.types.d.ts +2 -2
  44. package/dist/state-and-nav/fold-node/fold-node.types.d.ts.map +1 -0
  45. package/dist/state-and-nav/fold-node/index.d.ts.map +1 -0
  46. package/dist/state-and-nav/index.d.ts +16 -0
  47. package/dist/state-and-nav/index.d.ts.map +1 -0
  48. package/dist/state-and-nav/index.js +6 -0
  49. package/dist/state-and-nav/nav/nav.ordered.impl.d.ts +12 -0
  50. package/dist/state-and-nav/nav/nav.ordered.impl.d.ts.map +1 -0
  51. package/dist/state-and-nav/nav/nav.ordered.impl.js +77 -0
  52. package/dist/state-and-nav/nav/nav.traversal.d.ts +11 -0
  53. package/dist/state-and-nav/nav/nav.traversal.d.ts.map +1 -0
  54. package/dist/state-and-nav/nav/nav.traversal.js +207 -0
  55. package/dist/{trees/nav-node/nav-node.types.d.ts → state-and-nav/nav/nav.types.d.ts} +32 -22
  56. package/dist/state-and-nav/nav/nav.types.d.ts.map +1 -0
  57. package/dist/state-and-nav/nav/nav.unordered.impl.d.ts +13 -0
  58. package/dist/state-and-nav/nav/nav.unordered.impl.d.ts.map +1 -0
  59. package/dist/state-and-nav/nav/nav.unordered.impl.js +77 -0
  60. package/dist/state-and-nav/state/state.impl.d.ts +9 -0
  61. package/dist/state-and-nav/state/state.impl.d.ts.map +1 -0
  62. package/dist/{trees → state-and-nav}/state/state.impl.js +62 -9
  63. package/dist/state-and-nav/state/state.schemas.d.ts +2 -0
  64. package/dist/state-and-nav/state/state.schemas.d.ts.map +1 -0
  65. package/dist/state-and-nav/state/state.schemas.js +39 -0
  66. package/dist/state-and-nav/state/state.types.d.ts +72 -0
  67. package/dist/state-and-nav/state/state.types.d.ts.map +1 -0
  68. package/dist/state-and-nav/tree/deprecated/tree-node.arb.d.ts.map +1 -0
  69. package/dist/state-and-nav/tree/deprecated/tree-node.arb.debug.test.d.ts.map +1 -0
  70. package/dist/state-and-nav/tree/deprecated/tree-node.impl.d.ts.map +1 -0
  71. package/dist/state-and-nav/tree/deprecated/tree-node.schemas.d.ts.map +1 -0
  72. package/dist/state-and-nav/tree/deprecated/tree-node.test.d.ts.map +1 -0
  73. package/dist/state-and-nav/tree/deprecated/tree-node.types.d.ts.map +1 -0
  74. package/dist/state-and-nav/tree/index.d.ts +7 -0
  75. package/dist/state-and-nav/tree/index.d.ts.map +1 -0
  76. package/dist/state-and-nav/tree/index.js +1 -0
  77. package/dist/state-and-nav/tree/tree-node.arb.d.ts +94 -0
  78. package/dist/state-and-nav/tree/tree-node.arb.d.ts.map +1 -0
  79. package/dist/state-and-nav/tree/tree-node.arb.debug.test.d.ts +2 -0
  80. package/dist/state-and-nav/tree/tree-node.arb.debug.test.d.ts.map +1 -0
  81. package/dist/state-and-nav/tree/tree-node.arb.debug.test.js +54 -0
  82. package/dist/state-and-nav/tree/tree-node.arb.js +188 -0
  83. package/dist/state-and-nav/tree/tree-node.model.d.ts +193 -0
  84. package/dist/state-and-nav/tree/tree-node.model.d.ts.map +1 -0
  85. package/dist/state-and-nav/tree/tree-node.model.js +110 -0
  86. package/dist/state-and-nav/tree/tree-node.test.d.ts +2 -0
  87. package/dist/state-and-nav/tree/tree-node.test.d.ts.map +1 -0
  88. package/dist/state-and-nav/tree/tree-node.test.js +234 -0
  89. package/dist/{trees/tree-node/tree-node.impl.d.ts → state-and-nav/tree/tree.impl.d.ts} +3 -3
  90. package/dist/state-and-nav/tree/tree.impl.d.ts.map +1 -0
  91. package/dist/{trees/tree-node/tree-node.impl.js → state-and-nav/tree/tree.impl.js} +19 -16
  92. package/dist/{trees/tree-node/tree-node.types.d.ts → state-and-nav/tree/tree.types.d.ts} +64 -44
  93. package/dist/state-and-nav/tree/tree.types.d.ts.map +1 -0
  94. package/dist/state-and-nav/tree/tree.types.js +1 -0
  95. package/package.json +1 -1
  96. package/dist/trees/cursor.d.ts +0 -59
  97. package/dist/trees/cursor.d.ts.map +0 -1
  98. package/dist/trees/cursor.js +0 -55
  99. package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts.map +0 -1
  100. package/dist/trees/fold-node/deprecated/fold-node.test.d.ts.map +0 -1
  101. package/dist/trees/fold-node/deprecated/fold-node.types.d.ts.map +0 -1
  102. package/dist/trees/fold-node/fold-node.impl.d.ts.map +0 -1
  103. package/dist/trees/fold-node/fold-node.model.d.ts.map +0 -1
  104. package/dist/trees/fold-node/fold-node.types.d.ts.map +0 -1
  105. package/dist/trees/fold-node/index.d.ts.map +0 -1
  106. package/dist/trees/index.d.ts +0 -9
  107. package/dist/trees/index.d.ts.map +0 -1
  108. package/dist/trees/index.js +0 -8
  109. package/dist/trees/nav-node/nav-node.impl.d.ts +0 -29
  110. package/dist/trees/nav-node/nav-node.impl.d.ts.map +0 -1
  111. package/dist/trees/nav-node/nav-node.impl.js +0 -223
  112. package/dist/trees/nav-node/nav-node.types.d.ts.map +0 -1
  113. package/dist/trees/state/state.impl.d.ts +0 -8
  114. package/dist/trees/state/state.impl.d.ts.map +0 -1
  115. package/dist/trees/state/state.schemas.d.ts +0 -25
  116. package/dist/trees/state/state.schemas.d.ts.map +0 -1
  117. package/dist/trees/state/state.schemas.js +0 -17
  118. package/dist/trees/state/state.types.d.ts +0 -36
  119. package/dist/trees/state/state.types.d.ts.map +0 -1
  120. package/dist/trees/tree-node/deprecated/tree-node.arb.d.ts.map +0 -1
  121. package/dist/trees/tree-node/deprecated/tree-node.arb.debug.test.d.ts.map +0 -1
  122. package/dist/trees/tree-node/deprecated/tree-node.impl.d.ts.map +0 -1
  123. package/dist/trees/tree-node/deprecated/tree-node.schemas.d.ts.map +0 -1
  124. package/dist/trees/tree-node/deprecated/tree-node.test.d.ts.map +0 -1
  125. package/dist/trees/tree-node/deprecated/tree-node.types.d.ts.map +0 -1
  126. package/dist/trees/tree-node/index.d.ts +0 -5
  127. package/dist/trees/tree-node/index.d.ts.map +0 -1
  128. package/dist/trees/tree-node/index.js +0 -2
  129. package/dist/trees/tree-node/tree-node.arb.d.ts +0 -104
  130. package/dist/trees/tree-node/tree-node.arb.d.ts.map +0 -1
  131. package/dist/trees/tree-node/tree-node.arb.js +0 -188
  132. package/dist/trees/tree-node/tree-node.impl.d.ts.map +0 -1
  133. package/dist/trees/tree-node/tree-node.model.d.ts +0 -78
  134. package/dist/trees/tree-node/tree-node.model.d.ts.map +0 -1
  135. package/dist/trees/tree-node/tree-node.model.js +0 -37
  136. package/dist/trees/tree-node/tree-node.types.d.ts.map +0 -1
  137. /package/dist/{trees/fold-node/deprecated/fold-node.types.js → app/node-presentation.js} +0 -0
  138. /package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.impl.js +0 -0
  139. /package/dist/{trees → state-and-nav}/fold-node/deprecated/fold-node.test.d.ts +0 -0
  140. /package/dist/{trees/fold-node → state-and-nav/fold-node/deprecated}/fold-node.types.js +0 -0
  141. /package/dist/{trees → state-and-nav}/fold-node/fold-node.model.js +0 -0
  142. /package/dist/{trees/nav-node/nav-node.types.js → state-and-nav/fold-node/fold-node.types.js} +0 -0
  143. /package/dist/{trees → state-and-nav}/fold-node/index.d.ts +0 -0
  144. /package/dist/{trees → state-and-nav}/fold-node/index.js +0 -0
  145. /package/dist/{trees/state/state.types.js → state-and-nav/nav/nav.types.js} +0 -0
  146. /package/dist/{trees/tree-node/deprecated/tree-node.types.js → state-and-nav/state/state.types.js} +0 -0
  147. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.d.ts +0 -0
  148. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.debug.test.d.ts +0 -0
  149. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.debug.test.js +0 -0
  150. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.arb.js +0 -0
  151. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.impl.d.ts +0 -0
  152. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.impl.js +0 -0
  153. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.schemas.d.ts +0 -0
  154. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.schemas.js +0 -0
  155. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.test.d.ts +0 -0
  156. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.test.js +0 -0
  157. /package/dist/{trees/tree-node → state-and-nav/tree}/deprecated/tree-node.types.d.ts +0 -0
  158. /package/dist/{trees/tree-node → state-and-nav/tree/deprecated}/tree-node.types.js +0 -0
@@ -1,4 +1,6 @@
1
- import type { CursorApi, FoldsApi, NavNodeApi, SerializableKey, StateApi, TreeNode, TreeNodeApi } from '../trees/index.js';
1
+ import type { NavMethods, SerializableKey, StateApi } from '../state-and-nav/index.js';
2
+ import type { PresentNode } from './node-presentation.js';
3
+ import { TreeNode } from '../state-and-nav/index.js';
2
4
  /**
3
5
  * Application-specific tree dependencies and operations.
4
6
  *
@@ -15,24 +17,21 @@ export type AppApi<Id extends SerializableKey, Value, ViewKey = string> = Readon
15
17
  * Name used to distinguish a particular application instance.
16
18
  */
17
19
  name: string;
18
- /**
19
- * ID used for the application's root node.
20
- */
21
- rootId: Id;
22
20
  /**
23
21
  * Loads direct children for the branch addressed by `path`.
24
22
  *
25
23
  * Returned nodes must be opaque tree values created or decoded through this
26
24
  * application's TreeNodeApi specialization.
27
25
  */
28
- loadBranches: (path: readonly Id[]) => Promise<readonly TreeNode<Id, Value>[]>;
26
+ loadChildren: (path: readonly Id[]) => Promise<readonly TreeNode<Id, Value>[]>;
29
27
  /**
30
28
  * Creates the application's root node.
31
29
  *
32
30
  * Invariant: the returned node is an open branch. That invariant is checked
33
31
  * when an initial State is created.
34
32
  */
35
- createRoot: () => Promise<TreeNode<Id, Value>>;
33
+ loadRoot: () => Promise<TreeNode<Id, Value>>;
34
+ presentNode: PresentNode<Id>;
36
35
  /**
37
36
  * Subscribes to external data changes that require tree state to be loaded
38
37
  * again.
@@ -40,27 +39,10 @@ export type AppApi<Id extends SerializableKey, Value, ViewKey = string> = Readon
40
39
  * Returns an unsubscribe function.
41
40
  */
42
41
  subscribeToResync: (listener: () => void) => () => void;
43
- /**
44
- * Generic structural operations for this application's buffer tree.
45
- */
46
- treeNodeApi: TreeNodeApi<Id, Value>;
47
- /**
48
- * Semantic fold-state operations.
49
- *
50
- * This remains temporarily available while FoldNode itself is migrated.
51
- */
52
- foldsApi: FoldsApi<Id>;
53
- cursorApi: CursorApi<Id>;
54
42
  stateApi: StateApi<Id, Value>;
55
43
  /**
56
44
  * UI navigation projection and cursor-navigation operations.
57
45
  */
58
- navNodeApi: NavNodeApi<Id, Value>;
59
- }>;
60
- export type AppStateApis<Id extends SerializableKey, Value> = Readonly<{
61
- treeNodeApi: TreeNodeApi<Id, Value>;
62
- cursorApi: CursorApi<Id>;
63
- stateApi: StateApi<Id, Value>;
46
+ navMethods: NavMethods<Id, Value>;
64
47
  }>;
65
- export declare function createAppStateApis<Id extends SerializableKey, Value>(): AppStateApis<Id, Value>;
66
48
  //# sourceMappingURL=app-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-api.d.ts","sourceRoot":"","sources":["../../src/app/app-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,eAAe,EAEf,QAAQ,EACR,QAAQ,EACR,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAO3B;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,CAChB,EAAE,SAAS,eAAe,EAC1B,KAAK,EACL,OAAO,GAAG,MAAM,IACd,QAAQ,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,EAAE,CAAC;IAEX;;;;;OAKG;IACH,YAAY,EAAE,CACZ,IAAI,EAAE,SAAS,EAAE,EAAE,KAChB,OAAO,CAAC,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAExD;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvB,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAEzB,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAE9B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAKnC,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,QAAQ,CAAC;IACrE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,wBAAgB,kBAAkB,CAChC,EAAE,SAAS,eAAe,EAC1B,KAAK,KACF,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAU3B"}
1
+ {"version":3,"file":"app-api.d.ts","sourceRoot":"","sources":["../../src/app/app-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,QAAQ,EACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,CAChB,EAAE,SAAS,eAAe,EAC1B,KAAK,EACL,OAAO,GAAG,MAAM,IACd,QAAQ,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,YAAY,EAAE,CACZ,IAAI,EAAE,SAAS,EAAE,EAAE,KAChB,OAAO,CAAC,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAE7C,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAExD,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAE9B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CACnC,CAAC,CAAC"}
@@ -1,11 +1 @@
1
- import { createCursorApi, createStateApi, createTreeNodeApi, } from '../trees/index.js';
2
- export function createAppStateApis() {
3
- const treeNodeApi = createTreeNodeApi();
4
- const cursorApi = createCursorApi();
5
- const stateApi = createStateApi(treeNodeApi, cursorApi);
6
- return {
7
- treeNodeApi,
8
- cursorApi,
9
- stateApi,
10
- };
11
- }
1
+ export {};
@@ -1,4 +1,5 @@
1
1
  export * from './app-api.js';
2
+ export * from './node-presentation.js';
2
3
  export * from './reducer/effect-to-action.js';
3
4
  export * from './reducer/reducer.js';
4
5
  export * from './reducer/reducer-action.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC"}
package/dist/app/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './app-api.js';
2
+ export * from './node-presentation.js';
2
3
  export * from './reducer/effect-to-action.js';
3
4
  export * from './reducer/reducer.js';
4
5
  export * from './reducer/reducer-action.js';
@@ -0,0 +1,13 @@
1
+ import type { SerializableKey } from '../state-and-nav/index.js';
2
+ /**
3
+ * A semantic highlight name, not a concrete terminal color.
4
+ *
5
+ * Dot-separated names allow fallback to broader categories:
6
+ * "filesystem.directory" can fall back to "filesystem".
7
+ */
8
+ export type HighlightToken = string;
9
+ export type PresentNode<Id extends SerializableKey> = (id: Id, isBranch: boolean) => Readonly<{
10
+ content: string;
11
+ highlight: HighlightToken;
12
+ }>;
13
+ //# sourceMappingURL=node-presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-presentation.d.ts","sourceRoot":"","sources":["../../src/app/node-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,eAAe,IAAI,CACpD,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,OAAO,KACd,QAAQ,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,cAAc,CAAC;CAC3B,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CursorApi, FoldsApi, NavBranch, NavNodeApi, SerializableKey, State } from '../../trees/index.js';
1
+ import type { NavBranch, NavMethods, SerializableKey, State, StateApi } from '../../state-and-nav/index.js';
2
2
  import type { EffectAction } from '../../input/domain/index.js';
3
3
  import type { ReducerAction } from './reducer-action.js';
4
4
  export type EffectToActionResult<Id extends SerializableKey, Value> = Readonly<{
@@ -11,5 +11,5 @@ export type EffectToActionResult<Id extends SerializableKey, Value> = Readonly<{
11
11
  kind: 'ignored';
12
12
  }>;
13
13
  export type EffectToAction<Id extends SerializableKey, Value> = (effectAction: EffectAction<Id, Value>, navigation: NavBranch<Id>, state: State<Id, Value>) => EffectToActionResult<Id, Value>;
14
- export declare function createEffectToAction<Id extends SerializableKey, Value>(foldsApi: FoldsApi<Id>, cursorApi: CursorApi<Id>, navNodeApi: NavNodeApi<Id, Value>): EffectToAction<Id, Value>;
14
+ export declare function createEffectToAction<Id extends SerializableKey, Value>(stateApi: StateApi<Id, Value>, navNodeApi: NavMethods<Id, Value>): EffectToAction<Id, Value>;
15
15
  //# sourceMappingURL=effect-to-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"effect-to-action.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/effect-to-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,eAAe,EACf,KAAK,EACN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAC9D,QAAQ,CAAC;IACP,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAClC,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEP,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,CAC9D,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,EACrC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,EACzB,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KACpB,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAoDrC,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EACpE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EACtB,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,EACxB,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,GAChC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAsO3B"}
1
+ {"version":3,"file":"effect-to-action.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/effect-to-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,SAAS,EACT,UAAU,EACV,eAAe,EACf,KAAK,EACL,QAAQ,EACT,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAC9D,QAAQ,CAAC;IACP,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAClC,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEP,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,CAC9D,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,EACrC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,EACzB,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KACpB,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAqDrC,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EACpE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAC7B,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,GAChC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CA8S3B"}
@@ -10,7 +10,7 @@ function resolveFoldTreeIndex(foldsApi, folds, foldTree) {
10
10
  kind: 'notFound',
11
11
  message: `Fold tree at index ${foldTree.index} not found.`,
12
12
  };
13
- case 'name':
13
+ case 'name': {
14
14
  const index = foldsApi.getIndexByName(folds, foldTree.name);
15
15
  return index === undefined
16
16
  ? {
@@ -21,13 +21,15 @@ function resolveFoldTreeIndex(foldsApi, folds, foldTree) {
21
21
  kind: 'found',
22
22
  index,
23
23
  };
24
+ }
24
25
  default: {
25
26
  const _exhaustive = foldTree;
26
27
  throw new Error(`Unhandled fold tree reference: ${JSON.stringify(_exhaustive)}`);
27
28
  }
28
29
  }
29
30
  }
30
- export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
31
+ export function createEffectToAction(stateApi, navNodeApi) {
32
+ const { cursorApi, foldsApi } = stateApi;
31
33
  function action(reducerAction) {
32
34
  return {
33
35
  kind: 'action',
@@ -46,23 +48,25 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
46
48
  };
47
49
  }
48
50
  function effectToAction(effectAction, navigation, state) {
51
+ const cursor = stateApi.getCursor(state);
52
+ const folds = stateApi.getFolds(state);
49
53
  switch (effectAction.effectActionType) {
50
54
  case 'nextEntry': {
51
- const cursor = navNodeApi.nextCursor(navigation, state.cursor);
52
- return cursor === undefined
55
+ const nextCursor = navNodeApi.nextCursor(navigation, cursor);
56
+ return nextCursor === undefined
53
57
  ? ignored()
54
58
  : action({
55
59
  kind: 'changeCursor',
56
- cursor,
60
+ cursor: nextCursor,
57
61
  });
58
62
  }
59
63
  case 'prevEntry': {
60
- const cursor = navNodeApi.previousCursor(navigation, state.cursor);
61
- return cursor === undefined
64
+ const previousCursor = navNodeApi.previousCursor(navigation, cursor);
65
+ return previousCursor === undefined
62
66
  ? ignored()
63
67
  : action({
64
68
  kind: 'changeCursor',
65
- cursor,
69
+ cursor: previousCursor,
66
70
  });
67
71
  }
68
72
  case 'setBranchEntries':
@@ -72,63 +76,113 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
72
76
  entries: effectAction.entries,
73
77
  });
74
78
  case 'navigateToParent': {
75
- // TODO: navigation should be Loaded Branch instead to encode invariant
76
- // in state
79
+ // TODO: Encode the loaded-root invariant in the navigation type.
77
80
  const navNode = navigation.children;
78
81
  if (navNode === null) {
79
82
  return ignored();
80
83
  }
81
- const cursor = navNodeApi.parentCursor(navNode, state.cursor);
82
- return cursor === undefined
84
+ const parentCursor = navNodeApi.parentCursor(navNode, cursor);
85
+ return parentCursor === undefined
83
86
  ? ignored()
84
87
  : action({
85
88
  kind: 'changeCursor',
86
- cursor,
89
+ cursor: parentCursor,
87
90
  });
88
91
  }
89
92
  case 'addToFoldTree': {
90
- const foldTree = resolveFoldTreeIndex(foldsApi, state.folds, effectAction.foldTree);
93
+ const foldTree = resolveFoldTreeIndex(foldsApi, folds, effectAction.foldTree);
91
94
  if (foldTree.kind === 'notFound') {
92
95
  return rejected(foldTree.message);
93
96
  }
94
- if (state.cursor.length === 0) {
97
+ // The root cannot be folded, and a fold marker is already folded.
98
+ if (!cursorApi.isNodeCursor(cursor) || cursor.path.length === 0) {
95
99
  return ignored();
96
100
  }
97
- const cursor = navNodeApi.cursorAfterFold(navigation, state.cursor);
98
- if (cursor === undefined) {
101
+ /*
102
+ * Adding an entry to an inactive fold tree does not change the
103
+ * navigation projection, so keep the cursor where it is.
104
+ */
105
+ const nextCursor = foldsApi.isActiveAtIndex(folds, foldTree.index) === true
106
+ ? navNodeApi.cursorAfterFold(navigation, cursor)
107
+ : cursor;
108
+ if (nextCursor === undefined) {
99
109
  return ignored();
100
110
  }
101
111
  return action({
102
112
  kind: 'addToFoldTree',
103
- path: state.cursor,
104
- cursor,
113
+ path: cursor.path,
114
+ cursor: nextCursor,
105
115
  foldTreeIndex: foldTree.index,
106
116
  });
107
117
  }
108
118
  case 'removeFromFoldTree': {
109
- const foldTree = resolveFoldTreeIndex(foldsApi, state.folds, effectAction.foldTree);
119
+ const foldTree = resolveFoldTreeIndex(foldsApi, folds, effectAction.foldTree);
110
120
  if (foldTree.kind === 'notFound') {
111
121
  return rejected(foldTree.message);
112
122
  }
113
- const currentPath = cursorApi.getPath(state.cursor);
114
123
  const navNode = navigation.children;
115
- // TODO: Should not be possible with update type
124
+ // TODO: Encode the loaded-root invariant in the navigation type.
116
125
  if (navNode === null) {
117
126
  return ignored();
118
127
  }
119
- const node = navNodeApi.getNodeAtPath(navNode, currentPath);
120
- if (node === undefined || node.folded?.entries.length === 0) {
128
+ if (cursorApi.isFoldCursor(cursor)) {
129
+ const parent = navNodeApi.getNodeAtPath(navNode, cursor.parentPath);
130
+ const foldEntry = parent?.entries.find((entry) => {
131
+ if (!navNodeApi.entryIsFold(entry)) {
132
+ return false;
133
+ }
134
+ const firstEntry = entry.folded[0];
135
+ return (firstEntry !== undefined &&
136
+ !navNodeApi.entryIsFold(firstEntry) &&
137
+ firstEntry.id === cursor.firstId);
138
+ });
139
+ if (foldEntry === undefined || !navNodeApi.entryIsFold(foldEntry)) {
140
+ return ignored();
141
+ }
142
+ /*
143
+ * Remove only this fold tree's contribution to the selected
144
+ * ordered run. Other fold trees may still hide some entries.
145
+ */
146
+ const entryIds = [];
147
+ for (const entry of foldEntry.folded) {
148
+ if (!navNodeApi.entryIsFold(entry) &&
149
+ foldsApi.isEntryHiddenInFoldAtPath(folds, foldTree.index, cursor.parentPath, entry.id)) {
150
+ entryIds.push(entry.id);
151
+ }
152
+ }
153
+ const firstId = entryIds[0];
154
+ if (firstId === undefined) {
155
+ return ignored();
156
+ }
157
+ return action({
158
+ kind: 'removeFromFoldTree',
159
+ path: cursor.parentPath,
160
+ entryIds,
161
+ cursor: {
162
+ path: [...cursor.parentPath, firstId],
163
+ },
164
+ foldTreeIndex: foldTree.index,
165
+ });
166
+ }
167
+ /*
168
+ * In unordered navigation, folds are summarized on the selected
169
+ * parent. Reveal all direct entries hidden by this fold tree there.
170
+ */
171
+ const node = navNodeApi.getNodeAtPath(navNode, cursor.path);
172
+ const hasFoldedEntries = node?.entries.some((entry) => navNodeApi.entryIsFold(entry) && entry.folded.length > 0);
173
+ if (!hasFoldedEntries) {
121
174
  return ignored();
122
175
  }
123
176
  return action({
124
177
  kind: 'removeFromFoldTree',
125
- path: currentPath,
126
- cursor: state.cursor,
178
+ path: cursor.path,
179
+ entryIds: null,
180
+ cursor,
127
181
  foldTreeIndex: foldTree.index,
128
182
  });
129
183
  }
130
184
  case 'fold': {
131
- const foldTree = resolveFoldTreeIndex(foldsApi, state.folds, effectAction.foldTree);
185
+ const foldTree = resolveFoldTreeIndex(foldsApi, folds, effectAction.foldTree);
132
186
  return foldTree.kind === 'notFound'
133
187
  ? rejected(foldTree.message)
134
188
  : action({
@@ -137,7 +191,7 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
137
191
  });
138
192
  }
139
193
  case 'unfold': {
140
- const foldTree = resolveFoldTreeIndex(foldsApi, state.folds, effectAction.foldTree);
194
+ const foldTree = resolveFoldTreeIndex(foldsApi, folds, effectAction.foldTree);
141
195
  return foldTree.kind === 'notFound'
142
196
  ? rejected(foldTree.message)
143
197
  : action({
@@ -146,7 +200,7 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
146
200
  });
147
201
  }
148
202
  case 'toggleFold': {
149
- const foldTree = resolveFoldTreeIndex(foldsApi, state.folds, effectAction.foldTree);
203
+ const foldTree = resolveFoldTreeIndex(foldsApi, folds, effectAction.foldTree);
150
204
  return foldTree.kind === 'notFound'
151
205
  ? rejected(foldTree.message)
152
206
  : action({
@@ -155,7 +209,7 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
155
209
  });
156
210
  }
157
211
  case 'createFoldTree': {
158
- const existingIndex = foldsApi.getIndexByName(state.folds, effectAction.name);
212
+ const existingIndex = foldsApi.getIndexByName(folds, effectAction.name);
159
213
  return existingIndex === undefined
160
214
  ? action({
161
215
  kind: 'createFoldTree',
@@ -164,7 +218,7 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
164
218
  : rejected(`Fold tree named "${effectAction.name}" already exists.`);
165
219
  }
166
220
  case 'deleteFoldTree': {
167
- const foldTreeIndex = foldsApi.getIndexByName(state.folds, effectAction.name);
221
+ const foldTreeIndex = foldsApi.getIndexByName(folds, effectAction.name);
168
222
  if (foldTreeIndex === undefined) {
169
223
  return rejected(`Fold tree named "${effectAction.name}" not found.`);
170
224
  }
@@ -176,9 +230,10 @@ export function createEffectToAction(foldsApi, cursorApi, navNodeApi) {
176
230
  name: effectAction.name,
177
231
  });
178
232
  }
179
- default:
233
+ default: {
180
234
  const _exhaustive = effectAction;
181
235
  throw new Error(`Unhandled effect action: ${JSON.stringify(_exhaustive)}`);
236
+ }
182
237
  }
183
238
  }
184
239
  return effectToAction;
@@ -1,4 +1,4 @@
1
- import type { Cursor, SerializableKey, State, TreeNode } from '../../trees/index.js';
1
+ import type { Cursor, FoldIndex, SerializableKey, State, TreeNode } from '../../state-and-nav/index.js';
2
2
  export type ReducerAction<Id extends SerializableKey, Value> = {
3
3
  kind: 'changeCursor';
4
4
  cursor: Cursor<Id>;
@@ -14,31 +14,37 @@ export type ReducerAction<Id extends SerializableKey, Value> = {
14
14
  kind: 'addToFoldTree';
15
15
  path: readonly Id[];
16
16
  cursor: Cursor<Id>;
17
- foldTreeIndex: number;
17
+ foldTreeIndex: FoldIndex;
18
18
  } | {
19
19
  kind: 'removeFromFoldTree';
20
+ /** Parent branch containing the hidden entries. */
20
21
  path: readonly Id[];
22
+ /**
23
+ * null removes every direct hidden entry in this fold tree.
24
+ * An array removes only the specified entries of an inline fold run.
25
+ */
26
+ entryIds: readonly Id[] | null;
21
27
  cursor: Cursor<Id>;
22
- foldTreeIndex: number;
28
+ foldTreeIndex: FoldIndex;
23
29
  } | {
24
30
  /**
25
31
  * Activates a fold tree, making its hidden entries contribute to the
26
32
  * visible navigation projection.
27
33
  */
28
34
  kind: 'fold';
29
- foldTreeIndex: number;
35
+ foldTreeIndex: FoldIndex;
30
36
  } | {
31
37
  /**
32
38
  * Deactivates a fold tree while preserving its fold definition.
33
39
  */
34
40
  kind: 'unfold';
35
- foldTreeIndex: number;
41
+ foldTreeIndex: FoldIndex;
36
42
  } | {
37
43
  /**
38
44
  * Inverts whether a fold tree contributes to hiding entries.
39
45
  */
40
46
  kind: 'toggleFold';
41
- foldTreeIndex: number;
47
+ foldTreeIndex: FoldIndex;
42
48
  } | {
43
49
  kind: 'createFoldTree';
44
50
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"reducer-action.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/reducer-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,KAAK,EACL,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IACvD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;CACpB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;CAChD,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
1
+ {"version":3,"file":"reducer-action.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/reducer-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAAE,SAAS,EACjB,eAAe,EACf,KAAK,EACL,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IACvD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;CACpB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;CAChD,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,SAAS,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,mDAAmD;IACnD,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAEpB;;;OAGG;IACH,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,aAAa,EAAE,SAAS,CAAC;CAC1B,GACD;IACE;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,SAAS,CAAC;CAC1B,GACD;IACE;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,SAAS,CAAC;CAC1B,GACD;IACE;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,SAAS,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -1,5 +1,7 @@
1
- import type { FoldsApi, SerializableKey, State, TreeNodeApi } from '../../trees/index.js';
1
+ import type { NavMethods } from '../../state-and-nav/index.js';
2
+ import type { SerializableKey } from '../../state-and-nav/index.js';
3
+ import type { State, StateApi } from '../../state-and-nav/index.js';
2
4
  import type { ReducerAction } from './reducer-action.js';
3
5
  export type Reducer<Id extends SerializableKey, Value> = (state: State<Id, Value>, action: ReducerAction<Id, Value>) => State<Id, Value>;
4
- export declare function createReducer<Id extends SerializableKey, Value>(treeNodeApi: TreeNodeApi<Id, Value>, foldsApi: FoldsApi<Id>): Reducer<Id, Value>;
6
+ export declare function createReducer<Id extends SerializableKey, Value>(stateApi: StateApi<Id, Value>, navNodeApi: NavMethods<Id, Value>): Reducer<Id, Value>;
5
7
  //# sourceMappingURL=reducer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/reducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,KAAK,EACL,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAezD,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,CACvD,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EACvB,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,KAC7B,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAEtB,wBAAgB,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAC7D,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,EACnC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,GACrB,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CA+LpB"}
1
+ {"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../../src/app/reducer/reducer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACX,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,eAAe,EAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAezD,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,CACvD,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EACvB,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,KAC7B,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAEtB,wBAAgB,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAC7D,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAC7B,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,GAChC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAkRpB"}