@choice-ui/react 1.9.3 → 1.9.6

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 (29) hide show
  1. package/dist/components/button/src/tv.js +7 -0
  2. package/dist/components/command/dist/index.d.ts +13 -0
  3. package/dist/components/command/src/command.js +2 -0
  4. package/dist/components/command/src/components/command-item.d.ts +4 -0
  5. package/dist/components/command/src/components/command-item.js +6 -0
  6. package/dist/components/command/src/components/command-list.d.ts +3 -0
  7. package/dist/components/command/src/components/command-list.js +5 -1
  8. package/dist/components/command/src/context/create-command-context.d.ts +1 -0
  9. package/dist/components/command/src/context/create-command-context.js +2 -0
  10. package/dist/components/command/src/tv.js +1 -1
  11. package/dist/components/command/src/types.d.ts +6 -0
  12. package/dist/components/scroll-area/dist/index.d.ts +4 -27
  13. package/dist/components/scroll-area/dist/index.js +96 -123
  14. package/dist/components/scroll-area/src/components/scroll-area-content.js +2 -2
  15. package/dist/components/scroll-area/src/components/scroll-area-root.js +9 -12
  16. package/dist/components/scroll-area/src/components/scroll-area-scrollbar.js +14 -4
  17. package/dist/components/scroll-area/src/components/scroll-area-viewport.js +2 -2
  18. package/dist/components/scroll-area/src/context/scroll-area-context.d.ts +17 -2
  19. package/dist/components/scroll-area/src/context/scroll-area-context.js +23 -6
  20. package/dist/components/scroll-area/src/hooks/index.d.ts +0 -1
  21. package/dist/components/scroll-area/src/hooks/use-scroll-state-and-visibility.d.ts +2 -2
  22. package/dist/components/scroll-area/src/hooks/use-scroll-state-and-visibility.js +30 -75
  23. package/dist/components/scroll-area/src/hooks/use-thumb.d.ts +1 -1
  24. package/dist/components/scroll-area/src/hooks/use-thumb.js +25 -28
  25. package/dist/components/scroll-area/src/types.d.ts +16 -4
  26. package/dist/index.js +0 -2
  27. package/package.json +1 -1
  28. package/dist/components/scroll-area/src/hooks/use-scroll-performance-monitor.d.ts +0 -23
  29. package/dist/components/scroll-area/src/hooks/use-scroll-performance-monitor.js +0 -123
