UNPKG

konami-emoji-blast

Version:

Hooks up konami-code-js to trigger emoji-blast. 🎇

47 lines 1.79 kB
import { emojiBlasts, } from "emoji-blast"; // https://github.com/JoshuaKGoldberg/emoji-blast/issues/822#issuecomment-2532742672 // @ts-expect-error -- Working around CJS/ESM default interop import * as KonamiCodeJS from "konami-code-js"; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const KonamiCode = // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any KonamiCodeJS.default ?? KonamiCodeJS; /** * Initializes the Konami code listener to trigger emoji blasts. * @param optionsOrOnActivated Either a callback triggered on activation, * or full options bag. * @returns A cleanup function to disable the listener and cancel active explosions. * @example * // callback * const stop = initializeKonamiEmojiBlast(() => console.log("Activated!")); * * // options bag * const stop = initializeKonamiEmojiBlast({ * onKonamiCodeActivated: () => console.log("Activated!"), * emojiBlastSettings: { emojis: ["🐙", "✨"] } * }); */ export const initializeKonamiEmojiBlast = (optionsOrOnActivated) => { const { emojiBlastSettings, onKonamiCodeActivated } = typeof optionsOrOnActivated === "function" ? { emojiBlastSettings: undefined, onKonamiCodeActivated: optionsOrOnActivated, } : (optionsOrOnActivated ?? {}); let explosions; const konamiCode = new KonamiCode(() => { if (explosions) { explosions.cancel(); explosions = undefined; } else { explosions = emojiBlasts(emojiBlastSettings); onKonamiCodeActivated?.(); } }); return () => { explosions?.cancel(); konamiCode.disable(); }; }; //# sourceMappingURL=initializeKonamiEmojiBlast.js.map