Files
obsidian_ollama/styles.css
T
fegger d330b94816 Add stop button to cancel in-flight requests
Swap the Send button for a Stop button while a response is streaming, letting users abort the current operation cleanly.
Cancelled requests now display "Stopped." instead of an error message.

Also includes two smaller fixes: preserve the original assistant text and full tool_calls array when executing write
tools for follow-up context, and add 'research' to agentic modes.
2026-05-21 18:30:43 +02:00

528 lines
12 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:root {
--ollama-user-bg: var(--background-modifier-form-field);
--ollama-assistant-bg: var(--background-primary-alt);
--ollama-border: var(--background-modifier-border);
--ollama-radius: var(--radius-m);
--ollama-gap: var(--size-4-2);
--ollama-log-debug: var(--text-muted);
--ollama-log-info: var(--text-accent);
--ollama-log-warn: var(--text-warning);
--ollama-log-error: var(--text-error);
--ollama-log-bg: var(--background-primary-alt);
}
/* Root chat view layout: flex column with input locked at bottom */
.ollama-chat-view-content {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
}
.ollama-new-chat-container {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
align-items: center;
gap: var(--size-4-1);
padding: var(--size-4-1) var(--size-4-2);
flex-shrink: 0;
}
.ollama-chat-container {
display: flex;
flex-direction: column;
gap: var(--ollama-gap);
padding: var(--size-4-2);
overflow-y: auto;
flex: 1 1 auto;
min-height: 0;
user-select: text;
-webkit-user-select: text;
}
.ollama-input-container {
display: flex;
gap: var(--size-4-1);
padding: var(--size-4-2);
border-top: 1px solid var(--ollama-border);
background-color: var(--background-primary);
align-items: flex-end;
flex-shrink: 0;
}
.ollama-message {
display: flex;
flex-direction: column;
gap: var(--size-4-1);
padding: var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
max-width: 90%;
user-select: text;
-webkit-user-select: text;
}
.ollama-message-user {
align-self: flex-end;
background-color: var(--ollama-user-bg);
}
.ollama-message-assistant {
align-self: flex-start;
background-color: var(--ollama-assistant-bg);
}
.ollama-message-header {
display: flex;
align-items: center;
gap: var(--size-4-1);
font-size: var(--font-smallest);
font-weight: var(--font-semibold);
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--text-muted);
}
.ollama-message-role::before {
display: inline-block;
width: 1em;
height: 1em;
margin-right: var(--size-4-1);
vertical-align: middle;
}
.ollama-message-user .ollama-message-role::before {
content: '👤';
}
.ollama-message-assistant .ollama-message-role::before {
content: '🤖';
}
.ollama-message-content {
line-height: var(--line-height-normal);
white-space: pre-wrap;
word-break: break-word;
user-select: text;
-webkit-user-select: text;
}
.ollama-new-chat-container {
display: flex;
justify-content: flex-end;
padding: var(--size-4-1) var(--size-4-2);
}
.ollama-new-chat-button {
display: inline-flex;
align-items: center;
gap: var(--size-4-1);
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-smallest);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
cursor: pointer;
transition: background-color 0.15s ease;
}
.ollama-new-chat-button:hover {
background-color: var(--background-modifier-hover);
}
.ollama-new-chat-button::before {
content: '';
}
.ollama-input {
flex: 1;
min-height: 4rem;
max-height: 12rem;
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
resize: vertical;
font-family: inherit;
font-size: var(--font-ui-small);
line-height: var(--line-height-normal);
}
.ollama-input:focus {
outline: none;
border-color: var(--interactive-accent);
box-shadow: 0 0 0 2px var(--interactive-accent-translucent);
}
.ollama-send-button {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--size-4-1) var(--size-4-3);
border-radius: var(--ollama-radius);
border: none;
background-color: var(--interactive-accent);
color: var(--text-on-accent);
font-weight: var(--font-semibold);
font-size: var(--font-ui-small);
cursor: pointer;
transition: filter 0.15s ease;
white-space: nowrap;
}
.ollama-send-button:hover {
filter: brightness(1.1);
}
.ollama-send-button:active {
filter: brightness(0.95);
}
/* Stop button */
.ollama-stop-button {
display: none;
align-items: center;
justify-content: center;
padding: var(--size-4-1) var(--size-4-3);
border-radius: var(--ollama-radius);
border: none;
background-color: var(--text-error);
color: var(--text-on-accent);
font-weight: var(--font-semibold);
font-size: var(--font-ui-small);
cursor: pointer;
transition: filter 0.15s ease;
white-space: nowrap;
}
.ollama-stop-button:hover {
filter: brightness(1.1);
}
.ollama-stop-button:active {
filter: brightness(0.95);
}
/* Thinking indicator */
.ollama-thinking-indicator {
display: inline-flex;
align-items: center;
gap: var(--size-4-1);
font-style: italic;
color: var(--text-muted);
}
.ollama-thinking-indicator::before {
content: '';
display: inline-block;
width: 0.9em;
height: 0.9em;
border: 2px solid var(--text-muted);
border-top-color: transparent;
border-radius: 50%;
animation: ollama-spin 1s linear infinite;
}
@keyframes ollama-spin {
to {
transform: rotate(360deg);
}
}
/* Proposed Actions Preview */
.ollama-proposed-actions {
margin-top: var(--size-4-2);
padding: var(--size-4-2);
border: 1px solid var(--ollama-border);
border-radius: var(--ollama-radius);
background-color: var(--background-primary);
}
.ollama-proposed-actions-header {
font-weight: var(--font-semibold);
font-size: var(--font-ui-small);
margin-bottom: var(--size-4-2);
color: var(--text-normal);
}
.ollama-proposed-action {
margin-bottom: var(--size-4-2);
padding: var(--size-4-1);
border: 1px solid var(--ollama-border);
border-radius: var(--ollama-radius);
background-color: var(--background-primary-alt);
}
.ollama-action-description {
font-weight: var(--font-medium);
font-size: var(--font-ui-small);
margin-bottom: var(--size-4-1);
color: var(--text-normal);
}
.ollama-action-diff {
display: flex;
flex-direction: column;
gap: var(--size-4-1);
}
.ollama-diff-before,
.ollama-diff-after {
margin: 0;
padding: var(--size-4-1);
border-radius: var(--ollama-radius);
font-size: var(--font-smallest);
font-family: var(--font-monospace);
white-space: pre-wrap;
word-break: break-word;
max-height: 8rem;
overflow-y: auto;
}
.ollama-diff-before {
background-color: var(--background-modifier-error);
color: var(--text-normal);
}
.ollama-diff-after {
background-color: var(--background-modifier-success);
color: var(--text-normal);
}
.ollama-action-buttons {
display: flex;
gap: var(--size-4-1);
margin-top: var(--size-4-2);
}
.ollama-apply-button {
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: none;
background-color: var(--interactive-accent);
color: var(--text-on-accent);
font-weight: var(--font-semibold);
font-size: var(--font-ui-small);
cursor: pointer;
transition: filter 0.15s ease;
}
.ollama-apply-button:hover {
filter: brightness(1.1);
}
.ollama-cancel-button {
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
font-weight: var(--font-semibold);
font-size: var(--font-ui-small);
cursor: pointer;
transition: background-color 0.15s ease;
}
.ollama-cancel-button:hover {
background-color: var(--background-modifier-hover);
}
/* Agent Mode Selector */
.ollama-mode-selector {
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
font-size: var(--font-ui-small);
cursor: pointer;
}
.ollama-mode-selector:focus {
outline: none;
border-color: var(--interactive-accent);
}
/* Model Selector */
.ollama-model-selector {
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
font-size: var(--font-ui-small);
cursor: pointer;
max-width: 10rem;
overflow: hidden;
text-overflow: ellipsis;
}
.ollama-model-selector:focus {
outline: none;
border-color: var(--interactive-accent);
}
/* Chat History Selector */
.ollama-history-selector {
padding: var(--size-4-1) var(--size-4-2);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
font-size: var(--font-ui-small);
cursor: pointer;
max-width: 12rem;
overflow: hidden;
text-overflow: ellipsis;
}
.ollama-history-selector:focus {
outline: none;
border-color: var(--interactive-accent);
}
.ollama-history-delete-button {
display: inline-flex;
align-items: center;
gap: var(--size-4-1);
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-smallest);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
cursor: pointer;
transition: background-color 0.15s ease;
}
.ollama-history-delete-button:hover {
background-color: var(--background-modifier-error-hover);
color: var(--text-error);
}
/* Show Logs Button */
.ollama-show-logs-button {
display: inline-flex;
align-items: center;
gap: var(--size-4-1);
padding: var(--size-4-1) var(--size-4-2);
font-size: var(--font-smallest);
border-radius: var(--ollama-radius);
border: 1px solid var(--ollama-border);
background-color: var(--background-modifier-form-field);
color: var(--text-normal);
cursor: pointer;
transition: background-color 0.15s ease;
}
.ollama-show-logs-button:hover {
background-color: var(--background-modifier-hover);
}
/* Logs Panel */
.ollama-logs-container {
display: flex;
flex-direction: column;
gap: 2px;
padding: var(--size-4-1) var(--size-4-2);
max-height: 12rem;
overflow-y: auto;
background-color: var(--ollama-log-bg);
border-top: 1px solid var(--ollama-border);
border-bottom: 1px solid var(--ollama-border);
font-family: var(--font-monospace);
font-size: var(--font-smallest);
}
.ollama-log-row {
display: flex;
gap: var(--size-4-1);
align-items: baseline;
line-height: var(--line-height-tight);
}
.ollama-log-time {
color: var(--text-faint);
flex-shrink: 0;
}
.ollama-log-level {
flex-shrink: 0;
font-weight: var(--font-semibold);
text-transform: uppercase;
min-width: 3em;
}
.ollama-log-level-debug {
color: var(--ollama-log-debug);
}
.ollama-log-level-info {
color: var(--ollama-log-info);
}
.ollama-log-level-warn {
color: var(--ollama-log-warn);
}
.ollama-log-level-error {
color: var(--ollama-log-error);
}
.ollama-log-category {
color: var(--text-muted);
flex-shrink: 0;
}
.ollama-log-message {
color: var(--text-normal);
word-break: break-word;
}
/* Activity Indicator */
.ollama-activity-indicator {
display: none;
align-items: center;
gap: var(--size-4-1);
padding: var(--size-4-1) var(--size-4-1);
font-size: var(--font-ui-small);
color: var(--text-muted);
white-space: nowrap;
}
.ollama-activity-dot {
display: inline-block;
width: 0.6rem;
height: 0.6rem;
border-radius: 50%;
background-color: var(--interactive-accent);
animation: ollama-pulse 1.2s ease-in-out infinite;
flex-shrink: 0;
}
.ollama-activity-text {
font-style: italic;
}
@keyframes ollama-pulse {
0%,
100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.4;
transform: scale(0.8);
}
}
/* Disabled input/send during activity */
.ollama-input:disabled,
.ollama-send-button:disabled {
opacity: 0.6;
cursor: not-allowed;
}