@zengrid/shared 1.0.3 → 1.1.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 (217) hide show
  1. package/README.md +4 -0
  2. package/dist/README.md +48 -0
  3. package/dist/index.cjs.default.js +1 -0
  4. package/dist/index.cjs.js +8696 -0
  5. package/dist/index.cjs.mjs +2 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.esm.js +8640 -0
  8. package/dist/package.json +54 -0
  9. package/dist/src/algorithms/filter/bloom-filter.d.ts +120 -0
  10. package/dist/src/algorithms/filter/bloom-filter.d.ts.map +1 -0
  11. package/dist/src/algorithms/filter/index.d.ts +7 -0
  12. package/dist/src/algorithms/filter/index.d.ts.map +1 -0
  13. package/dist/src/algorithms/graph/bfs.d.ts +71 -0
  14. package/dist/src/algorithms/graph/bfs.d.ts.map +1 -0
  15. package/dist/src/algorithms/graph/dfs.d.ts +62 -0
  16. package/dist/src/algorithms/graph/dfs.d.ts.map +1 -0
  17. package/dist/src/algorithms/graph/graph.interface.d.ts +63 -0
  18. package/dist/src/algorithms/graph/graph.interface.d.ts.map +1 -0
  19. package/dist/src/algorithms/graph/index.d.ts +9 -0
  20. package/dist/src/algorithms/graph/index.d.ts.map +1 -0
  21. package/dist/src/algorithms/index.d.ts +11 -0
  22. package/dist/src/algorithms/index.d.ts.map +1 -0
  23. package/dist/src/algorithms/pattern/index.d.ts +8 -0
  24. package/dist/src/algorithms/pattern/index.d.ts.map +1 -0
  25. package/dist/src/algorithms/pattern/sequence-detector.d.ts +62 -0
  26. package/dist/src/algorithms/pattern/sequence-detector.d.ts.map +1 -0
  27. package/dist/src/algorithms/search/binary-search.d.ts +86 -0
  28. package/dist/src/algorithms/search/binary-search.d.ts.map +1 -0
  29. package/dist/src/algorithms/search/index.d.ts +6 -0
  30. package/dist/src/algorithms/search/index.d.ts.map +1 -0
  31. package/dist/src/algorithms/sorting/comparators.d.ts +126 -0
  32. package/dist/src/algorithms/sorting/comparators.d.ts.map +1 -0
  33. package/dist/src/algorithms/sorting/index.d.ts +9 -0
  34. package/dist/src/algorithms/sorting/index.d.ts.map +1 -0
  35. package/dist/src/algorithms/sorting/sorting.interface.d.ts +38 -0
  36. package/dist/src/algorithms/sorting/sorting.interface.d.ts.map +1 -0
  37. package/dist/src/algorithms/sorting/timsort-gallop.d.ts +21 -0
  38. package/dist/src/algorithms/sorting/timsort-gallop.d.ts.map +1 -0
  39. package/dist/src/algorithms/sorting/timsort-merge.d.ts +6 -0
  40. package/dist/src/algorithms/sorting/timsort-merge.d.ts.map +1 -0
  41. package/dist/src/algorithms/sorting/timsort-run.d.ts +38 -0
  42. package/dist/src/algorithms/sorting/timsort-run.d.ts.map +1 -0
  43. package/dist/src/algorithms/sorting/timsort.d.ts +55 -0
  44. package/dist/src/algorithms/sorting/timsort.d.ts.map +1 -0
  45. package/dist/src/algorithms/sorting/timsort.interface.d.ts +32 -0
  46. package/dist/src/algorithms/sorting/timsort.interface.d.ts.map +1 -0
  47. package/dist/src/data-structures/column-store/column-store.d.ts +52 -0
  48. package/dist/src/data-structures/column-store/column-store.d.ts.map +1 -0
  49. package/dist/src/data-structures/column-store/column-store.interface.d.ts +155 -0
  50. package/dist/src/data-structures/column-store/column-store.interface.d.ts.map +1 -0
  51. package/dist/src/data-structures/column-store/index.d.ts +6 -0
  52. package/dist/src/data-structures/column-store/index.d.ts.map +1 -0
  53. package/dist/src/data-structures/command-stack/command-stack.d.ts +61 -0
  54. package/dist/src/data-structures/command-stack/command-stack.d.ts.map +1 -0
  55. package/dist/src/data-structures/command-stack/command-stack.interface.d.ts +80 -0
  56. package/dist/src/data-structures/command-stack/command-stack.interface.d.ts.map +1 -0
  57. package/dist/src/data-structures/command-stack/index.d.ts +3 -0
  58. package/dist/src/data-structures/command-stack/index.d.ts.map +1 -0
  59. package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts +147 -0
  60. package/dist/src/data-structures/dependency-graph/dependency-graph.d.ts.map +1 -0
  61. package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts +161 -0
  62. package/dist/src/data-structures/dependency-graph/dependency-graph.interface.d.ts.map +1 -0
  63. package/dist/src/data-structures/dependency-graph/index.d.ts +8 -0
  64. package/dist/src/data-structures/dependency-graph/index.d.ts.map +1 -0
  65. package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts +84 -0
  66. package/dist/src/data-structures/disjoint-set/disjoint-set.d.ts.map +1 -0
  67. package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts +185 -0
  68. package/dist/src/data-structures/disjoint-set/disjoint-set.interface.d.ts.map +1 -0
  69. package/dist/src/data-structures/disjoint-set/index.d.ts +7 -0
  70. package/dist/src/data-structures/disjoint-set/index.d.ts.map +1 -0
  71. package/dist/src/data-structures/index-map/index-map.d.ts +150 -0
  72. package/dist/src/data-structures/index-map/index-map.d.ts.map +1 -0
  73. package/dist/src/data-structures/index-map/index-map.interface.d.ts +186 -0
  74. package/dist/src/data-structures/index-map/index-map.interface.d.ts.map +1 -0
  75. package/dist/src/data-structures/index-map/index.d.ts +6 -0
  76. package/dist/src/data-structures/index-map/index.d.ts.map +1 -0
  77. package/dist/src/data-structures/index.d.ts +36 -0
  78. package/dist/src/data-structures/index.d.ts.map +1 -0
  79. package/dist/src/data-structures/interval-tree/index.d.ts +7 -0
  80. package/dist/src/data-structures/interval-tree/index.d.ts.map +1 -0
  81. package/dist/src/data-structures/interval-tree/interval-tree.d.ts +58 -0
  82. package/dist/src/data-structures/interval-tree/interval-tree.d.ts.map +1 -0
  83. package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts +212 -0
  84. package/dist/src/data-structures/interval-tree/interval-tree.interface.d.ts.map +1 -0
  85. package/dist/src/data-structures/interval-tree/node.d.ts +34 -0
  86. package/dist/src/data-structures/interval-tree/node.d.ts.map +1 -0
  87. package/dist/src/data-structures/interval-tree/operations/balance.d.ts +34 -0
  88. package/dist/src/data-structures/interval-tree/operations/balance.d.ts.map +1 -0
  89. package/dist/src/data-structures/interval-tree/operations/delete.d.ts +26 -0
  90. package/dist/src/data-structures/interval-tree/operations/delete.d.ts.map +1 -0
  91. package/dist/src/data-structures/interval-tree/operations/insert.d.ts +19 -0
  92. package/dist/src/data-structures/interval-tree/operations/insert.d.ts.map +1 -0
  93. package/dist/src/data-structures/interval-tree/operations/search.d.ts +46 -0
  94. package/dist/src/data-structures/interval-tree/operations/search.d.ts.map +1 -0
  95. package/dist/src/data-structures/interval-tree/operations/traversal.d.ts +29 -0
  96. package/dist/src/data-structures/interval-tree/operations/traversal.d.ts.map +1 -0
  97. package/dist/src/data-structures/interval-tree/operations/utilities.d.ts +30 -0
  98. package/dist/src/data-structures/interval-tree/operations/utilities.d.ts.map +1 -0
  99. package/dist/src/data-structures/lru-cache/index.d.ts +3 -0
  100. package/dist/src/data-structures/lru-cache/index.d.ts.map +1 -0
  101. package/dist/src/data-structures/lru-cache/lru-cache.d.ts +134 -0
  102. package/dist/src/data-structures/lru-cache/lru-cache.d.ts.map +1 -0
  103. package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts +173 -0
  104. package/dist/src/data-structures/lru-cache/lru-cache.interface.d.ts.map +1 -0
  105. package/dist/src/data-structures/prefix-sum-array/index.d.ts +6 -0
  106. package/dist/src/data-structures/prefix-sum-array/index.d.ts.map +1 -0
  107. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts +63 -0
  108. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.d.ts.map +1 -0
  109. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts +80 -0
  110. package/dist/src/data-structures/prefix-sum-array/prefix-sum-array.interface.d.ts.map +1 -0
  111. package/dist/src/data-structures/ring-buffer.d.ts +96 -0
  112. package/dist/src/data-structures/ring-buffer.d.ts.map +1 -0
  113. package/dist/src/data-structures/rtree/index.d.ts +8 -0
  114. package/dist/src/data-structures/rtree/index.d.ts.map +1 -0
  115. package/dist/src/data-structures/rtree/rtree.d.ts +81 -0
  116. package/dist/src/data-structures/rtree/rtree.d.ts.map +1 -0
  117. package/dist/src/data-structures/rtree/rtree.interface.d.ts +143 -0
  118. package/dist/src/data-structures/rtree/rtree.interface.d.ts.map +1 -0
  119. package/dist/src/data-structures/segment-tree/aggregation-config.d.ts +6 -0
  120. package/dist/src/data-structures/segment-tree/aggregation-config.d.ts.map +1 -0
  121. package/dist/src/data-structures/segment-tree/index.d.ts +4 -0
  122. package/dist/src/data-structures/segment-tree/index.d.ts.map +1 -0
  123. package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts +5 -0
  124. package/dist/src/data-structures/segment-tree/lazy-propagation.d.ts.map +1 -0
  125. package/dist/src/data-structures/segment-tree/segment-tree.d.ts +30 -0
  126. package/dist/src/data-structures/segment-tree/segment-tree.d.ts.map +1 -0
  127. package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts +202 -0
  128. package/dist/src/data-structures/segment-tree/segment-tree.interface.d.ts.map +1 -0
  129. package/dist/src/data-structures/segment-tree/tree-builder.d.ts +3 -0
  130. package/dist/src/data-structures/segment-tree/tree-builder.d.ts.map +1 -0
  131. package/dist/src/data-structures/segment-tree/tree-query.d.ts +3 -0
  132. package/dist/src/data-structures/segment-tree/tree-query.d.ts.map +1 -0
  133. package/dist/src/data-structures/segment-tree/tree-search.d.ts +2 -0
  134. package/dist/src/data-structures/segment-tree/tree-search.d.ts.map +1 -0
  135. package/dist/src/data-structures/segment-tree/tree-update.d.ts +4 -0
  136. package/dist/src/data-structures/segment-tree/tree-update.d.ts.map +1 -0
  137. package/dist/src/data-structures/segment-tree/tree-validation.d.ts +3 -0
  138. package/dist/src/data-structures/segment-tree/tree-validation.d.ts.map +1 -0
  139. package/dist/src/data-structures/skip-list/index.d.ts +4 -0
  140. package/dist/src/data-structures/skip-list/index.d.ts.map +1 -0
  141. package/dist/src/data-structures/skip-list/skip-list.d.ts +137 -0
  142. package/dist/src/data-structures/skip-list/skip-list.d.ts.map +1 -0
  143. package/dist/src/data-structures/skip-list/skip-list.interface.d.ts +223 -0
  144. package/dist/src/data-structures/skip-list/skip-list.interface.d.ts.map +1 -0
  145. package/dist/src/data-structures/sparse-matrix/index.d.ts +6 -0
  146. package/dist/src/data-structures/sparse-matrix/index.d.ts.map +1 -0
  147. package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts +44 -0
  148. package/dist/src/data-structures/sparse-matrix/sparse-matrix.d.ts.map +1 -0
  149. package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts +105 -0
  150. package/dist/src/data-structures/sparse-matrix/sparse-matrix.interface.d.ts.map +1 -0
  151. package/dist/src/data-structures/suffix-array/index.d.ts +3 -0
  152. package/dist/src/data-structures/suffix-array/index.d.ts.map +1 -0
  153. package/dist/src/data-structures/suffix-array/suffix-array.d.ts +102 -0
  154. package/dist/src/data-structures/suffix-array/suffix-array.d.ts.map +1 -0
  155. package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts +117 -0
  156. package/dist/src/data-structures/suffix-array/suffix-array.interface.d.ts.map +1 -0
  157. package/dist/src/data-structures/trie/index.d.ts +8 -0
  158. package/dist/src/data-structures/trie/index.d.ts.map +1 -0
  159. package/dist/src/data-structures/trie/trie.d.ts +205 -0
  160. package/dist/src/data-structures/trie/trie.d.ts.map +1 -0
  161. package/dist/src/data-structures/trie/trie.interface.d.ts +117 -0
  162. package/dist/src/data-structures/trie/trie.interface.d.ts.map +1 -0
  163. package/dist/src/index.d.ts +54 -0
  164. package/dist/src/index.d.ts.map +1 -0
  165. package/dist/src/patterns/coordinator.d.ts +90 -0
  166. package/dist/src/patterns/coordinator.d.ts.map +1 -0
  167. package/dist/src/patterns/event-emitter.d.ts +106 -0
  168. package/dist/src/patterns/event-emitter.d.ts.map +1 -0
  169. package/dist/src/patterns/factory.d.ts +120 -0
  170. package/dist/src/patterns/factory.d.ts.map +1 -0
  171. package/dist/src/patterns/index.d.ts +21 -0
  172. package/dist/src/patterns/index.d.ts.map +1 -0
  173. package/dist/src/patterns/mediator.d.ts +116 -0
  174. package/dist/src/patterns/mediator.d.ts.map +1 -0
  175. package/dist/src/patterns/object-pool.d.ts +178 -0
  176. package/dist/src/patterns/object-pool.d.ts.map +1 -0
  177. package/dist/src/patterns/observer.d.ts +89 -0
  178. package/dist/src/patterns/observer.d.ts.map +1 -0
  179. package/dist/src/patterns/operation-mode.d.ts +75 -0
  180. package/dist/src/patterns/operation-mode.d.ts.map +1 -0
  181. package/dist/src/patterns/state-machine.d.ts +122 -0
  182. package/dist/src/patterns/state-machine.d.ts.map +1 -0
  183. package/dist/src/reactive/batch-processor.d.ts +80 -0
  184. package/dist/src/reactive/batch-processor.d.ts.map +1 -0
  185. package/dist/src/reactive/core/batch-manager.d.ts +48 -0
  186. package/dist/src/reactive/core/batch-manager.d.ts.map +1 -0
  187. package/dist/src/reactive/core/batch-queue.d.ts +39 -0
  188. package/dist/src/reactive/core/batch-queue.d.ts.map +1 -0
  189. package/dist/src/reactive/core/event-handler-registry.d.ts +52 -0
  190. package/dist/src/reactive/core/event-handler-registry.d.ts.map +1 -0
  191. package/dist/src/reactive/core/event-mapper.d.ts +37 -0
  192. package/dist/src/reactive/core/event-mapper.d.ts.map +1 -0
  193. package/dist/src/reactive/core/pool-stats.d.ts +47 -0
  194. package/dist/src/reactive/core/pool-stats.d.ts.map +1 -0
  195. package/dist/src/reactive/core/subscription-manager.d.ts +46 -0
  196. package/dist/src/reactive/core/subscription-manager.d.ts.map +1 -0
  197. package/dist/src/reactive/event-delegator.d.ts +84 -0
  198. package/dist/src/reactive/event-delegator.d.ts.map +1 -0
  199. package/dist/src/reactive/index.d.ts +61 -0
  200. package/dist/src/reactive/index.d.ts.map +1 -0
  201. package/dist/src/reactive/interfaces.d.ts +207 -0
  202. package/dist/src/reactive/interfaces.d.ts.map +1 -0
  203. package/dist/src/reactive/object-pool.d.ts +97 -0
  204. package/dist/src/reactive/object-pool.d.ts.map +1 -0
  205. package/dist/src/reactive/reactive-state.d.ts +132 -0
  206. package/dist/src/reactive/reactive-state.d.ts.map +1 -0
  207. package/dist/src/types/common.d.ts +56 -0
  208. package/dist/src/types/common.d.ts.map +1 -0
  209. package/dist/src/types/index.d.ts +5 -0
  210. package/dist/src/types/index.d.ts.map +1 -0
  211. package/dist/src/utils/index.d.ts +7 -0
  212. package/dist/src/utils/index.d.ts.map +1 -0
  213. package/dist/src/utils/timing.d.ts +104 -0
  214. package/dist/src/utils/timing.d.ts.map +1 -0
  215. package/dist/src/utils/timing.interface.d.ts +96 -0
  216. package/dist/src/utils/timing.interface.d.ts.map +1 -0
  217. package/package.json +52 -52
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Reactive Primitives - Interface Abstractions
3
+ *
4
+ * @description
5
+ * Interface-based abstractions for loose coupling and testability.
6
+ * Enables dependency injection, mocking, and composition.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Use interfaces for loose coupling
11
+ * class ColumnModel {
12
+ * constructor(private state: IReactiveState<ColumnState, ColumnEvent>) {}
13
+ * }
14
+ *
15
+ * // Can inject real or mock implementation
16
+ * const model = new ColumnModel(new ReactiveState());
17
+ * const testModel = new ColumnModel(new MockReactiveState());
18
+ * ```
19
+ */
20
+ /**
21
+ * Subscriber for state changes
22
+ */
23
+ export interface ISubscriber<E> {
24
+ onChange(event: E): void;
25
+ onBatchChange?(events: E[]): void;
26
+ }
27
+ /**
28
+ * Reactive state container with targeted subscriptions
29
+ *
30
+ * @template T - State value type (not exposed in interface, used internally)
31
+ * @template E - Event type (used in subscriptions)
32
+ */
33
+ export interface IReactiveState<T, E> {
34
+ /**
35
+ * Subscribe to specific key changes (targeted O(m))
36
+ */
37
+ subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
38
+ /**
39
+ * Subscribe to all state changes (global observer)
40
+ */
41
+ subscribeGlobal(subscriber: ISubscriber<E>): () => void;
42
+ /**
43
+ * Get subscriber count for debugging
44
+ */
45
+ getSubscriberCount(key: string): number;
46
+ /**
47
+ * Get global subscriber count
48
+ */
49
+ getGlobalSubscriberCount(): number;
50
+ /**
51
+ * Get event history (if enabled)
52
+ */
53
+ getEventHistory(): E[];
54
+ /**
55
+ * Get last N events from history
56
+ */
57
+ getLastEvents(count: number): E[];
58
+ /**
59
+ * Clear event history
60
+ */
61
+ clearEventHistory(): void;
62
+ /**
63
+ * Cleanup
64
+ */
65
+ destroy(): void;
66
+ __state?: T;
67
+ }
68
+ /**
69
+ * Manages subscriptions and notifications
70
+ */
71
+ export interface ISubscriptionManager<E> {
72
+ subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
73
+ subscribeGlobal(subscriber: ISubscriber<E>): () => void;
74
+ notifyKey(key: string, event: E): void;
75
+ notifyBatch(eventsByKey: Map<string, E[]>): void;
76
+ getKeySubscriberCount(key: string): number;
77
+ getGlobalSubscriberCount(): number;
78
+ hasKeySubscribers(key: string): boolean;
79
+ clear(): void;
80
+ }
81
+ /**
82
+ * Manages batch mode and event queuing
83
+ */
84
+ export interface IBatchManager<E> {
85
+ isBatching(): boolean;
86
+ enterBatch(): void;
87
+ exitBatch(): void;
88
+ addEvent(key: string, event: E): void;
89
+ flushEvents(): Array<{
90
+ key: string;
91
+ event: E;
92
+ }>;
93
+ groupEventsByKey(events: Array<{
94
+ key: string;
95
+ event: E;
96
+ }>): Map<string, E[]>;
97
+ clear(): void;
98
+ }
99
+ /**
100
+ * Event handler types
101
+ */
102
+ export interface IElementEventHandlers {
103
+ onClick?: (event: MouseEvent) => void;
104
+ onDblClick?: (event: MouseEvent) => void;
105
+ onMouseDown?: (event: MouseEvent) => void;
106
+ onMouseUp?: (event: MouseEvent) => void;
107
+ onMouseEnter?: (event: MouseEvent) => void;
108
+ onMouseLeave?: (event: MouseEvent) => void;
109
+ onContextMenu?: (event: MouseEvent) => void;
110
+ onFocus?: (event: FocusEvent) => void;
111
+ onBlur?: (event: FocusEvent) => void;
112
+ }
113
+ /**
114
+ * Event delegator options
115
+ */
116
+ export interface IEventDelegatorOptions {
117
+ idAttribute?: string;
118
+ customEvents?: Record<string, {
119
+ domEvent: string;
120
+ useCapture: boolean;
121
+ }>;
122
+ }
123
+ /**
124
+ * Event delegation for thousands of elements
125
+ */
126
+ export interface IEventDelegator {
127
+ registerElement(elementId: string, handlers: IElementEventHandlers): void;
128
+ unregisterElement(elementId: string): void;
129
+ updateElement(elementId: string, handlers: IElementEventHandlers, merge?: boolean): void;
130
+ isRegistered(elementId: string): boolean;
131
+ getAllRegisteredIds(): string[];
132
+ getRegisteredCount(): number;
133
+ destroy(): void;
134
+ }
135
+ /**
136
+ * Object pool options
137
+ */
138
+ export interface IObjectPoolOptions<T> {
139
+ factory: () => T;
140
+ reset?: (obj: T) => void;
141
+ validate?: (obj: T) => boolean;
142
+ initialSize?: number;
143
+ maxSize?: number;
144
+ onAcquire?: (obj: T) => void;
145
+ onRelease?: (obj: T) => void;
146
+ onEvict?: (obj: T) => void;
147
+ }
148
+ /**
149
+ * Object pool statistics
150
+ */
151
+ export interface IObjectPoolStats {
152
+ available: number;
153
+ created: number;
154
+ acquired: number;
155
+ released: number;
156
+ hitRate: number;
157
+ maxSize: number;
158
+ }
159
+ /**
160
+ * Object pooling for virtual rendering
161
+ */
162
+ export interface IObjectPool<T> {
163
+ acquire(): T;
164
+ release(obj: T): void;
165
+ acquireMany(count: number): T[];
166
+ releaseMany(objects: T[]): void;
167
+ prewarm(count: number): void;
168
+ size(): number;
169
+ getStats(): IObjectPoolStats;
170
+ shrink(targetSize: number): void;
171
+ clear(): void;
172
+ destroy(): void;
173
+ }
174
+ /**
175
+ * Batch processor options
176
+ */
177
+ export interface IBatchProcessorOptions<T> {
178
+ process: (items: T[]) => void;
179
+ delay?: number;
180
+ maxBatchSize?: number;
181
+ deduplicate?: (items: T[]) => T[];
182
+ }
183
+ /**
184
+ * Batch processing for grouped operations
185
+ */
186
+ export interface IBatchProcessor<T> {
187
+ add(item: T): void;
188
+ addMany(items: T[]): void;
189
+ flush(): void;
190
+ clear(): void;
191
+ size(): number;
192
+ isIdle(): boolean;
193
+ destroy(): void;
194
+ }
195
+ /**
196
+ * Event handler storage and lookup
197
+ */
198
+ export interface IEventHandlerRegistry {
199
+ register(elementId: string, handlers: IElementEventHandlers): void;
200
+ unregister(elementId: string): void;
201
+ update(elementId: string, handlers: IElementEventHandlers, merge: boolean): void;
202
+ get(elementId: string): IElementEventHandlers | undefined;
203
+ getHandler(elementId: string, handlerName: keyof IElementEventHandlers): ((event: any) => void) | undefined;
204
+ size(): number;
205
+ clear(): void;
206
+ }
207
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/reactive/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * ObjectPool - Object pooling for virtual rendering
3
+ *
4
+ * @description
5
+ * Reuses objects instead of creating/destroying (10x faster scroll).
6
+ * Uses PoolStatsTracker for monitoring.
7
+ *
8
+ * @performance
9
+ * - Traditional: User scrolls → destroy 50 cells → create 50 new (10-15ms)
10
+ * - Pooling: User scrolls → release 50 → acquire 50 from pool (1-2ms)
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const cellPool = new ObjectPool({
15
+ * factory: () => document.createElement('div'),
16
+ * reset: (div) => div.innerHTML = '',
17
+ * initialSize: 50,
18
+ * });
19
+ *
20
+ * const cell = cellPool.acquire();
21
+ * cell.textContent = 'Cell content';
22
+ * document.body.appendChild(cell);
23
+ *
24
+ * // Later: release back to pool
25
+ * document.body.removeChild(cell);
26
+ * cellPool.release(cell);
27
+ * ```
28
+ */
29
+ import { type ObjectPoolStats } from './core/pool-stats';
30
+ export type { ObjectPoolStats };
31
+ export interface ObjectPoolOptions<T> {
32
+ factory: () => T;
33
+ reset?: (obj: T) => void;
34
+ validate?: (obj: T) => boolean;
35
+ initialSize?: number;
36
+ maxSize?: number;
37
+ }
38
+ export declare class ObjectPool<T> {
39
+ private pool;
40
+ private factory;
41
+ private reset?;
42
+ private validate?;
43
+ private maxSize;
44
+ private stats;
45
+ constructor(options: ObjectPoolOptions<T>);
46
+ /**
47
+ * Acquire object from pool (reuse or create)
48
+ *
49
+ * @performance O(1) - pop from array
50
+ */
51
+ acquire(): T;
52
+ /**
53
+ * Release object back to pool
54
+ *
55
+ * @performance O(1) - push to array + O(reset)
56
+ */
57
+ release(obj: T): void;
58
+ /**
59
+ * Create new object
60
+ *
61
+ * @private
62
+ */
63
+ private createNew;
64
+ /**
65
+ * Acquire multiple objects from pool
66
+ */
67
+ acquireMany(count: number): T[];
68
+ /**
69
+ * Release multiple objects back to pool
70
+ */
71
+ releaseMany(objects: T[]): void;
72
+ /**
73
+ * Prewarm pool with objects
74
+ */
75
+ prewarm(count: number): void;
76
+ /**
77
+ * Get current pool size
78
+ */
79
+ size(): number;
80
+ /**
81
+ * Get pool statistics
82
+ */
83
+ getStats(): ObjectPoolStats;
84
+ /**
85
+ * Shrink pool to target size
86
+ */
87
+ shrink(targetSize: number): void;
88
+ /**
89
+ * Clear pool
90
+ */
91
+ clear(): void;
92
+ /**
93
+ * Destroy pool
94
+ */
95
+ destroy(): void;
96
+ }
97
+ //# sourceMappingURL=object-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-pool.d.ts","sourceRoot":"","sources":["../../../src/reactive/object-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG3E,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAC,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA0B;gBAE3B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAWzC;;;;OAIG;IACH,OAAO,IAAI,CAAC;IAqBZ;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAqBrB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IAQ/B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU5B;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * ReactiveState - Generic reactive state container
3
+ *
4
+ * @description
5
+ * Observable state with targeted subscriptions (O(m) vs O(n)).
6
+ * Supports dependency injection for testing and customization.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Inheritance (backward compatible)
11
+ * class ColumnModel extends ReactiveState<ColumnState, ColumnEvent> {
12
+ * setWidth(id: string, width: number): void {
13
+ * this.setState(id, { ...state, width }, event);
14
+ * }
15
+ * }
16
+ *
17
+ * // Composition with DI (new, flexible)
18
+ * class ColumnModel {
19
+ * constructor(private state: IReactiveState<ColumnState, ColumnEvent>) {}
20
+ * }
21
+ *
22
+ * // Can inject custom implementation
23
+ * const model = new ColumnModel(new ReactiveState());
24
+ * const testModel = new ColumnModel(mockState);
25
+ * ```
26
+ *
27
+ * @template T - State value type
28
+ * @template E - Event type
29
+ */
30
+ import type { IReactiveState, ISubscriber, ISubscriptionManager, IBatchManager } from './interfaces';
31
+ export declare class ReactiveState<T, E> implements IReactiveState<T, E> {
32
+ private state;
33
+ private subscriptions;
34
+ private batching;
35
+ private eventHistory?;
36
+ /**
37
+ * Create ReactiveState with optional dependency injection
38
+ *
39
+ * @param subscriptions - Custom subscription manager (default: SubscriptionManager)
40
+ * @param batching - Custom batch manager (default: BatchManager)
41
+ * @param historySize - Event history size for debugging (default: 0, disabled)
42
+ */
43
+ constructor(subscriptions?: ISubscriptionManager<E>, batching?: IBatchManager<E>, historySize?: number);
44
+ /**
45
+ * Subscribe to specific key changes (targeted O(m))
46
+ */
47
+ subscribeToKey(key: string, subscriber: ISubscriber<E>): () => void;
48
+ /**
49
+ * Subscribe to all state changes (global observer)
50
+ */
51
+ subscribeGlobal(subscriber: ISubscriber<E>): () => void;
52
+ /**
53
+ * Update state and notify subscribers
54
+ *
55
+ * @protected - For subclass use
56
+ */
57
+ protected setState(key: string, value: T, event: E): void;
58
+ /**
59
+ * Batch multiple updates (single notification)
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * columnModel.batch(() => {
64
+ * columnModel.setWidth('col-0', 150);
65
+ * columnModel.setWidth('col-1', 200);
66
+ * columnModel.setWidth('col-2', 180);
67
+ * });
68
+ * ```
69
+ */
70
+ protected batch(updates: () => void): void;
71
+ /**
72
+ * Flush batched events
73
+ *
74
+ * @private
75
+ */
76
+ private flushBatch;
77
+ /**
78
+ * Get state for key
79
+ */
80
+ protected getState(key: string): T | undefined;
81
+ /**
82
+ * Get all state
83
+ */
84
+ protected getAllState(): Map<string, T>;
85
+ /**
86
+ * Check if key has state
87
+ */
88
+ protected hasState(key: string): boolean;
89
+ /**
90
+ * Delete state for key and optionally notify
91
+ */
92
+ protected deleteState(key: string, event?: E): void;
93
+ /**
94
+ * Get all state keys
95
+ */
96
+ protected getKeys(): string[];
97
+ /**
98
+ * Get subscriber count for key
99
+ */
100
+ getSubscriberCount(key: string): number;
101
+ /**
102
+ * Get global subscriber count
103
+ */
104
+ getGlobalSubscriberCount(): number;
105
+ /**
106
+ * Get event history (if enabled)
107
+ * Returns [oldest, ..., newest]
108
+ */
109
+ getEventHistory(): E[];
110
+ /**
111
+ * Get last N events from history
112
+ */
113
+ getLastEvents(count: number): E[];
114
+ /**
115
+ * Clear event history
116
+ */
117
+ clearEventHistory(): void;
118
+ /**
119
+ * Clear all state and subscribers
120
+ */
121
+ destroy(): void;
122
+ }
123
+ /**
124
+ * Subscriber interface (backward compatible)
125
+ * @deprecated Use ISubscriber from interfaces.ts
126
+ */
127
+ export interface StateSubscriber<E> {
128
+ onChange(event: E): void;
129
+ onBatchChange?(events: E[]): void;
130
+ }
131
+ export type { ISubscriber, IReactiveState } from './interfaces';
132
+ //# sourceMappingURL=reactive-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-state.d.ts","sourceRoot":"","sources":["../../../src/reactive/reactive-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,aAAa,EACd,MAAM,cAAc,CAAC;AAKtB,qBAAa,aAAa,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC;;;;;;OAMG;gBAED,aAAa,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EACvC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,WAAW,GAAE,MAAU;IAUzB;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAInE;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIvD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAezD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAiB1C;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9C;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAIvC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IASnD;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAIlC;;;OAGG;IACH,eAAe,IAAI,CAAC,EAAE;IAItB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IAKjC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;CACnC;AAGD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Common types used across ZenGrid algorithms and data structures
3
+ */
4
+ /**
5
+ * Comparator function for sorting and ordering
6
+ * @returns Negative if a < b, zero if a === b, positive if a > b
7
+ */
8
+ export type Comparator<T> = (a: T, b: T) => number;
9
+ /**
10
+ * Predicate function for filtering
11
+ * @returns true if the value matches the condition
12
+ */
13
+ export type Predicate<T> = (value: T) => boolean;
14
+ /**
15
+ * Equality function for comparing values
16
+ * @returns true if values are equal
17
+ */
18
+ export type EqualityFn<T> = (a: T, b: T) => boolean;
19
+ /**
20
+ * Hash function for creating keys from values
21
+ * @returns string representation of the value
22
+ */
23
+ export type HashFn<T> = (value: T) => string;
24
+ /**
25
+ * Generic range interface
26
+ */
27
+ export interface Range {
28
+ start: number;
29
+ end: number;
30
+ }
31
+ /**
32
+ * 2D rectangle interface
33
+ */
34
+ export interface Rectangle {
35
+ x: number;
36
+ y: number;
37
+ width: number;
38
+ height: number;
39
+ }
40
+ /**
41
+ * 2D point interface
42
+ */
43
+ export interface Point {
44
+ x: number;
45
+ y: number;
46
+ }
47
+ /**
48
+ * Bounding box interface
49
+ */
50
+ export interface BoundingBox {
51
+ minX: number;
52
+ minY: number;
53
+ maxX: number;
54
+ maxY: number;
55
+ }
56
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for ZenGrid
3
+ */
4
+ export type { Comparator, Predicate, EqualityFn, HashFn, Range, Rectangle, Point, BoundingBox, } from './common';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,GACZ,MAAM,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Utility functions
3
+ * @module @zengrid/shared/utils
4
+ */
5
+ export * from './timing';
6
+ export * from './timing.interface';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @fileoverview Timing utilities for performance optimization
3
+ * @module @zengrid/shared/utils/timing
4
+ */
5
+ import type { DebounceOptions, DebouncedFunction, ThrottleOptions, ThrottledFunction, RAFBatchScheduler } from './timing.interface';
6
+ /**
7
+ * Creates a debounced function that delays invoking func until after wait milliseconds
8
+ * have elapsed since the last time the debounced function was invoked.
9
+ *
10
+ * @param func - The function to debounce
11
+ * @param wait - The number of milliseconds to delay
12
+ * @param options - Options object
13
+ * @returns Debounced function with cancel and flush methods
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const handleResize = debounce(() => {
18
+ * console.log('Window resized');
19
+ * }, 250);
20
+ *
21
+ * window.addEventListener('resize', handleResize);
22
+ *
23
+ * // Cancel pending invocations
24
+ * handleResize.cancel();
25
+ *
26
+ * // Immediately invoke
27
+ * handleResize.flush();
28
+ * ```
29
+ */
30
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, options?: DebounceOptions): DebouncedFunction<T>;
31
+ /**
32
+ * Creates a throttled function that only invokes func at most once per every wait milliseconds.
33
+ *
34
+ * @param func - The function to throttle
35
+ * @param wait - The number of milliseconds to throttle invocations to
36
+ * @param options - Options object
37
+ * @returns Throttled function with cancel method
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const handleScroll = throttle(() => {
42
+ * console.log('Scrolling');
43
+ * }, 100);
44
+ *
45
+ * window.addEventListener('scroll', handleScroll);
46
+ *
47
+ * // Cancel pending invocation
48
+ * handleScroll.cancel();
49
+ * ```
50
+ */
51
+ export declare function throttle<T extends (...args: any[]) => any>(func: T, wait: number, options?: ThrottleOptions): ThrottledFunction<T>;
52
+ /**
53
+ * Creates a RAF (RequestAnimationFrame) batch scheduler that coalesces multiple
54
+ * updates into a single animation frame.
55
+ *
56
+ * Useful for optimizing frequent DOM updates by batching them together.
57
+ *
58
+ * @returns RAF batch scheduler
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const scheduler = createRAFBatchScheduler();
63
+ *
64
+ * // Multiple calls in same frame will be batched
65
+ * scheduler.schedule(() => console.log('Update 1'));
66
+ * scheduler.schedule(() => console.log('Update 2'));
67
+ * scheduler.schedule(() => console.log('Update 3'));
68
+ * // All three will run in the same animation frame
69
+ *
70
+ * // Cancel all pending
71
+ * scheduler.cancelAll();
72
+ * ```
73
+ */
74
+ export declare function createRAFBatchScheduler(): RAFBatchScheduler;
75
+ /**
76
+ * Delays execution for specified milliseconds. Returns a promise.
77
+ *
78
+ * @param ms - Milliseconds to delay
79
+ * @returns Promise that resolves after delay
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * await delay(1000); // Wait 1 second
84
+ * console.log('1 second later');
85
+ * ```
86
+ */
87
+ export declare function delay(ms: number): Promise<void>;
88
+ /**
89
+ * Creates a timeout promise that rejects after specified milliseconds
90
+ *
91
+ * @param ms - Milliseconds before timeout
92
+ * @param message - Error message
93
+ * @returns Promise that rejects after timeout
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const result = await Promise.race([
98
+ * fetchData(),
99
+ * timeout(5000, 'Request timeout')
100
+ * ]);
101
+ * ```
102
+ */
103
+ export declare function timeout(ms: number, message?: string): Promise<never>;
104
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../../src/utils/timing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,iBAAiB,CAAC,CAAC,CAAC,CA0HtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAoD3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAIvE"}