blob: 5e2df2db58eb3edca55885dc586b28564b1458a9 [file] [log] [blame]
/**
* Shared demo fixtures for SketchViewModeSelect component
*/
/**
* Sample view mode configurations for different scenarios
*/
export const sampleViewModeConfigs = {
// Basic configuration with no diff stats
basic: {
activeMode: "chat" as const,
diffLinesAdded: 0,
diffLinesRemoved: 0,
},
// Configuration with small diff stats
smallDiff: {
activeMode: "diff2" as const,
diffLinesAdded: 5,
diffLinesRemoved: 2,
},
// Configuration with large diff stats
largeDiff: {
activeMode: "diff2" as const,
diffLinesAdded: 247,
diffLinesRemoved: 156,
},
// Configuration with terminal mode active
terminalActive: {
activeMode: "terminal" as const,
diffLinesAdded: 12,
diffLinesRemoved: 8,
},
// Configuration with only additions
additionsOnly: {
activeMode: "diff2" as const,
diffLinesAdded: 35,
diffLinesRemoved: 0,
},
// Configuration with only deletions
deletionsOnly: {
activeMode: "diff2" as const,
diffLinesAdded: 0,
diffLinesRemoved: 28,
},
};
/**
* Sample scenarios for interactive demos
*/
export const viewModeScenarios = [
{
name: "Fresh Start",
description: "No changes, chat mode active",
config: sampleViewModeConfigs.basic,
},
{
name: "Small Changes",
description: "Few lines changed, diff view active",
config: sampleViewModeConfigs.smallDiff,
},
{
name: "Major Refactor",
description: "Large number of changes across files",
config: sampleViewModeConfigs.largeDiff,
},
{
name: "Terminal Work",
description: "Running commands, terminal active",
config: sampleViewModeConfigs.terminalActive,
},
{
name: "New Feature",
description: "Only additions, new code written",
config: sampleViewModeConfigs.additionsOnly,
},
{
name: "Code Cleanup",
description: "Only deletions, removing unused code",
config: sampleViewModeConfigs.deletionsOnly,
},
];
/**
* Type for view mode configuration
*/
export type ViewModeConfig = {
activeMode: "chat" | "diff2" | "terminal";
diffLinesAdded: number;
diffLinesRemoved: number;
};
/**
* Helper function to apply configuration to a component
*/
export function applyViewModeConfig(
component: any,
config: ViewModeConfig,
): void {
component.activeMode = config.activeMode;
component.diffLinesAdded = config.diffLinesAdded;
component.diffLinesRemoved = config.diffLinesRemoved;
component.requestUpdate();
}
/**
* Create a series of buttons for testing different scenarios
*/
export function createViewModeTestButtons(
component: any,
container: HTMLElement,
): void {
const buttonContainer = document.createElement("div");
buttonContainer.style.cssText = `
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 15px 0;
padding: 10px;
background: #f6f8fa;
border-radius: 6px;
`;
viewModeScenarios.forEach((scenario) => {
const button = document.createElement("button");
button.textContent = scenario.name;
button.title = scenario.description;
button.style.cssText = `
padding: 6px 12px;
background: #0969da;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 12px;
transition: background-color 0.2s;
`;
button.addEventListener("mouseenter", () => {
button.style.backgroundColor = "#0860ca";
});
button.addEventListener("mouseleave", () => {
button.style.backgroundColor = "#0969da";
});
button.addEventListener("click", () => {
applyViewModeConfig(component, scenario.config);
// Visual feedback
const allButtons = buttonContainer.querySelectorAll("button");
allButtons.forEach((btn) => {
(btn as HTMLButtonElement).style.backgroundColor = "#0969da";
});
button.style.backgroundColor = "#2da44e";
setTimeout(() => {
button.style.backgroundColor = "#0969da";
}, 1000);
});
buttonContainer.appendChild(button);
});
container.appendChild(buttonContainer);
}