import { html, css, cssManager } from '@design.estate/dees-element'; import '@design.estate/dees-wcctools/demotools'; import { injectCssVariables } from '../../00variables.js'; import type { DeesMobileViewstack } from './dees-mobile-viewstack.js'; // Shared styles for demos const sharedStyles = html` `; // Helper functions const handleListClick = (viewstack: DeesMobileViewstack, listName: string) => { const listView = viewstack.querySelector('[view-id="list"]'); if (listView) { (listView as HTMLElement).dataset.listName = listName; } viewstack.pushView('list'); }; const handleItemClick = (viewstack: DeesMobileViewstack, itemName: string) => { const itemView = viewstack.querySelector('[view-id="item"]'); if (itemView) { (itemView as HTMLElement).dataset.itemName = itemName; } viewstack.pushView('item'); }; const handleBack = (viewstack: DeesMobileViewstack) => { viewstack.popView(); }; /** * Demo 1: Mobile Phone Layout * Simulates a typical mobile app navigation pattern */ const mobileDemo = () => { injectCssVariables(); return html` ${sharedStyles}

Mobile Phone Layout (375x667)

Simulates iPhone SE dimensions. Tap items to navigate forward, use back button to return.

{ const target = e.target as HTMLElement; const status = target?.closest('.demo-container')?.querySelector('.status-bar'); if (status) { status.textContent = `${e.detail.currentView} (depth: ${e.detail.stackDepth})`; } }} >

My Lists

{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; if (viewstack) handleListClick(viewstack, 'Shopping'); }}>
Shopping List
12 items
{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; if (viewstack) handleListClick(viewstack, 'Todo'); }}>
Todo List
5 items

Items

{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; if (viewstack) handleItemClick(viewstack, 'Milk'); }}>
Milk
{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; if (viewstack) handleItemClick(viewstack, 'Bread'); }}>
Bread

Details

Item Details

Full item information would appear here.

lists (depth: 1)
`; }; /** * Demo 2: Desktop/Tablet Layout * Wider layout suitable for tablets and desktop embedded views */ const desktopDemo = () => { injectCssVariables(); return html` ${sharedStyles}

Desktop/Tablet Layout

Wider container suitable for tablet or embedded desktop use. Same navigation behavior.

{ const target = e.target as HTMLElement; const status = target?.closest('.demo-container')?.querySelector('.status-bar'); if (status) { status.textContent = `View: ${e.detail.currentView} | Stack: ${e.detail.stackDepth} | Direction: ${e.detail.direction}`; } }} >

Categories

{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; viewstack?.pushView('products'); }}>
Electronics
248 products
{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; viewstack?.pushView('products'); }}>
Clothing
512 products
{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; viewstack?.pushView('products'); }}>
Home & Garden
189 products

Products

{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; viewstack?.pushView('product-detail'); }}>
Wireless Headphones
$149.99
{ const target = e.target as HTMLElement; const viewstack = target?.closest('dees-mobile-viewstack') as DeesMobileViewstack; viewstack?.pushView('product-detail'); }}>
Smart Watch
$299.99

Product Details

Wireless Headphones

Premium noise-cancelling headphones with 30-hour battery life.

$149.99

View: categories | Stack: 1 | Direction: none
`; }; /** * Demo 3: Programmatic Control * Demonstrates API methods for controlling navigation * Uses dees-demowrapper for proper scoped element access in wcctools */ const programmaticDemo = () => { injectCssVariables(); return html` ${sharedStyles}

Programmatic Control

Use the control panel to navigate programmatically via the viewstack API.

{ const viewstack = wrapper.querySelector('dees-mobile-viewstack') as DeesMobileViewstack; const backBtn = wrapper.querySelector('.btn-back') as HTMLButtonElement; const rootBtn = wrapper.querySelector('.btn-root') as HTMLButtonElement; const statusBar = wrapper.querySelector('.status-bar') as HTMLElement; const pushABtn = wrapper.querySelector('.btn-push-a') as HTMLButtonElement; const pushBBtn = wrapper.querySelector('.btn-push-b') as HTMLButtonElement; const pushCBtn = wrapper.querySelector('.btn-push-c') as HTMLButtonElement; if (!viewstack) return; const updateButtons = () => { if (backBtn) backBtn.disabled = !viewstack.canGoBack; if (rootBtn) rootBtn.disabled = viewstack.stackDepth <= 1; }; const updateStatus = () => { if (statusBar) { statusBar.textContent = `Current: ${viewstack.currentView} | Stack: [${viewstack.viewStack.join(' → ')}] | canGoBack: ${viewstack.canGoBack}`; } }; // Set up button click handlers pushABtn?.addEventListener('click', () => viewstack.pushView('view-a')); pushBBtn?.addEventListener('click', () => viewstack.pushView('view-b')); pushCBtn?.addEventListener('click', () => viewstack.pushView('view-c')); backBtn?.addEventListener('click', () => viewstack.popView()); rootBtn?.addEventListener('click', () => viewstack.goToRoot(false)); // Listen for view changes to update UI viewstack.addEventListener('view-changed', () => { updateButtons(); updateStatus(); }); // Initial state updateButtons(); updateStatus(); }}>

Home View

This is the root view. Use the buttons above to push views onto the stack.

View A

You navigated to View A

View B

You navigated to View B

View C

You navigated to View C

Current: home | Stack: [home] | canGoBack: false
`; }; /** * Demo 4: Deep Navigation (4+ levels) * Shows handling of deeply nested navigation */ const deepNavigationDemo = () => { injectCssVariables(); return html` ${sharedStyles}

Deep Navigation (5 Levels)

Navigate through 5 levels deep: Region → Country → City → District → Location

{ const target = e.target as HTMLElement; const status = target?.closest('.demo-container')?.querySelector('.status-bar'); if (status) { const depth = e.detail.stackDepth; const levels = ['Regions', 'Country', 'City', 'District', 'Location']; status.textContent = `Level ${depth}/5: ${levels[depth - 1] || 'Unknown'}`; } }} >

Regions

{ const target = e.target as HTMLElement; (target?.closest('dees-mobile-viewstack') as DeesMobileViewstack)?.pushView('country'); }}>
Europe
44 countries

Germany

{ ((e.target as HTMLElement)?.closest('dees-mobile-viewstack') as DeesMobileViewstack)?.pushView('city'); }}>
Berlin
12 districts

Berlin

{ ((e.target as HTMLElement)?.closest('dees-mobile-viewstack') as DeesMobileViewstack)?.pushView('district'); }}>
Mitte
Central district

Mitte

{ ((e.target as HTMLElement)?.closest('dees-mobile-viewstack') as DeesMobileViewstack)?.pushView('location'); }}>
Brandenburg Gate
Historic landmark

Brandenburg Gate

Brandenburg Gate

An 18th-century neoclassical monument in Berlin. One of the best-known landmarks of Germany.

You've reached the deepest level!
Use the back button to navigate up through the hierarchy.

Level 1/5: Regions
`; }; // Export array of demo functions export const demoFunc = [ mobileDemo, desktopDemo, programmaticDemo, deepNavigationDemo, ];