@duskmoon-dev/el-base 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,11 +6,11 @@
6
6
  "/**\n * Base class for all DuskMoon custom elements\n */\n\nimport { resetStyles, defaultTheme } from './styles.js';\n\n/**\n * Property definition for reactive properties\n */\nexport interface PropertyDefinition {\n /** Attribute name (defaults to kebab-case of property name) */\n attribute?: string | false;\n /** Whether changes should reflect to attribute */\n reflect?: boolean;\n /** Property type for conversion */\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array;\n /** Default value */\n default?: unknown;\n}\n\n/**\n * Map of property names to their definitions\n */\nexport type PropertyDefinitions = Record<string, PropertyDefinition>;\n\n/**\n * Base class for all DuskMoon custom elements\n *\n * Provides:\n * - Shadow DOM setup with adoptedStyleSheets\n * - Reactive properties with attribute reflection\n * - Style injection utilities\n * - Common lifecycle methods\n *\n * @example\n * ```ts\n * class MyElement extends BaseElement {\n * static properties = {\n * name: { type: String, reflect: true }\n * };\n *\n * constructor() {\n * super();\n * this.attachStyles(myStyles);\n * }\n *\n * render() {\n * return `<div>Hello, ${this.name}!</div>`;\n * }\n * }\n * ```\n */\nexport abstract class BaseElement extends HTMLElement {\n /**\n * Property definitions for reactive properties\n * Override in subclasses to define properties\n */\n static properties: PropertyDefinitions = {};\n\n /**\n * Observed attributes derived from property definitions\n */\n static get observedAttributes(): string[] {\n return Object.entries(this.properties)\n .filter(([, def]) => def.attribute !== false)\n .map(([name, def]) => def.attribute || toKebabCase(name));\n }\n\n /**\n * Shadow root for the element\n */\n declare shadowRoot: ShadowRoot;\n\n /**\n * Stylesheets attached to this element\n */\n private _styles: CSSStyleSheet[] = [];\n\n /**\n * Whether the element has been connected to the DOM\n */\n private _isConnected = false;\n\n /**\n * Property values set before element upgrade (e.g. by inline scripts\n * that run before customElements.define). Restored in connectedCallback\n * so they survive subclass constructor overwrites.\n */\n private _preUpgradeValues?: Map<string, unknown>;\n\n /**\n * Queue of pending property updates\n */\n private _pendingUpdate = false;\n\n /**\n * Internal property values storage\n */\n private _propertyValues = new Map<string, unknown>();\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n\n // Apply default styles\n this._styles = [resetStyles, defaultTheme];\n this.shadowRoot.adoptedStyleSheets = [...this._styles];\n\n // Initialize properties\n this._initializeProperties();\n }\n\n /**\n * Initialize reactive properties from static definitions\n */\n private _initializeProperties(): void {\n const ctor = this.constructor as typeof BaseElement;\n const properties = ctor.properties;\n\n for (const [name, def] of Object.entries(properties)) {\n // Capture any value set before element upgrade (e.g. by inline scripts\n // that run before customElements.define). The plain instance property\n // must be deleted so the reactive accessor below takes effect.\n // Values are stored in _preUpgradeValues and restored in\n // connectedCallback — after the subclass constructor finishes.\n if (Object.prototype.hasOwnProperty.call(this, name)) {\n const preValue = (this as Record<string, unknown>)[name];\n delete (this as Record<string, unknown>)[name];\n if (preValue !== undefined) {\n if (!this._preUpgradeValues) this._preUpgradeValues = new Map();\n this._preUpgradeValues.set(name, preValue);\n }\n }\n\n // Set default value\n if (def.default !== undefined) {\n this._propertyValues.set(name, def.default);\n }\n\n // Define property accessor\n Object.defineProperty(this, name, {\n get: () => this._propertyValues.get(name),\n set: (value: unknown) => {\n const oldValue = this._propertyValues.get(name);\n if (oldValue === value) return;\n\n this._propertyValues.set(name, value);\n\n // Reflect to attribute if needed\n if (def.reflect && def.attribute !== false) {\n const attrName = def.attribute || toKebabCase(name);\n this._reflectToAttribute(attrName, value, def.type);\n }\n\n // Schedule update\n this._scheduleUpdate();\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n /**\n * Reflect a property value to an attribute\n */\n private _reflectToAttribute(\n attrName: string,\n value: unknown,\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array,\n ): void {\n if (value === null || value === undefined) {\n this.removeAttribute(attrName);\n return;\n }\n\n if (type === Boolean) {\n if (value) {\n this.setAttribute(attrName, '');\n } else {\n this.removeAttribute(attrName);\n }\n return;\n }\n\n if (type === Object || type === Array) {\n this.setAttribute(attrName, JSON.stringify(value));\n return;\n }\n\n this.setAttribute(attrName, String(value));\n }\n\n /**\n * Convert an attribute value to a property value\n */\n private _attributeToProperty(\n value: string | null,\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array,\n ): unknown {\n if (value === null) {\n return type === Boolean ? false : undefined;\n }\n\n switch (type) {\n case Boolean:\n return true;\n case Number:\n return Number(value);\n case Object:\n case Array:\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n default:\n return value;\n }\n }\n\n /**\n * Schedule an update for the next microtask\n */\n private _scheduleUpdate(): void {\n if (this._pendingUpdate) return;\n this._pendingUpdate = true;\n\n queueMicrotask(() => {\n this._pendingUpdate = false;\n if (this._isConnected) {\n this.update();\n }\n });\n }\n\n /**\n * Attach additional stylesheets to the Shadow DOM\n *\n * @param styles - CSSStyleSheet or array of stylesheets to attach\n */\n protected attachStyles(styles: CSSStyleSheet | CSSStyleSheet[]): void {\n const sheets = Array.isArray(styles) ? styles : [styles];\n this._styles = [...this._styles, ...sheets];\n this.shadowRoot.adoptedStyleSheets = [...this._styles];\n }\n\n /**\n * Called when the element is connected to the DOM\n */\n connectedCallback(): void {\n this._isConnected = true;\n\n // Restore any property values set before element upgrade.\n // Done here (not in constructor) so subclass constructor defaults\n // don't overwrite them.\n if (this._preUpgradeValues) {\n for (const [name, value] of this._preUpgradeValues) {\n (this as Record<string, unknown>)[name] = value;\n }\n this._preUpgradeValues = undefined;\n }\n\n this.update();\n }\n\n /**\n * Called when the element is disconnected from the DOM\n */\n disconnectedCallback(): void {\n this._isConnected = false;\n }\n\n /**\n * Called when an observed attribute changes\n */\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return;\n\n const ctor = this.constructor as typeof BaseElement;\n const properties = ctor.properties;\n\n // Find the property for this attribute\n for (const [propName, def] of Object.entries(properties)) {\n const attrName = def.attribute || toKebabCase(propName);\n if (attrName === name) {\n const value = this._attributeToProperty(newValue, def.type);\n this._propertyValues.set(propName, value);\n this._scheduleUpdate();\n break;\n }\n }\n }\n\n /**\n * Called when the element should update its DOM\n * Override to customize update behavior\n */\n protected update(): void {\n const content = this.render();\n if (content !== undefined) {\n this.shadowRoot.innerHTML = content;\n }\n }\n\n /**\n * Returns the HTML content for the element\n * Override in subclasses to define the element's template\n *\n * @returns HTML string or undefined if no update needed\n */\n protected render(): string | undefined {\n return undefined;\n }\n\n /**\n * Emit a custom event from this element\n *\n * @param name - Event name\n * @param detail - Event detail data\n * @param options - Additional event options\n */\n protected emit<T>(name: string, detail?: T, options?: Omit<CustomEventInit, 'detail'>): boolean {\n const event = new CustomEvent(name, {\n bubbles: true,\n composed: true,\n cancelable: true,\n ...options,\n detail,\n });\n return this.dispatchEvent(event);\n }\n\n /**\n * Query an element in the Shadow DOM\n */\n protected query<T extends Element>(selector: string): T | null {\n return this.shadowRoot.querySelector<T>(selector);\n }\n\n /**\n * Query all matching elements in the Shadow DOM\n */\n protected queryAll<T extends Element>(selector: string): NodeListOf<T> {\n return this.shadowRoot.querySelectorAll<T>(selector);\n }\n}\n\n/**\n * Convert a camelCase string to kebab-case\n */\nfunction toKebabCase(str: string): string {\n return str.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n",
