@djangocfg/ui-nextjs 2.1.89 → 2.1.91

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 (161) hide show
  1. package/README.md +6 -15
  2. package/package.json +6 -25
  3. package/src/blocks/SplitHero/SplitHeroMedia.tsx +1 -1
  4. package/src/components/index.ts +0 -40
  5. package/src/hooks/index.ts +0 -6
  6. package/src/index.ts +2 -11
  7. package/src/components/button-download.tsx +0 -277
  8. package/src/components/markdown/MarkdownMessage.tsx +0 -340
  9. package/src/components/markdown/index.ts +0 -5
  10. package/src/components/menubar.tsx +0 -275
  11. package/src/components/multi-select-pro/async.tsx +0 -598
  12. package/src/components/multi-select-pro/helpers.tsx +0 -84
  13. package/src/components/multi-select-pro/index.tsx +0 -612
  14. package/src/components/navigation-menu.tsx +0 -154
  15. package/src/components/otp/index.tsx +0 -197
  16. package/src/components/otp/types.ts +0 -133
  17. package/src/components/otp/use-otp-input.ts +0 -225
  18. package/src/components/phone-input.tsx +0 -277
  19. package/src/components/sonner.tsx +0 -32
  20. package/src/hooks/useLocalStorage.ts +0 -300
  21. package/src/hooks/useSessionStorage.ts +0 -290
  22. package/src/lib/index.ts +0 -5
  23. package/src/lib/logger/index.ts +0 -10
  24. package/src/lib/logger/logStore.ts +0 -122
  25. package/src/lib/logger/logger.ts +0 -175
  26. package/src/lib/logger/types.ts +0 -82
  27. package/src/stores/index.ts +0 -8
  28. package/src/stores/mediaCache.ts +0 -534
  29. package/src/tools/AudioPlayer/README.md +0 -206
  30. package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +0 -216
  31. package/src/tools/AudioPlayer/components/HybridSimplePlayer.tsx +0 -280
  32. package/src/tools/AudioPlayer/components/HybridWaveform.tsx +0 -279
  33. package/src/tools/AudioPlayer/components/ReactiveCover/AudioReactiveCover.tsx +0 -149
  34. package/src/tools/AudioPlayer/components/ReactiveCover/effects/GlowEffect.tsx +0 -110
  35. package/src/tools/AudioPlayer/components/ReactiveCover/effects/MeshEffect.tsx +0 -58
  36. package/src/tools/AudioPlayer/components/ReactiveCover/effects/OrbsEffect.tsx +0 -45
  37. package/src/tools/AudioPlayer/components/ReactiveCover/effects/SpotlightEffect.tsx +0 -82
  38. package/src/tools/AudioPlayer/components/ReactiveCover/effects/index.ts +0 -8
  39. package/src/tools/AudioPlayer/components/ReactiveCover/index.ts +0 -6
  40. package/src/tools/AudioPlayer/components/index.ts +0 -22
  41. package/src/tools/AudioPlayer/context/HybridAudioProvider.tsx +0 -158
  42. package/src/tools/AudioPlayer/context/index.ts +0 -16
  43. package/src/tools/AudioPlayer/effects/index.ts +0 -412
  44. package/src/tools/AudioPlayer/hooks/index.ts +0 -35
  45. package/src/tools/AudioPlayer/hooks/useHybridAudio.ts +0 -387
  46. package/src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts +0 -95
  47. package/src/tools/AudioPlayer/hooks/useVisualization.tsx +0 -207
  48. package/src/tools/AudioPlayer/index.ts +0 -133
  49. package/src/tools/AudioPlayer/types/effects.ts +0 -73
  50. package/src/tools/AudioPlayer/types/index.ts +0 -27
  51. package/src/tools/AudioPlayer/utils/debug.ts +0 -14
  52. package/src/tools/AudioPlayer/utils/formatTime.ts +0 -10
  53. package/src/tools/AudioPlayer/utils/index.ts +0 -6
  54. package/src/tools/ImageViewer/@refactoring/00-PLAN.md +0 -71
  55. package/src/tools/ImageViewer/@refactoring/01-TYPES.md +0 -121
  56. package/src/tools/ImageViewer/@refactoring/02-UTILS.md +0 -143
  57. package/src/tools/ImageViewer/@refactoring/03-HOOKS.md +0 -261
  58. package/src/tools/ImageViewer/@refactoring/04-COMPONENTS.md +0 -427
  59. package/src/tools/ImageViewer/@refactoring/05-EXECUTION-CHECKLIST.md +0 -126
  60. package/src/tools/ImageViewer/README.md +0 -200
  61. package/src/tools/ImageViewer/components/ImageInfo.tsx +0 -44
  62. package/src/tools/ImageViewer/components/ImageToolbar.tsx +0 -150
  63. package/src/tools/ImageViewer/components/ImageViewer.tsx +0 -241
  64. package/src/tools/ImageViewer/components/index.ts +0 -7
  65. package/src/tools/ImageViewer/hooks/index.ts +0 -9
  66. package/src/tools/ImageViewer/hooks/useImageLoading.ts +0 -204
  67. package/src/tools/ImageViewer/hooks/useImageTransform.ts +0 -101
  68. package/src/tools/ImageViewer/index.ts +0 -60
  69. package/src/tools/ImageViewer/types.ts +0 -81
  70. package/src/tools/ImageViewer/utils/constants.ts +0 -59
  71. package/src/tools/ImageViewer/utils/debug.ts +0 -14
  72. package/src/tools/ImageViewer/utils/index.ts +0 -17
  73. package/src/tools/ImageViewer/utils/lqip.ts +0 -47
  74. package/src/tools/JsonForm/JsonSchemaForm.tsx +0 -197
  75. package/src/tools/JsonForm/examples/BotConfigExample.tsx +0 -249
  76. package/src/tools/JsonForm/examples/RealBotConfigExample.tsx +0 -161
  77. package/src/tools/JsonForm/index.ts +0 -46
  78. package/src/tools/JsonForm/templates/ArrayFieldItemTemplate.tsx +0 -47
  79. package/src/tools/JsonForm/templates/ArrayFieldTemplate.tsx +0 -74
  80. package/src/tools/JsonForm/templates/BaseInputTemplate.tsx +0 -107
  81. package/src/tools/JsonForm/templates/ErrorListTemplate.tsx +0 -35
  82. package/src/tools/JsonForm/templates/FieldTemplate.tsx +0 -62
  83. package/src/tools/JsonForm/templates/ObjectFieldTemplate.tsx +0 -116
  84. package/src/tools/JsonForm/templates/index.ts +0 -12
  85. package/src/tools/JsonForm/types.ts +0 -83
  86. package/src/tools/JsonForm/utils.ts +0 -213
  87. package/src/tools/JsonForm/widgets/CheckboxWidget.tsx +0 -37
  88. package/src/tools/JsonForm/widgets/ColorWidget.tsx +0 -219
  89. package/src/tools/JsonForm/widgets/NumberWidget.tsx +0 -89
  90. package/src/tools/JsonForm/widgets/SelectWidget.tsx +0 -97
  91. package/src/tools/JsonForm/widgets/SliderWidget.tsx +0 -148
  92. package/src/tools/JsonForm/widgets/SwitchWidget.tsx +0 -35
  93. package/src/tools/JsonForm/widgets/TextWidget.tsx +0 -96
  94. package/src/tools/JsonForm/widgets/index.ts +0 -14
  95. package/src/tools/JsonTree/index.tsx +0 -243
  96. package/src/tools/LottiePlayer/LottiePlayer.client.tsx +0 -213
  97. package/src/tools/LottiePlayer/index.tsx +0 -55
  98. package/src/tools/LottiePlayer/types.ts +0 -108
  99. package/src/tools/LottiePlayer/useLottie.ts +0 -164
  100. package/src/tools/Mermaid/Mermaid.client.tsx +0 -82
  101. package/src/tools/Mermaid/components/MermaidCodeViewer.tsx +0 -95
  102. package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +0 -103
  103. package/src/tools/Mermaid/hooks/index.ts +0 -4
  104. package/src/tools/Mermaid/hooks/useMermaidCleanup.ts +0 -73
  105. package/src/tools/Mermaid/hooks/useMermaidFullscreen.ts +0 -46
  106. package/src/tools/Mermaid/hooks/useMermaidRenderer.ts +0 -226
  107. package/src/tools/Mermaid/hooks/useMermaidValidation.ts +0 -29
  108. package/src/tools/Mermaid/index.tsx +0 -41
  109. package/src/tools/Mermaid/utils/mermaid-helpers.ts +0 -33
  110. package/src/tools/OpenapiViewer/components/EndpointInfo.tsx +0 -149
  111. package/src/tools/OpenapiViewer/components/EndpointsLibrary.tsx +0 -263
  112. package/src/tools/OpenapiViewer/components/PlaygroundLayout.tsx +0 -125
  113. package/src/tools/OpenapiViewer/components/PlaygroundStepper.tsx +0 -100
  114. package/src/tools/OpenapiViewer/components/RequestBuilder.tsx +0 -157
  115. package/src/tools/OpenapiViewer/components/RequestParametersForm.tsx +0 -253
  116. package/src/tools/OpenapiViewer/components/ResponseViewer.tsx +0 -173
  117. package/src/tools/OpenapiViewer/components/VersionSelector.tsx +0 -68
  118. package/src/tools/OpenapiViewer/components/index.ts +0 -14
  119. package/src/tools/OpenapiViewer/constants.ts +0 -39
  120. package/src/tools/OpenapiViewer/context/PlaygroundContext.tsx +0 -337
  121. package/src/tools/OpenapiViewer/hooks/index.ts +0 -8
  122. package/src/tools/OpenapiViewer/hooks/useMobile.ts +0 -10
  123. package/src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts +0 -199
  124. package/src/tools/OpenapiViewer/index.tsx +0 -38
  125. package/src/tools/OpenapiViewer/types.ts +0 -151
  126. package/src/tools/OpenapiViewer/utils/apiKeyManager.ts +0 -149
  127. package/src/tools/OpenapiViewer/utils/formatters.ts +0 -71
  128. package/src/tools/OpenapiViewer/utils/index.ts +0 -9
  129. package/src/tools/OpenapiViewer/utils/versionManager.ts +0 -161
  130. package/src/tools/PrettyCode/PrettyCode.client.tsx +0 -208
  131. package/src/tools/PrettyCode/index.tsx +0 -45
  132. package/src/tools/VideoPlayer/@refactoring/00-PLAN.md +0 -91
  133. package/src/tools/VideoPlayer/@refactoring/01-TYPES.md +0 -284
  134. package/src/tools/VideoPlayer/@refactoring/02-UTILS.md +0 -141
  135. package/src/tools/VideoPlayer/@refactoring/03-HOOKS.md +0 -178
  136. package/src/tools/VideoPlayer/@refactoring/04-COMPONENTS.md +0 -95
  137. package/src/tools/VideoPlayer/@refactoring/05-EXECUTION-CHECKLIST.md +0 -139
  138. package/src/tools/VideoPlayer/README.md +0 -264
  139. package/src/tools/VideoPlayer/components/VideoControls.tsx +0 -138
  140. package/src/tools/VideoPlayer/components/VideoErrorFallback.tsx +0 -174
  141. package/src/tools/VideoPlayer/components/VideoPlayer.tsx +0 -201
  142. package/src/tools/VideoPlayer/components/index.ts +0 -14
  143. package/src/tools/VideoPlayer/context/VideoPlayerContext.tsx +0 -52
  144. package/src/tools/VideoPlayer/context/index.ts +0 -8
  145. package/src/tools/VideoPlayer/hooks/index.ts +0 -12
  146. package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +0 -70
  147. package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +0 -116
  148. package/src/tools/VideoPlayer/index.ts +0 -77
  149. package/src/tools/VideoPlayer/providers/NativeProvider.tsx +0 -284
  150. package/src/tools/VideoPlayer/providers/StreamProvider.tsx +0 -505
  151. package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +0 -400
  152. package/src/tools/VideoPlayer/providers/index.ts +0 -8
  153. package/src/tools/VideoPlayer/types/index.ts +0 -38
  154. package/src/tools/VideoPlayer/types/player.ts +0 -116
  155. package/src/tools/VideoPlayer/types/provider.ts +0 -93
  156. package/src/tools/VideoPlayer/types/sources.ts +0 -97
  157. package/src/tools/VideoPlayer/utils/debug.ts +0 -14
  158. package/src/tools/VideoPlayer/utils/fileSource.ts +0 -78
  159. package/src/tools/VideoPlayer/utils/index.ts +0 -12
  160. package/src/tools/VideoPlayer/utils/resolvers.ts +0 -75
  161. package/src/tools/index.ts +0 -170
