@rtstic.dev/pulse 0.0.88 → 0.0.89

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 +1 @@
1
- "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{console.log("[promptbar] DOMContentLoaded fired");let n=window.gsap,p=document.querySelectorAll("[prompt-slide-image-inner]");console.log("[float] elements found:",p.length),p.forEach(e=>{n.set(e,{x:0,y:0});function t(){n.to(e,{x:n.utils.random(-20,20),y:n.utils.random(-20,20),duration:n.utils.random(2,3),ease:"sine.inOut",onComplete:t})}n.delayedCall(n.utils.random(0,4),t)});let g=[{prompt:"Build a list of country music dancers that wear cowboy hats",slide:0},{prompt:"Build a list of grandma creators who do hip hop lip sync content",slide:1},{prompt:"Build a list of meme pages that are perfect for an EDM launch",slide:2}],s=document.querySelector("[promptbar=word-count]"),d=document.querySelector("[promptbar=submit]"),a=document.querySelector("[promptbar=border]"),m=document.querySelector("[promptbar=text-slot]"),c=document.querySelector("[promptbar=submit-loader]"),L=!1,l=new window.Swiper("[promptbar-slider]",{loop:!0,speed:0,effect:"fade",fadeEffect:{crossFade:!1},pagination:{el:".swiper-pagination",clickable:!0},keyboard:{enabled:!0},mousewheel:{enabled:!0},autoplay:!1});if(console.log("[slider] imageSlider instance:",l??"NOT FOUND \u274C"),console.log("[slider] Swiper available on window:",window.Swiper?"\u2705":"NOT FOUND \u274C"),console.log("[slider] .swiper element exists:",document.querySelector(".swiper")??"NOT FOUND \u274C"),console.log("[slider] slide count:",l?.slides?.length??"unknown"),console.log("[slider] active index:",l?.activeIndex??"unknown"),console.log("[promptbar] wordCount: ",s??"NOT FOUND \u274C"),console.log("[promptbar] sendBtn: ",d??"NOT FOUND \u274C"),console.log("[promptbar] barBorder: ",a??"NOT FOUND \u274C"),console.log("[promptbar] textSlot: ",m??"NOT FOUND \u274C"),console.log("[promptbar] gsap: ",n?"\u2705":"NOT FOUND \u274C"),!s||!d||!a||!m||!n){console.error("[promptbar] One or more dependencies missing. Aborting.");return}console.log("[promptbar] All elements found \u2705 Starting loop...");let b=0,y=!1;function u(e){return new Promise(t=>setTimeout(t,e))}function N(e){let t=e.trim().split(/\s+/).filter(Boolean).length;s.textContent=`${t||0}/300 words`}function v(e){let t=document.createElement("div");return t.className="chroma-text",t.setAttribute("data-animate","false"),t.textContent=e,t}function S(e){return console.log(`[promptbar] textIn \u2192 "${e}"`),new Promise(t=>{let o=n.timeline({defaults:{ease:"power1.out"}}),r=m.querySelector(".chroma-text");r&&(o.to(r,{duration:.4,autoAlpha:0,ease:"power1.in"}),o.add(()=>r.remove()));let i;o.add(()=>{i=v(e),m.appendChild(i),i.setAttribute("data-animate","true"),x(e),console.log("[promptbar] chroma element appended")}),o.to(()=>i,{duration:.6,autoAlpha:1}),o.add(()=>{console.log("[promptbar] textIn done \u2705"),t()})})}function T(){return console.log("[promptbar] triggerSendClick"),new Promise(e=>{d.setAttribute("is-clicked","true"),O(),setTimeout(()=>{d.setAttribute("is-clicked","false"),setTimeout(e,250)},120)})}function h(e,t){return console.log("[promptbar] triggerBorderAnimation started, going to slide:",t),new Promise(o=>{a.removeAttribute("is-animating"),setTimeout(()=>{a.setAttribute("is-animating","true");let r=window.getComputedStyle(a);console.log("[promptbar] animation-name:",r.animationName),console.log("[promptbar] animation-duration:",r.animationDuration);let i=setTimeout(()=>{console.warn("[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F"),a.removeAttribute("is-animating"),o()},4500);a.addEventListener("animationend",()=>{clearTimeout(i),a.removeAttribute("is-animating"),console.log("[promptbar] triggerBorderAnimation done \u2705"),o()},{once:!0})},50)})}function x(e){let t=e.trim().split(/\s+/).filter(Boolean).length,o={value:0};n.to(o,{value:t,duration:.8,ease:"power2.out",onUpdate:()=>{s.textContent=`${Math.round(o.value)}/300 words`},onComplete:()=>{s.textContent=`${t}/300 words`}})}function A(e,t){return new Promise(o=>{let i=e.slides[e.activeIndex].querySelectorAll("[prompt-slide-image]");n.timeline({onComplete:o}).to(i,{scale:1.5,opacity:0,filter:"blur(16px)",duration:1,ease:"power2.in",stagger:.05}).add(()=>{e.slideToLoop(t),requestAnimationFrame(()=>{let f=e.slides[e.activeIndex],D=f.querySelectorAll("[prompt-slide-image]");e.slides.forEach(w=>{w!==f&&n.set(w.querySelectorAll("[prompt-slide-image]"),{scale:.8,opacity:0,filter:"blur(12px)"})}),n.fromTo(D,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07,onComplete:o})})},"-=0.25")})}function E(e){setTimeout(()=>{e.slides[e.activeIndex]?.querySelectorAll("[prompt-skeleton]")?.forEach(r=>{let i=Math.random()*1500;r.style.transition="opacity 0.5s ease",r.style.opacity="1",setTimeout(()=>{r.style.opacity="0"},i)})},50)}function O(){c&&(c.style.opacity="1",setTimeout(()=>{c.style.opacity="0"},2500))}async function C(){for(;;){if(y)return;let e=g[b%g.length];await S(e.prompt),b++,await u(100),T(),h(l,e.slide),await u(1500),await A(l,e.slide),E(l),await u(2e3)}}C()});})();
1
+ "use strict";(()=>{document.addEventListener("DOMContentLoaded",()=>{console.log("[promptbar] DOMContentLoaded fired");let o=window.gsap,b=document.querySelectorAll("[prompt-slide-image-inner]");console.log("[float] elements found:",b.length),b.forEach(e=>{o.set(e,{x:0,y:0});function t(){o.to(e,{x:o.utils.random(-20,20),y:o.utils.random(-20,20),duration:o.utils.random(2,3),ease:"sine.inOut",onComplete:t})}o.delayedCall(o.utils.random(0,4),t)});let u=[{prompt:"Build a list of country music dancers that wear cowboy hats",slide:0},{prompt:"Build a list of grandma creators who do hip hop lip sync content",slide:1},{prompt:"Build a list of meme pages that are perfect for an EDM launch",slide:2}],s=document.querySelector("[promptbar=word-count]"),m=document.querySelector("[promptbar=submit]"),l=document.querySelector("[promptbar=border]"),d=document.querySelector("[promptbar=text-slot]"),p=document.querySelector("[promptbar=submit-loader]"),I=!1,i=new window.Swiper("[promptbar-slider]",{loop:!0,speed:0,effect:"fade",fadeEffect:{crossFade:!1},pagination:{el:".swiper-pagination",clickable:!0},keyboard:{enabled:!0},mousewheel:{enabled:!0},autoplay:!1});if(console.log("[slider] imageSlider instance:",i??"NOT FOUND \u274C"),console.log("[slider] Swiper available on window:",window.Swiper?"\u2705":"NOT FOUND \u274C"),console.log("[slider] .swiper element exists:",document.querySelector(".swiper")??"NOT FOUND \u274C"),console.log("[slider] slide count:",i?.slides?.length??"unknown"),console.log("[slider] active index:",i?.activeIndex??"unknown"),console.log("[promptbar] wordCount: ",s??"NOT FOUND \u274C"),console.log("[promptbar] sendBtn: ",m??"NOT FOUND \u274C"),console.log("[promptbar] barBorder: ",l??"NOT FOUND \u274C"),console.log("[promptbar] textSlot: ",d??"NOT FOUND \u274C"),console.log("[promptbar] gsap: ",o?"\u2705":"NOT FOUND \u274C"),!s||!m||!l||!d||!o){console.error("[promptbar] One or more dependencies missing. Aborting.");return}console.log("[promptbar] All elements found \u2705 Starting loop...");let g=0,h=!1;function c(e){return new Promise(t=>setTimeout(t,e))}function x(e){let t=e.trim().split(/\s+/).filter(Boolean).length;s.textContent=`${t||0}/300 words`}function w(e){let t=document.createElement("div");return t.className="chroma-text",t.setAttribute("data-animate","false"),t.textContent=e,t}function A(e){return console.log(`[promptbar] textIn \u2192 "${e}"`),new Promise(t=>{let n=o.timeline({defaults:{ease:"power1.out"}}),r=d.querySelector(".chroma-text");r&&(n.to(r,{duration:.4,autoAlpha:0,ease:"power1.in"}),n.add(()=>r.remove()));let a;n.add(()=>{a=w(e),d.appendChild(a),a.setAttribute("data-animate","true"),O(e),console.log("[promptbar] chroma element appended")}),n.to(()=>a,{duration:.6,autoAlpha:1}),n.add(()=>{console.log("[promptbar] textIn done \u2705"),t()})})}function E(){return console.log("[promptbar] triggerSendClick"),new Promise(e=>{m.setAttribute("is-clicked","true"),L(),setTimeout(()=>{m.setAttribute("is-clicked","false"),setTimeout(e,250)},120)})}function C(e,t){return console.log("[promptbar] triggerBorderAnimation started, going to slide:",t),new Promise(n=>{l.removeAttribute("is-animating"),setTimeout(()=>{l.setAttribute("is-animating","true");let r=window.getComputedStyle(l);console.log("[promptbar] animation-name:",r.animationName),console.log("[promptbar] animation-duration:",r.animationDuration);let a=setTimeout(()=>{console.warn("[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F"),l.removeAttribute("is-animating"),n()},4500);l.addEventListener("animationend",()=>{clearTimeout(a),l.removeAttribute("is-animating"),console.log("[promptbar] triggerBorderAnimation done \u2705"),n()},{once:!0})},50)})}function O(e){let t=e.trim().split(/\s+/).filter(Boolean).length,n={value:0};o.to(n,{value:t,duration:.8,ease:"power2.out",onUpdate:()=>{s.textContent=`${Math.round(n.value)}/300 words`},onComplete:()=>{s.textContent=`${t}/300 words`}})}function D(e,t){return new Promise(n=>{let a=e.slides[e.activeIndex].querySelectorAll("[prompt-slide-image]");o.timeline({onComplete:n}).to(a,{scale:1.5,opacity:0,filter:"blur(16px)",duration:1,ease:"power2.in",stagger:.05}).add(()=>{e.slideToLoop(t),requestAnimationFrame(()=>{let S=e.slides[e.activeIndex],M=S.querySelectorAll("[prompt-slide-image]");e.slides.forEach(T=>{T!==S&&o.set(T.querySelectorAll("[prompt-slide-image]"),{scale:.8,opacity:0,filter:"blur(12px)"})}),o.fromTo(M,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07,onComplete:n})})},"-=0.25")})}function y(e){setTimeout(()=>{e.slides[e.activeIndex]?.querySelectorAll("[prompt-skeleton]")?.forEach(r=>{let a=Math.random()*1500;r.style.transition="opacity 0.5s ease",r.style.opacity="1",setTimeout(()=>{r.style.opacity="0"},a)})},50)}function L(){p&&(p.style.opacity="1",setTimeout(()=>{p.style.opacity="0"},2500))}function N(){requestAnimationFrame(()=>{let t=i.slides[i.activeIndex].querySelectorAll("[prompt-slide-image]");o.fromTo(t,{scale:.8,opacity:0,filter:"blur(12px)"},{scale:1,opacity:1,filter:"blur(0px)",duration:1,ease:"power3.out",stagger:.07})})}async function q(){for(;;){if(h)return;let e=u[g%u.length];await A(e.prompt),g++,await c(100),E(),C(i,e.slide),await c(1500),await D(i,e.slide),y(i),await c(2e3)}}let f=u[0],v=w(f.prompt);d.appendChild(v),v.setAttribute("data-animate","true"),x(f.prompt),i.slideToLoop(f.slide),N(),y(i),g=1,c(3e3).then(()=>q())});})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/promptbar/index.ts"],
4
- "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n\n console.log('[promptbar] DOMContentLoaded fired');\n\n const gsap = (window as any).gsap;\n\n const floatEls = document.querySelectorAll('[prompt-slide-image-inner]');\n console.log('[float] elements found:', floatEls.length);\n\n floatEls.forEach((el) => {\n gsap.set(el, { x: 0, y: 0 });\n\n function drift() {\n gsap.to(el, {\n x: gsap.utils.random(-20, 20),\n y: gsap.utils.random(-20, 20),\n duration: gsap.utils.random(2, 3),\n ease: 'sine.inOut',\n onComplete: drift,\n });\n }\n\n gsap.delayedCall(gsap.utils.random(0, 4), drift);\n });\n\n const slides: { prompt: string; slide: number }[] = [\n { prompt: \"Build a list of country music dancers that wear cowboy hats\", slide: 0 },\n { prompt: \"Build a list of grandma creators who do hip hop lip sync content\", slide: 1 },\n { prompt: \"Build a list of meme pages that are perfect for an EDM launch\", slide: 2 },\n ];\n\n const wordCount = document.querySelector('[promptbar=word-count]') as HTMLSpanElement;\n const sendBtn = document.querySelector('[promptbar=submit]') as HTMLDivElement;\n const barBorder = document.querySelector('[promptbar=border]') as HTMLDivElement;\n const textSlot = document.querySelector('[promptbar=text-slot]') as HTMLDivElement;\n const submitButtonLoading = document.querySelector('[promptbar=submit-loader]') as HTMLDivElement;\n\n let sliderRevealed = false;\n\n const imageSlider = new (window as any).Swiper('[promptbar-slider]', {\n loop: true,\n speed: 0, // disable swiper's own transition\n effect: 'fade',\n fadeEffect: { crossFade: false },\n pagination: { el: '.swiper-pagination', clickable: true },\n keyboard: { enabled: true },\n mousewheel: { enabled: true },\n autoplay: false,\n });\n\n // fadeOutSkeletons(imageSlider);\n\n console.log('[slider] imageSlider instance:', imageSlider ?? 'NOT FOUND \u274C');\n console.log('[slider] Swiper available on window:', (window as any).Swiper ? '\u2705' : 'NOT FOUND \u274C');\n console.log('[slider] .swiper element exists:', document.querySelector('.swiper') ?? 'NOT FOUND \u274C');\n console.log('[slider] slide count:', imageSlider?.slides?.length ?? 'unknown');\n console.log('[slider] active index:', imageSlider?.activeIndex ?? 'unknown');\n\n console.log('[promptbar] wordCount: ', wordCount ?? 'NOT FOUND \u274C');\n console.log('[promptbar] sendBtn: ', sendBtn ?? 'NOT FOUND \u274C');\n console.log('[promptbar] barBorder: ', barBorder ?? 'NOT FOUND \u274C');\n console.log('[promptbar] textSlot: ', textSlot ?? 'NOT FOUND \u274C');\n console.log('[promptbar] gsap: ', gsap ? '\u2705' : 'NOT FOUND \u274C');\n\n if (!wordCount || !sendBtn || !barBorder || !textSlot || !gsap) {\n console.error('[promptbar] One or more dependencies missing. Aborting.');\n return;\n }\n\n console.log('[promptbar] All elements found \u2705 Starting loop...');\n\n let currentIndex: number = 0;\n let cancelled: boolean = false;\n\n // \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n function updateWordCount(text: string): void {\n const words = text.trim().split(/\\s+/).filter(Boolean).length;\n wordCount.textContent = `${words || 0}/300 words`;\n }\n\n // \u2500\u2500 chroma element factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function makeChromaElement(text: string): HTMLDivElement {\n const div = document.createElement('div');\n div.className = 'chroma-text';\n div.setAttribute('data-animate', 'false');\n div.textContent = text;\n return div;\n }\n\n // \u2500\u2500 textIn \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function textIn(text: string): Promise<void> {\n console.log(`[promptbar] textIn \u2192 \"${text}\"`);\n return new Promise(resolve => {\n const tl = gsap.timeline({ defaults: { ease: 'power1.out' } });\n\n const existing = textSlot.querySelector('.chroma-text') as HTMLDivElement | null;\n if (existing) {\n tl.to(existing, {\n duration: 0.4,\n autoAlpha: 0,\n ease: 'power1.in',\n });\n tl.add(() => existing.remove());\n }\n\n let newEl: HTMLDivElement;\n\n tl.add(() => {\n newEl = makeChromaElement(text);\n textSlot.appendChild(newEl);\n newEl.setAttribute('data-animate', 'true');\n animateWordCount(text);\n console.log('[promptbar] chroma element appended');\n });\n\n tl.to(() => newEl, {\n duration: 0.6,\n autoAlpha: 1,\n });\n\n tl.add(() => {\n console.log('[promptbar] textIn done \u2705');\n resolve();\n });\n });\n }\n\n // \u2500\u2500 Animation steps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function triggerSendClick(): Promise<void> {\n console.log('[promptbar] triggerSendClick');\n return new Promise(resolve => {\n sendBtn.setAttribute('is-clicked', 'true');\n triggerSubmitLoader();\n setTimeout(() => {\n sendBtn.setAttribute('is-clicked', 'false');\n setTimeout(resolve, 250);\n }, 120);\n });\n }\n\n function triggerBorderAnimation(slider: any, slideIndex: number): Promise<void> {\n console.log('[promptbar] triggerBorderAnimation started, going to slide:', slideIndex);\n return new Promise(resolve => {\n barBorder.removeAttribute('is-animating');\n\n setTimeout(() => {\n barBorder.setAttribute('is-animating', 'true');\n\n // go to specific slide instead of slideNext\n // slider.slideToLoop(slideIndex - 1);\n\n // fadeOutSkeletons(slider);\n\n const computedStyle = window.getComputedStyle(barBorder);\n console.log('[promptbar] animation-name:', computedStyle.animationName);\n console.log('[promptbar] animation-duration:', computedStyle.animationDuration);\n\n const fallback = setTimeout(() => {\n console.warn('[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F');\n barBorder.removeAttribute('is-animating');\n resolve();\n }, 4500);\n\n barBorder.addEventListener('animationend', () => {\n clearTimeout(fallback);\n barBorder.removeAttribute('is-animating');\n console.log('[promptbar] triggerBorderAnimation done \u2705');\n resolve();\n }, { once: true });\n\n }, 50);\n });\n }\n\n function animateWordCount(text: string): void {\n const target = text.trim().split(/\\s+/).filter(Boolean).length;\n const counter = { value: 0 };\n\n gsap.to(counter, {\n value: target,\n duration: 0.8,\n ease: 'power2.out',\n onUpdate: () => {\n wordCount.textContent = `${Math.round(counter.value)}/${300} words`;\n },\n onComplete: () => {\n wordCount.textContent = `${target}/300 words`;\n }\n });\n }\n\n\n function transitionSlides(slider: any, nextIndex: number): Promise<void> {\n return new Promise(resolve => {\n const currentSlide = slider.slides[slider.activeIndex];\n const currentImages = currentSlide.querySelectorAll('[prompt-slide-image]');\n\n const tl = gsap.timeline({ onComplete: resolve });\n\n // slide out current\n tl.to(currentImages, {\n scale: 1.5,\n opacity: 0,\n filter: 'blur(16px)',\n duration: 1,\n ease: 'power2.in',\n stagger: 0.05,\n })\n\n // swap slide + reset others + slide in \u2014 all inside .add() so it runs at the right time\n .add(() => {\n slider.slideToLoop(nextIndex);\n\n // wait a tick for Swiper to settle before grabbing activeIndex\n requestAnimationFrame(() => {\n const newSlide = slider.slides[slider.activeIndex];\n const newImages = newSlide.querySelectorAll('[prompt-slide-image]');\n\n slider.slides.forEach((slide: HTMLElement) => {\n if (slide !== newSlide) {\n gsap.set(slide.querySelectorAll('[prompt-slide-image]'), {\n scale: 0.8, opacity: 0, filter: 'blur(12px)'\n });\n }\n });\n\n gsap.fromTo(newImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n onComplete: resolve\n }\n );\n });\n\n }, '-=0.25');\n });\n }\n\n // \u2500\u2500 Skeleton fade out \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function fadeOutSkeletons(slider: any): void {\n setTimeout(() => {\n const activeSlide = slider.slides[slider.activeIndex];\n const skeletons = activeSlide?.querySelectorAll('[prompt-skeleton]');\n skeletons?.forEach((skeleton: HTMLElement) => {\n const randomDelay = Math.random() * 1500; // 0\u20131500ms random per skeleton\n skeleton.style.transition = 'opacity 0.5s ease';\n skeleton.style.opacity = '1';\n setTimeout(() => {\n skeleton.style.opacity = '0';\n }, randomDelay);\n });\n }, 50);\n }\n\n // \u2500\u2500 Submit loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function triggerSubmitLoader(): void {\n if (!submitButtonLoading) return;\n submitButtonLoading.style.opacity = '1';\n setTimeout(() => {\n submitButtonLoading.style.opacity = '0';\n }, 2500);\n }\n\n // \u2500\u2500 Main loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n async function runLoop(): Promise<void> {\n while (true) {\n if (cancelled) return;\n\n const item = slides[currentIndex % slides.length];\n\n await textIn(item.prompt);\n\n currentIndex++;\n\n await sleep(100);\n triggerSendClick();\n triggerBorderAnimation(imageSlider, item.slide);\n\n await sleep(1500);\n await transitionSlides(imageSlider, item.slide);\n fadeOutSkeletons(imageSlider);\n\n await sleep(2000);\n }\n }\n\n runLoop();\n\n});"],
5
- "mappings": "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",
4
+ "sourcesContent": ["document.addEventListener('DOMContentLoaded', () => {\n\n console.log('[promptbar] DOMContentLoaded fired');\n\n const gsap = (window as any).gsap;\n\n const floatEls = document.querySelectorAll('[prompt-slide-image-inner]');\n console.log('[float] elements found:', floatEls.length);\n\n floatEls.forEach((el) => {\n gsap.set(el, { x: 0, y: 0 });\n\n function drift() {\n gsap.to(el, {\n x: gsap.utils.random(-20, 20),\n y: gsap.utils.random(-20, 20),\n duration: gsap.utils.random(2, 3),\n ease: 'sine.inOut',\n onComplete: drift,\n });\n }\n\n gsap.delayedCall(gsap.utils.random(0, 4), drift);\n });\n\n const slides: { prompt: string; slide: number }[] = [\n { prompt: \"Build a list of country music dancers that wear cowboy hats\", slide: 0 },\n { prompt: \"Build a list of grandma creators who do hip hop lip sync content\", slide: 1 },\n { prompt: \"Build a list of meme pages that are perfect for an EDM launch\", slide: 2 },\n ];\n\n const wordCount = document.querySelector('[promptbar=word-count]') as HTMLSpanElement;\n const sendBtn = document.querySelector('[promptbar=submit]') as HTMLDivElement;\n const barBorder = document.querySelector('[promptbar=border]') as HTMLDivElement;\n const textSlot = document.querySelector('[promptbar=text-slot]') as HTMLDivElement;\n const submitButtonLoading = document.querySelector('[promptbar=submit-loader]') as HTMLDivElement;\n\n let sliderRevealed = false;\n\n const imageSlider = new (window as any).Swiper('[promptbar-slider]', {\n loop: true,\n speed: 0,\n effect: 'fade',\n fadeEffect: { crossFade: false },\n pagination: { el: '.swiper-pagination', clickable: true },\n keyboard: { enabled: true },\n mousewheel: { enabled: true },\n autoplay: false,\n });\n\n console.log('[slider] imageSlider instance:', imageSlider ?? 'NOT FOUND \u274C');\n console.log('[slider] Swiper available on window:', (window as any).Swiper ? '\u2705' : 'NOT FOUND \u274C');\n console.log('[slider] .swiper element exists:', document.querySelector('.swiper') ?? 'NOT FOUND \u274C');\n console.log('[slider] slide count:', imageSlider?.slides?.length ?? 'unknown');\n console.log('[slider] active index:', imageSlider?.activeIndex ?? 'unknown');\n\n console.log('[promptbar] wordCount: ', wordCount ?? 'NOT FOUND \u274C');\n console.log('[promptbar] sendBtn: ', sendBtn ?? 'NOT FOUND \u274C');\n console.log('[promptbar] barBorder: ', barBorder ?? 'NOT FOUND \u274C');\n console.log('[promptbar] textSlot: ', textSlot ?? 'NOT FOUND \u274C');\n console.log('[promptbar] gsap: ', gsap ? '\u2705' : 'NOT FOUND \u274C');\n\n if (!wordCount || !sendBtn || !barBorder || !textSlot || !gsap) {\n console.error('[promptbar] One or more dependencies missing. Aborting.');\n return;\n }\n\n console.log('[promptbar] All elements found \u2705 Starting loop...');\n\n let currentIndex: number = 0;\n let cancelled: boolean = false;\n\n // \u2500\u2500 Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n function updateWordCount(text: string): void {\n const words = text.trim().split(/\\s+/).filter(Boolean).length;\n wordCount.textContent = `${words || 0}/300 words`;\n }\n\n // \u2500\u2500 chroma element factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function makeChromaElement(text: string): HTMLDivElement {\n const div = document.createElement('div');\n div.className = 'chroma-text';\n div.setAttribute('data-animate', 'false');\n div.textContent = text;\n return div;\n }\n\n // \u2500\u2500 textIn \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function textIn(text: string): Promise<void> {\n console.log(`[promptbar] textIn \u2192 \"${text}\"`);\n return new Promise(resolve => {\n const tl = gsap.timeline({ defaults: { ease: 'power1.out' } });\n\n const existing = textSlot.querySelector('.chroma-text') as HTMLDivElement | null;\n if (existing) {\n tl.to(existing, {\n duration: 0.4,\n autoAlpha: 0,\n ease: 'power1.in',\n });\n tl.add(() => existing.remove());\n }\n\n let newEl: HTMLDivElement;\n\n tl.add(() => {\n newEl = makeChromaElement(text);\n textSlot.appendChild(newEl);\n newEl.setAttribute('data-animate', 'true');\n animateWordCount(text);\n console.log('[promptbar] chroma element appended');\n });\n\n tl.to(() => newEl, {\n duration: 0.6,\n autoAlpha: 1,\n });\n\n tl.add(() => {\n console.log('[promptbar] textIn done \u2705');\n resolve();\n });\n });\n }\n\n // \u2500\u2500 Animation steps \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n function triggerSendClick(): Promise<void> {\n console.log('[promptbar] triggerSendClick');\n return new Promise(resolve => {\n sendBtn.setAttribute('is-clicked', 'true');\n triggerSubmitLoader();\n setTimeout(() => {\n sendBtn.setAttribute('is-clicked', 'false');\n setTimeout(resolve, 250);\n }, 120);\n });\n }\n\n function triggerBorderAnimation(slider: any, slideIndex: number): Promise<void> {\n console.log('[promptbar] triggerBorderAnimation started, going to slide:', slideIndex);\n return new Promise(resolve => {\n barBorder.removeAttribute('is-animating');\n\n setTimeout(() => {\n barBorder.setAttribute('is-animating', 'true');\n\n const computedStyle = window.getComputedStyle(barBorder);\n console.log('[promptbar] animation-name:', computedStyle.animationName);\n console.log('[promptbar] animation-duration:', computedStyle.animationDuration);\n\n const fallback = setTimeout(() => {\n console.warn('[promptbar] animationend never fired \u2014 fallback \u26A0\uFE0F');\n barBorder.removeAttribute('is-animating');\n resolve();\n }, 4500);\n\n barBorder.addEventListener('animationend', () => {\n clearTimeout(fallback);\n barBorder.removeAttribute('is-animating');\n console.log('[promptbar] triggerBorderAnimation done \u2705');\n resolve();\n }, { once: true });\n\n }, 50);\n });\n }\n\n function animateWordCount(text: string): void {\n const target = text.trim().split(/\\s+/).filter(Boolean).length;\n const counter = { value: 0 };\n\n gsap.to(counter, {\n value: target,\n duration: 0.8,\n ease: 'power2.out',\n onUpdate: () => {\n wordCount.textContent = `${Math.round(counter.value)}/${300} words`;\n },\n onComplete: () => {\n wordCount.textContent = `${target}/300 words`;\n }\n });\n }\n\n function transitionSlides(slider: any, nextIndex: number): Promise<void> {\n return new Promise(resolve => {\n const currentSlide = slider.slides[slider.activeIndex];\n const currentImages = currentSlide.querySelectorAll('[prompt-slide-image]');\n\n const tl = gsap.timeline({ onComplete: resolve });\n\n tl.to(currentImages, {\n scale: 1.5,\n opacity: 0,\n filter: 'blur(16px)',\n duration: 1,\n ease: 'power2.in',\n stagger: 0.05,\n })\n .add(() => {\n slider.slideToLoop(nextIndex);\n\n requestAnimationFrame(() => {\n const newSlide = slider.slides[slider.activeIndex];\n const newImages = newSlide.querySelectorAll('[prompt-slide-image]');\n\n slider.slides.forEach((slide: HTMLElement) => {\n if (slide !== newSlide) {\n gsap.set(slide.querySelectorAll('[prompt-slide-image]'), {\n scale: 0.8, opacity: 0, filter: 'blur(12px)'\n });\n }\n });\n\n gsap.fromTo(newImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n onComplete: resolve\n }\n );\n });\n\n }, '-=0.25');\n });\n }\n\n // \u2500\u2500 Skeleton fade out \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function fadeOutSkeletons(slider: any): void {\n setTimeout(() => {\n const activeSlide = slider.slides[slider.activeIndex];\n const skeletons = activeSlide?.querySelectorAll('[prompt-skeleton]');\n skeletons?.forEach((skeleton: HTMLElement) => {\n const randomDelay = Math.random() * 1500;\n skeleton.style.transition = 'opacity 0.5s ease';\n skeleton.style.opacity = '1';\n setTimeout(() => {\n skeleton.style.opacity = '0';\n }, randomDelay);\n });\n }, 50);\n }\n\n // \u2500\u2500 Submit loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function triggerSubmitLoader(): void {\n if (!submitButtonLoading) return;\n submitButtonLoading.style.opacity = '1';\n setTimeout(() => {\n submitButtonLoading.style.opacity = '0';\n }, 2500);\n }\n\n // \u2500\u2500 Reveal initial slide (runs once on load) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n function revealInitialSlide(): void {\n requestAnimationFrame(() => {\n const firstSlide = imageSlider.slides[imageSlider.activeIndex];\n const firstImages = firstSlide.querySelectorAll('[prompt-slide-image]');\n gsap.fromTo(firstImages,\n { scale: 0.8, opacity: 0, filter: 'blur(12px)' },\n {\n scale: 1,\n opacity: 1,\n filter: 'blur(0px)',\n duration: 1,\n ease: 'power3.out',\n stagger: 0.07,\n }\n );\n });\n }\n\n // \u2500\u2500 Main loop \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n async function runLoop(): Promise<void> {\n while (true) {\n if (cancelled) return;\n\n const item = slides[currentIndex % slides.length];\n\n await textIn(item.prompt);\n\n currentIndex++;\n\n await sleep(100);\n triggerSendClick();\n triggerBorderAnimation(imageSlider, item.slide);\n\n await sleep(1500);\n await transitionSlides(imageSlider, item.slide);\n fadeOutSkeletons(imageSlider);\n\n await sleep(2000);\n }\n }\n\n // \u2500\u2500 Set initial state (iteration 0 already happened) \u2500\u2500\u2500\u2500\u2500\u2500\n\n const firstItem = slides[0];\n\n const initialEl = makeChromaElement(firstItem.prompt);\n textSlot.appendChild(initialEl);\n initialEl.setAttribute('data-animate', 'true');\n updateWordCount(firstItem.prompt);\n\n imageSlider.slideToLoop(firstItem.slide);\n revealInitialSlide();\n fadeOutSkeletons(imageSlider);\n\n currentIndex = 1;\n\n sleep(3000).then(() => runLoop());\n\n});"],
5
+ "mappings": "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",
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.88",
3
+ "version": "0.0.89",
4
4
  "description": "pulse website",
5
5
  "license": "license-of-your-project",
6
6
  "keywords": [],