7
7
  "/**\n * Animation utilities for DuskMoon custom elements\n *\n * Provides reusable CSS keyframe animations and transition presets\n * that respect prefers-reduced-motion.\n */\n\nimport { css } from './styles.js';\n\n/**\n * Duration presets matching the design token system\n */\nexport const durations = {\n fast: '150ms',\n normal: '200ms',\n slow: '300ms',\n slower: '500ms',\n} as const;\n\nexport type AnimationDuration = keyof typeof durations;\n\n/**\n * Easing presets for consistent motion curves\n */\nexport const easings = {\n ease: 'ease',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n} as const;\n\nexport type AnimationEasing = keyof typeof easings;\n\n/**\n * Core animation keyframes stylesheet.\n * Attach this to elements that need entrance/exit animations.\n */\nexport const animationStyles = css`\n @keyframes dm-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes dm-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n @keyframes dm-scale-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes dm-scale-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n\n @keyframes dm-slide-in-up {\n from {\n opacity: 0;\n transform: translateY(0.5rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dm-slide-in-down {\n from {\n opacity: 0;\n transform: translateY(-0.5rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dm-slide-in-left {\n from {\n opacity: 0;\n transform: translateX(0.5rem);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n @keyframes dm-slide-in-right {\n from {\n opacity: 0;\n transform: translateX(-0.5rem);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n @keyframes dm-shake {\n 0%,\n 100% {\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70%,\n 90% {\n transform: translateX(-0.25rem);\n }\n 20%,\n 40%,\n 60%,\n 80% {\n transform: translateX(0.25rem);\n }\n }\n\n @keyframes dm-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes dm-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n /* Reduced motion: disable all animations */\n @media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n }\n`;\n\n/**\n * Generate a CSS animation shorthand value\n *\n * @example\n * ```ts\n * const fadeIn = animation('dm-fade-in', 'normal', 'easeOut');\n * // Returns: \"dm-fade-in 200ms cubic-bezier(0, 0, 0.2, 1) both\"\n * ```\n */\nexport function animation(\n name: string,\n duration: AnimationDuration = 'normal',\n easing: AnimationEasing = 'easeOut',\n fillMode: 'none' | 'forwards' | 'backwards' | 'both' = 'both',\n): string {\n return `${name} ${durations[duration]} ${easings[easing]} ${fillMode}`;\n}\n\n/**\n * Generate a CSS transition shorthand for common properties\n *\n * @example\n * ```ts\n * const hoverTransition = transition(['opacity', 'transform'], 'fast');\n * // Returns: \"opacity 150ms ease, transform 150ms ease\"\n * ```\n */\nexport function transition(\n properties: string[],\n duration: AnimationDuration = 'normal',\n easing: AnimationEasing = 'ease',\n): string {\n return properties.map((prop) => `${prop} ${durations[duration]} ${easings[easing]}`).join(', ');\n}\n",
8
8
  "/**\n * Theme presets for DuskMoon Elements\n *\n * Each theme provides a complete set of CSS custom properties\n * that can be applied to :root or any container element.\n *\n * Usage:\n * ```html\n * <style>\n * :root { ${sunshineTheme} }\n * [data-theme=\"moonlight\"] { ${moonlightTheme} }\n * [data-theme=\"ocean\"] { ${oceanTheme} }\n * </style>\n * ```\n */\n\n/**\n * Sunshine theme (light) — warm, friendly, high contrast\n * Default light theme with blue primary\n */\nexport const sunshineTheme = `\n /* Primary */\n --color-primary: oklch(60% 0.15 250);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.1 250);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(50% 0.12 300);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: white;\n --color-surface-container: oklch(97% 0.01 250);\n --color-surface-container-low: oklch(98% 0.005 250);\n --color-surface-container-high: oklch(94% 0.01 250);\n --color-surface-variant: oklch(92% 0.01 250);\n --color-on-surface: oklch(25% 0.02 250);\n --color-on-surface-variant: oklch(45% 0.02 250);\n --color-inverse-surface: oklch(25% 0.02 250);\n --color-inverse-on-surface: oklch(95% 0.01 250);\n\n /* Outline */\n --color-outline: oklch(75% 0.02 250);\n --color-outline-variant: oklch(85% 0.01 250);\n\n /* Semantic */\n --color-success: oklch(60% 0.15 145);\n --color-on-success: white;\n --color-warning: oklch(75% 0.15 85);\n --color-on-warning: oklch(25% 0.05 85);\n --color-error: oklch(55% 0.2 25);\n --color-on-error: white;\n --color-info: oklch(60% 0.15 250);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px white, 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Moonlight theme (dark) — elegant, modern dark mode\n */\nexport const moonlightTheme = `\n /* Primary */\n --color-primary: oklch(72% 0.15 250);\n --color-primary-content: oklch(20% 0.05 250);\n --color-on-primary: oklch(20% 0.05 250);\n\n /* Secondary */\n --color-secondary: oklch(68% 0.1 250);\n --color-secondary-content: oklch(20% 0.05 250);\n --color-on-secondary: oklch(20% 0.05 250);\n\n /* Tertiary */\n --color-tertiary: oklch(70% 0.12 300);\n --color-tertiary-content: oklch(20% 0.05 300);\n --color-on-tertiary: oklch(20% 0.05 300);\n\n /* Surface */\n --color-surface: oklch(18% 0.02 250);\n --color-surface-container: oklch(22% 0.02 250);\n --color-surface-container-low: oklch(20% 0.02 250);\n --color-surface-container-high: oklch(26% 0.02 250);\n --color-surface-variant: oklch(30% 0.02 250);\n --color-on-surface: oklch(92% 0.01 250);\n --color-on-surface-variant: oklch(75% 0.02 250);\n --color-inverse-surface: oklch(92% 0.01 250);\n --color-inverse-on-surface: oklch(25% 0.02 250);\n\n /* Outline */\n --color-outline: oklch(45% 0.02 250);\n --color-outline-variant: oklch(35% 0.02 250);\n\n /* Semantic */\n --color-success: oklch(70% 0.15 145);\n --color-on-success: oklch(20% 0.05 145);\n --color-warning: oklch(80% 0.12 85);\n --color-on-warning: oklch(20% 0.05 85);\n --color-error: oklch(65% 0.2 25);\n --color-on-error: oklch(20% 0.05 25);\n --color-info: oklch(70% 0.15 250);\n --color-on-info: oklch(20% 0.05 250);\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(18% 0.02 250), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Ocean theme — deep blue/teal palette, calm and professional\n */\nexport const oceanTheme = `\n /* Primary */\n --color-primary: oklch(58% 0.12 210);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.08 185);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(60% 0.1 170);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(98% 0.005 210);\n --color-surface-container: oklch(96% 0.01 210);\n --color-surface-container-low: oklch(97% 0.005 210);\n --color-surface-container-high: oklch(93% 0.01 210);\n --color-surface-variant: oklch(91% 0.01 210);\n --color-on-surface: oklch(22% 0.02 210);\n --color-on-surface-variant: oklch(40% 0.02 210);\n --color-inverse-surface: oklch(22% 0.02 210);\n --color-inverse-on-surface: oklch(95% 0.01 210);\n\n /* Outline */\n --color-outline: oklch(72% 0.02 210);\n --color-outline-variant: oklch(82% 0.01 210);\n\n /* Semantic */\n --color-success: oklch(62% 0.14 155);\n --color-on-success: white;\n --color-warning: oklch(76% 0.14 80);\n --color-on-warning: oklch(25% 0.05 80);\n --color-error: oklch(56% 0.18 20);\n --color-on-error: white;\n --color-info: oklch(58% 0.12 210);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.06);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.08);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(98% 0.005 210), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Forest theme — earthy greens and warm browns, natural feel\n */\nexport const forestTheme = `\n /* Primary */\n --color-primary: oklch(52% 0.12 155);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(50% 0.08 70);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(55% 0.1 120);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(97% 0.005 90);\n --color-surface-container: oklch(95% 0.01 90);\n --color-surface-container-low: oklch(96% 0.005 90);\n --color-surface-container-high: oklch(92% 0.01 90);\n --color-surface-variant: oklch(90% 0.01 90);\n --color-on-surface: oklch(22% 0.03 90);\n --color-on-surface-variant: oklch(40% 0.03 90);\n --color-inverse-surface: oklch(22% 0.03 90);\n --color-inverse-on-surface: oklch(95% 0.01 90);\n\n /* Outline */\n --color-outline: oklch(70% 0.03 90);\n --color-outline-variant: oklch(82% 0.01 90);\n\n /* Semantic */\n --color-success: oklch(58% 0.14 145);\n --color-on-success: white;\n --color-warning: oklch(74% 0.14 85);\n --color-on-warning: oklch(25% 0.05 85);\n --color-error: oklch(54% 0.18 25);\n --color-on-error: white;\n --color-info: oklch(55% 0.12 230);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.08);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(97% 0.005 90), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Rosé theme — soft pinks and warm tones, elegant and modern\n */\nexport const roseTheme = `\n /* Primary */\n --color-primary: oklch(60% 0.16 350);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.1 330);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(58% 0.12 15);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(98% 0.005 350);\n --color-surface-container: oklch(96% 0.01 350);\n --color-surface-container-low: oklch(97% 0.005 350);\n --color-surface-container-high: oklch(93% 0.01 350);\n --color-surface-variant: oklch(91% 0.01 350);\n --color-on-surface: oklch(22% 0.02 350);\n --color-on-surface-variant: oklch(42% 0.02 350);\n --color-inverse-surface: oklch(22% 0.02 350);\n --color-inverse-on-surface: oklch(95% 0.005 350);\n\n /* Outline */\n --color-outline: oklch(72% 0.02 350);\n --color-outline-variant: oklch(84% 0.01 350);\n\n /* Semantic */\n --color-success: oklch(62% 0.14 148);\n --color-on-success: white;\n --color-warning: oklch(76% 0.14 82);\n --color-on-warning: oklch(25% 0.05 82);\n --color-error: oklch(55% 0.2 22);\n --color-on-error: white;\n --color-info: oklch(58% 0.14 245);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(98% 0.005 350), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Map of all available theme presets\n */\nexport const themes = {\n sunshine: sunshineTheme,\n moonlight: moonlightTheme,\n ocean: oceanTheme,\n forest: forestTheme,\n rose: roseTheme,\n} as const;\n\nexport type ThemeName = keyof typeof themes;\n\n/**\n * Apply a theme to an element by setting CSS custom properties\n *\n * @param element - The element to apply the theme to (usually document.documentElement)\n * @param theme - Theme name or custom CSS properties string\n */\nexport function applyTheme(element: HTMLElement, theme: ThemeName | string): void {\n const css = typeof theme === 'string' && theme in themes ? themes[theme as ThemeName] : theme;\n\n // Parse CSS custom properties from the theme string\n const props = css.match(/--[\\w-]+:\\s*[^;]+/g);\n if (props) {\n for (const prop of props) {\n const [name, ...valueParts] = prop.split(':');\n const value = valueParts.join(':').trim();\n element.style.setProperty(name.trim(), value);\n }\n }\n}\n",
