| /** |
| * Demo module for sketch-diff-range-picker component |
| */ |
| |
| import { DemoModule } from "./demo-framework/types"; |
| import { demoUtils } from "./demo-fixtures/index"; |
| import { MockGitDataService } from "./mock-git-data-service"; |
| |
| const demo: DemoModule = { |
| title: "Diff Range Picker Demo", |
| description: "Component for selecting commit ranges for diff views", |
| imports: ["../sketch-diff-range-picker"], |
| |
| setup: async (container: HTMLElement) => { |
| // Create demo sections |
| const basicSection = demoUtils.createDemoSection( |
| "Basic Range Picker", |
| "Select commit ranges for diff views with dropdown interface", |
| ); |
| |
| const statusSection = demoUtils.createDemoSection( |
| "Range Selection Status", |
| "Shows the currently selected range and events", |
| ); |
| |
| // Create mock git service |
| const mockGitService = new MockGitDataService(); |
| |
| // Create the component |
| const rangePickerElement = document.createElement( |
| "sketch-diff-range-picker", |
| ); |
| rangePickerElement.className = ` |
| w-full max-w-3xl my-5 p-4 border border-gray-300 dark:border-gray-600 |
| rounded-lg bg-white dark:bg-gray-800 |
| `; |
| |
| // Set up the git service |
| (rangePickerElement as any).gitService = mockGitService; |
| |
| // Create status display |
| const statusDisplay = document.createElement("div"); |
| statusDisplay.className = ` |
| p-3 my-4 bg-gray-50 dark:bg-gray-800 rounded border |
| border-gray-200 dark:border-gray-700 font-mono text-sm leading-relaxed |
| `; |
| statusDisplay.innerHTML = ` |
| <div><strong>Status:</strong> No range selected</div> |
| <div><strong>Events:</strong> None</div> |
| `; |
| |
| // Listen for range change events |
| rangePickerElement.addEventListener("range-change", (event: any) => { |
| const range = event.detail.range; |
| const fromShort = range.from ? range.from.substring(0, 7) : "N/A"; |
| const toShort = range.to ? range.to.substring(0, 7) : "Uncommitted"; |
| |
| statusDisplay.innerHTML = ` |
| <div><strong>Status:</strong> Range selected</div> |
| <div><strong>From:</strong> ${fromShort}</div> |
| <div><strong>To:</strong> ${toShort}</div> |
| <div><strong>Events:</strong> range-change fired at ${new Date().toLocaleTimeString()}</div> |
| `; |
| }); |
| |
| // Add components to sections |
| basicSection.appendChild(rangePickerElement); |
| statusSection.appendChild(statusDisplay); |
| |
| // Add sections to container |
| container.appendChild(basicSection); |
| container.appendChild(statusSection); |
| |
| // Add some demo instructions |
| const instructionsDiv = document.createElement("div"); |
| instructionsDiv.className = ` |
| my-5 p-4 bg-blue-50 dark:bg-blue-900/20 rounded |
| border-l-4 border-blue-500 dark:border-blue-400 |
| `; |
| instructionsDiv.innerHTML = ` |
| <h3 style="margin: 0 0 8px 0; color: #1976d2;">Demo Instructions:</h3> |
| <ul style="margin: 8px 0; padding-left: 20px;"> |
| <li>Click on the dropdown to see available commits</li> |
| <li>Select different commits to see range changes</li> |
| <li>The component defaults to diffing against uncommitted changes</li> |
| <li>Watch the status display for real-time event updates</li> |
| </ul> |
| `; |
| container.appendChild(instructionsDiv); |
| }, |
| |
| cleanup: () => { |
| // Clean up any event listeners or resources if needed |
| console.log("Cleaning up sketch-diff-range-picker demo"); |
| }, |
| }; |
| |
| export default demo; |