@djangocfg/ui-tools 2.1.232 → 2.1.234

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 (30) hide show
  1. package/README.md +6 -0
  2. package/dist/JsonSchemaForm-IIYKSH6X.cjs +13 -0
  3. package/dist/{JsonSchemaForm-GZBFMEKR.cjs.map → JsonSchemaForm-IIYKSH6X.cjs.map} +1 -1
  4. package/dist/JsonSchemaForm-RN3XWSWX.mjs +4 -0
  5. package/dist/{JsonSchemaForm-ZTRWXMEF.mjs.map → JsonSchemaForm-RN3XWSWX.mjs.map} +1 -1
  6. package/dist/{chunk-QKG4LERV.mjs → chunk-2QY3LJR6.mjs} +4 -6
  7. package/dist/chunk-2QY3LJR6.mjs.map +1 -0
  8. package/dist/{chunk-46VDB3BJ.cjs → chunk-CXVGN6ZW.cjs} +3 -5
  9. package/dist/chunk-CXVGN6ZW.cjs.map +1 -0
  10. package/dist/{chunk-TKB5BDPN.mjs → chunk-JUGQNNDC.mjs} +11 -11
  11. package/dist/chunk-JUGQNNDC.mjs.map +1 -0
  12. package/dist/{chunk-UYBYZXVD.cjs → chunk-L37FZYJU.cjs} +11 -11
  13. package/dist/chunk-L37FZYJU.cjs.map +1 -0
  14. package/dist/{components-AALNUI3D.cjs → components-3RTH76CV.cjs} +7 -7
  15. package/dist/{components-AALNUI3D.cjs.map → components-3RTH76CV.cjs.map} +1 -1
  16. package/dist/{components-JOYIAXID.mjs → components-OTK43IMD.mjs} +3 -3
  17. package/dist/{components-JOYIAXID.mjs.map → components-OTK43IMD.mjs.map} +1 -1
  18. package/dist/index.cjs +39 -39
  19. package/dist/index.mjs +4 -4
  20. package/package.json +6 -6
  21. package/src/tools/JsonForm/JsonSchemaForm.tsx +6 -5
  22. package/src/tools/JsonForm/utils.ts +4 -3
  23. package/src/tools/Uploader/README.md +46 -0
  24. package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +2 -5
  25. package/dist/JsonSchemaForm-GZBFMEKR.cjs +0 -13
  26. package/dist/JsonSchemaForm-ZTRWXMEF.mjs +0 -4
  27. package/dist/chunk-46VDB3BJ.cjs.map +0 -1
  28. package/dist/chunk-QKG4LERV.mjs.map +0 -1
  29. package/dist/chunk-TKB5BDPN.mjs.map +0 -1
  30. package/dist/chunk-UYBYZXVD.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/VideoPlayer/utils/debug.ts","../src/tools/VideoPlayer/providers/VidstackProvider.tsx","../src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts","../src/tools/VideoPlayer/providers/NativeProvider.tsx","../src/tools/VideoPlayer/providers/StreamProvider.tsx","../src/tools/VideoPlayer/context/VideoPlayerContext.tsx","../src/tools/VideoPlayer/utils/resolvers.ts","../src/tools/VideoPlayer/utils/fileSource.ts","../src/tools/VideoPlayer/components/VideoPlayer.tsx","../src/tools/VideoPlayer/components/VideoControls.tsx","../src/tools/VideoPlayer/components/VideoErrorFallback.tsx"],"names":["createMediaLogger","__name","jsxs","jsx","forwardRef","useRef","useState","useVideoCache","useMemo","useEffect","useCallback","useImperativeHandle","cn","MediaPlayer","MediaProvider","Poster","DefaultVideoLayout","defaultLayoutIcons","useVideoPlayerSettings","Fragment","Preloader","AspectRatio","DefaultErrorFallback","useMediaCacheStore","generateContentKey","createContext","useContext","useMediaStore","useMediaRemote","Play","Pause","VolumeX","Volume2","Minimize","Maximize","FileVideo","Button","RefreshCw","DownloadButton"],"mappings":"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","file":"chunk-CXVGN6ZW.cjs","sourcesContent":["'use client';\n\n/**\n * VideoPlayer Debug Logger\n *\n * Uses universal logger with media-specific helpers.\n * Logs go to both console (dev) and zustand store (for Console panel).\n */\n\nimport { createMediaLogger } from '@djangocfg/ui-core/lib';\n\nexport const videoDebug = createMediaLogger('VideoPlayer');\n\nexport default videoDebug;\n","/**\n * VidstackProvider - Full-featured video player using Vidstack\n * Supports YouTube, Vimeo, HLS, DASH, and direct URLs\n */\n\n'use client';\n\n// Import Vidstack base styles\nimport '@vidstack/react/player/styles/base.css';\nimport '@vidstack/react/player/styles/default/theme.css';\nimport '@vidstack/react/player/styles/default/layouts/video.css';\n\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { MediaPlayer, MediaProvider, Poster } from '@vidstack/react';\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\nimport { useVideoCache } from '../../../stores/mediaCache';\n\nimport type { MediaPlayerInstance, PlayerSrc } from '@vidstack/react';\nimport type { VidstackProviderProps, VideoPlayerRef, ErrorFallbackProps } from '../types';\nimport { videoDebug } from '../utils/debug';\n\n/**\n * Convert source to Vidstack-compatible format\n * Returns object with explicit type for HLS/DASH to ensure proper loader selection\n */\nfunction getVidstackSrc(source: VidstackProviderProps['source']): PlayerSrc {\n switch (source.type) {\n case 'youtube':\n return `youtube/${source.id}`;\n case 'vimeo':\n return `vimeo/${source.id}`;\n case 'hls':\n // Explicit type needed because URL may have query params that hide .m3u8 extension\n return { src: source.url, type: 'application/x-mpegurl' } as PlayerSrc;\n case 'dash':\n return { src: source.url, type: 'application/dash+xml' } as PlayerSrc;\n case 'url':\n return source.url;\n default:\n return '';\n }\n}\n\n/** Default error fallback UI */\nfunction DefaultErrorFallback({ error }: ErrorFallbackProps) {\n return (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-4 text-white bg-black\">\n <svg\n className=\"w-16 h-16 text-muted-foreground\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z\"\n />\n </svg>\n <p className=\"text-lg\">{error || 'Video cannot be played'}</p>\n </div>\n );\n}\n\nexport const VidstackProvider = forwardRef<VideoPlayerRef, VidstackProviderProps>(\n (\n {\n source,\n aspectRatio = 16 / 9,\n autoPlay = false,\n muted = false,\n loop = false,\n playsInline = true,\n controls = true,\n className,\n showInfo = false,\n theme = 'default',\n errorFallback,\n onPlay,\n onPause,\n onEnded,\n onError,\n onLoadStart,\n onCanPlay,\n onTimeUpdate,\n },\n ref\n ) => {\n const playerRef = useRef<MediaPlayerInstance | null>(null);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>('Video cannot be played');\n const lastSavedTimeRef = useRef<number>(0);\n const hasRestoredPositionRef = useRef(false);\n\n // Cache hooks\n const {\n getPosterUrl,\n cachePosterUrl,\n saveVideoPosition,\n getVideoPosition,\n } = useVideoCache();\n\n // Get source key for position caching\n const sourceKey = useMemo(() => {\n switch (source.type) {\n case 'youtube':\n return `youtube:${source.id}`;\n case 'vimeo':\n return `vimeo:${source.id}`;\n case 'hls':\n case 'dash':\n case 'url':\n return `url:${source.url}`;\n default:\n return null;\n }\n }, [source]);\n\n // Generate poster if not provided, with caching\n const posterUrl = useMemo(() => {\n if (source.poster) return source.poster;\n if (!source.title) return undefined;\n\n // Check cache first\n const cached = getPosterUrl(source.title);\n if (cached) return cached;\n\n return undefined;\n }, [source.poster, source.title, getPosterUrl, cachePosterUrl]);\n\n // Get Vidstack-compatible source URL\n const vidstackSrc = useMemo(() => getVidstackSrc(source), [source]);\n\n // Debug: Log video source\n useEffect(() => {\n const srcString = typeof vidstackSrc === 'string' ? vidstackSrc : (vidstackSrc as { src: string }).src;\n videoDebug.load(srcString, source.type);\n }, [vidstackSrc, source.type]);\n\n // Retry function\n const retry = useCallback(() => {\n setHasError(false);\n setErrorMessage('Video cannot be played');\n // Force reload by updating key would be needed, but for now just reset state\n const player = playerRef.current;\n if (player) {\n player.currentTime = 0;\n player.play();\n }\n }, []);\n\n // Expose player methods via ref\n useImperativeHandle(\n ref,\n () => {\n const player = playerRef.current;\n\n return {\n play: () => player?.play(),\n pause: () => player?.pause(),\n togglePlay: () => {\n if (player) {\n player.paused ? player.play() : player.pause();\n }\n },\n seekTo: (time: number) => {\n if (player) player.currentTime = time;\n },\n setVolume: (volume: number) => {\n if (player) player.volume = Math.max(0, Math.min(1, volume));\n },\n toggleMute: () => {\n if (player) player.muted = !player.muted;\n },\n enterFullscreen: () => player?.enterFullscreen(),\n exitFullscreen: () => player?.exitFullscreen(),\n get currentTime() {\n return player?.currentTime ?? 0;\n },\n get duration() {\n return player?.duration ?? 0;\n },\n get paused() {\n return player?.paused ?? true;\n },\n };\n },\n []\n );\n\n const handlePlay = () => onPlay?.();\n\n const handlePause = useCallback(() => {\n // Save position on pause\n const player = playerRef.current;\n if (sourceKey && player && player.currentTime > 0) {\n saveVideoPosition(sourceKey, player.currentTime);\n lastSavedTimeRef.current = player.currentTime;\n }\n onPause?.();\n }, [sourceKey, saveVideoPosition, onPause]);\n\n const handleEnded = () => onEnded?.();\n\n const handleError = (detail: unknown) => {\n const error = detail as { message?: string };\n const msg = error?.message || 'Video playback error';\n videoDebug.error('Vidstack error', { message: msg });\n setHasError(true);\n setErrorMessage(msg);\n onError?.(msg);\n };\n\n const handleLoadStart = () => onLoadStart?.();\n\n const handleCanPlay = useCallback(() => {\n const player = playerRef.current;\n if (player) {\n videoDebug.state('canplay', { duration: player.duration });\n // Log buffer state if media element is available\n const mediaEl = (player.provider as { media?: HTMLVideoElement } | null)?.media;\n if (mediaEl?.buffered) {\n videoDebug.buffer(mediaEl.buffered, player.duration);\n }\n }\n setHasError(false);\n\n // Restore position from cache (only once per source)\n if (sourceKey && player && !hasRestoredPositionRef.current) {\n const cachedPosition = getVideoPosition(sourceKey);\n if (cachedPosition && cachedPosition > 0) {\n const duration = player.duration;\n // Only restore if position is valid (not at the end)\n if (cachedPosition < duration - 1) {\n videoDebug.debug(`Restoring position: ${cachedPosition}s`);\n player.currentTime = cachedPosition;\n }\n }\n hasRestoredPositionRef.current = true;\n }\n\n onCanPlay?.();\n }, [sourceKey, getVideoPosition, onCanPlay]);\n\n const handleTimeUpdate = useCallback(() => {\n const player = playerRef.current;\n if (!player) return;\n\n // Save position every 5 seconds\n if (sourceKey && player.currentTime > 0) {\n const timeSinceLastSave = player.currentTime - lastSavedTimeRef.current;\n if (timeSinceLastSave >= 5 || timeSinceLastSave < 0) {\n saveVideoPosition(sourceKey, player.currentTime);\n lastSavedTimeRef.current = player.currentTime;\n }\n }\n\n onTimeUpdate?.(player.currentTime, player.duration);\n }, [sourceKey, saveVideoPosition, onTimeUpdate]);\n\n // Reset position restoration flag when source changes\n useEffect(() => {\n hasRestoredPositionRef.current = false;\n lastSavedTimeRef.current = 0;\n }, [sourceKey]);\n\n // Debug: Log player events\n useEffect(() => {\n const player = playerRef.current;\n if (!player) return;\n\n const handleSeeking = () => {\n videoDebug.event('seeking', { currentTime: player.currentTime });\n };\n\n const handleSeeked = () => {\n videoDebug.event('seeked', { currentTime: player.currentTime });\n const mediaEl = (player.provider as { media?: HTMLVideoElement } | null)?.media;\n if (mediaEl?.buffered) {\n videoDebug.buffer(mediaEl.buffered, player.duration);\n }\n };\n\n const handleWaiting = () => {\n videoDebug.warn('WAITING - buffering...');\n const mediaEl = (player.provider as { media?: HTMLVideoElement } | null)?.media;\n if (mediaEl?.buffered) {\n videoDebug.buffer(mediaEl.buffered, player.duration);\n }\n };\n\n const handleStalled = () => {\n videoDebug.warn('STALLED - network issue');\n const mediaEl = (player.provider as { media?: HTMLVideoElement } | null)?.media;\n if (mediaEl?.buffered) {\n videoDebug.buffer(mediaEl.buffered, player.duration);\n }\n };\n\n player.addEventListener('seeking', handleSeeking);\n player.addEventListener('seeked', handleSeeked);\n player.addEventListener('waiting', handleWaiting);\n player.addEventListener('stalled', handleStalled);\n\n return () => {\n player.removeEventListener('seeking', handleSeeking);\n player.removeEventListener('seeked', handleSeeked);\n player.removeEventListener('waiting', handleWaiting);\n player.removeEventListener('stalled', handleStalled);\n };\n }, [vidstackSrc]);\n\n // Determine layout mode\n const isFillMode = aspectRatio === 'fill';\n const computedAspectRatio = aspectRatio === 'auto' || aspectRatio === 'fill' ? undefined : aspectRatio;\n\n // Render error fallback\n const renderErrorFallback = () => {\n const fallbackProps: ErrorFallbackProps = { error: errorMessage, retry };\n\n if (typeof errorFallback === 'function') {\n return errorFallback(fallbackProps);\n }\n\n if (errorFallback) {\n return errorFallback;\n }\n\n return <DefaultErrorFallback {...fallbackProps} />;\n };\n\n // Container styles based on mode\n const containerStyles = isFillMode\n ? { width: '100%', height: '100%' }\n : { aspectRatio: computedAspectRatio };\n\n return (\n <div className={cn(isFillMode ? 'w-full h-full' : 'w-full', className)}>\n <div\n className={cn(\n 'relative w-full rounded-sm bg-black overflow-hidden',\n isFillMode && 'h-full',\n theme === 'minimal' && 'rounded-none',\n theme === 'modern' && 'rounded-xl shadow-2xl'\n )}\n style={containerStyles}\n >\n {hasError ? (\n renderErrorFallback()\n ) : (\n <MediaPlayer\n ref={playerRef}\n title={source.title || 'Video'}\n src={vidstackSrc}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n playsInline={playsInline}\n onPlay={handlePlay}\n onPause={handlePause}\n onEnded={handleEnded}\n onError={handleError}\n onLoadStart={handleLoadStart}\n onCanPlay={handleCanPlay}\n onTimeUpdate={handleTimeUpdate}\n className=\"w-full h-full\"\n >\n <MediaProvider />\n\n {posterUrl && (\n <Poster\n className=\"vds-poster\"\n src={posterUrl}\n alt={source.title || 'Video poster'}\n style={{ objectFit: 'cover' }}\n />\n )}\n\n {controls && <DefaultVideoLayout icons={defaultLayoutIcons} thumbnails={posterUrl} />}\n </MediaPlayer>\n )}\n </div>\n\n {showInfo && source.title && (\n <div className=\"mt-4 space-y-2\">\n <h3 className=\"text-xl font-semibold text-foreground\">{source.title}</h3>\n </div>\n )}\n </div>\n );\n }\n);\n\nVidstackProvider.displayName = 'VidstackProvider';\n","'use client';\n\n/**\n * useVideoPlayerSettings - Hook for persisted video player settings\n *\n * Provides volume and loop settings that persist in localStorage.\n * Use this hook in video player providers to apply saved settings.\n *\n * @example\n * const { settings, updateVolume, updateLoop } = useVideoPlayerSettings();\n *\n * // Apply to video element\n * videoRef.current.volume = settings.volume;\n * videoRef.current.loop = settings.isLooping;\n *\n * // Save when user changes\n * const handleVolumeChange = (vol: number) => {\n * videoRef.current.volume = vol;\n * updateVolume(vol);\n * };\n */\n\nimport { useCallback } from 'react';\n\nimport { useVideoPlayerSettings as useSettings } from '../../../stores/mediaCache';\n\nexport interface VideoPlayerSettingsReturn {\n /** Current settings */\n settings: {\n volume: number;\n isLooping: boolean;\n };\n /** Update volume (0-1) */\n updateVolume: (volume: number) => void;\n /** Update loop setting */\n updateLoop: (isLooping: boolean) => void;\n /** Update multiple settings at once */\n updateSettings: (settings: { volume?: number; isLooping?: boolean }) => void;\n}\n\nexport function useVideoPlayerSettings(): VideoPlayerSettingsReturn {\n const { settings, saveSettings } = useSettings();\n\n const updateVolume = useCallback(\n (volume: number) => {\n saveSettings({ volume: Math.max(0, Math.min(1, volume)) });\n },\n [saveSettings]\n );\n\n const updateLoop = useCallback(\n (isLooping: boolean) => {\n saveSettings({ isLooping });\n },\n [saveSettings]\n );\n\n const updateSettings = useCallback(\n (newSettings: { volume?: number; isLooping?: boolean }) => {\n saveSettings(newSettings);\n },\n [saveSettings]\n );\n\n return {\n settings,\n updateVolume,\n updateLoop,\n updateSettings,\n };\n}\n","/**\n * NativeProvider - Lightweight native HTML5 video player\n * For demo videos, background videos, autoplay loop muted scenarios\n */\n\n'use client';\n\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { Preloader, AspectRatio } from '@djangocfg/ui-core';\nimport { useVideoPlayerSettings } from '../hooks/useVideoPlayerSettings';\n\nimport type { NativeProviderProps, VideoPlayerRef } from '../types';\nimport { videoDebug } from '../utils/debug';\n\n/**\n * Get video URL from source\n */\nfunction getVideoUrl(source: NativeProviderProps['source']): string {\n switch (source.type) {\n case 'url':\n return source.url;\n case 'data-url':\n return source.data;\n default:\n return '';\n }\n}\n\nexport const NativeProvider = forwardRef<VideoPlayerRef, NativeProviderProps>(\n (\n {\n source,\n aspectRatio = 16 / 9,\n autoPlay = true,\n muted = true,\n loop = true,\n playsInline = true,\n preload = 'auto',\n controls = false,\n disableContextMenu = true,\n showPreloader = true,\n preloaderTimeout = 5000,\n className,\n videoClassName,\n onPlay,\n onPause,\n onEnded,\n onError,\n onLoadStart,\n onCanPlay,\n onTimeUpdate,\n },\n ref\n ) => {\n const [isLoading, setIsLoading] = useState(showPreloader);\n const videoRef = useRef<HTMLVideoElement>(null);\n\n // Persisted player settings\n const { settings: savedSettings, updateVolume } = useVideoPlayerSettings();\n\n const videoUrl = getVideoUrl(source);\n\n // Debug: Log video source\n useEffect(() => {\n videoDebug.load(videoUrl, source.type);\n }, [videoUrl, source.type]);\n\n // Expose video element methods via ref\n useImperativeHandle(\n ref,\n () => ({\n play: () => videoRef.current?.play(),\n pause: () => videoRef.current?.pause(),\n togglePlay: () => {\n const video = videoRef.current;\n if (video) {\n video.paused ? video.play() : video.pause();\n }\n },\n seekTo: (time: number) => {\n if (videoRef.current) videoRef.current.currentTime = time;\n },\n setVolume: (volume: number) => {\n if (videoRef.current) videoRef.current.volume = Math.max(0, Math.min(1, volume));\n },\n toggleMute: () => {\n if (videoRef.current) videoRef.current.muted = !videoRef.current.muted;\n },\n enterFullscreen: () => videoRef.current?.requestFullscreen(),\n exitFullscreen: () => document.exitFullscreen(),\n get currentTime() {\n return videoRef.current?.currentTime ?? 0;\n },\n get duration() {\n return videoRef.current?.duration ?? 0;\n },\n get paused() {\n return videoRef.current?.paused ?? true;\n },\n }),\n []\n );\n\n useEffect(() => {\n if (!showPreloader) return;\n\n const video = videoRef.current;\n if (!video) return;\n\n // Check if video is already loaded\n if (video.readyState >= 3) {\n setIsLoading(false);\n return;\n }\n\n const hideLoader = () => setIsLoading(false);\n\n video.addEventListener('canplay', hideLoader);\n video.addEventListener('loadeddata', hideLoader);\n video.addEventListener('playing', hideLoader);\n\n // Fallback: hide loader after timeout\n const timeout = setTimeout(hideLoader, preloaderTimeout);\n\n return () => {\n video.removeEventListener('canplay', hideLoader);\n video.removeEventListener('loadeddata', hideLoader);\n video.removeEventListener('playing', hideLoader);\n clearTimeout(timeout);\n };\n }, [showPreloader, preloaderTimeout]);\n\n // Debug: Log video events\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleLoadedMetadata = () => {\n videoDebug.state('loadedmetadata', { duration: video.duration });\n };\n\n const handleCanPlayDebug = () => {\n videoDebug.state('canplay', { duration: video.duration, buffered: video.buffered.length });\n videoDebug.buffer(video.buffered, video.duration);\n // Apply saved volume\n video.volume = savedSettings.volume;\n };\n\n const handleSeeking = () => {\n videoDebug.event('seeking', { currentTime: video.currentTime });\n };\n\n const handleSeeked = () => {\n videoDebug.event('seeked', { currentTime: video.currentTime });\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n const handleWaiting = () => {\n videoDebug.warn('WAITING - buffering...');\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n const handleStalled = () => {\n videoDebug.warn('STALLED - network issue');\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n video.addEventListener('loadedmetadata', handleLoadedMetadata);\n video.addEventListener('canplay', handleCanPlayDebug);\n video.addEventListener('seeking', handleSeeking);\n video.addEventListener('seeked', handleSeeked);\n video.addEventListener('waiting', handleWaiting);\n video.addEventListener('stalled', handleStalled);\n\n return () => {\n video.removeEventListener('loadedmetadata', handleLoadedMetadata);\n video.removeEventListener('canplay', handleCanPlayDebug);\n video.removeEventListener('seeking', handleSeeking);\n video.removeEventListener('seeked', handleSeeked);\n video.removeEventListener('waiting', handleWaiting);\n video.removeEventListener('stalled', handleStalled);\n };\n }, [savedSettings.volume]);\n\n // Persist volume when user changes it via native controls\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleVolumeChange = () => {\n updateVolume(video.volume);\n };\n\n video.addEventListener('volumechange', handleVolumeChange);\n return () => video.removeEventListener('volumechange', handleVolumeChange);\n }, [updateVolume]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disableContextMenu) {\n e.preventDefault();\n }\n };\n\n const handleError = (e: React.SyntheticEvent<HTMLVideoElement>) => {\n const video = e.currentTarget;\n const errorMsg = video.error?.message || 'Video playback error';\n videoDebug.error('Video error', { code: video.error?.code, message: errorMsg });\n setIsLoading(false);\n onError?.(errorMsg);\n };\n\n const handleTimeUpdate = () => {\n const video = videoRef.current;\n if (video && onTimeUpdate) {\n onTimeUpdate(video.currentTime, video.duration);\n }\n };\n\n // Determine if we should use AspectRatio wrapper or fill mode\n const isFillMode = aspectRatio === 'fill';\n const computedAspectRatio = aspectRatio === 'auto' || aspectRatio === 'fill' ? undefined : aspectRatio;\n\n // Video content\n const videoContent = (\n <>\n {/* Preloader */}\n {showPreloader && isLoading && (\n <div\n className={cn(\n 'absolute inset-0 flex items-center justify-center bg-muted/30 backdrop-blur-sm z-10'\n )}\n >\n <Preloader size=\"lg\" spinnerClassName=\"text-white\" />\n </div>\n )}\n\n {/* Video */}\n <video\n ref={videoRef}\n className={cn('w-full h-full object-cover', videoClassName)}\n src={videoUrl}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n playsInline={playsInline}\n preload={preload}\n controls={controls}\n poster={source.poster}\n onContextMenu={handleContextMenu}\n onLoadStart={onLoadStart}\n onCanPlay={onCanPlay}\n onPlay={onPlay}\n onPause={onPause}\n onPlaying={() => setIsLoading(false)}\n onEnded={onEnded}\n onError={handleError}\n onTimeUpdate={handleTimeUpdate}\n />\n </>\n );\n\n // Fill mode - no AspectRatio wrapper\n if (isFillMode) {\n return (\n <div className={cn('relative w-full h-full overflow-hidden', className)}>\n {videoContent}\n </div>\n );\n }\n\n // Normal mode with AspectRatio\n return (\n <div className={cn('relative overflow-hidden', className)}>\n <AspectRatio ratio={computedAspectRatio}>\n {videoContent}\n </AspectRatio>\n </div>\n );\n }\n);\n\nNativeProvider.displayName = 'NativeProvider';\n","/**\n * StreamProvider - HTTP Range streaming and Blob video player\n * Supports:\n * - HTTP Range requests with authorization (for large files)\n * - Blob/ArrayBuffer sources\n * - Data URL sources\n * - Fill parent container mode\n * - Custom error fallback\n */\n\n'use client';\n\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { Preloader, AspectRatio } from '@djangocfg/ui-core';\nimport { useMediaCacheStore, generateContentKey } from '../../../stores/mediaCache';\nimport { useVideoPlayerSettings } from '../hooks/useVideoPlayerSettings';\n\nimport type { StreamProviderProps, VideoPlayerRef, StreamSource, BlobSource, DataUrlSource, ErrorFallbackProps } from '../types';\nimport { videoDebug } from '../utils/debug';\n\n/** Default error fallback UI */\nfunction DefaultErrorFallback({ error }: ErrorFallbackProps) {\n return (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-4 text-white\">\n <svg\n className=\"w-16 h-16 text-muted-foreground\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z\"\n />\n </svg>\n <p className=\"text-lg\">{error || 'Video cannot be previewed'}</p>\n </div>\n );\n}\n\nexport const StreamProvider = forwardRef<VideoPlayerRef, StreamProviderProps>(\n (\n {\n source,\n aspectRatio = 16 / 9,\n autoPlay = false,\n muted = false,\n loop = false,\n playsInline = true,\n preload = 'metadata',\n controls = true,\n disableContextMenu = false,\n showPreloader = true,\n preloaderTimeout = 10000,\n className,\n videoClassName,\n errorFallback,\n onPlay,\n onPause,\n onEnded,\n onError,\n onLoadStart,\n onCanPlay,\n onTimeUpdate,\n onBufferProgress,\n },\n ref\n ) => {\n const [videoUrl, setVideoUrl] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string>('Video cannot be previewed');\n const videoRef = useRef<HTMLVideoElement>(null);\n const contentKeyRef = useRef<string | null>(null);\n const lastSavedTimeRef = useRef<number>(0);\n\n // Get stable function references from store (not from hook to avoid re-renders)\n const getOrCreateBlobUrl = useMediaCacheStore.getState().getOrCreateBlobUrl;\n const releaseBlobUrl = useMediaCacheStore.getState().releaseBlobUrl;\n const getOrCreateStreamUrl = useMediaCacheStore.getState().getOrCreateStreamUrl;\n const saveVideoPosition = useMediaCacheStore.getState().saveVideoPosition;\n const getVideoPosition = useMediaCacheStore.getState().getVideoPosition;\n\n // Persisted player settings\n const { settings: savedSettings, updateVolume } = useVideoPlayerSettings();\n\n // Retry function for error fallback\n // Regenerates URL for stream sources to get fresh token/session\n const retry = useCallback(() => {\n setHasError(false);\n setIsLoading(true);\n\n // For stream sources, regenerate URL bypassing cache\n if (source.type === 'stream') {\n const streamSource = source as StreamSource;\n const freshUrl = streamSource.getStreamUrl(streamSource.sessionId, streamSource.path);\n setVideoUrl(freshUrl);\n return;\n }\n\n // For other sources, just reload\n const video = videoRef.current;\n if (video && videoUrl) {\n video.load();\n }\n }, [source, videoUrl]);\n\n // Expose video element methods via ref\n useImperativeHandle(\n ref,\n () => ({\n play: () => videoRef.current?.play(),\n pause: () => videoRef.current?.pause(),\n togglePlay: () => {\n const video = videoRef.current;\n if (video) {\n video.paused ? video.play() : video.pause();\n }\n },\n seekTo: (time: number) => {\n if (videoRef.current) videoRef.current.currentTime = time;\n },\n setVolume: (volume: number) => {\n if (videoRef.current) videoRef.current.volume = Math.max(0, Math.min(1, volume));\n },\n toggleMute: () => {\n if (videoRef.current) videoRef.current.muted = !videoRef.current.muted;\n },\n enterFullscreen: () => videoRef.current?.requestFullscreen(),\n exitFullscreen: () => document.exitFullscreen(),\n get currentTime() {\n return videoRef.current?.currentTime ?? 0;\n },\n get duration() {\n return videoRef.current?.duration ?? 0;\n },\n get paused() {\n return videoRef.current?.paused ?? true;\n },\n }),\n []\n );\n\n // Track unmount for cleanup\n const isMountedRef = useRef(true);\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n // Release blob URL only on actual unmount\n if (contentKeyRef.current) {\n useMediaCacheStore.getState().releaseBlobUrl(contentKeyRef.current);\n contentKeyRef.current = null;\n }\n };\n }, []);\n\n // Create video URL based on source type with caching\n useEffect(() => {\n // Release previous blob URL if source changed\n if (contentKeyRef.current) {\n const newKey = source.type === 'blob'\n ? generateContentKey((source as BlobSource).data)\n : null;\n if (newKey !== contentKeyRef.current) {\n releaseBlobUrl(contentKeyRef.current);\n contentKeyRef.current = null;\n }\n }\n\n setHasError(false);\n setIsLoading(true);\n\n switch (source.type) {\n case 'stream': {\n const streamSource = source as StreamSource;\n // Use cached stream URL\n const url = getOrCreateStreamUrl(\n streamSource.sessionId,\n streamSource.path,\n streamSource.getStreamUrl\n );\n videoDebug.load(url, 'stream');\n setVideoUrl(url);\n break;\n }\n\n case 'blob': {\n const blobSource = source as BlobSource;\n // Generate content key for caching\n const contentKey = generateContentKey(blobSource.data);\n contentKeyRef.current = contentKey;\n // Use cached blob URL\n const url = getOrCreateBlobUrl(\n contentKey,\n blobSource.data,\n blobSource.mimeType || 'video/mp4'\n );\n videoDebug.load(url, 'blob');\n setVideoUrl(url);\n break;\n }\n\n case 'data-url': {\n const dataUrlSource = source as DataUrlSource;\n videoDebug.load(dataUrlSource.data.slice(0, 50) + '...', 'data-url');\n setVideoUrl(dataUrlSource.data);\n break;\n }\n\n default:\n videoDebug.error('Invalid video source type', { type: (source as { type: string }).type });\n setVideoUrl(null);\n setHasError(true);\n setErrorMessage('Invalid video source');\n }\n\n // No cleanup here - cleanup happens in unmount effect above\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n // Get source key for position caching\n const getSourceKey = useCallback(() => {\n switch (source.type) {\n case 'stream':\n return `stream:${(source as StreamSource).sessionId}:${(source as StreamSource).path}`;\n case 'blob':\n return contentKeyRef.current ? `blob:${contentKeyRef.current}` : null;\n case 'data-url':\n return `data:${(source as DataUrlSource).data.slice(0, 50)}`;\n default:\n return null;\n }\n }, [source]);\n\n // Restore cached playback position and settings when video is ready\n const handleCanPlay = useCallback(() => {\n const video = videoRef.current;\n if (video) {\n videoDebug.state('canplay', { duration: video.duration, buffered: video.buffered.length });\n videoDebug.buffer(video.buffered, video.duration);\n\n // Apply saved volume (user preference)\n video.volume = savedSettings.volume;\n }\n setIsLoading(false);\n\n // Restore position from cache\n const sourceKey = getSourceKey();\n if (sourceKey && video) {\n const cachedPosition = getVideoPosition(sourceKey);\n if (cachedPosition && cachedPosition > 0) {\n const duration = video.duration;\n // Only restore if position is valid (not at the end)\n if (cachedPosition < duration - 1) {\n videoDebug.debug(`Restoring position: ${cachedPosition}s`);\n video.currentTime = cachedPosition;\n }\n }\n }\n\n onCanPlay?.();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getSourceKey, onCanPlay, savedSettings.volume]);\n\n // Save playback position periodically\n const handleTimeUpdate = useCallback(() => {\n const video = videoRef.current;\n if (!video) return;\n\n // Save position every 5 seconds\n const sourceKey = getSourceKey();\n if (sourceKey && video.currentTime > 0) {\n const timeSinceLastSave = video.currentTime - lastSavedTimeRef.current;\n if (timeSinceLastSave >= 5 || timeSinceLastSave < 0) {\n saveVideoPosition(sourceKey, video.currentTime);\n lastSavedTimeRef.current = video.currentTime;\n }\n }\n\n onTimeUpdate?.(video.currentTime, video.duration);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getSourceKey, onTimeUpdate]);\n\n // Save position on pause\n const handlePause = useCallback(() => {\n const video = videoRef.current;\n const sourceKey = getSourceKey();\n if (sourceKey && video && video.currentTime > 0) {\n saveVideoPosition(sourceKey, video.currentTime);\n lastSavedTimeRef.current = video.currentTime;\n }\n onPause?.();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getSourceKey, onPause]);\n\n // Handle buffer progress\n const handleProgress = useCallback(() => {\n const video = videoRef.current;\n if (!video || !onBufferProgress) return;\n\n // Get the buffered time ranges\n if (video.buffered.length > 0) {\n // Get the end of the last buffered range\n const bufferedEnd = video.buffered.end(video.buffered.length - 1);\n const duration = video.duration;\n\n if (duration > 0 && !isNaN(bufferedEnd)) {\n onBufferProgress(bufferedEnd, duration);\n }\n }\n }, [onBufferProgress]);\n\n // Preloader timeout\n useEffect(() => {\n if (!showPreloader || !isLoading) return;\n\n const timeout = setTimeout(() => {\n setIsLoading(false);\n }, preloaderTimeout);\n\n return () => clearTimeout(timeout);\n }, [showPreloader, isLoading, preloaderTimeout]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disableContextMenu) {\n e.preventDefault();\n }\n };\n\n const handleLoadedData = () => {\n setIsLoading(false);\n };\n\n const handleError = () => {\n const video = videoRef.current;\n if (video) {\n videoDebug.error('Video error', { code: video.error?.code, message: video.error?.message });\n }\n setIsLoading(false);\n setHasError(true);\n setErrorMessage('Failed to load video');\n onError?.('Video playback error');\n };\n\n // Debug: Log video events\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleLoadedMetadata = () => {\n videoDebug.state('loadedmetadata', { duration: video.duration });\n };\n\n const handleSeeking = () => {\n videoDebug.event('seeking', { currentTime: video.currentTime });\n };\n\n const handleSeeked = () => {\n videoDebug.event('seeked', { currentTime: video.currentTime });\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n const handleWaiting = () => {\n videoDebug.warn('WAITING - buffering...');\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n const handleStalled = () => {\n videoDebug.warn('STALLED - network issue');\n videoDebug.buffer(video.buffered, video.duration);\n };\n\n video.addEventListener('loadedmetadata', handleLoadedMetadata);\n video.addEventListener('seeking', handleSeeking);\n video.addEventListener('seeked', handleSeeked);\n video.addEventListener('waiting', handleWaiting);\n video.addEventListener('stalled', handleStalled);\n\n return () => {\n video.removeEventListener('loadedmetadata', handleLoadedMetadata);\n video.removeEventListener('seeking', handleSeeking);\n video.removeEventListener('seeked', handleSeeked);\n video.removeEventListener('waiting', handleWaiting);\n video.removeEventListener('stalled', handleStalled);\n };\n }, [videoUrl]);\n\n // Persist volume when user changes it via native controls\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return;\n\n const handleVolumeChange = () => {\n updateVolume(video.volume);\n };\n\n video.addEventListener('volumechange', handleVolumeChange);\n return () => video.removeEventListener('volumechange', handleVolumeChange);\n }, [videoUrl, updateVolume]);\n\n // Determine if we should use AspectRatio wrapper or fill mode\n const isFillMode = aspectRatio === 'fill';\n const computedAspectRatio = aspectRatio === 'auto' || aspectRatio === 'fill' ? undefined : aspectRatio;\n\n // Render error fallback\n const renderErrorFallback = () => {\n const fallbackProps: ErrorFallbackProps = { error: errorMessage, retry };\n\n if (typeof errorFallback === 'function') {\n return errorFallback(fallbackProps);\n }\n\n if (errorFallback) {\n return errorFallback;\n }\n\n return <DefaultErrorFallback {...fallbackProps} />;\n };\n\n // Error state\n if (!videoUrl || hasError) {\n if (isFillMode) {\n return (\n <div className={cn('relative w-full h-full overflow-hidden bg-black', className)}>\n {renderErrorFallback()}\n </div>\n );\n }\n\n return (\n <div className={cn('relative overflow-hidden bg-black', className)}>\n <AspectRatio ratio={computedAspectRatio}>\n {renderErrorFallback()}\n </AspectRatio>\n </div>\n );\n }\n\n // Video content\n const videoContent = (\n <>\n {/* Loading indicator */}\n {showPreloader && isLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/50 z-10\">\n <Preloader size=\"lg\" spinnerClassName=\"text-white\" />\n </div>\n )}\n\n {/* Video element */}\n <video\n ref={videoRef}\n src={videoUrl}\n className={cn(\n 'w-full h-full object-contain',\n isLoading && 'opacity-0',\n videoClassName\n )}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n playsInline={playsInline}\n preload={preload}\n controls={controls}\n crossOrigin=\"anonymous\"\n poster={source.poster}\n onContextMenu={handleContextMenu}\n onLoadStart={onLoadStart}\n onCanPlay={handleCanPlay}\n onLoadedData={handleLoadedData}\n onPlay={onPlay}\n onPause={handlePause}\n onEnded={onEnded}\n onError={handleError}\n onTimeUpdate={handleTimeUpdate}\n onProgress={handleProgress}\n />\n </>\n );\n\n // Fill mode - no AspectRatio wrapper\n if (isFillMode) {\n return (\n <div className={cn('relative w-full h-full overflow-hidden bg-black', className)}>\n {videoContent}\n </div>\n );\n }\n\n // Normal mode with AspectRatio\n return (\n <div className={cn('relative overflow-hidden bg-black', className)}>\n <AspectRatio ratio={computedAspectRatio}>\n {videoContent}\n </AspectRatio>\n </div>\n );\n }\n);\n\nStreamProvider.displayName = 'StreamProvider';\n","/**\n * VideoPlayerContext - Context for streaming configuration\n * Simplifies streaming API by providing getStreamUrl globally\n */\n\n'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\n\nimport type { VideoPlayerContextValue, VideoPlayerProviderProps } from '../types';\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst VideoPlayerContext = createContext<VideoPlayerContextValue | null>(null);\n\n/**\n * Provider for VideoPlayer streaming configuration\n *\n * @example\n * // In your app layout or FileWorkspace\n * <VideoPlayerProvider\n * sessionId={sessionId}\n * getStreamUrl={terminalClient.terminal_media.streamStreamRetrieveUrl}\n * >\n * <VideoPlayer source={{ type: 'stream', path: '/video.mp4' }} />\n * </VideoPlayerProvider>\n */\nexport function VideoPlayerProvider({\n children,\n getStreamUrl,\n sessionId,\n}: VideoPlayerProviderProps) {\n const value = useMemo(\n () => ({ getStreamUrl, sessionId }),\n [getStreamUrl, sessionId]\n );\n\n return (\n <VideoPlayerContext.Provider value={value}>\n {children}\n </VideoPlayerContext.Provider>\n );\n}\n\n/**\n * Hook to access VideoPlayer context\n */\nexport function useVideoPlayerContext(): VideoPlayerContextValue | null {\n return useContext(VideoPlayerContext);\n}\n","/**\n * Video source and player mode resolvers\n */\n\nimport type { VideoSourceUnion, PlayerMode, SimpleStreamSource, StreamSource, VideoPlayerContextValue } from '../types';\n\n/**\n * Determine which provider to use based on source type\n */\nexport function resolvePlayerMode(\n source: VideoSourceUnion,\n mode: PlayerMode = 'auto'\n): 'vidstack' | 'native' | 'streaming' {\n if (mode !== 'auto') {\n return mode;\n }\n\n switch (source.type) {\n case 'youtube':\n case 'vimeo':\n case 'hls':\n case 'dash':\n return 'vidstack';\n\n case 'stream':\n case 'blob':\n return 'streaming';\n\n case 'data-url':\n case 'url':\n default:\n return 'native';\n }\n}\n\n/**\n * Check if source is a simplified stream source (without getStreamUrl)\n */\nexport function isSimpleStreamSource(\n source: VideoSourceUnion | SimpleStreamSource | undefined | null\n): source is SimpleStreamSource {\n return source != null && source.type === 'stream' && !('getStreamUrl' in source);\n}\n\n/**\n * Resolve simplified stream source to full stream source using context\n */\nexport function resolveStreamSource(\n source: SimpleStreamSource,\n context: VideoPlayerContextValue | null\n): StreamSource | null {\n if (!context?.getStreamUrl) {\n console.warn(\n 'VideoPlayer: Stream source requires getStreamUrl. ' +\n 'Either provide it in source or wrap with VideoPlayerProvider.'\n );\n return null;\n }\n\n const sessionId = source.sessionId || context.sessionId;\n if (!sessionId) {\n console.warn('VideoPlayer: Stream source requires sessionId.');\n return null;\n }\n\n return {\n type: 'stream',\n sessionId,\n path: source.path,\n getStreamUrl: context.getStreamUrl,\n mimeType: source.mimeType,\n title: source.title,\n poster: source.poster,\n };\n}\n","/**\n * File source resolution utilities\n */\n\nimport type { VideoSourceUnion, ResolveFileSourceOptions } from '../types';\n\n/**\n * Resolve file content to VideoSourceUnion\n * Useful for FileWorkspace/file manager integrations\n *\n * @example\n * const source = resolveFileSource({\n * content: file.content,\n * path: file.path,\n * mimeType: file.mimeType,\n * sessionId: sessionId,\n * loadMethod: file.loadMethod,\n * getStreamUrl: terminalClient.terminal_media.streamStreamRetrieveUrl\n * });\n *\n * <VideoPlayer source={source} />\n */\nexport function resolveFileSource(options: ResolveFileSourceOptions): VideoSourceUnion | null {\n const {\n content,\n path,\n mimeType,\n sessionId,\n loadMethod,\n getStreamUrl,\n title,\n poster,\n } = options;\n\n const contentSize = content\n ? typeof content === 'string'\n ? content.length\n : content.byteLength\n : 0;\n const hasContent = contentSize > 0;\n\n // Priority 1: HTTP Range streaming for large files\n if (loadMethod === 'http_stream' && !hasContent && sessionId && getStreamUrl) {\n return {\n type: 'stream',\n sessionId,\n path,\n getStreamUrl,\n mimeType,\n title,\n poster,\n };\n }\n\n // Priority 2: Data URL (base64 string)\n if (typeof content === 'string' && hasContent) {\n return {\n type: 'data-url',\n data: content,\n title,\n poster,\n };\n }\n\n // Priority 3: ArrayBuffer → Blob\n if (content instanceof ArrayBuffer && hasContent) {\n return {\n type: 'blob',\n data: content,\n mimeType: mimeType || 'video/mp4',\n title,\n poster,\n };\n }\n\n // No valid content\n return null;\n}\n","/**\n * VideoPlayer - Unified Video Player Component\n *\n * Supports multiple modes:\n * - vidstack: Full-featured player (YouTube, Vimeo, HLS, DASH)\n * - native: Lightweight HTML5 player\n * - streaming: HTTP Range streaming with auth / Blob sources\n *\n * @example\n * // YouTube video\n * <VideoPlayer source={{ type: 'youtube', id: 'dQw4w9WgXcQ' }} />\n *\n * @example\n * // HLS stream\n * <VideoPlayer source={{ type: 'hls', url: 'https://example.com/video.m3u8' }} />\n *\n * @example\n * // HTTP Range streaming with auth (full source)\n * <VideoPlayer\n * source={{\n * type: 'stream',\n * sessionId: 'abc123',\n * path: '/videos/movie.mp4',\n * getStreamUrl: (id, path) => `/api/stream/${id}?path=${path}&token=${token}`\n * }}\n * />\n *\n * @example\n * // HTTP Range streaming (simplified, using VideoPlayerProvider context)\n * <VideoPlayerProvider sessionId={sessionId} getStreamUrl={getStreamUrl}>\n * <VideoPlayer source={{ type: 'stream', path: '/videos/movie.mp4' }} />\n * </VideoPlayerProvider>\n *\n * @example\n * // Blob/ArrayBuffer\n * <VideoPlayer source={{ type: 'blob', data: arrayBuffer, mimeType: 'video/mp4' }} />\n */\n\n'use client';\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { VidstackProvider, NativeProvider, StreamProvider } from '../providers';\nimport { useVideoPlayerContext } from '../context';\nimport { resolvePlayerMode, isSimpleStreamSource, resolveStreamSource } from '../utils';\n\nimport type { VideoPlayerProps, VideoPlayerRef, VideoSourceUnion, VidstackProviderProps, NativeProviderProps, StreamProviderProps, SimpleStreamSource } from '../types';\n\nexport const VideoPlayer = forwardRef<VideoPlayerRef, VideoPlayerProps & { source: VideoSourceUnion | SimpleStreamSource }>(\n (\n {\n source: rawSource,\n mode = 'auto',\n aspectRatio = 16 / 9,\n autoPlay = false,\n muted = false,\n loop = false,\n playsInline = true,\n controls = true,\n preload = 'metadata',\n theme = 'default',\n showInfo = false,\n className,\n videoClassName,\n disableContextMenu = false,\n showPreloader = true,\n preloaderTimeout = 5000,\n errorFallback,\n onPlay,\n onPause,\n onEnded,\n onError,\n onLoadStart,\n onCanPlay,\n onTimeUpdate,\n },\n ref\n ) => {\n // Get context for simplified stream sources\n const context = useVideoPlayerContext();\n\n // Resolve simplified stream source to full source using context\n const source = useMemo(() => {\n if (isSimpleStreamSource(rawSource)) {\n const resolved = resolveStreamSource(rawSource, context);\n if (!resolved) {\n // Return a special error source that will trigger error fallback\n return null;\n }\n return resolved;\n }\n return rawSource;\n }, [rawSource, context]);\n\n // Handle unresolved source\n if (!source) {\n // Render error state\n const errorMessage = 'Stream source requires VideoPlayerProvider with getStreamUrl and sessionId';\n\n if (typeof errorFallback === 'function') {\n return (\n <div className={className} style={{ aspectRatio: aspectRatio === 'fill' ? undefined : aspectRatio }}>\n {errorFallback({ error: errorMessage })}\n </div>\n );\n }\n\n if (errorFallback) {\n return (\n <div className={className} style={{ aspectRatio: aspectRatio === 'fill' ? undefined : aspectRatio }}>\n {errorFallback}\n </div>\n );\n }\n\n // Default error UI\n return (\n <div\n className={className}\n style={{\n aspectRatio: aspectRatio === 'fill' ? undefined : aspectRatio,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'black',\n color: 'white',\n }}\n >\n <p>{errorMessage}</p>\n </div>\n );\n }\n\n // Determine which provider to use\n const resolvedMode = resolvePlayerMode(source, mode);\n\n // Common props for all providers\n const commonProps = {\n aspectRatio,\n autoPlay,\n muted,\n loop,\n playsInline,\n controls,\n preload,\n className,\n onPlay,\n onPause,\n onEnded,\n onError,\n onLoadStart,\n onCanPlay,\n onTimeUpdate,\n };\n\n // Render appropriate provider\n switch (resolvedMode) {\n case 'vidstack':\n return (\n <VidstackProvider\n ref={ref}\n source={source as VidstackProviderProps['source']}\n theme={theme}\n showInfo={showInfo}\n errorFallback={errorFallback}\n {...commonProps}\n />\n );\n\n case 'streaming':\n return (\n <StreamProvider\n ref={ref}\n source={source as StreamProviderProps['source']}\n videoClassName={videoClassName}\n disableContextMenu={disableContextMenu}\n showPreloader={showPreloader}\n preloaderTimeout={preloaderTimeout}\n errorFallback={errorFallback}\n {...commonProps}\n />\n );\n\n case 'native':\n default:\n return (\n <NativeProvider\n ref={ref}\n source={source as NativeProviderProps['source']}\n videoClassName={videoClassName}\n disableContextMenu={disableContextMenu}\n showPreloader={showPreloader}\n preloaderTimeout={preloaderTimeout}\n {...commonProps}\n />\n );\n }\n }\n);\n\nVideoPlayer.displayName = 'VideoPlayer';\n","/**\n * Custom Video Controls for Vidstack Player\n */\n\n'use client';\n\nimport { Maximize, Minimize, Pause, Play, Volume2, VolumeX } from 'lucide-react';\nimport React from 'react';\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { useMediaRemote, useMediaStore } from '@vidstack/react';\n\nimport type { MediaPlayerInstance } from '@vidstack/react';\ninterface VideoControlsProps {\n player: React.RefObject<MediaPlayerInstance | null>;\n className?: string;\n}\n\nexport function VideoControls({ player, className }: VideoControlsProps) {\n const store = useMediaStore(player);\n const remote = useMediaRemote();\n\n const isPaused = store.paused;\n const isMuted = store.muted;\n const isFullscreen = store.fullscreen;\n const currentTime = store.currentTime;\n const duration = store.duration;\n const volume = store.volume;\n\n const formatTime = (seconds: number): string => {\n if (!seconds || seconds < 0) return '0:00';\n const minutes = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n };\n\n const handleProgressClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!duration) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = clickX / rect.width;\n const newTime = percentage * duration;\n remote.seek(newTime);\n };\n\n const handleVolumeChange = (e: React.MouseEvent<HTMLDivElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, clickX / rect.width));\n remote.changeVolume(percentage);\n if (percentage > 0 && isMuted) {\n remote.toggleMuted();\n }\n };\n\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n return (\n <div\n className={cn(\n \"absolute inset-0 flex flex-col justify-end transition-opacity duration-300\",\n \"bg-gradient-to-t from-black/80 via-black/20 to-transparent\",\n \"opacity-0 group-hover:opacity-100 focus-within:opacity-100\",\n \"pointer-events-none group-hover:pointer-events-auto\",\n className\n )}\n >\n {/* Progress Bar */}\n <div className=\"px-4 pb-2 pointer-events-auto\">\n <div\n className=\"h-1.5 bg-white/20 rounded-full cursor-pointer hover:h-2 transition-all group\"\n onClick={handleProgressClick}\n >\n <div\n className=\"h-full bg-primary rounded-full transition-all relative group-hover:bg-primary/90\"\n style={{ width: `${progress}%` }}\n >\n <div className=\"absolute right-0 top-1/2 -translate-y-1/2 w-3 h-3 bg-white rounded-full opacity-0 group-hover:opacity-100 transition-opacity\" />\n </div>\n </div>\n </div>\n\n {/* Control Bar */}\n <div className=\"flex items-center gap-4 px-4 pb-4 pointer-events-auto\">\n {/* Play/Pause */}\n <button\n onClick={() => remote.togglePaused()}\n className=\"text-white hover:text-primary transition-colors p-1.5 hover:bg-white/10 rounded-full\"\n >\n {isPaused ? <Play className=\"h-6 w-6\" /> : <Pause className=\"h-6 w-6\" />}\n </button>\n\n {/* Time */}\n <div className=\"text-white text-sm font-medium\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </div>\n\n <div className=\"flex-1\" />\n\n {/* Volume Control */}\n <div className=\"flex items-center gap-2 group/volume\">\n <button\n onClick={() => remote.toggleMuted()}\n className=\"text-white hover:text-primary transition-colors p-1.5 hover:bg-white/10 rounded-full\"\n >\n {isMuted || volume === 0 ? (\n <VolumeX className=\"h-5 w-5\" />\n ) : (\n <Volume2 className=\"h-5 w-5\" />\n )}\n </button>\n\n <div\n className=\"w-0 group-hover/volume:w-20 transition-all overflow-hidden\"\n >\n <div\n className=\"h-1.5 bg-white/20 rounded-full cursor-pointer hover:h-2 transition-all\"\n onClick={handleVolumeChange}\n >\n <div\n className=\"h-full bg-white rounded-full transition-all\"\n style={{ width: `${volume * 100}%` }}\n />\n </div>\n </div>\n </div>\n\n {/* Fullscreen */}\n <button\n onClick={() => isFullscreen ? remote.exitFullscreen() : remote.enterFullscreen()}\n className=\"text-white hover:text-primary transition-colors p-1.5 hover:bg-white/10 rounded-full\"\n >\n {isFullscreen ? <Minimize className=\"h-5 w-5\" /> : <Maximize className=\"h-5 w-5\" />}\n </button>\n </div>\n </div>\n );\n}\n","/**\n * VideoErrorFallback - Pre-built error fallback with download button\n * For use with VideoPlayer errorFallback prop\n */\n\n'use client';\n\nimport React from 'react';\nimport { FileVideo, RefreshCw } from 'lucide-react';\n\nimport { cn, Button, DownloadButton } from '../../_shared';\n\nimport type { ErrorFallbackProps } from '../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface VideoErrorFallbackProps extends ErrorFallbackProps {\n /** URL for download button (if provided, shows download button) */\n downloadUrl?: string;\n /** Filename for download */\n downloadFilename?: string;\n /** File size to display */\n fileSize?: string;\n /** Show retry button */\n showRetry?: boolean;\n /** Custom className */\n className?: string;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Custom title (defaults to error message) */\n title?: string;\n /** Custom description */\n description?: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Pre-built error fallback component for VideoPlayer\n *\n * @example\n * // Basic usage\n * <VideoPlayer\n * source={source}\n * errorFallback={(props) => (\n * <VideoErrorFallback\n * {...props}\n * downloadUrl={getDownloadUrl()}\n * downloadFilename=\"video.mp4\"\n * />\n * )}\n * />\n *\n * @example\n * // With file size\n * <VideoErrorFallback\n * error=\"Failed to load video\"\n * downloadUrl=\"/api/download/video.mp4\"\n * fileSize=\"125 MB\"\n * showRetry\n * retry={() => reloadVideo()}\n * />\n */\nexport function VideoErrorFallback({\n error,\n retry,\n downloadUrl,\n downloadFilename,\n fileSize,\n showRetry = true,\n className,\n icon,\n title,\n description,\n}: VideoErrorFallbackProps) {\n const displayTitle = title || error || 'Video cannot be previewed';\n\n return (\n <div\n className={cn(\n 'absolute inset-0 flex flex-col items-center justify-center gap-4 bg-black/90 text-white p-6',\n className\n )}\n >\n {/* Icon */}\n {icon || <FileVideo className=\"w-16 h-16 text-muted-foreground\" />}\n\n {/* Title */}\n <p className=\"text-lg font-medium text-center\">{displayTitle}</p>\n\n {/* Description / File size */}\n {(description || fileSize) && (\n <p className=\"text-sm text-muted-foreground text-center\">\n {description || fileSize}\n </p>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 mt-2\">\n {/* Retry button */}\n {showRetry && retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={retry}\n className=\"gap-2\"\n >\n <RefreshCw className=\"w-4 h-4\" />\n Retry\n </Button>\n )}\n\n {/* Download button */}\n {downloadUrl && (\n <DownloadButton\n url={downloadUrl}\n filename={downloadFilename}\n variant=\"default\"\n size=\"sm\"\n >\n Download to view\n </DownloadButton>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Factory for common use cases\n// ============================================================================\n\nexport interface CreateVideoErrorFallbackOptions {\n /** Function to get download URL from source */\n getDownloadUrl?: (source: unknown) => string | undefined;\n /** Function to get filename from source */\n getFilename?: (source: unknown) => string | undefined;\n /** Function to get file size from source */\n getFileSize?: (source: unknown) => string | undefined;\n /** Show retry button */\n showRetry?: boolean;\n}\n\n/**\n * Factory to create error fallback function for VideoPlayer\n *\n * @example\n * const errorFallback = createVideoErrorFallback({\n * getDownloadUrl: (source) => source.downloadUrl,\n * getFilename: (source) => source.filename,\n * showRetry: true,\n * });\n *\n * <VideoPlayer source={source} errorFallback={errorFallback} />\n */\nexport function createVideoErrorFallback(\n options: CreateVideoErrorFallbackOptions\n): (props: ErrorFallbackProps, source?: unknown) => React.ReactNode {\n return (props: ErrorFallbackProps, source?: unknown) => (\n <VideoErrorFallback\n {...props}\n downloadUrl={options.getDownloadUrl?.(source)}\n downloadFilename={options.getFilename?.(source)}\n fileSize={options.getFileSize?.(source)}\n showRetry={options.showRetry}\n />\n );\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import { __name } from './chunk-CGILA3WO.mjs';