9
- "/**\n * Composition mixins for DuskMoon custom elements\n *\n * Mixins add reusable behaviors to BaseElement subclasses using\n * the TypeScript mixin pattern (class expression extending a base).\n *\n * @example\n * ```ts\n * import { BaseElement, FocusableMixin, FormMixin } from '@duskmoon-dev/el-base';\n *\n * class MyInput extends FormMixin(FocusableMixin(BaseElement)) {\n * // Now has focus management + form association behaviors\n * }\n * ```\n */\n\nimport type { PropertyDefinitions } from './base-element.js';\n\n/**\n * A constructor type that returns an HTMLElement with shadow DOM and\n * lifecycle methods. Using HTMLElement (not BaseElement) avoids TS4094\n * errors where private BaseElement members leak into anonymous class types.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T = HTMLElement> = abstract new (...args: any[]) => T;\n\ninterface BaseElementLike extends HTMLElement {\n connectedCallback(): void;\n disconnectedCallback(): void;\n shadowRoot: ShadowRoot;\n}\n\ninterface BaseElementConstructorLike {\n properties: PropertyDefinitions;\n}\n\n/**\n * Mixin that adds keyboard focus management.\n * Sets tabindex, handles focus/blur events, and tracks focused state.\n */\nexport function FocusableMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FocusableElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n focused: { type: Boolean, reflect: true, default: false },\n };\n\n declare focused: boolean;\n\n #handleFocus = () => {\n this.focused = true;\n };\n\n #handleBlur = () => {\n this.focused = false;\n };\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n this.addEventListener('focus', this.#handleFocus);\n this.addEventListener('blur', this.#handleBlur);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('focus', this.#handleFocus);\n this.removeEventListener('blur', this.#handleBlur);\n }\n }\n\n return FocusableElement;\n}\n\n/**\n * Mixin that adds form association.\n * Provides name/value/disabled/required props and form participation.\n */\nexport function FormMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FormElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n name: { type: String, reflect: true, default: '' },\n value: { type: String, reflect: true, default: '' },\n disabled: { type: Boolean, reflect: true, default: false },\n required: { type: Boolean, reflect: true, default: false },\n };\n\n declare name: string;\n declare value: string;\n declare disabled: boolean;\n declare required: boolean;\n\n /** Get the form this element is associated with */\n get form(): HTMLFormElement | null {\n return this.closest('form');\n }\n }\n\n return FormElement;\n}\n\n/**\n * Mixin that adds event listener management with automatic cleanup.\n * Listeners added via addListener() are removed on disconnect.\n */\nexport function EventListenerMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class EventListenerElement extends Base {\n #listeners: Array<{\n target: EventTarget;\n type: string;\n handler: EventListener;\n options?: boolean | AddEventListenerOptions;\n }> = [];\n\n /**\n * Add an event listener that will be automatically removed on disconnect\n */\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n target.addEventListener(type, handler, options);\n this.#listeners.push({ target, type, handler, options });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n for (const { target, type, handler, options } of this.#listeners) {\n target.removeEventListener(type, handler, options);\n }\n this.#listeners = [];\n }\n }\n\n return EventListenerElement;\n}\n\n/**\n * Mixin that adds slot change observation.\n * Tracks slotted elements and fires a callback when slots change.\n */\nexport function SlotObserverMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class SlotObserverElement extends Base {\n #slotObservers: Map<string, (elements: Element[]) => void> = new Map();\n\n /**\n * Observe a named slot (or '' for default) and call handler when content changes\n */\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void {\n this.#slotObservers.set(slotName, handler);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Defer to next frame so shadow DOM is rendered\n requestAnimationFrame(() => this.#attachSlotListeners());\n }\n\n #attachSlotListeners(): void {\n const slots = this.shadowRoot.querySelectorAll('slot');\n for (const slot of slots) {\n const name = slot.name || '';\n const handler = this.#slotObservers.get(name);\n if (handler) {\n slot.addEventListener('slotchange', () => {\n const elements = slot.assignedElements();\n handler(elements);\n });\n // Fire initial\n const elements = slot.assignedElements();\n handler(elements);\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#slotObservers.clear();\n }\n }\n\n return SlotObserverElement;\n}\n",
9
+ "/**\n * Composition mixins for DuskMoon custom elements\n *\n * Mixins add reusable behaviors to BaseElement subclasses using\n * the TypeScript mixin pattern (class expression extending a base).\n *\n * @example\n * ```ts\n * import { BaseElement, FocusableMixin, FormMixin } from '@duskmoon-dev/el-base';\n *\n * class MyInput extends FormMixin(FocusableMixin(BaseElement)) {\n * // Now has focus management + form association behaviors\n * }\n * ```\n */\n\nimport type { PropertyDefinitions } from './base-element.js';\n\n/**\n * A constructor type that returns an HTMLElement with shadow DOM and\n * lifecycle methods. Using HTMLElement (not BaseElement) avoids TS4094\n * errors where private BaseElement members leak into anonymous class types.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T = HTMLElement> = abstract new (...args: any[]) => T;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AbstractConstructor<T = object> = abstract new (...args: any[]) => T;\n\ninterface BaseElementLike extends HTMLElement {\n connectedCallback(): void;\n disconnectedCallback(): void;\n shadowRoot: ShadowRoot;\n}\n\ninterface BaseElementConstructorLike {\n properties: PropertyDefinitions;\n}\n\n/**\n * Mixin that adds keyboard focus management.\n * Sets tabindex, handles focus/blur events, and tracks focused state.\n */\nexport function FocusableMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T & AbstractConstructor<{ focused: boolean }> {\n abstract class FocusableElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n focused: { type: Boolean, reflect: true, default: false },\n };\n\n declare focused: boolean;\n\n #handleFocus = () => {\n this.focused = true;\n };\n\n #handleBlur = () => {\n this.focused = false;\n };\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n this.addEventListener('focus', this.#handleFocus);\n this.addEventListener('blur', this.#handleBlur);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('focus', this.#handleFocus);\n this.removeEventListener('blur', this.#handleBlur);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return FocusableElement as any;\n}\n\n/**\n * Mixin that adds form association.\n * Provides name/value/disabled/required props and form participation.\n */\nexport function FormMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FormElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n name: { type: String, reflect: true, default: '' },\n value: { type: String, reflect: true, default: '' },\n disabled: { type: Boolean, reflect: true, default: false },\n required: { type: Boolean, reflect: true, default: false },\n };\n\n declare name: string;\n declare value: string;\n declare disabled: boolean;\n declare required: boolean;\n\n /** Get the form this element is associated with */\n get form(): HTMLFormElement | null {\n return this.closest('form');\n }\n }\n\n return FormElement;\n}\n\n/**\n * Mixin that adds event listener management with automatic cleanup.\n * Listeners added via addListener() are removed on disconnect.\n */\nexport function EventListenerMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T &\n AbstractConstructor<{\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void;\n }> {\n abstract class EventListenerElement extends Base {\n #listeners: Array<{\n target: EventTarget;\n type: string;\n handler: EventListener;\n options?: boolean | AddEventListenerOptions;\n }> = [];\n\n /**\n * Add an event listener that will be automatically removed on disconnect\n */\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n target.addEventListener(type, handler, options);\n this.#listeners.push({ target, type, handler, options });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n for (const { target, type, handler, options } of this.#listeners) {\n target.removeEventListener(type, handler, options);\n }\n this.#listeners = [];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return EventListenerElement as any;\n}\n\n/**\n * Mixin that adds slot change observation.\n * Tracks slotted elements and fires a callback when slots change.\n */\nexport function SlotObserverMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T &\n AbstractConstructor<{\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void;\n }> {\n abstract class SlotObserverElement extends Base {\n #slotObservers: Map<string, (elements: Element[]) => void> = new Map();\n\n /**\n * Observe a named slot (or '' for default) and call handler when content changes\n */\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void {\n this.#slotObservers.set(slotName, handler);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Defer to next frame so shadow DOM is rendered\n requestAnimationFrame(() => this.#attachSlotListeners());\n }\n\n #attachSlotListeners(): void {\n const slots = this.shadowRoot.querySelectorAll('slot');\n for (const slot of slots) {\n const name = slot.name || '';\n const handler = this.#slotObservers.get(name);\n if (handler) {\n slot.addEventListener('slotchange', () => {\n const elements = slot.assignedElements();\n handler(elements);\n });\n // Fire initial\n const elements = slot.assignedElements();\n handler(elements);\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#slotObservers.clear();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return SlotObserverElement as any;\n}\n",
10
10
  "/**\n * Validation utilities for DuskMoon form elements\n *\n * Provides composable validator functions that can be used with\n * any form element supporting ValidationState and errorMessage props.\n *\n * @example\n * ```ts\n * import { validate, validators } from '@duskmoon-dev/el-base';\n *\n * const result = validate('hello@example.com', [\n * validators.required('Email is required'),\n * validators.email('Must be a valid email'),\n * ]);\n *\n * // result = { state: 'valid', message: undefined }\n *\n * inputEl.validationState = result.state;\n * inputEl.errorMessage = result.message ?? '';\n * ```\n */\n\nimport type { ValidationState } from './types.js';\n\n/**\n * Result of a validation check\n */\nexport interface ValidationResult {\n state: NonNullable<ValidationState>;\n message: string | undefined;\n}\n\n/**\n * A validator function takes a value and returns an error message\n * if invalid, or undefined/null if valid.\n */\nexport type Validator<T = string> = (value: T) => string | undefined | null;\n\n/**\n * Run a value through a list of validators, returning on the first failure.\n * Returns { state: 'valid' } if all pass, { state: 'invalid', message } on first failure.\n */\nexport function validate<T = string>(value: T, rules: Validator<T>[]): ValidationResult {\n for (const rule of rules) {\n const message = rule(value);\n if (message) {\n return { state: 'invalid', message };\n }\n }\n return { state: 'valid', message: undefined };\n}\n\n/**\n * Run a value through an async validator.\n * Sets state to 'pending' during execution.\n */\nexport async function validateAsync<T = string>(\n value: T,\n rules: Validator<T>[],\n asyncRule: (value: T) => Promise<string | undefined | null>,\n): Promise<ValidationResult> {\n // Run sync rules first\n const syncResult = validate(value, rules);\n if (syncResult.state === 'invalid') {\n return syncResult;\n }\n\n // Run async rule\n const message = await asyncRule(value);\n if (message) {\n return { state: 'invalid', message };\n }\n return { state: 'valid', message: undefined };\n}\n\n/**\n * Built-in validators for common patterns\n */\nexport const validators = {\n /** Requires a non-empty value */\n required(message = 'This field is required'): Validator<string> {\n return (value) => (!value || value.trim().length === 0 ? message : undefined);\n },\n\n /** Requires a minimum string length */\n minLength(min: number, message?: string): Validator<string> {\n return (value) =>\n value && value.length < min ? (message ?? `Must be at least ${min} characters`) : undefined;\n },\n\n /** Requires a maximum string length */\n maxLength(max: number, message?: string): Validator<string> {\n return (value) =>\n value && value.length > max ? (message ?? `Must be at most ${max} characters`) : undefined;\n },\n\n /** Requires a value matching a regex pattern */\n pattern(regex: RegExp, message = 'Invalid format'): Validator<string> {\n return (value) => (value && !regex.test(value) ? message : undefined);\n },\n\n /** Requires a valid email address */\n email(message = 'Must be a valid email address'): Validator<string> {\n // Simple but practical email regex\n const emailRe = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return (value) => (value && !emailRe.test(value) ? message : undefined);\n },\n\n /** Requires a numeric value within a range */\n range(min: number, max: number, message?: string): Validator<string> {\n return (value) => {\n if (!value) return undefined;\n const num = Number(value);\n if (isNaN(num) || num < min || num > max) {\n return message ?? `Must be between ${min} and ${max}`;\n }\n return undefined;\n };\n },\n\n /** Custom validator from a predicate function */\n custom<T = string>(predicate: (value: T) => boolean, message: string): Validator<T> {\n return (value) => (!predicate(value) ? message : undefined);\n },\n} as const;\n",
