UNPKG

murmuraba

Version:

Real-time audio noise reduction with advanced chunked processing for web applications

74 lines (73 loc) 3.76 kB
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import { useMemo } from 'react'; export const BuildInfo = ({ version = '1.0.0', buildDate = new Date().toLocaleDateString(), className = '', 'aria-label': ariaLabel, showPrefix = true, separator = '•', format = 'inline', size = 'medium' }) => { const formattedBuildDate = useMemo(() => { try { // Try to parse as ISO date first const date = new Date(buildDate); if (!isNaN(date.getTime())) { return date.toLocaleDateString(); } return buildDate; } catch { return buildDate; } }, [buildDate]); const versionText = showPrefix ? `v${version}` : version; const styles = useMemo(() => { const baseStyles = { fontFamily: 'system-ui, -apple-system, sans-serif', display: format === 'block' ? 'block' : 'inline-flex', alignItems: 'center', gap: format === 'block' ? '0.25rem' : '0.5rem', fontSize: size === 'small' ? '0.75rem' : size === 'large' ? '1rem' : '0.875rem', lineHeight: '1.4', }; // Theme styles - Always use dark mode baseStyles.color = 'var(--dark-text-tertiary, #7B7D8E)'; // Format-specific styles if (format === 'badge') { baseStyles.backgroundColor = 'var(--dark-surface-hover, #252631)'; baseStyles.border = '1px solid var(--neutral-400, #4E5165)'; baseStyles.borderRadius = '12px'; baseStyles.padding = size === 'small' ? '0.25rem 0.5rem' : '0.375rem 0.75rem'; baseStyles.fontSize = size === 'small' ? '0.6875rem' : size === 'large' ? '0.875rem' : '0.75rem'; } return baseStyles; }, [format, size]); const separatorStyles = useMemo(() => ({ opacity: 0.5, margin: format === 'block' ? '0' : '0 0.25rem', userSelect: 'none', }), [format]); return (_jsx("div", { className: `murmuraba-build-info murmuraba-build-info--${format} murmuraba-build-info--${size} ${className}`, style: styles, role: "status", "aria-label": ariaLabel || `Build information: Version ${version}, built on ${formattedBuildDate}`, children: format === 'block' ? (_jsxs(_Fragment, { children: [_jsx("div", { children: versionText }), _jsx("div", { children: formattedBuildDate })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "murmuraba-build-info__version", children: versionText }), separator && (_jsx("span", { className: "murmuraba-build-info__separator", style: separatorStyles, "aria-hidden": "true", children: separator })), _jsx("span", { className: "murmuraba-build-info__date", children: formattedBuildDate })] })) })); }; // Utility function to get package version export const getPackageVersion = () => { try { // In a real package, this would be replaced during build return process.env.PACKAGE_VERSION || '3.0.0'; } catch { return '1.0.0'; } }; // Utility function to format build date export const formatBuildDate = (date) => { try { const d = typeof date === 'string' ? new Date(date) : date; return d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); } catch { return new Date().toLocaleDateString(); } }; // Pre-configured variants for common use cases export const BuildInfoBadge = (props) => (_jsx(BuildInfo, { ...props, format: "badge" })); export const BuildInfoBlock = (props) => (_jsx(BuildInfo, { ...props, format: "block" })); export const BuildInfoInline = (props) => (_jsx(BuildInfo, { ...props, format: "inline" }));