import { html, css, cssManager } from '@design.estate/dees-element'; import '@design.estate/dees-wcctools/demotools'; import './dees-panel.js'; import type { DeesInputText } from './dees-input-text.js'; export const demoFunc = () => html`
{ // Demonstrate basic text input functionality const inputs = elementArg.querySelectorAll('dees-input-text'); inputs.forEach((input: DeesInputText) => { input.addEventListener('changeSubject', (event: CustomEvent) => { console.log(`Input "${input.label}" changed to:`, input.getValue()); }); input.addEventListener('blur', () => { console.log(`Input "${input.label}" lost focus`); }); }); // Show password visibility toggle const passwordInput = elementArg.querySelector('dees-input-text[key="password"]') as DeesInputText; if (passwordInput) { console.log('Password input includes visibility toggle'); } }}> { // Demonstrate horizontal layout behavior const horizontalInputs = elementArg.querySelectorAll('dees-input-text'); // Check that inputs are properly spaced horizontally horizontalInputs.forEach((input: DeesInputText) => { const computedStyle = window.getComputedStyle(input); console.log(`Horizontal input "${input.label}" display:`, computedStyle.display); }); // Track value changes const firstNameInput = elementArg.querySelector('dees-input-text[key="firstName"]'); const lastNameInput = elementArg.querySelector('dees-input-text[key="lastName"]'); if (firstNameInput && lastNameInput) { const updateFullName = () => { const firstName = (firstNameInput as DeesInputText).getValue(); const lastName = (lastNameInput as DeesInputText).getValue(); console.log(`Full name: ${firstName} ${lastName}`); }; firstNameInput.addEventListener('changeSubject', updateFullName); lastNameInput.addEventListener('changeSubject', updateFullName); } }}>
{ // Demonstrate different label positions const inputs = elementArg.querySelectorAll('dees-input-text'); inputs.forEach((input: DeesInputText) => { const position = input.labelPosition; console.log(`Input "${input.label}" has label position: ${position}`); }); // Show how label position affects layout const leftLabelInputs = elementArg.querySelectorAll('dees-input-text[labelPosition="left"]'); if (leftLabelInputs.length > 0) { console.log(`${leftLabelInputs.length} inputs have left-aligned labels for inline layout`); } }}>
{ // Demonstrate validation states const requiredInput = elementArg.querySelector('dees-input-text[required]') as DeesInputText; const disabledInput = elementArg.querySelector('dees-input-text[disabled]') as DeesInputText; const errorInput = elementArg.querySelector('dees-input-text[validationState="invalid"]') as DeesInputText; if (requiredInput) { // Show validation on blur for empty required field requiredInput.addEventListener('blur', () => { if (!requiredInput.getValue()) { console.log('Required field is empty!'); } }); } if (disabledInput) { console.log('Disabled input cannot be edited'); } if (errorInput) { console.log('Error input shows validation message:', errorInput.validationText); // Simulate fixing the error errorInput.addEventListener('changeSubject', () => { const value = errorInput.getValue(); if (value.includes('@') && value.includes('.')) { errorInput.validationState = 'valid'; errorInput.validationText = ''; console.log('Email validation passed!'); } }); } }}> { // Track password visibility toggles const passwordInputs = elementArg.querySelectorAll('dees-input-text[isPasswordBool]'); passwordInputs.forEach((input: DeesInputText) => { // Monitor for toggle button clicks within shadow DOM const checkToggle = () => { const inputEl = input.shadowRoot?.querySelector('input'); if (inputEl) { console.log(`Password field "${input.label}" type:`, inputEl.type); } }; // Use MutationObserver to detect changes if (input.shadowRoot) { const observer = new MutationObserver(checkToggle); const inputEl = input.shadowRoot.querySelector('input'); if (inputEl) { observer.observe(inputEl, { attributes: true, attributeFilter: ['type'] }); } } }); }}> { // Set up interactive example const dynamicInput = elementArg.querySelector('dees-input-text'); const output = elementArg.querySelector('#text-input-output'); if (dynamicInput && output) { // Update output on every change dynamicInput.addEventListener('changeSubject', (event: CustomEvent) => { const value = (event.detail as DeesInputText).getValue(); output.textContent = `Current value: "${value}"`; }); // Also track focus/blur events dynamicInput.addEventListener('focus', () => { console.log('Input focused'); }); dynamicInput.addEventListener('blur', () => { console.log('Input blurred'); }); // Track keypress events let keypressCount = 0; dynamicInput.addEventListener('keydown', () => { keypressCount++; console.log(`Keypress count: ${keypressCount}`); }); } }}>
Current value: ""
`;