11
11
  "/**\n * Performance utilities for DuskMoon custom elements\n *\n * Provides debounce, throttle, and scheduling helpers for\n * optimizing element responsiveness and reducing unnecessary work.\n *\n * @example\n * ```ts\n * import { debounce, throttle, scheduleTask } from '@duskmoon-dev/el-base';\n *\n * class MySearch extends BaseElement {\n * #search = debounce((query: string) => {\n * this.emit('search', { query });\n * }, 300);\n *\n * #handleScroll = throttle(() => {\n * this._updatePosition();\n * }, 100);\n * }\n * ```\n */\n\n/**\n * Creates a debounced function that delays invocation until after\n * `delay` milliseconds have elapsed since the last call.\n *\n * Returns a function with a `.cancel()` method to abort pending execution.\n */\nexport function debounce<T extends (...args: Parameters<T>) => void>(\n fn: T,\n delay: number,\n): T & { cancel: () => void } {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = undefined;\n fn.apply(this, args);\n }, delay);\n } as T & { cancel: () => void };\n\n debounced.cancel = () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n\n return debounced;\n}\n\n/**\n * Creates a throttled function that invokes at most once per `interval` ms.\n * Uses leading-edge execution: fires immediately, then suppresses until interval passes.\n *\n * Returns a function with a `.cancel()` method to abort pending execution.\n */\nexport function throttle<T extends (...args: Parameters<T>) => void>(\n fn: T,\n interval: number,\n): T & { cancel: () => void } {\n let lastCall = 0;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const throttled = function (this: unknown, ...args: Parameters<T>) {\n const now = Date.now();\n const remaining = interval - (now - lastCall);\n\n if (remaining <= 0) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n lastCall = now;\n fn.apply(this, args);\n } else if (timeoutId === undefined) {\n timeoutId = setTimeout(() => {\n lastCall = Date.now();\n timeoutId = undefined;\n fn.apply(this, args);\n }, remaining);\n }\n } as T & { cancel: () => void };\n\n throttled.cancel = () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n lastCall = 0;\n };\n\n return throttled;\n}\n\n/**\n * Schedule a low-priority task using requestIdleCallback (with fallback).\n * Useful for deferring non-critical work like analytics, preloading, or cleanup.\n *\n * @returns A cancel function\n */\nexport function scheduleIdle(callback: () => void, options?: { timeout?: number }): () => void {\n if (typeof requestIdleCallback === 'function') {\n const id = requestIdleCallback(callback, options);\n return () => cancelIdleCallback(id);\n }\n // Fallback for environments without requestIdleCallback\n const id = setTimeout(callback, options?.timeout ?? 50);\n return () => clearTimeout(id);\n}\n"
12
12
  ],
13
- "mappings": "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",
13
+ "mappings": "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",
14
14
  "debugId": "F439FB406E87097064756E2164756E21",
15
15
  "names": []
16
16
  }
