gantt-task-react-v 1.2.14 → 1.3.2
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.
- package/dist/gantt-task-react.es.js +383 -50
- package/dist/gantt-task-react.umd.js +383 -50
- package/dist/helpers/use-incremental-coordinates.d.ts +17 -0
- package/dist/helpers/use-memory-management.d.ts +122 -0
- package/dist/helpers/use-optimized-data-structures.d.ts +24 -0
- package/dist/helpers/use-optimized-svg-rendering.d.ts +117 -0
- package/dist/helpers/use-performance-monitor.d.ts +106 -0
- package/dist/helpers/use-progressive-loading.d.ts +63 -0
- package/dist/helpers/use-spatial-dependency-map.d.ts +49 -0
- package/dist/helpers/use-web-worker.d.ts +50 -0
- package/package.json +7 -5
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { RenderTask, TaskCoordinates } from "../types";
|
|
3
|
+
export interface SVGBatch {
|
|
4
|
+
tasks: RenderTask[];
|
|
5
|
+
dependencies: string[];
|
|
6
|
+
selectedTasks: string[];
|
|
7
|
+
holidays: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface SVGRenderContext {
|
|
10
|
+
additionalLeftSpace: number;
|
|
11
|
+
fullRowHeight: number;
|
|
12
|
+
taskHeight: number;
|
|
13
|
+
svgWidth: number;
|
|
14
|
+
svgHeight: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Hook for batched SVG rendering to reduce DOM operations
|
|
18
|
+
*/
|
|
19
|
+
export declare const useBatchedSVGRenderer: () => {
|
|
20
|
+
clearBatch: () => void;
|
|
21
|
+
addTaskToBatch: (task: RenderTask) => void;
|
|
22
|
+
addDependencyToBatch: (dependency: string) => void;
|
|
23
|
+
addSelectedTaskToBatch: (selectedTask: string) => void;
|
|
24
|
+
addHolidayToBatch: (holiday: string) => void;
|
|
25
|
+
getBatchData: () => {
|
|
26
|
+
tasks: RenderTask[];
|
|
27
|
+
dependencies: string[];
|
|
28
|
+
selectedTasks: string[];
|
|
29
|
+
holidays: string[];
|
|
30
|
+
};
|
|
31
|
+
currentBatch: SVGBatch;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Hook for SVG element pooling to reuse DOM elements
|
|
35
|
+
*/
|
|
36
|
+
export declare const useSVGElementPool: () => {
|
|
37
|
+
acquireRect: () => SVGRectElement;
|
|
38
|
+
releaseRect: (rect: SVGRectElement) => void;
|
|
39
|
+
acquirePath: () => SVGPathElement;
|
|
40
|
+
releasePath: (path: SVGPathElement) => void;
|
|
41
|
+
acquireText: () => SVGTextElement;
|
|
42
|
+
releaseText: (text: SVGTextElement) => void;
|
|
43
|
+
acquireGroup: () => SVGGElement;
|
|
44
|
+
releaseGroup: (group: SVGGElement) => void;
|
|
45
|
+
clearPools: () => void;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Hook for virtual SVG rendering - only renders visible elements
|
|
49
|
+
*/
|
|
50
|
+
export declare const useVirtualSVGRenderer: (allTasks: RenderTask[], getTaskCoordinates: (task: RenderTask) => TaskCoordinates, viewportBounds: {
|
|
51
|
+
minX: number;
|
|
52
|
+
maxX: number;
|
|
53
|
+
minY: number;
|
|
54
|
+
maxY: number;
|
|
55
|
+
}) => {
|
|
56
|
+
visibleTasks: RenderTask[];
|
|
57
|
+
getVisibleTasksInRange: (startIndex: number, endIndex: number) => RenderTask[];
|
|
58
|
+
totalVisibleCount: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Hook for optimized SVG coordinate transformations
|
|
62
|
+
*/
|
|
63
|
+
export declare const useSVGCoordinateTransforms: () => {
|
|
64
|
+
getTransform: (x: number, y: number) => string;
|
|
65
|
+
getScaleTransform: (scaleX: number, scaleY: number) => string;
|
|
66
|
+
clearTransformCache: () => void;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Hook for Level-of-Detail (LOD) rendering
|
|
70
|
+
* Reduces rendering complexity based on zoom level
|
|
71
|
+
*/
|
|
72
|
+
export declare const useLODRenderer: (zoomLevel: number, taskCount: number) => {
|
|
73
|
+
showLabels: boolean;
|
|
74
|
+
showProgress: boolean;
|
|
75
|
+
showDependencies: boolean;
|
|
76
|
+
taskDetail: "minimal";
|
|
77
|
+
maxVisibleTasks: number;
|
|
78
|
+
} | {
|
|
79
|
+
showLabels: boolean;
|
|
80
|
+
showProgress: boolean;
|
|
81
|
+
showDependencies: boolean;
|
|
82
|
+
taskDetail: "reduced";
|
|
83
|
+
maxVisibleTasks: number;
|
|
84
|
+
} | {
|
|
85
|
+
showLabels: boolean;
|
|
86
|
+
showProgress: boolean;
|
|
87
|
+
showDependencies: boolean;
|
|
88
|
+
taskDetail: "full";
|
|
89
|
+
maxVisibleTasks: number;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Hook for efficient SVG path generation
|
|
93
|
+
*/
|
|
94
|
+
export declare const useSVGPathGenerator: () => {
|
|
95
|
+
generateTaskPath: (x: number, y: number, width: number, height: number, cornerRadius?: number) => string;
|
|
96
|
+
generateProgressPath: (x: number, y: number, width: number, height: number, progressPercent: number) => string;
|
|
97
|
+
generateArrowPath: (fromX: number, fromY: number, toX: number, toY: number, arrowSize?: number) => string;
|
|
98
|
+
clearPathCache: () => void;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Hook for SVG performance optimization
|
|
102
|
+
*/
|
|
103
|
+
export declare const useSVGPerformanceOptimizer: () => {
|
|
104
|
+
optimizeRenderList: (elements: React.ReactElement[]) => React.ReactElement<any, string | React.JSXElementConstructor<any>>[];
|
|
105
|
+
batchSVGUpdates: (updates: Array<() => void>) => void;
|
|
106
|
+
shouldSkipRender: (bounds: {
|
|
107
|
+
x: number;
|
|
108
|
+
y: number;
|
|
109
|
+
width?: number;
|
|
110
|
+
height?: number;
|
|
111
|
+
}, viewportBounds: {
|
|
112
|
+
minX: number;
|
|
113
|
+
maxX: number;
|
|
114
|
+
minY: number;
|
|
115
|
+
maxY: number;
|
|
116
|
+
}) => boolean;
|
|
117
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export interface PerformanceMetrics {
|
|
2
|
+
renderTime: number;
|
|
3
|
+
coordinateCalculationTime: number;
|
|
4
|
+
dependencyCalculationTime: number;
|
|
5
|
+
sortingTime: number;
|
|
6
|
+
totalTasks: number;
|
|
7
|
+
visibleTasks: number;
|
|
8
|
+
fps: number;
|
|
9
|
+
memoryUsage: number;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
}
|
|
12
|
+
export interface PerformanceBenchmark {
|
|
13
|
+
name: string;
|
|
14
|
+
startTime: number;
|
|
15
|
+
endTime?: number;
|
|
16
|
+
duration?: number;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Performance monitor for tracking Gantt chart performance metrics
|
|
21
|
+
*/
|
|
22
|
+
export declare const usePerformanceMonitor: (enabled?: boolean) => {
|
|
23
|
+
startMeasurement: (name: string, metadata?: Record<string, unknown>) => void;
|
|
24
|
+
endMeasurement: (name: string) => number;
|
|
25
|
+
measureFunction: <T extends unknown[], R>(name: string, fn: (...args: T) => R, metadata?: Record<string, unknown>) => (...args: T) => R;
|
|
26
|
+
measureAsyncFunction: <T_1 extends unknown[], R_1>(name: string, fn: (...args: T_1) => Promise<R_1>, metadata?: Record<string, unknown>) => (...args: T_1) => Promise<R_1>;
|
|
27
|
+
getPerformanceReport: () => {
|
|
28
|
+
measurements: Record<string, {
|
|
29
|
+
count: number;
|
|
30
|
+
totalTime: number;
|
|
31
|
+
avgTime: number;
|
|
32
|
+
maxTime: number;
|
|
33
|
+
minTime: number;
|
|
34
|
+
}>;
|
|
35
|
+
fps: number;
|
|
36
|
+
currentMetrics: PerformanceMetrics;
|
|
37
|
+
allMetrics: PerformanceMetrics[];
|
|
38
|
+
};
|
|
39
|
+
addMetrics: (metrics: Omit<PerformanceMetrics, "timestamp">) => void;
|
|
40
|
+
clearMeasurements: () => void;
|
|
41
|
+
updateFPS: () => void;
|
|
42
|
+
getFPS: () => number;
|
|
43
|
+
getMemoryUsage: () => number;
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Hook for measuring render performance
|
|
48
|
+
*/
|
|
49
|
+
export declare const useRenderPerformance: (componentName: string) => {
|
|
50
|
+
measureRender: (fn: () => void) => () => void;
|
|
51
|
+
renderCount: number;
|
|
52
|
+
lastRenderTime: number;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Hook for performance budgeting
|
|
56
|
+
*/
|
|
57
|
+
export declare const usePerformanceBudget: (budgets: Record<string, number>) => {
|
|
58
|
+
checkBudgets: () => {
|
|
59
|
+
operation: string;
|
|
60
|
+
actual: number;
|
|
61
|
+
budget: number;
|
|
62
|
+
timestamp: number;
|
|
63
|
+
}[];
|
|
64
|
+
getBudgetStatus: () => Record<string, {
|
|
65
|
+
budget: number;
|
|
66
|
+
actual: number;
|
|
67
|
+
status: "ok" | "warning" | "violation";
|
|
68
|
+
}>;
|
|
69
|
+
violations: {
|
|
70
|
+
operation: string;
|
|
71
|
+
actual: number;
|
|
72
|
+
budget: number;
|
|
73
|
+
timestamp: number;
|
|
74
|
+
}[];
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Hook for performance-aware rendering
|
|
78
|
+
* Automatically reduces quality when performance is poor
|
|
79
|
+
*/
|
|
80
|
+
export declare const useAdaptivePerformance: (thresholds: {
|
|
81
|
+
fpsThreshold: number;
|
|
82
|
+
renderTimeThreshold: number;
|
|
83
|
+
}) => {
|
|
84
|
+
performanceLevel: "medium" | "high" | "low";
|
|
85
|
+
updatePerformanceLevel: () => "medium" | "high" | "low";
|
|
86
|
+
getQualitySettings: () => {
|
|
87
|
+
enableAnimations: boolean;
|
|
88
|
+
renderQuality: string;
|
|
89
|
+
maxVisibleTasks: number;
|
|
90
|
+
updateFrequency: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Hook for throttling expensive operations based on performance
|
|
95
|
+
*/
|
|
96
|
+
export declare const usePerformanceThrottling: () => {
|
|
97
|
+
throttle: <T extends unknown[], R>(key: string, fn: (...args: T) => R, baseDelay?: number) => (...args: T) => R | undefined;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Development-only performance debugging utilities
|
|
101
|
+
*/
|
|
102
|
+
export declare const usePerformanceDebugger: () => {
|
|
103
|
+
logPerformanceReport: () => void;
|
|
104
|
+
exportPerformanceData: () => void;
|
|
105
|
+
clearMeasurements: () => void;
|
|
106
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { RenderTask } from "../types";
|
|
2
|
+
import type { OptimizedListParams } from "./use-optimized-list";
|
|
3
|
+
export interface ProgressiveLoadingConfig {
|
|
4
|
+
/** Number of tasks to load per chunk */
|
|
5
|
+
chunkSize: number;
|
|
6
|
+
/** Buffer size for preloading (in chunks) */
|
|
7
|
+
preloadBuffer: number;
|
|
8
|
+
/** Function to load a chunk of tasks */
|
|
9
|
+
loadTaskChunk: (startIndex: number, endIndex: number) => Promise<RenderTask[]>;
|
|
10
|
+
/** Total number of tasks available */
|
|
11
|
+
totalTaskCount: number;
|
|
12
|
+
/** Enable progressive loading */
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ProgressiveLoadingState {
|
|
16
|
+
/** Currently loaded tasks */
|
|
17
|
+
loadedTasks: readonly RenderTask[];
|
|
18
|
+
/** Loading state */
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
/** Error state */
|
|
21
|
+
error: Error | null;
|
|
22
|
+
/** Loaded chunk ranges */
|
|
23
|
+
loadedRanges: Set<string>;
|
|
24
|
+
/** Currently loading chunks */
|
|
25
|
+
loadingChunks: Set<string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Hook for progressive loading of large task datasets
|
|
29
|
+
* Loads tasks in chunks based on viewport visibility
|
|
30
|
+
*/
|
|
31
|
+
export declare const useProgressiveLoading: (initialTasks: readonly RenderTask[], config: Partial<ProgressiveLoadingConfig>, renderedIndexes: OptimizedListParams | null) => ProgressiveLoadingState & {
|
|
32
|
+
/** Force load a specific range */
|
|
33
|
+
loadRange: (startIndex: number, endIndex: number) => Promise<void>;
|
|
34
|
+
/** Preload next chunks based on scroll direction */
|
|
35
|
+
preloadNext: (direction: "up" | "down") => Promise<void>;
|
|
36
|
+
/** Clear loaded data and reset */
|
|
37
|
+
reset: () => void;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Hook for chunked task processing
|
|
41
|
+
* Processes large task arrays in smaller chunks to avoid blocking the main thread
|
|
42
|
+
*/
|
|
43
|
+
export declare const useChunkedProcessing: <T, R>(data: T[], processor: (chunk: T[]) => R[], chunkSize?: number) => {
|
|
44
|
+
processedData: R[];
|
|
45
|
+
isProcessing: boolean;
|
|
46
|
+
progress: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Enhanced progressive loading with smart caching
|
|
50
|
+
*/
|
|
51
|
+
export declare const useSmartProgressiveLoading: (config: Partial<ProgressiveLoadingConfig> & {
|
|
52
|
+
/** Cache expiry time in milliseconds */
|
|
53
|
+
cacheExpiry?: number;
|
|
54
|
+
/** Maximum cache size (number of chunks) */
|
|
55
|
+
maxCacheSize?: number;
|
|
56
|
+
}, renderedIndexes: OptimizedListParams | null) => ProgressiveLoadingState & {
|
|
57
|
+
/** Force load a specific range */
|
|
58
|
+
loadRange: (startIndex: number, endIndex: number) => Promise<void>;
|
|
59
|
+
/** Preload next chunks based on scroll direction */
|
|
60
|
+
preloadNext: (direction: "up" | "down") => Promise<void>;
|
|
61
|
+
/** Clear loaded data and reset */
|
|
62
|
+
reset: () => void;
|
|
63
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DependencyMap, DependentMap, DependencyMargins, ExpandedDependency, ExpandedDependent, MapTaskToCoordinates, TaskMapByLevel, RenderTask, TaskCoordinates } from "../types";
|
|
2
|
+
import type { OptimizedListParams } from "./use-optimized-list";
|
|
3
|
+
interface SpatialBounds {
|
|
4
|
+
minX: number;
|
|
5
|
+
maxX: number;
|
|
6
|
+
minY: number;
|
|
7
|
+
maxY: number;
|
|
8
|
+
}
|
|
9
|
+
interface SpatialNode {
|
|
10
|
+
taskId: string;
|
|
11
|
+
bounds: SpatialBounds;
|
|
12
|
+
dependencies: ExpandedDependency[];
|
|
13
|
+
dependents: ExpandedDependent[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Spatial hash map for efficient spatial queries
|
|
17
|
+
* Divides space into grid cells for O(1) spatial lookups
|
|
18
|
+
*/
|
|
19
|
+
declare class SpatialHashMap {
|
|
20
|
+
private cellSize;
|
|
21
|
+
private grid;
|
|
22
|
+
private taskNodes;
|
|
23
|
+
constructor(cellSize?: number);
|
|
24
|
+
private getBoundsFromCoordinates;
|
|
25
|
+
insert(taskId: string, coordinates: TaskCoordinates, dependencies?: ExpandedDependency[], dependents?: ExpandedDependent[]): void;
|
|
26
|
+
query(bounds: SpatialBounds): SpatialNode[];
|
|
27
|
+
private boundsIntersect;
|
|
28
|
+
getNode(taskId: string): SpatialNode | undefined;
|
|
29
|
+
clear(): void;
|
|
30
|
+
remove(taskId: string): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Hook for optimized dependency calculations using spatial indexing
|
|
34
|
+
*/
|
|
35
|
+
export declare const useSpatialDependencyMap: (tasks: readonly RenderTask[], visibleTasksMirror: Readonly<Record<string, true>>, tasksMap: TaskMapByLevel, mapTaskToCoordinates: MapTaskToCoordinates, fullRowHeight: number, isShowCriticalPath: boolean, renderedRowIndexes: OptimizedListParams | null, renderedColumnIndexes: OptimizedListParams | null) => [DependencyMap, DependentMap, DependencyMargins, SpatialHashMap];
|
|
36
|
+
/**
|
|
37
|
+
* Hook for querying dependencies in a specific spatial region
|
|
38
|
+
*/
|
|
39
|
+
export declare const useSpatialDependencyQuery: (spatialMap: SpatialHashMap, queryBounds: SpatialBounds) => SpatialNode[];
|
|
40
|
+
/**
|
|
41
|
+
* Hook for optimized dependency updates
|
|
42
|
+
* Only recalculates dependencies for tasks that actually changed
|
|
43
|
+
*/
|
|
44
|
+
export declare const useIncrementalDependencyUpdate: (spatialMap: SpatialHashMap, changedTaskIds: Set<string>, allTasks: readonly RenderTask[]) => (newTaskCoordinates: Map<string, TaskCoordinates>) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Utility function to create viewport bounds from rendered indexes
|
|
47
|
+
*/
|
|
48
|
+
export declare const createViewportBounds: (renderedRowIndexes: OptimizedListParams | null, renderedColumnIndexes: OptimizedListParams | null, fullRowHeight: number, columnWidth: number) => SpatialBounds | null;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { RenderTask, ViewMode, Distances, TaskCoordinates } from "../types";
|
|
2
|
+
export interface WorkerMessage {
|
|
3
|
+
id: string;
|
|
4
|
+
type: "calculate-coordinates" | "process-dependencies" | "sort-tasks" | "filter-tasks";
|
|
5
|
+
data: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface WorkerResponse {
|
|
8
|
+
id: string;
|
|
9
|
+
type: string;
|
|
10
|
+
result?: unknown;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CoordinateCalculationData {
|
|
14
|
+
tasks: RenderTask[];
|
|
15
|
+
startDate: number;
|
|
16
|
+
viewMode: ViewMode;
|
|
17
|
+
rtl: boolean;
|
|
18
|
+
fullRowHeight: number;
|
|
19
|
+
taskHeight: number;
|
|
20
|
+
taskYOffset: number;
|
|
21
|
+
distances: Distances;
|
|
22
|
+
svgWidth: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Hook for managing Web Worker communications for heavy calculations
|
|
26
|
+
*/
|
|
27
|
+
export declare const useGanttWebWorker: () => {
|
|
28
|
+
isWorkerAvailable: boolean;
|
|
29
|
+
sendMessage: (message: Omit<WorkerMessage, "id">, timeoutMs?: number) => Promise<unknown>;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Hook for calculating task coordinates using Web Worker
|
|
33
|
+
*/
|
|
34
|
+
export declare const useWorkerCoordinateCalculation: (tasks: readonly RenderTask[], startDate: Date, viewMode: ViewMode, rtl: boolean, fullRowHeight: number, taskHeight: number, taskYOffset: number, distances: Distances, svgWidth: number) => {
|
|
35
|
+
coordinates: Map<string, TaskCoordinates>;
|
|
36
|
+
isCalculating: boolean;
|
|
37
|
+
recalculate: () => Promise<Map<string, TaskCoordinates>>;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Hook for sorting tasks using Web Worker
|
|
41
|
+
*/
|
|
42
|
+
export declare const useWorkerTaskSorting: () => {
|
|
43
|
+
sortTasks: (tasks: RenderTask[]) => Promise<RenderTask[]>;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Hook for filtering tasks using Web Worker
|
|
47
|
+
*/
|
|
48
|
+
export declare const useWorkerTaskFiltering: () => {
|
|
49
|
+
filterTasks: (tasks: RenderTask[], filterFn: string) => Promise<RenderTask[]>;
|
|
50
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gantt-task-react-v",
|
|
3
|
-
"version": "1.2
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "Interactive Gantt Chart for React with TypeScript.",
|
|
5
5
|
"author": "aguilanbon",
|
|
6
6
|
"homepage": "https://github.com/aguilanbon/gantt-task-react-v",
|
|
@@ -43,8 +43,9 @@
|
|
|
43
43
|
"@floating-ui/dom": "1.6.3",
|
|
44
44
|
"@floating-ui/react": "0.26.11",
|
|
45
45
|
"date-fns": "3.6.0",
|
|
46
|
-
"i18next": "^
|
|
47
|
-
"react-i18next": "^15.
|
|
46
|
+
"i18next": "^25.5.2",
|
|
47
|
+
"react-i18next": "^15.7.3",
|
|
48
|
+
"react-window": "^2.1.1"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
50
51
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
|
|
@@ -61,11 +62,11 @@
|
|
|
61
62
|
"@storybook/addon-onboarding": "8.2.10",
|
|
62
63
|
"@storybook/blocks": "8.2.10",
|
|
63
64
|
"@storybook/cli": "8.2.10",
|
|
65
|
+
"@storybook/core-server": "8.2.10",
|
|
66
|
+
"@storybook/jest": "0.2.3",
|
|
64
67
|
"@storybook/react": "8.2.10",
|
|
65
68
|
"@storybook/react-vite": "8.2.10",
|
|
66
69
|
"@storybook/test": "8.2.10",
|
|
67
|
-
"@storybook/core-server": "8.2.10",
|
|
68
|
-
"@storybook/jest": "0.2.3",
|
|
69
70
|
"@storybook/test-runner": "0.23.0",
|
|
70
71
|
"@storybook/testing-library": "^0.2.2",
|
|
71
72
|
"@testing-library/jest-dom": "^6.4.2",
|
|
@@ -75,6 +76,7 @@
|
|
|
75
76
|
"@types/node": "^20.12.4",
|
|
76
77
|
"@types/react": "^18.2.74",
|
|
77
78
|
"@types/react-dom": "^18.2.24",
|
|
79
|
+
"@types/react-window": "^1.8.8",
|
|
78
80
|
"@typescript-eslint/eslint-plugin": "^7.5.0",
|
|
79
81
|
"@typescript-eslint/parser": "^7.5.0",
|
|
80
82
|
"@vitejs/plugin-react": "4.2.1",
|