konami-emoji-blast
Version:
Hooks up konami-code-js to trigger emoji-blast. 🎇
47 lines • 1.79 kB
JavaScript
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