fix ascii, add quotes, fix reduced motion toggle

This commit is contained in:
bucknatt 2026-06-17 17:04:10 +02:00
parent 55e0f0fbbe
commit 41e6d09263
5 changed files with 54 additions and 39 deletions

View file

@ -4,52 +4,52 @@ import type { MikuAsciiArtPreset } from "./settings";
export const ASCII_PRESETS = {
minimal: [
" * ",
" / \\ ",
" * ",
" / \\ ",
" ( @ @ ) ",
" \\ ~ / ",
" ~~| |~~ ",
" twin tails vibe "
" welcome to wonderland "
].join("\n"),
panel: [
" .^. * synth garden *",
" twin tail .^. * miku miku *",
" / \\",
" ~ /~~~~~\\ ~",
" ( o o ) teal + pink sparks",
" ( o o ) cyan + pink sparks",
" \\~~~~~/ ",
" ~/ \\~ ",
" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~",
" keep your tempo; let ideas sing!"
" track your goals - let ideas sing!"
].join("\n"),
/** Eighth-notes and staff-ish lines */
notes: [
" |'| |'| |'|",
" | |___| |___| |",
" |'| |'| |' |",
" | |___| |___| |",
" \\ * * * /",
" \\___~___~/ ~your melody~",
" \\____~____~/ ~your melody~",
" | |",
" ~~~ ~~~"
].join("\n"),
/** Spotlight / live feel */
stage: [
" .---.---.",
" / o o \\",
" ..--- .---..",
" / o o \\",
" | ^ | your song",
" |____ / \\ ____|",
" \\ lights /",
" \\________/",
" ~ sing on ~"
" \\ lights /",
" \\_________/",
" ~ sing on ~"
].join("\n"),
/** Waves + open sea motif */
waves: [
" ~^~^~^~^~^~^~^~^~^~^~^~",
" ~^~^~^~^~^~^~^~^~^~^~^~",
" ^ /\\ /\\ /\\ /\\ /\\ ^",
"^ ~(__)(__)(__)(__)(__)~ ^",
" ^ ~ endless melody ~ ^",
" ^ ~ endless melody ~ ^",
" ~^~^~^~^~^~^~^~^~^~^~^~"
].join("\n"),
@ -60,23 +60,23 @@ export const ASCII_PRESETS = {
" *--- ( o_o ) ---*",
" / /|\\ \\",
" * / | \\ *",
" ~ glow and go ~"
" ~ glow and go ~"
].join("\n"),
/** Ribbon / bow abstract */
ribbon: [
" .--. .--.",
" / \\ / \\",
" ( ^@^ --- ^@^ )",
" \\ / \\ / \\ / /",
" ( ^@^ --- ^@^ )",
" \\ / \\ / \\ / /",
" ~~/ ~^~ \\~~",
" ~ tie notes ~"
" ~ tie is my bow ~"
].join("\n"),
/** Fits compact dashboard toggle */
micro: [
" (*^~^*) hybrid mode",
" /|\\",
" (*^~^*) sparkling mode",
" /|\\",
" ~ melody in every line ~"
].join("\n"),

View file

@ -73,6 +73,7 @@ export default class MikuPlugin extends Plugin implements MikuPluginHost {
const loaded = (await this.loadData()) as Partial<MikuPluginSettings> | null;
this.settings = { ...DEFAULT_SETTINGS, ...(loaded ?? {}) };
this.settings.asciiArtPreset = normalizeAsciiArtPreset(this.settings.asciiArtPreset);
this.settings.quoteIntervalSeconds = Math.max(5, this.settings.quoteIntervalSeconds);
}
private async cycleTheme(): Promise<void> {

View file

@ -99,7 +99,7 @@ export class MikuSettingTab extends PluginSettingTab {
new Setting(containerEl)
.setName("Quote interval (seconds)")
.addSlider((slider: SliderComponent) => {
slider.setLimits(10, 120, 5);
slider.setLimits(5, 120, 5);
slider.setValue(this.plugin.settings.quoteIntervalSeconds);
slider.setDynamicTooltip();
slider.onChange((value: number) => {

View file

@ -18,22 +18,20 @@ const MODE_BLURB: Record<MikuThemeMode, string> = {
};
const QUOTES = [
"Nice to meet you. I'm Hatsune Miku.",
"Even if I'm just a program, I want to reach your heart with my song.",
"Even if the colors of the world fade, my melody will stay vibrant.",
"I'm the one who will sing the feelings you can't put into words.",
"0 and 1... that's all I am, but those numbers can create infinite dreams.",
"I'll keep singing, even if my voice becomes a mere echo in the digital void.",
"My voice is yours to use. Where shall we go today?",
"Let's sing together! Your feelings and my voice will create a new world.",
"Connecting the world through music—that is my mission.",
"The future is a blank score, and we're the ones writing the notes.",
"I was born to sing for you.",
"Music has no borders, and neither do I.",
"Welcome to the Wonderland. This is a place born from your true feelings.",
"Keep your notes in sync with your rhythm.",
"Keep your goals in sync with your rhythm.",
"Small progress every day beats a single perfect burst.",
"Organize ideas like a setlist before the show."
"Organize ideas like a setlist before the show.",
"Let your code compile to the tempo of cyan and pink.",
"The future is a blank score — you write the notes.",
"Connecting the world through music — one commit at a time.",
"0 and 1 can still dream in cyan.",
"Even if colors fade, keep your melody vibrant.",
"Twin tails of ideas — branch and merge with style.",
"Welcome to the wonderland of frost, neon, and stage lights.",
"Sing your refactor into existence.",
"39 lines changed? Make them count.",
"Hydrate, stretch, then ship the chorus.",
"Your IDE is the stage: the theme is the lights."
];
interface ManagedWidget {
@ -185,7 +183,7 @@ class QuoteWidget implements ManagedWidget {
}
this.stopRotation();
const intervalMs = Math.max(10, settings.quoteIntervalSeconds) * 1000;
const intervalMs = Math.max(5, settings.quoteIntervalSeconds) * 1000;
this.timer = window.setInterval(() => {
this.quoteIndex += 1;
if (this.element) {

View file

@ -369,6 +369,22 @@
}
}
/* Honor plugin-level reduced motion toggle for widget animations/transitions. */
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-eq-bar {
animation: none;
}
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-profile-card,
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-top-banner,
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-quote-widget {
transition: none;
}
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-profile-card:hover,
body.miku-plugin-enabled[data-miku-reduced-motion="true"] .miku-profile-card:active {
transform: none;
}
/* Original ASCII motifs — bundled theme supplies --miku-* when plugin is enabled */
.miku-ascii {
margin: 0 0 0.75rem;