@@ -6,11 +6,11 @@
6
6
  "/**\n * Base class for all DuskMoon custom elements\n */\n\nimport { resetStyles, defaultTheme } from './styles.js';\n\n/**\n * Property definition for reactive properties\n */\nexport interface PropertyDefinition {\n /** Attribute name (defaults to kebab-case of property name) */\n attribute?: string | false;\n /** Whether changes should reflect to attribute */\n reflect?: boolean;\n /** Property type for conversion */\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array;\n /** Default value */\n default?: unknown;\n}\n\n/**\n * Map of property names to their definitions\n */\nexport type PropertyDefinitions = Record<string, PropertyDefinition>;\n\n/**\n * Base class for all DuskMoon custom elements\n *\n * Provides:\n * - Shadow DOM setup with adoptedStyleSheets\n * - Reactive properties with attribute reflection\n * - Style injection utilities\n * - Common lifecycle methods\n *\n * @example\n * ```ts\n * class MyElement extends BaseElement {\n * static properties = {\n * name: { type: String, reflect: true }\n * };\n *\n * constructor() {\n * super();\n * this.attachStyles(myStyles);\n * }\n *\n * render() {\n * return `<div>Hello, ${this.name}!</div>`;\n * }\n * }\n * ```\n */\nexport abstract class BaseElement extends HTMLElement {\n /**\n * Property definitions for reactive properties\n * Override in subclasses to define properties\n */\n static properties: PropertyDefinitions = {};\n\n /**\n * Observed attributes derived from property definitions\n */\n static get observedAttributes(): string[] {\n return Object.entries(this.properties)\n .filter(([, def]) => def.attribute !== false)\n .map(([name, def]) => def.attribute || toKebabCase(name));\n }\n\n /**\n * Shadow root for the element\n */\n declare shadowRoot: ShadowRoot;\n\n /**\n * Stylesheets attached to this element\n */\n private _styles: CSSStyleSheet[] = [];\n\n /**\n * Whether the element has been connected to the DOM\n */\n private _isConnected = false;\n\n /**\n * Property values set before element upgrade (e.g. by inline scripts\n * that run before customElements.define). Restored in connectedCallback\n * so they survive subclass constructor overwrites.\n */\n private _preUpgradeValues?: Map<string, unknown>;\n\n /**\n * Queue of pending property updates\n */\n private _pendingUpdate = false;\n\n /**\n * Internal property values storage\n */\n private _propertyValues = new Map<string, unknown>();\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n\n // Apply default styles\n this._styles = [resetStyles, defaultTheme];\n this.shadowRoot.adoptedStyleSheets = [...this._styles];\n\n // Initialize properties\n this._initializeProperties();\n }\n\n /**\n * Initialize reactive properties from static definitions\n */\n private _initializeProperties(): void {\n const ctor = this.constructor as typeof BaseElement;\n const properties = ctor.properties;\n\n for (const [name, def] of Object.entries(properties)) {\n // Capture any value set before element upgrade (e.g. by inline scripts\n // that run before customElements.define). The plain instance property\n // must be deleted so the reactive accessor below takes effect.\n // Values are stored in _preUpgradeValues and restored in\n // connectedCallback — after the subclass constructor finishes.\n if (Object.prototype.hasOwnProperty.call(this, name)) {\n const preValue = (this as Record<string, unknown>)[name];\n delete (this as Record<string, unknown>)[name];\n if (preValue !== undefined) {\n if (!this._preUpgradeValues) this._preUpgradeValues = new Map();\n this._preUpgradeValues.set(name, preValue);\n }\n }\n\n // Set default value\n if (def.default !== undefined) {\n this._propertyValues.set(name, def.default);\n }\n\n // Define property accessor\n Object.defineProperty(this, name, {\n get: () => this._propertyValues.get(name),\n set: (value: unknown) => {\n const oldValue = this._propertyValues.get(name);\n if (oldValue === value) return;\n\n this._propertyValues.set(name, value);\n\n // Reflect to attribute if needed\n if (def.reflect && def.attribute !== false) {\n const attrName = def.attribute || toKebabCase(name);\n this._reflectToAttribute(attrName, value, def.type);\n }\n\n // Schedule update\n this._scheduleUpdate();\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n /**\n * Reflect a property value to an attribute\n */\n private _reflectToAttribute(\n attrName: string,\n value: unknown,\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array,\n ): void {\n if (value === null || value === undefined) {\n this.removeAttribute(attrName);\n return;\n }\n\n if (type === Boolean) {\n if (value) {\n this.setAttribute(attrName, '');\n } else {\n this.removeAttribute(attrName);\n }\n return;\n }\n\n if (type === Object || type === Array) {\n this.setAttribute(attrName, JSON.stringify(value));\n return;\n }\n\n this.setAttribute(attrName, String(value));\n }\n\n /**\n * Convert an attribute value to a property value\n */\n private _attributeToProperty(\n value: string | null,\n type?: typeof String | typeof Number | typeof Boolean | typeof Object | typeof Array,\n ): unknown {\n if (value === null) {\n return type === Boolean ? false : undefined;\n }\n\n switch (type) {\n case Boolean:\n return true;\n case Number:\n return Number(value);\n case Object:\n case Array:\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n default:\n return value;\n }\n }\n\n /**\n * Schedule an update for the next microtask\n */\n private _scheduleUpdate(): void {\n if (this._pendingUpdate) return;\n this._pendingUpdate = true;\n\n queueMicrotask(() => {\n this._pendingUpdate = false;\n if (this._isConnected) {\n this.update();\n }\n });\n }\n\n /**\n * Attach additional stylesheets to the Shadow DOM\n *\n * @param styles - CSSStyleSheet or array of stylesheets to attach\n */\n protected attachStyles(styles: CSSStyleSheet | CSSStyleSheet[]): void {\n const sheets = Array.isArray(styles) ? styles : [styles];\n this._styles = [...this._styles, ...sheets];\n this.shadowRoot.adoptedStyleSheets = [...this._styles];\n }\n\n /**\n * Called when the element is connected to the DOM\n */\n connectedCallback(): void {\n this._isConnected = true;\n\n // Restore any property values set before element upgrade.\n // Done here (not in constructor) so subclass constructor defaults\n // don't overwrite them.\n if (this._preUpgradeValues) {\n for (const [name, value] of this._preUpgradeValues) {\n (this as Record<string, unknown>)[name] = value;\n }\n this._preUpgradeValues = undefined;\n }\n\n this.update();\n }\n\n /**\n * Called when the element is disconnected from the DOM\n */\n disconnectedCallback(): void {\n this._isConnected = false;\n }\n\n /**\n * Called when an observed attribute changes\n */\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) return;\n\n const ctor = this.constructor as typeof BaseElement;\n const properties = ctor.properties;\n\n // Find the property for this attribute\n for (const [propName, def] of Object.entries(properties)) {\n const attrName = def.attribute || toKebabCase(propName);\n if (attrName === name) {\n const value = this._attributeToProperty(newValue, def.type);\n this._propertyValues.set(propName, value);\n this._scheduleUpdate();\n break;\n }\n }\n }\n\n /**\n * Called when the element should update its DOM\n * Override to customize update behavior\n */\n protected update(): void {\n const content = this.render();\n if (content !== undefined) {\n this.shadowRoot.innerHTML = content;\n }\n }\n\n /**\n * Returns the HTML content for the element\n * Override in subclasses to define the element's template\n *\n * @returns HTML string or undefined if no update needed\n */\n protected render(): string | undefined {\n return undefined;\n }\n\n /**\n * Emit a custom event from this element\n *\n * @param name - Event name\n * @param detail - Event detail data\n * @param options - Additional event options\n */\n protected emit<T>(name: string, detail?: T, options?: Omit<CustomEventInit, 'detail'>): boolean {\n const event = new CustomEvent(name, {\n bubbles: true,\n composed: true,\n cancelable: true,\n ...options,\n detail,\n });\n return this.dispatchEvent(event);\n }\n\n /**\n * Query an element in the Shadow DOM\n */\n protected query<T extends Element>(selector: string): T | null {\n return this.shadowRoot.querySelector<T>(selector);\n }\n\n /**\n * Query all matching elements in the Shadow DOM\n */\n protected queryAll<T extends Element>(selector: string): NodeListOf<T> {\n return this.shadowRoot.querySelectorAll<T>(selector);\n }\n}\n\n/**\n * Convert a camelCase string to kebab-case\n */\nfunction toKebabCase(str: string): string {\n return str.replace(/([A-Z])/g, '-$1').toLowerCase();\n}\n",