@@ -1,284 +0,0 @@
1
- /**
2
- * NativeProvider - Lightweight native HTML5 video player
3
- * For demo videos, background videos, autoplay loop muted scenarios
4
- */
5
-
6
- 'use client';
7
-
8
- import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
9
-
10
- import { cn } from '@djangocfg/ui-core/lib';
11
- import { Preloader, AspectRatio } from '@djangocfg/ui-core';
12
- import { useVideoPlayerSettings } from '../hooks/useVideoPlayerSettings';
13
-
14
- import type { NativeProviderProps, VideoPlayerRef } from '../types';
15
- import { videoDebug } from '../utils/debug';
16
-
17
- /**
18
- * Get video URL from source
19
- */
20
- function getVideoUrl(source: NativeProviderProps['source']): string {
21
- switch (source.type) {
22
- case 'url':
23
- return source.url;
24
- case 'data-url':
25
- return source.data;
26
- default:
27
- return '';
28
- }
29
- }
30
-
31
- export const NativeProvider = forwardRef<VideoPlayerRef, NativeProviderProps>(
32
- (
33
- {
34
- source,
35
- aspectRatio = 16 / 9,
36
- autoPlay = true,
37
- muted = true,
38
- loop = true,
39
- playsInline = true,
40
- preload = 'auto',
41
- controls = false,
42
- disableContextMenu = true,
43
- showPreloader = true,
44
- preloaderTimeout = 5000,
45
- className,
46
- videoClassName,
47
- onPlay,
48
- onPause,
49
- onEnded,
50
- onError,
51
- onLoadStart,
52
- onCanPlay,
53
- onTimeUpdate,
54
- },
55
- ref
56
- ) => {
57
- const [isLoading, setIsLoading] = useState(showPreloader);
58
- const videoRef = useRef<HTMLVideoElement>(null);
59
-
60
- // Persisted player settings
61
- const { settings: savedSettings, updateVolume } = useVideoPlayerSettings();
62
-
63
- const videoUrl = getVideoUrl(source);
64
-
65
- // Debug: Log video source
66
- useEffect(() => {
67
- videoDebug.load(videoUrl, source.type);
68
- }, [videoUrl, source.type]);
69
-
70
- // Expose video element methods via ref
71
- useImperativeHandle(
72
- ref,
73
- () => ({
74
- play: () => videoRef.current?.play(),
75
- pause: () => videoRef.current?.pause(),
76
- togglePlay: () => {
77
- const video = videoRef.current;
78
- if (video) {
79
- video.paused ? video.play() : video.pause();
80
- }
81
- },
82
- seekTo: (time: number) => {
83
- if (videoRef.current) videoRef.current.currentTime = time;
84
- },
85
- setVolume: (volume: number) => {
86
- if (videoRef.current) videoRef.current.volume = Math.max(0, Math.min(1, volume));
87
- },
88
- toggleMute: () => {
89
- if (videoRef.current) videoRef.current.muted = !videoRef.current.muted;
90
- },
91
- enterFullscreen: () => videoRef.current?.requestFullscreen(),
92
- exitFullscreen: () => document.exitFullscreen(),
93
- get currentTime() {
94
- return videoRef.current?.currentTime ?? 0;
95
- },
96
- get duration() {
97
- return videoRef.current?.duration ?? 0;
98
- },
99
- get paused() {
100
- return videoRef.current?.paused ?? true;
101
- },
102
- }),
103
- []
104
- );
105
-
106
- useEffect(() => {
107
- if (!showPreloader) return;
108
-
109
- const video = videoRef.current;
110
- if (!video) return;
111
-
112
- // Check if video is already loaded
113
- if (video.readyState >= 3) {
114
- setIsLoading(false);
115
- return;
116
- }
117
-
118
- const hideLoader = () => setIsLoading(false);
119
-
120
- video.addEventListener('canplay', hideLoader);
121
- video.addEventListener('loadeddata', hideLoader);
122
- video.addEventListener('playing', hideLoader);
123
-
124
- // Fallback: hide loader after timeout
125
- const timeout = setTimeout(hideLoader, preloaderTimeout);
126
-
127
- return () => {
128
- video.removeEventListener('canplay', hideLoader);
129
- video.removeEventListener('loadeddata', hideLoader);
130
- video.removeEventListener('playing', hideLoader);
131
- clearTimeout(timeout);
132
- };
133
- }, [showPreloader, preloaderTimeout]);
134
-
135
- // Debug: Log video events
136
- useEffect(() => {
137
- const video = videoRef.current;
138
- if (!video) return;
139
-
140
- const handleLoadedMetadata = () => {
141
- videoDebug.state('loadedmetadata', { duration: video.duration });
142
- };
143
-
144
- const handleCanPlayDebug = () => {
145
- videoDebug.state('canplay', { duration: video.duration, buffered: video.buffered.length });
146
- videoDebug.buffer(video.buffered, video.duration);
147
- // Apply saved volume
148
- video.volume = savedSettings.volume;
149
- };
150
-
151
- const handleSeeking = () => {
152
- videoDebug.event('seeking', { currentTime: video.currentTime });
153
- };
154
-
155
- const handleSeeked = () => {
156
- videoDebug.event('seeked', { currentTime: video.currentTime });
157
- videoDebug.buffer(video.buffered, video.duration);
158
- };
159
-
160
- const handleWaiting = () => {
161
- videoDebug.warn('WAITING - buffering...');
162
- videoDebug.buffer(video.buffered, video.duration);
163
- };
164
-
165
- const handleStalled = () => {
166
- videoDebug.warn('STALLED - network issue');
167
- videoDebug.buffer(video.buffered, video.duration);
168
- };
169
-
170
- video.addEventListener('loadedmetadata', handleLoadedMetadata);
171
- video.addEventListener('canplay', handleCanPlayDebug);
172
- video.addEventListener('seeking', handleSeeking);
173
- video.addEventListener('seeked', handleSeeked);
174
- video.addEventListener('waiting', handleWaiting);
175
- video.addEventListener('stalled', handleStalled);
176
-
177
- return () => {
178
- video.removeEventListener('loadedmetadata', handleLoadedMetadata);
179
- video.removeEventListener('canplay', handleCanPlayDebug);
180
- video.removeEventListener('seeking', handleSeeking);
181
- video.removeEventListener('seeked', handleSeeked);
182
- video.removeEventListener('waiting', handleWaiting);
183
- video.removeEventListener('stalled', handleStalled);
184
- };
185
- }, [savedSettings.volume]);
186
-
187
- // Persist volume when user changes it via native controls
188
- useEffect(() => {
189
- const video = videoRef.current;
190
- if (!video) return;
191
-
192
- const handleVolumeChange = () => {
193
- updateVolume(video.volume);
194
- };
195
-
196
- video.addEventListener('volumechange', handleVolumeChange);
197
- return () => video.removeEventListener('volumechange', handleVolumeChange);
198
- }, [updateVolume]);
199
-
200
- const handleContextMenu = (e: React.MouseEvent) => {
201
- if (disableContextMenu) {
202
- e.preventDefault();
203
- }
204
- };
205
-
206
- const handleError = (e: React.SyntheticEvent<HTMLVideoElement>) => {
207
- const video = e.currentTarget;
208
- const errorMsg = video.error?.message || 'Video playback error';
209
- videoDebug.error('Video error', { code: video.error?.code, message: errorMsg });
210
- setIsLoading(false);
211
- onError?.(errorMsg);
212
- };
213
-
214
- const handleTimeUpdate = () => {
215
- const video = videoRef.current;
216
- if (video && onTimeUpdate) {
217
- onTimeUpdate(video.currentTime, video.duration);
218
- }
219
- };
220
-
221
- // Determine if we should use AspectRatio wrapper or fill mode
222
- const isFillMode = aspectRatio === 'fill';
223
- const computedAspectRatio = aspectRatio === 'auto' || aspectRatio === 'fill' ? undefined : aspectRatio;
224
-
225
- // Video content
226
- const videoContent = (
227
- <>
228
- {/* Preloader */}
229
- {showPreloader && isLoading && (
230
- <div
231
- className={cn(
232
- 'absolute inset-0 flex items-center justify-center bg-muted/30 backdrop-blur-sm z-10'
233
- )}
234
- >
235
- <Preloader size="lg" spinnerClassName="text-white" />
236
- </div>
237
- )}
238
-
239
- {/* Video */}
240
- <video
241
- ref={videoRef}
242
- className={cn('w-full h-full object-cover', videoClassName)}
243
- src={videoUrl}
244
- autoPlay={autoPlay}
245
- muted={muted}
246
- loop={loop}
247
- playsInline={playsInline}
248
- preload={preload}
249
- controls={controls}
250
- poster={source.poster}
251
- onContextMenu={handleContextMenu}
252
- onLoadStart={onLoadStart}
253
- onCanPlay={onCanPlay}
254
- onPlay={onPlay}
255
- onPause={onPause}
256
- onPlaying={() => setIsLoading(false)}
257
- onEnded={onEnded}
258
- onError={handleError}
259
- onTimeUpdate={handleTimeUpdate}
260
- />
261
- </>
262
- );
263
-
264
- // Fill mode - no AspectRatio wrapper
265
- if (isFillMode) {
266
- return (
267
- <div className={cn('relative w-full h-full overflow-hidden', className)}>
268
- {videoContent}
269
- </div>
270
- );
271
- }
272
-
273
- // Normal mode with AspectRatio
274
- return (
275
- <div className={cn('relative overflow-hidden', className)}>
276
- <AspectRatio ratio={computedAspectRatio}>
277
- {videoContent}
278
- </AspectRatio>
279
- </div>
280
- );
281
- }
282
- );
283
-
284
- NativeProvider.displayName = 'NativeProvider';