poltrgeist 0.1.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/index.cjs +622 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +29 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +617 -0
- package/dist/index.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/random.ts","../src/utils/dom.ts","../src/engine.ts","../src/effects/explode.ts","../src/effects/shy.ts","../src/effects/yeet.ts","../src/effects/wobble.ts","../src/effects/ghost-image.ts","../src/effects/heartbeat.ts","../src/effects/cthulhu.ts","../src/effects/mirror.ts","../src/index.ts"],"names":["_a","_b","CSS","getTextNodes"],"mappings":"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","file":"index.cjs","sourcesContent":["export function roll(probability: number): boolean {\n return Math.random() < probability\n}\n\nexport function pickRandom<T>(arr: readonly T[]): T {\n return arr[Math.floor(Math.random() * arr.length)]\n}\n\nexport function randomBetween(min: number, max: number): number {\n return Math.random() * (max - min) + min\n}\n\nexport function randomIntBetween(min: number, max: number): number {\n return Math.floor(randomBetween(min, max + 1))\n}\n","const STYLE_ID = 'poltrgeist-styles'\n\nexport function injectStyle(css: string): () => void {\n let tag = document.getElementById(STYLE_ID) as HTMLStyleElement | null\n if (!tag) {\n tag = document.createElement('style')\n tag.id = STYLE_ID\n document.head.appendChild(tag)\n }\n const marker = `/* block-${Math.random().toString(36).slice(2)} */`\n tag.textContent += `\\n${marker}\\n${css}`\n return () => {\n if (!tag) return\n const text = tag.textContent ?? ''\n const idx = text.indexOf(marker)\n if (idx === -1) return\n const end = text.indexOf('/* block-', idx + marker.length)\n tag.textContent = text.slice(0, idx) + (end === -1 ? '' : text.slice(end))\n }\n}\n\nexport function cloneAtPosition(el: HTMLElement): HTMLElement {\n const rect = el.getBoundingClientRect()\n const clone = el.cloneNode(true) as HTMLElement\n clone.style.cssText = `\n position: fixed;\n top: ${rect.top}px;\n left: ${rect.left}px;\n width: ${rect.width}px;\n height: ${rect.height}px;\n margin: 0;\n pointer-events: none;\n z-index: 9999;\n `\n document.body.appendChild(clone)\n return clone\n}\n\n/** Wraps each character in el's text into a <span>. Returns unwrap function. */\nexport function wrapChars(el: HTMLElement): { spans: HTMLSpanElement[]; unwrap: () => void } {\n const original = el.innerHTML\n const text = el.textContent ?? ''\n const spans: HTMLSpanElement[] = []\n el.innerHTML = ''\n for (const ch of text) {\n const span = document.createElement('span')\n span.style.display = 'inline-block'\n span.textContent = ch === ' ' ? ' ' : ch\n spans.push(span)\n el.appendChild(span)\n }\n return {\n spans,\n unwrap: () => {\n el.innerHTML = original\n },\n }\n}\n\nexport function prefersReducedMotion(): boolean {\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false\n}\n","import { Effect, EffectName, HauntOptions } from './types'\nimport { roll, pickRandom } from './utils/random'\nimport { prefersReducedMotion } from './utils/dom'\n\nconst DEFAULT_PROBABILITY = 0.15\nconst DEFAULT_INTERVAL = { min: 8000, max: 30000 }\n\nexport class Engine {\n private cleanups: (() => void)[] = []\n private effects: Map<EffectName, Effect> = new Map()\n\n register(effect: Effect): void {\n this.effects.set(effect.name, effect)\n }\n\n haunt(options: HauntOptions = {}): void {\n if (options.respectReducedMotion !== false && prefersReducedMotion()) return\n\n const allowedEffects = options.effects\n ? options.effects.map((n) => this.effects.get(n)).filter(Boolean) as Effect[]\n : [...this.effects.values()]\n\n const images = options.images ?? []\n const interval = { ...DEFAULT_INTERVAL, ...(options.interval ?? {}) }\n\n const getProbability = (name: EffectName): number => {\n if (typeof options.probability === 'number') return options.probability\n return options.probability?.[name] ?? DEFAULT_PROBABILITY\n }\n\n for (const effect of allowedEffects) {\n if (effect.trigger === 'timer' || effect.trigger === 'dom-text') {\n this.scheduleEffect(effect, interval, images)\n continue\n }\n\n for (const selector of effect.defaultTargets) {\n document.querySelectorAll<HTMLElement>(selector).forEach((el) => {\n if (!roll(getProbability(effect.name))) return\n const cleanup = effect.attach(el, { images })\n this.cleanups.push(cleanup)\n })\n }\n }\n\n this.applyDataAttributes(options, images)\n }\n\n apply(\n target: HTMLElement | NodeListOf<HTMLElement> | string,\n effectName: EffectName,\n opts: { images?: string[] } = {},\n ): void {\n const effect = this.effects.get(effectName)\n if (!effect) throw new Error(`Unknown effect: \"${effectName}\"`)\n\n const elements: HTMLElement[] =\n typeof target === 'string'\n ? [...document.querySelectorAll<HTMLElement>(target)]\n : target instanceof NodeList\n ? [...target]\n : [target]\n\n for (const el of elements) {\n const cleanup = effect.attach(el, opts)\n this.cleanups.push(cleanup)\n }\n }\n\n release(): void {\n for (const fn of this.cleanups) fn()\n this.cleanups = []\n }\n\n private applyDataAttributes(options: HauntOptions, images: string[]): void {\n document.querySelectorAll<HTMLElement>('[data-poltrgeist]').forEach((el) => {\n const names = (el.dataset.poltrgeist ?? '').split(/\\s+/).filter(Boolean) as EffectName[]\n for (const name of names) {\n const effect = this.effects.get(name)\n if (!effect) continue\n if (options.effects && !options.effects.includes(name)) continue\n const cleanup = effect.attach(el, { images })\n this.cleanups.push(cleanup)\n }\n })\n }\n\n private scheduleEffect(effect: Effect, interval: { min: number; max: number }, images: string[]): void {\n let timer: ReturnType<typeof setTimeout>\n\n const run = () => {\n const candidates: HTMLElement[] = []\n for (const selector of effect.defaultTargets) {\n document.querySelectorAll<HTMLElement>(selector).forEach((el) => candidates.push(el))\n }\n if (candidates.length > 0) {\n const el = pickRandom(candidates)\n const cleanup = effect.attach(el, { images })\n this.cleanups.push(cleanup)\n }\n schedule()\n }\n\n const schedule = () => {\n const delay = Math.random() * (interval.max - interval.min) + interval.min\n timer = setTimeout(run, delay)\n }\n\n schedule()\n this.cleanups.push(() => clearTimeout(timer))\n }\n}\n","import { Effect } from '../types'\nimport { injectStyle } from '../utils/dom'\nimport { randomBetween, randomIntBetween } from '../utils/random'\n\nconst CSS = `\n@keyframes pg-particle {\n 0% { transform: translate(0,0) scale(1); opacity: 1; }\n 100% { transform: translate(var(--pg-dx), var(--pg-dy)) scale(0); opacity: 0; }\n}\n.pg-particle {\n position: fixed;\n border-radius: 50%;\n pointer-events: none;\n z-index: 9999;\n animation: pg-particle 0.6s ease-out forwards;\n}\n`\n\nconst COLORS = ['#ff6b6b', '#ffd93d', '#6bcb77', '#4d96ff', '#ff922b', '#da77f2']\n\nexport const explode: Effect = {\n name: 'explode',\n defaultTargets: ['button', '[role=\"button\"]', 'input[type=\"submit\"]', 'input[type=\"button\"]'],\n trigger: 'click',\n attach(el) {\n const removeStyle = injectStyle(CSS)\n\n const handler = (e: MouseEvent) => {\n const count = randomIntBetween(8, 16)\n const x = e.clientX\n const y = e.clientY\n\n for (let i = 0; i < count; i++) {\n const particle = document.createElement('div')\n particle.className = 'pg-particle'\n const size = randomBetween(4, 10)\n const angle = (Math.PI * 2 * i) / count + randomBetween(-0.3, 0.3)\n const dist = randomBetween(40, 100)\n particle.style.cssText = `\n left: ${x - size / 2}px;\n top: ${y - size / 2}px;\n width: ${size}px;\n height: ${size}px;\n background: ${COLORS[i % COLORS.length]};\n --pg-dx: ${Math.cos(angle) * dist}px;\n --pg-dy: ${Math.sin(angle) * dist}px;\n `\n document.body.appendChild(particle)\n particle.addEventListener('animationend', () => particle.remove(), { once: true })\n }\n }\n\n el.addEventListener('click', handler)\n return () => {\n el.removeEventListener('click', handler)\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { injectStyle } from '../utils/dom'\n\nconst CSS = `\n.pg-shy {\n transition: transform 0.15s ease-out !important;\n}\n`\n\nconst MAX_DRIFT = 14\n\nexport const shy: Effect = {\n name: 'shy',\n defaultTargets: ['button', '[role=\"button\"]', 'a'],\n trigger: 'hover',\n attach(el) {\n const removeStyle = injectStyle(CSS)\n el.classList.add('pg-shy')\n\n const onMove = (e: MouseEvent) => {\n const rect = el.getBoundingClientRect()\n const cx = rect.left + rect.width / 2\n const cy = rect.top + rect.height / 2\n const dx = e.clientX - cx\n const dy = e.clientY - cy\n const dist = Math.sqrt(dx * dx + dy * dy) || 1\n const factor = Math.min(MAX_DRIFT / dist, 1) * MAX_DRIFT\n el.style.transform = `translate(${(-dx / dist) * factor}px, ${(-dy / dist) * factor}px)`\n }\n\n const onLeave = () => {\n el.style.transform = ''\n }\n\n el.addEventListener('mousemove', onMove)\n el.addEventListener('mouseleave', onLeave)\n\n return () => {\n el.removeEventListener('mousemove', onMove)\n el.removeEventListener('mouseleave', onLeave)\n el.classList.remove('pg-shy')\n el.style.transform = ''\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { injectStyle, cloneAtPosition } from '../utils/dom'\nimport { randomBetween } from '../utils/random'\n\nconst CSS = `\n@keyframes pg-yeet {\n 0% { transform: translate(0,0) rotate(0deg) scale(1); opacity: 1; }\n 100% { transform: translate(var(--pg-ydx), var(--pg-ydy)) rotate(var(--pg-yrot)) scale(0.2); opacity: 0; }\n}\n.pg-yeet-clone {\n animation: pg-yeet 0.7s cubic-bezier(0.2, 0, 0.8, 1) forwards;\n}\n`\n\nexport const yeet: Effect = {\n name: 'yeet',\n defaultTargets: ['button', '[role=\"button\"]'],\n trigger: 'click',\n attach(el) {\n const removeStyle = injectStyle(CSS)\n\n const handler = () => {\n const clone = cloneAtPosition(el)\n const angle = randomBetween(-Math.PI / 3, -Math.PI * 2 / 3)\n const dist = randomBetween(400, 900)\n clone.style.setProperty('--pg-ydx', `${Math.cos(angle) * dist}px`)\n clone.style.setProperty('--pg-ydy', `${Math.sin(angle) * dist}px`)\n clone.style.setProperty('--pg-yrot', `${randomBetween(-720, 720)}deg`)\n clone.classList.add('pg-yeet-clone')\n\n el.style.visibility = 'hidden'\n clone.addEventListener('animationend', () => {\n clone.remove()\n el.style.visibility = ''\n }, { once: true })\n }\n\n el.addEventListener('click', handler)\n return () => {\n el.removeEventListener('click', handler)\n el.style.visibility = ''\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { injectStyle, wrapChars } from '../utils/dom'\nimport { randomBetween } from '../utils/random'\n\nconst CSS = `\n@keyframes pg-wobble-char {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(var(--pg-wobble-y)); }\n}\n.pg-wobble-char {\n animation: pg-wobble-char 0.4s ease-in-out forwards;\n animation-delay: var(--pg-wobble-delay);\n}\n`\n\nexport const wobble: Effect = {\n name: 'wobble',\n defaultTargets: ['h1', 'h2', 'h3', 'h4', 'label', 'p'],\n trigger: 'timer',\n attach(el) {\n const removeStyle = injectStyle(CSS)\n let cancelled = false\n\n if ((el as HTMLElement & { _pgWobbling?: boolean })._pgWobbling) {\n removeStyle()\n return removeStyle\n }\n ;(el as HTMLElement & { _pgWobbling?: boolean })._pgWobbling = true\n\n const { spans, unwrap } = wrapChars(el)\n spans.forEach((span, i) => {\n span.style.setProperty('--pg-wobble-y', `${randomBetween(-5, 5)}px`)\n span.style.setProperty('--pg-wobble-delay', `${i * 30}ms`)\n span.classList.add('pg-wobble-char')\n })\n\n const duration = 400 + spans.length * 30 + 200\n let done = false\n const restore = () => {\n if (done) return\n done = true\n unwrap()\n ;(el as HTMLElement & { _pgWobbling?: boolean })._pgWobbling = false\n }\n const timer = setTimeout(() => {\n if (!cancelled) restore()\n }, duration)\n\n return () => {\n cancelled = true\n clearTimeout(timer)\n restore()\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { injectStyle } from '../utils/dom'\nimport { pickRandom, randomBetween } from '../utils/random'\n\nconst CSS = `\n@keyframes pg-ghost-drift {\n 0% { opacity: 0; }\n 20% { opacity: var(--pg-ghost-opacity); }\n 80% { opacity: var(--pg-ghost-opacity); }\n 100% { opacity: 0; }\n}\n.pg-ghost-image {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n animation: pg-ghost-drift var(--pg-ghost-dur) ease-in-out forwards;\n filter: blur(1px) grayscale(0.4);\n max-width: 220px;\n max-height: 220px;\n object-fit: contain;\n}\n`\n\nconst EDGES = ['top', 'bottom', 'left', 'right'] as const\ntype Edge = (typeof EDGES)[number]\n\nconst FALLBACK_IMAGES = [\n 'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 80\"><path d=\"M32 0 C14 0 4 14 4 32 L4 56 L12 48 L20 56 L28 48 L36 56 L44 48 L52 56 L60 48 L60 32 C60 14 50 0 32 0Z\" fill=\"%23888\"/><circle cx=\"22\" cy=\"28\" r=\"5\" fill=\"%23fff\"/><circle cx=\"42\" cy=\"28\" r=\"5\" fill=\"%23fff\"/></svg>',\n]\n\nexport const ghostImage: Effect = {\n name: 'ghost-image',\n defaultTargets: ['body'],\n trigger: 'timer',\n attach(_el, opts) {\n const removeStyle = injectStyle(CSS)\n const images = opts?.images?.length ? opts.images : FALLBACK_IMAGES\n const src = pickRandom(images)\n const edge: Edge = pickRandom(EDGES)\n const img = document.createElement('img')\n img.className = 'pg-ghost-image'\n img.src = src\n img.alt = ''\n img.setAttribute('aria-hidden', 'true')\n\n const vw = window.innerWidth\n const vh = window.innerHeight\n const dur = randomBetween(4, 8)\n const opacity = randomBetween(0.06, 0.14)\n const size = randomBetween(80, 200)\n\n img.style.setProperty('--pg-ghost-opacity', String(opacity))\n img.style.setProperty('--pg-ghost-dur', `${dur}s`)\n img.style.width = `${size}px`\n\n const pos = randomBetween(0.1, 0.9)\n const drift = randomBetween(30, 70)\n\n if (edge === 'top') {\n img.style.left = `${vw * pos}px`\n img.style.top = `-${size}px`\n img.style.transform = `translateY(${drift}px)`\n } else if (edge === 'bottom') {\n img.style.left = `${vw * pos}px`\n img.style.bottom = `-${size}px`\n img.style.transform = `translateY(-${drift}px)`\n } else if (edge === 'left') {\n img.style.top = `${vh * pos}px`\n img.style.left = `-${size}px`\n img.style.transform = `translateX(${drift}px)`\n } else {\n img.style.top = `${vh * pos}px`\n img.style.right = `-${size}px`\n img.style.transform = `translateX(-${drift}px)`\n }\n\n document.body.appendChild(img)\n img.addEventListener('animationend', () => img.remove(), { once: true })\n\n return () => {\n img.remove()\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { injectStyle } from '../utils/dom'\nimport { randomBetween } from '../utils/random'\n\nconst CSS = `\n@keyframes pg-heartbeat {\n 0% { box-shadow: inset 0 0 0px 0px rgba(180,0,0,0); }\n 15% { box-shadow: inset 0 0 60px 20px rgba(180,0,0,0.18); }\n 30% { box-shadow: inset 0 0 20px 5px rgba(180,0,0,0.08); }\n 50% { box-shadow: inset 0 0 80px 30px rgba(180,0,0,0.22); }\n 100% { box-shadow: inset 0 0 0px 0px rgba(180,0,0,0); }\n}\n.pg-heartbeat-overlay {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 9998;\n animation: pg-heartbeat var(--pg-hb-dur) ease-in-out forwards;\n}\n`\n\nexport const heartbeat: Effect = {\n name: 'heartbeat',\n defaultTargets: ['body'],\n trigger: 'timer',\n attach() {\n const removeStyle = injectStyle(CSS)\n const overlay = document.createElement('div')\n overlay.className = 'pg-heartbeat-overlay'\n const dur = randomBetween(1.5, 3)\n overlay.style.setProperty('--pg-hb-dur', `${dur}s`)\n document.body.appendChild(overlay)\n overlay.addEventListener('animationend', () => overlay.remove(), { once: true })\n return () => {\n overlay.remove()\n removeStyle()\n }\n },\n}\n","import { Effect } from '../types'\nimport { pickRandom, randomBetween } from '../utils/random'\n\nconst WORDS = [\n \"Ph'nglui\", \"mglw'nafh\", \"Cthulhu\", \"R'lyeh\", \"wgah'nagl\", \"fhtagn\",\n \"Azathoth\", \"Nyarlathotep\", \"Shoggoth\", \"Yogg-Sothoth\", \"Dagon\", \"Ia\", \"Iä\",\n \"Nug\", \"Yeb\", \"Tsathoggua\", \"Yog-Sothoth\", \"Hastur\", \"Shub-Niggurath\",\n \"cyclopean\", \"eldritch\", \"gibbous\", \"ululating\", \"nameless\", \"nigh\",\n]\n\nfunction getTextNodes(el: HTMLElement): Text[] {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, {\n acceptNode: (node) =>\n (node.textContent?.trim().length ?? 0) > 0\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT,\n })\n const nodes: Text[] = []\n let n: Node | null\n while ((n = walker.nextNode())) nodes.push(n as Text)\n return nodes\n}\n\nexport const cthulhu: Effect = {\n name: 'cthulhu',\n defaultTargets: ['p', 'li', 'h1', 'h2', 'h3', 'span', 'label'],\n trigger: 'dom-text',\n attach(el) {\n const nodes = getTextNodes(el)\n if (!nodes.length) return () => {}\n\n const node = pickRandom(nodes)\n const original = node.textContent ?? ''\n const words = original.split(/(\\s+)/)\n const realWords = words.map((w, i) => ({ i, isWord: /\\S/.test(w) })).filter((x) => x.isWord)\n if (!realWords.length) return () => {}\n\n const target = pickRandom(realWords)\n const replacement = pickRandom(WORDS)\n words[target.i] = replacement\n node.textContent = words.join('')\n\n const dur = randomBetween(4000, 8000)\n const timer = setTimeout(() => {\n node.textContent = original\n }, dur)\n\n return () => {\n clearTimeout(timer)\n node.textContent = original\n }\n },\n}\n","import { Effect } from '../types'\nimport { pickRandom, randomBetween } from '../utils/random'\n\nfunction getTextNodes(el: HTMLElement): Text[] {\n const walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, {\n acceptNode: (node) =>\n (node.textContent?.trim().length ?? 0) > 3\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT,\n })\n const nodes: Text[] = []\n let n: Node | null\n while ((n = walker.nextNode())) nodes.push(n as Text)\n return nodes\n}\n\nexport const mirror: Effect = {\n name: 'mirror',\n defaultTargets: ['p', 'li', 'h1', 'h2', 'h3', 'span', 'label'],\n trigger: 'dom-text',\n attach(el) {\n const nodes = getTextNodes(el)\n if (!nodes.length) return () => {}\n\n const node = pickRandom(nodes)\n const original = node.textContent ?? ''\n const words = original.split(/(\\s+)/)\n const realWords = words.map((w, i) => ({ i, isWord: /\\S{4,}/.test(w) })).filter((x) => x.isWord)\n if (!realWords.length) return () => {}\n\n const target = pickRandom(realWords)\n const word = words[target.i]\n\n const span = document.createElement('span')\n span.style.cssText = 'display:inline-block; transform:scaleX(-1);'\n span.textContent = word\n\n const parts = original.split(word)\n const before = document.createTextNode(parts[0])\n const after = document.createTextNode(parts.slice(1).join(word))\n\n node.replaceWith(before, span, after)\n\n const dur = randomBetween(3000, 6000)\n const timer = setTimeout(() => {\n const restored = document.createTextNode(original)\n before.replaceWith(restored)\n span.remove()\n after.remove()\n }, dur)\n\n return () => {\n clearTimeout(timer)\n try {\n const restored = document.createTextNode(original)\n before.replaceWith(restored)\n span.remove()\n after.remove()\n } catch {\n // nodes may already be gone\n }\n }\n },\n}\n","import { Engine } from './engine'\nimport { HauntOptions, EffectName } from './types'\nimport { explode } from './effects/explode'\nimport { shy } from './effects/shy'\nimport { yeet } from './effects/yeet'\nimport { wobble } from './effects/wobble'\nimport { ghostImage } from './effects/ghost-image'\nimport { heartbeat } from './effects/heartbeat'\nimport { cthulhu } from './effects/cthulhu'\nimport { mirror } from './effects/mirror'\n\nexport type { EffectName, HauntOptions, EffectOptions } from './types'\n\nconst engine = new Engine()\nengine.register(explode)\nengine.register(shy)\nengine.register(yeet)\nengine.register(wobble)\nengine.register(ghostImage)\nengine.register(heartbeat)\nengine.register(cthulhu)\nengine.register(mirror)\n\nexport const poltrgeist = {\n haunt: (options?: HauntOptions) => engine.haunt(options),\n apply: (\n target: HTMLElement | NodeListOf<HTMLElement> | string,\n effect: EffectName,\n opts?: { images?: string[] },\n ) => engine.apply(target, effect, opts),\n release: () => engine.release(),\n}\n\nexport default poltrgeist\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
type EffectName = 'explode' | 'shy' | 'ghost-image' | 'wobble' | 'yeet' | 'heartbeat' | 'cthulhu' | 'mirror';
|
|
2
|
+
interface EffectOptions {
|
|
3
|
+
images?: string[];
|
|
4
|
+
}
|
|
5
|
+
interface HauntOptions {
|
|
6
|
+
/** 0–1 chance any eligible element gets a given effect. Can be per-effect. Default: 0.15 */
|
|
7
|
+
probability?: number | Partial<Record<EffectName, number>>;
|
|
8
|
+
/** Allowlist of effects to enable. Defaults to all. */
|
|
9
|
+
effects?: EffectName[];
|
|
10
|
+
/** Custom image URLs for the ghost-image effect */
|
|
11
|
+
images?: string[];
|
|
12
|
+
/** Honour prefers-reduced-motion. Default: true */
|
|
13
|
+
respectReducedMotion?: boolean;
|
|
14
|
+
/** Timing range for timer-based effects (ms) */
|
|
15
|
+
interval?: {
|
|
16
|
+
min: number;
|
|
17
|
+
max: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const poltrgeist: {
|
|
22
|
+
haunt: (options?: HauntOptions) => void;
|
|
23
|
+
apply: (target: HTMLElement | NodeListOf<HTMLElement> | string, effect: EffectName, opts?: {
|
|
24
|
+
images?: string[];
|
|
25
|
+
}) => void;
|
|
26
|
+
release: () => void;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type EffectName, type EffectOptions, type HauntOptions, poltrgeist as default, poltrgeist };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
type EffectName = 'explode' | 'shy' | 'ghost-image' | 'wobble' | 'yeet' | 'heartbeat' | 'cthulhu' | 'mirror';
|
|
2
|
+
interface EffectOptions {
|
|
3
|
+
images?: string[];
|
|
4
|
+
}
|
|
5
|
+
interface HauntOptions {
|
|
6
|
+
/** 0–1 chance any eligible element gets a given effect. Can be per-effect. Default: 0.15 */
|
|
7
|
+
probability?: number | Partial<Record<EffectName, number>>;
|
|
8
|
+
/** Allowlist of effects to enable. Defaults to all. */
|
|
9
|
+
effects?: EffectName[];
|
|
10
|
+
/** Custom image URLs for the ghost-image effect */
|
|
11
|
+
images?: string[];
|
|
12
|
+
/** Honour prefers-reduced-motion. Default: true */
|
|
13
|
+
respectReducedMotion?: boolean;
|
|
14
|
+
/** Timing range for timer-based effects (ms) */
|
|
15
|
+
interval?: {
|
|
16
|
+
min: number;
|
|
17
|
+
max: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const poltrgeist: {
|
|
22
|
+
haunt: (options?: HauntOptions) => void;
|
|
23
|
+
apply: (target: HTMLElement | NodeListOf<HTMLElement> | string, effect: EffectName, opts?: {
|
|
24
|
+
images?: string[];
|
|
25
|
+
}) => void;
|
|
26
|
+
release: () => void;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { type EffectName, type EffectOptions, type HauntOptions, poltrgeist as default, poltrgeist };
|