@fynd-design-engineering/fynd-one-v2 3.3.69 → 3.4.0
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.
- package/dist/flags-DEVAAAR7.webp +0 -0
- package/dist/flags@2x-LAG6ZLTZ.webp +0 -0
- package/dist/form/validation.css +1 -0
- package/dist/form/validation.js +12 -0
- package/dist/global/css/in-page-embed.css +1 -0
- package/dist/global/css/in-project-settings.css +1 -0
- package/dist/globe-TDQQLSUB.webp +0 -0
- package/dist/globe@2x-S5G7N6BJ.webp +0 -0
- package/package.json +2 -1
- package/dist/accordians/dropdown.js.map +0 -7
- package/dist/accordians/index.js.map +0 -7
- package/dist/cms-listing/index.js.map +0 -7
- package/dist/filters/clear-search.js.map +0 -7
- package/dist/filters/konnect.js.map +0 -7
- package/dist/filters/show-count.js.map +0 -7
- package/dist/form/cs-gated-redirection.js.map +0 -7
- package/dist/form/download-file.js.map +0 -7
- package/dist/form/handler.js +0 -1
- package/dist/form/handler.js.map +0 -7
- package/dist/form/phone-validator.js +0 -1
- package/dist/form/phone-validator.js.map +0 -7
- package/dist/global/anchor-scroll.js.map +0 -7
- package/dist/global/console-links.js.map +0 -7
- package/dist/global/contact-popup.js.map +0 -7
- package/dist/global/custom-bg-video.js.map +0 -7
- package/dist/global/loader.js.map +0 -7
- package/dist/global/media-card.js.map +0 -7
- package/dist/global/miscellaneous.js.map +0 -7
- package/dist/global/number-count.js.map +0 -7
- package/dist/global/popup-video.js.map +0 -7
- package/dist/global/style.css.map +0 -7
- package/dist/global/video-card.js.map +0 -7
- package/dist/hacktimus/2025.js.map +0 -7
- package/dist/hacktimus/styles.css.map +0 -7
- package/dist/home/index.js.map +0 -7
- package/dist/marquee/index.js.map +0 -7
- package/dist/marquee/marquee-swiper.js.map +0 -7
- package/dist/navigation/announcement/index.js.map +0 -7
- package/dist/navigation/context-menu/index.js.map +0 -7
- package/dist/navigation/desktop/index.js.map +0 -7
- package/dist/navigation/initialization.js.map +0 -7
- package/dist/navigation/main.js.map +0 -7
- package/dist/navigation/mobile/index.js.map +0 -7
- package/dist/navigation/scroll/index.js.map +0 -7
- package/dist/navigation/secondary-navigation/index.js.map +0 -7
- package/dist/navigation/style.css.map +0 -7
- package/dist/navigation/temp.css.map +0 -7
- package/dist/navigation/theme.css.map +0 -7
- package/dist/others/geolocation.js.map +0 -7
- package/dist/others/hero-aniamtion.js.map +0 -7
- package/dist/others/hero-india-animation-2.js.map +0 -7
- package/dist/others/hero-india-animation.js.map +0 -7
- package/dist/posthog-and-ga/attributes.js.map +0 -7
- package/dist/posthog-and-ga/main.js.map +0 -7
- package/dist/progressive-scroll/index.js.map +0 -7
- package/dist/quick-fix/reload.js.map +0 -7
- package/dist/seo/schema.js.map +0 -7
- package/dist/slider/freescroll.js.map +0 -7
- package/dist/test/sample.js.map +0 -7
- package/dist/testimonials/index.js.map +0 -7
- package/dist/timeline/index.js.map +0 -7
- package/dist/timeline/style.css.map +0 -7
- package/dist/tracking/custom-id.js.map +0 -7
- package/dist/tracking/fill-form-fields.js.map +0 -7
- package/dist/tracking/form-tracker.js.map +0 -7
- package/dist/tracking/page-categories.js.map +0 -7
- package/dist/tracking/user-journey.js.map +0 -7
- package/dist/tracking/utm-links.js.map +0 -7
- package/dist/utils/sample.js.map +0 -7
- package/dist/validations/localhost.js.map +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--Primary: "Fynd Sans", sans-serif;--Secondary: "Inter Display", sans-serif}html,body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-smooth:always}.w-background-video{position:absolute;inset:0;z-index:0}.video{width:100%;height:auto;object-fit:cover;display:block}[data-padding=big]{padding-top:9rem;padding-bottom:9rem}[data-padding=medium]{padding-top:5rem;padding-bottom:5rem}[data-padding=small]{padding-top:4rem;padding-bottom:4rem}[data-text-style=heading-xxl]{font-family:var(--Primary);font-size:4.5rem;font-weight:500;line-height:110%;letter-spacing:-.04em}[data-text-style=heading-xl]{font-family:var(--Primary);font-size:3.5rem;font-weight:400;line-height:110%;letter-spacing:-.04em}[data-text-style=heading-l]{font-family:var(--Primary);font-size:2.5rem;font-weight:400;line-height:110%;letter-spacing:-.03em}[data-text-style=heading-m]{font-family:var(--Primary);font-size:2rem;font-weight:400;line-height:120%;letter-spacing:-.02em}[data-text-style=heading-s]{font-family:var(--Secondary);font-size:1.625rem;font-weight:500;line-height:130%;letter-spacing:-.02em}[data-text-style=heading-xs]{font-family:var(--Secondary);font-size:1.25rem;font-weight:400;line-height:140%}[data-text-style=font-weight-500]{font-weight:500}@media (max-width: 1023px){[data-text-style=heading-xxl]{font-size:3.5rem}[data-text-style=heading-xl]{font-size:2.5rem}[data-text-style=heading-l]{font-size:2rem}[data-text-style=heading-m]{font-size:1.5rem}[data-text-style=heading-s]{font-size:1.25rem}}@media (max-width: 767px){[data-text-style=heading-xxl]{font-size:2.5rem}[data-text-style=heading-xl]{font-size:2rem}[data-text-style=heading-xs]{font-size:1.2rem}[data-text-style=heading-l]{font-size:1.5rem}[data-text-style=heading-m]{font-size:1.25rem}[data-text-style=heading-s]{font-size:1.125rem}[data-padding=big],[data-padding=medium],[data-padding=small]{padding-top:2.5rem;padding-bottom:2.5rem}}[data-text-style=body-xs-regular]{font-size:.75rem;font-weight:400;line-height:130%}[data-text-style=body-xs-medium]{font-size:.75rem;font-weight:500;line-height:130%}[data-text-style=body-xs-semibold]{font-size:.75rem;font-weight:600;line-height:130%}[data-text-style=body-s-regular]{font-size:.875rem;font-weight:400;line-height:140%}[data-text-style=body-s-medium]{font-size:.875rem;font-weight:500;line-height:140%}[data-text-style=body-m-regular]{font-size:1rem;font-weight:400;line-height:155%}[data-text-style=body-m-medium]{font-size:1rem;font-weight:500;line-height:135%}[data-text-style=body-l-regular]{font-size:1.125rem;font-weight:400;line-height:145%}[data-text-style=body-l-medium]{font-size:1.125rem;font-weight:500;line-height:150%}[data-text-style=body-xl-regular]{font-size:1.25rem;font-weight:400;line-height:140%}[data-text-style=body-xl-medium]{font-size:1.25rem;font-weight:500;line-height:140%}@media (max-width: 991px){[data-text-style=body-xs-regular],[data-text-style=body-xs-medium],[data-text-style=body-xs-semibold]{font-size:.6875rem}[data-text-style=body-s-regular],[data-text-style=body-s-medium]{font-size:.8125rem}[data-text-style=body-m-regular],[data-text-style=body-m-medium]{font-size:.9375rem}[data-text-style=body-l-regular],[data-text-style=body-l-medium]{font-size:1rem}[data-text-style=body-xl-regular],[data-text-style=body-xl-medium]{font-size:1.125rem}}@media (max-width: 767px){[data-text-style=body-xs-regular],[data-text-style=body-xs-medium],[data-text-style=body-xs-semibold]{font-size:.75rem}[data-text-style=body-s-regular],[data-text-style=body-m-regular]{font-size:.875rem}[data-text-style=body-s-medium],[data-text-style=body-m-medium],[data-text-style=body-l-regular],[data-text-style=body-l-medium],[data-text-style=body-xl-regular]{font-size:1rem}[data-text-style=body-xl-medium]{font-size:1.2rem}}[data-text-color=title]{color:#101319}[data-text-color=subtext]{color:#5b5c5d}[data-text-color=title-inverse]{color:#fff}[data-text-color=subtext-inverse]{color:#a0a1a2}[data-icon-color=darkest]{color:#0e0e0e}[data-icon-color=dark]{color:#797a7c}[data-icon-color=medium]{color:#f2f2f2}[data-icon-color=darkest]{color:#fff}[data-spacing=tiny]{height:.25rem}[data-spacing=xxsmall]{height:.5rem}[data-spacing=xsmall]{height:1rem}[data-spacing=small]{height:1.5rem}[data-spacing=medium]{height:2.5rem}[data-spacing=large]{height:3.5rem}[data-spacing=xlarge]{height:4rem}[data-spacing=xxlarge]{height:5rem}[data-spacing=huge]{height:6rem}[data-spacing=xhuge]{height:7rem}[data-spacing=xxhuge]{height:8rem}[data-badge-bg=blue]{background:#5c98f7}[data-badge-bg=peach]{background:#eeb384}[data-badge-bg=green]{background:#80d99f}[data-badge-bg=yellow]{background:#fdf6db}[data-badge-bg=lavender]{background:#e382ff}[data-badge-bg=violet]{background:#8d61f6}[data-badge-bg=red]{background:#fddbdb}[data-badge-bg=gray]{background:#f8f8f9}[data-badge-bg=transparent]{background:transparent}[data-badge-bg=teal]{background:#89d0e0}[data-bg=blue]{background:#d4e5ff}[data-bg=peach]{background:#fceadb}[data-bg=green]{background:#c9ebd7}[data-bg=yellow]{background:#fdf6db}[data-bg=lavender]{background:#ebddef}[data-bg=red]{background:#fddbdb}[data-bg=gray]{background:#f8f8f9}[data-bg=dark],.card_badge[data-bg=dark]{background:#0e0e0e;color:#fff}[data-bg=transparent]{background:transparent}[data-bg=tea-green]{background:#e5f2c2}@media (min-width: 1280px){[data-glow=star]:before{left:30vw;height:1370px}}@media (min-width: 768px){.hero--right-image-wrap[data-bg]{background:transparent}[data-glow=star]:before{content:"";position:absolute;z-index:1;background-image:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67b44aabaca043782cd38488_background-shimmer.gif);background-size:contain;background-repeat:no-repeat;opacity:.5;mix-blend-mode:screen;height:1200px;width:200vw;left:10vw;top:-50%}[data-glow=star]:after{content:"";z-index:0;opacity:.5;mix-blend-mode:multiply;object-fit:cover;background-position:0 0;background-repeat:repeat;background-size:contain;width:100%;height:100%;position:absolute;inset:0%}}@media (max-width: 767px){.section_hero-50-50[data-bg]{background:transparent}[data-glow=star] .hero--right-image-wrap:before{content:"";position:absolute;inset:-35% 0% 0% auto;z-index:1;background-image:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67b44aabaca043782cd38488_background-shimmer.gif);background-size:cover;background-position:-120px 0;opacity:.5;mix-blend-mode:screen;height:165%;width:100%}[data-glow=star] .hero--right-image-wrap:after{content:"";z-index:0;opacity:.5;mix-blend-mode:multiply;object-fit:cover;background-image:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67e014ba0be011b4a7adb7a3_grain-hero.avif);background-position:0 0;background-repeat:repeat;background-size:contain;width:100%;height:100%;position:absolute;inset:0%}.section_hero-50-50[data-bg-mobile=True]{background:#0e0e0e}}.hide-scrollbar::-webkit-scrollbar{display:none}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}[data-truncate=yes]{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}[style-line-clamp]{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}[style-line-clamp="1"]{-webkit-line-clamp:1}[style-line-clamp="2"]{-webkit-line-clamp:2}[style-line-clamp="3"]{-webkit-line-clamp:3}[style-line-clamp="4"]{-webkit-line-clamp:4}[data-color="#0A4020"]{color:#0a4020}[data-color="#043B77"]{color:#043b77}[data-color="#FF0000"]{color:red}[data-color="#48310F"]{color:#48310f}[data-color="#F8F8F9"]{color:#f8f8f9}[data-color=white]{color:#fff}[data-color=subtext-white]{color:#a0a1a2}[data-color=green-dark]{color:#427c5a}[data-color=green-light]{color:#b2e0c3}[data-height="25rem"]{height:25rem}[data-height="26rem"]{height:26.06rem}[data-height="31rem"]{height:31.25rem}[data-height="39rem"]{height:39.125rem}[data-bg-color]{background-color:#f8f8f9}@media screen and (max-width: 767px){*[data-height]{height:15.62rem}div div.bento-card_text{font-size:1rem}div p.bento-card_subtext{font-size:.875rem}}[fynd-sticky-bg-theme=blue-1]{background:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67e1b4072adad40eb22e201e_97d7b26441d6a95f90db1952a9d3e122_bg-theme-1.avif) no-repeat;background-size:cover}.w-richtext figure.w-richtext-align-fullwidth>figcaption{font-size:14px}.blog_rich-text strong,.metric-rich-text strong{font-weight:500}#fc_frame{visibility:hidden;display:none}[data-bg=white]{background:#fff}a.blog-details.w-inline-block{display:flex}.bento-card:hover .btn.global_card_btn{opacity:1}@media (width <=767px){[data-text-style=body-l-regular]{line-height:145%}[data-text-style=heading-xl]{line-height:115%}[data-text-style=heading-l]{line-height:135%}[data-text-style=body-xl-regular]{font-size:1rem}[data-text-style=heading-s]{font-size:1.125rem;line-height:140%}}[card-bg=dark]{background:#1a1a1a}[circle-bg=dark]{background:#333}[circle-bg=light]{background:#1a1a1a}[bottom-line-border=dark]{border-color:#333}[bottom-line-border=light]{border-color:#1a1a1a}.accordian-richtext[data-text-color]:not([data-text-color=""])>*{color:inherit}@media (max-width: 767px){[data-glow=star] .hero--right-image-wrap:before{top:0%;height:100%}}.iti{position:relative;display:inline-block;width:100%}h1 a,h2 a,h3 a,h6 a{height:var(--sizes--40);padding:0px var(--_spacing---24);grid-column-gap:var(--_spacing---8);grid-row-gap:var(--_spacing---8);border-radius:var(--_border-radius---radius-32);color:var(--_color-palette---button--primary--button-text-default)!important;font-size:var(--sizes--16);line-height:var(--_typography---line-height--160);font-weight:var(--_typography---font-weight--medium);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;transition:all .3s;display:inline-flex;background:#000;letter-spacing:.02px}.scroll_visibility_hidden{-ms-overflow-style:none;scrollbar-width:none}.scroll_visibility_hidden::-webkit-scrollbar{display:none}@media screen and (max-width: 991px){.global_card_title-3.bottom-caption-31{font-size:1rem!important}}@media screen and (max-width: 479px){.global_card_title-3.bottom-caption-31{font-size:.875rem!important}}input#phone-number{padding-left:89px!important}.iti__selected-flag{border-radius:4px}@media (max-width: 992px){[hide-from-tablet=true]{display:none!important;visibility:hidden!important}}[loop-video]{width:100%;height:100%}[data-zindex="1"]{z-index:1!important}[richtext-button]{height:var(--sizes--40);padding:0 var(--_spacing---24);gap:var(--_spacing---8);border-radius:var(--_border-radius---radius-32);font-size:var(--sizes--16);line-height:var(--_typography---line-height--160);font-weight:var(--_typography---font-weight--medium);white-space:nowrap;border:1px solid transparent;justify-content:center;align-items:center;transition:all .3s;display:inline-flex;font-style:normal!important}[richtext-button=primary]{background-color:var(--button-primary\<deleted\|variable-99fb50d1-1e0d-8a24-83db-2993f67e9130\>);color:var(--_color-palette---button--primary--button-text-default)!important}[richtext-button=secondary]{background-color:var(--_color-palette---button--secondary--button-bg-default);border-color:var(--_color-palette---button--secondary--button-border-default);color:var(--_color-palette---extension--text-primary)!important}[data-corner-cutout="1.5rem"]{position:relative}[data-corner-cutout="1.5rem"]:after{content:"";position:absolute;top:0;right:0;width:1.5rem;height:1.5rem;background:var(--_color-palette---text--title);-webkit-mask-image:radial-gradient(circle at bottom left,transparent 24px,var(--_color-palette---text--title) 25px);mask-image:radial-gradient(circle at bottom left,transparent 24px,var(--_color-palette---text--title) 25px)}[data-corner-cutout="1.5rem"]:before{content:"";position:absolute;top:0;left:0;width:1.5rem;height:1.5rem;background:var(--_color-palette---text--title);-webkit-mask-image:radial-gradient(circle at bottom right,transparent 24px,var(--_color-palette---text--title) 25px);mask-image:radial-gradient(circle at bottom right,transparent 24px,var(--_color-palette---text--title) 25px)}.accordian-richtext p:first-child{margin-bottom:1rem}.splide__pagination__page.is-active{background:var(--_color-palette---text--title);transform:scale(1)}[fynd-timeline-element=dot-wrapper]{display:flex;gap:2px;align-items:center}@media (max-width: 991px){[fynd-timeline-element=dot-wrapper]{flex-direction:column}[fynd-timeline-element=dot],[fynd-timeline-element=dot-filled]{width:2px!important;height:4px}[fynd-timeline-element=circle]{box-shadow:inset 0 0 0 6px #a0a1a2}[fynd-timeline-element=circle-filled]{box-shadow:inset 0 0 0 8px #0e0e0e!important}}[fynd-timeline-element=dot],[fynd-timeline-element=dot-filled]{width:100%;height:2px;border-radius:10px;background:#a0a1a2;transition:background-color .3s ease}[fynd-timeline-element=dot-filled]{background:#0e0e0e}[fynd-timeline-element=circle]{transform:scale(.7);box-shadow:inset 0 0 0 20px #a0a1a2}[fynd-timeline-element=circle-filled]{transform:scale(1);box-shadow:inset 0 0 0 10px #0e0e0e}[fynd-show-clear=true]{background-image:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/6889f30ed6b4ea10c3b618c0_close.svg)!important;background-size:20px!important}[fynd-show-clear=false]{background-image:url(https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ce756d3fd77fc0515461fd_ic_search.svg)!important;background-size:20px!important}[fynd-richtext=accordian] ul>li strong{font-weight:400}th{font-weight:600!important}.fynd-table_cell b,.fynd-table_head b{font-weight:600}[data-style-over=richtext-comp]{color:#000!important;text-decoration:none!important}[data-style-over=richtext-comp] :hover{color:#fff!important;text-decoration:none!important}ul{color:var(--_color-palette---text--subtext);line-height:var(--_typography---line-height--160)}.fynd-table_instance{overflow:auto;overflow-x:auto;overflow-y:auto}[strict-display=none]{display:none!important}blockquote>strong{font-weight:500!important;font-size:1rem;font-style:normal;line-height:1;color:var(--_primitives---neutral--neutral-100)}[data-popup-video=injected]{width:100%;height:100%;object-fit:cover;position:absolute;z-index:2}.gradient_blur{opacity:1}.gradient_blur>div,.gradient_blur:before,.gradient_blur:after{position:absolute;inset:0}.gradient_blur:before{content:"";z-index:1;backdrop-filter:blur(.5px);mask:linear-gradient(to top,rgba(0,0,0,0) 0%,rgba(0,0,0,1) 12.5%,rgba(0,0,0,1) 25%,rgba(0,0,0,0) 37.5%)}.gradient_blur>div:nth-of-type(1){z-index:2;backdrop-filter:blur(1px);mask:linear-gradient(to top,rgba(0,0,0,0) 12.5%,rgba(0,0,0,1) 25%,rgba(0,0,0,1) 37.5%,rgba(0,0,0,0) 50%)}.gradient_blur>div:nth-of-type(2){z-index:3;backdrop-filter:blur(2px);mask:linear-gradient(to top,rgba(0,0,0,0) 25%,rgba(0,0,0,1) 37.5%,rgba(0,0,0,1) 50%,rgba(0,0,0,0) 62.5%)}.gradient_blur>div:nth-of-type(3){z-index:4;backdrop-filter:blur(4px);mask:linear-gradient(to top,rgba(0,0,0,0) 37.5%,rgba(0,0,0,1) 50%,rgba(0,0,0,1) 62.5%,rgba(0,0,0,0) 75%)}.gradient_blur>div:nth-of-type(4){z-index:5;backdrop-filter:blur(8px);mask:linear-gradient(to top,rgba(0,0,0,0) 50%,rgba(0,0,0,1) 62.5%,rgba(0,0,0,1) 75%,rgba(0,0,0,0) 87.5%)}.gradient_blur>div:nth-of-type(5){z-index:6;backdrop-filter:blur(16px);mask:linear-gradient(to top,rgba(0,0,0,0) 62.5%,rgba(0,0,0,1) 75%,rgba(0,0,0,1) 87.5%,rgba(0,0,0,0) 100%)}.gradient_blur>div:nth-of-type(6){z-index:7;backdrop-filter:blur(32px);mask:linear-gradient(to top,rgba(0,0,0,0) 75%,rgba(0,0,0,1) 87.5%,rgba(0,0,0,1) 100%)}.gradient_blur:after{content:"";z-index:8;backdrop-filter:blur(64px);mask:linear-gradient(to top,rgba(0,0,0,0) 87.5%,rgba(0,0,0,1) 100%)}.navigation{z-index:99999!important}#mobile-menu{top:0!important;transform:translateY(0)!important}@media (min-width: 768px){#mobile-menu{top:0!important;transform:translateY(0)!important}}@media (max-width: 767px) and (orientation: landscape){#mobile-menu{top:50px!important;transform:translateY(0)!important}}[style-height=full]{height:100%}.custom-form_layout.w-variant-ccdd1f5c-cbc6-911f-3402-92637f9b226d,.custom-form_layout{height:auto}.form_right-column{padding-left:0rem!important;padding-right:0rem!important}@media screen and (max-width: 767px){.hero-form{padding-top:0rem!important}}.is-select{appearance:none;-webkit-appearance:none;-moz-appearance:none}.is-select::-ms-expand{display:none}[data-popup-video=youtube-container]{z-index:4}#widget-copilot{z-index:10;position:relative}[contact-form-popup=open]{z-index:100000000000}.fynd-bg-video>video{position:static!important}button#fynd-schema-copy-btn{display:none!important}@media (max-width: 768px){#widget-copilot{z-index:1000000000000!important}}[card-blur=black]{backdrop-filter:blur(25px) brightness(.8);-webkit-backdrop-filter:blur(25px) brightness(.9);mask-image:linear-gradient(to top,#0000 35%,#000 70%);-webkit-mask-image:linear-gradient(to top,rgba(0,0,0,0) 35%,rgba(0,0,0,1) 70%)}[card-blur=white]{backdrop-filter:blur(25px) brightness(1);-webkit-backdrop-filter:blur(25px) brightness(.9);mask-image:linear-gradient(to top,#0000 35%,#000 70%);-webkit-mask-image:linear-gradient(to top,rgba(0,0,0,0) 35%,rgba(0,0,0,1) 70%)}[media-card-padding="24"]{padding:24px}@media (max-width: 600px){[media-card-padding="24"]{padding:20px}}[media-card-padding="20"]{padding:20px}@media (max-width: 600px){[media-card-padding="20"]{padding:20px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[fynd-sticky-target]{height:90vh;position:sticky;top:12vh;z-index:2}[fynd-scroll-blocks]{display:none}[fynd-scroll-source]{height:80vh}[fynd-sticky-source]{height:80vh;width:100%;position:absolute;top:0;opacity:0;background-color:transparent}[fynd-scroll-container]{opacity:0}[fynd-sticky-target]{height:80vh;border-radius:1rem;overflow:hidden}[fynd-scroll-column]{padding-left:0rem;padding-right:0rem}.progressive-scroll-image{object-fit:cover}@media (max-width: 991px){[fynd-scroll-container]{opacity:0;display:none}[fynd-scroll-blocks]{display:flex}[fynd-sticky-source]{height:auto;position:static;opacity:1}[fynd-scroll-source]{height:auto}}
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fynd-design-engineering/fynd-one-v2",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Updated CDN for fynd.com",
|
|
5
5
|
"homepage": "https://github.com/Fynd-Design-Engineering/Fynd-Utils/blob/main/README.md",
|
|
6
6
|
"license": "ISC",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"@splidejs/splide": "^4.1.4",
|
|
36
36
|
"@splidejs/splide-extension-auto-scroll": "^0.5.3",
|
|
37
37
|
"gsap": "^3.13.0",
|
|
38
|
+
"intl-tel-input": "^25.12.5",
|
|
38
39
|
"swiper": "^11.2.8",
|
|
39
40
|
"typescript": "^5.8.3"
|
|
40
41
|
},
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/accordians/dropdown.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", "// dropdown.ts\n\n// Types for dropdown functionality\ninterface DropdownElements {\n wrapper: HTMLElement;\n toggle: HTMLElement;\n content: HTMLElement;\n name: string;\n }\n \n export interface FyndDropdownAPI {\n close: (dropdownName: string) => void;\n closeAll: () => void;\n init: () => void;\n }\n \n // Helper function to find dropdown elements\n function findDropdownElements(dropdownName: string): DropdownElements | null {\n const wrapper: HTMLElement | null = document.querySelector(`[fynd-dropdown=\"wrapper\"][fynd-dropdown-name=\"${dropdownName}\"]`);\n if (!wrapper) return null;\n \n const toggle: HTMLElement | null = wrapper.querySelector('[fynd-dropdown=\"toggle\"]');\n const content: HTMLElement | null = wrapper.querySelector('[fynd-dropdown=\"content\"]');\n \n if (!toggle || !content) return null;\n \n return {\n wrapper,\n toggle,\n content,\n name: dropdownName\n };\n }\n \n // Function to close all dropdowns (optionally exclude current one)\n function closeAllDropdowns(excludeDropdownName: string | null = null): void {\n const allWrappers: NodeListOf<HTMLElement> = document.querySelectorAll('[fynd-dropdown=\"wrapper\"][fynd-dropdown-name]');\n allWrappers.forEach((wrapper: HTMLElement): void => {\n const dropdownName: string | null = wrapper.getAttribute('fynd-dropdown-name');\n const content: HTMLElement | null = wrapper.querySelector('[fynd-dropdown=\"content\"]');\n \n // Close all dropdowns except the one being toggled\n if (content && dropdownName !== excludeDropdownName) {\n content.style.display = 'none';\n }\n });\n }\n \n // Initialize dropdown functionality with automatic open/close behavior\n function initializeDropdowns(): void {\n // Get all dropdown wrappers\n const dropdownWrappers: NodeListOf<HTMLElement> = document.querySelectorAll('[fynd-dropdown=\"wrapper\"][fynd-dropdown-name]');\n \n dropdownWrappers.forEach((wrapper: HTMLElement): void => {\n const dropdownName: string | null = wrapper.getAttribute('fynd-dropdown-name');\n const toggle: HTMLElement | null = wrapper.querySelector('[fynd-dropdown=\"toggle\"]');\n const content: HTMLElement | null = wrapper.querySelector('[fynd-dropdown=\"content\"]');\n \n if (!toggle || !content || !dropdownName) return;\n \n // Initially hide content\n content.style.display = 'none';\n \n // Remove existing listeners to prevent duplicates\n const newToggle = toggle.cloneNode(true) as HTMLElement;\n const newContent = content.cloneNode(true) as HTMLElement;\n toggle.parentNode?.replaceChild(newToggle, toggle);\n content.parentNode?.replaceChild(newContent, content);\n \n // Auto toggle dropdown on click (default behavior)\n newToggle.addEventListener('click', (e: Event): void => {\n e.stopPropagation();\n \n // Close all other dropdowns first\n closeAllDropdowns(dropdownName);\n \n // Toggle current dropdown automatically\n if (newContent.style.display === 'none') {\n newContent.style.display = 'block';\n } else {\n newContent.style.display = 'none';\n }\n });\n \n // Prevent content clicks from closing dropdown\n newContent.addEventListener('click', (e: Event): void => {\n e.stopPropagation();\n });\n });\n \n // Auto close dropdown when clicking outside (default behavior)\n document.removeEventListener('click', handleOutsideClick);\n document.addEventListener('click', handleOutsideClick);\n \n // Auto close dropdown on Escape key (default behavior)\n document.removeEventListener('keydown', handleEscapeKey);\n document.addEventListener('keydown', handleEscapeKey);\n }\n \n // Event handlers for automatic behavior\n function handleOutsideClick(): void {\n closeAllDropdowns();\n }\n \n function handleEscapeKey(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n closeAllDropdowns();\n }\n }\n \n // Minimal API - only for manual closing when needed\n export const fyndDropdown: FyndDropdownAPI = {\n close: (dropdownName: string): void => {\n const elements: DropdownElements | null = findDropdownElements(dropdownName);\n if (elements) {\n elements.content.style.display = 'none';\n }\n },\n \n closeAll: (): void => {\n closeAllDropdowns();\n },\n \n init: (): void => {\n initializeDropdowns();\n }\n };\n \n // Auto-initialize when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initializeDropdowns);\n } else {\n initializeDropdowns();\n }\n \n // Export as default as well for convenience\n export default fyndDropdown;"],
|
|
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;;;ACOE,WAAS,qBAAqB,cAA+C;AAC3E,UAAM,UAA8B,SAAS,cAAc,iDAAiD,YAAY,IAAI;AAC5H,QAAI,CAAC,QAAS,QAAO;AAErB,UAAM,SAA6B,QAAQ,cAAc,0BAA0B;AACnF,UAAM,UAA8B,QAAQ,cAAc,2BAA2B;AAErF,QAAI,CAAC,UAAU,CAAC,QAAS,QAAO;AAEhC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF;AAGA,WAAS,kBAAkB,sBAAqC,MAAY;AAC1E,UAAM,cAAuC,SAAS,iBAAiB,+CAA+C;AACtH,gBAAY,QAAQ,CAAC,YAA+B;AAClD,YAAM,eAA8B,QAAQ,aAAa,oBAAoB;AAC7E,YAAM,UAA8B,QAAQ,cAAc,2BAA2B;AAGrF,UAAI,WAAW,iBAAiB,qBAAqB;AACnD,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAGA,WAAS,sBAA4B;AAEnC,UAAM,mBAA4C,SAAS,iBAAiB,+CAA+C;AAE3H,qBAAiB,QAAQ,CAAC,YAA+B;AACvD,YAAM,eAA8B,QAAQ,aAAa,oBAAoB;AAC7E,YAAM,SAA6B,QAAQ,cAAc,0BAA0B;AACnF,YAAM,UAA8B,QAAQ,cAAc,2BAA2B;AAErF,UAAI,CAAC,UAAU,CAAC,WAAW,CAAC,aAAc;AAG1C,cAAQ,MAAM,UAAU;AAGxB,YAAM,YAAY,OAAO,UAAU,IAAI;AACvC,YAAM,aAAa,QAAQ,UAAU,IAAI;AACzC,aAAO,YAAY,aAAa,WAAW,MAAM;AACjD,cAAQ,YAAY,aAAa,YAAY,OAAO;AAGpD,gBAAU,iBAAiB,SAAS,CAAC,MAAmB;AACtD,UAAE,gBAAgB;AAGlB,0BAAkB,YAAY;AAG9B,YAAI,WAAW,MAAM,YAAY,QAAQ;AACvC,qBAAW,MAAM,UAAU;AAAA,QAC7B,OAAO;AACL,qBAAW,MAAM,UAAU;AAAA,QAC7B;AAAA,MACF,CAAC;AAGD,iBAAW,iBAAiB,SAAS,CAAC,MAAmB;AACvD,UAAE,gBAAgB;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAGD,aAAS,oBAAoB,SAAS,kBAAkB;AACxD,aAAS,iBAAiB,SAAS,kBAAkB;AAGrD,aAAS,oBAAoB,WAAW,eAAe;AACvD,aAAS,iBAAiB,WAAW,eAAe;AAAA,EACtD;AAGA,WAAS,qBAA2B;AAClC,sBAAkB;AAAA,EACpB;AAEA,WAAS,gBAAgB,GAAwB;AAC/C,QAAI,EAAE,QAAQ,UAAU;AACtB,wBAAkB;AAAA,IACpB;AAAA,EACF;AAGO,MAAM,eAAgC;AAAA,IAC3C,OAAO,CAAC,iBAA+B;AACrC,YAAM,WAAoC,qBAAqB,YAAY;AAC3E,UAAI,UAAU;AACZ,iBAAS,QAAQ,MAAM,UAAU;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,UAAU,MAAY;AACpB,wBAAkB;AAAA,IACpB;AAAA,IAEA,MAAM,MAAY;AAChB,0BAAoB;AAAA,IACtB;AAAA,EACF;AAGA,MAAI,SAAS,eAAe,WAAW;AACrC,aAAS,iBAAiB,oBAAoB,mBAAmB;AAAA,EACnE,OAAO;AACL,wBAAoB;AAAA,EACtB;AAGA,MAAO,mBAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/accordians/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", "import { isElementAccessExpression } from \"typescript\";\n\n// Type definitions\ninterface GSAPElement extends HTMLElement {\n gsapAnimation?: { kill(): void };\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n const faqWrappers: NodeListOf<HTMLElement> = document.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"]'\n );\n\n faqWrappers.forEach((wrapper: HTMLElement): void => {\n const toggle: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"toggle\"]'\n );\n const content: GSAPElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content\"]'\n );\n const contentInner: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content-inner\"]'\n );\n const xLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"x-line\"]') || null;\n const yLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"y-line\"]') || null;\n\n if (!toggle || !content || !contentInner || !xLine || !yLine) {\n console.warn(\"Required FAQ elements not found in wrapper\");\n return;\n }\n\n const groupContainer: HTMLElement | null =\n wrapper.closest(\"[fynd-faq-group]\");\n const groupName: string | null =\n groupContainer?.getAttribute(\"fynd-faq-group\") || null;\n\n // Get the FAQ type - either \"one-at-a-time\" or \"multiple-at-a-time\"\n const faqType: string =\n groupContainer?.getAttribute(\"fynd-faq-type\") || \"one-at-a-time\";\n\n if (wrapper.getAttribute(\"fynd-faq-initialopen\") === \"true\") {\n gsap.set(content, { height: \"auto\", overflow: \"hidden\" });\n gsap.set(contentInner, { opacity: 1 });\n gsap.set(xLine, { rotation: 180 });\n gsap.set(yLine, { rotation: 270 });\n toggle.setAttribute(\"data-state\", \"open\");\n\n // openening the accordion\n // console.log(\"this accordion is open\", wrapper);\n // if (window.innerWidth < 992) {\n // setTimeout(() => {\n // scrollToAccordion(wrapper);\n // }, 200);\n // }\n\n updateFaqGroupImage(wrapper, groupName); // image\n updateFaqGroupText(wrapper, groupName); // text\n updateFaqGroupButton(wrapper, groupName); // button\n updateFaqGroupVideo(wrapper, groupName); // \u2705 video (sets loop+autoplay and tries to play)\n } else {\n gsap.set(content, { height: 0 });\n gsap.set(contentInner, { opacity: 0 });\n gsap.set(xLine, { rotation: 0 });\n gsap.set(yLine, { rotation: 0 });\n toggle.setAttribute(\"data-state\", \"closed\");\n }\n\n let isAnimating: boolean = false;\n toggle.addEventListener(\"click\", (): void => {\n if (isAnimating) return;\n isAnimating = true;\n const isOpen: boolean = toggle.getAttribute(\"data-state\") === \"open\";\n\n // For \"one-at-a-time\" type, check if this is the last open FAQ\n if (faqType === \"one-at-a-time\" && groupContainer) {\n const openFAQs: NodeListOf<HTMLElement> =\n groupContainer.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"] [data-state=\"open\"]'\n );\n\n if (isOpen && openFAQs.length === 1) {\n // Don't allow closing the last open FAQ in \"one-at-a-time\" mode\n isAnimating = false;\n return;\n }\n }\n\n if (isOpen) {\n closeAccordion(wrapper, (): void => {\n isAnimating = false;\n });\n } else {\n if (faqType === \"one-at-a-time\" && groupContainer) {\n closeOtherAccordions(groupContainer);\n }\n openAccordion(wrapper, groupName, (): void => {\n isAnimating = false;\n });\n }\n });\n });\n\n // Initialize ratio heights on page load\n handleRatioHeights();\n\n // \u2705 Set up viewport-based autoplay/pause for all video targets\n initFaqVideoAutoplayObserver();\n\n setTimeout(playAllFaqVideos, 500);\n});\n\n// Handle window resize\nwindow.addEventListener(\"resize\", (): void => {\n handleRatioHeights();\n});\n\n// Function to handle ratio heights for FAQ image targets and tabgroups\nfunction handleRatioHeights(): void {\n // Run only if viewport width is >= 992px\n if (window.innerWidth < 992) return;\n\n // Find all FAQ image targets\n const imageTargets: NodeListOf<HTMLElement> = document.querySelectorAll(\n \"[fynd-faq-image-target]\"\n );\n\n imageTargets.forEach((imageTarget: HTMLElement): void => {\n const wrapper: HTMLElement | null = imageTarget.parentElement;\n if (!wrapper) return;\n const ratioHeight: string | null = wrapper.getAttribute(\"ratio-height\");\n if (ratioHeight !== \"true\") return;\n wrapper.style.height = \"auto\";\n requestAnimationFrame((): void => {\n const renderedHeight: number = wrapper.offsetHeight;\n wrapper.style.height = `${renderedHeight}px`;\n });\n });\n\n // Handle tab groups\n const tabGroups: NodeListOf<HTMLElement> = document.querySelectorAll(\n '[fynd-faq-tabgroup][ratio-height=\"true\"]'\n );\n tabGroups.forEach((tabGroup: HTMLElement): void => {\n tabGroup.style.height = \"auto\";\n requestAnimationFrame((): void => {\n const renderedHeight: number = tabGroup.offsetHeight;\n tabGroup.style.height = `${renderedHeight}px`;\n });\n });\n}\n\nfunction openAccordion(\n wrapper: HTMLElement,\n groupName: string | null,\n callback?: () => void\n): void {\n const toggle: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"toggle\"]'\n );\n const content: GSAPElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content\"]'\n );\n const contentInner: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content-inner\"]'\n );\n const xLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"x-line\"]') || null;\n const yLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"y-line\"]') || null;\n\n if (!toggle || !content || !contentInner || !xLine || !yLine) {\n console.warn(\"Required elements not found for opening accordion\");\n return;\n }\n\n if (content.gsapAnimation) {\n content.gsapAnimation.kill();\n }\n\n const timeline = gsap.timeline({\n onComplete: (): void => callback && callback(),\n });\n\n gsap.set(content, { height: \"auto\", visibility: \"hidden\", opacity: 0 });\n const height: number = content.offsetHeight;\n gsap.set(content, { height: 0, visibility: \"visible\", opacity: 1 });\n\n timeline.to(xLine, { rotation: 180, duration: 0.4, ease: \"power2.inOut\" }, 0);\n timeline.to(yLine, { rotation: 270, duration: 0.4, ease: \"power2.inOut\" }, 0);\n timeline.to(\n content,\n {\n height,\n duration: 0.5,\n ease: \"power3.inOut\",\n clearProps: \"height\",\n onComplete: (): void => {\n (content as HTMLElement).style.height = \"auto\";\n },\n },\n 0\n );\n timeline.to(\n contentInner,\n { opacity: 1, duration: 0.4, ease: \"power2.out\" },\n \"-=0.35\"\n );\n\n content.gsapAnimation = timeline;\n toggle.setAttribute(\"data-state\", \"open\");\n // scroll to the accordion on tablet and below\n // console.log(\"this accordion is open\", wrapper);\n if (window.innerWidth < 992) {\n setTimeout(() => {\n scrollToAccordion(wrapper);\n }, 600);\n }\n\n const icon: HTMLElement | null = toggle.querySelector(\n '[fynd-faq-element=\"chevron\"]'\n );\n if (icon)\n gsap.to(icon, { rotation: 180, duration: 0.4, ease: \"back.out(1.7)\" });\n\n // Update group-level UIs\n updateFaqGroupImage(wrapper, groupName);\n updateFaqGroupText(wrapper, groupName);\n updateFaqGroupButton(wrapper, groupName);\n updateFaqGroupVideo(wrapper, groupName); // \u2705 ensures autoplay on change\n}\n\nfunction closeAccordion(wrapper: HTMLElement, callback?: () => void): void {\n const toggle: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"toggle\"]'\n );\n const content: GSAPElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content\"]'\n );\n const contentInner: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"content-inner\"]'\n );\n const xLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"x-line\"]') || null;\n const yLine: HTMLElement | null =\n toggle?.querySelector('[fynd-faq-element=\"y-line\"]') || null;\n\n if (!toggle || !content || !contentInner || !xLine || !yLine) {\n console.warn(\"Required elements not found for closing accordion\");\n return;\n }\n\n if (content.gsapAnimation) content.gsapAnimation.kill();\n\n const height: number = content.offsetHeight;\n (content as HTMLElement).style.height = `${height}px`;\n\n const timeline = gsap.timeline({\n onComplete: (): void => callback && callback(),\n });\n\n timeline.to(xLine, { rotation: 0, duration: 0.4, ease: \"power2.inOut\" }, 0);\n timeline.to(yLine, { rotation: 0, duration: 0.4, ease: \"power2.inOut\" }, 0);\n timeline.to(\n contentInner,\n { opacity: 0, duration: 0.3, ease: \"power2.in\" },\n 0\n );\n timeline.to(\n content,\n { height: 0, duration: 0.4, ease: \"power3.inOut\" },\n \"-=0.25\"\n );\n\n content.gsapAnimation = timeline;\n toggle.setAttribute(\"data-state\", \"closed\");\n\n const icon: HTMLElement | null = toggle.querySelector(\n '[fynd-faq-element=\"chevron\"]'\n );\n if (icon)\n gsap.to(icon, { rotation: 0, duration: 0.4, ease: \"back.out(1.7)\" });\n}\n\n// Function to close all other accordions in the same group\nfunction closeOtherAccordions(groupContainer: HTMLElement): void {\n const openFAQs: NodeListOf<HTMLElement> = groupContainer.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"] [data-state=\"open\"]'\n );\n openFAQs.forEach((openToggle: HTMLElement): void => {\n const wrapper: HTMLElement | null = openToggle.closest(\n '[fynd-faq-element=\"wrapper\"]'\n );\n if (wrapper) closeAccordion(wrapper);\n });\n}\n\n// Function to update the group image\nfunction updateFaqGroupImage(\n wrapper: HTMLElement,\n groupName: string | null\n): void {\n if (!groupName) return;\n const groupImage: HTMLImageElement | null = document.querySelector(\n `[fynd-faq-image-target=\"${groupName}\"]`\n );\n if (!groupImage) return;\n\n const imageSource: HTMLImageElement | null = wrapper.querySelector(\n \"[fynd-faq-image-source]\"\n );\n if (!imageSource) return;\n\n const newSrc: string | null = imageSource.getAttribute(\"src\");\n const newSrcset: string | null = imageSource.getAttribute(\"srcset\");\n\n if (newSrc) groupImage.setAttribute(\"src\", newSrc);\n if (newSrcset) groupImage.setAttribute(\"srcset\", \"\");\n // removing srcset for now\n}\n\n// Function to update the group text\nfunction updateFaqGroupText(\n wrapper: HTMLElement,\n groupName: string | null\n): void {\n if (!groupName) return;\n const groupText: HTMLElement | null = document.querySelector(\n `[fynd-faq-text-target=\"${groupName}\"]`\n );\n if (!groupText) return;\n\n const textSource: HTMLElement | null = wrapper.querySelector(\n \"[fynd-faq-text-source]\"\n );\n if (!textSource) return;\n\n groupText.textContent = textSource.textContent;\n}\n\n// Function to update the group button\nfunction updateFaqGroupButton(\n wrapper: HTMLElement,\n groupName: string | null\n): void {\n if (!groupName) return;\n\n const buttonTextTarget: HTMLElement | null = document.querySelector(\n `[fynd-faq-button-text-target=\"${groupName}\"]`\n );\n const buttonLinkTarget: HTMLElement | null = document.querySelector(\n `[fynd-faq-button-link-target=\"${groupName}\"]`\n );\n\n const linkSource: HTMLAnchorElement | null = wrapper.querySelector(\n \"[fynd-faq-link-source]\"\n );\n if (!linkSource) return;\n\n if (buttonTextTarget) buttonTextTarget.textContent = linkSource.textContent;\n\n if (buttonLinkTarget) {\n for (let i = 0; i < linkSource.attributes.length; i++) {\n const attr = linkSource.attributes[i];\n buttonLinkTarget.setAttribute(attr.name, attr.value);\n }\n }\n}\n\n// \u2705 Always-loop + autoplay video updater (mobile: show video if set, else image)\nfunction updateFaqGroupVideo(\n wrapper: HTMLElement,\n groupName: string | null\n): void {\n if (!groupName) return;\n\n const groupVideo: HTMLVideoElement | null = document.querySelector(\n `[fynd-faq-video-target=\"${groupName}\"]`\n );\n if (!groupVideo) return;\n\n const groupVideoWrapper: HTMLElement | null =\n wrapper.querySelector(`[fynd-faq-video]`);\n const groupImageWrapper: HTMLElement | null =\n wrapper.querySelector(`[fynd-faq-image]`);\n\n const sourceVideo: HTMLVideoElement | null = wrapper.querySelector(\n \"[fynd-faq-video-source]\"\n );\n const mobile = window.innerWidth < 992;\n\n // Determine if a valid video is set on the *source* inside the wrapper\n const sourceEl: HTMLSourceElement | null =\n sourceVideo?.querySelector(\"source\") || null;\n const newSrc: string = (sourceEl?.getAttribute(\"src\") || \"\").trim();\n const newType: string = (\n sourceEl?.getAttribute(\"type\") || \"video/mp4\"\n ).trim();\n const hasVideo: boolean = !!sourceVideo && !!sourceEl && newSrc !== \"\";\n\n // \uD83D\uDD38 Mobile-only visibility: show video wrapper if video exists, else show image\n if (mobile) {\n if (groupVideoWrapper)\n groupVideoWrapper.style.display = hasVideo ? \"block\" : \"none\";\n if (groupImageWrapper)\n groupImageWrapper.style.display = hasVideo ? \"none\" : \"block\";\n }\n\n // If no video configured, hide the group target video and clean up\n if (!hasVideo) {\n groupVideo.style.display = \"none\";\n const targetSourceEl: HTMLSourceElement | null =\n groupVideo.querySelector(\"source\");\n if (targetSourceEl) {\n targetSourceEl.removeAttribute(\"src\");\n targetSourceEl.removeAttribute(\"type\");\n try {\n groupVideo.load();\n } catch {}\n }\n return;\n }\n\n // We have a valid video: ensure attributes + update the *group* video target\n let targetSourceEl: HTMLSourceElement | null =\n groupVideo.querySelector(\"source\");\n if (!targetSourceEl) {\n targetSourceEl = document.createElement(\"source\");\n groupVideo.appendChild(targetSourceEl);\n }\n\n targetSourceEl.setAttribute(\"src\", newSrc);\n targetSourceEl.setAttribute(\"type\", newType);\n\n groupVideo.setAttribute(\"loop\", \"\");\n groupVideo.setAttribute(\"autoplay\", \"\");\n groupVideo.setAttribute(\"muted\", \"\");\n groupVideo.setAttribute(\"playsinline\", \"\");\n\n // Mobile: also prep the inline source video for autoplay\n if (mobile && sourceVideo) {\n sourceVideo.setAttribute(\"loop\", \"\");\n sourceVideo.setAttribute(\"autoplay\", \"\");\n sourceVideo.setAttribute(\"muted\", \"\");\n sourceVideo.setAttribute(\"playsinline\", \"\");\n autoplayVideo(sourceVideo);\n }\n\n try {\n groupVideo.load();\n } catch {}\n autoplayVideo(groupVideo);\n groupVideo.style.display = \"block\";\n}\n\n// \uD83D\uDD38 Robust autoplay helper (handles Promise and race conditions)\nfunction autoplayVideo(video: HTMLVideoElement): void {\n // If not in DOM or hidden, defer to IntersectionObserver\n if (!video.isConnected || video.style.display === \"none\") return;\n\n // Some browsers need a tiny delay after .load()\n requestAnimationFrame(() => {\n const playPromise = video.play();\n if (\n playPromise &&\n typeof (playPromise as Promise<void>).catch === \"function\"\n ) {\n (playPromise as Promise<void>).catch(() => {\n // If autoplay fails (rare with muted+playsinline), we silently ignore.\n });\n }\n });\n}\n\n// \uD83D\uDD38 Observe visibility to autoplay on entering viewport (and pause when out)\nfunction initFaqVideoAutoplayObserver(): void {\n const videos: NodeListOf<HTMLVideoElement> = document.querySelectorAll(\n \"[fynd-faq-video-target]\"\n );\n if (!videos.length) return;\n\n const io = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const video = entry.target as HTMLVideoElement;\n // Only act if video has a valid source set\n const hasSrc = !!video.querySelector(\"source[src]\");\n if (!hasSrc || video.style.display === \"none\") return;\n\n if (entry.isIntersecting && entry.intersectionRatio >= 0.5) {\n // Ensure autoplay attributes are present (defensive)\n video.setAttribute(\"autoplay\", \"\");\n video.setAttribute(\"muted\", \"\");\n video.setAttribute(\"playsinline\", \"\");\n video.setAttribute(\"loop\", \"\");\n autoplayVideo(video);\n } else {\n // Pause when scrolled out to save resources\n try {\n video.pause();\n } catch (e) {\n /* no-op */\n }\n }\n });\n },\n { threshold: [0, 0.5, 1] }\n );\n\n videos.forEach((v) => io.observe(v));\n}\n\n// Function to ensure at least one FAQ is open in \"one-at-a-time\" mode\nfunction ensureOneFaqOpen(groupContainer: HTMLElement | null): void {\n if (!groupContainer) return;\n\n const faqType: string =\n groupContainer.getAttribute(\"fynd-faq-type\") || \"one-at-a-time\";\n if (faqType !== \"one-at-a-time\") return;\n\n const openFAQs: NodeListOf<HTMLElement> = groupContainer.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"] [data-state=\"open\"]'\n );\n\n if (openFAQs.length === 0) {\n const firstFaq: HTMLElement | null = groupContainer.querySelector(\n '[fynd-faq-element=\"wrapper\"]'\n );\n if (firstFaq) {\n const firstToggle: HTMLElement | null = firstFaq.querySelector(\n '[fynd-faq-element=\"toggle\"]'\n );\n if (firstToggle) {\n const groupName: string | null =\n groupContainer.getAttribute(\"fynd-faq-group\");\n openAccordion(firstFaq, groupName);\n }\n }\n }\n}\n\n// 1) include mobile sources in the global kickstart\nasync function playAllFaqVideos(): Promise<void> {\n const videos: NodeListOf<HTMLVideoElement> = document.querySelectorAll(\n \"video[fynd-faq-video-target], video.fynd-faq-video-target, video[data-fynd-faq-video-target], video[fynd-faq-video-source]\"\n );\n for (const v of videos) {\n const hasSrc = !!v.src || v.querySelector(\"source[src]\");\n if (!hasSrc) continue;\n v.setAttribute(\"muted\", \"\");\n v.setAttribute(\"playsinline\", \"\");\n v.setAttribute(\"autoplay\", \"\");\n v.setAttribute(\"loop\", \"\");\n v.preload = \"auto\";\n v.muted = true;\n try {\n await v.play();\n } catch {}\n }\n}\n\n// Function to scroll smoothly to the \"scroll-trigger\" element inside the wrapper\nfunction scrollToAccordion(wrapper: HTMLElement): void {\n if (!wrapper) return;\n\n const scrollTarget: HTMLElement | null = wrapper.querySelector(\n '[fynd-faq-element=\"scroll-trigger\"]'\n );\n\n if (!scrollTarget) {\n console.warn(\n 'No element with [fynd-faq-element=\"scroll-trigger\"] found inside the wrapper:',\n wrapper\n );\n return;\n }\n\n // Smooth scroll to the element\n scrollTarget.scrollIntoView({\n behavior: \"smooth\",\n // block: 'center',\n });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["targetSourceEl"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/cms-listing/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", "function isHTMLElement(element: Element | null): element is HTMLElement {\n return element instanceof HTMLElement;\n}\n\nconst clearButton = document.getElementById('clear-button');\nconst fsClearButton = document.getElementById('fs-clear');\n\nif (isHTMLElement(clearButton) && isHTMLElement(fsClearButton)) {\n clearButton.addEventListener('click', (event: MouseEvent): void => {\n fsClearButton.click();\n });\n}\n\nexport {};"],
|
|
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,cAAc,SAAiD;AACpE,WAAO,mBAAmB;AAAA,EAC9B;AAEA,MAAM,cAAc,SAAS,eAAe,cAAc;AAC1D,MAAM,gBAAgB,SAAS,eAAe,UAAU;AAExD,MAAI,cAAc,WAAW,KAAK,cAAc,aAAa,GAAG;AAC5D,gBAAY,iBAAiB,SAAS,CAAC,UAA4B;AAC/D,oBAAc,MAAM;AAAA,IACxB,CAAC;AAAA,EACL;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/filters/clear-search.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 input = document.querySelector('[fynd-show-clear]') as HTMLInputElement;\nconst clearButton = document.querySelector('[fynd-input-clear]') as HTMLElement;\n\n// Handle input change\nif (input) {\n input.addEventListener('input', (): void => {\n if (input.value.trim() !== '') {\n input.setAttribute('fynd-show-clear', 'true');\n } else {\n input.setAttribute('fynd-show-clear', 'false');\n }\n });\n}\n\n// Handle clear button click\nif (clearButton && input) {\n clearButton.addEventListener('click', (): void => {\n input.value = '';\n input.setAttribute('fynd-show-clear', 'false');\n input.dispatchEvent(new Event('input')); // Optional: Trigger change manually if others listen for it\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,MAAM,QAAQ,SAAS,cAAc,mBAAmB;AACxD,MAAM,cAAc,SAAS,cAAc,oBAAoB;AAG/D,MAAI,OAAO;AACT,UAAM,iBAAiB,SAAS,MAAY;AAC1C,UAAI,MAAM,MAAM,KAAK,MAAM,IAAI;AAC7B,cAAM,aAAa,mBAAmB,MAAM;AAAA,MAC9C,OAAO;AACL,cAAM,aAAa,mBAAmB,OAAO;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH;AAGA,MAAI,eAAe,OAAO;AACxB,gBAAY,iBAAiB,SAAS,MAAY;AAChD,YAAM,QAAQ;AACd,YAAM,aAAa,mBAAmB,OAAO;AAC7C,YAAM,cAAc,IAAI,MAAM,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/filters/konnect.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", "// ---- global helpers ----\nfunction getQueryParam(name: string): string | null {\n const val = new URLSearchParams(window.location.search).get(name);\n return val ? val.trim() : null;\n}\n\nfunction getTagEqualFromURL(): string | null {\n return getQueryParam(\"tag_equal\");\n}\n\n// expose globally if you want to inspect it in the console\n// @ts-ignore\n(window as any).getTagEqualFromURL = getTagEqualFromURL;\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n console.log(\"%csrc/filters/konnect.ts:2 working\", \"color: #007acc;\");\n const elements = document.querySelectorAll<HTMLElement>(\n \"[konnect-filter-element]\"\n );\n if (elements.length === 0) return;\n setTimeout(updateMobileSelectOnLoad, 200);\n\n // watch tag_equal every 100 ms\n let lastTagEqual = getTagEqualFromURL();\n setInterval(() => {\n const current = getTagEqualFromURL();\n if (current !== lastTagEqual) {\n console.log(\"tag_equal changed:\", current);\n lastTagEqual = current;\n updateMobileSelect(); // re-sync the select whenever the URL changes\n }\n }, 100);\n\n // log the URL param whenever user changes select\n const select = document.getElementById(\n \"konnect-filter\"\n ) as HTMLSelectElement | null;\n if (select) {\n select.addEventListener(\"change\", () => {\n console.log(\"Select changed \u2192 URL tag_equal is:\", getTagEqualFromURL());\n });\n }\n\n elements.forEach((el) => {\n el.addEventListener(\"click\", () => {\n console.log(\"konnect-filter-element clicked:\", el);\n const type = el.getAttribute(\"konnect-filter-element\");\n if (type === \"primary\") {\n setTimeout(updateMobileSelect, 100);\n const items = document.querySelectorAll<HTMLElement>(\n '[konnect-filter-element=\"secondary\"]'\n );\n items.forEach((el, index) => {\n if (index == 0) {\n el.click();\n el.setAttribute(\"konnect-filter-active\", \"true\");\n } else {\n el.setAttribute(\"konnect-filter-active\", \"false\");\n }\n });\n } else {\n setTimeout(updateSecondaryFilterTabs, 100);\n }\n });\n });\n});\n\nfunction updateSecondaryFilterTabs(): void {\n const raw = new URLSearchParams(window.location.search).get(\"nest-tag_equal\");\n const items = document.querySelectorAll<HTMLElement>(\n '[konnect-filter-element=\"secondary\"]'\n );\n if (!raw) {\n items.forEach((el, index) => {\n el.setAttribute(\"konnect-filter-active\", index == 0 ? \"true\" : \"false\");\n });\n return;\n }\n const target = raw.trim().toLowerCase();\n if (items.length === 0) return;\n\n items.forEach((el) => {\n const input = el.querySelector<HTMLInputElement>(\"[fs-list-value]\");\n if (!input) return;\n const valFromAttr = input\n .getAttribute(\"fs-list-value\")\n ?.trim()\n .toLowerCase();\n if (valFromAttr === target) {\n el.setAttribute(\"konnect-filter-active\", \"true\");\n items[0].setAttribute(\"konnect-filter-active\", \"false\");\n } else {\n el.setAttribute(\"konnect-filter-active\", \"false\");\n }\n });\n}\n\nfunction updateMobileSelect(): void {\n const raw = getTagEqualFromURL();\n const select = document.getElementById(\n \"konnect-filter\"\n ) as HTMLSelectElement | null;\n if (!select) {\n console.warn(\"Select element with id 'konnect-filter' not found.\");\n return;\n }\n\n if (raw) {\n const matchedOption = Array.from(select.options).find(\n (option) => option.value === raw\n );\n if (matchedOption) {\n select.value = raw;\n console.log(`Selected option: ${raw}`);\n toggleSecondaryFilter(raw);\n } else {\n console.warn(`No matching option found for value: ${raw}`);\n }\n } else {\n console.log(\"No 'tag_equal' parameter in URL.\");\n }\n}\n\nfunction updateMobileSelectOnLoad(): void {\n const raw = getTagEqualFromURL();\n const select = document.getElementById(\n \"konnect-filter\"\n ) as HTMLSelectElement | null;\n if (!select) {\n console.warn(\"Select element with id 'konnect-filter' not found.\");\n return;\n }\n\n if (raw) {\n const matchedOption = Array.from(select.options).find(\n (option) => option.value === raw\n );\n if (matchedOption) {\n select.value = raw;\n console.log(`Selected from URL param: ${raw}`);\n } else {\n console.warn(\n `No matching option found for value: ${raw}. Defaulting to Marketplaces.`\n );\n select.value = \"Marketplaces\";\n }\n } else {\n select.value = \"Marketplaces\";\n console.log(\"No tag_equal param found. Defaulted to Marketplaces.\");\n }\n}\n\nconst RULES = [\n { primary: \"Marketplaces\", show: [\"*\"] },\n { primary: \"Storefront\", show: [\"*\"] },\n { primary: \"OMS/WMS\", show: [\"All\"] },\n { primary: \"ERP/POS\", show: [\"All\"] },\n];\n\nfunction toggleSecondaryFilter(raw: string | null): void {\n const primary = (raw ?? \"\").trim().toLowerCase();\n\n const rule = RULES.find((r) => r.primary.toLowerCase() === primary);\n const allowed = rule ? rule.show : [];\n const showAll = allowed.includes(\"*\");\n const allowSet = new Set(allowed.map((v) => v.toLowerCase()));\n\n const hiddenFilters =\n document.querySelectorAll<HTMLElement>(\"[hidden-filter]\");\n if (!hiddenFilters) return;\n\n hiddenFilters.forEach((el) => {\n const tag = (el.getAttribute(\"hidden-filter\") ?? \"\").trim().toLowerCase();\n const visible = showAll || allowSet.has(tag);\n el.style.display = visible ? \"flex\" : \"none\";\n });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["el"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/filters/show-count.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 logUrlParams(): number {\n const urlParams = new URLSearchParams(window.location.search);\n \n // Extract geography as an array\n const geography =\n urlParams.get(\"geography\")?.split(\",\").filter(Boolean) || [];\n \n // Extract tags as an array\n const tags = urlParams.get(\"tag\")?.split(\",\").filter(Boolean) || [];\n \n // Extract tags as an array\n const products = urlParams.get(\"product\")?.split(\",\").filter(Boolean) || [];\n \n // Extract tags as an array\n const solutions = urlParams.get(\"solution\")?.split(\",\").filter(Boolean) || [];\n \n // Extract tags as an array\n const category = urlParams.get(\"category\")?.split(\",\").filter(Boolean) || [];\n \n // Check for verified toggle (should be \"true\" in URL)\n const verified = urlParams.get(\"verified\") === \"true\";\n \n // Calculate total count\n let totalCount =\n geography.length +\n tags.length +\n products.length +\n solutions.length +\n category.length +\n (verified ? 1 : 0);\n \n // Create JSON object\n const filters = {\n geography,\n tags,\n products,\n solutions,\n verified,\n category,\n };\n \n // Log JSON object to console\n console.log(JSON.stringify(filters, null, 2));\n \n // Log counts separately\n // console.log(`Geography Count: ${geography.length}`);\n // console.log(`Tags Count: ${tags.length}`);\n // console.log(`Verified: ${verified}`);\n // console.log(`Total Count: ${totalCount}`);\n \n return totalCount;\n }\n \n function updateCountText(totalCount: number): void {\n const totalCountText = document.querySelector(\"[fynd-filters-count]\") as HTMLElement;\n const clearAllButton = document.querySelector(\"[fynd-clear-all]\") as HTMLElement;\n if (!totalCountText) return;\n \n if (totalCount > 0) {\n totalCountText.innerHTML = totalCount.toString();\n totalCountText.style.display = \"flex\";\n if (clearAllButton) {\n clearAllButton.style.display = \"block\";\n }\n } else {\n totalCountText.innerHTML = \"0\";\n totalCountText.style.display = \"none\";\n if (clearAllButton) {\n clearAllButton.style.display = \"none\";\n }\n }\n }\n \n document.addEventListener(\"DOMContentLoaded\", (): void => {\n setTimeout((): void => {\n let totalCount = logUrlParams();\n updateCountText(totalCount);\n }, 200);\n \n document.querySelectorAll(\"[fynd-filter-box]\").forEach((div): void => {\n div.addEventListener(\"click\", (): void => {\n setTimeout((): void => {\n let totalCount = logUrlParams();\n updateCountText(totalCount);\n }, 200);\n });\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,eAAuB;AAC5B,UAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAG5D,UAAM,YACJ,UAAU,IAAI,WAAW,GAAG,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAG7D,UAAM,OAAO,UAAU,IAAI,KAAK,GAAG,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAGlE,UAAM,WAAW,UAAU,IAAI,SAAS,GAAG,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAG1E,UAAM,YAAY,UAAU,IAAI,UAAU,GAAG,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAG5E,UAAM,WAAW,UAAU,IAAI,UAAU,GAAG,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAG3E,UAAM,WAAW,UAAU,IAAI,UAAU,MAAM;AAG/C,QAAI,aACF,UAAU,SACV,KAAK,SACL,SAAS,SACT,UAAU,SACV,SAAS,UACR,WAAW,IAAI;AAGlB,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,YAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAQ5C,WAAO;AAAA,EACT;AAEA,WAAS,gBAAgB,YAA0B;AACjD,UAAM,iBAAiB,SAAS,cAAc,sBAAsB;AACpE,UAAM,iBAAiB,SAAS,cAAc,kBAAkB;AAChE,QAAI,CAAC,eAAgB;AAErB,QAAI,aAAa,GAAG;AAClB,qBAAe,YAAY,WAAW,SAAS;AAC/C,qBAAe,MAAM,UAAU;AAC/B,UAAI,gBAAgB;AAClB,uBAAe,MAAM,UAAU;AAAA,MACjC;AAAA,IACF,OAAO;AACL,qBAAe,YAAY;AAC3B,qBAAe,MAAM,UAAU;AAC/B,UAAI,gBAAgB;AAClB,uBAAe,MAAM,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,WAAS,iBAAiB,oBAAoB,MAAY;AACxD,eAAW,MAAY;AACrB,UAAI,aAAa,aAAa;AAC9B,sBAAgB,UAAU;AAAA,IAC5B,GAAG,GAAG;AAEN,aAAS,iBAAiB,mBAAmB,EAAE,QAAQ,CAAC,QAAc;AACpE,UAAI,iBAAiB,SAAS,MAAY;AACxC,mBAAW,MAAY;AACrB,cAAI,aAAa,aAAa;AAC9B,0BAAgB,UAAU;AAAA,QAC5B,GAAG,GAAG;AAAA,MACR,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/form/cs-gated-redirection.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(): void {\n const currentSlug = window.location.pathname;\n const form: HTMLFormElement | null = document.querySelector('[fynd-webflow-form=\"cs-gated-redirection\"]');\n\n const redirectionCheckboxes = form?.querySelectorAll('input[type=radio]');\n\n redirectionCheckboxes?.forEach((checkbox) => {\n const redirectionSlug = '/' + checkbox.getAttribute('data-redirection-slug');\n if (redirectionSlug === currentSlug) {\n (checkbox as HTMLInputElement).checked = true;\n }\n });\n if (form) {\n form.addEventListener('submit', function(e: Event): void {\n setTimeout(function(): void {\n const selectedRadio: HTMLInputElement | null = form.querySelector(\"input[type=radio]:checked\");\n const selectedRedirectionSlug = '/' + selectedRadio?.getAttribute('data-redirection-slug');\n const fallbackButtonLink = document.querySelector('[data-redirection-fallback-link]');\n\n if (fallbackButtonLink) {\n fallbackButtonLink.setAttribute('href', selectedRedirectionSlug);\n }\n \n if (selectedRedirectionSlug) {\n window.location.href = selectedRedirectionSlug;\n }\n }, 500); \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,WAAiB;AAC3D,UAAM,cAAc,OAAO,SAAS;AACpC,UAAM,OAA+B,SAAS,cAAc,4CAA4C;AAExG,UAAM,wBAAwB,MAAM,iBAAiB,mBAAmB;AAExE,2BAAuB,QAAQ,CAAC,aAAa;AACzC,YAAM,kBAAkB,MAAM,SAAS,aAAa,uBAAuB;AAC3E,UAAI,oBAAoB,aAAa;AACjC,QAAC,SAA8B,UAAU;AAAA,MAC7C;AAAA,IACJ,CAAC;AACD,QAAI,MAAM;AACR,WAAK,iBAAiB,UAAU,SAAS,GAAgB;AACvD,mBAAW,WAAiB;AAC1B,gBAAM,gBAAyC,KAAK,cAAc,2BAA2B;AAC7F,gBAAM,0BAA0B,MAAM,eAAe,aAAa,uBAAuB;AACzF,gBAAM,qBAAsB,SAAS,cAAc,kCAAkC;AAErF,cAAI,oBAAoB;AACtB,+BAAmB,aAAa,QAAQ,uBAAuB;AAAA,UACjE;AAEA,cAAI,yBAAyB;AAC3B,mBAAO,SAAS,OAAO;AAAA,UACzB;AAAA,QACF,GAAG,GAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,EACF,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/form/download-file.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 checkDownloadURL(url: string): string {\n const driveFileRegex = /https:\\/\\/drive\\.google\\.com\\/file\\/d\\/([a-zA-Z0-9_-]+)\\//;\n const directDownloadRegex = /https:\\/\\/drive\\.google\\.com\\/uc\\?export=download&id=([a-zA-Z0-9_-]+)/;\n\n // If it's already a direct download link, return as is\n if (directDownloadRegex.test(url)) {\n return url;\n }\n // If it's a normal Google Drive file link, convert it\n const match = url.match(driveFileRegex);\n if (match && match[1]) {\n const fileId = match[1];\n return `https://drive.google.com/uc?export=download&id=${fileId}`;\n }\n return url;\n}\n\nfunction updateDownloadLinks(url: string) {\n const container = document.getElementById(\"asset-success-richtext\");\n if (!container) return;\n\n // Find all <a> tags inside container\n const links = container.getElementsByTagName(\"a\");\n\n for (const link of links) {\n if (link.textContent && link.textContent.toLowerCase().includes(\"download\")) {\n link.href = url;\n }\n }\n}\n\nfunction isSuccessVisible(successEl: HTMLElement | null): boolean {\n if (!successEl) return false;\n\n // Get the computed style (includes CSS from classes, not just inline)\n const computedStyle = window.getComputedStyle(successEl);\n const display = computedStyle.display;\n const visibility = computedStyle.visibility;\n const opacity = computedStyle.opacity;\n\n // Check if the element or its styles hide it\n const isHidden =\n display === \"none\" ||\n visibility === \"hidden\" ||\n opacity === \"0\" ||\n successEl.classList.contains(\"hidden\") ||\n successEl.classList.contains(\"d-none\");\n\n return !isHidden;\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n const submitButton = document.getElementById(\"asset-form-submit\") as HTMLInputElement;\n\n if (!submitButton) {\n console.error(\"Submit button not found\");\n return;\n }\n\n submitButton.addEventListener(\"click\", function (): void {\n // Wait 1000ms then check for success div\n setTimeout((): void => {\n const successEl = document.getElementById(\"asset-form-success\") as HTMLElement | null;\n if (isSuccessVisible(successEl)) {\n const downloadLink = document.getElementById(\"asset-download\") as HTMLAnchorElement | null;\n const checkedDownloadURL = checkDownloadURL(downloadLink?.href || \"\");\n downloadLink?.setAttribute(\"href\", checkedDownloadURL);\n updateDownloadLinks(checkedDownloadURL);\n if (downloadLink) {\n downloadLink.click();\n }\n console.log(\"Download link updated:\", checkedDownloadURL);\n }\n else {\n console.warn(\"Please fill the form correctly before downloading the asset.\");\n }\n }, 1500);\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,KAAqB;AAC7C,UAAM,iBAAiB;AACvB,UAAM,sBAAsB;AAG5B,QAAI,oBAAoB,KAAK,GAAG,GAAG;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,IAAI,MAAM,cAAc;AACtC,QAAI,SAAS,MAAM,CAAC,GAAG;AACrB,YAAM,SAAS,MAAM,CAAC;AACtB,aAAO,kDAAkD,MAAM;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AAEA,WAAS,oBAAoB,KAAa;AACxC,UAAM,YAAY,SAAS,eAAe,wBAAwB;AAClE,QAAI,CAAC,UAAW;AAGhB,UAAM,QAAQ,UAAU,qBAAqB,GAAG;AAEhD,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,eAAe,KAAK,YAAY,YAAY,EAAE,SAAS,UAAU,GAAG;AAC3E,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,WAAS,iBAAiB,WAAwC;AAChE,QAAI,CAAC,UAAW,QAAO;AAGvB,UAAM,gBAAgB,OAAO,iBAAiB,SAAS;AACvD,UAAM,UAAU,cAAc;AAC9B,UAAM,aAAa,cAAc;AACjC,UAAM,UAAU,cAAc;AAG9B,UAAM,WACJ,YAAY,UACZ,eAAe,YACf,YAAY,OACZ,UAAU,UAAU,SAAS,QAAQ,KACrC,UAAU,UAAU,SAAS,QAAQ;AAEvC,WAAO,CAAC;AAAA,EACV;AAGA,WAAS,iBAAiB,oBAAoB,WAAkB;AAC9D,UAAM,eAAe,SAAS,eAAe,mBAAmB;AAEhE,QAAI,CAAC,cAAc;AACjB,cAAQ,MAAM,yBAAyB;AACvC;AAAA,IACF;AAEA,iBAAa,iBAAiB,SAAS,WAAkB;AAEvD,iBAAW,MAAY;AACrB,cAAM,YAAY,SAAS,eAAe,oBAAoB;AAC9D,YAAI,iBAAiB,SAAS,GAAG;AAC/B,gBAAM,eAAe,SAAS,eAAe,gBAAgB;AAC7D,gBAAM,qBAAqB,iBAAiB,cAAc,QAAQ,EAAE;AACpE,wBAAc,aAAa,QAAQ,kBAAkB;AACrD,8BAAoB,kBAAkB;AACtC,cAAI,cAAc;AAChB,yBAAa,MAAM;AAAA,UACrB;AACA,kBAAQ,IAAI,0BAA0B,kBAAkB;AAAA,QAC1D,OACK;AACH,kBAAQ,KAAK,8DAA8D;AAAA,QAC7E;AAAA,MACF,GAAG,IAAI;AAAA,IACT,CAAC;AAAA,EACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/form/handler.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(()=>{window.validationPassed=!1;function u(n="#phone-number",e="#country-code"){let t=typeof n=="string"?document.querySelector(n):n,o=document.querySelector(e);if(!t||!o)return"91";try{if(t.iti&&typeof t.iti.getSelectedCountryData=="function"){let i=t.iti.getSelectedCountryData();return o.value="+"+i.dialCode,i.dialCode}else if(window.intlTelInputGlobals&&typeof window.intlTelInputGlobals.getInstance=="function"){let i=window.intlTelInputGlobals.getInstance(t);if(i){let r=i.getSelectedCountryData();return o.value="+"+r.dialCode,r.dialCode}}return o.value="+91","91"}catch(i){return console.error("Error retrieving country code:",i),o.value="+91","91"}}function c(){let n=document.getElementById("product"),e=document.getElementById("page-url");e&&(e.value=window.location.href),n&&(n.value=document.title)}function m(){if(!window.redirectionOptions||!window.redirectionOptions.newTab)return console.error("window.redirectionOptions not found or missing newTab property"),null;let n=window.redirectionOptions.newTab,e=document.getElementById("first-name"),t=document.getElementById("last-name"),o=document.getElementById("work-email");if(!e||!e.value.trim()||!t||!t.value.trim()||!o||!o.value.trim())return console.error("Required fields missing or empty"),null;let i=`${e.value} ${t.value}`.trim(),r=o.value;return`${n}?email=${encodeURIComponent(r)}&name=${encodeURIComponent(i)}`}function w(){if(!window.redirectionOptions||!window.redirectionOptions.newTab)return console.error("window.redirectionOptions not found or missing newTab property"),null;let n=window.redirectionOptions.newTab,e=document.getElementById("first-name"),t=document.getElementById("last-name"),o=document.getElementById("work-email"),i=document.getElementById("message");if(!e||!e.value.trim()||!t||!t.value.trim()||!o||!o.value.trim())return console.error("Required fields missing or empty"),null;try{let r=new URL(n);return["email","firstname","lastname","message","Email","FirstName","LastName","Message"].forEach(d=>r.searchParams.delete(d)),r.searchParams.set("email",o.value.trim()),r.searchParams.set("firstname",e.value.trim()),r.searchParams.set("lastname",t.value.trim()),i&&i.value.trim()&&r.searchParams.set("message",i.value.trim()),r.toString()}catch(r){return console.error("Invalid URL:",r),null}}function a(){try{typeof l=="function"?l():window.location.href="/thank-you"}catch(n){console.error("Error during form submission:",n)}}function l(){if(!window.redirectionOptions||!window.redirectionOptions.type){console.error("window.redirectionOptions not found or missing type property");return}switch(window.redirectionOptions.type){case"calendly":p();break;case"hubspot":f();break;case"webflow":v();break;default:console.error("Invalid redirection type:",window.redirectionOptions.type);return}}function p(){let n=m(),e=window.redirectionOptions?.currentTab;n&&window.open(n,"_blank"),e&&(window.location.href=e)}function f(){let n=w(),e=window.redirectionOptions?.currentTab;n&&window.open(n,"_blank"),e&&(window.location.href=e)}function v(){let n=window.redirectionOptions?.newTab,e=window.redirectionOptions?.currentTab;n&&window.open(n,"_blank"),e&&(window.location.href=e)}function y(){document.querySelectorAll("select").forEach(e=>{let t=e.querySelector("option:first-child");t&&(t.setAttribute("value",""),t.setAttribute("disabled","disabled"),t.setAttribute("selected","selected"),e.selectedIndex=0,e.classList.add("placeholder-active"),e.value===""&&(e.style.color="#999999"),e.addEventListener("change",()=>{e.value?(e.style.color="",e.classList.remove("placeholder-active")):(e.style.color="#999999",e.classList.add("placeholder-active"))}))})}function b(){let n=document.querySelector("[data-form-handler]"),e=document.querySelector("#phone-number");if(!n||!e){console.error("Form or phone field not found");return}e.addEventListener("invalid",t=>{if(window.validatePhone){let o=window.validatePhone("phone-number",e.value);o.isValid||e.setCustomValidity(o.message||"Please enter a valid phone number")}}),e.addEventListener("input",()=>{e.setCustomValidity("")}),e.addEventListener("blur",()=>{if(window.validatePhone){let t=window.validatePhone("phone-number",e.value);!t.isValid&&e.value.trim()!==""?e.setCustomValidity(t.message||"Please enter a valid phone number"):e.setCustomValidity("")}}),n.addEventListener("submit",t=>{let o;if(typeof window.validatePhoneCustom=="function")o=window.validatePhoneCustom("phone-number",e.value);else if(typeof window.validatePhone=="function")o=window.validatePhone("phone-number",e.value);else return console.error("No phone validation function available"),t.preventDefault(),!1;return o.isValid?(e.setCustomValidity(""),window.validationPassed=!0,window._formSubmissionTime=Date.now(),setTimeout(()=>{console.log("Redirecting...."),a()},3e3),!0):(e.setCustomValidity(o.message||"Please enter a valid phone number"),t.preventDefault(),e.focus(),!1)},!0),(window.jQuery||window.$)&&(window.jQuery||window.$)(document).on("webflow-form-success",o=>{o.target===n&&(window.posthog&&window.getTrackingPropertiesWithForm&&window.posthog.capture("form_success",window.getTrackingPropertiesWithForm(window.interactedForm||"unknown_form")),a())})}document.addEventListener("DOMContentLoaded",()=>{let n=document.querySelector("#phone-number");n&&n.addEventListener("blur",()=>{if(typeof window.validatePhone=="function"){let e=window.validatePhone("phone-number",n.value);!e.isValid&&n.value.trim()!==""?n.setCustomValidity(e.message||"Please enter a valid phone number"):n.setCustomValidity("")}}),y(),u(),c(),b()});})();
|
package/dist/form/handler.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/form/handler.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 * Form Validation and Submission Script for Webflow\n * Handles phone validation, form submission prevention, and redirection logic\n * conververted version of https://cdn.jsdelivr.net/gh/Fynd-Design-Engineering/fynd-one@4.0.1/form/handler.min.js\n */\n\n// Type definitions\ninterface CountryData {\n dialCode: string;\n iso2: string;\n name: string;\n }\n \n interface IntlTelInputInstance {\n getSelectedCountryData(): CountryData;\n }\n \n interface PhoneInputElement extends HTMLInputElement {\n iti?: IntlTelInputInstance;\n }\n \n interface ValidationResult {\n isValid: boolean;\n message?: string;\n }\n \n interface RedirectionOptions {\n type: 'calendly' | 'hubspot' | 'webflow';\n newTab?: string;\n currentTab?: string;\n }\n \n // Extending Window interface for global variables\n declare global {\n interface Window {\n validationPassed?: boolean;\n _formSubmissionTime?: number;\n redirectionOptions?: RedirectionOptions;\n intlTelInputGlobals?: {\n getInstance(element: HTMLElement): IntlTelInputInstance | null;\n };\n validatePhone?: (selector: string, value: string) => ValidationResult;\n validatePhoneCustom?: (selector: string, value: string) => ValidationResult;\n jQuery?: any;\n $?: any;\n }\n }\n \n window.validationPassed = false; // Global flag to track validation status\n \n /**\n * Updates a hidden input with the country code from an initialized intl-tel-input element\n *\n * @param phoneInputSelector - Phone input element or its selector\n * @param countryCodeInputId - ID of the hidden input to update with country code\n */\n function updateCountryCode(\n phoneInputSelector: string | HTMLElement = \"#phone-number\",\n countryCodeInputId: string = \"#country-code\"\n ): string {\n const phoneInput: PhoneInputElement | null = \n typeof phoneInputSelector === \"string\"\n ? document.querySelector<PhoneInputElement>(phoneInputSelector)\n : phoneInputSelector as PhoneInputElement;\n \n const countryCodeInput = document.querySelector<HTMLInputElement>(countryCodeInputId);\n \n if (!phoneInput) {\n // console.error(\"Phone input not found\");\n return \"91\";\n }\n \n if (!countryCodeInput) {\n // console.error(\"Country code input not found\");\n return \"91\";\n }\n \n try {\n // Try to get country data directly - this will fail gracefully if not possible\n if (\n phoneInput.iti &&\n typeof phoneInput.iti.getSelectedCountryData === \"function\"\n ) {\n const countryData = phoneInput.iti.getSelectedCountryData();\n countryCodeInput.value = \"+\" + countryData.dialCode;\n return countryData.dialCode;\n } else if (\n window.intlTelInputGlobals &&\n typeof window.intlTelInputGlobals.getInstance === \"function\"\n ) {\n // Try using the global instance\n const iti = window.intlTelInputGlobals.getInstance(phoneInput);\n if (iti) {\n const countryData = iti.getSelectedCountryData();\n countryCodeInput.value = \"+\" + countryData.dialCode;\n return countryData.dialCode;\n }\n }\n \n // Default to India's country code (+91)\n countryCodeInput.value = \"+91\";\n return \"91\";\n } catch (error) {\n console.error(\"Error retrieving country code:\", error);\n // Default to India in case of error\n countryCodeInput.value = \"+91\";\n return \"91\";\n }\n }\n \n /**\n * Updates hidden inputs with page data like URL and page title\n */\n function updatePageData(): void {\n const productInput = document.getElementById(\"product\") as HTMLInputElement | null;\n const pageUrlInput = document.getElementById(\"page-url\") as HTMLInputElement | null;\n \n if (pageUrlInput) {\n pageUrlInput.value = window.location.href;\n }\n \n if (productInput) {\n productInput.value = document.title;\n }\n }\n \n /**\n * Generates a Calendly URL with user's information\n * @returns The Calendly URL or null if required fields are missing\n */\n function generateCalendlyURL(): string | null {\n if (!window.redirectionOptions || !window.redirectionOptions.newTab) {\n console.error(\n \"window.redirectionOptions not found or missing newTab property\"\n );\n return null;\n }\n \n const baseURL = window.redirectionOptions.newTab;\n const nameField = document.getElementById(\"first-name\") as HTMLInputElement | null;\n const lastNameField = document.getElementById(\"last-name\") as HTMLInputElement | null;\n const emailField = document.getElementById(\"work-email\") as HTMLInputElement | null;\n \n if (\n !nameField ||\n !nameField.value.trim() ||\n !lastNameField ||\n !lastNameField.value.trim() ||\n !emailField ||\n !emailField.value.trim()\n ) {\n console.error(\"Required fields missing or empty\");\n return null;\n }\n \n const fullName = `${nameField.value} ${lastNameField.value}`.trim();\n const email = emailField.value;\n const updatedURL = `${baseURL}?email=${encodeURIComponent(\n email\n )}&name=${encodeURIComponent(fullName)}`;\n return updatedURL;\n }\n \n /**\n * Generates a Hubspot URL with user's information\n * @returns The Hubspot URL or null if required fields are missing\n */\n function generateHubspotURL(): string | null {\n if (!window.redirectionOptions || !window.redirectionOptions.newTab) {\n console.error(\n \"window.redirectionOptions not found or missing newTab property\"\n );\n return null;\n }\n \n const baseURL = window.redirectionOptions.newTab;\n const nameField = document.getElementById(\"first-name\") as HTMLInputElement | null;\n const lastNameField = document.getElementById(\"last-name\") as HTMLInputElement | null;\n const emailField = document.getElementById(\"work-email\") as HTMLInputElement | null;\n const messageField = document.getElementById(\"message\") as HTMLTextAreaElement | null; // Optional field\n \n // Check only REQUIRED fields\n if (\n !nameField ||\n !nameField.value.trim() ||\n !lastNameField ||\n !lastNameField.value.trim() ||\n !emailField ||\n !emailField.value.trim()\n ) {\n console.error(\"Required fields missing or empty\");\n return null;\n }\n \n try {\n const url = new URL(baseURL);\n \n // Remove any existing params to avoid conflicts\n const paramsToRemove = [\n 'email', 'firstname', 'lastname', 'message',\n 'Email', 'FirstName', 'LastName', 'Message'\n ];\n \n paramsToRemove.forEach(param => url.searchParams.delete(param));\n \n // Add required parameters\n url.searchParams.set(\"email\", emailField.value.trim());\n url.searchParams.set(\"firstname\", nameField.value.trim());\n url.searchParams.set(\"lastname\", lastNameField.value.trim());\n \n // Add company parameter ONLY if field exists and has value\n if (messageField && messageField.value.trim()) {\n url.searchParams.set(\"message\", messageField.value.trim());\n }\n \n return url.toString();\n } catch (error) {\n console.error(\"Invalid URL:\", error);\n return null;\n }\n }\n \n\n \n /**\n * Handles the form submission process and redirection\n */\n function handleFormSubmission(): void {\n try {\n if (typeof handleRedirection === \"function\") {\n handleRedirection();\n } else {\n window.location.href = \"/thank-you\";\n }\n } catch (error) {\n console.error(\"Error during form submission:\", error);\n }\n }\n \n /**\n * Determines which type of redirection to perform\n */\n function handleRedirection(): void {\n if (!window.redirectionOptions || !window.redirectionOptions.type) {\n console.error(\n \"window.redirectionOptions not found or missing type property\"\n );\n return;\n }\n \n switch (window.redirectionOptions.type) {\n case \"calendly\":\n handleCalendlyRedirection();\n break;\n case \"hubspot\":\n handleHubspotRedirection();\n break;\n case \"webflow\":\n handleWebflowRedirection();\n break;\n default:\n console.error(\n \"Invalid redirection type:\",\n window.redirectionOptions.type\n );\n return;\n }\n }\n \n /**\n * Handles Calendly-specific redirection\n */\n function handleCalendlyRedirection(): void {\n const newTabUrl = generateCalendlyURL();\n const currentTabUrl = window.redirectionOptions?.currentTab;\n \n if (newTabUrl) {\n window.open(newTabUrl, \"_blank\");\n }\n \n if (currentTabUrl) {\n window.location.href = currentTabUrl;\n }\n }\n \n /**\n * Handles HubSpot-specific redirection\n */\n function handleHubspotRedirection(): void {\n const newTabUrl = generateHubspotURL();\n const currentTabUrl = window.redirectionOptions?.currentTab;\n \n if (newTabUrl) {\n window.open(newTabUrl, \"_blank\");\n }\n \n if (currentTabUrl) {\n window.location.href = currentTabUrl;\n }\n }\n \n /**\n * Handles Webflow-specific redirection\n */\n function handleWebflowRedirection(): void {\n const newTabUrl = window.redirectionOptions?.newTab;\n const currentTabUrl = window.redirectionOptions?.currentTab;\n \n if (newTabUrl) {\n window.open(newTabUrl, \"_blank\");\n }\n \n if (currentTabUrl) {\n window.location.href = currentTabUrl;\n }\n }\n \n /**\n * Converts the first option in select fields to actual placeholders with styling\n */\n function setupSelectPlaceholders(): void {\n // Find all select elements\n const selectFields = document.querySelectorAll<HTMLSelectElement>(\"select\");\n \n selectFields.forEach((select: HTMLSelectElement) => {\n // Get the first option\n const firstOption = select.querySelector<HTMLOptionElement>(\"option:first-child\");\n \n if (firstOption) {\n // Make it a true placeholder by adding these attributes\n firstOption.setAttribute(\"value\", \"\");\n firstOption.setAttribute(\"disabled\", \"disabled\");\n firstOption.setAttribute(\"selected\", \"selected\");\n \n // Set the select's initial selectedIndex to 0 (the placeholder)\n select.selectedIndex = 0;\n \n // Add a class to the select element to style it when showing placeholder\n select.classList.add(\"placeholder-active\");\n \n // Style the select element when showing the placeholder\n if (select.value === \"\") {\n select.style.color = \"#999999\"; // Placeholder color (gray)\n }\n \n // Change color when user selects a real option\n select.addEventListener(\"change\", () => {\n if (select.value) {\n select.style.color = \"\"; // Reset to default text color\n select.classList.remove(\"placeholder-active\");\n } else {\n select.style.color = \"#999999\"; // Back to placeholder color\n select.classList.add(\"placeholder-active\");\n }\n });\n }\n });\n \n // console.log(\"Select placeholders initialized\");\n }\n \n /**\n * Override Webflow's form submission functionality\n */\n function overrideWebflowFormSubmission(): void {\n const form = document.querySelector<HTMLFormElement>(\"[data-form-handler]\");\n const phoneField = document.querySelector<HTMLInputElement>(\"#phone-number\");\n \n if (!form || !phoneField) {\n console.error(\"Form or phone field not found\");\n return;\n }\n \n // Add validation using setCustomValidity\n phoneField.addEventListener(\"invalid\", (event: Event) => {\n if (window.validatePhone) {\n const validation = window.validatePhone(\"phone-number\", phoneField.value);\n if (!validation.isValid) {\n phoneField.setCustomValidity(\n validation.message || \"Please enter a valid phone number\"\n );\n }\n }\n });\n \n phoneField.addEventListener(\"input\", () => {\n phoneField.setCustomValidity(\"\");\n });\n \n phoneField.addEventListener(\"blur\", () => {\n if (window.validatePhone) {\n const validation = window.validatePhone(\"phone-number\", phoneField.value);\n if (!validation.isValid && phoneField.value.trim() !== \"\") {\n phoneField.setCustomValidity(\n validation.message || \"Please enter a valid phone number\"\n );\n } else {\n phoneField.setCustomValidity(\"\");\n }\n }\n });\n \n // Handle form submission with redirection\n form.addEventListener(\n \"submit\",\n (event: Event) => {\n // Use validatePhoneCustom as primary method (more reliable)\n let validation: ValidationResult;\n if (typeof window.validatePhoneCustom === \"function\") {\n validation = window.validatePhoneCustom(\n \"phone-number\",\n phoneField.value\n );\n } else if (typeof window.validatePhone === \"function\") {\n validation = window.validatePhone(\"phone-number\", phoneField.value);\n } else {\n console.error(\"No phone validation function available\");\n event.preventDefault();\n return false;\n }\n \n if (!validation.isValid) {\n phoneField.setCustomValidity(\n validation.message || \"Please enter a valid phone number\"\n );\n event.preventDefault();\n phoneField.focus();\n return false;\n } else {\n phoneField.setCustomValidity(\"\");\n \n // console.log(\"Validation passed, allowing form submission\");\n window.validationPassed = true;\n window._formSubmissionTime = Date.now();\n \n // Set up a delayed redirection that gives Webflow time to process\n setTimeout(() => {\n console.log(\"Redirecting....\");\n handleFormSubmission();\n }, 3000);\n \n // Let the form submit normally\n return true;\n }\n },\n true\n );\n \n // Additional Webflow success detection\n if (window.jQuery || window.$) {\n const $ = window.jQuery || window.$;\n \n // Listen for Webflow's success event\n $(document).on(\"webflow-form-success\", (e: any) => {\n if (e.target === form) {\n // console.log(\"Webflow success event detected\");\n if (window.posthog && window.getTrackingPropertiesWithForm) {\n window.posthog.capture(\n \"form_success\",\n window.getTrackingPropertiesWithForm(\n window.interactedForm || \"unknown_form\"\n )\n );\n }\n \n handleFormSubmission();\n } else {\n // event for error in future\n }\n });\n }\n \n // console.log(\"Form validation and redirection setup complete\");\n }\n \n /**\n * Initialize everything when the DOM is ready\n */\n document.addEventListener(\"DOMContentLoaded\", () => {\n // Detect phone input\n const phoneField = document.querySelector<HTMLInputElement>(\"#phone-number\");\n if (phoneField) {\n // Add validation on blur - using only browser validation\n phoneField.addEventListener(\"blur\", () => {\n if (typeof window.validatePhone === \"function\") {\n const validation = window.validatePhone(\n \"phone-number\",\n phoneField.value\n );\n if (!validation.isValid && phoneField.value.trim() !== \"\") {\n phoneField.setCustomValidity(\n validation.message || \"Please enter a valid phone number\"\n );\n } else {\n phoneField.setCustomValidity(\"\");\n }\n }\n });\n }\n \n // Select placeholders\n setupSelectPlaceholders();\n \n // Initialize country code and page data\n updateCountryCode();\n updatePageData();\n \n // Override Webflow form submission\n overrideWebflowFormSubmission();\n });\n\n// Export to make this file a module (fixes TypeScript global augmentation error)\nexport {};"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(()=>{(function(){window.phoneValidator={},document.addEventListener("DOMContentLoaded",function(){setTimeout(function(){s()},100)});function s(){document.querySelectorAll("input[type='tel'], .phone-input").forEach(function(t){t.id||(t.id="phone-input-"+Math.floor(Math.random()*1e4));try{let i=window.intlTelInput(t,{utilsScript:"https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/utils.js",separateDialCode:!0,initialCountry:"auto",geoIpLookup:function(n){fetch("https://ipapi.co/json").then(o=>o.json()).then(o=>n(o.country_code)).catch(()=>n("in"))},nationalMode:!1,allowDropdown:!0,autoPlaceholder:"polite",formatOnDisplay:!0});t.iti=i,t.addEventListener("countrychange",function(){let n=i.getSelectedCountryData(),o=document.querySelector("#country-code");o&&(o.value="+"+n.dialCode)})}catch{}}),window.validatePhone=(t,i)=>{let n=c(t);if(!n)return{isValid:!1,message:"No phone input found"};let o=n.iti;if(!o)return{isValid:!1,message:"Phone validator not initialized"};i!==void 0&&(n.value=i,o.setNumber(i));let a=n.value.trim();if(!a)return{isValid:!1,message:"No phone number provided"};let e=d(n,a,o);if(e.isValid)return e;try{if(o.isValidNumber&&o.isValidNumber()){let r=o.getNumber(),l=o.getSelectedCountryData(),u=l.dialCode;return{isValid:!0,message:"Valid number (standard validation)",fullNumber:r,countryCode:u,phoneNumber:r.substring(1+u.length),countryIso:l.iso2,countryName:l.name,validationMethod:"standard"}}}catch(r){console.warn("Standard validation failed:",r)}return e};function d(t,i,n){let o=n.getSelectedCountryData(),a=o.iso2?.toUpperCase(),e=i.replace(/\D/g,"");if(a==="US")return e.length===10&&/^[2-9]/.test(e)?{isValid:!0,message:"Valid US number",fullNumber:`+1${e}`,countryCode:"1",phoneNumber:e,countryIso:"us",countryName:"United States",formatInternational:`+1 ${e.slice(0,3)} ${e.slice(3,6)} ${e.slice(6)}`,formatNational:`(${e.slice(0,3)}) ${e.slice(3,6)}-${e.slice(6)}`,validationMethod:"custom"}:{isValid:!1,message:e.length!==10?`US numbers must be 10 digits (got ${e.length})`:"US numbers cannot start with 0 or 1"};if(a==="IN")return e.length===10&&/^[6-9]/.test(e)?{isValid:!0,message:"Valid Indian mobile number",fullNumber:`+91${e}`,countryCode:"91",phoneNumber:e,countryIso:"in",countryName:"India",formatInternational:`+91 ${e.slice(0,5)} ${e.slice(5)}`,formatNational:`${e.slice(0,5)} ${e.slice(5)}`,validationMethod:"custom"}:{isValid:!1,message:e.length!==10?`Indian mobile numbers must be 10 digits (got ${e.length})`:"Indian mobile numbers must start with 6, 7, 8, or 9"};if(a==="GB"){if(e.length===11&&e.startsWith("07"))return{isValid:!0,message:"Valid UK mobile number",fullNumber:`+44${e.slice(1)}`,countryCode:"44",phoneNumber:e.slice(1),countryIso:"gb",countryName:"United Kingdom",validationMethod:"custom"};if(e.length>=10&&e.length<=11&&/^0[12]/.test(e))return{isValid:!0,message:"Valid UK landline number",fullNumber:`+44${e.slice(1)}`,countryCode:"44",phoneNumber:e.slice(1),countryIso:"gb",countryName:"United Kingdom",validationMethod:"custom"}}return a==="AU"&&e.length===10&&e.startsWith("04")?{isValid:!0,message:"Valid Australian mobile number",fullNumber:`+61${e.slice(1)}`,countryCode:"61",phoneNumber:e.slice(1),countryIso:"au",countryName:"Australia",validationMethod:"custom"}:a==="CA"&&e.length===10&&/^[2-9]/.test(e)?{isValid:!0,message:"Valid Canadian number",fullNumber:`+1${e}`,countryCode:"1",phoneNumber:e,countryIso:"ca",countryName:"Canada",validationMethod:"custom"}:{isValid:!1,message:`No validation rules for ${o.name||"this country"}`}}function c(t){return typeof t=="string"?document.getElementById(t)||document.querySelector(t):t instanceof HTMLElement?t:document.querySelector("#phone-number")||document.querySelector("input[type='tel']")}window.validatePhoneAsync=async(t,i)=>{let n=0;for(;!window.intlTelInputUtils&&n<20;)await new Promise(o=>setTimeout(o,100)),n++;return window.validatePhone?window.validatePhone(t,i||""):{isValid:!1,message:"Validation not available"}},window.validatePhoneCustom=window.validatePhone,window.updateCountryCode=()=>{let t=document.querySelector("#phone-number"),i=document.querySelector("#country-code");if(!t||!i)return"91";try{if(t.iti){let n=t.iti.getSelectedCountryData();return i.value="+"+n.dialCode,n.dialCode}}catch(n){console.error("Error updating country code:",n)}return i.value="+91","91"},window.validatePhoneNumber=window.validatePhone,window.testPhoneNumber=window.validatePhone}})();})();
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/form/phone-validator.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//migrated from https://cdn.jsdelivr.net/gh/Fynd-Design-Engineering/fynd-one@4.0.2/form/phone-validator-2.0.js\n\n/**\n * Reliable Phone Validator Library - TypeScript Version\n * Uses custom validation rules as primary method with utils as fallback\n */\n\n// Make this file a module to allow global declarations\nexport {};\n\n// Type definitions\ninterface CountryData {\n iso2: string;\n dialCode: string;\n name: string;\n }\n \n interface ValidationResult {\n isValid: boolean;\n message?: string;\n fullNumber?: string;\n countryCode?: string;\n phoneNumber?: string;\n countryIso?: string;\n countryName?: string;\n formatInternational?: string;\n formatNational?: string;\n validationMethod?: 'custom' | 'standard';\n }\n \n interface IntlTelInputInstance {\n getSelectedCountryData(): CountryData;\n setNumber(number: string): void;\n getNumber(): string;\n isValidNumber?(): boolean;\n }\n \n interface PhoneInputElement extends HTMLInputElement {\n iti?: IntlTelInputInstance;\n }\n \n interface IntlTelInputOptions {\n utilsScript: string;\n separateDialCode: boolean;\n initialCountry: string;\n geoIpLookup: (callback: (countryCode: string) => void) => void;\n nationalMode: boolean;\n allowDropdown: boolean;\n autoPlaceholder: string;\n formatOnDisplay: boolean;\n }\n \n interface GeoIPResponse {\n country_code: string;\n }\n \n // Extend window interface for missing properties\n declare global {\n interface Window {\n phoneValidator: Record<string, unknown>;\n intlTelInput: (element: HTMLInputElement, options: IntlTelInputOptions) => IntlTelInputInstance;\n intlTelInputUtils?: unknown;\n validatePhoneAsync?: (phoneInput?: string | HTMLElement, phoneNumber?: string) => Promise<ValidationResult>;\n updateCountryCode?: () => string;\n validatePhoneNumber?: (selector: string, value: string) => ValidationResult;\n testPhoneNumber?: (selector: string, value: string) => ValidationResult;\n }\n }\n \n (function (): void {\n window.phoneValidator = {};\n \n document.addEventListener(\"DOMContentLoaded\", function (): void {\n setTimeout(function (): void {\n initializePhoneInputs();\n }, 100);\n });\n \n function initializePhoneInputs(): void {\n const phoneInputs = document.querySelectorAll<HTMLInputElement>(\n \"input[type='tel'], .phone-input\"\n );\n \n phoneInputs.forEach(function (input: HTMLInputElement): void {\n if (!input.id) {\n input.id = \"phone-input-\" + Math.floor(Math.random() * 10000);\n }\n \n try {\n const iti: IntlTelInputInstance = window.intlTelInput(input, {\n utilsScript:\n \"https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/utils.js\",\n separateDialCode: true,\n initialCountry: \"auto\",\n geoIpLookup: function (callback: (countryCode: string) => void): void {\n fetch(\"https://ipapi.co/json\")\n .then((res: Response) => res.json())\n .then((data: GeoIPResponse) => callback(data.country_code))\n .catch(() => callback(\"in\"));\n },\n nationalMode: false,\n allowDropdown: true,\n autoPlaceholder: \"polite\",\n formatOnDisplay: true,\n });\n \n (input as PhoneInputElement).iti = iti;\n \n input.addEventListener(\"countrychange\", function (): void {\n // console.log(\"Country changed to:\", iti.getSelectedCountryData());\n const countryData = iti.getSelectedCountryData();\n const countryCodeInput = document.querySelector<HTMLInputElement>(\"#country-code\");\n \n if (countryCodeInput) {\n countryCodeInput.value = \"+\" + countryData.dialCode;\n }\n });\n \n // console.log(\"Phone input initialized:\", input.id);\n } catch (error) {\n // console.error(\"Failed to initialize phone input:\", error);\n }\n });\n \n // Primary validation function - uses custom rules first, then falls back to utils\n window.validatePhone = (phoneInput?: string | HTMLElement, phoneNumber?: string): ValidationResult => {\n const input: PhoneInputElement | null = getPhoneInput(phoneInput);\n if (!input) {\n return { isValid: false, message: \"No phone input found\" };\n }\n \n const iti: IntlTelInputInstance | undefined = input.iti;\n if (!iti) {\n return { isValid: false, message: \"Phone validator not initialized\" };\n }\n \n // Set the number if provided\n if (phoneNumber !== undefined) {\n input.value = phoneNumber;\n iti.setNumber(phoneNumber);\n }\n \n const number: string = input.value.trim();\n if (!number) {\n return { isValid: false, message: \"No phone number provided\" };\n }\n \n // Try custom validation first (most reliable)\n const customResult: ValidationResult = validateWithCustomRules(input, number, iti);\n if (customResult.isValid) {\n return customResult;\n }\n \n // Fallback to standard validation if custom rules don't match\n try {\n if (iti.isValidNumber && iti.isValidNumber()) {\n const fullNumber: string = iti.getNumber();\n const countryData: CountryData = iti.getSelectedCountryData();\n const countryCode: string = countryData.dialCode;\n \n return {\n isValid: true,\n message: \"Valid number (standard validation)\",\n fullNumber: fullNumber,\n countryCode: countryCode,\n phoneNumber: fullNumber.substring(1 + countryCode.length),\n countryIso: countryData.iso2,\n countryName: countryData.name,\n validationMethod: \"standard\",\n };\n }\n } catch (error) {\n console.warn(\"Standard validation failed:\", error);\n }\n \n // If both methods fail, return the custom validation result (which explains why it failed)\n return customResult;\n };\n \n // Custom validation rules for different countries\n function validateWithCustomRules(input: PhoneInputElement, number: string, iti: IntlTelInputInstance): ValidationResult {\n const countryData: CountryData = iti.getSelectedCountryData();\n const countryCode: string | undefined = countryData.iso2?.toUpperCase();\n const digitsOnly: string = number.replace(/\\D/g, \"\");\n \n // United States validation\n if (countryCode === \"US\") {\n if (digitsOnly.length === 10 && /^[2-9]/.test(digitsOnly)) {\n return {\n isValid: true,\n message: \"Valid US number\",\n fullNumber: `+1${digitsOnly}`,\n countryCode: \"1\",\n phoneNumber: digitsOnly,\n countryIso: \"us\",\n countryName: \"United States\",\n formatInternational: `+1 ${digitsOnly.slice(\n 0,\n 3\n )} ${digitsOnly.slice(3, 6)} ${digitsOnly.slice(6)}`,\n formatNational: `(${digitsOnly.slice(0, 3)}) ${digitsOnly.slice(\n 3,\n 6\n )}-${digitsOnly.slice(6)}`,\n validationMethod: \"custom\",\n };\n } else {\n return {\n isValid: false,\n message:\n digitsOnly.length !== 10\n ? `US numbers must be 10 digits (got ${digitsOnly.length})`\n : \"US numbers cannot start with 0 or 1\",\n };\n }\n }\n \n // India validation\n if (countryCode === \"IN\") {\n if (digitsOnly.length === 10 && /^[6-9]/.test(digitsOnly)) {\n return {\n isValid: true,\n message: \"Valid Indian mobile number\",\n fullNumber: `+91${digitsOnly}`,\n countryCode: \"91\",\n phoneNumber: digitsOnly,\n countryIso: \"in\",\n countryName: \"India\",\n formatInternational: `+91 ${digitsOnly.slice(\n 0,\n 5\n )} ${digitsOnly.slice(5)}`,\n formatNational: `${digitsOnly.slice(0, 5)} ${digitsOnly.slice(5)}`,\n validationMethod: \"custom\",\n };\n } else {\n return {\n isValid: false,\n message:\n digitsOnly.length !== 10\n ? `Indian mobile numbers must be 10 digits (got ${digitsOnly.length})`\n : \"Indian mobile numbers must start with 6, 7, 8, or 9\",\n };\n }\n }\n \n // United Kingdom validation\n if (countryCode === \"GB\") {\n // UK mobile numbers (07xxx xxxxxx)\n if (digitsOnly.length === 11 && digitsOnly.startsWith(\"07\")) {\n return {\n isValid: true,\n message: \"Valid UK mobile number\",\n fullNumber: `+44${digitsOnly.slice(1)}`,\n countryCode: \"44\",\n phoneNumber: digitsOnly.slice(1),\n countryIso: \"gb\",\n countryName: \"United Kingdom\",\n validationMethod: \"custom\",\n };\n }\n // UK landline numbers (01xxx or 02xxx)\n if (\n digitsOnly.length >= 10 &&\n digitsOnly.length <= 11 &&\n /^0[12]/.test(digitsOnly)\n ) {\n return {\n isValid: true,\n message: \"Valid UK landline number\",\n fullNumber: `+44${digitsOnly.slice(1)}`,\n countryCode: \"44\",\n phoneNumber: digitsOnly.slice(1),\n countryIso: \"gb\",\n countryName: \"United Kingdom\",\n validationMethod: \"custom\",\n };\n }\n }\n \n // Australia validation\n if (countryCode === \"AU\") {\n // Australian mobile numbers (04xx xxx xxx)\n if (digitsOnly.length === 10 && digitsOnly.startsWith(\"04\")) {\n return {\n isValid: true,\n message: \"Valid Australian mobile number\",\n fullNumber: `+61${digitsOnly.slice(1)}`,\n countryCode: \"61\",\n phoneNumber: digitsOnly.slice(1),\n countryIso: \"au\",\n countryName: \"Australia\",\n validationMethod: \"custom\",\n };\n }\n }\n \n // Canada validation (same as US)\n if (countryCode === \"CA\") {\n if (digitsOnly.length === 10 && /^[2-9]/.test(digitsOnly)) {\n return {\n isValid: true,\n message: \"Valid Canadian number\",\n fullNumber: `+1${digitsOnly}`,\n countryCode: \"1\",\n phoneNumber: digitsOnly,\n countryIso: \"ca\",\n countryName: \"Canada\",\n validationMethod: \"custom\",\n };\n }\n }\n \n // If no custom rules match, return invalid\n return {\n isValid: false,\n message: `No validation rules for ${\n countryData.name || \"this country\"\n }`,\n };\n }\n \n // Helper function to get phone input\n function getPhoneInput(phoneInput?: string | HTMLElement): PhoneInputElement | null {\n if (typeof phoneInput === \"string\") {\n return (\n document.getElementById(phoneInput) as PhoneInputElement ||\n document.querySelector(phoneInput) as PhoneInputElement\n );\n } else if (phoneInput instanceof HTMLElement) {\n return phoneInput as PhoneInputElement;\n } else {\n return (\n document.querySelector(\"#phone-number\") as PhoneInputElement ||\n document.querySelector(\"input[type='tel']\") as PhoneInputElement\n );\n }\n }\n \n // Async version that waits for utils (but still uses custom rules first)\n window.validatePhoneAsync = async (phoneInput?: string | HTMLElement, phoneNumber?: string): Promise<ValidationResult> => {\n // Wait a bit for utils to load\n let attempts: number = 0;\n while (!window.intlTelInputUtils && attempts < 20) {\n await new Promise<void>((resolve) => setTimeout(resolve, 100));\n attempts++;\n }\n \n return window.validatePhone ? window.validatePhone(phoneInput as string, phoneNumber || '') : { isValid: false, message: 'Validation not available' };\n };\n \n // Keep the old custom validation function for backward compatibility\n window.validatePhoneCustom = window.validatePhone;\n \n // Country code update function\n window.updateCountryCode = (): string => {\n const phoneInput: PhoneInputElement | null = document.querySelector(\"#phone-number\");\n const countryCodeInput: HTMLInputElement | null = document.querySelector(\"#country-code\");\n \n if (!phoneInput || !countryCodeInput) return \"91\";\n \n try {\n if (phoneInput.iti) {\n const countryData: CountryData = phoneInput.iti.getSelectedCountryData();\n countryCodeInput.value = \"+\" + countryData.dialCode;\n return countryData.dialCode;\n }\n } catch (error) {\n console.error(\"Error updating country code:\", error);\n }\n \n countryCodeInput.value = \"+91\";\n return \"91\";\n };\n \n // For backward compatibility\n window.validatePhoneNumber = window.validatePhone;\n window.testPhoneNumber = window.validatePhone;\n \n // console.log(\n // \"%c Reliable Phone Validator Ready! \uD83D\uDE80\",\n // \"color: green; font-weight: bold;\"\n // );\n // console.log(\"\u2705 Uses custom validation rules as primary method\");\n // console.log(\"\u2705 Falls back to standard validation when available\");\n // console.log(\"\u2705 Supports: US, India, UK, Australia, Canada\");\n }\n })();"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/global/anchor-scroll.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 Scroll Navigation\ninterface ScrollNavigationOptions {\n triggerAttribute?: string;\n targetAttribute?: string;\n scrollDelay?: number;\n }\n \n class ScrollNavigation {\n private readonly triggerAttribute: string;\n private readonly targetAttribute: string;\n private readonly scrollDelay: number;\n \n constructor(options: ScrollNavigationOptions = {}) {\n this.triggerAttribute = options.triggerAttribute || 'fynd-scroll-trigger';\n this.targetAttribute = options.targetAttribute || 'fynd-scroll-target';\n this.scrollDelay = options.scrollDelay || 500;\n \n this.init();\n }\n \n private init(): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n this.setupTriggers();\n this.handlePageLoad();\n this.handleBrowserNavigation();\n });\n } else {\n this.setupTriggers();\n this.handlePageLoad();\n this.handleBrowserNavigation();\n }\n }\n \n private scrollToSection(sectionValue: string): void {\n const target = document.querySelector(`[${this.targetAttribute}=\"${sectionValue}\"]`) as HTMLElement;\n \n if (target) {\n this.updateURL(sectionValue);\n \n // Update active states for all triggers pointing to this section\n this.updateActiveStatesBySection(sectionValue);\n \n target.scrollIntoView({\n behavior: 'auto',\n block: 'start'\n });\n } else {\n console.warn(`ScrollNavigation: Target element with ${this.targetAttribute}=\"${sectionValue}\" not found`);\n }\n }\n \n private updateURL(sectionValue: string): void {\n try {\n const url = new URL(window.location.href);\n url.searchParams.set('section', sectionValue);\n window.history.pushState({ section: sectionValue }, '', url.toString());\n } catch (error) {\n console.error('ScrollNavigation: Failed to update URL', error);\n }\n }\n \n private handlePageLoad(): void {\n const urlParams = new URLSearchParams(window.location.search);\n const sectionParam = urlParams.get('section');\n \n if (sectionParam) {\n setTimeout(() => {\n this.scrollToSection(sectionParam);\n }, this.scrollDelay);\n }\n }\n \n private setupTriggers(): void {\n // Remove existing event listeners first\n document.removeEventListener('click', this.handleTriggerClick);\n \n // Initialize all triggers with inactive state\n this.initializeActiveStates();\n \n // Add single delegated event listener\n document.addEventListener('click', this.handleTriggerClick);\n }\n\n private initializeActiveStates(): void {\n const triggers = document.querySelectorAll(`[${this.triggerAttribute}]`) as NodeListOf<HTMLElement>;\n triggers.forEach((trigger: HTMLElement) => {\n trigger.setAttribute('fynd-anchor-active', 'false');\n });\n }\n\n private updateActiveStatesBySection(sectionValue: string): void {\n // Get all triggers\n const allTriggers = document.querySelectorAll(`[${this.triggerAttribute}]`) as NodeListOf<HTMLElement>;\n \n allTriggers.forEach((trigger: HTMLElement) => {\n const triggerSectionValue = trigger.getAttribute(this.triggerAttribute);\n \n // Set active state based on whether this trigger points to the target section\n if (triggerSectionValue === sectionValue) {\n trigger.setAttribute('fynd-anchor-active', 'true');\n } else {\n trigger.setAttribute('fynd-anchor-active', 'false');\n }\n });\n }\n\n private updateActiveStates(activeTrigger: HTMLElement): void {\n const activeSectionValue = activeTrigger.getAttribute(this.triggerAttribute);\n \n if (!activeSectionValue) return;\n \n this.updateActiveStatesBySection(activeSectionValue);\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest(`[${this.triggerAttribute}]`) as HTMLElement;\n \n if (trigger) {\n event.preventDefault();\n \n // Update active states\n this.updateActiveStates(trigger);\n \n const sectionValue = trigger.getAttribute(this.triggerAttribute);\n \n if (sectionValue) {\n this.scrollToSection(sectionValue);\n }\n }\n }\n \n private handleBrowserNavigation(): void {\n window.addEventListener('popstate', (event: PopStateEvent) => {\n const urlParams = new URLSearchParams(window.location.search);\n const sectionParam = urlParams.get('section');\n \n if (sectionParam) {\n const target = document.querySelector(`[${this.targetAttribute}=\"${sectionParam}\"]`) as HTMLElement;\n if (target) {\n // Update active states when navigating via browser back/forward\n this.updateActiveStatesBySection(sectionParam);\n \n target.scrollIntoView({\n behavior: 'auto',\n block: 'start'\n });\n }\n }\n });\n }\n \n // Public method to programmatically scroll to section\n public goToSection(sectionValue: string): void {\n this.scrollToSection(sectionValue);\n }\n \n // Public method to get current section from URL\n public getCurrentSection(): string | null {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get('section');\n }\n \n // Public method to get all available sections\n public getAvailableSections(): string[] {\n const targets = document.querySelectorAll(`[${this.targetAttribute}]`) as NodeListOf<HTMLElement>;\n const sections: string[] = [];\n \n targets.forEach((target: HTMLElement) => {\n const sectionValue = target.getAttribute(this.targetAttribute);\n if (sectionValue) {\n sections.push(sectionValue);\n }\n });\n \n return sections;\n }\n\n // Public method to reinitialize triggers (useful when DOM changes)\n public reinitializeTriggers(): void {\n this.setupTriggers();\n }\n\n // Public method for comprehensive reinitialization with options\n public reinitialize(options?: {\n triggers?: boolean;\n handlePageLoad?: boolean;\n browserNavigation?: boolean;\n }): void {\n const config = {\n triggers: true,\n handlePageLoad: false,\n browserNavigation: false,\n ...options\n };\n\n if (config.triggers) {\n this.setupTriggers();\n }\n\n if (config.handlePageLoad) {\n this.handlePageLoad();\n }\n\n if (config.browserNavigation) {\n this.handleBrowserNavigation();\n }\n }\n\n // Public method for complete reinitialization (equivalent to creating new instance)\n public fullReinitialize(): void {\n this.setupTriggers();\n this.handlePageLoad();\n this.handleBrowserNavigation();\n }\n }\n \n // Initialize with default options\n const scrollNavigation = new ScrollNavigation();\n \n // Alternative initialization with custom options\n // const scrollNavigation = new ScrollNavigation({\n // triggerAttribute: 'my-scroll-trigger',\n // targetAttribute: 'my-scroll-target',\n // scrollDelay: 200\n // });\n \n // Export for module usage\n export { ScrollNavigation };\n \n // Also make it available globally for non-module usage\n declare global {\n interface Window {\n ScrollNavigation: typeof ScrollNavigation;\n }\n }\n \n if (typeof window !== 'undefined') {\n window.ScrollNavigation = ScrollNavigation;\n }"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/global/console-links.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 Solution {\n name: string;\n slug: string;\n id: string;\n}\n\nconst solutions: Solution[] = [\n {\n name: \"Fynd PIM\",\n slug: \"/solutions/ai-pim\",\n id: \"bc50976c-a18e-467f-8e74-8bc7e6a1f247\",\n },\n {\n name: \"Catalog Cloud\",\n slug: \"/solutions/catalog-cloud\",\n id: \"bc051955-3ec9-4164-9a2f-097fa2d92279\",\n },\n {\n name: \"Fynd Platform\",\n slug: \"/solutions/storefront\",\n id: \"999c6e3a-5baa-4b1c-85b8-e57e67464069\",\n },\n {\n name: \"Fynd Engage\",\n slug: \"/solutions/engage\",\n id: \"c14d07f5-138a-4d9d-95d2-426dc0564f68\",\n },\n {\n name: \"Boltic\",\n slug: \"/solutions/workflow-automation\",\n id: \"40ec7873-ce38-4f0a-923b-1ebe96887d78\",\n },\n {\n name: \"TMS\",\n slug: \"/solutions/transport-management-system\",\n id: \"6fb171d2-612e-4919-b85b-187077171d35\",\n },\n {\n name: \"Copilot\",\n slug: \"/solutions/ai-agent-builder\",\n id: \"5f1dbe12-4a95-4d18-88f6-120ccead764d\",\n },\n];\n\nconst currentPath = window.location.pathname;\nconst currentSolution = solutions.find((sol) => sol.slug === currentPath);\n\nif (currentSolution) {\n const updateUrl = (href: string): string => {\n try {\n const url = new URL(href, window.location.origin);\n if (url.hostname.includes(\"console.fynd.com\")) {\n url.searchParams.set(\"client_id\", currentSolution.id);\n return url.toString();\n }\n } catch {\n // skip invalid URLs\n }\n return href;\n };\n\n // Update <a> tags\n const links = document.querySelectorAll<HTMLAnchorElement>(\n 'a[href*=\"console.fynd.com\"], a[href^=\"https://console.fynd.com/\"], a[href=\"https://console.fynd.com\"]'\n );\n\n links.forEach((link) => {\n if (link.getAttribute(\"update-console\") === \"false\") return;\n link.href = updateUrl(link.href);\n });\n\n // Update <button> elements\n const buttons = document.querySelectorAll<HTMLButtonElement>(\"button\");\n buttons.forEach((button) => {\n if (button.getAttribute(\"update-console\") === \"false\") return;\n\n const dataHref = button.getAttribute(\"data-href\");\n const onClick = button.getAttribute(\"onclick\");\n\n if (dataHref && dataHref.includes(\"console.fynd.com\")) {\n button.setAttribute(\"data-href\", updateUrl(dataHref));\n }\n\n if (onClick && onClick.includes(\"console.fynd.com\")) {\n const match = onClick.match(/https:\\/\\/console\\.fynd\\.com[^\\s'\"]*/);\n if (match) {\n const newOnClick = onClick.replace(match[0], updateUrl(match[0]));\n button.setAttribute(\"onclick\", newOnClick);\n }\n }\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;;;ACJA,MAAM,YAAwB;AAAA,IAC5B;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,EACF;AAEA,MAAM,cAAc,OAAO,SAAS;AACpC,MAAM,kBAAkB,UAAU,KAAK,CAAC,QAAQ,IAAI,SAAS,WAAW;AAExE,MAAI,iBAAiB;AACnB,UAAM,YAAY,CAAC,SAAyB;AAC1C,UAAI;AACF,cAAM,MAAM,IAAI,IAAI,MAAM,OAAO,SAAS,MAAM;AAChD,YAAI,IAAI,SAAS,SAAS,kBAAkB,GAAG;AAC7C,cAAI,aAAa,IAAI,aAAa,gBAAgB,EAAE;AACpD,iBAAO,IAAI,SAAS;AAAA,QACtB;AAAA,MACF,QAAQ;AAAA,MAER;AACA,aAAO;AAAA,IACT;AAGA,UAAM,QAAQ,SAAS;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,KAAK,aAAa,gBAAgB,MAAM,QAAS;AACrD,WAAK,OAAO,UAAU,KAAK,IAAI;AAAA,IACjC,CAAC;AAGD,UAAM,UAAU,SAAS,iBAAoC,QAAQ;AACrE,YAAQ,QAAQ,CAAC,WAAW;AAC1B,UAAI,OAAO,aAAa,gBAAgB,MAAM,QAAS;AAEvD,YAAM,WAAW,OAAO,aAAa,WAAW;AAChD,YAAM,UAAU,OAAO,aAAa,SAAS;AAE7C,UAAI,YAAY,SAAS,SAAS,kBAAkB,GAAG;AACrD,eAAO,aAAa,aAAa,UAAU,QAAQ,CAAC;AAAA,MACtD;AAEA,UAAI,WAAW,QAAQ,SAAS,kBAAkB,GAAG;AACnD,cAAM,QAAQ,QAAQ,MAAM,sCAAsC;AAClE,YAAI,OAAO;AACT,gBAAM,aAAa,QAAQ,QAAQ,MAAM,CAAC,GAAG,UAAU,MAAM,CAAC,CAAC,CAAC;AAChE,iBAAO,aAAa,WAAW,UAAU;AAAA,QAC3C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/global/contact-popup.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\", () => {\n const wrapper = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"wrapper\"]'\n )!;\n const content = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"content\"]'\n )!;\n const overlay = document.querySelector<HTMLElement>(\n '[data-popup-contact=\"overlay\"]'\n )!;\n const openTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"open\"]'\n );\n const closeTriggers = document.querySelectorAll<HTMLElement>(\n '[data-popup-contact-trigger=\"close\"]'\n );\n\n // initial\n wrapper.style.display = \"none\";\n overlay.style.opacity = \"0\";\n content.style.opacity = \"0\";\n content.style.transform = \"scale(0.95)\";\n\n // add a dynamic style tag for .iti.iti--container when popup is open\n const popupStyle = document.createElement(\"style\");\n popupStyle.id = \"contact-popup-style\";\n popupStyle.textContent = `\n .iti.iti--container {\n z-index: 100000000000 !important;\n }\n @media (max-width: 768px) {\n .iti.iti--container {\n width: 320px !important;\n }\n }\n `;\n\n function lockScroll() {\n document.body.style.overflow = \"hidden\";\n }\n\n function unlockScroll() {\n document.body.style.overflow = \"\";\n }\n\n function addPopupStyle() {\n if (!document.getElementById(\"contact-popup-style\")) {\n document.head.appendChild(popupStyle);\n }\n }\n\n function removePopupStyle() {\n const existing = document.getElementById(\"contact-popup-style\");\n if (existing) existing.remove();\n }\n\n function openPopup() {\n wrapper.style.display = \"flex\";\n lockScroll();\n addPopupStyle();\n\n requestAnimationFrame(() => {\n overlay.style.transition = \"opacity 0.25s ease\";\n content.style.transition = \"opacity 0.25s ease, transform 0.25s ease\";\n overlay.style.opacity = \"1\";\n content.style.opacity = \"1\";\n content.style.transform = \"scale(1)\";\n });\n }\n\n function closePopup() {\n overlay.style.opacity = \"0\";\n content.style.opacity = \"0\";\n content.style.transform = \"scale(0.95)\";\n setTimeout(() => {\n wrapper.style.display = \"none\";\n unlockScroll();\n removePopupStyle();\n }, 250);\n }\n\n openTriggers.forEach((el) => el.addEventListener(\"click\", openPopup));\n closeTriggers.forEach((el) => el.addEventListener(\"click\", closePopup));\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) closePopup();\n });\n\n (window as any).openContactPopup = openPopup;\n (window as any).closeContactPopup = closePopup;\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,MAAM;AAClD,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,UAAU,SAAS;AAAA,MACvB;AAAA,IACF;AACA,UAAM,eAAe,SAAS;AAAA,MAC5B;AAAA,IACF;AACA,UAAM,gBAAgB,SAAS;AAAA,MAC7B;AAAA,IACF;AAGA,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,UAAU;AACxB,YAAQ,MAAM,YAAY;AAG1B,UAAM,aAAa,SAAS,cAAc,OAAO;AACjD,eAAW,KAAK;AAChB,eAAW,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWzB,aAAS,aAAa;AACpB,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,aAAS,eAAe;AACtB,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAEA,aAAS,gBAAgB;AACvB,UAAI,CAAC,SAAS,eAAe,qBAAqB,GAAG;AACnD,iBAAS,KAAK,YAAY,UAAU;AAAA,MACtC;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,YAAM,WAAW,SAAS,eAAe,qBAAqB;AAC9D,UAAI,SAAU,UAAS,OAAO;AAAA,IAChC;AAEA,aAAS,YAAY;AACnB,cAAQ,MAAM,UAAU;AACxB,iBAAW;AACX,oBAAc;AAEd,4BAAsB,MAAM;AAC1B,gBAAQ,MAAM,aAAa;AAC3B,gBAAQ,MAAM,aAAa;AAC3B,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,UAAU;AACxB,gBAAQ,MAAM,YAAY;AAAA,MAC5B,CAAC;AAAA,IACH;AAEA,aAAS,aAAa;AACpB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,YAAY;AAC1B,iBAAW,MAAM;AACf,gBAAQ,MAAM,UAAU;AACxB,qBAAa;AACb,yBAAiB;AAAA,MACnB,GAAG,GAAG;AAAA,IACR;AAEA,iBAAa,QAAQ,CAAC,OAAO,GAAG,iBAAiB,SAAS,SAAS,CAAC;AACpE,kBAAc,QAAQ,CAAC,OAAO,GAAG,iBAAiB,SAAS,UAAU,CAAC;AACtE,YAAQ,iBAAiB,SAAS,CAAC,MAAM;AACvC,UAAI,EAAE,WAAW,QAAS,YAAW;AAAA,IACvC,CAAC;AAED,IAAC,OAAe,mBAAmB;AACnC,IAAC,OAAe,oBAAoB;AAAA,EACtC,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/global/custom-bg-video.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\", () => {\n const wrappers = document.querySelectorAll<HTMLElement>(\"[custom-video]\");\n\n wrappers.forEach(wrapper => {\n const video = wrapper.querySelector<HTMLVideoElement>(\"video\");\n const img = wrapper.querySelector<HTMLImageElement>(\"img\");\n\n if (!video || !img) return;\n\n video.muted = true;\n video.loop = true;\n video.autoplay = true;\n video.preload = \"auto\"; // plays nicely with <link preload>\n\n const startPlayback = () => {\n img.style.display = \"none\";\n video.play().catch(() => {\n // autoplay might fail on some browsers if not muted early enough\n video.muted = true;\n video.play().catch(() => { });\n });\n video.removeEventListener(\"loadeddata\", startPlayback);\n };\n\n if (video.readyState >= 2) {\n startPlayback();\n } else {\n video.addEventListener(\"loadeddata\", startPlayback);\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,MAAM;AAChD,UAAM,WAAW,SAAS,iBAA8B,gBAAgB;AAExE,aAAS,QAAQ,aAAW;AACxB,YAAM,QAAQ,QAAQ,cAAgC,OAAO;AAC7D,YAAM,MAAM,QAAQ,cAAgC,KAAK;AAEzD,UAAI,CAAC,SAAS,CAAC,IAAK;AAEpB,YAAM,QAAQ;AACd,YAAM,OAAO;AACb,YAAM,WAAW;AACjB,YAAM,UAAU;AAEhB,YAAM,gBAAgB,MAAM;AACxB,YAAI,MAAM,UAAU;AACpB,cAAM,KAAK,EAAE,MAAM,MAAM;AAErB,gBAAM,QAAQ;AACd,gBAAM,KAAK,EAAE,MAAM,MAAM;AAAA,UAAE,CAAC;AAAA,QAChC,CAAC;AACD,cAAM,oBAAoB,cAAc,aAAa;AAAA,MACzD;AAEA,UAAI,MAAM,cAAc,GAAG;AACvB,sBAAc;AAAA,MAClB,OAAO;AACH,cAAM,iBAAiB,cAAc,aAAa;AAAA,MACtD;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../bin/live-reload.js", "../../src/global/loader.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 LoadingStage {\n progress: number;\n message: string;\n delay: number;\n}\n\n// Page Loading Progress System\nclass PageLoader {\n private progressBar: HTMLElement | null = null;\n private progressText: HTMLElement | null = null;\n private loadingOverlay: HTMLElement | null = null;\n private currentProgress: number = 0;\n private loaderFill: HTMLElement | null = null;\n private clickLoader: HTMLElement | null = null;\n\n constructor() {\n this.init();\n }\n\n private init(): void {\n this.createLoader();\n this.interceptLinks();\n this.monitorPageLoad();\n }\n\n private createLoader(): void {\n // Find existing loader or create overlay\n this.loaderFill = document.querySelector(\".loader-fill[loader-fill]\");\n this.clickLoader = document.querySelector(\".click-loader\");\n\n if (!this.loaderFill) {\n return;\n }\n\n // Create overlay if click-loader isn't already positioned fixed\n if (\n this.clickLoader &&\n !this.clickLoader.style.position &&\n getComputedStyle(this.clickLoader).position !== \"fixed\"\n ) {\n this.loadingOverlay = document.createElement(\"div\");\n this.loadingOverlay.id = \"page-loading-overlay\";\n this.loadingOverlay.innerHTML = this.clickLoader.outerHTML;\n\n // Add overlay styles\n const styles = `\n <style>\n #page-loading-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(255, 255, 255, 0.95);\n z-index: 9999;\n display: none;\n backdrop-filter: blur(5px);\n }\n\n #page-loading-overlay .click-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 300px;\n height: 5px;\n }\n\n .click-loader .loader-fill {\n height: 100%;\n width: 0%;\n border-radius: 4px;\n }\n \n </style>\n `;\n\n document.head.insertAdjacentHTML(\"beforeend\", styles);\n document.body.appendChild(this.loadingOverlay);\n\n // Update reference to the new loader in overlay\n this.loaderFill = this.loadingOverlay.querySelector(\n \".loader-fill[loader-fill]\"\n );\n } else {\n // Use existing loader, just hide it initially\n if (this.clickLoader) {\n this.clickLoader.style.display = \"none\";\n }\n }\n\n // Initialize loader fill width\n if (this.loaderFill) {\n this.loaderFill.style.width = \"0%\";\n }\n }\n\n private interceptLinks(): void {\n // Intercept all link clicks\n document.addEventListener(\"click\", (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n const link = target.closest(\"a[href]\") as HTMLAnchorElement;\n if (link && !link.hasAttribute(\"no-loader\")) {\n const href = link.getAttribute(\"href\");\n\n // Skip external links, anchors, and javascript: links\n if (\n href &&\n (href.startsWith(\"http\") ||\n href.startsWith(\"#\") ||\n href.startsWith(\"javascript:\"))\n ) {\n return;\n }\n\n e.preventDefault();\n if (href) {\n this.navigateWithProgress(href);\n }\n }\n });\n }\n\n public navigateWithProgress(url: string): void {\n this.showLoader();\n this.simulateProgress(url);\n }\n\n private showLoader(): void {\n if (this.loadingOverlay) {\n this.loadingOverlay.style.display = \"block\";\n } else if (this.clickLoader) {\n this.clickLoader.style.display = \"block\";\n }\n this.currentProgress = 0;\n this.updateProgress(0, \"Initializing...\");\n }\n\n private hideLoader(): void {\n if (this.loadingOverlay) {\n this.loadingOverlay.style.display = \"none\";\n } else if (this.clickLoader) {\n this.clickLoader.style.display = \"none\";\n }\n }\n\n private updateProgress(percent: number, message: string = \"\"): void {\n this.currentProgress = Math.min(percent, 100);\n\n // Update your loader-fill div width\n if (this.loaderFill) {\n this.loaderFill.style.width = this.currentProgress + \"%\";\n }\n\n const displayMessage =\n message || `Loading... ${Math.round(this.currentProgress)}%`;\n }\n\n private simulateProgress(url: string): void {\n const stages: LoadingStage[] = [\n { progress: 10, message: \"Preparing request...\", delay: 100 },\n { progress: 25, message: \"Connecting to server...\", delay: 150 },\n { progress: 40, message: \"Sending request...\", delay: 100 },\n { progress: 60, message: \"Receiving response...\", delay: 150 },\n { progress: 80, message: \"Processing content...\", delay: 50 },\n { progress: 95, message: \"Finalizing...\", delay: 50 },\n { progress: 100, message: \"Complete!\", delay: 100 },\n ];\n\n let currentStage = 0;\n\n const processStage = (): void => {\n if (currentStage < stages.length) {\n const stage = stages[currentStage];\n this.updateProgress(stage.progress, stage.message);\n\n setTimeout(() => {\n currentStage++;\n processStage();\n }, stage.delay);\n } else {\n // Navigation complete\n setTimeout(() => {\n window.location.href = url;\n }, 200);\n }\n };\n\n processStage();\n }\n\n // Monitor actual page loading events\n private monitorPageLoad(): void {\n // Track when page starts loading\n window.addEventListener(\"beforeunload\", () => {\n // Page unloading\n });\n\n // Track when new page loads\n window.addEventListener(\"load\", () => {\n this.hideLoader();\n });\n\n // Track DOM content loaded\n document.addEventListener(\"DOMContentLoaded\", () => {\n // DOM content loaded\n });\n\n // Track navigation timing (if supported)\n if (\"performance\" in window) {\n window.addEventListener(\"load\", () => {\n setTimeout(() => {\n const timing = performance.timing;\n const loadTime = timing.loadEventEnd - timing.navigationStart;\n\n // Detailed timing breakdown available but not logged\n const dnsLookupTime = timing.domainLookupEnd - timing.domainLookupStart;\n const tcpConnectionTime = timing.connectEnd - timing.connectStart;\n const requestTime = timing.responseStart - timing.requestStart;\n const responseTime = timing.responseEnd - timing.responseStart;\n const domProcessingTime = timing.domComplete - timing.domLoading;\n }, 100);\n });\n }\n }\n}\n\n// Extend Window interface for TypeScript\ndeclare global {\n interface Window {\n showPageLoader?: (url: string) => void;\n pageLoaderInstance?: PageLoader;\n }\n}\n\n// Initialize the page loader when DOM is ready\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => {\n new PageLoader();\n });\n} else {\n new PageLoader();\n}\n\n// Optional: Add method to manually trigger loading for programmatic navigation\n(window as any).showPageLoader = function (url: string): void {\n if ((window as any).pageLoaderInstance) {\n (window as any).pageLoaderInstance.navigateWithProgress(url);\n }\n};\n\n// Store instance globally for manual control\nwindow.addEventListener(\"load\", () => {\n if (!(window as any).pageLoaderInstance) {\n (window as any).pageLoaderInstance = new PageLoader();\n }\n});\n\n// Export to make this file a module\nexport { };"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|