{"version":3,"file":"useTextContainers.cjs","sources":["../../../src/hooks/useTextContainers.ts"],"sourcesContent":["import { useEffect, type RefObject } from 'react';\nimport { Application, Container, Text, TextStyle, Sprite } from 'pixi.js';\nimport { gsap } from 'gsap';\nimport { type TextPair } from '../types';\nimport { setupCustomFonts } from '../utils/fontUtils';\nimport ResourceManager from '../managers/ResourceManager';\n\n// Development environment check\nconst isDevelopment = import.meta.env?.MODE === 'development';\n\n// Comprehensive logging utility\nconst log = {\n    info: (message: string, ...args: any[]) => {\n        if (isDevelopment) {\n            console.log(`[useTextContainers:INFO] ${message}`, ...args);\n        }\n    },\n    warn: (message: string, ...args: any[]) => {\n        if (isDevelopment) {\n            console.warn(`[useTextContainers:WARN] ${message}`, ...args);\n        }\n    },\n    error: (message: string, error?: unknown) => {\n        if (isDevelopment) {\n            console.error(`[useTextContainers:ERROR] ${message}`, error);\n        }\n    }\n};\n\n// Cancellation and lifecycle management interface\ninterface CancellationFlags {\n    isCancelled: boolean;\n}\n\n// Enhanced prop interface with comprehensive typing\ninterface UseTextContainersProps {\n    sliderRef: RefObject<HTMLDivElement | null>;\n    appRef: RefObject<Application | null>;\n    slidesRef: RefObject<Sprite[]>;\n    textContainersRef: RefObject<Container[]>;\n    currentIndex: RefObject<number>;\n    buttonMode: boolean;\n    texts: TextPair[];\n\n    // Title styling\n    textTitleColor: string;\n    textTitleSize: number;\n    mobileTextTitleSize: number;\n    textTitleLetterspacing: number;\n    textTitleFontFamily?: string;\n\n    // Subtitle styling\n    textSubTitleColor: string;\n    textSubTitleSize: number;\n    mobileTextSubTitleSize: number;\n    textSubTitleLetterspacing: number;\n    textSubTitleOffsetTop: number;\n    mobileTextSubTitleOffsetTop: number;\n    textSubTitleFontFamily?: string;\n\n    resourceManager?: ResourceManager | null;\n}\n\n// Default font fallbacks with more comprehensive options\nconst DEFAULT_FONTS = {\n    title: 'Georgia, Times, \"Times New Roman\", serif',\n    subtitle: 'Helvetica, Arial, sans-serif'\n};\n\n/**\n * Prepare font family string with comprehensive fallback handling\n */\nfunction prepareFontFamily(\n    fontStack?: string,\n    defaultStack = DEFAULT_FONTS.title\n): string {\n    try {\n        // If no font stack provided, return default\n        if (!fontStack) {\n            log.info(`No font stack provided, using default: ${defaultStack}`);\n            return defaultStack;\n        }\n\n        // Trim and clean font stack\n        const cleanedStack = fontStack\n            .split(',')\n            .map(font => font.trim().replace(/['\"]/g, ''))\n            .filter(Boolean)\n            .join(', ');\n\n        log.info(`Processed font stack: ${cleanedStack}`);\n        return cleanedStack || defaultStack;\n    } catch (error) {\n        log.error('Error processing font family', error);\n        return defaultStack;\n    }\n}\n\n/**\n * Advanced text containers hook with comprehensive optimization\n */\nconst useTextContainers = ({\n                               sliderRef,\n                               appRef,\n                               slidesRef,\n                               textContainersRef,\n                               currentIndex,\n                               buttonMode,\n                               texts,\n\n                               // Title props\n                               textTitleColor,\n                               textTitleSize,\n                               mobileTextTitleSize,\n                               textTitleLetterspacing,\n                               textTitleFontFamily,\n\n                               // Subtitle props\n                               textSubTitleColor,\n                               textSubTitleSize,\n                               mobileTextSubTitleSize,\n                               textSubTitleLetterspacing,\n                               textSubTitleOffsetTop,\n                               mobileTextSubTitleOffsetTop,\n                               textSubTitleFontFamily,\n\n                               resourceManager\n                           }: UseTextContainersProps) => {\n    // Cancellation mechanism\n    const cancellationRef = { current: { isCancelled: false } };\n\n    // Text containers creation effect\n    useEffect(() => {\n        // Server-side rendering guard\n        if (typeof window === 'undefined') return;\n\n        // Reset cancellation flag\n        cancellationRef.current.isCancelled = false;\n\n        // Validate essential references\n        if (!appRef.current || !slidesRef.current.length || !texts.length) {\n            log.warn('Initialization aborted due to missing references');\n            return;\n        }\n\n        // Async font setup\n        const setupFontsAndCreateContainers = async () => {\n            try {\n                // Preload fonts if custom fonts are specified\n                if (textTitleFontFamily || textSubTitleFontFamily) {\n                    log.info('Setting up custom fonts', {\n                        titleFont: textTitleFontFamily,\n                        subtitleFont: textSubTitleFontFamily\n                    });\n                    await setupCustomFonts(textTitleFontFamily, textSubTitleFontFamily);\n                }\n\n                // Check for cancellation after font setup\n                if (cancellationRef.current.isCancelled) return;\n\n                const app = appRef.current!;\n                const stage = app.stage.children[0] as Container;\n\n                // Clear existing text containers\n                textContainersRef.current.forEach(container => {\n                    try {\n                        if (container.parent) {\n                            container.parent.removeChild(container);\n                        }\n                    } catch (removeError) {\n                        log.error('Error removing existing text container', removeError);\n                    }\n                });\n                textContainersRef.current = [];\n\n                // Compute responsive text sizes\n                const isMobile = window.innerWidth < 768;\n                const computedTitleSize = isMobile ? mobileTextTitleSize : textTitleSize;\n                const computedSubTitleSize = isMobile ? mobileTextSubTitleSize : textSubTitleSize;\n                const computedSubTitleOffset = isMobile ? mobileTextSubTitleOffsetTop : textSubTitleOffsetTop;\n\n                // Prepare font families\n                const titleFontFamily = prepareFontFamily(textTitleFontFamily);\n                const subtitleFontFamily = prepareFontFamily(textSubTitleFontFamily, DEFAULT_FONTS.subtitle);\n\n                log.info('Creating text containers', {\n                    titleFont: titleFontFamily,\n                    subtitleFont: subtitleFontFamily\n                });\n\n                // Create text containers\n                texts.forEach((textPair, index) => {\n                    const [title, subtitle] = textPair;\n\n                    // Create container\n                    const textContainer = new Container();\n                    textContainer.x = app.screen.width / 2;\n                    textContainer.y = app.screen.height / 2;\n\n                    // Track container with ResourceManager\n                    if (resourceManager) {\n                        resourceManager.trackDisplayObject(textContainer);\n                    }\n\n                    // Create title text\n                    const titleStyle = new TextStyle({\n                        fill: textTitleColor,\n                        fontSize: computedTitleSize,\n                        letterSpacing: textTitleLetterspacing,\n                        fontWeight: 'bold',\n                        align: 'center',\n                        fontFamily: titleFontFamily\n                    });\n                    const titleText = new Text({ text: title, style: titleStyle });\n                    titleText.anchor.set(0.5, 0);\n                    titleText.y = 0;\n\n                    // Track title with ResourceManager\n                    if (resourceManager) {\n                        resourceManager.trackDisplayObject(titleText);\n                    }\n\n                    // Create subtitle text\n                    const subtitleStyle = new TextStyle({\n                        fill: textSubTitleColor,\n                        fontSize: computedSubTitleSize,\n                        letterSpacing: textSubTitleLetterspacing,\n                        align: 'center',\n                        fontFamily: subtitleFontFamily\n                    });\n                    const subText = new Text({ text: subtitle, style: subtitleStyle });\n                    subText.anchor.set(0.5, 0);\n                    subText.y = titleText.height + computedSubTitleOffset;\n\n                    // Track subtitle with ResourceManager\n                    if (resourceManager) {\n                        resourceManager.trackDisplayObject(subText);\n                    }\n\n                    // Add texts to container\n                    textContainer.addChild(titleText, subText);\n                    textContainer.pivot.y = textContainer.height / 2;\n\n                    // Set initial visibility\n                    textContainer.alpha = index === 0 ? 1 : 0;\n                    textContainer.visible = index === 0;\n\n                    // Button mode configuration\n                    if (buttonMode) {\n                        textContainer.eventMode = 'static';\n                        textContainer.cursor = 'pointer';\n\n                        // Hover effects with GSAP\n                        textContainer.on('pointerover', () => {\n                            gsap.to(titleText.scale, {\n                                x: 1.1,\n                                y: 1.1,\n                                duration: 0.2,\n                                onComplete: () => {\n                                    if (resourceManager) {\n                                        resourceManager.trackDisplayObject(titleText);\n                                    }\n                                }\n                            });\n                        });\n\n                        textContainer.on('pointerout', () => {\n                            gsap.to(titleText.scale, {\n                                x: 1,\n                                y: 1,\n                                duration: 0.2,\n                                onComplete: () => {\n                                    if (resourceManager) {\n                                        resourceManager.trackDisplayObject(titleText);\n                                    }\n                                }\n                            });\n                        });\n\n                        // Slide change on click\n                        textContainer.on('pointerdown', () => {\n                            const nextIndex = (currentIndex.current + 1) % slidesRef.current.length;\n                            window.dispatchEvent(new CustomEvent('slideChange', {\n                                detail: { nextIndex }\n                            }));\n                        });\n                    }\n\n                    // Add to stage and store reference\n                    stage.addChild(textContainer);\n                    textContainersRef.current.push(textContainer);\n                });\n\n                log.info(`Created ${texts.length} text containers`);\n            } catch (error) {\n                log.error('Error in text containers setup', error);\n            }\n        };\n\n        // Execute font and container setup\n        setupFontsAndCreateContainers();\n\n        // Resize handling effect\n        const handleResize = () => {\n            try {\n                // Skip if cancelled or references missing\n                if (cancellationRef.current.isCancelled ||\n                    !appRef.current ||\n                    !sliderRef.current ||\n                    !textContainersRef.current.length) return;\n\n                const containerWidth = sliderRef.current.clientWidth || 0;\n                const containerHeight = sliderRef.current.clientHeight || 0;\n                const isMobile = window.innerWidth < 768;\n\n                // Compute responsive sizes\n                const computedTitleSize = isMobile ? mobileTextTitleSize : textTitleSize;\n                const computedSubTitleSize = isMobile ? mobileTextSubTitleSize : textSubTitleSize;\n                const computedSubTitleOffset = isMobile ? mobileTextSubTitleOffsetTop : textSubTitleOffsetTop;\n\n                // Prepare font families\n                const titleFontFamily = prepareFontFamily(textTitleFontFamily);\n                const subtitleFontFamily = prepareFontFamily(textSubTitleFontFamily, DEFAULT_FONTS.subtitle);\n\n                // Update each text container\n                textContainersRef.current.forEach(container => {\n                    // Reposition container\n                    container.x = containerWidth / 2;\n                    container.y = containerHeight / 2;\n\n                    // Update title text\n                    const titleText = container.children[0] as Text;\n                    titleText.style.fontSize = computedTitleSize;\n                    titleText.style.fontFamily = titleFontFamily;\n                    // Force text update by reassigning the text content\n                    const titleContent = titleText.text;\n                    titleText.text = titleContent;\n\n                    // Update subtitle text\n                    const subText = container.children[1] as Text;\n                    subText.style.fontSize = computedSubTitleSize;\n                    subText.style.fontFamily = subtitleFontFamily;\n                    // Reposition subtitle\n                    subText.y = titleText.height + computedSubTitleOffset;\n                    // Force text update by reassigning the text content\n                    const subContent = subText.text;\n                    subText.text = subContent;\n\n                    // Update container pivot\n                    container.pivot.y = container.height / 2;\n\n                    // Track updates with ResourceManager\n                    if (resourceManager) {\n                        resourceManager.trackDisplayObject(container);\n                        resourceManager.trackDisplayObject(titleText);\n                        resourceManager.trackDisplayObject(subText);\n                    }\n                });\n\n                log.info('Text containers resized');\n            } catch (error) {\n                log.error('Error during text containers resize', error);\n            }\n        };\n\n        // Add resize listener\n        window.addEventListener('resize', handleResize);\n\n        // Initial resize\n        handleResize();\n\n        // Cleanup function\n        return () => {\n            // Set cancellation flag\n            cancellationRef.current.isCancelled = true;\n\n            // Remove resize listener\n            window.removeEventListener('resize', handleResize);\n        };\n    }, [\n        // Dependency array with all props for comprehensive updates\n        appRef.current,\n        texts,\n        textTitleColor,\n        textTitleSize,\n        mobileTextTitleSize,\n        textTitleLetterspacing,\n        textTitleFontFamily,\n        textSubTitleColor,\n        textSubTitleSize,\n        mobileTextSubTitleSize,\n        textSubTitleLetterspacing,\n        textSubTitleOffsetTop,\n        mobileTextSubTitleOffsetTop,\n        textSubTitleFontFamily,\n        buttonMode,\n        resourceManager\n    ]);\n\n    // No return value needed as this is a side-effect hook\n};\n\nexport default useTextContainers;"],"names":["useEffect","setupCustomFonts","Container","TextStyle","Text","gsap"],"mappings":"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"}