react-virtual-renderer 1.0.3

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 (80) hide show
  1. package/README.md +170 -0
  2. package/dist/App.d.ts +3 -0
  3. package/dist/App.d.ts.map +1 -0
  4. package/dist/App.js +7 -0
  5. package/dist/App.js.map +1 -0
  6. package/dist/accessibility/a11y.d.ts +111 -0
  7. package/dist/accessibility/a11y.d.ts.map +1 -0
  8. package/dist/accessibility/a11y.js +254 -0
  9. package/dist/accessibility/a11y.js.map +1 -0
  10. package/dist/components/VirtualGrid.d.ts +8 -0
  11. package/dist/components/VirtualGrid.d.ts.map +1 -0
  12. package/dist/components/VirtualGrid.js +187 -0
  13. package/dist/components/VirtualGrid.js.map +1 -0
  14. package/dist/components/VirtualList.d.ts +8 -0
  15. package/dist/components/VirtualList.d.ts.map +1 -0
  16. package/dist/components/VirtualList.js +102 -0
  17. package/dist/components/VirtualList.js.map +1 -0
  18. package/dist/core/MeasurementSystem.d.ts +52 -0
  19. package/dist/core/MeasurementSystem.d.ts.map +1 -0
  20. package/dist/core/MeasurementSystem.js +138 -0
  21. package/dist/core/MeasurementSystem.js.map +1 -0
  22. package/dist/core/VirtualizationEngine.d.ts +65 -0
  23. package/dist/core/VirtualizationEngine.d.ts.map +1 -0
  24. package/dist/core/VirtualizationEngine.js +203 -0
  25. package/dist/core/VirtualizationEngine.js.map +1 -0
  26. package/dist/examples/AdvancedExamples.d.ts +24 -0
  27. package/dist/examples/AdvancedExamples.d.ts.map +1 -0
  28. package/dist/examples/AdvancedExamples.js +216 -0
  29. package/dist/examples/AdvancedExamples.js.map +1 -0
  30. package/dist/examples/Example.d.ts +26 -0
  31. package/dist/examples/Example.d.ts.map +1 -0
  32. package/dist/examples/Example.js +186 -0
  33. package/dist/examples/Example.js.map +1 -0
  34. package/dist/hooks/useInfiniteScroll.d.ts +17 -0
  35. package/dist/hooks/useInfiniteScroll.d.ts.map +1 -0
  36. package/dist/hooks/useInfiniteScroll.js +41 -0
  37. package/dist/hooks/useInfiniteScroll.js.map +1 -0
  38. package/dist/hooks/useLazyLoad.d.ts +16 -0
  39. package/dist/hooks/useLazyLoad.d.ts.map +1 -0
  40. package/dist/hooks/useLazyLoad.js +34 -0
  41. package/dist/hooks/useLazyLoad.js.map +1 -0
  42. package/dist/hooks/useScrollRestoration.d.ts +10 -0
  43. package/dist/hooks/useScrollRestoration.d.ts.map +1 -0
  44. package/dist/hooks/useScrollRestoration.js +63 -0
  45. package/dist/hooks/useScrollRestoration.js.map +1 -0
  46. package/dist/hooks/useVirtualList.d.ts +33 -0
  47. package/dist/hooks/useVirtualList.d.ts.map +1 -0
  48. package/dist/hooks/useVirtualList.js +226 -0
  49. package/dist/hooks/useVirtualList.js.map +1 -0
  50. package/dist/hooks/useVirtualizedSearch.d.ts +40 -0
  51. package/dist/hooks/useVirtualizedSearch.d.ts.map +1 -0
  52. package/dist/hooks/useVirtualizedSearch.js +168 -0
  53. package/dist/hooks/useVirtualizedSearch.js.map +1 -0
  54. package/dist/index.d.ts +11 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.esm.js +11 -0
  57. package/dist/index.esm.js.map +1 -0
  58. package/dist/index.js +11 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/main.d.ts +2 -0
  61. package/dist/main.d.ts.map +1 -0
  62. package/dist/main.js +6 -0
  63. package/dist/main.js.map +1 -0
  64. package/dist/performance/metrics.d.ts +110 -0
  65. package/dist/performance/metrics.d.ts.map +1 -0
  66. package/dist/performance/metrics.js +310 -0
  67. package/dist/performance/metrics.js.map +1 -0
  68. package/dist/plugin.d.ts +182 -0
  69. package/dist/plugin.d.ts.map +1 -0
  70. package/dist/plugin.js +409 -0
  71. package/dist/plugin.js.map +1 -0
  72. package/dist/types.d.ts +84 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +2 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/utils/helpers.d.ts +66 -0
  77. package/dist/utils/helpers.d.ts.map +1 -0
  78. package/dist/utils/helpers.js +166 -0
  79. package/dist/utils/helpers.js.map +1 -0
  80. package/package.json +111 -0
