@fynd-design-engineering/fynd-one-v2 3.3.12 → 3.3.14

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.
Files changed (48) hide show
  1. package/dist/accordians/dropdown.js.map +2 -2
  2. package/dist/accordians/index.js.map +2 -2
  3. package/dist/cms-listing/index.js.map +2 -2
  4. package/dist/filters/clear-search.js.map +2 -2
  5. package/dist/filters/show-count.js.map +2 -2
  6. package/dist/form/cs-gated-redirection.js.map +2 -2
  7. package/dist/form/download-file.js.map +2 -2
  8. package/dist/form/handler.js.map +2 -2
  9. package/dist/form/phone-validator.js.map +2 -2
  10. package/dist/global/anchor-scroll.js.map +2 -2
  11. package/dist/global/loader.js.map +2 -2
  12. package/dist/global/miscellaneous.js.map +2 -2
  13. package/dist/global/number-count.js.map +2 -2
  14. package/dist/global/popup-video.js.map +2 -2
  15. package/dist/home/index.js.map +2 -2
  16. package/dist/marquee/index.js.map +2 -2
  17. package/dist/marquee/marquee-swiper.js.map +2 -2
  18. package/dist/navigation/announcement/index.js.map +2 -2
  19. package/dist/navigation/context-menu/index.js.map +2 -2
  20. package/dist/navigation/desktop/index.js.map +2 -2
  21. package/dist/navigation/initialization.js +1 -1
  22. package/dist/navigation/initialization.js.map +3 -3
  23. package/dist/navigation/main.js.map +2 -2
  24. package/dist/navigation/mobile/index.js.map +2 -2
  25. package/dist/navigation/scroll/index.js.map +2 -2
  26. package/dist/navigation/secondary-navigation/index.js.map +2 -2
  27. package/dist/navigation/temp.css +1 -1
  28. package/dist/navigation/temp.css.map +2 -2
  29. package/dist/others/geolocation.js.map +2 -2
  30. package/dist/others/hero-aniamtion.js.map +2 -2
  31. package/dist/others/hero-india-animation-2.js.map +2 -2
  32. package/dist/others/hero-india-animation.js.map +2 -2
  33. package/dist/posthog-and-ga/attributes.js.map +2 -2
  34. package/dist/posthog-and-ga/main.js.map +2 -2
  35. package/dist/progressive-scroll/index.js.map +2 -2
  36. package/dist/quick-fix/reload.js.map +2 -2
  37. package/dist/seo/schema.js.map +2 -2
  38. package/dist/test/sample.js.map +2 -2
  39. package/dist/testimonials/index.js.map +2 -2
  40. package/dist/timeline/index.js.map +2 -2
  41. package/dist/tracking/fill-form-fields.js.map +2 -2
  42. package/dist/tracking/form-tracker.js.map +2 -2
  43. package/dist/tracking/page-categories.js.map +2 -2
  44. package/dist/tracking/user-journey.js.map +2 -2
  45. package/dist/tracking/utm-links.js.map +2 -2
  46. package/dist/utils/sample.js.map +2 -2
  47. package/dist/validations/localhost.js.map +2 -2
  48. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../bin/live-reload.js", "../../../src/navigation/mobile/index.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Types and interfaces\ninterface MenuState {\n isMainMenuOpen: boolean;\n isNestedMenuOpen: boolean;\n}\n\ninterface MenuElements {\n nestedMenu: HTMLElement;\n mainMenu: HTMLElement;\n toggleMainMenuButtons: NodeListOf<HTMLElement>;\n toggleNestedMenuButtons: NodeListOf<HTMLElement>;\n mainMenuLinks: NodeListOf<HTMLElement>;\n navOverlay: HTMLElement;\n openIcons: NodeListOf<HTMLElement>;\n closeIcons: NodeListOf<HTMLElement>;\n}\n\n// Constants\nconst ANIMATION_TIMINGS = {\n NESTED_MENU_DELAY: 10,\n NESTED_MENU_CLOSE_DELAY: 500,\n MAIN_MENU_CLOSE_TIMEOUT: 300, // Add timeout for main menu close\n} as const;\n\nconst SELECTORS = {\n NESTED_MENU: '[data-mobile-nav=\"nested-menu\"]',\n MAIN_MENU: '[data-mobile-nav=\"main-menu\"]',\n TOGGLE_MAIN_MENU: '[data-nav-toggle=\"main-menu\"]',\n TOGGLE_NESTED_MENU: '[data-nav-toggle=\"nested-menu\"]',\n MAIN_MENU_LINKS: '[data-mobile-link]',\n NAV_OVERLAY: '[data-nav-element=\"overlay\"]',\n OPEN_ICON: '[data-menu-icon=\"open\"]',\n CLOSE_ICON: '[data-menu-icon=\"close\"]',\n MOBILE_MENU: '[data-mobile-menu]',\n} as const;\n\n// Main navigation class\nclass MobileNavigation {\n private state: MenuState = {\n isMainMenuOpen: false,\n isNestedMenuOpen: false,\n };\n\n private isAnimating = false; // Add animation lock\n\n private elements: MenuElements;\n\n constructor() {\n this.elements = this.getElements();\n this.init();\n }\n\n private getElements(): MenuElements {\n const nestedMenu = document.querySelector<HTMLElement>(SELECTORS.NESTED_MENU);\n const mainMenu = document.querySelector<HTMLElement>(SELECTORS.MAIN_MENU);\n const navOverlay = document.querySelector<HTMLElement>(SELECTORS.NAV_OVERLAY);\n const openIcons = document.querySelectorAll<HTMLElement>(SELECTORS.OPEN_ICON);\n const closeIcons = document.querySelectorAll<HTMLElement>(SELECTORS.CLOSE_ICON);\n\n if (!nestedMenu || !mainMenu || !navOverlay || openIcons.length === 0 || closeIcons.length === 0) {\n throw new Error('Required navigation elements not found');\n }\n\n return {\n nestedMenu,\n mainMenu,\n toggleMainMenuButtons: document.querySelectorAll<HTMLElement>(SELECTORS.TOGGLE_MAIN_MENU),\n toggleNestedMenuButtons: document.querySelectorAll<HTMLElement>(SELECTORS.TOGGLE_NESTED_MENU),\n mainMenuLinks: document.querySelectorAll<HTMLElement>(SELECTORS.MAIN_MENU_LINKS),\n navOverlay,\n openIcons,\n closeIcons,\n };\n }\n\n private init(): void {\n this.setupInitialStyles();\n this.bindEventListeners();\n }\n\n private setupInitialStyles(): void {\n // Setup nested menu initial styles\n this.elements.nestedMenu.style.display = 'none';\n this.elements.nestedMenu.style.transform = 'translateX(100%)';\n this.elements.nestedMenu.style.transition = 'transform 0.5s ease';\n\n // Setup main menu initial styles\n this.elements.mainMenu.style.display = 'block';\n this.elements.mainMenu.style.height = '0dvh';\n this.elements.mainMenu.style.transition = 'height 0.3s ease-in-out';\n\n // Setup icon initial styles for all icons\n this.elements.openIcons.forEach(icon => {\n icon.style.transition = 'opacity 0.2s ease';\n });\n \n this.elements.closeIcons.forEach(icon => {\n icon.style.transition = 'opacity 0.2s ease';\n });\n \n this.updateMenuIcons(false); // Start with open icons visible\n }\n\n private bindEventListeners(): void {\n // Main menu toggle buttons\n this.elements.toggleMainMenuButtons.forEach((button, index) => {\n button.addEventListener('click', (e) => {\n e.preventDefault();\n console.log(`Main menu button ${index} clicked, current state:`, this.state.isMainMenuOpen);\n this.handleMainMenuToggle(button);\n });\n });\n\n // Nested menu toggle buttons\n this.elements.toggleNestedMenuButtons.forEach((button, index) => {\n button.addEventListener('click', (e) => {\n e.preventDefault();\n console.log(`Nested menu button ${index} clicked, current state:`, this.state.isNestedMenuOpen);\n this.handleNestedMenuToggle(button);\n });\n });\n\n // Main menu links\n this.elements.mainMenuLinks.forEach((link) => {\n link.addEventListener('click', (event) => {\n const target = event.currentTarget as HTMLElement;\n const attrValue = target.getAttribute('data-mobile-link');\n \n if (attrValue) {\n console.log(`Menu link clicked: ${attrValue}`);\n this.replaceContent(attrValue);\n this.toggleNestedMenu();\n }\n });\n });\n }\n\n private openMainMenu(): void {\n if (this.state.isMainMenuOpen) {\n console.log('Main menu already open, skipping');\n return;\n }\n\n const { mainMenu } = this.elements;\n \n this.isAnimating = true;\n mainMenu.style.overflow = 'hidden';\n mainMenu.style.display = 'block';\n mainMenu.style.height = '0dvh';\n\n // Update state and icons immediately\n this.state.isMainMenuOpen = true;\n this.updateMenuIcons(true);\n\n requestAnimationFrame(() => {\n mainMenu.style.height = '100dvh';\n \n // Listen for animation completion\n const handleOpenComplete = () => {\n this.isAnimating = false;\n console.log('\uD83C\uDF54 Main menu OPENED (animation complete)');\n };\n\n mainMenu.addEventListener('transitionend', handleOpenComplete, { once: true });\n \n // Fallback timeout\n setTimeout(() => {\n this.isAnimating = false;\n }, 350); // Slightly longer than transition time\n });\n\n console.log('\uD83C\uDF54 Main menu OPENING...');\n }\n\n private closeMainMenu(): void {\n if (!this.state.isMainMenuOpen) {\n console.log('Main menu already closed, skipping');\n return;\n }\n\n const { mainMenu } = this.elements;\n \n this.isAnimating = true;\n \n // Update state and icons immediately\n this.state.isMainMenuOpen = false;\n this.updateMenuIcons(false);\n \n mainMenu.style.height = '0dvh';\n\n // Use both transitionend and setTimeout as fallback\n let animationCompleted = false;\n \n const completeClose = () => {\n if (animationCompleted) return;\n animationCompleted = true;\n \n mainMenu.style.display = 'none';\n this.isAnimating = false;\n console.log('\uD83C\uDF54 Main menu CLOSED (animation complete)');\n };\n\n // Primary method: listen for transition end\n const handleTransitionEnd = (e: TransitionEvent) => {\n if (e.target === mainMenu && e.propertyName === 'height') {\n completeClose();\n }\n };\n\n mainMenu.addEventListener('transitionend', handleTransitionEnd, { once: true });\n\n // Fallback method: timeout\n setTimeout(() => {\n completeClose();\n }, ANIMATION_TIMINGS.MAIN_MENU_CLOSE_TIMEOUT);\n\n console.log('\uD83C\uDF54 Main menu CLOSING...');\n }\n\n private handleMainMenuToggle(clickedButton: HTMLElement): void {\n console.log('Handling main menu toggle. Current state:', this.state.isMainMenuOpen, 'Is animating:', this.isAnimating);\n \n // Prevent multiple rapid clicks during animation\n if (this.isAnimating) {\n console.log('Animation in progress, ignoring click');\n return;\n }\n \n // Always toggle based on current state, regardless of which button was clicked\n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n } else {\n this.openMainMenu();\n }\n }\n\n private handleNestedMenuToggle(clickedButton: HTMLElement): void {\n console.log('Handling nested menu toggle. Current state:', this.state.isNestedMenuOpen, 'Is animating:', this.isAnimating);\n \n // Prevent multiple rapid clicks during animation\n if (this.isAnimating) {\n console.log('Animation in progress, ignoring click');\n return;\n }\n \n // Always toggle based on current state, regardless of which button was clicked\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n } else {\n this.openNestedMenu();\n }\n }\n\n private toggleMainMenu(): void {\n console.log('Toggling main menu. Current state:', this.state.isMainMenuOpen);\n \n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n } else {\n this.openMainMenu();\n }\n }\n\n private openNestedMenu(): void {\n if (this.state.isNestedMenuOpen) {\n console.log('Nested menu already open, skipping');\n return;\n }\n\n const { nestedMenu, navOverlay } = this.elements;\n \n nestedMenu.style.display = 'block';\n navOverlay.style.opacity = '1';\n \n setTimeout(() => {\n nestedMenu.style.transform = 'translateX(0%)';\n }, ANIMATION_TIMINGS.NESTED_MENU_DELAY);\n\n this.state.isNestedMenuOpen = true;\n console.log('\uD83D\uDCC2 Nested menu OPENED');\n }\n\n private closeNestedMenu(): void {\n if (!this.state.isNestedMenuOpen) {\n console.log('Nested menu already closed, skipping');\n return;\n }\n\n const { nestedMenu, navOverlay } = this.elements;\n \n nestedMenu.style.transform = 'translateX(100%)';\n navOverlay.style.opacity = '0';\n this.state.isNestedMenuOpen = false;\n \n setTimeout(() => {\n nestedMenu.style.display = 'none';\n console.log('\uD83D\uDCC2 Nested menu CLOSED (animation complete)');\n }, ANIMATION_TIMINGS.NESTED_MENU_CLOSE_DELAY);\n\n console.log('\uD83D\uDCC2 Nested menu closing...');\n }\n\n private toggleNestedMenu(): void {\n console.log('Toggling nested menu. Current state:', this.state.isNestedMenuOpen);\n \n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n } else {\n this.openNestedMenu();\n }\n }\n\n private updateMenuIcons(isOpen: boolean): void {\n const { openIcons, closeIcons } = this.elements;\n \n // console.log('Updating menu icons. isOpen:', isOpen);\n \n if (isOpen) {\n openIcons.forEach(icon => {\n icon.style.opacity = '0';\n });\n closeIcons.forEach(icon => {\n icon.style.opacity = '1';\n });\n } else {\n openIcons.forEach(icon => {\n icon.style.opacity = '1';\n });\n closeIcons.forEach(icon => {\n icon.style.opacity = '0';\n });\n }\n }\n\n private replaceContent(attrValue: string): void {\n // Hide all mobile menu content\n document.querySelectorAll<HTMLElement>(SELECTORS.MOBILE_MENU).forEach((div) => {\n div.style.display = 'none';\n });\n\n // Show target content\n const targetDiv = document.querySelector<HTMLElement>(`[data-mobile-menu=\"${attrValue}\"]`);\n if (targetDiv) {\n targetDiv.style.display = 'block';\n console.log(`\uD83D\uDCC4 Content switched to: ${attrValue}`);\n } else {\n console.warn(`Content element with data-mobile-menu=\"${attrValue}\" not found`);\n }\n }\n\n // Public methods for external access if needed\n public getState(): Readonly<MenuState> {\n return { ...this.state };\n }\n\n public closeAllMenus(): void {\n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n }\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n }\n}\n\n// Initialize navigation when DOM is ready\ndocument.addEventListener('DOMContentLoaded', () => {\n try {\n new MobileNavigation();\n } catch (error) {\n console.error('Failed to initialize mobile navigation:', error);\n }\n});\n\n// Export for potential use in other modules\nexport { MobileNavigation };"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Types and interfaces\ninterface MenuState {\n isMainMenuOpen: boolean;\n isNestedMenuOpen: boolean;\n}\n\ninterface MenuElements {\n nestedMenu: HTMLElement;\n mainMenu: HTMLElement;\n toggleMainMenuButtons: NodeListOf<HTMLElement>;\n toggleNestedMenuButtons: NodeListOf<HTMLElement>;\n mainMenuLinks: NodeListOf<HTMLElement>;\n navOverlay: HTMLElement;\n openIcons: NodeListOf<HTMLElement>;\n closeIcons: NodeListOf<HTMLElement>;\n}\n\n// Constants\nconst ANIMATION_TIMINGS = {\n NESTED_MENU_DELAY: 10,\n NESTED_MENU_CLOSE_DELAY: 500,\n MAIN_MENU_CLOSE_TIMEOUT: 300, // Add timeout for main menu close\n} as const;\n\nconst SELECTORS = {\n NESTED_MENU: '[data-mobile-nav=\"nested-menu\"]',\n MAIN_MENU: '[data-mobile-nav=\"main-menu\"]',\n TOGGLE_MAIN_MENU: '[data-nav-toggle=\"main-menu\"]',\n TOGGLE_NESTED_MENU: '[data-nav-toggle=\"nested-menu\"]',\n MAIN_MENU_LINKS: '[data-mobile-link]',\n NAV_OVERLAY: '[data-nav-element=\"overlay\"]',\n OPEN_ICON: '[data-menu-icon=\"open\"]',\n CLOSE_ICON: '[data-menu-icon=\"close\"]',\n MOBILE_MENU: '[data-mobile-menu]',\n} as const;\n\n// Main navigation class\nclass MobileNavigation {\n private state: MenuState = {\n isMainMenuOpen: false,\n isNestedMenuOpen: false,\n };\n\n private isAnimating = false; // Add animation lock\n\n private elements: MenuElements;\n\n constructor() {\n this.elements = this.getElements();\n this.init();\n }\n\n private getElements(): MenuElements {\n const nestedMenu = document.querySelector<HTMLElement>(SELECTORS.NESTED_MENU);\n const mainMenu = document.querySelector<HTMLElement>(SELECTORS.MAIN_MENU);\n const navOverlay = document.querySelector<HTMLElement>(SELECTORS.NAV_OVERLAY);\n const openIcons = document.querySelectorAll<HTMLElement>(SELECTORS.OPEN_ICON);\n const closeIcons = document.querySelectorAll<HTMLElement>(SELECTORS.CLOSE_ICON);\n\n if (!nestedMenu || !mainMenu || !navOverlay || openIcons.length === 0 || closeIcons.length === 0) {\n throw new Error('Required navigation elements not found');\n }\n\n return {\n nestedMenu,\n mainMenu,\n toggleMainMenuButtons: document.querySelectorAll<HTMLElement>(SELECTORS.TOGGLE_MAIN_MENU),\n toggleNestedMenuButtons: document.querySelectorAll<HTMLElement>(SELECTORS.TOGGLE_NESTED_MENU),\n mainMenuLinks: document.querySelectorAll<HTMLElement>(SELECTORS.MAIN_MENU_LINKS),\n navOverlay,\n openIcons,\n closeIcons,\n };\n }\n\n private init(): void {\n this.setupInitialStyles();\n this.bindEventListeners();\n }\n\n private setupInitialStyles(): void {\n // Setup nested menu initial styles\n this.elements.nestedMenu.style.display = 'none';\n this.elements.nestedMenu.style.transform = 'translateX(100%)';\n this.elements.nestedMenu.style.transition = 'transform 0.5s ease';\n\n // Setup main menu initial styles\n this.elements.mainMenu.style.display = 'block';\n this.elements.mainMenu.style.height = '0dvh';\n this.elements.mainMenu.style.transition = 'height 0.3s ease-in-out';\n\n // Setup icon initial styles for all icons\n this.elements.openIcons.forEach(icon => {\n icon.style.transition = 'opacity 0.2s ease';\n });\n \n this.elements.closeIcons.forEach(icon => {\n icon.style.transition = 'opacity 0.2s ease';\n });\n \n this.updateMenuIcons(false); // Start with open icons visible\n }\n\n private bindEventListeners(): void {\n // Main menu toggle buttons\n this.elements.toggleMainMenuButtons.forEach((button, index) => {\n button.addEventListener('click', (e) => {\n e.preventDefault();\n console.log(`Main menu button ${index} clicked, current state:`, this.state.isMainMenuOpen);\n this.handleMainMenuToggle(button);\n });\n });\n\n // Nested menu toggle buttons\n this.elements.toggleNestedMenuButtons.forEach((button, index) => {\n button.addEventListener('click', (e) => {\n e.preventDefault();\n console.log(`Nested menu button ${index} clicked, current state:`, this.state.isNestedMenuOpen);\n this.handleNestedMenuToggle(button);\n });\n });\n\n // Main menu links\n this.elements.mainMenuLinks.forEach((link) => {\n link.addEventListener('click', (event) => {\n const target = event.currentTarget as HTMLElement;\n const attrValue = target.getAttribute('data-mobile-link');\n \n if (attrValue) {\n console.log(`Menu link clicked: ${attrValue}`);\n this.replaceContent(attrValue);\n this.toggleNestedMenu();\n }\n });\n });\n }\n\n private openMainMenu(): void {\n if (this.state.isMainMenuOpen) {\n console.log('Main menu already open, skipping');\n return;\n }\n\n const { mainMenu } = this.elements;\n \n this.isAnimating = true;\n mainMenu.style.overflow = 'hidden';\n mainMenu.style.display = 'block';\n mainMenu.style.height = '0dvh';\n\n // Update state and icons immediately\n this.state.isMainMenuOpen = true;\n this.updateMenuIcons(true);\n\n requestAnimationFrame(() => {\n mainMenu.style.height = '100dvh';\n \n // Listen for animation completion\n const handleOpenComplete = () => {\n this.isAnimating = false;\n console.log('\uD83C\uDF54 Main menu OPENED (animation complete)');\n };\n\n mainMenu.addEventListener('transitionend', handleOpenComplete, { once: true });\n \n // Fallback timeout\n setTimeout(() => {\n this.isAnimating = false;\n }, 350); // Slightly longer than transition time\n });\n\n console.log('\uD83C\uDF54 Main menu OPENING...');\n }\n\n private closeMainMenu(): void {\n if (!this.state.isMainMenuOpen) {\n console.log('Main menu already closed, skipping');\n return;\n }\n\n const { mainMenu } = this.elements;\n \n this.isAnimating = true;\n \n // Update state and icons immediately\n this.state.isMainMenuOpen = false;\n this.updateMenuIcons(false);\n \n mainMenu.style.height = '0dvh';\n\n // Use both transitionend and setTimeout as fallback\n let animationCompleted = false;\n \n const completeClose = () => {\n if (animationCompleted) return;\n animationCompleted = true;\n \n mainMenu.style.display = 'none';\n this.isAnimating = false;\n console.log('\uD83C\uDF54 Main menu CLOSED (animation complete)');\n };\n\n // Primary method: listen for transition end\n const handleTransitionEnd = (e: TransitionEvent) => {\n if (e.target === mainMenu && e.propertyName === 'height') {\n completeClose();\n }\n };\n\n mainMenu.addEventListener('transitionend', handleTransitionEnd, { once: true });\n\n // Fallback method: timeout\n setTimeout(() => {\n completeClose();\n }, ANIMATION_TIMINGS.MAIN_MENU_CLOSE_TIMEOUT);\n\n console.log('\uD83C\uDF54 Main menu CLOSING...');\n }\n\n private handleMainMenuToggle(clickedButton: HTMLElement): void {\n console.log('Handling main menu toggle. Current state:', this.state.isMainMenuOpen, 'Is animating:', this.isAnimating);\n \n // Prevent multiple rapid clicks during animation\n if (this.isAnimating) {\n console.log('Animation in progress, ignoring click');\n return;\n }\n \n // Always toggle based on current state, regardless of which button was clicked\n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n } else {\n this.openMainMenu();\n }\n }\n\n private handleNestedMenuToggle(clickedButton: HTMLElement): void {\n console.log('Handling nested menu toggle. Current state:', this.state.isNestedMenuOpen, 'Is animating:', this.isAnimating);\n \n // Prevent multiple rapid clicks during animation\n if (this.isAnimating) {\n console.log('Animation in progress, ignoring click');\n return;\n }\n \n // Always toggle based on current state, regardless of which button was clicked\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n } else {\n this.openNestedMenu();\n }\n }\n\n private toggleMainMenu(): void {\n console.log('Toggling main menu. Current state:', this.state.isMainMenuOpen);\n \n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n } else {\n this.openMainMenu();\n }\n }\n\n private openNestedMenu(): void {\n if (this.state.isNestedMenuOpen) {\n console.log('Nested menu already open, skipping');\n return;\n }\n\n const { nestedMenu, navOverlay } = this.elements;\n \n nestedMenu.style.display = 'block';\n navOverlay.style.opacity = '1';\n \n setTimeout(() => {\n nestedMenu.style.transform = 'translateX(0%)';\n }, ANIMATION_TIMINGS.NESTED_MENU_DELAY);\n\n this.state.isNestedMenuOpen = true;\n console.log('\uD83D\uDCC2 Nested menu OPENED');\n }\n\n private closeNestedMenu(): void {\n if (!this.state.isNestedMenuOpen) {\n console.log('Nested menu already closed, skipping');\n return;\n }\n\n const { nestedMenu, navOverlay } = this.elements;\n \n nestedMenu.style.transform = 'translateX(100%)';\n navOverlay.style.opacity = '0';\n this.state.isNestedMenuOpen = false;\n \n setTimeout(() => {\n nestedMenu.style.display = 'none';\n console.log('\uD83D\uDCC2 Nested menu CLOSED (animation complete)');\n }, ANIMATION_TIMINGS.NESTED_MENU_CLOSE_DELAY);\n\n console.log('\uD83D\uDCC2 Nested menu closing...');\n }\n\n private toggleNestedMenu(): void {\n console.log('Toggling nested menu. Current state:', this.state.isNestedMenuOpen);\n \n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n } else {\n this.openNestedMenu();\n }\n }\n\n private updateMenuIcons(isOpen: boolean): void {\n const { openIcons, closeIcons } = this.elements;\n \n // console.log('Updating menu icons. isOpen:', isOpen);\n \n if (isOpen) {\n openIcons.forEach(icon => {\n icon.style.opacity = '0';\n });\n closeIcons.forEach(icon => {\n icon.style.opacity = '1';\n });\n } else {\n openIcons.forEach(icon => {\n icon.style.opacity = '1';\n });\n closeIcons.forEach(icon => {\n icon.style.opacity = '0';\n });\n }\n }\n\n private replaceContent(attrValue: string): void {\n // Hide all mobile menu content\n document.querySelectorAll<HTMLElement>(SELECTORS.MOBILE_MENU).forEach((div) => {\n div.style.display = 'none';\n });\n\n // Show target content\n const targetDiv = document.querySelector<HTMLElement>(`[data-mobile-menu=\"${attrValue}\"]`);\n if (targetDiv) {\n targetDiv.style.display = 'block';\n console.log(`\uD83D\uDCC4 Content switched to: ${attrValue}`);\n } else {\n console.warn(`Content element with data-mobile-menu=\"${attrValue}\" not found`);\n }\n }\n\n // Public methods for external access if needed\n public getState(): Readonly<MenuState> {\n return { ...this.state };\n }\n\n public closeAllMenus(): void {\n if (this.state.isMainMenuOpen) {\n this.closeMainMenu();\n }\n if (this.state.isNestedMenuOpen) {\n this.closeNestedMenu();\n }\n }\n}\n\n// Initialize navigation when DOM is ready\ndocument.addEventListener('DOMContentLoaded', () => {\n try {\n new MobileNavigation();\n } catch (error) {\n console.error('Failed to initialize mobile navigation:', error);\n }\n});\n\n// Export for potential use in other modules\nexport { MobileNavigation };"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../bin/live-reload.js", "../../../src/navigation/scroll/index.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "const navigationDiv = document.querySelector('[navigation-scrolled]') as HTMLElement;\nconst mobileNavigationMenus = document.querySelectorAll('[navigation-scrolled-menu]') as NodeListOf<HTMLElement>;\nconst allNavigationScrolledDivs = document.querySelectorAll('[navigation-scrolled-dependent]') as NodeListOf<HTMLElement>;\n\nfunction setNavigationScrolled(): void {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const isScrolled = scrollTop > 350;\n \n if (!navigationDiv) {\n console.warn('Navigation element not found');\n return;\n }\n navigationDiv.setAttribute('navigation-scrolled', isScrolled ? 'true' : 'false');\n\n if (mobileNavigationMenus) {\n mobileNavigationMenus.forEach((menu) => {\n menu.setAttribute('navigation-scrolled-menu', isScrolled ? 'true' : 'false');\n });\n }\n\n // Set navigation-scrolled attribute for all divs with this attribute\n if (allNavigationScrolledDivs) {\n allNavigationScrolledDivs.forEach((div) => {\n div.setAttribute('navigation-scrolled-dependent', isScrolled ? 'true' : 'false');\n });\n }\n // console.log(scrollTop)\n}\n\nfunction checkAndDisableAnnouncementBars(): void {\n const announcementBarElements = document.querySelectorAll('[announcementbar]');\n const geoAnnouncementBarElements = document.querySelectorAll('[geolocation-announcementbar]'); // <-- new query\n\n if (announcementBarElements.length === 0 && geoAnnouncementBarElements.length === 0) {\n console.warn('No announcement bar elements found');\n return;\n }\n\n const shouldEnable = !(window.announcementSlides === 0 || window.announcementSlides === undefined);\n\n // Update announcementbar elements\n announcementBarElements.forEach((element) => {\n element.setAttribute('announcementbar', shouldEnable ? 'true' : 'false');\n });\n\n // Update geolocation-announcementbar elements\n geoAnnouncementBarElements.forEach((element) => {\n element.setAttribute('geolocation-announcementbar', shouldEnable ? 'true' : 'false');\n });\n\n if (!shouldEnable) {\n console.log('No announcement slides found, disabling announcement bars.');\n }\n}\n\nnavigationDiv.setAttribute('navigation-scrolled', 'true');\n\ndocument.addEventListener('DOMContentLoaded', () => {\n setTimeout(() => {\n checkAndDisableAnnouncementBars();\n setNavigationScrolled();\n }, 120);\n});\n\n// Handle scroll events\nwindow.addEventListener('scroll', setNavigationScrolled);"],