2
2
  import consola from 'consola';
3
+ import { cn, isDev } from '@djangocfg/ui-core/lib';
3
4
  import { ChevronDown, Plus, AlertCircle } from 'lucide-react';
4
5
  import { useState, useMemo, useCallback, useRef } from 'react';
5
6
  import { Label, Collapsible, CollapsibleTrigger, CollapsibleContent, Button, Alert, AlertTitle, AlertDescription, Input, Checkbox, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Switch, Slider } from '@djangocfg/ui-core/components';
6
7
  import Form from '@rjsf/core';
7
8
  import validator from '@rjsf/validator-ajv8';
8
- import { cn } from '@djangocfg/ui-core/lib';
9
9
  import { jsx, jsxs } from 'react/jsx-runtime';
10
10
  import { getUiOptions, getTemplate, getInputProps } from '@rjsf/utils';
11
11
  import { useAppT } from '@djangocfg/i18n';
@@ -267,19 +267,19 @@ function BaseInputTemplate(props) {
267
267
  __name(BaseInputTemplate, "BaseInputTemplate");
268
268
  function validateSchema(schema) {
269
269
  if (!schema || typeof schema !== "object") {
270
- {
270
+ if (isDev) {
271
271
  consola.error("[JsonSchemaForm] Invalid schema: must be an object", schema);
272
272
  }
273
273
  return null;
274
274
  }
275
275
  const hasValidStructure = schema.type || schema.properties || schema.$ref || schema.$schema;
276
276
  if (!hasValidStructure) {
277
- {
277
+ if (isDev) {
278
278
  consola.error("[JsonSchemaForm] Invalid schema: missing type, properties, $ref, or $schema", schema);
279
279
  }
280
280
  return null;
281
281
  }
282
- {
282
+ if (isDev) {
283
283
  consola.success("[JsonSchemaForm] Schema validated successfully:", {
284
284
  type: schema.type,
285
285
  title: schema.title,
@@ -951,27 +951,27 @@ function JsonSchemaForm(props) {
951
951
  ...restProps
952
952
  } = props;
953
953
  const validatedSchema = useMemo(() => {
954
- {
954
+ if (isDev) {
955
955
  consola.info("[JsonSchemaForm] Validating schema...", schema);
956
956
  }
957
957
  const result = validateSchema(schema);
958
- if (!result && true) {
958
+ if (!result && isDev) {
959
959
  consola.error("[JsonSchemaForm] Schema validation failed");
960
960
  }
961
961
  return result;
962
962
  }, [schema]);
963
963
  const normalizedFormData = useMemo(() => {
964
964
  if (!validatedSchema) {
965
- {
965
+ if (isDev) {
966
966
  consola.warn("[JsonSchemaForm] Cannot normalize formData - invalid schema");
967
967
  }
968
968
  return null;
969
969
  }
970
- {
970
+ if (isDev) {
971
971
  consola.info("[JsonSchemaForm] Normalizing formData...", formData);
972
972
  }
973
973
  const normalized = normalizeFormData(formData, validatedSchema);
974
- {
974
+ if (isDev) {
975
975
  consola.info("[JsonSchemaForm] Normalized formData:", normalized);
976
976
  }
977
977
  return normalized;
@@ -1053,5 +1053,5 @@ function JsonSchemaForm(props) {
1053
1053
  __name(JsonSchemaForm, "JsonSchemaForm");
1054
1054
 
1055
1055
  export { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, CheckboxWidget, ColorWidget, ErrorListTemplate, FieldTemplate, JsonSchemaForm, NumberWidget, ObjectFieldTemplate, SelectWidget, SliderWidget, SwitchWidget, TextWidget, getRequiredFields, hasRequiredFields, mergeDefaults, normalizeFormData, safeJsonParse, safeJsonStringify, validateRequiredFields, validateSchema };
1056
- //# sourceMappingURL=chunk-TKB5BDPN.mjs.map
1057
- //# sourceMappingURL=chunk-TKB5BDPN.mjs.map
1056
+ //# sourceMappingURL=chunk-JUGQNNDC.mjs.map
1057
+ //# sourceMappingURL=chunk-JUGQNNDC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/JsonForm/templates/FieldTemplate.tsx","../src/tools/JsonForm/templates/ObjectFieldTemplate.tsx","../src/tools/JsonForm/templates/ArrayFieldTemplate.tsx","../src/tools/JsonForm/templates/ArrayFieldItemTemplate.tsx","../src/tools/JsonForm/templates/ErrorListTemplate.tsx","../src/tools/JsonForm/templates/BaseInputTemplate.tsx","../src/tools/JsonForm/utils.ts","../src/tools/JsonForm/widgets/TextWidget.tsx","../src/tools/JsonForm/widgets/NumberWidget.tsx","../src/tools/JsonForm/widgets/CheckboxWidget.tsx","../src/tools/JsonForm/widgets/SelectWidget.tsx","../src/tools/JsonForm/widgets/SwitchWidget.tsx","../src/tools/JsonForm/widgets/ColorWidget.tsx","../src/tools/JsonForm/widgets/SliderWidget.tsx","../src/tools/JsonForm/JsonSchemaForm.tsx"],"names":["jsx","cn","jsxs","useMemo","useCallback","Input","t","hexValue","isDev","consola","Alert","AlertCircle","AlertDescription","Button"],"mappings":"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","file":"chunk-JUGQNNDC.mjs","sourcesContent":["\"use client\"\n\nimport React from 'react';\n\nimport { Label } from '@djangocfg/ui-core/components';\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { FieldTemplateProps } from '@rjsf/utils';\n\n/**\n * Field template for JSON Schema Form\n * Controls the layout and styling of individual form fields\n */\nexport function FieldTemplate(props: FieldTemplateProps) {\n const {\n id,\n classNames,\n style,\n label,\n help,\n required,\n description,\n errors,\n children,\n displayLabel,\n hidden,\n rawErrors,\n } = props;\n\n if (hidden) {\n return <div className=\"hidden\">{children}</div>;\n }\n\n const hasError = rawErrors && rawErrors.length > 0;\n\n return (\n <div\n className={cn('space-y-2', classNames)}\n style={style}\n >\n {displayLabel && label && (\n <Label htmlFor={id} className={cn(hasError && 'text-destructive')}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n )}\n\n {description && (\n <div className=\"text-sm text-muted-foreground\">{description}</div>\n )}\n\n <div>{children}</div>\n\n {errors && (\n <div className=\"text-sm text-destructive\">{errors}</div>\n )}\n\n {help && (\n <div className=\"text-sm text-muted-foreground\">{help}</div>\n )}\n </div>\n );\n}\n","\"use client\"\n\nimport { ChevronDown } from 'lucide-react';\nimport React, { useState } from 'react';\n\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@djangocfg/ui-core/components';\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { ObjectFieldTemplateProps } from '@rjsf/utils';\n\n/**\n * Object field template for JSON Schema Form\n *\n * Supports:\n * - Collapsible groups via ui:collapsible option\n * - Grid layout via ui:grid option\n * - Custom styling via ui:className\n *\n * Usage in uiSchema:\n * ```json\n * {\n * \"colors\": {\n * \"ui:collapsible\": true,\n * \"ui:collapsed\": false,\n * \"ui:grid\": 2\n * }\n * }\n * ```\n */\nexport function ObjectFieldTemplate(props: ObjectFieldTemplateProps) {\n const {\n title,\n description,\n properties,\n required,\n uiSchema,\n } = props;\n\n // UI options\n const isCollapsible = uiSchema?.['ui:collapsible'] === true;\n const defaultCollapsed = uiSchema?.['ui:collapsed'] === true;\n const gridCols = uiSchema?.['ui:grid'] as number | undefined;\n const className = uiSchema?.['ui:className'] as string | undefined;\n\n // Collapsible state\n const [isOpen, setIsOpen] = useState(!defaultCollapsed);\n\n // Check if this is root object (no title usually means root)\n const isRoot = !title;\n\n // Grid class based on columns\n const gridClass = gridCols\n ? `grid gap-4 grid-cols-${gridCols}`\n : 'space-y-4';\n\n // Content wrapper\n const content = (\n <div className={cn(gridClass, className)}>\n {properties.map((element) => (\n <div key={element.name} className=\"property-wrapper\">\n {element.content}\n </div>\n ))}\n </div>\n );\n\n // Root object - no wrapper\n if (isRoot) {\n return <div className=\"space-y-6\">{content}</div>;\n }\n\n // Collapsible group\n if (isCollapsible) {\n return (\n <Collapsible open={isOpen} onOpenChange={setIsOpen} className=\"space-y-2\">\n <CollapsibleTrigger className=\"flex w-full items-center justify-between rounded-lg border bg-muted/50 px-4 py-3 text-left hover:bg-muted transition-colors\">\n <div>\n <h3 className=\"text-sm font-semibold\">\n {title}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </h3>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>\n )}\n </div>\n <ChevronDown\n className={cn(\n 'h-4 w-4 text-muted-foreground transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"pl-1 pr-1 pt-2\">\n {content}\n </CollapsibleContent>\n </Collapsible>\n );\n }\n\n // Regular group with title\n return (\n <div className=\"space-y-4\">\n {title && (\n <div className=\"border-b pb-2\">\n <h3 className=\"text-sm font-semibold\">\n {title}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </h3>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n )}\n {content}\n </div>\n );\n}\n","\"use client\"\n\nimport { Plus } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\nimport { ArrayFieldTemplateProps } from '@rjsf/utils';\n\n/**\n * Array field template for JSON Schema Form\n * Renders array items with add/remove controls\n *\n * NOTE: In RJSF v6, `items` is an array of ReactElement (already rendered),\n * NOT an array of objects with {children, hasRemove, etc.}.\n * The actual rendering of each item (including remove buttons) is handled\n * by ArrayFieldItemTemplate.\n */\nexport function ArrayFieldTemplate(props: ArrayFieldTemplateProps) {\n const {\n title,\n items,\n canAdd,\n onAddClick,\n required,\n } = props;\n\n return (\n <div className=\"space-y-4\">\n {title && (\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">\n {title}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </h3>\n {canAdd && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={onAddClick}\n className=\"gap-2\"\n >\n <Plus className=\"h-4 w-4\" />\n Add Item\n </Button>\n )}\n </div>\n )}\n\n {/* In RJSF v6, items is already an array of ReactElements */}\n <div className=\"space-y-3\">\n {items}\n </div>\n\n {items.length === 0 && (\n <div className=\"text-center py-8 text-muted-foreground border-2 border-dashed rounded-md\">\n No items added yet.\n {canAdd && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onAddClick}\n className=\"mt-2 gap-2\"\n >\n <Plus className=\"h-4 w-4\" />\n Add First Item\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","\"use client\"\n\nimport React from 'react';\n\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { ArrayFieldItemTemplateProps, getTemplate, getUiOptions } from '@rjsf/utils';\n\n/**\n * Array field item template for JSON Schema Form\n * Renders individual array items with proper styling and action buttons\n *\n * In RJSF v6, this template is responsible for rendering each item in an array,\n * including the item content (children) and the action buttons (remove, move up/down, copy).\n */\nexport function ArrayFieldItemTemplate(props: ArrayFieldItemTemplateProps) {\n const {\n children,\n className,\n buttonsProps,\n hasToolbar,\n registry,\n uiSchema,\n } = props;\n\n const uiOptions = getUiOptions(uiSchema);\n const ArrayFieldItemButtonsTemplate = getTemplate(\n 'ArrayFieldItemButtonsTemplate',\n registry,\n uiOptions,\n );\n\n return (\n <div\n className={cn(\n 'flex gap-2 items-start p-4 rounded-md border bg-card',\n className\n )}\n >\n <div className=\"flex-1\">{children}</div>\n {hasToolbar && (\n <div className=\"flex items-center gap-1\">\n <ArrayFieldItemButtonsTemplate {...buttonsProps} />\n </div>\n )}\n </div>\n );\n}\n","\"use client\"\n\nimport { AlertCircle } from 'lucide-react';\nimport React from 'react';\n\nimport { Alert, AlertDescription, AlertTitle } from '@djangocfg/ui-core/components';\nimport { ErrorListProps } from '@rjsf/utils';\n\n/**\n * Error list template for JSON Schema Form\n * Displays validation errors at the top of the form\n */\nexport function ErrorListTemplate(props: ErrorListProps) {\n const { errors } = props;\n\n if (!errors || errors.length === 0) {\n return null;\n }\n\n return (\n <Alert variant=\"destructive\" className=\"mb-6\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertTitle>Validation Errors</AlertTitle>\n <AlertDescription>\n <ul className=\"list-disc list-inside space-y-1 mt-2\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm\">\n {error.stack}\n </li>\n ))}\n </ul>\n </AlertDescription>\n </Alert>\n );\n}\n","\"use client\"\n\nimport React, { ChangeEvent, FocusEvent, useCallback, useMemo } from 'react';\n\nimport { Input } from '@djangocfg/ui-core/components';\nimport { getInputProps, WidgetProps } from '@rjsf/utils';\n\n/**\n * Base input template for JSON Schema Form\n *\n * This template is CRITICAL for rendering primitive types (string, number)\n * inside arrays. Without it, array items with primitive types will render\n * as empty containers.\n *\n * RJSF uses this template for:\n * - Array items with primitive types (e.g., array of strings)\n * - Fields without explicit widget mapping\n * - All text-based widgets internally\n *\n * @see https://rjsf-team.github.io/react-jsonschema-form/docs/advanced-customization/custom-templates/#baseinputtemplate\n */\nexport function BaseInputTemplate(props: WidgetProps) {\n const {\n id,\n type,\n value,\n readonly,\n disabled,\n autofocus,\n onBlur,\n onFocus,\n onChange,\n options,\n schema,\n rawErrors,\n placeholder,\n } = props;\n\n // Get input props from RJSF utils (handles step, min, max, etc.)\n const inputProps = useMemo(() => {\n return getInputProps(schema, type, options);\n }, [schema, type, options]);\n\n // Safely convert value to string for input\n const safeValue = useMemo(() => {\n if (value === null || value === undefined) return '';\n return String(value);\n }, [value]);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n // Handle text change - transform empty strings based on schema type\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n const val = event.target.value;\n\n // Empty value handling\n if (val === '') {\n onChange(options?.emptyValue ?? '');\n return;\n }\n\n // Number type conversion\n if (inputProps.type === 'number' || schema.type === 'number' || schema.type === 'integer') {\n const num = Number(val);\n onChange(isNaN(num) ? val : num);\n return;\n }\n\n onChange(val);\n }, [onChange, inputProps.type, schema.type, options?.emptyValue]);\n\n const handleBlur = useCallback((event: FocusEvent<HTMLInputElement>) => {\n onBlur(id, event.target.value);\n }, [id, onBlur]);\n\n const handleFocus = useCallback((event: FocusEvent<HTMLInputElement>) => {\n onFocus(id, event.target.value);\n }, [id, onFocus]);\n\n // Determine input type\n const inputType = useMemo(() => {\n if (inputProps.type) return inputProps.type;\n if (schema.type === 'number' || schema.type === 'integer') return 'number';\n return 'text';\n }, [inputProps.type, schema.type]);\n\n return (\n <Input\n id={id}\n type={inputType}\n value={safeValue}\n disabled={disabled}\n readOnly={readonly}\n autoFocus={autofocus}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n placeholder={placeholder}\n className={hasError ? 'border-destructive' : ''}\n step={inputProps.step}\n min={inputProps.min}\n max={inputProps.max}\n />\n );\n}\n","import { isDev } from \"@djangocfg/ui-core/lib\";\nimport consola from 'consola';\n\nimport { RJSFSchema } from '@rjsf/utils';\n\n/**\n * Utility functions for JSON Schema Form\n */\n\n/**\n * Safely validates and normalizes JSON Schema\n * Ensures schema is valid before rendering\n */\nexport function validateSchema(schema: any): RJSFSchema | null {\n if (!schema || typeof schema !== 'object') {\n if (isDev) {\n consola.error('[JsonSchemaForm] Invalid schema: must be an object', schema);\n }\n return null;\n }\n\n // Basic schema validation - more permissive\n // Schema is valid if it has type OR properties OR $ref OR $schema\n const hasValidStructure =\n schema.type ||\n schema.properties ||\n schema.$ref ||\n schema.$schema;\n\n if (!hasValidStructure) {\n if (isDev) {\n consola.error('[JsonSchemaForm] Invalid schema: missing type, properties, $ref, or $schema', schema);\n }\n return null;\n }\n\n if (isDev) {\n consola.success('[JsonSchemaForm] Schema validated successfully:', {\n type: schema.type,\n title: schema.title,\n hasProperties: !!schema.properties,\n hasRequired: !!schema.required,\n });\n }\n\n return schema as RJSFSchema;\n}\n\n/**\n * Safely normalizes form data\n * Removes undefined values and ensures data structure matches schema\n */\nexport function normalizeFormData<T = any>(\n formData: any,\n schema: RJSFSchema\n): T {\n if (formData === null || formData === undefined) {\n return (schema.type === 'object' ? {} : schema.type === 'array' ? [] : null) as T;\n }\n\n // Deep clone to avoid mutations\n const normalized = JSON.parse(JSON.stringify(formData));\n\n // Remove undefined values recursively\n return removeUndefined(normalized) as T;\n}\n\n/**\n * Recursively removes undefined values from an object\n */\nfunction removeUndefined(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(removeUndefined).filter((item) => item !== undefined);\n }\n\n if (typeof obj === 'object') {\n const cleaned: any = {};\n for (const key in obj) {\n if (obj[key] !== undefined) {\n cleaned[key] = removeUndefined(obj[key]);\n }\n }\n return cleaned;\n }\n\n return obj;\n}\n\n/**\n * Merges schema defaults with form data\n */\nexport function mergeDefaults(\n formData: any,\n schema: RJSFSchema\n): any {\n if (!schema) return formData;\n\n const result = { ...formData };\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const prop = propSchema as RJSFSchema;\n\n // Apply default if field is missing\n if (result[key] === undefined && prop.default !== undefined) {\n result[key] = prop.default;\n }\n\n // Recursively merge nested objects\n if (prop.type === 'object' && result[key]) {\n result[key] = mergeDefaults(result[key], prop);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Safely parses JSON string with error handling\n */\nexport function safeJsonParse<T = any>(\n jsonString: string,\n fallback: T\n): T {\n try {\n return JSON.parse(jsonString);\n } catch (error) {\n consola.error('[JsonSchemaForm] JSON parse error:', error);\n return fallback;\n }\n}\n\n/**\n * Safely stringifies object to JSON\n */\nexport function safeJsonStringify(\n obj: any,\n pretty: boolean = true\n): string {\n try {\n return JSON.stringify(obj, null, pretty ? 2 : 0);\n } catch (error) {\n consola.error('[JsonSchemaForm] JSON stringify error:', error);\n return '{}';\n }\n}\n\n/**\n * Checks if schema has required fields\n */\nexport function hasRequiredFields(schema: RJSFSchema): boolean {\n return Array.isArray(schema.required) && schema.required.length > 0;\n}\n\n/**\n * Gets all required field paths from schema\n */\nexport function getRequiredFields(\n schema: RJSFSchema,\n prefix: string = ''\n): string[] {\n const required: string[] = [];\n\n if (schema.required && Array.isArray(schema.required)) {\n required.push(...schema.required.map((field) =>\n prefix ? `${prefix}.${field}` : field\n ));\n }\n\n if (schema.type === 'object' && schema.properties) {\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const prop = propSchema as RJSFSchema;\n const fieldPath = prefix ? `${prefix}.${key}` : key;\n required.push(...getRequiredFields(prop, fieldPath));\n }\n }\n\n return required;\n}\n\n/**\n * Validates form data against required fields\n */\nexport function validateRequiredFields(\n formData: any,\n schema: RJSFSchema\n): { valid: boolean; missing: string[] } {\n const requiredFields = getRequiredFields(schema);\n const missing: string[] = [];\n\n for (const field of requiredFields) {\n const value = getNestedValue(formData, field);\n if (value === undefined || value === null || value === '') {\n missing.push(field);\n }\n }\n\n return {\n valid: missing.length === 0,\n missing,\n };\n}\n\n/**\n * Gets nested value from object by path\n */\nfunction getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n}\n","\"use client\"\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Input } from '@djangocfg/ui-core/components';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Text input widget for JSON Schema Form\n * Handles string fields with optional textarea for multiline\n */\nexport function TextWidget(props: WidgetProps) {\n const {\n id,\n placeholder,\n required,\n disabled,\n readonly,\n autofocus,\n value,\n onChange,\n onBlur,\n onFocus,\n options,\n schema,\n rawErrors,\n } = props;\n\n // Memoize widget configuration\n const config = useMemo(() => ({\n isTextarea: options?.widget === 'textarea',\n rows: options?.rows || 3,\n emptyValue: options?.emptyValue,\n }), [options]);\n\n // Ensure value is always a string\n const safeValue = useMemo(() => {\n if (value === null || value === undefined) return '';\n return String(value);\n }, [value]);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newValue = event.target.value;\n onChange(newValue === '' ? config.emptyValue : newValue);\n }, [onChange, config.emptyValue]);\n\n const handleBlur = useCallback((event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n onBlur(id, event.target.value);\n }, [id, onBlur]);\n\n const handleFocus = useCallback((event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n onFocus(id, event.target.value);\n }, [id, onFocus]);\n\n if (config.isTextarea) {\n return (\n <textarea\n id={id}\n className={`flex min-h-[80px] w-full rounded-md border ${\n hasError ? 'border-destructive' : 'border-input'\n } bg-transparent px-3 py-2 text-base shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`}\n placeholder={placeholder}\n disabled={disabled || readonly}\n readOnly={readonly}\n autoFocus={autofocus}\n value={safeValue}\n required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n rows={config.rows}\n />\n );\n }\n\n return (\n <Input\n id={id}\n type=\"text\"\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readonly}\n autoFocus={autofocus}\n value={safeValue}\n required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n className={hasError ? 'border-destructive' : ''}\n />\n );\n}\n","\"use client\"\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Input } from '@djangocfg/ui-core/components';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Number input widget for JSON Schema Form\n * Handles integer and number fields\n */\nexport function NumberWidget(props: WidgetProps) {\n const {\n id,\n placeholder,\n required,\n disabled,\n readonly,\n autofocus,\n value,\n onChange,\n onBlur,\n onFocus,\n options,\n schema,\n rawErrors,\n } = props;\n\n // Memoize widget configuration\n const config = useMemo(() => ({\n isInteger: schema.type === 'integer',\n step: schema.type === 'integer' ? '1' : 'any',\n min: schema.minimum,\n max: schema.maximum,\n emptyValue: options?.emptyValue,\n }), [schema, options]);\n\n // Ensure value is valid number or empty string\n const safeValue = useMemo(() => {\n if (value === null || value === undefined || value === '') return '';\n if (typeof value === 'number' && !isNaN(value)) return value;\n return '';\n }, [value]);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n if (newValue === '') {\n onChange(config.emptyValue);\n } else {\n const parsedValue = config.isInteger\n ? parseInt(newValue, 10)\n : parseFloat(newValue);\n\n onChange(isNaN(parsedValue) ? config.emptyValue : parsedValue);\n }\n }, [onChange, config]);\n\n const handleBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n onBlur(id, event.target.value);\n }, [id, onBlur]);\n\n const handleFocus = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n onFocus(id, event.target.value);\n }, [id, onFocus]);\n\n return (\n <Input\n id={id}\n type=\"number\"\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readonly}\n autoFocus={autofocus}\n value={safeValue}\n required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n step={config.step}\n min={config.min}\n max={config.max}\n className={hasError ? 'border-destructive' : ''}\n />\n );\n}\n","import React from 'react';\n\nimport { Checkbox } from '@djangocfg/ui-core/components';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Checkbox widget for JSON Schema Form\n * Handles boolean fields\n */\nexport function CheckboxWidget(props: WidgetProps) {\n const {\n id,\n value,\n disabled,\n readonly,\n autofocus,\n onChange,\n onBlur,\n onFocus,\n } = props;\n\n const handleChange = (checked: boolean) => {\n onChange(checked);\n };\n\n return (\n <Checkbox\n id={id}\n checked={value || false}\n disabled={disabled || readonly}\n autoFocus={autofocus}\n onCheckedChange={handleChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n />\n );\n}\n","\"use client\"\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue\n} from '@djangocfg/ui-core/components';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Select dropdown widget for JSON Schema Form\n * Handles enum fields\n */\nexport function SelectWidget(props: WidgetProps) {\n const {\n id,\n options,\n value,\n required,\n disabled,\n readonly,\n autofocus,\n onChange,\n onBlur,\n onFocus,\n placeholder,\n rawErrors,\n } = props;\n\n // Safely extract and validate enum options\n const enumOptions = useMemo(() => {\n const opts = options?.enumOptions;\n if (!Array.isArray(opts)) return [];\n return opts.filter(opt => opt && (opt.value !== undefined));\n }, [options]);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n // Ensure value is always a string\n const safeValue = useMemo(() => {\n if (value === null || value === undefined) return '';\n return String(value);\n }, [value]);\n\n const handleChange = useCallback((newValue: string) => {\n onChange(newValue);\n onBlur(id, newValue);\n }, [onChange, onBlur, id]);\n\n // If no enum options, render a text input instead\n // This handles cases like anyOf/oneOf where RJSF might incorrectly use SelectWidget\n if (enumOptions.length === 0) {\n return (\n <input\n id={id}\n type=\"text\"\n value={safeValue}\n onChange={(e) => onChange(e.target.value)}\n onBlur={(e) => onBlur(id, e.target.value)}\n onFocus={(e) => onFocus(id, e.target.value)}\n disabled={disabled || readonly}\n readOnly={readonly}\n className={`flex h-10 w-full rounded-md border ${\n hasError ? 'border-destructive' : 'border-input'\n } bg-transparent px-3 py-2 text-base shadow-sm transition-colors placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`}\n placeholder={placeholder}\n />\n );\n }\n\n return (\n <Select\n value={safeValue}\n onValueChange={handleChange}\n disabled={disabled || readonly}\n required={required}\n >\n <SelectTrigger\n id={id}\n className={hasError ? 'border-destructive' : ''}\n autoFocus={autofocus}\n onFocus={() => onFocus(id, value)}\n >\n <SelectValue placeholder={placeholder || 'Select an option'} />\n </SelectTrigger>\n <SelectContent>\n {enumOptions.map((option: any) => (\n <SelectItem key={String(option.value)} value={String(option.value)}>\n {option.label || String(option.value)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n","import React from 'react';\n\nimport { Switch } from '@djangocfg/ui-core/components';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Switch toggle widget for JSON Schema Form\n * Alternative boolean input\n */\nexport function SwitchWidget(props: WidgetProps) {\n const {\n id,\n value,\n disabled,\n readonly,\n onChange,\n onBlur,\n onFocus,\n } = props;\n\n const handleChange = (checked: boolean) => {\n onChange(checked);\n };\n\n return (\n <Switch\n id={id}\n checked={value || false}\n disabled={disabled || readonly}\n onCheckedChange={handleChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n />\n );\n}\n","\"use client\"\n\nimport React, { useCallback, useMemo, useRef } from 'react';\n\nimport { Input } from '@djangocfg/ui-core/components';\nimport { useAppT } from '@djangocfg/i18n';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Color input widget for JSON Schema Form\n * Supports HSL format (h s% l%) and HEX format\n * Click on color box to open native color picker directly\n */\nexport function ColorWidget(props: WidgetProps) {\n const {\n id,\n placeholder,\n required,\n disabled,\n readonly,\n autofocus,\n value,\n onChange,\n onBlur,\n onFocus,\n options,\n rawErrors,\n } = props;\n\n const t = useAppT();\n const pickColorLabel = useMemo(() => t('tools.color.pick'), [t]);\n const colorInputRef = useRef<HTMLInputElement>(null);\n\n // Determine format from options or auto-detect from value\n const format = useMemo(() => {\n if (options?.format) return options.format as 'hsl' | 'hex';\n if (typeof value === 'string' && value.startsWith('#')) return 'hex';\n return 'hsl';\n }, [options?.format, value]);\n\n // Ensure value is always a string\n const safeValue = useMemo(() => {\n if (value === null || value === undefined) return '';\n return String(value);\n }, [value]);\n\n // Convert HSL string (like \"217 91% 60%\") to CSS hsl() value\n const hslToCss = useCallback((hslValue: string): string => {\n if (!hslValue) return 'transparent';\n if (hslValue.startsWith('#')) return hslValue;\n if (hslValue.startsWith('hsl')) return hslValue;\n // Format: \"h s% l%\" -> \"hsl(h, s%, l%)\"\n const parts = hslValue.split(' ');\n if (parts.length === 3) {\n return `hsl(${parts[0]}, ${parts[1]}, ${parts[2]})`;\n }\n return 'transparent';\n }, []);\n\n // Convert CSS color to preview color\n const previewColor = useMemo(() => {\n return hslToCss(safeValue);\n }, [safeValue, hslToCss]);\n\n // Convert hex to HSL string for internal storage\n const hexToHsl = useCallback((hex: string): string => {\n // Remove # if present\n hex = hex.replace('#', '');\n\n // Parse hex values\n const r = parseInt(hex.substring(0, 2), 16) / 255;\n const g = parseInt(hex.substring(2, 4), 16) / 255;\n const b = parseInt(hex.substring(4, 6), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n return `${Math.round(h * 360)} ${Math.round(s * 100)}% ${Math.round(l * 100)}%`;\n }, []);\n\n // Convert HSL to hex\n const hslToHex = useCallback((hslValue: string): string => {\n if (!hslValue || hslValue.startsWith('#')) return hslValue || '#000000';\n\n const parts = hslValue.split(' ');\n if (parts.length !== 3) return '#000000';\n\n const h = parseInt(parts[0]) / 360;\n const s = parseInt(parts[1].replace('%', '')) / 100;\n const l = parseInt(parts[2].replace('%', '')) / 100;\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1/6) return p + (q - p) * 6 * t;\n if (t < 1/2) return q;\n if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n };\n\n let r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n const toHex = (x: number) => {\n const hex = Math.round(x * 255).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }, []);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n onChange(newValue);\n }, [onChange]);\n\n const handleColorPickerChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const hexValue = event.target.value;\n if (format === 'hsl') {\n onChange(hexToHsl(hexValue));\n } else {\n onChange(hexValue);\n }\n }, [onChange, format, hexToHsl]);\n\n const handleBlur = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n onBlur(id, event.target.value);\n }, [id, onBlur]);\n\n const handleFocus = useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n onFocus(id, event.target.value);\n }, [id, onFocus]);\n\n // Get hex value for native color picker\n const hexValue = useMemo(() => {\n if (format === 'hex' || safeValue.startsWith('#')) {\n return safeValue || '#000000';\n }\n return hslToHex(safeValue);\n }, [safeValue, format, hslToHex]);\n\n // Click on color box opens native color picker\n const handleColorBoxClick = useCallback(() => {\n if (!disabled && !readonly) {\n colorInputRef.current?.click();\n }\n }, [disabled, readonly]);\n\n return (\n <div className=\"flex items-center gap-2\">\n {/* Color preview box - clicking opens native picker */}\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={handleColorBoxClick}\n disabled={disabled || readonly}\n className=\"h-10 w-10 shrink-0 rounded-md border-2 border-input cursor-pointer hover:border-ring focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n style={{ backgroundColor: previewColor }}\n aria-label={pickColorLabel}\n />\n {/* Hidden native color input */}\n <input\n ref={colorInputRef}\n type=\"color\"\n value={hexValue}\n onChange={handleColorPickerChange}\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer\"\n disabled={disabled || readonly}\n tabIndex={-1}\n />\n </div>\n\n {/* Text input for manual HSL/HEX entry */}\n <Input\n id={id}\n type=\"text\"\n placeholder={placeholder || (format === 'hsl' ? '217 91% 60%' : '#3b82f6')}\n disabled={disabled}\n readOnly={readonly}\n autoFocus={autofocus}\n value={safeValue}\n required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n className={`flex-1 font-mono text-sm ${hasError ? 'border-destructive' : ''}`}\n />\n </div>\n );\n}\n","\"use client\"\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Input, Slider } from '@djangocfg/ui-core/components';\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { WidgetProps } from '@rjsf/utils';\n\n/**\n * Slider widget for JSON Schema Form\n *\n * Supports:\n * - number/integer types\n * - min/max from schema\n * - step from schema or options\n * - unit suffix (e.g., \"rem\", \"px\", \"%\")\n * - optional text input for precise values\n *\n * Usage in uiSchema:\n * ```json\n * {\n * \"radius\": {\n * \"ui:widget\": \"slider\",\n * \"ui:options\": {\n * \"unit\": \"rem\",\n * \"showInput\": true,\n * \"step\": 0.125\n * }\n * }\n * }\n * ```\n */\nexport function SliderWidget(props: WidgetProps) {\n const {\n id,\n disabled,\n readonly,\n value,\n onChange,\n schema,\n options,\n rawErrors,\n } = props;\n\n // Extract configuration\n const config = useMemo(() => {\n const min = schema.minimum ?? options?.min ?? 0;\n const max = schema.maximum ?? options?.max ?? 100;\n const step = options?.step ?? (schema.type === 'integer' ? 1 : 0.1);\n const unit = options?.unit as string | undefined;\n const showInput = options?.showInput !== false; // default true\n\n return { min, max, step, unit, showInput };\n }, [schema, options]);\n\n // Parse value - handle string values like \"0.5rem\"\n const numericValue = useMemo(() => {\n if (value === null || value === undefined || value === '') {\n return config.min;\n }\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n // Extract number from string like \"0.5rem\"\n const parsed = parseFloat(value);\n return isNaN(parsed) ? config.min : parsed;\n }\n return config.min;\n }, [value, config.min]);\n\n const hasError = useMemo(() => {\n return rawErrors && rawErrors.length > 0;\n }, [rawErrors]);\n\n // Handle slider change\n const handleSliderChange = useCallback((values: number[]) => {\n const newValue = values[0];\n if (config.unit) {\n onChange(`${newValue}${config.unit}`);\n } else {\n onChange(newValue);\n }\n }, [onChange, config.unit]);\n\n // Handle text input change\n const handleInputChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = event.target.value;\n\n // If has unit, just store raw value with unit\n if (config.unit) {\n // Remove unit if user typed it, then add it back\n const cleanValue = inputValue.replace(config.unit, '').trim();\n const parsed = parseFloat(cleanValue);\n if (!isNaN(parsed)) {\n onChange(`${parsed}${config.unit}`);\n } else if (inputValue === '') {\n onChange(`${config.min}${config.unit}`);\n }\n } else {\n const parsed = parseFloat(inputValue);\n onChange(isNaN(parsed) ? config.min : parsed);\n }\n }, [onChange, config.unit, config.min]);\n\n // Display value with unit\n const displayValue = useMemo(() => {\n if (config.unit) {\n return `${numericValue}${config.unit}`;\n }\n return String(numericValue);\n }, [numericValue, config.unit]);\n\n return (\n <div className={cn('flex items-center gap-3', hasError && 'text-destructive')}>\n {/* Slider */}\n <Slider\n id={id}\n disabled={disabled || readonly}\n value={[numericValue]}\n onValueChange={handleSliderChange}\n min={config.min}\n max={config.max}\n step={config.step}\n className=\"flex-1\"\n />\n\n {/* Value input or display */}\n {config.showInput ? (\n <Input\n type=\"text\"\n value={displayValue}\n onChange={handleInputChange}\n disabled={disabled}\n readOnly={readonly}\n className={cn(\n 'w-20 text-center font-mono text-sm',\n hasError && 'border-destructive'\n )}\n />\n ) : (\n <span className=\"w-16 text-right font-mono text-sm text-muted-foreground\">\n {displayValue}\n </span>\n )}\n </div>\n );\n}\n","'use client';\n\nimport consola from 'consola';\nimport { isDev } from '@djangocfg/ui-core/lib';\nimport { AlertCircle } from 'lucide-react';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Alert, AlertDescription, Button } from '@djangocfg/ui-core/components';\nimport Form from '@rjsf/core';\nimport { RegistryWidgetsType } from '@rjsf/utils';\nimport validator from '@rjsf/validator-ajv8';\n\nimport {\n ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ErrorListTemplate, FieldTemplate,\n ObjectFieldTemplate\n} from './templates';\nimport { JsonSchemaFormProps } from './types';\nimport { normalizeFormData, validateSchema } from './utils';\nimport {\n CheckboxWidget, ColorWidget, NumberWidget, SelectWidget, SliderWidget, SwitchWidget, TextWidget\n} from './widgets';\n\n/**\n * JSON Schema Form Component\n *\n * A fully-featured form generator that creates forms from JSON Schema.\n * Built on top of react-jsonschema-form with custom widgets and templates\n * using @djangocfg/ui components.\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * required: ['name'],\n * properties: {\n * name: { type: 'string', title: 'Name' },\n * age: { type: 'number', title: 'Age' },\n * active: { type: 'boolean', title: 'Active' }\n * }\n * };\n *\n * <JsonSchemaForm\n * schema={schema}\n * onSubmit={(data) => console.log(data.formData)}\n * />\n * ```\n */\nexport function JsonSchemaForm<T = any>(props: JsonSchemaFormProps<T>) {\n const {\n schema,\n uiSchema,\n formData,\n onSubmit,\n onChange,\n onError,\n showErrorList = 'top',\n liveValidate = false,\n disabled = false,\n readonly = false,\n className,\n showSubmitButton = true,\n submitButtonText = 'Submit',\n ...restProps\n } = props;\n\n // Validate and normalize schema before render\n const validatedSchema = useMemo(() => {\n if (isDev) {\n consola.info('[JsonSchemaForm] Validating schema...', schema);\n }\n const result = validateSchema(schema);\n if (!result && isDev) {\n consola.error('[JsonSchemaForm] Schema validation failed');\n }\n return result;\n }, [schema]);\n\n // Normalize form data before render\n const normalizedFormData = useMemo(() => {\n if (!validatedSchema) {\n if (isDev) {\n consola.warn('[JsonSchemaForm] Cannot normalize formData - invalid schema');\n }\n return null;\n }\n if (isDev) {\n consola.info('[JsonSchemaForm] Normalizing formData...', formData);\n }\n const normalized = normalizeFormData<T>(formData, validatedSchema);\n if (isDev) {\n consola.info('[JsonSchemaForm] Normalized formData:', normalized);\n }\n return normalized;\n }, [formData, validatedSchema]);\n\n // Memoize widgets mapping to prevent recreation on every render\n // IMPORTANT: Widget keys must match RJSF's expected names:\n // - For type: string -> uses 'TextWidget' or 'text'\n // - For type: number/integer -> uses 'updown' or 'range'\n // - For type: boolean -> uses 'checkbox' or 'select'\n // - For enum fields -> uses 'SelectWidget' or 'select'\n const widgets: RegistryWidgetsType = useMemo(() => ({\n // Standard widget names (PascalCase) - used by RJSF internally\n TextWidget,\n NumberWidget,\n CheckboxWidget,\n SelectWidget,\n SwitchWidget,\n ColorWidget,\n SliderWidget,\n // Lowercase aliases - for uiSchema 'ui:widget' references\n text: TextWidget,\n number: NumberWidget,\n checkbox: CheckboxWidget,\n select: SelectWidget,\n switch: SwitchWidget,\n color: ColorWidget,\n slider: SliderWidget,\n range: SliderWidget, // alias\n }), []);\n\n // Memoize templates to prevent recreation on every render\n const templates = useMemo(() => ({\n FieldTemplate,\n ObjectFieldTemplate,\n ArrayFieldTemplate,\n ArrayFieldItemTemplate,\n ErrorListTemplate,\n BaseInputTemplate,\n }), []);\n\n // Memoize callbacks\n const handleSubmit = useCallback((data: any) => {\n if (onSubmit) {\n // Ensure clean data on submit\n const cleanData = {\n ...data,\n formData: normalizeFormData(data.formData, validatedSchema!),\n };\n onSubmit(cleanData);\n }\n }, [onSubmit, validatedSchema]);\n\n const handleChange = useCallback((data: any) => {\n if (onChange) {\n onChange(data);\n }\n }, [onChange]);\n\n const handleError = useCallback((errors: any) => {\n if (onError) {\n onError(errors);\n }\n }, [onError]);\n\n // Early return if schema is invalid\n if (!validatedSchema) {\n return (\n <div className={className}>\n <Alert variant=\"destructive\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n Invalid schema provided. Please check the schema format.\n </AlertDescription>\n </Alert>\n </div>\n );\n }\n\n return (\n <div className={className}>\n <Form\n schema={validatedSchema}\n uiSchema={uiSchema}\n formData={normalizedFormData}\n validator={validator}\n widgets={widgets}\n templates={templates}\n onSubmit={handleSubmit}\n onChange={handleChange}\n onError={handleError}\n showErrorList={showErrorList}\n liveValidate={liveValidate}\n disabled={disabled}\n readonly={readonly}\n {...restProps}\n >\n {showSubmitButton && (\n <div className=\"mt-6 flex gap-2\">\n <Button type=\"submit\" disabled={disabled}>\n {submitButtonText}\n </Button>\n </div>\n )}\n </Form>\n </div>\n );\n}\n"]}