7
7
  "/**\n * Animation utilities for DuskMoon custom elements\n *\n * Provides reusable CSS keyframe animations and transition presets\n * that respect prefers-reduced-motion.\n */\n\nimport { css } from './styles.js';\n\n/**\n * Duration presets matching the design token system\n */\nexport const durations = {\n fast: '150ms',\n normal: '200ms',\n slow: '300ms',\n slower: '500ms',\n} as const;\n\nexport type AnimationDuration = keyof typeof durations;\n\n/**\n * Easing presets for consistent motion curves\n */\nexport const easings = {\n ease: 'ease',\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n easeOut: 'cubic-bezier(0, 0, 0.2, 1)',\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n} as const;\n\nexport type AnimationEasing = keyof typeof easings;\n\n/**\n * Core animation keyframes stylesheet.\n * Attach this to elements that need entrance/exit animations.\n */\nexport const animationStyles = css`\n @keyframes dm-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes dm-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n @keyframes dm-scale-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n @keyframes dm-scale-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.95);\n }\n }\n\n @keyframes dm-slide-in-up {\n from {\n opacity: 0;\n transform: translateY(0.5rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dm-slide-in-down {\n from {\n opacity: 0;\n transform: translateY(-0.5rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dm-slide-in-left {\n from {\n opacity: 0;\n transform: translateX(0.5rem);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n @keyframes dm-slide-in-right {\n from {\n opacity: 0;\n transform: translateX(-0.5rem);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n @keyframes dm-shake {\n 0%,\n 100% {\n transform: translateX(0);\n }\n 10%,\n 30%,\n 50%,\n 70%,\n 90% {\n transform: translateX(-0.25rem);\n }\n 20%,\n 40%,\n 60%,\n 80% {\n transform: translateX(0.25rem);\n }\n }\n\n @keyframes dm-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes dm-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n /* Reduced motion: disable all animations */\n @media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n }\n`;\n\n/**\n * Generate a CSS animation shorthand value\n *\n * @example\n * ```ts\n * const fadeIn = animation('dm-fade-in', 'normal', 'easeOut');\n * // Returns: \"dm-fade-in 200ms cubic-bezier(0, 0, 0.2, 1) both\"\n * ```\n */\nexport function animation(\n name: string,\n duration: AnimationDuration = 'normal',\n easing: AnimationEasing = 'easeOut',\n fillMode: 'none' | 'forwards' | 'backwards' | 'both' = 'both',\n): string {\n return `${name} ${durations[duration]} ${easings[easing]} ${fillMode}`;\n}\n\n/**\n * Generate a CSS transition shorthand for common properties\n *\n * @example\n * ```ts\n * const hoverTransition = transition(['opacity', 'transform'], 'fast');\n * // Returns: \"opacity 150ms ease, transform 150ms ease\"\n * ```\n */\nexport function transition(\n properties: string[],\n duration: AnimationDuration = 'normal',\n easing: AnimationEasing = 'ease',\n): string {\n return properties.map((prop) => `${prop} ${durations[duration]} ${easings[easing]}`).join(', ');\n}\n",
8
8
  "/**\n * Theme presets for DuskMoon Elements\n *\n * Each theme provides a complete set of CSS custom properties\n * that can be applied to :root or any container element.\n *\n * Usage:\n * ```html\n * <style>\n * :root { ${sunshineTheme} }\n * [data-theme=\"moonlight\"] { ${moonlightTheme} }\n * [data-theme=\"ocean\"] { ${oceanTheme} }\n * </style>\n * ```\n */\n\n/**\n * Sunshine theme (light) — warm, friendly, high contrast\n * Default light theme with blue primary\n */\nexport const sunshineTheme = `\n /* Primary */\n --color-primary: oklch(60% 0.15 250);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.1 250);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(50% 0.12 300);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: white;\n --color-surface-container: oklch(97% 0.01 250);\n --color-surface-container-low: oklch(98% 0.005 250);\n --color-surface-container-high: oklch(94% 0.01 250);\n --color-surface-variant: oklch(92% 0.01 250);\n --color-on-surface: oklch(25% 0.02 250);\n --color-on-surface-variant: oklch(45% 0.02 250);\n --color-inverse-surface: oklch(25% 0.02 250);\n --color-inverse-on-surface: oklch(95% 0.01 250);\n\n /* Outline */\n --color-outline: oklch(75% 0.02 250);\n --color-outline-variant: oklch(85% 0.01 250);\n\n /* Semantic */\n --color-success: oklch(60% 0.15 145);\n --color-on-success: white;\n --color-warning: oklch(75% 0.15 85);\n --color-on-warning: oklch(25% 0.05 85);\n --color-error: oklch(55% 0.2 25);\n --color-on-error: white;\n --color-info: oklch(60% 0.15 250);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px white, 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Moonlight theme (dark) — elegant, modern dark mode\n */\nexport const moonlightTheme = `\n /* Primary */\n --color-primary: oklch(72% 0.15 250);\n --color-primary-content: oklch(20% 0.05 250);\n --color-on-primary: oklch(20% 0.05 250);\n\n /* Secondary */\n --color-secondary: oklch(68% 0.1 250);\n --color-secondary-content: oklch(20% 0.05 250);\n --color-on-secondary: oklch(20% 0.05 250);\n\n /* Tertiary */\n --color-tertiary: oklch(70% 0.12 300);\n --color-tertiary-content: oklch(20% 0.05 300);\n --color-on-tertiary: oklch(20% 0.05 300);\n\n /* Surface */\n --color-surface: oklch(18% 0.02 250);\n --color-surface-container: oklch(22% 0.02 250);\n --color-surface-container-low: oklch(20% 0.02 250);\n --color-surface-container-high: oklch(26% 0.02 250);\n --color-surface-variant: oklch(30% 0.02 250);\n --color-on-surface: oklch(92% 0.01 250);\n --color-on-surface-variant: oklch(75% 0.02 250);\n --color-inverse-surface: oklch(92% 0.01 250);\n --color-inverse-on-surface: oklch(25% 0.02 250);\n\n /* Outline */\n --color-outline: oklch(45% 0.02 250);\n --color-outline-variant: oklch(35% 0.02 250);\n\n /* Semantic */\n --color-success: oklch(70% 0.15 145);\n --color-on-success: oklch(20% 0.05 145);\n --color-warning: oklch(80% 0.12 85);\n --color-on-warning: oklch(20% 0.05 85);\n --color-error: oklch(65% 0.2 25);\n --color-on-error: oklch(20% 0.05 25);\n --color-info: oklch(70% 0.15 250);\n --color-on-info: oklch(20% 0.05 250);\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.4);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(18% 0.02 250), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Ocean theme — deep blue/teal palette, calm and professional\n */\nexport const oceanTheme = `\n /* Primary */\n --color-primary: oklch(58% 0.12 210);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.08 185);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(60% 0.1 170);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(98% 0.005 210);\n --color-surface-container: oklch(96% 0.01 210);\n --color-surface-container-low: oklch(97% 0.005 210);\n --color-surface-container-high: oklch(93% 0.01 210);\n --color-surface-variant: oklch(91% 0.01 210);\n --color-on-surface: oklch(22% 0.02 210);\n --color-on-surface-variant: oklch(40% 0.02 210);\n --color-inverse-surface: oklch(22% 0.02 210);\n --color-inverse-on-surface: oklch(95% 0.01 210);\n\n /* Outline */\n --color-outline: oklch(72% 0.02 210);\n --color-outline-variant: oklch(82% 0.01 210);\n\n /* Semantic */\n --color-success: oklch(62% 0.14 155);\n --color-on-success: white;\n --color-warning: oklch(76% 0.14 80);\n --color-on-warning: oklch(25% 0.05 80);\n --color-error: oklch(56% 0.18 20);\n --color-on-error: white;\n --color-info: oklch(58% 0.12 210);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.06);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.08);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(98% 0.005 210), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Forest theme — earthy greens and warm browns, natural feel\n */\nexport const forestTheme = `\n /* Primary */\n --color-primary: oklch(52% 0.12 155);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(50% 0.08 70);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(55% 0.1 120);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(97% 0.005 90);\n --color-surface-container: oklch(95% 0.01 90);\n --color-surface-container-low: oklch(96% 0.005 90);\n --color-surface-container-high: oklch(92% 0.01 90);\n --color-surface-variant: oklch(90% 0.01 90);\n --color-on-surface: oklch(22% 0.03 90);\n --color-on-surface-variant: oklch(40% 0.03 90);\n --color-inverse-surface: oklch(22% 0.03 90);\n --color-inverse-on-surface: oklch(95% 0.01 90);\n\n /* Outline */\n --color-outline: oklch(70% 0.03 90);\n --color-outline-variant: oklch(82% 0.01 90);\n\n /* Semantic */\n --color-success: oklch(58% 0.14 145);\n --color-on-success: white;\n --color-warning: oklch(74% 0.14 85);\n --color-on-warning: oklch(25% 0.05 85);\n --color-error: oklch(54% 0.18 25);\n --color-on-error: white;\n --color-info: oklch(55% 0.12 230);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.08);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(97% 0.005 90), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Rosé theme — soft pinks and warm tones, elegant and modern\n */\nexport const roseTheme = `\n /* Primary */\n --color-primary: oklch(60% 0.16 350);\n --color-primary-content: white;\n --color-on-primary: white;\n\n /* Secondary */\n --color-secondary: oklch(55% 0.1 330);\n --color-secondary-content: white;\n --color-on-secondary: white;\n\n /* Tertiary */\n --color-tertiary: oklch(58% 0.12 15);\n --color-tertiary-content: white;\n --color-on-tertiary: white;\n\n /* Surface */\n --color-surface: oklch(98% 0.005 350);\n --color-surface-container: oklch(96% 0.01 350);\n --color-surface-container-low: oklch(97% 0.005 350);\n --color-surface-container-high: oklch(93% 0.01 350);\n --color-surface-variant: oklch(91% 0.01 350);\n --color-on-surface: oklch(22% 0.02 350);\n --color-on-surface-variant: oklch(42% 0.02 350);\n --color-inverse-surface: oklch(22% 0.02 350);\n --color-inverse-on-surface: oklch(95% 0.005 350);\n\n /* Outline */\n --color-outline: oklch(72% 0.02 350);\n --color-outline-variant: oklch(84% 0.01 350);\n\n /* Semantic */\n --color-success: oklch(62% 0.14 148);\n --color-on-success: white;\n --color-warning: oklch(76% 0.14 82);\n --color-on-warning: oklch(25% 0.05 82);\n --color-error: oklch(55% 0.2 22);\n --color-on-error: white;\n --color-info: oklch(58% 0.14 245);\n --color-on-info: white;\n\n /* Shadows */\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n /* Focus */\n --focus-ring: 0 0 0 2px var(--color-primary);\n --focus-ring-offset: 0 0 0 2px oklch(98% 0.005 350), 0 0 0 4px var(--color-primary);\n`;\n\n/**\n * Map of all available theme presets\n */\nexport const themes = {\n sunshine: sunshineTheme,\n moonlight: moonlightTheme,\n ocean: oceanTheme,\n forest: forestTheme,\n rose: roseTheme,\n} as const;\n\nexport type ThemeName = keyof typeof themes;\n\n/**\n * Apply a theme to an element by setting CSS custom properties\n *\n * @param element - The element to apply the theme to (usually document.documentElement)\n * @param theme - Theme name or custom CSS properties string\n */\nexport function applyTheme(element: HTMLElement, theme: ThemeName | string): void {\n const css = typeof theme === 'string' && theme in themes ? themes[theme as ThemeName] : theme;\n\n // Parse CSS custom properties from the theme string\n const props = css.match(/--[\\w-]+:\\s*[^;]+/g);\n if (props) {\n for (const prop of props) {\n const [name, ...valueParts] = prop.split(':');\n const value = valueParts.join(':').trim();\n element.style.setProperty(name.trim(), value);\n }\n }\n}\n",
