aeva-ui 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aeva-ui.umd.cjs","sources":["../src/components/atoms/aeva-button.ts","../src/components/atoms/aeva-text.ts","../src/components/atoms/aeva-input.ts","../src/components/atoms/aeva-modal.ts","../src/components/atoms/aeva-page.ts","../src/components/atoms/aeva-icon.ts","../src/components/atoms/aeva-radio.ts","../src/components/atoms/aeva-checkbox.ts","../src/components/atoms/aeva-tab-item.ts","../src/components/atoms/aeva-card.ts","../src/components/atoms/aeva-progress.ts","../src/components/atoms/aeva-badge.ts","../src/components/atoms/aeva-ripple.ts","../src/components/atoms/aeva-list-item.ts","../src/components/atoms/aeva-popup-menu.ts","../src/components/atoms/aeva-tooltip.ts","../src/components/atoms/aeva-rating.ts","../src/components/atoms/aeva-code.ts","../src/utils/radio-group-helper.ts","../src/utils/checkbox-group-helper.ts","../src/components/molecules/aeva-tab.ts","../src/components/molecules/aeva-list.ts","../src/components/molecules/aeva-toast.ts","../src/components/molecules/aeva-action-bar.ts","../src/components/molecules/aeva-carousel.ts","../src/components/organisms/aeva-sidebar.ts","../src/components/templates/layout/aeva-stack.ts","../src/components/templates/layout/aeva-grid.ts","../src/components/templates/layout/aeva-grid-item.ts","../src/components/templates/layout/aeva-bento-grid.ts","../src/components/templates/layout/aeva-masonry.ts","../src/components/templates/layout/aeva-section.ts","../src/theme/tokens/token.ts","../src/theme/tokens/color.ts","../src/theme/tokens/light.ts","../src/theme/tokens/dark.ts","../src/theme/aeva-theme.ts","../src/index.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\n\r\n/**\r\n * A versatile button component with multiple variants, sizes, and states.\r\n * Supports text, icons, and combinations with full accessibility support.\r\n *\r\n * @slot - Default slot for button text content\r\n * @slot icon-left - Slot for icon on the left side of text\r\n * @slot icon-right - Slot for icon on the right side of text\r\n * @slot icon-only - Slot for icon-only button\r\n *\r\n * @csspart button - The button element\r\n *\r\n * @cssprop --aeva-button-font-family - Font family for button text\r\n * @cssprop --aeva-button-border-radius - Border radius for all buttons\r\n * @cssprop --aeva-button-transition - Transition timing for state changes\r\n * @cssprop --aeva-button-focus-ring-color - Color of the focus ring\r\n * @cssprop --aeva-button-focus-ring-width - Width of the focus ring\r\n * @cssprop --aeva-button-focus-ring-offset - Offset of the focus ring\r\n *\r\n * @cssprop --aeva-button-primary-bg - Primary variant background color\r\n * @cssprop --aeva-button-primary-color - Primary variant text color\r\n * @cssprop --aeva-button-primary-hover-bg - Primary variant hover background\r\n * @cssprop --aeva-button-primary-active-bg - Primary variant active background\r\n *\r\n * @cssprop --aeva-button-secondary-bg - Secondary variant background color\r\n * @cssprop --aeva-button-secondary-color - Secondary variant text color\r\n * @cssprop --aeva-button-secondary-hover-bg - Secondary variant hover background\r\n * @cssprop --aeva-button-secondary-active-bg - Secondary variant active background\r\n *\r\n * @cssprop --aeva-button-outline-border-color - Outline variant border color\r\n * @cssprop --aeva-button-outline-color - Outline variant text color\r\n * @cssprop --aeva-button-outline-hover-bg - Outline variant hover background\r\n *\r\n * @cssprop --aeva-button-ghost-color - Ghost variant text color\r\n * @cssprop --aeva-button-ghost-hover-bg - Ghost variant hover background\r\n *\r\n * @cssprop --aeva-button-danger-bg - Danger variant background color\r\n * @cssprop --aeva-button-danger-color - Danger variant text color\r\n * @cssprop --aeva-button-danger-hover-bg - Danger variant hover background\r\n * @cssprop --aeva-button-danger-active-bg - Danger variant active background\r\n *\r\n * @cssprop --aeva-button-disabled-opacity - Opacity for disabled state\r\n * @cssprop --aeva-button-disabled-cursor - Cursor for disabled state\r\n *\r\n * @cssprop --aeva-button-padding-sm - Padding for small button\r\n * @cssprop --aeva-button-font-size-sm - Font size for small button\r\n * @cssprop --aeva-button-padding-md - Padding for medium button\r\n * @cssprop --aeva-button-font-size-md - Font size for medium button\r\n * @cssprop --aeva-button-padding-lg - Padding for large button\r\n * @cssprop --aeva-button-font-size-lg - Font size for large button\r\n *\r\n * @cssprop --aeva-button-icon-padding-sm - Padding for small icon-only button\r\n * @cssprop --aeva-button-icon-width-sm - Width for small icon-only button\r\n * @cssprop --aeva-button-icon-padding-md - Padding for medium icon-only button\r\n * @cssprop --aeva-button-icon-width-md - Width for medium icon-only button\r\n * @cssprop --aeva-button-icon-padding-lg - Padding for large icon-only button\r\n * @cssprop --aeva-button-icon-width-lg - Width for large icon-only button\r\n *\r\n * @cssprop --aeva-button-gap - Gap between icon and text\r\n * @cssprop --aeva-button-outline-active-bg - Outline variant active background\r\n * @cssprop --aeva-button-ghost-active-bg - Ghost variant active background\r\n */\r\n@customElement('aeva-button')\r\nexport class AevaButton extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n max-width: 80%;\r\n }\r\n\r\n :host([full-width]) {\r\n display: block;\r\n width: 100%;\r\n max-width: 100%;\r\n }\r\n\r\n button {\r\n font-family: var(--aeva-button-font-family);\r\n border: none;\r\n cursor: pointer;\r\n font-weight: 500;\r\n transition: var(--aeva-button-transition);\r\n border-radius: var(--aeva-button-border-radius);\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: var(--aeva-button-gap);\r\n white-space: nowrap;\r\n position: relative;\r\n /* Minimum 44x44px hit area for accessibility */\r\n min-width: 44px;\r\n min-height: 44px;\r\n /* Remove tap highlight on mobile */\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n :host([full-width]) button {\r\n max-width: none;\r\n width: 100%;\r\n }\r\n\r\n /* Focus ring for accessibility */\r\n button:focus-visible {\r\n outline: var(--aeva-button-focus-ring-width) solid\r\n var(--aeva-button-focus-ring-color);\r\n outline-offset: var(--aeva-button-focus-ring-offset);\r\n }\r\n\r\n /* Size variants */\r\n .size-sm {\r\n padding: var(--aeva-button-padding-sm);\r\n font-size: var(--aeva-button-font-size-sm);\r\n }\r\n\r\n .size-md {\r\n padding: var(--aeva-button-padding-md);\r\n font-size: var(--aeva-button-font-size-md);\r\n }\r\n\r\n .size-lg {\r\n padding: var(--aeva-button-padding-lg);\r\n font-size: var(--aeva-button-font-size-lg);\r\n }\r\n\r\n /* Icon-only buttons - square shape */\r\n .icon-only {\r\n padding: var(--aeva-button-icon-padding-md);\r\n gap: 0;\r\n aspect-ratio: 1;\r\n }\r\n\r\n .icon-only.size-sm {\r\n padding: var(--aeva-button-icon-padding-sm);\r\n width: var(--aeva-button-icon-width-sm);\r\n }\r\n\r\n .icon-only.size-md {\r\n padding: var(--aeva-button-icon-padding-md);\r\n width: var(--aeva-button-icon-width-md);\r\n }\r\n\r\n .icon-only.size-lg {\r\n padding: var(--aeva-button-icon-padding-lg);\r\n width: var(--aeva-button-icon-width-lg);\r\n }\r\n\r\n /* Primary variant */\r\n .variant-primary {\r\n background-color: var(--aeva-button-primary-bg);\r\n color: var(--aeva-button-primary-color);\r\n }\r\n\r\n .variant-primary:hover:not(:disabled) {\r\n background-color: var(--aeva-button-primary-hover-bg);\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); /* Fallback */\r\n box-shadow: 0 4px 12px color-mix(in srgb, var(--aeva-button-primary-bg) 40%, transparent);\r\n }\r\n\r\n .variant-primary:active:not(:disabled) {\r\n background-color: var(--aeva-button-primary-active-bg);\r\n transform: scale(0.95);\r\n box-shadow: none;\r\n }\r\n\r\n /* Secondary variant */\r\n .variant-secondary {\r\n background-color: var(--aeva-button-secondary-bg);\r\n color: var(--aeva-button-secondary-color);\r\n }\r\n\r\n .variant-secondary:hover:not(:disabled) {\r\n background-color: var(--aeva-button-secondary-hover-bg);\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 12px rgba(108, 117, 125, 0.4); /* Fallback */\r\n box-shadow: 0 4px 12px color-mix(in srgb, var(--aeva-button-secondary-bg) 40%, transparent);\r\n }\r\n\r\n .variant-secondary:active:not(:disabled) {\r\n background-color: var(--aeva-button-secondary-active-bg);\r\n transform: scale(0.95);\r\n box-shadow: none;\r\n }\r\n\r\n /* Outline variant */\r\n .variant-outline {\r\n background-color: transparent;\r\n color: var(--aeva-button-outline-color);\r\n border: 2px solid var(--aeva-button-outline-border-color);\r\n }\r\n\r\n .variant-outline:hover:not(:disabled) {\r\n background-color: var(--aeva-button-outline-hover-bg);\r\n transform: translateY(-1px);\r\n }\r\n\r\n .variant-outline:active:not(:disabled) {\r\n background-color: rgba(102, 126, 234, 0.2); /* Fallback */\r\n background-color: var(--aeva-button-outline-active-bg);\r\n background-color: color-mix(in srgb, var(--aeva-button-outline-color) 20%, transparent);\r\n transform: scale(0.95);\r\n }\r\n\r\n /* Ghost variant */\r\n .variant-ghost {\r\n background-color: transparent;\r\n color: var(--aeva-button-ghost-color);\r\n }\r\n\r\n .variant-ghost:hover:not(:disabled) {\r\n background-color: var(--aeva-button-ghost-hover-bg);\r\n }\r\n\r\n .variant-ghost:active:not(:disabled) {\r\n background-color: rgba(102, 126, 234, 0.2); /* Fallback */\r\n background-color: var(--aeva-button-ghost-active-bg);\r\n background-color: color-mix(in srgb, var(--aeva-button-ghost-color) 20%, transparent);\r\n transform: scale(0.95);\r\n }\r\n\r\n /* Danger variant */\r\n .variant-danger {\r\n background-color: var(--aeva-button-danger-bg);\r\n color: var(--aeva-button-danger-color);\r\n }\r\n\r\n .variant-danger:hover:not(:disabled) {\r\n background-color: var(--aeva-button-danger-hover-bg);\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4); /* Fallback */\r\n box-shadow: 0 4px 12px color-mix(in srgb, var(--aeva-button-danger-bg) 40%, transparent);\r\n }\r\n\r\n .variant-danger:active:not(:disabled) {\r\n background-color: var(--aeva-button-danger-active-bg);\r\n transform: scale(0.95);\r\n box-shadow: none;\r\n }\r\n\r\n /* Disabled state */\r\n button:disabled {\r\n opacity: var(--aeva-button-disabled-opacity);\r\n cursor: var(--aeva-button-disabled-cursor);\r\n transform: none !important;\r\n box-shadow: none !important;\r\n }\r\n\r\n /* Loading state */\r\n .loading {\r\n position: relative;\r\n pointer-events: none;\r\n color: transparent;\r\n }\r\n\r\n .loading::after {\r\n content: '';\r\n position: absolute;\r\n width: 16px;\r\n height: 16px;\r\n top: 50%;\r\n left: 50%;\r\n margin-left: -8px;\r\n margin-top: -8px;\r\n border: 2px solid;\r\n border-radius: 50%;\r\n border-top-color: transparent;\r\n animation: spin 0.6s linear infinite;\r\n }\r\n\r\n .variant-primary.loading::after {\r\n border-color: var(--aeva-button-primary-color);\r\n border-top-color: transparent;\r\n }\r\n\r\n .variant-secondary.loading::after {\r\n border-color: var(--aeva-button-secondary-color);\r\n border-top-color: transparent;\r\n }\r\n\r\n .variant-outline.loading::after,\r\n .variant-ghost.loading::after {\r\n border-color: var(--aeva-button-outline-color);\r\n border-top-color: transparent;\r\n }\r\n\r\n .variant-danger.loading::after {\r\n border-color: var(--aeva-button-danger-color);\r\n border-top-color: transparent;\r\n }\r\n\r\n @keyframes spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n /* Slot styling */\r\n slot {\r\n display: contents;\r\n }\r\n\r\n ::slotted(*) {\r\n display: inline-flex;\r\n align-items: center;\r\n }\r\n\r\n ::slotted(svg) {\r\n width: 1em;\r\n height: 1em;\r\n flex-shrink: 0;\r\n }\r\n `;\r\n\r\n /**\r\n * Button variant style\r\n */\r\n @property({ type: String, reflect: true })\r\n variant: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' =\r\n 'primary';\r\n\r\n /**\r\n * Button size\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Whether the button is disabled\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n disabled = false;\r\n\r\n /**\r\n * Whether the button is in loading state\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n loading = false;\r\n\r\n /**\r\n * Whether the button should take full width\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'full-width' })\r\n fullWidth = false;\r\n\r\n /**\r\n * Button type attribute\r\n */\r\n @property({ type: String })\r\n type: 'button' | 'submit' | 'reset' = 'button';\r\n\r\n /**\r\n * Whether this is an icon-only button\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'icon-only' })\r\n iconOnly = false;\r\n\r\n /**\r\n * Aria label for icon-only buttons\r\n */\r\n @property({ type: String, attribute: 'aria-label' })\r\n ariaLabel: string | null = null;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n\r\n // Validate slot combinations (development warning)\r\n this.updateComplete.then(() => {\r\n const slots = this.shadowRoot?.querySelectorAll('slot');\r\n const filledSlots: string[] = [];\r\n\r\n slots?.forEach((slot) => {\r\n const assignedNodes = slot.assignedNodes({ flatten: true });\r\n const hasContent = assignedNodes.some(\r\n (node) => node.nodeType === Node.ELEMENT_NODE || node.textContent?.trim()\r\n );\r\n\r\n if (hasContent) {\r\n filledSlots.push(slot.name || 'default');\r\n }\r\n });\r\n\r\n // Warn if icon-only is used with other slots\r\n if (filledSlots.includes('icon-only') && filledSlots.length > 1) {\r\n console.warn(\r\n '[aeva-button] Using slot=\"icon-only\" with other slots may cause unexpected layout. ' +\r\n 'Use icon-only alone, or use icon-left/icon-right with default slot.',\r\n { filledSlots }\r\n );\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n const classes = {\r\n [`variant-${this.variant}`]: true,\r\n [`size-${this.size}`]: true,\r\n loading: this.loading,\r\n 'icon-only': this.iconOnly,\r\n };\r\n\r\n return html`\r\n <button\r\n part=\"button\"\r\n type=\"${this.type}\"\r\n class=\"${classMap(classes)}\"\r\n ?disabled=\"${this.disabled || this.loading}\"\r\n aria-label=\"${this.ariaLabel || ''}\"\r\n aria-busy=\"${this.loading}\"\r\n >\r\n <slot name=\"icon-only\"></slot>\r\n <slot name=\"icon-left\"></slot>\r\n <slot></slot>\r\n <slot name=\"icon-right\"></slot>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-button': AevaButton;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\n\r\n/**\r\n * A comprehensive typography component with multiple variants, sizes, and states.\r\n * Supports inline formatting and full accessibility features.\r\n *\r\n * @slot - Default slot for text content (supports inline HTML formatting)\r\n *\r\n * @csspart typography - The typography element\r\n *\r\n * @cssprop --aeva-text-font-family - Default font family\r\n * @cssprop --aeva-text-display-font-family - Font family for display/hero variant\r\n * @cssprop --aeva-text-heading-font-family - Font family for heading variants\r\n * @cssprop --aeva-text-body-font-family - Font family for body variant\r\n * @cssprop --aeva-text-label-font-family - Font family for label variant\r\n *\r\n * @cssprop --aeva-text-display-weight - Font weight for display/hero\r\n * @cssprop --aeva-text-heading-weight - Font weight for headings\r\n * @cssprop --aeva-text-body-weight - Font weight for body\r\n * @cssprop --aeva-text-label-weight - Font weight for labels\r\n *\r\n * @cssprop --aeva-text-display-line-height - Line height for display/hero\r\n * @cssprop --aeva-text-heading-line-height - Line height for headings\r\n * @cssprop --aeva-text-body-line-height - Line height for body\r\n * @cssprop --aeva-text-label-line-height - Line height for labels\r\n *\r\n * @cssprop --aeva-text-color - Default text color\r\n * @cssprop --aeva-text-muted-color - Color for muted state\r\n * @cssprop --aeva-text-inverse-color - Color for inverse state\r\n * @cssprop --aeva-text-error-color - Color for error state\r\n *\r\n * @cssprop --aeva-text-muted-opacity - Opacity for muted state\r\n * @cssprop --aeva-text-link-color - Color for links within typography\r\n * @cssprop --aeva-text-link-hover-color - Hover color for links\r\n *\r\n * @cssprop --aeva-text-size-xs - Font size for xs\r\n * @cssprop --aeva-text-size-sm - Font size for sm\r\n * @cssprop --aeva-text-size-md - Font size for md\r\n * @cssprop --aeva-text-size-lg - Font size for lg\r\n * @cssprop --aeva-text-size-xl - Font size for xl\r\n * @cssprop --aeva-text-size-2xl - Font size for 2xl\r\n * @cssprop --aeva-text-size-3xl - Font size for 3xl\r\n *\r\n * @cssprop --aeva-text-letter-spacing-display - Letter spacing for display\r\n * @cssprop --aeva-text-letter-spacing-heading - Letter spacing for headings\r\n * @cssprop --aeva-text-letter-spacing-body - Letter spacing for body\r\n * @cssprop --aeva-text-letter-spacing-label - Letter spacing for labels\r\n *\r\n * @cssprop --aeva-text-margin-top - Top margin\r\n * @cssprop --aeva-text-margin-bottom - Bottom margin\r\n * @cssprop --aeva-text-max-width - Maximum width for optimal readability\r\n */\r\n@customElement('aeva-text')\r\nexport class AevaText extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n color: var(--aeva-text-color);\r\n }\r\n\r\n /* Base typography styles */\r\n .typography {\r\n margin-top: var(--aeva-text-margin-top, 0);\r\n margin-bottom: var(--aeva-text-margin-bottom, 0);\r\n padding: 0;\r\n color: inherit;\r\n font-family: var(--aeva-text-font-family);\r\n max-width: var(--aeva-text-max-width, none);\r\n }\r\n\r\n /* Variant: Display/Hero */\r\n .variant-display,\r\n .variant-hero {\r\n font-family: var(--aeva-text-display-font-family, var(--aeva-text-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif));\r\n font-weight: var(--aeva-text-display-weight, 800);\r\n line-height: var(--aeva-text-display-line-height, 1.1);\r\n letter-spacing: var(--aeva-text-letter-spacing-display, -0.02em);\r\n }\r\n\r\n /* Variant: Headings */\r\n .variant-h1,\r\n .variant-h2,\r\n .variant-h3,\r\n .variant-h4,\r\n .variant-h5,\r\n .variant-h6 {\r\n font-family: var(--aeva-text-heading-font-family, var(--aeva-text-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif));\r\n font-weight: var(--aeva-text-heading-weight, 700);\r\n line-height: var(--aeva-text-heading-line-height, 1.2);\r\n letter-spacing: var(--aeva-text-letter-spacing-heading, -0.01em);\r\n }\r\n\r\n /* Variant: Body */\r\n .variant-body {\r\n font-family: var(--aeva-text-body-font-family, var(--aeva-text-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif));\r\n font-weight: var(--aeva-text-body-weight, 400);\r\n line-height: var(--aeva-text-body-line-height, 1.6);\r\n letter-spacing: var(--aeva-text-letter-spacing-body, normal);\r\n }\r\n\r\n /* Variant: Label */\r\n .variant-label {\r\n font-family: var(--aeva-text-label-font-family, var(--aeva-text-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif));\r\n font-weight: var(--aeva-text-label-weight, 500);\r\n line-height: var(--aeva-text-label-line-height, 1.4);\r\n letter-spacing: var(--aeva-text-letter-spacing-label, 0.01em);\r\n }\r\n\r\n /* Sizes */\r\n .size-xs {\r\n font-size: var(--aeva-text-size-xs, 0.75rem);\r\n }\r\n\r\n .size-sm {\r\n font-size: var(--aeva-text-size-sm, 0.875rem);\r\n }\r\n\r\n .size-md {\r\n font-size: var(--aeva-text-size-md, 1rem);\r\n }\r\n\r\n .size-lg {\r\n font-size: var(--aeva-text-size-lg, 1.125rem);\r\n }\r\n\r\n .size-xl {\r\n font-size: var(--aeva-text-size-xl, 1.25rem);\r\n }\r\n\r\n .size-2xl {\r\n font-size: var(--aeva-text-size-2xl, 1.5rem);\r\n }\r\n\r\n .size-3xl {\r\n font-size: var(--aeva-text-size-3xl, 1.875rem);\r\n }\r\n\r\n /* Default sizes for variants when size is not specified */\r\n .variant-display.size-md,\r\n .variant-hero.size-md {\r\n font-size: 3.75rem; /* 60px */\r\n }\r\n\r\n .variant-h1.size-md {\r\n font-size: 3rem; /* 48px */\r\n }\r\n\r\n .variant-h2.size-md {\r\n font-size: 2.25rem; /* 36px */\r\n }\r\n\r\n .variant-h3.size-md {\r\n font-size: 1.875rem; /* 30px */\r\n }\r\n\r\n .variant-h4.size-md {\r\n font-size: 1.5rem; /* 24px */\r\n }\r\n\r\n .variant-h5.size-md {\r\n font-size: 1.25rem; /* 20px */\r\n }\r\n\r\n .variant-h6.size-md {\r\n font-size: 1.125rem; /* 18px */\r\n }\r\n\r\n .variant-body.size-md {\r\n font-size: 1rem; /* 16px */\r\n }\r\n\r\n .variant-label.size-md {\r\n font-size: 0.875rem; /* 14px */\r\n }\r\n\r\n /* Alignment */\r\n .align-left {\r\n text-align: left;\r\n }\r\n\r\n .align-center {\r\n text-align: center;\r\n }\r\n\r\n .align-right {\r\n text-align: right;\r\n }\r\n\r\n .align-justify {\r\n text-align: justify;\r\n }\r\n\r\n /* States */\r\n .state-muted {\r\n color: var(--aeva-text-muted-color, #6b7280);\r\n /* Removed opacity to avoid double effect - color is already lighter */\r\n }\r\n\r\n .state-inverse {\r\n color: var(--aeva-text-inverse-color, #ffffff);\r\n }\r\n\r\n .state-error {\r\n color: var(--aeva-text-error-color, #dc2626);\r\n }\r\n\r\n /* Text Transform */\r\n .transform-uppercase {\r\n text-transform: uppercase;\r\n }\r\n\r\n .transform-lowercase {\r\n text-transform: lowercase;\r\n }\r\n\r\n .transform-capitalize {\r\n text-transform: capitalize;\r\n }\r\n\r\n /* No Wrap */\r\n .no-wrap {\r\n white-space: nowrap;\r\n }\r\n\r\n /* Truncate */\r\n .truncate {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n /* Line Clamp - Multi-line truncation */\r\n .line-clamp {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .line-clamp-1 {\r\n -webkit-line-clamp: 1;\r\n }\r\n\r\n .line-clamp-2 {\r\n -webkit-line-clamp: 2;\r\n }\r\n\r\n .line-clamp-3 {\r\n -webkit-line-clamp: 3;\r\n }\r\n\r\n .line-clamp-4 {\r\n -webkit-line-clamp: 4;\r\n }\r\n\r\n .line-clamp-5 {\r\n -webkit-line-clamp: 5;\r\n }\r\n\r\n .line-clamp-6 {\r\n -webkit-line-clamp: 6;\r\n }\r\n\r\n /* Inline formatting support */\r\n ::slotted(strong),\r\n ::slotted(b) {\r\n font-weight: 700;\r\n }\r\n\r\n ::slotted(em),\r\n ::slotted(i) {\r\n font-style: italic;\r\n }\r\n\r\n ::slotted(u) {\r\n text-decoration: underline;\r\n }\r\n\r\n ::slotted(a) {\r\n color: var(--aeva-text-link-color, #667eea);\r\n text-decoration: none;\r\n transition: color 0.2s ease;\r\n }\r\n\r\n ::slotted(a:hover) {\r\n color: var(--aeva-text-link-hover-color, #5568d3);\r\n text-decoration: underline;\r\n }\r\n\r\n ::slotted(code) {\r\n font-family: 'Fira Code', 'Cascadia Code', Consolas, Monaco, monospace;\r\n background-color: var(--aeva-text-code-bg);\r\n padding: 0.125rem 0.25rem;\r\n border-radius: 0.25rem;\r\n font-size: 0.9em;\r\n }\r\n\r\n /* High contrast mode support */\r\n @media (prefers-contrast: high) {\r\n .typography {\r\n font-weight: 500;\r\n }\r\n\r\n .state-muted {\r\n opacity: 0.85;\r\n }\r\n }\r\n\r\n /* Reduced motion support */\r\n @media (prefers-reduced-motion: reduce) {\r\n ::slotted(a) {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Typography variant\r\n */\r\n @property({ type: String, reflect: true })\r\n variant:\r\n | 'display'\r\n | 'hero'\r\n | 'h1'\r\n | 'h2'\r\n | 'h3'\r\n | 'h4'\r\n | 'h5'\r\n | 'h6'\r\n | 'body'\r\n | 'label' = 'body';\r\n\r\n /**\r\n * Typography size\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' = 'md';\r\n\r\n /**\r\n * Text alignment\r\n */\r\n @property({ type: String, reflect: true })\r\n align: 'left' | 'center' | 'right' | 'justify' = 'left';\r\n\r\n /**\r\n * Typography state\r\n */\r\n @property({ type: String, reflect: true })\r\n state: 'normal' | 'muted' | 'inverse' | 'error' = 'normal';\r\n\r\n /**\r\n * Whether to use semantic HTML tags\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n semantic = true;\r\n\r\n /**\r\n * Custom tag to use (overrides semantic)\r\n */\r\n @property({ type: String, reflect: true })\r\n tag?: string;\r\n\r\n /**\r\n * Text transform style\r\n */\r\n @property({ type: String, reflect: true })\r\n transform: 'none' | 'uppercase' | 'lowercase' | 'capitalize' = 'none';\r\n\r\n /**\r\n * Prevent text wrapping\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'no-wrap' })\r\n noWrap = false;\r\n\r\n /**\r\n * Truncate text with ellipsis (requires single line)\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n truncate = false;\r\n\r\n /**\r\n * Clamp text to specified number of lines with ellipsis\r\n * Supports 1-6 lines. Use 0 to disable.\r\n */\r\n @property({ type: Number, reflect: true, attribute: 'line-clamp' })\r\n lineClamp = 0;\r\n\r\n /**\r\n * Get the appropriate HTML tag based on variant\r\n */\r\n private getTag(): string {\r\n if (this.tag) {\r\n return this.tag;\r\n }\r\n\r\n if (!this.semantic) {\r\n return 'span';\r\n }\r\n\r\n switch (this.variant) {\r\n case 'display':\r\n case 'hero':\r\n return 'h1';\r\n case 'h1':\r\n return 'h1';\r\n case 'h2':\r\n return 'h2';\r\n case 'h3':\r\n return 'h3';\r\n case 'h4':\r\n return 'h4';\r\n case 'h5':\r\n return 'h5';\r\n case 'h6':\r\n return 'h6';\r\n case 'body':\r\n return 'p';\r\n case 'label':\r\n return 'label';\r\n default:\r\n return 'p';\r\n }\r\n }\r\n\r\n render() {\r\n const classes = {\r\n typography: true,\r\n [`variant-${this.variant}`]: true,\r\n [`size-${this.size}`]: true,\r\n [`align-${this.align}`]: true,\r\n [`state-${this.state}`]: this.state !== 'normal',\r\n [`transform-${this.transform}`]: this.transform !== 'none',\r\n 'no-wrap': this.noWrap,\r\n truncate: this.truncate && this.lineClamp === 0,\r\n 'line-clamp': this.lineClamp > 0,\r\n [`line-clamp-${this.lineClamp}`]: this.lineClamp > 0 && this.lineClamp <= 6,\r\n };\r\n\r\n const tag = this.getTag();\r\n\r\n // Using a switch to render different tags\r\n // This is necessary because Lit doesn't support dynamic tag names directly\r\n switch (tag) {\r\n case 'h1':\r\n return html`<h1 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h1>`;\r\n case 'h2':\r\n return html`<h2 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h2>`;\r\n case 'h3':\r\n return html`<h3 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h3>`;\r\n case 'h4':\r\n return html`<h4 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h4>`;\r\n case 'h5':\r\n return html`<h5 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h5>`;\r\n case 'h6':\r\n return html`<h6 part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </h6>`;\r\n case 'label':\r\n return html`<label part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </label>`;\r\n case 'span':\r\n return html`<span part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </span>`;\r\n case 'p':\r\n default:\r\n return html`<p part=\"typography\" class=\"${classMap(classes)}\">\r\n <slot></slot>\r\n </p>`;\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-text': AevaText;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\n\r\n/**\r\n * A versatile input component with regex-based validation.\r\n * Variants serve as preset shortcuts for common input patterns.\r\n *\r\n * @slot - Not used (input is self-contained)\r\n *\r\n * @fires input - Fired when input value changes\r\n * @fires change - Fired when input loses focus after value change\r\n * @fires error - Fired when validation fails\r\n *\r\n * @csspart input - The input/textarea element\r\n * @csspart container - The container wrapper\r\n *\r\n * @cssprop --aeva-input-font-family - Font family for input text\r\n * @cssprop --aeva-input-border-radius - Border radius for inputs (default: 22px)\r\n * @cssprop --aeva-input-transition - Transition timing for state changes\r\n *\r\n * @cssprop --aeva-input-bg - Background color\r\n * @cssprop --aeva-input-border-color - Border color\r\n * @cssprop --aeva-input-text-color - Text color\r\n * @cssprop --aeva-input-placeholder-color - Placeholder text color\r\n * @cssprop --aeva-input-error-border-color - Border color on error\r\n *\r\n * @cssprop --aeva-input-focus-border-color - Border color on focus\r\n * @cssprop --aeva-input-focus-ring-color - Focus ring color\r\n * @cssprop --aeva-input-focus-ring-width - Focus ring width\r\n * @cssprop --aeva-input-focus-ring-offset - Focus ring offset\r\n *\r\n * @cssprop --aeva-input-hover-border-color - Border color on hover\r\n *\r\n * @cssprop --aeva-input-disabled-bg - Background color when disabled\r\n * @cssprop --aeva-input-disabled-border-color - Border color when disabled\r\n * @cssprop --aeva-input-disabled-text-color - Text color when disabled\r\n * @cssprop --aeva-input-disabled-opacity - Opacity when disabled\r\n *\r\n * @cssprop --aeva-input-flat-bg - Background color for flat appearance\r\n * @cssprop --aeva-input-flat-hover-bg - Background color on hover for flat appearance\r\n * @cssprop --aeva-input-flat-focus-bg - Background color on focus for flat appearance\r\n *\r\n * @cssprop --aeva-input-padding-sm - Padding for small input\r\n * @cssprop --aeva-input-font-size-sm - Font size for small input\r\n * @cssprop --aeva-input-height-sm - Height for small input\r\n *\r\n * @cssprop --aeva-input-padding-md - Padding for medium input\r\n * @cssprop --aeva-input-font-size-md - Font size for medium input\r\n * @cssprop --aeva-input-height-md - Height for medium input\r\n *\r\n * @cssprop --aeva-input-padding-lg - Padding for large input\r\n * @cssprop --aeva-input-font-size-lg - Font size for large input\r\n * @cssprop --aeva-input-height-lg - Height for large input\r\n *\r\n * @cssprop --aeva-input-multiline-min-height - Minimum height for multiline\r\n */\r\n@customElement('aeva-input')\r\nexport class AevaInput extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .container {\r\n width: 100%;\r\n }\r\n\r\n input,\r\n textarea {\r\n font-family: var(--aeva-input-font-family);\r\n width: 100%;\r\n border: 2px solid var(--aeva-input-border-color);\r\n border-radius: var(--aeva-input-border-radius);\r\n background-color: var(--aeva-input-bg);\r\n color: var(--aeva-input-text-color);\r\n transition: var(--aeva-input-transition);\r\n outline: none;\r\n box-sizing: border-box;\r\n }\r\n\r\n input::placeholder,\r\n textarea::placeholder {\r\n color: var(--aeva-input-placeholder-color);\r\n }\r\n\r\n /* Hover state */\r\n input:hover:not(:disabled),\r\n textarea:hover:not(:disabled) {\r\n border-color: var(--aeva-input-hover-border-color);\r\n }\r\n\r\n /* Focus state */\r\n input:focus,\r\n textarea:focus {\r\n border-color: var(--aeva-input-focus-border-color);\r\n box-shadow: 0 0 0 var(--aeva-input-focus-ring-width)\r\n var(--aeva-input-focus-ring-color);\r\n }\r\n\r\n /* Error state */\r\n .error input,\r\n .error textarea {\r\n border-color: var(--aeva-input-error-border-color);\r\n }\r\n\r\n .error input:focus,\r\n .error textarea:focus {\r\n box-shadow: 0 0 0 var(--aeva-input-focus-ring-width)\r\n rgba(220, 38, 38, 0.3);\r\n }\r\n\r\n /* Disabled state */\r\n input:disabled,\r\n textarea:disabled {\r\n background-color: var(--aeva-input-disabled-bg);\r\n border-color: var(--aeva-input-disabled-border-color);\r\n color: var(--aeva-input-disabled-text-color);\r\n opacity: var(--aeva-input-disabled-opacity);\r\n cursor: not-allowed;\r\n }\r\n\r\n /* Size variants for input */\r\n .size-sm input {\r\n padding: var(--aeva-input-padding-sm);\r\n font-size: var(--aeva-input-font-size-sm);\r\n height: var(--aeva-input-height-sm);\r\n }\r\n\r\n .size-md input {\r\n padding: var(--aeva-input-padding-md);\r\n font-size: var(--aeva-input-font-size-md);\r\n height: var(--aeva-input-height-md);\r\n }\r\n\r\n .size-lg input {\r\n padding: var(--aeva-input-padding-lg);\r\n font-size: var(--aeva-input-font-size-lg);\r\n height: var(--aeva-input-height-lg);\r\n }\r\n\r\n /* Size variants for textarea */\r\n .size-sm textarea {\r\n padding: var(--aeva-input-padding-sm);\r\n font-size: var(--aeva-input-font-size-sm);\r\n min-height: var(--aeva-input-multiline-min-height);\r\n }\r\n\r\n .size-md textarea {\r\n padding: var(--aeva-input-padding-md);\r\n font-size: var(--aeva-input-font-size-md);\r\n min-height: var(--aeva-input-multiline-min-height);\r\n }\r\n\r\n .size-lg textarea {\r\n padding: var(--aeva-input-padding-lg);\r\n font-size: var(--aeva-input-font-size-lg);\r\n min-height: var(--aeva-input-multiline-min-height);\r\n }\r\n\r\n /* Textarea specific */\r\n textarea {\r\n resize: vertical;\r\n line-height: 1.5;\r\n }\r\n\r\n /* Flat appearance */\r\n .appearance-flat input,\r\n .appearance-flat textarea {\r\n border: none;\r\n background-color: var(--aeva-input-flat-bg);\r\n }\r\n\r\n .appearance-flat input:hover:not(:disabled),\r\n .appearance-flat textarea:hover:not(:disabled) {\r\n background-color: var(--aeva-input-flat-hover-bg);\r\n }\r\n\r\n .appearance-flat input:focus,\r\n .appearance-flat textarea:focus {\r\n background-color: var(--aeva-input-flat-focus-bg);\r\n box-shadow: none;\r\n }\r\n\r\n /* Error state for flat appearance */\r\n .appearance-flat.error input,\r\n .appearance-flat.error textarea {\r\n border: 2px solid var(--aeva-input-error-border-color);\r\n }\r\n\r\n .appearance-flat.error input:focus,\r\n .appearance-flat.error textarea:focus {\r\n box-shadow: 0 0 0 var(--aeva-input-focus-ring-width)\r\n rgba(220, 38, 38, 0.3);\r\n }\r\n\r\n /* Reduced motion support */\r\n @media (prefers-reduced-motion: reduce) {\r\n input,\r\n textarea {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Input variant type (serves as preset for common patterns)\r\n * - text: No restrictions\r\n * - password: Masked input\r\n * - integer: Whole numbers only (uses regex ^-?\\d*$)\r\n * - decimal: Decimal numbers (uses regex ^-?\\d*\\.?\\d*$)\r\n * - email: Email input with browser validation\r\n * - multiline: Textarea for longer text\r\n */\r\n @property({ type: String, reflect: true })\r\n variant:\r\n | 'text'\r\n | 'password'\r\n | 'integer'\r\n | 'decimal'\r\n | 'email'\r\n | 'multiline' = 'text';\r\n\r\n /**\r\n * Input size\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Input appearance style\r\n */\r\n @property({ type: String, reflect: true })\r\n appearance: 'bordered' | 'flat' = 'bordered';\r\n\r\n /**\r\n * Placeholder text\r\n */\r\n @property({ type: String })\r\n placeholder = '';\r\n\r\n /**\r\n * Input value\r\n */\r\n @property({ type: String })\r\n value = '';\r\n\r\n /**\r\n * Whether the input is disabled\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n disabled = false;\r\n\r\n /**\r\n * Regex pattern for filtering allowed characters\r\n * Overrides variant preset if specified\r\n * Example: \"^[0-9]*$\" for numbers only, \"^[a-zA-Z ]*$\" for letters and spaces\r\n */\r\n @property({ type: String })\r\n regex = '';\r\n\r\n /**\r\n * Input name attribute\r\n */\r\n @property({ type: String })\r\n name = '';\r\n\r\n /**\r\n * Whether the input is required\r\n */\r\n @property({ type: Boolean })\r\n required = false;\r\n\r\n /**\r\n * Minimum value (for integer and decimal variants)\r\n */\r\n @property({ type: Number })\r\n min?: number;\r\n\r\n /**\r\n * Maximum value (for integer and decimal variants)\r\n */\r\n @property({ type: Number })\r\n max?: number;\r\n\r\n /**\r\n * Step value (for integer and decimal variants)\r\n */\r\n @property({ type: Number })\r\n step?: number;\r\n\r\n /**\r\n * Maximum length (for text variant)\r\n */\r\n @property({ type: Number })\r\n maxlength?: number;\r\n\r\n /**\r\n * Number of rows for multiline variant\r\n */\r\n @property({ type: Number })\r\n rows?: number;\r\n\r\n @state()\r\n private _internalValue = '';\r\n\r\n @state()\r\n private _hasError = false;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this._internalValue = this.value;\r\n }\r\n\r\n /**\r\n * Get the regex pattern for the current variant\r\n */\r\n private _getVariantRegex(): string {\r\n // Custom regex overrides variant preset\r\n if (this.regex) {\r\n return this.regex;\r\n }\r\n\r\n // Variant presets\r\n switch (this.variant) {\r\n case 'integer':\r\n return '^-?\\\\d*$';\r\n case 'decimal':\r\n return '^-?\\\\d*\\\\.?\\\\d*$';\r\n case 'text':\r\n case 'password':\r\n case 'email':\r\n case 'multiline':\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n private _dispatchError(message: string, code: string) {\r\n this._hasError = true;\r\n this.dispatchEvent(\r\n new CustomEvent('error', {\r\n detail: {\r\n message,\r\n code,\r\n value: this._internalValue,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private _clearError() {\r\n this._hasError = false;\r\n }\r\n\r\n /**\r\n * Validate numeric min/max constraints\r\n */\r\n private _validateNumericRange(value: string): boolean {\r\n if (value === '' || value === '-' || value.endsWith('.')) {\r\n this._clearError();\r\n return true;\r\n }\r\n\r\n // Check for leading zeros (except \"0\" or \"0.xxx\")\r\n if (/^0\\d+/.test(value) || /^-0\\d+/.test(value)) {\r\n this._dispatchError(\r\n 'Number cannot have leading zeros',\r\n 'LEADING_ZERO'\r\n );\r\n return false;\r\n }\r\n\r\n const numValue = this.variant === 'integer'\r\n ? parseInt(value, 10)\r\n : parseFloat(value);\r\n\r\n if (isNaN(numValue)) {\r\n this._clearError();\r\n return true; // Let regex handle format validation\r\n }\r\n\r\n // Check min\r\n if (this.min !== undefined && numValue < this.min) {\r\n this._dispatchError(\r\n `Value must be at least ${this.min}`,\r\n 'MIN_VALUE_ERROR'\r\n );\r\n return false;\r\n }\r\n\r\n // Check max\r\n if (this.max !== undefined && numValue > this.max) {\r\n this._dispatchError(\r\n `Value must be at most ${this.max}`,\r\n 'MAX_VALUE_ERROR'\r\n );\r\n return false;\r\n }\r\n\r\n this._clearError();\r\n return true;\r\n }\r\n\r\n /**\r\n * Validate text length\r\n */\r\n private _validateTextLength(value: string): boolean {\r\n if (this.maxlength !== undefined && value.length > this.maxlength) {\r\n this._dispatchError(\r\n `Text cannot exceed ${this.maxlength} characters`,\r\n 'MAX_LENGTH_ERROR'\r\n );\r\n return false;\r\n }\r\n\r\n this._clearError();\r\n return true;\r\n }\r\n\r\n private _handleInput(e: Event) {\r\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\r\n let newValue = target.value;\r\n\r\n // Get the effective regex pattern (custom or variant preset)\r\n const regexPattern = this._getVariantRegex();\r\n\r\n // Apply regex filter if pattern exists\r\n if (regexPattern) {\r\n try {\r\n const regex = new RegExp(regexPattern);\r\n if (!regex.test(newValue)) {\r\n // Revert to previous value if regex doesn't match\r\n target.value = this._internalValue;\r\n this._dispatchError(\r\n 'Input does not match required format',\r\n 'INVALID_FORMAT'\r\n );\r\n return;\r\n }\r\n } catch (error) {\r\n console.warn('[aeva-input] Invalid regex pattern:', regexPattern);\r\n }\r\n }\r\n\r\n // Additional validation based on variant\r\n let isValid = true;\r\n\r\n // Numeric range validation for integer and decimal\r\n if (this.variant === 'integer' || this.variant === 'decimal') {\r\n isValid = this._validateNumericRange(newValue);\r\n }\r\n\r\n // Text length validation\r\n if (this.variant === 'text' || this.variant === 'multiline') {\r\n isValid = this._validateTextLength(newValue);\r\n }\r\n\r\n // If validation fails, revert to previous value\r\n if (!isValid) {\r\n target.value = this._internalValue;\r\n return;\r\n }\r\n\r\n this._internalValue = newValue;\r\n this.value = newValue;\r\n\r\n // Dispatch custom event\r\n this.dispatchEvent(\r\n new CustomEvent('input', {\r\n detail: { value: newValue },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private _handleChange(e: Event) {\r\n const target = e.target as HTMLInputElement | HTMLTextAreaElement;\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n detail: { value: target.value },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n const classes = {\r\n container: true,\r\n [`size-${this.size}`]: true,\r\n [`appearance-${this.appearance}`]: true,\r\n error: this._hasError,\r\n };\r\n\r\n if (this.variant === 'multiline') {\r\n return html`\r\n <div class=\"${classMap(classes)}\" part=\"container\">\r\n <textarea\r\n part=\"input\"\r\n .value=\"${this._internalValue}\"\r\n @input=\"${this._handleInput}\"\r\n @change=\"${this._handleChange}\"\r\n ?disabled=\"${this.disabled}\"\r\n placeholder=\"${this.placeholder}\"\r\n name=\"${this.name}\"\r\n ?required=\"${this.required}\"\r\n maxlength=\"${this.maxlength || ''}\"\r\n rows=\"${this.rows || ''}\"\r\n ></textarea>\r\n </div>\r\n `;\r\n }\r\n\r\n // Determine input type\r\n let inputType = 'text';\r\n if (this.variant === 'password') inputType = 'password';\r\n else if (this.variant === 'integer' || this.variant === 'decimal')\r\n inputType = 'text'; // Use text to have full control over validation\r\n else if (this.variant === 'email') inputType = 'email';\r\n\r\n return html`\r\n <div class=\"${classMap(classes)}\" part=\"container\">\r\n <input\r\n part=\"input\"\r\n type=\"${inputType}\"\r\n .value=\"${this._internalValue}\"\r\n @input=\"${this._handleInput}\"\r\n @change=\"${this._handleChange}\"\r\n ?disabled=\"${this.disabled}\"\r\n placeholder=\"${this.placeholder}\"\r\n name=\"${this.name}\"\r\n ?required=\"${this.required}\"\r\n maxlength=\"${this.maxlength || ''}\"\r\n inputmode=\"${this.variant === 'integer'\r\n ? 'numeric'\r\n : this.variant === 'decimal'\r\n ? 'decimal'\r\n : 'text'}\"\r\n />\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-input': AevaInput;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A modal overlay component with backdrop blur effect.\r\n * Features semi-transparent background, smooth animations, and accessibility support.\r\n *\r\n * @slot - Default slot for modal content\r\n *\r\n * @fires open - Dispatched when the modal opens\r\n * @fires close - Dispatched when the modal closes\r\n * @fires backdrop-click - Dispatched when the backdrop is clicked\r\n *\r\n * @csspart modal - The main modal container\r\n * @csspart backdrop - The backdrop overlay\r\n *\r\n * @cssprop --aeva-modal-bg - Background color of the modal (default: rgba(255, 255, 255, 0.7))\r\n * @cssprop --aeva-modal-border-radius - Border radius of the modal (default: 22px)\r\n * @cssprop --aeva-modal-padding - Padding inside the modal (default: 2rem)\r\n * @cssprop --aeva-modal-max-width - Maximum width of the modal (default: 600px)\r\n * @cssprop --aeva-modal-backdrop-bg - Backdrop background color (default: rgba(0, 0, 0, 0.4))\r\n * @cssprop --aeva-modal-border-color - Border color (default: rgba(255, 255, 255, 0.5))\r\n * @cssprop --aeva-modal-shadow-color - Shadow color (default: rgba(0, 0, 0, 0.1))\r\n */\r\n@customElement('aeva-modal')\r\nexport class AevaModal extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 1000;\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n }\r\n\r\n .backdrop {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: var(--aeva-modal-backdrop-bg);\r\n animation: fadeIn 0.3s ease-out;\r\n }\r\n\r\n .modal-container {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n }\r\n\r\n .modal {\r\n position: relative;\r\n background: var(--aeva-modal-bg);\r\n backdrop-filter: blur(var(--aeva-modal-blur, 10px));\r\n -webkit-backdrop-filter: blur(var(--aeva-modal-blur, 10px));\r\n border-radius: var(--aeva-modal-border-radius);\r\n padding: var(--aeva-modal-padding);\r\n max-width: var(--aeva-modal-max-width);\r\n width: 100%;\r\n pointer-events: auto;\r\n animation: modalIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\r\n \r\n /* Edge shimmer effect */\r\n border: 1px solid var(--aeva-modal-border-color);\r\n \r\n /* Elevation shadow */\r\n box-shadow: \r\n 0 4px 6px -1px var(--aeva-modal-shadow-color),\r\n 0 2px 4px -1px var(--aeva-modal-shadow-color);\r\n }\r\n\r\n /* Elevation levels */\r\n :host([elevation=\"1\"]) .modal {\r\n box-shadow: \r\n 0 1px 3px 0 var(--aeva-modal-shadow-color),\r\n 0 1px 2px 0 var(--aeva-modal-shadow-color);\r\n }\r\n\r\n :host([elevation=\"2\"]) .modal {\r\n box-shadow: \r\n 0 4px 6px -1px var(--aeva-modal-shadow-color),\r\n 0 2px 4px -1px var(--aeva-modal-shadow-color);\r\n }\r\n\r\n :host([elevation=\"3\"]) .modal {\r\n box-shadow: \r\n 0 10px 15px -3px var(--aeva-modal-shadow-color),\r\n 0 4px 6px -2px var(--aeva-modal-shadow-color);\r\n }\r\n\r\n :host([elevation=\"4\"]) .modal {\r\n box-shadow: \r\n 0 20px 25px -5px var(--aeva-modal-shadow-color),\r\n 0 10px 10px -5px var(--aeva-modal-shadow-color);\r\n }\r\n\r\n :host([elevation=\"5\"]) .modal {\r\n box-shadow: \r\n 0 25px 50px -12px var(--aeva-modal-shadow-color);\r\n }\r\n\r\n /* Shimmer effect using pseudo-element */\r\n .modal::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n border-radius: var(--aeva-modal-border-radius);\r\n padding: 1px;\r\n background: var(--aeva-modal-shimmer-gradient);\r\n -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\r\n -webkit-mask-composite: xor;\r\n mask-composite: exclude;\r\n pointer-events: none;\r\n animation: shimmer 3s ease-in-out infinite;\r\n }\r\n\r\n /* Closing animation */\r\n :host([closing]) .backdrop {\r\n animation: fadeOut 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n }\r\n\r\n :host([closing]) .modal {\r\n animation: modalOut 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n }\r\n\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes fadeOut {\r\n from {\r\n opacity: 1;\r\n }\r\n to {\r\n opacity: 0;\r\n }\r\n }\r\n\r\n @keyframes modalIn {\r\n from {\r\n opacity: 0;\r\n transform: scale(0.9) translateY(20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: scale(1) translateY(0);\r\n }\r\n }\r\n\r\n @keyframes modalOut {\r\n 0% {\r\n opacity: 1;\r\n transform: scale(1) translateY(0);\r\n }\r\n 100% {\r\n opacity: 0;\r\n transform: scale(0.92) translateY(20px);\r\n }\r\n }\r\n\r\n @keyframes shimmer {\r\n 0%, 100% {\r\n opacity: 0.5;\r\n }\r\n 50% {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n /* Responsive - Mobile First */\r\n /* Mobile: 100vw - 24px (12px padding on each side) */\r\n @media (max-width: 767px) {\r\n .modal {\r\n max-width: calc(100vw - 24px);\r\n margin: 0;\r\n }\r\n }\r\n\r\n /* Tablet: 80% of 640px = 512px */\r\n @media (min-width: 640px) and (max-width: 1023px) {\r\n .modal {\r\n max-width: 512px;\r\n }\r\n }\r\n\r\n /* Desktop/Laptop: 80% of 1024px = 819px */\r\n @media (min-width: 1024px) {\r\n .modal {\r\n max-width: 819px;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Whether the modal is open\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n open = false;\r\n\r\n /**\r\n * Whether to show the backdrop\r\n */\r\n @property({ type: Boolean })\r\n backdrop = true;\r\n\r\n /**\r\n * Whether to close when clicking the backdrop\r\n */\r\n @property({ type: Boolean, attribute: 'close-on-backdrop' })\r\n closeOnBackdrop = true;\r\n\r\n /**\r\n * Whether to close when pressing Escape key\r\n */\r\n @property({ type: Boolean, attribute: 'close-on-esc' })\r\n closeOnEsc = true;\r\n\r\n /**\r\n * Elevation level (1-5)\r\n */\r\n @property({ type: Number, reflect: true })\r\n elevation = 3;\r\n\r\n /**\r\n * Backdrop blur amount in pixels\r\n */\r\n @property({ type: Number, attribute: 'blur-amount' })\r\n blurAmount = 10;\r\n\r\n @property({ type: Boolean, reflect: true })\r\n closing = false;\r\n\r\n private previousFocus: HTMLElement | null = null;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.addEventListener('keydown', this.handleKeydown);\r\n window.addEventListener('popstate', this.handlePopState);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.removeEventListener('keydown', this.handleKeydown);\r\n window.removeEventListener('popstate', this.handlePopState);\r\n }\r\n\r\n updated(changedProperties: Map<string, unknown>) {\r\n if (changedProperties.has('open')) {\r\n if (this.open) {\r\n this.handleOpen();\r\n } else {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n if (changedProperties.has('blurAmount')) {\r\n this.style.setProperty('--aeva-modal-blur', `${this.blurAmount}px`);\r\n }\r\n }\r\n\r\n private handleOpen() {\r\n this.closing = false;\r\n this.previousFocus = document.activeElement as HTMLElement;\r\n\r\n // Lock body scroll\r\n document.body.style.overflow = 'hidden';\r\n\r\n // Add to history for back button support\r\n if (window.history.state?.aevaModal !== true) {\r\n window.history.pushState({ aevaModal: true }, '');\r\n }\r\n\r\n // Focus the modal\r\n this.updateComplete.then(() => {\r\n const modal = this.shadowRoot?.querySelector('.modal') as HTMLElement;\r\n modal?.focus();\r\n });\r\n\r\n this.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\r\n }\r\n\r\n private handleClose() {\r\n // Restore body scroll\r\n document.body.style.overflow = '';\r\n\r\n // Restore focus\r\n if (this.previousFocus) {\r\n this.previousFocus.focus();\r\n this.previousFocus = null;\r\n }\r\n\r\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\r\n }\r\n\r\n private handleBackdropClick = (e: MouseEvent) => {\r\n if (!this.closeOnBackdrop) return;\r\n\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains('backdrop')) {\r\n this.dispatchEvent(new CustomEvent('backdrop-click', { bubbles: true, composed: true }));\r\n this.close();\r\n }\r\n };\r\n\r\n private handleKeydown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && this.closeOnEsc && this.open) {\r\n e.preventDefault();\r\n this.close();\r\n }\r\n };\r\n\r\n private handlePopState = () => {\r\n if (this.open) {\r\n this.close();\r\n }\r\n };\r\n\r\n /**\r\n * Close the modal with animation\r\n */\r\n public close() {\r\n // Use requestAnimationFrame to ensure the closing attribute is applied\r\n // before the animation starts\r\n requestAnimationFrame(() => {\r\n this.closing = true;\r\n\r\n // Remove from history if we added it\r\n if (window.history.state?.aevaModal === true) {\r\n window.history.back();\r\n }\r\n\r\n setTimeout(() => {\r\n this.open = false;\r\n this.closing = false;\r\n }, 300);\r\n });\r\n }\r\n\r\n render() {\r\n return html`\r\n ${this.backdrop ? html`<div part=\"backdrop\" class=\"backdrop\" @click=${this.handleBackdropClick}></div>` : ''}\r\n <div class=\"modal-container\">\r\n <div part=\"modal\" class=\"modal\" tabindex=\"-1\" role=\"dialog\" aria-modal=\"true\">\r\n <slot></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-modal': AevaModal;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A full-screen page component with modal behavior and slide animations.\r\n * Features customizable background, smooth slide-in/out animations, and hardware back button support.\r\n *\r\n * @slot - Default slot for page content\r\n *\r\n * @fires open - Dispatched when the page opens\r\n * @fires close - Dispatched when the page closes\r\n * @fires backdrop-click - Dispatched when the backdrop is clicked\r\n *\r\n * @csspart page - The main page container\r\n * @csspart backdrop - The backdrop overlay\r\n *\r\n * @cssprop --aeva-page-background - Background of the page (default: white)\r\n * @cssprop --aeva-page-animation-duration - Animation duration (default: 350ms)\r\n * @cssprop --aeva-page-backdrop-bg - Backdrop background color (default: rgba(0, 0, 0, 0.5))\r\n * @cssprop --aeva-page-z-index - Z-index layer (default: 2000)\r\n */\r\n@customElement('aeva-page')\r\nexport class AevaPage extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: var(--aeva-page-z-index);\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n }\r\n\r\n .backdrop {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: var(--aeva-page-backdrop-bg);\r\n animation: fadeIn var(--aeva-page-animation-duration) ease-out;\r\n }\r\n\r\n .page-container {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: var(--aeva-page-background);\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n animation: slideInFromRight var(--aeva-page-animation-duration) cubic-bezier(0.34, 1.2, 0.64, 1);\r\n }\r\n\r\n /* Closing animations */\r\n :host([closing]) .backdrop {\r\n animation: fadeOut var(--aeva-page-animation-duration) cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n }\r\n\r\n :host([closing]) .page-container {\r\n animation: slideOutToRight var(--aeva-page-animation-duration) cubic-bezier(0.4, 0, 0.2, 1) forwards;\r\n }\r\n\r\n /* Backdrop fade animations */\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes fadeOut {\r\n from {\r\n opacity: 1;\r\n }\r\n to {\r\n opacity: 0;\r\n }\r\n }\r\n\r\n /* Page slide animations */\r\n @keyframes slideInFromRight {\r\n from {\r\n transform: translateX(100%) scale(1.2);\r\n opacity: 0;\r\n }\r\n to {\r\n transform: translateX(0) scale(1);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n @keyframes slideOutToRight {\r\n from {\r\n transform: translateX(0) scale(1);\r\n opacity: 1;\r\n }\r\n to {\r\n transform: translateX(100%) scale(1.2);\r\n opacity: 0;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Whether the page is open\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n open = false;\r\n\r\n /**\r\n * Custom background color/gradient\r\n */\r\n @property({ type: String })\r\n background = '';\r\n\r\n /**\r\n * Whether to close when clicking the backdrop\r\n */\r\n @property({ type: Boolean, attribute: 'close-on-backdrop' })\r\n closeOnBackdrop = true;\r\n\r\n @property({ type: Boolean, reflect: true })\r\n closing = false;\r\n\r\n /**\r\n * Whether to disable history integration (prevents closing on back button)\r\n */\r\n @property({ type: Boolean, attribute: 'disable-history' })\r\n disableHistory = false;\r\n\r\n private previousFocus: HTMLElement | null = null;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n window.addEventListener('popstate', this.handlePopState);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n window.removeEventListener('popstate', this.handlePopState);\r\n }\r\n\r\n updated(changedProperties: Map<string, unknown>) {\r\n if (changedProperties.has('open')) {\r\n if (this.open) {\r\n this.handleOpen();\r\n } else {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n if (changedProperties.has('background') && this.background) {\r\n this.style.setProperty('--aeva-page-background', this.background);\r\n }\r\n }\r\n\r\n private handleOpen() {\r\n this.closing = false;\r\n this.previousFocus = document.activeElement as HTMLElement;\r\n\r\n // Lock body scroll\r\n document.body.style.overflow = 'hidden';\r\n\r\n // Add to history for back button support\r\n if (!this.disableHistory && window.history.state?.aevaPage !== true) {\r\n window.history.pushState({ aevaPage: true }, '');\r\n }\r\n\r\n // Focus the page\r\n this.updateComplete.then(() => {\r\n const page = this.shadowRoot?.querySelector('.page-container') as HTMLElement;\r\n page?.focus();\r\n });\r\n\r\n this.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\r\n }\r\n\r\n private handleClose() {\r\n // Restore body scroll\r\n document.body.style.overflow = '';\r\n\r\n // Restore focus\r\n if (this.previousFocus) {\r\n this.previousFocus.focus();\r\n this.previousFocus = null;\r\n }\r\n\r\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\r\n }\r\n\r\n private handleBackdropClick = (e: MouseEvent) => {\r\n if (!this.closeOnBackdrop) return;\r\n\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains('backdrop')) {\r\n this.dispatchEvent(new CustomEvent('backdrop-click', { bubbles: true, composed: true }));\r\n this.close();\r\n }\r\n };\r\n\r\n private handlePopState = () => {\r\n if (this.open && !this.disableHistory) {\r\n this.close();\r\n }\r\n };\r\n\r\n /**\r\n * Open the page with animation\r\n */\r\n public show() {\r\n this.open = true;\r\n }\r\n\r\n /**\r\n * Close the page with animation\r\n */\r\n public close() {\r\n // Use requestAnimationFrame to ensure the closing attribute is applied\r\n // before the animation starts\r\n requestAnimationFrame(() => {\r\n this.closing = true;\r\n\r\n // Remove from history if we added it\r\n if (!this.disableHistory && window.history.state?.aevaPage === true) {\r\n window.history.back();\r\n }\r\n\r\n setTimeout(() => {\r\n this.open = false;\r\n this.closing = false;\r\n }, 350); // Match animation duration\r\n });\r\n }\r\n\r\n render() {\r\n return html`\r\n <div part=\"backdrop\" class=\"backdrop\" @click=${this.handleBackdropClick}></div>\r\n <div part=\"page\" class=\"page-container\" tabindex=\"-1\" role=\"dialog\" aria-modal=\"true\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-page': AevaPage;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A simple icon component with customizable size, shape, and border styles.\r\n * Perfect for avatars, profile pictures, or decorative icons.\r\n *\r\n * @slot - Default slot for icon content (SVG, emoji, text, or image)\r\n *\r\n * @csspart container - The icon container element\r\n *\r\n * @cssprop --aeva-icon-bg - Background color (default: #f5f5f5)\r\n * @cssprop --aeva-icon-color - Icon/text color (default: #667eea)\r\n * @cssprop --aeva-icon-border-color - Border color for solid style (default: #667eea)\r\n * @cssprop --aeva-icon-border-width - Border width (default: 2px)\r\n * @cssprop --aeva-icon-size-sm - Custom size for small (default: 40px)\r\n * @cssprop --aeva-icon-size-md - Custom size for medium (default: 56px)\r\n * @cssprop --aeva-icon-size-lg - Custom size for large (default: 72px)\r\n */\r\n@customElement('aeva-icon')\r\nexport class AevaIcon extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-flex;\r\n }\r\n\r\n .icon-container {\r\n display: flex; /* Changed from inline-flex for better centering */\r\n align-items: center;\r\n justify-content: center;\r\n background: var(--aeva-icon-bg);\r\n color: var(--aeva-icon-color);\r\n overflow: hidden;\r\n transition: all 0.2s ease-in-out;\r\n position: relative;\r\n }\r\n\r\n /* Size variants */\r\n .size-sm {\r\n width: var(--aeva-icon-size-sm);\r\n height: var(--aeva-icon-size-sm);\r\n font-size: calc(var(--aeva-icon-size-sm) * 0.5);\r\n }\r\n\r\n .size-md {\r\n width: var(--aeva-icon-size-md);\r\n height: var(--aeva-icon-size-md);\r\n font-size: calc(var(--aeva-icon-size-md) * 0.5);\r\n }\r\n\r\n .size-lg {\r\n width: var(--aeva-icon-size-lg);\r\n height: var(--aeva-icon-size-lg);\r\n font-size: calc(var(--aeva-icon-size-lg) * 0.5);\r\n }\r\n\r\n /* Shape variants */\r\n .shape-circle {\r\n border-radius: 50%;\r\n }\r\n\r\n .shape-rect {\r\n border-radius: 0;\r\n }\r\n\r\n .shape-round-rect {\r\n border-radius: 12px;\r\n }\r\n\r\n /* Border styles */\r\n .border-none {\r\n border: none;\r\n }\r\n\r\n .border-solid {\r\n border: var(--aeva-icon-border-width) solid var(--aeva-icon-border-color);\r\n }\r\n\r\n /* Fading border effect - blur/fade to opacity 0 at edges */\r\n .border-fading {\r\n mask-image: radial-gradient(black 30%, transparent);\r\n -webkit-mask-image: radial-gradient(black 30%, transparent);\r\n }\r\n\r\n /* Slot styling - improved centering */\r\n ::slotted(*) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n max-width: 100%;\r\n max-height: 100%;\r\n }\r\n\r\n ::slotted(svg) {\r\n width: 60%;\r\n height: 60%;\r\n display: block;\r\n }\r\n\r\n ::slotted(img) {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n display: block;\r\n }\r\n `;\r\n\r\n /**\r\n * Size of the icon\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Shape of the icon\r\n */\r\n @property({ type: String, reflect: true })\r\n shape: 'circle' | 'rect' | 'round-rect' = 'circle';\r\n\r\n /**\r\n * Border style\r\n */\r\n @property({ type: String, reflect: true })\r\n border: 'none' | 'solid' | 'fading' = 'none';\r\n\r\n render() {\r\n const classes = [\r\n 'icon-container',\r\n `size-${this.size}`,\r\n `shape-${this.shape}`,\r\n `border-${this.border}`\r\n ].join(' ');\r\n\r\n return html`\r\n <div part=\"container\" class=\"${classes}\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-icon': AevaIcon;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A custom radio button component with circular design.\r\n *\r\n * @slot - Not used (radio is self-contained)\r\n *\r\n * @fires change - Fired when checked state changes\r\n *\r\n * @csspart container - The container wrapper\r\n * @csspart circle - The SVG circle element\r\n * @csspart checkmark - The SVG checkmark element\r\n *\r\n * @cssprop --aeva-radio-size - Size of the radio button (default: 20px)\r\n * @cssprop --aeva-radio-unchecked-stroke - Stroke color when unchecked\r\n * @cssprop --aeva-radio-unchecked-bg - Background color when unchecked\r\n * @cssprop --aeva-radio-checked-stroke - Stroke color when checked\r\n * @cssprop --aeva-radio-checked-bg - Background color when checked\r\n * @cssprop --aeva-radio-checkmark-color - Color of the checkmark\r\n * @cssprop --aeva-radio-transition - Transition timing\r\n * @cssprop --aeva-radio-disabled-opacity - Opacity when disabled\r\n */\r\n@customElement('aeva-radio')\r\nexport class AevaRadio extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n cursor: pointer;\r\n }\r\n\r\n :host([disabled]) {\r\n cursor: not-allowed;\r\n opacity: var(--aeva-radio-disabled-opacity);\r\n }\r\n\r\n .container {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--aeva-radio-size);\r\n height: var(--aeva-radio-size);\r\n /* Dynamic padding to ensure minimum 44x44px touch target */\r\n padding: max(0px, calc((44px - var(--aeva-radio-size)) / 2));\r\n box-sizing: content-box;\r\n }\r\n\r\n svg {\r\n width: 100%;\r\n height: 100%;\r\n overflow: visible;\r\n transition: var(--aeva-radio-transition);\r\n }\r\n\r\n .circle {\r\n transition: var(--aeva-radio-transition);\r\n }\r\n\r\n .checkmark {\r\n transition: var(--aeva-radio-transition);\r\n transform-origin: center;\r\n opacity: 0;\r\n transform: scale(0.5);\r\n }\r\n\r\n :host([checked]) .checkmark {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n\r\n /* Reduced motion support */\r\n @media (prefers-reduced-motion: reduce) {\r\n svg,\r\n .circle,\r\n .checkmark {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Whether the radio button is checked\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n checked = false;\r\n\r\n /**\r\n * Whether the radio button is disabled\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n disabled = false;\r\n\r\n /**\r\n * Name attribute for form grouping\r\n */\r\n @property({ type: String })\r\n name = '';\r\n\r\n /**\r\n * Value attribute\r\n */\r\n @property({ type: String })\r\n value = '';\r\n\r\n private _handleClick() {\r\n if (this.disabled) return;\r\n\r\n // If clicking to check this radio\r\n if (!this.checked) {\r\n // Uncheck all other radios with the same name\r\n if (this.name) {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${this.name}\"]`);\r\n radios.forEach((radio) => {\r\n if (radio !== this && radio instanceof AevaRadio) {\r\n radio.checked = false;\r\n }\r\n });\r\n }\r\n\r\n this.checked = true;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n detail: {\r\n checked: this.checked,\r\n value: this.value,\r\n name: this.name,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n // If clicking an already checked radio, do nothing (radio buttons stay checked)\r\n }\r\n\r\n render() {\r\n const strokeColor = this.checked\r\n ? 'var(--aeva-radio-checked-stroke)'\r\n : 'var(--aeva-radio-unchecked-stroke)';\r\n const fillColor = this.checked\r\n ? 'var(--aeva-radio-checked-bg)'\r\n : 'var(--aeva-radio-unchecked-bg)';\r\n\r\n return html`\r\n <div\r\n class=\"container\"\r\n part=\"container\"\r\n @click=\"${this._handleClick}\"\r\n role=\"radio\"\r\n aria-checked=\"${this.checked}\"\r\n aria-disabled=\"${this.disabled}\"\r\n >\r\n <svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <!-- Circle -->\r\n <circle\r\n class=\"circle\"\r\n part=\"circle\"\r\n cx=\"10\"\r\n cy=\"10\"\r\n r=\"9\"\r\n fill=\"${fillColor}\"\r\n stroke=\"${strokeColor}\"\r\n stroke-width=\"2\"\r\n />\r\n \r\n <!-- Checkmark with 4px padding (scaled to fit) -->\r\n <g class=\"checkmark\" part=\"checkmark\">\r\n <path\r\n d=\"M 6 10 L 9 13 L 14 7\"\r\n fill=\"none\"\r\n stroke=\"var(--aeva-radio-checkmark-color)\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n </svg>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-radio': AevaRadio;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A custom checkbox component with rectangular design.\r\n *\r\n * @slot - Not used (checkbox is self-contained)\r\n *\r\n * @fires change - Fired when checked state changes\r\n *\r\n * @csspart container - The container wrapper\r\n * @csspart box - The SVG rectangle element\r\n * @csspart checkmark - The SVG checkmark element\r\n *\r\n * @cssprop --aeva-checkbox-size - Size of the checkbox (default: 20px)\r\n * @cssprop --aeva-checkbox-border-radius - Border radius (default: 4px)\r\n * @cssprop --aeva-checkbox-unchecked-stroke - Stroke color when unchecked\r\n * @cssprop --aeva-checkbox-unchecked-bg - Background color when unchecked\r\n * @cssprop --aeva-checkbox-checked-stroke - Stroke color when checked\r\n * @cssprop --aeva-checkbox-checked-bg - Background color when checked\r\n * @cssprop --aeva-checkbox-checkmark-color - Color of the checkmark\r\n * @cssprop --aeva-checkbox-transition - Transition timing\r\n * @cssprop --aeva-checkbox-disabled-opacity - Opacity when disabled\r\n */\r\n@customElement('aeva-checkbox')\r\nexport class AevaCheckbox extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n cursor: pointer;\r\n }\r\n\r\n :host([disabled]) {\r\n cursor: not-allowed;\r\n opacity: var(--aeva-checkbox-disabled-opacity);\r\n }\r\n\r\n .container {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--aeva-checkbox-size);\r\n height: var(--aeva-checkbox-size);\r\n /* Dynamic padding to ensure minimum 44x44px touch target */\r\n padding: max(0px, calc((44px - var(--aeva-checkbox-size)) / 2));\r\n box-sizing: content-box;\r\n }\r\n\r\n svg {\r\n width: 100%;\r\n height: 100%;\r\n overflow: visible;\r\n transition: var(--aeva-checkbox-transition);\r\n }\r\n\r\n .box {\r\n transition: var(--aeva-checkbox-transition);\r\n }\r\n\r\n .checkmark {\r\n transition: var(--aeva-checkbox-transition);\r\n transform-origin: center;\r\n opacity: 0;\r\n transform: scale(0.5);\r\n }\r\n\r\n :host([checked]) .checkmark {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n\r\n /* Reduced motion support */\r\n @media (prefers-reduced-motion: reduce) {\r\n svg,\r\n .box,\r\n .checkmark {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Whether the checkbox is checked\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n checked = false;\r\n\r\n /**\r\n * Whether the checkbox is disabled\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n disabled = false;\r\n\r\n /**\r\n * Name attribute for form grouping\r\n */\r\n @property({ type: String })\r\n name = '';\r\n\r\n /**\r\n * Value attribute\r\n */\r\n @property({ type: String })\r\n value = '';\r\n\r\n private _handleClick() {\r\n if (this.disabled) return;\r\n\r\n // Toggle checked state (unlike radio, checkbox can be unchecked)\r\n this.checked = !this.checked;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('change', {\r\n detail: {\r\n checked: this.checked,\r\n value: this.value,\r\n name: this.name,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n const strokeColor = this.checked\r\n ? 'var(--aeva-checkbox-checked-stroke)'\r\n : 'var(--aeva-checkbox-unchecked-stroke)';\r\n const fillColor = this.checked\r\n ? 'var(--aeva-checkbox-checked-bg)'\r\n : 'var(--aeva-checkbox-unchecked-bg)';\r\n\r\n return html`\r\n <div\r\n class=\"container\"\r\n part=\"container\"\r\n @click=\"${this._handleClick}\"\r\n role=\"checkbox\"\r\n aria-checked=\"${this.checked}\"\r\n aria-disabled=\"${this.disabled}\"\r\n >\r\n <svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <!-- Rounded Rectangle -->\r\n <rect\r\n class=\"box\"\r\n part=\"box\"\r\n x=\"1\"\r\n y=\"1\"\r\n width=\"18\"\r\n height=\"18\"\r\n rx=\"6\"\r\n ry=\"6\"\r\n fill=\"${fillColor}\"\r\n stroke=\"${strokeColor}\"\r\n stroke-width=\"2\"\r\n />\r\n \r\n <!-- Checkmark with padding -->\r\n <g class=\"checkmark\" part=\"checkmark\">\r\n <path\r\n d=\"M 5 10 L 8.5 13.5 L 15 6.5\"\r\n fill=\"none\"\r\n stroke=\"var(--aeva-checkbox-checkmark-color)\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n </svg>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-checkbox': AevaCheckbox;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A tab item component used within aeva-tab container.\r\n * Represents a single selectable tab option.\r\n *\r\n * @slot - Default slot for tab label text\r\n *\r\n * @csspart tab-item - The tab item element\r\n *\r\n * @cssprop --aeva-tab-item-font-family - Font family for tab text\r\n * @cssprop --aeva-tab-item-font-size - Font size for tab text\r\n * @cssprop --aeva-tab-item-padding - Padding for tab item\r\n * @cssprop --aeva-tab-item-border-radius - Border radius for tab item\r\n * @cssprop --aeva-tab-item-transition - Transition timing for state changes\r\n * @cssprop --aeva-tab-item-color-active - Text color when active\r\n * @cssprop --aeva-tab-item-color-inactive - Text color when inactive\r\n * @cssprop --aeva-tab-item-color-disabled - Text color when disabled\r\n * @cssprop --aeva-tab-item-cursor - Cursor style\r\n * @cssprop --aeva-tab-item-disabled-opacity - Opacity when disabled\r\n */\r\n@customElement('aeva-tab-item')\r\nexport class AevaTabItem extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n }\r\n\r\n .tab-item {\r\n font-family: var(--aeva-tab-item-font-family);\r\n font-size: var(--aeva-tab-item-font-size);\r\n padding: var(--aeva-tab-item-padding);\r\n border-radius: var(--aeva-tab-item-border-radius);\r\n border: none;\r\n background: transparent;\r\n cursor: var(--aeva-tab-item-cursor);\r\n transition: var(--aeva-tab-item-transition);\r\n color: var(--aeva-tab-item-color-inactive);\r\n font-weight: 500;\r\n white-space: nowrap;\r\n position: relative;\r\n z-index: 1;\r\n /* Minimum 44x44px hit area for accessibility */\r\n min-width: 44px;\r\n min-height: 44px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n \r\n /* Remove tap highlight on mobile */\r\n -webkit-tap-highlight-color: transparent;\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n :host([active]) .tab-item {\r\n color: var(--aeva-tab-item-color-active);\r\n }\r\n\r\n :host([disabled]) .tab-item {\r\n color: var(--aeva-tab-item-color-disabled);\r\n cursor: not-allowed;\r\n opacity: var(--aeva-tab-item-disabled-opacity);\r\n }\r\n\r\n .tab-item:focus-visible {\r\n outline: 2px solid rgba(102, 126, 234, 0.5);\r\n outline-offset: 2px;\r\n }\r\n `;\r\n\r\n /**\r\n * Label text for the tab\r\n */\r\n @property({ type: String })\r\n label = '';\r\n\r\n /**\r\n * Whether this tab is currently active\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n active = false;\r\n\r\n /**\r\n * Whether this tab is disabled\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n disabled = false;\r\n\r\n /**\r\n * Internal index used by parent aeva-tab component\r\n * @internal\r\n */\r\n @property({ type: Number, attribute: false })\r\n index = 0;\r\n\r\n private handleClick() {\r\n if (this.disabled) return;\r\n\r\n // Dispatch custom event for parent to handle\r\n this.dispatchEvent(\r\n new CustomEvent('tab-item-click', {\r\n detail: { index: this.index, label: this.label },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n return html`\r\n <button\r\n part=\"tab-item\"\r\n class=\"tab-item\"\r\n role=\"tab\"\r\n aria-selected=\"${this.active}\"\r\n aria-disabled=\"${this.disabled}\"\r\n tabindex=\"${this.disabled ? '-1' : '0'}\"\r\n @click=\"${this.handleClick}\"\r\n >\r\n <slot>${this.label}</slot>\r\n </button>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-tab-item': AevaTabItem;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A simple card component for content containers.\r\n * Features clean design with white background, solid border, and no shadow.\r\n *\r\n * @slot - Default slot for main content (rendered in body section)\r\n * @slot header - Header content area\r\n * @slot body - Main content area (explicit)\r\n * @slot footer - Footer content area\r\n *\r\n * @fires card-click - Dispatched when the card is clicked (only when interactive=true)\r\n *\r\n * @csspart card - The main card container\r\n *\r\n * @cssprop --aeva-card-bg - Background color (default: #ffffff)\r\n * @cssprop --aeva-card-border-color - Border color (default: #e5e7eb)\r\n * @cssprop --aeva-card-border-hover-color - Border color on hover (default: #667eea)\r\n * @cssprop --aeva-card-border-radius - Border radius (default: 22px)\r\n * @cssprop --aeva-card-transition - Transition timing (default: all 0.2s ease)\r\n * @cssprop --aeva-card-padding-sm - Small padding (default: 1rem)\r\n * @cssprop --aeva-card-padding-md - Medium padding (default: 1.5rem)\r\n * @cssprop --aeva-card-padding-lg - Large padding (default: 2rem)\r\n */\r\n@customElement('aeva-card')\r\nexport class AevaCard extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .card {\r\n display: flex;\r\n flex-direction: column;\r\n background: var(--aeva-card-bg, #ffffff);\r\n border: 1px solid var(--aeva-card-border-color, #e5e7eb);\r\n border-radius: var(--aeva-card-border-radius, 22px);\r\n transition: var(--aeva-card-transition, all 0.2s ease);\r\n height: var(--aeva-card-height, 100%);\r\n box-sizing: border-box;\r\n }\r\n\r\n /* Padding variants */\r\n .padding-sm {\r\n padding: var(--aeva-card-padding-sm, 1rem);\r\n }\r\n\r\n .padding-md {\r\n padding: var(--aeva-card-padding-md, 1.5rem);\r\n }\r\n\r\n .padding-lg {\r\n padding: var(--aeva-card-padding-lg, 2rem);\r\n }\r\n\r\n /* Interactive state */\r\n .interactive {\r\n cursor: pointer;\r\n }\r\n\r\n .interactive:hover {\r\n border-color: var(--aeva-card-border-hover-color, #667eea);\r\n }\r\n\r\n /* Slot sections */\r\n .header {\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .body {\r\n flex: 1;\r\n margin-bottom: 1rem;\r\n }\r\n\r\n .footer {\r\n margin-top: auto;\r\n }\r\n\r\n /* Hide empty slots */\r\n .header:not(:has(*)) {\r\n display: none;\r\n margin-bottom: 0;\r\n }\r\n\r\n .body:not(:has(*)) {\r\n display: none;\r\n margin-bottom: 0;\r\n }\r\n\r\n .footer:not(:has(*)) {\r\n display: none;\r\n }\r\n\r\n /* Fallback for browsers that don't support :has() */\r\n @supports not selector(:has(*)) {\r\n .header,\r\n .body,\r\n .footer {\r\n display: block;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Whether the card is interactive (clickable)\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n interactive = false;\r\n\r\n /**\r\n * Padding size\r\n */\r\n @property({ type: String, reflect: true })\r\n padding: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n private handleClick = () => {\r\n if (this.interactive) {\r\n this.dispatchEvent(\r\n new CustomEvent('card-click', {\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n };\r\n\r\n render() {\r\n const classes = [\r\n 'card',\r\n `padding-${this.padding}`,\r\n this.interactive ? 'interactive' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return html`\r\n <div\r\n part=\"card\"\r\n class=\"${classes}\"\r\n @click=\"${this.handleClick}\"\r\n role=\"${this.interactive ? 'button' : 'article'}\"\r\n tabindex=\"${this.interactive ? '0' : '-1'}\"\r\n @keydown=\"${this.handleKeydown}\"\r\n >\r\n <div class=\"header\">\r\n <slot name=\"header\"></slot>\r\n </div>\r\n <div class=\"body\">\r\n <slot name=\"body\"><slot></slot></slot>\r\n </div>\r\n <div class=\"footer\">\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n private handleKeydown = (e: KeyboardEvent) => {\r\n if (this.interactive && (e.key === 'Enter' || e.key === ' ')) {\r\n e.preventDefault();\r\n this.handleClick();\r\n }\r\n };\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-card': AevaCard;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\n\r\n/**\r\n * A flexible progress component with circular and horizontal variants.\r\n * Supports both finite (controlled progress) and infinite (loading animation) modes.\r\n *\r\n * @slot - Optional label content displayed with the progress\r\n *\r\n * @csspart container - The container element\r\n * @csspart track - The background track element\r\n * @csspart bar - The progress bar element (horizontal only)\r\n * @csspart svg - The SVG element (circular only)\r\n * @csspart circle-bg - The background circle (circular only)\r\n * @csspart circle-progress - The progress circle (circular only)\r\n * @csspart label - The label element\r\n *\r\n * @cssprop --aeva-progress-color - Color of the progress indicator\r\n * @cssprop --aeva-progress-bg - Background color of the track\r\n * @cssprop --aeva-progress-thickness - Thickness of the progress bar/stroke\r\n * @cssprop --aeva-progress-border-radius - Border radius for horizontal progress\r\n * @cssprop --aeva-progress-size-sm - Size for small variant\r\n * @cssprop --aeva-progress-size-md - Size for medium variant\r\n * @cssprop --aeva-progress-size-lg - Size for large variant\r\n * @cssprop --aeva-progress-animation-duration - Duration of infinite animation\r\n * @cssprop --aeva-progress-label-color - Color of the label text\r\n * @cssprop --aeva-progress-label-font-size - Font size of the label\r\n */\r\n@customElement('aeva-progress')\r\nexport class AevaProgress extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n }\r\n\r\n .container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 12px;\r\n }\r\n\r\n /* Horizontal Progress */\r\n .horizontal-container {\r\n width: 100%;\r\n }\r\n\r\n .horizontal-track {\r\n width: 100%;\r\n height: var(--aeva-progress-thickness);\r\n background-color: var(--aeva-progress-bg);\r\n border-radius: var(--aeva-progress-border-radius);\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n\r\n .horizontal-bar {\r\n height: 100%;\r\n background-color: var(--aeva-progress-color);\r\n border-radius: var(--aeva-progress-border-radius);\r\n transition: width 0.3s ease-in-out;\r\n }\r\n\r\n /* Horizontal Infinite Animation */\r\n .horizontal-bar.infinite {\r\n width: 30%;\r\n animation: horizontal-infinite var(--aeva-progress-animation-duration)\r\n ease-in-out infinite;\r\n }\r\n\r\n @keyframes horizontal-infinite {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 50% {\r\n transform: translateX(350%);\r\n }\r\n 100% {\r\n transform: translateX(-100%);\r\n }\r\n }\r\n\r\n /* Circular Progress */\r\n .circular-container {\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .circular-container.size-sm {\r\n width: var(--aeva-progress-size-sm);\r\n height: var(--aeva-progress-size-sm);\r\n }\r\n\r\n .circular-container.size-md {\r\n width: var(--aeva-progress-size-md);\r\n height: var(--aeva-progress-size-md);\r\n }\r\n\r\n .circular-container.size-lg {\r\n width: var(--aeva-progress-size-lg);\r\n height: var(--aeva-progress-size-lg);\r\n }\r\n\r\n .circular-svg {\r\n transform: rotate(-90deg);\r\n width: 100%;\r\n height: 100%;\r\n overflow: visible;\r\n }\r\n\r\n .circle-bg {\r\n fill: none;\r\n stroke: var(--aeva-progress-bg);\r\n stroke-width: var(--aeva-progress-thickness);\r\n }\r\n\r\n .circle-progress {\r\n fill: none;\r\n stroke: var(--aeva-progress-color);\r\n stroke-width: var(--aeva-progress-thickness);\r\n stroke-linecap: round;\r\n transition: stroke-dashoffset 0.3s ease-in-out;\r\n }\r\n\r\n /* Circular Infinite Animation */\r\n .circle-progress.infinite {\r\n animation: circular-infinite var(--aeva-progress-animation-duration)\r\n linear infinite;\r\n transform-origin: center;\r\n }\r\n\r\n @keyframes circular-infinite {\r\n 0% {\r\n stroke-dasharray: 1, 300;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 150, 300;\r\n stroke-dashoffset: -50;\r\n }\r\n 100% {\r\n stroke-dasharray: 1, 300;\r\n stroke-dashoffset: -300;\r\n }\r\n }\r\n\r\n .circular-svg.infinite {\r\n animation: circular-rotate var(--aeva-progress-animation-duration)\r\n linear infinite;\r\n }\r\n\r\n @keyframes circular-rotate {\r\n 100% {\r\n transform: rotate(270deg);\r\n }\r\n }\r\n\r\n /* Label */\r\n .label {\r\n color: var(--aeva-progress-label-color);\r\n font-size: var(--aeva-progress-label-font-size);\r\n font-weight: 500;\r\n text-align: center;\r\n }\r\n\r\n /* Percentage Display for Circular */\r\n .percentage {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n font-size: calc(var(--aeva-progress-size-md) * 0.2);\r\n font-weight: 600;\r\n color: var(--aeva-progress-label-color);\r\n }\r\n\r\n .size-sm .percentage {\r\n font-size: calc(var(--aeva-progress-size-sm) * 0.2);\r\n }\r\n\r\n .size-lg .percentage {\r\n font-size: calc(var(--aeva-progress-size-lg) * 0.2);\r\n }\r\n\r\n /* Horizontal Sizes */\r\n .horizontal-track.size-sm {\r\n height: 0.25rem;\r\n }\r\n\r\n .horizontal-track.size-md {\r\n height: 0.5rem;\r\n }\r\n\r\n .horizontal-track.size-lg {\r\n height: 0.75rem;\r\n }\r\n `;\r\n\r\n /**\r\n * Shape of the progress indicator\r\n */\r\n @property({ type: String, reflect: true })\r\n shape: 'circular' | 'horizontal' = 'horizontal';\r\n\r\n /**\r\n * Mode of the progress indicator\r\n */\r\n @property({ type: String, reflect: true })\r\n mode: 'finite' | 'infinite' = 'finite';\r\n\r\n /**\r\n * Current progress value (used in finite mode)\r\n */\r\n @property({ type: Number })\r\n progress = 0;\r\n\r\n /**\r\n * Minimum value for progress\r\n */\r\n @property({ type: Number })\r\n min = 0;\r\n\r\n /**\r\n * Maximum value for progress\r\n */\r\n @property({ type: Number })\r\n max = 100;\r\n\r\n /**\r\n * Size variant\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Optional label for accessibility\r\n */\r\n @property({ type: String })\r\n label = '';\r\n\r\n /**\r\n * Show percentage text (circular only)\r\n */\r\n @property({ type: Boolean, attribute: 'show-percentage' })\r\n showPercentage = true;\r\n\r\n /**\r\n * Calculate the percentage based on current progress\r\n */\r\n private get percentage(): number {\r\n if (this.max === this.min) return 0;\r\n const clampedProgress = Math.max(\r\n this.min,\r\n Math.min(this.max, this.progress)\r\n );\r\n return ((clampedProgress - this.min) / (this.max - this.min)) * 100;\r\n }\r\n\r\n /**\r\n * Calculate stroke-dasharray and stroke-dashoffset for circular progress\r\n */\r\n private getCircularProgress() {\r\n // Use a fixed radius relative to the 100x100 viewBox to avoid clipping.\r\n // The stroke-width is controlled by CSS and can bleed out due to overflow: visible.\r\n const radius = 40;\r\n const circumference = 2 * Math.PI * radius;\r\n const offset = circumference - (this.percentage / 100) * circumference;\r\n\r\n return {\r\n radius,\r\n circumference,\r\n offset,\r\n };\r\n }\r\n\r\n private renderHorizontal() {\r\n const classes = {\r\n 'horizontal-track': true,\r\n [`size-${this.size}`]: true,\r\n };\r\n\r\n const barClasses = {\r\n 'horizontal-bar': true,\r\n infinite: this.mode === 'infinite',\r\n };\r\n\r\n const barStyle =\r\n this.mode === 'finite' ? `width: ${this.percentage}%` : '';\r\n\r\n return html`\r\n <div class=\"horizontal-container\">\r\n <div part=\"track\" class=\"${classMap(classes)}\">\r\n <div\r\n part=\"bar\"\r\n class=\"${classMap(barClasses)}\"\r\n style=\"${barStyle}\"\r\n ></div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n private renderCircular() {\r\n const { radius, circumference, offset } = this.getCircularProgress();\r\n\r\n const containerClasses = {\r\n 'circular-container': true,\r\n [`size-${this.size}`]: true,\r\n };\r\n\r\n const svgClasses = {\r\n 'circular-svg': true,\r\n infinite: this.mode === 'infinite',\r\n };\r\n\r\n const progressClasses = {\r\n 'circle-progress': true,\r\n infinite: this.mode === 'infinite',\r\n };\r\n\r\n const progressStyle =\r\n this.mode === 'finite'\r\n ? `stroke-dasharray: ${circumference}; stroke-dashoffset: ${offset}`\r\n : '';\r\n\r\n return html`\r\n <div part=\"container\" class=\"${classMap(containerClasses)}\">\r\n <svg part=\"svg\" class=\"${classMap(svgClasses)}\" viewBox=\"0 0 100 100\">\r\n <circle\r\n part=\"circle-bg\"\r\n class=\"circle-bg\"\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"${radius}\"\r\n ></circle>\r\n <circle\r\n part=\"circle-progress\"\r\n class=\"${classMap(progressClasses)}\"\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"${radius}\"\r\n style=\"${progressStyle}\"\r\n ></circle>\r\n </svg>\r\n ${this.mode === 'finite' && this.showPercentage\r\n ? html`<div class=\"percentage\">${Math.round(this.percentage)}%</div>`\r\n : ''}\r\n </div>\r\n `;\r\n }\r\n\r\n render() {\r\n const ariaValueNow = this.mode === 'finite' ? this.progress : undefined;\r\n const ariaValueMin = this.mode === 'finite' ? this.min : undefined;\r\n const ariaValueMax = this.mode === 'finite' ? this.max : undefined;\r\n\r\n return html`\r\n <div\r\n class=\"container\"\r\n role=\"progressbar\"\r\n aria-label=\"${this.label || 'Progress indicator'}\"\r\n aria-valuenow=\"${ariaValueNow}\"\r\n aria-valuemin=\"${ariaValueMin}\"\r\n aria-valuemax=\"${ariaValueMax}\"\r\n aria-valuetext=\"${this.mode === 'finite'\r\n ? `${Math.round(this.percentage)}%`\r\n : 'Loading'}\"\r\n >\r\n ${this.shape === 'horizontal'\r\n ? this.renderHorizontal()\r\n : this.renderCircular()}\r\n ${this.label\r\n ? html`<div part=\"label\" class=\"label\">${this.label}</div>`\r\n : ''}\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-progress': AevaProgress;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\n\r\n/**\r\n * A versatile badge component for tags and labels.\r\n * Supports text, icons, and combinations with optional delete functionality.\r\n *\r\n * @slot - Default slot for badge text content\r\n * @slot icon - Slot for icon/image content\r\n *\r\n * @fires badge-delete - Fired when the delete button is clicked\r\n *\r\n * @csspart badge - The badge container element\r\n * @csspart content - The content wrapper element\r\n * @csspart delete-button - The delete button element\r\n *\r\n * @cssprop --aeva-badge-font-family - Font family for badge text\r\n * @cssprop --aeva-badge-border-radius - Border radius for badge\r\n * @cssprop --aeva-badge-transition - Transition timing for state changes\r\n * @cssprop --aeva-badge-gap - Gap between icon and text\r\n *\r\n * @cssprop --aeva-badge-primary-bg - Primary variant background color\r\n * @cssprop --aeva-badge-primary-color - Primary variant text color\r\n * @cssprop --aeva-badge-primary-border - Primary variant border color\r\n *\r\n * @cssprop --aeva-badge-secondary-bg - Secondary variant background color\r\n * @cssprop --aeva-badge-secondary-color - Secondary variant text color\r\n * @cssprop --aeva-badge-secondary-border - Secondary variant border color\r\n *\r\n * @cssprop --aeva-badge-success-bg - Success variant background color\r\n * @cssprop --aeva-badge-success-color - Success variant text color\r\n * @cssprop --aeva-badge-success-border - Success variant border color\r\n *\r\n * @cssprop --aeva-badge-warning-bg - Warning variant background color\r\n * @cssprop --aeva-badge-warning-color - Warning variant text color\r\n * @cssprop --aeva-badge-warning-border - Warning variant border color\r\n *\r\n * @cssprop --aeva-badge-danger-bg - Danger variant background color\r\n * @cssprop --aeva-badge-danger-color - Danger variant text color\r\n * @cssprop --aeva-badge-danger-border - Danger variant border color\r\n *\r\n * @cssprop --aeva-badge-info-bg - Info variant background color\r\n * @cssprop --aeva-badge-info-color - Info variant text color\r\n * @cssprop --aeva-badge-info-border - Info variant border color\r\n *\r\n * @cssprop --aeva-badge-padding-sm - Padding for small badge\r\n * @cssprop --aeva-badge-font-size-sm - Font size for small badge\r\n * @cssprop --aeva-badge-padding-md - Padding for medium badge\r\n * @cssprop --aeva-badge-font-size-md - Font size for medium badge\r\n * @cssprop --aeva-badge-padding-lg - Padding for large badge\r\n * @cssprop --aeva-badge-font-size-lg - Font size for large badge\r\n *\r\n * @cssprop --aeva-badge-delete-size - Size of delete button\r\n * @cssprop --aeva-badge-delete-hover-bg - Delete button hover background\r\n */\r\n@customElement('aeva-badge')\r\nexport class AevaBadge extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n }\r\n\r\n .badge {\r\n font-family: var(--aeva-badge-font-family);\r\n border-radius: var(--aeva-badge-border-radius);\r\n transition: var(--aeva-badge-transition);\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--aeva-badge-gap);\r\n border: 1px solid;\r\n font-weight: 500;\r\n white-space: nowrap;\r\n max-width: 100%;\r\n }\r\n\r\n /* Size variants */\r\n .size-sm {\r\n padding: var(--aeva-badge-padding-sm);\r\n font-size: var(--aeva-badge-font-size-sm);\r\n }\r\n\r\n .size-md {\r\n padding: var(--aeva-badge-padding-md);\r\n font-size: var(--aeva-badge-font-size-md);\r\n }\r\n\r\n .size-lg {\r\n padding: var(--aeva-badge-padding-lg);\r\n font-size: var(--aeva-badge-font-size-lg);\r\n }\r\n\r\n /* Color variants */\r\n .variant-primary {\r\n background-color: var(--aeva-badge-primary-bg);\r\n color: var(--aeva-badge-primary-color);\r\n border-color: var(--aeva-badge-primary-border);\r\n }\r\n\r\n .variant-secondary {\r\n background-color: var(--aeva-badge-secondary-bg);\r\n color: var(--aeva-badge-secondary-color);\r\n border-color: var(--aeva-badge-secondary-border);\r\n }\r\n\r\n .variant-success {\r\n background-color: var(--aeva-badge-success-bg);\r\n color: var(--aeva-badge-success-color);\r\n border-color: var(--aeva-badge-success-border);\r\n }\r\n\r\n .variant-warning {\r\n background-color: var(--aeva-badge-warning-bg);\r\n color: var(--aeva-badge-warning-color);\r\n border-color: var(--aeva-badge-warning-border);\r\n }\r\n\r\n .variant-danger {\r\n background-color: var(--aeva-badge-danger-bg);\r\n color: var(--aeva-badge-danger-color);\r\n border-color: var(--aeva-badge-danger-border);\r\n }\r\n\r\n .variant-info {\r\n background-color: var(--aeva-badge-info-bg);\r\n color: var(--aeva-badge-info-color);\r\n border-color: var(--aeva-badge-info-border);\r\n }\r\n\r\n /* Content wrapper */\r\n .content {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--aeva-badge-gap);\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n /* Delete button */\r\n .delete-button {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--aeva-badge-delete-size);\r\n height: var(--aeva-badge-delete-size);\r\n border-radius: 50%;\r\n border: none;\r\n background: transparent;\r\n cursor: pointer;\r\n padding: 0;\r\n margin-left: 2px;\r\n transition: var(--aeva-badge-transition);\r\n flex-shrink: 0;\r\n color: currentColor;\r\n -webkit-tap-highlight-color: transparent;\r\n }\r\n\r\n .delete-button:hover {\r\n background-color: var(--aeva-badge-delete-hover-bg);\r\n }\r\n\r\n .delete-button:active {\r\n transform: scale(0.9);\r\n }\r\n\r\n .delete-button:focus-visible {\r\n outline: 2px solid currentColor;\r\n outline-offset: 1px;\r\n }\r\n\r\n /* Delete icon (X) */\r\n .delete-icon {\r\n width: 10px;\r\n height: 10px;\r\n position: relative;\r\n }\r\n\r\n .delete-icon::before,\r\n .delete-icon::after {\r\n content: '';\r\n position: absolute;\r\n width: 100%;\r\n height: 1.5px;\r\n background-color: currentColor;\r\n top: 50%;\r\n left: 50%;\r\n border-radius: 1px;\r\n }\r\n\r\n .delete-icon::before {\r\n transform: translate(-50%, -50%) rotate(45deg);\r\n }\r\n\r\n .delete-icon::after {\r\n transform: translate(-50%, -50%) rotate(-45deg);\r\n }\r\n\r\n /* Slot styling */\r\n ::slotted(*) {\r\n display: inline-flex;\r\n align-items: center;\r\n }\r\n\r\n ::slotted(svg),\r\n ::slotted(img) {\r\n width: 1em;\r\n height: 1em;\r\n flex-shrink: 0;\r\n }\r\n\r\n ::slotted(img) {\r\n border-radius: 50%;\r\n object-fit: cover;\r\n }\r\n `;\r\n\r\n /**\r\n * Badge variant/color\r\n */\r\n @property({ type: String, reflect: true })\r\n variant: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' =\r\n 'primary';\r\n\r\n /**\r\n * Badge size\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Whether the badge can be deleted\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n deletable = false;\r\n\r\n /**\r\n * Aria label for the delete button\r\n */\r\n @property({ type: String, attribute: 'delete-label' })\r\n deleteLabel = 'Remove badge';\r\n\r\n private handleDelete(e: Event) {\r\n e.stopPropagation();\r\n\r\n // Dispatch custom event\r\n this.dispatchEvent(\r\n new CustomEvent('badge-delete', {\r\n bubbles: true,\r\n composed: true,\r\n detail: {\r\n badge: this,\r\n },\r\n })\r\n );\r\n\r\n // Animate out and remove\r\n const badge = this.shadowRoot?.querySelector('.badge') as HTMLElement;\r\n if (badge) {\r\n badge.style.transform = 'scale(0)';\r\n badge.style.opacity = '0';\r\n\r\n setTimeout(() => {\r\n this.remove();\r\n }, 200);\r\n }\r\n }\r\n\r\n render() {\r\n const classes = {\r\n badge: true,\r\n [`variant-${this.variant}`]: true,\r\n [`size-${this.size}`]: true,\r\n };\r\n\r\n return html`\r\n <div part=\"badge\" class=\"${classMap(classes)}\">\r\n <div part=\"content\" class=\"content\">\r\n <slot name=\"icon\"></slot>\r\n <slot></slot>\r\n </div>\r\n ${this.deletable\r\n ? html`\r\n <button\r\n part=\"delete-button\"\r\n class=\"delete-button\"\r\n @click=\"${this.handleDelete}\"\r\n aria-label=\"${this.deleteLabel}\"\r\n type=\"button\"\r\n >\r\n <span class=\"delete-icon\" aria-hidden=\"true\"></span>\r\n </button>\r\n `\r\n : ''}\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-badge': AevaBadge;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A reusable ripple effect component that can be added to any position:relative element.\r\n * It listens for pointer events on its parent and creates expanding ripple circles.\r\n * \r\n * @cssprop --aeva-ripple-color - Color of the ripple (default: currentColor)\r\n * @cssprop --aeva-ripple-duration - Duration of the ripple animation (default: 600ms)\r\n * @cssprop --aeva-ripple-opacity - Maximum opacity of the ripple (default: 0.15)\r\n */\r\n@customElement('aeva-ripple')\r\nexport class AevaRipple extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n overflow: hidden;\r\n pointer-events: none;\r\n border-radius: inherit;\r\n z-index: 0;\r\n }\r\n\r\n .ripple {\r\n position: absolute;\r\n border-radius: 50%;\r\n background-color: var(--aeva-ripple-color, currentColor);\r\n opacity: var(--aeva-ripple-opacity, 0.15);\r\n transform: scale(default);\r\n animation: ripple-animation var(--aeva-ripple-duration, 600ms) cubic-bezier(0.4, 0, 0.2, 1);\r\n pointer-events: none;\r\n }\r\n\r\n @keyframes ripple-animation {\r\n from {\r\n transform: scale(0);\r\n opacity: var(--aeva-ripple-opacity, 0.15);\r\n }\r\n to {\r\n transform: scale(2.5);\r\n opacity: 0;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * The duration of the ripple animation in milliseconds\r\n */\r\n @property({ type: Number })\r\n duration = 600;\r\n\r\n /**\r\n * Opacity of the ripple\r\n */\r\n @property({ type: Number })\r\n opacity = 0.15;\r\n\r\n private parent: HTMLElement | null = null;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.parent = this.parentElement;\r\n if (this.parent) {\r\n this.parent.addEventListener('mousedown', this.handlePointerDown);\r\n this.parent.addEventListener('touchstart', this.handlePointerDown, { passive: true });\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n if (this.parent) {\r\n this.parent.removeEventListener('mousedown', this.handlePointerDown);\r\n this.parent.removeEventListener('touchstart', this.handlePointerDown);\r\n }\r\n }\r\n\r\n private handlePointerDown = (e: MouseEvent | TouchEvent) => {\r\n if (!this.shadowRoot) return;\r\n\r\n // Get coordinates relative to parent\r\n const rect = this.parent!.getBoundingClientRect();\r\n let x, y;\r\n\r\n if (e instanceof MouseEvent) {\r\n x = e.clientX - rect.left;\r\n y = e.clientY - rect.top;\r\n } else {\r\n x = e.touches[0].clientX - rect.left;\r\n y = e.touches[0].clientY - rect.top;\r\n }\r\n\r\n // Determine the size of the ripple\r\n const size = Math.max(rect.width, rect.height);\r\n\r\n // Create the ripple element\r\n const ripple = document.createElement('div');\r\n ripple.className = 'ripple';\r\n ripple.style.width = ripple.style.height = `${size}px`;\r\n ripple.style.left = `${x - size / 2}px`;\r\n ripple.style.top = `${y - size / 2}px`;\r\n\r\n this.shadowRoot.appendChild(ripple);\r\n\r\n // Remove the ripple element after animation\r\n setTimeout(() => {\r\n ripple.remove();\r\n }, this.duration);\r\n };\r\n\r\n render() {\r\n return html``;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-ripple': AevaRipple;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\nimport './aeva-ripple';\r\nimport './aeva-text';\r\n\r\n/**\r\n * A flexible list item component.\r\n * \r\n * @slot icon-left - Leading icon/content\r\n * @slot title - Main text content (can also be passed via label property)\r\n * @slot description - Secondary text content\r\n * @slot icon-right - Trailing icon/content\r\n */\r\n@customElement('aeva-list-item')\r\nexport class AevaListItem extends LitElement {\r\n static styles = css`\r\n :host {\r\n --list-item-text-display: block;\r\n --list-item-justify: flex-start;\r\n --list-item-padding-default: 12px 16px;\r\n --list-item-gap-default: 16px;\r\n --list-item-transition-default: 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n --list-item-border-radius-default: 8px;\r\n --list-item-active-bg-default: var(--aeva-primary-light, rgba(102, 126, 234, 0.08));\r\n --list-item-hover-bg-default: rgba(0, 0, 0, 0.04);\r\n --list-item-color-default: var(--aeva-text-color, #1f2937);\r\n\r\n display: block;\r\n width: 100%;\r\n user-select: none;\r\n }\r\n\r\n .item {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n padding: var(--aeva-list-item-padding, var(--list-item-padding-default));\r\n gap: var(--aeva-list-item-gap, var(--list-item-gap-default));\r\n background-color: var(--aeva-list-item-bg, transparent);\r\n color: var(--aeva-list-item-color, var(--list-item-color-default));\r\n --aeva-text-color: inherit;\r\n border-radius: var(--aeva-list-item-border-radius, var(--list-item-border-radius-default));\r\n transition: var(--aeva-list-item-transition, var(--list-item-transition-default));\r\n cursor: pointer;\r\n outline: none;\r\n -webkit-tap-highlight-color: transparent;\r\n overflow: hidden;\r\n justify-content: var(--list-item-justify);\r\n }\r\n\r\n .item:hover:not(.active) {\r\n background-color: var(--aeva-list-item-hover-bg, var(--list-item-hover-bg-default));\r\n }\r\n\r\n .item.active {\r\n background-color: var(--aeva-list-item-active-bg, var(--list-item-active-bg-default));\r\n color: var(--aeva-list-item-active-color, var(--aeva-primary, #667eea));\r\n }\r\n\r\n .item:focus-visible {\r\n box-shadow: inset 0 0 0 2px var(--aeva-button-focus-ring-color, #667eea);\r\n }\r\n\r\n .content {\r\n flex: 1;\r\n display: var(--list-item-text-display);\r\n flex-direction: column;\r\n min-width: 0;\r\n }\r\n\r\n :host([icon-only]) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n \r\n :host([icon-only]) .content {\r\n display: none;\r\n }\r\n\r\n :host([icon-only]) .item {\r\n justify-content: center;\r\n padding: 0;\r\n gap: 0;\r\n border-radius: 50%;\r\n width: 48px;\r\n height: 48px;\r\n }\r\n\r\n :host([icon-only]) .icon-container.trail-icon {\r\n display: none;\r\n }\r\n\r\n .icon-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n }\r\n\r\n svg.lib-icon, ::slotted(aeva-icon) {\r\n width: 24px;\r\n height: 24px;\r\n fill: currentColor;\r\n }\r\n\r\n ::slotted(svg) {\r\n width: 24px;\r\n height: 24px;\r\n display: block;\r\n }\r\n\r\n .material-icons {\r\n font-family: 'Material Icons';\r\n font-weight: normal;\r\n font-style: normal;\r\n font-size: 24px;\r\n line-height: 1;\r\n letter-spacing: normal;\r\n text-transform: none;\r\n display: inline-block;\r\n white-space: nowrap;\r\n word-wrap: normal;\r\n direction: ltr;\r\n -webkit-font-feature-settings: 'liga';\r\n -webkit-font-smoothing: antialiased;\r\n \r\n width: 24px;\r\n height: 24px;\r\n color: inherit;\r\n }\r\n\r\n .title-container {\r\n display: block;\r\n }\r\n\r\n .description-container {\r\n display: block;\r\n margin-top: 2px;\r\n }\r\n `;\r\n\r\n private static iconLibrary: Record<string, any> = {\r\n 'grid_view': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M3 3h8v8H3V3zm0 10h8v8H3v-8zM13 3h8v8h-8V3zm0 10h8v8h-8v-8z\"/></svg>`,\r\n 'analytics': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/></svg>`,\r\n 'people': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5s-3 1.34-3 3 1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"/></svg>`,\r\n 'settings': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"/></svg>`,\r\n 'folder': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z\"/></svg>`,\r\n 'description': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z\"/></svg>`,\r\n 'person': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.33-8 4v2h16v-2c0-2.67-5.33-4-8-4z\"/></svg>`,\r\n 'face': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5s.67 1.5 1.5 1.5zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z\"/></svg>`,\r\n 'notifications': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z\"/></svg>`,\r\n 'security': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"/></svg>`,\r\n 'dashboard': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z\"/></svg>`,\r\n 'mail': html`<svg class=\"lib-icon\" viewBox=\"0 0 24 24\"><path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"/></svg>`\r\n };\r\n\r\n /**\r\n * Main label for the item\r\n */\r\n @property({ type: String })\r\n label = '';\r\n\r\n /**\r\n * Icon name\r\n */\r\n @property({ type: String })\r\n icon = '';\r\n\r\n /**\r\n * Whether the item is in active/selected state\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n active = false;\r\n\r\n /**\r\n * Show only icon, hide text content\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'icon-only' })\r\n iconOnly = false;\r\n\r\n /**\r\n * Internal index for navigation\r\n * @internal\r\n */\r\n @property({ type: Number })\r\n index = -1;\r\n\r\n private handleClick() {\r\n this.dispatchEvent(\r\n new CustomEvent('list-item-click', {\r\n detail: { index: this.index, label: this.label },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private renderIconContainer() {\r\n if (this.icon) {\r\n const svg = AevaListItem.iconLibrary[this.icon];\r\n if (svg) return svg;\r\n return html`<span class=\"material-icons\">${this.icon}</span>`;\r\n }\r\n return html`<slot name=\"icon-left\"></slot>`;\r\n }\r\n\r\n render() {\r\n const itemClasses = {\r\n item: true,\r\n active: this.active,\r\n };\r\n\r\n return html`\r\n <div \r\n class=\"${classMap(itemClasses)}\" \r\n part=\"item\"\r\n role=\"option\"\r\n aria-selected=\"${this.active}\"\r\n tabindex=\"0\"\r\n @click=\"${this.handleClick}\"\r\n >\r\n <aeva-ripple></aeva-ripple>\r\n \r\n <div class=\"icon-container lead-icon\">\r\n ${this.renderIconContainer()}\r\n </div>\r\n\r\n <div class=\"content\">\r\n <div class=\"title-container\">\r\n <slot name=\"title\">\r\n ${this.label ? html`<aeva-text variant=\"body\" size=\"md\">${this.label}</aeva-text>` : ''}\r\n <slot></slot>\r\n </slot>\r\n </div>\r\n <div class=\"description-container\">\r\n <slot name=\"description\"></slot>\r\n </div>\r\n </div>\r\n\r\n <div class=\"icon-container trail-icon\">\r\n <slot name=\"icon-right\"></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-list-item': AevaListItem;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A popup menu component that anchors to a trigger element.\r\n * Combines modal-like overlay behavior with flexible list positioning.\r\n *\r\n * @slot - Default slot for menu content (usually aeva-list)\r\n *\r\n * @fires open - Dispatched when the menu opens\r\n * @fires close - Dispatched when the menu closes\r\n *\r\n * @cssprop --aeva-popup-bg - Background color (default: rgba(255, 255, 255, 0.7))\r\n * @cssprop --aeva-popup-border-radius - Border radius (default: 22px)\r\n * @cssprop --aeva-popup-min-width - Minimum width (default: 200px)\r\n * @cssprop --aeva-popup-max-width - Maximum width, inherits from modal (default: 600px)\r\n */\r\n@customElement('aeva-popup-menu')\r\nexport class AevaPopupMenu extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 2000;\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n }\r\n\r\n .backdrop {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: transparent;\r\n }\r\n\r\n .popup-container {\r\n position: absolute;\r\n pointer-events: none;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .popup {\r\n position: relative;\r\n background: var(--aeva-popup-bg);\r\n backdrop-filter: blur(var(--aeva-popup-blur));\r\n -webkit-backdrop-filter: blur(var(--aeva-popup-blur));\r\n border-radius: var(--aeva-popup-border-radius);\r\n border: 1px solid var(--aeva-popup-border-color);\r\n min-width: var(--aeva-popup-min-width);\r\n max-width: var(--aeva-popup-max-width);\r\n width: fit-content;\r\n pointer-events: auto;\r\n overflow: hidden;\r\n padding: 0;\r\n box-sizing: border-box;\r\n \r\n box-shadow: \r\n 0 4px 6px -1px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2)),\r\n 0 2px 4px -1px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n\r\n transform-origin: top left;\r\n animation: popupIn 0.2s cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n\r\n :host([closing]) .popup {\r\n animation: popupOut 0.15s cubic-bezier(0.4, 0, 1, 1) forwards;\r\n }\r\n\r\n @keyframes popupIn {\r\n from {\r\n opacity: 0;\r\n transform: scale(0.95) translateY(-10px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: scale(1) translateY(0);\r\n }\r\n }\r\n\r\n @keyframes popupOut {\r\n from {\r\n opacity: 1;\r\n transform: scale(1) translateY(0);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: scale(0.95) translateY(-10px);\r\n }\r\n }\r\n\r\n /* Elevation styles same as modal */\r\n :host([elevation=\"1\"]) .popup {\r\n box-shadow: \r\n 0 1px 3px 0 var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2)),\r\n 0 1px 2px 0 var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n }\r\n :host([elevation=\"2\"]) .popup {\r\n box-shadow: \r\n 0 4px 6px -1px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2)),\r\n 0 2px 4px -1px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n }\r\n :host([elevation=\"3\"]) .popup {\r\n box-shadow: \r\n 0 10px 15px -3px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2)),\r\n 0 4px 6px -2px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n }\r\n :host([elevation=\"4\"]) .popup {\r\n box-shadow: \r\n 0 20px 25px -5px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2)),\r\n 0 10px 10px -5px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n }\r\n :host([elevation=\"5\"]) .popup {\r\n box-shadow: 0 25px 50px -12px var(--aeva-popup-shadow-color, rgba(0, 0, 0, 0.2));\r\n }\r\n\r\n /* Fix visual gap: ensure slotted list fills the popup completely */\r\n ::slotted(aeva-list) {\r\n --aeva-list-border-radius: 0;\r\n --aeva-list-padding: 0;\r\n display: block;\r\n margin: 0;\r\n }\r\n `;\r\n\r\n @property({ type: Boolean, reflect: true })\r\n open = false;\r\n\r\n @property({ type: Boolean, attribute: 'auto-close' })\r\n autoClose = true;\r\n\r\n @property({ type: Number, reflect: true })\r\n elevation = 3;\r\n\r\n @state()\r\n private closing = false;\r\n\r\n @state()\r\n private x = 0;\r\n\r\n @state()\r\n private y = 0;\r\n\r\n @state()\r\n private origin = 'top left';\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n window.addEventListener('scroll', this.close, { capture: true });\r\n window.addEventListener('resize', this.close);\r\n this.addEventListener('on-selection-change', this.handleSelectionChange);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n window.removeEventListener('scroll', this.close, { capture: true });\r\n window.removeEventListener('resize', this.close);\r\n this.removeEventListener('on-selection-change', this.handleSelectionChange);\r\n }\r\n\r\n private handleSelectionChange() {\r\n if (this.autoClose) {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Shows the menu anchored to the provided element\r\n */\r\n public show(anchor: HTMLElement) {\r\n if (this.open) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n\r\n // Default positioning: below the anchor\r\n let top = rect.bottom + 8;\r\n let left = rect.left;\r\n let transformOrigin = 'top left';\r\n\r\n // Crude overflow handling (can be improved)\r\n // If it's too close to the right edge, align to the right of the anchor\r\n if (left + 200 > viewportWidth) {\r\n left = rect.right - 200; // Assume min-width 200\r\n if (left < 0) left = 8;\r\n transformOrigin = 'top right';\r\n }\r\n\r\n // If it's too close to the bottom edge, show above the anchor\r\n if (top + 200 > viewportHeight) {\r\n top = rect.top - 8 - 200; // Approximate height\r\n if (top < 0) top = rect.bottom + 8; // fallback\r\n else transformOrigin = 'bottom left';\r\n }\r\n\r\n this.x = left;\r\n this.y = top;\r\n this.origin = transformOrigin;\r\n this.open = true;\r\n\r\n this.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\r\n }\r\n\r\n /**\r\n * Closes the menu with animation\r\n */\r\n public close = () => {\r\n if (!this.open || this.closing) return;\r\n\r\n this.closing = true;\r\n setTimeout(() => {\r\n this.open = false;\r\n this.closing = false;\r\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\r\n }, 150);\r\n };\r\n\r\n private handleBackdropClick(e: MouseEvent) {\r\n e.stopPropagation();\r\n this.close();\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"backdrop\" @click=${this.handleBackdropClick}></div>\r\n <div \r\n class=\"popup-container\" \r\n style=\"top: ${this.y}px; left: ${this.x}px;\"\r\n >\r\n <div \r\n part=\"popup\" \r\n class=\"popup\" \r\n style=\"transform-origin: ${this.origin};\"\r\n >\r\n <slot></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-popup-menu': AevaPopupMenu;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A tooltip component that displays contextual information on hover/focus.\r\n * Features smart positioning that auto-adjusts near viewport edges.\r\n *\r\n * @slot - Default slot for the element that triggers the tooltip\r\n *\r\n * @cssprop --aeva-tooltip-bg - Background color (default: rgba(0, 0, 0, 0.9))\r\n * @cssprop --aeva-tooltip-color - Text color (default: #ffffff)\r\n * @cssprop --aeva-tooltip-border-radius - Border radius (default: 22px)\r\n * @cssprop --aeva-tooltip-padding - Padding (default: 0.5rem 0.75rem)\r\n * @cssprop --aeva-tooltip-font-size - Font size (default: 0.875rem)\r\n */\r\n@customElement('aeva-tooltip')\r\nexport class AevaTooltip extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n position: relative;\r\n }\r\n\r\n .trigger {\r\n display: inline-block;\r\n cursor: help;\r\n }\r\n\r\n .tooltip-container {\r\n position: fixed;\r\n z-index: 10000;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 0.2s ease-in-out;\r\n }\r\n\r\n .tooltip-container.visible {\r\n opacity: 1;\r\n }\r\n\r\n .tooltip {\r\n position: relative;\r\n background: var(--aeva-tooltip-bg);\r\n backdrop-filter: blur(var(--aeva-tooltip-blur));\r\n -webkit-backdrop-filter: blur(var(--aeva-tooltip-blur));\r\n color: var(--aeva-tooltip-color);\r\n padding: var(--aeva-tooltip-padding);\r\n border-radius: var(--aeva-tooltip-border-radius);\r\n font-size: var(--aeva-tooltip-font-size);\r\n line-height: 1.4;\r\n max-width: 250px;\r\n word-wrap: break-word;\r\n white-space: normal;\r\n box-shadow: var(--aeva-tooltip-shadow);\r\n \r\n animation: tooltipIn 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);\r\n }\r\n\r\n @keyframes tooltipIn {\r\n from {\r\n opacity: 0;\r\n transform: scale(0.95);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n }\r\n\r\n /* Arrow */\r\n .arrow {\r\n position: absolute;\r\n width: 8px;\r\n height: 8px;\r\n background: var(--aeva-tooltip-bg);\r\n transform: rotate(45deg);\r\n }\r\n\r\n /* Arrow positions */\r\n .tooltip-container[data-position=\"top\"] .arrow {\r\n bottom: -4px;\r\n left: 50%;\r\n margin-left: -4px;\r\n }\r\n\r\n .tooltip-container[data-position=\"bottom\"] .arrow {\r\n top: -4px;\r\n left: 50%;\r\n margin-left: -4px;\r\n }\r\n\r\n .tooltip-container[data-position=\"left\"] .arrow {\r\n right: -4px;\r\n top: 50%;\r\n margin-top: -4px;\r\n }\r\n\r\n .tooltip-container[data-position=\"right\"] .arrow {\r\n left: -4px;\r\n top: 50%;\r\n margin-top: -4px;\r\n }\r\n `;\r\n\r\n @property({ type: String })\r\n content = '';\r\n\r\n @property({ type: String })\r\n position: 'top' | 'bottom' | 'left' | 'right' = 'top';\r\n\r\n @property({ type: Number })\r\n delay = 200;\r\n\r\n @state()\r\n private visible = false;\r\n\r\n @state()\r\n private tooltipX = 0;\r\n\r\n @state()\r\n private tooltipY = 0;\r\n\r\n @state()\r\n private actualPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\r\n\r\n private showTimer?: number;\r\n private hideTimer?: number;\r\n private triggerElement?: HTMLElement;\r\n private tooltipElement?: HTMLElement;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.addEventListener('mouseenter', this.handleMouseEnter);\r\n this.addEventListener('mouseleave', this.handleMouseLeave);\r\n this.addEventListener('focus', this.handleFocus, true);\r\n this.addEventListener('blur', this.handleBlur, true);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.removeEventListener('mouseenter', this.handleMouseEnter);\r\n this.removeEventListener('mouseleave', this.handleMouseLeave);\r\n this.removeEventListener('focus', this.handleFocus, true);\r\n this.removeEventListener('blur', this.handleBlur, true);\r\n this.clearTimers();\r\n }\r\n\r\n private clearTimers() {\r\n if (this.showTimer) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = undefined;\r\n }\r\n if (this.hideTimer) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = undefined;\r\n }\r\n }\r\n\r\n private handleMouseEnter = () => {\r\n this.clearTimers();\r\n this.showTimer = window.setTimeout(() => {\r\n this.show();\r\n }, this.delay);\r\n };\r\n\r\n private handleMouseLeave = () => {\r\n this.clearTimers();\r\n this.hide();\r\n };\r\n\r\n private handleFocus = () => {\r\n this.clearTimers();\r\n this.showTimer = window.setTimeout(() => {\r\n this.show();\r\n }, this.delay);\r\n };\r\n\r\n private handleBlur = () => {\r\n this.clearTimers();\r\n this.hide();\r\n };\r\n\r\n private show() {\r\n this.updateComplete.then(() => {\r\n this.triggerElement = this.shadowRoot?.querySelector('.trigger') as HTMLElement;\r\n this.tooltipElement = this.shadowRoot?.querySelector('.tooltip') as HTMLElement;\r\n\r\n if (!this.triggerElement || !this.tooltipElement) return;\r\n\r\n const triggerRect = this.triggerElement.getBoundingClientRect();\r\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n const gap = 8; // Gap between trigger and tooltip\r\n\r\n let position = this.position;\r\n let x = 0;\r\n let y = 0;\r\n\r\n // Calculate position with smart adjustment\r\n switch (position) {\r\n case 'top':\r\n x = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n y = triggerRect.top - tooltipRect.height - gap;\r\n\r\n // If tooltip goes above viewport, show below\r\n if (y < 0) {\r\n position = 'bottom';\r\n y = triggerRect.bottom + gap;\r\n }\r\n break;\r\n\r\n case 'bottom':\r\n x = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;\r\n y = triggerRect.bottom + gap;\r\n\r\n // If tooltip goes below viewport, show above\r\n if (y + tooltipRect.height > viewportHeight) {\r\n position = 'top';\r\n y = triggerRect.top - tooltipRect.height - gap;\r\n }\r\n break;\r\n\r\n case 'left':\r\n x = triggerRect.left - tooltipRect.width - gap;\r\n y = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n\r\n // If tooltip goes left of viewport, show right\r\n if (x < 0) {\r\n position = 'right';\r\n x = triggerRect.right + gap;\r\n }\r\n break;\r\n\r\n case 'right':\r\n x = triggerRect.right + gap;\r\n y = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;\r\n\r\n // If tooltip goes right of viewport, show left\r\n if (x + tooltipRect.width > viewportWidth) {\r\n position = 'left';\r\n x = triggerRect.left - tooltipRect.width - gap;\r\n }\r\n break;\r\n }\r\n\r\n // Adjust horizontal position if tooltip goes off screen\r\n if (x < 8) x = 8;\r\n if (x + tooltipRect.width > viewportWidth - 8) {\r\n x = viewportWidth - tooltipRect.width - 8;\r\n }\r\n\r\n // Adjust vertical position if tooltip goes off screen\r\n if (y < 8) y = 8;\r\n if (y + tooltipRect.height > viewportHeight - 8) {\r\n y = viewportHeight - tooltipRect.height - 8;\r\n }\r\n\r\n this.tooltipX = x;\r\n this.tooltipY = y;\r\n this.actualPosition = position;\r\n this.visible = true;\r\n });\r\n }\r\n\r\n private hide() {\r\n this.visible = false;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"trigger\" role=\"button\" tabindex=\"0\">\r\n <slot></slot>\r\n </div>\r\n \r\n <div \r\n class=\"tooltip-container ${this.visible ? 'visible' : ''}\"\r\n data-position=\"${this.actualPosition}\"\r\n style=\"left: ${this.tooltipX}px; top: ${this.tooltipY}px;\"\r\n role=\"tooltip\"\r\n aria-hidden=\"${!this.visible}\"\r\n >\r\n <div class=\"tooltip\">\r\n ${this.content}\r\n <div class=\"arrow\"></div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-tooltip': AevaTooltip;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A rating component to display user ratings with stars.\r\n * Supports read-only display and interactive mode for user input.\r\n *\r\n * @fires rating-change - Dispatched when the rating changes (only in interactive mode)\r\n *\r\n * @csspart container - The main rating container\r\n * @csspart star - Individual star element\r\n *\r\n * @cssprop --aeva-rating-color - Color of filled stars (default: #fbbf24)\r\n * @cssprop --aeva-rating-empty-color - Color of empty stars (default: #e5e7eb)\r\n * @cssprop --aeva-rating-hover-color - Color on hover in interactive mode (default: #f59e0b)\r\n * @cssprop --aeva-rating-size-sm - Size for small variant (default: 16px)\r\n * @cssprop --aeva-rating-size-md - Size for medium variant (default: 24px)\r\n * @cssprop --aeva-rating-size-lg - Size for large variant (default: 32px)\r\n */\r\n@customElement('aeva-rating')\r\nexport class AevaRating extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .rating-container {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n }\r\n\r\n .star {\r\n display: inline-flex;\r\n position: relative;\r\n transition: transform 0.2s ease;\r\n }\r\n\r\n .star svg {\r\n display: block;\r\n }\r\n\r\n /* Size variants */\r\n .size-sm .star svg {\r\n width: var(--aeva-rating-size-sm);\r\n height: var(--aeva-rating-size-sm);\r\n }\r\n\r\n .size-md .star svg {\r\n width: var(--aeva-rating-size-md);\r\n height: var(--aeva-rating-size-md);\r\n }\r\n\r\n .size-lg .star svg {\r\n width: var(--aeva-rating-size-lg);\r\n height: var(--aeva-rating-size-lg);\r\n }\r\n\r\n /* Interactive mode */\r\n .interactive .star {\r\n cursor: pointer;\r\n }\r\n\r\n .interactive .star:hover {\r\n transform: scale(1.1);\r\n }\r\n\r\n /* Star fill colors */\r\n .star-empty {\r\n color: var(--aeva-rating-empty-color);\r\n }\r\n\r\n .star-filled {\r\n color: var(--aeva-rating-color);\r\n }\r\n\r\n .star-half {\r\n position: relative;\r\n }\r\n\r\n .star-half .star-bg {\r\n color: var(--aeva-rating-empty-color);\r\n }\r\n\r\n .star-half .star-fg {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n color: var(--aeva-rating-color);\r\n overflow: hidden;\r\n width: 50%;\r\n }\r\n\r\n /* Hover effect for interactive mode */\r\n .interactive .star:hover,\r\n .interactive .star.hover {\r\n color: var(--aeva-rating-hover-color);\r\n }\r\n\r\n /* Label styling */\r\n .rating-label {\r\n margin-left: 8px;\r\n font-size: 14px;\r\n color: #6b7280;\r\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\r\n }\r\n `;\r\n\r\n /**\r\n * Current rating value (0-5, supports decimals for half stars)\r\n */\r\n @property({ type: Number })\r\n value = 0;\r\n\r\n /**\r\n * Maximum rating value\r\n */\r\n @property({ type: Number })\r\n max = 5;\r\n\r\n /**\r\n * Size variant\r\n */\r\n @property({ type: String, reflect: true })\r\n size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Whether the rating is interactive (user can change it)\r\n */\r\n @property({ type: Boolean })\r\n interactive = false;\r\n\r\n /**\r\n * Whether to show the numeric label\r\n */\r\n @property({ type: Boolean, attribute: 'show-label' })\r\n showLabel = false;\r\n\r\n /**\r\n * Whether to allow half stars\r\n */\r\n @property({ type: Boolean, attribute: 'allow-half' })\r\n allowHalf = true;\r\n\r\n @state()\r\n private hoverValue = 0;\r\n\r\n private renderStar(index: number) {\r\n const starValue = index + 1;\r\n const currentValue = this.hoverValue || this.value;\r\n\r\n let starType: 'empty' | 'half' | 'filled' = 'empty';\r\n\r\n if (currentValue >= starValue) {\r\n starType = 'filled';\r\n } else if (this.allowHalf && currentValue >= starValue - 0.5) {\r\n starType = 'half';\r\n }\r\n\r\n const starPath = 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z';\r\n\r\n if (starType === 'half') {\r\n return html`\r\n <div \r\n class=\"star star-half ${this.hoverValue >= starValue ? 'hover' : ''}\"\r\n @click=${() => this.handleStarClick(starValue)}\r\n @mouseenter=${() => this.handleStarHover(starValue)}\r\n @mouseleave=${() => this.handleStarLeave()}\r\n >\r\n <svg class=\"star-bg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"${starPath}\" />\r\n </svg>\r\n <svg class=\"star-fg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"${starPath}\" />\r\n </svg>\r\n </div>\r\n `;\r\n }\r\n\r\n return html`\r\n <div \r\n class=\"star ${starType === 'filled' ? 'star-filled' : 'star-empty'} ${this.hoverValue >= starValue ? 'hover' : ''}\"\r\n @click=${() => this.handleStarClick(starValue)}\r\n @mouseenter=${() => this.handleStarHover(starValue)}\r\n @mouseleave=${() => this.handleStarLeave()}\r\n >\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"${starPath}\" />\r\n </svg>\r\n </div>\r\n `;\r\n }\r\n\r\n private handleStarClick(value: number) {\r\n if (!this.interactive) return;\r\n\r\n // If clicking the same star, allow half star on second click\r\n if (this.allowHalf && this.value === value) {\r\n this.value = value - 0.5;\r\n } else {\r\n this.value = value;\r\n }\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('rating-change', {\r\n detail: { value: this.value },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private handleStarHover(value: number) {\r\n if (!this.interactive) return;\r\n this.hoverValue = value;\r\n }\r\n\r\n private handleStarLeave() {\r\n if (!this.interactive) return;\r\n this.hoverValue = 0;\r\n }\r\n\r\n render() {\r\n const classes = [\r\n 'rating-container',\r\n `size-${this.size}`,\r\n this.interactive ? 'interactive' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const stars = Array.from({ length: this.max }, (_, i) => this.renderStar(i));\r\n\r\n return html`\r\n <div part=\"container\" class=\"${classes}\">\r\n ${stars}\r\n ${this.showLabel\r\n ? html`<span class=\"rating-label\">${this.value.toFixed(1)}</span>`\r\n : ''}\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-rating': AevaRating;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A code block component with MacOS-style window decorations (Carbon style).\r\n * Supports syntax highlighting, line numbers (planned), and copy to clipboard.\r\n * \r\n * @cssprop --aeva-code-bg - Background color of the code area\r\n * @cssprop --aeva-code-header-bg - Background color of the window header\r\n * @cssprop --aeva-code-font-family - Font family for the code\r\n * @cssprop --aeva-code-font-size - Font size for the code\r\n * @cssprop --aeva-code-border-radius - Border radius of the code window (default: 22px)\r\n */\r\n@customElement('aeva-code')\r\nexport class AevaCode extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n margin: 1.5rem 0;\r\n font-family: var(--aeva-code-font-family, 'Fira Code', 'Cascadia Code', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace);\r\n }\r\n\r\n .code-window {\r\n background: var(--aeva-code-bg, #1e1e1e);\r\n border-radius: var(--aeva-code-border-radius, 22px);\r\n overflow: hidden;\r\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n position: relative;\r\n }\r\n\r\n .window-header {\r\n background: var(--aeva-code-header-bg, #323232);\r\n padding: 12px 16px;\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\r\n }\r\n\r\n .dot {\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 50%;\r\n }\r\n\r\n .dot-red { background: #ff5f56; }\r\n .dot-yellow { background: #ffbd2e; }\r\n .dot-green { background: #27c93f; }\r\n\r\n .window-title {\r\n flex: 1;\r\n text-align: center;\r\n color: rgba(255, 255, 255, 0.4);\r\n font-size: 0.8rem;\r\n margin-right: 40px; /* Offset for dots to center title */\r\n }\r\n\r\n .code-container {\r\n position: relative;\r\n padding: 1.5rem;\r\n margin: 0;\r\n overflow-x: auto;\r\n }\r\n\r\n pre {\r\n margin: 0;\r\n padding: 0;\r\n background: transparent !important;\r\n }\r\n\r\n code {\r\n font-family: inherit;\r\n font-size: var(--aeva-code-font-size, 0.95rem);\r\n line-height: 1.6;\r\n color: #d4d4d4;\r\n }\r\n\r\n .copy-button {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px;\r\n padding: 6px 10px;\r\n background: rgba(255, 255, 255, 0.05);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n border-radius: 6px;\r\n color: rgba(255, 255, 255, 0.6);\r\n font-size: 0.75rem;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n backdrop-filter: blur(4px);\r\n z-index: 10;\r\n }\r\n\r\n .copy-button:hover {\r\n background: rgba(255, 255, 255, 0.1);\r\n color: white;\r\n border-color: rgba(255, 255, 255, 0.2);\r\n }\r\n\r\n .copy-button.copied {\r\n background: rgba(39, 201, 63, 0.2);\r\n color: #27c93f;\r\n border-color: rgba(39, 201, 63, 0.3);\r\n }\r\n\r\n /* Scrollbar styling */\r\n .code-container::-webkit-scrollbar {\r\n width: var(--aeva-scrollbar-width);\r\n height: var(--aeva-scrollbar-width);\r\n }\r\n\r\n .code-container::-webkit-scrollbar-track {\r\n background: var(--aeva-scrollbar-track);\r\n }\r\n\r\n .code-container::-webkit-scrollbar-thumb {\r\n background: var(--aeva-scrollbar-thumb);\r\n border-radius: 10px;\r\n }\r\n\r\n .code-container::-webkit-scrollbar-thumb:hover {\r\n background: var(--aeva-scrollbar-thumb-hover);\r\n }\r\n `;\r\n\r\n /**\r\n * The code to display\r\n */\r\n @property({ type: String })\r\n code = '';\r\n\r\n /**\r\n * The language for syntax highlighting\r\n */\r\n @property({ type: String })\r\n language = 'html';\r\n\r\n /**\r\n * Optional title for the window\r\n */\r\n @property({ type: String })\r\n title = '';\r\n\r\n @state()\r\n private copied = false;\r\n\r\n private handleCopy() {\r\n // Get text from slot if code property is empty\r\n const textToCopy = this.code || this.textContent?.trim() || '';\r\n\r\n navigator.clipboard.writeText(textToCopy).then(() => {\r\n this.copied = true;\r\n setTimeout(() => {\r\n this.copied = false;\r\n }, 2000);\r\n });\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"code-window\">\r\n <div class=\"window-header\">\r\n <div class=\"dot dot-red\"></div>\r\n <div class=\"dot dot-yellow\"></div>\r\n <div class=\"dot dot-green\"></div>\r\n ${this.title ? html`<div class=\"window-title\">${this.title}</div>` : ''}\r\n </div>\r\n \r\n <div class=\"code-container\">\r\n <button \r\n class=\"copy-button ${this.copied ? 'copied' : ''}\" \r\n @click=${this.handleCopy}\r\n >\r\n ${this.copied ? 'Copied!' : 'Copy'}\r\n </button>\r\n <pre class=\"language-${this.language}\"><code class=\"language-${this.language}\">${this.code}<slot></slot></code></pre>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-code': AevaCode;\r\n }\r\n}\r\n","/**\r\n * Helper utility class for managing radio button groups.\r\n * Provides convenient methods to get and set selected values in radio groups.\r\n * \r\n * @example\r\n * ```typescript\r\n * // Get selected value\r\n * const value = RadioGroupHelper.getValue('myGroup');\r\n * \r\n * // Set selected value\r\n * RadioGroupHelper.setValue('myGroup', 'option2');\r\n * \r\n * // Get the selected radio element\r\n * const radio = RadioGroupHelper.getRadio('myGroup');\r\n * \r\n * // Check if any radio is selected\r\n * const hasSelection = RadioGroupHelper.hasSelection('myGroup');\r\n * ```\r\n */\r\nexport class RadioGroupHelper {\r\n /**\r\n * Get the value of the selected radio in a group.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * @returns The value of the selected radio, or null if none selected\r\n * \r\n * @example\r\n * ```typescript\r\n * const selectedValue = RadioGroupHelper.getValue('paymentMethod');\r\n * console.log(selectedValue); // 'credit-card' or null\r\n * ```\r\n */\r\n static getValue(groupName: string): string | null {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${groupName}\"]`);\r\n const checked = Array.from(radios).find((r: any) => r.checked);\r\n return checked ? (checked as any).value : null;\r\n }\r\n\r\n /**\r\n * Get the selected radio element in a group.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * @returns The selected radio element, or null if none selected\r\n * \r\n * @example\r\n * ```typescript\r\n * const radio = RadioGroupHelper.getRadio('paymentMethod');\r\n * if (radio) {\r\n * console.log('Selected:', radio.value);\r\n * }\r\n * ```\r\n */\r\n static getRadio(groupName: string): HTMLElement | null {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${groupName}\"]`);\r\n return Array.from(radios).find((r: any) => r.checked) as HTMLElement || null;\r\n }\r\n\r\n /**\r\n * Set the selected radio in a group by value.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * @param value - The value to select\r\n * @returns True if a radio was found and selected, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * RadioGroupHelper.setValue('paymentMethod', 'paypal');\r\n * ```\r\n */\r\n static setValue(groupName: string, value: string): boolean {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${groupName}\"]`);\r\n let found = false;\r\n\r\n radios.forEach((radio: any) => {\r\n if (radio.value === value) {\r\n radio.checked = true;\r\n found = true;\r\n } else {\r\n radio.checked = false;\r\n }\r\n });\r\n\r\n return found;\r\n }\r\n\r\n /**\r\n * Check if any radio is selected in a group.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * @returns True if any radio is selected, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * if (!RadioGroupHelper.hasSelection('paymentMethod')) {\r\n * alert('Please select a payment method');\r\n * }\r\n * ```\r\n */\r\n static hasSelection(groupName: string): boolean {\r\n return this.getValue(groupName) !== null;\r\n }\r\n\r\n /**\r\n * Clear the selection in a radio group (uncheck all radios).\r\n * Note: This is not standard radio behavior, use with caution.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * \r\n * @example\r\n * ```typescript\r\n * RadioGroupHelper.clearSelection('paymentMethod');\r\n * ```\r\n */\r\n static clearSelection(groupName: string): void {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${groupName}\"]`);\r\n radios.forEach((radio: any) => {\r\n radio.checked = false;\r\n });\r\n }\r\n\r\n /**\r\n * Get all radios in a group.\r\n * \r\n * @param groupName - The name attribute of the radio group\r\n * @returns Array of radio elements in the group\r\n * \r\n * @example\r\n * ```typescript\r\n * const radios = RadioGroupHelper.getAll('paymentMethod');\r\n * console.log('Total options:', radios.length);\r\n * ```\r\n */\r\n static getAll(groupName: string): HTMLElement[] {\r\n const radios = document.querySelectorAll(`aeva-radio[name=\"${groupName}\"]`);\r\n return Array.from(radios) as HTMLElement[];\r\n }\r\n}\r\n","/**\r\n * Helper utility class for managing checkbox groups.\r\n * Provides convenient methods to get and set checked values in checkbox groups.\r\n * \r\n * @example\r\n * ```typescript\r\n * // Get all checked values\r\n * const values = CheckboxGroupHelper.getValues('myGroup');\r\n * \r\n * // Set checked values\r\n * CheckboxGroupHelper.setValues('myGroup', ['option1', 'option3']);\r\n * \r\n * // Check if a specific value is checked\r\n * const isChecked = CheckboxGroupHelper.isChecked('myGroup', 'option2');\r\n * ```\r\n */\r\nexport class CheckboxGroupHelper {\r\n /**\r\n * Get all checked values in a checkbox group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @returns Array of checked values\r\n * \r\n * @example\r\n * ```typescript\r\n * const selected = CheckboxGroupHelper.getValues('interests');\r\n * console.log(selected); // ['sports', 'music']\r\n * ```\r\n */\r\n static getValues(groupName: string): string[] {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n const values: string[] = [];\r\n\r\n checkboxes.forEach((checkbox: any) => {\r\n if (checkbox.checked && checkbox.value) {\r\n values.push(checkbox.value);\r\n }\r\n });\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Get all checked checkbox elements in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @returns Array of checked checkbox elements\r\n * \r\n * @example\r\n * ```typescript\r\n * const checkboxes = CheckboxGroupHelper.getChecked('interests');\r\n * checkboxes.forEach(cb => console.log(cb.value));\r\n * ```\r\n */\r\n static getChecked(groupName: string): HTMLElement[] {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n return Array.from(checkboxes).filter((cb: any) => cb.checked) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Set which checkboxes should be checked in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @param values - Array of values to check\r\n * \r\n * @example\r\n * ```typescript\r\n * CheckboxGroupHelper.setValues('interests', ['sports', 'music']);\r\n * ```\r\n */\r\n static setValues(groupName: string, values: string[]): void {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n\r\n checkboxes.forEach((checkbox: any) => {\r\n checkbox.checked = values.includes(checkbox.value);\r\n });\r\n }\r\n\r\n /**\r\n * Check if a specific value is checked in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @param value - The value to check\r\n * @returns True if the value is checked, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * if (CheckboxGroupHelper.isChecked('interests', 'sports')) {\r\n * console.log('Sports is selected');\r\n * }\r\n * ```\r\n */\r\n static isChecked(groupName: string, value: string): boolean {\r\n const checkbox = document.querySelector(`aeva-checkbox[name=\"${groupName}\"][value=\"${value}\"]`) as any;\r\n return checkbox ? checkbox.checked : false;\r\n }\r\n\r\n /**\r\n * Check if any checkbox is checked in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @returns True if any checkbox is checked, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * if (!CheckboxGroupHelper.hasSelection('interests')) {\r\n * alert('Please select at least one interest');\r\n * }\r\n * ```\r\n */\r\n static hasSelection(groupName: string): boolean {\r\n return this.getValues(groupName).length > 0;\r\n }\r\n\r\n /**\r\n * Clear all selections in a checkbox group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * \r\n * @example\r\n * ```typescript\r\n * CheckboxGroupHelper.clearAll('interests');\r\n * ```\r\n */\r\n static clearAll(groupName: string): void {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n checkboxes.forEach((checkbox: any) => {\r\n checkbox.checked = false;\r\n });\r\n }\r\n\r\n /**\r\n * Select all checkboxes in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * \r\n * @example\r\n * ```typescript\r\n * CheckboxGroupHelper.selectAll('interests');\r\n * ```\r\n */\r\n static selectAll(groupName: string): void {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n checkboxes.forEach((checkbox: any) => {\r\n checkbox.checked = true;\r\n });\r\n }\r\n\r\n /**\r\n * Toggle a specific checkbox value.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @param value - The value to toggle\r\n * \r\n * @example\r\n * ```typescript\r\n * CheckboxGroupHelper.toggle('interests', 'sports');\r\n * ```\r\n */\r\n static toggle(groupName: string, value: string): void {\r\n const checkbox = document.querySelector(`aeva-checkbox[name=\"${groupName}\"][value=\"${value}\"]`) as any;\r\n if (checkbox) {\r\n checkbox.checked = !checkbox.checked;\r\n }\r\n }\r\n\r\n /**\r\n * Get all checkboxes in a group.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @returns Array of all checkbox elements in the group\r\n * \r\n * @example\r\n * ```typescript\r\n * const all = CheckboxGroupHelper.getAll('interests');\r\n * console.log('Total options:', all.length);\r\n * ```\r\n */\r\n static getAll(groupName: string): HTMLElement[] {\r\n const checkboxes = document.querySelectorAll(`aeva-checkbox[name=\"${groupName}\"]`);\r\n return Array.from(checkboxes) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Get count of checked checkboxes.\r\n * \r\n * @param groupName - The name attribute of the checkbox group\r\n * @returns Number of checked checkboxes\r\n * \r\n * @example\r\n * ```typescript\r\n * const count = CheckboxGroupHelper.getCount('interests');\r\n * console.log(`${count} interests selected`);\r\n * ```\r\n */\r\n static getCount(groupName: string): number {\r\n return this.getValues(groupName).length;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state, query } from 'lit/decorators.js';\r\nimport '../atoms/aeva-tab-item';\r\n\r\n/**\r\n * A tab container component with morphing background animation.\r\n * Manages multiple tab items and handles selection state.\r\n *\r\n * @slot - Default slot for aeva-tab-item elements\r\n *\r\n * @fires on-tab-changed - Fired when active tab changes\r\n * @event {CustomEvent<{previousIndex: number, currentIndex: number, label: string}>} on-tab-changed\r\n *\r\n * @csspart container - The tab container element\r\n * @csspart background - The animated background element\r\n *\r\n * @cssprop --aeva-tab-bg - Background color of the tab container\r\n * @cssprop --aeva-tab-active-bg - Background color of the active tab\r\n * @cssprop --aeva-tab-padding - Padding around the tab container\r\n * @cssprop --aeva-tab-gap - Gap between tab items\r\n * @cssprop --aeva-tab-border-radius - Border radius of the container\r\n * @cssprop --aeva-tab-transition-duration - Duration of the morphing animation\r\n * @cssprop --aeva-tab-transition-timing - Timing function for the animation\r\n */\r\n@customElement('aeva-tab')\r\nexport class AevaTab extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n }\r\n\r\n .container {\r\n background: var(--aeva-tab-bg);\r\n border-radius: var(--aeva-tab-border-radius);\r\n padding: var(--aeva-tab-padding);\r\n display: inline-flex;\r\n gap: var(--aeva-tab-gap);\r\n position: relative;\r\n isolation: isolate;\r\n max-width: 100%;\r\n \r\n /* Mobile scrolling support */\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n -webkit-overflow-scrolling: touch;\r\n \r\n /* Hide scrollbar but keep functionality */\r\n scrollbar-width: none; /* Firefox */\r\n -ms-overflow-style: none; /* IE/Edge */\r\n \r\n /* Scroll snap for better UX - but don't snap too aggressively */\r\n scroll-snap-type: x proximity;\r\n scroll-padding-inline: var(--aeva-tab-gap);\r\n }\r\n \r\n /* Hide scrollbar for Chrome/Safari */\r\n .container::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .background {\r\n position: absolute;\r\n background: var(--aeva-tab-active-bg);\r\n border-radius: calc(var(--aeva-tab-border-radius) - var(--aeva-tab-padding));\r\n transition: \r\n left var(--aeva-tab-transition-duration) var(--aeva-tab-transition-timing),\r\n width var(--aeva-tab-transition-duration) var(--aeva-tab-transition-timing),\r\n transform var(--aeva-tab-transition-duration) var(--aeva-tab-transition-timing);\r\n pointer-events: none;\r\n z-index: 0;\r\n will-change: left, width, transform;\r\n }\r\n\r\n /* Morphing animation states */\r\n .background.morphing {\r\n /* Scale effect during transition for \"stretching\" appearance */\r\n animation: morph var(--aeva-tab-transition-duration) var(--aeva-tab-transition-timing);\r\n }\r\n\r\n @keyframes morph {\r\n 0% {\r\n transform: scaleX(1);\r\n }\r\n 50% {\r\n transform: scaleX(1.1);\r\n }\r\n 100% {\r\n transform: scaleX(1);\r\n }\r\n }\r\n\r\n ::slotted(aeva-tab-item) {\r\n position: relative;\r\n z-index: 1;\r\n flex-shrink: 0; /* Prevent tabs from shrinking on mobile */\r\n \r\n /* Remove tap highlight on mobile */\r\n -webkit-tap-highlight-color: transparent;\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n /* Add spacing for first and last items to prevent edge touching */\r\n ::slotted(aeva-tab-item:first-child) {\r\n margin-left: var(--aeva-tab-gap);\r\n scroll-snap-align: end;\r\n }\r\n\r\n ::slotted(aeva-tab-item:last-child) {\r\n margin-right: var(--aeva-tab-gap);\r\n scroll-snap-align: start;\r\n }\r\n \r\n /* Middle items use center snap */\r\n ::slotted(aeva-tab-item:not(:first-child):not(:last-child)) {\r\n scroll-snap-align: center;\r\n }\r\n `;\r\n\r\n /**\r\n * Index of the currently active tab\r\n */\r\n @property({ type: Number, reflect: true })\r\n active = 0;\r\n\r\n @state()\r\n private tabItems: HTMLElement[] = [];\r\n\r\n @state()\r\n private backgroundStyle = {\r\n left: '0px',\r\n top: '0px',\r\n width: '0px',\r\n height: '0px',\r\n };\r\n\r\n @state()\r\n private isMorphing = false;\r\n\r\n @state()\r\n private scrollTimeout: number | null = null;\r\n\r\n @query('.container')\r\n private container!: HTMLElement;\r\n\r\n\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.addEventListener('tab-item-click', this.handleTabItemClick as EventListener);\r\n this.addEventListener('keydown', this.handleKeyDown);\r\n }\r\n\r\n async firstUpdated() {\r\n this.updateTabItems();\r\n\r\n // Wait for all items to complete their initial update\r\n await Promise.all(this.tabItems.map((item: any) => item.updateComplete));\r\n\r\n // Initial position\r\n this.updateBackgroundPosition(false);\r\n\r\n // Add scroll listener to update background position after scrolling stops\r\n this.container?.addEventListener('scroll', this.handleScroll);\r\n window.addEventListener('resize', this.handleResize);\r\n\r\n // Secondary settlement after fonts and paint to ensure accuracy\r\n document.fonts.ready.then(() => {\r\n this.updateBackgroundPosition(false);\r\n });\r\n\r\n // Final safety check after a short delay\r\n setTimeout(() => {\r\n this.updateBackgroundPosition(false);\r\n }, 100);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.removeEventListener('tab-item-click', this.handleTabItemClick as EventListener);\r\n this.removeEventListener('keydown', this.handleKeyDown);\r\n this.container?.removeEventListener('scroll', this.handleScroll);\r\n window.removeEventListener('resize', this.handleResize);\r\n if (this.scrollTimeout) {\r\n cancelAnimationFrame(this.scrollTimeout);\r\n }\r\n }\r\n\r\n private handleScroll = () => {\r\n // Cancel any pending update\r\n if (this.scrollTimeout) {\r\n cancelAnimationFrame(this.scrollTimeout);\r\n }\r\n\r\n // Schedule update for next frame\r\n this.scrollTimeout = requestAnimationFrame(() => {\r\n this.updateBackgroundPosition(false);\r\n this.scrollTimeout = null;\r\n });\r\n };\r\n\r\n private handleResize = () => {\r\n this.updateBackgroundPosition(false);\r\n };\r\n\r\n updated(changedProperties: Map<string, any>) {\r\n if (changedProperties.has('active')) {\r\n this.updateBackgroundPosition(true);\r\n }\r\n }\r\n\r\n private handleSlotChange() {\r\n this.updateTabItems();\r\n this.updateBackgroundPosition(false);\r\n }\r\n\r\n private updateTabItems() {\r\n const slot = this.shadowRoot?.querySelector('slot');\r\n const assignedElements = slot?.assignedElements() || [];\r\n\r\n this.tabItems = assignedElements.filter(\r\n (el) => el.tagName.toLowerCase() === 'aeva-tab-item'\r\n ) as HTMLElement[];\r\n\r\n // Update tab items with their index and active state\r\n this.tabItems.forEach((item: any, index) => {\r\n item.index = index;\r\n item.active = index === this.active;\r\n });\r\n }\r\n\r\n private handleTabItemClick(e: CustomEvent) {\r\n const { index, label } = e.detail;\r\n\r\n // Don't do anything if clicking the already active tab\r\n if (index === this.active) return;\r\n\r\n const previousIndex = this.active;\r\n this.active = index;\r\n\r\n // Update active state on tab items\r\n this.tabItems.forEach((item: any, i) => {\r\n item.active = i === this.active;\r\n });\r\n\r\n // Dispatch change event\r\n this.dispatchEvent(\r\n new CustomEvent('on-tab-changed', {\r\n detail: {\r\n previousIndex,\r\n currentIndex: index,\r\n label,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private handleKeyDown = (e: KeyboardEvent) => {\r\n const enabledTabs = this.tabItems.filter((item: any) => !item.disabled);\r\n const currentIndex = enabledTabs.findIndex((item: any) => item.active);\r\n\r\n let newIndex = currentIndex;\r\n\r\n switch (e.key) {\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n newIndex = currentIndex > 0 ? currentIndex - 1 : enabledTabs.length - 1;\r\n break;\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n newIndex = currentIndex < enabledTabs.length - 1 ? currentIndex + 1 : 0;\r\n break;\r\n case 'Home':\r\n e.preventDefault();\r\n newIndex = 0;\r\n break;\r\n case 'End':\r\n e.preventDefault();\r\n newIndex = enabledTabs.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (newIndex !== currentIndex) {\r\n const targetTab = enabledTabs[newIndex] as any;\r\n targetTab.shadowRoot?.querySelector('button')?.focus();\r\n\r\n // Trigger click on the new tab\r\n const actualIndex = this.tabItems.indexOf(targetTab);\r\n this.handleTabItemClick(\r\n new CustomEvent('tab-item-click', {\r\n detail: { index: actualIndex, label: targetTab.label },\r\n })\r\n );\r\n }\r\n };\r\n\r\n private updateBackgroundPosition(animate: boolean) {\r\n // Wait for next frame to ensure DOM is updated\r\n requestAnimationFrame(() => {\r\n const activeItem = this.tabItems[this.active];\r\n if (!activeItem || !this.container) return;\r\n\r\n const containerRect = this.container.getBoundingClientRect();\r\n const itemRect = activeItem.getBoundingClientRect();\r\n\r\n // Calculate position relative to container, accounting for scroll\r\n // We need the position relative to the container's content area, not viewport\r\n const left = itemRect.left - containerRect.left + this.container.scrollLeft;\r\n const top = itemRect.top - containerRect.top + this.container.scrollTop;\r\n const width = itemRect.width;\r\n const height = itemRect.height;\r\n\r\n this.backgroundStyle = {\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n };\r\n\r\n // Trigger morphing animation\r\n if (animate) {\r\n this.isMorphing = true;\r\n setTimeout(() => {\r\n this.isMorphing = false;\r\n }, parseFloat(getComputedStyle(this).getPropertyValue('--aeva-duration-normal')) || 200);\r\n }\r\n\r\n // Scroll active tab into view if not fully visible\r\n if (animate) {\r\n this.scrollTabIntoView(activeItem);\r\n }\r\n\r\n this.requestUpdate();\r\n });\r\n }\r\n\r\n private scrollTabIntoView(tabItem: HTMLElement) {\r\n if (!this.container) return;\r\n\r\n const containerRect = this.container.getBoundingClientRect();\r\n const itemRect = tabItem.getBoundingClientRect();\r\n\r\n // Calculate if item is fully visible\r\n const isFullyVisible =\r\n itemRect.left >= containerRect.left &&\r\n itemRect.right <= containerRect.right;\r\n\r\n if (!isFullyVisible) {\r\n // Scroll with some padding for better UX\r\n const padding = 20;\r\n let targetScrollLeft = this.container.scrollLeft;\r\n\r\n if (itemRect.left < containerRect.left) {\r\n // Item is cut off on the left, scroll left\r\n targetScrollLeft -= (containerRect.left - itemRect.left) + padding;\r\n } else if (itemRect.right > containerRect.right) {\r\n // Item is cut off on the right, scroll right\r\n targetScrollLeft += (itemRect.right - containerRect.right) + padding;\r\n }\r\n\r\n // Use scrollTo with smooth behavior for programmatic scrolling\r\n this.container.scrollTo({\r\n left: targetScrollLeft,\r\n behavior: 'smooth'\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const backgroundClasses = this.isMorphing ? 'background morphing' : 'background';\r\n\r\n return html`\r\n <div class=\"container\" part=\"container\" role=\"tablist\">\r\n <div\r\n class=\"${backgroundClasses}\"\r\n part=\"background\"\r\n style=\"\r\n left: ${this.backgroundStyle.left};\r\n top: ${this.backgroundStyle.top};\r\n width: ${this.backgroundStyle.width};\r\n height: ${this.backgroundStyle.height};\r\n \"\r\n ></div>\r\n <slot @slotchange=\"${this.handleSlotChange}\"></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-tab': AevaTab;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport '../atoms/aeva-list-item';\r\n\r\n/**\r\n * A container component for list items.\r\n * Manages selection and keyboard navigation.\r\n * \r\n * @slot - Default slot for aeva-list-item elements\r\n * \r\n * @fires on-selection-change - Fired when the active item changes\r\n * @event {CustomEvent<{index: number, label: string}>} on-selection-change\r\n * \r\n * @cssprop --aeva-list-padding - Padding for the list container (default: 8px)\r\n * @cssprop --aeva-list-gap - Gap between items (default: 4px)\r\n */\r\n@customElement('aeva-list')\r\nexport class AevaList extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%; \r\n }\r\n\r\n .list-container {\r\n display: flex;\r\n flex-direction: column;\r\n padding: var(--aeva-list-padding);\r\n gap: var(--aeva-list-gap);\r\n border-radius: var(--aeva-list-border-radius);\r\n }\r\n `;\r\n\r\n /**\r\n * The index of the currently active item\r\n */\r\n @property({ type: Number, reflect: true })\r\n active = -1;\r\n\r\n @state()\r\n private items: HTMLElement[] = [];\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.addEventListener('list-item-click', this.handleItemClick as EventListener);\r\n this.addEventListener('keydown', this.handleKeyDown);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.removeEventListener('list-item-click', this.handleItemClick as EventListener);\r\n this.removeEventListener('keydown', this.handleKeyDown);\r\n }\r\n\r\n private handleSlotChange() {\r\n this.updateItems();\r\n }\r\n\r\n private updateItems() {\r\n const slot = this.shadowRoot?.querySelector('slot');\r\n const assignedElements = slot?.assignedElements({ flatten: true }) || [];\r\n\r\n this.items = assignedElements.filter(\r\n (el) => el.tagName.toLowerCase() === 'aeva-list-item'\r\n ) as HTMLElement[];\r\n\r\n this.items.forEach((item: any, index) => {\r\n item.index = index;\r\n item.active = index === this.active;\r\n });\r\n }\r\n\r\n private handleItemClick(e: CustomEvent) {\r\n const { index, label } = e.detail;\r\n this.setSelected(index, label);\r\n }\r\n\r\n private setSelected(index: number, label: string) {\r\n if (index === this.active) return;\r\n\r\n this.active = index;\r\n\r\n // Update items active state\r\n this.items.forEach((item: any, i) => {\r\n item.active = i === this.active;\r\n });\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('on-selection-change', {\r\n detail: { index, label },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n private handleKeyDown(e: KeyboardEvent) {\r\n if (this.items.length === 0) return;\r\n\r\n let targetIndex = -1;\r\n const currentIndex = this.items.findIndex((item: any) =>\r\n item.shadowRoot?.querySelector('.item') === document.activeElement ||\r\n item === document.activeElement ||\r\n item.shadowRoot?.activeElement\r\n );\r\n\r\n // If no item is focused, use the active index or 0\r\n let focusIndex = currentIndex === -1 ? (this.active === -1 ? 0 : this.active) : currentIndex;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n targetIndex = (focusIndex + 1) % this.items.length;\r\n break;\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n targetIndex = (focusIndex - 1 + this.items.length) % this.items.length;\r\n break;\r\n case 'Home':\r\n e.preventDefault();\r\n targetIndex = 0;\r\n break;\r\n case 'End':\r\n e.preventDefault();\r\n targetIndex = this.items.length - 1;\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n e.preventDefault();\r\n const activeEl = this.items[focusIndex] as any;\r\n if (activeEl) {\r\n this.setSelected(focusIndex, activeEl.label);\r\n }\r\n return;\r\n default:\r\n return;\r\n }\r\n\r\n if (targetIndex !== -1) {\r\n const targetItem = this.items[targetIndex] as any;\r\n targetItem.shadowRoot?.querySelector('.item')?.focus();\r\n }\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"list-container\" role=\"listbox\">\r\n <slot @slotchange=\"${this.handleSlotChange}\"></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-list': AevaList;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A toast notification component for displaying temporary messages.\r\n * Supports multiple variants, positions, auto-dismiss, and stacking.\r\n *\r\n * @slot - Default slot for toast content\r\n *\r\n * @fires open - Dispatched when the toast opens\r\n * @fires close - Dispatched when the toast closes\r\n *\r\n * @cssprop --aeva-toast-bg - Background color (default: rgba(255, 255, 255, 0.9))\r\n * @cssprop --aeva-toast-border-radius - Border radius (default: 12px)\r\n * @cssprop --aeva-toast-padding - Padding (default: 1rem 1.25rem)\r\n * @cssprop --aeva-toast-min-width - Minimum width (default: 300px)\r\n * @cssprop --aeva-toast-max-width - Maximum width (default: 500px)\r\n */\r\n@customElement('aeva-toast')\r\nexport class AevaToast extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n z-index: 9999;\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n }\r\n\r\n /* Position variants */\r\n :host([position=\"top-right\"]) {\r\n top: 1rem;\r\n right: 1rem;\r\n }\r\n\r\n :host([position=\"top-left\"]) {\r\n top: 1rem;\r\n left: 1rem;\r\n }\r\n\r\n :host([position=\"top-center\"]) {\r\n top: 1rem;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n :host([position=\"bottom-right\"]) {\r\n bottom: 1rem;\r\n right: 1rem;\r\n }\r\n\r\n :host([position=\"bottom-left\"]) {\r\n bottom: 1rem;\r\n left: 1rem;\r\n }\r\n\r\n :host([position=\"bottom-center\"]) {\r\n bottom: 1rem;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n .toast {\r\n position: relative;\r\n background: var(--aeva-toast-bg, rgba(255, 255, 255, 0.95));\r\n backdrop-filter: blur(var(--aeva-toast-blur, 8px));\r\n -webkit-backdrop-filter: blur(var(--aeva-toast-blur, 8px));\r\n border-radius: var(--aeva-toast-border-radius, 12px);\r\n padding: var(--aeva-toast-padding, 1rem 1.25rem);\r\n min-width: var(--aeva-toast-min-width, 300px);\r\n max-width: var(--aeva-toast-max-width, 500px);\r\n border: 1px solid var(--aeva-toast-border-color, rgba(255, 255, 255, 0.1));\r\n box-shadow: \r\n 0 10px 15px -3px var(--aeva-toast-shadow-color, rgba(0, 0, 0, 0.1)),\r\n 0 4px 6px -2px var(--aeva-toast-shadow-color, rgba(0, 0, 0, 0.05));\r\n \r\n display: flex;\r\n align-items: center;\r\n gap: 0.75rem;\r\n \r\n animation: toastIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\r\n }\r\n\r\n :host([closing]) .toast {\r\n animation: toastOut 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;\r\n }\r\n\r\n /* Slide animations based on position */\r\n @keyframes toastIn {\r\n from {\r\n opacity: 0;\r\n transform: translateY(-20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n :host([position*=\"bottom\"]) .toast {\r\n animation: toastInBottom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\r\n }\r\n\r\n @keyframes toastInBottom {\r\n from {\r\n opacity: 0;\r\n transform: translateY(20px);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n @keyframes toastOut {\r\n from {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: scale(0.95);\r\n }\r\n }\r\n\r\n /* Icon container */\r\n .icon {\r\n flex-shrink: 0;\r\n width: 24px;\r\n height: 24px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .icon svg {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n /* Content */\r\n .content {\r\n flex: 1;\r\n color: #333;\r\n font-size: 0.95rem;\r\n line-height: 1.5;\r\n }\r\n\r\n /* Close button */\r\n .close-button {\r\n flex-shrink: 0;\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 0.25rem;\r\n border-radius: 4px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #666;\r\n transition: all 0.2s;\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n .close-button:hover {\r\n background: var(--aeva-toast-close-hover-bg);\r\n color: #333;\r\n }\r\n\r\n .close-button svg {\r\n width: 16px;\r\n height: 16px;\r\n }\r\n\r\n /* Variant styles */\r\n :host([variant=\"success\"]) .toast {\r\n --aeva-toast-bg: rgba(220, 252, 231, 0.95);\r\n --aeva-toast-border-color: rgba(34, 197, 94, 0.3);\r\n }\r\n\r\n :host([variant=\"success\"]) .icon {\r\n color: #16a34a;\r\n }\r\n\r\n :host([variant=\"error\"]) .toast {\r\n --aeva-toast-bg: rgba(254, 226, 226, 0.95);\r\n --aeva-toast-border-color: rgba(239, 68, 68, 0.3);\r\n }\r\n\r\n :host([variant=\"error\"]) .icon {\r\n color: #dc2626;\r\n }\r\n\r\n :host([variant=\"warning\"]) .toast {\r\n --aeva-toast-bg: rgba(254, 243, 199, 0.95);\r\n --aeva-toast-border-color: rgba(245, 158, 11, 0.3);\r\n }\r\n\r\n :host([variant=\"warning\"]) .icon {\r\n color: #d97706;\r\n }\r\n\r\n :host([variant=\"info\"]) .toast {\r\n --aeva-toast-bg: rgba(219, 234, 254, 0.95);\r\n --aeva-toast-border-color: rgba(59, 130, 246, 0.3);\r\n }\r\n\r\n :host([variant=\"info\"]) .icon {\r\n color: #2563eb;\r\n }\r\n\r\n /* Mobile responsive */\r\n @media (max-width: 767px) {\r\n :host {\r\n --aeva-toast-max-width: calc(100vw - 2rem);\r\n }\r\n\r\n :host([position=\"top-center\"]),\r\n :host([position=\"bottom-center\"]) {\r\n left: 1rem;\r\n right: 1rem;\r\n transform: none;\r\n }\r\n }\r\n `;\r\n\r\n @property({ type: String, reflect: true })\r\n variant: 'default' | 'success' | 'error' | 'warning' | 'info' = 'default';\r\n\r\n @property({ type: String, reflect: true })\r\n position: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' = 'top-right';\r\n\r\n @property({ type: Number })\r\n duration = 3000;\r\n\r\n @property({ type: Boolean, reflect: true })\r\n open = false;\r\n\r\n @property({ type: Boolean })\r\n closable = true;\r\n\r\n @state()\r\n private closing = false;\r\n\r\n private autoCloseTimer?: number;\r\n\r\n updated(changedProperties: Map<string, unknown>) {\r\n if (changedProperties.has('open')) {\r\n if (this.open) {\r\n this.handleOpen();\r\n }\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n if (this.autoCloseTimer) {\r\n clearTimeout(this.autoCloseTimer);\r\n }\r\n }\r\n\r\n private handleOpen() {\r\n this.closing = false;\r\n this.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\r\n\r\n // Auto-dismiss if duration > 0\r\n if (this.duration > 0) {\r\n if (this.autoCloseTimer) {\r\n clearTimeout(this.autoCloseTimer);\r\n }\r\n this.autoCloseTimer = window.setTimeout(() => {\r\n this.close();\r\n }, this.duration);\r\n }\r\n }\r\n\r\n public close() {\r\n if (!this.open || this.closing) return;\r\n\r\n this.closing = true;\r\n this.setAttribute('closing', '');\r\n\r\n setTimeout(() => {\r\n this.open = false;\r\n this.closing = false;\r\n this.removeAttribute('closing');\r\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\r\n }, 200);\r\n }\r\n\r\n private handleClose = () => {\r\n this.close();\r\n };\r\n\r\n private getIcon() {\r\n switch (this.variant) {\r\n case 'success':\r\n return html`\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 13l4 4L19 7\"></path>\r\n </svg>\r\n `;\r\n case 'error':\r\n return html`\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n </svg>\r\n `;\r\n case 'warning':\r\n return html`\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"></path>\r\n </svg>\r\n `;\r\n case 'info':\r\n return html`\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\r\n </svg>\r\n `;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"toast\" role=\"alert\" aria-live=\"polite\">\r\n ${this.variant !== 'default' ? html`<div class=\"icon\">${this.getIcon()}</div>` : ''}\r\n <div class=\"content\">\r\n <slot></slot>\r\n </div>\r\n ${this.closable ? html`\r\n <button class=\"close-button\" @click=${this.handleClose} aria-label=\"Close\">\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\r\n </svg>\r\n </button>\r\n ` : ''}\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-toast': AevaToast;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * An action bar component for grouping action buttons with flexible layout options.\r\n * Typically used at the bottom of forms, modals, or pages.\r\n *\r\n * @slot primary - Primary action buttons (right-aligned by default)\r\n * @slot secondary - Secondary action buttons (left-aligned by default)\r\n * @slot - Default slot (falls back to primary)\r\n *\r\n * @csspart action-bar - The main action bar container\r\n *\r\n * @cssprop --aeva-action-bar-bg - Background color (default: transparent)\r\n * @cssprop --aeva-action-bar-padding - Padding for the action bar\r\n * @cssprop --aeva-action-bar-gap - Gap between button groups\r\n * @cssprop --aeva-action-bar-border-top - Border top style\r\n * @cssprop --aeva-action-bar-border-bottom - Border bottom style\r\n * @cssprop --aeva-action-bar-backdrop-filter - Backdrop filter effect (default: none)\r\n * @cssprop --aeva-action-bar-drop-shadow - Drop shadow effect (default: none)\r\n * @cssprop --aeva-action-bar-sticky-bg - Background when sticky (default: rgba(255, 255, 255, 0.95))\r\n * @cssprop --aeva-action-bar-sticky-blur - Backdrop blur when sticky (default: 10px)\r\n * @cssprop --aeva-action-bar-glassmorphism-border - Border style for glassmorphism effect\r\n * @cssprop --aeva-action-bar-glassmorphism-shadow - Box shadow for glassmorphism effect\r\n */\r\n@customElement('aeva-action-bar')\r\nexport class AevaActionBar extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .action-bar {\r\n display: flex;\r\n align-items: center;\r\n margin: var(--aeva-action-bar-padding);\r\n background: var(--aeva-action-bar-bg);\r\n border-top: var(--aeva-action-bar-border-top);\r\n border-bottom: var(--aeva-action-bar-border-bottom);\r\n backdrop-filter: var(--aeva-action-bar-backdrop-filter);\r\n -webkit-backdrop-filter: var(--aeva-action-bar-backdrop-filter);\r\n box-shadow: var(--aeva-action-bar-drop-shadow);\r\n box-sizing: border-box;\r\n gap: var(--aeva-action-bar-gap);\r\n border-radius: 12px;\r\n }\r\n\r\n /* Layout variants */\r\n .layout-horizontal {\r\n flex-direction: row;\r\n }\r\n\r\n .layout-vertical {\r\n flex-direction: column;\r\n align-items: stretch;\r\n }\r\n\r\n /* Alignment options */\r\n .align-start {\r\n justify-content: flex-start;\r\n }\r\n\r\n .align-end {\r\n justify-content: flex-end;\r\n }\r\n\r\n .align-center {\r\n justify-content: center;\r\n }\r\n\r\n .align-space-between {\r\n justify-content: space-between;\r\n }\r\n\r\n .align-space-around {\r\n justify-content: space-around;\r\n }\r\n\r\n /* Slot containers */\r\n .secondary,\r\n .primary {\r\n display: flex;\r\n gap: var(--aeva-action-bar-gap);\r\n align-items: center;\r\n }\r\n\r\n .layout-vertical .secondary,\r\n .layout-vertical .primary {\r\n width: 100%;\r\n }\r\n\r\n /* Hide empty slots */\r\n .secondary:not(:has(*)),\r\n .primary:not(:has(*)) {\r\n display: none;\r\n }\r\n\r\n /* Fallback for browsers that don't support :has() */\r\n @supports not selector(:has(*)) {\r\n .secondary,\r\n .primary {\r\n display: flex;\r\n }\r\n }\r\n\r\n /* Gap variants */\r\n :host([gap=\"xs\"]) {\r\n --aeva-action-bar-gap: 0.25rem;\r\n }\r\n\r\n :host([gap=\"sm\"]) {\r\n --aeva-action-bar-gap: 0.5rem;\r\n }\r\n\r\n :host([gap=\"md\"]) {\r\n --aeva-action-bar-gap: 0.75rem;\r\n }\r\n\r\n :host([gap=\"lg\"]) {\r\n --aeva-action-bar-gap: 1rem;\r\n }\r\n\r\n :host([gap=\"xl\"]) {\r\n --aeva-action-bar-gap: 1.5rem;\r\n }\r\n\r\n /* Padding variants */\r\n :host([padding=\"none\"]) {\r\n --aeva-action-bar-padding: 0;\r\n }\r\n\r\n :host([padding=\"xs\"]) {\r\n --aeva-action-bar-padding: 0.5rem;\r\n }\r\n\r\n :host([padding=\"sm\"]) {\r\n --aeva-action-bar-padding: 0.75rem;\r\n }\r\n\r\n :host([padding=\"md\"]) {\r\n --aeva-action-bar-padding: 1rem;\r\n }\r\n\r\n :host([padding=\"lg\"]) {\r\n --aeva-action-bar-padding: 1.5rem;\r\n }\r\n\r\n :host([padding=\"xl\"]) {\r\n --aeva-action-bar-padding: 2rem;\r\n }\r\n\r\n /* Sticky positioning */\r\n :host([sticky]) .action-bar {\r\n position: sticky;\r\n bottom: 0;\r\n z-index: 100;\r\n }\r\n\r\n /* Glassmorphism effect */\r\n :host([glassmorphism]) .action-bar {\r\n background: var(--aeva-action-bar-sticky-bg);\r\n backdrop-filter: blur(var(--aeva-action-bar-sticky-blur));\r\n -webkit-backdrop-filter: blur(var(--aeva-action-bar-sticky-blur));\r\n border-top: var(--aeva-action-bar-glassmorphism-border);\r\n box-shadow: var(--aeva-action-bar-glassmorphism-shadow);\r\n }\r\n\r\n /* Responsive layout */\r\n @media (max-width: 640px) {\r\n :host([layout=\"responsive\"]) .action-bar {\r\n flex-direction: column;\r\n align-items: stretch;\r\n }\r\n\r\n :host([layout=\"responsive\"]) .secondary,\r\n :host([layout=\"responsive\"]) .primary {\r\n width: 100%;\r\n flex-direction: column;\r\n }\r\n\r\n :host([layout=\"responsive\"]) .secondary ::slotted(*),\r\n :host([layout=\"responsive\"]) .primary ::slotted(*) {\r\n width: 100%;\r\n }\r\n }\r\n\r\n /* Full width buttons in vertical layout */\r\n .layout-vertical .secondary ::slotted(*),\r\n .layout-vertical .primary ::slotted(*) {\r\n width: 100%;\r\n }\r\n\r\n /* Reverse order in vertical layout (primary on top) */\r\n .layout-vertical {\r\n flex-direction: column-reverse;\r\n }\r\n `;\r\n\r\n /**\r\n * Layout direction\r\n */\r\n @property({ type: String, reflect: true })\r\n layout: 'horizontal' | 'vertical' | 'responsive' = 'horizontal';\r\n\r\n /**\r\n * Alignment of action groups\r\n */\r\n @property({ type: String, reflect: true })\r\n align: 'start' | 'end' | 'center' | 'space-between' | 'space-around' = 'space-between';\r\n\r\n /**\r\n * Gap between buttons\r\n */\r\n @property({ type: String, reflect: true })\r\n gap: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\r\n\r\n /**\r\n * Padding around the action bar\r\n */\r\n @property({ type: String, reflect: true })\r\n padding: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\r\n\r\n /**\r\n * Whether the action bar should stick to the bottom\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n sticky = false;\r\n\r\n /**\r\n * Whether to apply glassmorphism effect\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n glassmorphism = false;\r\n\r\n render() {\r\n const classes = [\r\n 'action-bar',\r\n `layout-${this.layout}`,\r\n `align-${this.align}`,\r\n ].join(' ');\r\n\r\n return html`\r\n <div class=\"${classes}\" part=\"action-bar\">\r\n <div class=\"secondary\">\r\n <slot name=\"secondary\"></slot>\r\n </div>\r\n <div class=\"primary\">\r\n <slot name=\"primary\"><slot></slot></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-action-bar': AevaActionBar;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state, query } from 'lit/decorators.js';\r\n\r\n/**\r\n * A carousel component for displaying multiple items in a sliding view.\r\n * Supports navigation buttons, indicators, touch gestures, and auto-play.\r\n *\r\n * @slot - Default slot for carousel items\r\n *\r\n * @fires slide-change - Dispatched when the active slide changes\r\n *\r\n * @csspart container - The main carousel container\r\n * @csspart slides - The slides wrapper\r\n * @csspart slide - Individual slide element\r\n * @csspart nav-button - Navigation button\r\n * @csspart indicators - Indicators container\r\n * @csspart indicator - Individual indicator dot\r\n *\r\n * @cssprop --aeva-carousel-height - Height of the carousel (default: 400px)\r\n * @cssprop --aeva-carousel-nav-bg - Navigation button background (default: rgba(0, 0, 0, 0.5))\r\n * @cssprop --aeva-carousel-nav-color - Navigation button color (default: white)\r\n * @cssprop --aeva-carousel-indicator-color - Inactive indicator color (default: rgba(255, 255, 255, 0.5))\r\n * @cssprop --aeva-carousel-indicator-active-color - Active indicator color (default: white)\r\n * @cssprop --aeva-carousel-transition-duration - Slide transition duration (default: 300ms)\r\n */\r\n@customElement('aeva-carousel')\r\nexport class AevaCarousel extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n position: relative;\r\n width: 100%;\r\n height: var(--aeva-carousel-height);\r\n overflow: hidden;\r\n border-radius: 12px;\r\n }\r\n\r\n .carousel-container {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n\r\n .slides-wrapper {\r\n display: flex;\r\n height: 100%;\r\n transition: transform var(--aeva-carousel-transition-duration) ease-in-out;\r\n will-change: transform;\r\n }\r\n\r\n ::slotted(*) {\r\n flex-shrink: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n /* Navigation Buttons */\r\n .nav-button {\r\n position: absolute;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n width: 48px;\r\n height: 48px;\r\n background: var(--aeva-carousel-nav-bg);\r\n color: var(--aeva-carousel-nav-color);\r\n border: none;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: all 0.2s ease;\r\n z-index: 10;\r\n backdrop-filter: blur(10px);\r\n }\r\n\r\n .nav-button:hover {\r\n background: var(--aeva-carousel-nav-hover-bg);\r\n transform: translateY(-50%) scale(1.1);\r\n }\r\n\r\n .nav-button:active {\r\n transform: translateY(-50%) scale(0.95);\r\n }\r\n\r\n .nav-button:disabled {\r\n opacity: 0.3;\r\n cursor: not-allowed;\r\n }\r\n\r\n .nav-button:disabled:hover {\r\n transform: translateY(-50%) scale(1);\r\n }\r\n\r\n .nav-button.prev {\r\n left: 16px;\r\n }\r\n\r\n .nav-button.next {\r\n right: 16px;\r\n }\r\n\r\n .nav-button svg {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n /* Hide navigation when disabled */\r\n :host([hide-nav]) .nav-button {\r\n display: none;\r\n }\r\n\r\n /* Indicators */\r\n .indicators {\r\n position: absolute;\r\n bottom: 16px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n display: flex;\r\n gap: 8px;\r\n z-index: 10;\r\n }\r\n\r\n .indicator {\r\n width: 8px;\r\n height: 8px;\r\n border-radius: 50%;\r\n background: var(--aeva-carousel-indicator-color);\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n border: none;\r\n padding: 0;\r\n }\r\n\r\n .indicator:hover {\r\n background: var(--aeva-carousel-indicator-hover-bg);\r\n transform: scale(1.2);\r\n }\r\n\r\n .indicator.active {\r\n background: var(--aeva-carousel-indicator-active-color);\r\n width: 24px;\r\n border-radius: 4px;\r\n }\r\n\r\n /* Hide indicators when disabled */\r\n :host([hide-indicators]) .indicators {\r\n display: none;\r\n }\r\n `;\r\n\r\n /**\r\n * Current active slide index\r\n */\r\n @property({ type: Number })\r\n activeIndex = 0;\r\n\r\n /**\r\n * Whether to hide navigation buttons\r\n */\r\n @property({ type: Boolean, attribute: 'hide-nav', reflect: true })\r\n hideNav = false;\r\n\r\n /**\r\n * Whether to hide indicators\r\n */\r\n @property({ type: Boolean, attribute: 'hide-indicators', reflect: true })\r\n hideIndicators = false;\r\n\r\n /**\r\n * Whether to enable auto-play\r\n */\r\n @property({ type: Boolean, attribute: 'auto-play' })\r\n autoPlay = false;\r\n\r\n /**\r\n * Auto-play interval in milliseconds\r\n */\r\n @property({ type: Number, attribute: 'auto-play-interval' })\r\n autoPlayInterval = 3000;\r\n\r\n /**\r\n * Whether to loop the carousel\r\n */\r\n @property({ type: Boolean })\r\n loop = true;\r\n\r\n @state()\r\n private slideCount = 0;\r\n\r\n @state()\r\n private touchStartX = 0;\r\n\r\n @state()\r\n private touchEndX = 0;\r\n\r\n @query('.slides-wrapper')\r\n private slidesWrapper!: HTMLElement;\r\n\r\n @query('slot')\r\n private slotElement!: HTMLSlotElement;\r\n\r\n private autoPlayTimer?: number;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.addEventListener('touchstart', this.handleTouchStart);\r\n this.addEventListener('touchmove', this.handleTouchMove);\r\n this.addEventListener('touchend', this.handleTouchEnd);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n this.removeEventListener('touchstart', this.handleTouchStart);\r\n this.removeEventListener('touchmove', this.handleTouchMove);\r\n this.removeEventListener('touchend', this.handleTouchEnd);\r\n this.stopAutoPlay();\r\n }\r\n\r\n firstUpdated() {\r\n this.updateSlideCount();\r\n if (this.autoPlay) {\r\n this.startAutoPlay();\r\n }\r\n }\r\n\r\n updated(changedProperties: Map<string, unknown>) {\r\n if (changedProperties.has('activeIndex')) {\r\n this.updateTransform();\r\n this.dispatchSlideChangeEvent();\r\n }\r\n\r\n if (changedProperties.has('autoPlay')) {\r\n if (this.autoPlay) {\r\n this.startAutoPlay();\r\n } else {\r\n this.stopAutoPlay();\r\n }\r\n }\r\n }\r\n\r\n private handleSlotChange = () => {\r\n this.updateSlideCount();\r\n };\r\n\r\n private updateSlideCount() {\r\n const assignedElements = this.slotElement?.assignedElements() || [];\r\n this.slideCount = assignedElements.length;\r\n }\r\n\r\n private updateTransform() {\r\n if (this.slidesWrapper) {\r\n const translateX = -this.activeIndex * 100;\r\n this.slidesWrapper.style.transform = `translateX(${translateX}%)`;\r\n }\r\n }\r\n\r\n private goToSlide(index: number) {\r\n if (index < 0 || index >= this.slideCount) return;\r\n this.activeIndex = index;\r\n }\r\n\r\n private nextSlide = () => {\r\n if (this.activeIndex < this.slideCount - 1) {\r\n this.activeIndex++;\r\n } else if (this.loop) {\r\n this.activeIndex = 0;\r\n }\r\n };\r\n\r\n private prevSlide = () => {\r\n if (this.activeIndex > 0) {\r\n this.activeIndex--;\r\n } else if (this.loop) {\r\n this.activeIndex = this.slideCount - 1;\r\n }\r\n };\r\n\r\n private handleTouchStart = (e: TouchEvent) => {\r\n this.touchStartX = e.touches[0].clientX;\r\n };\r\n\r\n private handleTouchMove = (e: TouchEvent) => {\r\n this.touchEndX = e.touches[0].clientX;\r\n };\r\n\r\n private handleTouchEnd = () => {\r\n const swipeThreshold = 50;\r\n const diff = this.touchStartX - this.touchEndX;\r\n\r\n if (Math.abs(diff) > swipeThreshold) {\r\n if (diff > 0) {\r\n // Swipe left - next slide\r\n this.nextSlide();\r\n } else {\r\n // Swipe right - previous slide\r\n this.prevSlide();\r\n }\r\n }\r\n\r\n this.touchStartX = 0;\r\n this.touchEndX = 0;\r\n };\r\n\r\n private handleKeydown = (e: KeyboardEvent) => {\r\n if (e.key === 'ArrowLeft') {\r\n e.preventDefault();\r\n this.prevSlide();\r\n } else if (e.key === 'ArrowRight') {\r\n e.preventDefault();\r\n this.nextSlide();\r\n }\r\n };\r\n\r\n private startAutoPlay() {\r\n this.stopAutoPlay();\r\n this.autoPlayTimer = window.setInterval(() => {\r\n this.nextSlide();\r\n }, this.autoPlayInterval);\r\n }\r\n\r\n private stopAutoPlay() {\r\n if (this.autoPlayTimer) {\r\n clearInterval(this.autoPlayTimer);\r\n this.autoPlayTimer = undefined;\r\n }\r\n }\r\n\r\n private dispatchSlideChangeEvent() {\r\n this.dispatchEvent(\r\n new CustomEvent('slide-change', {\r\n detail: { activeIndex: this.activeIndex },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Navigate to a specific slide\r\n */\r\n public goTo(index: number) {\r\n this.goToSlide(index);\r\n }\r\n\r\n /**\r\n * Navigate to the next slide\r\n */\r\n public next() {\r\n this.nextSlide();\r\n }\r\n\r\n /**\r\n * Navigate to the previous slide\r\n */\r\n public prev() {\r\n this.prevSlide();\r\n }\r\n\r\n render() {\r\n const canGoPrev = this.loop || this.activeIndex > 0;\r\n const canGoNext = this.loop || this.activeIndex < this.slideCount - 1;\r\n\r\n return html`\r\n <div \r\n part=\"container\" \r\n class=\"carousel-container\"\r\n @keydown=${this.handleKeydown}\r\n tabindex=\"0\"\r\n role=\"region\"\r\n aria-label=\"Carousel\"\r\n >\r\n <div part=\"slides\" class=\"slides-wrapper\">\r\n <slot @slotchange=${this.handleSlotChange}></slot>\r\n </div>\r\n\r\n ${!this.hideNav\r\n ? html`\r\n <button\r\n part=\"nav-button\"\r\n class=\"nav-button prev\"\r\n @click=${this.prevSlide}\r\n ?disabled=${!canGoPrev}\r\n aria-label=\"Previous slide\"\r\n >\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n <button\r\n part=\"nav-button\"\r\n class=\"nav-button next\"\r\n @click=${this.nextSlide}\r\n ?disabled=${!canGoNext}\r\n aria-label=\"Next slide\"\r\n >\r\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n `\r\n : ''}\r\n\r\n ${!this.hideIndicators && this.slideCount > 1\r\n ? html`\r\n <div part=\"indicators\" class=\"indicators\">\r\n ${Array.from({ length: this.slideCount }, (_, i) => html`\r\n <button\r\n part=\"indicator\"\r\n class=\"indicator ${i === this.activeIndex ? 'active' : ''}\"\r\n @click=${() => this.goToSlide(i)}\r\n aria-label=\"Go to slide ${i + 1}\"\r\n ></button>\r\n `)}\r\n </div>\r\n `\r\n : ''}\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-carousel': AevaCarousel;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\n/**\r\n * A responsive sidebar component for navigation.\r\n * Adapts to different viewport sizes:\r\n * - Mobile (<768px): Hidden drawer\r\n * - Tablet (768px-1024px): Icon-only mode\r\n * - Desktop (>1024px): Full mode with icons and text\r\n *\r\n * @slot header - Sidebar header content (logo, title)\r\n * @slot - Default slot for navigation items (aeva-list)\r\n * @slot footer - Sidebar footer content (user profile, settings)\r\n *\r\n * @csspart sidebar - The main sidebar container\r\n * @csspart backdrop - The backdrop overlay (mobile only)\r\n *\r\n * @fires sidebar-toggle - Fired when sidebar opens/closes\r\n * @fires item-click - Fired when navigation item is clicked\r\n *\r\n * @cssprop --aeva-sidebar-bg - Background color\r\n * @cssprop --aeva-sidebar-width-sm - Small width (200px)\r\n * @cssprop --aeva-sidebar-width-md - Medium width (280px)\r\n * @cssprop --aeva-sidebar-width-lg - Large width (320px)\r\n * @cssprop --aeva-sidebar-icon-width - Icon-only width (72px)\r\n * @cssprop --aeva-sidebar-transition - Transition timing\r\n */\r\n@customElement('aeva-sidebar')\r\nexport class AevaSidebar extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n box-sizing: border-box;\r\n --aeva-sidebar-bg-default: var(--aeva-surface-bg, #ffffff);\r\n --aeva-sidebar-border-default: 1px solid var(--aeva-border-color, rgba(0, 0, 0, 0.1));\r\n --aeva-sidebar-width-sm-default: 200px;\r\n --aeva-sidebar-width-md-default: 280px;\r\n --aeva-sidebar-width-lg-default: 320px;\r\n --aeva-sidebar-icon-width-default: 72px;\r\n --aeva-sidebar-transition-default: 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n --aeva-sidebar-z-index-default: 1000;\r\n --aeva-sidebar-backdrop-bg-default: rgba(0, 0, 0, 0.5);\r\n --aeva-sidebar-shadow-default: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\r\n }\r\n\r\n :host([static]) {\r\n position: relative !important;\r\n z-index: 1 !important;\r\n height: 100% !important;\r\n }\r\n\r\n /* Mobile: Hidden drawer */\r\n @media (max-width: 767px) {\r\n :host(:not([static])) {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n z-index: -1;\r\n width: var(--aeva-sidebar-width-md, var(--aeva-sidebar-width-md-default));\r\n max-width: 85vw;\r\n transition: z-index 0s var(--aeva-sidebar-transition, var(--aeva-sidebar-transition-default));\r\n }\r\n\r\n :host([open]:not([static])) {\r\n z-index: var(--aeva-sidebar-z-index, var(--aeva-sidebar-z-index-default));\r\n transition: z-index 0s 0s;\r\n }\r\n\r\n .sidebar {\r\n transform: translateX(-100%);\r\n transition: transform var(--aeva-sidebar-transition, var(--aeva-sidebar-transition-default));\r\n box-shadow: var(--aeva-sidebar-shadow, var(--aeva-sidebar-shadow-default));\r\n }\r\n\r\n :host([open]:not([static])) .sidebar {\r\n transform: translateX(0);\r\n }\r\n\r\n :host([static]) .sidebar {\r\n transform: none !important;\r\n }\r\n\r\n .backdrop {\r\n position: fixed;\r\n inset: 0;\r\n background: var(--aeva-sidebar-backdrop-bg, var(--aeva-sidebar-backdrop-bg-default));\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity var(--aeva-sidebar-transition, var(--aeva-sidebar-transition-default));\r\n z-index: -1;\r\n }\r\n\r\n :host([open]:not([static])) .backdrop {\r\n opacity: 1;\r\n pointer-events: auto;\r\n }\r\n }\r\n\r\n /* Tablet: Icon-only mode */\r\n @media (min-width: 768px) and (max-width: 1023px) {\r\n :host(:not([static])) {\r\n position: relative;\r\n width: var(--aeva-sidebar-icon-width, var(--aeva-sidebar-icon-width-default));\r\n height: 100%;\r\n z-index: 1000 !important;\r\n }\r\n\r\n .backdrop {\r\n display: none;\r\n }\r\n\r\n /* Hide text in icon-only mode */\r\n :host(:not([static])) {\r\n --list-item-text-display: none;\r\n --list-item-justify: center;\r\n --list-item-padding: 0.75rem;\r\n }\r\n }\r\n\r\n /* Desktop: Full mode */\r\n @media (min-width: 1024px) {\r\n :host(:not([static])) {\r\n position: relative;\r\n height: 100%;\r\n z-index: 1000 !important;\r\n }\r\n\r\n :host([width=\"sm\"]:not([static])) {\r\n width: var(--aeva-sidebar-width-sm, var(--aeva-sidebar-width-sm-default));\r\n }\r\n\r\n :host([width=\"md\"]:not([static])) {\r\n width: var(--aeva-sidebar-width-md, var(--aeva-sidebar-width-md-default));\r\n }\r\n\r\n :host([width=\"lg\"]:not([static])) {\r\n width: var(--aeva-sidebar-width-lg, var(--aeva-sidebar-width-lg-default));\r\n }\r\n\r\n .backdrop {\r\n display: none;\r\n }\r\n }\r\n\r\n /* Static mode forcing widths */\r\n :host([static][width=\"sm\"]) { width: var(--aeva-sidebar-width-sm, var(--aeva-sidebar-width-sm-default)); }\r\n :host([static][width=\"md\"]) { width: var(--aeva-sidebar-width-md, var(--aeva-sidebar-width-md-default)); }\r\n :host([static][width=\"lg\"]) { width: var(--aeva-sidebar-width-lg, var(--aeva-sidebar-width-lg-default)); }\r\n :host([static]:not([width])) { width: var(--aeva-sidebar-width-md, var(--aeva-sidebar-width-md-default)); }\r\n\r\n /* Right position */\r\n :host([position=\"right\"]:not([static])) {\r\n left: auto;\r\n right: 0;\r\n }\r\n\r\n @media (max-width: 767px) {\r\n :host([position=\"right\"][open]:not([static])) .sidebar {\r\n transform: translateX(0);\r\n }\r\n }\r\n\r\n /* Sidebar container */\r\n .sidebar {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n background: var(--aeva-sidebar-bg, var(--aeva-sidebar-bg-default));\r\n border-right: var(--aeva-sidebar-border, var(--aeva-sidebar-border-default));\r\n overflow: hidden;\r\n box-sizing: border-box;\r\n border-top-right-radius: 24px;\r\n border-bottom-right-radius: 24px;\r\n }\r\n\r\n :host([position=\"right\"]) .sidebar {\r\n border-right: none;\r\n border-left: var(--aeva-sidebar-border);\r\n border-top-right-radius: 0;\r\n border-bottom-right-radius: 0;\r\n border-top-left-radius: 24px;\r\n border-bottom-left-radius: 24px;\r\n }\r\n\r\n /* Glassmorphism */\r\n :host([glassmorphism]) .sidebar {\r\n background: var(--aeva-sidebar-glassmorphism-bg);\r\n backdrop-filter: blur(10px);\r\n -webkit-backdrop-filter: blur(10px);\r\n border-color: var(--aeva-sidebar-glassmorphism-border);\r\n }\r\n\r\n /* Header */\r\n .header {\r\n flex-shrink: 0;\r\n }\r\n \r\n :host([has-header]) .header {\r\n padding: 1.5rem 1rem;\r\n border-bottom: var(--aeva-sidebar-border);\r\n }\r\n\r\n :host(:not([has-header])) .header {\r\n display: none;\r\n }\r\n\r\n /* Content */\r\n .content {\r\n flex: 1;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n }\r\n\r\n /* Footer */\r\n .footer {\r\n flex-shrink: 0;\r\n }\r\n\r\n :host([has-footer]) .footer {\r\n padding: 1rem;\r\n border-top: var(--aeva-sidebar-border);\r\n }\r\n\r\n :host(:not([has-footer])) .footer {\r\n display: none;\r\n }\r\n\r\n /* Tablet mode: reduce padding and hide header */\r\n @media (min-width: 768px) and (max-width: 1023px) {\r\n :host(:not([static])) .header {\r\n display: none;\r\n }\r\n\r\n :host(:not([static])) .footer {\r\n padding: 1rem 0.5rem;\r\n text-align: center;\r\n }\r\n\r\n .content {\r\n padding: 0;\r\n margin-top: 0.75rem;\r\n }\r\n }\r\n\r\n /* Scrollbar styling */\r\n .content::-webkit-scrollbar {\r\n width: var(--aeva-scrollbar-width);\r\n }\r\n\r\n .content::-webkit-scrollbar-track {\r\n background: var(--aeva-scrollbar-track);\r\n }\r\n\r\n .content::-webkit-scrollbar-thumb {\r\n background: var(--aeva-scrollbar-thumb);\r\n border-radius: 10px;\r\n }\r\n\r\n .content::-webkit-scrollbar-thumb:hover {\r\n background: var(--aeva-scrollbar-thumb-hover);\r\n }\r\n `;\r\n\r\n /**\r\n * Position of the sidebar\r\n */\r\n @property({ type: String, reflect: true })\r\n position: 'left' | 'right' = 'left';\r\n\r\n /**\r\n * Width variant (desktop only)\r\n */\r\n @property({ type: String, reflect: true })\r\n width: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n /**\r\n * Whether the sidebar is open (mobile only)\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n open = false;\r\n\r\n /**\r\n * Whether to apply glassmorphism effect\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n glassmorphism = false;\r\n\r\n /**\r\n * Whether to close sidebar on navigation (mobile only)\r\n */\r\n @property({ type: Boolean, attribute: 'close-on-navigate' })\r\n closeOnNavigate = true;\r\n\r\n /**\r\n * Whether the sidebar is in static mode (no fixed positioning, always visible)\r\n * Useful for documentation and embedding.\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n static = false;\r\n\r\n /**\r\n * Current viewport mode\r\n */\r\n @state()\r\n private viewport: 'mobile' | 'tablet' | 'desktop' = 'desktop';\r\n\r\n /**\r\n * Whether header slot has content\r\n */\r\n @state()\r\n private hasHeader = false;\r\n\r\n /**\r\n * Whether footer slot has content\r\n */\r\n @state()\r\n private hasFooter = false;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n if (!this.static) {\r\n this.updateViewport();\r\n }\r\n this.checkSlots();\r\n window.addEventListener('resize', this.handleResize);\r\n this.addEventListener('click', this.handleContentClick);\r\n }\r\n\r\n disconnectedCallback() {\r\n super.disconnectedCallback();\r\n window.removeEventListener('resize', this.handleResize);\r\n this.removeEventListener('click', this.handleContentClick);\r\n }\r\n\r\n private handleResize = () => {\r\n if (!this.static) {\r\n this.updateViewport();\r\n }\r\n };\r\n\r\n private updateViewport() {\r\n const width = window.innerWidth;\r\n const oldViewport = this.viewport;\r\n\r\n if (width < 768) {\r\n this.viewport = 'mobile';\r\n } else if (width < 1024) {\r\n this.viewport = 'tablet';\r\n } else {\r\n this.viewport = 'desktop';\r\n }\r\n\r\n // Close mobile drawer when switching to tablet/desktop\r\n if (oldViewport === 'mobile' && this.viewport !== 'mobile') {\r\n this.open = false;\r\n }\r\n\r\n // Apply icon-only mode to list items when viewport changes\r\n if (oldViewport !== this.viewport) {\r\n this.updateListItems();\r\n }\r\n }\r\n\r\n private updateListItems() {\r\n if (this.static) return;\r\n\r\n // Apply icon-only to all list items ONLY in tablet mode\r\n // Mobile drawer should show full items (icon + text)\r\n const listItems = this.querySelectorAll('aeva-list-item');\r\n listItems.forEach((item) => {\r\n if (this.viewport === 'tablet') {\r\n item.setAttribute('icon-only', '');\r\n } else {\r\n item.removeAttribute('icon-only');\r\n }\r\n });\r\n }\r\n\r\n updated(changedProperties: Map<string, any>) {\r\n super.updated(changedProperties);\r\n\r\n // Update list items when viewport changes\r\n if (changedProperties.has('viewport')) {\r\n this.updateListItems();\r\n }\r\n\r\n // Handle z-index management for mobile drawer\r\n if (changedProperties.has('open')) {\r\n this.handleZIndexTransition();\r\n }\r\n }\r\n\r\n firstUpdated() {\r\n // Ensure list items are updated on initial render\r\n this.updateListItems();\r\n this.checkSlots();\r\n }\r\n\r\n private checkSlots() {\r\n // Check header slot\r\n const headerSlot = this.shadowRoot?.querySelector('slot[name=\"header\"]') as HTMLSlotElement;\r\n if (headerSlot) {\r\n const headerNodes = headerSlot.assignedNodes({ flatten: true });\r\n this.hasHeader = headerNodes.some(node =>\r\n node.nodeType === Node.ELEMENT_NODE ||\r\n (node.nodeType === Node.TEXT_NODE && node.textContent?.trim())\r\n );\r\n }\r\n\r\n // Check footer slot\r\n const footerSlot = this.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement;\r\n if (footerSlot) {\r\n const footerNodes = footerSlot.assignedNodes({ flatten: true });\r\n this.hasFooter = footerNodes.some(node =>\r\n node.nodeType === Node.ELEMENT_NODE ||\r\n (node.nodeType === Node.TEXT_NODE && node.textContent?.trim())\r\n );\r\n }\r\n\r\n // Update attributes for CSS\r\n if (this.hasHeader) {\r\n this.setAttribute('has-header', '');\r\n } else {\r\n this.removeAttribute('has-header');\r\n }\r\n\r\n if (this.hasFooter) {\r\n this.setAttribute('has-footer', '');\r\n } else {\r\n this.removeAttribute('has-footer');\r\n }\r\n }\r\n\r\n private handleZIndexTransition() {\r\n // Only manage z-index in mobile viewport\r\n if (this.viewport !== 'mobile') return;\r\n\r\n if (this.open) {\r\n // When opening, immediately set z-index to bring sidebar to front\r\n this.style.zIndex = '1000';\r\n } else {\r\n // When closing, wait for animation to complete before hiding\r\n const transitionDuration = 300; // Match --aeva-sidebar-transition (0.3s)\r\n setTimeout(() => {\r\n if (!this.open) { // Double-check it's still closed\r\n this.style.zIndex = '-1';\r\n }\r\n }, transitionDuration);\r\n }\r\n }\r\n\r\n private handleBackdropClick = () => {\r\n if (this.viewport === 'mobile') {\r\n this.toggle();\r\n }\r\n };\r\n\r\n private handleContentClick = (e: Event) => {\r\n // Close on navigation item click (mobile only)\r\n if (this.viewport === 'mobile' && this.closeOnNavigate && this.open) {\r\n const target = e.target as HTMLElement;\r\n if (target.tagName === 'AEVA-LIST-ITEM') {\r\n this.toggle();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Toggle sidebar open/close\r\n */\r\n toggle() {\r\n this.open = !this.open;\r\n this.dispatchEvent(\r\n new CustomEvent('sidebar-toggle', {\r\n detail: { open: this.open },\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"backdrop\" part=\"backdrop\" @click=${this.handleBackdropClick}></div>\r\n <div class=\"sidebar\" part=\"sidebar\">\r\n <div class=\"header\">\r\n <slot name=\"header\"></slot>\r\n </div>\r\n <div class=\"content\">\r\n <slot></slot>\r\n </div>\r\n <div class=\"footer\">\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-sidebar': AevaSidebar;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A stack layout component for arranging children vertically or horizontally.\r\n * Uses flexbox for flexible spacing and alignment.\r\n *\r\n * @slot - Items to be stacked\r\n *\r\n * @csspart stack - The stack container element\r\n *\r\n * @cssprop --aeva-stack-gap-none - Gap for none spacing (default: 0)\r\n * @cssprop --aeva-stack-gap-xs - Gap for extra small spacing (default: 0.25rem)\r\n * @cssprop --aeva-stack-gap-sm - Gap for small spacing (default: 0.5rem)\r\n * @cssprop --aeva-stack-gap-md - Gap for medium spacing (default: 1rem)\r\n * @cssprop --aeva-stack-gap-lg - Gap for large spacing (default: 1.5rem)\r\n * @cssprop --aeva-stack-gap-xl - Gap for extra large spacing (default: 2rem)\r\n */\r\n@customElement('aeva-stack')\r\nexport class AevaStack extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .stack {\r\n display: flex;\r\n box-sizing: border-box;\r\n }\r\n\r\n /* Direction */\r\n .direction-vertical {\r\n flex-direction: column;\r\n }\r\n\r\n .direction-horizontal {\r\n flex-direction: row;\r\n }\r\n\r\n /* Spacing (gap) */\r\n .spacing-none {\r\n gap: var(--aeva-stack-gap-none);\r\n }\r\n\r\n .spacing-xs {\r\n gap: var(--aeva-stack-gap-xs);\r\n }\r\n\r\n .spacing-sm {\r\n gap: var(--aeva-stack-gap-sm);\r\n }\r\n\r\n .spacing-md {\r\n gap: var(--aeva-stack-gap-md);\r\n }\r\n\r\n .spacing-lg {\r\n gap: var(--aeva-stack-gap-lg);\r\n }\r\n\r\n .spacing-xl {\r\n gap: var(--aeva-stack-gap-xl);\r\n }\r\n\r\n /* Align items (cross-axis) */\r\n .align-start {\r\n align-items: flex-start;\r\n }\r\n\r\n .align-center {\r\n align-items: center;\r\n }\r\n\r\n .align-end {\r\n align-items: flex-end;\r\n }\r\n\r\n .align-stretch {\r\n align-items: stretch;\r\n }\r\n\r\n /* Justify content (main-axis) */\r\n .justify-start {\r\n justify-content: flex-start;\r\n }\r\n\r\n .justify-center {\r\n justify-content: center;\r\n }\r\n\r\n .justify-end {\r\n justify-content: flex-end;\r\n }\r\n\r\n .justify-space-between {\r\n justify-content: space-between;\r\n }\r\n\r\n .justify-space-around {\r\n justify-content: space-around;\r\n }\r\n\r\n .justify-space-evenly {\r\n justify-content: space-evenly;\r\n }\r\n\r\n /* Wrap */\r\n .wrap {\r\n flex-wrap: wrap;\r\n }\r\n `;\r\n\r\n /**\r\n * Stack direction\r\n */\r\n @property({ type: String, reflect: true })\r\n direction: 'vertical' | 'horizontal' = 'vertical';\r\n\r\n /**\r\n * Spacing between items\r\n */\r\n @property({ type: String, reflect: true })\r\n spacing: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\r\n\r\n /**\r\n * Alignment of items on cross-axis\r\n */\r\n @property({ type: String, reflect: true })\r\n align: 'start' | 'center' | 'end' | 'stretch' = 'stretch';\r\n\r\n /**\r\n * Justification of items on main-axis\r\n */\r\n @property({ type: String, reflect: true })\r\n justify: 'start' | 'center' | 'end' | 'space-between' | 'space-around' | 'space-evenly' = 'start';\r\n\r\n /**\r\n * Whether items should wrap\r\n */\r\n @property({ type: Boolean, reflect: true })\r\n wrap = false;\r\n\r\n render() {\r\n const classes = [\r\n 'stack',\r\n `direction-${this.direction}`,\r\n `spacing-${this.spacing}`,\r\n `align-${this.align}`,\r\n `justify-${this.justify}`,\r\n this.wrap ? 'wrap' : '',\r\n ].filter(Boolean).join(' ');\r\n\r\n return html`\r\n <div class=\"${classes}\" part=\"stack\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-stack': AevaStack;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A grid layout component for creating responsive multi-column layouts.\r\n * Uses CSS Grid with flexible column configurations.\r\n *\r\n * @slot - Grid items\r\n *\r\n * @csspart grid - The grid container element\r\n *\r\n * @cssprop --aeva-grid-gap-none - Gap for none spacing (default: 0)\r\n * @cssprop --aeva-grid-gap-xs - Gap for extra small spacing (default: 0.25rem)\r\n * @cssprop --aeva-grid-gap-sm - Gap for small spacing (default: 0.5rem)\r\n * @cssprop --aeva-grid-gap-md - Gap for medium spacing (default: 1rem)\r\n * @cssprop --aeva-grid-gap-lg - Gap for large spacing (default: 1.5rem)\r\n * @cssprop --aeva-grid-gap-xl - Gap for extra large spacing (default: 2rem)\r\n *\r\n * @cssprop --aeva-grid-auto-min-width - Minimum width for auto-fit/auto-fill columns (default: 250px)\r\n * @cssprop --aeva-grid-auto-max-width - Maximum width for auto-fit/auto-fill columns (default: 1fr)\r\n */\r\n@customElement('aeva-grid')\r\nexport class AevaGrid extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .grid {\r\n display: grid;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n /* Column configurations */\r\n .columns-1 {\r\n grid-template-columns: repeat(1, 1fr);\r\n }\r\n\r\n .columns-2 {\r\n grid-template-columns: repeat(2, 1fr);\r\n }\r\n\r\n .columns-3 {\r\n grid-template-columns: repeat(3, 1fr);\r\n }\r\n\r\n .columns-4 {\r\n grid-template-columns: repeat(4, 1fr);\r\n }\r\n\r\n .columns-6 {\r\n grid-template-columns: repeat(6, 1fr);\r\n }\r\n\r\n .columns-12 {\r\n grid-template-columns: repeat(12, 1fr);\r\n }\r\n\r\n .columns-auto-fit {\r\n grid-template-columns: repeat(\r\n auto-fit,\r\n minmax(var(--aeva-grid-auto-min-width), var(--aeva-grid-auto-max-width))\r\n );\r\n }\r\n\r\n .columns-auto-fill {\r\n grid-template-columns: repeat(\r\n auto-fill,\r\n minmax(var(--aeva-grid-auto-min-width), var(--aeva-grid-auto-max-width))\r\n );\r\n }\r\n\r\n /* Gap */\r\n .gap-none {\r\n gap: var(--aeva-grid-gap-none);\r\n }\r\n\r\n .gap-xs {\r\n gap: var(--aeva-grid-gap-xs);\r\n }\r\n\r\n .gap-sm {\r\n gap: var(--aeva-grid-gap-sm);\r\n }\r\n\r\n .gap-md {\r\n gap: var(--aeva-grid-gap-md);\r\n }\r\n\r\n .gap-lg {\r\n gap: var(--aeva-grid-gap-lg);\r\n }\r\n\r\n .gap-xl {\r\n gap: var(--aeva-grid-gap-xl);\r\n }\r\n\r\n /* Align items */\r\n .align-items-start {\r\n align-items: start;\r\n }\r\n\r\n .align-items-center {\r\n align-items: center;\r\n }\r\n\r\n .align-items-end {\r\n align-items: end;\r\n }\r\n\r\n .align-items-stretch {\r\n align-items: stretch;\r\n }\r\n\r\n /* Justify items */\r\n .justify-items-start {\r\n justify-items: start;\r\n }\r\n\r\n .justify-items-center {\r\n justify-items: center;\r\n }\r\n\r\n .justify-items-end {\r\n justify-items: end;\r\n }\r\n\r\n .justify-items-stretch {\r\n justify-items: stretch;\r\n }\r\n\r\n /* Responsive behavior */\r\n @media (max-width: 767px) {\r\n .columns-2,\r\n .columns-3,\r\n .columns-4,\r\n .columns-6,\r\n .columns-12 {\r\n grid-template-columns: 1fr;\r\n }\r\n }\r\n\r\n @media (min-width: 768px) and (max-width: 1023px) {\r\n .columns-3,\r\n .columns-4,\r\n .columns-6,\r\n .columns-12 {\r\n grid-template-columns: repeat(2, 1fr);\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Number of columns or auto-fit/auto-fill\r\n */\r\n @property({ type: String, reflect: true })\r\n columns: '1' | '2' | '3' | '4' | '6' | '12' | 'auto-fit' | 'auto-fill' = '3';\r\n\r\n /**\r\n * Gap between grid items\r\n */\r\n @property({ type: String, reflect: true })\r\n gap: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\r\n\r\n /**\r\n * Alignment of items on block axis\r\n */\r\n @property({ type: String, reflect: true, attribute: 'align-items' })\r\n alignItems: 'start' | 'center' | 'end' | 'stretch' = 'stretch';\r\n\r\n /**\r\n * Alignment of items on inline axis\r\n */\r\n @property({ type: String, reflect: true, attribute: 'justify-items' })\r\n justifyItems: 'start' | 'center' | 'end' | 'stretch' = 'stretch';\r\n\r\n render() {\r\n const classes = [\r\n 'grid',\r\n `columns-${this.columns}`,\r\n `gap-${this.gap}`,\r\n `align-items-${this.alignItems}`,\r\n `justify-items-${this.justifyItems}`,\r\n ].join(' ');\r\n\r\n return html`\r\n <div class=\"${classes}\" part=\"grid\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-grid': AevaGrid;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A grid item component for controlling grid placement and spanning.\r\n * Use inside aeva-grid to create bento-style layouts.\r\n *\r\n * @slot - Content of the grid item\r\n *\r\n * @csspart item - The grid item element\r\n *\r\n * @cssprop --aeva-grid-item-min-height - Minimum height for grid items (default: auto)\r\n */\r\n@customElement('aeva-grid-item')\r\nexport class AevaGridItem extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .item {\r\n width: 100%;\r\n height: 100%;\r\n min-height: var(--aeva-grid-item-min-height);\r\n box-sizing: border-box;\r\n }\r\n `;\r\n\r\n /**\r\n * Number of columns to span\r\n */\r\n @property({ type: Number, reflect: true, attribute: 'col-span' })\r\n colSpan = 1;\r\n\r\n /**\r\n * Number of rows to span\r\n */\r\n @property({ type: Number, reflect: true, attribute: 'row-span' })\r\n rowSpan = 1;\r\n\r\n /**\r\n * Column start position (1-indexed)\r\n */\r\n @property({ type: Number, reflect: true, attribute: 'col-start' })\r\n colStart?: number;\r\n\r\n /**\r\n * Row start position (1-indexed)\r\n */\r\n @property({ type: Number, reflect: true, attribute: 'row-start' })\r\n rowStart?: number;\r\n\r\n updated(changedProperties: Map<string, any>) {\r\n super.updated(changedProperties);\r\n\r\n // Apply grid placement styles to host element\r\n if (changedProperties.has('colSpan')) {\r\n this.style.gridColumn = this.colStart\r\n ? `${this.colStart} / span ${this.colSpan}`\r\n : `span ${this.colSpan}`;\r\n }\r\n\r\n if (changedProperties.has('rowSpan')) {\r\n this.style.gridRow = this.rowStart\r\n ? `${this.rowStart} / span ${this.rowSpan}`\r\n : `span ${this.rowSpan}`;\r\n }\r\n\r\n if (changedProperties.has('colStart') && this.colStart) {\r\n this.style.gridColumn = `${this.colStart} / span ${this.colSpan}`;\r\n }\r\n\r\n if (changedProperties.has('rowStart') && this.rowStart) {\r\n this.style.gridRow = `${this.rowStart} / span ${this.rowSpan}`;\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n // Set initial grid placement\r\n this.style.gridColumn = this.colStart\r\n ? `${this.colStart} / span ${this.colSpan}`\r\n : `span ${this.colSpan}`;\r\n this.style.gridRow = this.rowStart\r\n ? `${this.rowStart} / span ${this.rowSpan}`\r\n : `span ${this.rowSpan}`;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"item\" part=\"item\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-grid-item': AevaGridItem;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A bento grid component with preset asymmetric layouts.\r\n * Perfect for creating visually interesting dashboard-style layouts.\r\n *\r\n * @slot - Grid items (automatically positioned based on preset)\r\n *\r\n * @csspart grid - The grid container element\r\n *\r\n * @cssprop --aeva-bento-grid-gap - Gap between grid items (default: 1rem)\r\n * @cssprop --aeva-bento-grid-min-height - Minimum height for grid rows (default: 200px)\r\n */\r\n@customElement('aeva-bento-grid')\r\nexport class AevaBentoGrid extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .grid {\r\n display: grid;\r\n width: 100%;\r\n gap: var(--aeva-bento-grid-gap);\r\n box-sizing: border-box;\r\n }\r\n\r\n /* Preset: Feature (1 large + 3 small) */\r\n .preset-feature {\r\n grid-template-columns: repeat(4, 1fr);\r\n grid-auto-rows: minmax(var(--aeva-bento-grid-min-height), auto);\r\n }\r\n\r\n .preset-feature ::slotted(*:nth-child(1)) {\r\n grid-column: span 2;\r\n grid-row: span 2;\r\n }\r\n\r\n .preset-feature ::slotted(*:nth-child(2)),\r\n .preset-feature ::slotted(*:nth-child(3)),\r\n .preset-feature ::slotted(*:nth-child(4)) {\r\n grid-column: span 1;\r\n grid-row: span 1;\r\n }\r\n\r\n /* Preset: Masonry (Pinterest-style) */\r\n .preset-masonry {\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-auto-rows: minmax(150px, auto);\r\n }\r\n\r\n .preset-masonry ::slotted(*:nth-child(1)) {\r\n grid-row: span 2;\r\n }\r\n\r\n .preset-masonry ::slotted(*:nth-child(3)) {\r\n grid-row: span 2;\r\n }\r\n\r\n .preset-masonry ::slotted(*:nth-child(5)) {\r\n grid-column: span 2;\r\n }\r\n\r\n /* Preset: Dashboard (varied sizes) */\r\n .preset-dashboard {\r\n grid-template-columns: repeat(6, 1fr);\r\n grid-auto-rows: minmax(var(--aeva-bento-grid-min-height), auto);\r\n }\r\n\r\n .preset-dashboard ::slotted(*:nth-child(1)) {\r\n grid-column: span 4;\r\n grid-row: span 2;\r\n }\r\n\r\n .preset-dashboard ::slotted(*:nth-child(2)),\r\n .preset-dashboard ::slotted(*:nth-child(3)) {\r\n grid-column: span 2;\r\n grid-row: span 1;\r\n }\r\n\r\n .preset-dashboard ::slotted(*:nth-child(4)) {\r\n grid-column: span 3;\r\n }\r\n\r\n .preset-dashboard ::slotted(*:nth-child(5)) {\r\n grid-column: span 3;\r\n }\r\n\r\n /* Preset: Sidebar (2-column with large sidebar) */\r\n .preset-sidebar {\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-auto-rows: minmax(var(--aeva-bento-grid-min-height), auto);\r\n }\r\n\r\n .preset-sidebar ::slotted(*:nth-child(1)) {\r\n grid-column: span 2;\r\n grid-row: span 3;\r\n }\r\n\r\n .preset-sidebar ::slotted(*:nth-child(2)),\r\n .preset-sidebar ::slotted(*:nth-child(3)),\r\n .preset-sidebar ::slotted(*:nth-child(4)) {\r\n grid-column: span 1;\r\n grid-row: span 1;\r\n }\r\n\r\n /* Preset: Spotlight (1 hero + grid) */\r\n .preset-spotlight {\r\n grid-template-columns: repeat(4, 1fr);\r\n grid-auto-rows: minmax(var(--aeva-bento-grid-min-height), auto);\r\n }\r\n\r\n .preset-spotlight ::slotted(*:nth-child(1)) {\r\n grid-column: span 4;\r\n grid-row: span 2;\r\n }\r\n\r\n .preset-spotlight ::slotted(*:nth-child(2)),\r\n .preset-spotlight ::slotted(*:nth-child(3)),\r\n .preset-spotlight ::slotted(*:nth-child(4)),\r\n .preset-spotlight ::slotted(*:nth-child(5)) {\r\n grid-column: span 1;\r\n }\r\n\r\n /* Responsive behavior */\r\n @media (max-width: 767px) {\r\n .grid {\r\n grid-template-columns: 1fr !important;\r\n }\r\n\r\n .grid ::slotted(*) {\r\n grid-column: span 1 !important;\r\n grid-row: span 1 !important;\r\n }\r\n }\r\n\r\n @media (min-width: 768px) and (max-width: 1023px) {\r\n .preset-feature,\r\n .preset-dashboard,\r\n .preset-spotlight {\r\n grid-template-columns: repeat(2, 1fr) !important;\r\n }\r\n\r\n .preset-masonry,\r\n .preset-sidebar {\r\n grid-template-columns: repeat(2, 1fr) !important;\r\n }\r\n }\r\n `;\r\n\r\n /**\r\n * Preset bento layout pattern\r\n */\r\n @property({ type: String, reflect: true })\r\n preset: 'feature' | 'masonry' | 'dashboard' | 'sidebar' | 'spotlight' | 'custom' = 'feature';\r\n\r\n render() {\r\n const classes = [\r\n 'grid',\r\n this.preset !== 'custom' ? `preset-${this.preset}` : '',\r\n ].filter(Boolean).join(' ');\r\n\r\n return html`\r\n <div class=\"${classes}\" part=\"grid\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-bento-grid': AevaBentoGrid;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A masonry layout component that arranges child elements in a compact grid.\r\n * Uses CSS columns for true Pinterest-style masonry layout.\r\n *\r\n * @slot - Default slot for child elements (typically aeva-card components)\r\n *\r\n * @csspart container - The main masonry container\r\n *\r\n * @cssprop --masonry-gap - Gap between items (default: 16px)\r\n * @cssprop --masonry-column-count - Number of columns (default: auto)\r\n */\r\n@customElement('aeva-masonry')\r\nexport class AevaMasonry extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .masonry-container {\r\n column-gap: var(--aeva-masonry-gap);\r\n width: 100%;\r\n }\r\n\r\n /* Auto columns based on viewport */\r\n .masonry-container.auto-columns {\r\n column-count: 1;\r\n }\r\n\r\n /* Fixed column layouts */\r\n .masonry-container.columns-1 {\r\n column-count: 1;\r\n }\r\n\r\n .masonry-container.columns-2 {\r\n column-count: 2;\r\n }\r\n\r\n .masonry-container.columns-3 {\r\n column-count: 3;\r\n }\r\n\r\n .masonry-container.columns-4 {\r\n column-count: 4;\r\n }\r\n\r\n .masonry-container.columns-5 {\r\n column-count: 5;\r\n }\r\n\r\n /* Responsive breakpoints for auto mode */\r\n @media (min-width: 768px) {\r\n .masonry-container.auto-columns {\r\n column-count: 2;\r\n }\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n .masonry-container.auto-columns {\r\n column-count: 3;\r\n }\r\n }\r\n\r\n @media (min-width: 1440px) {\r\n .masonry-container.auto-columns {\r\n column-count: 4;\r\n }\r\n }\r\n\r\n /* Slotted items - prevent breaking across columns and ensure spacing */\r\n ::slotted(*) {\r\n break-inside: avoid;\r\n display: inline-block !important;\r\n width: 100%;\r\n height: auto !important;\r\n margin-bottom: var(--aeva-masonry-gap, 16px) !important;\r\n }\r\n `;\r\n\r\n /**\r\n * Number of columns ('auto' for responsive, or fixed number)\r\n */\r\n @property({ type: String, reflect: true })\r\n columns: 'auto' | '1' | '2' | '3' | '4' | '5' = 'auto';\r\n\r\n /**\r\n * Gap between items. Can be a number (px) or a token (xs, sm, md, lg, xl).\r\n */\r\n @property({ type: String, reflect: true })\r\n gap: string | number = 16;\r\n\r\n private getGapValue(): string {\r\n const gapMap: Record<string, string> = {\r\n 'xs': '4px',\r\n 'sm': '8px',\r\n 'md': '16px',\r\n 'lg': '24px',\r\n 'xl': '32px'\r\n };\r\n\r\n if (typeof this.gap === 'number') return `${this.gap}px`;\r\n if (gapMap[this.gap]) return gapMap[this.gap];\r\n if (!isNaN(Number(this.gap))) return `${this.gap}px`;\r\n return this.gap;\r\n }\r\n\r\n firstUpdated() {\r\n this.updateGap();\r\n }\r\n\r\n updated(changedProperties: Map<string, any>) {\r\n super.updated(changedProperties);\r\n\r\n if (changedProperties.has('gap')) {\r\n this.updateGap();\r\n }\r\n }\r\n\r\n private updateGap() {\r\n this.style.setProperty('--aeva-masonry-gap', this.getGapValue());\r\n }\r\n\r\n render() {\r\n const containerClass = `masonry-container ${this.columns === 'auto' ? 'auto-columns' : `columns-${this.columns}`\r\n }`;\r\n\r\n return html`\r\n <div class=\"${containerClass}\" part=\"container\" style=\"column-gap: var(--aeva-masonry-gap)\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-masonry': AevaMasonry;\r\n }\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n/**\r\n * A flexible section layout component with header, body, and footer areas.\r\n * Can be used anywhere to organize content into three distinct sections.\r\n *\r\n * @slot header - Header content area\r\n * @slot - Default slot for body content (main content area)\r\n * @slot body - Explicit body content area (alternative to default slot)\r\n * @slot footer - Footer content area\r\n *\r\n * @csspart section - The main section container\r\n * @csspart header - The header section\r\n * @csspart body - The body section\r\n * @csspart footer - The footer section\r\n *\r\n * @cssprop --aeva-section-gap - Gap between sections (default: 0)\r\n * @cssprop --aeva-section-padding - Padding for the entire section (default: 0)\r\n * @cssprop --aeva-section-header-padding - Padding for header (default: 0)\r\n * @cssprop --aeva-section-body-padding - Padding for body (default: 0)\r\n * @cssprop --aeva-section-footer-padding - Padding for footer (default: 0)\r\n */\r\n@customElement('aeva-section')\r\nexport class AevaSection extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n width: 100%;\r\n box-sizing: border-box;\r\n }\r\n\r\n .section {\r\n display: flex;\r\n flex-direction: column;\r\n padding: var(--aeva-section-padding);\r\n gap: var(--aeva-section-gap);\r\n box-sizing: border-box;\r\n height: 100%;\r\n }\r\n\r\n .header {\r\n padding: var(--aeva-section-header-padding);\r\n flex-shrink: 0;\r\n }\r\n\r\n .body {\r\n padding: var(--aeva-section-body-padding);\r\n flex: 1;\r\n overflow: auto;\r\n }\r\n\r\n .footer {\r\n padding: var(--aeva-section-footer-padding);\r\n flex-shrink: 0;\r\n margin-top: auto;\r\n }\r\n\r\n /* Hide empty slots */\r\n .header:not(:has(*)) {\r\n display: none;\r\n }\r\n\r\n .body:not(:has(*)) {\r\n display: none;\r\n }\r\n\r\n .footer:not(:has(*)) {\r\n display: none;\r\n }\r\n\r\n /* Fallback for browsers that don't support :has() */\r\n @supports not selector(:has(*)) {\r\n .header,\r\n .body,\r\n .footer {\r\n display: block;\r\n }\r\n }\r\n\r\n /* Gap variants */\r\n :host([gap=\"xs\"]) {\r\n --aeva-section-gap: 0.25rem;\r\n }\r\n\r\n :host([gap=\"sm\"]) {\r\n --aeva-section-gap: 0.5rem;\r\n }\r\n\r\n :host([gap=\"md\"]) {\r\n --aeva-section-gap: 1rem;\r\n }\r\n\r\n :host([gap=\"lg\"]) {\r\n --aeva-section-gap: 1.5rem;\r\n }\r\n\r\n :host([gap=\"xl\"]) {\r\n --aeva-section-gap: 2rem;\r\n }\r\n\r\n /* Padding variants */\r\n :host([padding=\"xs\"]) {\r\n --aeva-section-padding: 0.5rem;\r\n }\r\n\r\n :host([padding=\"sm\"]) {\r\n --aeva-section-padding: 1rem;\r\n }\r\n\r\n :host([padding=\"md\"]) {\r\n --aeva-section-padding: 1.5rem;\r\n }\r\n\r\n :host([padding=\"lg\"]) {\r\n --aeva-section-padding: 2rem;\r\n }\r\n\r\n :host([padding=\"xl\"]) {\r\n --aeva-section-padding: 3rem;\r\n }\r\n\r\n /* Full height variant */\r\n :host([full-height]) {\r\n height: 100%;\r\n }\r\n\r\n :host([full-height]) .section {\r\n height: 100%;\r\n }\r\n\r\n /* Sticky header */\r\n :host([sticky-header]) .header {\r\n position: sticky;\r\n top: 0;\r\n z-index: 10;\r\n background: inherit;\r\n }\r\n\r\n /* Sticky footer */\r\n :host([sticky-footer]) .footer {\r\n position: sticky;\r\n bottom: 0;\r\n z-index: 10;\r\n background: inherit;\r\n }\r\n `;\r\n\r\n /**\r\n * Gap between sections\r\n */\r\n @property({ type: String, reflect: true })\r\n gap: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'none';\r\n\r\n /**\r\n * Padding for the entire section\r\n */\r\n @property({ type: String, reflect: true })\r\n padding: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'none';\r\n\r\n /**\r\n * Whether the section should take full height\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'full-height' })\r\n fullHeight = false;\r\n\r\n /**\r\n * Whether the header should be sticky\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'sticky-header' })\r\n stickyHeader = false;\r\n\r\n /**\r\n * Whether the footer should be sticky\r\n */\r\n @property({ type: Boolean, reflect: true, attribute: 'sticky-footer' })\r\n stickyFooter = false;\r\n\r\n render() {\r\n return html`\r\n <div class=\"section\" part=\"section\">\r\n <div class=\"header\" part=\"header\">\r\n <slot name=\"header\"></slot>\r\n </div>\r\n <div class=\"body\" part=\"body\">\r\n <slot name=\"body\"><slot></slot></slot>\r\n </div>\r\n <div class=\"footer\" part=\"footer\">\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-section': AevaSection;\r\n }\r\n}\r\n","export const sharedTokens = {\r\n '--aeva-border-radius-md': '22px',\r\n '--aeva-border-radius-full': '9999px',\r\n '--aeva-space-xxs': '.25rem',\r\n '--aeva-space-xs': '.5rem',\r\n '--aeva-space-smd': '.75rem',\r\n '--aeva-space-sm': '1rem',\r\n '--aeva-space-md': '1.5rem',\r\n '--aeva-space-lg': '2rem',\r\n '--aeva-space-xl': '3rem',\r\n '--aeva-space-2xl': '4rem',\r\n '--aeva-font-size-2xs': '0.75rem', // 12px\r\n '--aeva-font-size-xs': '0.875rem', // 14px (kept for legacy support, use 2xs or sm for grid)\r\n '--aeva-font-size-sm': '1rem', // 16px\r\n '--aeva-font-size-md': '1.25rem', // 20px\r\n '--aeva-font-size-lg': '1.5rem', // 24px\r\n '--aeva-font-size-xl': '2rem', // 32px\r\n '--aeva-font-size-2xl': '2.5rem', // 40px\r\n '--aeva-font-size-3xl': '3.5rem', // 56px\r\n '--aeva-font-size-display': '4rem', // 64px\r\n\r\n // Transitions\r\n '--aeva-transition-fast': 'all 0.15s ease-in-out',\r\n '--aeva-transition-normal': 'all 0.2s ease-in-out',\r\n '--aeva-transition-slow': 'all 0.35s ease-in-out',\r\n\r\n // Durations (Plain values for JS calculations)\r\n '--aeva-duration-fast': '150ms',\r\n '--aeva-duration-normal': '200ms',\r\n '--aeva-duration-slow': '350ms',\r\n\r\n // Blur\r\n '--aeva-blur-md': '10px',\r\n '--aeva-blur-lg': '20px',\r\n\r\n // Z-Index\r\n '--aeva-z-sidebar': '1000',\r\n '--aeva-z-sticky': '1100',\r\n '--aeva-z-modal': '2000',\r\n '--aeva-z-toast': '3000',\r\n\r\n // Elevation & Shadows\r\n '--aeva-shadow-sm': '0 2px 8px rgba(0, 0, 0, 0.05)',\r\n '--aeva-shadow-md': '0 4px 12px rgba(0, 0, 0, 0.1)',\r\n\r\n // Borders\r\n '--aeva-border-thin': '1px',\r\n '--aeva-border-thick': '2px',\r\n};\r\n","export const colorTokens = {\r\n // Gray Scale (Neutral)\r\n '--aeva-color-gray-50': '#f9fafb',\r\n '--aeva-color-gray-100': '#f3f4f6',\r\n '--aeva-color-gray-200': '#e5e7eb',\r\n '--aeva-color-gray-300': '#d1d5db',\r\n '--aeva-color-gray-400': '#9ca3af',\r\n '--aeva-color-gray-500': '#6b7280',\r\n '--aeva-color-gray-600': '#4b5563',\r\n '--aeva-color-gray-700': '#374151',\r\n '--aeva-color-gray-800': '#1f2937',\r\n '--aeva-color-gray-900': '#111827',\r\n '--aeva-color-gray-950': '#030712',\r\n\r\n // Indigo (Primary) - Based on current Aeva Primary\r\n '--aeva-color-indigo-50': '#eef2ff',\r\n '--aeva-color-indigo-100': '#e0e7ff',\r\n '--aeva-color-indigo-200': '#c7d2fe',\r\n '--aeva-color-indigo-300': '#a5b4fc',\r\n '--aeva-color-indigo-400': '#818cf8', // Current Dark Theme Primary\r\n '--aeva-color-indigo-500': '#667eea', // Current Light Theme Primary\r\n '--aeva-color-indigo-600': '#5568d3', // Current Primary Hover\r\n '--aeva-color-indigo-700': '#4338ca',\r\n '--aeva-color-indigo-800': '#3730a3',\r\n '--aeva-color-indigo-900': '#312e81',\r\n '--aeva-color-indigo-950': '#1e1b4b',\r\n\r\n // Red (Danger)\r\n '--aeva-color-red-50': '#fef2f2',\r\n '--aeva-color-red-100': '#fee2e2',\r\n '--aeva-color-red-200': '#fecaca',\r\n '--aeva-color-red-300': '#fca5a5',\r\n '--aeva-color-red-400': '#f87171',\r\n '--aeva-color-red-500': '#ef4444',\r\n '--aeva-color-red-600': '#dc2626',\r\n '--aeva-color-red-700': '#b91c1c',\r\n '--aeva-color-red-800': '#991b1b',\r\n '--aeva-color-red-900': '#7f1d1d',\r\n '--aeva-color-red-950': '#450a0a',\r\n\r\n // Green (Success)\r\n '--aeva-color-green-50': '#f0fdf4',\r\n '--aeva-color-green-100': '#dcfce7',\r\n '--aeva-color-green-200': '#bbf7d0',\r\n '--aeva-color-green-300': '#86efac',\r\n '--aeva-color-green-400': '#4ade80',\r\n '--aeva-color-green-500': '#22c55e',\r\n '--aeva-color-green-600': '#16a34a',\r\n '--aeva-color-green-700': '#15803d',\r\n '--aeva-color-green-800': '#166534',\r\n '--aeva-color-green-900': '#14532d',\r\n\r\n // Yellow (Warning)\r\n '--aeva-color-yellow-50': '#fffbeb',\r\n '--aeva-color-yellow-100': '#fef3c7',\r\n '--aeva-color-yellow-200': '#fde68a',\r\n '--aeva-color-yellow-300': '#fcd34d',\r\n '--aeva-color-yellow-400': '#fbbf24',\r\n '--aeva-color-yellow-500': '#f59e0b',\r\n '--aeva-color-yellow-600': '#d97706',\r\n '--aeva-color-yellow-700': '#b45309',\r\n '--aeva-color-yellow-800': '#92400e',\r\n '--aeva-color-yellow-900': '#78350f',\r\n\r\n // Blue (Info)\r\n '--aeva-color-blue-50': '#eff6ff',\r\n '--aeva-color-blue-100': '#dbeafe',\r\n '--aeva-color-blue-200': '#bfdbfe',\r\n '--aeva-color-blue-300': '#93c5fd',\r\n '--aeva-color-blue-400': '#60a5fa',\r\n '--aeva-color-blue-500': '#3b82f6',\r\n '--aeva-color-blue-600': '#2563eb',\r\n '--aeva-color-blue-700': '#1d4ed8',\r\n '--aeva-color-blue-800': '#1e40af',\r\n '--aeva-color-blue-900': '#1e3a8a',\r\n\r\n // Black & White\r\n '--aeva-color-white': '#ffffff',\r\n '--aeva-color-black': '#000000',\r\n '--aeva-color-transparent': 'transparent',\r\n};\r\n","import { ThemeVariables } from '../types';\r\nimport { sharedTokens } from './token';\r\nimport { colorTokens } from './color';\r\n\r\nexport const lightTheme: ThemeVariables = {\r\n ...sharedTokens,\r\n ...colorTokens,\r\n // Global\r\n '--aeva-font-family': \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif\",\r\n '--aeva-page-bg': 'var(--aeva-color-white)',\r\n '--aeva-page-gradient': 'linear-gradient(135deg, var(--aeva-color-gray-50) 0%, var(--aeva-color-gray-200) 100%)',\r\n '--aeva-primary-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-primary-hover': 'var(--aeva-color-indigo-600)',\r\n '--aeva-secondary-color': 'var(--aeva-color-gray-600)',\r\n '--aeva-text-color': 'var(--aeva-color-gray-900)',\r\n '--aeva-text-muted': 'var(--aeva-color-gray-500)',\r\n '--aeva-card-bg': 'var(--aeva-color-white)',\r\n '--aeva-card-border-color': 'var(--aeva-color-gray-200)',\r\n '--aeva-card-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-card-border-hover-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-card-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-card-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-card-padding-sm': 'var(--aeva-space-sm)',\r\n '--aeva-card-padding-md': 'var(--aeva-space-md)',\r\n '--aeva-card-padding-lg': 'var(--aeva-space-lg)',\r\n\r\n // Button\r\n '--aeva-button-font-family': \"inherit\",\r\n '--aeva-button-border-radius': '50vh',\r\n '--aeva-button-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-button-gap': 'var(--aeva-space-xs)',\r\n '--aeva-button-focus-ring-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-button-focus-ring-width': '3px',\r\n '--aeva-button-focus-ring-offset': '2px',\r\n '--aeva-button-primary-bg': 'var(--aeva-color-indigo-500)',\r\n '--aeva-button-primary-color': 'var(--aeva-color-white)',\r\n '--aeva-button-primary-hover-bg': 'var(--aeva-color-indigo-600)',\r\n '--aeva-button-primary-active-bg': 'var(--aeva-color-indigo-700)',\r\n '--aeva-button-secondary-bg': 'var(--aeva-color-gray-600)',\r\n '--aeva-button-secondary-color': 'var(--aeva-color-white)',\r\n '--aeva-button-secondary-hover-bg': 'var(--aeva-color-gray-700)',\r\n '--aeva-button-secondary-active-bg': 'var(--aeva-color-gray-800)',\r\n '--aeva-button-outline-border-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-button-outline-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-button-outline-hover-bg': 'rgba(102, 126, 234, 0.1)',\r\n '--aeva-button-outline-active-bg': 'rgba(102, 126, 234, 0.2)',\r\n '--aeva-button-ghost-color': '#667eea',\r\n '--aeva-button-ghost-hover-bg': 'rgba(102, 126, 234, 0.1)',\r\n '--aeva-button-ghost-active-bg': 'rgba(102, 126, 234, 0.2)',\r\n '--aeva-button-danger-bg': 'var(--aeva-color-red-600)',\r\n '--aeva-button-danger-color': 'var(--aeva-color-white)',\r\n '--aeva-button-danger-hover-bg': 'var(--aeva-color-red-700)',\r\n '--aeva-button-danger-active-bg': 'var(--aeva-color-red-800)',\r\n '--aeva-button-disabled-opacity': '0.5',\r\n '--aeva-button-disabled-cursor': 'not-allowed',\r\n '--aeva-button-padding-sm': 'var(--aeva-space-xs) var(--aeva-space-lg)',\r\n '--aeva-button-font-size-sm': 'var(--aeva-font-size-sm)',\r\n '--aeva-button-padding-md': 'var(--aeva-space-smd) var(--aeva-space-xl)',\r\n '--aeva-button-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-button-padding-lg': 'var(--aeva-space-sm) var(--aeva-space-2xl)',\r\n '--aeva-button-font-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-button-icon-padding-sm': 'var(--aeva-space-xs)', // 8px\r\n '--aeva-button-icon-width-sm': '2.75rem', // 44px\r\n '--aeva-button-icon-padding-md': 'var(--aeva-space-smd)', // 12px\r\n '--aeva-button-icon-width-md': '3rem', // 48px\r\n '--aeva-button-icon-padding-lg': 'var(--aeva-space-sm)', // 16px\r\n '--aeva-button-icon-width-lg': '3.5rem', // 56px\r\n\r\n // Input\r\n '--aeva-input-font-family': \"inherit\",\r\n '--aeva-input-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-input-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-input-bg': 'var(--aeva-color-white)',\r\n '--aeva-input-border-color': 'var(--aeva-color-gray-300)',\r\n '--aeva-input-text-color': 'var(--aeva-color-gray-900)',\r\n '--aeva-input-placeholder-color': 'var(--aeva-color-gray-400)',\r\n '--aeva-input-error-border-color': 'var(--aeva-color-red-600)',\r\n '--aeva-input-focus-border-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-input-focus-ring-color': 'rgba(102, 126, 234, 0.3)',\r\n '--aeva-input-focus-ring-width': '3px',\r\n '--aeva-input-focus-ring-offset': '0px',\r\n '--aeva-input-hover-border-color': '#9ca3af',\r\n '--aeva-input-disabled-bg': 'var(--aeva-color-gray-100)',\r\n '--aeva-input-disabled-border-color': 'var(--aeva-color-gray-200)',\r\n '--aeva-input-disabled-text-color': 'var(--aeva-color-gray-400)',\r\n '--aeva-input-disabled-opacity': '0.6',\r\n '--aeva-input-flat-bg': 'transparent',\r\n '--aeva-input-flat-hover-bg': 'rgba(0, 0, 0, 0.05)',\r\n '--aeva-input-flat-focus-bg': 'rgba(0, 0, 0, 0.08)',\r\n '--aeva-input-padding-sm': 'var(--aeva-space-xs) var(--aeva-space-smd)',\r\n '--aeva-input-font-size-sm': 'var(--aeva-font-size-sm)',\r\n '--aeva-input-height-sm': '2.25rem', // 36px\r\n '--aeva-input-padding-md': 'var(--aeva-space-smd) var(--aeva-space-sm)',\r\n '--aeva-input-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-input-height-md': '2.75rem', // 44px\r\n '--aeva-input-padding-lg': 'var(--aeva-space-sm) var(--aeva-space-xl)',\r\n '--aeva-input-font-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-input-height-lg': '3.25rem', // 52px\r\n '--aeva-input-multiline-min-height': '100px',\r\n\r\n // Badge\r\n '--aeva-badge-font-family': \"inherit\",\r\n '--aeva-badge-border-radius': '16px',\r\n '--aeva-badge-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-badge-gap': '6px',\r\n '--aeva-badge-primary-bg': 'var(--aeva-color-indigo-100)',\r\n '--aeva-badge-primary-color': 'var(--aeva-color-indigo-700)',\r\n '--aeva-badge-primary-border': 'var(--aeva-color-indigo-200)',\r\n '--aeva-badge-secondary-bg': 'var(--aeva-color-gray-100)',\r\n '--aeva-badge-secondary-color': 'var(--aeva-color-gray-700)',\r\n '--aeva-badge-secondary-border': 'var(--aeva-color-gray-200)',\r\n '--aeva-badge-success-bg': 'var(--aeva-color-green-100)',\r\n '--aeva-badge-success-color': 'var(--aeva-color-green-700)',\r\n '--aeva-badge-success-border': 'var(--aeva-color-green-200)',\r\n '--aeva-badge-warning-bg': 'var(--aeva-color-yellow-100)',\r\n '--aeva-badge-warning-color': 'var(--aeva-color-yellow-700)',\r\n '--aeva-badge-warning-border': 'var(--aeva-color-yellow-200)',\r\n '--aeva-badge-danger-bg': 'var(--aeva-color-red-100)',\r\n '--aeva-badge-danger-color': 'var(--aeva-color-red-700)',\r\n '--aeva-badge-danger-border': 'var(--aeva-color-red-200)',\r\n '--aeva-badge-info-bg': 'var(--aeva-color-blue-100)',\r\n '--aeva-badge-info-color': 'var(--aeva-color-blue-700)',\r\n '--aeva-badge-info-border': 'var(--aeva-color-blue-200)',\r\n '--aeva-badge-padding-sm': 'var(--aeva-space-xxs) var(--aeva-space-xs)', // 4px 8px\r\n '--aeva-badge-font-size-sm': 'var(--aeva-font-size-2xs)',\r\n '--aeva-badge-padding-md': 'var(--aeva-space-xs) var(--aeva-space-smd)', // 8px 12px\r\n '--aeva-badge-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-badge-padding-lg': 'var(--aeva-space-smd) var(--aeva-space-sm)', // 12px 16px\r\n '--aeva-badge-font-size-lg': 'var(--aeva-font-size-sm)',\r\n '--aeva-badge-delete-size': '16px',\r\n '--aeva-badge-delete-hover-bg': 'rgba(0, 0, 0, 0.1)',\r\n\r\n // Modal\r\n '--aeva-modal-bg': 'rgba(255, 255, 255, 0.8)',\r\n '--aeva-modal-backdrop-bg': 'rgba(0, 0, 0, 0.4)',\r\n '--aeva-modal-border-color': 'rgba(255, 255, 255, 0.5)',\r\n '--aeva-modal-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-modal-shadow-color': 'var(--aeva-shadow-md)',\r\n '--aeva-modal-blur': 'var(--aeva-blur-lg)',\r\n '--aeva-modal-padding': 'var(--aeva-space-lg)',\r\n '--aeva-modal-max-width': '600px',\r\n '--aeva-modal-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-modal-shimmer-gradient': 'linear-gradient(90deg, rgba(255, 255, 255, 0.6) 0%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0.6) 100%)',\r\n\r\n // Progress\r\n '--aeva-progress-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-progress-bg': 'var(--aeva-color-gray-200)',\r\n '--aeva-progress-thickness': '0.5rem', // 8px\r\n '--aeva-progress-border-radius': '999px',\r\n '--aeva-progress-label-color': 'var(--aeva-color-gray-800)',\r\n '--aeva-progress-size-sm': '5rem', // 80px\r\n '--aeva-progress-size-md': '7.5rem', // 120px\r\n '--aeva-progress-size-lg': '10rem', // 160px\r\n '--aeva-progress-animation-duration': '1.5s',\r\n '--aeva-progress-label-font-size': '0.875rem', // 14px\r\n\r\n // Radio\r\n '--aeva-radio-unchecked-stroke': 'var(--aeva-color-gray-400)',\r\n '--aeva-radio-unchecked-bg': 'var(--aeva-color-white)',\r\n '--aeva-radio-checked-stroke': 'var(--aeva-color-indigo-500)',\r\n '--aeva-radio-checked-bg': 'var(--aeva-color-indigo-500)',\r\n '--aeva-radio-checkmark-color': 'var(--aeva-color-white)',\r\n '--aeva-radio-size': '20px',\r\n '--aeva-radio-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-radio-disabled-opacity': '0.5',\r\n\r\n // Checkbox\r\n '--aeva-checkbox-unchecked-stroke': 'var(--aeva-color-gray-400)',\r\n '--aeva-checkbox-unchecked-bg': 'var(--aeva-color-white)',\r\n '--aeva-checkbox-checked-stroke': 'var(--aeva-color-indigo-500)',\r\n '--aeva-checkbox-checked-bg': 'var(--aeva-color-indigo-500)',\r\n '--aeva-checkbox-checkmark-color': 'var(--aeva-color-white)',\r\n '--aeva-checkbox-size': '20px',\r\n '--aeva-checkbox-border-radius': '6px',\r\n '--aeva-checkbox-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-checkbox-disabled-opacity': '0.5',\r\n\r\n // Rating\r\n '--aeva-rating-color': '#fbbf24',\r\n '--aeva-rating-empty-color': 'var(--aeva-color-gray-200)',\r\n '--aeva-rating-hover-color': '#f59e0b',\r\n '--aeva-rating-label-color': '#6b7280',\r\n '--aeva-rating-size-sm': '16px',\r\n '--aeva-rating-size-md': '24px',\r\n '--aeva-rating-size-lg': '32px',\r\n\r\n // Tooltip\r\n '--aeva-tooltip-bg': 'rgba(0, 0, 0, 0.9)',\r\n '--aeva-tooltip-color': '#ffffff',\r\n '--aeva-tooltip-blur': 'var(--aeva-blur-md)',\r\n '--aeva-tooltip-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-tooltip-padding': '0.5rem 0.75rem',\r\n '--aeva-tooltip-font-size': 'var(--aeva-font-size-2xs)',\r\n '--aeva-tooltip-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.2)',\r\n\r\n // Icon\r\n '--aeva-icon-bg': 'var(--aeva-color-gray-50)',\r\n '--aeva-icon-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-icon-border-color': '#000000',\r\n '--aeva-icon-border-width': '2px',\r\n '--aeva-icon-size-sm': '2.5rem', // 40px\r\n '--aeva-icon-size-md': '3.5rem', // 56px\r\n '--aeva-icon-size-lg': '4.5rem', // 72px\r\n\r\n // List Item\r\n '--aeva-list-item-padding': 'var(--aeva-space-smd) var(--aeva-space-sm)',\r\n '--aeva-list-item-gap': 'var(--aeva-space-sm)',\r\n '--aeva-list-item-bg': 'transparent',\r\n '--aeva-list-item-color': '#1a1a1a',\r\n '--aeva-list-item-hover-bg': 'rgba(0, 0, 0, 0.04)',\r\n '--aeva-list-item-active-bg': 'rgba(102, 126, 234, 0.08)',\r\n '--aeva-list-item-border-radius': '0',\r\n '--aeva-list-item-transition': 'background-color var(--aeva-transition-normal)',\r\n\r\n // Page\r\n '--aeva-page-background': 'white',\r\n '--aeva-page-animation-duration': '350ms',\r\n '--aeva-page-backdrop-bg': 'rgba(0, 0, 0, 0.5)',\r\n '--aeva-page-z-index': '2000',\r\n\r\n // Popup Menu\r\n '--aeva-popup-bg': 'rgba(255, 255, 255, 0.7)',\r\n '--aeva-popup-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-popup-min-width': '200px',\r\n '--aeva-popup-max-width': '600px',\r\n '--aeva-popup-blur': 'var(--aeva-blur-md)',\r\n '--aeva-popup-border-color': 'rgba(255, 255, 255, 0.5)',\r\n '--aeva-popup-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-popup-shadow-color': 'rgba(0, 0, 0, 0.1)',\r\n\r\n // Ripple\r\n '--aeva-ripple-color': 'currentColor',\r\n '--aeva-ripple-duration': '600ms',\r\n '--aeva-ripple-opacity': '0.15',\r\n\r\n\r\n // Text\r\n '--aeva-text-font-family': \"inherit\",\r\n '--aeva-text-max-width': 'none',\r\n '--aeva-text-display-font-family': \"inherit\",\r\n '--aeva-text-display-weight': '800',\r\n '--aeva-text-display-line-height': '1.1',\r\n '--aeva-text-letter-spacing-display': '-0.02em',\r\n '--aeva-text-heading-font-family': \"inherit\",\r\n '--aeva-text-heading-weight': '700',\r\n '--aeva-text-heading-line-height': '1.2',\r\n '--aeva-text-letter-spacing-heading': '-0.01em',\r\n '--aeva-text-body-font-family': \"inherit\",\r\n '--aeva-text-body-weight': '400',\r\n '--aeva-text-body-line-height': '1.6',\r\n '--aeva-text-letter-spacing-body': 'normal',\r\n '--aeva-text-label-font-family': \"inherit\",\r\n '--aeva-text-label-weight': '500',\r\n '--aeva-text-label-line-height': '1.4',\r\n '--aeva-text-letter-spacing-label': '0.01em',\r\n '--aeva-text-size-xs': 'var(--aeva-font-size-2xs)',\r\n '--aeva-text-size-sm': 'var(--aeva-font-size-xs)',\r\n '--aeva-text-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-text-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-text-size-xl': 'var(--aeva-font-size-lg)',\r\n '--aeva-text-size-2xl': 'var(--aeva-font-size-xl)',\r\n '--aeva-text-size-3xl': 'var(--aeva-font-size-2xl)',\r\n '--aeva-text-muted-color': 'var(--aeva-color-gray-500)',\r\n '--aeva-text-inverse-color': 'var(--aeva-color-white)',\r\n '--aeva-text-error-color': 'var(--aeva-color-red-600)',\r\n '--aeva-text-link-color': 'var(--aeva-color-indigo-500)',\r\n '--aeva-text-link-hover-color': 'var(--aeva-color-indigo-600)',\r\n '--aeva-text-code-bg': 'rgba(0, 0, 0, 0.05)',\r\n '--aeva-code-border-radius': 'var(--aeva-border-radius-md)',\r\n\r\n // Action Bar\r\n '--aeva-action-bar-bg': 'transparent',\r\n '--aeva-action-bar-padding': 'var(--aeva-space-sm)',\r\n '--aeva-action-bar-gap': 'var(--aeva-space-xs)',\r\n '--aeva-action-bar-border-top': 'none',\r\n '--aeva-action-bar-border-bottom': 'none',\r\n '--aeva-action-bar-backdrop-filter': 'none',\r\n '--aeva-action-bar-drop-shadow': 'none',\r\n '--aeva-action-bar-sticky-bg': 'rgba(255, 255, 255, 0.95)',\r\n '--aeva-action-bar-sticky-blur': 'var(--aeva-blur-md)',\r\n '--aeva-action-bar-glassmorphism-border': 'var(--aeva-border-thin) solid rgba(0, 0, 0, 0.1)',\r\n '--aeva-action-bar-glassmorphism-shadow': '0 -2px 8px rgba(0, 0, 0, 0.05)',\r\n\r\n // Carousel\r\n '--aeva-carousel-height': '25rem', // 400px\r\n '--aeva-carousel-nav-bg': 'rgba(0, 0, 0, 0.5)',\r\n '--aeva-carousel-nav-color': 'white',\r\n '--aeva-carousel-nav-hover-bg': 'rgba(0, 0, 0, 0.7)',\r\n '--aeva-carousel-indicator-color': 'rgba(255, 255, 255, 0.5)',\r\n '--aeva-carousel-indicator-active-color': 'white',\r\n '--aeva-carousel-indicator-hover-bg': 'rgba(255, 255, 255, 0.7)',\r\n '--aeva-carousel-transition-duration': '300ms',\r\n\r\n // List\r\n '--aeva-list-padding': '0',\r\n '--aeva-list-gap': '0',\r\n '--aeva-list-border-radius': '23px',\r\n\r\n // Tab\r\n '--aeva-tab-bg': 'var(--aeva-color-gray-100)',\r\n '--aeva-tab-active-bg': 'var(--aeva-color-white)',\r\n '--aeva-tab-padding': 'var(--aeva-space-xxs)',\r\n '--aeva-tab-gap': 'var(--aeva-space-xxs)',\r\n '--aeva-tab-border-radius': 'var(--aeva-border-radius-full)',\r\n '--aeva-tab-transition-duration': 'var(--aeva-duration-normal)',\r\n '--aeva-tab-transition-timing': 'ease-in-out',\r\n\r\n // Tab Item\r\n '--aeva-tab-item-font-family': 'inherit',\r\n '--aeva-tab-item-font-size': 'var(--aeva-font-size-xs)',\r\n '--aeva-tab-item-padding': 'var(--aeva-space-xs) var(--aeva-space-md)',\r\n '--aeva-tab-item-border-radius': 'var(--aeva-border-radius-full)',\r\n '--aeva-tab-item-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-tab-item-color-active': 'var(--aeva-text-color)',\r\n '--aeva-tab-item-color-inactive': 'var(--aeva-text-muted-color)',\r\n '--aeva-tab-item-color-disabled': 'var(--aeva-color-gray-400)',\r\n '--aeva-tab-item-cursor': 'pointer',\r\n '--aeva-tab-item-disabled-opacity': '0.5',\r\n\r\n // Toast\r\n '--aeva-toast-bg': 'rgba(255, 255, 255, 0.9)',\r\n '--aeva-toast-border-radius': '12px',\r\n '--aeva-toast-padding': 'var(--aeva-space-sm) var(--aeva-space-md)',\r\n '--aeva-toast-min-width': '300px',\r\n '--aeva-toast-max-width': '500px',\r\n '--aeva-toast-blur': 'var(--aeva-blur-md)',\r\n '--aeva-toast-border-color': 'rgba(255, 255, 255, 0.5)',\r\n '--aeva-toast-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-toast-shadow-color': 'var(--aeva-shadow-sm)',\r\n '--aeva-toast-close-hover-bg': 'rgba(0, 0, 0, 0.1)',\r\n\r\n // Grid & Stack Gaps\r\n '--aeva-grid-gap-none': '0',\r\n '--aeva-grid-gap-xs': 'var(--aeva-space-xxs)',\r\n '--aeva-grid-gap-sm': 'var(--aeva-space-xs)',\r\n '--aeva-grid-gap-md': 'var(--aeva-space-sm)',\r\n '--aeva-grid-gap-lg': 'var(--aeva-space-md)',\r\n '--aeva-grid-gap-xl': 'var(--aeva-space-lg)',\r\n '--aeva-grid-auto-min-width': '250px',\r\n '--aeva-grid-auto-max-width': '1fr',\r\n\r\n '--aeva-stack-gap-none': '0',\r\n '--aeva-stack-gap-xs': 'var(--aeva-space-xxs)',\r\n '--aeva-stack-gap-sm': 'var(--aeva-space-xs)',\r\n '--aeva-stack-gap-md': 'var(--aeva-space-sm)',\r\n '--aeva-stack-gap-lg': 'var(--aeva-space-md)',\r\n '--aeva-stack-gap-xl': 'var(--aeva-space-lg)',\r\n\r\n // Bento Grid\r\n '--aeva-bento-grid-gap': 'var(--aeva-space-sm)',\r\n '--aeva-bento-grid-min-height': '200px',\r\n\r\n // Section\r\n '--aeva-section-gap': '0',\r\n '--aeva-section-padding': '0',\r\n '--aeva-section-header-padding': '0',\r\n '--aeva-section-body-padding': '0',\r\n '--aeva-section-footer-padding': '0',\r\n\r\n // Sidebar\r\n '--aeva-sidebar-bg': 'var(--aeva-color-white)',\r\n '--aeva-sidebar-width-sm': '12.5rem', // 200px\r\n '--aeva-sidebar-width-md': '17.5rem', // 280px\r\n '--aeva-sidebar-width-lg': '20rem', // 320px\r\n '--aeva-sidebar-icon-width': '4.5rem', // 72px\r\n '--aeva-sidebar-transition': 'var(--aeva-transition-slow)',\r\n '--aeva-sidebar-shadow': 'var(--aeva-shadow-md)',\r\n '--aeva-sidebar-backdrop-bg': 'rgba(0, 0, 0, 0.5)',\r\n '--aeva-sidebar-z-index': 'var(--aeva-z-sidebar)',\r\n '--aeva-sidebar-border': 'var(--aeva-border-thin) solid var(--aeva-color-gray-200)',\r\n '--aeva-sidebar-glassmorphism-bg': 'rgba(255, 255, 255, 0.95)',\r\n '--aeva-sidebar-glassmorphism-border': 'rgba(0, 0, 0, 0.1)',\r\n '--aeva-sidebar-scrollbar-thumb': 'var(--aeva-color-gray-300)',\r\n '--aeva-sidebar-scrollbar-thumb-hover': 'var(--aeva-color-gray-400)',\r\n\r\n // Global Scrollbar\r\n '--aeva-scrollbar-width': '8px',\r\n '--aeva-scrollbar-thumb': 'var(--aeva-color-gray-300)',\r\n '--aeva-scrollbar-thumb-hover': 'var(--aeva-color-gray-400)',\r\n '--aeva-scrollbar-track': 'transparent',\r\n\r\n // Container\r\n '--aeva-container-max-width-sm': '40rem', // 640px\r\n '--aeva-container-max-width-md': '48rem', // 768px\r\n '--aeva-container-max-width-lg': '64rem', // 1024px\r\n '--aeva-container-max-width-xl': '80rem', // 1280px\r\n '--aeva-container-max-width-full': '100%',\r\n '--aeva-container-padding-none': '0',\r\n '--aeva-container-padding-sm': 'var(--aeva-space-sm)',\r\n '--aeva-container-padding-md': 'var(--aeva-space-md)',\r\n '--aeva-container-padding-lg': 'var(--aeva-space-lg)',\r\n\r\n // Grid Item\r\n '--aeva-grid-item-min-height': 'auto',\r\n\r\n // Masonry\r\n '--aeva-masonry-gap': '16px',\r\n '--aeva-masonry-column-count': 'auto',\r\n\r\n // Table (Documentation)\r\n '--aeva-table-header-border': '2px solid var(--aeva-color-gray-200)',\r\n '--aeva-table-row-border': '1px solid var(--aeva-color-gray-100)',\r\n '--aeva-table-header-color': 'var(--aeva-color-gray-900)',\r\n '--aeva-table-text-color': 'var(--aeva-color-gray-700)',\r\n '--aeva-table-accent-color': 'var(--aeva-primary-color)',\r\n '--aeva-table-header-bg': 'var(--aeva-color-gray-50)',\r\n '--aeva-table-row-bg': 'transparent'\r\n};\r\n","import { ThemeVariables } from '../types';\r\nimport { sharedTokens } from './token';\r\nimport { colorTokens } from './color';\r\n\r\nexport const darkTheme: ThemeVariables = {\r\n ...sharedTokens,\r\n ...colorTokens,\r\n // Global\r\n '--aeva-font-family': \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif\",\r\n '--aeva-page-bg': 'var(--aeva-color-gray-900)',\r\n '--aeva-page-gradient': 'radial-gradient(circle, var(--aeva-color-gray-800) 0%, var(--aeva-color-black) 100%)',\r\n '--aeva-primary-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-primary-hover': 'var(--aeva-color-indigo-300)',\r\n '--aeva-secondary-color': 'var(--aeva-color-gray-400)',\r\n '--aeva-text-color': 'var(--aeva-color-gray-50)',\r\n '--aeva-text-muted': 'var(--aeva-color-gray-400)',\r\n '--aeva-card-bg': 'var(--aeva-color-gray-800)',\r\n '--aeva-card-border-color': 'var(--aeva-color-gray-700)',\r\n '--aeva-card-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-card-border-hover-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-card-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-card-padding-sm': 'var(--aeva-space-sm)',\r\n '--aeva-card-padding-md': 'var(--aeva-space-md)',\r\n '--aeva-card-padding-lg': 'var(--aeva-space-lg)',\r\n\r\n // Button\r\n '--aeva-button-font-family': \"inherit\",\r\n '--aeva-button-border-radius': '50vh',\r\n '--aeva-button-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-button-gap': 'var(--aeva-space-xs)',\r\n '--aeva-button-focus-ring-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-button-focus-ring-width': '3px',\r\n '--aeva-button-focus-ring-offset': '2px',\r\n '--aeva-button-primary-bg': 'var(--aeva-color-indigo-400)',\r\n '--aeva-button-primary-color': 'var(--aeva-color-gray-900)',\r\n '--aeva-button-primary-hover-bg': 'var(--aeva-color-indigo-300)',\r\n '--aeva-button-primary-active-bg': 'var(--aeva-color-indigo-200)',\r\n '--aeva-button-secondary-bg': 'var(--aeva-color-gray-700)',\r\n '--aeva-button-secondary-color': 'var(--aeva-color-white)',\r\n '--aeva-button-secondary-hover-bg': 'var(--aeva-color-gray-600)',\r\n '--aeva-button-secondary-active-bg': 'var(--aeva-color-gray-500)',\r\n '--aeva-button-outline-border-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-button-outline-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-button-outline-hover-bg': 'rgba(129, 140, 248, 0.1)',\r\n '--aeva-button-outline-active-bg': 'rgba(129, 140, 248, 0.2)',\r\n '--aeva-button-ghost-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-button-ghost-hover-bg': 'rgba(129, 140, 248, 0.1)',\r\n '--aeva-button-ghost-active-bg': 'rgba(129, 140, 248, 0.2)',\r\n '--aeva-button-danger-bg': 'var(--aeva-color-red-500)',\r\n '--aeva-button-danger-color': 'var(--aeva-color-white)',\r\n '--aeva-button-danger-hover-bg': 'var(--aeva-color-red-600)',\r\n '--aeva-button-danger-active-bg': 'var(--aeva-color-red-700)',\r\n '--aeva-button-disabled-opacity': '0.4',\r\n '--aeva-button-disabled-cursor': 'not-allowed',\r\n '--aeva-button-padding-sm': 'var(--aeva-space-xs) var(--aeva-space-lg)',\r\n '--aeva-button-font-size-sm': 'var(--aeva-font-size-sm)',\r\n '--aeva-button-padding-md': 'var(--aeva-space-smd) var(--aeva-space-xl)',\r\n '--aeva-button-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-button-padding-lg': 'var(--aeva-space-sm) var(--aeva-space-2xl)',\r\n '--aeva-button-font-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-button-icon-padding-sm': 'var(--aeva-space-xs)',\r\n '--aeva-button-icon-width-sm': '2.75rem',\r\n '--aeva-button-icon-padding-md': 'var(--aeva-space-smd)',\r\n '--aeva-button-icon-width-md': '3rem',\r\n '--aeva-button-icon-padding-lg': 'var(--aeva-space-sm)',\r\n '--aeva-button-icon-width-lg': '3.5rem',\r\n\r\n // Input\r\n '--aeva-input-font-family': \"inherit\",\r\n '--aeva-input-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-input-bg': 'var(--aeva-color-gray-800)',\r\n '--aeva-input-border-color': 'var(--aeva-color-gray-700)',\r\n '--aeva-input-text-color': '#f9fafb',\r\n '--aeva-input-placeholder-color': 'var(--aeva-color-gray-500)',\r\n '--aeva-input-error-border-color': 'var(--aeva-color-red-500)',\r\n '--aeva-input-focus-border-color': 'var(--aeva-color-blue-500)',\r\n '--aeva-input-focus-ring-color': 'rgba(59, 130, 246, 0.3)',\r\n '--aeva-input-focus-ring-width': '3px',\r\n '--aeva-input-focus-ring-offset': '0px',\r\n '--aeva-input-hover-border-color': 'var(--aeva-color-gray-500)',\r\n '--aeva-input-disabled-bg': 'var(--aeva-color-gray-950)',\r\n '--aeva-input-disabled-border-color': 'var(--aeva-color-gray-800)',\r\n '--aeva-input-disabled-text-color': 'var(--aeva-color-gray-500)',\r\n '--aeva-input-disabled-opacity': '0.5',\r\n '--aeva-input-flat-bg': 'transparent',\r\n '--aeva-input-flat-hover-bg': 'rgba(255, 255, 255, 0.05)',\r\n '--aeva-input-flat-focus-bg': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-input-padding-sm': 'var(--aeva-space-xs) var(--aeva-space-smd)',\r\n '--aeva-input-font-size-sm': 'var(--aeva-font-size-sm)',\r\n '--aeva-input-height-sm': '2.25rem',\r\n '--aeva-input-padding-md': 'var(--aeva-space-smd) var(--aeva-space-sm)',\r\n '--aeva-input-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-input-height-md': '2.75rem',\r\n '--aeva-input-padding-lg': 'var(--aeva-space-sm) var(--aeva-space-xl)',\r\n '--aeva-input-font-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-input-height-lg': '3.25rem',\r\n '--aeva-input-multiline-min-height': '100px',\r\n\r\n // Badge\r\n '--aeva-badge-font-family': \"inherit\",\r\n '--aeva-code-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-badge-border-radius': '16px',\r\n '--aeva-badge-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-badge-gap': '6px',\r\n '--aeva-badge-primary-bg': 'var(--aeva-color-indigo-950)',\r\n '--aeva-badge-primary-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-badge-primary-border': 'var(--aeva-color-indigo-900)',\r\n '--aeva-badge-secondary-bg': 'var(--aeva-color-gray-800)',\r\n '--aeva-badge-secondary-color': 'var(--aeva-color-gray-400)',\r\n '--aeva-badge-secondary-border': 'var(--aeva-color-gray-700)',\r\n '--aeva-badge-success-bg': 'var(--aeva-color-green-950)',\r\n '--aeva-badge-success-color': 'var(--aeva-color-green-400)',\r\n '--aeva-badge-success-border': 'var(--aeva-color-green-900)',\r\n '--aeva-badge-warning-bg': 'var(--aeva-color-yellow-950)',\r\n '--aeva-badge-warning-color': 'var(--aeva-color-yellow-400)',\r\n '--aeva-badge-warning-border': 'var(--aeva-color-yellow-900)',\r\n '--aeva-badge-danger-bg': 'var(--aeva-color-red-950)',\r\n '--aeva-badge-danger-color': 'var(--aeva-color-red-400)',\r\n '--aeva-badge-danger-border': 'var(--aeva-color-red-900)',\r\n '--aeva-badge-info-bg': 'var(--aeva-color-blue-950)',\r\n '--aeva-badge-info-color': 'var(--aeva-color-blue-400)',\r\n '--aeva-badge-info-border': 'var(--aeva-color-blue-900)',\r\n '--aeva-badge-padding-sm': 'var(--aeva-space-xxs) var(--aeva-space-xs)',\r\n '--aeva-badge-font-size-sm': 'var(--aeva-font-size-2xs)',\r\n '--aeva-badge-padding-md': 'var(--aeva-space-xs) var(--aeva-space-smd)',\r\n '--aeva-badge-font-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-badge-padding-lg': 'var(--aeva-space-smd) var(--aeva-space-sm)',\r\n '--aeva-badge-font-size-lg': 'var(--aeva-font-size-sm)',\r\n '--aeva-badge-delete-size': '16px',\r\n '--aeva-badge-delete-hover-bg': 'rgba(255, 255, 255, 0.1)',\r\n\r\n // Modal\r\n '--aeva-modal-bg': 'rgba(31, 41, 55, 0.8)',\r\n '--aeva-modal-backdrop-bg': 'rgba(0, 0, 0, 0.6)',\r\n '--aeva-modal-border-color': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-modal-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-modal-shadow-color': 'var(--aeva-shadow-md)',\r\n '--aeva-modal-blur': 'var(--aeva-blur-lg)',\r\n '--aeva-modal-padding': 'var(--aeva-space-lg)',\r\n '--aeva-modal-max-width': '600px',\r\n '--aeva-modal-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-modal-shimmer-gradient': 'linear-gradient(90deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.1) 100%)',\r\n\r\n // Progress\r\n '--aeva-progress-color': 'var(--aeva-color-blue-500)',\r\n '--aeva-progress-bg': 'var(--aeva-color-gray-700)',\r\n '--aeva-progress-thickness': '0.5rem',\r\n '--aeva-progress-border-radius': '999px',\r\n '--aeva-progress-label-color': 'var(--aeva-color-gray-100)',\r\n '--aeva-progress-size-sm': '5rem',\r\n '--aeva-progress-size-md': '7.5rem',\r\n '--aeva-progress-size-lg': '10rem',\r\n '--aeva-progress-animation-duration': '1.5s',\r\n '--aeva-progress-label-font-size': '0.875rem',\r\n\r\n // Radio\r\n '--aeva-radio-unchecked-stroke': 'var(--aeva-color-gray-600)',\r\n '--aeva-radio-unchecked-bg': 'transparent',\r\n '--aeva-radio-checked-stroke': 'var(--aeva-color-indigo-400)',\r\n '--aeva-radio-checked-bg': 'var(--aeva-color-indigo-400)',\r\n '--aeva-radio-checkmark-color': 'var(--aeva-color-white)',\r\n '--aeva-radio-size': '20px',\r\n '--aeva-radio-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-radio-disabled-opacity': '0.5',\r\n\r\n // Checkbox\r\n '--aeva-checkbox-unchecked-stroke': 'var(--aeva-color-gray-600)',\r\n '--aeva-checkbox-unchecked-bg': 'transparent',\r\n '--aeva-checkbox-checked-stroke': 'var(--aeva-color-indigo-400)',\r\n '--aeva-checkbox-checked-bg': 'var(--aeva-color-indigo-400)',\r\n '--aeva-checkbox-checkmark-color': 'var(--aeva-color-white)',\r\n '--aeva-checkbox-size': '20px',\r\n '--aeva-checkbox-border-radius': '6px',\r\n '--aeva-checkbox-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-checkbox-disabled-opacity': '0.5',\r\n\r\n // Rating\r\n '--aeva-rating-color': '#fbbf24',\r\n '--aeva-rating-empty-color': 'var(--aeva-color-gray-700)',\r\n '--aeva-rating-hover-color': '#f59e0b',\r\n '--aeva-rating-label-color': '#9ca3af',\r\n '--aeva-rating-size-sm': '16px',\r\n '--aeva-rating-size-md': '24px',\r\n '--aeva-rating-size-lg': '32px',\r\n\r\n // Tooltip\r\n '--aeva-tooltip-bg': 'rgba(0, 0, 0, 0.95)',\r\n '--aeva-tooltip-color': '#ffffff',\r\n '--aeva-tooltip-blur': 'var(--aeva-blur-md)',\r\n '--aeva-tooltip-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-tooltip-padding': '0.5rem 0.75rem',\r\n '--aeva-tooltip-font-size': 'var(--aeva-font-size-2xs)',\r\n '--aeva-tooltip-shadow': '0 4px 6px -1px rgba(0, 0, 0, 0.4)',\r\n\r\n // Icon\r\n '--aeva-icon-bg': 'var(--aeva-color-gray-700)',\r\n '--aeva-icon-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-icon-border-color': 'var(--aeva-color-white)',\r\n '--aeva-icon-border-width': '2px',\r\n '--aeva-icon-size-sm': '2.5rem',\r\n '--aeva-icon-size-md': '3.5rem',\r\n '--aeva-icon-size-lg': '4.5rem',\r\n\r\n // List Item\r\n '--aeva-list-item-padding': 'var(--aeva-space-smd) var(--aeva-space-sm)',\r\n '--aeva-list-item-gap': 'var(--aeva-space-sm)',\r\n '--aeva-list-item-bg': 'transparent',\r\n '--aeva-list-item-color': '#f9fafb',\r\n '--aeva-list-item-hover-bg': 'rgba(255, 255, 255, 0.08)',\r\n '--aeva-list-item-active-bg': 'rgba(102, 126, 234, 0.15)',\r\n '--aeva-list-item-border-radius': '0',\r\n '--aeva-list-item-transition': 'background-color var(--aeva-transition-normal)',\r\n\r\n // Page\r\n '--aeva-page-background': '#1a1a1a',\r\n '--aeva-page-animation-duration': '350ms',\r\n '--aeva-page-backdrop-bg': 'rgba(0, 0, 0, 0.7)',\r\n '--aeva-page-z-index': '2000',\r\n\r\n // Popup Menu\r\n '--aeva-popup-bg': 'rgba(31, 41, 55, 0.8)',\r\n '--aeva-popup-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-popup-min-width': '200px',\r\n '--aeva-popup-max-width': '600px',\r\n '--aeva-popup-blur': 'var(--aeva-blur-md)',\r\n '--aeva-popup-border-color': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-popup-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-popup-shadow-color': 'rgba(0, 0, 0, 0.4)',\r\n\r\n // Ripple\r\n '--aeva-ripple-color': 'currentColor',\r\n '--aeva-ripple-duration': '600ms',\r\n '--aeva-ripple-opacity': '0.2',\r\n\r\n\r\n // Text\r\n '--aeva-text-font-family': \"inherit\",\r\n '--aeva-text-max-width': 'none',\r\n '--aeva-text-display-font-family': \"inherit\",\r\n '--aeva-text-display-weight': '800',\r\n '--aeva-text-display-line-height': '1.1',\r\n '--aeva-text-letter-spacing-display': '-0.02em',\r\n '--aeva-text-heading-font-family': \"inherit\",\r\n '--aeva-text-heading-weight': '700',\r\n '--aeva-text-heading-line-height': '1.2',\r\n '--aeva-text-letter-spacing-heading': '-0.01em',\r\n '--aeva-text-body-font-family': \"inherit\",\r\n '--aeva-text-body-weight': '400',\r\n '--aeva-text-body-line-height': '1.6',\r\n '--aeva-text-letter-spacing-body': 'normal',\r\n '--aeva-text-label-font-family': \"inherit\",\r\n '--aeva-text-label-weight': '500',\r\n '--aeva-text-label-line-height': '1.4',\r\n '--aeva-text-letter-spacing-label': '0.01em',\r\n '--aeva-text-size-xs': 'var(--aeva-font-size-2xs)',\r\n '--aeva-text-size-sm': 'var(--aeva-font-size-xs)',\r\n '--aeva-text-size-md': 'var(--aeva-font-size-sm)',\r\n '--aeva-text-size-lg': 'var(--aeva-font-size-md)',\r\n '--aeva-text-size-xl': 'var(--aeva-font-size-lg)',\r\n '--aeva-text-size-2xl': 'var(--aeva-font-size-xl)',\r\n '--aeva-text-size-3xl': 'var(--aeva-font-size-2xl)',\r\n '--aeva-text-muted-color': 'var(--aeva-color-gray-400)',\r\n '--aeva-text-inverse-color': 'var(--aeva-color-gray-900)',\r\n '--aeva-text-error-color': 'var(--aeva-color-red-400)',\r\n '--aeva-text-link-color': 'var(--aeva-color-indigo-400)',\r\n '--aeva-text-link-hover-color': 'var(--aeva-color-indigo-300)',\r\n '--aeva-text-code-bg': 'rgba(255, 255, 255, 0.1)',\r\n\r\n // Action Bar\r\n '--aeva-action-bar-bg': 'transparent',\r\n '--aeva-action-bar-padding': 'var(--aeva-space-sm)',\r\n '--aeva-action-bar-gap': 'var(--aeva-space-xs)',\r\n '--aeva-action-bar-border-top': 'none',\r\n '--aeva-action-bar-border-bottom': 'none',\r\n '--aeva-action-bar-backdrop-filter': 'none',\r\n '--aeva-action-bar-drop-shadow': 'none',\r\n '--aeva-action-bar-sticky-bg': 'rgba(31, 41, 55, 0.95)',\r\n '--aeva-action-bar-sticky-blur': 'var(--aeva-blur-md)',\r\n '--aeva-action-bar-glassmorphism-border': 'var(--aeva-border-thin) solid rgba(255, 255, 255, 0.1)',\r\n '--aeva-action-bar-glassmorphism-shadow': '0 -2px 8px rgba(0, 0, 0, 0.3)',\r\n\r\n // Carousel\r\n '--aeva-carousel-height': '25rem',\r\n '--aeva-carousel-nav-bg': 'rgba(0, 0, 0, 0.6)',\r\n '--aeva-carousel-nav-color': 'white',\r\n '--aeva-carousel-nav-hover-bg': 'rgba(0, 0, 0, 0.8)',\r\n '--aeva-carousel-indicator-color': 'rgba(255, 255, 255, 0.3)',\r\n '--aeva-carousel-indicator-active-color': 'white',\r\n '--aeva-carousel-indicator-hover-bg': 'rgba(255, 255, 255, 0.9)',\r\n '--aeva-carousel-transition-duration': '300ms',\r\n\r\n // List\r\n '--aeva-list-padding': '0',\r\n '--aeva-list-gap': '0',\r\n '--aeva-input-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-list-border-radius': '23px',\r\n\r\n // Tab\r\n '--aeva-tab-bg': 'rgba(255, 255, 255, 0.05)',\r\n '--aeva-tab-active-bg': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-tab-padding': 'var(--aeva-space-xxs)',\r\n '--aeva-tab-gap': 'var(--aeva-space-xxs)',\r\n '--aeva-tab-border-radius': 'var(--aeva-border-radius-full)',\r\n '--aeva-tab-transition-duration': 'var(--aeva-duration-normal)',\r\n '--aeva-tab-transition-timing': 'ease-in-out',\r\n\r\n // Tab Item\r\n '--aeva-tab-item-font-family': 'inherit',\r\n '--aeva-tab-item-font-size': 'var(--aeva-font-size-xs)',\r\n '--aeva-tab-item-padding': 'var(--aeva-space-xs) var(--aeva-space-md)',\r\n '--aeva-tab-item-border-radius': 'var(--aeva-border-radius-full)',\r\n '--aeva-tab-item-transition': 'var(--aeva-transition-normal)',\r\n '--aeva-tab-item-color-active': 'var(--aeva-color-white)',\r\n '--aeva-tab-item-color-inactive': 'var(--aeva-color-gray-400)',\r\n '--aeva-tab-item-color-disabled': 'var(--aeva-color-gray-600)',\r\n '--aeva-tab-item-cursor': 'pointer',\r\n '--aeva-tab-item-disabled-opacity': '0.5',\r\n\r\n // Toast\r\n '--aeva-toast-bg': 'rgba(31, 41, 55, 0.9)',\r\n '--aeva-card-border-radius': 'var(--aeva-border-radius-md)',\r\n '--aeva-toast-border-radius': '12px',\r\n '--aeva-toast-padding': 'var(--aeva-space-sm) var(--aeva-space-md)',\r\n '--aeva-toast-min-width': '300px',\r\n '--aeva-toast-max-width': '500px',\r\n '--aeva-toast-blur': 'var(--aeva-blur-md)',\r\n '--aeva-toast-border-color': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-toast-border-width': 'var(--aeva-border-thin)',\r\n '--aeva-toast-shadow-color': 'var(--aeva-shadow-sm)',\r\n '--aeva-toast-close-hover-bg': 'rgba(255, 255, 255, 0.1)',\r\n\r\n // Grid & Stack Gaps\r\n '--aeva-grid-gap-none': '0',\r\n '--aeva-grid-gap-xs': 'var(--aeva-space-xxs)',\r\n '--aeva-grid-gap-sm': 'var(--aeva-space-xs)',\r\n '--aeva-grid-gap-md': 'var(--aeva-space-sm)',\r\n '--aeva-grid-gap-lg': 'var(--aeva-space-md)',\r\n '--aeva-grid-gap-xl': 'var(--aeva-space-lg)',\r\n '--aeva-grid-auto-min-width': '250px',\r\n '--aeva-grid-auto-max-width': '1fr',\r\n\r\n '--aeva-stack-gap-none': '0',\r\n '--aeva-stack-gap-xs': 'var(--aeva-space-xxs)',\r\n '--aeva-stack-gap-sm': 'var(--aeva-space-xs)',\r\n '--aeva-stack-gap-md': 'var(--aeva-space-sm)',\r\n '--aeva-stack-gap-lg': 'var(--aeva-space-md)',\r\n '--aeva-stack-gap-xl': 'var(--aeva-space-lg)',\r\n\r\n // Bento Grid\r\n '--aeva-bento-grid-gap': 'var(--aeva-space-sm)',\r\n '--aeva-bento-grid-min-height': '200px',\r\n\r\n // Section\r\n '--aeva-section-gap': '0',\r\n '--aeva-section-padding': '0',\r\n '--aeva-section-header-padding': '0',\r\n '--aeva-section-body-padding': '0',\r\n '--aeva-section-footer-padding': '0',\r\n\r\n // Sidebar\r\n '--aeva-sidebar-bg': 'var(--aeva-color-gray-800)',\r\n '--aeva-sidebar-width-sm': '12.5rem',\r\n '--aeva-sidebar-width-md': '17.5rem',\r\n '--aeva-sidebar-width-lg': '20rem',\r\n '--aeva-sidebar-icon-width': '4.5rem',\r\n '--aeva-sidebar-transition': 'var(--aeva-transition-slow)',\r\n '--aeva-sidebar-z-index': 'var(--aeva-z-sidebar)',\r\n '--aeva-sidebar-shadow': 'var(--aeva-shadow-md)',\r\n '--aeva-sidebar-backdrop-bg': 'rgba(0, 0, 0, 0.7)',\r\n '--aeva-sidebar-border': 'var(--aeva-border-thin) solid rgba(255, 255, 255, 0.1)',\r\n '--aeva-sidebar-glassmorphism-bg': 'rgba(31, 41, 55, 0.95)',\r\n '--aeva-sidebar-glassmorphism-border': 'rgba(255, 255, 255, 0.1)',\r\n '--aeva-sidebar-scrollbar-thumb': 'var(--aeva-color-gray-600)',\r\n '--aeva-sidebar-scrollbar-thumb-hover': 'var(--aeva-color-gray-500)',\r\n\r\n // Global Scrollbar\r\n '--aeva-scrollbar-width': '8px',\r\n '--aeva-scrollbar-thumb': 'var(--aeva-color-gray-600)',\r\n '--aeva-scrollbar-thumb-hover': 'var(--aeva-color-gray-500)',\r\n '--aeva-scrollbar-track': 'transparent',\r\n\r\n // Container\r\n '--aeva-container-max-width-sm': '40rem',\r\n '--aeva-container-max-width-md': '48rem',\r\n '--aeva-container-max-width-lg': '64rem',\r\n '--aeva-container-max-width-xl': '80rem',\r\n '--aeva-container-max-width-full': '100%',\r\n '--aeva-container-padding-none': '0',\r\n '--aeva-container-padding-sm': 'var(--aeva-space-sm)',\r\n '--aeva-container-padding-md': 'var(--aeva-space-md)',\r\n '--aeva-container-padding-lg': 'var(--aeva-space-lg)',\r\n\r\n // Grid Item\r\n '--aeva-grid-item-min-height': 'auto',\r\n\r\n // Masonry\r\n '--aeva-masonry-gap': '16px',\r\n '--aeva-masonry-column-count': 'auto',\r\n\r\n // Table (Documentation)\r\n '--aeva-table-header-border': '2px solid rgba(255, 255, 255, 0.1)',\r\n '--aeva-table-row-border': '1px solid rgba(255, 255, 255, 0.05)',\r\n '--aeva-table-header-color': 'var(--aeva-color-white)',\r\n '--aeva-table-text-color': 'var(--aeva-color-white)',\r\n '--aeva-table-accent-color': 'var(--aeva-primary-color)',\r\n '--aeva-table-header-bg': 'rgba(255, 255, 255, 0.05)',\r\n '--aeva-table-row-bg': 'transparent'\r\n};\r\n","import { css, html, LitElement } from \"lit\";\r\nimport { customElement, property } from \"lit/decorators.js\";\r\nimport { createContext, provide } from \"@lit-labs/context\";\r\n\r\nimport type { Theme, ThemeStyles, ThemeVariables } from \"./types.js\";\r\nimport { lightTheme } from \"./tokens/light.js\";\r\nimport { darkTheme } from \"./tokens/dark.js\";\r\n\r\nexport { Theme, ThemeStyles };\r\n\r\nexport const themeContext = createContext<Theme>('aeva-theme');\r\n\r\nexport const themeStyles: ThemeStyles = {\r\n light: lightTheme,\r\n dark: darkTheme\r\n};\r\n\r\n@customElement('aeva-theme')\r\nexport class AevaTheme extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: block;\r\n transition: background-color 0.3s, color 0.3s;\r\n }\r\n `;\r\n\r\n @provide({ context: themeContext })\r\n @property({ type: String })\r\n theme: Theme = 'light';\r\n\r\n /**\r\n * Optional custom styles to be applied when using a custom theme name.\r\n */\r\n @property({ type: Object })\r\n customStyles: ThemeVariables | null = null;\r\n\r\n updated(changedProperties: Map<string, any>) {\r\n console.log('AMRIXXX', changedProperties);\r\n if (changedProperties.has('theme') || changedProperties.has('customStyles')) {\r\n this.applyThemeToHost();\r\n }\r\n }\r\n\r\n toggleTheme() {\r\n this.theme = this.theme === 'light' ? 'dark' : 'light';\r\n // applyThemeToHost is called in updated()\r\n }\r\n\r\n applyThemeToHost() {\r\n let styles = themeStyles[this.theme];\r\n\r\n // If theme is not found in predefined styles, check customStyles\r\n if (!styles && this.customStyles) {\r\n styles = this.customStyles;\r\n }\r\n\r\n if (styles) {\r\n Object.entries(styles).forEach(([key, value]) => {\r\n console.log(key, value);\r\n this.style.setProperty(key, value);\r\n });\r\n } else {\r\n console.warn(`[aeva-theme] Theme \"${this.theme}\" not found and no customStyles provided.`);\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.applyThemeToHost();\r\n }\r\n\r\n render() {\r\n return html`<slot></slot>`;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'aeva-theme': AevaTheme;\r\n }\r\n}","// Main entry point for @aeva/ui library\r\n// Export all components here\r\n\r\n// Atoms\r\nexport { AevaButton } from './components/atoms/aeva-button.js';\r\nexport { AevaText } from './components/atoms/aeva-text.js';\r\nexport { AevaInput } from './components/atoms/aeva-input.js';\r\nexport { AevaModal } from './components/atoms/aeva-modal.js';\r\nexport { AevaPage } from './components/atoms/aeva-page.js';\r\nexport { AevaIcon } from './components/atoms/aeva-icon.js';\r\nexport { AevaRadio } from './components/atoms/aeva-radio.js';\r\nexport { AevaCheckbox } from './components/atoms/aeva-checkbox.js';\r\nexport { AevaTabItem } from './components/atoms/aeva-tab-item.js';\r\nexport { AevaCard } from './components/atoms/aeva-card.js';\r\nexport { AevaProgress } from './components/atoms/aeva-progress.js';\r\nexport { AevaBadge } from './components/atoms/aeva-badge.js';\r\nexport { AevaRipple } from './components/atoms/aeva-ripple.js';\r\nexport { AevaListItem } from './components/atoms/aeva-list-item.js';\r\nexport { AevaPopupMenu } from './components/atoms/aeva-popup-menu.js';\r\nexport { AevaTooltip } from './components/atoms/aeva-tooltip.js';\r\nexport { AevaRating } from './components/atoms/aeva-rating.js';\r\nexport { AevaCode } from './components/atoms/aeva-code.js';\r\n\r\n// Utils\r\nexport { RadioGroupHelper } from './utils/radio-group-helper.js';\r\nexport { CheckboxGroupHelper } from './utils/checkbox-group-helper.js';\r\n\r\n// Molecules\r\nexport { AevaTab } from './components/molecules/aeva-tab.js';\r\nexport { AevaList } from './components/molecules/aeva-list.js';\r\nexport { AevaToast } from './components/molecules/aeva-toast.js';\r\nexport { AevaActionBar } from './components/molecules/aeva-action-bar.js';\r\nexport { AevaCarousel } from './components/molecules/aeva-carousel.js';\r\n\r\n\r\n// Organisms\r\nexport { AevaSidebar } from './components/organisms/aeva-sidebar.js';\r\n\r\n// Templates\r\nexport { AevaStack } from './components/templates/layout/aeva-stack.js';\r\nexport { AevaGrid } from './components/templates/layout/aeva-grid.js';\r\nexport { AevaGridItem } from './components/templates/layout/aeva-grid-item.js';\r\nexport { AevaBentoGrid } from './components/templates/layout/aeva-bento-grid.js';\r\nexport { AevaMasonry } from './components/templates/layout/aeva-masonry.js';\r\nexport { AevaSection } from './components/templates/layout/aeva-section.js';\r\n\r\n// Theme\r\nexport { AevaTheme } from './theme/aeva-theme.js';\r\n\r\n\r\n\r\nconsole.log('@aeva/ui library loaded');\r\n"],"names":["AevaButton","LitElement","slots","filledSlots","slot","node","classes","html","classMap","css","__decorateClass","property","customElement","AevaText","AevaInput","message","code","value","numValue","target","newValue","regexPattern","isValid","inputType","state","AevaModal","changedProperties","AevaPage","AevaIcon","AevaRadio","radio","strokeColor","fillColor","AevaCheckbox","AevaTabItem","AevaCard","AevaProgress","circumference","offset","barClasses","barStyle","radius","containerClasses","svgClasses","progressClasses","progressStyle","ariaValueNow","ariaValueMin","ariaValueMax","AevaBadge","badge","AevaRipple","rect","x","y","size","ripple","AevaListItem","svg","itemClasses","AevaPopupMenu","anchor","viewportWidth","viewportHeight","top","left","transformOrigin","AevaTooltip","triggerRect","tooltipRect","gap","position","AevaRating","index","starValue","currentValue","starType","starPath","stars","_","i","AevaCode","textToCopy","RadioGroupHelper","groupName","radios","checked","r","found","CheckboxGroupHelper","checkboxes","values","checkbox","cb","AevaTab","enabledTabs","item","currentIndex","newIndex","targetTab","actualIndex","assignedElements","el","label","previousIndex","animate","activeItem","containerRect","itemRect","width","height","tabItem","targetScrollLeft","backgroundClasses","query","AevaList","targetIndex","focusIndex","activeEl","AevaToast","AevaActionBar","AevaCarousel","diff","translateX","canGoPrev","canGoNext","AevaSidebar","oldViewport","headerSlot","headerNodes","footerSlot","footerNodes","AevaStack","AevaGrid","AevaGridItem","AevaBentoGrid","AevaMasonry","gapMap","containerClass","AevaSection","sharedTokens","colorTokens","lightTheme","darkTheme","themeContext","createContext","themeStyles","AevaTheme","styles","key","provide"],"mappings":"opBAkEaA,EAAAA,WAAN,cAAyBC,EAAAA,UAAW,CAApC,aAAA,CAAA,MAAA,GAAA,SAAA,EA8PL,KAAA,QACE,UAMF,KAAA,KAA2B,KAM3B,KAAA,SAAW,GAMX,KAAA,QAAU,GAMV,KAAA,UAAY,GAMZ,KAAA,KAAsC,SAMtC,KAAA,SAAW,GAMX,KAAA,UAA2B,IAAA,CAE3B,mBAAoB,CAClB,MAAM,kBAAA,EAGN,KAAK,eAAe,KAAK,IAAM,CAC7B,MAAMC,EAAQ,KAAK,YAAY,iBAAiB,MAAM,EAChDC,EAAwB,CAAA,EAE9BD,GAAO,QAASE,GAAS,CACDA,EAAK,cAAc,CAAE,QAAS,GAAM,EACzB,KAC9BC,GAASA,EAAK,WAAa,KAAK,cAAgBA,EAAK,aAAa,KAAA,CAAK,GAIxEF,EAAY,KAAKC,EAAK,MAAQ,SAAS,CAE3C,CAAC,EAGGD,EAAY,SAAS,WAAW,GAAKA,EAAY,OAAS,GAC5D,QAAQ,KACN,yJAEA,CAAE,YAAAA,CAAA,CAAY,CAGpB,CAAC,CACH,CAEA,QAAS,CACP,MAAMG,EAAU,CACd,CAAC,WAAW,KAAK,OAAO,EAAE,EAAG,GAC7B,CAAC,QAAQ,KAAK,IAAI,EAAE,EAAG,GACvB,QAAS,KAAK,QACd,YAAa,KAAK,QAAA,EAGpB,OAAOC,EAAAA;AAAAA;AAAAA;AAAAA,gBAGK,KAAK,IAAI;AAAA,iBACRC,EAAAA,SAASF,CAAO,CAAC;AAAA,qBACb,KAAK,UAAY,KAAK,OAAO;AAAA,sBAC5B,KAAK,WAAa,EAAE;AAAA,qBACrB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQ/B,CACF,EAjWaN,EAAAA,WACJ,OAASS,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;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AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;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AA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,IAkNhBC,EAAA,CADCC,EAAAA,SA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"}