@mieweb/ui 0.3.0-dev.72 → 0.3.0-dev.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ag-grid.cjs +31 -21
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.js +31 -21
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/bluehive.css +5 -5
- package/dist/brands/mieweb.css +5 -5
- package/dist/brands/ozwell.css +5 -5
- package/dist/brands/webchart.css +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs → chunk-2EPJ5SMX.cjs} +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs.map → chunk-2EPJ5SMX.cjs.map} +1 -1
- package/dist/{chunk-QDGZBDBI.cjs → chunk-2LF7PSSX.cjs} +3 -3
- package/dist/{chunk-QDGZBDBI.cjs.map → chunk-2LF7PSSX.cjs.map} +1 -1
- package/dist/{chunk-O43QBXRX.js → chunk-43GBCUSQ.js} +3 -3
- package/dist/{chunk-O43QBXRX.js.map → chunk-43GBCUSQ.js.map} +1 -1
- package/dist/{chunk-MOULJE34.js → chunk-4DMZAVB2.js} +6 -6
- package/dist/chunk-4DMZAVB2.js.map +1 -0
- package/dist/{chunk-OJ64Q3A5.js → chunk-5PUEQH2L.js} +3 -3
- package/dist/{chunk-OJ64Q3A5.js.map → chunk-5PUEQH2L.js.map} +1 -1
- package/dist/{chunk-VKTQQOUH.js → chunk-5U7IIMKH.js} +4 -4
- package/dist/{chunk-VKTQQOUH.js.map → chunk-5U7IIMKH.js.map} +1 -1
- package/dist/{chunk-TSZRR2ZK.cjs → chunk-67QT2WYS.cjs} +3 -3
- package/dist/{chunk-TSZRR2ZK.cjs.map → chunk-67QT2WYS.cjs.map} +1 -1
- package/dist/{chunk-LXHPW2ZF.cjs → chunk-7BARESXI.cjs} +3 -3
- package/dist/{chunk-LXHPW2ZF.cjs.map → chunk-7BARESXI.cjs.map} +1 -1
- package/dist/{chunk-BBQZNIB4.js → chunk-AL6ASCL6.js} +9 -9
- package/dist/{chunk-BBQZNIB4.js.map → chunk-AL6ASCL6.js.map} +1 -1
- package/dist/{chunk-AUXHRAID.cjs → chunk-CHMMHFOW.cjs} +9 -9
- package/dist/{chunk-AUXHRAID.cjs.map → chunk-CHMMHFOW.cjs.map} +1 -1
- package/dist/{chunk-JDI45GEY.js → chunk-CWDQ7OPJ.js} +3 -3
- package/dist/{chunk-JDI45GEY.js.map → chunk-CWDQ7OPJ.js.map} +1 -1
- package/dist/{chunk-Z4HZ35KX.cjs → chunk-DEZ7XSTG.cjs} +3 -3
- package/dist/{chunk-Z4HZ35KX.cjs.map → chunk-DEZ7XSTG.cjs.map} +1 -1
- package/dist/{chunk-PRTQVKDW.cjs → chunk-DT4CHRTJ.cjs} +391 -390
- package/dist/chunk-DT4CHRTJ.cjs.map +1 -0
- package/dist/{chunk-QMQE4PDD.cjs → chunk-E3GBBYAO.cjs} +6 -6
- package/dist/{chunk-QMQE4PDD.cjs.map → chunk-E3GBBYAO.cjs.map} +1 -1
- package/dist/{chunk-IMNLYVXJ.cjs → chunk-EUUQVDXX.cjs} +6 -6
- package/dist/{chunk-IMNLYVXJ.cjs.map → chunk-EUUQVDXX.cjs.map} +1 -1
- package/dist/{chunk-TF5OZDFU.js → chunk-FMGX2AM2.js} +6 -6
- package/dist/{chunk-TF5OZDFU.js.map → chunk-FMGX2AM2.js.map} +1 -1
- package/dist/{chunk-5NSURWMM.js → chunk-FYEK4RZ3.js} +4 -4
- package/dist/{chunk-5NSURWMM.js.map → chunk-FYEK4RZ3.js.map} +1 -1
- package/dist/{chunk-DLLVXNAQ.js → chunk-G7P5X2F4.js} +5 -5
- package/dist/{chunk-DLLVXNAQ.js.map → chunk-G7P5X2F4.js.map} +1 -1
- package/dist/{chunk-QEAIFTUL.cjs → chunk-HT3SXDFF.cjs} +5 -5
- package/dist/{chunk-QEAIFTUL.cjs.map → chunk-HT3SXDFF.cjs.map} +1 -1
- package/dist/{chunk-DCDXOT3A.js → chunk-IEVAVY43.js} +3 -3
- package/dist/{chunk-DCDXOT3A.js.map → chunk-IEVAVY43.js.map} +1 -1
- package/dist/{chunk-EMMQPDOY.cjs → chunk-KLLGX5O3.cjs} +4 -4
- package/dist/{chunk-EMMQPDOY.cjs.map → chunk-KLLGX5O3.cjs.map} +1 -1
- package/dist/{chunk-ND75VHB7.cjs → chunk-MIGLLTTD.cjs} +4 -4
- package/dist/{chunk-ND75VHB7.cjs.map → chunk-MIGLLTTD.cjs.map} +1 -1
- package/dist/{chunk-3DM6LMZG.js → chunk-MUYTGWGE.js} +4 -3
- package/dist/chunk-MUYTGWGE.js.map +1 -0
- package/dist/{chunk-VQW36LLX.cjs → chunk-NVHAQOHH.cjs} +3 -3
- package/dist/{chunk-VQW36LLX.cjs.map → chunk-NVHAQOHH.cjs.map} +1 -1
- package/dist/{chunk-4ASPCSWT.js → chunk-PU6ZC4GI.js} +3 -3
- package/dist/{chunk-4ASPCSWT.js.map → chunk-PU6ZC4GI.js.map} +1 -1
- package/dist/{chunk-JE4AH2TZ.cjs → chunk-Q2EWNXIB.cjs} +6 -6
- package/dist/chunk-Q2EWNXIB.cjs.map +1 -0
- package/dist/{chunk-PLIK3DN6.cjs → chunk-QASIWBXU.cjs} +4 -3
- package/dist/chunk-QASIWBXU.cjs.map +1 -0
- package/dist/{chunk-V2O636JO.js → chunk-QBFNONJD.js} +5 -5
- package/dist/{chunk-V2O636JO.js.map → chunk-QBFNONJD.js.map} +1 -1
- package/dist/{chunk-YR365F2H.cjs → chunk-QG7CJH4O.cjs} +3 -3
- package/dist/{chunk-YR365F2H.cjs.map → chunk-QG7CJH4O.cjs.map} +1 -1
- package/dist/{chunk-ZGSPFVGL.cjs → chunk-QNTUYH6G.cjs} +4 -4
- package/dist/{chunk-ZGSPFVGL.cjs.map → chunk-QNTUYH6G.cjs.map} +1 -1
- package/dist/{chunk-YN3ZIUYC.js → chunk-TRZXK57D.js} +6 -6
- package/dist/{chunk-YN3ZIUYC.js.map → chunk-TRZXK57D.js.map} +1 -1
- package/dist/{chunk-NDHW3ZRF.js → chunk-VCO2IZOG.js} +3 -3
- package/dist/{chunk-NDHW3ZRF.js.map → chunk-VCO2IZOG.js.map} +1 -1
- package/dist/{chunk-7XWPUWSL.js → chunk-WFS6R2F5.js} +3 -3
- package/dist/{chunk-7XWPUWSL.js.map → chunk-WFS6R2F5.js.map} +1 -1
- package/dist/{chunk-LAR4H7ZG.js → chunk-WORZLEUZ.js} +391 -390
- package/dist/chunk-WORZLEUZ.js.map +1 -0
- package/dist/{chunk-RCMF6KZA.js → chunk-YTZPVEIO.js} +3 -3
- package/dist/{chunk-RCMF6KZA.js.map → chunk-YTZPVEIO.js.map} +1 -1
- package/dist/{chunk-6EN6ZIW3.js → chunk-YY23MK3V.js} +4 -4
- package/dist/{chunk-6EN6ZIW3.js.map → chunk-YY23MK3V.js.map} +1 -1
- package/dist/{chunk-QXJMKJJV.cjs → chunk-ZKFVGYBK.cjs} +3 -3
- package/dist/{chunk-QXJMKJJV.cjs.map → chunk-ZKFVGYBK.cjs.map} +1 -1
- package/dist/{chunk-Z2ABQA5Z.cjs → chunk-ZRI6OXQD.cjs} +3 -3
- package/dist/{chunk-Z2ABQA5Z.cjs.map → chunk-ZRI6OXQD.cjs.map} +1 -1
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/AudioRecorder/index.cjs +6 -6
- package/dist/components/AudioRecorder/index.js +1 -1
- package/dist/components/Card/index.cjs +15 -15
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +4 -4
- package/dist/components/CountryCodeDropdown/index.js +1 -1
- package/dist/components/DateInput/index.cjs +2 -2
- package/dist/components/DateInput/index.js +1 -1
- package/dist/components/Dropdown/index.cjs +7 -7
- package/dist/components/Dropdown/index.js +1 -1
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +3 -3
- package/dist/components/PhoneInput/index.js +1 -1
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +1 -1
- package/dist/components/Radio/index.cjs +4 -4
- package/dist/components/Radio/index.js +1 -1
- package/dist/components/SchedulePicker/index.cjs +10 -10
- package/dist/components/SchedulePicker/index.js +1 -1
- package/dist/components/Select/index.cjs +3 -3
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/Spinner/index.cjs +5 -5
- package/dist/components/Spinner/index.js +1 -1
- package/dist/components/Switch/index.cjs +4 -4
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Tabs/index.cjs +7 -7
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Text/index.cjs +4 -4
- package/dist/components/Text/index.js +1 -1
- package/dist/index.cjs +737 -766
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +453 -482
- package/dist/index.js.map +1 -1
- package/dist/styles/init.css +24 -11
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-3DM6LMZG.js.map +0 -1
- package/dist/chunk-JE4AH2TZ.cjs.map +0 -1
- package/dist/chunk-LAR4H7ZG.js.map +0 -1
- package/dist/chunk-MOULJE34.js.map +0 -1
- package/dist/chunk-PLIK3DN6.cjs.map +0 -1
- package/dist/chunk-PRTQVKDW.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AudioPlayer/AudioPlayer.tsx"],"names":["AudioPlayer"],"mappings":"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","file":"chunk-WORZLEUZ.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type AudioPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\n/** Ref handle for controlling AudioPlayer programmatically */\nexport interface AudioPlayerRef {\n /** The underlying container element */\n container: HTMLDivElement | null;\n /** Seek to a specific time in seconds */\n seekTo: (time: number) => void;\n /** Start playback */\n play: () => void;\n /** Pause playback */\n pause: () => void;\n /** Get current playback time in seconds */\n getCurrentTime: () => number;\n /** Get total duration in seconds */\n getDuration: () => number;\n}\n\nexport interface AudioPlayerProps extends VariantProps<\n typeof audioPlayerVariants\n> {\n /** Audio source URL */\n src: string;\n /** Title/label for the audio (used for accessibility and display) */\n title?: string;\n /** Callback when playback state changes */\n onStateChange?: (state: AudioPlayerState) => void;\n /** Callback when playback ends */\n onEnded?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Callback when time updates during playback */\n onTimeUpdate?: (currentTime: number, duration: number) => void;\n /** Whether to show the time display */\n showTime?: boolean;\n /** Whether to show the duration (for inline variant) */\n showDuration?: boolean;\n /** Waveform color (for waveform variant) */\n waveColor?: string;\n /** Progress/played waveform color (for waveform variant) */\n progressColor?: string;\n /** Height of the waveform (for waveform variant) */\n waveformHeight?: number;\n /** Whether to show hover cursor on waveform for click-to-seek preview (for waveform variant) */\n showWaveformHoverCursor?: boolean;\n /** Color of the hover cursor line (for waveform variant) */\n waveformCursorColor?: string;\n /** Whether the player is disabled */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** Playback speed options */\n playbackRates?: number[];\n /** Whether to show playback speed control */\n showPlaybackRate?: boolean;\n /** Whether to preload audio (set to false for lists with many items) */\n preload?: boolean;\n /** Fallback duration in seconds to display before audio metadata is loaded */\n fallbackDuration?: number;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst audioPlayerVariants = cva('', {\n variants: {\n variant: {\n inline: 'inline-flex items-center gap-2',\n compact: [\n 'flex items-center gap-3 p-3',\n 'rounded-lg border border-border',\n 'bg-card text-card-foreground',\n ],\n waveform: [\n 'flex flex-col gap-3 p-4',\n 'rounded-xl border border-border',\n 'bg-card text-card-foreground',\n ],\n },\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n },\n compoundVariants: [\n { variant: 'compact', size: 'sm', class: 'p-2 gap-2' },\n { variant: 'compact', size: 'lg', class: 'p-4 gap-4' },\n { variant: 'waveform', size: 'sm', class: 'p-3 gap-2' },\n { variant: 'waveform', size: 'lg', class: 'p-5 gap-4' },\n ],\n defaultVariants: {\n variant: 'compact',\n size: 'md',\n },\n});\n\nconst playButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full transition-all duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'active:scale-95',\n ],\n {\n variants: {\n variant: {\n inline: [\n 'text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100',\n 'dark:text-neutral-400 dark:hover:text-neutral-200 dark:hover:bg-neutral-800',\n ],\n compact: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:bg-primary-800',\n ],\n waveform: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:bg-primary-800',\n ],\n },\n size: {\n sm: 'h-7 w-7',\n md: 'h-9 w-9',\n lg: 'h-11 w-11',\n },\n },\n defaultVariants: {\n variant: 'compact',\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function formatTime(seconds: number): string {\n if (!isFinite(seconds) || isNaN(seconds)) return '0:00';\n const mins = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${mins}:${secs.toString().padStart(2, '0')}`;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction PlayIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n );\n}\n\nfunction PauseIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\" />\n </svg>\n );\n}\n\nfunction SpinnerIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn('animate-spin', className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Progress Bar Component (for compact variant)\n// ============================================================================\n\ninterface ProgressBarProps {\n currentTime: number;\n duration: number;\n onSeek: (time: number) => void;\n disabled?: boolean;\n}\n\nfunction ProgressBar({\n currentTime,\n duration,\n onSeek,\n disabled,\n}: ProgressBarProps) {\n const progressRef = React.useRef<HTMLDivElement>(null);\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled || !progressRef.current || duration <= 0) return;\n const rect = progressRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const percentage = x / rect.width;\n onSeek(percentage * duration);\n };\n\n return (\n <div\n ref={progressRef}\n data-slot=\"audio-player-progress\"\n role=\"slider\"\n aria-label=\"Audio progress\"\n aria-valuemin={0}\n aria-valuemax={duration}\n aria-valuenow={currentTime}\n aria-valuetext={`${formatTime(currentTime)} of ${formatTime(duration)}`}\n tabIndex={disabled ? -1 : 0}\n className={cn(\n 'relative h-1.5 flex-1 cursor-pointer rounded-full bg-neutral-200 dark:bg-neutral-700',\n disabled && 'cursor-not-allowed opacity-50'\n )}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (disabled) return;\n const step = duration * 0.05; // 5% steps\n if (e.key === 'ArrowRight') {\n onSeek(Math.min(currentTime + step, duration));\n } else if (e.key === 'ArrowLeft') {\n onSeek(Math.max(currentTime - step, 0));\n }\n }}\n >\n <div\n className=\"bg-primary-800 absolute inset-y-0 left-0 rounded-full transition-all\"\n style={{ width: `${progress}%` }}\n />\n <div\n className=\"bg-primary-800 absolute top-1/2 h-3 w-3 -translate-y-1/2 rounded-full shadow-sm transition-all\"\n style={{ left: `calc(${progress}% - 6px)` }}\n />\n </div>\n );\n}\n\n// ============================================================================\n// Waveform Component (lazy-loaded WaveSurfer)\n// ============================================================================\n\n/** Methods exposed by Waveform via ref */\nexport interface WaveformMethods {\n seekTo: (time: number) => void;\n play: () => void;\n pause: () => void;\n getCurrentTime: () => number;\n getDuration: () => number;\n}\n\ninterface WaveformProps {\n src: string;\n isPlaying: boolean;\n playbackRate?: number;\n onReady: (duration: number) => void;\n onTimeUpdate: (time: number, duration: number) => void;\n onFinish: () => void;\n onSeek: (time: number) => void;\n waveColor?: string;\n progressColor?: string;\n height?: number;\n showHoverCursor?: boolean;\n onHoverTimeChange?: (time: number | null) => void;\n cursorColor?: string;\n /** Ref to expose waveform control methods */\n waveformRef?: React.MutableRefObject<WaveformMethods | null>;\n}\n\nfunction Waveform({\n src,\n isPlaying,\n playbackRate = 1,\n onReady,\n onTimeUpdate,\n onFinish,\n onSeek,\n waveColor,\n progressColor,\n height = 64,\n showHoverCursor = false,\n waveformRef,\n onHoverTimeChange,\n cursorColor = 'var(--color-red-500, rgb(239, 68, 68))',\n}: WaveformProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wavesurferRef = React.useRef<any>(null);\n const [isLoaded, setIsLoaded] = React.useState(false);\n const [isHovering, setIsHovering] = React.useState(false);\n const [hoverPosition, setHoverPosition] = React.useState(0);\n\n // Expose methods via ref for external control\n React.useEffect(() => {\n if (waveformRef) {\n waveformRef.current = {\n seekTo: (time: number) => {\n if (wavesurferRef.current && isLoaded) {\n const duration = wavesurferRef.current.getDuration();\n if (duration > 0) {\n const clampedTime = Math.min(Math.max(time, 0), duration);\n const progress = clampedTime / duration;\n wavesurferRef.current.seekTo(progress);\n }\n }\n },\n play: () => {\n if (wavesurferRef.current && isLoaded) {\n wavesurferRef.current.play();\n }\n },\n pause: () => {\n if (wavesurferRef.current && isLoaded) {\n wavesurferRef.current.pause();\n }\n },\n getCurrentTime: () => {\n return wavesurferRef.current?.getCurrentTime?.() ?? 0;\n },\n getDuration: () => {\n return wavesurferRef.current?.getDuration?.() ?? 0;\n },\n };\n }\n return () => {\n if (waveformRef) {\n waveformRef.current = null;\n }\n };\n }, [waveformRef, isLoaded]);\n\n // Initialize WaveSurfer\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const initWaveSurfer = async () => {\n try {\n const WaveSurfer = (await import('wavesurfer.js')).default;\n\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n }\n\n wavesurferRef.current = WaveSurfer.create({\n container: containerRef.current!,\n waveColor: waveColor || '#d1d5db',\n progressColor: progressColor || 'var(--color-primary-600, #2563eb)',\n cursorColor: 'transparent',\n barWidth: 2,\n barGap: 2,\n barRadius: 2,\n height,\n normalize: true,\n interact: !showHoverCursor,\n });\n\n const emitTimeUpdate = () => {\n onTimeUpdate(\n wavesurferRef.current.getCurrentTime(),\n wavesurferRef.current.getDuration()\n );\n };\n\n wavesurferRef.current.on('ready', () => {\n setIsLoaded(true);\n const duration = wavesurferRef.current.getDuration();\n onReady(duration);\n onTimeUpdate(wavesurferRef.current.getCurrentTime(), duration);\n });\n\n wavesurferRef.current.on('timeupdate', emitTimeUpdate);\n wavesurferRef.current.on('audioprocess', emitTimeUpdate);\n\n wavesurferRef.current.on('seeking', () => {\n emitTimeUpdate();\n });\n\n if (!showHoverCursor) {\n wavesurferRef.current.on('interaction', () => {\n onSeek(wavesurferRef.current.getCurrentTime());\n });\n }\n\n wavesurferRef.current.on('finish', () => {\n onFinish();\n });\n\n wavesurferRef.current.load(src);\n } catch (error) {\n console.error('Failed to load WaveSurfer:', error);\n }\n };\n\n setIsLoaded(false);\n initWaveSurfer();\n\n return () => {\n if (wavesurferRef.current) {\n wavesurferRef.current.destroy();\n wavesurferRef.current = null;\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [src, showHoverCursor]);\n\n // Handle play/pause\n React.useEffect(() => {\n if (!wavesurferRef.current || !isLoaded) return;\n\n if (isPlaying) {\n wavesurferRef.current.play();\n } else {\n wavesurferRef.current.pause();\n }\n }, [isPlaying, isLoaded]);\n\n // Handle playback rate changes\n React.useEffect(() => {\n if (!wavesurferRef.current || !isLoaded) return;\n wavesurferRef.current.setPlaybackRate(playbackRate);\n }, [playbackRate, isLoaded]);\n\n // Hover cursor handlers\n const handleMouseMove = showHoverCursor\n ? (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current || !wavesurferRef.current || !isLoaded)\n return;\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(e.clientX - rect.left, rect.width));\n const percentage = x / rect.width;\n const duration = wavesurferRef.current.getDuration();\n setHoverPosition(percentage * 100);\n onHoverTimeChange?.(percentage * duration);\n }\n : undefined;\n\n const handleMouseEnter = showHoverCursor\n ? () => setIsHovering(true)\n : undefined;\n\n const handleMouseLeave = showHoverCursor\n ? () => {\n setIsHovering(false);\n setHoverPosition(0);\n onHoverTimeChange?.(null);\n }\n : undefined;\n\n const handleClick = showHoverCursor\n ? (e: React.MouseEvent<HTMLDivElement>) => {\n if (!containerRef.current || !wavesurferRef.current || !isLoaded)\n return;\n const rect = containerRef.current.getBoundingClientRect();\n const x = Math.max(0, Math.min(e.clientX - rect.left, rect.width));\n const percentage = x / rect.width;\n const duration = wavesurferRef.current.getDuration();\n const time = duration * percentage;\n wavesurferRef.current.seekTo(percentage);\n onSeek(time);\n onTimeUpdate(time, duration);\n onHoverTimeChange?.(null);\n }\n : undefined;\n\n const handleKeyDown = showHoverCursor\n ? (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!wavesurferRef.current || !isLoaded) return;\n const duration = wavesurferRef.current.getDuration();\n const currentTime = wavesurferRef.current.getCurrentTime();\n const step = duration * 0.05; // 5% steps\n\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n const newTime = Math.min(currentTime + step, duration);\n wavesurferRef.current.seekTo(newTime / duration);\n onSeek(newTime);\n onTimeUpdate(newTime, duration);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n const newTime = Math.max(currentTime - step, 0);\n wavesurferRef.current.seekTo(newTime / duration);\n onSeek(newTime);\n onTimeUpdate(newTime, duration);\n }\n }\n : undefined;\n\n return (\n <div\n ref={containerRef}\n data-slot=\"audio-player-waveform\"\n role={showHoverCursor ? 'slider' : undefined}\n aria-label={showHoverCursor ? 'Audio progress' : undefined}\n aria-valuemin={showHoverCursor ? 0 : undefined}\n aria-valuemax={\n showHoverCursor && wavesurferRef.current\n ? wavesurferRef.current.getDuration()\n : undefined\n }\n aria-valuenow={\n showHoverCursor && wavesurferRef.current\n ? wavesurferRef.current.getCurrentTime()\n : undefined\n }\n tabIndex={showHoverCursor ? 0 : undefined}\n className={cn(\n 'relative w-full rounded-lg bg-neutral-100 dark:bg-neutral-800',\n showHoverCursor && 'cursor-pointer',\n !isLoaded && 'animate-pulse'\n )}\n style={{ height }}\n onMouseMove={handleMouseMove}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Hover cursor line */}\n {showHoverCursor && isHovering && isLoaded && (\n <div\n className=\"pointer-events-none absolute top-0 bottom-0 z-10 w-0.5\"\n style={{ left: `${hoverPosition}%`, backgroundColor: cursorColor }}\n />\n )}\n </div>\n );\n}\n\n// ============================================================================\n// Main AudioPlayer Component\n// ============================================================================\n\n/**\n * A versatile audio player component with multiple display variants.\n *\n * @example\n * ```tsx\n * // Inline - minimal, just play button and duration\n * <AudioPlayer src=\"/audio.mp3\" variant=\"inline\" showDuration />\n *\n * // Compact - play button, progress bar, and time\n * <AudioPlayer src=\"/audio.mp3\" variant=\"compact\" showTime />\n *\n * // Waveform - full visualization with WaveSurfer\n * <AudioPlayer src=\"/audio.mp3\" variant=\"waveform\" showTime />\n *\n * // With ref for programmatic control\n * const playerRef = useRef<AudioPlayerRef>(null);\n * <AudioPlayer ref={playerRef} src=\"/audio.mp3\" variant=\"waveform\" />\n * // Then: playerRef.current?.seekTo(30); playerRef.current?.play();\n * ```\n */\nconst AudioPlayer = React.forwardRef<AudioPlayerRef, AudioPlayerProps>(\n function AudioPlayer(\n {\n src,\n title,\n variant = 'compact',\n size = 'md',\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n showTime = true,\n showDuration = true,\n waveColor,\n progressColor,\n waveformHeight = 64,\n showWaveformHoverCursor = true,\n waveformCursorColor,\n disabled = false,\n className,\n 'aria-label': ariaLabel,\n playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2],\n showPlaybackRate = false,\n /** Whether to preload audio (set to false for lists with many items) */\n preload = false,\n /** Fallback duration in seconds to display before audio is loaded */\n fallbackDuration,\n },\n ref\n ) {\n const [state, setState] = React.useState<AudioPlayerState>('idle');\n const [currentTime, setCurrentTime] = React.useState(0);\n const [duration, setDuration] = React.useState(0);\n const [playbackRate, setPlaybackRate] = React.useState(1);\n const [audioInitialized, setAudioInitialized] = React.useState(false);\n const [hoverTime, setHoverTime] = React.useState<number | null>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const audioRef = React.useRef<globalThis.HTMLAudioElement | null>(null);\n const waveformMethodsRef = React.useRef<WaveformMethods | null>(null);\n\n const isPlaying = state === 'playing';\n const isLoading = state === 'loading';\n const displayDuration = duration > 0 ? duration : (fallbackDuration ?? 0);\n\n // Update state helper\n const updateState = React.useCallback(\n (newState: AudioPlayerState) => {\n setState(newState);\n onStateChange?.(newState);\n },\n [onStateChange]\n );\n\n // Initialize audio element (for non-waveform variants)\n const initAudio = React.useCallback(() => {\n if (variant === 'waveform' || audioInitialized) return null;\n\n const audio = new globalThis.Audio(src);\n audioRef.current = audio;\n setAudioInitialized(true);\n\n audio.addEventListener('loadstart', () => updateState('loading'));\n audio.addEventListener('canplay', () => {\n updateState('idle');\n });\n audio.addEventListener('loadedmetadata', () => {\n setDuration(audio.duration);\n onTimeUpdate?.(audio.currentTime, audio.duration);\n });\n audio.addEventListener('timeupdate', () => {\n setCurrentTime(audio.currentTime);\n onTimeUpdate?.(audio.currentTime, audio.duration);\n });\n audio.addEventListener('ended', () => {\n updateState('idle');\n setCurrentTime(0);\n onEnded?.();\n });\n audio.addEventListener('error', () => {\n updateState('error');\n onError?.(new Error('Failed to load audio'));\n });\n\n return audio;\n }, [\n src,\n variant,\n audioInitialized,\n updateState,\n onTimeUpdate,\n onEnded,\n onError,\n ]);\n\n // Expose methods via ref for external control\n React.useImperativeHandle(\n ref,\n () => ({\n get container() {\n return containerRef.current;\n },\n seekTo: (time: number) => {\n if (variant === 'waveform') {\n waveformMethodsRef.current?.seekTo(time);\n } else {\n // Lazily initialize audio if not yet created\n if (!audioRef.current) {\n initAudio();\n }\n if (audioRef.current) {\n audioRef.current.currentTime = time;\n }\n }\n },\n play: () => {\n if (variant === 'waveform') {\n if (waveformMethodsRef.current) {\n waveformMethodsRef.current.play();\n updateState('playing');\n }\n } else {\n // Lazily initialize audio if not yet created\n if (!audioRef.current) {\n initAudio();\n }\n if (audioRef.current) {\n audioRef.current.play().catch((error) => {\n updateState('error');\n onError?.(error);\n });\n updateState('playing');\n }\n }\n },\n pause: () => {\n if (variant === 'waveform') {\n if (waveformMethodsRef.current) {\n waveformMethodsRef.current.pause();\n updateState('paused');\n }\n } else if (audioRef.current) {\n audioRef.current.pause();\n updateState('paused');\n }\n },\n getCurrentTime: () => {\n if (variant === 'waveform') {\n return waveformMethodsRef.current?.getCurrentTime() ?? 0;\n }\n return audioRef.current?.currentTime ?? 0;\n },\n getDuration: () => {\n if (variant === 'waveform') {\n return waveformMethodsRef.current?.getDuration() ?? 0;\n }\n const rawDuration = audioRef.current?.duration;\n return Number.isFinite(rawDuration) ? rawDuration! : 0;\n },\n }),\n [variant, initAudio, updateState, onError]\n );\n\n // Auto-initialize if preload is true\n React.useEffect(() => {\n if (preload && !audioInitialized && variant !== 'waveform') {\n initAudio();\n }\n }, [preload, audioInitialized, variant, initAudio]);\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n if (audioRef.current) {\n audioRef.current.pause();\n audioRef.current.src = '';\n }\n };\n }, []);\n\n // Handle playback rate changes\n React.useEffect(() => {\n if (audioRef.current) {\n audioRef.current.playbackRate = playbackRate;\n }\n }, [playbackRate]);\n\n const handlePlay = React.useCallback(() => {\n if (disabled) return;\n\n // Waveform variant uses WaveSurfer for playback - just toggle state\n if (variant === 'waveform') {\n if (isLoading) return;\n updateState(isPlaying ? 'paused' : 'playing');\n return;\n }\n\n // Lazy initialize audio on first play\n if (!audioInitialized && !isLoading) {\n const audio = initAudio();\n if (audio) {\n updateState('loading');\n audio.addEventListener(\n 'canplay',\n () => {\n audio.play().catch((error) => {\n updateState('error');\n onError?.(error);\n });\n updateState('playing');\n },\n { once: true }\n );\n }\n return;\n }\n\n if (isLoading) return;\n\n if (isPlaying) {\n if (audioRef.current) {\n audioRef.current.pause();\n }\n updateState('paused');\n } else {\n if (audioRef.current) {\n audioRef.current.play().catch((error) => {\n updateState('error');\n onError?.(error);\n });\n updateState('playing');\n }\n }\n }, [\n disabled,\n variant,\n audioInitialized,\n isLoading,\n isPlaying,\n initAudio,\n updateState,\n onError,\n ]);\n\n const handleSeek = React.useCallback(\n (time: number) => {\n if (audioRef.current) {\n audioRef.current.currentTime = time;\n setCurrentTime(time);\n onTimeUpdate?.(time, audioRef.current.duration);\n }\n },\n [onTimeUpdate]\n );\n\n // Waveform callbacks\n const handleWaveformReady = React.useCallback(\n (dur: number) => {\n setDuration(dur);\n setState('idle');\n onTimeUpdate?.(currentTime, dur);\n },\n [currentTime, onTimeUpdate]\n );\n\n const handleWaveformTimeUpdate = React.useCallback(\n (time: number, dur: number) => {\n setCurrentTime(time);\n if (dur > 0) {\n setDuration(dur);\n }\n onTimeUpdate?.(time, dur);\n },\n [onTimeUpdate]\n );\n\n const handleWaveformFinish = React.useCallback(() => {\n updateState('idle');\n setCurrentTime(0);\n onEnded?.();\n }, [updateState, onEnded]);\n\n const handleWaveformSeek = React.useCallback((time: number) => {\n setCurrentTime(time);\n }, []);\n\n const handleHoverTimeChange = React.useCallback((time: number | null) => {\n setHoverTime(time);\n }, []);\n\n const iconSize =\n size === 'sm' ? 'h-3.5 w-3.5' : size === 'lg' ? 'h-5 w-5' : 'h-4 w-4';\n\n const getAriaLabel = () => {\n if (ariaLabel) return ariaLabel;\n if (title) return `${isPlaying ? 'Pause' : 'Play'} ${title}`;\n return isPlaying ? 'Pause audio' : 'Play audio';\n };\n\n const renderPlayButton = () => (\n <button\n type=\"button\"\n data-slot=\"audio-player-play-btn\"\n onClick={handlePlay}\n disabled={disabled || isLoading}\n className={cn(playButtonVariants({ variant, size }))}\n aria-label={getAriaLabel()}\n aria-pressed={isPlaying}\n >\n {isLoading ? (\n <SpinnerIcon className={iconSize} />\n ) : isPlaying ? (\n <PauseIcon className={iconSize} />\n ) : (\n <PlayIcon className={iconSize} />\n )}\n </button>\n );\n\n const renderTime = (useHoverTime = false) => {\n if (!showTime) return null;\n const displayTime =\n useHoverTime && hoverTime !== null ? hoverTime : currentTime;\n const isShowingHoverTime = useHoverTime && hoverTime !== null;\n return (\n <span\n data-slot=\"audio-player-time\"\n className={cn(\n 'font-mono text-xs tabular-nums',\n isShowingHoverTime\n ? 'text-primary-800 dark:text-primary-400'\n : 'text-muted-foreground'\n )}\n >\n {formatTime(displayTime)} / {formatTime(displayDuration)}\n </span>\n );\n };\n\n const renderPlaybackRateControl = () => {\n if (!showPlaybackRate) return null;\n return (\n <select\n data-slot=\"audio-player-rate\"\n value={playbackRate}\n onChange={(e) => setPlaybackRate(Number(e.target.value))}\n className=\"rounded border border-neutral-200 bg-transparent px-1 py-0.5 text-xs dark:border-neutral-700\"\n aria-label=\"Playback speed\"\n >\n {playbackRates.map((rate) => (\n <option key={rate} value={rate}>\n {rate}x\n </option>\n ))}\n </select>\n );\n };\n\n // ============================================================================\n // Inline Variant\n // ============================================================================\n if (variant === 'inline') {\n return (\n <div\n ref={containerRef}\n data-slot=\"audio-player\"\n data-variant=\"inline\"\n className={cn(audioPlayerVariants({ variant, size }), className)}\n >\n {renderPlayButton()}\n {title && (\n <span\n data-slot=\"audio-player-title\"\n className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\"\n >\n {title}\n </span>\n )}\n {showDuration && displayDuration > 0 && (\n <span\n data-slot=\"audio-player-duration\"\n className=\"font-mono text-xs text-neutral-500 tabular-nums dark:text-neutral-400\"\n >\n {isPlaying\n ? formatTime(currentTime)\n : formatTime(displayDuration)}\n </span>\n )}\n </div>\n );\n }\n\n // Compact Variant\n // ============================================================================\n if (variant === 'compact') {\n return (\n <div\n ref={containerRef}\n data-slot=\"audio-player\"\n data-variant=\"compact\"\n className={cn(audioPlayerVariants({ variant, size }), className)}\n >\n {renderPlayButton()}\n <ProgressBar\n currentTime={currentTime}\n duration={displayDuration}\n onSeek={handleSeek}\n disabled={disabled}\n />\n {renderTime()}\n {renderPlaybackRateControl()}\n </div>\n );\n }\n\n // ============================================================================\n // Waveform Variant\n // ============================================================================\n return (\n <div\n ref={containerRef}\n data-slot=\"audio-player\"\n data-variant=\"waveform\"\n className={cn(audioPlayerVariants({ variant, size }), className)}\n >\n {title && (\n <span\n data-slot=\"audio-player-title\"\n className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300\"\n >\n {title}\n </span>\n )}\n <Waveform\n src={src}\n isPlaying={isPlaying}\n playbackRate={playbackRate}\n onReady={handleWaveformReady}\n onTimeUpdate={handleWaveformTimeUpdate}\n onFinish={handleWaveformFinish}\n onSeek={handleWaveformSeek}\n waveColor={waveColor}\n progressColor={progressColor}\n height={waveformHeight}\n showHoverCursor={showWaveformHoverCursor}\n onHoverTimeChange={handleHoverTimeChange}\n cursorColor={waveformCursorColor}\n waveformRef={waveformMethodsRef}\n />\n <div\n data-slot=\"audio-player-controls\"\n className=\"flex items-center gap-3\"\n >\n {renderPlayButton()}\n <div className=\"flex flex-1 items-center justify-between\">\n {renderTime(true)}\n {renderPlaybackRateControl()}\n </div>\n </div>\n </div>\n );\n }\n);\n\nAudioPlayer.displayName = 'AudioPlayer';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { AudioPlayer, audioPlayerVariants, playButtonVariants, ProgressBar };\n"]}
|
|
@@ -8,7 +8,7 @@ var textVariants = cva("", {
|
|
|
8
8
|
variant: {
|
|
9
9
|
default: "text-foreground",
|
|
10
10
|
muted: "text-muted-foreground",
|
|
11
|
-
primary: "text-primary-
|
|
11
|
+
primary: "text-primary-800 dark:text-primary-400",
|
|
12
12
|
destructive: "text-destructive",
|
|
13
13
|
success: "text-success",
|
|
14
14
|
warning: "text-warning"
|
|
@@ -71,5 +71,5 @@ var SmallMuted = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
71
71
|
SmallMuted.displayName = "SmallMuted";
|
|
72
72
|
|
|
73
73
|
export { SmallMuted, Text, textVariants };
|
|
74
|
-
//# sourceMappingURL=chunk-
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
74
|
+
//# sourceMappingURL=chunk-YTZPVEIO.js.map
|
|
75
|
+
//# sourceMappingURL=chunk-YTZPVEIO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Text/Text.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,YAAA,GAAe,IAAI,EAAA,EAAI;AAAA,EAC3B,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,iBAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,OAAA,EAAS,wCAAA;AAAA,MACT,WAAA,EAAa,kBAAA;AAAA,MACb,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,UAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ,aAAA;AAAA,MACR,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,KAAA,EAAO;AAAA;AAEX,CAAC;AAgCD,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,SAAA,GAAY,GAAA;AAAA,IAChB,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACE,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,aAAa,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,UAC7C,QAAA,IAAY,UAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAMnB,IAAM,aAAmB,KAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,EAAG,GAAA,yBACzB,IAAA,EAAA,EAAK,GAAA,EAAU,SAAQ,OAAA,EAAQ,IAAA,EAAK,MAAK,SAAA,EAAuB,GAAG,OAAO,CAC5E;AAED,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Text/Text.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,YAAA,GAAe,IAAI,EAAA,EAAI;AAAA,EAC3B,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,iBAAA;AAAA,MACT,KAAA,EAAO,uBAAA;AAAA,MACP,OAAA,EAAS,wCAAA;AAAA,MACT,WAAA,EAAa,kBAAA;AAAA,MACb,OAAA,EAAS,cAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,UAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ,aAAA;AAAA,MACR,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,KAAA,EAAO;AAAA;AAEX,CAAC;AAgCD,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACjB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,SAAA,GAAY,GAAA;AAAA,IAChB,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,uBACE,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,aAAa,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,UAC7C,QAAA,IAAY,UAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAMnB,IAAM,aAAmB,KAAA,CAAA,UAAA,CAGvB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,EAAG,GAAA,yBACzB,IAAA,EAAA,EAAK,GAAA,EAAU,SAAQ,OAAA,EAAQ,IAAA,EAAK,MAAK,SAAA,EAAuB,GAAG,OAAO,CAC5E;AAED,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-YTZPVEIO.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst textVariants = cva('', {\n variants: {\n variant: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n primary: 'text-primary-800 dark:text-primary-400',\n destructive: 'text-destructive',\n success: 'text-success',\n warning: 'text-warning',\n },\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n '3xl': 'text-3xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'base',\n weight: 'normal',\n align: 'left',\n },\n});\n\ntype TextElement =\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6';\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textVariants> {\n /** HTML element to render as */\n as?: TextElement;\n /** Truncate text with ellipsis */\n truncate?: boolean;\n}\n\n/**\n * A flexible text component for consistent typography.\n *\n * @example\n * ```tsx\n * <Text variant=\"muted\" size=\"sm\">Helper text</Text>\n * <Text as=\"h1\" size=\"3xl\" weight=\"bold\">Page Title</Text>\n * <Text variant=\"destructive\">Error message</Text>\n * ```\n */\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n className,\n variant,\n size,\n weight,\n align,\n as: Component = 'p',\n truncate,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n // @ts-expect-error - ref type is complex due to polymorphic component\n ref={ref}\n className={cn(\n textVariants({ variant, size, weight, align }),\n truncate && 'truncate',\n className\n )}\n {...props}\n />\n );\n }\n);\n\nText.displayName = 'Text';\n\n/**\n * Small muted text, useful for helper text and descriptions.\n * This is a convenience component equivalent to <Text variant=\"muted\" size=\"sm\">\n */\nconst SmallMuted = React.forwardRef<\n HTMLElement,\n Omit<TextProps, 'variant' | 'size'>\n>(({ className, ...props }, ref) => (\n <Text ref={ref} variant=\"muted\" size=\"sm\" className={className} {...props} />\n));\n\nSmallMuted.displayName = 'SmallMuted';\n\nexport { Text, SmallMuted, textVariants };\n"]}
|
|
@@ -24,7 +24,7 @@ var progressBarFillVariants = cva(
|
|
|
24
24
|
{
|
|
25
25
|
variants: {
|
|
26
26
|
variant: {
|
|
27
|
-
default: "bg-primary-
|
|
27
|
+
default: "bg-primary-800",
|
|
28
28
|
success: "bg-green-500",
|
|
29
29
|
warning: "bg-yellow-500",
|
|
30
30
|
danger: "bg-red-500"
|
|
@@ -111,7 +111,7 @@ function Progress({
|
|
|
111
111
|
className: cn(
|
|
112
112
|
progressBarFillVariants({ variant, animated, striped }),
|
|
113
113
|
indeterminate && "w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]",
|
|
114
|
-
!striped && variant === "default" && "bg-primary-
|
|
114
|
+
!striped && variant === "default" && "bg-primary-800",
|
|
115
115
|
!striped && variant === "success" && "bg-green-500",
|
|
116
116
|
!striped && variant === "warning" && "bg-yellow-500",
|
|
117
117
|
!striped && variant === "danger" && "bg-red-500"
|
|
@@ -226,5 +226,5 @@ function CircularProgress({
|
|
|
226
226
|
CircularProgress.displayName = "CircularProgress";
|
|
227
227
|
|
|
228
228
|
export { CircularProgress, Progress, circularProgressVariants, progressBarFillVariants, progressBarTrackVariants };
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
230
|
-
//# sourceMappingURL=chunk-
|
|
229
|
+
//# sourceMappingURL=chunk-YY23MK3V.js.map
|
|
230
|
+
//# sourceMappingURL=chunk-YY23MK3V.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":[],"mappings":";;;;;AAQA,IAAM,wBAAA,GAA2B,GAAA;AAAA,EAC/B,CAAC,wEAAwE,CAAA;AAAA,EACzE;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI,KAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,IAAM,uBAAA,GAA0B,GAAA;AAAA,EAC9B,CAAC,0DAA0D,CAAA;AAAA,EAC3D;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EAAS,cAAA;AAAA,QACT,OAAA,EAAS,eAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM;AAAA,UACJ,kBAAA;AAAA,UACA,8CAAA;AAAA,UACA,uBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS;AAAA;AACX;AAEJ;AAoCA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,GAAA,GAAM,GAAA;AAAA,EACN,KAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,WAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,EAAkB;AAChB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAK,QAAQ,GAAA,GAAO,GAAA,EAAK,CAAC,CAAA,EAAG,GAAG,CAAA;AACjE,EAAA,MAAM,aAAmB,KAAA,CAAA,KAAA,EAAM;AAE/B,EAAA,MAAM,YAAA,GAAe,WAAA,GACjB,WAAA,CAAY,KAAA,EAAO,GAAG,IACtB,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA,CAAA;AAE7B,EAAA,uBACE,IAAA,CAAC,SAAI,WAAA,EAAU,UAAA,EAAW,WAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA,EACvD,QAAA,EAAA;AAAA,IAAA,CAAA,KAAA,IAAS,SAAA,qBACT,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,oBAAA;AAAA,QACV,SAAA,EAAU,0CAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,KAAA,oBACC,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,gBAAA;AAAA,cACV,EAAA,EAAI,GAAG,UAAU,CAAA,MAAA,CAAA;AAAA,cACjB,SAAA,EAAU,qCAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED,SAAA,IAAa,CAAC,aAAA,oBACb,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,gBAAA;AAAA,cACV,SAAA,EAAU,+BAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAAA,oBAEF,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,gBAAA;AAAA,QACV,IAAA,EAAK,aAAA;AAAA,QACL,eAAA,EAAe,gBAAgB,MAAA,GAAY,KAAA;AAAA,QAC3C,eAAA,EAAe,CAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QACf,iBAAA,EAAiB,KAAA,GAAQ,CAAA,EAAG,UAAU,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,QACjD,YAAA,EAAY,CAAC,KAAA,GAAQ,UAAA,GAAa,MAAA;AAAA,QAClC,WAAW,EAAA,CAAG,wBAAA,CAAyB,EAAE,IAAA,EAAM,CAAC,CAAA;AAAA,QAEhD,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,uBAAA,CAAwB,EAAE,OAAA,EAAS,QAAA,EAAU,SAAS,CAAA;AAAA,cACtD,aAAA,IACE,yDAAA;AAAA,cACF,CAAC,OAAA,IAAW,OAAA,KAAY,SAAA,IAAa,gBAAA;AAAA,cACrC,CAAC,OAAA,IAAW,OAAA,KAAY,SAAA,IAAa,cAAA;AAAA,cACrC,CAAC,OAAA,IAAW,OAAA,KAAY,SAAA,IAAa,eAAA;AAAA,cACrC,CAAC,OAAA,IAAW,OAAA,KAAY,QAAA,IAAY;AAAA,aACtC;AAAA,YACA,OAAO,aAAA,GAAgB,MAAA,GAAY,EAAE,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA,CAAA,CAAA;AAAI;AAAA;AAC/D;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AAMvB,IAAM,wBAAA,GAA2B,GAAA,CAAI,CAAC,sBAAsB,CAAA,EAAG;AAAA,EAC7D,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC;AAkCD,SAAS,gBAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,GAAA,GAAM,GAAA;AAAA,EACN,OAAA,GAAU,SAAA;AAAA,EACV,IAAA;AAAA,EACA,WAAA,GAAc,CAAA;AAAA,EACd,SAAA,GAAY,KAAA;AAAA,EACZ,aAAA,GAAgB,KAAA;AAAA,EAChB;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAK,QAAQ,GAAA,GAAO,GAAA,EAAK,CAAC,CAAA,EAAG,GAAG,CAAA;AAGjE,EAAA,MAAM,OAAA,GAAU,EAAE,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAG;AACjD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,IAAQ,IAAI,CAAA;AACpC,EAAA,MAAM,MAAA,GAAA,CAAU,UAAU,WAAA,IAAe,CAAA;AACzC,EAAA,MAAM,aAAA,GAAgB,CAAA,GAAI,IAAA,CAAK,EAAA,GAAK,MAAA;AACpC,EAAA,MAAM,MAAA,GAAS,aAAA,GAAiB,UAAA,GAAa,GAAA,GAAO,aAAA;AAEpD,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,oBAAA;AAAA,IACT,OAAA,EAAS,kBAAA;AAAA,IACT,OAAA,EAAS,mBAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,IAAA,EAAK,aAAA;AAAA,MACL,eAAA,EAAe,gBAAgB,MAAA,GAAY,KAAA;AAAA,MAC3C,eAAA,EAAe,CAAA;AAAA,MACf,eAAA,EAAe,GAAA;AAAA,MACf,YAAA,EAAW,UAAA;AAAA,MACX,WAAW,EAAA,CAAG,wBAAA,CAAyB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAE3D,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,aAAA,IAAiB,cAAc,CAAA;AAAA,YACrE,KAAA,EAAO,OAAA;AAAA,YACP,MAAA,EAAQ,OAAA;AAAA,YAGR,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,4CAAA;AAAA,kBACV,IAAA,EAAK,MAAA;AAAA,kBACL,WAAA;AAAA,kBACA,IAAI,OAAA,GAAU,CAAA;AAAA,kBACd,IAAI,OAAA,GAAU,CAAA;AAAA,kBACd,CAAA,EAAG;AAAA;AAAA,eACL;AAAA,8BAEA,GAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,cAAc,OAAO,CAAA;AAAA,oBACrB;AAAA,mBACF;AAAA,kBACA,IAAA,EAAK,MAAA;AAAA,kBACL,WAAA;AAAA,kBACA,aAAA,EAAc,OAAA;AAAA,kBACd,IAAI,OAAA,GAAU,CAAA;AAAA,kBACd,IAAI,OAAA,GAAU,CAAA;AAAA,kBACd,CAAA,EAAG,MAAA;AAAA,kBACH,eAAA,EAAiB,aAAA;AAAA,kBACjB,gBAAA,EAAkB,aAAA,GAAgB,aAAA,GAAgB,IAAA,GAAO;AAAA;AAAA;AAC3D;AAAA;AAAA,SACF;AAAA,QACC,SAAA,IAAa,CAAC,aAAA,oBACb,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,yBAAA;AAAA,YACV,SAAA,EAAU,uFAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA;AAC1B;AAAA;AAAA,GAEJ;AAEJ;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-6EN6ZIW3.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Progress Bar Variants\n// ============================================================================\n\nconst progressBarTrackVariants = cva(\n ['w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700'],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst progressBarFillVariants = cva(\n ['h-full rounded-full transition-all duration-300 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-500',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n },\n animated: {\n true: 'animate-pulse',\n false: '',\n },\n striped: {\n true: [\n 'bg-gradient-to-r',\n 'from-transparent via-white/20 to-transparent',\n 'bg-[length:1rem_100%]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n animated: false,\n striped: false,\n },\n }\n);\n\n// ============================================================================\n// Progress Bar Component\n// ============================================================================\n\nexport interface ProgressProps\n extends\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Label for the progress bar */\n label?: string;\n /** Show the percentage value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number, max: number) => string;\n /** Additional class name */\n className?: string;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n}\n\n/**\n * A progress bar component for showing completion status.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={75} showValue label=\"Upload progress\" />\n * <Progress value={30} variant=\"success\" striped />\n * ```\n */\nfunction Progress({\n value,\n max = 100,\n label,\n showValue = false,\n formatValue,\n size,\n variant,\n animated,\n striped,\n className,\n indeterminate = false,\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const progressId = React.useId();\n\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`;\n\n return (\n <div data-slot=\"progress\" className={cn('w-full', className)}>\n {(label || showValue) && (\n <div\n data-slot=\"progress-label-row\"\n className=\"mb-1.5 flex items-center justify-between\"\n >\n {label && (\n <label\n data-slot=\"progress-label\"\n id={`${progressId}-label`}\n className=\"text-foreground text-sm font-medium\"\n >\n {label}\n </label>\n )}\n {showValue && !indeterminate && (\n <span\n data-slot=\"progress-value\"\n className=\"text-muted-foreground text-sm\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n <div\n data-slot=\"progress-track\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-labelledby={label ? `${progressId}-label` : undefined}\n aria-label={!label ? 'Progress' : undefined}\n className={cn(progressBarTrackVariants({ size }))}\n >\n <div\n data-slot=\"progress-fill\"\n className={cn(\n progressBarFillVariants({ variant, animated, striped }),\n indeterminate &&\n 'w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]',\n !striped && variant === 'default' && 'bg-primary-500',\n !striped && variant === 'success' && 'bg-green-500',\n !striped && variant === 'warning' && 'bg-yellow-500',\n !striped && variant === 'danger' && 'bg-red-500'\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = 'Progress';\n\n// ============================================================================\n// Circular Progress Variants\n// ============================================================================\n\nconst circularProgressVariants = cva(['relative inline-flex'], {\n variants: {\n size: {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Circular Progress Component\n// ============================================================================\n\nexport interface CircularProgressProps extends VariantProps<\n typeof circularProgressVariants\n> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Stroke width */\n strokeWidth?: number;\n /** Show the percentage value in the center */\n showValue?: boolean;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A circular progress indicator component.\n *\n * @example\n * ```tsx\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={50} variant=\"success\" size=\"lg\" />\n * ```\n */\nfunction CircularProgress({\n value,\n max = 100,\n variant = 'default',\n size,\n strokeWidth = 4,\n showValue = false,\n indeterminate = false,\n className,\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // SVG calculations\n const sizeMap = { sm: 32, md: 48, lg: 64, xl: 96 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const variantColors = {\n default: 'stroke-primary-500',\n success: 'stroke-green-500',\n warning: 'stroke-yellow-500',\n danger: 'stroke-red-500',\n };\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label=\"Progress\"\n className={cn(circularProgressVariants({ size }), className)}\n >\n <svg\n className={cn('-rotate-90 transform', indeterminate && 'animate-spin')}\n width={svgSize}\n height={svgSize}\n >\n {/* Background track */}\n <circle\n className=\"stroke-neutral-200 dark:stroke-neutral-700\"\n fill=\"none\"\n strokeWidth={strokeWidth}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n />\n {/* Progress fill */}\n <circle\n className={cn(\n variantColors[variant],\n 'transition-all duration-300 ease-out'\n )}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n data-slot=\"circular-progress-value\"\n className=\"text-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\"\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n}\n\nCircularProgress.displayName = 'CircularProgress';\n\nexport {\n Progress,\n CircularProgress,\n progressBarTrackVariants,\n progressBarFillVariants,\n circularProgressVariants,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Progress/Progress.tsx"],"names":[],"mappings":"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","file":"chunk-YY23MK3V.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Progress Bar Variants\n// ============================================================================\n\nconst progressBarTrackVariants = cva(\n ['w-full overflow-hidden rounded-full bg-neutral-200 dark:bg-neutral-700'],\n {\n variants: {\n size: {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nconst progressBarFillVariants = cva(\n ['h-full rounded-full transition-all duration-300 ease-out'],\n {\n variants: {\n variant: {\n default: 'bg-primary-800',\n success: 'bg-green-500',\n warning: 'bg-yellow-500',\n danger: 'bg-red-500',\n },\n animated: {\n true: 'animate-pulse',\n false: '',\n },\n striped: {\n true: [\n 'bg-gradient-to-r',\n 'from-transparent via-white/20 to-transparent',\n 'bg-[length:1rem_100%]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n variant: 'default',\n animated: false,\n striped: false,\n },\n }\n);\n\n// ============================================================================\n// Progress Bar Component\n// ============================================================================\n\nexport interface ProgressProps\n extends\n VariantProps<typeof progressBarTrackVariants>,\n VariantProps<typeof progressBarFillVariants> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Label for the progress bar */\n label?: string;\n /** Show the percentage value */\n showValue?: boolean;\n /** Format the displayed value */\n formatValue?: (value: number, max: number) => string;\n /** Additional class name */\n className?: string;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n}\n\n/**\n * A progress bar component for showing completion status.\n *\n * @example\n * ```tsx\n * <Progress value={60} />\n * <Progress value={75} showValue label=\"Upload progress\" />\n * <Progress value={30} variant=\"success\" striped />\n * ```\n */\nfunction Progress({\n value,\n max = 100,\n label,\n showValue = false,\n formatValue,\n size,\n variant,\n animated,\n striped,\n className,\n indeterminate = false,\n}: ProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n const progressId = React.useId();\n\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`;\n\n return (\n <div data-slot=\"progress\" className={cn('w-full', className)}>\n {(label || showValue) && (\n <div\n data-slot=\"progress-label-row\"\n className=\"mb-1.5 flex items-center justify-between\"\n >\n {label && (\n <label\n data-slot=\"progress-label\"\n id={`${progressId}-label`}\n className=\"text-foreground text-sm font-medium\"\n >\n {label}\n </label>\n )}\n {showValue && !indeterminate && (\n <span\n data-slot=\"progress-value\"\n className=\"text-muted-foreground text-sm\"\n >\n {displayValue}\n </span>\n )}\n </div>\n )}\n <div\n data-slot=\"progress-track\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-labelledby={label ? `${progressId}-label` : undefined}\n aria-label={!label ? 'Progress' : undefined}\n className={cn(progressBarTrackVariants({ size }))}\n >\n <div\n data-slot=\"progress-fill\"\n className={cn(\n progressBarFillVariants({ variant, animated, striped }),\n indeterminate &&\n 'w-1/3 animate-[indeterminate_1.5s_ease-in-out_infinite]',\n !striped && variant === 'default' && 'bg-primary-800',\n !striped && variant === 'success' && 'bg-green-500',\n !striped && variant === 'warning' && 'bg-yellow-500',\n !striped && variant === 'danger' && 'bg-red-500'\n )}\n style={indeterminate ? undefined : { width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nProgress.displayName = 'Progress';\n\n// ============================================================================\n// Circular Progress Variants\n// ============================================================================\n\nconst circularProgressVariants = cva(['relative inline-flex'], {\n variants: {\n size: {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Circular Progress Component\n// ============================================================================\n\nexport interface CircularProgressProps extends VariantProps<\n typeof circularProgressVariants\n> {\n /** Current progress value (0-100) */\n value: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Stroke width */\n strokeWidth?: number;\n /** Show the percentage value in the center */\n showValue?: boolean;\n /** Whether the progress is indeterminate */\n indeterminate?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A circular progress indicator component.\n *\n * @example\n * ```tsx\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={50} variant=\"success\" size=\"lg\" />\n * ```\n */\nfunction CircularProgress({\n value,\n max = 100,\n variant = 'default',\n size,\n strokeWidth = 4,\n showValue = false,\n indeterminate = false,\n className,\n}: CircularProgressProps) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n // SVG calculations\n const sizeMap = { sm: 32, md: 48, lg: 64, xl: 96 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const variantColors = {\n default: 'stroke-primary-500',\n success: 'stroke-green-500',\n warning: 'stroke-yellow-500',\n danger: 'stroke-red-500',\n };\n\n return (\n <div\n data-slot=\"circular-progress\"\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label=\"Progress\"\n className={cn(circularProgressVariants({ size }), className)}\n >\n <svg\n className={cn('-rotate-90 transform', indeterminate && 'animate-spin')}\n width={svgSize}\n height={svgSize}\n >\n {/* Background track */}\n <circle\n className=\"stroke-neutral-200 dark:stroke-neutral-700\"\n fill=\"none\"\n strokeWidth={strokeWidth}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n />\n {/* Progress fill */}\n <circle\n className={cn(\n variantColors[variant],\n 'transition-all duration-300 ease-out'\n )}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={indeterminate ? circumference * 0.75 : offset}\n />\n </svg>\n {showValue && !indeterminate && (\n <span\n data-slot=\"circular-progress-value\"\n className=\"text-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\"\n >\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n );\n}\n\nCircularProgress.displayName = 'CircularProgress';\n\nexport {\n Progress,\n CircularProgress,\n progressBarTrackVariants,\n progressBarFillVariants,\n circularProgressVariants,\n};\n"]}
|
|
@@ -212,7 +212,7 @@ var Radio = React__namespace.forwardRef(
|
|
|
212
212
|
{
|
|
213
213
|
"data-slot": "radio-dot",
|
|
214
214
|
className: chunkOR5DRJCW_cjs.cn(
|
|
215
|
-
"bg-primary-
|
|
215
|
+
"bg-primary-800 pointer-events-none absolute rounded-full transition-transform",
|
|
216
216
|
size === "sm" && "h-2 w-2",
|
|
217
217
|
size === "md" && "h-2.5 w-2.5",
|
|
218
218
|
size === "lg" && "h-3 w-3",
|
|
@@ -275,5 +275,5 @@ Radio.displayName = "Radio";
|
|
|
275
275
|
exports.Radio = Radio;
|
|
276
276
|
exports.RadioGroup = RadioGroup;
|
|
277
277
|
exports.radioVariants = radioVariants;
|
|
278
|
-
//# sourceMappingURL=chunk-
|
|
279
|
-
//# sourceMappingURL=chunk-
|
|
278
|
+
//# sourceMappingURL=chunk-ZKFVGYBK.cjs.map
|
|
279
|
+
//# sourceMappingURL=chunk-ZKFVGYBK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Radio/Radio.tsx"],"names":["React","cva","jsx","jsxs","cn"],"mappings":"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","file":"chunk-QXJMKJJV.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Radio Group Context\n// ============================================================================\n\ninterface RadioGroupContextValue {\n name: string;\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | null;\n}\n\nconst RadioGroupContext = React.createContext<\n RadioGroupContextValue | undefined\n>(undefined);\n\nfunction useRadioGroupContext() {\n const context = React.useContext(RadioGroupContext);\n if (!context) {\n throw new Error('Radio must be used within a RadioGroup');\n }\n return context;\n}\n\n// ============================================================================\n// Radio Variants\n// ============================================================================\n\nconst radioVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded-full',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Radio Group\n// ============================================================================\n\nexport interface RadioGroupProps {\n /** Group name (required for native form behavior) */\n name?: string;\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Group label */\n label?: string;\n /** Description for the group */\n description?: string;\n /** Error message */\n error?: string;\n /** Whether all radios are disabled */\n disabled?: boolean;\n /** Size of all radios */\n size?: 'sm' | 'md' | 'lg';\n /** Orientation of radio items */\n orientation?: 'horizontal' | 'vertical';\n /** Children radio items */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A radio group component for selecting one option from a set.\n *\n * @example\n * ```tsx\n * <RadioGroup name=\"plan\" label=\"Select a plan\" onValueChange={setPlan}>\n * <Radio value=\"free\" label=\"Free\" />\n * <Radio value=\"pro\" label=\"Pro\" />\n * <Radio value=\"enterprise\" label=\"Enterprise\" />\n * </RadioGroup>\n * ```\n */\nfunction RadioGroup({\n name,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n label,\n description,\n error,\n disabled = false,\n size = 'md',\n orientation = 'vertical',\n children,\n className,\n}: RadioGroupProps) {\n const generatedName = React.useId();\n const groupName = name || generatedName;\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n return (\n <RadioGroupContext.Provider\n value={{ name: groupName, value, onChange: handleChange, disabled, size }}\n >\n <fieldset\n data-slot=\"radio-group\"\n role=\"radiogroup\"\n className={cn('flex flex-col gap-2', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"radio-group-legend\"\n className={cn(\n 'text-foreground font-medium',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n >\n {label}\n </legend>\n )}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"radio-group-description\"\n className={cn(\n 'text-muted-foreground',\n size === 'sm' && 'text-[10px]',\n size === 'md' && 'text-xs',\n size === 'lg' && 'text-sm'\n )}\n >\n {description}\n </p>\n )}\n <div\n data-slot=\"radio-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-3'\n )}\n >\n {children}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"radio-group-error\"\n className={cn(\n 'text-destructive',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = 'RadioGroup';\n\n// ============================================================================\n// Radio Item\n// ============================================================================\n\nexport interface RadioProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof radioVariants> {\n /** Value for this radio option */\n value: string;\n /** Label for the radio */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An individual radio item within a RadioGroup.\n *\n * @example\n * ```tsx\n * <Radio value=\"option1\" label=\"Option 1\" />\n * <Radio value=\"option2\" label=\"Option 2\" description=\"Additional details\" />\n * ```\n */\nconst Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n size: propSize,\n value,\n label,\n description,\n labelPosition = 'right',\n disabled: propDisabled,\n id,\n ...props\n },\n ref\n ) => {\n const context = useRadioGroupContext();\n const generatedId = React.useId();\n const radioId = id || generatedId;\n const descriptionId = `${radioId}-description`;\n\n const isChecked = context.value === value;\n const isDisabled = propDisabled || context.disabled;\n const size = propSize || context.size;\n\n const handleChange = React.useCallback(() => {\n if (!isDisabled) {\n context.onChange(value);\n }\n }, [isDisabled, context, value]);\n\n const radioElement = (\n <span\n data-slot=\"radio-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={ref}\n data-slot=\"radio\"\n id={radioId}\n type=\"radio\"\n name={context.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={handleChange}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(radioVariants({ size }), className)}\n {...props}\n />\n {/* Custom dot indicator */}\n <span\n data-slot=\"radio-dot\"\n className={cn(\n 'bg-primary-500 pointer-events-none absolute rounded-full transition-transform',\n size === 'sm' && 'h-2 w-2',\n size === 'md' && 'h-2.5 w-2.5',\n size === 'lg' && 'h-3 w-3',\n isChecked ? 'scale-100' : 'scale-0'\n )}\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={radioId}\n data-slot=\"radio-label\"\n className={cn(\n 'text-foreground cursor-pointer font-medium select-none',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base',\n isDisabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"radio-description\"\n className={cn(\n 'text-muted-foreground',\n size === 'sm' && 'text-[10px]',\n size === 'md' && 'text-xs',\n size === 'lg' && 'text-sm'\n )}\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div\n data-slot=\"radio-wrapper\"\n className={cn(\n 'flex items-start gap-3',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {radioElement}\n {labelElement}\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n\nexport { RadioGroup, Radio, radioVariants };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Radio/Radio.tsx"],"names":["React","cva","jsx","jsxs","cn"],"mappings":"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","file":"chunk-ZKFVGYBK.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Radio Group Context\n// ============================================================================\n\ninterface RadioGroupContextValue {\n name: string;\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg' | null;\n}\n\nconst RadioGroupContext = React.createContext<\n RadioGroupContextValue | undefined\n>(undefined);\n\nfunction useRadioGroupContext() {\n const context = React.useContext(RadioGroupContext);\n if (!context) {\n throw new Error('Radio must be used within a RadioGroup');\n }\n return context;\n}\n\n// ============================================================================\n// Radio Variants\n// ============================================================================\n\nconst radioVariants = cva(\n [\n 'shrink-0 appearance-none',\n 'border-2 border-input rounded-full',\n 'bg-background',\n 'transition-all duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'checked:border-primary-500',\n ],\n {\n variants: {\n size: {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ============================================================================\n// Radio Group\n// ============================================================================\n\nexport interface RadioGroupProps {\n /** Group name (required for native form behavior) */\n name?: string;\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Group label */\n label?: string;\n /** Description for the group */\n description?: string;\n /** Error message */\n error?: string;\n /** Whether all radios are disabled */\n disabled?: boolean;\n /** Size of all radios */\n size?: 'sm' | 'md' | 'lg';\n /** Orientation of radio items */\n orientation?: 'horizontal' | 'vertical';\n /** Children radio items */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A radio group component for selecting one option from a set.\n *\n * @example\n * ```tsx\n * <RadioGroup name=\"plan\" label=\"Select a plan\" onValueChange={setPlan}>\n * <Radio value=\"free\" label=\"Free\" />\n * <Radio value=\"pro\" label=\"Pro\" />\n * <Radio value=\"enterprise\" label=\"Enterprise\" />\n * </RadioGroup>\n * ```\n */\nfunction RadioGroup({\n name,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n label,\n description,\n error,\n disabled = false,\n size = 'md',\n orientation = 'vertical',\n children,\n className,\n}: RadioGroupProps) {\n const generatedName = React.useId();\n const groupName = name || generatedName;\n const groupId = React.useId();\n const descriptionId = `${groupId}-description`;\n const errorId = `${groupId}-error`;\n\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n return (\n <RadioGroupContext.Provider\n value={{ name: groupName, value, onChange: handleChange, disabled, size }}\n >\n <fieldset\n data-slot=\"radio-group\"\n role=\"radiogroup\"\n className={cn('flex flex-col gap-2', className)}\n aria-describedby={\n [description ? descriptionId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ') || undefined\n }\n >\n {label && (\n <legend\n data-slot=\"radio-group-legend\"\n className={cn(\n 'text-foreground font-medium',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n >\n {label}\n </legend>\n )}\n {description && (\n <p\n id={descriptionId}\n data-slot=\"radio-group-description\"\n className={cn(\n 'text-muted-foreground',\n size === 'sm' && 'text-[10px]',\n size === 'md' && 'text-xs',\n size === 'lg' && 'text-sm'\n )}\n >\n {description}\n </p>\n )}\n <div\n data-slot=\"radio-group-items\"\n className={cn(\n 'flex gap-4',\n orientation === 'vertical' && 'flex-col gap-3'\n )}\n >\n {children}\n </div>\n {error && (\n <p\n id={errorId}\n data-slot=\"radio-group-error\"\n className={cn(\n 'text-destructive',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base'\n )}\n role=\"alert\"\n >\n {error}\n </p>\n )}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = 'RadioGroup';\n\n// ============================================================================\n// Radio Item\n// ============================================================================\n\nexport interface RadioProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n VariantProps<typeof radioVariants> {\n /** Value for this radio option */\n value: string;\n /** Label for the radio */\n label?: string;\n /** Description text below the label */\n description?: string;\n /** Position of the label */\n labelPosition?: 'left' | 'right';\n}\n\n/**\n * An individual radio item within a RadioGroup.\n *\n * @example\n * ```tsx\n * <Radio value=\"option1\" label=\"Option 1\" />\n * <Radio value=\"option2\" label=\"Option 2\" description=\"Additional details\" />\n * ```\n */\nconst Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className,\n size: propSize,\n value,\n label,\n description,\n labelPosition = 'right',\n disabled: propDisabled,\n id,\n ...props\n },\n ref\n ) => {\n const context = useRadioGroupContext();\n const generatedId = React.useId();\n const radioId = id || generatedId;\n const descriptionId = `${radioId}-description`;\n\n const isChecked = context.value === value;\n const isDisabled = propDisabled || context.disabled;\n const size = propSize || context.size;\n\n const handleChange = React.useCallback(() => {\n if (!isDisabled) {\n context.onChange(value);\n }\n }, [isDisabled, context, value]);\n\n const radioElement = (\n <span\n data-slot=\"radio-indicator\"\n className=\"relative inline-flex items-center justify-center\"\n >\n <input\n ref={ref}\n data-slot=\"radio\"\n id={radioId}\n type=\"radio\"\n name={context.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={handleChange}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(radioVariants({ size }), className)}\n {...props}\n />\n {/* Custom dot indicator */}\n <span\n data-slot=\"radio-dot\"\n className={cn(\n 'bg-primary-800 pointer-events-none absolute rounded-full transition-transform',\n size === 'sm' && 'h-2 w-2',\n size === 'md' && 'h-2.5 w-2.5',\n size === 'lg' && 'h-3 w-3',\n isChecked ? 'scale-100' : 'scale-0'\n )}\n />\n </span>\n );\n\n const labelElement = label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={radioId}\n data-slot=\"radio-label\"\n className={cn(\n 'text-foreground cursor-pointer font-medium select-none',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n size === 'lg' && 'text-base',\n isDisabled && 'cursor-not-allowed opacity-50'\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n data-slot=\"radio-description\"\n className={cn(\n 'text-muted-foreground',\n size === 'sm' && 'text-[10px]',\n size === 'md' && 'text-xs',\n size === 'lg' && 'text-sm'\n )}\n >\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div\n data-slot=\"radio-wrapper\"\n className={cn(\n 'flex items-start gap-3',\n labelPosition === 'left' && 'flex-row-reverse'\n )}\n >\n {radioElement}\n {labelElement}\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n\nexport { RadioGroup, Radio, radioVariants };\n"]}
|
|
@@ -480,7 +480,7 @@ function SelectOptionItem({
|
|
|
480
480
|
),
|
|
481
481
|
children: [
|
|
482
482
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 truncate", children: option.label }),
|
|
483
|
-
isSelected && /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "text-primary-
|
|
483
|
+
isSelected && /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: "text-primary-800 h-4 w-4 shrink-0" })
|
|
484
484
|
]
|
|
485
485
|
}
|
|
486
486
|
);
|
|
@@ -526,5 +526,5 @@ function CheckIcon({ className }) {
|
|
|
526
526
|
|
|
527
527
|
exports.Select = Select;
|
|
528
528
|
exports.selectTriggerVariants = selectTriggerVariants;
|
|
529
|
-
//# sourceMappingURL=chunk-
|
|
530
|
-
//# sourceMappingURL=chunk-
|
|
529
|
+
//# sourceMappingURL=chunk-ZRI6OXQD.cjs.map
|
|
530
|
+
//# sourceMappingURL=chunk-ZRI6OXQD.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useEscapeKey","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-Z2ABQA5Z.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\nexport interface SelectProps extends VariantProps<\n typeof selectTriggerVariants\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n error,\n helperText,\n size,\n hasError,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected option\n const selectedOption = flatOptions.find((opt) => opt.value === value);\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n React.useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const [dropdownStyle, setDropdownStyle] = React.useState<React.CSSProperties>(\n {}\n );\n\n const updateDropdownPosition = React.useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const isCondensed = document.body.classList.contains('condensed');\n const optionHeight = isCondensed ? 28 : 40;\n const estimatedDropdownHeight = Math.min(\n flatOptions.length * optionHeight + 16,\n 300\n );\n const openAbove =\n spaceBelow < estimatedDropdownHeight && spaceAbove > spaceBelow;\n\n setDropdownStyle({\n position: 'fixed',\n ...(openAbove\n ? { bottom: window.innerHeight - rect.top + 4 }\n : { top: rect.bottom + 4 }),\n left: rect.left,\n width: rect.width,\n maxHeight: Math.max(\n Math.min(openAbove ? spaceAbove - 8 : spaceBelow - 8, 300),\n 0\n ),\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n zIndex: 9999,\n });\n }, [flatOptions.length]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n updateDropdownPosition();\n\n window.addEventListener('scroll', updateDropdownPosition, true);\n window.addEventListener('resize', updateDropdownPosition);\n return () => {\n window.removeEventListener('scroll', updateDropdownPosition, true);\n window.removeEventListener('resize', updateDropdownPosition);\n };\n }, [isOpen, updateDropdownPosition]);\n\n // Handle value change\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, onValueChange]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [isOpen, highlightedIndex, filteredFlatOptions, handleValueChange]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={triggerRef}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({ size, hasError: hasError || !!error })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !selectedOption && 'text-muted-foreground'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={dropdownRef}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={option.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-500 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useEscapeKey","jsxs","cn","jsx","createPortal"],"mappings":"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","file":"chunk-ZRI6OXQD.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n hasError: false,\n },\n }\n);\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\nexport interface SelectProps extends VariantProps<\n typeof selectTriggerVariants\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n * ```\n */\nfunction Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n error,\n helperText,\n size,\n hasError,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected option\n const selectedOption = flatOptions.find((opt) => opt.value === value);\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n React.useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const [dropdownStyle, setDropdownStyle] = React.useState<React.CSSProperties>(\n {}\n );\n\n const updateDropdownPosition = React.useCallback(() => {\n if (!triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const isCondensed = document.body.classList.contains('condensed');\n const optionHeight = isCondensed ? 28 : 40;\n const estimatedDropdownHeight = Math.min(\n flatOptions.length * optionHeight + 16,\n 300\n );\n const openAbove =\n spaceBelow < estimatedDropdownHeight && spaceAbove > spaceBelow;\n\n setDropdownStyle({\n position: 'fixed',\n ...(openAbove\n ? { bottom: window.innerHeight - rect.top + 4 }\n : { top: rect.bottom + 4 }),\n left: rect.left,\n width: rect.width,\n maxHeight: Math.max(\n Math.min(openAbove ? spaceAbove - 8 : spaceBelow - 8, 300),\n 0\n ),\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n zIndex: 9999,\n });\n }, [flatOptions.length]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n updateDropdownPosition();\n\n window.addEventListener('scroll', updateDropdownPosition, true);\n window.addEventListener('resize', updateDropdownPosition);\n return () => {\n window.removeEventListener('scroll', updateDropdownPosition, true);\n window.removeEventListener('resize', updateDropdownPosition);\n };\n }, [isOpen, updateDropdownPosition]);\n\n // Handle value change\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, onValueChange]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [isOpen, highlightedIndex, filteredFlatOptions, handleValueChange]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={triggerRef}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-invalid={hasError || !!error}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({ size, hasError: hasError || !!error })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !selectedOption && 'text-muted-foreground'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={dropdownRef}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={option.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={item.value === value}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
|