murmuraba
Version:
Real-time audio noise reduction with advanced chunked processing for web applications
74 lines (73 loc) • 3.76 kB
JavaScript
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" }));