@@ -1,123 +0,0 @@
1
- import { useState, useRef, useEffect } from "react";
2
- function useScrollPerformanceMonitor(viewport, options = {}) {
3
- const {
4
- enabled = false,
5
- // Default disabled, only enabled in development
6
- logInterval = 5e3,
7
- // Report every 5 seconds
8
- frameTimeThreshold = 16.67
9
- // 60fps threshold
10
- } = options;
11
- const [metrics, setMetrics] = useState({
12
- averageFrameTime: 0,
13
- maxFrameTime: 0,
14
- droppedFrames: 0,
15
- scrollEventFrequency: 0,
16
- updateFrequency: 0
17
- });
18
- const countersRef = useRef({
19
- frameCount: 0,
20
- totalFrameTime: 0,
21
- scrollEventCount: 0,
22
- updateCount: 0,
23
- lastReportTime: 0,
24
- maxFrameTime: 0,
25
- droppedFrames: 0
26
- });
27
- const lastFrameTimeRef = useRef(0);
28
- const reportIntervalRef = useRef();
29
- const updateIntervalRef = useRef();
30
- useEffect(() => {
31
- if (!enabled || !viewport) return;
32
- const startTime = performance.now();
33
- countersRef.current.lastReportTime = startTime;
34
- const handleScroll = () => {
35
- countersRef.current.scrollEventCount++;
36
- };
37
- const monitorFrame = () => {
38
- const now = performance.now();
39
- if (lastFrameTimeRef.current > 0) {
40
- const frameTime = now - lastFrameTimeRef.current;
41
- countersRef.current.totalFrameTime += frameTime;
42
- countersRef.current.frameCount++;
43
- if (frameTime > countersRef.current.maxFrameTime) {
44
- countersRef.current.maxFrameTime = frameTime;
45
- }
46
- if (frameTime > frameTimeThreshold) {
47
- countersRef.current.droppedFrames++;
48
- }
49
- }
50
- lastFrameTimeRef.current = now;
51
- countersRef.current.updateCount++;
52
- requestAnimationFrame(monitorFrame);
53
- };
54
- viewport.addEventListener("scroll", handleScroll, { passive: true });
55
- requestAnimationFrame(monitorFrame);
56
- updateIntervalRef.current = window.setInterval(() => {
57
- const now = performance.now();
58
- const timeElapsed = Math.max(1, now - (countersRef.current.lastReportTime || startTime));
59
- const currentMetrics = {
60
- averageFrameTime: countersRef.current.frameCount > 0 ? countersRef.current.totalFrameTime / countersRef.current.frameCount : 0,
61
- maxFrameTime: countersRef.current.maxFrameTime,
62
- droppedFrames: countersRef.current.droppedFrames,
63
- scrollEventFrequency: countersRef.current.scrollEventCount / timeElapsed * 1e3,
64
- updateFrequency: countersRef.current.updateCount / timeElapsed * 1e3
65
- };
66
- setMetrics(currentMetrics);
67
- }, 500);
68
- reportIntervalRef.current = window.setInterval(() => {
69
- const now = performance.now();
70
- const timeElapsed = now - countersRef.current.lastReportTime;
71
- const reportMetrics = {
72
- averageFrameTime: countersRef.current.frameCount > 0 ? countersRef.current.totalFrameTime / countersRef.current.frameCount : 0,
73
- maxFrameTime: countersRef.current.maxFrameTime,
74
- droppedFrames: countersRef.current.droppedFrames,
75
- scrollEventFrequency: countersRef.current.scrollEventCount / timeElapsed * 1e3,
76
- updateFrequency: countersRef.current.updateCount / timeElapsed * 1e3
77
- };
78
- console.group("🔍 ScrollArea Performance Report");
79
- console.log("📊 Frame Performance:");
80
- console.log(` • Average frame time: ${reportMetrics.averageFrameTime.toFixed(2)}ms`);
81
- console.log(` • Max frame time: ${reportMetrics.maxFrameTime.toFixed(2)}ms`);
82
- console.log(` • Dropped frames: ${reportMetrics.droppedFrames}`);
83
- console.log(` • Current FPS: ${(1e3 / reportMetrics.averageFrameTime).toFixed(1)}`);
84
- console.log("⚡ Event Frequency:");
85
- console.log(` • Scroll events/sec: ${reportMetrics.scrollEventFrequency.toFixed(1)}`);
86
- console.log(` • Updates/sec: ${reportMetrics.updateFrequency.toFixed(1)}`);
87
- if (reportMetrics.averageFrameTime > frameTimeThreshold) {
88
- console.warn("⚠️ Performance Warning: Average frame time exceeds 60fps threshold");
89
- }
90
- if (reportMetrics.droppedFrames > 10) {
91
- console.warn("⚠️ Performance Warning: High number of dropped frames detected");
92
- }
93
- if (reportMetrics.scrollEventFrequency > 200) {
94
- console.warn(
95
- "⚠️ Performance Warning: Very high scroll event frequency, consider throttling"
96
- );
97
- }
98
- console.groupEnd();
99
- countersRef.current = {
100
- frameCount: 0,
101
- totalFrameTime: 0,
102
- scrollEventCount: 0,
103
- updateCount: 0,
104
- lastReportTime: now,
105
- maxFrameTime: 0,
106
- droppedFrames: 0
107
- };
108
- }, logInterval);
109
- return () => {
110
- viewport.removeEventListener("scroll", handleScroll);
111
- if (reportIntervalRef.current) {
112
- clearInterval(reportIntervalRef.current);
113
- }
114
- if (updateIntervalRef.current) {
115
- clearInterval(updateIntervalRef.current);
116
- }
117
- };
118
- }, [enabled, viewport, logInterval, frameTimeThreshold]);
119
- return enabled ? metrics : null;
120
- }
121
- export {
122
- useScrollPerformanceMonitor
123
- };