@typed/navigation 0.5.4 → 0.6.0

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 (174) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/Blocking.js +53 -0
  4. package/dist/cjs/Blocking.js.map +1 -0
  5. package/dist/cjs/Layer.js +27 -0
  6. package/dist/cjs/Layer.js.map +1 -0
  7. package/dist/cjs/Navigation.js +184 -62
  8. package/dist/cjs/Navigation.js.map +1 -1
  9. package/dist/cjs/index.js +36 -17
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/internal/fromWindow.js +376 -0
  12. package/dist/cjs/internal/fromWindow.js.map +1 -0
  13. package/dist/cjs/internal/memory.js +67 -0
  14. package/dist/cjs/internal/memory.js.map +1 -0
  15. package/dist/cjs/internal/shared.js +403 -0
  16. package/dist/cjs/internal/shared.js.map +1 -0
  17. package/dist/dts/Blocking.d.ts +33 -0
  18. package/dist/dts/Blocking.d.ts.map +1 -0
  19. package/dist/dts/Layer.d.ts +44 -0
  20. package/dist/dts/Layer.d.ts.map +1 -0
  21. package/dist/dts/Navigation.d.ts +377 -0
  22. package/dist/dts/Navigation.d.ts.map +1 -0
  23. package/dist/dts/index.d.ts +17 -0
  24. package/dist/dts/index.d.ts.map +1 -0
  25. package/dist/dts/internal/fromWindow.d.ts +12 -0
  26. package/dist/dts/internal/fromWindow.d.ts.map +1 -0
  27. package/dist/dts/internal/memory.d.ts +6 -0
  28. package/dist/dts/internal/memory.d.ts.map +1 -0
  29. package/dist/dts/internal/shared.d.ts +139 -0
  30. package/dist/dts/internal/shared.d.ts.map +1 -0
  31. package/dist/esm/Blocking.js +39 -0
  32. package/dist/esm/Blocking.js.map +1 -0
  33. package/dist/esm/Layer.js +18 -0
  34. package/dist/esm/Layer.js.map +1 -0
  35. package/dist/esm/Navigation.js +166 -0
  36. package/dist/esm/Navigation.js.map +1 -0
  37. package/dist/esm/index.js +17 -0
  38. package/dist/esm/index.js.map +1 -0
  39. package/dist/esm/internal/fromWindow.js +273 -0
  40. package/dist/esm/internal/fromWindow.js.map +1 -0
  41. package/dist/esm/internal/memory.js +54 -0
  42. package/dist/esm/internal/memory.js.map +1 -0
  43. package/dist/esm/internal/shared.js +336 -0
  44. package/dist/esm/internal/shared.js.map +1 -0
  45. package/dist/esm/package.json +4 -0
  46. package/package.json +52 -32
  47. package/src/Blocking.ts +102 -0
  48. package/src/Layer.ts +53 -0
  49. package/src/Navigation.ts +342 -159
  50. package/src/index.ts +17 -3
  51. package/src/internal/fromWindow.ts +421 -0
  52. package/src/internal/memory.ts +79 -0
  53. package/src/internal/shared.ts +514 -0
  54. package/dist/DOM.d.ts +0 -12
  55. package/dist/DOM.d.ts.map +0 -1
  56. package/dist/DOM.js +0 -87
  57. package/dist/DOM.js.map +0 -1
  58. package/dist/Memory.d.ts +0 -10
  59. package/dist/Memory.d.ts.map +0 -1
  60. package/dist/Memory.js +0 -55
  61. package/dist/Memory.js.map +0 -1
  62. package/dist/Navigation.d.ts +0 -116
  63. package/dist/Navigation.d.ts.map +0 -1
  64. package/dist/Navigation.js +0 -36
  65. package/dist/Navigation.js.map +0 -1
  66. package/dist/_makeServerWindow.d.ts +0 -16
  67. package/dist/_makeServerWindow.d.ts.map +0 -1
  68. package/dist/_makeServerWindow.js +0 -9
  69. package/dist/_makeServerWindow.js.map +0 -1
  70. package/dist/cjs/DOM.d.ts +0 -12
  71. package/dist/cjs/DOM.d.ts.map +0 -1
  72. package/dist/cjs/DOM.js +0 -116
  73. package/dist/cjs/DOM.js.map +0 -1
  74. package/dist/cjs/Memory.d.ts +0 -10
  75. package/dist/cjs/Memory.d.ts.map +0 -1
  76. package/dist/cjs/Memory.js +0 -82
  77. package/dist/cjs/Memory.js.map +0 -1
  78. package/dist/cjs/Navigation.d.ts +0 -116
  79. package/dist/cjs/Navigation.d.ts.map +0 -1
  80. package/dist/cjs/_makeServerWindow.d.ts +0 -16
  81. package/dist/cjs/_makeServerWindow.d.ts.map +0 -1
  82. package/dist/cjs/_makeServerWindow.js +0 -36
  83. package/dist/cjs/_makeServerWindow.js.map +0 -1
  84. package/dist/cjs/dom-intent.d.ts +0 -28
  85. package/dist/cjs/dom-intent.d.ts.map +0 -1
  86. package/dist/cjs/dom-intent.js +0 -172
  87. package/dist/cjs/dom-intent.js.map +0 -1
  88. package/dist/cjs/history.d.ts +0 -31
  89. package/dist/cjs/history.d.ts.map +0 -1
  90. package/dist/cjs/history.js +0 -131
  91. package/dist/cjs/history.js.map +0 -1
  92. package/dist/cjs/index.d.ts +0 -4
  93. package/dist/cjs/index.d.ts.map +0 -1
  94. package/dist/cjs/json.d.ts +0 -13
  95. package/dist/cjs/json.d.ts.map +0 -1
  96. package/dist/cjs/json.js +0 -24
  97. package/dist/cjs/json.js.map +0 -1
  98. package/dist/cjs/memory-intent.d.ts +0 -27
  99. package/dist/cjs/memory-intent.d.ts.map +0 -1
  100. package/dist/cjs/memory-intent.js +0 -156
  101. package/dist/cjs/memory-intent.js.map +0 -1
  102. package/dist/cjs/model.d.ts +0 -22
  103. package/dist/cjs/model.d.ts.map +0 -1
  104. package/dist/cjs/model.js +0 -48
  105. package/dist/cjs/model.js.map +0 -1
  106. package/dist/cjs/shared-intent.d.ts +0 -14
  107. package/dist/cjs/shared-intent.d.ts.map +0 -1
  108. package/dist/cjs/shared-intent.js +0 -82
  109. package/dist/cjs/shared-intent.js.map +0 -1
  110. package/dist/cjs/storage.d.ts +0 -19
  111. package/dist/cjs/storage.d.ts.map +0 -1
  112. package/dist/cjs/storage.js +0 -101
  113. package/dist/cjs/storage.js.map +0 -1
  114. package/dist/cjs/util.d.ts +0 -5
  115. package/dist/cjs/util.d.ts.map +0 -1
  116. package/dist/cjs/util.js +0 -39
  117. package/dist/cjs/util.js.map +0 -1
  118. package/dist/dom-intent.d.ts +0 -28
  119. package/dist/dom-intent.d.ts.map +0 -1
  120. package/dist/dom-intent.js +0 -140
  121. package/dist/dom-intent.js.map +0 -1
  122. package/dist/history.d.ts +0 -31
  123. package/dist/history.d.ts.map +0 -1
  124. package/dist/history.js +0 -104
  125. package/dist/history.js.map +0 -1
  126. package/dist/index.d.ts +0 -4
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -4
  129. package/dist/index.js.map +0 -1
  130. package/dist/json.d.ts +0 -13
  131. package/dist/json.d.ts.map +0 -1
  132. package/dist/json.js +0 -17
  133. package/dist/json.js.map +0 -1
  134. package/dist/memory-intent.d.ts +0 -27
  135. package/dist/memory-intent.d.ts.map +0 -1
  136. package/dist/memory-intent.js +0 -124
  137. package/dist/memory-intent.js.map +0 -1
  138. package/dist/model.d.ts +0 -22
  139. package/dist/model.d.ts.map +0 -1
  140. package/dist/model.js +0 -21
  141. package/dist/model.js.map +0 -1
  142. package/dist/shared-intent.d.ts +0 -14
  143. package/dist/shared-intent.d.ts.map +0 -1
  144. package/dist/shared-intent.js +0 -51
  145. package/dist/shared-intent.js.map +0 -1
  146. package/dist/storage.d.ts +0 -19
  147. package/dist/storage.d.ts.map +0 -1
  148. package/dist/storage.js +0 -73
  149. package/dist/storage.js.map +0 -1
  150. package/dist/tsconfig.cjs.build.tsbuildinfo +0 -1
  151. package/dist/util.d.ts +0 -5
  152. package/dist/util.d.ts.map +0 -1
  153. package/dist/util.js +0 -12
  154. package/dist/util.js.map +0 -1
  155. package/eslintrc.json +0 -3
  156. package/project.json +0 -46
  157. package/src/DOM.test.ts +0 -699
  158. package/src/DOM.ts +0 -163
  159. package/src/Memory.test.ts +0 -464
  160. package/src/Memory.ts +0 -102
  161. package/src/_makeServerWindow.ts +0 -28
  162. package/src/dom-intent.ts +0 -268
  163. package/src/history.ts +0 -165
  164. package/src/json.ts +0 -31
  165. package/src/memory-intent.ts +0 -224
  166. package/src/model.ts +0 -54
  167. package/src/shared-intent.ts +0 -117
  168. package/src/storage.ts +0 -101
  169. package/src/util.ts +0 -20
  170. package/tsconfig.build.json +0 -4
  171. package/tsconfig.build.tsbuildinfo +0 -1
  172. package/tsconfig.cjs.build.json +0 -22
  173. package/tsconfig.json +0 -27
  174. package/vite.config.mjs +0 -3
