import { html, css, cssManager } from '@design.estate/dees-element'; import type { DeesDashboardgrid } from './dees-dashboardgrid.js'; import '@design.estate/dees-wcctools/demotools'; export const demoFunc = () => { return html` { const grid = elementArg.querySelector('#dashboardGrid') as DeesDashboardgrid; const seedWidgets = [ { id: 'metrics1', x: 0, y: 0, w: 3, h: 2, title: 'Revenue', icon: 'lucide:dollarSign', content: html` $124,563 ↑ 12.5% from last month `, }, { id: 'metrics2', x: 3, y: 0, w: 3, h: 2, title: 'Users', icon: 'lucide:users', content: html` 8,234 ↑ 5.2% from last week `, }, { id: 'chart1', x: 6, y: 0, w: 6, h: 4, title: 'Analytics', icon: 'lucide:lineChart', content: html` Chart visualization area `, }, ]; grid.widgets = seedWidgets.map(widget => ({ ...widget })); grid.cellHeight = 80; grid.margin = { top: 10, right: 10, bottom: 10, left: 10 }; grid.enableAnimation = true; grid.showGridLines = false; const baseLayout = grid.getLayout().map(item => ({ ...item })); const mobileLayout = grid.widgets.map((widget, index) => ({ id: widget.id, x: 0, y: index === 0 ? 0 : grid.widgets.slice(0, index).reduce((acc, prev) => acc + prev.h, 0), w: grid.columns, h: widget.h, })); grid.layouts = { base: baseLayout, mobile: mobileLayout, }; const statusEl = elementArg.querySelector('#dashboardLayoutStatus') as HTMLElement; const updateStatus = () => { const layout = grid.getLayout(); statusEl.textContent = `Active breakpoint: ${grid.activeBreakpoint} • Tiles: ${layout.length}`; }; const mediaQuery = window.matchMedia('(max-width: 768px)'); const handleBreakpoint = () => { const target = mediaQuery.matches ? 'mobile' : 'base'; grid.applyBreakpointLayout(target); updateStatus(); }; if (typeof mediaQuery.addEventListener === 'function') { mediaQuery.addEventListener('change', handleBreakpoint); } else { (mediaQuery as MediaQueryList & { addListener?: (listener: (this: MediaQueryList, ev: MediaQueryListEvent) => void) => void; }).addListener?.(handleBreakpoint); } handleBreakpoint(); let widgetCounter = 4; const buttons = elementArg.querySelectorAll('dees-button'); buttons.forEach(button => { const text = button.textContent?.trim(); switch (text) { case 'Toggle Animation': button.addEventListener('click', () => { grid.enableAnimation = !grid.enableAnimation; }); break; case 'Toggle Grid Lines': button.addEventListener('click', () => { grid.showGridLines = !grid.showGridLines; }); break; case 'Add Widget': button.addEventListener('click', () => { const newWidget = { id: `widget${widgetCounter++}`, x: 0, y: 0, w: 3, h: 2, autoPosition: true, title: `Widget ${widgetCounter - 1}`, icon: 'lucide:package', content: html` New widget content ${Math.floor( Math.random() * 1000, )} `, }; grid.addWidget(newWidget, true); }); break; case 'Compact Grid': button.addEventListener('click', () => { grid.compact(); }); break; case 'Toggle Edit Mode': button.addEventListener('click', () => { grid.editable = !grid.editable; button.textContent = grid.editable ? 'Lock Grid' : 'Unlock Grid'; }); break; case 'Reset Layout': button.addEventListener('click', () => { grid.applyBreakpointLayout(grid.activeBreakpoint); }); break; default: break; } }); grid.addEventListener('widget-move', (e: CustomEvent) => { console.log('Widget moved:', e.detail.widget, 'Displaced:', e.detail.displaced); }); grid.addEventListener('widget-resize', (e: CustomEvent) => { console.log('Widget resized:', e.detail.widget, 'Displaced:', e.detail.displaced); }); grid.addEventListener('widget-remove', (e: CustomEvent) => { console.log('Widget removed:', e.detail.widget); updateStatus(); }); grid.addEventListener('layout-change', () => { console.log('Layout changed:', grid.getLayout()); updateStatus(); }); updateStatus(); }}> Toggle Animation Toggle Grid Lines Add Widget Compact Grid Reset Layout Toggle Edit Mode Drag to reposition, resize from handles, or right-click a header to delete a tile. `; };