@fynd-design-engineering/fynd-one-v2 3.4.0 → 3.4.2

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 (66) hide show
  1. package/dist/accordians/dropdown.js.map +7 -0
  2. package/dist/accordians/index.js.map +7 -0
  3. package/dist/cms-listing/index.js.map +7 -0
  4. package/dist/filters/clear-search.js.map +7 -0
  5. package/dist/filters/konnect.js.map +7 -0
  6. package/dist/filters/show-count.js.map +7 -0
  7. package/dist/form/country-dropdown.css +1 -0
  8. package/dist/form/country-dropdown.css.map +7 -0
  9. package/dist/form/cs-gated-redirection.js.map +7 -0
  10. package/dist/form/download-file.js.map +7 -0
  11. package/dist/form/validation.css.map +7 -0
  12. package/dist/form/validation.js.map +7 -0
  13. package/dist/global/anchor-scroll.js.map +7 -0
  14. package/dist/global/console-links.js.map +7 -0
  15. package/dist/global/contact-popup.js.map +7 -0
  16. package/dist/global/css/in-page-embed.css +1 -1
  17. package/dist/global/css/in-page-embed.css.map +7 -0
  18. package/dist/global/css/in-project-settings.css.map +7 -0
  19. package/dist/global/custom-bg-video.js.map +7 -0
  20. package/dist/global/loader.js.map +7 -0
  21. package/dist/global/media-card.js.map +7 -0
  22. package/dist/global/miscellaneous.js.map +7 -0
  23. package/dist/global/number-count.js.map +7 -0
  24. package/dist/global/popup-video.js.map +7 -0
  25. package/dist/global/progressive-scroll.js.map +7 -0
  26. package/dist/global/style.css.map +7 -0
  27. package/dist/global/video-card.js.map +7 -0
  28. package/dist/hacktimus/2025.js.map +7 -0
  29. package/dist/hacktimus/styles.css.map +7 -0
  30. package/dist/home/index.js.map +7 -0
  31. package/dist/marquee/index.js.map +7 -0
  32. package/dist/marquee/marquee-swiper.js.map +7 -0
  33. package/dist/navigation/announcement/index.js.map +7 -0
  34. package/dist/navigation/context-menu/index.js.map +7 -0
  35. package/dist/navigation/desktop/index.js.map +7 -0
  36. package/dist/navigation/initialization.js.map +7 -0
  37. package/dist/navigation/main.js.map +7 -0
  38. package/dist/navigation/mobile/index.js.map +7 -0
  39. package/dist/navigation/scroll/index.js.map +7 -0
  40. package/dist/navigation/secondary-navigation/index.js.map +7 -0
  41. package/dist/navigation/style.css.map +7 -0
  42. package/dist/navigation/temp.css.map +7 -0
  43. package/dist/navigation/theme.css.map +7 -0
  44. package/dist/others/geolocation.js.map +7 -0
  45. package/dist/others/hero-aniamtion.js.map +7 -0
  46. package/dist/others/hero-india-animation-2.js.map +7 -0
  47. package/dist/others/hero-india-animation.js.map +7 -0
  48. package/dist/posthog-and-ga/attributes.js.map +7 -0
  49. package/dist/posthog-and-ga/main.js.map +7 -0
  50. package/dist/progressive-scroll/index.js.map +7 -0
  51. package/dist/quick-fix/reload.js.map +7 -0
  52. package/dist/seo/schema.js.map +7 -0
  53. package/dist/slider/freescroll.js.map +7 -0
  54. package/dist/test/sample.js.map +7 -0
  55. package/dist/testimonials/index.js.map +7 -0
  56. package/dist/timeline/index.js.map +7 -0
  57. package/dist/timeline/style.css.map +7 -0
  58. package/dist/tracking/custom-id.js.map +7 -0
  59. package/dist/tracking/fill-form-fields.js.map +7 -0
  60. package/dist/tracking/form-tracker.js.map +7 -0
  61. package/dist/tracking/page-categories.js.map +7 -0
  62. package/dist/tracking/user-journey.js.map +7 -0
  63. package/dist/tracking/utm-links.js.map +7 -0
  64. package/dist/utils/sample.js.map +7 -0
  65. package/dist/validations/localhost.js.map +7 -0
  66. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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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",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;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
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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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",
6
+ "names": ["secondaryNavItems"]
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/navigation/style.css"],
4
+ "sourcesContent": ["[data-tab-link-active=\"true\"] {\n border-right-color: #404040;\n background-color: #f8f8f9;\n opacity: 1;\n}\n\n\n\n[data-tab-content-active] {\n display: none;\n}\n\n[data-tab-content-active=\"true\"] {\n display: block;\n}\n\n[data-tab-content-active=\"false\"] {\n display: none;\n}\n\n[data-nav-element=\"mover\"] {\n height: 0;\n overflow: hidden;\n}\n\n[data-nav-element=\"overlay\"] {\n opacity: 0;\n display: none;\n}\n\n[data-nav-element=\"wrapper\"] {\n top: 44px;\n /* top: 100px; */\n}\n\n[data-nav-toggle=\"main-menu\"]{\nz-index: 10 !important; /* z-index: 999; if we need to show in nested menu too */\n \n \n}\n\n[data-mobile-nav=\"main-menu\"] {\n z-index: 999; /* z-index: 999; if we need to show in nested menu too */\n}\n\n[data-nav-element=\"mover\"] {\n border-radius: 0px 0px 12px 12px;\n box-shadow: rgba(0, 0, 0, 0.03) 0px 12px 16px 6px;\n}\n\n[data-dropdown-item] {\n width: 100%;\n}\n\n[data-dropdown-item=\"resources\"] {\n width: 100%;\n}\n\n[data-dropdown-item=\"company\"] {\n width: 100%;\n}\n\n[data-desktop-content] {\n display: none;\n}\n\n@media (max-width: 992px) {\n [data-desktop-content] {\n display: block;\n }\n}\n\n/* announcement bar */\n\n.announcement-pagination.swiper-pagination-clickable.swiper-pagination-bullets.swiper-pagination-horizontal {\n display: none;\n flex-direction: column;\n height: 100%;\n bottom: 0px;\n justify-content: center;\n gap: 4px;\n padding-left: 20px;\n padding-right: 20px;\n}\n\nspan.swiper-pagination-bullet {\n width: 6px;\n height: 6px;\n background: rgba(255, 255, 255, 0.80);\n pointer-events: auto;\n}\n\nspan.swiper-pagination-bullet.swiper-pagination-bullet-active {\n background: white;\n}\n\n@media screen and (max-width: 1024px) {\n .announcement-pagination.swiper-pagination-clickable.swiper-pagination-bullets.swiper-pagination-horizontal {\n left: -16px;\n }\n}\n\n\n/* navigation scrolled up */\n[navigation-scrolled=\"true\"] {\n transform: translateY(-40px);\n box-shadow: rgba(0, 0, 0, 0.03) 0px 12px 16px 10px;\n}\n\n[announcementbar=\"false\"]{\n transform: translateY(-40px) !important;\n}\n\n[navigation-scrolled-menu=\"false\"] {\n top: 0px;\n }\n\n[navigation-scrolled=\"false\"] {\n transform: translateY(0);\n}\n\n@media screen and (max-width: 991px) {\n [navigation-scrolled=\"true\"] {\n transform: translateY(-50px);\n }\n\n [navigation-scrolled-menu=\"true\"] {\n top: 0px;\n }\n\n[announcementbar=\"false\"]{\n transform: translateY(-46px) !important;\n}\n}\n\n/* navigation scrolled when click loader is visible */\n[navigation-scrolled-dependent=\"true\"].click-loader{\n top : 40px;\n}\n[navigation-scrolled-dependent=\"false\"].click-loader{\n top : 40px;\n}\n\n/* secondary navigation */\n\n[fynd-secondary-nav=\"link\"]{\n border-bottom: 1px solid #0000;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n padding-top: 0.65rem;\n padding-bottom: 0.65rem;\n transition-property: all;\n transition-duration: 300ms;\n transition-timing-function: ease;\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n}\n[fynd-secondary-navlink-active=\"true\"]{\n background-color: #f2f2f2;\n border-bottom-color: #000;\n}\n\n[fynd-secondary-nav=\"wrapper\"] {\n display: none;\n}\n\n/* test after announcemnet */\n\n.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;AACC,sBAAoB;AACpB,oBAAkB;AAClB,WAAS;AACX;AAIA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;AAEA,CAAC;AACC,WAAS;AACT,WAAS;AACX;AAEA,CAAC;AACC,OAAK;AAEP;AAEA,CAAC;AACD,WAAS;AAGT;AAEA,CAAC;AACC,WAAS;AACX;AAEA,CAAC;AACC,iBAAe,IAAI,IAAI,KAAK;AAC5B,cAAY,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK,KAAK;AAChD;AAEA,CAAC;AACC,SAAO;AACT;AAEA,CAAC;AACC,SAAO;AACT;AAEA,CAAC;AACC,SAAO;AACT;AAEA,CAAC;AACC,WAAS;AACX;AAEA,OAAO,CAAC,SAAS,EAAE;AACjB,GAAC;AACC,aAAS;AACX;AACF;AAIA,CAAC,uBAAuB,CAAC,2BAA2B,CAAC,yBAAyB,CAAC;AAC7E,WAAS;AACT,kBAAgB;AAChB,UAAQ;AACR,UAAQ;AACR,mBAAiB;AACjB,OAAK;AACL,gBAAc;AACd,iBAAe;AACjB;AAEA,IAAI,CAAC;AACH,SAAO;AACP,UAAQ;AACR,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,kBAAgB;AAClB;AAEA,IAAI,CAPC,wBAOwB,CAAC;AAC5B,cAAY;AACd;AAEA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE;AAC5B,GAvBD,uBAuByB,CAvBD,2BAuB6B,CAvBD,yBAuB2B,CAvBD;AAwB3E,UAAM;AACR;AACF;AAIA,CAAC;AACC,aAAW,WAAW;AACtB,cAAY,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,KAAK,KAAK;AAChD;AAEA,CAAC;AACC,aAAW,WAAW;AACxB;AAEA,CAAC;AACG,OAAK;AACP;AAEF,CAAC;AACC,aAAW,WAAW;AACxB;AAEA,OAAO,OAAO,IAAI,CAAC,SAAS,EAAE;AAC5B,GAAC;AACC,eAAW,WAAW;AACxB;AAEA,GAAC;AACC,SAAK;AACP;AAEF,GAAC;AACC,eAAW,WAAW;AACxB;AACA;AAGA,CAAC,mCAAqC,CAAC;AACrC,OAAM;AACR;AACA,CAAC,oCAAsC,CAHA;AAIrC,OAAM;AACR;AAIA,CAAC;AACC,iBAAe,IAAI,MAAM;AACzB,0BAAwB;AACxB,2BAAyB;AACzB,gBAAc;AACd,iBAAe;AACf,eAAa;AACb,kBAAgB;AAChB,uBAAqB;AACrB,uBAAqB;AACrB,8BAA4B;AAC5B,UAAQ;AACR,eAAa;AACb,eAAa;AACf;AACA,CAAC;AACC,oBAAkB;AAClB,uBAAqB;AACvB;AAEA,CAAC;AACC,WAAS;AACX;AAIA,CAAC;AACC,SAAO;AACT;AAEA,CAAC;AACA,OAAK;AACL,eAAa;AACd;AAGA,CAAC;AAED;AACA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;AAEA,CAAC,gBAAgB;AACf,WAAS;AACX;AAEA,CAJC;AAKC,cAAY;AACZ,sBAAoB;AACpB,mBAAiB;AACnB;AAGA,CAAC;AACC,WAAS;AACX;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/navigation/theme.css"],
4
+ "sourcesContent": ["/* Background */\n[style-nav-bg=\"transparent\"] {\n background-color: transparent;\n}\n[style-nav-bg=\"white\"] {\n background-color: #fff;\n backdrop-filter: blur(50px);\n /* background-color: white; */\n}\n[style-nav-bg=\"white-blur\"] {\n background-color: rgba(255, 255, 255, 0.8);\n backdrop-filter: blur(50px);\n}\n\n/* Logo */\n[style-nav-logo=\"black\"] {\n color: black;\n}\n[style-nav-logo=\"white\"] {\n color: white;\n}\n\n/* Links */\n[style-nav-link=\"black\"] {\n color: black;\n}\n[style-nav-link=\"white\"] {\n color: #A0A1A2;\n}\n[style-nav-link=\"white\"]:hover {\n color: white !important;\n }\n\n/* Tertiary Button */\n[style-nav-tertiary-button=\"black\"] {\n color: black;\n}\n\n[style-nav-tertiary-button=\"white\"] {\n color: white !important;\n}\n[style-nav-tertiary-button=\"white\"]:hover {\n opacity: 0.8;\n}\n\n/* Secondary Button */\n[style-nav-secondary-button=\"black\"]{\n color: black;\n border-color: #0000001f !important;\n}\n[style-nav-secondary-button=\"white\"] {\n color: white !important;\n border-color: #ffffff38 !important;\n}\n\n/* Primary Button */\n[style-nav-primary-button=\"black\"] {\n background-color : #141414;\n color: #ffffff !important;\n}\n[style-nav-primary-button=\"white\"] {\n background-color : #ffffff;\n color: #141414 !important;\n}\n[style-nav-primary-button=\"white\"]:hover {\n background-color: #fff;\n opacity: 0.8;\n}\n\n/* Nav toggle */\n[style-nav-toggle=\"black\"] {\n color: black;\n}\n[style-nav-toggle=\"white\"] {\n color: white;\n}\n\n/* Body */\n[style-body-bg=\"white\"] {\n background-color: white;\n}\n[style-body-bg=\"black\"] {\n background-color: #0e0e0e;\n}"],
5
+ "mappings": ";AACA,CAAC;AACC,oBAAkB;AACpB;AACA,CAAC;AACG,oBAAkB;AAClB,mBAAiB,KAAK;AAE1B;AACA,CAAC;AACC,oBAAkB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACtC,mBAAiB,KAAK;AACxB;AAGA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AAGA,CAAC;AACC,SAAO;AACT;AACA,CAAC;AACC,SAAO;AACT;AACA,CAAC,qBAAuB;AACpB,SAAO;AACT;AAGF,CAAC;AACC,SAAO;AACT;AAEA,CAAC;AACC,SAAO;AACT;AACA,CAAC,gCAAkC;AACjC,WAAS;AACX;AAGA,CAAC;AACG,SAAO;AACP,gBAAc;AAClB;AACA,CAAC;AACC,SAAO;AACP,gBAAc;AAChB;AAGA,CAAC;AACG,oBAAmB;AACnB,SAAO;AACX;AACA,CAAC;AACG,oBAAmB;AACnB,SAAO;AACX;AACA,CAAC,+BAAiC;AAC9B,oBAAkB;AAClB,WAAS;AACb;AAGA,CAAC;AACG,SAAO;AACX;AACA,CAAC;AACG,SAAO;AACX;AAGA,CAAC;AACG,oBAAkB;AACtB;AACA,CAAC;AACG,oBAAkB;AACtB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;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
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;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
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;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
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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;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
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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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",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/posthog-and-ga/adtracking-general.ts", "../../src/posthog-and-ga/meta-tracking.ts", "../../src/posthog-and-ga/main.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", "// adTracking.general.ts \u2014 General ad events for paid traffic (utm_medium=cpc|ads)\n\ndeclare global {\n interface Window {\n trackEvent: (eventName: string, properties?: any) => void;\n validationPassed?: boolean;\n __adsTrackingInitializedGeneral?: boolean;\n }\n }\n \n const getSearchParam = (name: string): string | null => {\n const v = new URLSearchParams(window.location.search).get(name);\n return v ? v.trim() : null;\n };\n \n const isAdTraffic = (): boolean => {\n const medium = getSearchParam(\"utm_medium\")?.toLowerCase();\n return medium === \"cpc\" || medium === \"ads\";\n };\n \n const AD_EVENT_PREFIX = \"fynd_website_ad.\";\n const makeEvent = (suffix: string) => `${AD_EVENT_PREFIX}${suffix}`;\n \n // helper: find nearest form and get a friendly name\n const getParentFormName = (element: HTMLElement): string | null => {\n const parentForm = element.closest(\"form\") as HTMLFormElement | null;\n if (!parentForm) return null;\n return (\n parentForm.getAttribute(\"data-name\") ||\n parentForm.getAttribute(\"name\") ||\n parentForm.id ||\n null\n );\n };\n \n /**\n * Initialize general ads tracking.\n * Fires only when utm_medium is \"cpc\" or \"ads\".\n * Adds `fynd_website.current_page` = current page path.\n */\n export const initGeneralAdsTracking = () => {\n if (window.__adsTrackingInitializedGeneral) return;\n if (!isAdTraffic()) return;\n \n window.__adsTrackingInitializedGeneral = true;\n \n const baseProps: Record<string, any> = {\n \"fynd_website.current_page\": window.location.pathname,\n };\n \n const emit = (suffix: string, props?: Record<string, any>) => {\n const name = makeEvent(suffix);\n window.trackEvent?.(name, { ...baseProps, ...(props || {}) });\n };\n \n document.addEventListener(\"DOMContentLoaded\", () => {\n // Buttons\n document.querySelectorAll('[data-ph=\"sign-up\"]').forEach((btn) =>\n btn.addEventListener(\"click\", () => emit(\"sign_up.clicked\"))\n );\n document.querySelectorAll('[data-ph=\"sign-in\"]').forEach((btn) =>\n btn.addEventListener(\"click\", () => emit(\"sign_in.clicked\"))\n );\n document.querySelectorAll('[data-ph=\"book-a-demo\"]').forEach((btn) =>\n btn.addEventListener(\"click\", () => emit(\"book_a_demo.clicked\"))\n );\n \n // Form started\n const formFields = document.querySelectorAll<HTMLElement>(\"[ph-form-field]\");\n const triggeredForms = new Set<string>();\n \n const handleFormStarted = function (this: HTMLElement) {\n const formName = getParentFormName(this) || \"unknown-form\";\n if (!triggeredForms.has(formName)) {\n triggeredForms.add(formName);\n emit(\"form.started\", { started_form: formName });\n }\n };\n \n formFields.forEach((field) => {\n const tag = field.tagName.toLowerCase();\n const type = (field as HTMLInputElement).type?.toLowerCase();\n \n if (!(tag === \"button\" || (tag === \"input\" && type === \"submit\"))) {\n field.addEventListener(\"focus\", handleFormStarted);\n }\n if (tag === \"button\" || (tag === \"input\" && type === \"submit\")) {\n field.addEventListener(\"click\", handleFormStarted);\n } else if (tag === \"select\") {\n field.addEventListener(\"change\", handleFormStarted);\n } else {\n field.addEventListener(\"input\", handleFormStarted);\n }\n });\n \n // Form submitted\n document.querySelectorAll('[type=\"submit\"]').forEach((button) => {\n button.addEventListener(\"click\", function (this: HTMLElement) {\n const formName = getParentFormName(this);\n setTimeout(() => {\n if (window.validationPassed === true) {\n const props = formName ? { submitted_form: formName } : {};\n emit(\"form.submitted\", props);\n }\n }, 10);\n });\n });\n });\n };", "// meta-tracking.ts \u2014 Meta Pixel integration (standards-compliant) for Fynd website\n// - Initializes Meta Pixel (fbq) with Advanced Matching (when available)\n// - Mirrors your existing window.trackEvent() calls to Meta events\n// - Maps Fynd events -> Meta standard/custom events for better optimization\n// - Adds SPA PageView handling + eventID generation for future CAPI dedup\n// - Safe to import once anywhere in your app bootstrap\n\nimport { UserJourney } from \"../utils/types/user-journey\";\n\n// ---------- Config ----------\nconst META_PIXEL_ID = \"2741377816069290\";\n\ntype AdvancedUser = {\n email?: string;\n phone?: string;\n first_name?: string;\n last_name?: string;\n city?: string;\n state?: string;\n zip?: string;\n country?: string;\n external_id?: string;\n};\n\ntype InitOptions = {\n /**\n * If true, attempts to pull user info from window.getUserJourney/sessionStorage\n * and pass as Advanced Matching data (improves match rate for retargeting).\n */\n enableAdvancedMatching?: boolean;\n\n /**\n * If true, listens for SPA route changes and fires PageView on history changes.\n * Set true if you use a client-side router.\n */\n enableSpaPageViews?: boolean;\n\n /**\n * Optional predicate: return false to block Meta calls until consent is granted.\n * Example: () => window.__ad_consent === 'granted'\n */\n hasConsent?: () => boolean;\n};\n\n// ---------- fbq bootstrap ----------\ndeclare global {\n interface Window {\n fbq?: (...args: any[]) => void;\n _fbq?: any;\n trackEvent: (eventName: string, properties?: any) => void;\n getUserJourney: () => UserJourney | null;\n }\n}\n\nfunction loadMetaPixel(): void {\n if (typeof window === \"undefined\") return;\n if (window.fbq) return;\n\n (function (f: any, b: any, e: any, v: any, n?: any, t?: any, s?: any) {\n if (f.fbq) return;\n n = f.fbq = function () {\n (n as any).callMethod ? (n as any).callMethod.apply(n, arguments) : (n as any).queue.push(arguments);\n };\n if (!f._fbq) f._fbq = n;\n (n as any).push = (n as any);\n (n as any).loaded = true;\n (n as any).version = \"2.0\";\n (n as any).queue = [];\n t = b.createElement(e);\n t.async = true;\n t.src = \"https://connect.facebook.net/en_US/fbevents.js\";\n s = b.getElementsByTagName(e)[0];\n s.parentNode!.insertBefore(t, s);\n })(window, document, \"script\", undefined);\n}\n\n// ---------- Advanced Matching helpers ----------\nfunction getAdvancedUserFromJourney(): AdvancedUser | null {\n try {\n let journey: any = null;\n if (typeof window.getUserJourney === \"function\") {\n journey = window.getUserJourney();\n }\n if (!journey) {\n const stored = sessionStorage.getItem(\"userJourney\");\n if (stored) journey = JSON.parse(stored);\n }\n\n const u: AdvancedUser = {};\n const fd = journey?.formDetails;\n if (fd?.email) u.email = fd.email;\n if (fd?.phone) u.phone = fd.phone;\n if (fd?.firstName) u.first_name = fd.firstName;\n if (fd?.lastName) u.last_name = fd.lastName;\n if (fd?.city) u.city = fd.city;\n if (fd?.state) u.state = fd.state;\n if (fd?.zip) u.zip = fd.zip;\n if (journey?.country) u.country = journey.country;\n if (journey?.userId) u.external_id = String(journey.userId);\n\n // Remove empties\n Object.keys(u).forEach((k) => {\n const key = k as keyof AdvancedUser;\n if (!u[key]) delete u[key];\n });\n\n return Object.keys(u).length ? u : null;\n } catch {\n return null;\n }\n}\n\nfunction getAdvancedUserFromProps(props?: any): AdvancedUser | null {\n if (!props) return null;\n const u: AdvancedUser = {};\n if (props[\"fynd_website.form_email\"]) u.email = props[\"fynd_website.form_email\"];\n if (props[\"fynd_website.form_phone\"]) u.phone = props[\"fynd_website.form_phone\"];\n if (props[\"fynd_website.form_first_name\"]) u.first_name = props[\"fynd_website.form_first_name\"];\n if (props[\"fynd_website.form_last_name\"]) u.last_name = props[\"fynd_website.form_last_name\"];\n if (props.city) u.city = props.city;\n if (props.state) u.state = props.state;\n if (props.zip) u.zip = props.zip;\n if (props.country) u.country = props.country;\n if (props.external_id) u.external_id = props.external_id;\n\n Object.keys(u).forEach((k) => {\n const key = k as keyof AdvancedUser;\n if (!u[key]) delete u[key];\n });\n\n return Object.keys(u).length ? u : null;\n}\n\n// ---------- Utility ----------\nfunction genEventId(prefix: string = \"evt\"): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction safeFbq(...args: any[]): void {\n if (!window.fbq) return;\n window.fbq(...args);\n}\n\n// ---------- Core mapping (Fynd -> Meta) ----------\n/**\n * Maps your event names to Meta\u2019s recommended events.\n * Returns {name, params, options} ready for fbq('track'|'trackCustom', ...)\n */\nfunction mapFyndToMeta(eventName: string, properties?: any): {\n type: \"track\" | \"trackCustom\";\n name: string;\n params?: Record<string, any>;\n options?: { eventID?: string };\n userData?: AdvancedUser | null;\n} | null {\n const props = properties || {};\n // Try to extract user for Advanced Matching\n const userData = getAdvancedUserFromProps(props) || getAdvancedUserFromJourney();\n\n switch (eventName) {\n case \"fynd_website.form.submitted\": {\n // Choose 'Lead' as default (use CompleteRegistration for account creation flows)\n const eventID = props.event_id || genEventId(\"lead\");\n const formName = props.submitted_form || props[\"fynd_website.form_name\"] || \"unknown_form\";\n return {\n type: \"track\",\n name: \"Lead\",\n params: {\n form_id: props[\"fynd_website.form_id\"] || undefined,\n form_name: formName,\n value: 0,\n currency: \"INR\",\n },\n options: { eventID },\n userData,\n };\n }\n\n case \"fynd_website.sign_up.clicked\":\n return { type: \"trackCustom\", name: \"SignUpClick\", params: {}, userData };\n\n case \"fynd_website.sign_in.clicked\":\n return { type: \"trackCustom\", name: \"SignInClick\", params: {}, userData };\n\n case \"fynd_website.book_a_demo.clicked\":\n return {\n type: \"trackCustom\",\n name: \"BookDemoClick\",\n params: {\n source_page: props?.[\"fynd_website.source_page\"],\n },\n userData,\n };\n\n case \"fynd_website.form.started\":\n return {\n type: \"trackCustom\",\n name: \"FormStarted\",\n params: {\n form_id: props?.[\"fynd_website.form_id\"] || undefined,\n form_name: props?.[\"fynd_website.form_name\"] || undefined,\n },\n userData,\n };\n\n // Page lifecycle\n case \"fynd_website.page.loaded\":\n return { type: \"track\", name: \"PageView\", params: {}, userData };\n\n default:\n // Ignore other events by default; you can add more mappings here\n return null;\n }\n}\n\n// ---------- Public API ----------\n/**\n * Initialize Meta tracking and tee into window.trackEvent so existing code just works.\n */\nexport function initMetaTracking(options: InitOptions = {}): void {\n const { enableAdvancedMatching = true, enableSpaPageViews = true, hasConsent } = options;\n\n // 1) Load fbq\n loadMetaPixel();\n\n // 2) Init with/without Advanced Matching\n const initialUser = enableAdvancedMatching ? getAdvancedUserFromJourney() : null;\n if (hasConsent && !hasConsent()) {\n // Defer init until consent flips to true (lightweight poller)\n const iv = window.setInterval(() => {\n if (hasConsent()) {\n window.clearInterval(iv);\n safeFbq(\"init\", META_PIXEL_ID, initialUser || {});\n postInit(enableSpaPageViews);\n }\n }, 250);\n } else {\n safeFbq(\"init\", META_PIXEL_ID, initialUser || {});\n postInit(enableSpaPageViews);\n }\n\n // 3) Tee into window.trackEvent to mirror to Meta\n const originalTrackEvent = window.trackEvent;\n window.trackEvent = function (eventName: string, properties?: any): void {\n try {\n // First, call original (so PostHog/GA remain unchanged)\n if (typeof originalTrackEvent === \"function\") {\n originalTrackEvent.call(window, eventName, properties);\n }\n // Then forward to Meta (respect consent if provided)\n if (hasConsent && !hasConsent()) return;\n\n const mapped = mapFyndToMeta(eventName, properties);\n if (!mapped) return;\n\n // Pass Advanced Matching userData by re-calling init? No\u2014Meta supports user data on event via fbq 2nd arg in init or as 'init' options.\n // For events, best practice is to include user data via \"Advanced Matching\" settings or CAPI.\n // Here we rely on init advanced matching; optionally, you can include userData with custom calls via setUserProperties (not available on Pixel).\n if (mapped.type === \"track\") {\n if (mapped.options?.eventID) {\n safeFbq(\"track\", mapped.name, mapped.params || {}, { eventID: mapped.options.eventID });\n } else {\n safeFbq(\"track\", mapped.name, mapped.params || {});\n }\n } else {\n // trackCustom\n // We cannot pass user data as a separate arg here; advanced matching should be handled at init or via CAPI.\n safeFbq(\"trackCustom\", mapped.name, mapped.params || {});\n }\n } catch (e) {\n // swallow to avoid interrupting primary trackers\n // eslint-disable-next-line no-console\n console.warn(\"Meta tracking error:\", e);\n }\n };\n}\n\n/**\n * Manually send a CompleteRegistration when your \u201Cform submitted\u201D is actually an account creation.\n * Reuse the same eventID for later CAPI dedup if you mirror server-side.\n */\nexport function trackCompleteRegistration(registrationMethod: string = \"email\", eventID?: string, props?: any) {\n const options = eventID ? { eventID } : undefined;\n // Respect optional consent gate if your app uses one:\n // if (window.__ad_consent !== 'granted') return;\n safeFbq(\"track\", \"CompleteRegistration\", { registration_method: registrationMethod }, options);\n}\n\n/**\n * Optional helper if you want to send a Lead directly (outside of window.trackEvent).\n */\nexport function trackLead(formId?: string, formName?: string, valueINR: number = 0, eventID?: string) {\n const params: Record<string, any> = { value: valueINR, currency: \"INR\" };\n if (formId) params.form_id = formId;\n if (formName) params.form_name = formName;\n const options = { eventID: eventID || genEventId(\"lead\") };\n safeFbq(\"track\", \"Lead\", params, options);\n}\n\n// ---------- Internal: post init tasks ----------\nfunction postInit(enableSpaPageViews: boolean) {\n // Fire initial PageView (Meta does this automatically when you call fbq('track','PageView')\u2014we mimic GA's $pageview behavior)\n safeFbq(\"track\", \"PageView\");\n\n if (enableSpaPageViews) {\n // Hook into history API to catch virtual route changes\n const origPushState = history.pushState;\n const origReplaceState = history.replaceState;\n\n function onLocationChange() {\n // Delay slightly to allow DOM/router to settle\n setTimeout(() => safeFbq(\"track\", \"PageView\"), 0);\n }\n\n history.pushState = function (...args: any[]) {\n const ret = origPushState.apply(this, args as any);\n onLocationChange();\n return ret;\n };\n\n history.replaceState = function (...args: any[]) {\n const ret = origReplaceState.apply(this, args as any);\n onLocationChange();\n return ret;\n };\n\n window.addEventListener(\"popstate\", onLocationChange);\n }\n}\n\n// ---------- (Optional) noscript pixel for non-JS fallbacks ----------\n// In your HTML <noscript>, add:\n// <img height=\"1\" width=\"1\" style=\"display:none\"\n// src=\"https://www.facebook.com/tr?id=2741377816069290&ev=PageView&noscript=1\"/>", "// main.ts \u2014 Core tracking: PostHog + GA (GTM dataLayer) + optional ad tracking bootstrap\nimport { FormDetails, UserJourney } from \"../utils/types/user-journey\";\nimport { AdConfig, initAdsTracking } from \"./adTracking\";\nimport { initGeneralAdsTracking } from \"./adtracking-general\";\nimport { initMetaTracking } from \"./meta-tracking\";\n\n// ---------- Types ----------\ninterface GTMEvent {\n event: string;\n event_category: string;\n event_label: string;\n form_id?: string;\n form_name?: string;\n form_first_name?: string;\n form_last_name?: string;\n form_email?: string;\n form_phone?: string;\n submitted_form?: string;\n [key: string]: any;\n}\n\ninterface GATrackingProperties {\n form_id?: string;\n form_name?: string;\n form_first_name?: string;\n form_last_name?: string;\n form_email?: string;\n form_phone?: string;\n submitted_form?: string;\n aidata_context?: string;\n aidata_platform?: string;\n aidata_type?: string;\n aidata_detection?: string;\n}\n\ninterface TrackingProperties {\n \"fynd_website.source_page\": string;\n \"fynd_website.product\": string;\n \"fynd_website.device_type\": string;\n \"fynd_website.utm_source\": string;\n \"fynd_website.utm_medium\": string;\n \"fynd_website.utm_campaign\": string;\n \"fynd_website.referrer\": string;\n \"fynd_website.form_id\"?: string;\n \"fynd_website.form_name\"?: string;\n \"fynd_website.form_first_name\"?: string;\n \"fynd_website.form_last_name\"?: string;\n \"fynd_website.form_email\"?: string;\n \"fynd_website.form_phone\"?: string;\n \"fynd_website.journey_total_pages\"?: number;\n \"fynd_website.journey_session_duration\"?: number;\n \"fynd_website.journey_first_page\"?: string;\n \"fynd_website.journey_current_page\"?: string;\n \"fynd_website.journey_device\"?: string;\n \"fynd_website.journey_browser\"?: string;\n \"fynd_website.journey_device_name\"?: string;\n \"fynd_website.journey_origin\"?: string;\n \"fynd_website.journey_touchpoints\"?: any;\n \"fynd_website.journey_touchpoints_count\"?: number;\n \"fynd_website.journey_utm_path\"?: string;\n \"fynd_website.journey_entry_time\"?: string;\n \"fynd_website.journey_exit_time\"?: string;\n \"fynd_website.journey_scroll_depth\"?: number;\n \"fynd_website.aidata_context\"?: string;\n \"fynd_website.aidata_platform\"?: string;\n \"fynd_website.aidata_type\"?: string;\n \"fynd_website.aidata_detection\"?: string;\n submitted_form?: string;\n field_type?: string;\n field_name?: string;\n [key: string]: any;\n}\n\ndeclare global {\n interface Window {\n trackEvent: (eventName: string, properties?: any) => void;\n getPosthogTrackingProperties: () => TrackingProperties;\n getGaTrackingProperties: () => GATrackingProperties;\n validationPassed?: boolean;\n getUserJourney: () => UserJourney | null;\n dataLayer?: GTMEvent[];\n }\n}\n\n// ---------- GA helpers ----------\nconst getGaTrackingProperties = (): GATrackingProperties => {\n const gaProperties: GATrackingProperties = {};\n try {\n let journey: any = null;\n if (typeof (window as any).getUserJourney === \"function\") {\n journey = (window as any).getUserJourney();\n }\n if (!journey) {\n const storedData = sessionStorage.getItem(\"userJourney\");\n if (storedData) journey = JSON.parse(storedData);\n }\n\n if (journey?.formDetails) {\n const formDetails: FormDetails = journey.formDetails;\n if (formDetails.formId) gaProperties.form_id = formDetails.formId;\n if (formDetails.formName) gaProperties.form_name = formDetails.formName;\n if (formDetails.firstName) gaProperties.form_first_name = formDetails.firstName;\n if (formDetails.lastName) gaProperties.form_last_name = formDetails.lastName;\n if (formDetails.email) gaProperties.form_email = formDetails.email;\n if (formDetails.phone) gaProperties.form_phone = formDetails.phone;\n }\n\n if (journey?.aiData) {\n const aiData = journey.aiData;\n if (aiData.context) gaProperties.aidata_context = aiData.context;\n if (aiData.platform) gaProperties.aidata_platform = aiData.platform;\n if (aiData.type) gaProperties.aidata_type = aiData.type;\n if (aiData.detectionMethod) gaProperties.aidata_detection = aiData.detectionMethod;\n }\n } catch (err) {\n console.warn(\"Error getting user journey data for GA tracking:\", err);\n }\n return gaProperties;\n};\n\n// ---------- PostHog properties ----------\nconst getPosthogTrackingProperties = (): TrackingProperties => {\n const pathname: string = window.location.pathname;\n\n const base: TrackingProperties = {\n \"fynd_website.source_page\": pathname,\n \"fynd_website.product\": \"fynd.com website\",\n \"fynd_website.device_type\": \"Unknown\",\n \"fynd_website.utm_source\": new URLSearchParams(window.location.search).get(\"utm_source\") || \"\",\n \"fynd_website.utm_medium\": new URLSearchParams(window.location.search).get(\"utm_medium\") || \"\",\n \"fynd_website.utm_campaign\": new URLSearchParams(window.location.search).get(\"utm_campaign\") || \"\",\n \"fynd_website.referrer\": document.referrer,\n };\n\n try {\n let journey: any = null;\n if (typeof (window as any).getUserJourney === \"function\") {\n journey = (window as any).getUserJourney();\n }\n if (!journey) {\n const storedData = sessionStorage.getItem(\"userJourney\");\n if (storedData) journey = JSON.parse(storedData);\n }\n\n if (journey) {\n base[\"fynd_website.journey_touchpoints\"] = journey.userJourney || journey;\n\n if (journey.formDetails) {\n const f: FormDetails = journey.formDetails;\n if (f.formId) base[\"fynd_website.form_id\"] = f.formId;\n if (f.formName) base[\"fynd_website.form_name\"] = f.formName;\n if (f.firstName) base[\"fynd_website.form_first_name\"] = f.firstName;\n if (f.lastName) base[\"fynd_website.form_last_name\"] = f.lastName;\n if (f.email) base[\"fynd_website.form_email\"] = f.email;\n if (f.phone) base[\"fynd_website.form_phone\"] = f.phone;\n }\n\n if (journey.userJourney?.length > 0) {\n base[\"fynd_website.journey_total_pages\"] = journey.userJourney.length;\n base[\"fynd_website.journey_touchpoints_count\"] = journey.userJourney.length;\n base[\"fynd_website.journey_first_page\"] = journey.userJourney[0].page;\n base[\"fynd_website.journey_current_page\"] =\n journey.userJourney[journey.userJourney.length - 1].page;\n\n const firstVisit = new Date(journey.userJourney[0].time);\n const lastVisit = new Date(journey.userJourney[journey.userJourney.length - 1].time);\n base[\"fynd_website.journey_session_duration\"] = Math.floor(\n (lastVisit.getTime() - firstVisit.getTime()) / 1000\n );\n base[\"fynd_website.journey_entry_time\"] = journey.userJourney[0].time;\n base[\"fynd_website.journey_exit_time\"] =\n journey.userJourney[journey.userJourney.length - 1].time;\n }\n\n if (journey.deviceCategory) base[\"fynd_website.device_type\"] = journey.deviceCategory;\n if (journey.browser) base[\"fynd_website.journey_browser\"] = journey.browser;\n if (journey.device) base[\"fynd_website.journey_device\"] = journey.device;\n if (journey.origin) base[\"fynd_website.journey_origin\"] = journey.origin;\n if (journey.utmPath) base[\"fynd_website.journey_utm_path\"] = journey.utmPath;\n if (journey.scrollDepth) base[\"fynd_website.journey_scroll_depth\"] = journey.scrollDepth;\n\n if (journey.aiData) {\n const aiData = journey.aiData;\n if (aiData.context) base[\"fynd_website.aidata_context\"] = aiData.context;\n if (aiData.platform) base[\"fynd_website.aidata_platform\"] = aiData.platform;\n if (aiData.type) base[\"fynd_website.aidata_type\"] = aiData.type;\n if (aiData.detectionMethod) base[\"fynd_website.aidata_detection\"] = aiData.detectionMethod;\n }\n }\n } catch (err) {\n console.warn(\"Error getting user journey data for tracking:\", err);\n }\n\n // Fallback device type\n if (base[\"fynd_website.device_type\"] === \"Unknown\") {\n const ua = navigator.userAgent;\n if (/iPad/.test(ua) || (/Android/.test(ua) && !/Mobile/.test(ua)) || /Tablet/.test(ua)) {\n base[\"fynd_website.device_type\"] = \"Tablet\";\n } else if (/Mobile|iPhone|Android|BlackBerry|Opera Mini|IEMobile|WPDesktop/.test(ua)) {\n base[\"fynd_website.device_type\"] = \"Mobile\";\n } else {\n base[\"fynd_website.device_type\"] = \"Desktop\";\n }\n }\n\n // ---------- UUID from cookie ----------\n try {\n const cookieMatch = document.cookie.match(/(?:^|;\\s*)user-id=([^;]*)/);\n base[\"fynd_website.uuid\"] = cookieMatch ? decodeURIComponent(cookieMatch[1]) : null;\n } catch (err) {\n console.warn(\"Error reading user-id cookie:\", err);\n base[\"fynd_website.uuid\"] = null;\n }\n\n return base;\n};\n\n// ---------- GA send ----------\nconst sendToGA = (eventName: string, gaProps: GATrackingProperties, additionalProps?: any): void => {\n if ((window as any).dataLayer) {\n const eventData: GTMEvent = {\n event: eventName,\n event_category: \"form_interaction\",\n event_label: eventName,\n ...gaProps,\n };\n if (additionalProps?.submitted_form) {\n eventData.submitted_form = additionalProps.submitted_form;\n }\n (window as any).dataLayer.push(eventData);\n } else {\n console.warn(\"dataLayer not available for GA tracking\");\n }\n};\n\n// ---------- Public trackEvent ----------\nconst trackEvent = (eventName: string, properties?: Partial<TrackingProperties>): void => {\n try {\n const baseProps = getPosthogTrackingProperties();\n const finalProps = properties ? { ...baseProps, ...properties } : baseProps;\n\n if ((window as any).posthog) {\n (window as any).posthog.capture(eventName, finalProps);\n }\n\n const gaProps = getGaTrackingProperties();\n const hasAIData =\n gaProps.aidata_context || gaProps.aidata_platform || gaProps.aidata_type || gaProps.aidata_detection;\n\n const isFormRelatedEvent =\n eventName.includes(\"form\") ||\n Object.keys(gaProps).length > 0 ||\n properties?.submitted_form ||\n !!hasAIData;\n\n if (isFormRelatedEvent) {\n sendToGA(eventName, gaProps, properties);\n }\n } catch (error) {\n console.error(\"Error tracking event:\", error);\n }\n};\n\n// ---------- Shared helpers ----------\nconst getParentFormName = (element: HTMLElement): string | null => {\n const parentForm = element.closest(\"form\") as HTMLFormElement | null;\n if (!parentForm) return null;\n return (\n parentForm.getAttribute(\"data-name\") ||\n parentForm.getAttribute(\"name\") ||\n parentForm.id ||\n null\n );\n};\n\n// ---------- Page lifecycle ----------\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const props = getPosthogTrackingProperties();\n if ((window as any).posthog) {\n (window as any).posthog.capture(\"$pageview\", props);\n }\n});\n\nwindow.addEventListener(\"load\", () => {\n trackEvent(\"fynd_website.page.loaded\");\n});\n\n// ---------- Base site interactions ----------\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const signUpButtons = document.querySelectorAll('[data-ph=\"sign-up\"]');\n const signInButtons = document.querySelectorAll('[data-ph=\"sign-in\"]');\n const scrollToFormButtons = document.querySelectorAll('[href=\"#footer-form\"]');\n const bookADemoButtons = document.querySelectorAll('[data-ph=\"book-a-demo\"]');\n const callButtons = document.querySelectorAll('[data-ph=\"call\"]');\n const submitButtons = document.querySelectorAll('[type=\"submit\"]');\n\n submitButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", function (this: HTMLElement): void {\n const formName = getParentFormName(this);\n setTimeout(() => {\n if (window.validationPassed === true) {\n const additionalProps = formName ? { submitted_form: formName } : {};\n trackEvent(\"fynd_website.form.submitted\", additionalProps);\n }\n }, 10);\n });\n });\n\n signUpButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", () => trackEvent(\"fynd_website.sign_up.clicked\"));\n });\n\n signInButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", () => trackEvent(\"fynd_website.sign_in.clicked\"));\n });\n\n scrollToFormButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", () => trackEvent(\"fynd_website.scroll_to_form.clicked\"));\n });\n\n bookADemoButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", () => trackEvent(\"fynd_website.book_a_demo.clicked\"));\n });\n\n callButtons.forEach((button: Element) => {\n button.addEventListener(\"click\", () => trackEvent(\"fynd_website.call.clicked\"));\n });\n\n // Form started\n const formFields = document.querySelectorAll<HTMLElement>(\"[ph-form-field]\");\n const triggeredForms = new Set<string>();\n\n const handleFormStarted = function (this: HTMLElement): void {\n const formName = getParentFormName(this);\n const formIdentifier = formName || \"unknown-form\";\n if (!triggeredForms.has(formIdentifier)) {\n triggeredForms.add(formIdentifier);\n trackEvent(\"fynd_website.form.started\");\n }\n };\n\n formFields.forEach((field) => {\n const tagName = field.tagName.toLowerCase();\n const inputType = (field as HTMLInputElement).type?.toLowerCase();\n\n if (!(tagName === \"button\" || (tagName === \"input\" && inputType === \"submit\"))) {\n field.addEventListener(\"focus\", handleFormStarted);\n }\n if (tagName === \"button\" || (tagName === \"input\" && inputType === \"submit\")) {\n field.addEventListener(\"click\", handleFormStarted);\n } else if (tagName === \"select\") {\n field.addEventListener(\"change\", handleFormStarted);\n } else {\n field.addEventListener(\"input\", handleFormStarted);\n }\n });\n});\n\n// ---------- Expose globals ----------\nwindow.getPosthogTrackingProperties = getPosthogTrackingProperties;\nwindow.trackEvent = trackEvent;\nwindow.getGaTrackingProperties = getGaTrackingProperties;\n\n// ---------- Optional: bootstrap ad tracking here ----------\n// const AD_CONFIGS: AdConfig[] = [\n// { adPageSlug: \"/solutions/transport-management-system\", adEventExtension: \"tms\", adUTMCampaign: \"tms\", },\n// ];\n// initAdsTracking(AD_CONFIGS);\ninitGeneralAdsTracking();\n\ninitMetaTracking({\n enableAdvancedMatching: true, // pulls user data from your journey store when available\n enableSpaPageViews: true, // fires PageView on virtual navigations\n hasConsent: () => (window as any).__ad_consent === \"granted\" || true, // replace with your consent logic\n});\n\n// ---------- Exports ----------\nexport {\n getPosthogTrackingProperties,\n getGaTrackingProperties,\n trackEvent,\n getParentFormName,\n type TrackingProperties,\n type GATrackingProperties,\n type GTMEvent,\n};"],
5
+ "mappings": "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",
6
+ "names": ["onLocationChange", "getParentFormName"]
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/progressive-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", "// TypeScript variant of progressive scroll functionality\n// Ensure GSAP and ScrollTrigger are loaded\n\n// Type declarations for GSAP (assuming it's loaded globally)\ndeclare global {\n interface Window {\n gsap: any;\n ScrollTrigger: any;\n }\n}\n\nconst gsap = (window as any).gsap;\nconst ScrollTrigger = (window as any).ScrollTrigger;\n\ngsap.registerPlugin(ScrollTrigger);\n\nfunction moveElements(sourceSelector: string, targetSelector: string, warningMessage: string): void {\n const target: Element | null = document.querySelector(targetSelector);\n if (!target) {\n console.warn(warningMessage);\n return;\n }\n\n const sources: NodeListOf<Element> = document.querySelectorAll(sourceSelector);\n if (sources.length === 0) {\n console.warn(`Warning: No elements found with attribute ${sourceSelector}`);\n return;\n }\n\n sources.forEach((source: Element) => target.appendChild(source));\n}\n\nfunction initScrollBlocks(): void {\n moveElements(\n \"[fynd-sticky-source]\",\n \"[fynd-sticky-target]\",\n \"Warning: No element found with attribute fynd-sticky-target\"\n );\n moveElements(\n \"[fynd-scroll-source]\",\n \"[fynd-scroll-target]\",\n \"Warning: No element found with attribute fynd-scroll-target\"\n );\n}\n\nfunction initProgressiveScroll(): void {\n gsap.registerPlugin(ScrollTrigger);\n\n // Add debounce to handle rapid scrolling\n let timeout: number | undefined;\n let lastVisitedSection: string | null;\n let currentSection: string | null;\n localStorage.setItem(\"lastVisitedSection\", \"null\");\n\n function debouncedScrollTrigger(attributeValue: string): void {\n clearTimeout(timeout);\n\n const scrollSections: NodeListOf<Element> = document.querySelectorAll(\"[fynd-scroll-source]\");\n const sectionCount: number = scrollSections.length;\n const startSection: string | null = scrollSections[0].getAttribute(\"fynd-scroll-source\");\n const endSection: string | null =\n scrollSections[sectionCount - 1].getAttribute(\"fynd-scroll-source\");\n let currentSection: string | null = document\n .querySelector(`[fynd-scroll-source=\"${attributeValue}\"]`)\n ?.getAttribute(\"fynd-scroll-source\") || null;\n lastVisitedSection = localStorage.getItem(\"lastVisitedSection\");\n // console.log(attributeValue);\n\n if (\n parseInt(currentSection!) === parseInt(endSection!) &&\n parseInt(lastVisitedSection!) === parseInt(endSection!)\n ) {\n // console.log(\"End of the scroll\");\n return;\n } else if (\n parseInt(currentSection!) === parseInt(startSection!) &&\n parseInt(lastVisitedSection!) === parseInt(startSection!)\n ) {\n // console.log(\"Start of the scroll\");\n return;\n } else {\n // console.log(\"Middle of the page\");\n timeout = setTimeout(() => {\n updateStickyImage(attributeValue);\n // store attribute value as lastVisitedSection in local storage\n localStorage.setItem(\"lastVisitedSection\", attributeValue);\n }, 50); // 50ms debounce delay\n }\n }\n\n const sections: NodeListOf<Element> = document.querySelectorAll(\"[fynd-scroll-source]\");\n sections.forEach((section: Element) => {\n ScrollTrigger.create({\n trigger: section,\n start: \"top 50%\",\n end: \"bottom 50%\", // Add an end position\n // markers: true,\n onEnter: () => {\n // console.log(\"Enter:\", section.getAttribute(\"fynd-scroll-source\"));\n debouncedScrollTrigger(section.getAttribute(\"fynd-scroll-source\")!);\n },\n onEnterBack: () => {\n // console.log(\"Enter Back:\", section.getAttribute(\"fynd-scroll-source\"));\n debouncedScrollTrigger(section.getAttribute(\"fynd-scroll-source\")!);\n },\n onLeave: () => {\n // console.log(\"Leave:\", section.getAttribute(\"fynd-scroll-source\"));\n debouncedScrollTrigger(section.getAttribute(\"fynd-scroll-source\")!);\n },\n onLeaveBack: () => {\n // console.log(\"Leave Back:\", section.getAttribute(\"fynd-scroll-source\"));\n debouncedScrollTrigger(section.getAttribute(\"fynd-scroll-source\")!);\n },\n });\n });\n}\n\nfunction updateStickyImage(identifier: string): void {\n const stickyImages: NodeListOf<Element> = document.querySelectorAll(\"[fynd-sticky-source]\");\n\n // Kill any existing animations\n gsap.killTweensOf(stickyImages);\n\n gsap.set(stickyImages, { opacity: 0 });\n\n // Get the active image\n const activeImage: Element | null = document.querySelector(\n `[fynd-sticky-source=\"${identifier}\"]`\n );\n\n if (activeImage) {\n gsap.to(activeImage, {\n opacity: 1,\n duration: 0.5, // Smooth transition for the active image\n ease: \"power1.out\",\n });\n }\n}\n\nfunction getScrollContainer(): void {\n const scrollContainer: NodeListOf<Element> = document.querySelectorAll(\"[fynd-scroll-container]\");\n gsap.to(scrollContainer, {\n opacity: 1,\n duration: 0.5,\n ease: \"power2.out\",\n delay: 0.5,\n });\n}\n\nfunction dynamiColorDesktop(): void {\n document.querySelectorAll(\"[fynd-sticky-bg]\").forEach((element: Element) => {\n let bgColor: string | null = element.getAttribute(\"fynd-sticky-bg\");\n if (bgColor && /^#([0-9A-F]{3}){1,2}$/i.test(bgColor)) {\n (element as HTMLElement).style.backgroundColor = bgColor;\n } else {\n console.warn(`Invalid hex color: ${bgColor} for element`, element);\n }\n });\n}\n\nfunction dynamicColorMobile(): void {\n const bgColorElement: Element | null = document.querySelector(\"[fynd-sticky-bg]\");\n const bgColor: string | null = bgColorElement?.getAttribute(\"fynd-sticky-bg\") || null;\n // console.log(\n // \"%cprogressive-scroll/index.js:151 bgColor\",\n // \"color: #007acc;\",\n // bgColor\n // );\n document.querySelectorAll(\"[fynd-card-bg-mobile]\").forEach((element: Element) => {\n if (bgColor && /^#([0-9A-F]{3}){1,2}$/i.test(bgColor)) {\n (element as HTMLElement).style.backgroundColor = bgColor;\n } else {\n console.warn(`Invalid hex color: ${bgColor} for element`, element);\n }\n });\n}\n// fynd-card-bg-mobile\n\nfunction handleResize(): void {\n // window.location.reload();\n if (window.innerWidth > 991) {\n dynamiColorDesktop();\n initScrollBlocks(); // Scroll blocks moved\n initProgressiveScroll(); // Initiating scroll triggers\n getScrollContainer(); // Showing container after initialization to avoid glitch\n } else {\n dynamicColorMobile();\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", handleResize);\n\n//dynamic color\n// document.addEventListener(\"DOMContentLoaded\", function () {\n// document.querySelectorAll(\"[fynd-sticky-bg]\").forEach((element) => {\n// let bgColor = element.getAttribute(\"fynd-sticky-bg\");\n// if (/^#([0-9A-F]{3}){1,2}$/i.test(bgColor)) {\n// element.style.backgroundColor = bgColor;\n// } else {\n// console.warn(`Invalid hex color: ${bgColor} for element`, element);\n// }\n// });\n// });\n\n// Export to make this file a module\nexport {};"],
5
+ "mappings": "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",
6
+ "names": ["currentSection"]
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/quick-fix/reload.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", "function handleOneTimeReload(): void {\n const loaded = sessionStorage.getItem('pageLoaded');\n\n if (!loaded || loaded === 'false') {\n sessionStorage.setItem('pageLoaded', 'true');\n window.location.reload();\n }\n}\ndocument.addEventListener('DOMContentLoaded', handleOneTimeReload);"],
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,WAAS,sBAA4B;AACjC,UAAM,SAAS,eAAe,QAAQ,YAAY;AAElD,QAAI,CAAC,UAAU,WAAW,SAAS;AAC/B,qBAAe,QAAQ,cAAc,MAAM;AAC3C,aAAO,SAAS,OAAO;AAAA,IAC3B;AAAA,EACJ;AACA,WAAS,iBAAiB,oBAAoB,mBAAmB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/seo/schema.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", "// Dynamic Schema Generator for Fynd.com - Updated for Option 2\n\n// Type definitions for Schema.org entities\ninterface SchemaOrganization {\n \"@type\": \"Organization\";\n \"@id\": string;\n name: string;\n url: string;\n logo: string;\n sameAs: string[];\n description: string;\n}\n\ninterface SchemaWebsite {\n \"@type\": \"WebSite\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n publisher: { \"@id\": string };\n potentialAction: {\n \"@type\": \"SearchAction\";\n target: {\n \"@type\": \"EntryPoint\";\n urlTemplate: string;\n };\n \"query-input\": string;\n };\n}\n\ninterface BreadcrumbItem {\n name: string;\n url: string;\n}\n\ninterface SchemaBreadcrumbList {\n \"@type\": \"BreadcrumbList\";\n itemListElement: Array<{\n \"@type\": \"ListItem\";\n position: number;\n name: string;\n item: string;\n }>;\n}\n\ninterface SchemaWebPage {\n \"@type\": \"WebPage\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n isPartOf: { \"@id\": string };\n mainEntity?: any;\n}\n\ninterface SolutionData {\n name: string;\n url: string;\n description: string;\n features?: string[];\n audience?: string;\n category?: string;\n}\n\ninterface SchemaSoftwareApplication {\n \"@type\": \"SoftwareApplication\";\n \"@id\": string;\n name: string;\n applicationCategory: string;\n operatingSystem: string;\n featureList: string[];\n audience: {\n \"@type\": \"Audience\";\n audienceType: string;\n };\n url: string;\n description: string;\n manufacturer: { \"@id\": string };\n}\n\ninterface ProductData {\n name: string;\n url: string;\n description: string;\n ratingValue?: string;\n reviewCount?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaProduct {\n \"@type\": \"Product\";\n name: string;\n url: string;\n description: string;\n brand: { \"@id\": string };\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n validFrom?: string;\n };\n aggregateRating?: {\n \"@type\": \"AggregateRating\";\n ratingValue: string;\n reviewCount: string;\n };\n}\n\ninterface FAQItem {\n question: string;\n answer: string;\n}\n\ninterface SchemaFAQPage {\n \"@type\": \"FAQPage\";\n mainEntity: Array<{\n \"@type\": \"Question\";\n name: string;\n acceptedAnswer: {\n \"@type\": \"Answer\";\n text: string;\n };\n }>;\n}\n\ninterface ArticleData {\n title: string;\n url: string;\n description: string;\n author?: string;\n publishDate: string;\n modifyDate?: string;\n image?: string;\n}\n\ninterface SchemaArticle {\n \"@type\": \"Article\";\n headline: string;\n description: string;\n image?: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n datePublished: string;\n dateModified: string;\n mainEntityOfPage: {\n \"@type\": \"WebPage\";\n \"@id\": string;\n };\n}\n\ninterface EbookData {\n name: string;\n url: string;\n description: string;\n author?: string;\n isbn?: string;\n bookFormat?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaBook {\n \"@type\": \"Book\";\n \"@id\": string;\n name: string;\n description: string;\n bookFormat: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n isbn?: string;\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n };\n}\n\ninterface PageConfig {\n url: string;\n title: string;\n description?: string;\n pageType: string;\n breadcrumbs?: BreadcrumbItem[];\n solutionData?: SolutionData;\n asProduct?: boolean; \n articleData?: ArticleData;\n productData?: ProductData;\n ebookData?: EbookData;\n faqs?: FAQItem[] | null;\n mainEntity?: any;\n}\n\ninterface SchemaGraph {\n \"@context\": \"https://schema.org\";\n \"@graph\": any[];\n}\n\n// Extend Window interface for FyndSchema\ndeclare global {\n interface Window {\n FyndSchema: {\n generator: typeof FyndSchemaGenerator;\n configManager: typeof PageConfigManager;\n };\n }\n}\n\nclass FyndSchemaGenerator {\n private baseUrl: string;\n private organizationData: SchemaOrganization;\n\n constructor() {\n this.baseUrl = \"https://www.fynd.com\";\n this.organizationData = {\n \"@type\": \"Organization\",\n \"@id\": `${this.baseUrl}#organization`,\n name: \"Fynd\",\n url: this.baseUrl,\n logo: `https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ee6819577f1aeb4e6ae5c9_Fynd.avif`,\n sameAs: [\n \"https://www.linkedin.com/company/fynd-shopsense\",\n \"https://x.com/FyndCommerce\",\n \"https://www.instagram.com/fyndcommerce/\",\n ],\n description:\n \"Fynd is an AI-powered unified commerce platform enabling brands to manage end-to-end retail operations.\",\n };\n }\n\n // Generate base website schema\n generateWebsiteSchema(): SchemaWebsite {\n return {\n \"@type\": \"WebSite\",\n \"@id\": `${this.baseUrl}#website`,\n url: this.baseUrl,\n name: \"Fynd\",\n description: \"AI-powered unified commerce platform\",\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n potentialAction: {\n \"@type\": \"SearchAction\",\n target: {\n \"@type\": \"EntryPoint\",\n urlTemplate: `${this.baseUrl}/search?q={search_term_string}`,\n },\n \"query-input\": \"required name=search_term_string\",\n },\n };\n }\n\n // Generate breadcrumb schema\n generateBreadcrumbSchema(breadcrumbs: BreadcrumbItem[]): SchemaBreadcrumbList {\n return {\n \"@type\": \"BreadcrumbList\",\n itemListElement: breadcrumbs.map((item, index) => ({\n \"@type\": \"ListItem\",\n position: index + 1,\n name: item.name,\n item: item.url,\n })),\n };\n }\n\n // Generate WebPage schema\n generateWebPageSchema(pageData: {\n url: string;\n title: string;\n description?: string;\n mainEntity?: any;\n }): SchemaWebPage {\n const schema: SchemaWebPage = {\n \"@type\": \"WebPage\",\n \"@id\": pageData.url,\n url: pageData.url,\n name: pageData.title,\n description: pageData.description || \"\",\n isPartOf: { \"@id\": `${this.baseUrl}#website` },\n };\n\n if (pageData.mainEntity) {\n schema.mainEntity = pageData.mainEntity;\n }\n\n return schema;\n }\n\n// Updated method signature - add optional productData parameter\ngenerateSoftwareSchema(solutionData: SolutionData, productData?: ProductData): SchemaSoftwareApplication {\n // Define category to audience mapping\n const categoryAudienceMap: { [key: string]: string } = {\n \"E-commerce Platform Software\": \"D2C brand managers, digital commerce heads, and marketing teams launching or scaling multi-channel storefronts\",\n \"Omnichannel Retail Software\": \"Retail operations managers, franchise leads, and store teams seeking unified POS, self-checkout, and in-store analytics\",\n \"E-commerce Fulfillment and Logistics Software\": \"Supply chain heads, logistics managers, warehouse leads managing inventory, delivery, and returns\",\n \"Retail AI Automation Platform\": \"Product owners, CX leads, marketers, and developers adopting AI for cataloging, personalization, creative workflows, or customer support\"\n };\n\n const applicationCategory = solutionData.category || \"RetailSoftware\";\n \n // Determine audience: check mapping first, then data attribute, then default\n let audienceType: string;\n if (categoryAudienceMap[applicationCategory]) {\n audienceType = categoryAudienceMap[applicationCategory];\n } else if (solutionData.audience) {\n audienceType = solutionData.audience;\n } else {\n audienceType = \"Retail Business Teams\";\n }\n\n const schema: any = {\n \"@type\": \"SoftwareApplication\",\n \"@id\": `${solutionData.url}#software`,\n name: solutionData.name,\n applicationCategory: applicationCategory,\n operatingSystem: \"Web\",\n audience: {\n \"@type\": \"Audience\",\n audienceType: audienceType,\n },\n url: solutionData.url,\n description: solutionData.description,\n manufacturer: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // Only add featureList if it exists and has items\n if (solutionData.features && solutionData.features.length > 0) {\n schema.featureList = solutionData.features;\n }\n\n // \u2705 NEW: Add product-specific properties if productData is provided\n if (productData) {\n // Add offers if pricing data is available\n if (productData.price) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: productData.price,\n priceCurrency: productData.currency || \"USD\",\n availability: productData.availability || \"https://schema.org/InStock\",\n validFrom: new Date().toISOString(),\n };\n }\n\n // Add aggregate rating if available\n if (productData.ratingValue && productData.reviewCount) {\n schema.aggregateRating = {\n \"@type\": \"AggregateRating\",\n ratingValue: productData.ratingValue,\n reviewCount: productData.reviewCount,\n };\n }\n\n // Add product-specific properties that make sense for software\n if (productData.availability) {\n schema.availability = productData.availability;\n }\n }\n\n return schema;\n}\n\n // Generate Product schema (only for actual product pages, not solutions)\n generateProductSchema(productData: ProductData): SchemaProduct {\n const schema: SchemaProduct = {\n \"@type\": \"Product\",\n name: productData.name,\n url: productData.url,\n description: productData.description,\n brand: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // // Add offers if pricing data is available\n // if (productData.price) {\n // schema.offers = {\n // \"@type\": \"Offer\",\n // price: productData.price,\n // priceCurrency: productData.currency || \"USD\",\n // availability: productData.availability || \"https://schema.org/InStock\",\n // validFrom: new Date().toISOString(),\n // };\n // }\n\n // Add rating if available\n if (productData.ratingValue && productData.reviewCount) {\n schema.aggregateRating = {\n \"@type\": \"AggregateRating\",\n ratingValue: productData.ratingValue,\n reviewCount: productData.reviewCount,\n };\n }\n\n return schema;\n }\n\n // Generate Book schema for ebook pages\ngenerateBookSchema(ebookData: EbookData): SchemaBook {\n const schema: SchemaBook = {\n \"@type\": \"Book\",\n \"@id\": `${ebookData.url}#book`,\n name: ebookData.name,\n description: ebookData.description,\n bookFormat: \"https://schema.org/EBook\",\n author: {\n \"@type\": \"Person\",\n name: ebookData.author || \"Fynd Team\"\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` }\n };\n\n // Add ISBN if provided\n if (ebookData.isbn) {\n schema.isbn = ebookData.isbn;\n }\n\n // Add offers if price is provided\n if (ebookData.price !== undefined) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: ebookData.price || \"0\",\n priceCurrency: ebookData.currency || \"USD\",\n availability: ebookData.availability || \"https://schema.org/InStock\"\n };\n }\n\n return schema;\n}\n\n // Generate FAQ schema\n generateFAQSchema(faqs: FAQItem[]): SchemaFAQPage | null {\n if (!faqs || faqs.length === 0) return null;\n\n return {\n \"@type\": \"FAQPage\",\n mainEntity: faqs.map((faq) => ({\n \"@type\": \"Question\",\n name: faq.question,\n acceptedAnswer: {\n \"@type\": \"Answer\",\n text: faq.answer,\n },\n })),\n };\n }\n\n // Generate Article schema for blog posts\n generateArticleSchema(articleData: ArticleData): SchemaArticle {\n return {\n \"@type\": \"Article\",\n headline: articleData.title,\n description: articleData.description,\n image: articleData.image,\n author: {\n \"@type\": \"Person\",\n name: articleData.author || \"Fynd Team\",\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n datePublished: articleData.publishDate,\n dateModified: articleData.modifyDate || articleData.publishDate,\n mainEntityOfPage: {\n \"@type\": \"WebPage\",\n \"@id\": articleData.url,\n },\n };\n }\n\n // Main method to generate complete schema based on page type\n generateSchema(pageConfig: PageConfig): SchemaGraph {\n const graph: any[] = [];\n\n // Always include organization\n graph.push(this.organizationData);\n\n // Always include website\n graph.push(this.generateWebsiteSchema());\n\n // Add webpage schema\n const webPageSchema = this.generateWebPageSchema({\n url: pageConfig.url || window.location.href,\n title: pageConfig.title || document.title,\n description:\n pageConfig.description ||\n (document.querySelector('meta[name=\"description\"]') as HTMLMetaElement)?.content,\n mainEntity: pageConfig.mainEntity,\n });\n graph.push(webPageSchema);\n\n // Add breadcrumbs if provided\n if (pageConfig.breadcrumbs) {\n graph.push(this.generateBreadcrumbSchema(pageConfig.breadcrumbs));\n }\n\n // Page type specific schemas\n switch (pageConfig.pageType) {\n case \"solution\":\n if (pageConfig.solutionData) {\n const softwareSchema = this.generateSoftwareSchema(\n pageConfig.solutionData\n );\n graph.push(softwareSchema);\n\n // Set software as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.solutionData.url}#software` };\n\n // Add Product schema if asProduct is true AND we have rating data\n if (pageConfig.asProduct && pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n }\n break;\n\n case \"article\":\n if (pageConfig.articleData) {\n graph.push(this.generateArticleSchema(pageConfig.articleData));\n }\n break;\n\n case \"product\":\n // Only generate Product schema for actual product pages\n if (pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n \n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n break;\n\ncase \"ebook\":\n if (pageConfig.ebookData) {\n const bookSchema = this.generateBookSchema(pageConfig.ebookData);\n graph.push(bookSchema);\n // Set book as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.ebookData.url}#book` };\n }\n break;\n }\n\n // Add FAQ if provided\n if (pageConfig.faqs) {\n const faqSchema = this.generateFAQSchema(pageConfig.faqs);\n if (faqSchema) graph.push(faqSchema);\n }\n\n return {\n \"@context\": \"https://schema.org\",\n \"@graph\": graph,\n };\n }\n\n // Inject schema into page\n injectSchema(schema: SchemaGraph): void {\n // Remove existing schema script if any\n const existingScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (existingScript) {\n existingScript.remove();\n }\n\n // Create and inject new schema script\n const script = document.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.setAttribute(\"data-schema\", \"fynd\");\n script.textContent = JSON.stringify(schema, null, 2);\n document.head.appendChild(script);\n }\n}\n\n// Page Configuration Manager\nclass PageConfigManager {\n // Helper method to safely parse JSON\n private static safeJsonParse<T>(jsonString: string, fallback: T, context?: string): T {\n try {\n return JSON.parse(jsonString);\n } catch (error) {\n console.warn(`\uD83D\uDD0D Fynd Schema: Failed to parse JSON${context ? ` for ${context}` : ''}:`, {\n jsonString,\n error: error instanceof Error ? error.message : error\n });\n return fallback;\n }\n }\n\n // Helper method to generate random rating\n private static getRandomRating(): string {\n const ratings = ['4.5', '4.6', '4.7', '4.8', '4.9'];\n return ratings[Math.floor(Math.random() * ratings.length)];\n }\n\n // Helper method to generate random review count\n private static getRandomReviewCount(): string {\n return Math.floor(Math.random() * (200 - 120 + 1) + 120).toString();\n }\n\n static getConfigFromDataAttributes(): PageConfig {\n const body = document.body;\n const config: PageConfig = {\n url: \"\",\n title: \"\",\n description: \"\",\n pageType: \"default\",\n };\n \n\n \n // Get basic page info\n config.url = window.location.href;\n config.title = document.title;\n config.description = (document.querySelector(\n 'meta[name=\"description\"]'\n ) as HTMLMetaElement)?.content;\n \n // Get page type from data attribute\n config.pageType = body.dataset.pageType || \"default\";\n \n // Check if URL contains /solutions/ - if yes, override pageType to \"solution\"\n if (window.location.pathname.includes('/solutions/')) {\n config.pageType = \"solution\";\n } else {\n // Get asProduct flag from data attribute for non-solution URLs\n config.asProduct = body.dataset.asProduct === \"true\";\n }\n \n // Get breadcrumbs from data attribute or generate from URL\n if (body.dataset.breadcrumbs) {\n config.breadcrumbs = this.safeJsonParse(\n body.dataset.breadcrumbs, \n this.generateBreadcrumbsFromURL(), \n 'breadcrumbs'\n );\n } else {\n config.breadcrumbs = this.generateBreadcrumbsFromURL();\n }\n \n // Page type specific configurations\n switch (config.pageType) {\n case \"solution\":\n config.solutionData = {\n name: body.dataset.solutionName || document.title,\n url: config.url,\n description: config.description || \"\",\n features: body.dataset.features\n ? this.safeJsonParse(body.dataset.features, [], 'features')\n : [],\n audience: body.dataset.audience,\n category: body.dataset.category,\n };\n // For solution pages (including URL-based), always prepare product data\n if (config.asProduct) {\n config.productData = {\n name: config.solutionData.name,\n url: config.solutionData.url,\n description: config.solutionData.description,\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n }\n break;\n \n case \"article\":\n config.articleData = {\n title: config.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n publishDate: body.dataset.publishDate || new Date().toISOString(),\n modifyDate: body.dataset.modifyDate,\n image:\n body.dataset.image ||\n (document.querySelector('meta[property=\"og:image\"]') as HTMLMetaElement)?.content,\n };\n break;\n \n case \"product\":\n config.productData = {\n name: body.dataset.productName || document.title,\n url: config.url,\n description: config.description || \"\",\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n break;\n\n // In the switch statement, add this case:\ncase \"ebook\":\n config.ebookData = {\n name: body.dataset.ebookName || document.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n isbn: body.dataset.isbn,\n bookFormat: \"EBook\",\n price: body.dataset.price || \"0\",\n currency: body.dataset.currency || \"USD\",\n availability: body.dataset.availability || \"https://schema.org/InStock\"\n };\n break;\n }\n \n // Auto-detect FAQs from page content\n config.faqs = this.extractFAQsFromPage();\n \n return config;\n }\n\n static extractFAQsFromPage(): FAQItem[] | null {\n const faqs: FAQItem[] = [];\n\n // Look for Fynd FAQ structure using custom attributes\n const faqWrappers = document.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"]'\n );\n\n faqWrappers.forEach((wrapper) => {\n // Find the toggle element (contains the question)\n const toggle = wrapper.querySelector('[fynd-faq-element=\"toggle\"]');\n // Find the content element (contains the answer)\n const content = wrapper.querySelector('[fynd-faq-element=\"content\"]');\n\n if (toggle && content) {\n // Extract question from the toggle div\n const questionDiv = toggle.querySelector(\n 'div[class*=\"title\"], div[data-text-style], .accordian-title'\n );\n const questionText = questionDiv ? (questionDiv.textContent || \"\").trim() : \"\";\n\n // Extract answer from the content div - look for richtext\n const richTextDiv = content.querySelector(\n '.richtext, [class*=\"richtext\"], .rich-text, [class*=\"rich-text\"]'\n );\n const answerText = richTextDiv\n ? (richTextDiv.textContent || \"\").trim()\n : (content.textContent || \"\").trim();\n\n if (questionText && answerText) {\n faqs.push({\n question: questionText,\n answer: answerText,\n });\n }\n }\n });\n\n return faqs.length > 0 ? faqs : null;\n }\n\n static generateBreadcrumbsFromURL(): BreadcrumbItem[] {\n const pathSegments = window.location.pathname\n .split(\"/\")\n .filter((segment) => segment);\n const breadcrumbs: BreadcrumbItem[] = [{ name: \"Home\", url: \"https://www.fynd.com\" }];\n\n let currentPath = \"https://www.fynd.com\";\n pathSegments.forEach((segment) => {\n currentPath += `/${segment}`;\n breadcrumbs.push({\n name:\n segment.charAt(0).toUpperCase() + segment.slice(1).replace(\"-\", \" \"),\n url: currentPath,\n });\n });\n\n return breadcrumbs;\n }\n}\n\n// Auto-initialize when DOM is ready\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n try {\n const schemaGenerator = new FyndSchemaGenerator();\n const pageConfig = PageConfigManager.getConfigFromDataAttributes();\n const schema = schemaGenerator.generateSchema(pageConfig);\n schemaGenerator.injectSchema(schema);\n \n // Verify injection\n const injectedScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (!injectedScript) {\n console.error(\" Fynd Schema: Schema script NOT found in DOM\");\n }\n \n } catch (error) {\n console.error(\" Fynd Schema: Error during initialization:\", error);\n }\n});\n\n// Export for manual usage\n(window as any).FyndSchema = {\n generator: FyndSchemaGenerator,\n configManager: PageConfigManager,\n};\n\n// Export to make this file a module (required for global declarations)\nexport {};"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/slider/freescroll.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", "document.addEventListener('DOMContentLoaded', function () {\n const enableFreeMode = window.innerWidth >= 992;\n\n const incentiveSwiper = new Swiper(\"[fynd-slider='freescroll']\", {\n slidesPerView: 3,\n spaceBetween: 20,\n loop: false,\n // autoHeight: false,\n freeMode: enableFreeMode,\n mousewheel: enableFreeMode\n ? {\n forceToAxis: true,\n sensitivity: 1,\n }\n : false,\n breakpoints: {\n 992: { slidesPerView: 3 },\n 768: { slidesPerView: 2.1 },\n 640: { slidesPerView: 1.8 },\n 0: { slidesPerView: 1.2 },\n },\n });\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;;;ACVA,WAAS,iBAAiB,oBAAoB,WAAY;AACtD,UAAM,iBAAiB,OAAO,cAAc;AAE5C,UAAM,kBAAkB,IAAI,OAAO,8BAA8B;AAAA,MAC7D,eAAe;AAAA,MACf,cAAc;AAAA,MACd,MAAM;AAAA;AAAA,MAEN,UAAU;AAAA,MACV,YAAY,iBACN;AAAA,QACE,aAAa;AAAA,QACb,aAAa;AAAA,MACjB,IACE;AAAA,MACN,aAAa;AAAA,QACT,KAAK,EAAE,eAAe,EAAE;AAAA,QACxB,KAAK,EAAE,eAAe,IAAI;AAAA,QAC1B,KAAK,EAAE,eAAe,IAAI;AAAA,QAC1B,GAAG,EAAE,eAAe,IAAI;AAAA,MAC5B;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../bin/live-reload.js", "../../src/test/sample.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", "console.log('script is running always');"],
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,UAAQ,IAAI,0BAA0B;",
6
+ "names": []
7
+ }