@@ -1,51 +0,0 @@
1
- import * as Option from '@effect/data/Option';
2
- import * as Effect from '@effect/io/Effect';
3
- // Anytime there are changes to the model, we need to notify all event handlers
4
- export const makeNotify = (model) => (event) => Effect.gen(function* ($) {
5
- // Notify event handlers
6
- if (model.onNavigationHandlers.size > 0)
7
- yield* $(Effect.forEach(model.onNavigationHandlers, ([handler, options]) => (options?.passive ? Effect.fork(handler(event)) : handler(event)), { discard: true }));
8
- });
9
- export const makeOnNavigation = (model) => (handler, options) => Effect.uninterruptibleMask((restore) => Effect.gen(function* ($) {
10
- const context = yield* $(Effect.context());
11
- const handler_ = (event) => restore(Effect.provideContext(handler(event), context));
12
- const entry = [handler_, options];
13
- model.onNavigationHandlers.add(entry);
14
- yield* $(Effect.addFinalizer(() => Effect.sync(() => model.onNavigationHandlers.delete(entry))));
15
- // Send the latest navigation event on subscription
16
- const events = yield* $(model.events);
17
- const index = yield* $(model.index);
18
- const event = events[index];
19
- yield* $(restore(handler(event)));
20
- }));
21
- // Anytime there are changes to the model, we need to notify all event handlers
22
- export const makeNotifyEnd = (model) => (event) => Effect.gen(function* ($) {
23
- // Notify event handlers
24
- if (model.onNavigationEndHandlers.size > 0)
25
- yield* $(Effect.forEach(model.onNavigationEndHandlers, ([handler, options]) => (options?.passive ? Effect.fork(handler(event)) : handler(event)), { discard: true }));
26
- });
27
- export const makeOnNavigationEnd = (model) => (handler, options) => Effect.uninterruptibleMask((restore) => Effect.gen(function* ($) {
28
- const context = yield* $(Effect.context());
29
- const handler_ = (event) => restore(Effect.provideContext(handler(event), context));
30
- const entry = [handler_, options];
31
- model.onNavigationEndHandlers.add(entry);
32
- yield* $(Effect.addFinalizer(() => Effect.sync(() => model.onNavigationEndHandlers.delete(entry))));
33
- // Send the latest navigation event on subscription
34
- const events = yield* $(model.events);
35
- const index = yield* $(model.index);
36
- const event = events[index];
37
- yield* $(restore(handler(event)));
38
- }));
39
- export const makeGoTo = (model, go) => (key) => Effect.gen(function* ($) {
40
- const entries = yield* $(model.entries);
41
- const currentIndex = yield* $(model.index);
42
- const nextIndex = entries.findIndex((destination) => destination.key === key);
43
- if (nextIndex === -1)
44
- return Option.none();
45
- const delta = nextIndex - currentIndex;
46
- if (delta !== 0) {
47
- return Option.some(yield* $(go(delta)));
48
- }
49
- return Option.some(entries[nextIndex]);
50
- });
51
- //# sourceMappingURL=shared-intent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-intent.js","sourceRoot":"","sources":["../src/shared-intent.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts DELETED
@@ -1,19 +0,0 @@
1
- import * as Option from '@effect/data/Option';
2
- import * as Effect from '@effect/io/Effect';
3
- import { History, Location } from '@typed/dom';
4
- import type { DomNavigationOptions } from './DOM.js';
5
- import { NavigationEvent } from './Navigation.js';
6
- /**
7
- * @internal
8
- */
9
- export declare const getStoredEvents: Effect.Effect<Storage, never, readonly NavigationEvent[]>;
10
- /**
11
- * @internal
12
- */
13
- export declare const getStoredIndex: Effect.Effect<import("@typed/dom").Storage, never, Option.None<number> | Option.Some<number>>;
14
- /**
15
- * @internal
16
- */
17
- export declare const getInitialValues: (base: string, options: DomNavigationOptions) => Effect.Effect<Storage | History | Location, never, readonly [readonly NavigationEvent[], number]>;
18
- export declare const saveToStorage: (entries: readonly NavigationEvent[], index: number) => Effect.Effect<import("@typed/dom").Storage, never, void>;
19
- //# sourceMappingURL=storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAA;AAEhE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,eAAe,EAA+B,MAAM,iBAAiB,CAAA;AAO9E;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,eAAe,EAAE,CASlF,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,cAAc,+FAczB,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,SACrB,MAAM,WACH,oBAAoB,KAC5B,aAAa,CACd,OAAO,GAAG,OAAO,GAAG,QAAQ,EAC5B,KAAK,EACL,SAAS,CAAC,SAAS,eAAe,EAAE,EAAE,MAAM,CAAC,CAwC3C,CAAA;AAEJ,eAAO,MAAM,aAAa,YAAa,SAAS,eAAe,EAAE,SAAS,MAAM,6DAI5E,CAAA"}
package/dist/storage.js DELETED
@@ -1,73 +0,0 @@
1
- import * as Option from '@effect/data/Option';
2
- import * as Effect from '@effect/io/Effect';
3
- import { History, Location, getItem, setItem } from '@typed/dom';
4
- import { NavigationType } from './Navigation.js';
5
- import { decodeNavigationEvent } from './json.js';
6
- import { createKey, getUrl } from './util.js';
7
- const TYPED_NAVIGATION_ENTRIES_KEY = '@typed/navigation/entries';
8
- const TYPED_NAVIGATION_INDEX_KEY = '@typed/navigation/index';
9
- /**
10
- * @internal
11
- */
12
- export const getStoredEvents = Effect.gen(function* ($) {
13
- const option = yield* $(getItem(TYPED_NAVIGATION_ENTRIES_KEY));
14
- if (Option.isNone(option)) {
15
- return [];
16
- }
17
- return JSON.parse(option.value).map(decodeNavigationEvent);
18
- });
19
- /**
20
- * @internal
21
- */
22
- export const getStoredIndex = Effect.gen(function* ($) {
23
- const option = yield* $(getItem(TYPED_NAVIGATION_INDEX_KEY));
24
- if (Option.isNone(option)) {
25
- return Option.none();
26
- }
27
- const n = JSON.parse(option.value);
28
- if (Number.isNaN(n)) {
29
- return Option.none();
30
- }
31
- return Option.some(n);
32
- });
33
- /**
34
- * @internal
35
- */
36
- export const getInitialValues = (base, options) => Effect.gen(function* ($) {
37
- // Get Resources
38
- const history = yield* $(History);
39
- const location = yield* $(Location);
40
- // Read the stored entries and index
41
- const storedEntries = yield* $(getStoredEvents);
42
- const storedIndex = Option.getOrElse(yield* $(getStoredIndex), () => storedEntries.length - 1);
43
- const storedEntry = storedEntries[storedIndex];
44
- // Read the initial url from the location
45
- const initialUrl = getUrl(location.href, base, location.origin);
46
- const initial = {
47
- key: options.initialKey ?? (yield* $(createKey)),
48
- url: initialUrl,
49
- state: history.state,
50
- };
51
- const initialEvent = {
52
- destination: initial,
53
- hashChange: false,
54
- navigationType: NavigationType.Push,
55
- };
56
- // If there are no stored entries then we can just use the initial entry
57
- if (!storedEntry) {
58
- return [[initialEvent], 0];
59
- }
60
- // If we're starting on the same page as the initial entry
61
- // then we can just use the initial entries
62
- if (storedEntry.destination.url.href === initialUrl.href) {
63
- return [storedEntries, storedIndex];
64
- }
65
- // Otherwise, we need to push the initial entry with the current page
66
- const entries = [...storedEntries.slice(0, storedIndex + 1), initialEvent];
67
- return [entries, entries.length - 1];
68
- });
69
- export const saveToStorage = (entries, index) => Effect.gen(function* ($) {
70
- yield* $(setItem(TYPED_NAVIGATION_ENTRIES_KEY, JSON.stringify(entries)));
71
- yield* $(setItem(TYPED_NAVIGATION_INDEX_KEY, JSON.stringify(index)));
72
- });
73
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGhE,OAAO,EAAgC,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAuB,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAE7C,MAAM,4BAA4B,GAAG,2BAA2B,CAAA;AAChE,MAAM,0BAA0B,GAAG,yBAAyB,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAE9D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,EAAE,CAAA;KACV;IAED,OAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAoC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;AAChG,CAAC,CAAC,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAA;IAE5D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;KACrB;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAW,CAAA;IAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACnB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;KACrB;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,OAA6B,EAK7B,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,gBAAgB;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAEnC,oCAAoC;IACpC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC9F,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAE9C,yCAAyC;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAgB;QAC3B,GAAG,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChD,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAA;IACD,MAAM,YAAY,GAAoB;QACpC,WAAW,EAAE,OAAO;QACpB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,cAAc,CAAC,IAAI;KACpC,CAAA;IAED,wEAAwE;IACxE,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAU,CAAA;KACpC;IAED,0DAA0D;IAC1D,2CAA2C;IAC3C,IAAI,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE;QACxD,OAAO,CAAC,aAAa,EAAE,WAAW,CAAU,CAAA;KAC7C;IAED,qEAAqE;IACrE,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IAE1E,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAU,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAmC,EAAE,KAAa,EAAE,EAAE,CAClF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACxE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACtE,CAAC,CAAC,CAAA"}