From abe2caebf6001e078718478132c77e7c8724c386 Mon Sep 17 00:00:00 2001 From: Andrew Beal Date: Thu, 2 Oct 2025 22:56:22 +0100 Subject: [PATCH] Enhance ChatWindow and TopBar functionality with icon support and improved button accessibility --- Components/ChatWindow.svelte | 17 +++++++++++--- Components/TopBar.svelte | 44 ++++++++++++++++++++++++++++-------- Views/MainView.ts | 4 +++- styles.css | 6 ++--- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/Components/ChatWindow.svelte b/Components/ChatWindow.svelte index 2531ec8..9d600dd 100644 --- a/Components/ChatWindow.svelte +++ b/Components/ChatWindow.svelte @@ -7,6 +7,7 @@ import type { IAIClass } from "AIClasses/IAIClass"; import { tick } from "svelte"; import { ConversationFileSystemService } from "Services/ConversationFileSystemService"; + import { setIcon } from "obsidian"; let ai: IAIClass = Resolve(Services.IAIClass); let actioner: IActioner = Resolve(Services.IActioner); @@ -15,6 +16,7 @@ let semaphore: Semaphore = new Semaphore(1, false); let textareaElement: HTMLTextAreaElement; let chatContainer: HTMLDivElement; + let submitButton: HTMLButtonElement; let userRequest = ""; let isSubmitting = false; @@ -133,6 +135,10 @@ } }); } + + $: if (submitButton) { + setIcon(submitButton, 'send-horizontal'); + }
@@ -152,8 +158,12 @@ rows="1"> -
@@ -211,7 +221,8 @@ transition-duration: 0.25s; } - #submit:hover { + #submit:not(:disabled):hover { + cursor: pointer; background-color: var(--interactive-accent-hover); } \ No newline at end of file diff --git a/Components/TopBar.svelte b/Components/TopBar.svelte index ffa4dba..83f0149 100644 --- a/Components/TopBar.svelte +++ b/Components/TopBar.svelte @@ -2,7 +2,9 @@ import { Resolve } from '../Services/DependencyService'; import { Services } from '../Services/Services'; import type AIAgentPlugin from '../main'; - import { setIcon } from 'obsidian'; + import { setIcon, type WorkspaceLeaf } from 'obsidian'; + + export let leaf: WorkspaceLeaf; const plugin = Resolve(Services.AIAgentPlugin); @@ -13,20 +15,36 @@ plugin.app.setting.openTabById(plugin.manifest.id); } + function closePlugin() { + leaf.detach(); + } + let settingsButton: HTMLButtonElement; + let closeButton: HTMLButtonElement; $: if (settingsButton) { setIcon(settingsButton, 'settings'); } + $: if (closeButton) { + setIcon(closeButton, 'circle-x'); + }
+
@@ -47,22 +65,28 @@ grid-column: 2; display: grid; grid-template-rows: auto; - grid-template-columns: var(--size-4-2) auto 1fr var(--size-4-2); + grid-template-columns: var(--size-4-2) auto 1fr auto var(--size-4-2); background-color: var(--color-base-30); border-radius: var(--radius-m); } - .settings-button { - grid-row: 1; - grid-column: 2; - background: none; - border: none; + .top-bar-button { margin: var(--size-4-2) 0px var(--size-4-2) 0px; padding: var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-2); color: var(--text-muted); } - .settings-button:hover { + .top-bar-button:hover { background-color: var(--color-base-35); } + + #settings-button { + grid-row: 1; + grid-column: 2; + } + + #close-button { + grid-row: 1; + grid-column: 4; + } diff --git a/Views/MainView.ts b/Views/MainView.ts index 0568704..7f521c0 100644 --- a/Views/MainView.ts +++ b/Views/MainView.ts @@ -28,7 +28,9 @@ export class MainView extends ItemView { // Mount TopBar this.topBar = mount(TopBar, { target: container, - props: {} + props: { + leaf: this.leaf + } }); // Mount ChatWindow diff --git a/styles.css b/styles.css index 9660c26..8cb9fc7 100644 --- a/styles.css +++ b/styles.css @@ -22,9 +22,9 @@ var(--color-base-20), var(--color-base-20), var(--color-base-20), - var(--color-base-10), - var(--color-base-10), - var(--color-base-05) + var(--color-base-20), + var(--color-base-20), + var(--color-base-20) ); padding-top: 0; }