9
- "/**\n * Composition mixins for DuskMoon custom elements\n *\n * Mixins add reusable behaviors to BaseElement subclasses using\n * the TypeScript mixin pattern (class expression extending a base).\n *\n * @example\n * ```ts\n * import { BaseElement, FocusableMixin, FormMixin } from '@duskmoon-dev/el-base';\n *\n * class MyInput extends FormMixin(FocusableMixin(BaseElement)) {\n * // Now has focus management + form association behaviors\n * }\n * ```\n */\n\nimport type { PropertyDefinitions } from './base-element.js';\n\n/**\n * A constructor type that returns an HTMLElement with shadow DOM and\n * lifecycle methods. Using HTMLElement (not BaseElement) avoids TS4094\n * errors where private BaseElement members leak into anonymous class types.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T = HTMLElement> = abstract new (...args: any[]) => T;\n\ninterface BaseElementLike extends HTMLElement {\n connectedCallback(): void;\n disconnectedCallback(): void;\n shadowRoot: ShadowRoot;\n}\n\ninterface BaseElementConstructorLike {\n properties: PropertyDefinitions;\n}\n\n/**\n * Mixin that adds keyboard focus management.\n * Sets tabindex, handles focus/blur events, and tracks focused state.\n */\nexport function FocusableMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FocusableElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n focused: { type: Boolean, reflect: true, default: false },\n };\n\n declare focused: boolean;\n\n #handleFocus = () => {\n this.focused = true;\n };\n\n #handleBlur = () => {\n this.focused = false;\n };\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n this.addEventListener('focus', this.#handleFocus);\n this.addEventListener('blur', this.#handleBlur);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('focus', this.#handleFocus);\n this.removeEventListener('blur', this.#handleBlur);\n }\n }\n\n return FocusableElement;\n}\n\n/**\n * Mixin that adds form association.\n * Provides name/value/disabled/required props and form participation.\n */\nexport function FormMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FormElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n name: { type: String, reflect: true, default: '' },\n value: { type: String, reflect: true, default: '' },\n disabled: { type: Boolean, reflect: true, default: false },\n required: { type: Boolean, reflect: true, default: false },\n };\n\n declare name: string;\n declare value: string;\n declare disabled: boolean;\n declare required: boolean;\n\n /** Get the form this element is associated with */\n get form(): HTMLFormElement | null {\n return this.closest('form');\n }\n }\n\n return FormElement;\n}\n\n/**\n * Mixin that adds event listener management with automatic cleanup.\n * Listeners added via addListener() are removed on disconnect.\n */\nexport function EventListenerMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class EventListenerElement extends Base {\n #listeners: Array<{\n target: EventTarget;\n type: string;\n handler: EventListener;\n options?: boolean | AddEventListenerOptions;\n }> = [];\n\n /**\n * Add an event listener that will be automatically removed on disconnect\n */\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n target.addEventListener(type, handler, options);\n this.#listeners.push({ target, type, handler, options });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n for (const { target, type, handler, options } of this.#listeners) {\n target.removeEventListener(type, handler, options);\n }\n this.#listeners = [];\n }\n }\n\n return EventListenerElement;\n}\n\n/**\n * Mixin that adds slot change observation.\n * Tracks slotted elements and fires a callback when slots change.\n */\nexport function SlotObserverMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class SlotObserverElement extends Base {\n #slotObservers: Map<string, (elements: Element[]) => void> = new Map();\n\n /**\n * Observe a named slot (or '' for default) and call handler when content changes\n */\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void {\n this.#slotObservers.set(slotName, handler);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Defer to next frame so shadow DOM is rendered\n requestAnimationFrame(() => this.#attachSlotListeners());\n }\n\n #attachSlotListeners(): void {\n const slots = this.shadowRoot.querySelectorAll('slot');\n for (const slot of slots) {\n const name = slot.name || '';\n const handler = this.#slotObservers.get(name);\n if (handler) {\n slot.addEventListener('slotchange', () => {\n const elements = slot.assignedElements();\n handler(elements);\n });\n // Fire initial\n const elements = slot.assignedElements();\n handler(elements);\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#slotObservers.clear();\n }\n }\n\n return SlotObserverElement;\n}\n",
9
+ "/**\n * Composition mixins for DuskMoon custom elements\n *\n * Mixins add reusable behaviors to BaseElement subclasses using\n * the TypeScript mixin pattern (class expression extending a base).\n *\n * @example\n * ```ts\n * import { BaseElement, FocusableMixin, FormMixin } from '@duskmoon-dev/el-base';\n *\n * class MyInput extends FormMixin(FocusableMixin(BaseElement)) {\n * // Now has focus management + form association behaviors\n * }\n * ```\n */\n\nimport type { PropertyDefinitions } from './base-element.js';\n\n/**\n * A constructor type that returns an HTMLElement with shadow DOM and\n * lifecycle methods. Using HTMLElement (not BaseElement) avoids TS4094\n * errors where private BaseElement members leak into anonymous class types.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T = HTMLElement> = abstract new (...args: any[]) => T;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AbstractConstructor<T = object> = abstract new (...args: any[]) => T;\n\ninterface BaseElementLike extends HTMLElement {\n connectedCallback(): void;\n disconnectedCallback(): void;\n shadowRoot: ShadowRoot;\n}\n\ninterface BaseElementConstructorLike {\n properties: PropertyDefinitions;\n}\n\n/**\n * Mixin that adds keyboard focus management.\n * Sets tabindex, handles focus/blur events, and tracks focused state.\n */\nexport function FocusableMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T & AbstractConstructor<{ focused: boolean }> {\n abstract class FocusableElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n focused: { type: Boolean, reflect: true, default: false },\n };\n\n declare focused: boolean;\n\n #handleFocus = () => {\n this.focused = true;\n };\n\n #handleBlur = () => {\n this.focused = false;\n };\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n this.addEventListener('focus', this.#handleFocus);\n this.addEventListener('blur', this.#handleBlur);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('focus', this.#handleFocus);\n this.removeEventListener('blur', this.#handleBlur);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return FocusableElement as any;\n}\n\n/**\n * Mixin that adds form association.\n * Provides name/value/disabled/required props and form participation.\n */\nexport function FormMixin<T extends Constructor<BaseElementLike>>(Base: T) {\n abstract class FormElement extends Base {\n static properties: PropertyDefinitions = {\n ...(Base as unknown as BaseElementConstructorLike).properties,\n name: { type: String, reflect: true, default: '' },\n value: { type: String, reflect: true, default: '' },\n disabled: { type: Boolean, reflect: true, default: false },\n required: { type: Boolean, reflect: true, default: false },\n };\n\n declare name: string;\n declare value: string;\n declare disabled: boolean;\n declare required: boolean;\n\n /** Get the form this element is associated with */\n get form(): HTMLFormElement | null {\n return this.closest('form');\n }\n }\n\n return FormElement;\n}\n\n/**\n * Mixin that adds event listener management with automatic cleanup.\n * Listeners added via addListener() are removed on disconnect.\n */\nexport function EventListenerMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T &\n AbstractConstructor<{\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void;\n }> {\n abstract class EventListenerElement extends Base {\n #listeners: Array<{\n target: EventTarget;\n type: string;\n handler: EventListener;\n options?: boolean | AddEventListenerOptions;\n }> = [];\n\n /**\n * Add an event listener that will be automatically removed on disconnect\n */\n addListener(\n target: EventTarget,\n type: string,\n handler: EventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n target.addEventListener(type, handler, options);\n this.#listeners.push({ target, type, handler, options });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n for (const { target, type, handler, options } of this.#listeners) {\n target.removeEventListener(type, handler, options);\n }\n this.#listeners = [];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return EventListenerElement as any;\n}\n\n/**\n * Mixin that adds slot change observation.\n * Tracks slotted elements and fires a callback when slots change.\n */\nexport function SlotObserverMixin<T extends Constructor<BaseElementLike>>(\n Base: T,\n): T &\n AbstractConstructor<{\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void;\n }> {\n abstract class SlotObserverElement extends Base {\n #slotObservers: Map<string, (elements: Element[]) => void> = new Map();\n\n /**\n * Observe a named slot (or '' for default) and call handler when content changes\n */\n observeSlot(slotName: string, handler: (elements: Element[]) => void): void {\n this.#slotObservers.set(slotName, handler);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // Defer to next frame so shadow DOM is rendered\n requestAnimationFrame(() => this.#attachSlotListeners());\n }\n\n #attachSlotListeners(): void {\n const slots = this.shadowRoot.querySelectorAll('slot');\n for (const slot of slots) {\n const name = slot.name || '';\n const handler = this.#slotObservers.get(name);\n if (handler) {\n slot.addEventListener('slotchange', () => {\n const elements = slot.assignedElements();\n handler(elements);\n });\n // Fire initial\n const elements = slot.assignedElements();\n handler(elements);\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#slotObservers.clear();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return SlotObserverElement as any;\n}\n",
10
10
  "/**\n * Validation utilities for DuskMoon form elements\n *\n * Provides composable validator functions that can be used with\n * any form element supporting ValidationState and errorMessage props.\n *\n * @example\n * ```ts\n * import { validate, validators } from '@duskmoon-dev/el-base';\n *\n * const result = validate('hello@example.com', [\n * validators.required('Email is required'),\n * validators.email('Must be a valid email'),\n * ]);\n *\n * // result = { state: 'valid', message: undefined }\n *\n * inputEl.validationState = result.state;\n * inputEl.errorMessage = result.message ?? '';\n * ```\n */\n\nimport type { ValidationState } from './types.js';\n\n/**\n * Result of a validation check\n */\nexport interface ValidationResult {\n state: NonNullable<ValidationState>;\n message: string | undefined;\n}\n\n/**\n * A validator function takes a value and returns an error message\n * if invalid, or undefined/null if valid.\n */\nexport type Validator<T = string> = (value: T) => string | undefined | null;\n\n/**\n * Run a value through a list of validators, returning on the first failure.\n * Returns { state: 'valid' } if all pass, { state: 'invalid', message } on first failure.\n */\nexport function validate<T = string>(value: T, rules: Validator<T>[]): ValidationResult {\n for (const rule of rules) {\n const message = rule(value);\n if (message) {\n return { state: 'invalid', message };\n }\n }\n return { state: 'valid', message: undefined };\n}\n\n/**\n * Run a value through an async validator.\n * Sets state to 'pending' during execution.\n */\nexport async function validateAsync<T = string>(\n value: T,\n rules: Validator<T>[],\n asyncRule: (value: T) => Promise<string | undefined | null>,\n): Promise<ValidationResult> {\n // Run sync rules first\n const syncResult = validate(value, rules);\n if (syncResult.state === 'invalid') {\n return syncResult;\n }\n\n // Run async rule\n const message = await asyncRule(value);\n if (message) {\n return { state: 'invalid', message };\n }\n return { state: 'valid', message: undefined };\n}\n\n/**\n * Built-in validators for common patterns\n */\nexport const validators = {\n /** Requires a non-empty value */\n required(message = 'This field is required'): Validator<string> {\n return (value) => (!value || value.trim().length === 0 ? message : undefined);\n },\n\n /** Requires a minimum string length */\n minLength(min: number, message?: string): Validator<string> {\n return (value) =>\n value && value.length < min ? (message ?? `Must be at least ${min} characters`) : undefined;\n },\n\n /** Requires a maximum string length */\n maxLength(max: number, message?: string): Validator<string> {\n return (value) =>\n value && value.length > max ? (message ?? `Must be at most ${max} characters`) : undefined;\n },\n\n /** Requires a value matching a regex pattern */\n pattern(regex: RegExp, message = 'Invalid format'): Validator<string> {\n return (value) => (value && !regex.test(value) ? message : undefined);\n },\n\n /** Requires a valid email address */\n email(message = 'Must be a valid email address'): Validator<string> {\n // Simple but practical email regex\n const emailRe = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return (value) => (value && !emailRe.test(value) ? message : undefined);\n },\n\n /** Requires a numeric value within a range */\n range(min: number, max: number, message?: string): Validator<string> {\n return (value) => {\n if (!value) return undefined;\n const num = Number(value);\n if (isNaN(num) || num < min || num > max) {\n return message ?? `Must be between ${min} and ${max}`;\n }\n return undefined;\n };\n },\n\n /** Custom validator from a predicate function */\n custom<T = string>(predicate: (value: T) => boolean, message: string): Validator<T> {\n return (value) => (!predicate(value) ? message : undefined);\n },\n} as const;\n",
