diff --git a/obsidian-miku-plugin/src/ascii-art.ts b/obsidian-miku-plugin/src/ascii-art.ts index 1446c66..4e60b05 100644 --- a/obsidian-miku-plugin/src/ascii-art.ts +++ b/obsidian-miku-plugin/src/ascii-art.ts @@ -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"), diff --git a/obsidian-miku-plugin/src/main.ts b/obsidian-miku-plugin/src/main.ts index be67d01..b573370 100644 --- a/obsidian-miku-plugin/src/main.ts +++ b/obsidian-miku-plugin/src/main.ts @@ -73,6 +73,7 @@ export default class MikuPlugin extends Plugin implements MikuPluginHost { const loaded = (await this.loadData()) as Partial | 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 { diff --git a/obsidian-miku-plugin/src/settings-tab.ts b/obsidian-miku-plugin/src/settings-tab.ts index a685aa4..a9a6a51 100644 --- a/obsidian-miku-plugin/src/settings-tab.ts +++ b/obsidian-miku-plugin/src/settings-tab.ts @@ -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) => { diff --git a/obsidian-miku-plugin/src/widgets.ts b/obsidian-miku-plugin/src/widgets.ts index 7f36c62..a38865f 100644 --- a/obsidian-miku-plugin/src/widgets.ts +++ b/obsidian-miku-plugin/src/widgets.ts @@ -18,22 +18,20 @@ const MODE_BLURB: Record = { }; 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) { diff --git a/obsidian-miku-plugin/styles.widgets.css b/obsidian-miku-plugin/styles.widgets.css index 7e2e7a0..5070a5f 100644 --- a/obsidian-miku-plugin/styles.widgets.css +++ b/obsidian-miku-plugin/styles.widgets.css @@ -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;