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,4 @@
1
- import type { SerializableKey } from '../tree-node/index.js';
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 FoldsApi<Id extends SerializableKey> = Readonly<{
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, StateApi } from './state/state.types.js';
12
+ export { createStateApi } from './state/state.impl.js';
13
+ export type { 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,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzE,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,CA0SrC"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Shared navigation operations over both projection styles.
3
+ *
4
+ * Fold summaries exist in either projection, but only ordered navigation
5
+ * exposes them as cursor destinations.
6
+ */
7
+ export function createNavTraversalMethods(cursorMethods, navigateFolds) {
8
+ function entryIsBranch(entry) {
9
+ return 'children' in entry;
10
+ }
11
+ function entryIsFold(entry) {
12
+ return 'folded' in entry;
13
+ }
14
+ function foldCursor(entry, parentPath) {
15
+ const firstEntry = entry.folded[0];
16
+ /*
17
+ * Projected folds are nonempty and contain direct source entries.
18
+ * Keep the guard because NavFold also permits richer future contents.
19
+ */
20
+ if (firstEntry === undefined || entryIsFold(firstEntry)) {
21
+ return undefined;
22
+ }
23
+ return {
24
+ parentPath: [...parentPath],
25
+ firstId: firstEntry.id,
26
+ };
27
+ }
28
+ function getNodeAtPath(navigation, path) {
29
+ let node = navigation;
30
+ for (const id of path) {
31
+ const entry = node.entries.find((candidate) => !entryIsFold(candidate) && candidate.id === id);
32
+ /*
33
+ * Paths cannot pass through leaves, folds, or unloaded branches.
34
+ * Hidden entries inside fold summaries are deliberately not searched.
35
+ */
36
+ if (entry === undefined ||
37
+ !entryIsBranch(entry) ||
38
+ entry.children === null) {
39
+ return undefined;
40
+ }
41
+ node = entry.children;
42
+ }
43
+ // An empty path identifies the current navigation node.
44
+ return node;
45
+ }
46
+ function getEntryAtPath(navigation, path) {
47
+ /*
48
+ * A NavNode does not itself correspond to a NavEntry. Therefore [] does
49
+ * not resolve to an entry.
50
+ */
51
+ if (path.length === 0) {
52
+ return undefined;
53
+ }
54
+ const parent = getNodeAtPath(navigation, path.slice(0, -1));
55
+ const id = path[path.length - 1];
56
+ return parent?.entries.find((candidate) => !entryIsFold(candidate) && candidate.id === id);
57
+ }
58
+ function cursors(navigation, parentPath = []) {
59
+ const positions = [];
60
+ for (const entry of navigation.entries) {
61
+ if (entryIsFold(entry)) {
62
+ if (navigateFolds) {
63
+ const cursor = foldCursor(entry, parentPath);
64
+ if (cursor !== undefined) {
65
+ positions.push(cursor);
66
+ }
67
+ }
68
+ // Hidden descendants are never separately navigable.
69
+ continue;
70
+ }
71
+ const entryPath = [...parentPath, entry.id];
72
+ positions.push({ path: entryPath });
73
+ if (entryIsBranch(entry) && entry.children !== null) {
74
+ positions.push(...cursors(entry.children, entryPath));
75
+ }
76
+ }
77
+ return positions;
78
+ }
79
+ function rootCursors(rootNode) {
80
+ return [
81
+ { path: [] },
82
+ ...(rootNode.children === null ? [] : cursors(rootNode.children)),
83
+ ];
84
+ }
85
+ function nextCursor(rootNode, cursor) {
86
+ const positions = rootCursors(rootNode);
87
+ const currentIndex = positions.findIndex((candidate) => cursorMethods.equal(candidate, cursor));
88
+ if (currentIndex === -1) {
89
+ return undefined;
90
+ }
91
+ return positions[currentIndex + 1];
92
+ }
93
+ function previousCursor(rootNode, cursor) {
94
+ const positions = rootCursors(rootNode);
95
+ const currentIndex = positions.findIndex((candidate) => cursorMethods.equal(candidate, cursor));
96
+ if (currentIndex <= 0) {
97
+ return undefined;
98
+ }
99
+ return positions[currentIndex - 1];
100
+ }
101
+ function cursorAfterFold(rootNode, cursor) {
102
+ if (!cursorMethods.isNodeCursor(cursor) ||
103
+ cursor.path.length === 0 ||
104
+ rootNode.children === null) {
105
+ // Folding root is disallowed. Fold markers are already folded.
106
+ return undefined;
107
+ }
108
+ if (navigateFolds) {
109
+ const parentPath = cursor.path.slice(0, -1);
110
+ const parent = getNodeAtPath(rootNode.children, parentPath);
111
+ const id = cursor.path[cursor.path.length - 1];
112
+ if (parent === undefined) {
113
+ return undefined;
114
+ }
115
+ const currentIndex = parent.entries.findIndex((entry) => !entryIsFold(entry) && entry.id === id);
116
+ if (currentIndex === -1) {
117
+ return undefined;
118
+ }
119
+ const entry = parent.entries[currentIndex];
120
+ if (entry === undefined || entryIsFold(entry)) {
121
+ return undefined;
122
+ }
123
+ const previousEntry = parent.entries[currentIndex - 1];
124
+ /*
125
+ * Folding next to an existing preceding run merges into that run.
126
+ * A following run also merges, but does not determine the first ID.
127
+ */
128
+ if (previousEntry !== undefined && entryIsFold(previousEntry)) {
129
+ const previousFoldCursor = foldCursor(previousEntry, parentPath);
130
+ if (previousFoldCursor !== undefined) {
131
+ return previousFoldCursor;
132
+ }
133
+ }
134
+ return {
135
+ parentPath,
136
+ firstId: entry.id,
137
+ };
138
+ }
139
+ const positions = rootCursors(rootNode);
140
+ const currentIndex = positions.findIndex((candidate) => cursorMethods.equal(candidate, cursor));
141
+ if (currentIndex === -1) {
142
+ return undefined;
143
+ }
144
+ for (let index = currentIndex + 1; index < positions.length; index += 1) {
145
+ const candidate = positions[index];
146
+ if (candidate === undefined) {
147
+ continue;
148
+ }
149
+ // Skip entries that are children of the entry about to be folded.
150
+ if (cursorMethods.cursorBelongsToSubtree(candidate, cursor.path)) {
151
+ continue;
152
+ }
153
+ return candidate;
154
+ }
155
+ /*
156
+ * No following position survives the fold. Move before the subtree,
157
+ * rather than into one of its soon-to-be-hidden descendants.
158
+ */
159
+ return positions[currentIndex - 1];
160
+ }
161
+ function parentCursor(_navigation, cursor) {
162
+ if (cursorMethods.isFoldCursor(cursor)) {
163
+ return {
164
+ path: [...cursor.parentPath],
165
+ };
166
+ }
167
+ if (cursor.path.length === 0) {
168
+ return undefined;
169
+ }
170
+ return {
171
+ path: cursor.path.slice(0, -1),
172
+ };
173
+ }
174
+ function visibleLeavesPaths(navigation, parentPath = []) {
175
+ const paths = [];
176
+ for (const entry of navigation.entries) {
177
+ if (entryIsFold(entry)) {
178
+ continue;
179
+ }
180
+ const entryPath = [...parentPath, entry.id];
181
+ if (!entryIsBranch(entry)) {
182
+ paths.push(entryPath);
183
+ continue;
184
+ }
185
+ /*
186
+ * A null value means the source branch is not loaded/opened. It has no
187
+ * currently visible descendants.
188
+ */
189
+ if (entry.children !== null) {
190
+ paths.push(...visibleLeavesPaths(entry.children, entryPath));
191
+ }
192
+ }
193
+ return paths;
194
+ }
195
+ return {
196
+ entryIsBranch,
197
+ entryIsFold,
198
+ getNodeAtPath,
199
+ getEntryAtPath,
200
+ nextCursor,
201
+ previousCursor,
202
+ cursorAfterFold,
203
+ parentCursor,
204
+ cursors,
205
+ visibleLeavesPaths,
206
+ };
207
+ }
@@ -1,47 +1,47 @@
1
- import type { SerializableKey, TreeNode } from '../tree-node/index.js';
1
+ import type { SerializableKey, TreeNode } from '../tree/index.js';
2
2
  import type { Cursor } from '../cursor.js';
3
3
  import type { Folds } from '../fold-node/index.js';
4
4
  export type NavNode<Id extends SerializableKey> = {
5
5
  /**
6
- * Synthetic UI entry representing folded children.
6
+ * Projected direct children, including fold summaries.
7
7
  *
8
- * It is absent when this directory has no folded children.
9
- */
10
- folded: NavFoldEntry<Id> | null;
11
- /**
12
- * Loaded entries that are not folded at this directory, corresponding to
13
- * navigable rows.
14
- *
15
- * Their order is the sibling iteration order supplied by the TreeNode API.
16
- */
17
- entries: NavEntry<Id>[];
18
- };
19
- export type NavFoldEntry<Id extends SerializableKey> = {
20
- /**
21
- * Folded entries that are present in the loaded TreeNode.
8
+ * Ordered navigation preserves source sibling order and inserts inline folds.
9
+ * Unordered navigation uses presentation order and places its optional fold
10
+ * summary first.
22
11
  *
23
- * This is information for rendering the folded row.
12
+ * Not every entry is therefore necessarily a cursor destination: in ordered
13
+ * trees, the fold summary is not navigable and the NavMethod implementation
14
+ * should skip it.
24
15
  */
25
16
  entries: NavEntry<Id>[];
26
17
  };
27
- export type NavEntry<Id extends SerializableKey> = NavLeaf<Id> | NavBranch<Id>;
18
+ export type NavEntry<Id extends SerializableKey> = NavLeaf<Id> | NavBranch<Id> | NavFold<Id>;
28
19
  export type NavLeaf<Id extends SerializableKey> = {
29
20
  id: Id;
30
21
  };
31
22
  export type NavBranch<Id extends SerializableKey> = {
32
23
  id: Id;
33
24
  /**
34
- * `null` means this branch's children have not been loaded or opened.
25
+ * `null` means this branch's children have not been loaded.
35
26
  */
36
27
  children: NavNode<Id> | null;
37
28
  };
29
+ export type NavFold<Id extends SerializableKey> = {
30
+ /**
31
+ * Folded entries that are present in the loaded TreeNode.
32
+ *
33
+ * For unordered trees, there is at most one folded entry, and it is the first
34
+ * in nav node's `entries`.
35
+ */
36
+ folded: NavEntry<Id>[];
37
+ };
38
38
  /**
39
39
  * Operations for creating and navigating a UI-oriented projection of a tree.
40
40
  *
41
41
  * @typeParam Id - The type identifying a node among its direct siblings.
42
42
  * @typeParam Value - Application-owned data stored in each source TreeNode.
43
43
  */
44
- export type NavNodeApi<Id extends SerializableKey, Value> = {
44
+ export type NavMethods<Id extends SerializableKey, Value> = {
45
45
  /**
46
46
  * Tests whether a navigation entry represents a branch.
47
47
  *
@@ -50,6 +50,10 @@ export type NavNodeApi<Id extends SerializableKey, Value> = {
50
50
  * opened.
51
51
  */
52
52
  entryIsBranch(entry: NavEntry<Id>): entry is NavBranch<Id>;
53
+ /**
54
+ * Tests whether a navigation entry represents a branch.
55
+ */
56
+ entryIsFold(entry: NavEntry<Id>): entry is NavFold<Id>;
53
57
  /**
54
58
  * Creates a navigation projection rooted at `root`.
55
59
  *
@@ -71,7 +75,7 @@ export type NavNodeApi<Id extends SerializableKey, Value> = {
71
75
  * express that fact statically. This method returns `undefined` if `root`
72
76
  * is a leaf.
73
77
  *
74
- * A closed root branch produces a NavBranch whose `children` is `null`.
78
+ * An unloaded branch produces a NavBranch whose `children` is `null`.
75
79
  *
76
80
  * @param root - Source tree node from which to create navigation.
77
81
  * @param folds - Fold definitions corresponding to `root`. All active fold
@@ -102,7 +106,13 @@ export type NavNodeApi<Id extends SerializableKey, Value> = {
102
106
  * @param cursor
103
107
  */
104
108
  parentCursor(navigation: NavNode<Id>, cursor: Cursor<Id>): Cursor<Id> | undefined;
109
+ /**
110
+ * Enumerates navigable positions in depth-first display order.
111
+ *
112
+ * Unordered navigation skips fold summaries.
113
+ * Ordered navigation includes inline folds as fold cursors.
114
+ */
105
115
  cursors(navigation: NavNode<Id>, parentPath?: readonly Id[]): Cursor<Id>[];
106
116
  visibleLeavesPaths(navigation: NavNode<Id>, parentPath?: readonly Id[]): Id[][];
107
117
  };
108
- //# sourceMappingURL=nav-node.types.d.ts.map
118
+ //# sourceMappingURL=nav.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.types.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/nav/nav.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,IAAI;IAChD;;;;;;;;;;OAUG;IACH,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,EAAE,SAAS,eAAe,IAC3C,OAAO,CAAC,EAAE,CAAC,GACX,SAAS,CAAC,EAAE,CAAC,GACb,OAAO,CAAC,EAAE,CAAC,CAAC;AAEhB,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,IAAI;IAChD,EAAE,EAAE,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,eAAe,IAAI;IAClD,EAAE,EAAE,EAAE,CAAC;IAEP;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,eAAe,IAAI;IAChD;;;;;OAKG;IACH,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI;IAC1D;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;IAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE7E;;;;;OAKG;IACH,aAAa,CACX,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,EACvB,IAAI,EAAE,SAAS,EAAE,EAAE,GAClB,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE3B;;;;OAIG;IACH,cAAc,CACZ,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,EACvB,IAAI,EAAE,SAAS,EAAE,EAAE,GAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE5B,UAAU,CACR,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GACjB,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE1B,cAAc,CACZ,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GACjB,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE1B,eAAe,CACb,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GACjB,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE1B;;;;OAIG;IACH,YAAY,CACV,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GACjB,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;IAE1B;;;;;OAKG;IACH,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAE3E,kBAAkB,CAChB,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,EACvB,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,GACzB,EAAE,EAAE,EAAE,CAAC;CACX,CAAC"}
@@ -0,0 +1,13 @@
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 operations for projecting an opaque tree into a navigation model.
7
+ *
8
+ * Sibling order has no semantic meaning in this navigation system.
9
+ * This projection preserves source sibling order among visible entries and
10
+ * collects hidden entries into one leading, non-navigable fold summary.
11
+ */
12
+ export declare function createUnorderedNavMethods<Id extends SerializableKey, Value>(treeMethods: TreeMethods<Id, Value>, foldMethods: FoldMethods<Id>, cursorMethods: CursorMethods<Id>): NavMethods<Id, Value>;
13
+ //# sourceMappingURL=nav.unordered.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.unordered.impl.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/nav/nav.unordered.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,EAKV,UAAU,EACX,MAAM,gBAAgB,CAAC;AAGxB;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EACzE,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,CA+FvB"}
@@ -0,0 +1,77 @@
1
+ import { createNavTraversalMethods } from './nav.traversal.js';
2
+ /**
3
+ * Creates operations for projecting an opaque tree into a navigation model.
4
+ *
5
+ * Sibling order has no semantic meaning in this navigation system.
6
+ * This projection preserves source sibling order among visible entries and
7
+ * collects hidden entries into one leading, non-navigable fold summary.
8
+ */
9
+ export function createUnorderedNavMethods(treeMethods, foldMethods, cursorMethods) {
10
+ /**
11
+ * Projects loaded children into navigation entries.
12
+ *
13
+ * Folded source entries are collected into one leading, non-navigable
14
+ * fold summary. Their complete projections are retained inside it.
15
+ */
16
+ function createNavNode(entries, foldRoot, parentPath) {
17
+ const visibleEntries = [];
18
+ const foldedEntries = [];
19
+ for (const entry of entries) {
20
+ const entryId = treeMethods.id(entry);
21
+ const entryPath = [...parentPath, entryId];
22
+ const isFolded = foldMethods.isEntryHiddenAtPath(foldRoot, parentPath, entryId);
23
+ const navigationEntry = createNavEntry(entry, foldRoot, entryPath);
24
+ if (isFolded) {
25
+ /*
26
+ * Retain the complete projection for later fold inspection.
27
+ * Ordinary traversal never descends into this hidden projection.
28
+ */
29
+ foldedEntries.push(navigationEntry);
30
+ }
31
+ else {
32
+ visibleEntries.push(navigationEntry);
33
+ }
34
+ }
35
+ return {
36
+ /*
37
+ * Fold state may contain entries that are not currently available in the
38
+ * loaded source tree. Do not render an empty synthetic row for them.
39
+ */
40
+ entries: foldedEntries.length === 0
41
+ ? visibleEntries
42
+ : [{ folded: foldedEntries }, ...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, false),
75
+ from: createRootNavBranch,
76
+ };
77
+ }
@@ -0,0 +1,9 @@
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 { StateApi } from './state.types.js';
5
+ /**
6
+ * Creates operations for navigating and resynchronizing tree-surfer state.
7
+ */
8
+ export declare function createStateApi<Id extends SerializableKey, Value>(treeNodeApi: TreeMethods<Id, Value>, foldsApi: FoldMethods<Id>, cursorApi: CursorMethods<Id>): StateApi<Id, Value>;
9
+ //# sourceMappingURL=state.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.impl.d.ts","sourceRoot":"","sources":["../../../src/state-and-nav/state/state.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAU,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,kBAAkB,CAAC;AA4CxD;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAC9D,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,EACnC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,EACzB,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC,GAC3B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CA2PrB"}