5
- "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACVA,MAAM,gBAAgB,SAAS,cAAc,uBAAuB;AACpE,MAAM,wBAAwB,SAAS,iBAAiB,4BAA4B;AACpF,MAAM,4BAA4B,SAAS,iBAAiB,iCAAiC;AAE7F,WAAS,wBAA8B;AACnC,UAAM,YAAY,OAAO,WAAW,SAAS,gBAAgB;AAC7D,UAAM,aAAa,YAAY;AAE/B,QAAI,CAAC,eAAe;AAChB,cAAQ,KAAK,8BAA8B;AAC3C;AAAA,IACJ;AACA,kBAAc,aAAa,uBAAuB,aAAa,SAAS,OAAO;AAE/E,QAAI,uBAAuB;AACvB,4BAAsB,QAAQ,CAAC,SAAS;AACpC,aAAK,aAAa,4BAA4B,aAAa,SAAS,OAAO;AAAA,MAC/E,CAAC;AAAA,IACL;AAGA,QAAI,2BAA2B;AAC3B,gCAA0B,QAAQ,CAAC,QAAQ;AACvC,YAAI,aAAa,iCAAiC,aAAa,SAAS,OAAO;AAAA,MACnF,CAAC;AAAA,IACL;AAAA,EAEJ;AAEA,WAAS,kCAAwC;AAC7C,UAAM,0BAA0B,SAAS,iBAAiB,mBAAmB;AAC7E,UAAM,6BAA6B,SAAS,iBAAiB,+BAA+B;AAE5F,QAAI,wBAAwB,WAAW,KAAK,2BAA2B,WAAW,GAAG;AACjF,cAAQ,KAAK,oCAAoC;AACjD;AAAA,IACJ;AAEA,UAAM,eAAe,EAAE,OAAO,uBAAuB,KAAK,OAAO,uBAAuB;AAGxF,4BAAwB,QAAQ,CAAC,YAAY;AACzC,cAAQ,aAAa,mBAAmB,eAAe,SAAS,OAAO;AAAA,IAC3E,CAAC;AAGD,+BAA2B,QAAQ,CAAC,YAAY;AAC5C,cAAQ,aAAa,+BAA+B,eAAe,SAAS,OAAO;AAAA,IACvF,CAAC;AAED,QAAI,CAAC,cAAc;AACf,cAAQ,IAAI,4DAA4D;AAAA,IAC5E;AAAA,EACJ;AAEA,gBAAc,aAAa,uBAAuB,MAAM;AAExD,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,eAAW,MAAM;AACb,sCAAgC;AAChC,4BAAsB;AAAA,IAC1B,GAAG,GAAG;AAAA,EACV,CAAC;AAGD,SAAO,iBAAiB,UAAU,qBAAqB;",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "const navigationDiv = document.querySelector('[navigation-scrolled]') as HTMLElement;\nconst mobileNavigationMenus = document.querySelectorAll('[navigation-scrolled-menu]') as NodeListOf<HTMLElement>;\nconst allNavigationScrolledDivs = document.querySelectorAll('[navigation-scrolled-dependent]') as NodeListOf<HTMLElement>;\n\nfunction setNavigationScrolled(): void {\n const scrollTop = window.scrollY || document.documentElement.scrollTop;\n const isScrolled = scrollTop > 350;\n \n if (!navigationDiv) {\n console.warn('Navigation element not found');\n return;\n }\n navigationDiv.setAttribute('navigation-scrolled', isScrolled ? 'true' : 'false');\n\n if (mobileNavigationMenus) {\n mobileNavigationMenus.forEach((menu) => {\n menu.setAttribute('navigation-scrolled-menu', isScrolled ? 'true' : 'false');\n });\n }\n\n // Set navigation-scrolled attribute for all divs with this attribute\n if (allNavigationScrolledDivs) {\n allNavigationScrolledDivs.forEach((div) => {\n div.setAttribute('navigation-scrolled-dependent', isScrolled ? 'true' : 'false');\n });\n }\n // console.log(scrollTop)\n}\n\nfunction checkAndDisableAnnouncementBars(): void {\n const announcementBarElements = document.querySelectorAll('[announcementbar]');\n const geoAnnouncementBarElements = document.querySelectorAll('[geolocation-announcementbar]'); // <-- new query\n\n if (announcementBarElements.length === 0 && geoAnnouncementBarElements.length === 0) {\n console.warn('No announcement bar elements found');\n return;\n }\n\n const shouldEnable = !(window.announcementSlides === 0 || window.announcementSlides === undefined);\n\n // Update announcementbar elements\n announcementBarElements.forEach((element) => {\n element.setAttribute('announcementbar', shouldEnable ? 'true' : 'false');\n });\n\n // Update geolocation-announcementbar elements\n geoAnnouncementBarElements.forEach((element) => {\n element.setAttribute('geolocation-announcementbar', shouldEnable ? 'true' : 'false');\n });\n\n if (!shouldEnable) {\n console.log('No announcement slides found, disabling announcement bars.');\n }\n}\n\nnavigationDiv.setAttribute('navigation-scrolled', 'true');\n\ndocument.addEventListener('DOMContentLoaded', () => {\n setTimeout(() => {\n checkAndDisableAnnouncementBars();\n setNavigationScrolled();\n }, 120);\n});\n\n// Handle scroll events\nwindow.addEventListener('scroll', setNavigationScrolled);"],
5
+ "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,MAAM,gBAAgB,SAAS,cAAc,uBAAuB;AACpE,MAAM,wBAAwB,SAAS,iBAAiB,4BAA4B;AACpF,MAAM,4BAA4B,SAAS,iBAAiB,iCAAiC;AAE7F,WAAS,wBAA8B;AACnC,UAAM,YAAY,OAAO,WAAW,SAAS,gBAAgB;AAC7D,UAAM,aAAa,YAAY;AAE/B,QAAI,CAAC,eAAe;AAChB,cAAQ,KAAK,8BAA8B;AAC3C;AAAA,IACJ;AACA,kBAAc,aAAa,uBAAuB,aAAa,SAAS,OAAO;AAE/E,QAAI,uBAAuB;AACvB,4BAAsB,QAAQ,CAAC,SAAS;AACpC,aAAK,aAAa,4BAA4B,aAAa,SAAS,OAAO;AAAA,MAC/E,CAAC;AAAA,IACL;AAGA,QAAI,2BAA2B;AAC3B,gCAA0B,QAAQ,CAAC,QAAQ;AACvC,YAAI,aAAa,iCAAiC,aAAa,SAAS,OAAO;AAAA,MACnF,CAAC;AAAA,IACL;AAAA,EAEJ;AAEA,WAAS,kCAAwC;AAC7C,UAAM,0BAA0B,SAAS,iBAAiB,mBAAmB;AAC7E,UAAM,6BAA6B,SAAS,iBAAiB,+BAA+B;AAE5F,QAAI,wBAAwB,WAAW,KAAK,2BAA2B,WAAW,GAAG;AACjF,cAAQ,KAAK,oCAAoC;AACjD;AAAA,IACJ;AAEA,UAAM,eAAe,EAAE,OAAO,uBAAuB,KAAK,OAAO,uBAAuB;AAGxF,4BAAwB,QAAQ,CAAC,YAAY;AACzC,cAAQ,aAAa,mBAAmB,eAAe,SAAS,OAAO;AAAA,IAC3E,CAAC;AAGD,+BAA2B,QAAQ,CAAC,YAAY;AAC5C,cAAQ,aAAa,+BAA+B,eAAe,SAAS,OAAO;AAAA,IACvF,CAAC;AAED,QAAI,CAAC,cAAc;AACf,cAAQ,IAAI,4DAA4D;AAAA,IAC5E;AAAA,EACJ;AAEA,gBAAc,aAAa,uBAAuB,MAAM;AAExD,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,eAAW,MAAM;AACb,sCAAgC;AAChC,4BAAsB;AAAA,IAC1B,GAAG,GAAG;AAAA,EACV,CAAC;AAGD,SAAO,iBAAiB,UAAU,qBAAqB;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../bin/live-reload.js", "../../../src/navigation/secondary-navigation/index.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "\n\n// ===============================\n// TYPE DEFINITIONS\n// ===============================\ninterface NavLink {\n id: string;\n Text: string;\n link: string;\n}\n\ninterface NavGroup {\n groupName: string;\n Links: NavLink[];\n}\n\ninterface AdjacentSection {\n id: string;\n position: 'previous' | 'next';\n}\n\n// ===============================\n// GLOBAL STATE\n// ===============================\nlet cachedSecondaryNavItems: NavGroup[] | null = null;\nlet isInitialLoad = true;\nlet scrollTrackingInitialized = false;\nlet isSecondaryNavigationVisible = false;\nlet isAnimating = false;\n\n// ===============================\n// UTILITY FUNCTIONS\n// ===============================\nclass SecondaryNavUtils {\n static hasAnyActiveNavLink(): boolean {\n const activeNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active=\"true\"]') as NodeListOf<HTMLElement>;\n return activeNavLinks.length > 0;\n }\n\n static checkIfAnySectionVisible(): boolean {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const viewportHeight = window.innerHeight;\n \n for (const section of navSections) {\n const rect = section.getBoundingClientRect();\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 50) {\n return true;\n }\n }\n return false;\n }\n\n static findMostVisibleSection(): string | null {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const viewportHeight = window.innerHeight;\n let mostVisibleSection: string | null = null;\n let highestVisibility = 0;\n \n navSections.forEach((section) => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const rect = section.getBoundingClientRect();\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 50 && visibilityPercentage > highestVisibility) {\n highestVisibility = visibilityPercentage;\n mostVisibleSection = sectionId;\n }\n });\n \n return mostVisibleSection;\n }\n\n static getCurrentSectionGroup(sectionId: string): string | null {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n \n for (const group of secondaryNavItems) {\n const found = group.Links.find(link => link.id === sectionId);\n if (found) {\n return group.groupName;\n }\n }\n return null;\n }\n\n static getAdjacentSections(currentSectionId: string): AdjacentSection[] {\n const allSections = Array.from(document.querySelectorAll('[fynd-secondary-nav-id]')) as HTMLElement[];\n const currentIndex = allSections.findIndex(section => \n section.getAttribute('fynd-secondary-nav-id') === currentSectionId\n );\n \n const adjacent: AdjacentSection[] = [];\n \n if (currentIndex > 0) {\n const prevId = allSections[currentIndex - 1].getAttribute('fynd-secondary-nav-id');\n if (prevId) adjacent.push({ id: prevId, position: 'previous' });\n }\n \n if (currentIndex < allSections.length - 1) {\n const nextId = allSections[currentIndex + 1].getAttribute('fynd-secondary-nav-id');\n if (nextId) adjacent.push({ id: nextId, position: 'next' });\n }\n \n return adjacent;\n }\n\n static getGroupSections(groupName: string): NavLink[] {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n const group = secondaryNavItems.find(g => g.groupName === groupName);\n return group ? group.Links : [];\n }\n}\n\n// ===============================\n// DATA MANAGEMENT\n// ===============================\nclass SecondaryNavData {\n static getSecondaryNavItems(): NavGroup[] {\n if (cachedSecondaryNavItems) {\n return cachedSecondaryNavItems;\n }\n \n const secondaryNavDivs: NodeListOf<HTMLDivElement> = document.querySelectorAll('[fynd-secondary-nav=\"true\"]');\n const groupedNavs: { [key: string]: NavLink[] } = {};\n \n secondaryNavDivs.forEach((div: HTMLDivElement, index: number) => {\n const navText: string | null = div.getAttribute('fynd-secondary-nav-text');\n const navGroup: string | null = div.getAttribute('fynd-secondary-nav-group');\n \n let uniqueId = div.getAttribute('fynd-secondary-nav-id');\n if (!uniqueId) {\n uniqueId = `secondary-nav-${navGroup}-${index}-${Date.now()}`;\n div.setAttribute('fynd-secondary-nav-id', uniqueId);\n }\n \n const scrollTargetElement = div.querySelector('[fynd-scroll-target]') as HTMLElement;\n const scrollTargetValue = scrollTargetElement?.getAttribute('fynd-scroll-target');\n \n if (navText && navGroup && scrollTargetValue) {\n if (!groupedNavs[navGroup]) {\n groupedNavs[navGroup] = [];\n }\n \n groupedNavs[navGroup].push({ \n id: uniqueId,\n Text: navText,\n link: scrollTargetValue \n });\n }\n });\n \n const navGroupsArray: NavGroup[] = Object.keys(groupedNavs).map(groupName => ({\n groupName,\n Links: groupedNavs[groupName]\n }));\n \n cachedSecondaryNavItems = navGroupsArray;\n return navGroupsArray;\n }\n\n static getSecondaryNavJSON(): string {\n const navGroups = this.getSecondaryNavItems();\n return JSON.stringify(navGroups, null, 2);\n }\n\n static getCurrentlyVisibleGroup(): string | null {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const groupVisibility: { [key: string]: number } = {};\n \n navSections.forEach(section => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const groupName = SecondaryNavUtils.getCurrentSectionGroup(sectionId);\n if (!groupName) return;\n \n const rect = section.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 0) {\n if (!groupVisibility[groupName]) {\n groupVisibility[groupName] = 0;\n }\n groupVisibility[groupName] += visibilityPercentage;\n }\n });\n \n let mostVisibleGroup: string | null = null;\n let highestVisibility = 25;\n \n Object.entries(groupVisibility).forEach(([groupName, totalVisibility]) => {\n if (totalVisibility > highestVisibility) {\n highestVisibility = totalVisibility;\n mostVisibleGroup = groupName;\n }\n });\n \n return mostVisibleGroup;\n }\n}\n\n// ===============================\n// NAVIGATION LINK MANAGEMENT\n// ===============================\nclass NavLinkManager {\n static setAllNavLinksInactive(): void {\n if (!SecondaryNavUtils.checkIfAnySectionVisible()) {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLElement>;\n allNavLinks.forEach(navLink => {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n });\n }\n }\n\n static activateNavLink(sectionId: string): void {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLElement>;\n allNavLinks.forEach(navLink => {\n const linkId = navLink.getAttribute('fynd-secondary-navlink-id');\n if (linkId !== sectionId) {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n \n const matchingNavLink = document.querySelector(`[fynd-secondary-navlink-active][fynd-secondary-navlink-id=\"${sectionId}\"]`) as HTMLElement;\n \n if (matchingNavLink) {\n matchingNavLink.setAttribute('fynd-secondary-navlink-active', 'true');\n } else {\n console.warn(`\u274C No matching nav link found for section: ${sectionId}`);\n }\n }\n\n static setActiveTab(): void {\n const navLinkDivs = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLDivElement>;\n \n navLinkDivs.forEach((div: HTMLDivElement) => {\n const isAnchorActive = div.getAttribute('fynd-anchor-active') === 'true';\n \n if (isAnchorActive) {\n div.setAttribute('fynd-secondary-navlink-active', 'true');\n } else {\n div.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n }\n}\n\n// ===============================\n// ANIMATION CONTROLLER\n// ===============================\nclass AnimationController {\n static toggleSecondaryNav(shouldShow: boolean): void {\n if (isAnimating || isSecondaryNavigationVisible === shouldShow) return;\n \n const wrapper = document.querySelector('[fynd-secondary-nav=\"wrapper\"]') as HTMLElement;\n if (!wrapper) {\n console.warn(\"Secondary nav wrapper not found\");\n return;\n }\n \n isAnimating = true;\n isSecondaryNavigationVisible = shouldShow;\n \n if (shouldShow) {\n this.showSecondaryNav(wrapper);\n } else {\n this.hideSecondaryNav(wrapper);\n }\n }\n\n private static showSecondaryNav(wrapper: HTMLElement): void {\n wrapper.style.transform = 'translateY(-100px)';\n wrapper.style.display = 'block';\n wrapper.offsetHeight;\n \n wrapper.style.transition = 'transform 300ms ease';\n wrapper.style.transform = 'translateY(0px)';\n \n this.updateNavigationScrolledStyle(true);\n \n setTimeout(() => {\n wrapper.style.transition = '';\n isAnimating = false;\n }, 300);\n }\n\n private static hideSecondaryNav(wrapper: HTMLElement): void {\n wrapper.style.transition = 'transform 300ms ease';\n wrapper.style.transform = 'translateY(-100px)';\n \n this.updateNavigationScrolledStyle(false);\n \n setTimeout(() => {\n wrapper.style.display = 'none';\n wrapper.style.transition = '';\n isAnimating = false;\n }, 300);\n }\n\n private static updateNavigationScrolledStyle(isSecondaryNavVisible: boolean): void {\n const navigationScrolledElement = document.querySelector('[navigation-scrolled]') as HTMLElement;\n \n if (!navigationScrolledElement) {\n console.warn(\"Element with [navigation-scrolled] attribute not found\");\n return;\n }\n \n if (isSecondaryNavVisible) {\n navigationScrolledElement.style.boxShadow = 'none';\n } else {\n navigationScrolledElement.style.removeProperty('box-shadow');\n }\n }\n}\n\n// ===============================\n// GROUP VISIBILITY MANAGER\n// ===============================\nclass GroupVisibilityManager {\n static updateGroupVisibility(activeGroupName: string | null): void {\n this.updateNavLinkVisibility(activeGroupName);\n this.updateWrapperVisibility(activeGroupName);\n }\n\n private static updateNavLinkVisibility(activeGroupName: string | null): void {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-nav=\"link\"]') as NodeListOf<HTMLElement>;\n \n allNavLinks.forEach(navLink => {\n const linkGroupName = navLink.getAttribute('fynd-secondary-navgroup');\n \n if (activeGroupName && linkGroupName === activeGroupName) {\n navLink.style.display = '';\n navLink.setAttribute('fynd-group-visible', 'true');\n } else {\n navLink.style.display = 'none';\n navLink.setAttribute('fynd-group-visible', 'false');\n }\n });\n }\n\n private static updateWrapperVisibility(activeGroupName: string | null): void {\n const hasActiveLinks = SecondaryNavUtils.hasAnyActiveNavLink();\n const shouldShowNav = activeGroupName !== null && hasActiveLinks;\n AnimationController.toggleSecondaryNav(shouldShowNav);\n }\n}\n\n// ===============================\n// NAVIGATION CONTROLLER\n// ===============================\nclass NavigationController {\n static handleNavigation(currentSectionId: string): void {\n const currentSectionElement = document.querySelector(`[fynd-secondary-nav-id=\"${currentSectionId}\"]`) as HTMLElement;\n if (!currentSectionElement) return;\n \n const currentGroupName = SecondaryNavUtils.getCurrentSectionGroup(currentSectionId);\n if (!currentGroupName) {\n GroupVisibilityManager.updateGroupVisibility(null);\n return;\n }\n \n GroupVisibilityManager.updateGroupVisibility(currentGroupName);\n \n const adjacentSections = SecondaryNavUtils.getAdjacentSections(currentSectionId);\n const hasAdjacentSameGroup = adjacentSections.some(adjSection => {\n const adjGroupName = SecondaryNavUtils.getCurrentSectionGroup(adjSection.id);\n return adjGroupName === currentGroupName;\n });\n \n if (hasAdjacentSameGroup) {\n this.handleGroupSequentialNavigation(currentSectionId, currentGroupName);\n } else {\n NavLinkManager.activateNavLink(currentSectionId);\n }\n }\n\n private static handleGroupSequentialNavigation(currentSectionId: string, groupName: string): void {\n const groupSections = SecondaryNavUtils.getGroupSections(groupName);\n const currentIndex = groupSections.findIndex(section => section.id === currentSectionId);\n \n if (currentIndex === -1) return;\n \n groupSections.forEach(section => {\n const navLink = document.querySelector(`[fynd-secondary-navlink-id=\"${section.id}\"]`) as HTMLElement;\n if (navLink) {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n \n NavLinkManager.activateNavLink(currentSectionId);\n }\n\n static checkInitialGroupVisibility(): void {\n const visibleGroup = SecondaryNavData.getCurrentlyVisibleGroup();\n \n if (visibleGroup) {\n const mostVisible = SecondaryNavUtils.findMostVisibleSection();\n if (mostVisible) {\n const mostVisibleGroup = SecondaryNavUtils.getCurrentSectionGroup(mostVisible);\n if (mostVisibleGroup === visibleGroup) {\n NavLinkManager.activateNavLink(mostVisible);\n }\n }\n \n GroupVisibilityManager.updateGroupVisibility(visibleGroup);\n } else {\n GroupVisibilityManager.updateGroupVisibility(null);\n }\n }\n}\n\n// ===============================\n// INITIALIZATION\n// ===============================\nclass SecondaryNavInitializer {\n static initSecondarynav(): void {\n const secondaryNavItems = SecondaryNavData.getSecondaryNavItems();\n \n if (secondaryNavItems.length === 0) {\n return;\n }\n \n const slotDiv = document.querySelector('[fynd-secondary-nav=\"slot\"]') as HTMLDivElement;\n if (!slotDiv) {\n console.warn(\"Secondary nav slot not found\");\n return;\n }\n \n this.buildNavLinks(slotDiv, secondaryNavItems);\n this.initializeScrollNavigation();\n }\n\n private static buildNavLinks(slotDiv: HTMLDivElement, secondaryNavItems: NavGroup[]): void {\n slotDiv.innerHTML = '';\n \n secondaryNavItems.forEach((group: NavGroup) => {\n group.Links.forEach((navLink: NavLink) => {\n const linkDiv = this.createNavLinkElement(navLink, group.groupName);\n slotDiv.appendChild(linkDiv);\n });\n });\n }\n\n private static createNavLinkElement(navLink: NavLink, groupName: string): HTMLDivElement {\n const linkDiv = document.createElement('div');\n \n linkDiv.setAttribute('fynd-secondary-nav', 'link');\n linkDiv.setAttribute('fynd-secondary-navgroup', groupName);\n linkDiv.setAttribute('fynd-secondary-navlink-id', navLink.id);\n linkDiv.setAttribute('fynd-scroll-trigger', navLink.link);\n linkDiv.setAttribute('data-text-style', 'body-m-regular');\n linkDiv.setAttribute('fynd-secondary-navlink-active', 'false');\n \n linkDiv.textContent = navLink.Text;\n \n linkDiv.addEventListener('click', () => {\n setTimeout(() => {\n NavLinkManager.setActiveTab();\n }, 50);\n });\n \n return linkDiv;\n }\n\n private static initializeScrollNavigation(): void {\n (window as any).scrollNavigation?.fullReinitialize();\n }\n\n static initSecondarynavScroll(): void {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n \n if (navSections.length === 0) {\n return;\n }\n \n this.setupScrollTriggers(navSections);\n this.finalizeInitialization(navSections.length);\n }\n\n private static setupScrollTriggers(navSections: NodeListOf<HTMLElement>): void {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n \n navSections.forEach((section: HTMLElement) => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const correspondingData = this.findCorrespondingData(sectionId, secondaryNavItems);\n if (!correspondingData) return;\n \n this.createScrollTrigger(section, sectionId, correspondingData);\n });\n }\n\n private static findCorrespondingData(sectionId: string, secondaryNavItems: NavGroup[]): NavLink | null {\n for (const group of secondaryNavItems) {\n const found = group.Links.find(link => link.id === sectionId);\n if (found) return found;\n }\n return null;\n }\n\n private static createScrollTrigger(section: HTMLElement, sectionId: string, correspondingData: NavLink): void {\n (window as any).gsap.registerPlugin((window as any).ScrollTrigger);\n \n (window as any).ScrollTrigger.create({\n trigger: section,\n start: \"top bottom\",\n end: \"bottom top\",\n onUpdate: (self: any) => {\n if (isInitialLoad) return;\n \n const rect = section.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n const mostVisible = SecondaryNavUtils.findMostVisibleSection();\n \n if (mostVisible && mostVisible === sectionId && visibilityPercentage > 50) {\n NavigationController.handleNavigation(sectionId);\n } else if (!mostVisible) {\n const visibleGroup = SecondaryNavData.getCurrentlyVisibleGroup();\n if (visibleGroup) {\n GroupVisibilityManager.updateGroupVisibility(visibleGroup);\n } else {\n setTimeout(() => {\n if (!SecondaryNavUtils.checkIfAnySectionVisible()) {\n NavLinkManager.setAllNavLinksInactive();\n GroupVisibilityManager.updateGroupVisibility(null);\n }\n }, 10);\n }\n }\n }\n });\n }\n\n private static finalizeInitialization(sectionCount: number): void {\n scrollTrackingInitialized = true;\n \n setTimeout(() => {\n isInitialLoad = false;\n NavigationController.checkInitialGroupVisibility();\n }, 500);\n }\n}\n\n// ===============================\n// MAIN EXECUTION\n// ===============================\nconst secondaryNavItems = SecondaryNavData.getSecondaryNavItems();\n\ndocument.addEventListener('DOMContentLoaded', () => {\n setTimeout(() => {\n cachedSecondaryNavItems = null;\n isInitialLoad = true;\n \n SecondaryNavInitializer.initSecondarynav();\n \n setTimeout(() => {\n SecondaryNavInitializer.initSecondarynavScroll();\n }, 300);\n }, 200);\n});"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "\n\n// ===============================\n// TYPE DEFINITIONS\n// ===============================\ninterface NavLink {\n id: string;\n Text: string;\n link: string;\n}\n\ninterface NavGroup {\n groupName: string;\n Links: NavLink[];\n}\n\ninterface AdjacentSection {\n id: string;\n position: 'previous' | 'next';\n}\n\n// ===============================\n// GLOBAL STATE\n// ===============================\nlet cachedSecondaryNavItems: NavGroup[] | null = null;\nlet isInitialLoad = true;\nlet scrollTrackingInitialized = false;\nlet isSecondaryNavigationVisible = false;\nlet isAnimating = false;\n\n// ===============================\n// UTILITY FUNCTIONS\n// ===============================\nclass SecondaryNavUtils {\n static hasAnyActiveNavLink(): boolean {\n const activeNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active=\"true\"]') as NodeListOf<HTMLElement>;\n return activeNavLinks.length > 0;\n }\n\n static checkIfAnySectionVisible(): boolean {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const viewportHeight = window.innerHeight;\n \n for (const section of navSections) {\n const rect = section.getBoundingClientRect();\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 50) {\n return true;\n }\n }\n return false;\n }\n\n static findMostVisibleSection(): string | null {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const viewportHeight = window.innerHeight;\n let mostVisibleSection: string | null = null;\n let highestVisibility = 0;\n \n navSections.forEach((section) => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const rect = section.getBoundingClientRect();\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 50 && visibilityPercentage > highestVisibility) {\n highestVisibility = visibilityPercentage;\n mostVisibleSection = sectionId;\n }\n });\n \n return mostVisibleSection;\n }\n\n static getCurrentSectionGroup(sectionId: string): string | null {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n \n for (const group of secondaryNavItems) {\n const found = group.Links.find(link => link.id === sectionId);\n if (found) {\n return group.groupName;\n }\n }\n return null;\n }\n\n static getAdjacentSections(currentSectionId: string): AdjacentSection[] {\n const allSections = Array.from(document.querySelectorAll('[fynd-secondary-nav-id]')) as HTMLElement[];\n const currentIndex = allSections.findIndex(section => \n section.getAttribute('fynd-secondary-nav-id') === currentSectionId\n );\n \n const adjacent: AdjacentSection[] = [];\n \n if (currentIndex > 0) {\n const prevId = allSections[currentIndex - 1].getAttribute('fynd-secondary-nav-id');\n if (prevId) adjacent.push({ id: prevId, position: 'previous' });\n }\n \n if (currentIndex < allSections.length - 1) {\n const nextId = allSections[currentIndex + 1].getAttribute('fynd-secondary-nav-id');\n if (nextId) adjacent.push({ id: nextId, position: 'next' });\n }\n \n return adjacent;\n }\n\n static getGroupSections(groupName: string): NavLink[] {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n const group = secondaryNavItems.find(g => g.groupName === groupName);\n return group ? group.Links : [];\n }\n}\n\n// ===============================\n// DATA MANAGEMENT\n// ===============================\nclass SecondaryNavData {\n static getSecondaryNavItems(): NavGroup[] {\n if (cachedSecondaryNavItems) {\n return cachedSecondaryNavItems;\n }\n \n const secondaryNavDivs: NodeListOf<HTMLDivElement> = document.querySelectorAll('[fynd-secondary-nav=\"true\"]');\n const groupedNavs: { [key: string]: NavLink[] } = {};\n \n secondaryNavDivs.forEach((div: HTMLDivElement, index: number) => {\n const navText: string | null = div.getAttribute('fynd-secondary-nav-text');\n const navGroup: string | null = div.getAttribute('fynd-secondary-nav-group');\n \n let uniqueId = div.getAttribute('fynd-secondary-nav-id');\n if (!uniqueId) {\n uniqueId = `secondary-nav-${navGroup}-${index}-${Date.now()}`;\n div.setAttribute('fynd-secondary-nav-id', uniqueId);\n }\n \n const scrollTargetElement = div.querySelector('[fynd-scroll-target]') as HTMLElement;\n const scrollTargetValue = scrollTargetElement?.getAttribute('fynd-scroll-target');\n \n if (navText && navGroup && scrollTargetValue) {\n if (!groupedNavs[navGroup]) {\n groupedNavs[navGroup] = [];\n }\n \n groupedNavs[navGroup].push({ \n id: uniqueId,\n Text: navText,\n link: scrollTargetValue \n });\n }\n });\n \n const navGroupsArray: NavGroup[] = Object.keys(groupedNavs).map(groupName => ({\n groupName,\n Links: groupedNavs[groupName]\n }));\n \n cachedSecondaryNavItems = navGroupsArray;\n return navGroupsArray;\n }\n\n static getSecondaryNavJSON(): string {\n const navGroups = this.getSecondaryNavItems();\n return JSON.stringify(navGroups, null, 2);\n }\n\n static getCurrentlyVisibleGroup(): string | null {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n const groupVisibility: { [key: string]: number } = {};\n \n navSections.forEach(section => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const groupName = SecondaryNavUtils.getCurrentSectionGroup(sectionId);\n if (!groupName) return;\n \n const rect = section.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n if (visibilityPercentage > 0) {\n if (!groupVisibility[groupName]) {\n groupVisibility[groupName] = 0;\n }\n groupVisibility[groupName] += visibilityPercentage;\n }\n });\n \n let mostVisibleGroup: string | null = null;\n let highestVisibility = 25;\n \n Object.entries(groupVisibility).forEach(([groupName, totalVisibility]) => {\n if (totalVisibility > highestVisibility) {\n highestVisibility = totalVisibility;\n mostVisibleGroup = groupName;\n }\n });\n \n return mostVisibleGroup;\n }\n}\n\n// ===============================\n// NAVIGATION LINK MANAGEMENT\n// ===============================\nclass NavLinkManager {\n static setAllNavLinksInactive(): void {\n if (!SecondaryNavUtils.checkIfAnySectionVisible()) {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLElement>;\n allNavLinks.forEach(navLink => {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n });\n }\n }\n\n static activateNavLink(sectionId: string): void {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLElement>;\n allNavLinks.forEach(navLink => {\n const linkId = navLink.getAttribute('fynd-secondary-navlink-id');\n if (linkId !== sectionId) {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n \n const matchingNavLink = document.querySelector(`[fynd-secondary-navlink-active][fynd-secondary-navlink-id=\"${sectionId}\"]`) as HTMLElement;\n \n if (matchingNavLink) {\n matchingNavLink.setAttribute('fynd-secondary-navlink-active', 'true');\n } else {\n console.warn(`\u274C No matching nav link found for section: ${sectionId}`);\n }\n }\n\n static setActiveTab(): void {\n const navLinkDivs = document.querySelectorAll('[fynd-secondary-navlink-active]') as NodeListOf<HTMLDivElement>;\n \n navLinkDivs.forEach((div: HTMLDivElement) => {\n const isAnchorActive = div.getAttribute('fynd-anchor-active') === 'true';\n \n if (isAnchorActive) {\n div.setAttribute('fynd-secondary-navlink-active', 'true');\n } else {\n div.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n }\n}\n\n// ===============================\n// ANIMATION CONTROLLER\n// ===============================\nclass AnimationController {\n static toggleSecondaryNav(shouldShow: boolean): void {\n if (isAnimating || isSecondaryNavigationVisible === shouldShow) return;\n \n const wrapper = document.querySelector('[fynd-secondary-nav=\"wrapper\"]') as HTMLElement;\n if (!wrapper) {\n console.warn(\"Secondary nav wrapper not found\");\n return;\n }\n \n isAnimating = true;\n isSecondaryNavigationVisible = shouldShow;\n \n if (shouldShow) {\n this.showSecondaryNav(wrapper);\n } else {\n this.hideSecondaryNav(wrapper);\n }\n }\n\n private static showSecondaryNav(wrapper: HTMLElement): void {\n wrapper.style.transform = 'translateY(-100px)';\n wrapper.style.display = 'block';\n wrapper.offsetHeight;\n \n wrapper.style.transition = 'transform 300ms ease';\n wrapper.style.transform = 'translateY(0px)';\n \n this.updateNavigationScrolledStyle(true);\n \n setTimeout(() => {\n wrapper.style.transition = '';\n isAnimating = false;\n }, 300);\n }\n\n private static hideSecondaryNav(wrapper: HTMLElement): void {\n wrapper.style.transition = 'transform 300ms ease';\n wrapper.style.transform = 'translateY(-100px)';\n \n this.updateNavigationScrolledStyle(false);\n \n setTimeout(() => {\n wrapper.style.display = 'none';\n wrapper.style.transition = '';\n isAnimating = false;\n }, 300);\n }\n\n private static updateNavigationScrolledStyle(isSecondaryNavVisible: boolean): void {\n const navigationScrolledElement = document.querySelector('[navigation-scrolled]') as HTMLElement;\n \n if (!navigationScrolledElement) {\n console.warn(\"Element with [navigation-scrolled] attribute not found\");\n return;\n }\n \n if (isSecondaryNavVisible) {\n navigationScrolledElement.style.boxShadow = 'none';\n } else {\n navigationScrolledElement.style.removeProperty('box-shadow');\n }\n }\n}\n\n// ===============================\n// GROUP VISIBILITY MANAGER\n// ===============================\nclass GroupVisibilityManager {\n static updateGroupVisibility(activeGroupName: string | null): void {\n this.updateNavLinkVisibility(activeGroupName);\n this.updateWrapperVisibility(activeGroupName);\n }\n\n private static updateNavLinkVisibility(activeGroupName: string | null): void {\n const allNavLinks = document.querySelectorAll('[fynd-secondary-nav=\"link\"]') as NodeListOf<HTMLElement>;\n \n allNavLinks.forEach(navLink => {\n const linkGroupName = navLink.getAttribute('fynd-secondary-navgroup');\n \n if (activeGroupName && linkGroupName === activeGroupName) {\n navLink.style.display = '';\n navLink.setAttribute('fynd-group-visible', 'true');\n } else {\n navLink.style.display = 'none';\n navLink.setAttribute('fynd-group-visible', 'false');\n }\n });\n }\n\n private static updateWrapperVisibility(activeGroupName: string | null): void {\n const hasActiveLinks = SecondaryNavUtils.hasAnyActiveNavLink();\n const shouldShowNav = activeGroupName !== null && hasActiveLinks;\n AnimationController.toggleSecondaryNav(shouldShowNav);\n }\n}\n\n// ===============================\n// NAVIGATION CONTROLLER\n// ===============================\nclass NavigationController {\n static handleNavigation(currentSectionId: string): void {\n const currentSectionElement = document.querySelector(`[fynd-secondary-nav-id=\"${currentSectionId}\"]`) as HTMLElement;\n if (!currentSectionElement) return;\n \n const currentGroupName = SecondaryNavUtils.getCurrentSectionGroup(currentSectionId);\n if (!currentGroupName) {\n GroupVisibilityManager.updateGroupVisibility(null);\n return;\n }\n \n GroupVisibilityManager.updateGroupVisibility(currentGroupName);\n \n const adjacentSections = SecondaryNavUtils.getAdjacentSections(currentSectionId);\n const hasAdjacentSameGroup = adjacentSections.some(adjSection => {\n const adjGroupName = SecondaryNavUtils.getCurrentSectionGroup(adjSection.id);\n return adjGroupName === currentGroupName;\n });\n \n if (hasAdjacentSameGroup) {\n this.handleGroupSequentialNavigation(currentSectionId, currentGroupName);\n } else {\n NavLinkManager.activateNavLink(currentSectionId);\n }\n }\n\n private static handleGroupSequentialNavigation(currentSectionId: string, groupName: string): void {\n const groupSections = SecondaryNavUtils.getGroupSections(groupName);\n const currentIndex = groupSections.findIndex(section => section.id === currentSectionId);\n \n if (currentIndex === -1) return;\n \n groupSections.forEach(section => {\n const navLink = document.querySelector(`[fynd-secondary-navlink-id=\"${section.id}\"]`) as HTMLElement;\n if (navLink) {\n navLink.setAttribute('fynd-secondary-navlink-active', 'false');\n }\n });\n \n NavLinkManager.activateNavLink(currentSectionId);\n }\n\n static checkInitialGroupVisibility(): void {\n const visibleGroup = SecondaryNavData.getCurrentlyVisibleGroup();\n \n if (visibleGroup) {\n const mostVisible = SecondaryNavUtils.findMostVisibleSection();\n if (mostVisible) {\n const mostVisibleGroup = SecondaryNavUtils.getCurrentSectionGroup(mostVisible);\n if (mostVisibleGroup === visibleGroup) {\n NavLinkManager.activateNavLink(mostVisible);\n }\n }\n \n GroupVisibilityManager.updateGroupVisibility(visibleGroup);\n } else {\n GroupVisibilityManager.updateGroupVisibility(null);\n }\n }\n}\n\n// ===============================\n// INITIALIZATION\n// ===============================\nclass SecondaryNavInitializer {\n static initSecondarynav(): void {\n const secondaryNavItems = SecondaryNavData.getSecondaryNavItems();\n \n if (secondaryNavItems.length === 0) {\n return;\n }\n \n const slotDiv = document.querySelector('[fynd-secondary-nav=\"slot\"]') as HTMLDivElement;\n if (!slotDiv) {\n console.warn(\"Secondary nav slot not found\");\n return;\n }\n \n this.buildNavLinks(slotDiv, secondaryNavItems);\n this.initializeScrollNavigation();\n }\n\n private static buildNavLinks(slotDiv: HTMLDivElement, secondaryNavItems: NavGroup[]): void {\n slotDiv.innerHTML = '';\n \n secondaryNavItems.forEach((group: NavGroup) => {\n group.Links.forEach((navLink: NavLink) => {\n const linkDiv = this.createNavLinkElement(navLink, group.groupName);\n slotDiv.appendChild(linkDiv);\n });\n });\n }\n\n private static createNavLinkElement(navLink: NavLink, groupName: string): HTMLDivElement {\n const linkDiv = document.createElement('div');\n \n linkDiv.setAttribute('fynd-secondary-nav', 'link');\n linkDiv.setAttribute('fynd-secondary-navgroup', groupName);\n linkDiv.setAttribute('fynd-secondary-navlink-id', navLink.id);\n linkDiv.setAttribute('fynd-scroll-trigger', navLink.link);\n linkDiv.setAttribute('data-text-style', 'body-m-regular');\n linkDiv.setAttribute('fynd-secondary-navlink-active', 'false');\n \n linkDiv.textContent = navLink.Text;\n \n linkDiv.addEventListener('click', () => {\n setTimeout(() => {\n NavLinkManager.setActiveTab();\n }, 50);\n });\n \n return linkDiv;\n }\n\n private static initializeScrollNavigation(): void {\n (window as any).scrollNavigation?.fullReinitialize();\n }\n\n static initSecondarynavScroll(): void {\n const navSections = document.querySelectorAll('[fynd-secondary-nav-id]') as NodeListOf<HTMLElement>;\n \n if (navSections.length === 0) {\n return;\n }\n \n this.setupScrollTriggers(navSections);\n this.finalizeInitialization(navSections.length);\n }\n\n private static setupScrollTriggers(navSections: NodeListOf<HTMLElement>): void {\n const secondaryNavItems = cachedSecondaryNavItems || SecondaryNavData.getSecondaryNavItems();\n \n navSections.forEach((section: HTMLElement) => {\n const sectionId = section.getAttribute('fynd-secondary-nav-id');\n if (!sectionId) return;\n \n const correspondingData = this.findCorrespondingData(sectionId, secondaryNavItems);\n if (!correspondingData) return;\n \n this.createScrollTrigger(section, sectionId, correspondingData);\n });\n }\n\n private static findCorrespondingData(sectionId: string, secondaryNavItems: NavGroup[]): NavLink | null {\n for (const group of secondaryNavItems) {\n const found = group.Links.find(link => link.id === sectionId);\n if (found) return found;\n }\n return null;\n }\n\n private static createScrollTrigger(section: HTMLElement, sectionId: string, correspondingData: NavLink): void {\n (window as any).gsap.registerPlugin((window as any).ScrollTrigger);\n \n (window as any).ScrollTrigger.create({\n trigger: section,\n start: \"top bottom\",\n end: \"bottom top\",\n onUpdate: (self: any) => {\n if (isInitialLoad) return;\n \n const rect = section.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n const sectionHeight = rect.height;\n const visibilityPercentage = visibleHeight > 0 ? (visibleHeight / sectionHeight) * 100 : 0;\n \n const mostVisible = SecondaryNavUtils.findMostVisibleSection();\n \n if (mostVisible && mostVisible === sectionId && visibilityPercentage > 50) {\n NavigationController.handleNavigation(sectionId);\n } else if (!mostVisible) {\n const visibleGroup = SecondaryNavData.getCurrentlyVisibleGroup();\n if (visibleGroup) {\n GroupVisibilityManager.updateGroupVisibility(visibleGroup);\n } else {\n setTimeout(() => {\n if (!SecondaryNavUtils.checkIfAnySectionVisible()) {\n NavLinkManager.setAllNavLinksInactive();\n GroupVisibilityManager.updateGroupVisibility(null);\n }\n }, 10);\n }\n }\n }\n });\n }\n\n private static finalizeInitialization(sectionCount: number): void {\n scrollTrackingInitialized = true;\n \n setTimeout(() => {\n isInitialLoad = false;\n NavigationController.checkInitialGroupVisibility();\n }, 500);\n }\n}\n\n// ===============================\n// MAIN EXECUTION\n// ===============================\nconst secondaryNavItems = SecondaryNavData.getSecondaryNavItems();\n\ndocument.addEventListener('DOMContentLoaded', () => {\n setTimeout(() => {\n cachedSecondaryNavItems = null;\n isInitialLoad = true;\n \n SecondaryNavInitializer.initSecondarynav();\n \n setTimeout(() => {\n SecondaryNavInitializer.initSecondarynavScroll();\n }, 300);\n }, 200);\n});"],
5
+ "mappings": "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",
6
6
  "names": ["secondaryNavItems"]
