Skip to content

Random Font

This will randomize the secondary font (Expression, Sentence, etc.).

js
/**
 * @import { KikuPlugin } from "#/plugins/plugin-types";
 */

/**
 * @type { KikuPlugin }
 */
export const plugin = {
  onPluginLoad: ({ ctx }) => {
    const { $general } = ctx.useGeneralContext();
    const root = $general.root;
    const layout = $general.layoutRef;
    const fontsPool = [
      "'Hiragino Mincho ProN', serif",
      "'Noto Serif CJK JP', serif",
      "'Yu Mincho', serif",
      "'HanaMinA', 'HanaMinB', serif",
      "'Noto Sans CJK JP', sans-serif",
      "'Rounded Mplus 1c', sans-serif",
    ];

    const randomFont = fontsPool[Math.floor(Math.random() * fontsPool.length)];

    const { $initialSide } = ctx.useCardContext();
    let font = sessionStorage.getItem("random-font") ?? randomFont;
    if ($initialSide() === "front") {
      font = randomFont;
      sessionStorage.setItem("random-font", font);
    }

    if (layout) layout.style.setProperty("--font-secondary", font);

    // wait until the font is loaded
    document.fonts.onloadingdone = () => {
      if (root) root.dataset.hideSecondary = "false";
    };
    // safe guard when fonts.onloadingdone event fails
    const delay = 100; // ms
    setTimeout(() => {
      if (root) root.dataset.hideSecondary = "false";
    }, delay);
  },
};
css
.font-secondary {
  visibility: hidden;
}

[data-hide-secondary="false"] .font-secondary {
  visibility: visible;
}