11
11
  "/**\n * Performance utilities for DuskMoon custom elements\n *\n * Provides debounce, throttle, and scheduling helpers for\n * optimizing element responsiveness and reducing unnecessary work.\n *\n * @example\n * ```ts\n * import { debounce, throttle, scheduleTask } from '@duskmoon-dev/el-base';\n *\n * class MySearch extends BaseElement {\n * #search = debounce((query: string) => {\n * this.emit('search', { query });\n * }, 300);\n *\n * #handleScroll = throttle(() => {\n * this._updatePosition();\n * }, 100);\n * }\n * ```\n */\n\n/**\n * Creates a debounced function that delays invocation until after\n * `delay` milliseconds have elapsed since the last call.\n *\n * Returns a function with a `.cancel()` method to abort pending execution.\n */\nexport function debounce<T extends (...args: Parameters<T>) => void>(\n fn: T,\n delay: number,\n): T & { cancel: () => void } {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const debounced = function (this: unknown, ...args: Parameters<T>) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n timeoutId = undefined;\n fn.apply(this, args);\n }, delay);\n } as T & { cancel: () => void };\n\n debounced.cancel = () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n\n return debounced;\n}\n\n/**\n * Creates a throttled function that invokes at most once per `interval` ms.\n * Uses leading-edge execution: fires immediately, then suppresses until interval passes.\n *\n * Returns a function with a `.cancel()` method to abort pending execution.\n */\nexport function throttle<T extends (...args: Parameters<T>) => void>(\n fn: T,\n interval: number,\n): T & { cancel: () => void } {\n let lastCall = 0;\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const throttled = function (this: unknown, ...args: Parameters<T>) {\n const now = Date.now();\n const remaining = interval - (now - lastCall);\n\n if (remaining <= 0) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n lastCall = now;\n fn.apply(this, args);\n } else if (timeoutId === undefined) {\n timeoutId = setTimeout(() => {\n lastCall = Date.now();\n timeoutId = undefined;\n fn.apply(this, args);\n }, remaining);\n }\n } as T & { cancel: () => void };\n\n throttled.cancel = () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n lastCall = 0;\n };\n\n return throttled;\n}\n\n/**\n * Schedule a low-priority task using requestIdleCallback (with fallback).\n * Useful for deferring non-critical work like analytics, preloading, or cleanup.\n *\n * @returns A cancel function\n */\nexport function scheduleIdle(callback: () => void, options?: { timeout?: number }): () => void {\n if (typeof requestIdleCallback === 'function') {\n const id = requestIdleCallback(callback, options);\n return () => cancelIdleCallback(id);\n }\n // Fallback for environments without requestIdleCallback\n const id = setTimeout(callback, options?.timeout ?? 50);\n return () => clearTimeout(id);\n}\n"
12
12
  ],
13
- "mappings": "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",
13
+ "mappings": "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",
14
14
  "debugId": "68AFD94A846D93BF64756E2164756E21",
15
15
  "names": []
16
16
  }