SYMBOL INDEX (71 symbols across 27 files) FILE: electron/main.cjs function createWindow (line 14) | function createWindow() { FILE: scripts/generate-icons.cjs function generatePngIcons (line 21) | async function generatePngIcons() { function generateMacIcon (line 54) | async function generateMacIcon() { function updateMainPngIcon (line 66) | async function updateMainPngIcon() { function main (line 76) | async function main() { FILE: scripts/generate-icons.js function generatePngIcons (line 21) | async function generatePngIcons() { function generateMacIcon (line 54) | async function generateMacIcon() { function updateMainPngIcon (line 66) | async function updateMainPngIcon() { function main (line 76) | async function main() { FILE: scripts/generate-win-icon.cjs function ensureIconsExist (line 15) | async function ensureIconsExist() { function createIcoWithNpm (line 34) | async function createIcoWithNpm() { function createIcoWithImageMagick (line 63) | async function createIcoWithImageMagick() { function main (line 88) | async function main() { FILE: scripts/seo-check.cjs function checkFile (line 34) | function checkFile(filePath, description) { function checkFileContent (line 46) | function checkFileContent(filePath, pattern, description) { FILE: scripts/seo-check.js function checkFile (line 34) | function checkFile(filePath, description) { function checkFileContent (line 46) | function checkFileContent(filePath, pattern, description) { FILE: src/App.tsx function App (line 15) | function App() { FILE: src/components/AlertDialog.tsx type AlertDialogProps (line 5) | interface AlertDialogProps { FILE: src/components/Layout.tsx type LayoutProps (line 8) | interface LayoutProps { FILE: src/components/SEOHead.tsx type SEOHeadProps (line 4) | interface SEOHeadProps { FILE: src/components/SoundButton.tsx type Props (line 8) | interface Props { FILE: src/components/SoundIcon.tsx type IconType (line 28) | type IconType = type SoundIconProps (line 66) | interface SoundIconProps { FILE: src/components/Timer.tsx constant TIME_PRESETS (line 8) | const TIME_PRESETS = [ FILE: src/data/sounds.ts type SoundData (line 3) | interface SoundData { FILE: src/hooks/useOnClickOutside.ts function useOnClickOutside (line 3) | function useOnClickOutside( FILE: src/hooks/useSEO.ts type SEOConfig (line 5) | interface SEOConfig { FILE: src/hooks/useWebVitals.ts type WebVitalsMetrics (line 8) | interface WebVitalsMetrics { function getWebVitalsRating (line 28) | function getWebVitalsRating(metrics: WebVitalsMetrics): 'good' | 'needs-... function formatWebVitalsReport (line 220) | function formatWebVitalsReport(metrics: WebVitalsMetrics): string { function generateWebVitalsHTMLReport (line 242) | function generateWebVitalsHTMLReport(metrics: WebVitalsMetrics): string { FILE: src/store/timerStore.ts type TimerState (line 4) | interface TimerState { FILE: src/store/useStore.ts type State (line 6) | interface State { FILE: src/store/useThemeStore.ts type ThemeState (line 5) | interface ThemeState { FILE: src/themes/index.ts type Theme (line 1) | interface Theme { FILE: src/types.ts type Sound (line 3) | interface Sound { type ActiveSound (line 11) | interface ActiveSound extends Sound { type SoundMix (line 16) | interface SoundMix { type Theme (line 25) | interface Theme { FILE: src/types/index.ts type Sound (line 1) | interface Sound { type SoundMix (line 8) | interface SoundMix { FILE: src/types/theme.ts type ThemeType (line 1) | type ThemeType = 'minimal-light' | 'dark' | 'nature' | 'ocean' | 'warm' ... type Theme (line 3) | interface Theme { FILE: src/utils/analytics.ts type Window (line 4) | interface Window { constant GA_TRACKING_ID (line 11) | const GA_TRACKING_ID = import.meta.env.VITE_GA_TRACKING_ID || ''; FILE: src/utils/audio.ts class AudioManager (line 1) | class AudioManager { method constructor (line 5) | private constructor() { method getInstance (line 9) | static getInstance(): AudioManager { method loadSound (line 16) | loadSound(url: string): HTMLAudioElement { method play (line 25) | play(url: string, volume: number = 0.5): void { method stop (line 33) | stop(url: string): void { method setVolume (line 41) | setVolume(url: string, volume: number): void { method stopAll (line 48) | stopAll(): void { FILE: src/utils/seoAudit.ts type SEOAuditResult (line 6) | interface SEOAuditResult { type SEOIssue (line 15) | interface SEOIssue { type PerformanceMetrics (line 22) | interface PerformanceMetrics { class SEOAuditor (line 34) | class SEOAuditor { method audit (line 43) | public audit(): SEOAuditResult { method checkMetaTags (line 74) | private checkMetaTags(): void { method checkStructuredData (line 164) | private checkStructuredData(): void { method checkImages (line 207) | private checkImages(): void { method checkHeadings (line 237) | private checkHeadings(): void { method checkLinks (line 263) | private checkLinks(): void { method checkAccessibility (line 299) | private checkAccessibility(): void { method checkPerformance (line 331) | private checkPerformance(): void { method checkResourceCompression (line 376) | private checkResourceCompression(): void { method calculateScore (line 399) | private calculateScore(): number { method generateReport (line 417) | public generateReport(result: SEOAuditResult): string { function initSEOAudit (line 502) | function initSEOAudit(): void { function logAuditResult (line 522) | function logAuditResult(result: SEOAuditResult): void {