package/dist/plugin.js ADDED
@@ -0,0 +1,409 @@
1
+ export class PluginManager {
2
+ constructor() {
3
+ Object.defineProperty(this, "plugins", {
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true,
7
+ value: new Map()
8
+ });
9
+ }
10
+ /**
11
+ * Register a plugin
12
+ */
13
+ register(plugin) {
14
+ if (this.plugins.has(plugin.name)) {
15
+ console.warn(`Plugin "${plugin.name}" already registered`);
16
+ return;
17
+ }
18
+ this.plugins.set(plugin.name, plugin);
19
+ console.log(`✅ Plugin registered: ${plugin.name} v${plugin.version}`);
20
+ }
21
+ /**
22
+ * Unregister a plugin
23
+ */
24
+ unregister(name) {
25
+ this.plugins.delete(name);
26
+ }
27
+ /**
28
+ * Get registered plugins
29
+ */
30
+ getPlugins() {
31
+ return Array.from(this.plugins.values());
32
+ }
33
+ /**
34
+ * Call plugin hook
35
+ */
36
+ async callHook(hookName, ...args) {
37
+ const results = [];
38
+ for (const plugin of this.plugins.values()) {
39
+ const hook = plugin.hooks?.[hookName];
40
+ if (typeof hook === 'function') {
41
+ try {
42
+ const result = await hook(...args);
43
+ results.push(result);
44
+ }
45
+ catch (error) {
46
+ console.error(`Error in plugin ${plugin.name}:`, error);
47
+ }
48
+ }
49
+ }
50
+ return results;
51
+ }
52
+ /**
53
+ * Call plugin method
54
+ */
55
+ callMethod(pluginName, methodName, ...args) {
56
+ const plugin = this.plugins.get(pluginName);
57
+ if (!plugin || !plugin.methods || !plugin.methods[methodName]) {
58
+ throw new Error(`Method ${methodName} not found in plugin ${pluginName}`);
59
+ }
60
+ return plugin.methods[methodName](...args);
61
+ }
62
+ }
63
+ // ============================================
64
+ // LAYOUT SYSTEM
65
+ // ============================================
66
+ export var LayoutType;
67
+ (function (LayoutType) {
68
+ LayoutType["LIST"] = "list";
69
+ LayoutType["GRID"] = "grid";
70
+ LayoutType["MASONRY"] = "masonry";
71
+ LayoutType["WATERFALL"] = "waterfall";
72
+ LayoutType["FEED"] = "feed";
73
+ LayoutType["TIMELINE"] = "timeline";
74
+ })(LayoutType || (LayoutType = {}));
75
+ /**
76
+ * Waterfall Layout - Multi-column layout with items filling shortest column
77
+ * Perfect for: Image galleries, product showcases
78
+ */
79
+ export class WaterfallLayout {
80
+ constructor(columns, gapSize = 8) {
81
+ Object.defineProperty(this, "columns", {
82
+ enumerable: true,
83
+ configurable: true,
84
+ writable: true,
85
+ value: void 0
86
+ });
87
+ Object.defineProperty(this, "gapSize", {
88
+ enumerable: true,
89
+ configurable: true,
90
+ writable: true,
91
+ value: void 0
92
+ });
93
+ Object.defineProperty(this, "columnHeights", {
94
+ enumerable: true,
95
+ configurable: true,
96
+ writable: true,
97
+ value: []
98
+ });
99
+ this.columns = columns;
100
+ this.gapSize = gapSize;
101
+ this.columnHeights = new Array(columns).fill(0);
102
+ }
103
+ /**
104
+ * Get position for item
105
+ */
106
+ getItemPosition(_, itemHeight, width) {
107
+ const shortestColumn = this.columnHeights.indexOf(Math.min(...this.columnHeights));
108
+ const columnWidth = width / this.columns;
109
+ const x = shortestColumn * columnWidth;
110
+ const y = this.columnHeights[shortestColumn];
111
+ this.columnHeights[shortestColumn] += itemHeight + this.gapSize;
112
+ return { x, y, column: shortestColumn };
113
+ }
114
+ /**
115
+ * Get total height needed
116
+ */
117
+ getTotalHeight() {
118
+ return Math.max(...this.columnHeights);
119
+ }
120
+ /**
121
+ * Reset layout
122
+ */
123
+ reset() {
124
+ this.columnHeights.fill(0);
125
+ }
126
+ }
127
+ /**
128
+ * Feed Layout - Social media feed style (variable width, full-width items)
129
+ * Perfect for: Social feeds, blogs, news
130
+ */
131
+ export class FeedLayout {
132
+ constructor() {
133
+ Object.defineProperty(this, "itemHeights", {
134
+ enumerable: true,
135
+ configurable: true,
136
+ writable: true,
137
+ value: new Map()
138
+ });
139
+ Object.defineProperty(this, "itemOffsets", {
140
+ enumerable: true,
141
+ configurable: true,
142
+ writable: true,
143
+ value: new Map()
144
+ });
145
+ Object.defineProperty(this, "totalHeight", {
146
+ enumerable: true,
147
+ configurable: true,
148
+ writable: true,
149
+ value: 0
150
+ });
151
+ }
152
+ /**
153
+ * Record item height
154
+ */
155
+ recordItemHeight(index, height) {
156
+ this.itemHeights.set(index, height);
157
+ this.updateOffsets();
158
+ }
159
+ /**
160
+ * Get item offset and height
161
+ */
162
+ getItemDimensions(index) {
163
+ return {
164
+ offset: this.itemOffsets.get(index) || 0,
165
+ height: this.itemHeights.get(index) || 0,
166
+ };
167
+ }
168
+ /**
169
+ * Update all offsets
170
+ */
171
+ updateOffsets() {
172
+ let currentOffset = 0;
173
+ const sortedIndices = Array.from(this.itemHeights.keys()).sort((a, b) => a - b);
174
+ for (const index of sortedIndices) {
175
+ this.itemOffsets.set(index, currentOffset);
176
+ currentOffset += (this.itemHeights.get(index) || 0);
177
+ }
178
+ this.totalHeight = currentOffset;
179
+ }
180
+ /**
181
+ * Get total height
182
+ */
183
+ getTotalHeight() {
184
+ return this.totalHeight;
185
+ }
186
+ }
187
+ // ============================================
188
+ // FRAMEWORK ADAPTERS
189
+ // ============================================
190
+ /**
191
+ * Vue 3 Adapter
192
+ */
193
+ export const createVueVirtualList = () => {
194
+ return {
195
+ name: 'VirtualList',
196
+ template: `
197
+ <div
198
+ class="virtualize-container"
199
+ :style="{ height: height + 'px', width: width + 'px' }"
200
+ @scroll="handleScroll"
201
+ ref="container"
202
+ >
203
+ <div
204
+ v-for="item in virtualItems"
205
+ :key="item.key"
206
+ :style="getItemStyle(item)"
207
+ >
208
+ <slot :item="item.data" :index="item.index" />
209
+ </div>
210
+ </div>
211
+ `,
212
+ props: {
213
+ items: Array,
214
+ height: { type: Number, default: 400 },
215
+ width: { type: Number, default: 300 },
216
+ estimatedItemSize: { type: Number, default: 50 },
217
+ },
218
+ };
219
+ };
220
+ /**
221
+ * Svelte Component
222
+ */
223
+ export const SvelteVirtualList = `
224
+ <script>
225
+ import { useVirtualList } from 'virtualize';
226
+
227
+ export let items = [];
228
+ export let height = 400;
229
+ export let width = 300;
230
+ export let estimatedItemSize = 50;
231
+
232
+ let containerRef;
233
+ const { virtualItems, getItemStyle } = useVirtualList({
234
+ items,
235
+ containerHeight: height,
236
+ estimatedItemSize,
237
+ });
238
+ </script>
239
+
240
+ <div
241
+ bind:this={containerRef}
242
+ class="virtualize-container"
243
+ style="height: {height}px; width: {width}px; overflow: auto;"
244
+ >
245
+ {#each $virtualItems as virtualItem (virtualItem.key)}
246
+ <div style={getItemStyle(virtualItem.index, virtualItem.size)}>
247
+ <slot item={virtualItem.data} index={virtualItem.index} />
248
+ </div>
249
+ {/each}
250
+ </div>
251
+
252
+ <style>
253
+ .virtualize-container {
254
+ position: relative;
255
+ border: 1px solid #ccc;
256
+ }
257
+ </style>
258
+ `;
259
+ export class AdvancedAnalytics {
260
+ constructor() {
261
+ Object.defineProperty(this, "events", {
262
+ enumerable: true,
263
+ configurable: true,
264
+ writable: true,
265
+ value: []
266
+ });
267
+ Object.defineProperty(this, "sessionStart", {
268
+ enumerable: true,
269
+ configurable: true,
270
+ writable: true,
271
+ value: Date.now()
272
+ });
273
+ Object.defineProperty(this, "maxEvents", {
274
+ enumerable: true,
275
+ configurable: true,
276
+ writable: true,
277
+ value: 10000
278
+ });
279
+ }
280
+ /**
281
+ * Track event
282
+ */
283
+ trackEvent(type, data) {
284
+ if (this.events.length >= this.maxEvents) {
285
+ this.events.shift(); // Remove oldest
286
+ }
287
+ this.events.push({
288
+ type,
289
+ timestamp: Date.now(),
290
+ data,
291
+ });
292
+ }
293
+ /**
294
+ * Get session duration
295
+ */
296
+ getSessionDuration() {
297
+ return Date.now() - this.sessionStart;
298
+ }
299
+ /**
300
+ * Get analytics report
301
+ */
302
+ getReport() {
303
+ return {
304
+ sessionDuration: this.getSessionDuration(),
305
+ totalEvents: this.events.length,
306
+ eventBreakdown: this.getEventBreakdown(),
307
+ timeline: this.events,
308
+ };
309
+ }
310
+ /**
311
+ * Get event breakdown
312
+ */
313
+ getEventBreakdown() {
314
+ const breakdown = {};
315
+ for (const event of this.events) {
316
+ breakdown[event.type] = (breakdown[event.type] || 0) + 1;
317
+ }
318
+ return breakdown;
319
+ }
320
+ /**
321
+ * Send analytics to server
322
+ */
323
+ async sendAnalytics(endpoint) {
324
+ try {
325
+ const response = await fetch(endpoint, {
326
+ method: 'POST',
327
+ headers: { 'Content-Type': 'application/json' },
328
+ body: JSON.stringify(this.getReport()),
329
+ });
330
+ if (!response.ok) {
331
+ console.error('Failed to send analytics');
332
+ }
333
+ }
334
+ catch (error) {
335
+ console.error('Error sending analytics:', error);
336
+ }
337
+ }
338
+ /**
339
+ * Export analytics as CSV
340
+ */
341
+ exportAsCSV() {
342
+ const headers = ['Type', 'Timestamp', 'Data'];
343
+ const rows = this.events.map((e) => [
344
+ e.type,
345
+ new Date(e.timestamp).toISOString(),
346
+ JSON.stringify(e.data),
347
+ ]);
348
+ const csv = [headers, ...rows]
349
+ .map((row) => row.map((cell) => `"${cell}"`).join(','))
350
+ .join('\n');
351
+ return csv;
352
+ }
353
+ }
354
+ // ============================================
355
+ // EXAMPLE PLUGINS
356
+ // ============================================
357
+ /**
358
+ * Example: Analytics Plugin
359
+ */
360
+ export const AnalyticsPlugin = {
361
+ name: 'analytics',
362
+ version: '2.0.0',
363
+ hooks: {
364
+ onScroll: (offset) => {
365
+ console.log(`📊 Scroll offset: ${offset}`);
366
+ },
367
+ onMeasurement: (index, size) => {
368
+ console.log(`📊 Item ${index} measured: ${size}px`);
369
+ },
370
+ },
371
+ };
372
+ /**
373
+ * Example: Logger Plugin
374
+ */
375
+ export const LoggerPlugin = {
376
+ name: 'logger',
377
+ version: '2.0.0',
378
+ hooks: {
379
+ beforeRender: (items) => {
380
+ console.log(`📝 About to render ${items.length} items`);
381
+ return items;
382
+ },
383
+ afterRender: (elements) => {
384
+ console.log(`✅ Rendered ${elements.length} elements`);
385
+ },
386
+ },
387
+ };
388
+ /**
389
+ * Example: Custom Plugin
390
+ */
391
+ export function createCustomPlugin(options) {
392
+ return {
393
+ name: options.name || 'custom-plugin',
394
+ version: options.version || '1.0.0',
395
+ hooks: {
396
+ onScroll: (offset) => {
397
+ console.log(`Custom: Scroll detected at ${offset}`);
398
+ options.onScroll?.(offset);
399
+ },
400
+ },
401
+ methods: {
402
+ customMethod: (arg) => {
403
+ console.log('Custom method called:', arg);
404
+ return arg;
405
+ },
406
+ },
407
+ };
408
+ }
409
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /// <reference types="react" />
2
+ export type ScrollDirection = 'forward' | 'reverse' | 'auto';
3
+ export type LayoutMode = 'vertical' | 'horizontal' | 'grid' | 'masonry';
4
+ export interface ItemSize {
5
+ index: number;
6
+ size: number;
7
+ offset: number;
8
+ }
9
+ export interface VirtualItem {
10
+ index: number;
11
+ offset: number;
12
+ size: number;
13
+ isSticky?: boolean;
14
+ }
15
+ export interface ScrollState {
16
+ scrollOffset: number;
17
+ scrollUpdateWasRequested: boolean;
18
+ isScrolling: boolean;
19
+ scrollDirection: ScrollDirection;
20
+ }
21
+ export interface MeasurementCache {
22
+ [key: number]: number;
23
+ }
24
+ export interface VirtualListProps<T> {
25
+ items: T[];
26
+ renderItem: (props: RenderItemProps<T>) => React.ReactNode;
27
+ itemKey?: (index: number, item: T) => string | number;
28
+ height?: number;
29
+ width?: number;
30
+ itemSize?: number | ((index: number) => number);
31
+ overscan?: number;
32
+ scrollDirection?: ScrollDirection;
33
+ onScroll?: (offset: number, direction: ScrollDirection) => void;
34
+ className?: string;
35
+ style?: React.CSSProperties;
36
+ estimatedItemSize?: number;
37
+ getItemSize?: (index: number) => number;
38
+ stickyIndices?: number[];
39
+ onScrollEnd?: () => void;
40
+ scrollMargin?: number;
41
+ innerRef?: React.Ref<HTMLDivElement>;
42
+ scrollOffsetRef?: React.MutableRefObject<number>;
43
+ }
44
+ export interface VirtualGridProps<T> {
45
+ items: T[];
46
+ renderItem: (props: RenderItemProps<T>) => React.ReactNode;
47
+ itemKey?: (index: number, item: T) => string | number;
48
+ height: number;
49
+ width: number;
50
+ columnCount: number | 'auto';
51
+ rowHeight?: number | ((index: number) => number);
52
+ columnWidth?: number | ((index: number) => number);
53
+ layout?: 'grid' | 'masonry';
54
+ overscan?: number;
55
+ gap?: number;
56
+ onScroll?: (offset: number) => void;
57
+ className?: string;
58
+ style?: React.CSSProperties;
59
+ estimatedItemHeight?: number;
60
+ }
61
+ export interface RenderItemProps<T> {
62
+ item: T;
63
+ index: number;
64
+ style: React.CSSProperties;
65
+ isScrolling: boolean;
66
+ isMeasuring?: boolean;
67
+ }
68
+ export interface UseVirtualListOptions<T> {
69
+ items: T[];
70
+ itemSize?: number | ((index: number) => number);
71
+ containerHeight: number;
72
+ containerWidth?: number;
73
+ overscan?: number;
74
+ scrollDirection?: ScrollDirection;
75
+ estimatedItemSize?: number;
76
+ onScroll?: (offset: number) => void;
77
+ }
78
+ export interface VirtualRange {
79
+ startIndex: number;
80
+ endIndex: number;
81
+ overscanStartIndex: number;
82
+ overscanEndIndex: number;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Binary search to find the item at a given scroll offset
3
+ */
4
+ export declare function binarySearch(offsets: number[], target: number, low?: number, high?: number): number;
5
+ /**
6
+ * Calculate range with overscan
7
+ */
8
+ export declare function getOverscanRange(startIndex: number, endIndex: number, overscan: number, itemCount: number): {
9
+ start: number;
10
+ end: number;
11
+ };
12
+ /**
13
+ * Debounce function
14
+ */
15
+ export declare function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
16
+ /**
17
+ * Throttle function
18
+ */
19
+ export declare function throttle<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
20
+ /**
21
+ * Request animation frame wrapper
22
+ */
23
+ export declare function requestAnimationFrameWithFallback(callback: FrameRequestCallback): number;
24
+ /**
25
+ * Cancel animation frame with fallback
26
+ */
27
+ export declare function cancelAnimationFrameWithFallback(id: number): void;
28
+ /**
29
+ * Check if an element is visible in viewport
30
+ */
31
+ export declare function isElementInViewport(element: HTMLElement, container: HTMLElement): boolean;
32
+ /**
33
+ * Get scroll velocity
34
+ */
35
+ export declare function calculateScrollVelocity(currentOffset: number, previousOffset: number, deltaTime: number): number;
36
+ /**
37
+ * Clamp a value between min and max
38
+ */
39
+ export declare function clamp(value: number, min: number, max: number): number;
40
+ /**
41
+ * Check if ResizeObserver is supported
42
+ */
43
+ export declare function isResizeObserverSupported(): boolean;
44
+ /**
45
+ * Check if IntersectionObserver is supported
46
+ */
47
+ export declare function isIntersectionObserverSupported(): boolean;
48
+ /**
49
+ * Smooth scroll to position
50
+ */
51
+ export declare function smoothScroll(element: HTMLElement, targetScroll: number, duration?: number): Promise<void>;
52
+ /**
53
+ * Create a unique key from index and item
54
+ */
55
+ export declare function createItemKey<T>(index: number, item: T, keyGetter?: (index: number, item: T) => string | number): string | number;
56
+ /**
57
+ * Log virtualization stats (for debugging)
58
+ */
59
+ export declare function logVirtualizationStats(stats: {
60
+ itemCount: number;
61
+ visibleCount: number;
62
+ renderedCount: number;
63
+ scrollOffset: number;
64
+ totalSize: number;
65
+ }): void;
66
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAU,EACf,IAAI,GAAE,MAA2B,GAClC,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAKhC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAalC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACd,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAkBlC;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC7C,QAAQ,EAAE,oBAAoB,GAC/B,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,WAAW,GACvB,OAAO,CAUT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAClB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAY,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,EACP,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GACxD,MAAM,GAAG,MAAM,CAKjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAMP"}