@rtstic.dev/pulse 0.0.61 → 0.0.64

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.
@@ -1,237 +1 @@
1
- "use strict";
2
- (() => {
3
- // src/global/accordions.ts
4
- document.addEventListener("DOMContentLoaded", () => {
5
- const faqWrappers = document.querySelectorAll(
6
- '[pulse-faq-element="wrapper"]'
7
- );
8
- faqWrappers.forEach((wrapper) => {
9
- const toggle = wrapper.querySelector(
10
- '[pulse-faq-element="toggle"]'
11
- );
12
- const content = wrapper.querySelector(
13
- '[pulse-faq-element="content"]'
14
- );
15
- const contentInner = wrapper.querySelector(
16
- '[pulse-faq-element="content-inner"]'
17
- );
18
- if (!toggle || !content || !contentInner) {
19
- console.warn("Required FAQ elements not found in wrapper");
20
- return;
21
- }
22
- const groupContainer = wrapper.closest("[pulse-faq-group]");
23
- const groupName = groupContainer?.getAttribute("pulse-faq-group") || null;
24
- const faqType = groupContainer?.getAttribute("pulse-faq-type") || "one-at-a-time";
25
- if (wrapper.getAttribute("pulse-faq-initialopen") === "true") {
26
- gsap.set(content, { height: "auto", overflow: "hidden" });
27
- gsap.set(contentInner, { opacity: 1 });
28
- toggle.setAttribute("data-state", "open");
29
- if (groupContainer) hideDots(groupContainer);
30
- showDot(wrapper);
31
- updateFaqGroupImage(wrapper, groupName);
32
- updateFaqGroupText(wrapper, groupName);
33
- updateFaqGroupButton(wrapper, groupName);
34
- } else {
35
- gsap.set(content, { height: 0 });
36
- gsap.set(contentInner, { opacity: 0 });
37
- toggle.setAttribute("data-state", "closed");
38
- }
39
- let isAnimating = false;
40
- toggle.addEventListener("click", () => {
41
- if (isAnimating) return;
42
- isAnimating = true;
43
- const isOpen = toggle.getAttribute("data-state") === "open";
44
- if (faqType === "one-at-a-time" && groupContainer) {
45
- const openFAQs = groupContainer.querySelectorAll(
46
- '[pulse-faq-element="wrapper"] [data-state="open"]'
47
- );
48
- if (isOpen && openFAQs.length === 1) {
49
- isAnimating = false;
50
- return;
51
- }
52
- }
53
- if (isOpen) {
54
- closeAccordion(wrapper, () => {
55
- isAnimating = false;
56
- });
57
- } else {
58
- if (faqType === "one-at-a-time" && groupContainer) {
59
- closeOtherAccordions(groupContainer);
60
- }
61
- openAccordion(wrapper, groupName, () => {
62
- isAnimating = false;
63
- });
64
- }
65
- });
66
- });
67
- handleRatioHeights();
68
- });
69
- window.addEventListener("resize", () => {
70
- handleRatioHeights();
71
- });
72
- function handleRatioHeights() {
73
- if (window.innerWidth < 992) return;
74
- document.querySelectorAll("[pulse-faq-image-target]").forEach((imageTarget) => {
75
- const wrapper = imageTarget.parentElement;
76
- if (!wrapper) return;
77
- const ratioHeight = wrapper.getAttribute("ratio-height");
78
- if (ratioHeight !== "true") return;
79
- wrapper.style.height = "auto";
80
- requestAnimationFrame(() => {
81
- wrapper.style.height = `${wrapper.offsetHeight}px`;
82
- });
83
- });
84
- document.querySelectorAll('[pulse-faq-tabgroup][ratio-height="true"]').forEach((tabGroup) => {
85
- tabGroup.style.height = "auto";
86
- requestAnimationFrame(() => {
87
- tabGroup.style.height = `${tabGroup.offsetHeight}px`;
88
- });
89
- });
90
- }
91
- function openAccordion(wrapper, groupName, callback) {
92
- const toggle = wrapper.querySelector(
93
- '[pulse-faq-element="toggle"]'
94
- );
95
- const content = wrapper.querySelector(
96
- '[pulse-faq-element="content"]'
97
- );
98
- const contentInner = wrapper.querySelector(
99
- '[pulse-faq-element="content-inner"]'
100
- );
101
- if (!toggle || !content || !contentInner) return;
102
- if (content.gsapAnimation) content.gsapAnimation.kill();
103
- const timeline = gsap.timeline({
104
- onComplete: () => {
105
- if (callback) callback();
106
- }
107
- });
108
- gsap.set(content, { height: "auto", visibility: "hidden", opacity: 0 });
109
- const height = content.offsetHeight;
110
- gsap.set(content, { height: 0, visibility: "visible", opacity: 1 });
111
- timeline.to(content, {
112
- height,
113
- duration: 0.5,
114
- ease: "power3.inOut",
115
- clearProps: "height",
116
- onComplete: () => {
117
- content.style.height = "auto";
118
- }
119
- });
120
- timeline.to(
121
- contentInner,
122
- { opacity: 1, duration: 0.4, ease: "power2.out" },
123
- "-=0.35"
124
- );
125
- content.gsapAnimation = timeline;
126
- toggle.setAttribute("data-state", "open");
127
- const icon = toggle.querySelector(
128
- '[pulse-faq-element="chevron"]'
129
- );
130
- if (icon)
131
- gsap.to(icon, { rotation: 180, duration: 0.4, ease: "back.out(1.7)" });
132
- const groupContainer = wrapper.closest("[pulse-faq-group]");
133
- if (groupContainer) hideDots(groupContainer);
134
- showDot(wrapper);
135
- updateFaqGroupImage(wrapper, groupName);
136
- updateFaqGroupText(wrapper, groupName);
137
- updateFaqGroupButton(wrapper, groupName);
138
- }
139
- function closeAccordion(wrapper, callback) {
140
- const toggle = wrapper.querySelector(
141
- '[pulse-faq-element="toggle"]'
142
- );
143
- const content = wrapper.querySelector(
144
- '[pulse-faq-element="content"]'
145
- );
146
- const contentInner = wrapper.querySelector(
147
- '[pulse-faq-element="content-inner"]'
148
- );
149
- if (!toggle || !content || !contentInner) return;
150
- if (content.gsapAnimation) content.gsapAnimation.kill();
151
- const timeline = gsap.timeline({
152
- onComplete: () => {
153
- if (callback) callback();
154
- }
155
- });
156
- timeline.to(contentInner, { opacity: 0, duration: 0.3, ease: "power2.in" });
157
- timeline.to(
158
- content,
159
- { height: 0, duration: 0.4, ease: "power3.inOut" },
160
- "-=0.25"
161
- );
162
- content.gsapAnimation = timeline;
163
- toggle.setAttribute("data-state", "closed");
164
- const icon = toggle.querySelector(
165
- '[pulse-faq-element="chevron"]'
166
- );
167
- if (icon)
168
- gsap.to(icon, { rotation: 0, duration: 0.4, ease: "back.out(1.7)" });
169
- const groupContainer = wrapper.closest("[pulse-faq-group]");
170
- if (groupContainer) hideDots(groupContainer);
171
- }
172
- function closeOtherAccordions(groupContainer) {
173
- const openFAQs = groupContainer.querySelectorAll(
174
- '[pulse-faq-element="wrapper"] [data-state="open"]'
175
- );
176
- openFAQs.forEach((openToggle) => {
177
- const wrapper = openToggle.closest(
178
- '[pulse-faq-element="wrapper"]'
179
- );
180
- if (wrapper) closeAccordion(wrapper);
181
- });
182
- }
183
- function updateFaqGroupImage(wrapper, groupName) {
184
- if (!groupName) return;
185
- const groupImage = document.querySelector(
186
- `[pulse-faq-image-target="${groupName}"]`
187
- );
188
- if (!groupImage) return;
189
- const imageSource = wrapper.querySelector(
190
- "[pulse-faq-image-source]"
191
- );
192
- if (!imageSource) return;
193
- const newSrc = imageSource.getAttribute("src");
194
- if (newSrc) groupImage.setAttribute("src", newSrc);
195
- groupImage.setAttribute("srcset", "");
196
- }
197
- function updateFaqGroupText(wrapper, groupName) {
198
- if (!groupName) return;
199
- const groupText = document.querySelector(
200
- `[pulse-faq-text-target="${groupName}"]`
201
- );
202
- if (!groupText) return;
203
- const textSource = wrapper.querySelector(
204
- "[pulse-faq-text-source]"
205
- );
206
- if (!textSource) return;
207
- groupText.textContent = textSource.textContent;
208
- }
209
- function updateFaqGroupButton(wrapper, groupName) {
210
- if (!groupName) return;
211
- const buttonTextTarget = document.querySelector(
212
- `[pulse-faq-button-text-target="${groupName}"]`
213
- );
214
- const buttonLinkTarget = document.querySelector(
215
- `[pulse-faq-button-link-target="${groupName}"]`
216
- );
217
- const linkSource = wrapper.querySelector(
218
- "[pulse-faq-link-source]"
219
- );
220
- if (!linkSource) return;
221
- if (buttonTextTarget) buttonTextTarget.textContent = linkSource.textContent;
222
- if (buttonLinkTarget) {
223
- for (let i = 0; i < linkSource.attributes.length; i++) {
224
- const attr = linkSource.attributes[i];
225
- buttonLinkTarget.setAttribute(attr.name, attr.value);
226
- }
227
- }
228
- }
229
- function hideDots(scope) {
230
- scope.querySelectorAll('[pulse-faq-element="dot"]').forEach((dot) => gsap.set(dot, { opacity: 0, duration: 0.4 }));
231
- }
232
- function showDot(wrapper) {
233
- const dot = wrapper.querySelector('[pulse-faq-element="dot"]');
234
- if (dot) gsap.set(dot, { opacity: 1, duration: 0.4 });
235
- }
236
- })();
237
- //# sourceMappingURL=accordions.js.map
1
+ "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll('[pulse-faq-element="wrapper"]').forEach(e=>{let n=e.querySelector('[pulse-faq-element="toggle"]'),o=e.querySelector('[pulse-faq-element="content"]'),i=e.querySelector('[pulse-faq-element="content-inner"]');if(!n||!o||!i){console.warn("Required FAQ elements not found in wrapper");return}let l=e.closest("[pulse-faq-group]"),s=l?.getAttribute("pulse-faq-group")||null,r=l?.getAttribute("pulse-faq-type")||"one-at-a-time";e.getAttribute("pulse-faq-initialopen")==="true"?(gsap.set(o,{height:"auto",overflow:"hidden"}),gsap.set(i,{opacity:1}),n.setAttribute("data-state","open"),l&&c(l),q(e),g(e,s),d(e,s),p(e,s)):(gsap.set(o,{height:0}),gsap.set(i,{opacity:0}),n.setAttribute("data-state","closed"));let u=!1;n.addEventListener("click",()=>{if(u)return;u=!0;let a=n.getAttribute("data-state")==="open";if(r==="one-at-a-time"&&l){let h=l.querySelectorAll('[pulse-faq-element="wrapper"] [data-state="open"]');if(a&&h.length===1){u=!1;return}}a?m(e,()=>{u=!1}):(r==="one-at-a-time"&&l&&L(l),E(e,s,()=>{u=!1}))})}),f()});window.addEventListener("resize",()=>{f()});function f(){window.innerWidth<992||(document.querySelectorAll("[pulse-faq-image-target]").forEach(t=>{let e=t.parentElement;!e||e.getAttribute("ratio-height")!=="true"||(e.style.height="auto",requestAnimationFrame(()=>{e.style.height=`${e.offsetHeight}px`}))}),document.querySelectorAll('[pulse-faq-tabgroup][ratio-height="true"]').forEach(t=>{t.style.height="auto",requestAnimationFrame(()=>{t.style.height=`${t.offsetHeight}px`})}))}function E(t,e,n){let o=t.querySelector('[pulse-faq-element="toggle"]'),i=t.querySelector('[pulse-faq-element="content"]'),l=t.querySelector('[pulse-faq-element="content-inner"]');if(!o||!i||!l)return;i.gsapAnimation&&i.gsapAnimation.kill();let s=gsap.timeline({onComplete:()=>{n&&n()}});gsap.set(i,{height:"auto",visibility:"hidden",opacity:0});let r=i.offsetHeight;gsap.set(i,{height:0,visibility:"visible",opacity:1}),s.to(i,{height:r,duration:.5,ease:"power3.inOut",clearProps:"height",onComplete:()=>{i.style.height="auto"}}),s.to(l,{opacity:1,duration:.4,ease:"power2.out"},"-=0.35"),i.gsapAnimation=s,o.setAttribute("data-state","open");let u=o.querySelector('[pulse-faq-element="chevron"]');u&&gsap.to(u,{rotation:180,duration:.4,ease:"back.out(1.7)"});let a=t.closest("[pulse-faq-group]");a&&c(a),q(t),g(t,e),d(t,e),p(t,e)}function m(t,e){let n=t.querySelector('[pulse-faq-element="toggle"]'),o=t.querySelector('[pulse-faq-element="content"]'),i=t.querySelector('[pulse-faq-element="content-inner"]');if(!n||!o||!i)return;o.gsapAnimation&&o.gsapAnimation.kill();let l=gsap.timeline({onComplete:()=>{e&&e()}});l.to(i,{opacity:0,duration:.3,ease:"power2.in"}),l.to(o,{height:0,duration:.4,ease:"power3.inOut"},"-=0.25"),o.gsapAnimation=l,n.setAttribute("data-state","closed");let s=n.querySelector('[pulse-faq-element="chevron"]');s&&gsap.to(s,{rotation:0,duration:.4,ease:"back.out(1.7)"});let r=t.closest("[pulse-faq-group]");r&&c(r)}function L(t){t.querySelectorAll('[pulse-faq-element="wrapper"] [data-state="open"]').forEach(n=>{let o=n.closest('[pulse-faq-element="wrapper"]');o&&m(o)})}function g(t,e){if(!e)return;let n=document.querySelector(`[pulse-faq-image-target="${e}"]`);if(!n)return;let o=t.querySelector("[pulse-faq-image-source]");if(!o)return;let i=o.getAttribute("src");i&&n.setAttribute("src",i),n.setAttribute("srcset","")}function d(t,e){if(!e)return;let n=document.querySelector(`[pulse-faq-text-target="${e}"]`);if(!n)return;let o=t.querySelector("[pulse-faq-text-source]");o&&(n.textContent=o.textContent)}function p(t,e){if(!e)return;let n=document.querySelector(`[pulse-faq-button-text-target="${e}"]`),o=document.querySelector(`[pulse-faq-button-link-target="${e}"]`),i=t.querySelector("[pulse-faq-link-source]");if(i&&(n&&(n.textContent=i.textContent),o))for(let l=0;l<i.attributes.length;l++){let s=i.attributes[l];o.setAttribute(s.name,s.value)}}function c(t){t.querySelectorAll('[pulse-faq-element="dot"]').forEach(e=>gsap.set(e,{opacity:0,duration:.4}))}function q(t){let e=t.querySelector('[pulse-faq-element="dot"]');e&&gsap.set(e,{opacity:1,duration:.4})}})();
@@ -1,124 +1 @@
1
- "use strict";
2
- (() => {
3
- // src/global/faqs.ts
4
- function initAccordions() {
5
- const items = document.querySelectorAll('[data-acc="item"]');
6
- items.forEach((item) => {
7
- const toggle = item.querySelector('[data-acc="toggle"]');
8
- const panel = item.querySelector('[data-acc="panel"]');
9
- const inner = item.querySelector('[data-acc="inner"]');
10
- const xLine = item.querySelector('[data-acc="x-line"]');
11
- const yLine = item.querySelector('[data-acc="y-line"]');
12
- const divider = item.querySelector('[data-acc="divider"]');
13
- if (!toggle || !panel || !inner) return;
14
- if (toggle._accClickHandler) {
15
- toggle.removeEventListener("click", toggle._accClickHandler);
16
- }
17
- panel.accAnim?.kill();
18
- gsap.set(panel, { height: 0, overflow: "hidden" });
19
- gsap.set(inner, { opacity: 0 });
20
- toggle.setAttribute("aria-expanded", "false");
21
- if (xLine && yLine) {
22
- gsap.set(xLine, { rotation: 0 });
23
- gsap.set(yLine, { rotation: 0 });
24
- }
25
- if (divider) {
26
- gsap.set(divider, {
27
- backgroundColor: "var(--grey--grey40)"
28
- });
29
- }
30
- let animating = false;
31
- const clickHandler = () => {
32
- if (animating) return;
33
- animating = true;
34
- const open = toggle.getAttribute("aria-expanded") === "true";
35
- if (open) {
36
- collapseItem(item, () => animating = false);
37
- } else {
38
- expandItem(item, () => animating = false);
39
- }
40
- };
41
- toggle._accClickHandler = clickHandler;
42
- toggle.addEventListener("click", clickHandler);
43
- });
44
- }
45
- document.addEventListener("DOMContentLoaded", initAccordions);
46
- window.initAccordions = initAccordions;
47
- function expandItem(item, done) {
48
- const toggle = item.querySelector('[data-acc="toggle"]');
49
- const panel = item.querySelector('[data-acc="panel"]');
50
- const inner = item.querySelector('[data-acc="inner"]');
51
- const xLine = item.querySelector('[data-acc="x-line"]');
52
- const yLine = item.querySelector('[data-acc="y-line"]');
53
- const divider = item.querySelector('[data-acc="divider"]');
54
- if (!toggle || !panel || !inner) {
55
- done?.();
56
- return;
57
- }
58
- panel.accAnim?.kill();
59
- const tl = gsap.timeline({ onComplete: () => done?.() });
60
- gsap.set(panel, { height: "auto", visibility: "hidden" });
61
- const h = panel.offsetHeight;
62
- gsap.set(panel, { height: 0, visibility: "visible", overflow: "hidden" });
63
- tl.to(panel, {
64
- height: h,
65
- duration: 0.35,
66
- ease: "power3.inOut",
67
- onComplete: () => {
68
- panel.style.height = "auto";
69
- }
70
- });
71
- tl.to(inner, { opacity: 1, duration: 0.2, ease: "power2.out" }, "-=0.15");
72
- if (xLine && yLine) {
73
- tl.to(xLine, { rotation: 180, duration: 0.4, ease: "power2.inOut" }, 0);
74
- tl.to(yLine, { rotation: 270, duration: 0.4, ease: "power2.inOut" }, 0);
75
- }
76
- if (divider) {
77
- tl.to(
78
- divider,
79
- {
80
- backgroundColor: "var(--grey--grey10)",
81
- duration: 0.3,
82
- ease: "power2.inOut"
83
- },
84
- 0
85
- );
86
- }
87
- panel.accAnim = tl;
88
- toggle.setAttribute("aria-expanded", "true");
89
- }
90
- function collapseItem(item, done) {
91
- const toggle = item.querySelector('[data-acc="toggle"]');
92
- const panel = item.querySelector('[data-acc="panel"]');
93
- const inner = item.querySelector('[data-acc="inner"]');
94
- const xLine = item.querySelector('[data-acc="x-line"]');
95
- const yLine = item.querySelector('[data-acc="y-line"]');
96
- const divider = item.querySelector('[data-acc="divider"]');
97
- if (!toggle || !panel || !inner) {
98
- done?.();
99
- return;
100
- }
101
- panel.accAnim?.kill();
102
- const tl = gsap.timeline({ onComplete: () => done?.() });
103
- tl.to(inner, { opacity: 0, duration: 0.15, ease: "power2.in" });
104
- tl.to(panel, { height: 0, duration: 0.25, ease: "power3.inOut" }, "-=0.05");
105
- if (xLine && yLine) {
106
- tl.to(xLine, { rotation: 0, duration: 0.4, ease: "power2.inOut" }, 0);
107
- tl.to(yLine, { rotation: 0, duration: 0.4, ease: "power2.inOut" }, 0);
108
- }
109
- if (divider) {
110
- tl.to(
111
- divider,
112
- {
113
- backgroundColor: "var(--grey--grey40)",
114
- duration: 0.3,
115
- ease: "power2.inOut"
116
- },
117
- 0
118
- );
119
- }
120
- panel.accAnim = tl;
121
- toggle.setAttribute("aria-expanded", "false");
122
- }
123
- })();
124
- //# sourceMappingURL=faqs.js.map
1
+ "use strict";(()=>{function s(){document.querySelectorAll('[data-acc="item"]').forEach(a=>{let o=a.querySelector('[data-acc="toggle"]'),t=a.querySelector('[data-acc="panel"]'),c=a.querySelector('[data-acc="inner"]'),i=a.querySelector('[data-acc="x-line"]'),r=a.querySelector('[data-acc="y-line"]'),l=a.querySelector('[data-acc="divider"]');if(!o||!t||!c)return;o._accClickHandler&&o.removeEventListener("click",o._accClickHandler),t.accAnim?.kill(),gsap.set(t,{height:0,overflow:"hidden"}),gsap.set(c,{opacity:0}),o.setAttribute("aria-expanded","false"),i&&r&&(gsap.set(i,{rotation:0}),gsap.set(r,{rotation:0})),l&&gsap.set(l,{backgroundColor:"var(--grey--grey40)"});let e=!1,d=()=>{if(e)return;e=!0,o.getAttribute("aria-expanded")==="true"?g(a,()=>e=!1):u(a,()=>e=!1)};o._accClickHandler=d,o.addEventListener("click",d)})}document.addEventListener("DOMContentLoaded",s);window.initAccordions=s;function u(n,a){let o=n.querySelector('[data-acc="toggle"]'),t=n.querySelector('[data-acc="panel"]'),c=n.querySelector('[data-acc="inner"]'),i=n.querySelector('[data-acc="x-line"]'),r=n.querySelector('[data-acc="y-line"]'),l=n.querySelector('[data-acc="divider"]');if(!o||!t||!c){a?.();return}t.accAnim?.kill();let e=gsap.timeline({onComplete:()=>a?.()});gsap.set(t,{height:"auto",visibility:"hidden"});let d=t.offsetHeight;gsap.set(t,{height:0,visibility:"visible",overflow:"hidden"}),e.to(t,{height:d,duration:.35,ease:"power3.inOut",onComplete:()=>{t.style.height="auto"}}),e.to(c,{opacity:1,duration:.2,ease:"power2.out"},"-=0.15"),i&&r&&(e.to(i,{rotation:180,duration:.4,ease:"power2.inOut"},0),e.to(r,{rotation:270,duration:.4,ease:"power2.inOut"},0)),l&&e.to(l,{backgroundColor:"var(--grey--grey10)",duration:.3,ease:"power2.inOut"},0),t.accAnim=e,o.setAttribute("aria-expanded","true")}function g(n,a){let o=n.querySelector('[data-acc="toggle"]'),t=n.querySelector('[data-acc="panel"]'),c=n.querySelector('[data-acc="inner"]'),i=n.querySelector('[data-acc="x-line"]'),r=n.querySelector('[data-acc="y-line"]'),l=n.querySelector('[data-acc="divider"]');if(!o||!t||!c){a?.();return}t.accAnim?.kill();let e=gsap.timeline({onComplete:()=>a?.()});e.to(c,{opacity:0,duration:.15,ease:"power2.in"}),e.to(t,{height:0,duration:.25,ease:"power3.inOut"},"-=0.05"),i&&r&&(e.to(i,{rotation:0,duration:.4,ease:"power2.inOut"},0),e.to(r,{rotation:0,duration:.4,ease:"power2.inOut"},0)),l&&e.to(l,{backgroundColor:"var(--grey--grey40)",duration:.3,ease:"power2.inOut"},0),t.accAnim=e,o.setAttribute("aria-expanded","false")}})();
@@ -1,76 +1 @@
1
- "use strict";
2
- (() => {
3
- // src/global/loader.ts
4
- var FIRST_VISIT_KEY = "pulse-loader-visited";
5
- var FIRST_VISIT_DURATION = 3e3;
6
- var RETURN_VISIT_DURATION = 1e3;
7
- var EXIT_DURATION = 500;
8
- function hasVisited() {
9
- return sessionStorage.getItem(FIRST_VISIT_KEY) === "true";
10
- }
11
- function markAsVisited() {
12
- sessionStorage.setItem(FIRST_VISIT_KEY, "true");
13
- }
14
- function animateCounter(counterElement, duration) {
15
- const startTime = performance.now();
16
- const startValue = 0;
17
- const endValue = 100;
18
- function updateCounter(currentTime) {
19
- const elapsed = currentTime - startTime;
20
- const progress = Math.min(elapsed / duration, 1);
21
- const currentValue = Math.floor(startValue + (endValue - startValue) * progress);
22
- counterElement.textContent = currentValue.toString();
23
- if (progress < 1) {
24
- requestAnimationFrame(updateCounter);
25
- } else {
26
- counterElement.textContent = "100";
27
- }
28
- }
29
- requestAnimationFrame(updateCounter);
30
- }
31
- function animateFill(fillElement, duration) {
32
- fillElement.style.width = "0%";
33
- fillElement.style.transition = `width ${duration}ms linear`;
34
- requestAnimationFrame(() => {
35
- fillElement.style.width = "100%";
36
- });
37
- }
38
- function exitLoader(wrapperElement) {
39
- wrapperElement.style.transition = `transform ${EXIT_DURATION}ms ease-in-out, opacity ${EXIT_DURATION}ms ease-in-out`;
40
- wrapperElement.style.transform = "translateY(-100%)";
41
- setTimeout(() => {
42
- wrapperElement.style.display = "none";
43
- document.body.style.overflow = "";
44
- }, EXIT_DURATION);
45
- }
46
- function startLoading(wrapperElement, fillElement, counterElement, duration) {
47
- document.body.style.overflow = "hidden";
48
- wrapperElement.style.display = "flex";
49
- animateFill(fillElement, duration);
50
- if (counterElement) {
51
- animateCounter(counterElement, duration);
52
- }
53
- setTimeout(() => {
54
- exitLoader(wrapperElement);
55
- }, duration);
56
- markAsVisited();
57
- }
58
- function initPulseLoader() {
59
- const wrapperElement = document.querySelector('[pulse-loader-ele="wrapper"]');
60
- const fillElement = document.querySelector('[pulse-loader-ele="fill"]');
61
- const counterElement = document.querySelector('[pulse-loader-ele="counter"]');
62
- if (!wrapperElement || !fillElement) {
63
- console.error("Pulse Loader: Required elements not found");
64
- return;
65
- }
66
- const isFirstVisit = !hasVisited();
67
- const loadDuration = isFirstVisit ? FIRST_VISIT_DURATION : RETURN_VISIT_DURATION;
68
- startLoading(wrapperElement, fillElement, counterElement, loadDuration);
69
- }
70
- if (document.readyState === "loading") {
71
- document.addEventListener("DOMContentLoaded", initPulseLoader);
72
- } else {
73
- initPulseLoader();
74
- }
75
- })();
76
- //# sourceMappingURL=loader.js.map
1
+ "use strict";(()=>{var a="pulse-loader-visited";function c(){return sessionStorage.getItem(a)==="true"}function T(){sessionStorage.setItem(a,"true")}function I(e,t){let o=performance.now(),n=0,s=100;function i(u){let d=u-o,r=Math.min(d/t,1),m=Math.floor(n+(s-n)*r);e.textContent=m.toString(),r<1?requestAnimationFrame(i):e.textContent="100"}requestAnimationFrame(i)}function f(e,t){e.style.width="0%",e.style.transition=`width ${t}ms linear`,requestAnimationFrame(()=>{e.style.width="100%"})}function y(e){e.style.transition="transform 500ms ease-in-out, opacity 500ms ease-in-out",e.style.transform="translateY(-100%)",setTimeout(()=>{e.style.display="none",document.body.style.overflow=""},500)}function R(e,t,o,n){document.body.style.overflow="hidden",e.style.display="flex",f(t,n),o&&I(o,n),setTimeout(()=>{y(e)},n),T()}function l(){let e=document.querySelector('[pulse-loader-ele="wrapper"]'),t=document.querySelector('[pulse-loader-ele="fill"]'),o=document.querySelector('[pulse-loader-ele="counter"]');if(!e||!t){console.error("Pulse Loader: Required elements not found");return}let s=!c()?3e3:1e3;R(e,t,o,s)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",l):l();})();