blob: 52f8a4e67d56a4e6250f2d982cbba7d44197280b [file] [log] [blame]
import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators.js";
import "./sketch-container-status";
@customElement("sketch-view-mode-select")
export class SketchViewModeSelect extends LitElement {
// Current active mode
@property()
activeMode: "chat" | "diff" | "charts" | "terminal" = "chat";
// Header bar: view mode buttons
static styles = css`
/* View Mode Button Styles */
.view-mode-buttons {
display: flex;
gap: 8px;
margin-right: 10px;
}
.emoji-button {
font-size: 18px;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s ease;
padding: 0;
line-height: 1;
}
.emoji-button:hover {
background-color: #f0f0f0;
transform: translateY(-2px);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.emoji-button.active {
background-color: #e6f7ff;
border-color: #1890ff;
color: #1890ff;
}
`;
constructor() {
super();
// Binding methods
this._handleViewModeClick = this._handleViewModeClick.bind(this);
this._handleUpdateActiveMode = this._handleUpdateActiveMode.bind(this);
}
// See https://lit.dev/docs/components/lifecycle/
connectedCallback() {
super.connectedCallback();
// Listen for update-active-mode events
this.addEventListener(
"update-active-mode",
this._handleUpdateActiveMode as EventListener,
);
}
/**
* Handle view mode button clicks
*/
private _handleViewModeClick(mode: "chat" | "diff" | "charts" | "terminal") {
// Dispatch a custom event to notify the app shell to change the view
const event = new CustomEvent("view-mode-select", {
detail: { mode },
bubbles: true,
composed: true,
});
this.dispatchEvent(event);
}
/**
* Handle updates to the active mode
*/
private _handleUpdateActiveMode(event: CustomEvent) {
const { mode } = event.detail;
if (mode) {
this.activeMode = mode;
}
}
// See https://lit.dev/docs/components/lifecycle/
disconnectedCallback() {
super.disconnectedCallback();
// Remove event listeners
this.removeEventListener(
"update-active-mode",
this._handleUpdateActiveMode as EventListener,
);
}
render() {
return html`
<div class="view-mode-buttons">
<button
id="showConversationButton"
class="emoji-button ${this.activeMode === "chat" ? "active" : ""}"
title="Conversation View"
@click=${() => this._handleViewModeClick("chat")}
>
💬
</button>
<button
id="showDiffButton"
class="emoji-button ${this.activeMode === "diff" ? "active" : ""}"
title="Diff View"
@click=${() => this._handleViewModeClick("diff")}
>
±
</button>
<button
id="showChartsButton"
class="emoji-button ${this.activeMode === "charts" ? "active" : ""}"
title="Charts View"
@click=${() => this._handleViewModeClick("charts")}
>
📈
</button>
<button
id="showTerminalButton"
class="emoji-button ${this.activeMode === "terminal" ? "active" : ""}"
title="Terminal View"
@click=${() => this._handleViewModeClick("terminal")}
>
💻
</button>
</div>
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"sketch-view-mode-select": SketchViewModeSelect;
}
}