@rtstic.dev/pulse 0.0.28 → 0.0.30

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.
@@ -0,0 +1 @@
1
+ "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{let b=window.matchMedia("(min-width: 992px)"),u=null;function h(){let a=[{identifier:"1",autoplayDuration:"11000ms"},{identifier:"2",autoplayDuration:"5000ms"},{identifier:"3",autoplayDuration:"8000ms"}];function m(t){return t.endsWith("ms")?parseInt(t.replace("ms",""),10):t.endsWith("s")?parseFloat(t.replace("s",""))*1e3:0}function c(t){document.querySelectorAll("[pulse-tab-content]").forEach(n=>{let i=n.getAttribute("pulse-tab-content");n.setAttribute("active-tabcontent",i===t?"true":"false")}),document.querySelectorAll("[pulse-tab-link]").forEach(n=>{let i=n.getAttribute("pulse-tab-link");n.setAttribute("active-tablink",i===t?"true":"false")}),v(t)}function v(t){document.querySelectorAll("[pulse-tab-content]").forEach(o=>{let n=o.getAttribute("pulse-tab-content"),i=o.querySelector("video");i&&(n===t?(i.loop=!0,i.play().catch(()=>{})):(i.pause(),i.currentTime=0,i.loop=!1))})}function T(t){let e=a.find(o=>o.identifier===t);return e?m(e.autoplayDuration):0}function L(t){return a.findIndex(e=>e.identifier===t)}let l=null,s=0;function f(){let t=a[s],e=m(t.autoplayDuration);c(t.identifier),g(t.identifier,e),s=(s+1)%a.length,l=window.setTimeout(f,e)}function y(){d(),s=0,f()}function d(){l!==null&&(clearTimeout(l),l=null)}function g(t,e){document.querySelectorAll("[pulse-tab-link]").forEach(n=>{let i=n.getAttribute("pulse-tab-link"),r=n.querySelector("[tablink-path]");r&&(r.style.transition="none",r.style.width="0%",i===t&&(r.getBoundingClientRect(),r.style.transition=`width ${e}ms linear`,r.style.width="100%"))})}return document.querySelectorAll("[pulse-tab-link]").forEach(t=>{t.addEventListener("click",()=>{let e=t.getAttribute("pulse-tab-link");if(!e)return;d(),c(e);let o=T(e);g(e,o);let n=L(e);n!==-1&&(s=(n+1)%a.length),l=window.setTimeout(f,o)})}),c(a[0].identifier),y(),window.activateTab=c,window.startTabAutoplay=y,window.stopTabAutoplay=d,d}function p(a){a.matches?u||(u=h()):u&&(u(),u=null)}p(b),b.addEventListener("change",p)});})();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/home/tabs-v2.ts"],
4
+ "sourcesContent": ["type TabConfig = {\n identifier: string;\n autoplayDuration: string; // e.g. \"400ms\"\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const tabConfigs: TabConfig[] = [\n { identifier: \"1\", autoplayDuration: \"11000ms\" },\n { identifier: \"2\", autoplayDuration: \"5000ms\" },\n { identifier: \"3\", autoplayDuration: \"8000ms\" }\n ];\n\n function parseDuration(duration: string): number {\n if (duration.endsWith(\"ms\")) {\n return parseInt(duration.replace(\"ms\", \"\"), 10);\n }\n if (duration.endsWith(\"s\")) {\n return parseFloat(duration.replace(\"s\", \"\")) * 1000;\n }\n return 0;\n }\n\n function activateTab(identifier: string): void {\n const tabContents = document.querySelectorAll<HTMLElement>(\"[pulse-tab-content]\");\n tabContents.forEach(el => {\n const value = el.getAttribute(\"pulse-tab-content\");\n el.setAttribute(\n \"active-tabcontent\",\n value === identifier ? \"true\" : \"false\"\n );\n });\n\n const tabLinks = document.querySelectorAll<HTMLElement>(\"[pulse-tab-link]\");\n tabLinks.forEach(el => {\n const value = el.getAttribute(\"pulse-tab-link\");\n el.setAttribute(\n \"active-tablink\",\n value === identifier ? \"true\" : \"false\"\n );\n });\n\n handleTabVideos(identifier);\n }\n\n function handleTabVideos(activeIdentifier: string): void {\n const tabContents = document.querySelectorAll<HTMLElement>(\"[pulse-tab-content]\");\n\n tabContents.forEach(tab => {\n const identifier = tab.getAttribute(\"pulse-tab-content\");\n const video = tab.querySelector<HTMLVideoElement>(\"video\");\n\n if (!video) return;\n\n if (identifier === activeIdentifier) {\n video.loop = true;\n video.play().catch(() => {\n // autoplay may be blocked, fail silently\n });\n } else {\n video.pause();\n video.currentTime = 0;\n video.loop = false;\n }\n });\n }\n function getDurationForIdentifier(identifier: string): number {\n const config = tabConfigs.find(tab => tab.identifier === identifier);\n return config ? parseDuration(config.autoplayDuration) : 0;\n }\n function getIndexForIdentifier(identifier: string): number {\n return tabConfigs.findIndex(tab => tab.identifier === identifier);\n }\n // Click handling\n const tabLinks = document.querySelectorAll<HTMLElement>(\"[pulse-tab-link]\");\n tabLinks.forEach(link => {\n link.addEventListener(\"click\", () => {\n const identifier = link.getAttribute(\"pulse-tab-link\");\n if (!identifier) return;\n\n stopAutoplay();\n activateTab(identifier);\n\n const duration = getDurationForIdentifier(identifier);\n handleTabLinkPathAnimation(identifier, duration);\n\n const index = getIndexForIdentifier(identifier);\n if (index !== -1) {\n currentIndex = (index + 1) % tabConfigs.length;\n }\n\n // Optional: resume autoplay automatically\n autoplayTimeout = window.setTimeout(autoplayNext, duration);\n });\n });\n\n // Autoplay logic\n let autoplayTimeout: number | null = null;\n let currentIndex = 0;\n\n function autoplayNext(): void {\n const config = tabConfigs[currentIndex];\n const delay = parseDuration(config.autoplayDuration);\n\n activateTab(config.identifier);\n handleTabLinkPathAnimation(config.identifier, delay);\n\n currentIndex = (currentIndex + 1) % tabConfigs.length;\n\n autoplayTimeout = window.setTimeout(autoplayNext, delay);\n }\n\n function startAutoplay(): void {\n stopAutoplay();\n currentIndex = 0;\n autoplayNext();\n }\n\n function stopAutoplay(): void {\n if (autoplayTimeout !== null) {\n clearTimeout(autoplayTimeout);\n autoplayTimeout = null;\n }\n }\n\n function handleTabLinkPathAnimation(\n activeIdentifier: string,\n durationMs: number\n ): void {\n const tabLinks = document.querySelectorAll<HTMLElement>(\"[pulse-tab-link]\");\n\n tabLinks.forEach(link => {\n const identifier = link.getAttribute(\"pulse-tab-link\");\n const path = link.querySelector<HTMLElement>(\"[tablink-path]\");\n\n if (!path) return;\n\n // Reset everything first\n path.style.transition = \"none\";\n path.style.width = \"0%\";\n\n if (identifier === activeIdentifier) {\n // Force reflow so reset is applied before animation\n path.getBoundingClientRect();\n\n path.style.transition = `width ${durationMs}ms linear`;\n path.style.width = \"100%\";\n }\n });\n }\n\n // Make first tab active on load\n if (tabConfigs.length > 0) {\n activateTab(tabConfigs[0].identifier);\n }\n\n // Start autoplay\n startAutoplay();\n\n // Optional global exposure\n (window as any).activateTab = activateTab;\n (window as any).startTabAutoplay = startAutoplay;\n (window as any).stopTabAutoplay = stopAutoplay;\n});"],
5
+ "mappings": "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",
6
+ "names": ["tabLinks"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/slider/freescroll-cards.ts"],
4
- "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n if (typeof window === 'undefined' || typeof (window as any).Swiper === 'undefined') {\n return;\n }\n\n const enableFreeMode = window.innerWidth >= 992;\n\n const initSlider = (\n selector: string,\n breakpoints: Record<number, { slidesPerView: number }>\n ) => {\n const sliderEl = document.querySelector(selector);\n if (!sliderEl) {\n return;\n }\n\n new (window as any).Swiper(sliderEl, {\n spaceBetween: 20,\n loop: false,\n freeMode: enableFreeMode,\n mousewheel: enableFreeMode\n ? {\n forceToAxis: true,\n sensitivity: 1,\n }\n : false,\n breakpoints,\n });\n };\n\n // scrolling-cards\n initSlider(\"[pulse-slider='scrolling-cards']\", {\n 992: { slidesPerView: 2.5 }, // desktop\n 768: { slidesPerView: 1.5 }, // tablet\n 0: { slidesPerView: 1.2 }, // mobile\n });\n\n // scrolling-cards-2\n initSlider(\"[pulse-slider='scrolling-cards-2']\", {\n 992: { slidesPerView: 3 }, // desktop\n 768: { slidesPerView: 2.5 }, // tablet\n 0: { slidesPerView: 1.2 }, // mobile\n });\n});\n"],
5
- "mappings": ";;;AAAA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,QAAI,OAAO,WAAW,eAAe,OAAQ,OAAe,WAAW,aAAa;AAChF;AAAA,IACJ;AAEA,UAAM,iBAAiB,OAAO,cAAc;AAE5C,UAAM,aAAa,CACf,UACA,gBACC;AACD,YAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AAEA,UAAK,OAAe,OAAO,UAAU;AAAA,QACjC,cAAc;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY,iBACN;AAAA,UACI,aAAa;AAAA,UACb,aAAa;AAAA,QACjB,IACA;AAAA,QACN;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,eAAW,oCAAoC;AAAA,MAC3C,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,GAAG,EAAE,eAAe,IAAI;AAAA;AAAA,IAC5B,CAAC;AAGD,eAAW,sCAAsC;AAAA,MAC7C,KAAK,EAAE,eAAe,EAAE;AAAA;AAAA,MACxB,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,GAAG,EAAE,eAAe,IAAI;AAAA;AAAA,IAC5B,CAAC;AAAA,EACL,CAAC;",
4
+ "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n if (typeof window === 'undefined' || typeof (window as any).Swiper === 'undefined') {\n return;\n }\n\n const enableFreeMode = window.innerWidth >= 992;\n\n const initSlider = (\n selector: string,\n breakpoints: Record<number, { slidesPerView: number }>\n ) => {\n const sliderEl = document.querySelector(selector);\n if (!sliderEl) {\n return;\n }\n\n new (window as any).Swiper(sliderEl, {\n spaceBetween: 20,\n loop: false,\n freeMode: enableFreeMode,\n mousewheel: enableFreeMode\n ? {\n forceToAxis: true,\n sensitivity: 1,\n }\n : false,\n breakpoints,\n });\n };\n\n // scrolling-cards\n initSlider(\"[pulse-slider='scrolling-cards']\", {\n 992: { slidesPerView: 2.5 }, // desktop\n 768: { slidesPerView: 1.5 }, // tablet\n 0: { slidesPerView: 1.2 }, // mobile\n });\n\n // scrolling-cards-2\n initSlider(\"[pulse-slider='scrolling-cards-2']\", {\n 992: { slidesPerView: 3 }, // desktop\n 768: { slidesPerView: 2.5 }, // tablet\n 0: { slidesPerView: 1.2 }, // mobile\n });\n\n // scrolling-cards-3\n initSlider(\"[pulse-slider='scrolling-cards-3']\", {\n 992: { slidesPerView: 4 }, // desktop\n 768: { slidesPerView: 3 }, // tablet\n 0: { slidesPerView: 2.1 }, // mobile\n });\n});\n"],
5
+ "mappings": ";;;AAAA,WAAS,iBAAiB,oBAAoB,MAAM;AAChD,QAAI,OAAO,WAAW,eAAe,OAAQ,OAAe,WAAW,aAAa;AAChF;AAAA,IACJ;AAEA,UAAM,iBAAiB,OAAO,cAAc;AAE5C,UAAM,aAAa,CACf,UACA,gBACC;AACD,YAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AAEA,UAAK,OAAe,OAAO,UAAU;AAAA,QACjC,cAAc;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY,iBACN;AAAA,UACE,aAAa;AAAA,UACb,aAAa;AAAA,QACjB,IACE;AAAA,QACN;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,eAAW,oCAAoC;AAAA,MAC3C,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,GAAG,EAAE,eAAe,IAAI;AAAA;AAAA,IAC5B,CAAC;AAGD,eAAW,sCAAsC;AAAA,MAC7C,KAAK,EAAE,eAAe,EAAE;AAAA;AAAA,MACxB,KAAK,EAAE,eAAe,IAAI;AAAA;AAAA,MAC1B,GAAG,EAAE,eAAe,IAAI;AAAA;AAAA,IAC5B,CAAC;AAGD,eAAW,sCAAsC;AAAA,MAC7C,KAAK,EAAE,eAAe,EAAE;AAAA;AAAA,MACxB,KAAK,EAAE,eAAe,EAAE;AAAA;AAAA,MACxB,GAAG,EAAE,eAAe,IAAI;AAAA;AAAA,IAC5B,CAAC;AAAA,EACL,CAAC;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtstic.dev/pulse",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "description": "pulse website",
5
5
  "license": "license-of-your-project",
6
6
  "keywords": [],