Initial release v1.0.0

This commit is contained in:
2026-05-24 21:27:01 -04:00
commit af45cc762c
22 changed files with 3629 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
import { Plugin } from "obsidian";
export enum RecordingStatus {
Idle = "idle",
Recording = "recording",
Paused = "paused",
Processing = "processing",
}
export class StatusBar {
plugin: Plugin;
statusBarItem: HTMLElement | null = null;
status: RecordingStatus = RecordingStatus.Idle;
private listeners: Array<(status: RecordingStatus) => void> = [];
constructor(plugin: Plugin) {
this.plugin = plugin;
this.statusBarItem = this.plugin.addStatusBarItem();
this.updateStatusBarItem();
}
onChange(listener: (status: RecordingStatus) => void): void {
this.listeners.push(listener);
}
offChange(listener: (status: RecordingStatus) => void): void {
this.listeners = this.listeners.filter((fn) => fn !== listener);
}
updateStatus(status: RecordingStatus) {
this.status = status;
this.updateStatusBarItem();
this.listeners.forEach((fn) => fn(status));
}
updateStatusBarItem() {
if (this.statusBarItem) {
switch (this.status) {
case RecordingStatus.Recording:
this.statusBarItem.textContent = "NibbleAI Recording...";
this.statusBarItem.style.color = "red";
break;
case RecordingStatus.Paused:
this.statusBarItem.textContent = "NibbleAI Paused";
this.statusBarItem.style.color = "yellow";
break;
case RecordingStatus.Processing:
this.statusBarItem.textContent = "NibbleAI Processing...";
this.statusBarItem.style.color = "gray";
break;
case RecordingStatus.Idle:
default:
this.statusBarItem.textContent = "NibbleAI Idle";
this.statusBarItem.style.color = "green";
break;
}
}
}
remove() {
if (this.statusBarItem) {
this.statusBarItem.remove();
}
}
}