7
7
  }
@@ -1 +1 @@
1
- .test__class{color:#f0f8ff}[fynd-navigation=dropdown-container]{top:0!important}[fynd-navigation=ip-banner]{height:0px;overflow:hidden}
1
+ .test__class{color:#f0f8ff}[fynd-navigation=dropdown-container]{top:0!important;padding-top:0!important}[fynd-navigation=ip-banner]{height:0px;overflow:hidden}#geoswitch-select::-ms-expand{display:none}#geoswitch-select{appearance:none;-webkit-appearance:none;-moz-appearance:none}[data-mobile-nav=main-menu]{z-index:8999999999999}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/navigation/temp.css"],
4
- "sourcesContent": [".test__class{\n color: aliceblue;\n}\n\n[fynd-navigation=\"dropdown-container\"]{\n top: 0 !important;\n}\n\n/* No control visibility of anouncementbar if there is any annnouncement -> make visible in webflow else make hidden */\n[fynd-navigation=\"announcement-bar\"]{\n\n}\n[fynd-navigation=\"ip-banner\"]{\n height: 0px;\n overflow: hidden;\n}\n\n"],
5
- "mappings": ";AAAA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACE,OAAK;AACR;AAGA,CAAC;AAED;AACA,CAAC;AACG,UAAQ;AACR,YAAU;AACd;",
4
+ "sourcesContent": [".test__class{\n color: aliceblue;\n}\n\n[fynd-navigation=\"dropdown-container\"]{\n top: 0 !important;\n padding-top: 0px !important;\n}\n\n/* No control visibility of anouncementbar if there is any annnouncement -> make visible in webflow else make hidden */\n[fynd-navigation=\"announcement-bar\"]{\n\n}\n[fynd-navigation=\"ip-banner\"]{\n height: 0px;\n overflow: hidden;\n}\n\n#geoswitch-select::-ms-expand {\n display: none; \n }\n\n #geoswitch-select {\n appearance: none; /* Standard */\n -webkit-appearance: none; /* Safari/Chrome */\n -moz-appearance: none; /* Firefox */\n }\n\n\n[data-mobile-nav=main-menu] {\n z-index: 8999999999999;\n}"],
5
+ "mappings": ";AAAA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACE,OAAK;AACL,eAAa;AAChB;AAGA,CAAC;AAED;AACA,CAAC;AACG,UAAQ;AACR,YAAU;AACd;AAEA,CAAC,gBAAgB;AACb,WAAS;AACX;AAEA,CAJD;AAKG,cAAY;AACZ,sBAAoB;AACpB,mBAAiB;AACnB;AAGF,CAAC;AACG,WAAS;AACb;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../bin/live-reload.js", "../../src/others/geolocation.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "const LOOKUP_URL = \"https://ipwho.is/\";\n\ninterface IpWhoResponse {\n success: boolean;\n country_code?: string;\n [key: string]: unknown;\n}\n\nfunction runNonBlocking(fn: () => void) {\n const start = () => {\n if (\"requestIdleCallback\" in window) {\n (window as any).requestIdleCallback(fn, { timeout: 2000 });\n } else {\n setTimeout(fn, 0);\n }\n };\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n } else {\n start();\n }\n}\n\nasync function getCountryCode(): Promise<string | null> {\n try {\n const res = await fetch(LOOKUP_URL);\n if (!res.ok) throw new Error(\"HTTP \" + res.status);\n const data: IpWhoResponse = await res.json();\n // Ensure only valid codes are returned\n return data.success && data.country_code ? data.country_code : null;\n } catch {\n return null;\n }\n}\n\nasync function init(): Promise<void> {\n const code = await getCountryCode();\n\n const el = document.querySelector<HTMLElement>(\"[fynd-geolocation]\");\n if (!el) return;\n\n if (code === \"IN\") {\n // Always show for India\n el.style.display = \"block\";\n } else {\n // Optional: always hide if not India\n el.style.display = \"none\";\n }\n}\n\n// Run after page is interactive, without blocking animations\nrunNonBlocking(init);"],
5
- "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACVA,MAAM,aAAa;AAQnB,WAAS,eAAe,IAAgB;AACtC,UAAM,QAAQ,MAAM;AAClB,UAAI,yBAAyB,QAAQ;AACnC,QAAC,OAAe,oBAAoB,IAAI,EAAE,SAAS,IAAK,CAAC;AAAA,MAC3D,OAAO;AACL,mBAAW,IAAI,CAAC;AAAA,MAClB;AAAA,IACF;AACA,QAAI,SAAS,eAAe,WAAW;AACrC,eAAS,iBAAiB,oBAAoB,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,IACrE,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,iBAAyC;AACtD,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,UAAU;AAClC,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,UAAU,IAAI,MAAM;AACjD,YAAM,OAAsB,MAAM,IAAI,KAAK;AAE3C,aAAO,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe;AAAA,IACjE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,iBAAe,OAAsB;AACnC,UAAM,OAAO,MAAM,eAAe;AAElC,UAAM,KAAK,SAAS,cAA2B,oBAAoB;AACnE,QAAI,CAAC,GAAI;AAET,QAAI,SAAS,MAAM;AAEjB,SAAG,MAAM,UAAU;AAAA,IACrB,OAAO;AAEL,SAAG,MAAM,UAAU;AAAA,IACrB;AAAA,EACF;AAGA,iBAAe,IAAI;",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "const LOOKUP_URL = \"https://ipwho.is/\";\n\ninterface IpWhoResponse {\n success: boolean;\n country_code?: string;\n [key: string]: unknown;\n}\n\nfunction runNonBlocking(fn: () => void) {\n const start = () => {\n if (\"requestIdleCallback\" in window) {\n (window as any).requestIdleCallback(fn, { timeout: 2000 });\n } else {\n setTimeout(fn, 0);\n }\n };\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n } else {\n start();\n }\n}\n\nasync function getCountryCode(): Promise<string | null> {\n try {\n const res = await fetch(LOOKUP_URL);\n if (!res.ok) throw new Error(\"HTTP \" + res.status);\n const data: IpWhoResponse = await res.json();\n // Ensure only valid codes are returned\n return data.success && data.country_code ? data.country_code : null;\n } catch {\n return null;\n }\n}\n\nasync function init(): Promise<void> {\n const code = await getCountryCode();\n\n const el = document.querySelector<HTMLElement>(\"[fynd-geolocation]\");\n if (!el) return;\n\n if (code === \"IN\") {\n // Always show for India\n el.style.display = \"block\";\n } else {\n // Optional: always hide if not India\n el.style.display = \"none\";\n }\n}\n\n// Run after page is interactive, without blocking animations\nrunNonBlocking(init);"],
5
+ "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACVA,MAAM,aAAa;AAQnB,WAAS,eAAe,IAAgB;AACtC,UAAM,QAAQ,MAAM;AAClB,UAAI,yBAAyB,QAAQ;AACnC,QAAC,OAAe,oBAAoB,IAAI,EAAE,SAAS,IAAK,CAAC;AAAA,MAC3D,OAAO;AACL,mBAAW,IAAI,CAAC;AAAA,MAClB;AAAA,IACF;AACA,QAAI,SAAS,eAAe,WAAW;AACrC,eAAS,iBAAiB,oBAAoB,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,IACrE,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,iBAAyC;AACtD,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,UAAU;AAClC,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,UAAU,IAAI,MAAM;AACjD,YAAM,OAAsB,MAAM,IAAI,KAAK;AAE3C,aAAO,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe;AAAA,IACjE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,iBAAe,OAAsB;AACnC,UAAM,OAAO,MAAM,eAAe;AAElC,UAAM,KAAK,SAAS,cAA2B,oBAAoB;AACnE,QAAI,CAAC,GAAI;AAET,QAAI,SAAS,MAAM;AAEjB,SAAG,MAAM,UAAU;AAAA,IACrB,OAAO;AAEL,SAAG,MAAM,UAAU;AAAA,IACrB;AAAA,EACF;AAGA,iBAAe,IAAI;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../bin/live-reload.js", "../../src/others/hero-aniamtion.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// fynd-animate.ts\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const elements = Array.from(\n document.querySelectorAll<HTMLElement>(\"[fynd-animate]\")\n );\n \n if (elements.length === 0) return;\n \n const gsap = (window as any).gsap;\n if (!gsap) {\n console.warn(\"GSAP not found on window.\");\n return;\n }\n \n const prefersReducedMotion = window.matchMedia(\n \"(prefers-reduced-motion: reduce)\"\n ).matches;\n \n if (prefersReducedMotion) {\n elements.forEach((el) => {\n el.style.opacity = \"1\";\n el.style.transform = \"translateY(0)\";\n el.style.filter = \"none\";\n });\n return;\n }\n \n // Initial state\n gsap.set(elements, { y: -10, opacity: 0, filter: \"blur(6px)\" });\n \n // Animate in\n setTimeout(() => {\n gsap.to(elements, {\n y: 0,\n opacity: 1,\n filter: \"blur(0px)\",\n duration: 0.8,\n ease: \"expo.out\",\n stagger: 0.1,\n overwrite: \"auto\",\n onComplete: () => {\n // Ensure filter:none is applied after animation ends\n elements.forEach((el) => {\n el.style.filter = \"none\";\n });\n },\n });\n }, 150);\n });"],
5
- "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACTA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS,iBAA8B,gBAAgB;AAAA,IACzD;AAEA,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,OAAQ,OAAe;AAC7B,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,2BAA2B;AACxC;AAAA,IACF;AAEA,UAAM,uBAAuB,OAAO;AAAA,MAClC;AAAA,IACF,EAAE;AAEF,QAAI,sBAAsB;AACxB,eAAS,QAAQ,CAAC,OAAO;AACvB,WAAG,MAAM,UAAU;AACnB,WAAG,MAAM,YAAY;AACrB,WAAG,MAAM,SAAS;AAAA,MACpB,CAAC;AACD;AAAA,IACF;AAGA,SAAK,IAAI,UAAU,EAAE,GAAG,KAAK,SAAS,GAAG,QAAQ,YAAY,CAAC;AAG9D,eAAW,MAAM;AACf,WAAK,GAAG,UAAU;AAAA,QAChB,GAAG;AAAA,QACH,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,MAAM;AAEhB,mBAAS,QAAQ,CAAC,OAAO;AACvB,eAAG,MAAM,SAAS;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,GAAG,GAAG;AAAA,EACR,CAAC;",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// fynd-animate.ts\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const elements = Array.from(\n document.querySelectorAll<HTMLElement>(\"[fynd-animate]\")\n );\n \n if (elements.length === 0) return;\n \n const gsap = (window as any).gsap;\n if (!gsap) {\n console.warn(\"GSAP not found on window.\");\n return;\n }\n \n const prefersReducedMotion = window.matchMedia(\n \"(prefers-reduced-motion: reduce)\"\n ).matches;\n \n if (prefersReducedMotion) {\n elements.forEach((el) => {\n el.style.opacity = \"1\";\n el.style.transform = \"translateY(0)\";\n el.style.filter = \"none\";\n });\n return;\n }\n \n // Initial state\n gsap.set(elements, { y: -10, opacity: 0, filter: \"blur(6px)\" });\n \n // Animate in\n setTimeout(() => {\n gsap.to(elements, {\n y: 0,\n opacity: 1,\n filter: \"blur(0px)\",\n duration: 0.8,\n ease: \"expo.out\",\n stagger: 0.1,\n overwrite: \"auto\",\n onComplete: () => {\n // Ensure filter:none is applied after animation ends\n elements.forEach((el) => {\n el.style.filter = \"none\";\n });\n },\n });\n }, 150);\n });"],
5
+ "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACTA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS,iBAA8B,gBAAgB;AAAA,IACzD;AAEA,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,OAAQ,OAAe;AAC7B,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,2BAA2B;AACxC;AAAA,IACF;AAEA,UAAM,uBAAuB,OAAO;AAAA,MAClC;AAAA,IACF,EAAE;AAEF,QAAI,sBAAsB;AACxB,eAAS,QAAQ,CAAC,OAAO;AACvB,WAAG,MAAM,UAAU;AACnB,WAAG,MAAM,YAAY;AACrB,WAAG,MAAM,SAAS;AAAA,MACpB,CAAC;AACD;AAAA,IACF;AAGA,SAAK,IAAI,UAAU,EAAE,GAAG,KAAK,SAAS,GAAG,QAAQ,YAAY,CAAC;AAG9D,eAAW,MAAM;AACf,WAAK,GAAG,UAAU;AAAA,QAChB,GAAG;AAAA,QACH,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY,MAAM;AAEhB,mBAAS,QAAQ,CAAC,OAAO;AACvB,eAAG,MAAM,SAAS;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,GAAG,GAAG;AAAA,EACR,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../bin/live-reload.js", "../../src/others/hero-india-animation-2.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// assumes gsap is available globally\nconst gsap = (window as any).gsap as any;\n\nexport const heroAnimatedText: string[] = [\n \"Online Selling\",\n \"Omnichannel POS\",\n \"Quick Commerce\",\n \"Order Management\",\n \"Supply Chain\",\n \"Enriched Catalog\",\n \"Photoshoot\",\n \"Retail Insights\",\n ];\n\nexport function playChroma(): void {\n const el = document.getElementById(\"chroma\");\n if (!el) return;\n el.setAttribute(\"data-animate\", \"false\");\n void el.offsetWidth; // reflow\n el.setAttribute(\"data-animate\", \"true\");\n}\n\nfunction makeChromaHeading(text: string): HTMLHeadingElement {\n const h1 = document.createElement(\"h1\");\n h1.id = \"chroma\";\n h1.className = \"chroma-text\";\n h1.setAttribute(\"data-animate\", \"false\");\n h1.textContent = text;\n h1.style.opacity = \"0\"; // start hidden\n return h1;\n}\n\ntype LoopOptions = { fadeDuration?: number; holdDuration?: number };\n\nexport function startChromaLoop(\n texts: string[] = heroAnimatedText,\n { fadeDuration = 0.35, holdDuration = 3.0 }: LoopOptions = {}\n) {\n const slot = document.querySelector<HTMLElement>(\"[chroma-slot]\");\n if (!slot || !gsap) return null;\n\n // Build one slide (child timeline) per string\n const slide = (text: string) => {\n const el = makeChromaHeading(text);\n const t = gsap.timeline({ defaults: { ease: \"power1.out\" } });\n\n t.add(() => {\n // Append right when this slide starts\n slot.appendChild(el);\n });\n\n t.to(el, {\n duration: fadeDuration,\n autoAlpha: 1, // opacity + visibility\n onStart: () => playChroma(),\n });\n\n t.to(el, { duration: holdDuration, autoAlpha: 1 });\n\n t.to(el, { duration: fadeDuration, autoAlpha: 0 });\n\n t.add(() => {\n el.remove();\n });\n\n return t;\n };\n\n // Master loop\n const master = gsap.timeline({ repeat: -1 });\n texts.forEach((txt) => master.add(slide(txt)));\n\n return master;\n}\n\n// kick it off\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n startChromaLoop();\n});"],
5
- "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACTA,MAAM,OAAQ,OAAe;AAEtB,MAAM,mBAA6B;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEK,WAAS,aAAmB;AACjC,UAAM,KAAK,SAAS,eAAe,QAAQ;AAC3C,QAAI,CAAC,GAAI;AACT,OAAG,aAAa,gBAAgB,OAAO;AACvC,SAAK,GAAG;AACR,OAAG,aAAa,gBAAgB,MAAM;AAAA,EACxC;AAEA,WAAS,kBAAkB,MAAkC;AAC3D,UAAM,KAAK,SAAS,cAAc,IAAI;AACtC,OAAG,KAAK;AACR,OAAG,YAAY;AACf,OAAG,aAAa,gBAAgB,OAAO;AACvC,OAAG,cAAc;AACjB,OAAG,MAAM,UAAU;AACnB,WAAO;AAAA,EACT;AAIO,WAAS,gBACd,QAAkB,kBAClB,EAAE,eAAe,MAAM,eAAe,EAAI,IAAiB,CAAC,GAC5D;AACA,UAAM,OAAO,SAAS,cAA2B,eAAe;AAChE,QAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAG3B,UAAM,QAAQ,CAAC,SAAiB;AAC9B,YAAM,KAAK,kBAAkB,IAAI;AACjC,YAAM,IAAI,KAAK,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,EAAE,CAAC;AAE5D,QAAE,IAAI,MAAM;AAEV,aAAK,YAAY,EAAE;AAAA,MACrB,CAAC;AAED,QAAE,GAAG,IAAI;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA;AAAA,QACX,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,QAAE,GAAG,IAAI,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAEjD,QAAE,GAAG,IAAI,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAEjD,QAAE,IAAI,MAAM;AACV,WAAG,OAAO;AAAA,MACZ,CAAC;AAED,aAAO;AAAA,IACT;AAGA,UAAM,SAAS,KAAK,SAAS,EAAE,QAAQ,GAAG,CAAC;AAC3C,UAAM,QAAQ,CAAC,QAAQ,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC;AAE7C,WAAO;AAAA,EACT;AAGA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,oBAAgB;AAAA,EAClB,CAAC;",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// assumes gsap is available globally\nconst gsap = (window as any).gsap as any;\n\nexport const heroAnimatedText: string[] = [\n \"Online Selling\",\n \"Omnichannel POS\",\n \"Quick Commerce\",\n \"Order Management\",\n \"Supply Chain\",\n \"Enriched Catalog\",\n \"Photoshoot\",\n \"Retail Insights\",\n ];\n\nexport function playChroma(): void {\n const el = document.getElementById(\"chroma\");\n if (!el) return;\n el.setAttribute(\"data-animate\", \"false\");\n void el.offsetWidth; // reflow\n el.setAttribute(\"data-animate\", \"true\");\n}\n\nfunction makeChromaHeading(text: string): HTMLHeadingElement {\n const h1 = document.createElement(\"h1\");\n h1.id = \"chroma\";\n h1.className = \"chroma-text\";\n h1.setAttribute(\"data-animate\", \"false\");\n h1.textContent = text;\n h1.style.opacity = \"0\"; // start hidden\n return h1;\n}\n\ntype LoopOptions = { fadeDuration?: number; holdDuration?: number };\n\nexport function startChromaLoop(\n texts: string[] = heroAnimatedText,\n { fadeDuration = 0.35, holdDuration = 3.0 }: LoopOptions = {}\n) {\n const slot = document.querySelector<HTMLElement>(\"[chroma-slot]\");\n if (!slot || !gsap) return null;\n\n // Build one slide (child timeline) per string\n const slide = (text: string) => {\n const el = makeChromaHeading(text);\n const t = gsap.timeline({ defaults: { ease: \"power1.out\" } });\n\n t.add(() => {\n // Append right when this slide starts\n slot.appendChild(el);\n });\n\n t.to(el, {\n duration: fadeDuration,\n autoAlpha: 1, // opacity + visibility\n onStart: () => playChroma(),\n });\n\n t.to(el, { duration: holdDuration, autoAlpha: 1 });\n\n t.to(el, { duration: fadeDuration, autoAlpha: 0 });\n\n t.add(() => {\n el.remove();\n });\n\n return t;\n };\n\n // Master loop\n const master = gsap.timeline({ repeat: -1 });\n texts.forEach((txt) => master.add(slide(txt)));\n\n return master;\n}\n\n// kick it off\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n startChromaLoop();\n});"],
5
+ "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACTA,MAAM,OAAQ,OAAe;AAEtB,MAAM,mBAA6B;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEK,WAAS,aAAmB;AACjC,UAAM,KAAK,SAAS,eAAe,QAAQ;AAC3C,QAAI,CAAC,GAAI;AACT,OAAG,aAAa,gBAAgB,OAAO;AACvC,SAAK,GAAG;AACR,OAAG,aAAa,gBAAgB,MAAM;AAAA,EACxC;AAEA,WAAS,kBAAkB,MAAkC;AAC3D,UAAM,KAAK,SAAS,cAAc,IAAI;AACtC,OAAG,KAAK;AACR,OAAG,YAAY;AACf,OAAG,aAAa,gBAAgB,OAAO;AACvC,OAAG,cAAc;AACjB,OAAG,MAAM,UAAU;AACnB,WAAO;AAAA,EACT;AAIO,WAAS,gBACd,QAAkB,kBAClB,EAAE,eAAe,MAAM,eAAe,EAAI,IAAiB,CAAC,GAC5D;AACA,UAAM,OAAO,SAAS,cAA2B,eAAe;AAChE,QAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAG3B,UAAM,QAAQ,CAAC,SAAiB;AAC9B,YAAM,KAAK,kBAAkB,IAAI;AACjC,YAAM,IAAI,KAAK,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,EAAE,CAAC;AAE5D,QAAE,IAAI,MAAM;AAEV,aAAK,YAAY,EAAE;AAAA,MACrB,CAAC;AAED,QAAE,GAAG,IAAI;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA;AAAA,QACX,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,QAAE,GAAG,IAAI,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAEjD,QAAE,GAAG,IAAI,EAAE,UAAU,cAAc,WAAW,EAAE,CAAC;AAEjD,QAAE,IAAI,MAAM;AACV,WAAG,OAAO;AAAA,MACZ,CAAC;AAED,aAAO;AAAA,IACT;AAGA,UAAM,SAAS,KAAK,SAAS,EAAE,QAAQ,GAAG,CAAC;AAC3C,UAAM,QAAQ,CAAC,QAAQ,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC;AAE7C,WAAO;AAAA,EACT;AAGA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,oBAAgB;AAAA,EAClB,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../bin/live-reload.js", "../../src/others/hero-india-animation.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "type RevealOptions = {\n selector?: string;\n delayMs?: number;\n perCharStagger?: number;\n revealDuration?: number;\n holdDuration?: number;\n outDuration?: number;\n yDistance?: number;\n };\n \n export function startHeroTextRevealWithSplit(\n phrases: string[],\n opts: RevealOptions = {}\n ) {\n const {\n selector = 'h1[hero-text-reveal=\"india\"]',\n delayMs = 2500,\n perCharStagger = 0.035,\n revealDuration = 0.6,\n holdDuration = 0.9,\n outDuration = 0.35,\n yDistance = 2,\n } = opts;\n \n const el = document.querySelector<HTMLElement>(selector);\n if (!el) return;\n \n const gsap = (window as any).gsap;\n const SplitText = (window as any).SplitText || (gsap && (gsap as any).SplitText);\n if (!gsap || !SplitText) return;\n \n if (gsap.registerPlugin) gsap.registerPlugin(SplitText);\n \n if (!Array.isArray(phrases) || phrases.length === 0) return;\n \n const prefersReducedMotion =\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n \n let index = 0;\n el.textContent = phrases[index];\n \n // \u2B07\uFE0F Inline shimmer helper\n const triggerShimmer = () => {\n const shimmerEl = document.getElementById(\"shimmerText\");\n if (!shimmerEl) return;\n shimmerEl.setAttribute(\"data-shimmer\", \"false\");\n void shimmerEl.offsetWidth; // force reflow\n shimmerEl.setAttribute(\"data-shimmer\", \"true\");\n };\n \n const animatePhrase = (text: string, onComplete: () => void) => {\n el.textContent = text;\n \n const split = new SplitText(el, { type: \"chars\" });\n const chars: HTMLElement[] = split.chars || [];\n \n gsap.set(chars, { opacity: 0, y: yDistance });\n \n const tl = gsap.timeline({\n defaults: { ease: \"power2.out\" },\n onComplete: () => {\n split.revert();\n onComplete();\n },\n });\n \n // \u2B07\uFE0F shimmer is triggered just before reveal starts\n tl.to(chars, {\n onStart: triggerShimmer,\n opacity: 1,\n y: 0,\n duration: revealDuration,\n stagger: perCharStagger,\n })\n .to({}, { duration: holdDuration })\n .to(chars, {\n opacity: 0,\n duration: outDuration,\n stagger: perCharStagger * 0.6,\n ease: \"power1.in\",\n });\n \n return tl;\n };\n \n if (prefersReducedMotion) {\n const cycle = () => {\n index = (index + 1) % phrases.length;\n el.textContent = phrases[index];\n setTimeout(cycle, 2000);\n };\n setTimeout(cycle, delayMs);\n return;\n }\n \n const playLoop = () => {\n index = (index + 1) % phrases.length;\n animatePhrase(phrases[index], playLoop);\n };\n \n setTimeout(playLoop, delayMs);\n }\n \n const heroAnimatedText = [\n \"selling online\",\n \"self-checkout in store\",\n \"product photoshoot\",\n \"multi-channel catalog\",\n \"hyperlocal delivery\",\n \"agentic support\",\n ];\n \n document.addEventListener(\"DOMContentLoaded\", () => {\n startHeroTextRevealWithSplit(heroAnimatedText);\n });"],
5
- "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,gDAAgD;AAAA,EAC9D;;;ACAS,WAAS,6BACd,SACA,OAAsB,CAAC,GACvB;AACA,UAAM;AAAA,MACJ,WAAW;AAAA,MACX,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,cAAc;AAAA,MACd,YAAY;AAAA,IACd,IAAI;AAEJ,UAAM,KAAK,SAAS,cAA2B,QAAQ;AACvD,QAAI,CAAC,GAAI;AAET,UAAM,OAAQ,OAAe;AAC7B,UAAM,YAAa,OAAe,aAAc,QAAS,KAAa;AACtE,QAAI,CAAC,QAAQ,CAAC,UAAW;AAEzB,QAAI,KAAK,eAAgB,MAAK,eAAe,SAAS;AAEtD,QAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,EAAG;AAErD,UAAM,uBACJ,OAAO,aAAa,kCAAkC,EAAE,WAAW;AAErE,QAAI,QAAQ;AACZ,OAAG,cAAc,QAAQ,KAAK;AAG9B,UAAM,iBAAiB,MAAM;AAC3B,YAAM,YAAY,SAAS,eAAe,aAAa;AACvD,UAAI,CAAC,UAAW;AAChB,gBAAU,aAAa,gBAAgB,OAAO;AAC9C,WAAK,UAAU;AACf,gBAAU,aAAa,gBAAgB,MAAM;AAAA,IAC/C;AAEA,UAAM,gBAAgB,CAAC,MAAc,eAA2B;AAC9D,SAAG,cAAc;AAEjB,YAAM,QAAQ,IAAI,UAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AACjD,YAAM,QAAuB,MAAM,SAAS,CAAC;AAE7C,WAAK,IAAI,OAAO,EAAE,SAAS,GAAG,GAAG,UAAU,CAAC;AAE5C,YAAM,KAAK,KAAK,SAAS;AAAA,QACvB,UAAU,EAAE,MAAM,aAAa;AAAA,QAC/B,YAAY,MAAM;AAChB,gBAAM,OAAO;AACb,qBAAW;AAAA,QACb;AAAA,MACF,CAAC;AAGD,SAAG,GAAG,OAAO;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT,GAAG;AAAA,QACH,UAAU;AAAA,QACV,SAAS;AAAA,MACX,CAAC,EACE,GAAG,CAAC,GAAG,EAAE,UAAU,aAAa,CAAC,EACjC,GAAG,OAAO;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,SAAS,iBAAiB;AAAA,QAC1B,MAAM;AAAA,MACR,CAAC;AAEH,aAAO;AAAA,IACT;AAEA,QAAI,sBAAsB;AACxB,YAAM,QAAQ,MAAM;AAClB,iBAAS,QAAQ,KAAK,QAAQ;AAC9B,WAAG,cAAc,QAAQ,KAAK;AAC9B,mBAAW,OAAO,GAAI;AAAA,MACxB;AACA,iBAAW,OAAO,OAAO;AACzB;AAAA,IACF;AAEA,UAAM,WAAW,MAAM;AACrB,eAAS,QAAQ,KAAK,QAAQ;AAC9B,oBAAc,QAAQ,KAAK,GAAG,QAAQ;AAAA,IACxC;AAEA,eAAW,UAAU,OAAO;AAAA,EAC9B;AAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,iCAA6B,gBAAgB;AAAA,EAC/C,CAAC;",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "type RevealOptions = {\n selector?: string;\n delayMs?: number;\n perCharStagger?: number;\n revealDuration?: number;\n holdDuration?: number;\n outDuration?: number;\n yDistance?: number;\n };\n \n export function startHeroTextRevealWithSplit(\n phrases: string[],\n opts: RevealOptions = {}\n ) {\n const {\n selector = 'h1[hero-text-reveal=\"india\"]',\n delayMs = 2500,\n perCharStagger = 0.035,\n revealDuration = 0.6,\n holdDuration = 0.9,\n outDuration = 0.35,\n yDistance = 2,\n } = opts;\n \n const el = document.querySelector<HTMLElement>(selector);\n if (!el) return;\n \n const gsap = (window as any).gsap;\n const SplitText = (window as any).SplitText || (gsap && (gsap as any).SplitText);\n if (!gsap || !SplitText) return;\n \n if (gsap.registerPlugin) gsap.registerPlugin(SplitText);\n \n if (!Array.isArray(phrases) || phrases.length === 0) return;\n \n const prefersReducedMotion =\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n \n let index = 0;\n el.textContent = phrases[index];\n \n // \u2B07\uFE0F Inline shimmer helper\n const triggerShimmer = () => {\n const shimmerEl = document.getElementById(\"shimmerText\");\n if (!shimmerEl) return;\n shimmerEl.setAttribute(\"data-shimmer\", \"false\");\n void shimmerEl.offsetWidth; // force reflow\n shimmerEl.setAttribute(\"data-shimmer\", \"true\");\n };\n \n const animatePhrase = (text: string, onComplete: () => void) => {\n el.textContent = text;\n \n const split = new SplitText(el, { type: \"chars\" });\n const chars: HTMLElement[] = split.chars || [];\n \n gsap.set(chars, { opacity: 0, y: yDistance });\n \n const tl = gsap.timeline({\n defaults: { ease: \"power2.out\" },\n onComplete: () => {\n split.revert();\n onComplete();\n },\n });\n \n // \u2B07\uFE0F shimmer is triggered just before reveal starts\n tl.to(chars, {\n onStart: triggerShimmer,\n opacity: 1,\n y: 0,\n duration: revealDuration,\n stagger: perCharStagger,\n })\n .to({}, { duration: holdDuration })\n .to(chars, {\n opacity: 0,\n duration: outDuration,\n stagger: perCharStagger * 0.6,\n ease: \"power1.in\",\n });\n \n return tl;\n };\n \n if (prefersReducedMotion) {\n const cycle = () => {\n index = (index + 1) % phrases.length;\n el.textContent = phrases[index];\n setTimeout(cycle, 2000);\n };\n setTimeout(cycle, delayMs);\n return;\n }\n \n const playLoop = () => {\n index = (index + 1) % phrases.length;\n animatePhrase(phrases[index], playLoop);\n };\n \n setTimeout(playLoop, delayMs);\n }\n \n const heroAnimatedText = [\n \"selling online\",\n \"self-checkout in store\",\n \"product photoshoot\",\n \"multi-channel catalog\",\n \"hyperlocal delivery\",\n \"agentic support\",\n ];\n \n document.addEventListener(\"DOMContentLoaded\", () => {\n startHeroTextRevealWithSplit(heroAnimatedText);\n });"],
5
+ "mappings": ";;;AACA,MACE,OAAO,SAAS,aAAa,eAC7B,OAAO,SAAS,aAAa,aAC7B;AACA,QAAI,YAAY,GAAG,uBAAY,UAAU,EAAE;AAAA,MAAiB;AAAA,MAAU,MACpE,SAAS,OAAO;AAAA,IAClB;AAAA,EACF,OAAO;AAAA,EAEP;;;ACAS,WAAS,6BACd,SACA,OAAsB,CAAC,GACvB;AACA,UAAM;AAAA,MACJ,WAAW;AAAA,MACX,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,cAAc;AAAA,MACd,YAAY;AAAA,IACd,IAAI;AAEJ,UAAM,KAAK,SAAS,cAA2B,QAAQ;AACvD,QAAI,CAAC,GAAI;AAET,UAAM,OAAQ,OAAe;AAC7B,UAAM,YAAa,OAAe,aAAc,QAAS,KAAa;AACtE,QAAI,CAAC,QAAQ,CAAC,UAAW;AAEzB,QAAI,KAAK,eAAgB,MAAK,eAAe,SAAS;AAEtD,QAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,EAAG;AAErD,UAAM,uBACJ,OAAO,aAAa,kCAAkC,EAAE,WAAW;AAErE,QAAI,QAAQ;AACZ,OAAG,cAAc,QAAQ,KAAK;AAG9B,UAAM,iBAAiB,MAAM;AAC3B,YAAM,YAAY,SAAS,eAAe,aAAa;AACvD,UAAI,CAAC,UAAW;AAChB,gBAAU,aAAa,gBAAgB,OAAO;AAC9C,WAAK,UAAU;AACf,gBAAU,aAAa,gBAAgB,MAAM;AAAA,IAC/C;AAEA,UAAM,gBAAgB,CAAC,MAAc,eAA2B;AAC9D,SAAG,cAAc;AAEjB,YAAM,QAAQ,IAAI,UAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AACjD,YAAM,QAAuB,MAAM,SAAS,CAAC;AAE7C,WAAK,IAAI,OAAO,EAAE,SAAS,GAAG,GAAG,UAAU,CAAC;AAE5C,YAAM,KAAK,KAAK,SAAS;AAAA,QACvB,UAAU,EAAE,MAAM,aAAa;AAAA,QAC/B,YAAY,MAAM;AAChB,gBAAM,OAAO;AACb,qBAAW;AAAA,QACb;AAAA,MACF,CAAC;AAGD,SAAG,GAAG,OAAO;AAAA,QACX,SAAS;AAAA,QACT,SAAS;AAAA,QACT,GAAG;AAAA,QACH,UAAU;AAAA,QACV,SAAS;AAAA,MACX,CAAC,EACE,GAAG,CAAC,GAAG,EAAE,UAAU,aAAa,CAAC,EACjC,GAAG,OAAO;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,SAAS,iBAAiB;AAAA,QAC1B,MAAM;AAAA,MACR,CAAC;AAEH,aAAO;AAAA,IACT;AAEA,QAAI,sBAAsB;AACxB,YAAM,QAAQ,MAAM;AAClB,iBAAS,QAAQ,KAAK,QAAQ;AAC9B,WAAG,cAAc,QAAQ,KAAK;AAC9B,mBAAW,OAAO,GAAI;AAAA,MACxB;AACA,iBAAW,OAAO,OAAO;AACzB;AAAA,IACF;AAEA,UAAM,WAAW,MAAM;AACrB,eAAS,QAAQ,KAAK,QAAQ;AAC9B,oBAAc,QAAQ,KAAK,GAAG,QAAQ;AAAA,IACxC;AAEA,eAAW,UAAU,OAAO;AAAA,EAC9B;AAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,WAAS,iBAAiB,oBAAoB,MAAM;AAClD,iCAA6B,gBAAgB;AAAA,EAC/C,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../bin/live-reload.js", "../../src/posthog-and-ga/attributes.ts"],
4
- "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "interface LinkTaggingRule {\n attribute: string;\n attributeValue: string;\n condition: string;\n conditionValue: string;\n }\n \n const DEFAULT_TAGGING_CONFIG: LinkTaggingRule[] = [\n {\n attribute: \"data-ph\",\n attributeValue: \"book-a-demo\",\n condition: \"href\",\n conditionValue: \"/contact-us\"\n },\n {\n attribute: \"data-ph\",\n attributeValue: \"sign-in\",\n condition: \"href\",\n conditionValue: \"https://console.fynd.com/auth/sign-in\"\n },\n {\n attribute: \"data-ph\",\n attributeValue: \"sign-up\",\n condition: \"href\",\n conditionValue: \"https://console.fynd.com/auth/sign-up\"\n }\n ];\n \n function matchesCondition(anchor: HTMLAnchorElement, condition: string, conditionValue: string): boolean {\n switch (condition.toLowerCase()) {\n case 'href':\n return matchesHref(anchor, conditionValue);\n case 'text':\n return matchesText(anchor, conditionValue);\n case 'class':\n return anchor.classList.contains(conditionValue);\n case 'id':\n return anchor.id === conditionValue;\n default:\n return false;\n }\n }\n \n function matchesHref(anchor: HTMLAnchorElement, conditionValue: string): boolean {\n const href = anchor.getAttribute('href') || '';\n if (!href) return false;\n \n try {\n let url: URL;\n \n if (href.startsWith('http://') || href.startsWith('https://')) {\n url = new URL(href);\n } else if (href.startsWith('/')) {\n url = new URL(href, window.location.origin);\n } else {\n url = new URL(href, window.location.href);\n }\n \n if (conditionValue.startsWith('http://') || conditionValue.startsWith('https://')) {\n try {\n const conditionUrl = new URL(conditionValue);\n return url.origin === conditionUrl.origin && url.pathname === conditionUrl.pathname;\n } catch {\n return href.includes(conditionValue);\n }\n }\n \n return url.pathname.includes(conditionValue);\n } catch (error) {\n return href.includes(conditionValue);\n }\n }\n \n function matchesText(anchor: HTMLAnchorElement, conditionValue: string): boolean {\n const textContent = anchor.textContent?.trim().toLowerCase() || '';\n const normalizedText = textContent.replace(/\\s+/g, ' ');\n const normalizedCondition = conditionValue.toLowerCase().replace(/\\s+/g, ' ');\n \n return normalizedText.includes(normalizedCondition);\n }\n \n function tagLinks(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n config.forEach((rule) => {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return;\n }\n \n if (matchesCondition(anchor, rule.condition, rule.conditionValue)) {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n });\n });\n }\n \n function tagLinksAdvanced(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n config.forEach((rule) => {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return;\n }\n \n if (matchesCondition(anchor, rule.condition, rule.conditionValue)) {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n });\n });\n }\n \n class GenericLinkTagger {\n private config: LinkTaggingRule[];\n private observer: MutationObserver | null = null;\n \n constructor(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG) {\n this.config = config;\n }\n \n updateConfig(config: LinkTaggingRule[]): void {\n this.config = config;\n }\n \n tagExistingLinks(): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n this.config.forEach((rule) => {\n if (this.shouldTagLink(anchor, rule)) {\n this.tagLink(anchor, rule);\n }\n });\n });\n }\n \n startObserving(): void {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n \n if (element.tagName === 'A') {\n this.processAnchor(element as HTMLAnchorElement);\n }\n \n const anchorTags = element.querySelectorAll('a');\n anchorTags.forEach((anchor) => {\n this.processAnchor(anchor);\n });\n }\n });\n });\n });\n \n this.observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n \n stopObserving(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n \n private processAnchor(anchor: HTMLAnchorElement): void {\n this.config.forEach((rule) => {\n if (this.shouldTagLink(anchor, rule)) {\n this.tagLink(anchor, rule);\n }\n });\n }\n \n private shouldTagLink(anchor: HTMLAnchorElement, rule: LinkTaggingRule): boolean {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return false;\n }\n \n return matchesCondition(anchor, rule.condition, rule.conditionValue);\n }\n \n private tagLink(anchor: HTMLAnchorElement, rule: LinkTaggingRule): void {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n }\n \n function initGenericLinkTagger(config?: LinkTaggingRule[]): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n tagLinksAdvanced(config);\n });\n } else {\n tagLinksAdvanced(config);\n }\n }\n \n function initGenericLinkTaggerWithObserver(config?: LinkTaggingRule[]): void {\n const runTagger = () => {\n const tagger = new GenericLinkTagger(config);\n tagger.tagExistingLinks();\n tagger.startObserving();\n };\n \n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', runTagger);\n } else {\n runTagger();\n }\n }\n \n initGenericLinkTaggerWithObserver();\n \n export { \n GenericLinkTagger, \n tagLinks, \n tagLinksAdvanced, \n initGenericLinkTagger, \n initGenericLinkTaggerWithObserver,\n DEFAULT_TAGGING_CONFIG,\n type LinkTaggingRule\n };"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n // console.log(\"Live reload disabled: not running on localhost\");\n}\n", "interface LinkTaggingRule {\n attribute: string;\n attributeValue: string;\n condition: string;\n conditionValue: string;\n }\n \n const DEFAULT_TAGGING_CONFIG: LinkTaggingRule[] = [\n {\n attribute: \"data-ph\",\n attributeValue: \"book-a-demo\",\n condition: \"href\",\n conditionValue: \"/contact-us\"\n },\n {\n attribute: \"data-ph\",\n attributeValue: \"sign-in\",\n condition: \"href\",\n conditionValue: \"https://console.fynd.com/auth/sign-in\"\n },\n {\n attribute: \"data-ph\",\n attributeValue: \"sign-up\",\n condition: \"href\",\n conditionValue: \"https://console.fynd.com/auth/sign-up\"\n }\n ];\n \n function matchesCondition(anchor: HTMLAnchorElement, condition: string, conditionValue: string): boolean {\n switch (condition.toLowerCase()) {\n case 'href':\n return matchesHref(anchor, conditionValue);\n case 'text':\n return matchesText(anchor, conditionValue);\n case 'class':\n return anchor.classList.contains(conditionValue);\n case 'id':\n return anchor.id === conditionValue;\n default:\n return false;\n }\n }\n \n function matchesHref(anchor: HTMLAnchorElement, conditionValue: string): boolean {\n const href = anchor.getAttribute('href') || '';\n if (!href) return false;\n \n try {\n let url: URL;\n \n if (href.startsWith('http://') || href.startsWith('https://')) {\n url = new URL(href);\n } else if (href.startsWith('/')) {\n url = new URL(href, window.location.origin);\n } else {\n url = new URL(href, window.location.href);\n }\n \n if (conditionValue.startsWith('http://') || conditionValue.startsWith('https://')) {\n try {\n const conditionUrl = new URL(conditionValue);\n return url.origin === conditionUrl.origin && url.pathname === conditionUrl.pathname;\n } catch {\n return href.includes(conditionValue);\n }\n }\n \n return url.pathname.includes(conditionValue);\n } catch (error) {\n return href.includes(conditionValue);\n }\n }\n \n function matchesText(anchor: HTMLAnchorElement, conditionValue: string): boolean {\n const textContent = anchor.textContent?.trim().toLowerCase() || '';\n const normalizedText = textContent.replace(/\\s+/g, ' ');\n const normalizedCondition = conditionValue.toLowerCase().replace(/\\s+/g, ' ');\n \n return normalizedText.includes(normalizedCondition);\n }\n \n function tagLinks(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n config.forEach((rule) => {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return;\n }\n \n if (matchesCondition(anchor, rule.condition, rule.conditionValue)) {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n });\n });\n }\n \n function tagLinksAdvanced(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n config.forEach((rule) => {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return;\n }\n \n if (matchesCondition(anchor, rule.condition, rule.conditionValue)) {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n });\n });\n }\n \n class GenericLinkTagger {\n private config: LinkTaggingRule[];\n private observer: MutationObserver | null = null;\n \n constructor(config: LinkTaggingRule[] = DEFAULT_TAGGING_CONFIG) {\n this.config = config;\n }\n \n updateConfig(config: LinkTaggingRule[]): void {\n this.config = config;\n }\n \n tagExistingLinks(): void {\n const anchorTags = document.querySelectorAll('a');\n \n anchorTags.forEach((anchor) => {\n this.config.forEach((rule) => {\n if (this.shouldTagLink(anchor, rule)) {\n this.tagLink(anchor, rule);\n }\n });\n });\n }\n \n startObserving(): void {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n \n if (element.tagName === 'A') {\n this.processAnchor(element as HTMLAnchorElement);\n }\n \n const anchorTags = element.querySelectorAll('a');\n anchorTags.forEach((anchor) => {\n this.processAnchor(anchor);\n });\n }\n });\n });\n });\n \n this.observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n \n stopObserving(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n \n private processAnchor(anchor: HTMLAnchorElement): void {\n this.config.forEach((rule) => {\n if (this.shouldTagLink(anchor, rule)) {\n this.tagLink(anchor, rule);\n }\n });\n }\n \n private shouldTagLink(anchor: HTMLAnchorElement, rule: LinkTaggingRule): boolean {\n if (anchor.hasAttribute(rule.attribute) && \n anchor.getAttribute(rule.attribute) === rule.attributeValue) {\n return false;\n }\n \n return matchesCondition(anchor, rule.condition, rule.conditionValue);\n }\n \n private tagLink(anchor: HTMLAnchorElement, rule: LinkTaggingRule): void {\n anchor.setAttribute(rule.attribute, rule.attributeValue);\n }\n }\n \n function initGenericLinkTagger(config?: LinkTaggingRule[]): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n tagLinksAdvanced(config);\n });\n } else {\n tagLinksAdvanced(config);\n }\n }\n \n function initGenericLinkTaggerWithObserver(config?: LinkTaggingRule[]): void {\n const runTagger = () => {\n const tagger = new GenericLinkTagger(config);\n tagger.tagExistingLinks();\n tagger.startObserving();\n };\n \n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', runTagger);\n } else {\n runTagger();\n }\n }\n \n initGenericLinkTaggerWithObserver();\n \n export { \n GenericLinkTagger, \n tagLinks, \n tagLinksAdvanced, \n initGenericLinkTagger, \n initGenericLinkTaggerWithObserver,\n DEFAULT_TAGGING_CONFIG,\n type LinkTaggingRule\n };"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }