@pegasusheavy/ngx-tailwindcss 0.1.1 → 0.1.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pegasusheavy-ngx-tailwindcss.mjs","sources":["../../../projects/ngx-tailwindcss/src/lib/core/tw-config.ts","../../../projects/ngx-tailwindcss/src/lib/core/provide-tw-config.ts","../../../projects/ngx-tailwindcss/src/lib/core/theme.ts","../../../projects/ngx-tailwindcss/src/lib/core/theme.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/provide-tw-theme.ts","../../../projects/ngx-tailwindcss/src/lib/core/tw-class.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/aria.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/i18n.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/index.ts","../../../projects/ngx-tailwindcss/src/lib/directives/ripple.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/tooltip.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/click-outside.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/focus-trap.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/class-merge.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/auto-focus.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/in-view.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/long-press.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/debounce-click.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/copy-clipboard.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/keyboard-shortcut.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/swipe.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/resize-observer.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/lazy-image.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/scroll-anchor.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/hover-class.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/trap-scroll.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/aria.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/index.ts","../../../projects/ngx-tailwindcss/src/lib/button/button.component.ts","../../../projects/ngx-tailwindcss/src/lib/button/button.component.html","../../../projects/ngx-tailwindcss/src/lib/button/button-link.component.html","../../../projects/ngx-tailwindcss/src/lib/button/index.ts","../../../projects/ngx-tailwindcss/src/lib/input/input.component.ts","../../../projects/ngx-tailwindcss/src/lib/input/input.component.html","../../../projects/ngx-tailwindcss/src/lib/input/textarea.component.html","../../../projects/ngx-tailwindcss/src/lib/input/index.ts","../../../projects/ngx-tailwindcss/src/lib/checkbox/checkbox.component.ts","../../../projects/ngx-tailwindcss/src/lib/checkbox/checkbox.component.html","../../../projects/ngx-tailwindcss/src/lib/radio/radio.component.ts","../../../projects/ngx-tailwindcss/src/lib/radio/radio-button.component.html","../../../projects/ngx-tailwindcss/src/lib/radio/radio-group.component.html","../../../projects/ngx-tailwindcss/src/lib/switch/switch.component.ts","../../../projects/ngx-tailwindcss/src/lib/switch/switch.component.html","../../../projects/ngx-tailwindcss/src/lib/select/select.component.ts","../../../projects/ngx-tailwindcss/src/lib/select/select.component.html","../../../projects/ngx-tailwindcss/src/lib/multiselect/multiselect.component.ts","../../../projects/ngx-tailwindcss/src/lib/multiselect/multiselect.component.html","../../../projects/ngx-tailwindcss/src/lib/slider/slider.component.ts","../../../projects/ngx-tailwindcss/src/lib/slider/slider.component.html","../../../projects/ngx-tailwindcss/src/lib/rating/rating.component.ts","../../../projects/ngx-tailwindcss/src/lib/rating/rating.component.html","../../../projects/ngx-tailwindcss/src/lib/chip/chip.component.ts","../../../projects/ngx-tailwindcss/src/lib/chip/chip.component.html","../../../projects/ngx-tailwindcss/src/lib/card/card.component.ts","../../../projects/ngx-tailwindcss/src/lib/card/card-horizontal.component.html","../../../projects/ngx-tailwindcss/src/lib/card/index.ts","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion.component.ts","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion-item.component.html","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/tabs.component.ts","../../../projects/ngx-tailwindcss/src/lib/tabs/tab-panel.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/tabs.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/index.ts","../../../projects/ngx-tailwindcss/src/lib/divider/divider.component.ts","../../../projects/ngx-tailwindcss/src/lib/divider/divider.component.html","../../../projects/ngx-tailwindcss/src/lib/container/container.component.ts","../../../projects/ngx-tailwindcss/src/lib/container/index.ts","../../../projects/ngx-tailwindcss/src/lib/stack/stack.component.ts","../../../projects/ngx-tailwindcss/src/lib/stack/index.ts","../../../projects/ngx-tailwindcss/src/lib/grid/grid.component.ts","../../../projects/ngx-tailwindcss/src/lib/grid/index.ts","../../../projects/ngx-tailwindcss/src/lib/aspect-ratio/aspect-ratio.component.ts","../../../projects/ngx-tailwindcss/src/lib/aspect-ratio/index.ts","../../../projects/ngx-tailwindcss/src/lib/center/center.component.ts","../../../projects/ngx-tailwindcss/src/lib/center/index.ts","../../../projects/ngx-tailwindcss/src/lib/spacer/spacer.component.ts","../../../projects/ngx-tailwindcss/src/lib/spacer/index.ts","../../../projects/ngx-tailwindcss/src/lib/splitter/splitter.component.ts","../../../projects/ngx-tailwindcss/src/lib/sticky/sticky.component.ts","../../../projects/ngx-tailwindcss/src/lib/scroll-area/scroll-area.component.ts","../../../projects/ngx-tailwindcss/src/lib/columns/columns.component.ts","../../../projects/ngx-tailwindcss/src/lib/bleed/bleed.component.ts","../../../projects/ngx-tailwindcss/src/lib/overlay/overlay.component.ts","../../../projects/ngx-tailwindcss/src/lib/badge/badge.component.ts","../../../projects/ngx-tailwindcss/src/lib/badge/badge.component.html","../../../projects/ngx-tailwindcss/src/lib/badge/badge-group.component.html","../../../projects/ngx-tailwindcss/src/lib/badge/index.ts","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar.component.ts","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar.component.html","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar-group.component.html","../../../projects/ngx-tailwindcss/src/lib/table/table.component.ts","../../../projects/ngx-tailwindcss/src/lib/table/table.component.html","../../../projects/ngx-tailwindcss/src/lib/datatables/datatable.component.ts","../../../projects/ngx-tailwindcss/src/lib/datatables/datatable.component.html","../../../projects/ngx-tailwindcss/src/lib/datatables/index.ts","../../../projects/ngx-tailwindcss/src/lib/tree/tree.component.ts","../../../projects/ngx-tailwindcss/src/lib/tree/tree.component.html","../../../projects/ngx-tailwindcss/src/lib/timeline/timeline.component.ts","../../../projects/ngx-tailwindcss/src/lib/timeline/timeline.component.html","../../../projects/ngx-tailwindcss/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/ngx-tailwindcss/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/ngx-tailwindcss/src/lib/pagination/pagination.component.ts","../../../projects/ngx-tailwindcss/src/lib/pagination/pagination.component.html","../../../projects/ngx-tailwindcss/src/lib/steps/steps.component.ts","../../../projects/ngx-tailwindcss/src/lib/steps/steps.component.html","../../../projects/ngx-tailwindcss/src/lib/menu/menu.component.ts","../../../projects/ngx-tailwindcss/src/lib/menu/menu.component.html","../../../projects/ngx-tailwindcss/src/lib/alert/alert.component.ts","../../../projects/ngx-tailwindcss/src/lib/alert/alert.component.html","../../../projects/ngx-tailwindcss/src/lib/alert/index.ts","../../../projects/ngx-tailwindcss/src/lib/toast/toast.component.ts","../../../projects/ngx-tailwindcss/src/lib/toast/toast.component.html","../../../projects/ngx-tailwindcss/src/lib/toast/toast-container.component.html","../../../projects/ngx-tailwindcss/src/lib/spinner/spinner.component.ts","../../../projects/ngx-tailwindcss/src/lib/spinner/spinner.component.html","../../../projects/ngx-tailwindcss/src/lib/spinner/loading-overlay.component.html","../../../projects/ngx-tailwindcss/src/lib/progress/progress.component.ts","../../../projects/ngx-tailwindcss/src/lib/progress/progress.component.html","../../../projects/ngx-tailwindcss/src/lib/progress/progress-circular.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton.component.ts","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-text.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-card.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-table.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/modal.component.ts","../../../projects/ngx-tailwindcss/src/lib/modal/modal.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/confirm-dialog.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/index.ts","../../../projects/ngx-tailwindcss/src/lib/dropdown/dropdown.component.ts","../../../projects/ngx-tailwindcss/src/lib/dropdown/dropdown.component.html","../../../projects/ngx-tailwindcss/src/lib/dropdown/index.ts","../../../projects/ngx-tailwindcss/src/lib/sidebar/sidebar.component.ts","../../../projects/ngx-tailwindcss/src/lib/sidebar/sidebar.component.html","../../../projects/ngx-tailwindcss/src/lib/popover/popover.component.ts","../../../projects/ngx-tailwindcss/src/lib/popover/popover.component.html","../../../projects/ngx-tailwindcss/src/lib/image/image.component.ts","../../../projects/ngx-tailwindcss/src/lib/image/image.component.html","../../../projects/ngx-tailwindcss/src/lib/scroll-top/scroll-top.component.ts","../../../projects/ngx-tailwindcss/src/lib/scroll-top/scroll-top.component.html","../../../projects/ngx-tailwindcss/src/public-api.ts","../../../projects/ngx-tailwindcss/src/pegasusheavy-ngx-tailwindcss.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Configuration interface for ngx-tailwindcss components\n * Allows users to customize default class mappings\n */\nexport interface TwConfig {\n /** Custom class prefix for component-specific classes */\n prefix?: string;\n\n /** Theme configuration for color variants */\n theme?: TwThemeConfig;\n\n /** Default animation duration in milliseconds */\n animationDuration?: number;\n\n /** Whether to use CSS transitions or Angular animations */\n useAngularAnimations?: boolean;\n\n /** Custom class overrides for components */\n classOverrides?: TwClassOverrides;\n}\n\nexport interface TwThemeConfig {\n /** Primary color variant classes */\n primary?: string;\n /** Secondary color variant classes */\n secondary?: string;\n /** Success/positive color variant classes */\n success?: string;\n /** Warning color variant classes */\n warning?: string;\n /** Danger/error color variant classes */\n danger?: string;\n /** Info color variant classes */\n info?: string;\n /** Neutral color variant classes */\n neutral?: string;\n}\n\nexport interface TwClassOverrides {\n button?: Partial<TwButtonClassConfig>;\n card?: Partial<TwCardClassConfig>;\n input?: Partial<TwInputClassConfig>;\n badge?: Partial<TwBadgeClassConfig>;\n alert?: Partial<TwAlertClassConfig>;\n modal?: Partial<TwModalClassConfig>;\n dropdown?: Partial<TwDropdownClassConfig>;\n tabs?: Partial<TwTabsClassConfig>;\n}\n\nexport interface TwButtonClassConfig {\n base: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n disabled: string;\n loading: string;\n}\n\nexport interface TwCardClassConfig {\n base: string;\n header: string;\n body: string;\n footer: string;\n variants: Record<string, string>;\n}\n\nexport interface TwInputClassConfig {\n base: string;\n label: string;\n wrapper: string;\n error: string;\n hint: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n}\n\nexport interface TwBadgeClassConfig {\n base: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n}\n\nexport interface TwAlertClassConfig {\n base: string;\n icon: string;\n content: string;\n dismissButton: string;\n variants: Record<string, string>;\n}\n\nexport interface TwModalClassConfig {\n overlay: string;\n container: string;\n header: string;\n body: string;\n footer: string;\n closeButton: string;\n sizes: Record<string, string>;\n}\n\nexport interface TwDropdownClassConfig {\n trigger: string;\n menu: string;\n item: string;\n itemActive: string;\n itemDisabled: string;\n divider: string;\n}\n\nexport interface TwTabsClassConfig {\n container: string;\n tabList: string;\n tab: string;\n tabActive: string;\n tabDisabled: string;\n panel: string;\n variants: Record<string, string>;\n}\n\n/**\n * Injection token for providing custom ngx-tailwindcss configuration\n */\nexport const TW_CONFIG = new InjectionToken<TwConfig>('TW_CONFIG');\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_TW_CONFIG: TwConfig = {\n prefix: 'tw',\n animationDuration: 200,\n useAngularAnimations: true,\n theme: {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white',\n secondary: 'bg-slate-600 hover:bg-slate-700 text-white',\n success: 'bg-emerald-600 hover:bg-emerald-700 text-white',\n warning: 'bg-amber-500 hover:bg-amber-600 text-white',\n danger: 'bg-rose-600 hover:bg-rose-700 text-white',\n info: 'bg-cyan-600 hover:bg-cyan-700 text-white',\n neutral: 'bg-slate-200 hover:bg-slate-300 text-slate-900',\n },\n};\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { DEFAULT_TW_CONFIG, TW_CONFIG, TwConfig } from './tw-config';\n\n/**\n * Provides ngx-tailwindcss configuration at the application level\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTwConfig({\n * theme: {\n * primary: 'bg-indigo-600 hover:bg-indigo-700 text-white',\n * },\n * animationDuration: 300,\n * }),\n * ],\n * };\n * ```\n */\nexport function provideTwConfig(config?: Partial<TwConfig>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TW_CONFIG,\n useValue: { ...DEFAULT_TW_CONFIG, ...config },\n },\n ]);\n}\n\n/**\n * Provides ngx-tailwindcss configuration as a standard provider\n * Useful for component-level configuration overrides\n */\nexport function withTwConfig(config: Partial<TwConfig>): Provider {\n return {\n provide: TW_CONFIG,\n useValue: { ...DEFAULT_TW_CONFIG, ...config },\n };\n}\n","/**\n * Theme configuration system for ngx-tailwindcss\n *\n * This module provides a CSS custom properties (CSS variables) based theming system\n * that allows users to fully customize all colors used by the library components.\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * const customTheme = createTheme({\n * colors: {\n * primary: { light: '#3b82f6', dark: '#60a5fa' },\n * background: { light: '#ffffff', dark: '#0f172a' },\n * }\n * });\n *\n * export const appConfig = {\n * providers: [provideTwTheme(customTheme)]\n * };\n * ```\n */\n\nimport { InjectionToken } from '@angular/core';\n\n/**\n * Color value that can have light and dark variants\n */\nexport interface ThemeColorValue {\n /** Color value for light mode */\n light: string;\n /** Color value for dark mode */\n dark: string;\n}\n\n/**\n * Semantic color definitions for the theme\n */\nexport interface ThemeColors {\n // Brand colors\n primary?: ThemeColorValue;\n secondary?: ThemeColorValue;\n\n // Semantic colors\n success?: ThemeColorValue;\n warning?: ThemeColorValue;\n danger?: ThemeColorValue;\n info?: ThemeColorValue;\n\n // Neutral palette\n background?: ThemeColorValue;\n surface?: ThemeColorValue;\n surfaceAlt?: ThemeColorValue;\n\n // Text colors\n textPrimary?: ThemeColorValue;\n textSecondary?: ThemeColorValue;\n textMuted?: ThemeColorValue;\n textInverse?: ThemeColorValue;\n\n // Border colors\n border?: ThemeColorValue;\n borderLight?: ThemeColorValue;\n borderFocus?: ThemeColorValue;\n\n // Interactive states\n hover?: ThemeColorValue;\n active?: ThemeColorValue;\n disabled?: ThemeColorValue;\n\n // Overlay/backdrop\n overlay?: ThemeColorValue;\n}\n\n/**\n * Component-specific theme overrides\n */\nexport interface ThemeComponentOverrides {\n button?: {\n primaryBg?: ThemeColorValue;\n primaryText?: ThemeColorValue;\n secondaryBg?: ThemeColorValue;\n secondaryText?: ThemeColorValue;\n };\n card?: {\n bg?: ThemeColorValue;\n border?: ThemeColorValue;\n shadow?: ThemeColorValue;\n };\n input?: {\n bg?: ThemeColorValue;\n border?: ThemeColorValue;\n focusBorder?: ThemeColorValue;\n placeholderText?: ThemeColorValue;\n };\n modal?: {\n overlayBg?: ThemeColorValue;\n contentBg?: ThemeColorValue;\n };\n dropdown?: {\n bg?: ThemeColorValue;\n itemHover?: ThemeColorValue;\n };\n tooltip?: {\n bg?: ThemeColorValue;\n text?: ThemeColorValue;\n };\n}\n\n/**\n * Complete theme definition\n */\nexport interface TwTheme {\n /** Theme name for identification */\n name?: string;\n\n /** Semantic color definitions */\n colors: ThemeColors;\n\n /** Component-specific overrides */\n components?: ThemeComponentOverrides;\n\n /** Additional CSS custom properties */\n customProperties?: Record<string, ThemeColorValue | string>;\n}\n\n/**\n * Injection token for the theme configuration\n */\nexport const TW_THEME = new InjectionToken<TwTheme>('TW_THEME');\n\n/**\n * Default theme colors - these are used when no custom theme is provided\n * Users can override these by providing their own theme configuration.\n *\n * Note: The library uses Tailwind's dark: variant by default.\n * These CSS variables provide an ADDITIONAL way to customize colors\n * that works alongside or instead of Tailwind classes.\n */\nexport const DEFAULT_THEME_COLORS: Required<ThemeColors> = {\n // Brand colors\n primary: { light: '#3b82f6', dark: '#60a5fa' }, // blue-500, blue-400\n secondary: { light: '#64748b', dark: '#94a3b8' }, // slate-500, slate-400\n\n // Semantic colors\n success: { light: '#10b981', dark: '#34d399' }, // emerald-500, emerald-400\n warning: { light: '#f59e0b', dark: '#fbbf24' }, // amber-500, amber-400\n danger: { light: '#ef4444', dark: '#f87171' }, // rose-500, rose-400\n info: { light: '#06b6d4', dark: '#22d3ee' }, // cyan-500, cyan-400\n\n // Neutral palette\n background: { light: '#ffffff', dark: '#0f172a' }, // white, slate-900\n surface: { light: '#ffffff', dark: '#1e293b' }, // white, slate-800\n surfaceAlt: { light: '#f8fafc', dark: '#334155' }, // slate-50, slate-700\n\n // Text colors\n textPrimary: { light: '#0f172a', dark: '#f8fafc' }, // slate-900, slate-50\n textSecondary: { light: '#475569', dark: '#94a3b8' }, // slate-600, slate-400\n textMuted: { light: '#94a3b8', dark: '#64748b' }, // slate-400, slate-500\n textInverse: { light: '#ffffff', dark: '#0f172a' }, // white, slate-900\n\n // Border colors\n border: { light: '#e2e8f0', dark: '#334155' }, // slate-200, slate-700\n borderLight: { light: '#f1f5f9', dark: '#475569' }, // slate-100, slate-600\n borderFocus: { light: '#3b82f6', dark: '#60a5fa' }, // blue-500, blue-400\n\n // Interactive states\n hover: { light: '#f1f5f9', dark: '#334155' }, // slate-100, slate-700\n active: { light: '#e2e8f0', dark: '#475569' }, // slate-200, slate-600\n disabled: { light: '#e2e8f0', dark: '#334155' }, // slate-200, slate-700\n\n // Overlay/backdrop\n overlay: { light: 'rgba(0, 0, 0, 0.5)', dark: 'rgba(0, 0, 0, 0.7)' },\n};\n\n/**\n * Default complete theme\n */\nexport const DEFAULT_THEME: TwTheme = {\n name: 'default',\n colors: DEFAULT_THEME_COLORS,\n};\n\n/**\n * Creates a theme by merging user colors with defaults\n */\nexport function createTheme(config: Partial<TwTheme>): TwTheme {\n return {\n name: config.name ?? 'custom',\n colors: {\n ...DEFAULT_THEME_COLORS,\n ...config.colors,\n },\n components: config.components,\n customProperties: config.customProperties,\n };\n}\n\n/**\n * Generates CSS custom properties from a theme\n */\nexport function generateThemeCssProperties(theme: TwTheme): {\n light: Record<string, string>;\n dark: Record<string, string>;\n} {\n const light: Record<string, string> = {};\n const dark: Record<string, string> = {};\n\n // Process colors - use --tw-color- prefix for semantic colors\n const colors = { ...DEFAULT_THEME_COLORS, ...theme.colors };\n for (const [key, value] of Object.entries(colors)) {\n if (value && typeof value === 'object' && 'light' in value) {\n const cssVar = `--tw-color-${camelToKebab(key)}`;\n light[cssVar] = value.light;\n dark[cssVar] = value.dark;\n }\n }\n\n // Process component overrides\n if (theme.components) {\n for (const [component, overrides] of Object.entries(theme.components)) {\n if (!overrides) continue;\n for (const [prop, value] of Object.entries(overrides)) {\n if (value && typeof value === 'object' && 'light' in value && 'dark' in value) {\n const colorValue = value as ThemeColorValue;\n const cssVar = `--tw-${component}-${camelToKebab(prop)}`;\n light[cssVar] = colorValue.light;\n dark[cssVar] = colorValue.dark;\n }\n }\n }\n }\n\n // Process custom properties\n if (theme.customProperties) {\n for (const [key, value] of Object.entries(theme.customProperties)) {\n const cssVar = key.startsWith('--') ? key : `--tw-${key}`;\n if (typeof value === 'string') {\n light[cssVar] = value;\n dark[cssVar] = value;\n } else if (value && typeof value === 'object' && 'light' in value) {\n light[cssVar] = value.light;\n dark[cssVar] = value.dark;\n }\n }\n }\n\n return { light, dark };\n}\n\n/**\n * Converts camelCase to kebab-case\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * CSS class names for semantic colors (for components that still want to use classes)\n * These reference the CSS custom properties and provide a theme-aware alternative\n * to Tailwind's built-in color classes.\n *\n * @example\n * ```html\n * <!-- Instead of: -->\n * <div class=\"bg-blue-500 dark:bg-blue-400\">...</div>\n *\n * <!-- Use theme-aware: -->\n * <div class=\"bg-[var(--tw-color-primary)]\">...</div>\n * ```\n */\nexport const THEME_CSS_CLASSES = {\n // Backgrounds\n bgPrimary: 'bg-[var(--tw-color-primary)]',\n bgSecondary: 'bg-[var(--tw-color-secondary)]',\n bgSuccess: 'bg-[var(--tw-color-success)]',\n bgWarning: 'bg-[var(--tw-color-warning)]',\n bgDanger: 'bg-[var(--tw-color-danger)]',\n bgInfo: 'bg-[var(--tw-color-info)]',\n bgSurface: 'bg-[var(--tw-color-surface)]',\n bgSurfaceAlt: 'bg-[var(--tw-color-surface-alt)]',\n bgBackground: 'bg-[var(--tw-color-background)]',\n\n // Text\n textPrimary: 'text-[var(--tw-color-text)]',\n textSecondary: 'text-[var(--tw-color-text-secondary)]',\n textMuted: 'text-[var(--tw-color-text-muted)]',\n textInverse: 'text-[var(--tw-color-text-inverse)]',\n\n // Borders\n borderDefault: 'border-[var(--tw-color-border)]',\n borderLight: 'border-[var(--tw-color-border-light)]',\n borderFocus: 'border-[var(--tw-color-border-focus)]',\n} as const;\n\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n inject,\n Injectable,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport {\n DEFAULT_THEME,\n generateThemeCssProperties,\n TW_THEME,\n TwTheme,\n} from './theme';\n\nexport type ColorMode = 'light' | 'dark' | 'system';\n\n/**\n * Service for managing the library theme and color mode\n *\n * This service:\n * - Applies CSS custom properties for theme colors\n * - Manages light/dark mode switching\n * - Persists color mode preference to localStorage\n * - Respects system color scheme preferences\n *\n * @example\n * ```typescript\n * // In a component\n * export class MyComponent {\n * private themeService = inject(TwThemeService);\n *\n * toggleDarkMode() {\n * this.themeService.setColorMode(\n * this.themeService.colorMode() === 'dark' ? 'light' : 'dark'\n * );\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class TwThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injectedTheme = inject(TW_THEME, { optional: true });\n\n private readonly STORAGE_KEY = 'tw-color-mode';\n private mediaQuery: MediaQueryList | null = null;\n\n /** Current theme configuration */\n public readonly theme = signal<TwTheme>(this.injectedTheme ?? DEFAULT_THEME);\n\n /** Current color mode setting (light, dark, or system) */\n public readonly colorMode = signal<ColorMode>('system');\n\n /** Resolved color mode (actual light or dark, resolving 'system' to its value) */\n public readonly resolvedColorMode = signal<'light' | 'dark'>('light');\n\n /** Whether dark mode is currently active */\n public readonly isDark = signal<boolean>(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.initialize();\n }\n }\n\n /**\n * Initializes the theme service\n */\n private initialize(): void {\n // Load saved color mode preference\n const savedMode = this.getSavedColorMode();\n if (savedMode) {\n this.colorMode.set(savedMode);\n }\n\n // Set up system preference detection\n this.setupSystemPreferenceListener();\n\n // Apply the theme\n this.applyTheme();\n this.updateColorMode();\n }\n\n /**\n * Sets up listener for system color scheme changes\n */\n private setupSystemPreferenceListener(): void {\n if (typeof window === 'undefined') return;\n\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n fromEvent<MediaQueryListEvent>(this.mediaQuery, 'change')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.colorMode() === 'system') {\n this.updateColorMode();\n }\n });\n }\n\n /**\n * Gets the saved color mode from localStorage\n */\n private getSavedColorMode(): ColorMode | null {\n if (typeof localStorage === 'undefined') return null;\n\n const saved = localStorage.getItem(this.STORAGE_KEY);\n if (saved === 'light' || saved === 'dark' || saved === 'system') {\n return saved;\n }\n return null;\n }\n\n /**\n * Sets the color mode\n */\n public setColorMode(mode: ColorMode): void {\n this.colorMode.set(mode);\n\n if (isPlatformBrowser(this.platformId)) {\n localStorage.setItem(this.STORAGE_KEY, mode);\n }\n\n this.updateColorMode();\n }\n\n /**\n * Cycles through color modes: light -> dark -> system -> light\n */\n public cycleColorMode(): void {\n const current = this.colorMode();\n const next: ColorMode =\n current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n this.setColorMode(next);\n }\n\n /**\n * Updates the resolved color mode based on current setting\n */\n private updateColorMode(): void {\n const mode = this.colorMode();\n let resolved: 'light' | 'dark';\n\n if (mode === 'system') {\n resolved = this.mediaQuery?.matches ? 'dark' : 'light';\n } else {\n resolved = mode;\n }\n\n this.resolvedColorMode.set(resolved);\n this.isDark.set(resolved === 'dark');\n\n // Update document class for Tailwind dark mode\n const html = this.document.documentElement;\n if (resolved === 'dark') {\n html.classList.add('dark');\n } else {\n html.classList.remove('dark');\n }\n\n // Apply theme colors for the resolved mode\n this.applyThemeColors(resolved);\n }\n\n /**\n * Sets a new theme configuration\n */\n public setTheme(theme: TwTheme): void {\n this.theme.set(theme);\n this.applyTheme();\n }\n\n /**\n * Applies the current theme's CSS custom properties\n */\n private applyTheme(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n this.applyThemeColors(this.resolvedColorMode());\n }\n\n /**\n * Applies theme colors for a specific color mode\n */\n private applyThemeColors(mode: 'light' | 'dark'): void {\n const theme = this.theme();\n const cssProps = generateThemeCssProperties(theme);\n const properties = mode === 'dark' ? cssProps.dark : cssProps.light;\n\n const root = this.document.documentElement;\n for (const [prop, value] of Object.entries(properties)) {\n root.style.setProperty(prop, value);\n }\n }\n\n /**\n * Gets the current value of a theme color\n */\n public getColor(\n colorName: keyof TwTheme['colors'],\n mode?: 'light' | 'dark'\n ): string {\n const theme = this.theme();\n const colorValue = theme.colors[colorName];\n if (!colorValue) return '';\n\n const resolvedMode = mode ?? this.resolvedColorMode();\n return resolvedMode === 'dark' ? colorValue.dark : colorValue.light;\n }\n\n /**\n * Gets the CSS variable name for a theme color\n */\n public getCssVar(colorName: string): string {\n const kebabName = colorName\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .toLowerCase();\n return `var(--tw-color-${kebabName})`;\n }\n\n /**\n * Gets the CSS variable reference for use in Tailwind arbitrary values\n * @example 'bg-[var(--tw-color-primary)]'\n */\n public getTailwindClass(\n property: 'bg' | 'text' | 'border' | 'ring',\n colorName: string\n ): string {\n return `${property}-[${this.getCssVar(colorName)}]`;\n }\n}\n\n","import {\n APP_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n Provider,\n} from '@angular/core';\nimport { DEFAULT_THEME, TW_THEME, TwTheme } from './theme';\nimport { TwThemeService } from './theme.service';\n\n/**\n * Provides ngx-tailwindcss theme configuration at the application level\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * const myTheme = createTheme({\n * colors: {\n * primary: { light: '#6366f1', dark: '#818cf8' },\n * secondary: { light: '#ec4899', dark: '#f472b6' },\n * }\n * });\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTwTheme(myTheme),\n * ],\n * };\n * ```\n */\nexport function provideTwTheme(theme?: TwTheme): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TW_THEME,\n useValue: theme ?? DEFAULT_THEME,\n },\n // Initialize the theme service on app startup\n {\n provide: APP_INITIALIZER,\n useFactory: () => {\n const themeService = inject(TwThemeService);\n return () => {\n // The service initializes itself in the constructor\n // This just ensures it's created at app startup\n return Promise.resolve();\n };\n },\n multi: true,\n },\n ]);\n}\n\n/**\n * Provides theme configuration as a standard provider\n * Useful for lazy-loaded modules or component-level overrides\n */\nexport function withTwTheme(theme: TwTheme): Provider[] {\n return [\n {\n provide: TW_THEME,\n useValue: theme,\n },\n ];\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { DEFAULT_TW_CONFIG, TW_CONFIG, TwConfig } from './tw-config';\n\n/**\n * Service for managing Tailwind CSS classes with conflict resolution\n * Uses a lightweight approach similar to tailwind-merge\n */\n@Injectable({ providedIn: 'root' })\nexport class TwClassService {\n private readonly config: TwConfig;\n\n constructor() {\n const injectedConfig = inject(TW_CONFIG, { optional: true });\n this.config = { ...DEFAULT_TW_CONFIG, ...injectedConfig };\n }\n\n /**\n * Merges multiple class strings, handling Tailwind class conflicts\n * Later classes override earlier ones for the same utility\n */\n merge(...classes: Array<string | undefined | null | false>): string {\n const classMap = new Map<string, string>();\n\n for (const classString of classes) {\n if (!classString) continue;\n\n const classList = classString.split(/\\s+/).filter(Boolean);\n\n for (const cls of classList) {\n const group = this.getClassGroup(cls);\n classMap.set(group, cls);\n }\n }\n\n return [...classMap.values()].join(' ');\n }\n\n /**\n * Conditionally applies classes based on a condition map\n */\n conditional(baseClasses: string, conditionals: Record<string, boolean | undefined>): string {\n const activeClasses = Object.entries(conditionals)\n .filter(([, condition]) => condition)\n .map(([classes]) => classes);\n\n return this.merge(baseClasses, ...activeClasses);\n }\n\n /**\n * Gets the variant classes for a given variant name\n */\n getVariantClasses(variant: string): string {\n return this.config.theme?.[variant as keyof typeof this.config.theme] ?? '';\n }\n\n /**\n * Determines the class group for conflict resolution\n */\n private getClassGroup(cls: string): string {\n // Handle responsive/state prefixes\n const parts = cls.split(':');\n const baseClass = parts.at(-1) ?? cls;\n const prefix = parts.slice(0, -1).join(':');\n\n // Group patterns for common Tailwind utilities\n const groupPatterns: Array<[RegExp, string]> = [\n // Layout\n [\n /^(block|inline|inline-block|flex|inline-flex|grid|inline-grid|hidden|contents|flow-root)$/,\n 'display',\n ],\n [/^(static|fixed|absolute|relative|sticky)$/, 'position'],\n [/^(visible|invisible|collapse)$/, 'visibility'],\n [/^overflow-/, 'overflow'],\n [/^z-/, 'z-index'],\n\n // Flexbox & Grid\n [/^flex-/, 'flex'],\n [/^(grow|shrink)-?/, 'flex-grow-shrink'],\n [/^basis-/, 'flex-basis'],\n [/^justify-/, 'justify'],\n [/^items-/, 'items'],\n [/^self-/, 'self'],\n [/^content-/, 'content'],\n [/^place-/, 'place'],\n [/^gap-/, 'gap'],\n [/^(grid-cols|col-span|col-start|col-end)-/, 'grid-cols'],\n [/^(grid-rows|row-span|row-start|row-end)-/, 'grid-rows'],\n\n // Spacing - each direction is a separate group\n [/^px-/, 'padding-x'],\n [/^py-/, 'padding-y'],\n [/^pt-/, 'padding-top'],\n [/^pr-/, 'padding-right'],\n [/^pb-/, 'padding-bottom'],\n [/^pl-/, 'padding-left'],\n [/^p-/, 'padding'],\n [/^mx-/, 'margin-x'],\n [/^my-/, 'margin-y'],\n [/^mt-/, 'margin-top'],\n [/^mr-/, 'margin-right'],\n [/^mb-/, 'margin-bottom'],\n [/^ml-/, 'margin-left'],\n [/^m-/, 'margin'],\n [/^space-x-/, 'space-x'],\n [/^space-y-/, 'space-y'],\n\n // Sizing\n [/^w-/, 'width'],\n [/^min-w-/, 'min-width'],\n [/^max-w-/, 'max-width'],\n [/^h-/, 'height'],\n [/^min-h-/, 'min-height'],\n [/^max-h-/, 'max-height'],\n [/^size-/, 'size'],\n\n // Typography\n [/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)/, 'font-size'],\n [/^text-(left|center|right|justify|start|end)$/, 'text-align'],\n [/^text-/, 'text-color'],\n [/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/, 'font-weight'],\n [/^font-/, 'font-family'],\n [/^leading-/, 'line-height'],\n [/^tracking-/, 'letter-spacing'],\n [/^(uppercase|lowercase|capitalize|normal-case)$/, 'text-transform'],\n [/^(underline|overline|line-through|no-underline)$/, 'text-decoration'],\n [/^(truncate|text-ellipsis|text-clip)$/, 'text-overflow'],\n [/^(whitespace|break)-/, 'whitespace'],\n\n // Backgrounds\n [/^bg-/, 'background'],\n [/^from-/, 'gradient-from'],\n [/^via-/, 'gradient-via'],\n [/^to-/, 'gradient-to'],\n\n // Borders\n [/^border($|-[blrtxy]?-?\\d|-(solid|dashed|dotted|double|hidden|none))/, 'border-width'],\n [/^border-/, 'border-color'],\n [/^rounded(-|$)/, 'border-radius'],\n [/^ring-/, 'ring'],\n\n // Effects\n [/^shadow(-|$)/, 'shadow'],\n [/^opacity-/, 'opacity'],\n [/^blur(-|$)/, 'blur'],\n\n // Transitions & Animation\n [/^transition(-|$)/, 'transition'],\n [/^duration-/, 'duration'],\n [/^ease-/, 'ease'],\n [/^delay-/, 'delay'],\n [/^animate-/, 'animate'],\n\n // Transforms\n [/^scale-/, 'scale'],\n [/^rotate-/, 'rotate'],\n [/^translate-/, 'translate'],\n [/^skew-/, 'skew'],\n [/^origin-/, 'transform-origin'],\n\n // Interactivity\n [/^cursor-/, 'cursor'],\n [/^(pointer-events|select|resize|scroll)-/, 'interactivity'],\n [/^(outline|ring)-/, 'outline-ring'],\n ];\n\n for (const [pattern, group] of groupPatterns) {\n if (pattern.test(baseClass)) {\n return prefix ? `${prefix}:${group}` : group;\n }\n }\n\n // Return the full class as its own group if no pattern matches\n return cls;\n }\n\n /**\n * Creates a class string from an array of class names\n */\n join(...classes: Array<string | undefined | null | false>): string {\n return classes.filter(Boolean).join(' ');\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Service for managing ARIA live regions and announcements for screen readers.\n * Provides utilities for making dynamic content accessible.\n */\n@Injectable({ providedIn: 'root' })\nexport class TwAriaService {\n private readonly document = inject(DOCUMENT);\n private liveRegion: HTMLElement | null = null;\n private assertiveRegion: HTMLElement | null = null;\n\n private readonly announceQueue = signal<string[]>([]);\n private readonly isProcessing = signal(false);\n\n /**\n * Announce a message to screen readers using a polite live region.\n * Messages are queued and announced sequentially.\n */\n announce(message: string, delay = 100): void {\n this.announceQueue.update(queue => [...queue, message]);\n this.processQueue(delay);\n }\n\n /**\n * Announce an urgent message to screen readers using an assertive live region.\n * This interrupts the current speech.\n */\n announceAssertive(message: string): void {\n this.ensureAssertiveRegion();\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = '';\n setTimeout(() => {\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = message;\n }\n }, 50);\n }\n }\n\n /**\n * Clear any pending announcements.\n */\n clearAnnouncements(): void {\n this.announceQueue.set([]);\n if (this.liveRegion) {\n this.liveRegion.textContent = '';\n }\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = '';\n }\n }\n\n private processQueue(delay: number): void {\n if (this.isProcessing()) return;\n\n this.isProcessing.set(true);\n this.ensureLiveRegion();\n\n const process = () => {\n const queue = this.announceQueue();\n if (queue.length === 0) {\n this.isProcessing.set(false);\n return;\n }\n\n const [message, ...rest] = queue;\n this.announceQueue.set(rest);\n\n if (this.liveRegion) {\n this.liveRegion.textContent = '';\n setTimeout(() => {\n if (this.liveRegion) {\n this.liveRegion.textContent = message;\n }\n setTimeout(process, delay + 500);\n }, 50);\n }\n };\n\n setTimeout(process, delay);\n }\n\n private ensureLiveRegion(): void {\n if (this.liveRegion) return;\n\n this.liveRegion = this.document.createElement('div');\n this.liveRegion.setAttribute('aria-live', 'polite');\n this.liveRegion.setAttribute('aria-atomic', 'true');\n this.liveRegion.setAttribute('role', 'status');\n this.applyScreenReaderOnlyStyles(this.liveRegion);\n this.document.body.append(this.liveRegion);\n }\n\n private ensureAssertiveRegion(): void {\n if (this.assertiveRegion) return;\n\n this.assertiveRegion = this.document.createElement('div');\n this.assertiveRegion.setAttribute('aria-live', 'assertive');\n this.assertiveRegion.setAttribute('aria-atomic', 'true');\n this.assertiveRegion.setAttribute('role', 'alert');\n this.applyScreenReaderOnlyStyles(this.assertiveRegion);\n this.document.body.append(this.assertiveRegion);\n }\n\n private applyScreenReaderOnlyStyles(element: HTMLElement): void {\n Object.assign(element.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n }\n}\n\n/**\n * Utility functions for generating ARIA attributes.\n */\nexport const AriaUtils = {\n /**\n * Generate a unique ID for ARIA relationships.\n */\n generateId(prefix = 'tw'): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n },\n\n /**\n * Create ARIA describedby value from multiple IDs.\n */\n describedBy(...ids: Array<string | null | undefined>): string | null {\n const validIds = ids.filter(Boolean);\n return validIds.length > 0 ? validIds.join(' ') : null;\n },\n\n /**\n * Create ARIA labelledby value from multiple IDs.\n */\n labelledBy(...ids: Array<string | null | undefined>): string | null {\n const validIds = ids.filter(Boolean);\n return validIds.length > 0 ? validIds.join(' ') : null;\n },\n\n /**\n * Get appropriate role for a component based on context.\n */\n getRole(component: string, context?: string): string {\n const roles: Record<string, Record<string, string>> = {\n button: { default: 'button', menu: 'menuitem', toolbar: 'button' },\n alert: { default: 'alert', status: 'status' },\n dialog: { default: 'dialog', alert: 'alertdialog' },\n tab: { default: 'tab' },\n tabpanel: { default: 'tabpanel' },\n tablist: { default: 'tablist' },\n menu: { default: 'menu', menubar: 'menubar' },\n menuitem: { default: 'menuitem', checkbox: 'menuitemcheckbox', radio: 'menuitemradio' },\n listbox: { default: 'listbox' },\n option: { default: 'option' },\n tree: { default: 'tree' },\n treeitem: { default: 'treeitem' },\n grid: { default: 'grid', treegrid: 'treegrid' },\n row: { default: 'row' },\n cell: {\n default: 'cell',\n gridcell: 'gridcell',\n columnheader: 'columnheader',\n rowheader: 'rowheader',\n },\n progressbar: { default: 'progressbar' },\n slider: { default: 'slider' },\n spinbutton: { default: 'spinbutton' },\n switch: { default: 'switch' },\n tooltip: { default: 'tooltip' },\n navigation: { default: 'navigation' },\n region: { default: 'region' },\n search: { default: 'search' },\n form: { default: 'form' },\n banner: { default: 'banner' },\n complementary: { default: 'complementary' },\n contentinfo: { default: 'contentinfo' },\n main: { default: 'main' },\n };\n\n const componentRoles = roles[component];\n if (!componentRoles) return component;\n\n return componentRoles[context || 'default'] || componentRoles['default'];\n },\n};\n","import {\n computed,\n effect,\n inject,\n Injectable,\n InjectionToken,\n LOCALE_ID,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Default translations for the component library.\n */\nexport interface TwTranslations {\n // Common\n common: {\n loading: string;\n close: string;\n cancel: string;\n confirm: string;\n save: string;\n delete: string;\n edit: string;\n add: string;\n remove: string;\n search: string;\n clear: string;\n select: string;\n selectAll: string;\n deselectAll: string;\n noResults: string;\n noData: string;\n error: string;\n success: string;\n warning: string;\n info: string;\n required: string;\n optional: string;\n show: string;\n hide: string;\n expand: string;\n collapse: string;\n more: string;\n less: string;\n yes: string;\n no: string;\n ok: string;\n retry: string;\n back: string;\n next: string;\n previous: string;\n first: string;\n last: string;\n of: string;\n to: string;\n from: string;\n };\n\n // Components\n button: {\n loading: string;\n };\n\n input: {\n placeholder: string;\n clearInput: string;\n showPassword: string;\n hidePassword: string;\n characterCount: string;\n maxCharacters: string;\n };\n\n select: {\n placeholder: string;\n noOptions: string;\n searchPlaceholder: string;\n clearSelection: string;\n selectOption: string;\n optionsAvailable: string;\n };\n\n modal: {\n close: string;\n closeModal: string;\n };\n\n alert: {\n dismiss: string;\n dismissAlert: string;\n };\n\n toast: {\n dismiss: string;\n dismissToast: string;\n };\n\n table: {\n noData: string;\n loading: string;\n sortAscending: string;\n sortDescending: string;\n sortNone: string;\n rowsPerPage: string;\n pageOf: string;\n firstPage: string;\n lastPage: string;\n nextPage: string;\n previousPage: string;\n selectedRows: string;\n selectRow: string;\n selectAllRows: string;\n };\n\n pagination: {\n page: string;\n of: string;\n goToPage: string;\n firstPage: string;\n lastPage: string;\n nextPage: string;\n previousPage: string;\n };\n\n datepicker: {\n selectDate: string;\n selectTime: string;\n today: string;\n clear: string;\n previousMonth: string;\n nextMonth: string;\n previousYear: string;\n nextYear: string;\n months: string[];\n monthsShort: string[];\n weekdays: string[];\n weekdaysShort: string[];\n weekdaysMin: string[];\n };\n\n timepicker: {\n selectTime: string;\n hour: string;\n minute: string;\n second: string;\n am: string;\n pm: string;\n };\n\n upload: {\n dragDrop: string;\n browse: string;\n or: string;\n maxFileSize: string;\n allowedTypes: string;\n uploading: string;\n uploadComplete: string;\n uploadFailed: string;\n removeFile: string;\n };\n\n tree: {\n expand: string;\n collapse: string;\n expandAll: string;\n collapseAll: string;\n };\n\n accordion: {\n expand: string;\n collapse: string;\n };\n\n tabs: {\n selectTab: string;\n };\n\n slider: {\n value: string;\n minValue: string;\n maxValue: string;\n };\n\n rating: {\n rating: string;\n outOf: string;\n clear: string;\n };\n\n stepper: {\n step: string;\n of: string;\n completed: string;\n current: string;\n upcoming: string;\n };\n\n avatar: {\n image: string;\n status: string;\n online: string;\n offline: string;\n away: string;\n busy: string;\n };\n\n chip: {\n remove: string;\n removeChip: string;\n };\n\n dropdown: {\n open: string;\n close: string;\n selectOption: string;\n };\n\n popover: {\n close: string;\n };\n\n sidebar: {\n open: string;\n close: string;\n navigation: string;\n };\n\n progress: {\n progress: string;\n complete: string;\n percent: string;\n };\n\n spinner: {\n loading: string;\n };\n\n skeleton: {\n loading: string;\n };\n\n breadcrumb: {\n navigation: string;\n currentPage: string;\n };\n\n menu: {\n menu: string;\n submenu: string;\n };\n\n timeline: {\n timeline: string;\n event: string;\n };\n\n image: {\n loading: string;\n error: string;\n preview: string;\n closePreview: string;\n zoomIn: string;\n zoomOut: string;\n };\n}\n\n/**\n * Default English translations.\n */\nexport const TW_DEFAULT_TRANSLATIONS: TwTranslations = {\n common: {\n loading: 'Loading...',\n close: 'Close',\n cancel: 'Cancel',\n confirm: 'Confirm',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n clear: 'Clear',\n select: 'Select',\n selectAll: 'Select all',\n deselectAll: 'Deselect all',\n noResults: 'No results found',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n required: 'Required',\n optional: 'Optional',\n show: 'Show',\n hide: 'Hide',\n expand: 'Expand',\n collapse: 'Collapse',\n more: 'More',\n less: 'Less',\n yes: 'Yes',\n no: 'No',\n ok: 'OK',\n retry: 'Retry',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n first: 'First',\n last: 'Last',\n of: 'of',\n to: 'to',\n from: 'from',\n },\n\n button: {\n loading: 'Loading, please wait',\n },\n\n input: {\n placeholder: 'Enter value',\n clearInput: 'Clear input',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n characterCount: '{count} characters',\n maxCharacters: '{count} of {max} characters',\n },\n\n select: {\n placeholder: 'Select an option',\n noOptions: 'No options available',\n searchPlaceholder: 'Search...',\n clearSelection: 'Clear selection',\n selectOption: 'Select option',\n optionsAvailable: '{count} options available',\n },\n\n modal: {\n close: 'Close',\n closeModal: 'Close modal dialog',\n },\n\n alert: {\n dismiss: 'Dismiss',\n dismissAlert: 'Dismiss alert',\n },\n\n toast: {\n dismiss: 'Dismiss',\n dismissToast: 'Dismiss notification',\n },\n\n table: {\n noData: 'No data available',\n loading: 'Loading data...',\n sortAscending: 'Sort ascending',\n sortDescending: 'Sort descending',\n sortNone: 'No sorting',\n rowsPerPage: 'Rows per page',\n pageOf: 'Page {page} of {total}',\n firstPage: 'Go to first page',\n lastPage: 'Go to last page',\n nextPage: 'Go to next page',\n previousPage: 'Go to previous page',\n selectedRows: '{count} row(s) selected',\n selectRow: 'Select row',\n selectAllRows: 'Select all rows',\n },\n\n pagination: {\n page: 'Page',\n of: 'of',\n goToPage: 'Go to page {page}',\n firstPage: 'Go to first page',\n lastPage: 'Go to last page',\n nextPage: 'Go to next page',\n previousPage: 'Go to previous page',\n },\n\n datepicker: {\n selectDate: 'Select date',\n selectTime: 'Select time',\n today: 'Today',\n clear: 'Clear',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n previousYear: 'Previous year',\n nextYear: 'Next year',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthsShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n },\n\n timepicker: {\n selectTime: 'Select time',\n hour: 'Hour',\n minute: 'Minute',\n second: 'Second',\n am: 'AM',\n pm: 'PM',\n },\n\n upload: {\n dragDrop: 'Drag and drop files here',\n browse: 'Browse',\n or: 'or',\n maxFileSize: 'Maximum file size: {size}',\n allowedTypes: 'Allowed types: {types}',\n uploading: 'Uploading...',\n uploadComplete: 'Upload complete',\n uploadFailed: 'Upload failed',\n removeFile: 'Remove file',\n },\n\n tree: {\n expand: 'Expand',\n collapse: 'Collapse',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n },\n\n accordion: {\n expand: 'Expand section',\n collapse: 'Collapse section',\n },\n\n tabs: {\n selectTab: 'Select {tab} tab',\n },\n\n slider: {\n value: 'Value: {value}',\n minValue: 'Minimum value: {value}',\n maxValue: 'Maximum value: {value}',\n },\n\n rating: {\n rating: 'Rating',\n outOf: 'out of {max}',\n clear: 'Clear rating',\n },\n\n stepper: {\n step: 'Step {current}',\n of: 'of {total}',\n completed: 'Completed',\n current: 'Current',\n upcoming: 'Upcoming',\n },\n\n avatar: {\n image: 'Avatar image',\n status: 'Status',\n online: 'Online',\n offline: 'Offline',\n away: 'Away',\n busy: 'Busy',\n },\n\n chip: {\n remove: 'Remove',\n removeChip: 'Remove {label}',\n },\n\n dropdown: {\n open: 'Open menu',\n close: 'Close menu',\n selectOption: 'Select option',\n },\n\n popover: {\n close: 'Close popover',\n },\n\n sidebar: {\n open: 'Open sidebar',\n close: 'Close sidebar',\n navigation: 'Navigation',\n },\n\n progress: {\n progress: 'Progress',\n complete: 'Complete',\n percent: '{value}% complete',\n },\n\n spinner: {\n loading: 'Loading',\n },\n\n skeleton: {\n loading: 'Loading content',\n },\n\n breadcrumb: {\n navigation: 'Breadcrumb navigation',\n currentPage: 'Current page',\n },\n\n menu: {\n menu: 'Menu',\n submenu: 'Submenu',\n },\n\n timeline: {\n timeline: 'Timeline',\n event: 'Event',\n },\n\n image: {\n loading: 'Loading image',\n error: 'Failed to load image',\n preview: 'Preview image',\n closePreview: 'Close preview',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n },\n};\n\n/**\n * Injection token for providing custom translations.\n */\nexport const TW_TRANSLATIONS = new InjectionToken<Partial<TwTranslations>>('TW_TRANSLATIONS');\n\n/**\n * Injection token for the current locale.\n */\nexport const TW_LOCALE = new InjectionToken<string>('TW_LOCALE');\n\n/**\n * RTL language codes.\n */\nconst RTL_LANGUAGES = new Set(['ar', 'he', 'fa', 'ur', 'ps', 'sd', 'yi', 'dv']);\n\n/**\n * Service for internationalization and localization.\n */\n@Injectable({ providedIn: 'root' })\nexport class TwI18nService {\n private readonly document = inject(DOCUMENT);\n private readonly customTranslations = signal<Partial<TwTranslations> | null>(null);\n private readonly _locale = signal<string>('en');\n private readonly _direction = signal<'ltr' | 'rtl'>('ltr');\n\n /** Current locale */\n readonly locale = this._locale.asReadonly();\n\n /** Current text direction (ltr or rtl) */\n readonly direction = this._direction.asReadonly();\n\n /** Whether the current locale is RTL */\n readonly isRtl = computed(() => this._direction() === 'rtl');\n\n /** Current translations merged with defaults */\n readonly translations = computed(() => {\n const custom = this.customTranslations();\n if (!custom) return TW_DEFAULT_TRANSLATIONS;\n\n return this.deepMerge(\n TW_DEFAULT_TRANSLATIONS as unknown as Record<string, unknown>,\n custom as unknown as Record<string, unknown>\n ) as unknown as TwTranslations;\n });\n\n constructor() {\n // Try to detect locale from Angular's LOCALE_ID or browser\n try {\n const localeId = inject(LOCALE_ID, { optional: true });\n if (localeId) {\n this.setLocale(localeId);\n }\n } catch {\n // Use browser locale if available\n if (typeof navigator !== 'undefined') {\n this.setLocale(navigator.language || 'en');\n }\n }\n\n // Try to inject custom translations\n try {\n const customTranslations = inject(TW_TRANSLATIONS, { optional: true });\n if (customTranslations) {\n this.customTranslations.set(customTranslations);\n }\n } catch {\n // No custom translations provided\n }\n\n // Update document direction when direction changes\n effect(() => {\n const dir = this._direction();\n if (this.document.documentElement) {\n this.document.documentElement.setAttribute('dir', dir);\n }\n });\n }\n\n /**\n * Set the current locale.\n */\n setLocale(locale: string): void {\n this._locale.set(locale);\n const langCode = locale.split('-')[0].toLowerCase();\n this._direction.set(RTL_LANGUAGES.has(langCode) ? 'rtl' : 'ltr');\n }\n\n /**\n * Set custom translations (merged with defaults).\n */\n setTranslations(translations: Partial<TwTranslations>): void {\n this.customTranslations.set(translations);\n }\n\n /**\n * Get a translation string with optional interpolation.\n */\n translate(key: string, params?: Record<string, string | number>): string {\n const keys = key.split('.');\n let value: unknown = this.translations();\n\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = (value as Record<string, unknown>)[k];\n } else {\n return key; // Return key if translation not found\n }\n }\n\n if (typeof value !== 'string') {\n return key;\n }\n\n // Interpolate parameters\n if (params) {\n return value.replaceAll(/{(\\w+)}/g, (_, paramKey) => {\n return params[paramKey]?.toString() ?? `{${paramKey}}`;\n });\n }\n\n return value;\n }\n\n /**\n * Shorthand for translate().\n */\n t(key: string, params?: Record<string, string | number>): string {\n return this.translate(key, params);\n }\n\n /**\n * Get all translations for a component.\n */\n getComponentTranslations<K extends keyof TwTranslations>(component: K): TwTranslations[K] {\n return this.translations()[component];\n }\n\n private deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n result[key] = this.deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n );\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Provider function for custom translations.\n */\nexport function provideTwTranslations(translations: Partial<TwTranslations>) {\n return {\n provide: TW_TRANSLATIONS,\n useValue: translations,\n };\n}\n\n/**\n * Provider function for setting the locale.\n */\nexport function provideTwLocale(locale: string) {\n return {\n provide: TW_LOCALE,\n useValue: locale,\n };\n}\n","// Configuration\nexport * from './tw-config';\nexport * from './provide-tw-config';\n\n// Theme System\nexport * from './theme';\nexport * from './theme.service';\nexport * from './provide-tw-theme';\n\n// Services\nexport * from './tw-class.service';\nexport * from './aria.service';\nexport * from './i18n.service';\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Adds a material-design style ripple effect to any element\n *\n * @example\n * ```html\n * <button twRipple>Click me</button>\n * <button twRipple [rippleColor]=\"'rgba(255,255,255,0.3)'\">Light ripple</button>\n * <button twRipple [rippleDisabled]=\"isDisabled\">Conditional</button>\n * ```\n */\n@Directive({\n selector: '[twRipple]',\n standalone: true,\n host: {\n style: 'position: relative; overflow: hidden;',\n },\n})\nexport class TwRippleDirective implements OnDestroy, AfterViewInit {\n private readonly el: ElementRef;\n private readonly renderer: Renderer2;\n\n /** Color of the ripple effect */\n @Input() rippleColor = 'rgba(255, 255, 255, 0.4)';\n\n /** Duration of the ripple animation in milliseconds */\n @Input() rippleDuration = 600;\n\n /** Whether the ripple effect is disabled */\n @Input({ transform: booleanAttribute }) rippleDisabled = false;\n\n /** Whether to center the ripple regardless of click position */\n @Input({ transform: booleanAttribute }) rippleCentered = false;\n\n private readonly activeRipples: HTMLElement[] = [];\n private initialized = false;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n }\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n onInteraction(event: MouseEvent | TouchEvent): void {\n if (this.rippleDisabled || !this.initialized) return;\n\n this.createRipple(event);\n }\n\n private createRipple(event: MouseEvent | TouchEvent): void {\n const el = this.el.nativeElement as HTMLElement;\n const rect = el.getBoundingClientRect();\n\n const ripple = this.renderer.createElement('span');\n\n // Calculate ripple size (should cover the entire element with some margin)\n const diameter = Math.max(rect.width, rect.height);\n const size = diameter * 2.5;\n\n // Calculate position\n let x: number;\n let y: number;\n\n if (this.rippleCentered) {\n x = rect.width / 2;\n y = rect.height / 2;\n } else if (event instanceof MouseEvent) {\n x = event.clientX - rect.left;\n y = event.clientY - rect.top;\n } else if (event.touches && event.touches[0]) {\n x = event.touches[0].clientX - rect.left;\n y = event.touches[0].clientY - rect.top;\n } else {\n x = rect.width / 2;\n y = rect.height / 2;\n }\n\n // Apply styles - use inline styles for maximum compatibility\n ripple.style.cssText = `\n position: absolute;\n border-radius: 50%;\n background-color: ${this.rippleColor};\n width: ${size}px;\n height: ${size}px;\n left: ${x - size / 2}px;\n top: ${y - size / 2}px;\n transform: scale(0);\n opacity: 0.6;\n pointer-events: none;\n z-index: 0;\n `;\n\n this.renderer.appendChild(el, ripple);\n this.activeRipples.push(ripple);\n\n // Trigger animation using Web Animations API for smoother animation\n const animation = ripple.animate(\n [\n { transform: 'scale(0)', opacity: 0.6 },\n { transform: 'scale(1)', opacity: 0 },\n ],\n {\n duration: this.rippleDuration,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n fill: 'forwards',\n }\n );\n\n // Remove ripple after animation\n animation.onfinish = () => {\n this.removeRipple(ripple);\n };\n }\n\n private removeRipple(ripple: HTMLElement): void {\n const index = this.activeRipples.indexOf(ripple);\n if (index > -1) {\n this.activeRipples.splice(index, 1);\n }\n\n if (ripple.parentNode) {\n this.renderer.removeChild(this.el.nativeElement, ripple);\n }\n }\n\n ngOnDestroy(): void {\n this.activeRipples.forEach(ripple => {\n this.removeRipple(ripple);\n });\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Adds a tooltip to any element with customizable position and styling\n *\n * @example\n * ```html\n * <button twTooltip=\"Click to save\">Save</button>\n * <button twTooltip=\"Delete item\" tooltipPosition=\"bottom\">Delete</button>\n * <span [twTooltip]=\"dynamicMessage\" [tooltipClass]=\"'bg-red-500'\">Hover me</span>\n * ```\n */\n@Directive({\n selector: '[twTooltip]',\n standalone: true,\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focus)': 'show()',\n '(blur)': 'hide()',\n },\n})\nexport class TwTooltipDirective implements OnDestroy, OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /** The tooltip text content */\n @Input('twTooltip') content = '';\n\n /** Position of the tooltip relative to the host element */\n @Input() tooltipPosition: TooltipPosition = 'top';\n\n /** Additional CSS classes to apply to the tooltip */\n @Input() tooltipClass = '';\n\n /** Delay before showing the tooltip in milliseconds */\n @Input({ transform: numberAttribute }) tooltipShowDelay = 200;\n\n /** Delay before hiding the tooltip in milliseconds */\n @Input({ transform: numberAttribute }) tooltipHideDelay = 0;\n\n /** Whether the tooltip is disabled */\n @Input({ transform: booleanAttribute }) tooltipDisabled = false;\n\n /** Custom z-index for the tooltip */\n @Input({ transform: numberAttribute }) tooltipZIndex = 9999;\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private isVisible = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['content'] && this.tooltipElement) {\n this.tooltipElement.textContent = this.content;\n this.updatePosition();\n }\n }\n\n show(): void {\n if (this.tooltipDisabled || !this.content) return;\n\n this.clearTimeouts();\n\n this.showTimeout = setTimeout(() => {\n this.createTooltip();\n this.isVisible = true;\n }, this.tooltipShowDelay);\n }\n\n hide(): void {\n this.clearTimeouts();\n\n this.hideTimeout = setTimeout(() => {\n this.destroyTooltip();\n this.isVisible = false;\n }, this.tooltipHideDelay);\n }\n\n private createTooltip(): void {\n if (this.tooltipElement) return;\n\n this.tooltipElement = this.renderer.createElement('div');\n this.tooltipElement!.textContent = this.content;\n\n // Base tooltip styles using Tailwind classes\n const baseClasses = [\n 'fixed',\n 'px-2',\n 'py-1',\n 'text-sm',\n 'font-medium',\n 'text-white',\n 'bg-slate-900',\n 'rounded',\n 'shadow-lg',\n 'pointer-events-none',\n 'whitespace-nowrap',\n 'opacity-0',\n 'transition-opacity',\n 'duration-150',\n ];\n\n // Add custom classes\n const allClasses = [...baseClasses, ...this.tooltipClass.split(' ').filter(Boolean)];\n allClasses.forEach(cls => {\n this.renderer.addClass(this.tooltipElement, cls);\n });\n\n this.renderer.setStyle(this.tooltipElement, 'z-index', this.tooltipZIndex.toString());\n\n // Add arrow\n const arrow = this.renderer.createElement('div');\n this.renderer.addClass(arrow, 'absolute');\n this.renderer.addClass(arrow, 'w-2');\n this.renderer.addClass(arrow, 'h-2');\n this.renderer.addClass(arrow, 'bg-slate-900');\n this.renderer.addClass(arrow, 'rotate-45');\n this.setArrowPosition(arrow);\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n // Add to body\n this.renderer.appendChild(document.body, this.tooltipElement);\n\n // Position and show\n this.updatePosition();\n\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.removeClass(this.tooltipElement, 'opacity-0');\n this.renderer.addClass(this.tooltipElement, 'opacity-100');\n }\n });\n }\n\n private setArrowPosition(arrow: HTMLElement): void {\n switch (this.tooltipPosition) {\n case 'top': {\n this.renderer.setStyle(arrow, 'bottom', '-4px');\n this.renderer.setStyle(arrow, 'left', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateX(-50%) rotate(45deg)');\n break;\n }\n case 'bottom': {\n this.renderer.setStyle(arrow, 'top', '-4px');\n this.renderer.setStyle(arrow, 'left', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateX(-50%) rotate(45deg)');\n break;\n }\n case 'left': {\n this.renderer.setStyle(arrow, 'right', '-4px');\n this.renderer.setStyle(arrow, 'top', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateY(-50%) rotate(45deg)');\n break;\n }\n case 'right': {\n this.renderer.setStyle(arrow, 'left', '-4px');\n this.renderer.setStyle(arrow, 'top', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateY(-50%) rotate(45deg)');\n break;\n }\n }\n }\n\n private updatePosition(): void {\n if (!this.tooltipElement) return;\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const gap = 8;\n\n let top: number;\n let left: number;\n\n switch (this.tooltipPosition) {\n case 'top': {\n top = hostRect.top - tooltipRect.height - gap;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n break;\n }\n case 'bottom': {\n top = hostRect.bottom + gap;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n break;\n }\n case 'left': {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left - tooltipRect.width - gap;\n break;\n }\n case 'right': {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + gap;\n break;\n }\n }\n\n // Keep tooltip within viewport\n const padding = 8;\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding));\n top = Math.max(padding, Math.min(top, window.innerHeight - tooltipRect.height - padding));\n\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n }\n\n private destroyTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }\n\n private clearTimeouts(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimeouts();\n this.destroyTooltip();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\n/**\n * Emits an event when a click occurs outside the host element\n * Useful for closing dropdowns, modals, and other overlays\n *\n * @example\n * ```html\n * <div (twClickOutside)=\"closeDropdown()\">\n * Dropdown content\n * </div>\n *\n * <div\n * (twClickOutside)=\"closeMenu()\"\n * [clickOutsideEnabled]=\"isMenuOpen\"\n * [clickOutsideExclude]=\"['.menu-trigger']\">\n * Menu content\n * </div>\n * ```\n */\n@Directive({\n selector: '[twClickOutside]',\n standalone: true,\n})\nexport class TwClickOutsideDirective implements OnInit, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n /** Event emitted when a click occurs outside the element */\n @Output('twClickOutside') clickOutside = new EventEmitter<MouseEvent>();\n\n /** Whether the click outside detection is enabled */\n @Input({ transform: booleanAttribute }) clickOutsideEnabled = true;\n\n /** Array of selectors to exclude from triggering the click outside event */\n @Input() clickOutsideExclude: string[] = [];\n\n /** Delay before starting to listen for clicks (prevents immediate triggering) */\n @Input() clickOutsideDelay = 0;\n\n private clickHandler: ((event: MouseEvent) => void) | null = null;\n private isListening = false;\n private delayTimeout: ReturnType<typeof setTimeout> | null = null;\n\n ngOnInit(): void {\n this.setupListener();\n }\n\n private setupListener(): void {\n if (this.clickOutsideDelay > 0) {\n this.delayTimeout = setTimeout(() => {\n this.attachListener();\n }, this.clickOutsideDelay);\n } else {\n // Use a microtask delay to prevent immediate triggering\n Promise.resolve().then(() => {\n this.attachListener();\n });\n }\n }\n\n private attachListener(): void {\n if (this.isListening) return;\n\n this.clickHandler = (event: MouseEvent) => {\n if (!this.clickOutsideEnabled) return;\n\n const target = event.target as HTMLElement;\n\n // Check if click was inside the host element\n if (this.el.nativeElement.contains(target)) return;\n\n // Check if click was on an excluded element\n if (this.isExcluded(target)) return;\n\n // Run inside Angular zone to trigger change detection\n this.ngZone.run(() => {\n this.clickOutside.emit(event);\n });\n };\n\n // Run outside Angular zone for performance\n this.ngZone.runOutsideAngular(() => {\n document.addEventListener('click', this.clickHandler!, true);\n document.addEventListener('touchstart', this.clickHandler as EventListener, true);\n });\n\n this.isListening = true;\n }\n\n private isExcluded(target: HTMLElement): boolean {\n for (const selector of this.clickOutsideExclude) {\n // Check if the target matches the selector or is a descendant\n const excludedElements = Array.from(document.querySelectorAll(selector));\n for (const excluded of excludedElements) {\n if (excluded.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private detachListener(): void {\n if (!this.isListening || !this.clickHandler) return;\n\n document.removeEventListener('click', this.clickHandler, true);\n document.removeEventListener('touchstart', this.clickHandler as EventListener, true);\n this.clickHandler = null;\n this.isListening = false;\n }\n\n ngOnDestroy(): void {\n if (this.delayTimeout) {\n clearTimeout(this.delayTimeout);\n }\n this.detachListener();\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(', ');\n\n/**\n * Traps focus within the host element, cycling through focusable elements\n * Essential for accessible modals and dialogs\n *\n * @example\n * ```html\n * <div twFocusTrap>\n * <input type=\"text\" placeholder=\"First input\">\n * <button>Action</button>\n * <button>Close</button>\n * </div>\n *\n * <div twFocusTrap [focusTrapAutoFocus]=\"true\" [focusTrapRestoreFocus]=\"true\">\n * Modal content\n * </div>\n * ```\n */\n@Directive({\n selector: '[twFocusTrap]',\n standalone: true,\n})\nexport class TwFocusTrapDirective implements OnInit, AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n /** Whether the focus trap is active */\n @Input({ alias: 'twFocusTrap', transform: booleanAttribute }) enabled = true;\n\n /** Whether to auto-focus the first focusable element when the trap is initialized */\n @Input({ transform: booleanAttribute }) focusTrapAutoFocus = true;\n\n /** Whether to restore focus to the previously focused element when the trap is destroyed */\n @Input({ transform: booleanAttribute }) focusTrapRestoreFocus = true;\n\n /** Selector for the initial focus target (if not first focusable) */\n @Input() focusTrapInitialFocus = '';\n\n private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n private previouslyFocusedElement: HTMLElement | null = null;\n\n ngOnInit(): void {\n // Store the currently focused element\n if (this.focusTrapRestoreFocus) {\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\n }\n }\n\n ngAfterViewInit(): void {\n if (this.enabled) {\n this.setupTrap();\n\n if (this.focusTrapAutoFocus) {\n // Delay focus to ensure DOM is ready\n setTimeout(() => {\n this.focusInitial();\n }, 0);\n }\n }\n }\n\n private setupTrap(): void {\n this.keydownHandler = (event: KeyboardEvent) => {\n if (!this.enabled || event.key !== 'Tab') return;\n\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n // Shift+Tab: if on first element, go to last\n if (document.activeElement === firstElement && lastElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab: if on last element, go to first\n if (document.activeElement === lastElement && firstElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n this.ngZone.runOutsideAngular(() => {\n this.el.nativeElement.addEventListener('keydown', this.keydownHandler);\n });\n }\n\n private getFocusableElements(): HTMLElement[] {\n const elements = this.el.nativeElement.querySelectorAll(FOCUSABLE_SELECTOR);\n return [...elements].filter(el => {\n const htmlEl = el as HTMLElement;\n return (\n htmlEl.offsetWidth > 0 &&\n htmlEl.offsetHeight > 0 &&\n getComputedStyle(htmlEl).visibility !== 'hidden'\n );\n }) as HTMLElement[];\n }\n\n private focusInitial(): void {\n if (this.focusTrapInitialFocus) {\n const target = this.el.nativeElement.querySelector(this.focusTrapInitialFocus);\n if (target) {\n target.focus();\n return;\n }\n }\n\n // Focus first focusable element\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n } else {\n // If no focusable elements, make the container focusable and focus it\n this.el.nativeElement.setAttribute('tabindex', '-1');\n this.el.nativeElement.focus();\n }\n }\n\n /** Manually focus the first focusable element */\n focusFirst(): void {\n const elements = this.getFocusableElements();\n if (elements.length > 0) {\n elements[0].focus();\n }\n }\n\n /** Manually focus the last focusable element */\n focusLast(): void {\n const elements = this.getFocusableElements();\n if (elements.length > 0) {\n elements[elements.length - 1].focus();\n }\n }\n\n ngOnDestroy(): void {\n if (this.keydownHandler) {\n this.el.nativeElement.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n\n // Restore focus to the previously focused element\n if (this.focusTrapRestoreFocus && this.previouslyFocusedElement) {\n try {\n this.previouslyFocusedElement.focus();\n } catch {\n // Element may no longer be focusable\n }\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { TwClassService } from '../core/tw-class.service';\n\n/**\n * Applies Tailwind classes with intelligent conflict resolution\n * Merges multiple class inputs, with later classes overriding conflicting earlier ones\n *\n * @example\n * ```html\n * <!-- Base classes with override -->\n * <div [twClass]=\"'px-4 py-2'\" [twClassMerge]=\"'px-8'\">\n * Will have px-8 py-2\n * </div>\n *\n * <!-- Conditional classes -->\n * <button\n * [twClass]=\"'bg-blue-500 text-white'\"\n * [twClassIf]=\"{ 'bg-red-500': hasError, 'opacity-50 cursor-not-allowed': isDisabled }\">\n * Button\n * </button>\n * ```\n */\n@Directive({\n selector: '[twClass]',\n standalone: true,\n})\nexport class TwClassDirective implements OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly twClass = inject(TwClassService);\n\n /** Base classes to apply */\n @Input('twClass') baseClasses = '';\n\n /** Additional classes to merge (will override conflicting base classes) */\n @Input() twClassMerge = '';\n\n /** Conditional classes (object with class strings as keys and booleans as values) */\n @Input() twClassIf: Record<string, boolean | undefined> = {};\n\n private appliedClasses: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['baseClasses'] || changes['twClassMerge'] || changes['twClassIf']) {\n this.updateClasses();\n }\n }\n\n private updateClasses(): void {\n // Remove previously applied classes\n this.appliedClasses.forEach(cls => {\n this.renderer.removeClass(this.el.nativeElement, cls);\n });\n\n // Get conditional classes\n const conditionalClasses = Object.entries(this.twClassIf)\n .filter(([, condition]) => condition)\n .map(([classes]) => classes)\n .join(' ');\n\n // Merge all classes\n const mergedClasses = this.twClass.merge(\n this.baseClasses,\n this.twClassMerge,\n conditionalClasses\n );\n\n // Apply new classes\n this.appliedClasses = mergedClasses.split(' ').filter(Boolean);\n this.appliedClasses.forEach(cls => {\n this.renderer.addClass(this.el.nativeElement, cls);\n });\n }\n}\n\n/**\n * Simple variant class directive for quick variant switching\n *\n * @example\n * ```html\n * <button [twVariant]=\"buttonVariant\">Click me</button>\n * ```\n */\n@Directive({\n selector: '[twVariant]',\n standalone: true,\n})\nexport class TwVariantDirective implements OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly twClassService = inject(TwClassService);\n\n /** The variant name (primary, secondary, success, warning, danger, info, neutral) */\n @Input('twVariant') variant = '';\n\n private appliedClasses: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['variant']) {\n this.updateVariant();\n }\n }\n\n private updateVariant(): void {\n // Remove previously applied classes\n this.appliedClasses.forEach(cls => {\n this.renderer.removeClass(this.el.nativeElement, cls);\n });\n\n // Get variant classes\n const variantClasses = this.twClassService.getVariantClasses(this.variant);\n\n // Apply new classes\n this.appliedClasses = variantClasses.split(' ').filter(Boolean);\n this.appliedClasses.forEach(cls => {\n this.renderer.addClass(this.el.nativeElement, cls);\n });\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * Directive to automatically focus an element when it's rendered\n *\n * @example\n * ```html\n * <input twAutoFocus />\n * <input twAutoFocus [autoFocusDelay]=\"100\" />\n * <input [twAutoFocus]=\"shouldFocus\" />\n * ```\n */\n@Directive({\n selector: '[twAutoFocus]',\n standalone: true,\n})\nexport class TwAutoFocusDirective implements AfterViewInit {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n /** Whether auto-focus is enabled */\n @Input({ alias: 'twAutoFocus', transform: booleanAttribute })\n autoFocusEnabled = true;\n\n /** Delay in milliseconds before focusing */\n @Input({ transform: numberAttribute })\n autoFocusDelay = 0;\n\n /** Whether to select text content (for inputs) */\n @Input({ transform: booleanAttribute })\n autoFocusSelect = false;\n\n /** Whether to scroll element into view */\n @Input({ transform: booleanAttribute })\n autoFocusScroll = false;\n\n ngAfterViewInit(): void {\n if (!this.autoFocusEnabled) return;\n\n const focus = () => {\n const element = this.el.nativeElement;\n\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n element.focus();\n if (this.autoFocusSelect) {\n element.select();\n }\n } else if ('focus' in element && typeof element.focus === 'function') {\n element.focus();\n }\n\n if (this.autoFocusScroll) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n };\n\n if (this.autoFocusDelay > 0) {\n setTimeout(focus, this.autoFocusDelay);\n } else {\n // Use requestAnimationFrame for immediate but safe focus\n requestAnimationFrame(focus);\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface InViewEvent {\n isIntersecting: boolean;\n intersectionRatio: number;\n entry: IntersectionObserverEntry;\n}\n\n/**\n * Directive to detect when an element enters or leaves the viewport\n * Uses IntersectionObserver for performance\n *\n * @example\n * ```html\n * <div twInView (inView)=\"onVisible($event)\">Lazy content</div>\n * <div twInView [inViewThreshold]=\"0.5\" (enterView)=\"onEnter()\">50% visible trigger</div>\n * <div twInView [inViewOnce]=\"true\" (enterView)=\"loadOnce()\">Load once when visible</div>\n * ```\n */\n@Directive({\n selector: '[twInView]',\n standalone: true,\n})\nexport class TwInViewDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n private observer: IntersectionObserver | null = null;\n\n /** Root margin for intersection observer (CSS margin syntax) */\n @Input()\n inViewRootMargin = '0px';\n\n /** Threshold(s) for triggering - 0 to 1, or array of values */\n @Input()\n inViewThreshold: number | number[] = 0;\n\n /** Only trigger once when element enters view */\n @Input({ transform: booleanAttribute })\n inViewOnce = false;\n\n /** Disable the observer */\n @Input({ transform: booleanAttribute })\n inViewDisabled = false;\n\n /** Emits whenever intersection state changes */\n @Output()\n inView = new EventEmitter<InViewEvent>();\n\n /** Emits when element enters the viewport */\n @Output()\n enterView = new EventEmitter<InViewEvent>();\n\n /** Emits when element leaves the viewport */\n @Output()\n leaveView = new EventEmitter<InViewEvent>();\n\n ngOnInit(): void {\n if (this.inViewDisabled || typeof IntersectionObserver === 'undefined') {\n return;\n }\n\n this.observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n const event: InViewEvent = {\n isIntersecting: entry.isIntersecting,\n intersectionRatio: entry.intersectionRatio,\n entry,\n };\n\n this.inView.emit(event);\n\n if (entry.isIntersecting) {\n this.enterView.emit(event);\n\n if (this.inViewOnce && this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n } else {\n this.leaveView.emit(event);\n }\n });\n },\n {\n rootMargin: this.inViewRootMargin,\n threshold: this.inViewThreshold,\n }\n );\n\n this.observer.observe(this.el.nativeElement);\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface LongPressEvent {\n element: HTMLElement;\n duration: number;\n clientX: number;\n clientY: number;\n}\n\n/**\n * Directive to detect long press/touch events\n *\n * @example\n * ```html\n * <button twLongPress (longPress)=\"onLongPress($event)\">Hold me</button>\n * <button twLongPress [longPressDuration]=\"1000\" (longPress)=\"onLongPress($event)\">Hold 1 second</button>\n * ```\n */\n@Directive({\n selector: '[twLongPress]',\n standalone: true,\n})\nexport class TwLongPressDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private timeout: ReturnType<typeof setTimeout> | null = null;\n private startTime = 0;\n private startX = 0;\n private startY = 0;\n\n /** Duration in ms to trigger long press (default: 500ms) */\n @Input({ transform: numberAttribute })\n longPressDuration = 500;\n\n /** Maximum movement allowed during press (default: 10px) */\n @Input({ transform: numberAttribute })\n longPressMoveTolerance = 10;\n\n /** Disable the directive */\n @Input({ transform: booleanAttribute })\n longPressDisabled = false;\n\n /** Prevent default behavior on long press */\n @Input({ transform: booleanAttribute })\n longPressPreventDefault = true;\n\n /** Emits when long press is detected */\n @Output()\n longPress = new EventEmitter<LongPressEvent>();\n\n /** Emits when press starts */\n @Output()\n pressStart = new EventEmitter<void>();\n\n /** Emits when press ends (before long press threshold) */\n @Output()\n pressEnd = new EventEmitter<void>();\n\n private readonly onPointerDown = (event: PointerEvent): void => {\n if (this.longPressDisabled) return;\n\n this.startTime = Date.now();\n this.startX = event.clientX;\n this.startY = event.clientY;\n\n this.pressStart.emit();\n\n this.timeout = setTimeout(() => {\n this.ngZone.run(() => {\n this.longPress.emit({\n element: this.el.nativeElement,\n duration: this.longPressDuration,\n clientX: event.clientX,\n clientY: event.clientY,\n });\n });\n\n if (this.longPressPreventDefault) {\n event.preventDefault();\n }\n }, this.longPressDuration);\n };\n\n private readonly onPointerUp = (): void => {\n this.cancel();\n this.pressEnd.emit();\n };\n\n private readonly onPointerMove = (event: PointerEvent): void => {\n if (!this.timeout) return;\n\n const deltaX = Math.abs(event.clientX - this.startX);\n const deltaY = Math.abs(event.clientY - this.startY);\n\n if (deltaX > this.longPressMoveTolerance || deltaY > this.longPressMoveTolerance) {\n this.cancel();\n }\n };\n\n private readonly onContextMenu = (event: Event): void => {\n if (this.longPressPreventDefault && this.timeout) {\n event.preventDefault();\n }\n };\n\n private cancel(): void {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('pointerdown', this.onPointerDown);\n element.addEventListener('pointerup', this.onPointerUp);\n element.addEventListener('pointerleave', this.onPointerUp);\n element.addEventListener('pointermove', this.onPointerMove);\n element.addEventListener('contextmenu', this.onContextMenu);\n });\n }\n\n ngOnDestroy(): void {\n this.cancel();\n const element = this.el.nativeElement;\n\n element.removeEventListener('pointerdown', this.onPointerDown);\n element.removeEventListener('pointerup', this.onPointerUp);\n element.removeEventListener('pointerleave', this.onPointerUp);\n element.removeEventListener('pointermove', this.onPointerMove);\n element.removeEventListener('contextmenu', this.onContextMenu);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\n\n/**\n * Directive to debounce click events, preventing accidental double-clicks\n *\n * @example\n * ```html\n * <button twDebounceClick (debounceClick)=\"onSave()\">Save</button>\n * <button twDebounceClick [debounceTime]=\"500\" (debounceClick)=\"onSubmit()\">Submit</button>\n * ```\n */\n@Directive({\n selector: '[twDebounceClick]',\n standalone: true,\n})\nexport class TwDebounceClickDirective implements OnInit, OnDestroy {\n private readonly clicks = new Subject<MouseEvent>();\n private subscription: Subscription | null = null;\n\n /** Debounce time in milliseconds (default: 300ms) */\n @Input({ transform: numberAttribute })\n debounceTime = 300;\n\n /** Disable debouncing */\n @Input({ transform: booleanAttribute })\n debounceDisabled = false;\n\n /** Emits debounced click events */\n @Output()\n debounceClick = new EventEmitter<MouseEvent>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.debounceDisabled) {\n this.debounceClick.emit(event);\n } else {\n this.clicks.next(event);\n }\n }\n\n ngOnInit(): void {\n this.subscription = this.clicks.pipe(debounceTime(this.debounceTime)).subscribe(event => {\n this.debounceClick.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\nexport interface CopyClipboardEvent {\n success: boolean;\n text: string;\n error?: Error;\n}\n\n/**\n * Directive to copy text to clipboard on click\n *\n * @example\n * ```html\n * <button twCopyClipboard=\"Text to copy\" (copied)=\"onCopied($event)\">Copy</button>\n * <button [twCopyClipboard]=\"dynamicText\" (copied)=\"onCopied($event)\">Copy Dynamic</button>\n * ```\n */\n@Directive({\n selector: '[twCopyClipboard]',\n standalone: true,\n})\nexport class TwCopyClipboardDirective {\n /** Text to copy to clipboard */\n @Input({ required: true })\n twCopyClipboard = '';\n\n /** Disable copying */\n @Input({ transform: booleanAttribute })\n copyDisabled = false;\n\n /** Emits when copy operation completes */\n @Output()\n copied = new EventEmitter<CopyClipboardEvent>();\n\n @HostListener('click')\n async onClick(): Promise<void> {\n if (this.copyDisabled || !this.twCopyClipboard) return;\n\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(this.twCopyClipboard);\n this.copied.emit({ success: true, text: this.twCopyClipboard });\n } else {\n // Fallback for older browsers\n this.fallbackCopy(this.twCopyClipboard);\n this.copied.emit({ success: true, text: this.twCopyClipboard });\n }\n } catch (error) {\n this.copied.emit({\n success: false,\n text: this.twCopyClipboard,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n private fallbackCopy(text: string): void {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.left = '-9999px';\n textarea.style.top = '-9999px';\n document.body.append(textarea);\n textarea.focus();\n textarea.select();\n\n try {\n document.execCommand('copy');\n } finally {\n textarea.remove();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport interface KeyboardShortcutEvent {\n key: string;\n event: KeyboardEvent;\n shortcut: string;\n}\n\n/**\n * Directive to handle keyboard shortcuts\n *\n * @example\n * ```html\n * <div twKeyboardShortcut=\"ctrl+s\" (shortcutPressed)=\"onSave($event)\">Press Ctrl+S to save</div>\n * <div twKeyboardShortcut=\"ctrl+shift+p\" (shortcutPressed)=\"openPalette()\">Command Palette</div>\n * <div twKeyboardShortcut=\"escape\" (shortcutPressed)=\"onEscape()\">Press ESC</div>\n * ```\n *\n * Supported modifiers: ctrl, alt, shift, meta (cmd on Mac)\n * Key names: Any KeyboardEvent.key value (a-z, 0-9, enter, escape, space, etc.)\n */\n@Directive({\n selector: '[twKeyboardShortcut]',\n standalone: true,\n})\nexport class TwKeyboardShortcutDirective implements OnInit, OnDestroy {\n private readonly ngZone: NgZone;\n private readonly platformId: object;\n\n constructor() {\n this.ngZone = inject(NgZone);\n this.platformId = inject(PLATFORM_ID);\n }\n\n /** Keyboard shortcut string (e.g., \"ctrl+s\", \"ctrl+shift+p\", \"escape\") */\n @Input({ required: true })\n twKeyboardShortcut = '';\n\n /** Listen globally (document) instead of element-only */\n @Input({ transform: booleanAttribute })\n shortcutGlobal = true;\n\n /** Prevent default browser behavior */\n @Input({ transform: booleanAttribute })\n shortcutPreventDefault = true;\n\n /** Stop event propagation */\n @Input({ transform: booleanAttribute })\n shortcutStopPropagation = false;\n\n /** Disable the shortcut */\n @Input({ transform: booleanAttribute })\n shortcutDisabled = false;\n\n /** Emits when the shortcut is pressed */\n @Output()\n shortcutPressed = new EventEmitter<KeyboardShortcutEvent>();\n\n private readonly keydownHandler = (event: Event): void => {\n const keyEvent = event as KeyboardEvent;\n if (this.shortcutDisabled) return;\n\n const shortcut = this.twKeyboardShortcut.toLowerCase();\n const parts = shortcut.split('+').map(p => p.trim());\n\n const key = parts.at(-1);\n const modifiers = new Set(parts.slice(0, -1));\n\n const ctrlRequired = modifiers.has('ctrl') || modifiers.has('control');\n const altRequired = modifiers.has('alt');\n const shiftRequired = modifiers.has('shift');\n const metaRequired = modifiers.has('meta') || modifiers.has('cmd');\n\n const ctrlPressed = keyEvent.ctrlKey || keyEvent.metaKey; // Treat meta as ctrl for cross-platform\n const altPressed = keyEvent.altKey;\n const shiftPressed = keyEvent.shiftKey;\n const metaPressed = keyEvent.metaKey;\n\n const keyMatches = keyEvent.key.toLowerCase() === key || keyEvent.code.toLowerCase() === key;\n\n const modifiersMatch =\n ctrlRequired === ctrlPressed &&\n altRequired === altPressed &&\n shiftRequired === shiftPressed &&\n (metaRequired ? metaPressed : true);\n\n if (keyMatches && modifiersMatch) {\n if (this.shortcutPreventDefault) {\n keyEvent.preventDefault();\n }\n if (this.shortcutStopPropagation) {\n keyEvent.stopPropagation();\n }\n\n this.ngZone.run(() => {\n this.shortcutPressed.emit({\n key: keyEvent.key,\n event: keyEvent,\n shortcut: this.twKeyboardShortcut,\n });\n });\n }\n };\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.ngZone.runOutsideAngular(() => {\n const target = this.shortcutGlobal ? document : document.body;\n target.addEventListener('keydown', this.keydownHandler);\n });\n }\n\n ngOnDestroy(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const target = this.shortcutGlobal ? document : document.body;\n target.removeEventListener('keydown', this.keydownHandler);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport type SwipeDirection = 'left' | 'right' | 'up' | 'down';\n\nexport interface SwipeEvent {\n direction: SwipeDirection;\n distance: number;\n velocity: number;\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n duration: number;\n}\n\n/**\n * Directive to detect swipe gestures\n *\n * @example\n * ```html\n * <div twSwipe (swipe)=\"onSwipe($event)\">Swipe me</div>\n * <div twSwipe (swipeLeft)=\"goNext()\" (swipeRight)=\"goPrev()\">Carousel</div>\n * <div twSwipe [swipeThreshold]=\"100\" (swipeUp)=\"refresh()\">Pull to refresh</div>\n * ```\n */\n@Directive({\n selector: '[twSwipe]',\n standalone: true,\n})\nexport class TwSwipeDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private startX = 0;\n private startY = 0;\n private startTime = 0;\n\n /** Minimum distance in pixels to trigger swipe (default: 50px) */\n @Input({ transform: numberAttribute })\n swipeThreshold = 50;\n\n /** Maximum time in ms for the swipe gesture (default: 300ms) */\n @Input({ transform: numberAttribute })\n swipeTimeout = 300;\n\n /** Minimum velocity to trigger swipe (pixels/ms) */\n @Input({ transform: numberAttribute })\n swipeVelocity = 0.3;\n\n /** Disable swipe detection */\n @Input({ transform: booleanAttribute })\n swipeDisabled = false;\n\n /** Emits on any swipe */\n @Output()\n swipe = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe left */\n @Output()\n swipeLeft = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe right */\n @Output()\n swipeRight = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe up */\n @Output()\n swipeUp = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe down */\n @Output()\n swipeDown = new EventEmitter<SwipeEvent>();\n\n private readonly onTouchStart = (event: TouchEvent): void => {\n if (this.swipeDisabled || event.touches.length !== 1) return;\n\n const touch = event.touches[0];\n this.startX = touch.clientX;\n this.startY = touch.clientY;\n this.startTime = Date.now();\n };\n\n private readonly onTouchEnd = (event: TouchEvent): void => {\n if (this.swipeDisabled || event.changedTouches.length !== 1) return;\n\n const touch = event.changedTouches[0];\n const endX = touch.clientX;\n const endY = touch.clientY;\n const endTime = Date.now();\n\n const deltaX = endX - this.startX;\n const deltaY = endY - this.startY;\n const duration = endTime - this.startTime;\n\n if (duration > this.swipeTimeout) return;\n\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n\n // Determine if horizontal or vertical swipe\n const isHorizontal = absX > absY;\n const distance = isHorizontal ? absX : absY;\n const velocity = distance / duration;\n\n if (distance < this.swipeThreshold || velocity < this.swipeVelocity) return;\n\n let direction: SwipeDirection;\n if (isHorizontal) {\n direction = deltaX > 0 ? 'right' : 'left';\n } else {\n direction = deltaY > 0 ? 'down' : 'up';\n }\n\n const swipeEvent: SwipeEvent = {\n direction,\n distance,\n velocity,\n startX: this.startX,\n startY: this.startY,\n endX,\n endY,\n duration,\n };\n\n this.ngZone.run(() => {\n this.swipe.emit(swipeEvent);\n\n switch (direction) {\n case 'left': {\n this.swipeLeft.emit(swipeEvent);\n break;\n }\n case 'right': {\n this.swipeRight.emit(swipeEvent);\n break;\n }\n case 'up': {\n this.swipeUp.emit(swipeEvent);\n break;\n }\n case 'down': {\n this.swipeDown.emit(swipeEvent);\n break;\n }\n }\n });\n };\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('touchstart', this.onTouchStart, { passive: true });\n element.addEventListener('touchend', this.onTouchEnd, { passive: true });\n });\n }\n\n ngOnDestroy(): void {\n const element = this.el.nativeElement;\n element.removeEventListener('touchstart', this.onTouchStart);\n element.removeEventListener('touchend', this.onTouchEnd);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\n\nexport interface ResizeEvent {\n width: number;\n height: number;\n entry: ResizeObserverEntry;\n}\n\n/**\n * Directive to observe element size changes\n *\n * @example\n * ```html\n * <div twResizeObserver (resize)=\"onResize($event)\">Resizable content</div>\n * <div twResizeObserver [resizeDebounce]=\"100\" (resize)=\"onResize($event)\">Debounced resize</div>\n * ```\n */\n@Directive({\n selector: '[twResizeObserver]',\n standalone: true,\n})\nexport class TwResizeObserverDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private observer: ResizeObserver | null = null;\n private readonly resizeSubject = new Subject<ResizeEvent>();\n private subscription: Subscription | null = null;\n\n /** Debounce time in milliseconds (default: 0 = no debounce) */\n @Input({ transform: numberAttribute })\n resizeDebounce = 0;\n\n /** Disable the observer */\n @Input({ transform: booleanAttribute })\n resizeDisabled = false;\n\n /** Emits when element size changes */\n @Output()\n resize = new EventEmitter<ResizeEvent>();\n\n ngOnInit(): void {\n if (this.resizeDisabled || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Set up debounced emission\n if (this.resizeDebounce > 0) {\n this.subscription = this.resizeSubject\n .pipe(debounceTime(this.resizeDebounce))\n .subscribe(event => {\n this.resize.emit(event);\n });\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const event: ResizeEvent = { width, height, entry };\n\n if (this.resizeDebounce > 0) {\n this.resizeSubject.next(event);\n } else {\n this.ngZone.run(() => {\n this.resize.emit(event);\n });\n }\n }\n });\n\n this.observer.observe(this.el.nativeElement);\n });\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from '@angular/core';\n\nexport interface LazyImageEvent {\n loaded: boolean;\n src: string;\n error?: Error;\n}\n\n/**\n * Directive to lazy load images when they enter the viewport\n *\n * @example\n * ```html\n * <img twLazyImage=\"/image.jpg\" [lazyPlaceholder]=\"'/placeholder.jpg'\" (lazyLoaded)=\"onLoaded($event)\" />\n * <img twLazyImage=\"/large-image.jpg\" lazyLoadingClass=\"opacity-0\" lazyLoadedClass=\"opacity-100 transition-opacity\" />\n * ```\n */\n@Directive({\n selector: 'img[twLazyImage]',\n standalone: true,\n})\nexport class TwLazyImageDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLImageElement>;\n private readonly renderer: Renderer2;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n }\n\n private observer: IntersectionObserver | null = null;\n\n /** The image source to lazy load */\n @Input({ required: true })\n twLazyImage = '';\n\n /** Placeholder image to show before loading */\n @Input()\n lazyPlaceholder = '';\n\n /** CSS class to add while loading */\n @Input()\n lazyLoadingClass = '';\n\n /** CSS class to add after loaded */\n @Input()\n lazyLoadedClass = '';\n\n /** Root margin for intersection observer */\n @Input()\n lazyRootMargin = '100px';\n\n /** Disable lazy loading (load immediately) */\n @Input({ transform: booleanAttribute })\n lazyDisabled = false;\n\n /** Use native loading=\"lazy\" attribute */\n @Input({ transform: booleanAttribute })\n lazyNative = false;\n\n /** Emits when image loads or errors */\n @Output()\n lazyLoaded = new EventEmitter<LazyImageEvent>();\n\n ngOnInit(): void {\n const img = this.el.nativeElement;\n\n // Set placeholder if provided\n if (this.lazyPlaceholder) {\n this.renderer.setAttribute(img, 'src', this.lazyPlaceholder);\n }\n\n // Add loading class\n if (this.lazyLoadingClass) {\n this.lazyLoadingClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(img, cls);\n });\n }\n\n // Use native lazy loading if requested or browser supports it\n if (this.lazyNative || this.lazyDisabled) {\n if (this.lazyNative) {\n this.renderer.setAttribute(img, 'loading', 'lazy');\n }\n this.loadImage();\n return;\n }\n\n // Use IntersectionObserver for lazy loading\n if (typeof IntersectionObserver === 'undefined') {\n this.loadImage();\n return;\n }\n\n this.observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.loadImage();\n this.observer?.disconnect();\n this.observer = null;\n }\n });\n },\n {\n rootMargin: this.lazyRootMargin,\n }\n );\n\n this.observer.observe(img);\n }\n\n private loadImage(): void {\n const img = this.el.nativeElement;\n\n // Create a new image to preload\n const tempImg = new Image();\n\n tempImg.addEventListener('load', () => {\n this.renderer.setAttribute(img, 'src', this.twLazyImage);\n\n // Remove loading class, add loaded class\n if (this.lazyLoadingClass) {\n this.lazyLoadingClass.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(img, cls);\n });\n }\n if (this.lazyLoadedClass) {\n this.lazyLoadedClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(img, cls);\n });\n }\n\n this.lazyLoaded.emit({ loaded: true, src: this.twLazyImage });\n });\n\n tempImg.onerror = () => {\n this.lazyLoaded.emit({\n loaded: false,\n src: this.twLazyImage,\n error: new Error(`Failed to load image: ${this.twLazyImage}`),\n });\n };\n\n tempImg.src = this.twLazyImage;\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * Directive to smooth scroll to a target element\n *\n * @example\n * ```html\n * <a twScrollTo=\"#section1\">Go to Section 1</a>\n * <a twScrollTo=\"#top\" [scrollOffset]=\"80\">Back to Top</a>\n * <button twScrollTo=\".my-element\" scrollBehavior=\"auto\">Jump to Element</button>\n * ```\n */\n@Directive({\n selector: '[twScrollTo]',\n standalone: true,\n})\nexport class TwScrollToDirective {\n /** Target selector or element ID */\n @Input({ required: true })\n twScrollTo = '';\n\n /** Offset from the top in pixels (useful for fixed headers) */\n @Input({ transform: numberAttribute })\n scrollOffset = 0;\n\n /** Scroll behavior: 'smooth' or 'auto' */\n @Input()\n scrollBehavior: ScrollBehavior = 'smooth';\n\n /** Block position: 'start', 'center', 'end', 'nearest' */\n @Input()\n scrollBlock: ScrollLogicalPosition = 'start';\n\n /** Disable scrolling */\n @Input({ transform: booleanAttribute })\n scrollDisabled = false;\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.scrollDisabled || !this.twScrollTo) return;\n\n event.preventDefault();\n\n const selector = this.twScrollTo.startsWith('#')\n ? this.twScrollTo\n : this.twScrollTo.startsWith('.')\n ? this.twScrollTo\n : `#${this.twScrollTo}`;\n\n const target = document.querySelector(selector);\n\n if (target) {\n const elementPosition = target.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.scrollY - this.scrollOffset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: this.scrollBehavior,\n });\n }\n }\n}\n\n/**\n * Directive to mark scroll target sections for scroll spy\n *\n * @example\n * ```html\n * <section twScrollSection=\"section1\">Content</section>\n * <section twScrollSection=\"section2\">Content</section>\n * ```\n */\n@Directive({\n selector: '[twScrollSection]',\n standalone: true,\n})\nexport class TwScrollSectionDirective {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n /** Section identifier */\n @Input({ required: true })\n twScrollSection = '';\n\n /** Get the element's position relative to viewport */\n getPosition(): { top: number; bottom: number; id: string } {\n const rect = this.el.nativeElement.getBoundingClientRect();\n return {\n top: rect.top,\n bottom: rect.bottom,\n id: this.twScrollSection,\n };\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Directive to dynamically add/remove classes on hover\n * Useful for complex hover states that can't be achieved with CSS alone\n *\n * @example\n * ```html\n * <div twHoverClass=\"scale-105 shadow-lg\">Hover me</div>\n * <div twHoverClass=\"bg-blue-500 text-white\" [hoverClassBase]=\"'bg-white text-black'\">Toggle colors</div>\n * <div twHoverClass=\"ring-2 ring-blue-500\" [hoverDelay]=\"200\">Delayed hover effect</div>\n * ```\n */\n@Directive({\n selector: '[twHoverClass]',\n standalone: true,\n})\nexport class TwHoverClassDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly renderer: Renderer2;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n this.ngZone = inject(NgZone);\n }\n\n private hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n private isHovered = false;\n\n /** Classes to add on hover */\n @Input({ required: true })\n twHoverClass = '';\n\n /** Base classes to remove on hover (and restore on leave) */\n @Input()\n hoverClassBase = '';\n\n /** Delay before applying hover classes (ms) */\n @Input()\n hoverDelay = 0;\n\n /** Delay before removing hover classes (ms) */\n @Input()\n hoverLeaveDelay = 0;\n\n /** Disable hover effects */\n @Input({ transform: booleanAttribute })\n hoverDisabled = false;\n\n private readonly onMouseEnter = (): void => {\n if (this.hoverDisabled) return;\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const apply = () => {\n this.isHovered = true;\n this.applyHoverClasses();\n };\n\n if (this.hoverDelay > 0) {\n this.hoverTimeout = setTimeout(apply, this.hoverDelay);\n } else {\n apply();\n }\n };\n\n private readonly onMouseLeave = (): void => {\n if (this.hoverDisabled) return;\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const remove = () => {\n this.isHovered = false;\n this.removeHoverClasses();\n };\n\n if (this.hoverLeaveDelay > 0) {\n this.hoverTimeout = setTimeout(remove, this.hoverLeaveDelay);\n } else {\n remove();\n }\n };\n\n private applyHoverClasses(): void {\n const element = this.el.nativeElement;\n\n // Remove base classes\n if (this.hoverClassBase) {\n this.hoverClassBase.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(element, cls);\n });\n }\n\n // Add hover classes\n if (this.twHoverClass) {\n this.twHoverClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(element, cls);\n });\n }\n }\n\n private removeHoverClasses(): void {\n const element = this.el.nativeElement;\n\n // Remove hover classes\n if (this.twHoverClass) {\n this.twHoverClass.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(element, cls);\n });\n }\n\n // Restore base classes\n if (this.hoverClassBase) {\n this.hoverClassBase.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(element, cls);\n });\n }\n }\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('mouseenter', this.onMouseEnter);\n element.addEventListener('mouseleave', this.onMouseLeave);\n });\n }\n\n ngOnDestroy(): void {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const element = this.el.nativeElement;\n element.removeEventListener('mouseenter', this.onMouseEnter);\n element.removeEventListener('mouseleave', this.onMouseLeave);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\n/**\n * Directive to trap scroll within an element, preventing scroll propagation to parent\n * Useful for dropdowns, modals, and scrollable panels\n *\n * @example\n * ```html\n * <div twTrapScroll class=\"h-64 overflow-auto\">\n * <!-- Scrolling here won't affect parent -->\n * <div class=\"h-[1000px]\">Long content</div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[twTrapScroll]',\n standalone: true,\n})\nexport class TwTrapScrollDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n /** Disable scroll trapping */\n @Input({ transform: booleanAttribute })\n trapScrollDisabled = false;\n\n /** Allow horizontal scroll to propagate */\n @Input({ transform: booleanAttribute })\n trapScrollAllowHorizontal = false;\n\n private readonly onWheel = (event: WheelEvent): void => {\n if (this.trapScrollDisabled) return;\n\n const element = this.el.nativeElement;\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = element;\n\n const isVertical = Math.abs(event.deltaY) > Math.abs(event.deltaX);\n const isHorizontal = !isVertical;\n\n if (isHorizontal && this.trapScrollAllowHorizontal) {\n return;\n }\n\n if (isVertical) {\n const atTop = scrollTop <= 0;\n const atBottom = scrollTop + clientHeight >= scrollHeight;\n const scrollingUp = event.deltaY < 0;\n const scrollingDown = event.deltaY > 0;\n\n if ((atTop && scrollingUp) || (atBottom && scrollingDown)) {\n event.preventDefault();\n }\n } else {\n const atLeft = scrollLeft <= 0;\n const atRight = scrollLeft + clientWidth >= scrollWidth;\n const scrollingLeft = event.deltaX < 0;\n const scrollingRight = event.deltaX > 0;\n\n if ((atLeft && scrollingLeft) || (atRight && scrollingRight)) {\n event.preventDefault();\n }\n }\n };\n\n private readonly onTouchMove = (event: TouchEvent): void => {\n if (this.trapScrollDisabled) return;\n\n const element = this.el.nativeElement;\n\n // If element is not scrollable, prevent all touch scroll\n if (\n element.scrollHeight <= element.clientHeight &&\n element.scrollWidth <= element.clientWidth\n ) {\n event.preventDefault();\n }\n };\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('wheel', this.onWheel, { passive: false });\n element.addEventListener('touchmove', this.onTouchMove, { passive: false });\n });\n }\n\n ngOnDestroy(): void {\n const element = this.el.nativeElement;\n element.removeEventListener('wheel', this.onWheel);\n element.removeEventListener('touchmove', this.onTouchMove);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { AriaUtils, TwAriaService } from '../core/aria.service';\n\n/**\n * Directive to add screen reader only text to elements.\n * Content is visually hidden but accessible to screen readers.\n */\n@Directive({\n selector: '[twSrOnly]',\n standalone: true,\n host: {\n '[class]': 'srOnlyClasses()',\n },\n})\nexport class TwSrOnlyDirective {\n @Input({ transform: booleanAttribute }) set twSrOnly(value: boolean) {\n this._enabled.set(value);\n }\n\n @Input({ transform: booleanAttribute }) focusable = false;\n\n private readonly _enabled = signal(true);\n\n protected srOnlyClasses = computed(() => {\n if (!this._enabled()) return '';\n\n if (this.focusable) {\n return 'sr-only focus:not-sr-only focus:absolute focus:z-50 focus:p-2 focus:bg-white focus:text-slate-900 focus:border focus:border-slate-300 focus:rounded';\n }\n return 'sr-only';\n });\n}\n\n/**\n * Directive to announce content changes to screen readers.\n */\n@Directive({\n selector: '[twAnnounce]',\n standalone: true,\n})\nexport class TwAnnounceDirective implements OnDestroy {\n private readonly ariaService = inject(TwAriaService);\n private previousMessage = '';\n\n @Input() set twAnnounce(message: string) {\n if (message && message !== this.previousMessage) {\n this.ariaService.announce(message);\n this.previousMessage = message;\n }\n }\n\n @Input({ transform: booleanAttribute }) announceAssertive = false;\n\n ngOnDestroy(): void {\n this.ariaService.clearAnnouncements();\n }\n}\n\n/**\n * Directive for managing ARIA expanded state.\n */\n@Directive({\n selector: '[twAriaExpanded]',\n standalone: true,\n})\nexport class TwAriaExpandedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaExpanded(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-expanded', String(value));\n }\n\n @Input() set ariaControls(id: string | null) {\n if (id) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-controls', id);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-controls');\n }\n }\n}\n\n/**\n * Directive for managing ARIA selected state.\n */\n@Directive({\n selector: '[twAriaSelected]',\n standalone: true,\n})\nexport class TwAriaSelectedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaSelected(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-selected', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA checked state.\n */\n@Directive({\n selector: '[twAriaChecked]',\n standalone: true,\n})\nexport class TwAriaCheckedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaChecked(value: boolean | 'mixed') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-checked', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA pressed state (toggle buttons).\n */\n@Directive({\n selector: '[twAriaPressed]',\n standalone: true,\n})\nexport class TwAriaPressedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaPressed(value: boolean | 'mixed') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-pressed', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA disabled state.\n */\n@Directive({\n selector: '[twAriaDisabled]',\n standalone: true,\n})\nexport class TwAriaDisabledDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaDisabled(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-disabled', String(value));\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', '-1');\n }\n }\n}\n\n/**\n * Directive for managing ARIA hidden state.\n */\n@Directive({\n selector: '[twAriaHidden]',\n standalone: true,\n})\nexport class TwAriaHiddenDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaHidden(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA live regions.\n */\n@Directive({\n selector: '[twAriaLive]',\n standalone: true,\n})\nexport class TwAriaLiveDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLive(value: 'off' | 'polite' | 'assertive') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-live', value);\n }\n\n @Input({ transform: booleanAttribute }) set ariaAtomic(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-atomic', String(value));\n }\n\n @Input() set ariaRelevant(value: 'additions' | 'removals' | 'text' | 'all' | string) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-relevant', value);\n }\n}\n\n/**\n * Directive for managing ARIA current state (navigation).\n */\n@Directive({\n selector: '[twAriaCurrent]',\n standalone: true,\n})\nexport class TwAriaCurrentDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaCurrent(\n value: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | boolean\n ) {\n const strValue = typeof value === 'boolean' ? String(value) : value;\n if (value && strValue !== 'false') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-current', strValue);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-current');\n }\n }\n}\n\n/**\n * Directive for managing ARIA busy state.\n */\n@Directive({\n selector: '[twAriaBusy]',\n standalone: true,\n})\nexport class TwAriaBusyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaBusy(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-busy', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA describedby.\n */\n@Directive({\n selector: '[twAriaDescribedby]',\n standalone: true,\n})\nexport class TwAriaDescribedbyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaDescribedby(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', ids);\n }\n}\n\n/**\n * Directive for managing ARIA labelledby.\n */\n@Directive({\n selector: '[twAriaLabelledby]',\n standalone: true,\n})\nexport class TwAriaLabelledbyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLabelledby(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-labelledby');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-labelledby', ids);\n }\n}\n\n/**\n * Directive for managing ARIA label.\n */\n@Directive({\n selector: '[twAriaLabel]',\n standalone: true,\n})\nexport class TwAriaLabelDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLabel(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-label', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-label');\n }\n }\n}\n\n/**\n * Directive for managing ARIA valuenow/valuemin/valuemax (progress, sliders).\n */\n@Directive({\n selector: '[twAriaValue]',\n standalone: true,\n})\nexport class TwAriaValueDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: numberAttribute }) set twAriaValue(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuenow', String(value));\n }\n\n @Input({ transform: numberAttribute }) set ariaValueMin(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuemin', String(value));\n }\n\n @Input({ transform: numberAttribute }) set ariaValueMax(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuemax', String(value));\n }\n\n @Input() set ariaValueText(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuetext', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-valuetext');\n }\n }\n}\n\n/**\n * Directive for managing ARIA role.\n */\n@Directive({\n selector: '[twRole]',\n standalone: true,\n})\nexport class TwRoleDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twRole(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'role', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'role');\n }\n }\n}\n\n/**\n * Directive for managing ARIA modal.\n */\n@Directive({\n selector: '[twAriaModal]',\n standalone: true,\n})\nexport class TwAriaModalDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaModal(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-modal', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA haspopup.\n */\n@Directive({\n selector: '[twAriaHaspopup]',\n standalone: true,\n})\nexport class TwAriaHaspopupDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaHaspopup(\n value: 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | 'true' | 'false' | boolean\n ) {\n const strValue = typeof value === 'boolean' ? String(value) : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-haspopup', strValue);\n }\n}\n\n/**\n * Directive for managing ARIA owns.\n */\n@Directive({\n selector: '[twAriaOwns]',\n standalone: true,\n})\nexport class TwAriaOwnsDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaOwns(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-owns');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-owns', ids);\n }\n}\n\n/**\n * Directive for managing ARIA activedescendant.\n */\n@Directive({\n selector: '[twAriaActivedescendant]',\n standalone: true,\n})\nexport class TwAriaActivedescendantDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaActivedescendant(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-activedescendant', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-activedescendant');\n }\n }\n}\n\n/**\n * Collection of all ARIA directives.\n */\nexport const TW_ARIA_DIRECTIVES = [\n TwSrOnlyDirective,\n TwAnnounceDirective,\n TwAriaExpandedDirective,\n TwAriaSelectedDirective,\n TwAriaCheckedDirective,\n TwAriaPressedDirective,\n TwAriaDisabledDirective,\n TwAriaHiddenDirective,\n TwAriaLiveDirective,\n TwAriaCurrentDirective,\n TwAriaBusyDirective,\n TwAriaDescribedbyDirective,\n TwAriaLabelledbyDirective,\n TwAriaLabelDirective,\n TwAriaValueDirective,\n TwRoleDirective,\n TwAriaModalDirective,\n TwAriaHaspopupDirective,\n TwAriaOwnsDirective,\n TwAriaActivedescendantDirective,\n] as const;\n","// Core directives\nexport * from './ripple.directive';\nexport * from './tooltip.directive';\nexport * from './click-outside.directive';\nexport * from './focus-trap.directive';\nexport * from './class-merge.directive';\n\n// DX enhancement directives\nexport * from './auto-focus.directive';\nexport * from './in-view.directive';\nexport * from './long-press.directive';\nexport * from './debounce-click.directive';\nexport * from './copy-clipboard.directive';\nexport * from './keyboard-shortcut.directive';\nexport * from './swipe.directive';\nexport * from './resize-observer.directive';\nexport * from './lazy-image.directive';\nexport * from './scroll-anchor.directive';\nexport * from './hover-class.directive';\nexport * from './trap-scroll.directive';\n\n// ARIA accessibility directives\nexport * from './aria.directive';\n\n// Convenience export of all directives\nimport { TwRippleDirective } from './ripple.directive';\nimport { TwTooltipDirective } from './tooltip.directive';\nimport { TwClickOutsideDirective } from './click-outside.directive';\nimport { TwFocusTrapDirective } from './focus-trap.directive';\nimport { TwClassDirective, TwVariantDirective } from './class-merge.directive';\nimport { TwAutoFocusDirective } from './auto-focus.directive';\nimport { TwInViewDirective } from './in-view.directive';\nimport { TwLongPressDirective } from './long-press.directive';\nimport { TwDebounceClickDirective } from './debounce-click.directive';\nimport { TwCopyClipboardDirective } from './copy-clipboard.directive';\nimport { TwKeyboardShortcutDirective } from './keyboard-shortcut.directive';\nimport { TwSwipeDirective } from './swipe.directive';\nimport { TwResizeObserverDirective } from './resize-observer.directive';\nimport { TwLazyImageDirective } from './lazy-image.directive';\nimport { TwScrollSectionDirective, TwScrollToDirective } from './scroll-anchor.directive';\nimport { TwHoverClassDirective } from './hover-class.directive';\nimport { TwTrapScrollDirective } from './trap-scroll.directive';\nimport { TW_ARIA_DIRECTIVES } from './aria.directive';\n\n/** All core directives */\nexport const TW_CORE_DIRECTIVES = [\n TwRippleDirective,\n TwTooltipDirective,\n TwClickOutsideDirective,\n TwFocusTrapDirective,\n TwClassDirective,\n TwVariantDirective,\n] as const;\n\n/** All DX enhancement directives */\nexport const TW_DX_DIRECTIVES = [\n TwAutoFocusDirective,\n TwInViewDirective,\n TwLongPressDirective,\n TwDebounceClickDirective,\n TwCopyClipboardDirective,\n TwKeyboardShortcutDirective,\n TwSwipeDirective,\n TwResizeObserverDirective,\n TwLazyImageDirective,\n TwScrollToDirective,\n TwScrollSectionDirective,\n TwHoverClassDirective,\n TwTrapScrollDirective,\n] as const;\n\n/** All directives combined */\nexport const TW_DIRECTIVES = [\n ...TW_CORE_DIRECTIVES,\n ...TW_DX_DIRECTIVES,\n ...TW_ARIA_DIRECTIVES,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n Input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\nimport { TwRippleDirective } from '../directives/ripple.directive';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'ghost'\n | 'outline'\n | 'link';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst BUTTON_BASE_CLASSES = `\n inline-flex items-center justify-center gap-2\n font-medium\n rounded-lg\n transition-all duration-200 ease-out\n focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none\n`;\n\nconst BUTTON_VARIANTS: Record<ButtonVariant, string> = {\n primary:\n 'bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white shadow-sm hover:shadow focus-visible:ring-blue-500',\n secondary:\n 'bg-slate-600 hover:bg-slate-700 active:bg-slate-800 text-white shadow-sm hover:shadow focus-visible:ring-slate-500',\n success:\n 'bg-emerald-600 hover:bg-emerald-700 active:bg-emerald-800 text-white shadow-sm hover:shadow focus-visible:ring-emerald-500',\n warning:\n 'bg-amber-500 hover:bg-amber-600 active:bg-amber-700 text-white shadow-sm hover:shadow focus-visible:ring-amber-500',\n danger:\n 'bg-rose-600 hover:bg-rose-700 active:bg-rose-800 text-white shadow-sm hover:shadow focus-visible:ring-rose-500',\n info: 'bg-cyan-600 hover:bg-cyan-700 active:bg-cyan-800 text-white shadow-sm hover:shadow focus-visible:ring-cyan-500',\n ghost:\n 'bg-transparent hover:bg-slate-100 active:bg-slate-200 text-slate-700 focus-visible:ring-slate-500',\n outline:\n 'bg-white border-2 border-slate-500 hover:border-slate-600 hover:bg-slate-100 active:bg-slate-200 text-slate-800 shadow-sm focus-visible:ring-slate-500',\n link: 'bg-transparent text-blue-600 hover:text-blue-700 hover:underline active:text-blue-800 focus-visible:ring-blue-500 p-0 shadow-none',\n};\n\nconst BUTTON_SIZES: Record<ButtonSize, string> = {\n xs: 'text-xs px-4 py-2.5 min-h-9',\n sm: 'text-sm px-6 py-3 min-h-10',\n md: 'text-base px-8 py-3.5 min-h-11',\n lg: 'text-lg px-10 py-4 min-h-12',\n xl: 'text-xl px-12 py-5 min-h-14',\n};\n\nconst ICON_SIZES: Record<ButtonSize, string> = {\n xs: '[&_svg]:w-3 [&_svg]:h-3',\n sm: '[&_svg]:w-4 [&_svg]:h-4',\n md: '[&_svg]:w-5 [&_svg]:h-5',\n lg: '[&_svg]:w-5 [&_svg]:h-5',\n xl: '[&_svg]:w-6 [&_svg]:h-6',\n};\n\nconst ICON_ONLY_SIZES: Record<ButtonSize, string> = {\n xs: 'p-2 min-h-8 min-w-8',\n sm: 'p-2.5 min-h-9 min-w-9',\n md: 'p-3 min-h-10 min-w-10',\n lg: 'p-3.5 min-h-12 min-w-12',\n xl: 'p-4 min-h-14 min-w-14',\n};\n\nconst SPINNER_SIZES: Record<ButtonSize, string> = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n xl: 'w-6 h-6',\n};\n\n/**\n * Highly customizable button component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-button>Default Button</tw-button>\n * <tw-button variant=\"primary\" size=\"lg\">Large Primary</tw-button>\n * <tw-button variant=\"outline\" [loading]=\"isLoading\">Submit</tw-button>\n * <tw-button variant=\"danger\" [disabled]=\"!canDelete\">Delete</tw-button>\n * ```\n */\n@Component({\n selector: 'tw-button',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './button.component.html',\n hostDirectives: [TwRippleDirective],\n host: {\n '[class]': 'computedClasses()',\n '[attr.disabled]': 'isDisabled() || null',\n '[attr.aria-disabled]': 'isDisabled()',\n '[attr.aria-busy]': '_loading()',\n role: 'button',\n '[attr.tabindex]': 'isDisabled() ? -1 : 0',\n '[style.display]': '\"inline-flex\"',\n '[style.position]': '\"relative\"',\n '[style.overflow]': '\"hidden\"',\n },\n})\nexport class TwButtonComponent {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly rippleDirective = inject(TwRippleDirective);\n\n // Internal signals for reactive state\n protected readonly _variant = signal<ButtonVariant>('primary');\n protected readonly _size = signal<ButtonSize>('md');\n protected readonly _disabled = signal(false);\n protected readonly _loading = signal(false);\n protected readonly _fullWidth = signal(false);\n protected readonly _iconOnly = signal(false);\n protected readonly _ripple = signal(true);\n protected readonly _rippleColor = signal('rgba(255, 255, 255, 0.4)');\n protected readonly _classOverride = signal('');\n protected readonly _classReplace = signal('');\n\n // Input setters that update signals\n @Input() set variant(value: ButtonVariant) {\n this._variant.set(value);\n }\n @Input() set size(value: ButtonSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set disabled(value: boolean) {\n this._disabled.set(value);\n }\n @Input({ transform: booleanAttribute }) set loading(value: boolean) {\n this._loading.set(value);\n }\n @Input({ transform: booleanAttribute }) set fullWidth(value: boolean) {\n this._fullWidth.set(value);\n }\n @Input({ transform: booleanAttribute }) set iconOnly(value: boolean) {\n this._iconOnly.set(value);\n }\n @Input({ transform: booleanAttribute }) set ripple(value: boolean) {\n this._ripple.set(value);\n }\n @Input() set rippleColor(value: string) {\n this._rippleColor.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n @Input() set classReplace(value: string) {\n this._classReplace.set(value);\n }\n\n // Computed signals\n protected readonly isDisabled = computed(() => this._disabled() || this._loading());\n\n protected readonly computedClasses = computed(() => {\n if (this._classReplace()) {\n return this._classReplace();\n }\n\n const variantClasses = BUTTON_VARIANTS[this._variant()];\n const sizeClasses = this._iconOnly()\n ? ICON_ONLY_SIZES[this._size()]\n : BUTTON_SIZES[this._size()];\n const iconClasses = ICON_SIZES[this._size()];\n\n const conditionalClasses: string[] = [];\n if (this._fullWidth()) conditionalClasses.push('w-full');\n if (this._loading()) conditionalClasses.push('cursor-wait');\n if (this._iconOnly()) conditionalClasses.push('gap-0');\n\n return this.twClass.merge(\n BUTTON_BASE_CLASSES,\n variantClasses,\n sizeClasses,\n iconClasses,\n conditionalClasses.join(' '),\n this._classOverride()\n );\n });\n\n protected readonly spinnerSizeClass = computed(() => SPINNER_SIZES[this._size()]);\n\n // Effect to sync ripple directive state\n constructor() {\n effect(() => {\n this.rippleDirective.rippleDisabled = !this._ripple() || this.isDisabled();\n this.rippleDirective.rippleColor = this._rippleColor();\n });\n }\n\n /** Get the native button element */\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** Programmatically focus the button */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /** Programmatically blur the button */\n blur(): void {\n this.elementRef.nativeElement.blur();\n }\n}\n\n/**\n * Anchor-style button for navigation\n */\n@Component({\n selector: 'a[tw-button]',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './button-link.component.html',\n // Note: hostDirectives are inherited from TwButtonComponent, no need to redeclare\n host: {\n '[class]': 'computedClasses()',\n '[attr.aria-disabled]': '_disabled()',\n '[attr.tabindex]': '_disabled() ? -1 : 0',\n '[style.display]': '\"inline-flex\"',\n '[style.position]': '\"relative\"',\n '[style.overflow]': '\"hidden\"',\n },\n})\nexport class TwButtonLinkComponent extends TwButtonComponent {\n @HostBinding('style.pointer-events')\n get pointerEvents(): string | null {\n return this._disabled() ? 'none' : null;\n }\n}\n","<!-- Loading spinner -->\n@if (_loading()) {\n <svg\n class=\"animate-spin\"\n [class]=\"spinnerSizeClass()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n}\n\n<!-- Leading icon slot -->\n@if (!_loading()) {\n <ng-content select=\"[twButtonIcon], [slot=icon]\"></ng-content>\n}\n\n<!-- Button content (hidden for icon-only buttons) -->\n@if (!_iconOnly()) {\n <span>\n <ng-content></ng-content>\n </span>\n}\n\n<!-- Trailing icon slot -->\n<ng-content select=\"[twButtonIconEnd], [slot=icon-end]\"></ng-content>\n","<ng-content select=\"[twButtonIcon], [slot=icon]\"></ng-content>\n<span>\n <ng-content></ng-content>\n</span>\n<ng-content select=\"[twButtonIconEnd], [slot=icon-end]\"></ng-content>\n","export * from './button.component';\n\nimport { TwButtonComponent, TwButtonLinkComponent } from './button.component';\n\nexport const TW_BUTTON_COMPONENTS = [TwButtonComponent, TwButtonLinkComponent] as const;\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type InputVariant = 'default' | 'filled' | 'outlined' | 'underlined';\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nconst INPUT_BASE_CLASSES = `\n w-full\n text-slate-900 dark:text-slate-100\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n transition-all duration-200\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none\n`;\n\nconst INPUT_VARIANTS: Record<InputVariant, string> = {\n default:\n 'bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20',\n filled:\n 'bg-slate-100 dark:bg-slate-700 border-2 border-transparent rounded-lg focus:bg-white dark:focus:bg-slate-800 focus:border-blue-500',\n outlined: 'bg-transparent border-2 border-slate-300 dark:border-slate-600 rounded-lg focus:border-blue-500',\n underlined: 'bg-transparent border-b-2 border-slate-300 dark:border-slate-600 rounded-none px-0 focus:border-blue-500',\n};\n\nconst INPUT_SIZES: Record<InputSize, string> = {\n sm: 'text-sm px-3 py-1.5 min-h-8',\n md: 'text-sm px-4 py-2.5 min-h-10',\n lg: 'text-base px-4 py-3 min-h-12',\n};\n\nconst INPUT_ERROR_CLASSES = 'border-rose-500 focus:border-rose-500 focus:ring-rose-500/20';\n\n/**\n * Label directive for form fields\n */\n@Directive({\n selector: 'tw-label, [twLabel]',\n standalone: true,\n})\nexport class TwLabelDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n @Input({ transform: booleanAttribute }) required = false;\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5', this.class);\n }\n}\n\n/**\n * Hint/helper text directive\n */\n@Directive({\n selector: 'tw-hint, [twHint]',\n standalone: true,\n})\nexport class TwHintDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-xs text-slate-500 dark:text-slate-400 mt-1.5', this.class);\n }\n}\n\n/**\n * Error message directive\n */\n@Directive({\n selector: 'tw-error, [twError]',\n standalone: true,\n})\nexport class TwErrorDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-xs text-rose-600 mt-1.5', this.class);\n }\n\n @HostBinding('attr.role')\n get role(): string {\n return 'alert';\n }\n}\n\n/**\n * Input prefix/suffix container\n */\n@Directive({\n selector: '[twInputPrefix], [twInputSuffix]',\n standalone: true,\n})\nexport class TwInputAffixDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('flex items-center text-slate-500 dark:text-slate-400', this.class);\n }\n}\n\n/**\n * Highly customizable text input component with Tailwind CSS styling\n * Implements ControlValueAccessor for Angular forms integration\n *\n * @example\n * ```html\n * <tw-input\n * [(ngModel)]=\"name\"\n * placeholder=\"Enter your name\"\n * label=\"Full Name\"\n * hint=\"As it appears on your ID\">\n * </tw-input>\n *\n * <tw-input\n * formControlName=\"email\"\n * type=\"email\"\n * variant=\"filled\"\n * [error]=\"emailError\">\n * <span twInputPrefix>@</span>\n * </tw-input>\n * ```\n */\n@Component({\n selector: 'tw-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './input.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwInputComponent),\n multi: true,\n },\n ],\n host: {\n class: 'block',\n },\n})\nexport class TwInputComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n\n @ViewChild('inputElement') inputElement!: ElementRef<HTMLInputElement>;\n\n /** Input type */\n @Input() type = 'text';\n\n /** Visual variant */\n @Input() variant: InputVariant = 'default';\n\n /** Size of the input */\n @Input() size: InputSize = 'md';\n\n /** Label text */\n @Input() label = '';\n\n /** Placeholder text */\n @Input() placeholder = '';\n\n /** Hint/helper text */\n @Input() hint = '';\n\n /** Error message */\n @Input() error = '';\n\n /** Whether the field is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether the field is readonly */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /** Whether the field is required */\n @Input({ transform: booleanAttribute }) required = false;\n\n /** Whether to show a clear button */\n @Input({ transform: booleanAttribute }) clearable = false;\n\n /** Unique ID for the input (auto-generated if not provided) */\n @Input() inputId = `tw-input-${Math.random().toString(36).slice(2, 9)}`;\n\n /** Autocomplete attribute */\n @Input() autocomplete = '';\n\n /** Input mode for virtual keyboards */\n @Input() inputmode = '';\n\n /** Validation pattern */\n @Input() pattern = '';\n\n /** Minimum value (for number/date inputs) */\n @Input() min = '';\n\n /** Maximum value (for number/date inputs) */\n @Input() max = '';\n\n /** Minimum length */\n @Input() minlength: number | null = null;\n\n /** Maximum length */\n @Input() maxlength: number | null = null;\n\n /** Step value (for number inputs) */\n @Input() step = '';\n\n /** IDs of elements that describe this input */\n @Input() describedBy = '';\n\n /** Additional classes to merge */\n @Input() classOverride = '';\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Clear event */\n @Output() onClear = new EventEmitter<void>();\n\n protected value = '';\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n get hasError(): boolean {\n return !!this.error;\n }\n\n protected wrapperClasses = computed(() => {\n const hasAffixes = this.elementRef.nativeElement.querySelector(\n '[twInputPrefix], [twInputSuffix]'\n );\n\n if (hasAffixes || this.clearable) {\n return this.twClass.merge(\n 'flex items-center gap-2',\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : ''\n );\n }\n\n return '';\n });\n\n protected computedClasses = computed(() => {\n const hasWrapper = this.wrapperClasses();\n\n if (hasWrapper) {\n // When wrapped, input should be transparent\n return this.twClass.merge(\n 'flex-1 min-w-0 bg-transparent border-none focus:ring-0 p-0',\n INPUT_BASE_CLASSES.replaceAll(/px-\\d+/g, '').replaceAll(/py-[\\d.]+/g, ''),\n this.classOverride\n );\n }\n\n return this.twClass.merge(\n INPUT_BASE_CLASSES,\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : '',\n this.classOverride\n );\n });\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n clear(): void {\n this.value = '';\n this.onChange('');\n this.onClear.emit();\n this.inputElement?.nativeElement?.focus();\n }\n\n /** Focus the input programmatically */\n focus(): void {\n this.inputElement?.nativeElement?.focus();\n }\n\n /** Select all text in the input */\n select(): void {\n this.inputElement?.nativeElement?.select();\n }\n}\n\n/**\n * Textarea component with the same API as tw-input\n */\n@Component({\n selector: 'tw-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './textarea.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwTextareaComponent),\n multi: true,\n },\n ],\n host: {\n class: 'block',\n },\n})\nexport class TwTextareaComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n @ViewChild('textareaElement') textareaElement!: ElementRef<HTMLTextAreaElement>;\n\n @Input() variant: InputVariant = 'default';\n @Input() size: InputSize = 'md';\n @Input() label = '';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() error = '';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) readonly = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) showCount = false;\n @Input() inputId = `tw-textarea-${Math.random().toString(36).slice(2, 9)}`;\n @Input() rows = 4;\n @Input() minlength: number | null = null;\n @Input() maxlength: number | null = null;\n @Input() classOverride = '';\n @Input({ transform: booleanAttribute }) autoResize = false;\n\n protected value = '';\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n get hasError(): boolean {\n return !!this.error;\n }\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n INPUT_BASE_CLASSES,\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : '',\n this.autoResize ? 'resize-none overflow-hidden' : 'resize-y',\n this.classOverride\n );\n });\n\n writeValue(value: string): void {\n this.value = value ?? '';\n if (this.autoResize) {\n setTimeout(() => {\n this.adjustHeight();\n }, 0);\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n\n if (this.autoResize) {\n this.adjustHeight();\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private adjustHeight(): void {\n const textarea = this.textareaElement?.nativeElement;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }\n\n focus(): void {\n this.textareaElement?.nativeElement?.focus();\n }\n}\n","@if (label) {\n <label [for]=\"inputId\" class=\"block text-sm font-medium text-slate-700 mb-1.5\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n}\n\n<div [class]=\"wrapperClasses()\">\n <!-- Prefix -->\n <ng-content select=\"[twInputPrefix]\"></ng-content>\n\n <!-- Input element -->\n <input\n #inputElement\n [id]=\"inputId\"\n [type]=\"type\"\n [class]=\"computedClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-describedby]=\"describedBy\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.inputmode]=\"inputmode\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [attr.step]=\"step\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus.emit($event)\"\n />\n\n <!-- Suffix -->\n <ng-content select=\"[twInputSuffix]\"></ng-content>\n\n <!-- Clear button -->\n @if (clearable && value && !disabled && !readonly) {\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-5 h-5 text-slate-400 hover:text-slate-600 transition-colors\"\n (click)=\"clear()\"\n aria-label=\"Clear input\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</div>\n\n@if (hint && !error) {\n <span class=\"block text-xs text-slate-500 mt-1.5\">{{ hint }}</span>\n}\n\n@if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n}\n\n<ng-content select=\"tw-hint, [twHint], tw-error, [twError]\"></ng-content>\n","@if (label) {\n <label [for]=\"inputId\" class=\"block text-sm font-medium text-slate-700 mb-1.5\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n}\n\n<textarea\n #textareaElement\n [id]=\"inputId\"\n [class]=\"computedClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [rows]=\"rows\"\n [attr.aria-invalid]=\"hasError\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n></textarea>\n\n@if (hint && !error) {\n <span class=\"block text-xs text-slate-500 mt-1.5\">{{ hint }}</span>\n}\n\n@if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n}\n\n@if (maxlength && showCount) {\n <span class=\"block text-xs text-slate-400 mt-1 text-right\">\n {{ value.length }} / {{ maxlength }}\n </span>\n}\n","export * from './input.component';\n\nimport {\n TwErrorDirective,\n TwHintDirective,\n TwInputAffixDirective,\n TwInputComponent,\n TwLabelDirective,\n TwTextareaComponent,\n} from './input.component';\n\nexport const TW_INPUT_COMPONENTS = [\n TwInputComponent,\n TwTextareaComponent,\n TwLabelDirective,\n TwHintDirective,\n TwErrorDirective,\n TwInputAffixDirective,\n] as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type CheckboxVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\nconst CHECKBOX_VARIANTS: Record<CheckboxVariant, string> = {\n primary: 'text-blue-600 focus:ring-blue-500 border-slate-300 dark:border-slate-600',\n secondary: 'text-slate-600 focus:ring-slate-500 border-slate-300 dark:border-slate-600',\n success: 'text-emerald-600 focus:ring-emerald-500 border-slate-300 dark:border-slate-600',\n warning: 'text-amber-500 focus:ring-amber-500 border-slate-300 dark:border-slate-600',\n danger: 'text-rose-600 focus:ring-rose-500 border-slate-300 dark:border-slate-600',\n};\n\nconst CHECKBOX_SIZES: Record<CheckboxSize, { box: string; label: string }> = {\n sm: { box: 'w-4 h-4', label: 'text-sm' },\n md: { box: 'w-5 h-5', label: 'text-base' },\n lg: { box: 'w-6 h-6', label: 'text-lg' },\n};\n\n/**\n * Checkbox component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-checkbox [(ngModel)]=\"checked\">Accept terms</tw-checkbox>\n * <tw-checkbox variant=\"success\" [binary]=\"true\">Enable feature</tw-checkbox>\n * ```\n */\n@Component({\n selector: 'tw-checkbox',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwCheckboxComponent),\n multi: true,\n },\n ],\n templateUrl: './checkbox.component.html',\n})\nexport class TwCheckboxComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n // Signal-based inputs\n readonly variant = input<CheckboxVariant>('primary');\n readonly size = input<CheckboxSize>('md');\n readonly disabled = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly indeterminate = input(false, {\n transform: (v: boolean | string) => v === '' || v === true,\n });\n readonly name = input('');\n readonly value = input<any>();\n readonly readonly = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly classOverride = input('');\n\n // Signal-based outputs\n readonly onFocus = output<FocusEvent>();\n readonly onBlur = output<FocusEvent>();\n readonly onChange = output<{ checked: boolean; value: any }>();\n\n // Internal state\n protected readonly checked = signal(false);\n private readonly _disabled = signal(false);\n\n private onChangeFn: (value: boolean) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n // Sync disabled state from input\n constructor() {\n effect(() => {\n this._disabled.set(this.disabled());\n });\n }\n\n protected readonly labelContainerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-2 cursor-pointer',\n this._disabled() ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride()\n );\n });\n\n protected readonly checkboxClasses = computed(() => {\n const variantClasses = CHECKBOX_VARIANTS[this.variant()];\n const sizeClasses = CHECKBOX_SIZES[this.size()].box;\n\n return this.twClass.merge(\n 'rounded border-2 bg-white dark:bg-slate-800 transition-colors duration-150',\n 'focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-slate-900',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n variantClasses,\n sizeClasses\n );\n });\n\n protected readonly labelTextClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n CHECKBOX_SIZES[this.size()].label,\n this._disabled() ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n onCheckboxChange(event: Event): void {\n if (this._disabled() || this.readonly()) return;\n\n const input = event.target as HTMLInputElement;\n const isChecked = input.checked;\n\n this.checked.set(isChecked);\n this.onChangeFn(isChecked);\n this.onChange.emit({ checked: isChecked, value: this.value() });\n }\n\n onInputBlur(event: FocusEvent): void {\n this.onTouchedFn();\n this.onBlur.emit(event);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n /** Toggle the checkbox programmatically */\n toggle(): void {\n if (!this._disabled() && !this.readonly()) {\n this.checked.set(!this.checked());\n this.onChangeFn(this.checked());\n this.onChange.emit({ checked: this.checked(), value: this.value() });\n }\n }\n}\n","<label [class]=\"labelContainerClasses()\">\n <input\n type=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.name]=\"name()\"\n [attr.value]=\"value()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"onCheckboxChange($event)\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onInputBlur($event)\"\n />\n <span [class]=\"labelTextClasses()\">\n <ng-content></ng-content>\n </span>\n</label>\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n Output,\n QueryList,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type RadioVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\nconst RADIO_VARIANTS: Record<RadioVariant, string> = {\n primary: 'text-blue-600 focus:ring-blue-500 border-slate-300 dark:border-slate-600',\n secondary: 'text-slate-600 focus:ring-slate-500 border-slate-300 dark:border-slate-600',\n success: 'text-emerald-600 focus:ring-emerald-500 border-slate-300 dark:border-slate-600',\n warning: 'text-amber-500 focus:ring-amber-500 border-slate-300 dark:border-slate-600',\n danger: 'text-rose-600 focus:ring-rose-500 border-slate-300 dark:border-slate-600',\n};\n\nconst RADIO_SIZES: Record<RadioSize, { radio: string; label: string }> = {\n sm: { radio: 'w-4 h-4', label: 'text-sm' },\n md: { radio: 'w-5 h-5', label: 'text-base' },\n lg: { radio: 'w-6 h-6', label: 'text-lg' },\n};\n\n/**\n * Single radio button component\n *\n * @example\n * ```html\n * <tw-radio-button value=\"opt1\" label=\"Option 1\"></tw-radio-button>\n * ```\n */\n@Component({\n selector: 'tw-radio-button',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './radio-button.component.html',\n})\nexport class TwRadioButtonComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Value of the radio button */\n @Input({ required: true }) value: any;\n\n /** Label text */\n @Input() label = '';\n\n /** Name attribute (set by parent group) */\n @Input() name = '';\n\n /** Visual variant */\n @Input() variant: RadioVariant = 'primary';\n\n /** Size of the radio button */\n @Input() size: RadioSize = 'md';\n\n /** Whether the radio is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Blur event */\n @Output() onBlur = new EventEmitter<FocusEvent>();\n\n /** Internal: selected value from parent */\n selectedValue = signal<any>(null);\n\n /** Internal: change callback from parent */\n onSelectionChange: (value: any) => void = () => {};\n\n protected isChecked = computed(() => this.selectedValue() === this.value);\n\n protected labelContainerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-2 cursor-pointer',\n this.disabled ? 'opacity-50 cursor-not-allowed' : ''\n );\n });\n\n protected radioClasses = computed(() => {\n const variantClasses = RADIO_VARIANTS[this.variant];\n const sizeClasses = RADIO_SIZES[this.size].radio;\n\n return this.twClass.merge(\n 'rounded-full border-2 bg-white dark:bg-slate-800 transition-colors duration-150',\n 'focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-slate-900',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n variantClasses,\n sizeClasses\n );\n });\n\n protected labelTextClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n RADIO_SIZES[this.size].label,\n this.disabled ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n onRadioChange(): void {\n if (!this.disabled) {\n this.onSelectionChange(this.value);\n }\n }\n}\n\n/**\n * Radio button group component\n *\n * @example\n * ```html\n * <tw-radio-group [(ngModel)]=\"selectedOption\">\n * <tw-radio-button value=\"opt1\" label=\"Option 1\"></tw-radio-button>\n * <tw-radio-button value=\"opt2\" label=\"Option 2\"></tw-radio-button>\n * </tw-radio-group>\n * ```\n */\n@Component({\n selector: 'tw-radio-group',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwRadioGroupComponent),\n multi: true,\n },\n ],\n templateUrl: './radio-group.component.html',\n})\nexport class TwRadioGroupComponent implements ControlValueAccessor, AfterContentInit {\n private readonly twClass = inject(TwClassService);\n\n /** Name for all radio buttons in the group */\n @Input() name = `tw-radio-group-${Math.random().toString(36).slice(2)}`;\n\n /** Orientation of the group */\n @Input() orientation: 'horizontal' | 'vertical' = 'vertical';\n\n /** Gap between radio buttons */\n @Input() gap: 'sm' | 'md' | 'lg' = 'md';\n\n /** Whether all radios are disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Change event */\n @Output() onChange = new EventEmitter<any>();\n\n @ContentChildren(TwRadioButtonComponent) radioButtons!: QueryList<TwRadioButtonComponent>;\n\n protected selectedValue = signal<any>(null);\n\n private onChangeFn: (value: any) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n private readonly GAPS = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n protected groupClasses = computed(() => {\n return this.twClass.merge(\n 'flex',\n this.orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n this.GAPS[this.gap]\n );\n });\n\n ngAfterContentInit(): void {\n this.updateRadioButtons();\n this.radioButtons.changes.subscribe(() => {\n this.updateRadioButtons();\n });\n }\n\n private updateRadioButtons(): void {\n this.radioButtons.forEach(radio => {\n radio.name = this.name;\n radio.selectedValue.set(this.selectedValue());\n radio.disabled = this.disabled || radio.disabled;\n radio.onSelectionChange = (value: any) => {\n this.selectedValue.set(value);\n this.onChangeFn(value);\n this.onChange.emit(value);\n this.updateRadioButtonsSelection();\n };\n });\n }\n\n private updateRadioButtonsSelection(): void {\n this.radioButtons.forEach(radio => {\n radio.selectedValue.set(this.selectedValue());\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this.selectedValue.set(value);\n if (this.radioButtons) {\n this.updateRadioButtonsSelection();\n }\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (this.radioButtons) {\n this.updateRadioButtons();\n }\n }\n}\n","<label [class]=\"labelContainerClasses()\">\n <input\n type=\"radio\"\n [class]=\"radioClasses()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n (change)=\"onRadioChange()\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n />\n <span [class]=\"labelTextClasses()\">\n {{ label }}\n <ng-content></ng-content>\n </span>\n</label>\n","<div [class]=\"groupClasses()\" role=\"radiogroup\">\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SwitchVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nconst SWITCH_VARIANTS: Record<SwitchVariant, { on: string; off: string }> = {\n primary: { on: 'bg-blue-600', off: 'bg-slate-300 dark:bg-slate-600' },\n secondary: { on: 'bg-slate-600', off: 'bg-slate-300 dark:bg-slate-600' },\n success: { on: 'bg-emerald-600', off: 'bg-slate-300 dark:bg-slate-600' },\n warning: { on: 'bg-amber-500', off: 'bg-slate-300 dark:bg-slate-600' },\n danger: { on: 'bg-rose-600', off: 'bg-slate-300 dark:bg-slate-600' },\n};\n\nconst SWITCH_SIZES: Record<\n SwitchSize,\n { track: string; thumb: string; translate: string; label: string }\n> = {\n sm: { track: 'w-8 h-5', thumb: 'w-4 h-4', translate: 'translate-x-3', label: 'text-sm' },\n md: { track: 'w-11 h-6', thumb: 'w-5 h-5', translate: 'translate-x-5', label: 'text-base' },\n lg: { track: 'w-14 h-8', thumb: 'w-7 h-7', translate: 'translate-x-6', label: 'text-lg' },\n};\n\n/**\n * Switch/Toggle component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-switch [(ngModel)]=\"enabled\">Enable notifications</tw-switch>\n * <tw-switch variant=\"success\" size=\"lg\">Dark mode</tw-switch>\n * ```\n */\n@Component({\n selector: 'tw-switch',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSwitchComponent),\n multi: true,\n },\n ],\n templateUrl: './switch.component.html',\n})\nexport class TwSwitchComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n // Signal-based inputs\n readonly variant = input<SwitchVariant>('primary');\n readonly size = input<SwitchSize>('md');\n readonly disabled = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly labelPosition = input<'left' | 'right'>('right');\n readonly classOverride = input('');\n\n // Signal-based output\n readonly onChange = output<boolean>();\n\n // Internal state\n protected readonly checked = signal(false);\n protected readonly hasLabel = true;\n private readonly _disabled = signal(false);\n\n private onChangeFn: (value: boolean) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n protected readonly containerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-3 cursor-pointer',\n this.labelPosition() === 'left' ? 'flex-row-reverse' : '',\n this._disabled() ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride()\n );\n });\n\n protected readonly trackClasses = computed(() => {\n const variant = SWITCH_VARIANTS[this.variant()];\n const sizeClasses = SWITCH_SIZES[this.size()].track;\n\n return this.twClass.merge(\n 'relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 focus-visible:ring-blue-500',\n 'disabled:cursor-not-allowed',\n this.checked() ? variant.on : variant.off,\n sizeClasses\n );\n });\n\n protected readonly thumbClasses = computed(() => {\n const sizeClasses = SWITCH_SIZES[this.size()];\n\n return this.twClass.merge(\n 'inline-block rounded-full bg-white shadow-md transform transition-transform duration-200 ease-in-out',\n 'pointer-events-none ml-0.5',\n this.checked() ? sizeClasses.translate : 'translate-x-0',\n sizeClasses.thumb\n );\n });\n\n protected readonly labelClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n SWITCH_SIZES[this.size()].label,\n this._disabled() ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n toggle(): void {\n if (this._disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.onChangeFn(newValue);\n this.onTouchedFn();\n this.onChange.emit(newValue);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n","<label [class]=\"containerClasses()\">\n <button\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [class]=\"trackClasses()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\n >\n <span [class]=\"thumbClasses()\"></span>\n </button>\n @if (hasLabel) {\n <span [class]=\"labelClasses()\">\n <ng-content></ng-content>\n </span>\n }\n</label>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface SelectOption {\n label: string;\n value: any;\n disabled?: boolean;\n icon?: string;\n}\n\nexport interface SelectGroup {\n label: string;\n options: SelectOption[];\n}\n\nexport type SelectSize = 'sm' | 'md' | 'lg';\nexport type SelectVariant = 'default' | 'filled';\nexport type SelectAppendTo = 'body' | 'self';\n\nconst SELECT_SIZES: Record<SelectSize, { trigger: string; text: string }> = {\n sm: { trigger: 'px-3 py-1.5 min-h-8', text: 'text-sm' },\n md: { trigger: 'px-4 py-2.5 min-h-10', text: 'text-base' },\n lg: { trigger: 'px-5 py-3 min-h-12', text: 'text-lg' },\n};\n\n/**\n * Select/Dropdown component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-select [options]=\"options\" [(ngModel)]=\"selected\" placeholder=\"Choose...\"></tw-select>\n * <tw-select [options]=\"options\" [filter]=\"true\" label=\"Country\"></tw-select>\n * <tw-select [options]=\"options\" appendTo=\"body\"></tw-select>\n * ```\n */\n@Component({\n selector: 'tw-select',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSelectComponent),\n multi: true,\n },\n ],\n templateUrl: './select.component.html',\n})\nexport class TwSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerButton') triggerButton!: ElementRef<HTMLButtonElement>;\n\n /** Options to display (flat list) */\n @Input() options: SelectOption[] = [];\n\n /** Grouped options to display */\n @Input() groups: SelectGroup[] = [];\n\n /** Placeholder text */\n @Input() placeholder = 'Select an option';\n\n /** Label text */\n @Input() label = '';\n\n /** Size of the select */\n @Input() size: SelectSize = 'md';\n\n /** Visual variant */\n @Input() variant: SelectVariant = 'default';\n\n /** Whether the select is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether the select is required */\n @Input({ transform: booleanAttribute }) required = false;\n\n /** Whether to show filter input */\n @Input({ transform: booleanAttribute }) filter = false;\n\n /** Filter placeholder text */\n @Input() filterPlaceholder = 'Search...';\n\n /** Empty message when no options match filter */\n @Input() emptyMessage = 'No results found';\n\n /** Whether to show checkmark for selected option */\n @Input({ transform: booleanAttribute }) showCheckmark = true;\n\n /** Hint text */\n @Input() hint = '';\n\n /** Error message */\n @Input() error = '';\n\n /** Input ID */\n @Input() inputId = `tw-select-${Math.random().toString(36).slice(2)}`;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /**\n * Where to append the dropdown\n * - 'body': Appends dropdown to document body (avoids overflow clipping)\n * - 'self': Keeps dropdown within the component (default)\n */\n @Input() appendTo: SelectAppendTo = 'body';\n\n /** Change event */\n @Output() onChange = new EventEmitter<SelectOption | null>();\n\n /** Open/Close event */\n @Output() onToggle = new EventEmitter<boolean>();\n\n protected isOpen = signal(false);\n protected filterValue = signal('');\n protected selectedValue = signal<any>(null);\n protected dropdownPosition = signal<{ top: number; left: number; width: number } | null>(null);\n\n private onChangeFn: (value: any) => void = () => {};\n private onTouchedFn: () => void = () => {};\n private portalContainer: HTMLElement | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n\n protected allOptions = computed(() => {\n if (this.groups.length > 0) {\n return this.groups.flatMap(g => g.options);\n }\n return this.options;\n });\n\n protected selectedOption = computed(() => {\n return this.allOptions().find(opt => opt.value === this.selectedValue()) || null;\n });\n\n protected filteredOptions = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.options;\n return this.options.filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n protected filteredGroups = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.groups;\n\n return this.groups\n .map(group => ({\n ...group,\n options: group.options.filter(opt => opt.label.toLowerCase().includes(filter)),\n }))\n .filter(group => group.options.length > 0);\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('relative', this.classOverride);\n });\n\n protected labelClasses = computed(() => {\n return 'block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5';\n });\n\n protected triggerClasses = computed(() => {\n const sizeClasses = SELECT_SIZES[this.size];\n const hasError = !!this.error;\n\n return this.twClass.merge(\n 'w-full flex items-center justify-between rounded-lg border bg-white dark:bg-slate-800 transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-offset-0',\n sizeClasses.trigger,\n sizeClasses.text,\n hasError\n ? 'border-rose-500 focus:ring-rose-500 focus:border-rose-500'\n : 'border-slate-300 dark:border-slate-600 focus:ring-blue-500 focus:border-blue-500 hover:border-slate-400 dark:hover:border-slate-500',\n this.disabled ? 'opacity-50 cursor-not-allowed bg-slate-50 dark:bg-slate-900' : 'cursor-pointer',\n this.isOpen() ? 'ring-2 ring-blue-500 border-blue-500' : ''\n );\n });\n\n protected valueDisplayClasses = computed(() => {\n return this.twClass.merge(\n 'truncate text-left',\n this.selectedOption() ? 'text-slate-900 dark:text-slate-100' : 'text-slate-400 dark:text-slate-500'\n );\n });\n\n protected chevronClasses = computed(() => {\n return this.twClass.merge(\n 'w-5 h-5 text-slate-400 transition-transform duration-200 flex-shrink-0 ml-2',\n this.isOpen() ? 'rotate-180' : ''\n );\n });\n\n protected dropdownClasses = computed(() => {\n const baseClasses = this.twClass.merge(\n 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 rounded-lg shadow-lg',\n 'animate-in fade-in-0 zoom-in-95 duration-100'\n );\n\n if (this.appendTo === 'body') {\n return this.twClass.merge(baseClasses, 'fixed z-[9999]');\n }\n return this.twClass.merge(baseClasses, 'absolute z-50 w-full mt-1');\n });\n\n protected dropdownStyle = computed(() => {\n if (this.appendTo === 'body') {\n const pos = this.dropdownPosition();\n if (pos) {\n return {\n top: `${pos.top}px`,\n left: `${pos.left}px`,\n width: `${pos.width}px`,\n };\n }\n }\n return {};\n });\n\n protected optionClasses(option: SelectOption) {\n const isSelected = this.isSelected(option);\n return this.twClass.merge(\n 'w-full flex items-center px-4 py-2.5 text-left text-sm transition-colors',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300'\n : 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-700',\n option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'\n );\n }\n\n ngAfterViewInit(): void {\n if (this.appendTo === 'body' && isPlatformBrowser(this.platformId)) {\n this.setupScrollListener();\n this.setupResizeListener();\n }\n }\n\n ngOnDestroy(): void {\n this.removePortal();\n this.removeScrollListener();\n this.removeResizeListener();\n }\n\n isSelected(option: SelectOption): boolean {\n return option.value === this.selectedValue();\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n\n const willOpen = !this.isOpen();\n this.isOpen.set(willOpen);\n this.onToggle.emit(willOpen);\n\n if (willOpen) {\n this.updateDropdownPosition();\n } else {\n this.filterValue.set('');\n }\n }\n\n selectOption(option: SelectOption): void {\n if (option.disabled) return;\n\n this.selectedValue.set(option.value);\n this.onChangeFn(option.value);\n this.onChange.emit(option);\n this.isOpen.set(false);\n this.filterValue.set('');\n this.onTouchedFn();\n }\n\n onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterValue.set(input.value);\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.toggleDropdown();\n break;\n }\n case 'Escape': {\n this.isOpen.set(false);\n this.filterValue.set('');\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n if (!this.isOpen()) {\n this.isOpen.set(true);\n this.updateDropdownPosition();\n }\n break;\n }\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // Check if click is inside this component\n if (this.elementRef.nativeElement.contains(target)) {\n return;\n }\n\n // Check if click is inside the portal (for appendTo=\"body\")\n if (this.portalContainer && this.portalContainer.contains(target)) {\n return;\n }\n\n this.isOpen.set(false);\n this.filterValue.set('');\n }\n\n private updateDropdownPosition(): void {\n if (this.appendTo !== 'body' || !this.triggerButton) return;\n\n const triggerEl = this.triggerButton.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n\n this.dropdownPosition.set({\n top: rect.bottom + 4, // 4px gap\n left: rect.left,\n width: rect.width,\n });\n }\n\n private setupScrollListener(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.scrollListener = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n\n window.addEventListener('scroll', this.scrollListener, true);\n }\n\n private removeScrollListener(): void {\n if (this.scrollListener) {\n window.removeEventListener('scroll', this.scrollListener, true);\n this.scrollListener = null;\n }\n }\n\n private setupResizeListener(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.resizeListener = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n\n window.addEventListener('resize', this.resizeListener);\n }\n\n private removeResizeListener(): void {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n }\n\n private removePortal(): void {\n if (this.portalContainer) {\n this.portalContainer.remove();\n this.portalContainer = null;\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Clear the selection */\n clear(): void {\n this.selectedValue.set(null);\n this.onChangeFn(null);\n this.onChange.emit(null);\n }\n}\n","<div [class]=\"containerClasses()\">\n @if (label) {\n <label [for]=\"inputId\" [class]=\"labelClasses()\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <button\n #triggerButton\n type=\"button\"\n [id]=\"inputId\"\n [class]=\"triggerClasses()\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeydown($event)\"\n >\n <span [class]=\"valueDisplayClasses()\">\n @if (selectedOption()) {\n {{ selectedOption()?.label }}\n } @else {\n {{ placeholder }}\n }\n </span>\n <svg\n [class]=\"chevronClasses()\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <!-- Dropdown for appendTo=\"self\" -->\n @if (isOpen() && appendTo === 'self') {\n <div [class]=\"dropdownClasses()\" role=\"listbox\">\n @if (filter) {\n <div class=\"p-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n <div class=\"max-h-60 overflow-auto py-1\">\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <div class=\"px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n @for (option of group.options; track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n </div>\n }\n @if (filteredGroups().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n @if (filteredOptions().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n\n @if (hint && !error) {\n <span class=\"block text-xs text-slate-500 dark:text-slate-400 mt-1.5\">{{ hint }}</span>\n }\n @if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n }\n</div>\n\n<!-- Dropdown portal for appendTo=\"body\" -->\n@if (isOpen() && appendTo === 'body') {\n <div [class]=\"dropdownClasses()\" [ngStyle]=\"dropdownStyle()\" role=\"listbox\">\n @if (filter) {\n <div class=\"p-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n <div class=\"max-h-60 overflow-auto py-1\">\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <div class=\"px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n @for (option of group.options; track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n </div>\n }\n @if (filteredGroups().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n @if (filteredOptions().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n }\n </div>\n </div>\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface MultiSelectOption {\n label: string;\n value: unknown;\n disabled?: boolean;\n icon?: string;\n}\n\nexport interface MultiSelectGroup {\n label: string;\n options: MultiSelectOption[];\n}\n\nexport type MultiSelectSize = 'sm' | 'md' | 'lg';\nexport type MultiSelectVariant = 'default' | 'filled';\nexport type MultiSelectAppendTo = 'body' | 'self';\n\nconst MULTISELECT_SIZES: Record<MultiSelectSize, { trigger: string; text: string }> = {\n sm: { trigger: 'px-3 py-1.5 min-h-8', text: 'text-sm' },\n md: { trigger: 'px-4 py-2.5 min-h-10', text: 'text-base' },\n lg: { trigger: 'px-5 py-3 min-h-12', text: 'text-lg' },\n};\n\n/**\n * Multi-select/Dropdown component with Tailwind CSS styling.\n * Supports multiple selections and grouped options.\n *\n * @example\n * ```html\n * <tw-multiselect [options]=\"options\" [(ngModel)]=\"selected\" placeholder=\"Choose...\"></tw-multiselect>\n * <tw-multiselect [groups]=\"groups\" [filter]=\"true\" label=\"Countries\"></tw-multiselect>\n * <tw-multiselect [options]=\"options\" appendTo=\"body\" [maxSelections]=\"3\"></tw-multiselect>\n * ```\n */\n@Component({\n selector: 'tw-multiselect',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwMultiSelectComponent),\n multi: true,\n },\n ],\n templateUrl: './multiselect.component.html',\n})\nexport class TwMultiSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n @ViewChild('triggerButton') triggerButton!: ElementRef<HTMLButtonElement>;\n\n /** Options to display (flat list) */\n @Input() options: MultiSelectOption[] = [];\n\n /** Grouped options to display */\n @Input() groups: MultiSelectGroup[] = [];\n\n /** Placeholder text */\n @Input() placeholder = 'Select options';\n\n /** Label text */\n @Input() label = '';\n\n /** Enable search/filter */\n @Input({ transform: booleanAttribute }) filter = false;\n\n /** Size variant */\n @Input() size: MultiSelectSize = 'md';\n\n /** Visual variant */\n @Input() variant: MultiSelectVariant = 'default';\n\n /** Where to append dropdown */\n @Input() appendTo: MultiSelectAppendTo = 'self';\n\n /** Disabled state */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Show checkboxes */\n @Input({ transform: booleanAttribute }) showCheckbox = true;\n\n /** Show select all option */\n @Input({ transform: booleanAttribute }) showSelectAll = true;\n\n /** Maximum number of selections allowed (0 = unlimited) */\n @Input() maxSelections = 0;\n\n /** Custom class for dropdown */\n @Input() dropdownClass = '';\n\n /** Custom class for trigger button */\n @Input() triggerClass = '';\n\n /** Selection change event */\n @Output() selectionChange = new EventEmitter<unknown[]>();\n\n protected readonly twClass = inject(TwClassService);\n protected readonly elementRef = inject(ElementRef);\n protected readonly document = inject(DOCUMENT);\n protected readonly platformId = inject(PLATFORM_ID);\n\n protected isOpen = signal(false);\n protected filterValue = signal('');\n protected selectedValues = signal<Set<unknown>>(new Set());\n protected dropdownPosition = signal<{ top: number; left: number; width: number } | null>(null);\n\n private onChangeFn: (value: unknown[]) => void = () => {};\n private onTouchedFn: () => void = () => {};\n private clickListener: ((event: MouseEvent) => void) | null = null;\n private resizeListener: (() => void) | null = null;\n\n protected allOptions = computed(() => {\n if (this.groups.length > 0) {\n return this.groups.flatMap(g => g.options);\n }\n return this.options;\n });\n\n protected selectedOptions = computed(() => {\n const selected = this.selectedValues();\n return this.allOptions().filter(opt => selected.has(opt.value));\n });\n\n protected displayText = computed(() => {\n const selected = this.selectedOptions();\n if (selected.length === 0) return this.placeholder;\n if (selected.length === 1) return selected[0].label;\n return `${selected.length} selected`;\n });\n\n protected filteredGroups = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.groups;\n\n return this.groups\n .map(group => ({\n ...group,\n options: group.options.filter(opt => opt.label.toLowerCase().includes(filter)),\n }))\n .filter(group => group.options.length > 0);\n });\n\n protected filteredOptions = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.options;\n\n return this.options.filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n protected triggerClasses = computed(() => {\n const sizeClasses = MULTISELECT_SIZES[this.size].trigger;\n const textClasses = MULTISELECT_SIZES[this.size].text;\n\n const baseClasses = [\n 'flex items-center justify-between w-full rounded-md border transition-colors',\n textClasses,\n sizeClasses,\n ];\n\n if (this.disabled) {\n baseClasses.push('bg-slate-100 dark:bg-slate-900 text-slate-400 dark:text-slate-500 cursor-not-allowed border-slate-300 dark:border-slate-700');\n } else if (this.variant === 'filled') {\n baseClasses.push(\n 'bg-slate-100 dark:bg-slate-700 border-slate-100 dark:border-slate-700 hover:bg-slate-200 dark:hover:bg-slate-600 focus:bg-white dark:focus:bg-slate-800 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20'\n );\n } else {\n baseClasses.push(\n 'bg-white dark:bg-slate-800 border-slate-300 dark:border-slate-600 hover:border-slate-400 dark:hover:border-slate-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 text-slate-900 dark:text-slate-100'\n );\n }\n\n return this.twClass.merge(baseClasses.join(' '), this.triggerClass);\n });\n\n protected dropdownClasses = computed(() => {\n const baseClasses = [\n 'absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white dark:bg-slate-800 py-1 shadow-lg ring-1 ring-black/5 dark:ring-white/10',\n 'focus:outline-none',\n ];\n\n return this.twClass.merge(baseClasses.join(' '), this.dropdownClass);\n });\n\n ngAfterViewInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.clickListener = this.onDocumentClick.bind(this);\n this.document.addEventListener('click', this.clickListener);\n\n this.resizeListener = () => {\n if (this.isOpen() && this.appendTo === 'body') {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n }\n\n ngOnDestroy(): void {\n if (this.clickListener) {\n this.document.removeEventListener('click', this.clickListener);\n }\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown[]): void {\n if (Array.isArray(value)) {\n this.selectedValues.set(new Set(value));\n } else {\n this.selectedValues.set(new Set());\n }\n }\n\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen.set(true);\n this.onTouchedFn();\n\n if (this.appendTo === 'body') {\n setTimeout(() => { this.updateDropdownPosition(); }, 0);\n }\n }\n\n closeDropdown(): void {\n this.isOpen.set(false);\n this.filterValue.set('');\n this.dropdownPosition.set(null);\n }\n\n toggleOption(option: MultiSelectOption): void {\n if (option.disabled) return;\n\n const selected = new Set(this.selectedValues());\n\n if (selected.has(option.value)) {\n selected.delete(option.value);\n } else {\n if (this.maxSelections > 0 && selected.size >= this.maxSelections) {\n return; // Max selections reached\n }\n selected.add(option.value);\n }\n\n this.selectedValues.set(selected);\n const values = [...selected];\n this.onChangeFn(values);\n this.selectionChange.emit(values);\n }\n\n toggleSelectAll(): void {\n const allOptions = this.allOptions().filter(opt => !opt.disabled);\n const selected = this.selectedValues();\n\n if (selected.size === allOptions.length) {\n // Deselect all\n this.selectedValues.set(new Set());\n this.onChangeFn([]);\n this.selectionChange.emit([]);\n } else {\n // Select all (respecting max selections)\n const toSelect = this.maxSelections > 0\n ? allOptions.slice(0, this.maxSelections)\n : allOptions;\n const values = toSelect.map(opt => opt.value);\n this.selectedValues.set(new Set(values));\n this.onChangeFn(values);\n this.selectionChange.emit(values);\n }\n }\n\n isSelected(option: MultiSelectOption): boolean {\n return this.selectedValues().has(option.value);\n }\n\n isAllSelected(): boolean {\n const allOptions = this.allOptions().filter(opt => !opt.disabled);\n return allOptions.length > 0 && this.selectedValues().size === allOptions.length;\n }\n\n isSomeSelected(): boolean {\n const {size} = this.selectedValues();\n return size > 0 && size < this.allOptions().filter(opt => !opt.disabled).length;\n }\n\n clearAll(): void {\n this.selectedValues.set(new Set());\n this.onChangeFn([]);\n this.selectionChange.emit([]);\n }\n\n protected onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterValue.set(input.value);\n }\n\n @HostListener('document:keydown.escape')\n protected onEscapePress(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n private onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n const clickedInside = this.elementRef.nativeElement.contains(target);\n\n if (!clickedInside && this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n private updateDropdownPosition(): void {\n if (!this.triggerButton?.nativeElement) return;\n\n const rect = this.triggerButton.nativeElement.getBoundingClientRect();\n this.dropdownPosition.set({\n top: rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n}\n\n","<div class=\"tw-multiselect relative\">\n <!-- Label -->\n @if (label) {\n <label class=\"block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1\">\n {{ label }}\n </label>\n }\n\n <!-- Trigger Button -->\n <button\n #triggerButton\n type=\"button\"\n [class]=\"triggerClasses()\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n >\n <span class=\"flex-1 text-left truncate\">\n {{ displayText() }}\n </span>\n\n <div class=\"flex items-center gap-2\">\n @if (selectedValues().size > 0 && !disabled) {\n <button\n type=\"button\"\n class=\"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n aria-label=\"Clear all selections\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n\n <svg\n class=\"w-5 h-5 text-slate-400 dark:text-slate-500 transition-transform\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </button>\n\n <!-- Dropdown -->\n @if (isOpen()) {\n @if (appendTo === 'body') {\n <div\n [class]=\"dropdownClasses()\"\n [style.top.px]=\"dropdownPosition()?.top\"\n [style.left.px]=\"dropdownPosition()?.left\"\n [style.width.px]=\"dropdownPosition()?.width\"\n [style.position]=\"'fixed'\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n } @else {\n <div [class]=\"dropdownClasses()\">\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n }\n }\n</div>\n\n<!-- Dropdown Content Template -->\n<ng-template #dropdownContent>\n <!-- Filter Input -->\n @if (filter) {\n <div class=\"px-2 py-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-1.5 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder:text-slate-400 dark:placeholder:text-slate-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 focus:outline-none\"\n placeholder=\"Search...\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <!-- Select All Option -->\n @if (showSelectAll && allOptions().length > 0) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer border-b border-slate-200 dark:border-slate-700 flex items-center gap-2\"\n (click)=\"toggleSelectAll(); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isAllSelected() || isSomeSelected()\"\n [class.bg-blue-600]=\"isAllSelected() || isSomeSelected()\"\n [class.border-slate-300]=\"!isAllSelected() && !isSomeSelected()\"\n [class.dark:border-slate-500]=\"!isAllSelected() && !isSomeSelected()\">\n @if (isAllSelected()) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n @if (isSomeSelected() && !isAllSelected()) {\n <div class=\"w-2 h-0.5 bg-white\"></div>\n }\n </div>\n }\n <span class=\"font-medium text-slate-900 dark:text-slate-100\">Select All</span>\n </div>\n }\n\n <!-- Grouped Options -->\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <!-- Group Header -->\n <div class=\"px-3 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n\n <!-- Group Options -->\n @for (option of group.options; track option.value) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer flex items-center gap-2 transition-colors\"\n [class.opacity-50]=\"option.disabled\"\n [class.cursor-not-allowed]=\"option.disabled\"\n [class.bg-blue-50]=\"isSelected(option) && !option.disabled\"\n [class.dark:bg-blue-900/30]=\"isSelected(option) && !option.disabled\"\n (click)=\"toggleOption(option); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isSelected(option)\"\n [class.bg-blue-600]=\"isSelected(option)\"\n [class.border-slate-300]=\"!isSelected(option)\"\n [class.dark:border-slate-500]=\"!isSelected(option)\">\n @if (isSelected(option)) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n </div>\n }\n\n @if (option.icon) {\n <span class=\"text-slate-500 dark:text-slate-400\">{{ option.icon }}</span>\n }\n\n <span class=\"flex-1\" [class.text-slate-900]=\"!option.disabled\" [class.dark:text-slate-100]=\"!option.disabled\" [class.text-slate-400]=\"option.disabled\" [class.dark:text-slate-500]=\"option.disabled\">\n {{ option.label }}\n </span>\n </div>\n }\n </div>\n }\n } @else {\n <!-- Flat Options -->\n @for (option of filteredOptions(); track option.value) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer flex items-center gap-2 transition-colors\"\n [class.opacity-50]=\"option.disabled\"\n [class.cursor-not-allowed]=\"option.disabled\"\n [class.bg-blue-50]=\"isSelected(option) && !option.disabled\"\n [class.dark:bg-blue-900/30]=\"isSelected(option) && !option.disabled\"\n (click)=\"toggleOption(option); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isSelected(option)\"\n [class.bg-blue-600]=\"isSelected(option)\"\n [class.border-slate-300]=\"!isSelected(option)\"\n [class.dark:border-slate-500]=\"!isSelected(option)\">\n @if (isSelected(option)) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n </div>\n }\n\n @if (option.icon) {\n <span class=\"text-slate-500 dark:text-slate-400\">{{ option.icon }}</span>\n }\n\n <span class=\"flex-1\" [class.text-slate-900]=\"!option.disabled\" [class.dark:text-slate-100]=\"!option.disabled\" [class.text-slate-400]=\"option.disabled\" [class.dark:text-slate-500]=\"option.disabled\">\n {{ option.label }}\n </span>\n </div>\n }\n }\n\n <!-- No Results -->\n @if ((groups.length > 0 ? filteredGroups().length === 0 : filteredOptions().length === 0)) {\n <div class=\"px-3 py-2 text-sm text-slate-500 dark:text-slate-400 text-center\">\n No options found\n </div>\n }\n</ng-template>\n\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SliderVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type SliderSize = 'sm' | 'md' | 'lg';\n\nconst SLIDER_VARIANTS: Record<SliderVariant, { fill: string; thumb: string }> = {\n primary: { fill: 'bg-blue-600', thumb: 'border-blue-600' },\n secondary: { fill: 'bg-slate-600', thumb: 'border-slate-600' },\n success: { fill: 'bg-emerald-600', thumb: 'border-emerald-600' },\n warning: { fill: 'bg-amber-500', thumb: 'border-amber-500' },\n danger: { fill: 'bg-rose-600', thumb: 'border-rose-600' },\n};\n\nconst SLIDER_SIZES: Record<SliderSize, { track: string; thumb: string }> = {\n sm: { track: 'h-1', thumb: 'w-4 h-4' },\n md: { track: 'h-2', thumb: 'w-5 h-5' },\n lg: { track: 'h-3', thumb: 'w-6 h-6' },\n};\n\n/**\n * Slider/Range component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-slider [(ngModel)]=\"value\" [min]=\"0\" [max]=\"100\"></tw-slider>\n * <tw-slider [showValue]=\"true\" [showMinMax]=\"true\" label=\"Volume\"></tw-slider>\n * ```\n */\n@Component({\n selector: 'tw-slider',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSliderComponent),\n multi: true,\n },\n ],\n templateUrl: './slider.component.html',\n})\nexport class TwSliderComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n /** Minimum value */\n @Input({ transform: numberAttribute }) min = 0;\n\n /** Maximum value */\n @Input({ transform: numberAttribute }) max = 100;\n\n /** Step increment */\n @Input({ transform: numberAttribute }) step = 1;\n\n /** Label text */\n @Input() label = '';\n\n /** Visual variant */\n @Input() variant: SliderVariant = 'primary';\n\n /** Size of the slider */\n @Input() size: SliderSize = 'md';\n\n /** Whether the slider is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether to show the current value */\n @Input({ transform: booleanAttribute }) showValue = false;\n\n /** Whether to show min/max labels */\n @Input({ transform: booleanAttribute }) showMinMax = false;\n\n /** Whether to show tick marks */\n @Input({ transform: booleanAttribute }) showTicks = false;\n\n /** Number of tick marks to show */\n @Input({ transform: numberAttribute }) tickCount = 5;\n\n /** Whether to show value bubble while dragging */\n @Input({ transform: booleanAttribute }) showValueBubble = false;\n\n /** Format function for display value */\n @Input() valueFormat: (value: number) => string = v => v.toString();\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Change event (fires on mouseup/touchend) */\n @Output() onChange = new EventEmitter<number>();\n\n /** Input event (fires continuously while dragging) */\n @Output() onInput = new EventEmitter<number>();\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Blur event */\n @Output() onBlur = new EventEmitter<FocusEvent>();\n\n protected value = signal(0);\n protected isDragging = signal(false);\n\n private onChangeFn: (value: number) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n protected fillPercentage = computed(() => {\n const range = this.max - this.min;\n if (range === 0) return 0;\n return ((this.value() - this.min) / range) * 100;\n });\n\n protected displayValue = computed(() => {\n return this.valueFormat(this.value());\n });\n\n protected ticks = computed(() => {\n if (this.tickCount <= 0) return [];\n const ticks: number[] = [];\n const step = (this.max - this.min) / (this.tickCount - 1);\n for (let i = 0; i < this.tickCount; i++) {\n ticks.push(Math.round(this.min + step * i));\n }\n return ticks;\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('w-full', this.classOverride);\n });\n\n protected labelClasses = computed(() => {\n return 'text-sm font-medium text-slate-700 dark:text-slate-300';\n });\n\n protected sliderContainerClasses = computed(() => {\n return 'flex items-center';\n });\n\n protected trackClasses = computed(() => {\n const sizeClasses = SLIDER_SIZES[this.size].track;\n return this.twClass.merge(\n 'w-full rounded-full bg-slate-200 dark:bg-slate-700',\n sizeClasses,\n this.disabled ? 'opacity-50' : ''\n );\n });\n\n protected fillClasses = computed(() => {\n const variant = SLIDER_VARIANTS[this.variant];\n const sizeClasses = SLIDER_SIZES[this.size].track;\n return this.twClass.merge(\n 'rounded-full transition-all duration-100',\n variant.fill,\n sizeClasses\n );\n });\n\n protected inputClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 w-full opacity-0 cursor-pointer',\n this.disabled ? 'cursor-not-allowed' : ''\n );\n });\n\n protected thumbClasses = computed(() => {\n const variant = SLIDER_VARIANTS[this.variant];\n const sizeClasses = SLIDER_SIZES[this.size].thumb;\n return this.twClass.merge(\n 'rounded-full bg-white border-2 shadow-md transition-transform',\n variant.thumb,\n sizeClasses,\n this.isDragging() ? 'scale-110' : '',\n this.disabled ? 'opacity-50' : ''\n );\n });\n\n onSliderInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number.parseFloat(input.value);\n this.value.set(newValue);\n this.onInput.emit(newValue);\n }\n\n onSliderChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number.parseFloat(input.value);\n this.value.set(newValue);\n this.onChangeFn(newValue);\n this.onChange.emit(newValue);\n }\n\n onInputBlur(): void {\n this.onTouchedFn();\n this.onBlur.emit();\n }\n\n onDragStart(): void {\n this.isDragging.set(true);\n }\n\n onDragEnd(): void {\n this.isDragging.set(false);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n this.value.set(value ?? this.min);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Header row with label and/or value -->\n @if (label || showValue) {\n <div class=\"flex justify-between items-center mb-2\">\n @if (label) {\n <label [class]=\"labelClasses()\">{{ label }}</label>\n } @else {\n <span></span>\n }\n @if (showValue) {\n <span class=\"text-sm font-semibold text-slate-900 tabular-nums\">{{ displayValue() }}</span>\n }\n </div>\n }\n\n <div [class]=\"sliderContainerClasses()\">\n @if (showMinMax) {\n <span class=\"text-xs text-slate-500 mr-3 tabular-nums min-w-6\">{{ valueFormat(min) }}</span>\n }\n\n <div class=\"relative flex-1\">\n <!-- Track background -->\n <div [class]=\"trackClasses()\">\n <!-- Fill -->\n <div [class]=\"fillClasses()\" [style.width.%]=\"fillPercentage()\"></div>\n </div>\n\n <!-- Thumb indicator (visual only, positioned over the fill) -->\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 pointer-events-none\"\n [style.left.%]=\"fillPercentage()\"\n >\n <div [class]=\"thumbClasses()\"></div>\n\n <!-- Value tooltip bubble (shown while dragging or when showValueBubble is true) -->\n @if (showValueBubble && isDragging()) {\n <div\n class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-slate-800 text-white text-xs font-medium rounded shadow-lg whitespace-nowrap\"\n >\n {{ displayValue() }}\n <div\n class=\"absolute top-full left-1/2 -translate-x-1/2 border-4 border-transparent border-t-slate-800\"\n ></div>\n </div>\n }\n </div>\n\n <!-- Native range input (invisible, handles interaction) -->\n <input\n type=\"range\"\n [class]=\"inputClasses()\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value()\"\n [disabled]=\"disabled\"\n (input)=\"onSliderInput($event)\"\n (change)=\"onSliderChange($event)\"\n (mousedown)=\"onDragStart()\"\n (mouseup)=\"onDragEnd()\"\n (touchstart)=\"onDragStart()\"\n (touchend)=\"onDragEnd()\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onInputBlur()\"\n />\n </div>\n\n @if (showMinMax) {\n <span class=\"text-xs text-slate-500 ml-3 tabular-nums min-w-6 text-right\">{{\n valueFormat(max)\n }}</span>\n }\n </div>\n\n @if (showTicks && tickCount > 0) {\n <div class=\"flex justify-between px-1 mt-1\">\n @for (tick of ticks(); track $index) {\n <span class=\"text-xs text-slate-400 tabular-nums\">{{ tick }}</span>\n }\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type RatingVariant = 'primary' | 'warning' | 'danger';\nexport type RatingSize = 'sm' | 'md' | 'lg' | 'xl';\n\nconst RATING_VARIANTS: Record<RatingVariant, { filled: string; empty: string }> = {\n primary: { filled: 'text-blue-500', empty: 'text-slate-300 dark:text-slate-600' },\n warning: { filled: 'text-amber-400', empty: 'text-slate-300 dark:text-slate-600' },\n danger: { filled: 'text-rose-500', empty: 'text-slate-300 dark:text-slate-600' },\n};\n\nconst RATING_SIZES: Record<RatingSize, string> = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n};\n\n/**\n * Rating/Stars component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-rating [(ngModel)]=\"rating\"></tw-rating>\n * <tw-rating [stars]=\"10\" [allowHalf]=\"true\" variant=\"warning\"></tw-rating>\n * <tw-rating [readonly]=\"true\" [value]=\"4.5\"></tw-rating>\n * ```\n */\n@Component({\n selector: 'tw-rating',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwRatingComponent),\n multi: true,\n },\n ],\n templateUrl: './rating.component.html',\n})\nexport class TwRatingComponent implements ControlValueAccessor {\n /** Number of stars */\n @Input({ transform: numberAttribute }) stars = 5;\n /** Visual variant */\n @Input() variant: RatingVariant = 'warning';\n /** Size of the stars */\n @Input() size: RatingSize = 'md';\n /** Whether the rating is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n /** Whether the rating is readonly (display only) */\n @Input({ transform: booleanAttribute }) readonly = false;\n /** Whether to allow half-star ratings */\n @Input({ transform: booleanAttribute }) allowHalf = false;\n /** Whether to show the current value */\n @Input({ transform: booleanAttribute }) showValue = false;\n /** Whether to show cancel button */\n @Input({ transform: booleanAttribute }) showCancel = false;\n /** Aria label for accessibility */\n @Input() ariaLabel = 'Rating';\n /** Additional classes */\n @Input() classOverride = '';\n /** Change event */\n @Output() change = new EventEmitter<number>();\n /** Focus event */\n @Output() focus = new EventEmitter<FocusEvent>();\n /** Blur event */\n @Output() blur = new EventEmitter<FocusEvent>();\n;\n;\n getFilledStars(index: number): number {\n const currentValue = this.hoverValue() ?? this.value();\n return currentValue;\n }\n onStarClick(index: number): void {\n if (this.disabled || this.readonly) return;\n\n let newValue = index + 1;\n\n // If clicking the same star that's already fully selected, decrease by 1 (or 0.5 if allowHalf)\n if (this.value() === newValue && !this.allowHalf) {\n newValue = 0;\n }\n\n this.value.set(newValue);\n this.onChangeFn(newValue);\n this.change.emit(newValue);\n }\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n this.value.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected value = signal(0);\n protected hoverValue = signal<number | null>(null);\n protected starsArray = computed(() => new Array(this.stars).fill(0));\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-1',\n this.disabled ? 'opacity-50' : '',\n this.classOverride\n );\n });\n protected starClasses(index: number) {\n const variant = RATING_VARIANTS[this.variant];\n const isFilled = this.getFilledStars(index) > index;\n\n return this.twClass.merge(\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded transition-colors duration-100',\n this.readonly || this.disabled ? 'cursor-default' : 'cursor-pointer hover:scale-110',\n isFilled ? variant.filled : variant.empty\n );\n }\n private readonly twClass = inject(TwClassService);\n private onChangeFn: (value: number) => void = () => {}\n private onTouchedFn: () => void = () => {}\n onStarHover(index: number): void {\n if (this.disabled || this.readonly) return;\n this.hoverValue.set(index + 1);\n }\n onStarLeave(): void {\n this.hoverValue.set(null);\n }\n onInputBlur(event: FocusEvent): void {\n this.onTouchedFn();\n this.blur.emit(event);\n }\n clear(): void {\n this.value.set(0);\n this.onChangeFn(0);\n this.change.emit(0);\n }\n protected iconClasses() {\n return RATING_SIZES[this.size];\n }\n protected valueClasses() {\n return 'ml-2 text-sm font-medium text-slate-600 dark:text-slate-400';\n }\n}\n","<div [class]=\"containerClasses()\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel\">\n @for (star of starsArray(); track $index) {\n <button\n type=\"button\"\n [class]=\"starClasses($index)\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-checked]=\"$index < value()\"\n (click)=\"onStarClick($index)\"\n (mouseenter)=\"onStarHover($index)\"\n (mouseleave)=\"onStarLeave()\"\n (focus)=\"focus.emit($event)\"\n (blur)=\"onInputBlur($event)\"\n >\n @if ($index < getFilledStars($index)) {\n <!-- Filled star -->\n <svg [class]=\"iconClasses()\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n d=\"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\"\n />\n </svg>\n } @else if ($index < getFilledStars($index) + 0.5 && allowHalf) {\n <!-- Half star -->\n <svg [class]=\"iconClasses()\" viewBox=\"0 0 24 24\">\n <defs>\n <linearGradient [id]=\"'half-' + $index\">\n <stop offset=\"50%\" stop-color=\"currentColor\" />\n <stop offset=\"50%\" stop-color=\"transparent\" />\n </linearGradient>\n </defs>\n <path\n [attr.fill]=\"'url(#half-' + $index + ')'\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n d=\"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\"\n />\n </svg>\n } @else {\n <!-- Empty star -->\n <svg\n [class]=\"iconClasses()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"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\"\n />\n </svg>\n }\n </button>\n }\n @if (showValue) {\n <span [class]=\"valueClasses()\">{{ value() }}</span>\n }\n @if (showCancel && value() > 0 && !readonly) {\n <button\n type=\"button\"\n class=\"ml-2 p-1 text-slate-400 hover:text-slate-600 transition-colors\"\n (click)=\"clear()\"\n aria-label=\"Clear rating\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ChipVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\nexport type ChipStyle = 'solid' | 'soft' | 'outline';\nexport type ChipSize = 'sm' | 'md' | 'lg';\n\nconst CHIP_VARIANTS: Record<ChipVariant, Record<ChipStyle, string>> = {\n primary: {\n solid: 'bg-blue-600 text-white',\n soft: 'bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300',\n outline: 'border border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400',\n },\n secondary: {\n solid: 'bg-slate-600 text-white',\n soft: 'bg-slate-100 dark:bg-slate-700 text-slate-700 dark:text-slate-300',\n outline: 'border border-slate-600 dark:border-slate-400 text-slate-600 dark:text-slate-400',\n },\n success: {\n solid: 'bg-emerald-600 text-white',\n soft: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-700 dark:text-emerald-300',\n outline: 'border border-emerald-600 dark:border-emerald-400 text-emerald-600 dark:text-emerald-400',\n },\n warning: {\n solid: 'bg-amber-500 text-white',\n soft: 'bg-amber-100 dark:bg-amber-900/40 text-amber-700 dark:text-amber-300',\n outline: 'border border-amber-500 dark:border-amber-400 text-amber-600 dark:text-amber-400',\n },\n danger: {\n solid: 'bg-rose-600 text-white',\n soft: 'bg-rose-100 dark:bg-rose-900/40 text-rose-700 dark:text-rose-300',\n outline: 'border border-rose-600 dark:border-rose-400 text-rose-600 dark:text-rose-400',\n },\n info: {\n solid: 'bg-cyan-600 text-white',\n soft: 'bg-cyan-100 dark:bg-cyan-900/40 text-cyan-700 dark:text-cyan-300',\n outline: 'border border-cyan-600 dark:border-cyan-400 text-cyan-600 dark:text-cyan-400',\n },\n};\n\nconst CHIP_SIZES: Record<ChipSize, { chip: string; image: string }> = {\n sm: { chip: 'px-2 py-0.5 text-xs gap-1', image: 'w-4 h-4' },\n md: { chip: 'px-3 py-1 text-sm gap-1.5', image: 'w-5 h-5' },\n lg: { chip: 'px-4 py-1.5 text-base gap-2', image: 'w-6 h-6' },\n};\n\n/**\n * Chip component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-chip label=\"Angular\"></tw-chip>\n * <tw-chip variant=\"success\" [removable]=\"true\" (onRemove)=\"handleRemove()\">Active</tw-chip>\n * <tw-chip [image]=\"avatarUrl\" label=\"John Doe\"></tw-chip>\n * ```\n */\n@Component({\n selector: 'tw-chip',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './chip.component.html',\n})\nexport class TwChipComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Chip label text */\n @Input() label = '';\n\n /** Visual variant */\n @Input() variant: ChipVariant = 'primary';\n\n /** Style variant */\n @Input() chipStyle: ChipStyle = 'soft';\n\n /** Size */\n @Input() size: ChipSize = 'md';\n\n /** Image URL for avatar chip */\n @Input() image = '';\n\n /** Image alt text */\n @Input() imageAlt = '';\n\n /** Whether the chip can be removed */\n @Input({ transform: booleanAttribute }) removable = false;\n\n /** Whether the chip is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Remove event */\n @Output() onRemove = new EventEmitter<void>();\n\n protected chipClasses = computed(() => {\n const variantClasses = CHIP_VARIANTS[this.variant][this.chipStyle];\n const sizeClasses = CHIP_SIZES[this.size].chip;\n\n return this.twClass.merge(\n 'inline-flex items-center rounded-full font-medium transition-colors',\n variantClasses,\n sizeClasses,\n this.disabled ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride\n );\n });\n\n protected imageClasses = computed(() => {\n const sizeClasses = CHIP_SIZES[this.size].image;\n return this.twClass.merge('rounded-full object-cover -ml-1', sizeClasses);\n });\n\n protected removeButtonClasses = computed(() => {\n return this.twClass.merge(\n 'ml-1 -mr-1 p-0.5 rounded-full transition-colors',\n 'hover:bg-black/10 focus:outline-none focus:ring-2 focus:ring-offset-1'\n );\n });\n\n onRemoveClick(event: Event): void {\n event.stopPropagation();\n if (!this.disabled) {\n this.onRemove.emit();\n }\n }\n}\n\n/**\n * Chip input for creating/selecting multiple chips\n */\n@Component({\n selector: 'tw-chips',\n standalone: true,\n imports: [CommonModule, TwChipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"containerClasses()\">\n @for (value of values; track $index) {\n <tw-chip\n [label]=\"getDisplayValue(value)\"\n [variant]=\"variant\"\n [chipStyle]=\"chipStyle\"\n [size]=\"size\"\n [removable]=\"!disabled\"\n (onRemove)=\"removeValue($index)\"\n >\n </tw-chip>\n }\n @if (allowAdd && !disabled) {\n <input\n type=\"text\"\n [class]=\"inputClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n (keydown.enter)=\"onAddChip($event)\"\n (keydown.backspace)=\"onBackspace($event)\"\n #inputRef\n />\n }\n </div>\n `,\n})\nexport class TwChipsComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() values: any[] = [];\n @Input() variant: ChipVariant = 'primary';\n @Input() chipStyle: ChipStyle = 'soft';\n @Input() size: ChipSize = 'md';\n @Input() placeholder = 'Add...';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) allowAdd = true;\n @Input() field = '';\n @Input() classOverride = '';\n\n @Output() valuesChange = new EventEmitter<any[]>();\n @Output() onAdd = new EventEmitter<any>();\n @Output() onRemove = new EventEmitter<{ value: any; index: number }>();\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'flex flex-wrap items-center gap-2 p-2 min-h-10',\n 'border border-slate-300 dark:border-slate-600 rounded-lg focus-within:ring-2 focus-within:ring-blue-500 focus-within:border-blue-500',\n this.disabled ? 'bg-slate-50 dark:bg-slate-900 opacity-50' : 'bg-white dark:bg-slate-800',\n this.classOverride\n );\n });\n\n protected inputClasses = computed(() => {\n return 'flex-1 min-w-20 px-2 py-1 text-sm outline-none bg-transparent';\n });\n\n getDisplayValue(value: any): string {\n if (typeof value === 'object' && this.field) {\n return value[this.field];\n }\n return String(value);\n }\n\n removeValue(index: number): void {\n const removed = this.values[index];\n const newValues = [...this.values];\n newValues.splice(index, 1);\n this.values = newValues;\n this.valuesChange.emit(this.values);\n this.onRemove.emit({ value: removed, index });\n }\n\n onAddChip(event: Event): void {\n event.preventDefault();\n const input = event.target as HTMLInputElement;\n const value = input.value.trim();\n\n if (value) {\n this.values = [...this.values, value];\n this.valuesChange.emit(this.values);\n this.onAdd.emit(value);\n input.value = '';\n }\n }\n\n onBackspace(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.value === '' && this.values.length > 0) {\n this.removeValue(this.values.length - 1);\n }\n }\n}\n","<span [class]=\"chipClasses()\">\n <!-- Leading icon/image -->\n @if (image) {\n <img [src]=\"image\" [alt]=\"imageAlt\" [class]=\"imageClasses()\" />\n } @else {\n <ng-content select=\"[twChipIcon]\"></ng-content>\n }\n\n <!-- Label -->\n <span class=\"truncate\">\n @if (label) {\n {{ label }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n <!-- Remove button -->\n @if (removable && !disabled) {\n <button\n type=\"button\"\n [class]=\"removeButtonClasses()\"\n (click)=\"onRemoveClick($event)\"\n aria-label=\"Remove\"\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</span>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n HostBinding,\n inject,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\n\nconst CARD_BASE_CLASSES = `\n block\n rounded-xl\n transition-all duration-200\n`;\n\n/**\n * Card variant classes\n * IMPORTANT: Keep these as static strings for Tailwind JIT detection\n * The dark: prefix classes must be statically analyzable\n */\nconst CARD_VARIANTS: Record<CardVariant, string> = {\n // elevated: bg-white dark:bg-slate-800 shadow-md hover:shadow-lg dark:shadow-slate-900/50\n elevated: 'bg-white dark:bg-slate-800 shadow-md hover:shadow-lg dark:shadow-slate-900/50',\n // outlined: bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600\n outlined: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600',\n // filled: bg-slate-50 dark:bg-slate-700 hover:bg-slate-100 dark:hover:bg-slate-600\n filled: 'bg-slate-50 dark:bg-slate-700 hover:bg-slate-100 dark:hover:bg-slate-600',\n // ghost: bg-transparent\n ghost: 'bg-transparent',\n};\n\n/**\n * Card header directive for semantic structure\n */\n@Directive({\n selector: 'tw-card-header, [twCardHeader]',\n standalone: true,\n})\nexport class TwCardHeaderDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block px-6 py-4 border-b border-slate-100 dark:border-slate-700', this.class);\n }\n}\n\n/**\n * Card title directive\n */\n@Directive({\n selector: 'tw-card-title, [twCardTitle]',\n standalone: true,\n})\nexport class TwCardTitleDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-lg font-semibold text-slate-900 dark:text-white', this.class);\n }\n}\n\n/**\n * Card subtitle directive\n */\n@Directive({\n selector: 'tw-card-subtitle, [twCardSubtitle]',\n standalone: true,\n})\nexport class TwCardSubtitleDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-sm text-slate-500 dark:text-slate-400 mt-1', this.class);\n }\n}\n\n/**\n * Card body/content directive\n */\n@Directive({\n selector: 'tw-card-body, [twCardBody]',\n standalone: true,\n})\nexport class TwCardBodyDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block p-6', this.class);\n }\n}\n\n/**\n * Card footer directive\n */\n@Directive({\n selector: 'tw-card-footer, [twCardFooter]',\n standalone: true,\n})\nexport class TwCardFooterDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge(\n 'block px-6 py-4 border-t border-slate-100 dark:border-slate-700 bg-slate-50/50 dark:bg-slate-700/50 rounded-b-xl',\n this.class\n );\n }\n}\n\n/**\n * Card media/image container directive\n */\n@Directive({\n selector: 'tw-card-media, [twCardMedia]',\n standalone: true,\n})\nexport class TwCardMediaDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n /** Position of the media (top for header image, full for background) */\n @Input() position: 'top' | 'bottom' | 'full' = 'top';\n\n @HostBinding('class')\n get hostClass(): string {\n const positionClasses: Record<string, string> = {\n top: 'block -mx-0 -mt-0 mb-0 rounded-t-xl overflow-hidden',\n bottom: 'block -mx-0 -mb-0 mt-0 rounded-b-xl overflow-hidden',\n full: 'block absolute inset-0 rounded-xl overflow-hidden',\n };\n\n return this.twClass.merge(\n positionClasses[this.position],\n '[&>img]:w-full [&>img]:h-full [&>img]:object-cover',\n this.class\n );\n }\n}\n\n/**\n * Highly customizable card component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-card>\n * <tw-card-header>\n * <tw-card-title>Card Title</tw-card-title>\n * <tw-card-subtitle>Subtitle text</tw-card-subtitle>\n * </tw-card-header>\n * <tw-card-body>\n * Card content goes here\n * </tw-card-body>\n * <tw-card-footer>\n * <button tw-button variant=\"primary\">Action</button>\n * </tw-card-footer>\n * </tw-card>\n *\n * <tw-card variant=\"outlined\" [hoverable]=\"true\" [clickable]=\"true\" (click)=\"handleClick()\">\n * <tw-card-media position=\"top\">\n * <img src=\"image.jpg\" alt=\"Card image\">\n * </tw-card-media>\n * <tw-card-body>\n * Content with image\n * </tw-card-body>\n * </tw-card>\n * ```\n */\n@Component({\n selector: 'tw-card',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClasses()',\n '[attr.tabindex]': 'clickable ? 0 : null',\n role: 'article',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwCardComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Visual variant of the card */\n @Input() variant: CardVariant = 'elevated';\n\n /** Whether the card should have hover effects */\n @Input({ transform: booleanAttribute }) hoverable = false;\n\n /** Whether the card is clickable (adds cursor and focus styles) */\n @Input({ transform: booleanAttribute }) clickable = false;\n\n /** Whether to add padding to the card (use false when using card-body) */\n @Input({ transform: booleanAttribute }) padded = false;\n\n /** Additional classes to merge with base styles */\n @Input() classOverride = '';\n\n /** Complete class override (replaces all default classes) */\n @Input() classReplace = '';\n\n protected computedClasses = computed(() => {\n if (this.classReplace) {\n return this.classReplace;\n }\n\n const baseClasses = CARD_BASE_CLASSES;\n const variantClasses = CARD_VARIANTS[this.variant];\n\n const conditionalClasses: string[] = [];\n\n if (this.hoverable) {\n conditionalClasses.push('hover:-translate-y-0.5');\n }\n\n if (this.clickable) {\n conditionalClasses.push(\n 'cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900'\n );\n }\n\n if (this.padded) {\n conditionalClasses.push('p-6');\n }\n\n return this.twClass.merge(\n baseClasses,\n variantClasses,\n conditionalClasses.join(' '),\n this.classOverride\n );\n });\n}\n\n/**\n * Horizontal card layout component\n */\n@Component({\n selector: 'tw-card-horizontal',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './card-horizontal.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'article',\n },\n})\nexport class TwCardHorizontalComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() variant: CardVariant = 'elevated';\n @Input() classOverride = '';\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n 'flex rounded-xl overflow-hidden',\n CARD_VARIANTS[this.variant],\n this.classOverride\n );\n });\n}\n","<div class=\"flex-shrink-0\">\n <ng-content select=\"tw-card-media, [twCardMedia]\"></ng-content>\n</div>\n<div class=\"flex-1 min-w-0\">\n <ng-content></ng-content>\n</div>\n","export * from './card.component';\n\nimport {\n TwCardBodyDirective,\n TwCardComponent,\n TwCardFooterDirective,\n TwCardHeaderDirective,\n TwCardHorizontalComponent,\n TwCardMediaDirective,\n TwCardSubtitleDirective,\n TwCardTitleDirective,\n} from './card.component';\n\nexport const TW_CARD_COMPONENTS = [\n TwCardComponent,\n TwCardHorizontalComponent,\n TwCardHeaderDirective,\n TwCardTitleDirective,\n TwCardSubtitleDirective,\n TwCardBodyDirective,\n TwCardFooterDirective,\n TwCardMediaDirective,\n] as const;\n","import {\n AfterContentInit,\n Component,\n computed,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'tw-accordion-item',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './accordion-item.component.html',\n})\nexport class TwAccordionItemComponent {\n @Input() set itemTitle(value: string) {\n this._title.set(value);\n }\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n @Input() set itemDisabled(value: boolean) {\n this._disabled.set(value);\n }\n @Input() set value(value: string) {\n this._value.set(value);\n }\n @Input() variant: 'default' | 'bordered' | 'separated' = 'default';\n\n @Output() openChange = new EventEmitter<boolean>();\n\n protected _title = signal('');\n protected _open = signal(false);\n protected _disabled = signal(false);\n protected _value = signal('');\n\n hasHeaderContent = false;\n\n protected itemTitleValue = computed(() => this._title());\n protected isOpen = computed(() => this._open());\n protected isDisabled = computed(() => this._disabled());\n\n toggle(): void {\n if (this.isDisabled()) return;\n this._open.update(v => !v);\n this.openChange.emit(this._open());\n }\n\n setOpen(open: boolean): void {\n this._open.set(open);\n }\n\n getValue(): string {\n return this._value();\n }\n\n protected itemClasses = computed(() => {\n const { variant } = this;\n\n const variantClasses: Record<string, string> = {\n default: 'border-b border-slate-200 dark:border-slate-700 last:border-b-0',\n bordered: 'border border-slate-200 dark:border-slate-700 rounded-lg mb-2 last:mb-0',\n separated: 'bg-slate-50 dark:bg-slate-800 rounded-lg mb-2 last:mb-0',\n };\n\n return variantClasses[variant];\n });\n\n protected headerClasses = computed(() => {\n const disabled = this.isDisabled();\n\n const classes = [\n 'flex items-center justify-between w-full py-4 px-4 text-left font-medium transition-colors',\n ];\n\n if (disabled) {\n classes.push('text-slate-400 dark:text-slate-500 cursor-not-allowed');\n } else {\n classes.push('text-slate-900 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800');\n }\n\n return classes.join(' ');\n });\n\n protected iconClasses = computed(() => {\n const isOpen = this._open();\n\n return [\n 'w-5 h-5 text-slate-500 dark:text-slate-400 transition-transform duration-200',\n isOpen ? 'rotate-180' : '',\n ].join(' ');\n });\n\n protected contentClasses = computed(() => 'px-4 pb-4 text-slate-600 dark:text-slate-400');\n}\n\n@Component({\n selector: 'tw-accordion',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './accordion.component.html',\n})\nexport class TwAccordionComponent implements AfterContentInit {\n @Input() set allowMultiple(value: boolean) {\n this._allowMultiple.set(value);\n }\n @Input() set variant(value: 'default' | 'bordered' | 'separated') {\n this._variant.set(value);\n }\n @Input() set defaultValue(value: string | string[]) {\n this._defaultValue.set(value);\n }\n\n @ContentChildren(TwAccordionItemComponent) items!: QueryList<TwAccordionItemComponent>;\n\n protected _allowMultiple = signal(false);\n protected _variant = signal<'default' | 'bordered' | 'separated'>('default');\n protected _defaultValue = signal<string | string[]>('');\n\n ngAfterContentInit(): void {\n const defaultValue = this._defaultValue();\n const defaults = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n\n this.items.forEach(item => {\n item.variant = this._variant();\n\n if (defaults.includes(item.getValue())) {\n item.setOpen(true);\n }\n\n item.openChange.subscribe(isOpen => {\n if (isOpen && !this._allowMultiple()) {\n this.items.forEach(other => {\n if (other !== item) {\n other.setOpen(false);\n }\n });\n }\n });\n });\n }\n\n protected accordionClasses = computed(() => {\n const variant = this._variant();\n\n const variantClasses: Record<string, string> = {\n default: 'border border-slate-200 dark:border-slate-700 rounded-lg divide-y divide-slate-200 dark:divide-slate-700',\n bordered: '',\n separated: '',\n };\n\n return variantClasses[variant];\n });\n}\n","<div [class]=\"itemClasses()\">\n <button\n type=\"button\"\n [class]=\"headerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n (click)=\"toggle()\"\n >\n <span class=\"flex-1 text-left\">\n <ng-content select=\"[twAccordionHeader]\"></ng-content>\n @if (!hasHeaderContent) {\n {{ itemTitleValue() }}\n }\n </span>\n <svg\n [class]=\"iconClasses()\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n @if (isOpen()) {\n <div [class]=\"contentClasses()\">\n <ng-content></ng-content>\n </div>\n }\n</div>\n","<div [class]=\"accordionClasses()\">\n <ng-content></ng-content>\n</div>\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n Output,\n QueryList,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type TabsVariant = 'line' | 'enclosed' | 'pills' | 'soft-rounded';\nexport type TabsSize = 'sm' | 'md' | 'lg';\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\nconst TABS_VARIANTS: Record<TabsVariant, { list: string; tab: string; activeTab: string }> = {\n line: {\n list: 'border-b border-slate-200 dark:border-slate-700 gap-2',\n tab: 'border-b-2 border-transparent -mb-px text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:border-slate-300 dark:hover:border-slate-600',\n activeTab: 'border-blue-500 text-blue-600 dark:text-blue-400',\n },\n enclosed: {\n list: 'border-b border-slate-200 dark:border-slate-700 gap-1',\n tab: 'border border-transparent rounded-t-lg -mb-px text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800',\n activeTab: 'bg-white dark:bg-slate-800 border-slate-200 dark:border-slate-700 border-b-white dark:border-b-slate-800 text-slate-900 dark:text-slate-100',\n },\n pills: {\n list: 'gap-2',\n tab: 'rounded-lg text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:bg-slate-100 dark:hover:bg-slate-800',\n activeTab: 'bg-blue-600 text-white hover:bg-blue-700 hover:text-white',\n },\n 'soft-rounded': {\n list: 'bg-slate-100 dark:bg-slate-800 p-1.5 rounded-lg gap-2',\n tab: 'rounded-md text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100',\n activeTab: 'bg-white dark:bg-slate-700 text-slate-900 dark:text-slate-100 shadow-sm',\n },\n};\n\nconst TABS_SIZES: Record<TabsSize, string> = {\n sm: 'text-sm px-4 py-2',\n md: 'text-sm px-5 py-2.5',\n lg: 'text-base px-6 py-3',\n};\n\n/**\n * Tab panel component for tab content\n */\n@Component({\n selector: 'tw-tab-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab-panel.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'tabpanel',\n '[attr.aria-labelledby]': 'labelledBy',\n '[attr.tabindex]': '0',\n '[attr.hidden]': '!active ? true : null',\n },\n})\nexport class TwTabPanelComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Unique identifier for this tab */\n @Input() value = '';\n\n /** Label for the tab (if not using template) */\n @Input() label = '';\n\n /** Whether the tab is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Icon to show before the label */\n @Input() icon = '';\n\n /** Whether to lazy load the content */\n @Input({ transform: booleanAttribute }) lazy = false;\n\n /** Additional panel classes */\n @Input() panelClass = '';\n\n /** Whether this panel is active */\n active = false;\n\n /** ID of the tab that labels this panel */\n labelledBy = '';\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n 'focus:outline-none',\n this.active ? 'block' : 'hidden',\n this.panelClass\n );\n });\n}\n\n/**\n * Tabs component for organizing content into switchable panels\n *\n * @example\n * ```html\n * <tw-tabs [(value)]=\"activeTab\" variant=\"line\">\n * <tw-tab-panel value=\"tab1\" label=\"Tab 1\">\n * Content for tab 1\n * </tw-tab-panel>\n * <tw-tab-panel value=\"tab2\" label=\"Tab 2\">\n * Content for tab 2\n * </tw-tab-panel>\n * <tw-tab-panel value=\"tab3\" label=\"Tab 3\" [disabled]=\"true\">\n * Content for tab 3\n * </tw-tab-panel>\n * </tw-tabs>\n * ```\n */\n@Component({\n selector: 'tw-tabs',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tabs.component.html',\n host: {\n class: 'block',\n },\n})\nexport class TwTabsComponent implements AfterContentInit {\n private readonly twClass = inject(TwClassService);\n\n @ContentChildren(TwTabPanelComponent) tabPanels!: QueryList<TwTabPanelComponent>;\n\n /** Currently active tab value */\n @Input() value = '';\n\n /** Visual variant */\n @Input() variant: TabsVariant = 'line';\n\n /** Size of the tabs */\n @Input() size: TabsSize = 'md';\n\n /** Orientation of the tabs */\n @Input() orientation: TabsOrientation = 'horizontal';\n\n /** Whether the tab list should be full width */\n @Input({ transform: booleanAttribute }) fullWidth = false;\n\n /** Whether to animate panel transitions */\n @Input({ transform: booleanAttribute }) animated = true;\n\n /** Additional tab list classes */\n @Input() tabListClass = '';\n\n /** Additional panels container classes */\n @Input() panelsClass = '';\n\n /** Value change event */\n @Output() valueChange = new EventEmitter<string>();\n\n /** Tab change event with previous and current values */\n @Output() tabChange = new EventEmitter<{ previous: string; current: string }>();\n\n protected panels: TwTabPanelComponent[] = [];\n\n ngAfterContentInit(): void {\n this.panels = this.tabPanels.toArray();\n\n // Set initial active tab\n if (this.value) {\n this.selectTab(this.value, false);\n } else if (this.panels.length > 0) {\n // Select first non-disabled tab\n const firstEnabled = this.panels.find(p => !p.disabled);\n if (firstEnabled) {\n this.selectTab(firstEnabled.value, false);\n }\n }\n\n // Update panels list when content changes\n this.tabPanels.changes.subscribe(() => {\n this.panels = this.tabPanels.toArray();\n });\n }\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(this.orientation === 'vertical' ? 'flex gap-4' : 'block');\n });\n\n protected tabListClasses = computed(() => {\n const variantClasses = TABS_VARIANTS[this.variant].list;\n\n return this.twClass.merge(\n 'flex',\n this.orientation === 'vertical' ? 'flex-col' : 'flex-row',\n this.fullWidth ? '[&>button]:flex-1' : '',\n variantClasses,\n this.tabListClass\n );\n });\n\n protected panelsContainerClasses = computed(() => {\n return this.twClass.merge(\n 'mt-4',\n this.orientation === 'vertical' ? 'flex-1 mt-0' : '',\n this.animated ? 'transition-opacity duration-150' : '',\n this.panelsClass\n );\n });\n\n protected getTabClasses(panel: TwTabPanelComponent): string {\n const variantConfig = TABS_VARIANTS[this.variant];\n\n return this.twClass.merge(\n 'font-medium transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed',\n TABS_SIZES[this.size],\n variantConfig.tab,\n panel.active ? variantConfig.activeTab : ''\n );\n }\n\n selectTab(value: string, emit = true): void {\n const previousValue = this.value;\n\n this.panels.forEach(panel => {\n panel.active = panel.value === value;\n panel.labelledBy = `tab-${panel.value}`;\n });\n\n this.value = value;\n\n if (emit) {\n this.valueChange.emit(value);\n this.tabChange.emit({ previous: previousValue, current: value });\n }\n }\n\n protected onKeydown(event: KeyboardEvent, currentValue: string): void {\n const enabledPanels = this.panels.filter(p => !p.disabled);\n const currentIndex = enabledPanels.findIndex(p => p.value === currentValue);\n\n let newIndex = currentIndex;\n\n if (this.orientation === 'horizontal') {\n if (event.key === 'ArrowRight') {\n newIndex = (currentIndex + 1) % enabledPanels.length;\n } else if (event.key === 'ArrowLeft') {\n newIndex = (currentIndex - 1 + enabledPanels.length) % enabledPanels.length;\n }\n } else if (event.key === 'ArrowDown') {\n newIndex = (currentIndex + 1) % enabledPanels.length;\n } else if (event.key === 'ArrowUp') {\n newIndex = (currentIndex - 1 + enabledPanels.length) % enabledPanels.length;\n }\n\n if (event.key === 'Home') {\n newIndex = 0;\n } else if (event.key === 'End') {\n newIndex = enabledPanels.length - 1;\n }\n\n if (newIndex !== currentIndex) {\n event.preventDefault();\n const newTab = enabledPanels[newIndex];\n this.selectTab(newTab.value);\n\n // Focus the new tab\n const tabElement = document.getElementById(`tab-${newTab.value}`);\n tabElement?.focus();\n }\n }\n\n /** Programmatically select a tab */\n select(value: string): void {\n this.selectTab(value);\n }\n\n /** Get the currently active panel */\n getActivePanel(): TwTabPanelComponent | undefined {\n return this.panels.find(p => p.active);\n }\n}\n","@if (active || !lazy) {\n <ng-content></ng-content>\n}\n","<div [class]=\"containerClasses()\">\n <!-- Tab list -->\n <div [class]=\"tabListClasses()\" role=\"tablist\" [attr.aria-orientation]=\"orientation\">\n @for (panel of panels; track panel.value) {\n <button\n type=\"button\"\n [class]=\"getTabClasses(panel)\"\n [id]=\"'tab-' + panel.value\"\n [attr.aria-selected]=\"panel.active\"\n [attr.aria-controls]=\"'panel-' + panel.value\"\n [attr.tabindex]=\"panel.active ? 0 : -1\"\n [disabled]=\"panel.disabled\"\n role=\"tab\"\n (click)=\"selectTab(panel.value)\"\n (keydown)=\"onKeydown($event, panel.value)\"\n >\n @if (panel.icon) {\n <span class=\"mr-2\" [innerHTML]=\"panel.icon\"></span>\n }\n {{ panel.label }}\n </button>\n }\n </div>\n\n <!-- Tab panels -->\n <div [class]=\"panelsContainerClasses()\">\n <ng-content></ng-content>\n </div>\n</div>\n","export * from './tabs.component';\n\nimport { TwTabPanelComponent, TwTabsComponent } from './tabs.component';\n\nexport const TW_TABS_COMPONENTS = [TwTabsComponent, TwTabPanelComponent] as const;\n","import { Component, computed, HostBinding, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted';\nexport type DividerLabelPosition = 'left' | 'center' | 'right';\n\n@Component({\n selector: 'tw-divider',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './divider.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n :host(.vertical) {\n display: inline-flex;\n align-self: stretch;\n height: auto;\n }\n .divider-solid {\n border-style: solid !important;\n }\n .divider-dashed {\n border-style: dashed !important;\n }\n .divider-dotted {\n border-style: dotted !important;\n }\n .vertical-line {\n width: 0;\n align-self: stretch;\n min-height: 1em;\n }\n `,\n ],\n})\nexport class TwDividerComponent {\n @Input() set orientation(value: DividerOrientation) {\n this._orientation.set(value);\n }\n @Input() set variant(value: DividerVariant) {\n this._variant.set(value);\n }\n // Alias for variant\n @Input() set dividerStyle(value: DividerVariant) {\n this._variant.set(value);\n }\n @Input() set labelPosition(value: DividerLabelPosition) {\n this._labelPosition.set(value);\n }\n @Input() set color(value: string) {\n this._color.set(value);\n }\n @Input() set spacing(value: 'sm' | 'md' | 'lg') {\n this._spacing.set(value);\n }\n @Input() set label(value: string) {\n this._label.set(value);\n }\n\n protected _orientation = signal<DividerOrientation>('horizontal');\n protected _variant = signal<DividerVariant>('solid');\n protected _labelPosition = signal<DividerLabelPosition>('center');\n protected _color = signal('');\n protected _spacing = signal<'sm' | 'md' | 'lg'>('md');\n protected _label = signal('');\n\n @HostBinding('class.vertical')\n get isVertical(): boolean {\n return this._orientation() === 'vertical';\n }\n\n protected orientationValue = computed(() => this._orientation());\n protected labelValue = computed(() => this._label());\n\n protected hrClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n const spacing = this._spacing();\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n const spacingClasses: Record<string, string> = {\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-8',\n };\n\n return ['border-t-2 border-0', variantClasses[variant], color, spacingClasses[spacing]].join(\n ' '\n );\n });\n\n protected containerClasses = computed(() => {\n const spacing = this._spacing();\n\n const spacingClasses: Record<string, string> = {\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-8',\n };\n\n return ['flex items-center w-full', spacingClasses[spacing]].join(' ');\n });\n\n protected lineClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n return ['border-t-2 border-0', variantClasses[variant], color].join(' ');\n });\n\n protected firstLineClasses = computed(() => {\n const labelPosition = this._labelPosition();\n const baseClasses = this.lineClasses();\n\n if (labelPosition === 'left') {\n return `${baseClasses} w-8 shrink-0`;\n }\n return `${baseClasses} flex-1`;\n });\n\n protected lastLineClasses = computed(() => {\n const labelPosition = this._labelPosition();\n const baseClasses = this.lineClasses();\n\n if (labelPosition === 'right') {\n return `${baseClasses} w-8 shrink-0`;\n }\n return `${baseClasses} flex-1`;\n });\n\n protected labelClasses = computed(\n () => 'px-4 text-sm text-slate-500 whitespace-nowrap select-none'\n );\n\n protected verticalClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n const spacing = this._spacing();\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n const spacingClasses: Record<string, string> = {\n sm: 'mx-2',\n md: 'mx-4',\n lg: 'mx-8',\n };\n\n return [\n 'vertical-line border-l-2 border-0',\n variantClasses[variant],\n color,\n spacingClasses[spacing],\n ].join(' ');\n });\n}\n","@if (orientationValue() === 'horizontal') {\n @if (labelValue()) {\n <div [class]=\"containerClasses()\">\n <div [class]=\"firstLineClasses()\"></div>\n <span [class]=\"labelClasses()\">{{ labelValue() }}</span>\n <div [class]=\"lastLineClasses()\"></div>\n </div>\n } @else {\n <hr [class]=\"hrClasses()\" />\n }\n} @else {\n <div [class]=\"verticalClasses()\"></div>\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'prose';\n\nconst CONTAINER_SIZES: Record<ContainerSize, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n prose: 'max-w-prose',\n};\n\n/**\n * Container component for creating centered, max-width layouts.\n *\n * @example\n * ```html\n * <tw-container size=\"lg\" [centered]=\"true\">\n * <h1>Page Content</h1>\n * </tw-container>\n * ```\n */\n@Component({\n selector: 'tw-container',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class TwContainerComponent {\n /** Maximum width of the container */\n @Input() size: ContainerSize = 'xl';\n\n /** Whether to center the container horizontally */\n @Input() centered = true;\n\n /** Horizontal padding */\n @Input() padding: 'none' | 'sm' | 'md' | 'lg' = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected containerClasses(): string {\n const paddingClasses: Record<string, string> = {\n none: '',\n sm: 'px-2 sm:px-4',\n md: 'px-4 sm:px-6 lg:px-8',\n lg: 'px-6 sm:px-8 lg:px-12',\n };\n\n return this.twClass.merge(\n 'w-full',\n CONTAINER_SIZES[this.size],\n this.centered ? 'mx-auto' : '',\n paddingClasses[this.padding],\n this.class\n );\n }\n}\n\n","import { TwContainerComponent } from './container.component';\n\nexport { TwContainerComponent, ContainerSize } from './container.component';\n\nexport const TW_CONTAINER_COMPONENTS = [TwContainerComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type StackDirection = 'vertical' | 'horizontal' | 'vertical-reverse' | 'horizontal-reverse';\nexport type StackSpacing = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nconst DIRECTION_CLASSES: Record<StackDirection, string> = {\n vertical: 'flex-col',\n horizontal: 'flex-row',\n 'vertical-reverse': 'flex-col-reverse',\n 'horizontal-reverse': 'flex-row-reverse',\n};\n\nconst SPACING_CLASSES: Record<StackSpacing, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n '3xl': 'gap-16',\n};\n\nconst ALIGN_CLASSES: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASSES: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\n/**\n * Stack component for arranging elements vertically or horizontally with consistent spacing.\n *\n * @example\n * ```html\n * <!-- Vertical stack (default) -->\n * <tw-stack spacing=\"md\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </tw-stack>\n *\n * <!-- Horizontal stack -->\n * <tw-stack direction=\"horizontal\" spacing=\"lg\" align=\"center\">\n * <button>Button 1</button>\n * <button>Button 2</button>\n * </tw-stack>\n * ```\n */\n@Component({\n selector: 'tw-stack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwStackComponent {\n /** Direction of the stack */\n @Input() direction: StackDirection = 'vertical';\n\n /** Spacing between items */\n @Input() spacing: StackSpacing = 'md';\n\n /** Alignment of items (perpendicular to direction) */\n @Input() align: StackAlign = 'stretch';\n\n /** Justification of items (along direction) */\n @Input() justify: StackJustify = 'start';\n\n /** Whether items should wrap */\n @Input() wrap = false;\n\n /** Whether to take full width */\n @Input() fullWidth = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex',\n DIRECTION_CLASSES[this.direction],\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.wrap ? 'flex-wrap' : '',\n this.fullWidth ? 'w-full' : '',\n this.class\n );\n }\n}\n\n/**\n * VStack component - shorthand for vertical Stack\n */\n@Component({\n selector: 'tw-vstack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwVStackComponent {\n @Input() spacing: StackSpacing = 'md';\n @Input() align: StackAlign = 'stretch';\n @Input() justify: StackJustify = 'start';\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex flex-col',\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.class\n );\n }\n}\n\n/**\n * HStack component - shorthand for horizontal Stack\n */\n@Component({\n selector: 'tw-hstack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwHStackComponent {\n @Input() spacing: StackSpacing = 'md';\n @Input() align: StackAlign = 'center';\n @Input() justify: StackJustify = 'start';\n @Input() wrap = false;\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex flex-row',\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.wrap ? 'flex-wrap' : '',\n this.class\n );\n }\n}\n\n","import {\n TwHStackComponent,\n TwStackComponent,\n TwVStackComponent,\n} from './stack.component';\n\nexport {\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n StackDirection,\n StackSpacing,\n StackAlign,\n StackJustify,\n} from './stack.component';\n\nexport const TW_STACK_COMPONENTS = [\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'none' | 'auto';\nexport type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst COLS_CLASSES: Record<string, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 7: 'grid-cols-7',\n 8: 'grid-cols-8',\n 9: 'grid-cols-9',\n 10: 'grid-cols-10',\n 11: 'grid-cols-11',\n 12: 'grid-cols-12',\n none: 'grid-cols-none',\n auto: 'grid-cols-[repeat(auto-fit,minmax(200px,1fr))]',\n};\n\nconst GAP_CLASSES: Record<GridGap, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n};\n\n/**\n * Grid component for creating CSS Grid layouts.\n *\n * @example\n * ```html\n * <!-- Simple 3-column grid -->\n * <tw-grid [cols]=\"3\" gap=\"md\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </tw-grid>\n *\n * <!-- Responsive grid -->\n * <tw-grid [cols]=\"1\" [colsSm]=\"2\" [colsMd]=\"3\" [colsLg]=\"4\" gap=\"lg\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * </tw-grid>\n * ```\n */\n@Component({\n selector: 'tw-grid',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"gridClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwGridComponent {\n /** Number of columns (base) */\n @Input() cols: GridCols = 1;\n\n /** Number of columns at sm breakpoint */\n @Input() colsSm?: GridCols;\n\n /** Number of columns at md breakpoint */\n @Input() colsMd?: GridCols;\n\n /** Number of columns at lg breakpoint */\n @Input() colsLg?: GridCols;\n\n /** Number of columns at xl breakpoint */\n @Input() colsXl?: GridCols;\n\n /** Gap between items */\n @Input() gap: GridGap = 'md';\n\n /** Row gap (if different from column gap) */\n @Input() rowGap?: GridGap;\n\n /** Column gap (if different from row gap) */\n @Input() colGap?: GridGap;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected gridClasses(): string {\n const classes = ['grid', COLS_CLASSES[this.cols.toString()]];\n\n // Responsive columns\n if (this.colsSm) {\n classes.push(`sm:${COLS_CLASSES[this.colsSm.toString()]}`);\n }\n if (this.colsMd) {\n classes.push(`md:${COLS_CLASSES[this.colsMd.toString()]}`);\n }\n if (this.colsLg) {\n classes.push(`lg:${COLS_CLASSES[this.colsLg.toString()]}`);\n }\n if (this.colsXl) {\n classes.push(`xl:${COLS_CLASSES[this.colsXl.toString()]}`);\n }\n\n // Gap handling\n if (this.rowGap && this.colGap) {\n classes.push(GAP_CLASSES[this.rowGap].replace('gap-', 'gap-y-'));\n classes.push(GAP_CLASSES[this.colGap].replace('gap-', 'gap-x-'));\n } else {\n classes.push(GAP_CLASSES[this.gap]);\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n}\n\n/**\n * SimpleGrid component for auto-fit grid layouts with minimum column width.\n *\n * @example\n * ```html\n * <tw-simple-grid minChildWidth=\"200px\" gap=\"md\">\n * <div>Card 1</div>\n * <div>Card 2</div>\n * <div>Card 3</div>\n * </tw-simple-grid>\n * ```\n */\n@Component({\n selector: 'tw-simple-grid',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"gridClasses()\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSimpleGridComponent {\n /** Minimum width of each child (e.g., '200px', '15rem') */\n @Input() minChildWidth = '200px';\n\n /** Gap between items */\n @Input() gap: GridGap = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected gridClasses(): string {\n return this.twClass.merge('grid', GAP_CLASSES[this.gap], this.class);\n }\n\n protected gridTemplateColumns(): string {\n return `repeat(auto-fit, minmax(${this.minChildWidth}, 1fr))`;\n }\n}\n\n","import { TwGridComponent, TwSimpleGridComponent } from './grid.component';\n\nexport {\n TwGridComponent,\n TwSimpleGridComponent,\n GridCols,\n GridGap,\n} from './grid.component';\n\nexport const TW_GRID_COMPONENTS = [TwGridComponent, TwSimpleGridComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type AspectRatioPreset = 'square' | 'video' | 'portrait' | 'wide' | 'ultrawide' | 'custom';\n\nconst RATIO_CLASSES: Record<string, string> = {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n wide: 'aspect-[2/1]',\n ultrawide: 'aspect-[21/9]',\n};\n\n/**\n * AspectRatio component for maintaining consistent aspect ratios.\n *\n * @example\n * ```html\n * <!-- Video aspect ratio (16:9) -->\n * <tw-aspect-ratio ratio=\"video\">\n * <img src=\"thumbnail.jpg\" class=\"object-cover w-full h-full\" />\n * </tw-aspect-ratio>\n *\n * <!-- Custom ratio -->\n * <tw-aspect-ratio ratio=\"custom\" [customRatio]=\"4/3\">\n * <iframe src=\"...\"></iframe>\n * </tw-aspect-ratio>\n * ```\n */\n@Component({\n selector: 'tw-aspect-ratio',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\" [style.aspectRatio]=\"computedRatio()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n :host ::ng-deep > div > * {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n})\nexport class TwAspectRatioComponent {\n /** Preset aspect ratio */\n @Input() ratio: AspectRatioPreset = 'video';\n\n /** Custom ratio value (e.g., 16/9 or 1.777) - used when ratio is 'custom' */\n @Input() customRatio?: number;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected containerClasses(): string {\n const baseClasses = 'relative overflow-hidden';\n\n if (this.ratio === 'custom') {\n return this.twClass.merge(baseClasses, this.class);\n }\n\n return this.twClass.merge(baseClasses, RATIO_CLASSES[this.ratio], this.class);\n }\n\n protected computedRatio(): string | null {\n if (this.ratio === 'custom' && this.customRatio) {\n return String(this.customRatio);\n }\n return null;\n }\n}\n\n","import { TwAspectRatioComponent } from './aspect-ratio.component';\n\nexport { TwAspectRatioComponent, AspectRatioPreset } from './aspect-ratio.component';\n\nexport const TW_ASPECT_RATIO_COMPONENTS = [TwAspectRatioComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\n/**\n * Center component for centering content horizontally and/or vertically.\n *\n * @example\n * ```html\n * <!-- Center both horizontally and vertically -->\n * <tw-center class=\"h-screen\">\n * <div>Centered content</div>\n * </tw-center>\n *\n * <!-- Center only horizontally (inline content) -->\n * <tw-center [inline]=\"true\">\n * <span>Centered text</span>\n * </tw-center>\n * ```\n */\n@Component({\n selector: 'tw-center',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"centerClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwCenterComponent {\n /** Use inline-flex instead of flex */\n @Input() inline = false;\n\n /** Center only horizontally */\n @Input() horizontal = true;\n\n /** Center only vertically */\n @Input() vertical = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected centerClasses(): string {\n const classes: string[] = [this.inline ? 'inline-flex' : 'flex'];\n\n if (this.horizontal) {\n classes.push('justify-center');\n }\n\n if (this.vertical) {\n classes.push('items-center');\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n}\n\n/**\n * Square component for creating square-shaped containers.\n * The width determines the height (1:1 aspect ratio).\n *\n * @example\n * ```html\n * <tw-square size=\"64px\" class=\"bg-blue-500 rounded-lg\">\n * <span>Icon</span>\n * </tw-square>\n * ```\n */\n@Component({\n selector: 'tw-square',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"squareClasses()\" [style.width]=\"size\" [style.height]=\"size\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwSquareComponent {\n /** Size of the square (e.g., '64px', '4rem') */\n @Input() size = '48px';\n\n /** Whether to center the content */\n @Input() centerContent = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected squareClasses(): string {\n return this.twClass.merge(\n this.centerContent ? 'flex items-center justify-center' : '',\n this.class\n );\n }\n}\n\n/**\n * Circle component for creating circular containers.\n *\n * @example\n * ```html\n * <tw-circle size=\"48px\" class=\"bg-gradient-to-br from-blue-500 to-purple-500\">\n * <span class=\"text-white\">AB</span>\n * </tw-circle>\n * ```\n */\n@Component({\n selector: 'tw-circle',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"circleClasses()\" [style.width]=\"size\" [style.height]=\"size\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwCircleComponent {\n /** Size of the circle (e.g., '64px', '4rem') */\n @Input() size = '48px';\n\n /** Whether to center the content */\n @Input() centerContent = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected circleClasses(): string {\n return this.twClass.merge(\n 'rounded-full',\n this.centerContent ? 'flex items-center justify-center' : '',\n this.class\n );\n }\n}\n\n","import {\n TwCenterComponent,\n TwCircleComponent,\n TwSquareComponent,\n} from './center.component';\n\nexport {\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n} from './center.component';\n\nexport const TW_CENTER_COMPONENTS = [\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'auto';\n\nconst HORIZONTAL_SIZES: Record<string, string> = {\n xs: 'w-1',\n sm: 'w-2',\n md: 'w-4',\n lg: 'w-6',\n xl: 'w-8',\n '2xl': 'w-12',\n '3xl': 'w-16',\n auto: 'flex-1',\n};\n\nconst VERTICAL_SIZES: Record<string, string> = {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n xl: 'h-8',\n '2xl': 'h-12',\n '3xl': 'h-16',\n auto: 'flex-1',\n};\n\n/**\n * Spacer component for adding space between elements.\n * In flex containers, use size=\"auto\" to create flexible space.\n *\n * @example\n * ```html\n * <!-- Fixed vertical space -->\n * <tw-spacer axis=\"vertical\" size=\"lg\"></tw-spacer>\n *\n * <!-- Flexible horizontal space (pushes elements apart) -->\n * <div class=\"flex\">\n * <span>Left</span>\n * <tw-spacer axis=\"horizontal\" size=\"auto\"></tw-spacer>\n * <span>Right</span>\n * </div>\n * ```\n */\n@Component({\n selector: 'tw-spacer',\n standalone: true,\n imports: [CommonModule],\n template: `<div [class]=\"spacerClasses()\" aria-hidden=\"true\"></div>`,\n styles: [\n `\n :host {\n display: block;\n }\n :host([axis='horizontal']) {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwSpacerComponent {\n /** Direction of the space */\n @Input() axis: 'horizontal' | 'vertical' = 'vertical';\n\n /** Size of the space (or 'auto' for flexible space in flex containers) */\n @Input() size: SpacerSize = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected spacerClasses(): string {\n const sizeClass =\n this.axis === 'horizontal' ? HORIZONTAL_SIZES[this.size] : VERTICAL_SIZES[this.size];\n\n return this.twClass.merge(sizeClass, this.class);\n }\n}\n\n/**\n * Wrap component for wrapping flex items with consistent spacing.\n *\n * @example\n * ```html\n * <tw-wrap spacing=\"md\">\n * <tw-badge>Tag 1</tw-badge>\n * <tw-badge>Tag 2</tw-badge>\n * <tw-badge>Tag 3</tw-badge>\n * </tw-wrap>\n * ```\n */\n@Component({\n selector: 'tw-wrap',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"wrapClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwWrapComponent {\n /** Spacing between items */\n @Input() spacing: SpacerSize = 'md';\n\n /** Alignment of items */\n @Input() align: 'start' | 'center' | 'end' = 'start';\n\n /** Justification of items */\n @Input() justify: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly' = 'start';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected wrapClasses(): string {\n const gapClasses: Record<string, string> = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n '3xl': 'gap-16',\n auto: 'gap-4',\n };\n\n const alignClasses: Record<string, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n };\n\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n return this.twClass.merge(\n 'flex flex-wrap',\n gapClasses[this.spacing],\n alignClasses[this.align],\n justifyClasses[this.justify],\n this.class\n );\n }\n}\n\n","import { TwSpacerComponent, TwWrapComponent } from './spacer.component';\n\nexport { TwSpacerComponent, TwWrapComponent, SpacerSize } from './spacer.component';\n\nexport const TW_SPACER_COMPONENTS = [TwSpacerComponent, TwWrapComponent] as const;\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SplitterDirection = 'horizontal' | 'vertical';\nexport type SplitterGutterSize = 'sm' | 'md' | 'lg';\n\nconst GUTTER_SIZES: Record<SplitterGutterSize, number> = {\n sm: 4,\n md: 8,\n lg: 12,\n};\n\n/**\n * Splitter component for creating resizable split pane layouts.\n *\n * @example\n * ```html\n * <!-- Horizontal split -->\n * <tw-splitter direction=\"horizontal\" [initialSizes]=\"[30, 70]\">\n * <div twSplitterPane>Left Panel</div>\n * <div twSplitterPane>Right Panel</div>\n * </tw-splitter>\n *\n * <!-- Vertical split with min sizes -->\n * <tw-splitter direction=\"vertical\" [minSizes]=\"[100, 200]\">\n * <div twSplitterPane>Top Panel</div>\n * <div twSplitterPane>Bottom Panel</div>\n * </tw-splitter>\n * ```\n */\n@Component({\n selector: 'tw-splitter',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div #container [class]=\"containerClasses()\">\n <div\n [class]=\"paneClasses(0)\"\n [style.flexBasis.%]=\"sizes()[0]\"\n [style.minWidth.px]=\"direction === 'horizontal' ? minSizes[0] : undefined\"\n [style.minHeight.px]=\"direction === 'vertical' ? minSizes[0] : undefined\">\n <ng-content select=\"[twSplitterPane]:first-of-type, tw-splitter-pane:first-of-type\"></ng-content>\n </div>\n\n <div\n #gutter\n [class]=\"gutterClasses()\"\n (mousedown)=\"onGutterMouseDown($event)\"\n (touchstart)=\"onGutterTouchStart($event)\">\n <div [class]=\"gutterHandleClasses()\"></div>\n </div>\n\n <div\n [class]=\"paneClasses(1)\"\n [style.flexBasis.%]=\"sizes()[1]\"\n [style.minWidth.px]=\"direction === 'horizontal' ? minSizes[1] : undefined\"\n [style.minHeight.px]=\"direction === 'vertical' ? minSizes[1] : undefined\">\n <ng-content select=\"[twSplitterPane]:last-of-type, tw-splitter-pane:last-of-type\"></ng-content>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n `,\n ],\n})\nexport class TwSplitterComponent implements AfterViewInit, OnDestroy {\n @ViewChild('container') containerRef!: ElementRef<HTMLElement>;\n @ViewChild('gutter') gutterRef!: ElementRef<HTMLElement>;\n\n /** Direction of the split */\n @Input() direction: SplitterDirection = 'horizontal';\n\n /** Initial sizes as percentages (should sum to 100) */\n @Input() initialSizes: [number, number] = [50, 50];\n\n /** Minimum sizes in pixels for each pane */\n @Input() minSizes: [number, number] = [50, 50];\n\n /** Size of the gutter */\n @Input() gutterSize: SplitterGutterSize = 'md';\n\n /** Whether the splitter is disabled */\n @Input() disabled = false;\n\n /** Whether to show visual gutter */\n @Input() showGutter = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n /** Emits when sizes change */\n @Output() sizesChange = new EventEmitter<[number, number]>();\n\n /** Emits when dragging starts */\n @Output() dragStart = new EventEmitter<void>();\n\n /** Emits when dragging ends */\n @Output() dragEnd = new EventEmitter<void>();\n\n protected sizes = signal<[number, number]>([50, 50]);\n protected isDragging = signal(false);\n\n private startPos = 0;\n private startSizes: [number, number] = [50, 50];\n private containerSize = 0;\n\n private readonly mouseMoveHandler = this.onMouseMove.bind(this);\n private readonly mouseUpHandler = this.onMouseUp.bind(this);\n private readonly touchMoveHandler = this.onTouchMove.bind(this);\n private readonly touchEndHandler = this.onTouchEnd.bind(this);\n\n constructor(private readonly twClass: TwClassService) {}\n\n ngAfterViewInit(): void {\n this.sizes.set([...this.initialSizes] as [number, number]);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n protected containerClasses(): string {\n return this.twClass.merge(\n 'flex h-full w-full overflow-hidden',\n this.direction === 'horizontal' ? 'flex-row' : 'flex-col',\n this.class\n );\n }\n\n protected paneClasses(index: number): string {\n return this.twClass.merge(\n 'overflow-auto',\n this.direction === 'horizontal' ? 'h-full' : 'w-full'\n );\n }\n\n protected gutterClasses(): string {\n const size = GUTTER_SIZES[this.gutterSize];\n const isHorizontal = this.direction === 'horizontal';\n\n return this.twClass.merge(\n 'flex items-center justify-center flex-shrink-0 transition-colors',\n isHorizontal ? `w-[${size}px] h-full cursor-col-resize` : `h-[${size}px] w-full cursor-row-resize`,\n this.showGutter ? 'bg-slate-200 hover:bg-slate-300' : 'bg-transparent hover:bg-slate-200',\n this.isDragging() ? 'bg-blue-400' : '',\n this.disabled ? 'cursor-default pointer-events-none opacity-50' : ''\n );\n }\n\n protected gutterHandleClasses(): string {\n const isHorizontal = this.direction === 'horizontal';\n\n return this.twClass.merge(\n 'rounded-full bg-slate-400 transition-all',\n isHorizontal ? 'w-1 h-8' : 'h-1 w-8',\n this.isDragging() ? 'bg-blue-600 scale-125' : ''\n );\n }\n\n protected onGutterMouseDown(event: MouseEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.startDrag(this.direction === 'horizontal' ? event.clientX : event.clientY);\n document.addEventListener('mousemove', this.mouseMoveHandler);\n document.addEventListener('mouseup', this.mouseUpHandler);\n }\n\n protected onGutterTouchStart(event: TouchEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n const touch = event.touches[0];\n this.startDrag(this.direction === 'horizontal' ? touch.clientX : touch.clientY);\n document.addEventListener('touchmove', this.touchMoveHandler, { passive: false });\n document.addEventListener('touchend', this.touchEndHandler);\n }\n\n private startDrag(pos: number): void {\n this.isDragging.set(true);\n this.startPos = pos;\n this.startSizes = [...this.sizes()] as [number, number];\n this.containerSize = this.direction === 'horizontal'\n ? this.containerRef.nativeElement.offsetWidth\n : this.containerRef.nativeElement.offsetHeight;\n this.dragStart.emit();\n }\n\n private onMouseMove(event: MouseEvent): void {\n const pos = this.direction === 'horizontal' ? event.clientX : event.clientY;\n this.updateSizes(pos);\n }\n\n private onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n const touch = event.touches[0];\n const pos = this.direction === 'horizontal' ? touch.clientX : touch.clientY;\n this.updateSizes(pos);\n }\n\n private updateSizes(currentPos: number): void {\n const gutterSize = GUTTER_SIZES[this.gutterSize];\n const availableSize = this.containerSize - gutterSize;\n const delta = currentPos - this.startPos;\n const deltaPercent = (delta / availableSize) * 100;\n\n let newSize0 = this.startSizes[0] + deltaPercent;\n let newSize1 = this.startSizes[1] - deltaPercent;\n\n // Apply minimum sizes\n const minPercent0 = (this.minSizes[0] / availableSize) * 100;\n const minPercent1 = (this.minSizes[1] / availableSize) * 100;\n\n if (newSize0 < minPercent0) {\n newSize0 = minPercent0;\n newSize1 = 100 - minPercent0;\n }\n if (newSize1 < minPercent1) {\n newSize1 = minPercent1;\n newSize0 = 100 - minPercent1;\n }\n\n this.sizes.set([newSize0, newSize1]);\n this.sizesChange.emit([newSize0, newSize1]);\n }\n\n private onMouseUp(): void {\n this.endDrag();\n this.removeListeners();\n }\n\n private onTouchEnd(): void {\n this.endDrag();\n this.removeListeners();\n }\n\n private endDrag(): void {\n this.isDragging.set(false);\n this.dragEnd.emit();\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.mouseMoveHandler);\n document.removeEventListener('mouseup', this.mouseUpHandler);\n document.removeEventListener('touchmove', this.touchMoveHandler);\n document.removeEventListener('touchend', this.touchEndHandler);\n }\n\n /** Programmatically set sizes */\n setSizes(sizes: [number, number]): void {\n this.sizes.set(sizes);\n this.sizesChange.emit(sizes);\n }\n\n /** Reset to initial sizes */\n reset(): void {\n this.sizes.set([...this.initialSizes] as [number, number]);\n this.sizesChange.emit(this.sizes());\n }\n}\n\n/**\n * Directive to mark elements as splitter panes\n */\n@Component({\n selector: 'tw-splitter-pane, [twSplitterPane]',\n standalone: true,\n template: '<ng-content></ng-content>',\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n width: 100%;\n }\n `,\n ],\n})\nexport class TwSplitterPaneComponent {}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type StickyPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type StickyOffset = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst OFFSET_VALUES: Record<StickyOffset, string> = {\n none: '0',\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n};\n\n/**\n * Sticky component for creating sticky positioned elements.\n * Wraps content and applies sticky positioning with configurable offset.\n *\n * @example\n * ```html\n * <!-- Sticky header -->\n * <tw-sticky position=\"top\" offset=\"md\">\n * <header class=\"bg-white shadow\">\n * Navigation content here\n * </header>\n * </tw-sticky>\n *\n * <!-- Sticky sidebar -->\n * <tw-sticky position=\"top\" offset=\"lg\" [zIndex]=\"10\">\n * <aside class=\"w-64\">\n * Sidebar content\n * </aside>\n * </tw-sticky>\n * ```\n */\n@Component({\n selector: 'tw-sticky',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stickyClasses()\" [style]=\"stickyStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwStickyComponent {\n /** Which edge to stick to */\n @Input() position: StickyPosition = 'top';\n\n /** Offset from the edge */\n @Input() offset: StickyOffset = 'none';\n\n /** Custom offset value (e.g., '60px', '4rem') */\n @Input() customOffset?: string;\n\n /** Z-index for stacking */\n @Input() zIndex = 10;\n\n /** Whether sticky is disabled */\n @Input() disabled = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stickyClasses(): string {\n return this.twClass.merge(\n this.disabled ? 'relative' : 'sticky',\n this.class\n );\n }\n\n protected stickyStyles(): Record<string, string> {\n if (this.disabled) {\n return {};\n }\n\n const offsetValue = this.customOffset || OFFSET_VALUES[this.offset];\n\n return {\n [this.position]: offsetValue,\n zIndex: this.zIndex.toString(),\n };\n }\n}\n\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ScrollAreaDirection = 'vertical' | 'horizontal' | 'both';\nexport type ScrollAreaScrollbar = 'auto' | 'always' | 'hover' | 'hidden';\n\n/**\n * ScrollArea component for creating scrollable containers with styled scrollbars.\n *\n * @example\n * ```html\n * <!-- Vertical scrollable area -->\n * <tw-scroll-area [height]=\"'300px'\" direction=\"vertical\">\n * <div class=\"space-y-4\">\n * <p>Long content here...</p>\n * </div>\n * </tw-scroll-area>\n *\n * <!-- Horizontal scroll area for a carousel -->\n * <tw-scroll-area direction=\"horizontal\" scrollbar=\"hover\">\n * <div class=\"flex gap-4\">\n * <div class=\"flex-shrink-0 w-64\">Card 1</div>\n * <div class=\"flex-shrink-0 w-64\">Card 2</div>\n * <div class=\"flex-shrink-0 w-64\">Card 3</div>\n * </div>\n * </tw-scroll-area>\n * ```\n */\n@Component({\n selector: 'tw-scroll-area',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n #scrollContainer\n [class]=\"scrollAreaClasses()\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\"\n [style.width]=\"width\"\n [style.maxWidth]=\"maxWidth\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n /* Custom scrollbar styles */\n .scroll-area-styled::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n .scroll-area-styled::-webkit-scrollbar-track {\n background: transparent;\n border-radius: 4px;\n }\n\n .scroll-area-styled::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .scroll-area-styled::-webkit-scrollbar-thumb:hover {\n background: rgba(100, 116, 139, 0.8);\n }\n\n .scroll-area-styled::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n /* Dark mode scrollbar */\n .scroll-area-dark::-webkit-scrollbar-thumb {\n background: rgba(148, 163, 184, 0.4);\n }\n\n .scroll-area-dark::-webkit-scrollbar-thumb:hover {\n background: rgba(148, 163, 184, 0.7);\n }\n\n /* Thin scrollbar variant */\n .scroll-area-thin::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n }\n\n /* Hide scrollbar until hover */\n .scroll-area-hover::-webkit-scrollbar-thumb {\n background: transparent;\n }\n\n .scroll-area-hover:hover::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n }\n\n /* Always visible scrollbar */\n .scroll-area-always::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n }\n\n /* Hidden scrollbar */\n .scroll-area-hidden::-webkit-scrollbar {\n display: none;\n }\n\n .scroll-area-hidden {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n `,\n ],\n})\nexport class TwScrollAreaComponent {\n @ViewChild('scrollContainer') scrollContainerRef!: ElementRef<HTMLElement>;\n\n /** Scroll direction */\n @Input() direction: ScrollAreaDirection = 'vertical';\n\n /** Scrollbar visibility */\n @Input() scrollbar: ScrollAreaScrollbar = 'auto';\n\n /** Fixed height */\n @Input() height?: string;\n\n /** Maximum height */\n @Input() maxHeight?: string;\n\n /** Fixed width */\n @Input() width?: string;\n\n /** Maximum width */\n @Input() maxWidth?: string;\n\n /** Whether to use thin scrollbar */\n @Input() thin = false;\n\n /** Whether to use dark mode scrollbar */\n @Input() dark = false;\n\n /** Whether to enable smooth scrolling */\n @Input() smooth = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected scrollAreaClasses(): string {\n const overflowClass = {\n vertical: 'overflow-y-auto overflow-x-hidden',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n }[this.direction];\n\n const scrollbarClass = {\n auto: '',\n always: 'scroll-area-always',\n hover: 'scroll-area-hover',\n hidden: 'scroll-area-hidden',\n }[this.scrollbar];\n\n return this.twClass.merge(\n 'scroll-area-styled',\n overflowClass,\n scrollbarClass,\n this.thin ? 'scroll-area-thin' : '',\n this.dark ? 'scroll-area-dark' : '',\n this.smooth ? 'scroll-smooth' : '',\n this.class\n );\n }\n\n /** Scroll to a specific position */\n scrollTo(options: ScrollToOptions): void {\n this.scrollContainerRef?.nativeElement.scrollTo(options);\n }\n\n /** Scroll to top */\n scrollToTop(smooth = true): void {\n this.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' });\n }\n\n /** Scroll to bottom */\n scrollToBottom(smooth = true): void {\n const element = this.scrollContainerRef?.nativeElement;\n if (element) {\n this.scrollTo({\n top: element.scrollHeight,\n behavior: smooth ? 'smooth' : 'auto',\n });\n }\n }\n\n /** Scroll to left */\n scrollToLeft(smooth = true): void {\n this.scrollTo({ left: 0, behavior: smooth ? 'smooth' : 'auto' });\n }\n\n /** Scroll to right */\n scrollToRight(smooth = true): void {\n const element = this.scrollContainerRef?.nativeElement;\n if (element) {\n this.scrollTo({\n left: element.scrollWidth,\n behavior: smooth ? 'smooth' : 'auto',\n });\n }\n }\n}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ColumnsCount = 1 | 2 | 3 | 4 | 5 | 6 | 'auto';\nexport type ColumnsGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ColumnsRule = 'none' | 'solid' | 'dashed' | 'dotted';\n\nconst COLUMNS_CLASSES: Record<string, string> = {\n 1: 'columns-1',\n 2: 'columns-2',\n 3: 'columns-3',\n 4: 'columns-4',\n 5: 'columns-5',\n 6: 'columns-6',\n auto: 'columns-auto',\n};\n\nconst GAP_CLASSES: Record<ColumnsGap, string> = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n xl: 'gap-12',\n};\n\n/**\n * Columns component for creating multi-column text layouts.\n * Uses CSS columns for newspaper-style content flow.\n *\n * @example\n * ```html\n * <!-- 2-column layout -->\n * <tw-columns [count]=\"2\" gap=\"md\">\n * <p>This content will flow into two columns automatically...</p>\n * <p>Additional paragraphs will continue in the next column...</p>\n * </tw-columns>\n *\n * <!-- 3-column with dividers -->\n * <tw-columns [count]=\"3\" gap=\"lg\" rule=\"solid\" ruleColor=\"slate-300\">\n * <article>Long article content...</article>\n * </tw-columns>\n *\n * <!-- Responsive columns -->\n * <tw-columns [count]=\"1\" [countMd]=\"2\" [countLg]=\"3\" gap=\"md\">\n * <p>Content here...</p>\n * </tw-columns>\n * ```\n */\n@Component({\n selector: 'tw-columns',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"columnsClasses()\" [style]=\"columnsStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwColumnsComponent {\n /** Number of columns (base) */\n @Input() count: ColumnsCount = 2;\n\n /** Number of columns at sm breakpoint */\n @Input() countSm?: ColumnsCount;\n\n /** Number of columns at md breakpoint */\n @Input() countMd?: ColumnsCount;\n\n /** Number of columns at lg breakpoint */\n @Input() countLg?: ColumnsCount;\n\n /** Number of columns at xl breakpoint */\n @Input() countXl?: ColumnsCount;\n\n /** Gap between columns */\n @Input() gap: ColumnsGap = 'md';\n\n /** Column rule style */\n @Input() rule: ColumnsRule = 'none';\n\n /** Column rule color (Tailwind color, e.g., 'slate-300') */\n @Input() ruleColor = 'slate-200';\n\n /** Column rule width in pixels */\n @Input() ruleWidth = 1;\n\n /** Whether children should not break across columns */\n @Input() avoidBreak = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected columnsClasses(): string {\n const classes = [\n COLUMNS_CLASSES[this.count.toString()],\n GAP_CLASSES[this.gap],\n ];\n\n // Responsive columns\n if (this.countSm) {\n classes.push(`sm:${COLUMNS_CLASSES[this.countSm.toString()]}`);\n }\n if (this.countMd) {\n classes.push(`md:${COLUMNS_CLASSES[this.countMd.toString()]}`);\n }\n if (this.countLg) {\n classes.push(`lg:${COLUMNS_CLASSES[this.countLg.toString()]}`);\n }\n if (this.countXl) {\n classes.push(`xl:${COLUMNS_CLASSES[this.countXl.toString()]}`);\n }\n\n // Avoid break styling\n if (this.avoidBreak) {\n classes.push('[&>*]:break-inside-avoid');\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n\n protected columnsStyles(): Record<string, string> {\n if (this.rule === 'none') {\n return {};\n }\n\n // Convert Tailwind color to CSS variable or fallback\n const colorMap: Record<string, string> = {\n 'slate-200': '#e2e8f0',\n 'slate-300': '#cbd5e1',\n 'slate-400': '#94a3b8',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'zinc-200': '#e4e4e7',\n 'zinc-300': '#d4d4d8',\n };\n\n const color = colorMap[this.ruleColor] || this.ruleColor;\n\n return {\n columnRule: `${this.ruleWidth}px ${this.rule} ${color}`,\n };\n }\n}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type BleedDirection = 'horizontal' | 'left' | 'right' | 'all';\nexport type BleedAmount = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Bleed component for breaking out of container constraints.\n * Useful for full-width images or backgrounds within constrained layouts.\n *\n * @example\n * ```html\n * <tw-container size=\"lg\">\n * <h1>Page Title</h1>\n * <p>Content within container...</p>\n *\n * <!-- Full-width image that bleeds out of container -->\n * <tw-bleed direction=\"horizontal\" amount=\"full\">\n * <img src=\"hero.jpg\" class=\"w-full\" />\n * </tw-bleed>\n *\n * <p>More content within container...</p>\n * </tw-container>\n *\n * <!-- Bleed with custom amount -->\n * <tw-bleed direction=\"horizontal\" amount=\"lg\">\n * <div class=\"bg-slate-100 p-8\">\n * Full-width background section\n * </div>\n * </tw-bleed>\n * ```\n */\n@Component({\n selector: 'tw-bleed',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"bleedClasses()\" [style]=\"bleedStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwBleedComponent {\n /** Direction of the bleed */\n @Input() direction: BleedDirection = 'horizontal';\n\n /** Amount of bleed */\n @Input() amount: BleedAmount = 'md';\n\n /** Custom bleed amount (e.g., '2rem', '32px') */\n @Input() customAmount?: string;\n\n /** Whether to preserve the same visual spacing inside */\n @Input() preservePadding = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected bleedClasses(): string {\n return this.twClass.merge('relative', this.class);\n }\n\n protected bleedStyles(): Record<string, string> {\n const amountMap: Record<BleedAmount, string> = {\n sm: '1rem',\n md: '2rem',\n lg: '4rem',\n xl: '6rem',\n full: '50vw',\n };\n\n const bleedValue = this.customAmount || amountMap[this.amount];\n const isFull = this.amount === 'full';\n\n const styles: Record<string, string> = {};\n\n if (this.direction === 'horizontal' || this.direction === 'all') {\n if (isFull) {\n styles['marginLeft'] = 'calc(-50vw + 50%)';\n styles['marginRight'] = 'calc(-50vw + 50%)';\n styles['width'] = '100vw';\n } else {\n styles['marginLeft'] = `-${bleedValue}`;\n styles['marginRight'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingLeft'] = bleedValue;\n styles['paddingRight'] = bleedValue;\n }\n }\n\n if (this.direction === 'left') {\n if (isFull) {\n styles['marginLeft'] = 'calc(-50vw + 50%)';\n } else {\n styles['marginLeft'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingLeft'] = bleedValue;\n }\n }\n\n if (this.direction === 'right') {\n if (isFull) {\n styles['marginRight'] = 'calc(-50vw + 50%)';\n } else {\n styles['marginRight'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingRight'] = bleedValue;\n }\n }\n\n if (this.direction === 'all') {\n if (!isFull) {\n styles['marginTop'] = `-${bleedValue}`;\n styles['marginBottom'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingTop'] = bleedValue;\n styles['paddingBottom'] = bleedValue;\n }\n }\n\n return styles;\n }\n}\n\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type OverlayBlur = 'none' | 'sm' | 'md' | 'lg';\nexport type OverlayOpacity = 'light' | 'medium' | 'dark' | 'solid';\n\nconst BLUR_CLASSES: Record<OverlayBlur, string> = {\n none: '',\n sm: 'backdrop-blur-sm',\n md: 'backdrop-blur-md',\n lg: 'backdrop-blur-lg',\n};\n\nconst OPACITY_CLASSES: Record<OverlayOpacity, string> = {\n light: 'bg-black/25',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n solid: 'bg-black',\n};\n\n/**\n * Overlay component for creating backdrop overlays.\n * Useful as backgrounds for modals, drawers, and lightboxes.\n *\n * @example\n * ```html\n * <!-- Simple overlay -->\n * <tw-overlay [visible]=\"isOpen\" (close)=\"isOpen = false\">\n * <div class=\"bg-white p-6 rounded-lg\">\n * Modal content here\n * </div>\n * </tw-overlay>\n *\n * <!-- Overlay with blur effect -->\n * <tw-overlay [visible]=\"showDrawer\" blur=\"md\" opacity=\"light\" (close)=\"closeDrawer()\">\n * <aside class=\"fixed right-0 top-0 h-full w-80 bg-white\">\n * Drawer content\n * </aside>\n * </tw-overlay>\n * ```\n */\n@Component({\n selector: 'tw-overlay',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (visible) {\n <div\n [class]=\"overlayClasses()\"\n (click)=\"onOverlayClick($event)\"\n [@.disabled]=\"!animate\">\n <div class=\"relative z-10\" (click)=\"$event.stopPropagation()\">\n <ng-content></ng-content>\n </div>\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class TwOverlayComponent {\n /** Whether the overlay is visible */\n @Input() visible = false;\n\n /** Whether clicking the overlay closes it */\n @Input() closeOnClick = true;\n\n /** Whether pressing Escape closes the overlay */\n @Input() closeOnEscape = true;\n\n /** Blur intensity */\n @Input() blur: OverlayBlur = 'none';\n\n /** Opacity level */\n @Input() opacity: OverlayOpacity = 'medium';\n\n /** Whether to center content */\n @Input() centered = true;\n\n /** Whether to lock body scroll when visible */\n @Input() lockScroll = true;\n\n /** Whether to animate transitions */\n @Input() animate = true;\n\n /** Z-index of the overlay */\n @Input() zIndex = 50;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n /** Emits when overlay should close */\n @Output() close = new EventEmitter<void>();\n\n constructor(private readonly twClass: TwClassService) {}\n\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n if (this.visible && this.closeOnEscape) {\n this.close.emit();\n }\n }\n\n protected overlayClasses(): string {\n return this.twClass.merge(\n 'fixed inset-0',\n BLUR_CLASSES[this.blur],\n OPACITY_CLASSES[this.opacity],\n this.centered ? 'flex items-center justify-center' : '',\n this.animate ? 'transition-opacity duration-200' : '',\n `z-[${this.zIndex}]`,\n this.class\n );\n }\n\n protected onOverlayClick(event: MouseEvent): void {\n if (this.closeOnClick && event.target === event.currentTarget) {\n this.close.emit();\n }\n }\n}\n\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type BadgeVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeStyle = 'solid' | 'soft' | 'outline' | 'dot';\n\nconst BADGE_BASE_CLASSES = `\n inline-flex items-center justify-center\n font-medium\n whitespace-nowrap\n`;\n\nconst BADGE_SOLID_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-600 text-white',\n secondary: 'bg-slate-600 text-white',\n success: 'bg-emerald-600 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-rose-600 text-white',\n info: 'bg-cyan-600 text-white',\n neutral: 'bg-slate-200 text-slate-800',\n};\n\nconst BADGE_SOFT_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-100 dark:bg-blue-900/40 text-blue-800 dark:text-blue-300',\n secondary: 'bg-slate-100 dark:bg-slate-700 text-slate-800 dark:text-slate-300',\n success: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-800 dark:text-emerald-300',\n warning: 'bg-amber-100 dark:bg-amber-900/40 text-amber-800 dark:text-amber-300',\n danger: 'bg-rose-100 dark:bg-rose-900/40 text-rose-800 dark:text-rose-300',\n info: 'bg-cyan-100 dark:bg-cyan-900/40 text-cyan-800 dark:text-cyan-300',\n neutral: 'bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300',\n};\n\nconst BADGE_OUTLINE_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-transparent border border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400',\n secondary: 'bg-transparent border border-slate-600 dark:border-slate-400 text-slate-600 dark:text-slate-400',\n success: 'bg-transparent border border-emerald-600 dark:border-emerald-400 text-emerald-600 dark:text-emerald-400',\n warning: 'bg-transparent border border-amber-500 dark:border-amber-400 text-amber-600 dark:text-amber-400',\n danger: 'bg-transparent border border-rose-600 dark:border-rose-400 text-rose-600 dark:text-rose-400',\n info: 'bg-transparent border border-cyan-600 dark:border-cyan-400 text-cyan-600 dark:text-cyan-400',\n neutral: 'bg-transparent border border-slate-400 dark:border-slate-500 text-slate-600 dark:text-slate-400',\n};\n\nconst BADGE_DOT_COLORS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n neutral: 'bg-slate-400',\n};\n\nconst BADGE_SIZES: Record<BadgeSize, string> = {\n sm: 'text-xs px-2.5 py-1 gap-1.5',\n md: 'text-xs px-3 py-1.5 gap-2',\n lg: 'text-sm px-4 py-2 gap-2',\n};\n\nconst BADGE_ROUNDED: Record<string, string> = {\n default: 'rounded-md',\n pill: 'rounded-full',\n};\n\n/**\n * Badge component for status indicators, labels, and counts\n *\n * @example\n * ```html\n * <tw-badge>Default</tw-badge>\n * <tw-badge variant=\"success\">Active</tw-badge>\n * <tw-badge variant=\"danger\" badgeStyle=\"soft\">Error</tw-badge>\n * <tw-badge variant=\"info\" badgeStyle=\"outline\" [pill]=\"true\">New</tw-badge>\n * <tw-badge variant=\"primary\" badgeStyle=\"dot\">With dot</tw-badge>\n * <tw-badge [removable]=\"true\" (remove)=\"onRemove()\">Removable</tw-badge>\n * ```\n */\n@Component({\n selector: 'tw-badge',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge.component.html',\n host: {\n '[class]': 'computedClasses()',\n },\n})\nexport class TwBadgeComponent {\n private readonly twClass = inject(TwClassService);\n\n // Internal signals\n protected readonly _variant = signal<BadgeVariant>('neutral');\n protected readonly _badgeStyle = signal<BadgeStyle>('solid');\n protected readonly _size = signal<BadgeSize>('md');\n protected readonly _pill = signal(false);\n protected readonly _removable = signal(false);\n protected readonly _classOverride = signal('');\n\n // Input setters\n @Input() set variant(value: BadgeVariant) {\n this._variant.set(value);\n }\n @Input() set badgeStyle(value: BadgeStyle) {\n this._badgeStyle.set(value);\n }\n @Input() set size(value: BadgeSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set pill(value: boolean) {\n this._pill.set(value);\n }\n @Input({ transform: booleanAttribute }) set removable(value: boolean) {\n this._removable.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n // Output\n @Output() remove = new EventEmitter<void>();\n\n protected readonly computedClasses = computed(() => {\n const styleVariants: Record<BadgeStyle, Record<BadgeVariant, string>> = {\n solid: BADGE_SOLID_VARIANTS,\n soft: BADGE_SOFT_VARIANTS,\n outline: BADGE_OUTLINE_VARIANTS,\n dot: BADGE_SOFT_VARIANTS, // Dot style uses soft background\n };\n\n return this.twClass.merge(\n BADGE_BASE_CLASSES,\n styleVariants[this._badgeStyle()][this._variant()],\n BADGE_SIZES[this._size()],\n this._pill() ? BADGE_ROUNDED['pill'] : BADGE_ROUNDED['default'],\n this._classOverride()\n );\n });\n\n protected readonly dotClasses = computed(() => {\n const dotSizes: Record<BadgeSize, string> = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n };\n\n return this.twClass.merge(\n 'rounded-full',\n dotSizes[this._size()],\n BADGE_DOT_COLORS[this._variant()]\n );\n });\n\n protected onRemoveClick(event: Event): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n\n/**\n * Badge group for displaying multiple badges\n */\n@Component({\n selector: 'tw-badge-group',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge-group.component.html',\n})\nexport class TwBadgeGroupComponent {\n private readonly twClass = inject(TwClassService);\n\n // Internal signals\n protected readonly _gap = signal<'sm' | 'md' | 'lg'>('sm');\n protected readonly _direction = signal<'row' | 'column'>('row');\n protected readonly _wrap = signal(true);\n protected readonly _classOverride = signal('');\n\n // Input setters\n @Input() set gap(value: 'sm' | 'md' | 'lg') {\n this._gap.set(value);\n }\n @Input() set direction(value: 'row' | 'column') {\n this._direction.set(value);\n }\n @Input({ transform: booleanAttribute }) set wrap(value: boolean) {\n this._wrap.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n protected readonly computedClasses = computed(() => {\n const gaps: Record<string, string> = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n return this.twClass.merge(\n 'inline-flex',\n this._direction() === 'column' ? 'flex-col' : 'flex-row',\n this._wrap() ? 'flex-wrap' : '',\n gaps[this._gap()],\n this._classOverride()\n );\n });\n}\n","@if (_badgeStyle() === 'dot') {\n <span [class]=\"dotClasses()\" aria-hidden=\"true\"></span>\n}\n\n<ng-content></ng-content>\n\n@if (_removable()) {\n <button\n type=\"button\"\n class=\"ml-1 -mr-0.5 inline-flex items-center justify-center w-4 h-4 rounded-full hover:bg-black/10 focus:outline-none transition-colors\"\n (click)=\"onRemoveClick($event)\"\n aria-label=\"Remove\"\n >\n <svg class=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n}\n","<div [class]=\"computedClasses()\">\n <ng-content></ng-content>\n</div>\n","export * from './badge.component';\n\nimport { TwBadgeComponent, TwBadgeGroupComponent } from './badge.component';\n\nexport const TW_BADGE_COMPONENTS = [TwBadgeComponent, TwBadgeGroupComponent] as const;\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type AvatarVariant = 'circle' | 'rounded' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away' | 'none';\n\n@Component({\n selector: 'tw-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar.component.html',\n})\nexport class TwAvatarComponent {\n @Input() set src(val: string) {\n this._src.set(val);\n }\n @Input() set alt(val: string) {\n this._alt.set(val);\n }\n @Input() set initials(val: string) {\n this._initials.set(val);\n }\n @Input() set size(val: AvatarSize) {\n this._size.set(val);\n }\n @Input() set variant(val: AvatarVariant) {\n this._variant.set(val);\n }\n @Input() set status(val: AvatarStatus) {\n this._status.set(val);\n }\n @Input() set badge(val: string | number) {\n this._badge.set(val?.toString() ?? '');\n }\n @Input() set color(val: string) {\n this._color.set(val);\n }\n\n protected _src = signal('');\n protected _alt = signal('');\n protected _initials = signal('');\n protected _size = signal<AvatarSize>('md');\n protected _variant = signal<AvatarVariant>('circle');\n protected _status = signal<AvatarStatus>('none');\n protected _badge = signal('');\n protected _color = signal('');\n protected _imageError = signal(false);\n\n protected srcVal = computed(() => (this._imageError() ? '' : this._src()));\n protected altVal = computed(() => this._alt());\n protected initialsVal = computed(() => this._initials());\n protected statusVal = computed(() => this._status());\n protected badgeVal = computed(() => this._badge());\n\n protected containerClasses = computed(() => {\n const sz = this._size();\n\n // Outer container needs extra padding for status/badge overflow\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n '2xl': 'w-20 h-20',\n };\n\n return ['relative inline-block', sizeClasses[sz]].join(' ');\n });\n\n protected innerClasses = computed(() => {\n const sz = this._size();\n const vari = this._variant();\n const clr = this._color();\n\n const textSizeClasses: Record<AvatarSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n };\n\n const variantClasses: Record<AvatarVariant, string> = {\n circle: 'rounded-full',\n rounded: 'rounded-lg',\n square: 'rounded-none',\n };\n\n const baseColor = clr || 'bg-slate-200 dark:bg-slate-700 text-slate-600 dark:text-slate-300';\n\n return [\n 'w-full h-full flex items-center justify-center overflow-hidden',\n textSizeClasses[sz],\n variantClasses[vari],\n baseColor,\n ].join(' ');\n });\n\n protected initialsClasses = computed(() => 'font-medium uppercase');\n\n protected statusClasses = computed(() => {\n const sz = this._size();\n const stat = this._status();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-1.5 h-1.5 border',\n sm: 'w-2 h-2 border',\n md: 'w-2.5 h-2.5 border-2',\n lg: 'w-3 h-3 border-2',\n xl: 'w-3.5 h-3.5 border-2',\n '2xl': 'w-4 h-4 border-2',\n };\n\n const statusColors: Record<AvatarStatus, string> = {\n online: 'bg-emerald-500',\n offline: 'bg-slate-400',\n busy: 'bg-rose-500',\n away: 'bg-amber-500',\n none: '',\n };\n\n return [\n 'absolute bottom-0 right-0 rounded-full border-white dark:border-slate-800',\n sizeClasses[sz],\n statusColors[stat],\n ].join(' ');\n });\n\n protected badgeClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'text-[8px] min-w-3 h-3 -top-0.5 -right-0.5',\n sm: 'text-[9px] min-w-3.5 h-3.5 -top-0.5 -right-0.5',\n md: 'text-[10px] min-w-4 h-4 -top-1 -right-1',\n lg: 'text-xs min-w-5 h-5 -top-1 -right-1',\n xl: 'text-xs min-w-5 h-5 -top-1 -right-1',\n '2xl': 'text-sm min-w-6 h-6 -top-1 -right-1',\n };\n\n return [\n 'absolute flex items-center justify-center rounded-full bg-rose-500 text-white font-medium px-1',\n sizeClasses[sz],\n ].join(' ');\n });\n\n protected onImageError(): void {\n this._imageError.set(true);\n }\n}\n\n@Component({\n selector: 'tw-avatar-group',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-group.component.html',\n})\nexport class TwAvatarGroupComponent {\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set total(val: number) {\n this._total.set(val);\n }\n @Input() set size(val: AvatarSize) {\n this._size.set(val);\n }\n @Input() set spacing(val: 'tight' | 'normal' | 'loose') {\n this._spacing.set(val);\n }\n\n protected _max = signal(0);\n protected _total = signal(0);\n protected _size = signal<AvatarSize>('md');\n protected _spacing = signal<'tight' | 'normal' | 'loose'>('normal');\n\n protected maxVal = computed(() => this._max());\n protected overflowVal = computed(() => {\n const mx = this._max();\n const tot = this._total();\n return mx > 0 && tot > mx ? tot - mx : 0;\n });\n\n protected groupClasses = computed(() => {\n const sp = this._spacing();\n\n const spacingClasses: Record<string, string> = {\n tight: '-space-x-3',\n normal: '-space-x-2',\n loose: '-space-x-1',\n };\n\n return ['flex items-center', spacingClasses[sp], '[&>*]:ring-2 [&>*]:ring-white dark:[&>*]:ring-slate-800'].join(' ');\n });\n\n protected overflowClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-8 h-8 text-sm',\n md: 'w-10 h-10 text-base',\n lg: 'w-12 h-12 text-lg',\n xl: 'w-16 h-16 text-xl',\n '2xl': 'w-20 h-20 text-2xl',\n };\n\n return [\n 'flex items-center justify-center rounded-full bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300 font-medium ring-2 ring-white dark:ring-slate-800',\n sizeClasses[sz],\n ].join(' ');\n });\n}\n","<div [class]=\"containerClasses()\">\n <!-- Inner container with overflow-hidden for image clipping -->\n <div [class]=\"innerClasses()\">\n @if (srcVal()) {\n <img\n [src]=\"srcVal()\"\n [alt]=\"altVal()\"\n class=\"w-full h-full object-cover\"\n (error)=\"onImageError()\"\n />\n } @else if (initialsVal()) {\n <span [class]=\"initialsClasses()\">{{ initialsVal() }}</span>\n } @else {\n <svg class=\"w-3/5 h-3/5 text-current\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n 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.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n />\n </svg>\n }\n </div>\n\n <!-- Status indicator (outside overflow container) -->\n @if (statusVal() !== 'none') {\n <span [class]=\"statusClasses()\"></span>\n }\n\n <!-- Badge (outside overflow container) -->\n @if (badgeVal()) {\n <span [class]=\"badgeClasses()\">{{ badgeVal() }}</span>\n }\n</div>\n","<div [class]=\"groupClasses()\">\n <ng-content></ng-content>\n @if (maxVal() && overflowVal() > 0) {\n <div [class]=\"overflowClasses()\">+{{ overflowVal() }}</div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TableColumn {\n field: string;\n header: string;\n sortable?: boolean;\n width?: string;\n align?: 'left' | 'center' | 'right';\n template?: TemplateRef<any>;\n}\n\nexport type TableSize = 'sm' | 'md' | 'lg';\nexport type TableVariant = 'default' | 'striped' | 'bordered';\n\nconst TABLE_SIZES: Record<TableSize, { cell: string; text: string }> = {\n sm: { cell: 'px-3 py-2', text: 'text-sm' },\n md: { cell: 'px-4 py-3', text: 'text-sm' },\n lg: { cell: 'px-6 py-4', text: 'text-base' },\n};\n\n/**\n * Table/DataTable component with Tailwind CSS styling\n */\n@Component({\n selector: 'tw-table',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './table.component.html',\n})\nexport class TwTableComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() data: any[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() title = '';\n @Input() size: TableSize = 'md';\n @Input() variant: TableVariant = 'default';\n @Input({ transform: booleanAttribute }) selectable = false;\n @Input() selectionMode: 'single' | 'multiple' = 'multiple';\n @Input({ transform: booleanAttribute }) showGlobalFilter = false;\n @Input() filterPlaceholder = 'Search...';\n @Input({ transform: booleanAttribute }) paginator = false;\n @Input({ transform: numberAttribute }) rows = 10;\n @Input() rowsPerPageOptions: number[] = [10, 25, 50, 100];\n @Input() emptyMessage = 'No records found';\n @Input({ transform: booleanAttribute }) hoverable = true;\n @Input({ transform: booleanAttribute }) responsive = true;\n @Input() trackByFn: (item: any) => any = item => item;\n @Input() classOverride = '';\n\n @Output() selectionChange = new EventEmitter<any[]>();\n @Output() rowClick = new EventEmitter<any>();\n @Output() sortChange = new EventEmitter<{ field: string; order: number }>();\n @Output() pageChange = new EventEmitter<{ page: number; rows: number }>();\n\n @ContentChild('twTableActions') headerActionsTemplate!: TemplateRef<any>;\n @ContentChild('twRowActions') rowActionsTemplate!: TemplateRef<any>;\n\n protected globalFilter = signal('');\n protected sortField = signal<string>('');\n protected sortOrder = signal<1 | -1>(1);\n protected currentPage = signal(1);\n protected selection = signal<any[]>([]);\n\n protected get hasHeaderActions(): boolean {\n return !!this.headerActionsTemplate;\n }\n\n protected get hasRowActions(): boolean {\n return !!this.rowActionsTemplate;\n }\n\n protected get totalColumns(): number {\n let count = this.columns.length;\n if (this.selectable) count++;\n if (this.hasRowActions) count++;\n return count;\n }\n\n protected filteredData = computed(() => {\n let result = [...this.data];\n const filter = this.globalFilter().toLowerCase();\n if (filter) {\n result = result.filter(item =>\n this.columns.some(col => {\n const value = this.getFieldValue(item, col.field);\n return value?.toString().toLowerCase().includes(filter);\n })\n );\n }\n const field = this.sortField();\n if (field) {\n result.sort((a, b) => {\n const aVal = this.getFieldValue(a, field);\n const bVal = this.getFieldValue(b, field);\n const comparison = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n return comparison * this.sortOrder();\n });\n }\n return result;\n });\n\n protected totalRecords = computed(() => this.filteredData().length);\n protected totalPages = computed(() => Math.ceil(this.totalRecords() / this.rows));\n\n protected displayedData = computed(() => {\n if (!this.paginator) return this.filteredData();\n const start = (this.currentPage() - 1) * this.rows;\n return this.filteredData().slice(start, start + this.rows);\n });\n\n protected paginationStart = computed(() => {\n if (this.totalRecords() === 0) return 0;\n return (this.currentPage() - 1) * this.rows + 1;\n });\n\n protected paginationEnd = computed(() => {\n return Math.min(this.currentPage() * this.rows, this.totalRecords());\n });\n\n protected visiblePages = computed((): Array<number | string> => {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: Array<number | string> = [];\n if (total <= 7) {\n for (let i = 1; i <= total; i++) pages.push(i);\n } else {\n pages.push(1);\n if (current > 3) pages.push('...');\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push('...');\n pages.push(total);\n }\n return pages;\n });\n\n protected allSelected = computed(() => {\n const displayed = this.displayedData();\n return displayed.length > 0 && displayed.every(row => this.isSelected(row));\n });\n\n protected someSelected = computed(() => {\n const displayed = this.displayedData();\n const selectedCount = displayed.filter(row => this.isSelected(row)).length;\n return selectedCount > 0 && selectedCount < displayed.length;\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'bg-white dark:bg-slate-800 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden',\n this.classOverride\n );\n });\n\n protected tableWrapperClasses = computed(() => (this.responsive ? 'overflow-x-auto' : ''));\n\n protected tableClasses = computed(() => {\n const sizeClasses = TABLE_SIZES[this.size].text;\n return this.twClass.merge(\n 'w-full',\n sizeClasses,\n this.variant === 'bordered' ? 'border-collapse' : ''\n );\n });\n\n protected theadClasses = computed(() => 'bg-slate-50 dark:bg-slate-900 border-b border-slate-200 dark:border-slate-700');\n\n protected thClasses(col: TableColumn) {\n const sizeClasses = TABLE_SIZES[this.size].cell;\n const alignClasses =\n col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left';\n return this.twClass.merge(\n 'font-semibold text-slate-700 dark:text-slate-300 whitespace-nowrap',\n sizeClasses,\n alignClasses,\n col.sortable === false ? '' : 'cursor-pointer hover:bg-slate-100 dark:hover:bg-slate-700 select-none'\n );\n }\n\n protected tbodyClasses = computed(() => 'divide-y divide-slate-100 dark:divide-slate-700');\n\n protected trClasses(row: any, isOdd: boolean) {\n const isSelected = this.isSelected(row);\n return this.twClass.merge(\n 'transition-colors',\n this.variant === 'striped' && isOdd ? 'bg-slate-50 dark:bg-slate-900/50' : 'bg-white dark:bg-slate-800',\n this.hoverable ? 'hover:bg-slate-50 dark:hover:bg-slate-700' : '',\n isSelected ? 'bg-blue-50 dark:bg-blue-900/30' : '',\n this.selectable ? 'cursor-pointer' : ''\n );\n }\n\n protected tdClasses(col: TableColumn) {\n const sizeClasses = TABLE_SIZES[this.size].cell;\n const alignClasses =\n col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left';\n return this.twClass.merge(\n 'text-slate-600 dark:text-slate-400',\n sizeClasses,\n alignClasses,\n this.variant === 'bordered' ? 'border border-slate-200 dark:border-slate-700' : ''\n );\n }\n\n protected pageButtonClasses(page: number) {\n const isCurrent = page === this.currentPage();\n return this.twClass.merge(\n 'w-8 h-8 text-sm font-medium rounded-lg transition-colors',\n isCurrent\n ? 'bg-blue-600 text-white'\n : 'text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-700'\n );\n }\n\n getFieldValue(obj: any, field: string): any {\n return field.split('.').reduce((o, k) => o?.[k], obj);\n }\n\n onGlobalFilterChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.globalFilter.set(input.value);\n this.currentPage.set(1);\n }\n\n onSort(col: TableColumn): void {\n if (col.sortable === false) return;\n if (this.sortField() === col.field) {\n this.sortOrder.set(this.sortOrder() === 1 ? -1 : 1);\n } else {\n this.sortField.set(col.field);\n this.sortOrder.set(1);\n }\n this.sortChange.emit({ field: this.sortField(), order: this.sortOrder() });\n }\n\n goToPage(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.currentPage.set(page);\n this.pageChange.emit({ page, rows: this.rows });\n }\n\n isSelected(row: any): boolean {\n return this.selection().includes(row);\n }\n\n toggleSelection(row: any): void {\n const current = this.selection();\n const index = current.indexOf(row);\n if (this.selectionMode === 'single') {\n this.selection.set(index === -1 ? [row] : []);\n } else if (index === -1) {\n this.selection.set([...current, row]);\n } else {\n this.selection.set(current.filter(r => r !== row));\n }\n this.selectionChange.emit(this.selection());\n }\n\n toggleSelectAll(): void {\n const displayed = this.displayedData();\n if (this.allSelected()) {\n this.selection.set(this.selection().filter(r => !displayed.includes(r)));\n } else {\n const newSelection = [...this.selection()];\n displayed.forEach(row => {\n if (!newSelection.includes(row)) newSelection.push(row);\n });\n this.selection.set(newSelection);\n }\n this.selectionChange.emit(this.selection());\n }\n\n onRowClick(row: any): void {\n this.rowClick.emit(row);\n if (this.selectable) this.toggleSelection(row);\n }\n\n clearSelection(): void {\n this.selection.set([]);\n this.selectionChange.emit([]);\n }\n\n reset(): void {\n this.globalFilter.set('');\n this.sortField.set('');\n this.sortOrder.set(1);\n this.currentPage.set(1);\n this.clearSelection();\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Header with title and actions -->\n @if (title || hasHeaderActions) {\n <div class=\"px-6 py-4 border-b border-slate-200 dark:border-slate-700 flex items-center justify-between\">\n @if (title) {\n <h3 class=\"text-lg font-semibold text-slate-900 dark:text-slate-100\">{{ title }}</h3>\n }\n <div class=\"flex items-center gap-2\">\n <ng-content select=\"[twTableActions]\"></ng-content>\n </div>\n </div>\n }\n\n <!-- Search/Filter bar -->\n @if (showGlobalFilter) {\n <div class=\"px-6 py-3 border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900\">\n <div class=\"relative max-w-md\">\n <svg\n class=\"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-slate-400 dark:text-slate-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n <input\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n class=\"w-full pl-10 pr-4 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [value]=\"globalFilter()\"\n (input)=\"onGlobalFilterChange($event)\"\n />\n </div>\n </div>\n }\n\n <!-- Table wrapper -->\n <div [class]=\"tableWrapperClasses()\">\n <table [class]=\"tableClasses()\">\n <thead [class]=\"theadClasses()\">\n <tr>\n @if (selectable) {\n <th class=\"w-12 px-4 py-3\">\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 dark:border-slate-600 text-blue-600 focus:ring-blue-500 bg-white dark:bg-slate-700\"\n [checked]=\"allSelected()\"\n [indeterminate]=\"someSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n @for (col of columns; track col.field) {\n <th\n [class]=\"thClasses(col)\"\n [style.width]=\"col.width\"\n (click)=\"col.sortable !== false ? onSort(col) : null\"\n >\n <div class=\"flex items-center gap-2\">\n <span>{{ col.header }}</span>\n @if (col.sortable !== false && sortField() === col.field) {\n <svg\n class=\"w-4 h-4\"\n [class.rotate-180]=\"sortOrder() === -1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n }\n </div>\n </th>\n }\n @if (hasRowActions) {\n <th class=\"w-20 px-4 py-3 text-right text-slate-700 dark:text-slate-300\">Actions</th>\n }\n </tr>\n </thead>\n <tbody [class]=\"tbodyClasses()\">\n @for (row of displayedData(); track trackByFn(row); let i = $index; let odd = $odd) {\n <tr [class]=\"trClasses(row, odd)\" (click)=\"onRowClick(row)\">\n @if (selectable) {\n <td class=\"px-4 py-3\">\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 dark:border-slate-600 text-blue-600 focus:ring-blue-500 bg-white dark:bg-slate-700\"\n [checked]=\"isSelected(row)\"\n (change)=\"toggleSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n }\n @for (col of columns; track col.field) {\n <td [class]=\"tdClasses(col)\">\n @if (col.template) {\n <ng-container\n *ngTemplateOutlet=\"\n col.template;\n context: { $implicit: row, rowData: row, column: col }\n \"\n ></ng-container>\n } @else {\n {{ getFieldValue(row, col.field) }}\n }\n </td>\n }\n @if (hasRowActions) {\n <td class=\"px-4 py-3 text-right\">\n <ng-content select=\"[twRowActions]\"></ng-content>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [attr.colspan]=\"totalColumns\" class=\"px-6 py-12 text-center text-slate-500 dark:text-slate-400\">\n {{ emptyMessage }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- Pagination -->\n @if (paginator && totalRecords() > 0) {\n <div class=\"px-6 py-4 border-t border-slate-200 dark:border-slate-700 flex items-center justify-between bg-slate-50 dark:bg-slate-900\">\n <div class=\"text-sm text-slate-600 dark:text-slate-400\">\n Showing {{ paginationStart() }} to {{ paginationEnd() }} of {{ totalRecords() }} entries\n </div>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-sm font-medium text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg hover:bg-slate-50 dark:hover:bg-slate-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"goToPage(currentPage() - 1)\"\n >\n Previous\n </button>\n @for (page of visiblePages(); track page) {\n @if (page === '...') {\n <span class=\"px-2 text-slate-400 dark:text-slate-500\">...</span>\n } @else {\n <button type=\"button\" [class]=\"pageButtonClasses(+page)\" (click)=\"goToPage(+page)\">\n {{ page }}\n </button>\n }\n }\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-sm font-medium text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg hover:bg-slate-50 dark:hover:bg-slate-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"goToPage(currentPage() + 1)\"\n >\n Next\n </button>\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport {\n TableColumn,\n TableSize,\n TableVariant,\n TwTableComponent,\n} from '../table/table.component';\n\n@Component({\n selector: 'tw-datatables',\n standalone: true,\n imports: [CommonModule, TwTableComponent],\n templateUrl: './datatable.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TwDatatablesComponent {\n @Input() data: any[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() title = '';\n @Input() subtitle?: string;\n @Input() description?: string;\n @Input() tableSize: TableSize = 'md';\n @Input() tableVariant: TableVariant = 'striped';\n @Input() selectable = false;\n @Input() selectionMode: 'single' | 'multiple' = 'multiple';\n @Input() showGlobalFilter = true;\n @Input() paginator = true;\n @Input() rows = 10;\n @Input() hoverable = true;\n @Input() responsive = true;\n @Input() emptyMessage = 'No records found';\n @Input() classOverride = '';\n @Input() containerClass = '';\n @Input() toolbarClass = '';\n\n @Output() selectionChange = new EventEmitter<any[]>();\n @Output() rowClick = new EventEmitter<any>();\n @Output() sortChange = new EventEmitter<{ field: string; order: number }>();\n @Output() pageChange = new EventEmitter<{ page: number; rows: number }>();\n\n protected readonly baseContainerClass =\n 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-2xl shadow-sm p-6 space-y-6';\n\n protected readonly baseToolbarClass = 'flex items-center gap-2 flex-wrap';\n\n protected get containerClassList(): string {\n return [this.baseContainerClass, this.containerClass].filter(Boolean).join(' ');\n }\n\n protected get toolbarClassList(): string {\n return [this.baseToolbarClass, this.toolbarClass].filter(Boolean).join(' ');\n }\n}\n\n\n","<section [class]=\"containerClassList\">\n <header class=\"flex flex-wrap items-start justify-between gap-6\">\n <div class=\"space-y-1 max-w-3xl\">\n <p class=\"text-xs font-semibold uppercase tracking-wider text-slate-500 dark:text-slate-400\" *ngIf=\"subtitle\">\n {{ subtitle }}\n </p>\n <h3 class=\"text-xl font-semibold text-slate-900 dark:text-white\">{{ title }}</h3>\n <p class=\"text-sm text-slate-500 dark:text-slate-300\" *ngIf=\"description\">\n {{ description }}\n </p>\n </div>\n <div [class]=\"toolbarClassList\">\n <ng-content select=\"[twDatatablesActions]\"></ng-content>\n </div>\n </header>\n\n <div class=\"space-y-4\">\n <tw-table\n [data]=\"data\"\n [columns]=\"columns\"\n [size]=\"tableSize\"\n [variant]=\"tableVariant\"\n [selectable]=\"selectable\"\n [selectionMode]=\"selectionMode\"\n [showGlobalFilter]=\"showGlobalFilter\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [hoverable]=\"hoverable\"\n [responsive]=\"responsive\"\n [emptyMessage]=\"emptyMessage\"\n [classOverride]=\"classOverride\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (rowClick)=\"rowClick.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (pageChange)=\"pageChange.emit($event)\"\n ></tw-table>\n </div>\n</section>\n\n\n","export * from './datatable.component';\n\nimport { TwDatatablesComponent } from './datatable.component';\n\nexport const TW_DATATABLES_COMPONENTS = [TwDatatablesComponent] as const;\n\n\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TreeNode {\n key?: string | number;\n label: string;\n icon?: TemplateRef<any>;\n expanded?: boolean;\n selected?: boolean;\n disabled?: boolean;\n visible?: boolean;\n children?: TreeNode[];\n data?: any;\n badge?: string;\n styleClass?: string;\n}\n\nexport type TreeSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\n\n/**\n * Tree component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-tree [nodes]=\"treeNodes\" selectionMode=\"checkbox\"></tw-tree>\n * <tw-tree [nodes]=\"nodes\" (onNodeSelect)=\"handleSelect($event)\"></tw-tree>\n * ```\n */\n@Component({\n selector: 'tw-tree',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tree.component.html',\n})\nexport class TwTreeComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Tree nodes */\n @Input() nodes: TreeNode[] = [];\n\n /** Selection mode */\n @Input() selectionMode: TreeSelectionMode = 'none';\n\n /** Indent size in pixels */\n @Input({ transform: numberAttribute }) indentSize = 24;\n\n /** Whether to propagate selection to children */\n @Input() propagateSelectionDown = true;\n\n /** Whether to propagate selection to parent */\n @Input() propagateSelectionUp = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Node select event */\n @Output() onNodeSelect = new EventEmitter<TreeNode>();\n\n /** Node unselect event */\n @Output() onNodeUnselect = new EventEmitter<TreeNode>();\n\n /** Node expand event */\n @Output() onNodeExpand = new EventEmitter<TreeNode>();\n\n /** Node collapse event */\n @Output() onNodeCollapse = new EventEmitter<TreeNode>();\n\n /** Selection change event */\n @Output() selectionChange = new EventEmitter<TreeNode[]>();\n\n protected selection = signal<TreeNode[]>([]);\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('py-2', this.classOverride);\n });\n\n protected nodeClasses(node: TreeNode, level: number) {\n return this.twClass.merge(\n 'flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors cursor-pointer',\n 'hover:bg-slate-100',\n node.selected ? 'bg-blue-50' : '',\n node.disabled ? 'opacity-50 cursor-not-allowed' : '',\n node.styleClass || ''\n );\n }\n\n protected labelClasses(node: TreeNode) {\n return this.twClass.merge(\n 'text-sm select-none',\n node.disabled ? 'text-slate-400' : 'text-slate-700'\n );\n }\n\n isSelected(node: TreeNode): boolean {\n return this.selection().includes(node);\n }\n\n isIndeterminate(node: TreeNode): boolean {\n if (!node.children || node.children.length === 0) return false;\n\n const selectedChildren = this.getSelectedDescendants(node);\n const allChildren = this.getAllDescendants(node);\n\n return selectedChildren.length > 0 && selectedChildren.length < allChildren.length;\n }\n\n onNodeClick(node: TreeNode): void {\n if (node.disabled) return;\n\n // Toggle expand/collapse if node has children\n if (node.children && node.children.length > 0) {\n this.toggleNode(node);\n }\n\n // Handle selection\n if (this.selectionMode === 'single') {\n this.selection.set([node]);\n this.onNodeSelect.emit(node);\n this.selectionChange.emit(this.selection());\n } else if (this.selectionMode === 'multiple') {\n const current = this.selection();\n if (current.includes(node)) {\n this.selection.set(current.filter(n => n !== node));\n this.onNodeUnselect.emit(node);\n } else {\n this.selection.set([...current, node]);\n this.onNodeSelect.emit(node);\n }\n this.selectionChange.emit(this.selection());\n }\n }\n\n onCheckboxChange(node: TreeNode, event: Event): void {\n if (node.disabled) return;\n\n const { checked } = event.target as HTMLInputElement;\n\n if (checked) {\n this.selectNode(node);\n } else {\n this.unselectNode(node);\n }\n\n this.selectionChange.emit(this.selection());\n }\n\n toggleNode(node: TreeNode): void {\n node.expanded = !node.expanded;\n\n if (node.expanded) {\n this.onNodeExpand.emit(node);\n } else {\n this.onNodeCollapse.emit(node);\n }\n }\n\n private selectNode(node: TreeNode): void {\n const current = this.selection();\n if (!current.includes(node)) {\n this.selection.set([...current, node]);\n this.onNodeSelect.emit(node);\n }\n\n if (this.propagateSelectionDown && node.children) {\n node.children.forEach(child => {\n this.selectNode(child);\n });\n }\n }\n\n private unselectNode(node: TreeNode): void {\n this.selection.set(this.selection().filter(n => n !== node));\n this.onNodeUnselect.emit(node);\n\n if (this.propagateSelectionDown && node.children) {\n node.children.forEach(child => {\n this.unselectNode(child);\n });\n }\n }\n\n private getSelectedDescendants(node: TreeNode): TreeNode[] {\n const selected: TreeNode[] = [];\n\n const traverse = (n: TreeNode) => {\n if (this.selection().includes(n)) {\n selected.push(n);\n }\n if (n.children) {\n n.children.forEach(traverse);\n }\n };\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n\n return selected;\n }\n\n private getAllDescendants(node: TreeNode): TreeNode[] {\n const descendants: TreeNode[] = [];\n\n const traverse = (n: TreeNode) => {\n descendants.push(n);\n if (n.children) {\n n.children.forEach(traverse);\n }\n };\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n\n return descendants;\n }\n\n /** Expand all nodes */\n expandAll(): void {\n const expandNodes = (nodes: TreeNode[]) => {\n nodes.forEach(node => {\n if (node.children && node.children.length > 0) {\n node.expanded = true;\n expandNodes(node.children);\n }\n });\n };\n expandNodes(this.nodes);\n }\n\n /** Collapse all nodes */\n collapseAll(): void {\n const collapseNodes = (nodes: TreeNode[]) => {\n nodes.forEach(node => {\n node.expanded = false;\n if (node.children) {\n collapseNodes(node.children);\n }\n });\n };\n collapseNodes(this.nodes);\n }\n\n /** Get selected nodes */\n getSelection(): TreeNode[] {\n return this.selection();\n }\n\n /** Clear selection */\n clearSelection(): void {\n this.selection.set([]);\n this.selectionChange.emit([]);\n }\n}\n","<div [class]=\"containerClasses()\" role=\"tree\">\n <ng-container\n *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: nodes, level: 0 }\"\n ></ng-container>\n</div>\n\n<ng-template #nodeTemplate let-nodes let-level=\"level\">\n @for (node of nodes; track node.key ?? $index) {\n @if (node.visible !== false) {\n <div role=\"treeitem\" [attr.aria-expanded]=\"node.expanded\">\n <div\n [class]=\"nodeClasses(node, level)\"\n [style.paddingLeft.px]=\"level * indentSize\"\n (click)=\"onNodeClick(node)\"\n >\n <!-- Expand/Collapse toggle -->\n @if (node.children && node.children.length > 0) {\n <button\n type=\"button\"\n class=\"p-1 rounded hover:bg-slate-200 transition-colors\"\n (click)=\"toggleNode(node); $event.stopPropagation()\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n >\n <svg\n class=\"w-4 h-4 transition-transform duration-200\"\n [class.rotate-90]=\"node.expanded\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n } @else {\n <span class=\"w-6\"></span>\n }\n\n <!-- Checkbox for selection -->\n @if (selectionMode !== 'none') {\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"isSelected(node)\"\n [indeterminate]=\"isIndeterminate(node)\"\n (change)=\"onCheckboxChange(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n\n <!-- Icon -->\n @if (node.icon) {\n <ng-container *ngTemplateOutlet=\"node.icon\"></ng-container>\n } @else if (node.children && node.children.length > 0) {\n <svg class=\"w-5 h-5 text-amber-500\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n @if (node.expanded) {\n <path d=\"M19 11H5a2 2 0 00-2 2v7a2 2 0 002 2h14a2 2 0 002-2v-7a2 2 0 00-2-2z\" />\n <path d=\"M17 11V7a2 2 0 00-2-2H5a2 2 0 00-2 2v4\" />\n } @else {\n <path\n d=\"M3 7v13a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6.586a1 1 0 01-.707-.293l-2-2A1 1 0 009.586 4H5a2 2 0 00-2 2z\"\n />\n }\n </svg>\n } @else {\n <svg\n class=\"w-5 h-5 text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n }\n\n <!-- Label -->\n <span [class]=\"labelClasses(node)\">{{ node.label }}</span>\n\n <!-- Badge -->\n @if (node.badge) {\n <span\n class=\"ml-auto px-2 py-0.5 text-xs font-medium rounded-full bg-blue-100 text-blue-700\"\n >\n {{ node.badge }}\n </span>\n }\n </div>\n\n <!-- Children -->\n @if (node.children && node.children.length > 0 && node.expanded) {\n <div class=\"animate-in slide-in-from-top-1 duration-200\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeTemplate;\n context: { $implicit: node.children, level: level + 1 }\n \"\n ></ng-container>\n </div>\n }\n </div>\n }\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TimelineEvent {\n id?: string | number;\n title?: string;\n description?: string;\n date?: string;\n icon?: TemplateRef<any>;\n content?: TemplateRef<any>;\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n}\n\nexport type TimelineLayout = 'vertical' | 'horizontal';\nexport type TimelineAlign = 'left' | 'right' | 'alternate';\n\nconst TIMELINE_COLORS: Record<string, { bg: string; border: string }> = {\n primary: { bg: 'bg-blue-600', border: 'border-blue-600' },\n secondary: { bg: 'bg-slate-600', border: 'border-slate-600' },\n success: { bg: 'bg-emerald-600', border: 'border-emerald-600' },\n warning: { bg: 'bg-amber-500', border: 'border-amber-500' },\n danger: { bg: 'bg-rose-600', border: 'border-rose-600' },\n info: { bg: 'bg-cyan-600', border: 'border-cyan-600' },\n};\n\n/**\n * Timeline component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-timeline [events]=\"timelineEvents\"></tw-timeline>\n * <tw-timeline [events]=\"events\" align=\"alternate\"></tw-timeline>\n * ```\n */\n@Component({\n selector: 'tw-timeline',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './timeline.component.html',\n})\nexport class TwTimelineComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Events to display */\n @Input() events: TimelineEvent[] = [];\n\n /** Layout direction */\n @Input() layout: TimelineLayout = 'vertical';\n\n /** Content alignment */\n @Input() align: TimelineAlign = 'left';\n\n /** Marker size */\n @Input() markerSize: 'sm' | 'md' | 'lg' = 'md';\n\n /** Track by function for ngFor */\n @Input() trackByFn: (event: TimelineEvent) => any = event => event.id ?? event;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n private readonly MARKER_SIZES = {\n sm: { dot: 'w-3 h-3', icon: 'w-8 h-8 text-sm' },\n md: { dot: 'w-4 h-4', icon: 'w-10 h-10 text-base' },\n lg: { dot: 'w-5 h-5', icon: 'w-12 h-12 text-lg' },\n };\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n this.layout === 'horizontal' ? 'flex' : 'flex flex-col',\n this.classOverride\n );\n });\n\n protected itemClasses(isFirst: boolean, isLast: boolean) {\n return this.twClass.merge(\n 'relative flex gap-4',\n this.layout === 'horizontal' ? 'flex-col flex-1' : '',\n this.align === 'right' ? 'flex-row-reverse' : '',\n isLast ? '' : 'pb-8'\n );\n }\n\n protected connectorClasses() {\n if (this.layout === 'horizontal') {\n return this.twClass.merge(\n 'absolute top-4 left-full w-full h-0.5 bg-slate-300',\n '-translate-x-1/2'\n );\n }\n\n // Line runs through the CENTER of the marker (not starting at the bottom)\n // This creates a continuous visual connection through all markers\n // The markers have z-10, so they appear ON TOP of the line\n\n // Position line at the vertical center of the marker\n // sm (w-3 = 12px): center at 6px\n // md (w-4 = 16px): center at 8px\n // lg (w-5 = 20px): center at 10px\n const topPosition = {\n sm: 'top-[6px]',\n md: 'top-[8px]',\n lg: 'top-[10px]',\n };\n\n // Calculate the left position to center the 2px line (w-0.5) with the marker dot\n // sm (w-3 = 12px): center at 6px, line at 6px - 1px = 5px\n // md (w-4 = 16px): center at 8px, line at 8px - 1px = 7px\n // lg (w-5 = 20px): center at 10px, line at 10px - 1px = 9px\n const leftPosition = {\n sm: 'left-[5px]',\n md: 'left-[7px]',\n lg: 'left-[9px]',\n };\n\n const rightPosition = {\n sm: 'right-[5px]',\n md: 'right-[7px]',\n lg: 'right-[9px]',\n };\n\n return this.twClass.merge(\n 'absolute w-0.5 bg-slate-300 bottom-0',\n topPosition[this.markerSize],\n this.align === 'right' ? rightPosition[this.markerSize] : leftPosition[this.markerSize]\n );\n }\n\n protected markerContainerClasses() {\n return 'relative z-10 flex-shrink-0';\n }\n\n protected dotMarkerClasses(event: TimelineEvent) {\n const size = this.MARKER_SIZES[this.markerSize].dot;\n const color = event.color || 'primary';\n const colorClasses = TIMELINE_COLORS[color];\n\n return this.twClass.merge('rounded-full ring-4 ring-white', size, colorClasses.bg);\n }\n\n protected iconMarkerClasses(event: TimelineEvent) {\n const size = this.MARKER_SIZES[this.markerSize].icon;\n const color = event.color || 'primary';\n const colorClasses = TIMELINE_COLORS[color];\n\n return this.twClass.merge(\n 'rounded-full flex items-center justify-center text-white ring-4 ring-white',\n size,\n colorClasses.bg\n );\n }\n\n protected contentClasses() {\n return this.twClass.merge('flex-1 min-w-0', this.align === 'right' ? 'text-right' : '');\n }\n\n protected dateClasses() {\n return 'text-xs text-slate-500 font-medium uppercase tracking-wide';\n }\n\n protected titleClasses() {\n return 'text-base font-semibold text-slate-900 mt-1';\n }\n\n protected descriptionClasses() {\n return 'text-sm text-slate-600 mt-1';\n }\n}\n","<div [class]=\"containerClasses()\">\n @for (\n event of events;\n track trackByFn(event);\n let first = $first;\n let last = $last;\n let i = $index\n ) {\n <div [class]=\"itemClasses(first, last)\">\n <!-- Connector line -->\n @if (!last) {\n <div [class]=\"connectorClasses()\"></div>\n }\n\n <!-- Marker -->\n <div [class]=\"markerContainerClasses()\">\n @if (event.icon) {\n <div [class]=\"iconMarkerClasses(event)\">\n <ng-container *ngTemplateOutlet=\"event.icon\"></ng-container>\n </div>\n } @else {\n <div [class]=\"dotMarkerClasses(event)\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"contentClasses()\">\n @if (event.date) {\n <time [class]=\"dateClasses()\">{{ event.date }}</time>\n }\n @if (event.title) {\n <h4 [class]=\"titleClasses()\">{{ event.title }}</h4>\n }\n @if (event.description) {\n <p [class]=\"descriptionClasses()\">{{ event.description }}</p>\n }\n @if (event.content) {\n <ng-container *ngTemplateOutlet=\"event.content\"></ng-container>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n icon?: string;\n}\n\nexport type BreadcrumbSeparator = 'slash' | 'chevron' | 'arrow' | 'dot';\n\n@Component({\n selector: 'tw-breadcrumb',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './breadcrumb.component.html',\n})\nexport class TwBreadcrumbComponent {\n @Input() set items(value: BreadcrumbItem[]) {\n this._items.set(value);\n }\n @Input() set separator(value: BreadcrumbSeparator) {\n this._separator.set(value);\n }\n @Input() set size(value: 'sm' | 'md' | 'lg') {\n this._size.set(value);\n }\n\n protected _items = signal<BreadcrumbItem[]>([]);\n protected _separator = signal<BreadcrumbSeparator>('chevron');\n protected _size = signal<'sm' | 'md' | 'lg'>('md');\n\n protected itemsValue = computed(() => this._items());\n protected separatorValue = computed(() => this._separator());\n\n protected navClasses = computed(() => {\n const size = this._size();\n\n const sizeClasses: Record<string, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n return sizeClasses[size];\n });\n\n protected separatorClasses = computed(() => 'mx-2 text-slate-400 dark:text-slate-500 flex items-center');\n\n protected linkClasses = computed(() => 'text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-300 transition-colors');\n\n protected currentClasses = computed(() => 'font-medium text-slate-900 dark:text-slate-100');\n}\n","<nav [class]=\"navClasses()\" aria-label=\"Breadcrumb\">\n <ol class=\"flex items-center flex-wrap gap-1\">\n @for (item of itemsValue(); track $index; let last = $last; let first = $first) {\n <li class=\"flex items-center\">\n @if (!first) {\n <span [class]=\"separatorClasses()\">\n @switch (separatorValue()) {\n @case ('chevron') {\n <svg\n class=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n }\n @case ('arrow') {\n <svg\n class=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M14 5l7 7m0 0l-7 7m7-7H3\"\n />\n </svg>\n }\n @case ('dot') {\n <span class=\"w-1 h-1 rounded-full bg-current\"></span>\n }\n @default {\n <span>/</span>\n }\n }\n </span>\n }\n @if (last) {\n <span [class]=\"currentClasses()\" aria-current=\"page\">\n {{ item.label }}\n </span>\n } @else if (item.href) {\n <a [href]=\"item.href\" [class]=\"linkClasses()\">\n {{ item.label }}\n </a>\n } @else {\n <span [class]=\"linkClasses()\">{{ item.label }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n","import { Component, computed, EventEmitter, Input, Output, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type PaginationSize = 'sm' | 'md' | 'lg';\nexport type PaginationVariant = 'default' | 'outlined' | 'simple';\n\n@Component({\n selector: 'tw-pagination',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './pagination.component.html',\n})\nexport class TwPaginationComponent {\n @Input() set currentPage(value: number) {\n this._currentPage.set(value);\n }\n @Input() set totalPages(value: number) {\n this._totalPages.set(value);\n }\n @Input() set totalItems(value: number) {\n this._totalItems.set(value);\n }\n @Input() set itemsPerPage(value: number) {\n this._itemsPerPage.set(value);\n }\n @Input() set siblingCount(value: number) {\n this._siblingCount.set(value);\n }\n @Input() set size(value: PaginationSize) {\n this._size.set(value);\n }\n @Input() set variant(value: PaginationVariant) {\n this._variant.set(value);\n }\n @Input() set showFirstLast(value: boolean) {\n this._showFirstLast.set(value);\n }\n\n @Output() pageChange = new EventEmitter<number>();\n\n protected _currentPage = signal(1);\n protected _totalPages = signal(1);\n protected _totalItems = signal(0);\n protected _itemsPerPage = signal(10);\n protected _siblingCount = signal(1);\n protected _size = signal<PaginationSize>('md');\n protected _variant = signal<PaginationVariant>('default');\n protected _showFirstLast = signal(false);\n\n protected currentPageValue = computed(() => this._currentPage());\n protected variantValue = computed(() => this._variant());\n\n protected totalPagesValue = computed(() => {\n const totalPages = this._totalPages();\n const totalItems = this._totalItems();\n const itemsPerPage = this._itemsPerPage();\n\n if (totalPages > 0) return totalPages;\n if (totalItems > 0) return Math.ceil(totalItems / itemsPerPage);\n return 1;\n });\n\n protected visiblePages = computed(() => {\n const current = this._currentPage();\n const total = this.totalPagesValue();\n const siblings = this._siblingCount();\n\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalNumbers = siblings * 2 + 3; // siblings + first + last + current\n const totalBlocks = totalNumbers + 2; // + 2 for ellipsis\n\n if (total <= totalBlocks) {\n return range(1, total).map(String);\n }\n\n const leftSiblingIndex = Math.max(current - siblings, 1);\n const rightSiblingIndex = Math.min(current + siblings, total);\n\n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < total - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange.map(String), '...', String(total)];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(total - (3 + siblings * 2) + 1, total);\n return ['1', '...', ...rightRange.map(String)];\n }\n\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return ['1', '...', ...middleRange.map(String), '...', String(total)];\n });\n\n protected goToPage(page: number): void {\n if (page >= 1 && page <= this.totalPagesValue() && page !== this._currentPage()) {\n this.pageChange.emit(page);\n }\n }\n\n protected navButtonClasses(disabled: boolean): string {\n const size = this._size();\n const variant = this._variant();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'p-1',\n md: 'p-2',\n lg: 'p-2.5',\n };\n\n const baseClasses = [\n 'flex items-center justify-center rounded-lg transition-colors',\n sizeClasses[size],\n ];\n\n if (disabled) {\n baseClasses.push('text-slate-300 dark:text-slate-600 cursor-not-allowed');\n } else if (variant === 'outlined') {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800 border border-slate-300 dark:border-slate-600');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n\n protected pageButtonClasses(isActive: boolean): string {\n const size = this._size();\n const variant = this._variant();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'w-7 h-7 text-xs',\n md: 'w-9 h-9 text-sm',\n lg: 'w-11 h-11 text-base',\n };\n\n const baseClasses = [\n 'flex items-center justify-center rounded-lg font-medium transition-colors',\n sizeClasses[size],\n ];\n\n if (isActive) {\n baseClasses.push('bg-blue-600 text-white');\n } else if (variant === 'outlined') {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800 border border-slate-300 dark:border-slate-600');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n\n protected ellipsisClasses(): string {\n const size = this._size();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'w-7 h-7 text-xs',\n md: 'w-9 h-9 text-sm',\n lg: 'w-11 h-11 text-base',\n };\n\n return `flex items-center justify-center text-slate-400 dark:text-slate-500 ${sizeClasses[size]}`;\n }\n\n protected simpleButtonClasses(disabled: boolean): string {\n const baseClasses = [\n 'flex items-center px-4 py-2 text-sm font-medium rounded-lg transition-colors',\n ];\n\n if (disabled) {\n baseClasses.push('text-slate-300 dark:text-slate-600 cursor-not-allowed');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n}\n","@switch (variantValue()) {\n @case ('simple') {\n <div class=\"flex items-center justify-between\">\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() <= 1\"\n [class]=\"simpleButtonClasses(currentPageValue() <= 1)\"\n (click)=\"goToPage(currentPageValue() - 1)\"\n >\n <svg\n class=\"w-5 h-5 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n Previous\n </button>\n <span class=\"text-sm text-slate-600\">\n Page {{ currentPageValue() }} of {{ totalPagesValue() }}\n </span>\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() >= totalPagesValue()\"\n [class]=\"simpleButtonClasses(currentPageValue() >= totalPagesValue())\"\n (click)=\"goToPage(currentPageValue() + 1)\"\n >\n Next\n <svg\n class=\"w-5 h-5 ml-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n }\n @default {\n <nav class=\"flex items-center gap-1\" aria-label=\"Pagination\">\n <!-- Previous -->\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() <= 1\"\n [class]=\"navButtonClasses(currentPageValue() <= 1)\"\n (click)=\"goToPage(currentPageValue() - 1)\"\n aria-label=\"Previous page\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <!-- Page numbers -->\n @for (page of visiblePages(); track page) {\n @if (page === '...') {\n <span [class]=\"ellipsisClasses()\">...</span>\n } @else {\n <button\n type=\"button\"\n [class]=\"pageButtonClasses(+page === currentPageValue())\"\n [attr.aria-current]=\"+page === currentPageValue() ? 'page' : null\"\n (click)=\"goToPage(+page)\"\n >\n {{ page }}\n </button>\n }\n }\n\n <!-- Next -->\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() >= totalPagesValue()\"\n [class]=\"navButtonClasses(currentPageValue() >= totalPagesValue())\"\n (click)=\"goToPage(currentPageValue() + 1)\"\n aria-label=\"Next page\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </nav>\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface StepItem {\n id?: string | number;\n label: string;\n description?: string;\n icon?: TemplateRef<any>;\n disabled?: boolean;\n}\n\nexport type StepsOrientation = 'horizontal' | 'vertical';\nexport type StepsSize = 'sm' | 'md' | 'lg';\n\nconst STEPS_SIZES: Record<\n StepsSize,\n { indicator: string; indicatorSize: number; label: string; desc: string }\n> = {\n sm: { indicator: 'w-8 h-8 text-sm', indicatorSize: 32, label: 'text-sm', desc: 'text-xs' },\n md: { indicator: 'w-10 h-10 text-base', indicatorSize: 40, label: 'text-base', desc: 'text-sm' },\n lg: { indicator: 'w-12 h-12 text-lg', indicatorSize: 48, label: 'text-lg', desc: 'text-base' },\n};\n\n/**\n * Steps/Stepper component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-steps [steps]=\"steps\" [(activeIndex)]=\"currentStep\"></tw-steps>\n * <tw-steps [steps]=\"steps\" [activeIndex]=\"2\" [readonly]=\"true\"></tw-steps>\n * ```\n */\n@Component({\n selector: 'tw-steps',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './steps.component.html',\n})\nexport class TwStepsComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Step definitions */\n @Input() steps: StepItem[] = [];\n\n /** Current active step index */\n @Input({ transform: numberAttribute }) activeIndex = 0;\n\n /** Orientation */\n @Input() orientation: StepsOrientation = 'horizontal';\n\n /** Size variant */\n @Input() size: StepsSize = 'md';\n\n /** Whether to show labels */\n @Input({ transform: booleanAttribute }) showLabels = true;\n\n /** Whether steps are readonly (non-clickable) */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /** Whether to allow clicking future steps */\n @Input({ transform: booleanAttribute }) linear = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Active index change event */\n @Output() activeIndexChange = new EventEmitter<number>();\n\n /** Step click event */\n @Output() onStepClick$ = new EventEmitter<{ step: StepItem; index: number }>();\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('w-full', this.classOverride);\n });\n\n protected listClasses = computed(() => {\n return this.twClass.merge(\n this.orientation === 'horizontal' ? 'flex items-start' : 'flex flex-col'\n );\n });\n\n protected itemClasses(isLast: boolean) {\n if (this.orientation === 'horizontal') {\n // Use items-start so connector aligns at the top with the indicator\n return this.twClass.merge('relative flex items-start', isLast ? '' : 'flex-1');\n }\n return '';\n }\n\n protected connectorClasses(index: number) {\n const isComplete = index < this.activeIndex;\n return this.twClass.merge('flex-1 h-0.5 mx-2', isComplete ? 'bg-blue-600' : 'bg-slate-200 dark:bg-slate-700');\n }\n\n protected getHorizontalConnectorStyle(): Record<string, string> {\n const { indicatorSize } = STEPS_SIZES[this.size];\n // Position connector at vertical center of indicator\n return {\n marginTop: `${indicatorSize / 2 - 1}px`,\n };\n }\n\n protected verticalConnectorClasses(index: number) {\n const isComplete = index < this.activeIndex;\n const { indicatorSize } = STEPS_SIZES[this.size];\n\n return this.twClass.merge('w-0.5 h-8', isComplete ? 'bg-blue-600' : 'bg-slate-200 dark:bg-slate-700');\n }\n\n protected getVerticalConnectorStyle(): Record<string, string> {\n const { indicatorSize } = STEPS_SIZES[this.size];\n return {\n marginLeft: `${indicatorSize / 2 - 1}px`,\n };\n }\n\n protected stepContentClasses(index: number) {\n const step = this.steps[index];\n const isClickable =\n !this.readonly && !step.disabled && (!this.linear || index <= this.activeIndex);\n\n return this.twClass.merge(\n 'flex items-center gap-3',\n this.orientation === 'horizontal' ? 'flex-col' : '',\n isClickable ? 'cursor-pointer group' : ''\n );\n }\n\n protected indicatorClasses(index: number) {\n const status = this.getStepStatus(index);\n const sizeClasses = STEPS_SIZES[this.size].indicator;\n const step = this.steps[index];\n const isClickable =\n !this.readonly && !step.disabled && (!this.linear || index <= this.activeIndex);\n\n const statusClasses = {\n complete: 'bg-blue-600 text-white',\n current: 'bg-white dark:bg-slate-800 border-2 border-blue-600 text-blue-600 dark:text-blue-400',\n upcoming: 'bg-white dark:bg-slate-800 border-2 border-slate-300 dark:border-slate-600 text-slate-500 dark:text-slate-400',\n };\n\n return this.twClass.merge(\n 'flex-shrink-0 flex items-center justify-center rounded-full font-semibold transition-all',\n sizeClasses,\n statusClasses[status],\n isClickable ? 'group-hover:shadow-md' : '',\n step.disabled ? 'opacity-50' : ''\n );\n }\n\n protected labelContainerClasses() {\n return this.twClass.merge(this.orientation === 'horizontal' ? 'text-center mt-2' : '');\n }\n\n protected labelClasses(index: number) {\n const status = this.getStepStatus(index);\n const sizeClasses = STEPS_SIZES[this.size].label;\n\n return this.twClass.merge(\n 'font-medium block',\n sizeClasses,\n status === 'upcoming' ? 'text-slate-500' : 'text-slate-900'\n );\n }\n\n protected descriptionClasses() {\n const sizeClasses = STEPS_SIZES[this.size].desc;\n return this.twClass.merge('text-slate-500 block', sizeClasses);\n }\n\n getStepStatus(index: number): 'complete' | 'current' | 'upcoming' {\n if (index < this.activeIndex) return 'complete';\n if (index === this.activeIndex) return 'current';\n return 'upcoming';\n }\n\n onStepClick(index: number): void {\n const step = this.steps[index];\n\n if (this.readonly || step.disabled) return;\n if (this.linear && index > this.activeIndex) return;\n\n this.activeIndexChange.emit(index);\n this.onStepClick$.emit({ step, index });\n }\n\n /** Go to next step */\n next(): void {\n if (this.activeIndex < this.steps.length - 1) {\n const nextIndex = this.activeIndex + 1;\n this.activeIndexChange.emit(nextIndex);\n }\n }\n\n /** Go to previous step */\n prev(): void {\n if (this.activeIndex > 0) {\n const prevIndex = this.activeIndex - 1;\n this.activeIndexChange.emit(prevIndex);\n }\n }\n\n /** Go to specific step */\n goTo(index: number): void {\n if (index >= 0 && index < this.steps.length) {\n this.activeIndexChange.emit(index);\n }\n }\n}\n","<nav [class]=\"containerClasses()\" aria-label=\"Progress\">\n <ol [class]=\"listClasses()\">\n @for (step of steps; track step.id ?? $index; let i = $index; let last = $last) {\n <li [class]=\"itemClasses(last)\">\n <!-- Step content (indicator + label) -->\n <div [class]=\"stepContentClasses(i)\" (click)=\"onStepClick(i)\">\n <!-- Step indicator -->\n <div [class]=\"indicatorClasses(i)\">\n @if (getStepStatus(i) === 'complete') {\n <svg class=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M19.916 4.626a.75.75 0 01.208 1.04l-9 13.5a.75.75 0 01-1.154.114l-6-6a.75.75 0 011.06-1.06l5.353 5.353 8.493-12.739a.75.75 0 011.04-.208z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n } @else if (step.icon) {\n <ng-container *ngTemplateOutlet=\"step.icon\"></ng-container>\n } @else {\n <span>{{ i + 1 }}</span>\n }\n </div>\n\n <!-- Label (for horizontal, shown below indicator) -->\n @if (showLabels && orientation === 'horizontal') {\n <div [class]=\"labelContainerClasses()\">\n <span [class]=\"labelClasses(i)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"descriptionClasses()\">{{ step.description }}</span>\n }\n </div>\n }\n </div>\n\n <!-- Label (for vertical, shown next to indicator) -->\n @if (showLabels && orientation === 'vertical') {\n <div class=\"ml-3\">\n <span [class]=\"labelClasses(i)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"descriptionClasses()\">{{ step.description }}</span>\n }\n </div>\n }\n\n <!-- Horizontal connector (inline between steps) -->\n @if (!last && orientation === 'horizontal') {\n <div [class]=\"connectorClasses(i)\" [ngStyle]=\"getHorizontalConnectorStyle()\"></div>\n }\n </li>\n\n <!-- Vertical connector (between items) -->\n @if (!last && orientation === 'vertical') {\n <div [class]=\"verticalConnectorClasses(i)\" [ngStyle]=\"getVerticalConnectorStyle()\"></div>\n }\n }\n </ol>\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface MenuItem {\n id?: string | number;\n label?: string;\n icon?: TemplateRef<any>;\n command?: (event: { item: MenuItem }) => void;\n url?: string;\n routerLink?: string | any[];\n disabled?: boolean;\n visible?: boolean;\n separator?: boolean;\n items?: MenuItem[];\n shortcut?: string;\n badge?: string;\n styleClass?: string;\n}\n\nexport type MenuVariant = 'default' | 'bordered' | 'elevated';\n\n/**\n * Menu component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-menu [items]=\"menuItems\" (onSelect)=\"handleSelect($event)\"></tw-menu>\n * ```\n */\n@Component({\n selector: 'tw-menu',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './menu.component.html',\n})\nexport class TwMenuComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Menu items */\n @Input() items: MenuItem[] = [];\n\n /** Visual variant */\n @Input() variant: MenuVariant = 'default';\n\n /** Whether menu is popup style */\n @Input({ transform: booleanAttribute }) popup = false;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Item select event */\n @Output() onSelect = new EventEmitter<MenuItem>();\n\n protected openSubmenu = signal<MenuItem | null>(null);\n\n protected containerClasses = computed(() => {\n const variantClasses = {\n default: 'bg-white dark:bg-slate-800',\n bordered: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 rounded-lg',\n elevated: 'bg-white dark:bg-slate-800 rounded-lg shadow-lg dark:shadow-slate-900/50 border border-slate-100 dark:border-slate-700',\n };\n\n return this.twClass.merge('py-1 min-w-48', variantClasses[this.variant], this.classOverride);\n });\n\n protected itemClasses(item: MenuItem) {\n return this.twClass.merge(\n 'w-full flex items-center gap-3 px-4 py-2 text-sm text-left transition-colors',\n 'focus:outline-none focus:bg-slate-50 dark:focus:bg-slate-700',\n item.disabled\n ? 'text-slate-400 dark:text-slate-500 cursor-not-allowed'\n : 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-700 hover:text-slate-900 dark:hover:text-slate-100 cursor-pointer',\n item.styleClass || ''\n );\n }\n\n protected separatorClasses() {\n return 'my-1 border-t border-slate-200 dark:border-slate-700';\n }\n\n protected submenuClasses() {\n return this.twClass.merge(\n 'absolute left-full top-0 ml-1 py-1 min-w-48 bg-white dark:bg-slate-800 rounded-lg shadow-lg dark:shadow-slate-900/50 border border-slate-100 dark:border-slate-700',\n 'animate-in fade-in-0 zoom-in-95 duration-100'\n );\n }\n\n protected badgeClasses() {\n return 'ml-auto px-2 py-0.5 text-xs font-medium rounded-full bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300';\n }\n\n onSubmenuEnter(item: MenuItem): void {\n this.openSubmenu.set(item);\n }\n\n onSubmenuLeave(): void {\n this.openSubmenu.set(null);\n }\n\n onItemClick(item: MenuItem): void {\n if (item.disabled) return;\n\n if (item.command) {\n item.command({ item });\n }\n\n this.onSelect.emit(item);\n }\n}\n\n/**\n * Context menu component\n */\n@Component({\n selector: 'tw-context-menu',\n standalone: true,\n imports: [CommonModule, TwMenuComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n class=\"fixed z-50\"\n [style.left.px]=\"x()\"\n [style.top.px]=\"y()\"\n (click)=\"$event.stopPropagation()\"\n >\n <tw-menu [items]=\"items\" variant=\"elevated\" (onSelect)=\"onItemSelect($event)\"></tw-menu>\n </div>\n }\n `,\n host: {\n '(document:click)': 'hide()',\n '(document:contextmenu)': 'hide()',\n },\n})\nexport class TwContextMenuComponent {\n @Input() items: MenuItem[] = [];\n @Output() onSelect = new EventEmitter<MenuItem>();\n @Output() onHide = new EventEmitter<void>();\n\n protected visible = signal(false);\n protected x = signal(0);\n protected y = signal(0);\n\n show(event: MouseEvent): void {\n event.preventDefault();\n this.x.set(event.clientX);\n this.y.set(event.clientY);\n this.visible.set(true);\n }\n\n hide(): void {\n if (this.visible()) {\n this.visible.set(false);\n this.onHide.emit();\n }\n }\n\n onItemSelect(item: MenuItem): void {\n this.onSelect.emit(item);\n this.hide();\n }\n}\n","<div [class]=\"containerClasses()\" role=\"menu\">\n @for (item of items; track item.id ?? $index) {\n @if (item.separator) {\n <div [class]=\"separatorClasses()\"></div>\n } @else if (item.items && item.items.length > 0) {\n <!-- Submenu -->\n <div class=\"relative\" (mouseenter)=\"onSubmenuEnter(item)\" (mouseleave)=\"onSubmenuLeave()\">\n <button\n type=\"button\"\n [class]=\"itemClasses(item)\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"openSubmenu() === item\"\n >\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"item.icon\"></ng-container>\n }\n <span class=\"flex-1\">{{ item.label }}</span>\n <svg class=\"w-4 h-4 text-slate-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n @if (openSubmenu() === item) {\n <div [class]=\"submenuClasses()\">\n @for (subItem of item.items; track subItem.id ?? $index) {\n @if (subItem.separator) {\n <div [class]=\"separatorClasses()\"></div>\n } @else {\n <button\n type=\"button\"\n [class]=\"itemClasses(subItem)\"\n [disabled]=\"subItem.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(subItem)\"\n >\n @if (subItem.icon) {\n <ng-container *ngTemplateOutlet=\"subItem.icon\"></ng-container>\n }\n <span>{{ subItem.label }}</span>\n @if (subItem.shortcut) {\n <span class=\"ml-auto text-xs text-slate-400\">{{ subItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n } @else {\n <!-- Regular item -->\n <button\n type=\"button\"\n [class]=\"itemClasses(item)\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(item)\"\n >\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"item.icon\"></ng-container>\n }\n <span>{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"ml-auto text-xs text-slate-400\">{{ item.shortcut }}</span>\n }\n @if (item.badge) {\n <span [class]=\"badgeClasses()\">{{ item.badge }}</span>\n }\n </button>\n }\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type AlertStyle = 'solid' | 'soft' | 'outlined' | 'accent';\n\nconst ALERT_BASE_CLASSES = `\n relative flex gap-3\n p-4 rounded-lg\n text-sm\n`;\n\nconst ALERT_SOLID_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-600 text-white',\n success: 'bg-emerald-600 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-rose-600 text-white',\n neutral: 'bg-slate-700 text-white',\n};\n\nconst ALERT_SOFT_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-50 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border border-blue-200 dark:border-blue-800',\n success: 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300 border border-emerald-200 dark:border-emerald-800',\n warning: 'bg-amber-50 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300 border border-amber-200 dark:border-amber-800',\n danger: 'bg-rose-50 dark:bg-rose-900/30 text-rose-800 dark:text-rose-300 border border-rose-200 dark:border-rose-800',\n neutral: 'bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-slate-300 border border-slate-200 dark:border-slate-700',\n};\n\nconst ALERT_OUTLINED_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-transparent text-blue-700 dark:text-blue-400 border-2 border-blue-500 dark:border-blue-600',\n success: 'bg-transparent text-emerald-700 dark:text-emerald-400 border-2 border-emerald-500 dark:border-emerald-600',\n warning: 'bg-transparent text-amber-700 dark:text-amber-400 border-2 border-amber-500 dark:border-amber-600',\n danger: 'bg-transparent text-rose-700 dark:text-rose-400 border-2 border-rose-500 dark:border-rose-600',\n neutral: 'bg-transparent text-slate-700 dark:text-slate-400 border-2 border-slate-400 dark:border-slate-600',\n};\n\nconst ALERT_ACCENT_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-50 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border-l-4 border-blue-500 rounded-l-none',\n success: 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300 border-l-4 border-emerald-500 rounded-l-none',\n warning: 'bg-amber-50 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300 border-l-4 border-amber-500 rounded-l-none',\n danger: 'bg-rose-50 dark:bg-rose-900/30 text-rose-800 dark:text-rose-300 border-l-4 border-rose-500 rounded-l-none',\n neutral: 'bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-slate-300 border-l-4 border-slate-500 rounded-l-none',\n};\n\nconst ICON_COLORS: Record<AlertVariant, Record<AlertStyle, string>> = {\n info: {\n solid: 'text-white',\n soft: 'text-blue-600',\n outlined: 'text-blue-600',\n accent: 'text-blue-600',\n },\n success: {\n solid: 'text-white',\n soft: 'text-emerald-600',\n outlined: 'text-emerald-600',\n accent: 'text-emerald-600',\n },\n warning: {\n solid: 'text-white',\n soft: 'text-amber-600',\n outlined: 'text-amber-600',\n accent: 'text-amber-600',\n },\n danger: {\n solid: 'text-white',\n soft: 'text-rose-600',\n outlined: 'text-rose-600',\n accent: 'text-rose-600',\n },\n neutral: {\n solid: 'text-white',\n soft: 'text-slate-600',\n outlined: 'text-slate-600',\n accent: 'text-slate-600',\n },\n};\n\n/**\n * Alert component for displaying important messages\n *\n * @example\n * ```html\n * <tw-alert variant=\"info\">\n * This is an informational message.\n * </tw-alert>\n *\n * <tw-alert variant=\"success\" alertStyle=\"soft\" [dismissible]=\"true\" (dismiss)=\"onDismiss()\">\n * <tw-alert-title>Success!</tw-alert-title>\n * Your changes have been saved successfully.\n * </tw-alert>\n *\n * <tw-alert variant=\"danger\" alertStyle=\"accent\" [icon]=\"customIcon\">\n * An error occurred while processing your request.\n * </tw-alert>\n * ```\n */\n@Component({\n selector: 'tw-alert',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './alert.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'alert',\n '[attr.aria-live]': 'ariaLive',\n },\n})\nexport class TwAlertComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Color variant */\n @Input() variant: AlertVariant = 'info';\n\n /** Style variant */\n @Input() alertStyle: AlertStyle = 'soft';\n\n /** Whether the alert can be dismissed */\n @Input({ transform: booleanAttribute }) dismissible = false;\n\n /** Whether to show the icon */\n @Input({ transform: booleanAttribute }) showIcon = true;\n\n /** Whether a custom icon is provided */\n @Input({ transform: booleanAttribute }) hasCustomIcon = false;\n\n /** ARIA live region setting */\n @Input() ariaLive: 'polite' | 'assertive' | 'off' = 'polite';\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Dismiss event */\n @Output() dismiss = new EventEmitter<void>();\n\n protected dismissed = signal(false);\n\n protected computedClasses = computed(() => {\n if (this.dismissed()) return 'hidden';\n\n const styleVariants: Record<AlertStyle, Record<AlertVariant, string>> = {\n solid: ALERT_SOLID_VARIANTS,\n soft: ALERT_SOFT_VARIANTS,\n outlined: ALERT_OUTLINED_VARIANTS,\n accent: ALERT_ACCENT_VARIANTS,\n };\n\n return this.twClass.merge(\n ALERT_BASE_CLASSES,\n styleVariants[this.alertStyle][this.variant],\n this.classOverride\n );\n });\n\n protected iconClasses = computed(() => {\n return this.twClass.merge('flex-shrink-0', ICON_COLORS[this.variant][this.alertStyle]);\n });\n\n protected dismissButtonClasses = computed(() => {\n const baseClasses =\n 'inline-flex items-center justify-center rounded-md p-1 -m-1 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2';\n\n const hoverClasses: Record<AlertStyle, string> = {\n solid: 'hover:bg-white/20 focus-visible:ring-white',\n soft: 'hover:bg-black/5 focus-visible:ring-current',\n outlined: 'hover:bg-black/5 focus-visible:ring-current',\n accent: 'hover:bg-black/5 focus-visible:ring-current',\n };\n\n return this.twClass.merge(baseClasses, hoverClasses[this.alertStyle]);\n });\n\n protected onDismiss(): void {\n this.dismissed.set(true);\n this.dismiss.emit();\n }\n\n /** Programmatically dismiss the alert */\n dismissAlert(): void {\n this.onDismiss();\n }\n\n /** Programmatically show the alert again */\n show(): void {\n this.dismissed.set(false);\n }\n}\n\n/**\n * Alert title component\n */\n@Component({\n selector: 'tw-alert-title',\n standalone: true,\n host: {\n class: 'block font-semibold mb-1',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwAlertTitleComponent {}\n\n/**\n * Alert description component\n */\n@Component({\n selector: 'tw-alert-description',\n standalone: true,\n host: {\n class: 'block text-sm opacity-90',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwAlertDescriptionComponent {}\n","@if (!dismissed()) {\n <!-- Icon -->\n @if (showIcon) {\n <div [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content select=\"[twAlertIcon]\"></ng-content>\n @if (!hasCustomIcon) {\n @switch (variant) {\n @case ('info') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @case ('success') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @case ('warning') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n 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\"\n />\n </svg>\n }\n @case ('danger') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @default {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n }\n }\n </div>\n }\n\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n <ng-content></ng-content>\n </div>\n\n <!-- Actions -->\n <div class=\"flex items-start gap-2 ml-auto\">\n <ng-content select=\"[twAlertAction]\"></ng-content>\n\n @if (dismissible) {\n <button\n type=\"button\"\n [class]=\"dismissButtonClasses()\"\n (click)=\"onDismiss()\"\n aria-label=\"Dismiss\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n}\n","export * from './alert.component';\n\nimport {\n TwAlertComponent,\n TwAlertDescriptionComponent,\n TwAlertTitleComponent,\n} from './alert.component';\n\nexport const TW_ALERT_COMPONENTS = [\n TwAlertComponent,\n TwAlertTitleComponent,\n TwAlertDescriptionComponent,\n] as const;\n","import { Component, computed, Injectable, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastOptions {\n variant?: ToastVariant;\n title?: string;\n message: string;\n duration?: number;\n dismissible?: boolean;\n action?: { label: string; onClick: () => void };\n}\n\ninterface Toast extends ToastOptions {\n id: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TwToastService {\n private readonly _toasts = signal<Toast[]>([]);\n private readonly _position = signal<ToastPosition>('top-right');\n\n readonly toasts = this._toasts.asReadonly();\n readonly position = this._position.asReadonly();\n\n setPosition(position: ToastPosition): void {\n this._position.set(position);\n }\n\n show(options: ToastOptions): string {\n const id = Math.random().toString(36).slice(2, 9);\n const toast: Toast = {\n id,\n variant: options.variant || 'info',\n title: options.title,\n message: options.message,\n duration: options.duration ?? 5000,\n dismissible: options.dismissible ?? true,\n action: options.action,\n };\n\n this._toasts.update(toasts => [...toasts, toast]);\n\n if (toast.duration && toast.duration > 0) {\n setTimeout(() => {\n this.dismiss(id);\n }, toast.duration);\n }\n\n return id;\n }\n\n success(message: string, title?: string): string {\n return this.show({ variant: 'success', message, title });\n }\n\n error(message: string, title?: string): string {\n return this.show({ variant: 'danger', message, title });\n }\n\n warning(message: string, title?: string): string {\n return this.show({ variant: 'warning', message, title });\n }\n\n info(message: string, title?: string): string {\n return this.show({ variant: 'info', message, title });\n }\n\n dismiss(id: string): void {\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n dismissAll(): void {\n this._toasts.set([]);\n }\n}\n\n@Component({\n selector: 'tw-toast',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './toast.component.html',\n})\nexport class TwToastComponent {\n @Input() set variant(value: ToastVariant) {\n this._variant.set(value);\n }\n @Input() set title(value: string) {\n this._title.set(value);\n }\n @Input() set message(value: string) {\n this._message.set(value);\n }\n @Input() set dismissible(value: boolean) {\n this._dismissible.set(value);\n }\n @Input() set action(value: { label: string; onClick: () => void } | undefined) {\n this._action.set(value);\n }\n @Input() dismiss: () => void = () => {};\n\n protected _variant = signal<ToastVariant>('info');\n protected _title = signal('');\n protected _message = signal('');\n protected _dismissible = signal(true);\n protected _action = signal<{ label: string; onClick: () => void } | undefined>(undefined);\n\n protected variantValue = computed(() => this._variant());\n protected titleValue = computed(() => this._title());\n protected messageValue = computed(() => this._message());\n protected dismissibleValue = computed(() => this._dismissible());\n protected actionValue = computed(() => this._action());\n\n protected toastClasses = computed(() => {\n return [\n 'w-full max-w-sm bg-white dark:bg-slate-800 rounded-xl shadow-lg dark:shadow-slate-900/50 border border-slate-200 dark:border-slate-700 p-4',\n 'animate-[toast-in_0.3s_ease-out]',\n ].join(' ');\n });\n\n protected iconClasses = computed(() => {\n const variant = this._variant();\n\n const variantClasses: Record<ToastVariant, string> = {\n info: 'text-blue-500',\n success: 'text-emerald-500',\n warning: 'text-amber-500',\n danger: 'text-rose-500',\n neutral: 'text-slate-500',\n };\n\n return ['flex-shrink-0', variantClasses[variant]].join(' ');\n });\n\n protected onDismiss(): void {\n this.dismiss();\n }\n}\n\n@Component({\n selector: 'tw-toast-container',\n standalone: true,\n imports: [CommonModule, TwToastComponent],\n templateUrl: './toast-container.component.html',\n styles: [\n `\n @keyframes toast-in {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class TwToastContainerComponent {\n private readonly toastService: TwToastService;\n protected toasts;\n protected position;\n\n constructor(toastService: TwToastService) {\n this.toastService = toastService;\n this.toasts = this.toastService.toasts;\n this.position = this.toastService.position;\n }\n\n protected containerClasses = computed(() => {\n const position = this.position();\n\n const positionClasses: Record<ToastPosition, string> = {\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n };\n\n return [\n 'fixed z-50 flex flex-col gap-3 max-h-screen overflow-hidden pointer-events-none',\n '[&>*]:pointer-events-auto',\n positionClasses[position],\n ].join(' ');\n });\n\n getDismissFunction(id: string): () => void {\n return () => {\n this.toastService.dismiss(id);\n };\n }\n}\n","<div [class]=\"toastClasses()\" role=\"alert\">\n <div class=\"flex items-start gap-3\">\n <!-- Icon -->\n <div [class]=\"iconClasses()\">\n @switch (variantValue()) {\n @case ('success') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n @case ('danger') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }\n @case ('warning') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n 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\"\n />\n </svg>\n }\n @default {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n }\n </div>\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n @if (titleValue()) {\n <p class=\"font-semibold text-slate-900\">{{ titleValue() }}</p>\n }\n <p [class]=\"titleValue() ? 'text-sm text-slate-600' : 'text-slate-700'\">\n {{ messageValue() }}\n </p>\n @if (actionValue()) {\n <button\n type=\"button\"\n class=\"mt-2 text-sm font-medium text-blue-600 hover:text-blue-700\"\n (click)=\"actionValue()!.onClick()\"\n >\n {{ actionValue()!.label }}\n </button>\n }\n </div>\n <!-- Dismiss -->\n @if (dismissibleValue()) {\n <button\n type=\"button\"\n class=\"flex-shrink-0 p-1 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 transition-colors\"\n (click)=\"onDismiss()\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n</div>\n","<div [class]=\"containerClasses()\">\n @for (toast of toasts(); track toast.id) {\n <tw-toast\n [variant]=\"toast.variant || 'info'\"\n [title]=\"toast.title || ''\"\n [message]=\"toast.message\"\n [dismissible]=\"toast.dismissible ?? true\"\n [action]=\"toast.action\"\n [dismiss]=\"getDismissFunction(toast.id)\"\n >\n </tw-toast>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type SpinnerVariant = 'border' | 'dots' | 'pulse' | 'bars';\nexport type SpinnerColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'neutral';\n\n@Component({\n selector: 'tw-spinner',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './spinner.component.html',\n styles: [\n `\n @keyframes bounce-dot {\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1);\n }\n }\n @keyframes stretch-bar {\n 0%,\n 40%,\n 100% {\n transform: scaleY(0.4);\n }\n 20% {\n transform: scaleY(1);\n }\n }\n .dot-bounce {\n animation: bounce-dot 1.4s infinite ease-in-out both;\n }\n .bar-stretch {\n animation: stretch-bar 1.2s infinite ease-in-out;\n }\n `,\n ],\n})\nexport class TwSpinnerComponent {\n @Input() set size(val: SpinnerSize) {\n this._size.set(val);\n }\n @Input() set variant(val: SpinnerVariant) {\n this._variant.set(val);\n }\n @Input() set color(val: SpinnerColor | string) {\n this._color.set(val);\n }\n\n protected _size = signal<SpinnerSize>('md');\n protected _variant = signal<SpinnerVariant>('border');\n protected _color = signal<SpinnerColor | string>('primary');\n\n protected variantVal = computed(() => this._variant());\n\n // Border color classes for border variant\n private readonly borderColors: Record<SpinnerColor, string> = {\n primary: 'border-blue-600',\n secondary: 'border-slate-600',\n success: 'border-emerald-600',\n warning: 'border-amber-500',\n danger: 'border-rose-600',\n info: 'border-cyan-600',\n neutral: 'border-slate-400',\n };\n\n // Background color classes for dots/pulse/bars variants\n private readonly bgColors: Record<SpinnerColor, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n neutral: 'bg-slate-400',\n };\n\n private getBorderColor(): string {\n const clr = this._color();\n if (clr in this.borderColors) {\n return this.borderColors[clr as SpinnerColor];\n }\n // If it's a custom Tailwind class, use it directly\n return clr.startsWith('border-') ? clr : `border-${clr}`;\n }\n\n private getBgColor(): string {\n const clr = this._color();\n if (clr in this.bgColors) {\n return this.bgColors[clr as SpinnerColor];\n }\n // If it's a custom Tailwind class, use it directly\n return clr.startsWith('bg-') ? clr : `bg-${clr}`;\n }\n\n protected borderClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-4 h-4 border-2',\n sm: 'w-5 h-5 border-2',\n md: 'w-6 h-6 border-2',\n lg: 'w-8 h-8 border-[3px]',\n xl: 'w-10 h-10 border-4',\n };\n\n return [\n 'inline-block rounded-full border-t-transparent animate-spin',\n sizeClasses[sz],\n this.getBorderColor(),\n ].join(' ');\n });\n\n protected dotsContainerClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-1.5',\n lg: 'gap-2',\n xl: 'gap-2.5',\n };\n\n return ['inline-flex items-center', sizeClasses[sz]].join(' ');\n });\n\n protected dotClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-1 h-1',\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n xl: 'w-3 h-3',\n };\n\n return ['rounded-full dot-bounce', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n\n protected pulseClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n };\n\n return ['rounded-full animate-pulse', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n\n protected barsContainerClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'gap-0.5 h-4',\n sm: 'gap-0.5 h-5',\n md: 'gap-1 h-6',\n lg: 'gap-1 h-8',\n xl: 'gap-1.5 h-10',\n };\n\n return ['inline-flex items-center', sizeClasses[sz]].join(' ');\n });\n\n protected barClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-0.5',\n sm: 'w-1',\n md: 'w-1',\n lg: 'w-1.5',\n xl: 'w-2',\n };\n\n return ['h-full rounded-full bar-stretch', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n}\n\n@Component({\n selector: 'tw-loading-overlay',\n standalone: true,\n imports: [CommonModule, TwSpinnerComponent],\n templateUrl: './loading-overlay.component.html',\n})\nexport class TwLoadingOverlayComponent {\n @Input() set size(val: SpinnerSize) {\n this._size.set(val);\n }\n @Input() set variant(val: SpinnerVariant) {\n this._variant.set(val);\n }\n @Input() set color(val: SpinnerColor | string) {\n this._color.set(val);\n }\n @Input() set message(val: string) {\n this._message.set(val);\n }\n @Input() set overlay(val: 'full' | 'inline') {\n this._overlay.set(val);\n }\n\n protected _size = signal<SpinnerSize>('lg');\n protected _variant = signal<SpinnerVariant>('border');\n protected _color = signal<SpinnerColor | string>('primary');\n protected _message = signal('');\n protected _overlay = signal<'full' | 'inline'>('inline');\n\n protected sizeVal = computed(() => this._size());\n protected variantVal = computed(() => this._variant());\n protected colorVal = computed(() => this._color());\n protected messageVal = computed(() => this._message());\n\n protected overlayClasses = computed(() => {\n const ovl = this._overlay();\n\n const overlayStyles: Record<string, string> = {\n full: 'fixed inset-0 z-50 bg-white/80 dark:bg-slate-900/80 backdrop-blur-sm',\n inline: 'absolute inset-0 bg-white/80 dark:bg-slate-900/80 backdrop-blur-sm rounded-inherit',\n };\n\n return ['flex items-center justify-center', overlayStyles[ovl]].join(' ');\n });\n\n protected messageClasses = computed(() => 'text-sm font-medium text-slate-600 dark:text-slate-400');\n}\n","@switch (variantVal()) {\n @case ('border') {\n <div [class]=\"borderClasses()\" role=\"status\" aria-label=\"Loading\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('dots') {\n <div [class]=\"dotsContainerClasses()\" role=\"status\" aria-label=\"Loading\">\n <div [class]=\"dotClasses()\" style=\"animation-delay: 0ms\"></div>\n <div [class]=\"dotClasses()\" style=\"animation-delay: 150ms\"></div>\n <div [class]=\"dotClasses()\" style=\"animation-delay: 300ms\"></div>\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('pulse') {\n <div [class]=\"pulseClasses()\" role=\"status\" aria-label=\"Loading\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('bars') {\n <div [class]=\"barsContainerClasses()\" role=\"status\" aria-label=\"Loading\">\n <div [class]=\"barClasses()\" style=\"animation-delay: 0ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 100ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 200ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 300ms\"></div>\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n}\n","<div [class]=\"overlayClasses()\">\n <div class=\"flex flex-col items-center gap-3\">\n <tw-spinner [size]=\"sizeVal()\" [variant]=\"variantVal()\" [color]=\"colorVal()\"></tw-spinner>\n @if (messageVal()) {\n <p [class]=\"messageClasses()\">{{ messageVal() }}</p>\n }\n </div>\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ProgressSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type ProgressVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\n@Component({\n selector: 'tw-progress',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './progress.component.html',\n styles: [\n `\n @keyframes progress-stripes {\n 0% {\n background-position: 1rem 0;\n }\n 100% {\n background-position: 0 0;\n }\n }\n @keyframes progress-indeterminate {\n 0% {\n width: 30%;\n margin-left: -30%;\n }\n 100% {\n width: 30%;\n margin-left: 100%;\n }\n }\n .progress-stripes-animated {\n animation: progress-stripes 1s linear infinite;\n }\n .progress-indeterminate-animated {\n animation: progress-indeterminate 1.5s ease-in-out infinite;\n }\n `,\n ],\n})\nexport class TwProgressComponent {\n @Input() set value(val: number) {\n this._value.set(val);\n }\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set size(val: ProgressSize) {\n this._size.set(val);\n }\n @Input() set variant(val: ProgressVariant) {\n this._variant.set(val);\n }\n @Input() set label(val: string) {\n this._label.set(val);\n }\n @Input() set showValue(val: boolean) {\n this._showValue.set(val);\n }\n @Input() set labelPosition(val: 'top' | 'bottom' | 'inside') {\n this._labelPosition.set(val);\n }\n @Input() set striped(val: boolean) {\n this._striped.set(val);\n }\n @Input() set animated(val: boolean) {\n this._animated.set(val);\n }\n @Input() set indeterminate(val: boolean) {\n this._indeterminate.set(val);\n }\n\n protected _value = signal(0);\n protected _max = signal(100);\n protected _size = signal<ProgressSize>('md');\n protected _variant = signal<ProgressVariant>('primary');\n protected _label = signal('');\n protected _showValue = signal(false);\n protected _labelPosition = signal<'top' | 'bottom' | 'inside'>('top');\n protected _striped = signal(false);\n protected _animated = signal(false);\n protected _indeterminate = signal(false);\n\n protected valueNum = computed(() => this._value());\n protected maxNum = computed(() => this._max());\n protected labelText = computed(() => this._label());\n protected showValueFlag = computed(() => this._showValue());\n protected labelPositionVal = computed(() => this._labelPosition());\n\n protected percentage = computed(() => {\n const val = this._value();\n const maxVal = this._max();\n return Math.min(Math.max(Math.round((val / maxVal) * 100), 0), 100);\n });\n\n protected containerClasses = computed(() => 'w-full');\n\n protected trackClasses = computed(() => {\n const size = this._size();\n\n const sizeClasses: Record<ProgressSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n };\n\n return ['w-full overflow-hidden rounded-full bg-slate-200 dark:bg-slate-700', sizeClasses[size]].join(' ');\n });\n\n protected barClasses = computed(() => {\n const size = this._size();\n const variant = this._variant();\n const striped = this._striped();\n const animated = this._animated();\n const indeterminate = this._indeterminate();\n const labelPosition = this._labelPosition();\n\n const variantClasses: Record<ProgressVariant, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n };\n\n const sizeClasses: Record<ProgressSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n };\n\n const classes = [\n 'rounded-full transition-all duration-300 ease-out',\n sizeClasses[size],\n variantClasses[variant],\n ];\n\n if (labelPosition === 'inside') {\n classes.push('flex items-center justify-center');\n }\n\n if (striped) {\n classes.push(\n 'bg-[length:1rem_1rem] bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]'\n );\n }\n\n if (animated && striped) {\n classes.push('progress-stripes-animated');\n }\n\n if (indeterminate) {\n classes.push('progress-indeterminate-animated');\n }\n\n return classes.join(' ');\n });\n}\n\n@Component({\n selector: 'tw-progress-circular',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './progress-circular.component.html',\n styles: [\n `\n :host {\n display: inline-block;\n }\n @keyframes circular-rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n @keyframes circular-dash {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -124;\n }\n }\n .circular-rotate {\n animation: circular-rotate 2s linear infinite;\n }\n .circular-dash {\n animation: circular-dash 1.5s ease-in-out infinite;\n }\n `,\n ],\n})\nexport class TwProgressCircularComponent {\n @Input() set value(val: number) {\n this._value.set(val);\n }\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set size(val: number) {\n this._size.set(val);\n }\n @Input() set variant(val: ProgressVariant) {\n this._variant.set(val);\n }\n @Input() set showValue(val: boolean) {\n this._showValue.set(val);\n }\n @Input() set indeterminate(val: boolean) {\n this._indeterminate.set(val);\n }\n @Input() set thickness(val: number) {\n this._thickness.set(val);\n }\n\n protected _value = signal(0);\n protected _max = signal(100);\n protected _size = signal(48);\n protected _variant = signal<ProgressVariant>('primary');\n protected _showValue = signal(false);\n protected _indeterminate = signal(false);\n protected _thickness = signal(4);\n\n protected sizeValue = computed(() => this._size());\n protected valueNum = computed(() => this._value());\n protected maxNum = computed(() => this._max());\n protected showValueFlag = computed(() => this._showValue());\n protected indeterminateFlag = computed(() => this._indeterminate());\n protected strokeWidth = computed(() => this._thickness());\n\n // Circle with radius 15.9155 has circumference of ~100\n private readonly CIRCUMFERENCE = 100;\n\n protected percentage = computed(() => {\n const val = this._value();\n const maxVal = this._max();\n return Math.min(Math.max((val / maxVal) * 100, 0), 100);\n });\n\n protected dashOffset = computed(() => {\n const pct = this.percentage();\n return this.CIRCUMFERENCE - (pct / 100) * this.CIRCUMFERENCE;\n });\n\n protected strokeColor = computed(() => {\n const variant = this._variant();\n\n const colors: Record<ProgressVariant, string> = {\n primary: '#2563eb',\n secondary: '#475569',\n success: '#059669',\n warning: '#f59e0b',\n danger: '#e11d48',\n info: '#0891b2',\n };\n\n return colors[variant];\n });\n\n protected valueClasses = computed(() => {\n const sz = this._size();\n const fontSize =\n sz < 40 ? 'text-[10px]' : sz < 56 ? 'text-xs' : sz < 72 ? 'text-sm' : 'text-base';\n return `absolute inset-0 flex items-center justify-center font-semibold text-slate-700 dark:text-slate-300 ${fontSize}`;\n });\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"valueNum()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"maxNum()\"\n>\n @if ((labelText() || showValueFlag()) && labelPositionVal() === 'top') {\n <div class=\"flex justify-between items-center mb-1\">\n <span class=\"text-sm font-medium text-slate-700\">{{ labelText() }}</span>\n @if (showValueFlag()) {\n <span class=\"text-sm text-slate-500\">{{ percentage() }}%</span>\n }\n </div>\n }\n <div [class]=\"trackClasses()\">\n <div [class]=\"barClasses()\" [style.width.%]=\"percentage()\">\n @if (showValueFlag() && labelPositionVal() === 'inside' && percentage() > 10) {\n <span class=\"text-xs font-medium text-white\">{{ percentage() }}%</span>\n }\n </div>\n </div>\n @if ((labelText() || showValueFlag()) && labelPositionVal() === 'bottom') {\n <div class=\"flex justify-between items-center mt-1\">\n <span class=\"text-sm font-medium text-slate-700\">{{ labelText() }}</span>\n @if (showValueFlag()) {\n <span class=\"text-sm text-slate-500\">{{ percentage() }}%</span>\n }\n </div>\n }\n</div>\n","<div\n class=\"relative inline-flex items-center justify-center\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminateFlag() ? undefined : valueNum()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"maxNum()\"\n>\n <svg\n class=\"-rotate-90\"\n [class.circular-rotate]=\"indeterminateFlag()\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n viewBox=\"0 0 36 36\"\n >\n <!-- Background circle -->\n <circle\n class=\"text-slate-200\"\n stroke=\"currentColor\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n cx=\"18\"\n cy=\"18\"\n r=\"15.9155\"\n />\n <!-- Progress circle -->\n <circle\n [class.circular-dash]=\"indeterminateFlag()\"\n [attr.stroke]=\"strokeColor()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n cx=\"18\"\n cy=\"18\"\n r=\"15.9155\"\n stroke-dasharray=\"100 100\"\n [style.stroke-dashoffset]=\"indeterminateFlag() ? undefined : dashOffset()\"\n class=\"transition-all duration-300\"\n />\n </svg>\n @if (showValueFlag() && !indeterminateFlag()) {\n <span [class]=\"valueClasses()\">{{ percentage() | number: '1.0-0' }}%</span>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded';\n\n@Component({\n selector: 'tw-skeleton',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './skeleton.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonComponent {\n @Input() set variant(value: SkeletonVariant) {\n this._variant.set(value);\n }\n @Input() set width(value: string | number) {\n this._width.set(value);\n }\n @Input() set height(value: string | number) {\n this._height.set(value);\n }\n @Input() set animated(value: boolean) {\n this._animated.set(value);\n }\n\n protected _variant = signal<SkeletonVariant>('text');\n protected _width = signal<string | number>('100%');\n protected _height = signal<string | number>('');\n protected _animated = signal(true);\n\n protected skeletonClasses = computed(() => {\n const variant = this._variant();\n const animated = this._animated();\n\n const variantClasses: Record<SkeletonVariant, string> = {\n text: 'rounded',\n circular: 'rounded-full aspect-square',\n rectangular: 'rounded-none',\n rounded: 'rounded-lg',\n };\n\n const classes = ['bg-slate-200 dark:bg-slate-700', 'block', variantClasses[variant]];\n\n if (animated) {\n classes.push('animate-pulse');\n }\n\n return classes.join(' ');\n });\n\n protected customStyle = computed(() => {\n const width = this._width();\n const height = this._height();\n const variant = this._variant();\n\n const styles: Record<string, string> = {};\n\n if (width) {\n styles['width'] = typeof width === 'number' ? `${width}px` : width;\n }\n\n if (height) {\n styles['height'] = typeof height === 'number' ? `${height}px` : height;\n } else if (variant === 'text') {\n styles['height'] = '1.25rem'; // 20px - better default height for text skeleton\n }\n\n return styles;\n });\n}\n\nexport type SkeletonGap = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'tw-skeleton-text',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent],\n templateUrl: './skeleton-text.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonTextComponent {\n @Input() set lineCount(value: number) {\n this._lineCount.set(value);\n }\n @Input() set animated(value: boolean) {\n this._animated.set(value);\n }\n @Input() set lastLineWidth(value: string) {\n this._lastLineWidth.set(value);\n }\n @Input() set gap(value: SkeletonGap) {\n this._gap.set(value);\n }\n\n protected _lineCount = signal(3);\n protected _animated = signal(true);\n protected _lastLineWidth = signal('60%');\n protected _gap = signal<SkeletonGap>('md');\n\n protected animatedValue = computed(() => this._animated());\n\n protected gapPx = computed(() => {\n const gapMap: Record<SkeletonGap, number> = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n return gapMap[this._gap()];\n });\n\n protected lines = computed(() => {\n const count = this._lineCount();\n const lastWidth = this._lastLineWidth();\n\n return Array.from({ length: count }, (_, i) => ({\n width: i === count - 1 ? lastWidth : '100%',\n }));\n });\n}\n\n@Component({\n selector: 'tw-skeleton-card',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent, TwSkeletonTextComponent],\n templateUrl: './skeleton-card.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonCardComponent {\n @Input() set showMedia(value: boolean) {\n this._showMedia.set(value);\n }\n @Input() set showAvatar(value: boolean) {\n this._showAvatar.set(value);\n }\n @Input() set mediaHeight(value: number) {\n this._mediaHeight.set(value);\n }\n @Input() set lineCount(value: number) {\n this._lineCount.set(value);\n }\n\n protected _showMedia = signal(true);\n protected _showAvatar = signal(false);\n protected _mediaHeight = signal(200);\n protected _lineCount = signal(3);\n\n protected showMediaValue = computed(() => this._showMedia());\n protected showAvatarValue = computed(() => this._showAvatar());\n protected mediaHeightValue = computed(() => this._mediaHeight());\n protected lineCountValue = computed(() => this._lineCount());\n}\n\n@Component({\n selector: 'tw-skeleton-table',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent],\n templateUrl: './skeleton-table.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonTableComponent {\n @Input() set rowCount(value: number) {\n this._rowCount.set(value);\n }\n @Input() set columnCount(value: number) {\n this._columnCount.set(value);\n }\n\n protected _rowCount = signal(5);\n protected _columnCount = signal(4);\n\n protected rows = computed(() => Array.from({ length: this._rowCount() }));\n protected columns = computed(() =>\n Array.from({ length: this._columnCount() }, (_, i) => ({\n flex: i === 0 ? 2 : 1,\n width: i === this._columnCount() - 1 ? '60%' : '100%',\n }))\n );\n}\n","<div [class]=\"skeletonClasses()\" [style]=\"customStyle()\"></div>\n","<div class=\"flex flex-col\">\n @for (line of lines(); track $index; let last = $last) {\n <tw-skeleton\n variant=\"text\"\n [width]=\"line.width\"\n [animated]=\"animatedValue()\"\n [style.margin-bottom.px]=\"last ? 0 : gapPx()\"\n >\n </tw-skeleton>\n }\n</div>\n","<div class=\"rounded-lg border border-slate-200 overflow-hidden\">\n @if (showMediaValue()) {\n <tw-skeleton variant=\"rectangular\" width=\"100%\" [height]=\"mediaHeightValue()\"></tw-skeleton>\n }\n <div class=\"p-5 space-y-4\">\n @if (showAvatarValue()) {\n <div class=\"flex items-center gap-4\">\n <tw-skeleton variant=\"circular\" [width]=\"48\" [height]=\"48\"></tw-skeleton>\n <div class=\"flex-1 space-y-3\">\n <tw-skeleton variant=\"text\" width=\"50%\" height=\"14px\"></tw-skeleton>\n <tw-skeleton variant=\"text\" width=\"30%\" height=\"12px\"></tw-skeleton>\n </div>\n </div>\n }\n <tw-skeleton-text\n [lineCount]=\"lineCountValue()\"\n [lastLineWidth]=\"'80%'\"\n gap=\"md\"\n ></tw-skeleton-text>\n </div>\n</div>\n","<div class=\"w-full\">\n <!-- Header -->\n <div class=\"flex gap-6 pb-4 border-b border-slate-200\">\n @for (col of columns(); track $index) {\n <div [style.flex]=\"col.flex || 1\">\n <tw-skeleton variant=\"text\" [width]=\"col.width || '100%'\" height=\"14px\"></tw-skeleton>\n </div>\n }\n </div>\n <!-- Rows -->\n @for (row of rows(); track $index) {\n <div class=\"flex gap-6 py-4 border-b border-slate-100 last:border-b-0\">\n @for (col of columns(); track $index) {\n <div [style.flex]=\"col.flex || 1\">\n <tw-skeleton variant=\"text\" [width]=\"col.width || '100%'\" height=\"12px\"></tw-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\nimport { TwFocusTrapDirective } from '../directives/focus-trap.directive';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst MODAL_SIZES: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full mx-4',\n};\n\n/**\n * Modal/Dialog component with accessibility features\n *\n * @example\n * ```html\n * <tw-modal [(open)]=\"isOpen\" [size]=\"'md'\" (closed)=\"onClose()\">\n * <tw-modal-header>\n * <tw-modal-title>Modal Title</tw-modal-title>\n * </tw-modal-header>\n * <tw-modal-body>\n * Modal content goes here\n * </tw-modal-body>\n * <tw-modal-footer>\n * <tw-button variant=\"ghost\" (click)=\"isOpen = false\">Cancel</tw-button>\n * <tw-button variant=\"primary\" (click)=\"save()\">Save</tw-button>\n * </tw-modal-footer>\n * </tw-modal>\n * ```\n */\n@Component({\n selector: 'tw-modal',\n standalone: true,\n imports: [CommonModule, TwFocusTrapDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './modal.component.html',\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 1 })),\n ]),\n transition(':leave', [animate('100ms ease-in', style({ opacity: 0 }))]),\n ]),\n trigger('panelAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'scale(0.95) translateY(-10px)' }),\n animate('150ms ease-out', style({ opacity: 1, transform: 'scale(1) translateY(0)' })),\n ]),\n transition(':leave', [\n animate('100ms ease-in', style({ opacity: 0, transform: 'scale(0.95) translateY(-10px)' })),\n ]),\n ]),\n ],\n})\nexport class TwModalComponent implements OnDestroy {\n /** Expose sizes to template for JIT detection */\n protected readonly MODAL_SIZES = MODAL_SIZES;\n\n private readonly twClass = inject(TwClassService);\n private readonly document = inject(DOCUMENT);\n\n @ViewChild('modalPanel') modalPanel!: ElementRef;\n\n // Internal signals for reactive state\n protected readonly _open = signal(false);\n protected readonly _size = signal<ModalSize>('md');\n protected readonly _closeOnBackdropClick = signal(true);\n protected readonly _closeOnEscape = signal(true);\n protected readonly _showCloseButton = signal(true);\n protected readonly _autoFocus = signal(true);\n protected readonly _restoreFocus = signal(true);\n protected readonly _centered = signal(true);\n protected readonly _ariaLabelledBy = signal('');\n protected readonly _ariaDescribedBy = signal('');\n protected readonly _backdropClass = signal('');\n protected readonly _panelClass = signal('');\n\n // Input setters\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n get open(): boolean {\n return this._open();\n }\n\n @Input() set size(value: ModalSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set closeOnBackdropClick(value: boolean) {\n this._closeOnBackdropClick.set(value);\n }\n @Input({ transform: booleanAttribute }) set closeOnEscape(value: boolean) {\n this._closeOnEscape.set(value);\n }\n @Input({ transform: booleanAttribute }) set showCloseButton(value: boolean) {\n this._showCloseButton.set(value);\n }\n @Input({ transform: booleanAttribute }) set autoFocus(value: boolean) {\n this._autoFocus.set(value);\n }\n @Input({ transform: booleanAttribute }) set restoreFocus(value: boolean) {\n this._restoreFocus.set(value);\n }\n @Input({ transform: booleanAttribute }) set centered(value: boolean) {\n this._centered.set(value);\n }\n @Input() set ariaLabelledBy(value: string) {\n this._ariaLabelledBy.set(value);\n }\n @Input() set ariaDescribedBy(value: string) {\n this._ariaDescribedBy.set(value);\n }\n @Input() set backdropClass(value: string) {\n this._backdropClass.set(value);\n }\n @Input() set panelClass(value: string) {\n this._panelClass.set(value);\n }\n\n // Outputs\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n @Output() openChange = new EventEmitter<boolean>();\n\n private previousOverflow = '';\n\n // Effect to manage scroll lock\n constructor() {\n effect(() => {\n if (this._open()) {\n this.lockScroll();\n this.opened.emit();\n } else {\n this.unlockScroll();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.unlockScroll();\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onEscapeKey(event: Event): void {\n if (this._open() && this._closeOnEscape()) {\n event.preventDefault();\n this.closeModal();\n }\n }\n\n protected readonly backdropClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 bg-slate-900/50 backdrop-blur-sm',\n this._backdropClass()\n );\n });\n\n protected readonly containerClasses = computed(() => {\n return this.twClass.merge(\n 'flex min-h-full p-4',\n this._centered() ? 'items-center justify-center' : 'items-start justify-center pt-16'\n );\n });\n\n protected readonly panelClasses = computed(() => {\n return this.twClass.merge(\n 'relative w-full bg-white dark:bg-slate-800 rounded-xl shadow-2xl',\n MODAL_SIZES[this._size()],\n this._panelClass()\n );\n });\n\n /**\n * Returns only the size and custom panel classes (not base styling)\n * Base styling with dark: variants is in the template for Tailwind JIT detection\n */\n protected readonly sizeAndCustomClasses = computed(() => {\n return this.twClass.merge(MODAL_SIZES[this._size()], this._panelClass());\n });\n\n protected onBackdropClick(): void {\n if (this._closeOnBackdropClick()) {\n this.closeModal();\n }\n }\n\n closeModal(): void {\n this._open.set(false);\n this.openChange.emit(false);\n this.closed.emit();\n }\n\n openModal(): void {\n this._open.set(true);\n this.openChange.emit(true);\n }\n\n private lockScroll(): void {\n this.previousOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private unlockScroll(): void {\n this.document.body.style.overflow = this.previousOverflow;\n }\n}\n\n/**\n * Modal header component\n */\n@Component({\n selector: 'tw-modal-header',\n standalone: true,\n host: {\n class: 'block px-6 py-4 border-b border-slate-100 dark:border-slate-700',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalHeaderComponent {}\n\n/**\n * Modal title component\n */\n@Component({\n selector: 'tw-modal-title',\n standalone: true,\n host: {\n class: 'block text-lg font-semibold text-slate-900 dark:text-slate-100',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalTitleComponent {}\n\n/**\n * Modal body component\n */\n@Component({\n selector: 'tw-modal-body',\n standalone: true,\n host: {\n class: 'block p-6',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalBodyComponent {}\n\n/**\n * Modal footer component\n */\n@Component({\n selector: 'tw-modal-footer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClasses()',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalFooterComponent {\n private readonly twClass = inject(TwClassService);\n\n protected readonly _align = signal<'start' | 'center' | 'end' | 'between'>('end');\n protected readonly _classOverride = signal('');\n\n @Input() set align(value: 'start' | 'center' | 'end' | 'between') {\n this._align.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n protected readonly computedClasses = computed(() => {\n const alignClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n };\n\n return this.twClass.merge(\n 'flex items-center gap-3 px-6 py-4 border-t border-slate-100 dark:border-slate-700 bg-slate-50/50 dark:bg-slate-900/50 rounded-b-xl',\n alignClasses[this._align()],\n this._classOverride()\n );\n });\n}\n\n/**\n * Confirmation dialog helper component\n */\n@Component({\n selector: 'tw-confirm-dialog',\n standalone: true,\n imports: [\n CommonModule,\n TwModalComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n TwModalBodyComponent,\n TwModalFooterComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './confirm-dialog.component.html',\n})\nexport class TwConfirmDialogComponent {\n private readonly twClass = inject(TwClassService);\n\n protected readonly _open = signal(false);\n protected readonly _title = signal('Confirm');\n protected readonly _message = signal('Are you sure you want to continue?');\n protected readonly _confirmText = signal('Confirm');\n protected readonly _cancelText = signal('Cancel');\n protected readonly _variant = signal<'primary' | 'danger'>('primary');\n protected readonly _loading = signal(false);\n\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n get open(): boolean {\n return this._open();\n }\n\n @Input() set title(value: string) {\n this._title.set(value);\n }\n @Input() set message(value: string) {\n this._message.set(value);\n }\n @Input() set confirmText(value: string) {\n this._confirmText.set(value);\n }\n @Input() set cancelText(value: string) {\n this._cancelText.set(value);\n }\n @Input() set variant(value: 'primary' | 'danger') {\n this._variant.set(value);\n }\n @Input({ transform: booleanAttribute }) set loading(value: boolean) {\n this._loading.set(value);\n }\n\n @Output() openChange = new EventEmitter<boolean>();\n @Output() confirm = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n protected readonly confirmButtonClasses = computed(() => {\n const variants = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus-visible:ring-blue-500',\n danger: 'bg-rose-600 hover:bg-rose-700 focus-visible:ring-rose-500',\n };\n\n return this.twClass.merge(\n 'inline-flex items-center px-4 py-2 text-sm font-medium text-white rounded-lg focus:outline-none focus-visible:ring-2 disabled:opacity-50',\n variants[this._variant()]\n );\n });\n\n protected onConfirm(): void {\n this.confirm.emit();\n }\n\n protected onCancel(): void {\n this._open.set(false);\n this.openChange.emit(false);\n this.cancel.emit();\n }\n}\n","@if (_open()) {\n <!-- Backdrop -->\n <div class=\"fixed inset-0 z-50\" [@overlayAnimation] (click)=\"onBackdropClick()\">\n <div [class]=\"backdropClasses()\"></div>\n </div>\n\n <!-- Modal container -->\n <div class=\"fixed inset-0 z-50 overflow-y-auto\" [@overlayAnimation]>\n <div [class]=\"containerClasses()\">\n <!-- Modal panel -->\n <!-- Static classes for Tailwind JIT detection: bg-white dark:bg-slate-800 -->\n <div\n #modalPanel\n class=\"relative w-full bg-white dark:bg-slate-800 rounded-xl shadow-2xl\"\n [ngClass]=\"sizeAndCustomClasses()\"\n [@panelAnimation]\n twFocusTrap\n [focusTrapAutoFocus]=\"_autoFocus()\"\n [focusTrapRestoreFocus]=\"_restoreFocus()\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_ariaLabelledBy()\"\n [attr.aria-describedby]=\"_ariaDescribedBy()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Close button -->\n @if (_showCloseButton()) {\n <button\n type=\"button\"\n class=\"absolute top-4 right-4 text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-lg p-1\"\n (click)=\"closeModal()\"\n aria-label=\"Close modal\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n}\n","<tw-modal\n [open]=\"_open()\"\n [size]=\"'sm'\"\n [closeOnBackdropClick]=\"!_loading()\"\n [closeOnEscape]=\"!_loading()\"\n [showCloseButton]=\"!_loading()\"\n (openChange)=\"openChange.emit($event)\"\n (closed)=\"onCancel()\"\n>\n <tw-modal-header>\n <tw-modal-title>{{ _title() }}</tw-modal-title>\n </tw-modal-header>\n <tw-modal-body>\n <p class=\"text-slate-600\">{{ _message() }}</p>\n <ng-content></ng-content>\n </tw-modal-body>\n <tw-modal-footer>\n <button\n type=\"button\"\n class=\"px-4 py-2 text-sm font-medium text-slate-700 bg-white border border-slate-300 rounded-lg hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 disabled:opacity-50\"\n [disabled]=\"_loading()\"\n (click)=\"onCancel()\"\n >\n {{ _cancelText() }}\n </button>\n <button\n type=\"button\"\n [class]=\"confirmButtonClasses()\"\n [disabled]=\"_loading()\"\n (click)=\"onConfirm()\"\n >\n @if (_loading()) {\n <svg class=\"animate-spin -ml-1 mr-2 h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n }\n {{ _confirmText() }}\n </button>\n </tw-modal-footer>\n</tw-modal>\n","export * from './modal.component';\n\nimport {\n TwConfirmDialogComponent,\n TwModalBodyComponent,\n TwModalComponent,\n TwModalFooterComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n} from './modal.component';\n\nexport const TW_MODAL_COMPONENTS = [\n TwModalComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n TwModalBodyComponent,\n TwModalFooterComponent,\n TwConfirmDialogComponent,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n Renderer2,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type DropdownPosition =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end'\n | 'left'\n | 'right';\n\n/**\n * Dropdown item directive\n */\n@Directive({\n selector: '[twDropdownItem]',\n standalone: true,\n host: {\n class:\n 'block w-full px-4 py-2 text-left text-sm text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700 hover:text-slate-900 dark:hover:text-slate-100 focus:bg-slate-100 dark:focus:bg-slate-700 focus:text-slate-900 dark:focus:text-slate-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none transition-colors cursor-pointer',\n role: 'menuitem',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.aria-disabled]': 'disabled',\n },\n})\nexport class TwDropdownItemDirective {\n @Input({ transform: booleanAttribute }) disabled = false;\n}\n\n/**\n * Dropdown divider\n */\n@Component({\n selector: 'tw-dropdown-divider',\n standalone: true,\n host: {\n class: 'block my-1 border-t border-slate-200 dark:border-slate-700',\n role: 'separator',\n },\n template: ``,\n})\nexport class TwDropdownDividerComponent {}\n\n/**\n * Dropdown header/label\n */\n@Component({\n selector: 'tw-dropdown-header',\n standalone: true,\n host: {\n class: 'block px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwDropdownHeaderComponent {}\n\n/**\n * Dropdown menu component\n *\n * @example\n * ```html\n * <tw-dropdown>\n * <button twDropdownTrigger>Open Menu</button>\n * <tw-dropdown-menu>\n * <tw-dropdown-header>Actions</tw-dropdown-header>\n * <button twDropdownItem (click)=\"edit()\">Edit</button>\n * <button twDropdownItem (click)=\"duplicate()\">Duplicate</button>\n * <tw-dropdown-divider></tw-dropdown-divider>\n * <button twDropdownItem (click)=\"delete()\" class=\"text-rose-600 hover:text-rose-700 hover:bg-rose-50\">Delete</button>\n * </tw-dropdown-menu>\n * </tw-dropdown>\n * ```\n */\n@Component({\n selector: 'tw-dropdown',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dropdown.component.html',\n host: {\n class: 'inline-block text-left',\n },\n})\nexport class TwDropdownComponent implements OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerContainer') triggerContainer!: ElementRef<HTMLElement>;\n\n /** Position of the dropdown menu */\n @Input() position: DropdownPosition = 'bottom-start';\n\n /** Width of the dropdown menu */\n @Input() width: 'auto' | 'trigger' | string = 'auto';\n\n /** Maximum height of the dropdown menu */\n @Input() maxHeight = '300px';\n\n /** Whether the dropdown is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Close on item click */\n @Input({ transform: booleanAttribute }) closeOnSelect = true;\n\n /** Additional menu classes */\n @Input() menuClass = '';\n\n /** Event emitted when the dropdown opens */\n @Output() opened = new EventEmitter<void>();\n\n /** Event emitted when the dropdown closes */\n @Output() closed = new EventEmitter<void>();\n\n protected isOpen = signal(false);\n\n // Portal elements\n private portalHost: HTMLElement | null = null;\n private portalElement: HTMLElement | null = null;\n private menuContentElement: HTMLElement | null = null;\n private clickOutsideListener: (() => void) | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n private keydownListener: (() => void) | null = null;\n private menuClickListener: (() => void) | null = null;\n\n protected menuClasses = computed(() => {\n const widthClass = this.width === 'auto' ? 'min-w-[10rem]' : this.width === 'trigger' ? '' : '';\n\n return this.twClass.merge(\n 'rounded-lg bg-white dark:bg-slate-800 shadow-lg ring-1 ring-black/5 dark:ring-slate-700 overflow-auto py-1',\n widthClass,\n this.menuClass\n );\n });\n\n constructor() {\n // Create portal when open state changes\n effect(() => {\n if (this.isOpen()) {\n this.createPortal();\n } else {\n this.destroyPortal();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyPortal();\n }\n\n toggle(): void {\n if (this.disabled) return;\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n private createPortal(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n // Create portal host at body level\n this.portalHost = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalHost, 'position', 'fixed');\n this.renderer.setStyle(this.portalHost, 'z-index', '9999');\n this.renderer.setStyle(this.portalHost, 'top', '0');\n this.renderer.setStyle(this.portalHost, 'left', '0');\n this.renderer.setStyle(this.portalHost, 'pointer-events', 'none');\n this.renderer.appendChild(this.document.body, this.portalHost);\n\n // Create the dropdown element\n this.portalElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalElement, 'position', 'absolute');\n this.renderer.setStyle(this.portalElement, 'pointer-events', 'auto');\n this.renderer.setStyle(this.portalElement, 'max-height', this.maxHeight);\n\n // Apply classes\n const classes = this.menuClasses().split(' ');\n classes.forEach(cls => {\n if (cls) this.renderer.addClass(this.portalElement, cls);\n });\n\n // Add animation classes\n this.renderer.setStyle(this.portalElement, 'opacity', '0');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(0.95)');\n this.renderer.setStyle(\n this.portalElement,\n 'transition',\n 'opacity 100ms ease-out, transform 100ms ease-out'\n );\n\n // Set ARIA attributes\n this.renderer.setAttribute(this.portalElement, 'role', 'menu');\n this.renderer.setAttribute(this.portalElement, 'aria-orientation', 'vertical');\n\n this.renderer.appendChild(this.portalHost, this.portalElement);\n\n // Move menu content to portal (not clone, to preserve Angular bindings)\n this.menuContentElement = this.elementRef.nativeElement.querySelector('tw-dropdown-menu');\n if (this.menuContentElement) {\n this.renderer.appendChild(this.portalElement, this.menuContentElement);\n }\n\n // Position the dropdown\n this.updatePosition();\n\n // Animate in\n requestAnimationFrame(() => {\n if (this.portalElement) {\n this.renderer.setStyle(this.portalElement, 'opacity', '1');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(1)');\n }\n });\n\n // Add event listeners\n this.clickOutsideListener = this.renderer.listen('document', 'click', (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideTrigger = this.elementRef.nativeElement.contains(target);\n const isInsidePortal = this.portalElement?.contains(target);\n\n if (!isInsideTrigger && !isInsidePortal) {\n this.close();\n }\n });\n\n this.scrollListener = this.renderer.listen('window', 'scroll', () => {\n this.updatePosition();\n });\n\n this.resizeListener = this.renderer.listen('window', 'resize', () => {\n this.updatePosition();\n });\n\n this.keydownListener = this.renderer.listen('document', 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n });\n\n // Handle clicks on dropdown items\n if (this.closeOnSelect && this.portalElement) {\n this.menuClickListener = this.renderer.listen(this.portalElement, 'click', (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target.hasAttribute('twdropdownitem') || target.closest('[twdropdownitem]')) {\n // Use setTimeout to allow the Angular click handler to fire first\n setTimeout(() => { this.close(); }, 0);\n }\n });\n }\n }\n\n private destroyPortal(): void {\n // Move menu content back to original location before destroying portal\n if (this.menuContentElement && this.elementRef.nativeElement) {\n this.renderer.appendChild(this.elementRef.nativeElement, this.menuContentElement);\n }\n this.menuContentElement = null;\n\n if (this.portalHost && this.document.body.contains(this.portalHost)) {\n this.renderer.removeChild(this.document.body, this.portalHost);\n }\n this.portalHost = null;\n this.portalElement = null;\n\n if (this.clickOutsideListener) {\n this.clickOutsideListener();\n this.clickOutsideListener = null;\n }\n if (this.scrollListener) {\n this.scrollListener();\n this.scrollListener = null;\n }\n if (this.resizeListener) {\n this.resizeListener();\n this.resizeListener = null;\n }\n if (this.keydownListener) {\n this.keydownListener();\n this.keydownListener = null;\n }\n if (this.menuClickListener) {\n this.menuClickListener();\n this.menuClickListener = null;\n }\n }\n\n private updatePosition(): void {\n if (!this.portalElement || !isPlatformBrowser(this.platformId)) return;\n\n const triggerEl = this.triggerContainer?.nativeElement || this.elementRef.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n const portalRect = this.portalElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n // Set width if trigger width\n if (this.width === 'trigger') {\n this.renderer.setStyle(this.portalElement, 'width', `${rect.width}px`);\n } else if (this.width !== 'auto') {\n this.renderer.setStyle(this.portalElement, 'width', this.width);\n }\n\n const gap = 4; // margin between trigger and dropdown\n\n switch (this.position) {\n case 'bottom-start': {\n top = rect.bottom + gap;\n left = rect.left;\n break;\n }\n case 'bottom-end': {\n top = rect.bottom + gap;\n left = rect.right - portalRect.width;\n break;\n }\n case 'top-start': {\n top = rect.top - portalRect.height - gap;\n left = rect.left;\n break;\n }\n case 'top-end': {\n top = rect.top - portalRect.height - gap;\n left = rect.right - portalRect.width;\n break;\n }\n case 'left': {\n top = rect.top;\n left = rect.left - portalRect.width - gap;\n break;\n }\n case 'right': {\n top = rect.top;\n left = rect.right + gap;\n break;\n }\n }\n\n // Ensure dropdown stays within viewport\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n if (left < 0) left = gap;\n if (left + portalRect.width > viewportWidth) {\n left = viewportWidth - portalRect.width - gap;\n }\n if (top < 0) top = gap;\n if (top + portalRect.height > viewportHeight) {\n top = viewportHeight - portalRect.height - gap;\n }\n\n this.renderer.setStyle(this.portalElement, 'top', `${top}px`);\n this.renderer.setStyle(this.portalElement, 'left', `${left}px`);\n }\n}\n\n/**\n * Dropdown menu container\n */\n@Component({\n selector: 'tw-dropdown-menu',\n standalone: true,\n template: `<ng-content></ng-content>`,\n})\nexport class TwDropdownMenuComponent {}\n\n/**\n * Trigger directive for dropdown\n */\n@Directive({\n selector: '[twDropdownTrigger]',\n standalone: true,\n host: {\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-expanded]': 'expanded',\n },\n})\nexport class TwDropdownTriggerDirective {\n expanded = false;\n}\n","<div #triggerContainer (click)=\"toggle()\">\n <ng-content select=\"[twDropdownTrigger]\"></ng-content>\n</div>\n\n<!-- Hidden template for menu content - will be cloned to portal -->\n<div style=\"display: none\">\n <ng-content select=\"tw-dropdown-menu\"></ng-content>\n</div>\n","export * from './dropdown.component';\n\nimport {\n TwDropdownComponent,\n TwDropdownDividerComponent,\n TwDropdownHeaderComponent,\n TwDropdownItemDirective,\n TwDropdownMenuComponent,\n TwDropdownTriggerDirective,\n} from './dropdown.component';\n\nexport const TW_DROPDOWN_COMPONENTS = [\n TwDropdownComponent,\n TwDropdownMenuComponent,\n TwDropdownItemDirective,\n TwDropdownDividerComponent,\n TwDropdownHeaderComponent,\n TwDropdownTriggerDirective,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SidebarPosition = 'left' | 'right' | 'top' | 'bottom';\nexport type SidebarSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst SIDEBAR_SIZES: Record<SidebarPosition, Record<SidebarSize, string>> = {\n left: { sm: 'w-64', md: 'w-80', lg: 'w-96', xl: 'w-[480px]', full: 'w-full' },\n right: { sm: 'w-64', md: 'w-80', lg: 'w-96', xl: 'w-[480px]', full: 'w-full' },\n top: { sm: 'h-48', md: 'h-64', lg: 'h-80', xl: 'h-96', full: 'h-full' },\n bottom: { sm: 'h-48', md: 'h-64', lg: 'h-80', xl: 'h-96', full: 'h-full' },\n};\n\n/**\n * Sidebar/Drawer component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-sidebar [(visible)]=\"showSidebar\" header=\"Menu\">\n * <p>Sidebar content here</p>\n * </tw-sidebar>\n * ```\n */\n@Component({\n selector: 'tw-sidebar',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './sidebar.component.html',\n host: {\n '[class]': '\"contents\"',\n },\n})\nexport class TwSidebarComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Whether the sidebar is visible */\n @Input({ transform: booleanAttribute })\n set visibleInput(value: boolean) {\n this.visible.set(value);\n }\n\n /** Header text */\n @Input() header = '';\n\n /** Position of the sidebar */\n @Input() position: SidebarPosition = 'left';\n\n /** Size of the sidebar */\n @Input() size: SidebarSize = 'md';\n\n /** Whether to show backdrop */\n @Input({ transform: booleanAttribute }) showBackdrop = true;\n\n /** Whether clicking backdrop closes sidebar */\n @Input({ transform: booleanAttribute }) dismissible = true;\n\n /** Whether pressing Escape closes sidebar */\n @Input({ transform: booleanAttribute }) closeOnEscape = true;\n\n /** Whether to show close button */\n @Input({ transform: booleanAttribute }) showCloseButton = true;\n\n /** Whether the sidebar is modal (blocks interaction with page) */\n @Input({ transform: booleanAttribute }) modal = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Visibility change event */\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /** Show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Hide event */\n @Output() onHide = new EventEmitter<void>();\n\n @ContentChild('twSidebarFooter') footerTemplate!: TemplateRef<any>;\n\n protected visible = signal(false);\n\n protected get hasFooter(): boolean {\n return !!this.footerTemplate;\n }\n\n protected backdropClasses = computed(() => {\n return this.twClass.merge(\n 'fixed inset-0 bg-black/50 z-40 transition-opacity duration-300',\n this.visible() ? 'opacity-100' : 'opacity-0 pointer-events-none'\n );\n });\n\n protected panelClasses = computed(() => {\n const sizeClasses = this.getSizeClasses();\n const positionClasses = this.getPositionClasses();\n const transformClasses = this.getTransformClasses();\n\n return this.twClass.merge(\n 'fixed z-50 bg-white dark:bg-slate-800 shadow-xl dark:shadow-slate-900/50 flex flex-col transition-transform duration-300 ease-out',\n sizeClasses,\n positionClasses,\n transformClasses,\n this.classOverride\n );\n });\n\n protected headerClasses = computed(() => {\n return 'flex items-center justify-between px-6 py-4 border-b border-slate-200 dark:border-slate-700 text-slate-900 dark:text-slate-100';\n });\n\n protected contentClasses = computed(() => {\n return 'flex-1 overflow-auto p-6 text-slate-700 dark:text-slate-300';\n });\n\n protected footerClasses = computed(() => {\n return 'px-6 py-4 border-t border-slate-200 dark:border-slate-700';\n });\n\n private getSizeClasses(): string {\n return SIDEBAR_SIZES[this.position][this.size];\n }\n\n private getPositionClasses(): string {\n switch (this.position) {\n case 'left': {\n return 'top-0 left-0 h-full';\n }\n case 'right': {\n return 'top-0 right-0 h-full';\n }\n case 'top': {\n return 'top-0 left-0 w-full';\n }\n case 'bottom': {\n return 'bottom-0 left-0 w-full';\n }\n }\n }\n\n private getTransformClasses(): string {\n if (this.visible()) return 'translate-x-0 translate-y-0';\n\n switch (this.position) {\n case 'left': {\n return '-translate-x-full';\n }\n case 'right': {\n return 'translate-x-full';\n }\n case 'top': {\n return '-translate-y-full';\n }\n case 'bottom': {\n return 'translate-y-full';\n }\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.closeOnEscape && this.visible()) {\n this.hide();\n }\n }\n\n onBackdropClick(): void {\n if (this.dismissible) {\n this.hide();\n }\n }\n\n /** Show the sidebar */\n show(): void {\n this.visible.set(true);\n this.visibleChange.emit(true);\n this.onShow.emit();\n\n if (this.modal) {\n document.body.style.overflow = 'hidden';\n }\n }\n\n /** Hide the sidebar */\n hide(): void {\n this.visible.set(false);\n this.visibleChange.emit(false);\n this.onHide.emit();\n\n if (this.modal) {\n document.body.style.overflow = '';\n }\n }\n\n /** Toggle the sidebar visibility */\n toggle(): void {\n if (this.visible()) {\n this.hide();\n } else {\n this.show();\n }\n }\n}\n","<!-- Backdrop -->\n@if (visible() && showBackdrop) {\n <div [class]=\"backdropClasses()\" (click)=\"onBackdropClick()\" aria-hidden=\"true\"></div>\n}\n\n<!-- Sidebar panel -->\n<div [class]=\"panelClasses()\" [attr.aria-hidden]=\"!visible()\" role=\"dialog\" aria-modal=\"true\">\n <!-- Header -->\n @if (header || showCloseButton) {\n <div [class]=\"headerClasses()\">\n @if (header) {\n <h2 class=\"text-lg font-semibold text-slate-900\">{{ header }}</h2>\n }\n @if (showCloseButton) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 transition-colors\"\n (click)=\"hide()\"\n aria-label=\"Close sidebar\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n }\n\n <!-- Content -->\n <div [class]=\"contentClasses()\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n @if (hasFooter) {\n <div [class]=\"footerClasses()\">\n <ng-content select=\"[twSidebarFooter]\"></ng-content>\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n Output,\n PLATFORM_ID,\n Renderer2,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type PopoverPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type PopoverTrigger = 'click' | 'hover' | 'focus' | 'manual';\n\n/**\n * Popover component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-popover header=\"Settings\">\n * <button twPopoverTrigger>Open</button>\n * <p>Popover content here</p>\n * </tw-popover>\n * ```\n */\n@Component({\n selector: 'tw-popover',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './popover.component.html',\n host: {\n class: 'inline-block',\n },\n})\nexport class TwPopoverComponent implements OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerContainer') triggerContainer!: ElementRef<HTMLElement>;\n\n /** Position relative to trigger */\n @Input() position: PopoverPosition = 'bottom';\n\n /** How the popover is triggered */\n @Input() trigger: PopoverTrigger = 'click';\n\n /** Header text */\n @Input() header = '';\n\n /** Whether to show arrow */\n @Input({ transform: booleanAttribute }) showArrow = true;\n\n /** Whether clicking outside closes the popover */\n @Input({ transform: booleanAttribute }) dismissible = true;\n\n /** Close on escape key */\n @Input({ transform: booleanAttribute }) closeOnEscape = true;\n\n /** Hover delay in milliseconds */\n @Input({ transform: numberAttribute }) hoverDelay = 200;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Hide event */\n @Output() onHide = new EventEmitter<void>();\n\n @ContentChild('twPopoverFooter') footerTemplate!: TemplateRef<any>;\n\n protected visible = signal(false);\n private hoverTimeout: any = null;\n\n // Portal elements\n private portalHost: HTMLElement | null = null;\n private portalElement: HTMLElement | null = null;\n private clickOutsideListener: (() => void) | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n private keydownListener: (() => void) | null = null;\n private portalMouseEnterListener: (() => void) | null = null;\n private portalMouseLeaveListener: (() => void) | null = null;\n\n protected get hasFooter(): boolean {\n return !!this.footerTemplate;\n }\n\n protected popoverClasses = computed(() => {\n return this.twClass.merge(\n 'min-w-48 bg-white dark:bg-slate-800 rounded-lg shadow-lg border border-slate-200 dark:border-slate-700',\n this.classOverride\n );\n });\n\n constructor() {\n // Create portal when visible state changes\n effect(() => {\n if (this.visible()) {\n this.createPortal();\n } else {\n this.destroyPortal();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.clearHoverTimeout();\n this.destroyPortal();\n }\n\n onTriggerClick(): void {\n if (this.trigger === 'click') {\n this.toggle();\n }\n }\n\n onTriggerEnter(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.show();\n }, this.hoverDelay);\n }\n }\n\n onTriggerLeave(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.hide();\n }, this.hoverDelay);\n }\n }\n\n private onPopoverEnter(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n }\n }\n\n private onPopoverLeave(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.hide();\n }, this.hoverDelay);\n }\n }\n\n private clearHoverTimeout(): void {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n show(): void {\n this.visible.set(true);\n this.onShow.emit();\n }\n\n hide(): void {\n this.visible.set(false);\n this.onHide.emit();\n }\n\n toggle(): void {\n if (this.visible()) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n private createPortal(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n // Create portal host at body level\n this.portalHost = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalHost, 'position', 'fixed');\n this.renderer.setStyle(this.portalHost, 'z-index', '9999');\n this.renderer.setStyle(this.portalHost, 'top', '0');\n this.renderer.setStyle(this.portalHost, 'left', '0');\n this.renderer.setStyle(this.portalHost, 'pointer-events', 'none');\n this.renderer.appendChild(this.document.body, this.portalHost);\n\n // Create the popover element\n this.portalElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalElement, 'position', 'absolute');\n this.renderer.setStyle(this.portalElement, 'pointer-events', 'auto');\n\n // Apply classes\n const classes = this.popoverClasses().split(' ');\n classes.forEach(cls => {\n if (cls) this.renderer.addClass(this.portalElement, cls);\n });\n\n // Add animation styles\n this.renderer.setStyle(this.portalElement, 'opacity', '0');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(0.95)');\n this.renderer.setStyle(\n this.portalElement,\n 'transition',\n 'opacity 150ms ease-out, transform 150ms ease-out'\n );\n\n // Set ARIA attributes\n this.renderer.setAttribute(this.portalElement, 'role', 'tooltip');\n\n // Build popover content\n this.buildPopoverContent();\n\n this.renderer.appendChild(this.portalHost, this.portalElement);\n\n // Position the popover\n this.updatePosition();\n\n // Animate in\n requestAnimationFrame(() => {\n if (this.portalElement) {\n this.renderer.setStyle(this.portalElement, 'opacity', '1');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(1)');\n }\n });\n\n // Add event listeners\n if (this.dismissible && this.trigger === 'click') {\n this.clickOutsideListener = this.renderer.listen('document', 'click', (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideTrigger = this.elementRef.nativeElement.contains(target);\n const isInsidePortal = this.portalElement?.contains(target);\n\n if (!isInsideTrigger && !isInsidePortal) {\n this.hide();\n }\n });\n }\n\n this.scrollListener = this.renderer.listen('window', 'scroll', () => {\n this.updatePosition();\n });\n\n this.resizeListener = this.renderer.listen('window', 'resize', () => {\n this.updatePosition();\n });\n\n if (this.closeOnEscape) {\n this.keydownListener = this.renderer.listen('document', 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.hide();\n }\n });\n }\n\n // Hover listeners for portal\n if (this.trigger === 'hover' && this.portalElement) {\n this.portalMouseEnterListener = this.renderer.listen(this.portalElement, 'mouseenter', () => {\n this.onPopoverEnter();\n });\n this.portalMouseLeaveListener = this.renderer.listen(this.portalElement, 'mouseleave', () => {\n this.onPopoverLeave();\n });\n }\n }\n\n private buildPopoverContent(): void {\n if (!this.portalElement) return;\n\n // Arrow\n if (this.showArrow) {\n const arrow = this.renderer.createElement('div');\n const arrowClasses = this.getArrowClasses();\n arrowClasses.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(arrow, cls);\n });\n this.renderer.appendChild(this.portalElement, arrow);\n }\n\n // Header\n if (this.header) {\n const headerEl = this.renderer.createElement('div');\n this.renderer.addClass(headerEl, 'px-4');\n this.renderer.addClass(headerEl, 'py-2');\n this.renderer.addClass(headerEl, 'border-b');\n this.renderer.addClass(headerEl, 'border-slate-200');\n this.renderer.addClass(headerEl, 'dark:border-slate-700');\n this.renderer.addClass(headerEl, 'font-semibold');\n this.renderer.addClass(headerEl, 'text-slate-900');\n this.renderer.addClass(headerEl, 'dark:text-slate-100');\n const headerText = this.renderer.createText(this.header);\n this.renderer.appendChild(headerEl, headerText);\n this.renderer.appendChild(this.portalElement, headerEl);\n }\n\n // Content\n const contentWrapper = this.renderer.createElement('div');\n this.renderer.addClass(contentWrapper, 'px-4');\n this.renderer.addClass(contentWrapper, 'py-3');\n\n // Clone content from the component\n const contentSource = this.elementRef.nativeElement.querySelector('.popover-content-source');\n if (contentSource) {\n const clone = contentSource.cloneNode(true) as HTMLElement;\n clone.style.display = 'block';\n this.renderer.appendChild(contentWrapper, clone);\n }\n this.renderer.appendChild(this.portalElement, contentWrapper);\n\n // Footer\n const footerSource = this.elementRef.nativeElement.querySelector('[twPopoverFooter]');\n if (footerSource) {\n const footerWrapper = this.renderer.createElement('div');\n this.renderer.addClass(footerWrapper, 'px-4');\n this.renderer.addClass(footerWrapper, 'py-2');\n this.renderer.addClass(footerWrapper, 'border-t');\n this.renderer.addClass(footerWrapper, 'border-slate-200');\n this.renderer.addClass(footerWrapper, 'dark:border-slate-700');\n this.renderer.addClass(footerWrapper, 'bg-slate-50');\n this.renderer.addClass(footerWrapper, 'dark:bg-slate-900');\n const footerClone = footerSource.cloneNode(true) as HTMLElement;\n this.renderer.appendChild(footerWrapper, footerClone);\n this.renderer.appendChild(this.portalElement, footerWrapper);\n }\n }\n\n private getArrowClasses(): string {\n const baseClasses = 'absolute w-2.5 h-2.5 bg-white dark:bg-slate-800 rotate-45 shadow-sm';\n const positionClasses: Record<PopoverPosition, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 border-b border-r border-slate-200 dark:border-slate-700',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 border-t border-l border-slate-200 dark:border-slate-700',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-1/2 border-t border-r border-slate-200 dark:border-slate-700',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-1/2 border-b border-l border-slate-200 dark:border-slate-700',\n };\n return this.twClass.merge(baseClasses, positionClasses[this.position]);\n }\n\n private destroyPortal(): void {\n if (this.portalHost && this.document.body.contains(this.portalHost)) {\n this.renderer.removeChild(this.document.body, this.portalHost);\n }\n this.portalHost = null;\n this.portalElement = null;\n\n if (this.clickOutsideListener) {\n this.clickOutsideListener();\n this.clickOutsideListener = null;\n }\n if (this.scrollListener) {\n this.scrollListener();\n this.scrollListener = null;\n }\n if (this.resizeListener) {\n this.resizeListener();\n this.resizeListener = null;\n }\n if (this.keydownListener) {\n this.keydownListener();\n this.keydownListener = null;\n }\n if (this.portalMouseEnterListener) {\n this.portalMouseEnterListener();\n this.portalMouseEnterListener = null;\n }\n if (this.portalMouseLeaveListener) {\n this.portalMouseLeaveListener();\n this.portalMouseLeaveListener = null;\n }\n }\n\n private updatePosition(): void {\n if (!this.portalElement || !isPlatformBrowser(this.platformId)) return;\n\n const triggerEl = this.triggerContainer?.nativeElement || this.elementRef.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n const portalRect = this.portalElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n const gap = 8; // margin between trigger and popover\n\n switch (this.position) {\n case 'top': {\n top = rect.top - portalRect.height - gap;\n left = rect.left + rect.width / 2 - portalRect.width / 2;\n break;\n }\n case 'bottom': {\n top = rect.bottom + gap;\n left = rect.left + rect.width / 2 - portalRect.width / 2;\n break;\n }\n case 'left': {\n top = rect.top + rect.height / 2 - portalRect.height / 2;\n left = rect.left - portalRect.width - gap;\n break;\n }\n case 'right': {\n top = rect.top + rect.height / 2 - portalRect.height / 2;\n left = rect.right + gap;\n break;\n }\n }\n\n // Ensure popover stays within viewport\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n if (left < gap) left = gap;\n if (left + portalRect.width > viewportWidth - gap) {\n left = viewportWidth - portalRect.width - gap;\n }\n if (top < gap) top = gap;\n if (top + portalRect.height > viewportHeight - gap) {\n top = viewportHeight - portalRect.height - gap;\n }\n\n this.renderer.setStyle(this.portalElement, 'top', `${top}px`);\n this.renderer.setStyle(this.portalElement, 'left', `${left}px`);\n }\n}\n","<!-- Trigger -->\n<div\n #triggerContainer\n (click)=\"onTriggerClick()\"\n (mouseenter)=\"onTriggerEnter()\"\n (mouseleave)=\"onTriggerLeave()\"\n>\n <ng-content select=\"[twPopoverTrigger]\"></ng-content>\n</div>\n\n<!-- Hidden content source - will be cloned to portal -->\n<div class=\"popover-content-source\" style=\"display: none\">\n <ng-content></ng-content>\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ImageFit = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\nexport type ImageBorderRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';\n\n/**\n * Image component with preview, zoom, and rotation\n *\n * @example\n * ```html\n * <tw-image [src]=\"imageUrl\" alt=\"Description\" [preview]=\"true\"></tw-image>\n * <tw-image [src]=\"imageUrl\" [zoomable]=\"true\" [rotatable]=\"true\"></tw-image>\n * ```\n */\n@Component({\n selector: 'tw-image',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './image.component.html',\n})\nexport class TwImageComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Image source URL */\n @Input({ required: true }) src = '';\n\n /** Alternative text */\n @Input() alt = '';\n\n /** Preview source (larger image for preview) */\n @Input() previewSrc = '';\n\n /** Width of the image */\n @Input() width = '';\n\n /** Height of the image */\n @Input() height = '';\n\n /** Object fit */\n @Input() set fit(value: ImageFit) {\n this._fit.set(value);\n }\n protected _fit = signal<ImageFit>('cover');\n\n /** Border radius */\n @Input() set borderRadius(value: ImageBorderRadius) {\n this._borderRadius.set(value);\n }\n protected _borderRadius = signal<ImageBorderRadius>('none');\n\n /** Whether to enable preview on click */\n @Input({ transform: booleanAttribute }) set preview(value: boolean) {\n this._preview.set(value);\n }\n protected _preview = signal(false);\n\n /** Whether zoom is enabled in preview */\n @Input({ transform: booleanAttribute }) zoomable = true;\n\n /** Whether rotation is enabled in preview */\n @Input({ transform: booleanAttribute }) rotatable = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Preview show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Preview hide event */\n @Output() onHide = new EventEmitter<void>();\n\n /** Image load event */\n @Output() onLoad = new EventEmitter<void>();\n\n /** Image error event */\n @Output() onError = new EventEmitter<void>();\n\n protected loading = signal(true);\n protected previewVisible = signal(false);\n protected zoomLevel = signal(1);\n protected rotation = signal(0);\n\n // Expose Math to template\n protected Math = Math;\n\n protected containerClasses = computed(() => {\n const radiusClasses: Record<ImageBorderRadius, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl',\n full: 'rounded-full',\n };\n\n return this.twClass.merge(\n 'relative overflow-hidden inline-block',\n radiusClasses[this._borderRadius()],\n this._preview() ? 'cursor-zoom-in' : '',\n this.classOverride\n );\n });\n\n protected containerStyles = computed(() => {\n const styles: Record<string, string> = {};\n if (this.width) {\n styles['width'] =\n this.width.includes('px') || this.width.includes('%') ? this.width : `${this.width}px`;\n }\n if (this.height) {\n styles['height'] =\n this.height.includes('px') || this.height.includes('%') ? this.height : `${this.height}px`;\n }\n return styles;\n });\n\n protected imageClasses = computed(() => {\n const fitClasses: Record<ImageFit, string> = {\n contain: 'object-contain',\n cover: 'object-cover',\n fill: 'object-fill',\n none: 'object-none',\n 'scale-down': 'object-scale-down',\n };\n\n return this.twClass.merge('w-full h-full', fitClasses[this._fit()]);\n });\n\n protected placeholderClasses = computed(() => {\n return 'absolute inset-0 flex items-center justify-center bg-slate-100';\n });\n\n protected previewIconClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 flex items-center justify-center',\n 'bg-black/0 hover:bg-black/40 transition-colors',\n 'text-white opacity-0 hover:opacity-100'\n );\n });\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.previewVisible()) {\n this.closePreview();\n }\n }\n\n onImageLoad(): void {\n this.loading.set(false);\n this.onLoad.emit();\n }\n\n onImageError(): void {\n this.loading.set(false);\n this.onError.emit();\n }\n\n onImageClick(): void {\n if (this._preview()) {\n this.openPreview();\n }\n }\n\n openPreview(): void {\n this.previewVisible.set(true);\n this.zoomLevel.set(1);\n this.rotation.set(0);\n this.onShow.emit();\n document.body.style.overflow = 'hidden';\n }\n\n closePreview(): void {\n this.previewVisible.set(false);\n this.onHide.emit();\n document.body.style.overflow = '';\n }\n\n zoomIn(): void {\n if (this.zoomLevel() < 3) {\n this.zoomLevel.set(Math.min(3, this.zoomLevel() + 0.25));\n }\n }\n\n zoomOut(): void {\n if (this.zoomLevel() > 0.5) {\n this.zoomLevel.set(Math.max(0.5, this.zoomLevel() - 0.25));\n }\n }\n\n rotateLeft(): void {\n this.rotation.set(this.rotation() - 90);\n }\n\n rotateRight(): void {\n this.rotation.set(this.rotation() + 90);\n }\n}\n","<!-- Thumbnail/Main image -->\n<div [class]=\"containerClasses()\" [style]=\"containerStyles()\" (click)=\"onImageClick()\">\n @if (loading()) {\n <div [class]=\"placeholderClasses()\">\n <svg\n class=\"w-8 h-8 text-slate-300 animate-pulse\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n </div>\n }\n <img\n [src]=\"src\"\n [alt]=\"alt\"\n [class]=\"imageClasses()\"\n [style.display]=\"loading() ? 'none' : 'block'\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n @if (_preview() && !loading()) {\n <div [class]=\"previewIconClasses()\">\n <svg class=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\"\n />\n </svg>\n </div>\n }\n</div>\n\n<!-- Preview modal -->\n@if (previewVisible()) {\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/90\"\n (click)=\"closePreview()\"\n >\n <!-- Controls -->\n <div class=\"absolute top-4 right-4 flex items-center gap-2\">\n @if (zoomable) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"zoomOut(); $event.stopPropagation()\"\n aria-label=\"Zoom out\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"zoomIn(); $event.stopPropagation()\"\n aria-label=\"Zoom in\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\"\n />\n </svg>\n </button>\n <span class=\"px-3 py-1 rounded-lg bg-white/10 text-white text-sm\">\n {{ Math.round(zoomLevel() * 100) }}%\n </span>\n }\n @if (rotatable) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"rotateLeft(); $event.stopPropagation()\"\n aria-label=\"Rotate left\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"rotateRight(); $event.stopPropagation()\"\n aria-label=\"Rotate right\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 10H11a8 8 0 00-8 8v2m18-10l-6 6m6-6l-6-6\"\n />\n </svg>\n </button>\n }\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"closePreview(); $event.stopPropagation()\"\n aria-label=\"Close\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Image -->\n <img\n [src]=\"previewSrc || src\"\n [alt]=\"alt\"\n class=\"max-w-full max-h-full object-contain transition-transform duration-200\"\n [style.transform]=\"'scale(' + zoomLevel() + ') rotate(' + rotation() + 'deg)'\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ScrollTopPosition = 'bottom-right' | 'bottom-left' | 'bottom-center';\nexport type ScrollTopVariant = 'primary' | 'secondary' | 'dark';\n\nconst POSITION_CLASSES: Record<ScrollTopPosition, string> = {\n 'bottom-right': 'right-6 bottom-6',\n 'bottom-left': 'left-6 bottom-6',\n 'bottom-center': 'left-1/2 -translate-x-1/2 bottom-6',\n};\n\nconst VARIANT_CLASSES: Record<ScrollTopVariant, string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-lg hover:shadow-xl',\n secondary:\n 'bg-white hover:bg-slate-50 text-slate-700 border border-slate-200 shadow-lg hover:shadow-xl',\n dark: 'bg-slate-800 hover:bg-slate-900 text-white shadow-lg hover:shadow-xl',\n};\n\n/**\n * Scroll to top button component\n *\n * @example\n * ```html\n * <tw-scroll-top></tw-scroll-top>\n * <tw-scroll-top [threshold]=\"200\" position=\"bottom-left\"></tw-scroll-top>\n * ```\n */\n@Component({\n selector: 'tw-scroll-top',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './scroll-top.component.html',\n})\nexport class TwScrollTopComponent implements OnInit, OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly platformId = inject(PLATFORM_ID);\n\n /** Scroll threshold to show button (in pixels) */\n @Input({ transform: numberAttribute }) threshold = 400;\n\n /** Position of the button */\n @Input() position: ScrollTopPosition = 'bottom-right';\n\n /** Visual variant */\n @Input() variant: ScrollTopVariant = 'primary';\n\n /** Scroll behavior */\n @Input() behavior: ScrollBehavior = 'smooth';\n\n /** Target element to scroll (defaults to window) */\n @Input() target: HTMLElement | Window | null = null;\n\n /** Custom icon template */\n @Input() icon: TemplateRef<any> | null = null;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n protected visible = signal(false);\n\n private scrollListener: (() => void) | null = null;\n\n protected buttonClasses = computed(() => {\n const positionClasses = POSITION_CLASSES[this.position];\n const variantClasses = VARIANT_CLASSES[this.variant];\n\n return this.twClass.merge(\n 'fixed z-50 p-3 rounded-full transition-all duration-300',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n 'animate-in fade-in-0 zoom-in-95',\n positionClasses,\n variantClasses,\n this.classOverride\n );\n });\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.setupScrollListener();\n }\n }\n\n ngOnDestroy(): void {\n this.removeScrollListener();\n }\n\n private setupScrollListener(): void {\n const scrollTarget = this.target || window;\n\n this.scrollListener = () => {\n const scrollTop = this.getScrollTop();\n this.visible.set(scrollTop > this.threshold);\n };\n\n scrollTarget.addEventListener('scroll', this.scrollListener, { passive: true });\n // Check initial scroll position\n this.scrollListener();\n }\n\n private removeScrollListener(): void {\n if (this.scrollListener) {\n const scrollTarget = this.target || window;\n scrollTarget.removeEventListener('scroll', this.scrollListener);\n }\n }\n\n private getScrollTop(): number {\n if (this.target instanceof HTMLElement) {\n return this.target.scrollTop;\n }\n return window.scrollY || document.documentElement.scrollTop;\n }\n\n scrollToTop(): void {\n if (this.target instanceof HTMLElement) {\n this.target.scrollTo({ top: 0, behavior: this.behavior });\n } else {\n window.scrollTo({ top: 0, behavior: this.behavior });\n }\n }\n}\n","@if (visible()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n (click)=\"scrollToTop()\"\n aria-label=\"Scroll to top\"\n >\n @if (icon) {\n <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\n } @else {\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n }\n </button>\n}\n","/*\n * Public API Surface of @pegasus-heavy/ngx-tailwindcss\n *\n * This library provides highly customizable Angular components designed\n * for Tailwind CSS 4+. Components use Tailwind utility classes and are\n * designed to work with your custom Tailwind configuration.\n *\n * IMPORTANT: This library does NOT import Tailwind CSS directly.\n * You must configure Tailwind in your application and ensure the\n * content paths include this library's templates.\n */\n\n// Core - Configuration and Services\nexport * from './lib/core/index';\n\n// Directives\nexport * from './lib/directives/index';\n\n// Form Components\nexport * from './lib/button/index';\nexport * from './lib/input/index';\nexport * from './lib/checkbox/index';\nexport * from './lib/radio/index';\nexport * from './lib/switch/index';\nexport * from './lib/select/index';\nexport * from './lib/multiselect/index';\nexport * from './lib/slider/index';\nexport * from './lib/rating/index';\nexport * from './lib/chip/index';\n\n// Layout Components\nexport * from './lib/card/index';\nexport * from './lib/accordion/index';\nexport * from './lib/tabs/index';\nexport * from './lib/divider/index';\nexport * from './lib/container/index';\nexport * from './lib/stack/index';\nexport * from './lib/grid/index';\nexport * from './lib/aspect-ratio/index';\nexport * from './lib/center/index';\nexport * from './lib/spacer/index';\nexport * from './lib/splitter/index';\nexport * from './lib/sticky/index';\nexport * from './lib/scroll-area/index';\nexport * from './lib/columns/index';\nexport * from './lib/bleed/index';\nexport * from './lib/overlay/index';\n\n// Data Display Components\nexport * from './lib/badge/index';\nexport * from './lib/avatar/index';\nexport * from './lib/table/index';\nexport * from './lib/datatables/index';\nexport * from './lib/tree/index';\nexport * from './lib/timeline/index';\n\n// Navigation Components\nexport * from './lib/breadcrumb/index';\nexport * from './lib/pagination/index';\nexport * from './lib/steps/index';\nexport * from './lib/menu/index';\n\n// Feedback Components\nexport * from './lib/alert/index';\nexport * from './lib/toast/index';\nexport * from './lib/spinner/index';\nexport * from './lib/progress/index';\nexport * from './lib/skeleton/index';\n\n// Overlay Components\nexport * from './lib/modal/index';\nexport * from './lib/dropdown/index';\nexport * from './lib/sidebar/index';\nexport * from './lib/popover/index';\n\n// Media Components\nexport * from './lib/image/index';\n\n// Misc Components\nexport * from './lib/scroll-top/index';\n\n// Convenience re-exports for all components\nimport { TW_DIRECTIVES } from './lib/directives/index';\n\nimport { TW_BUTTON_COMPONENTS } from './lib/button/index';\nimport { TW_CARD_COMPONENTS } from './lib/card/index';\nimport { TW_INPUT_COMPONENTS } from './lib/input/index';\nimport { TW_BADGE_COMPONENTS } from './lib/badge/index';\nimport { TW_ALERT_COMPONENTS } from './lib/alert/index';\nimport { TW_MODAL_COMPONENTS } from './lib/modal/index';\nimport { TW_DROPDOWN_COMPONENTS } from './lib/dropdown/index';\nimport { TW_TABS_COMPONENTS } from './lib/tabs/index';\nimport { TwAvatarComponent, TwAvatarGroupComponent } from './lib/avatar/index';\nimport { TwLoadingOverlayComponent, TwSpinnerComponent } from './lib/spinner/index';\nimport { TwProgressCircularComponent, TwProgressComponent } from './lib/progress/index';\nimport {\n TwSkeletonCardComponent,\n TwSkeletonComponent,\n TwSkeletonTableComponent,\n TwSkeletonTextComponent,\n} from './lib/skeleton/index';\nimport { TwToastComponent, TwToastContainerComponent } from './lib/toast/index';\nimport { TwBreadcrumbComponent } from './lib/breadcrumb/index';\nimport { TwPaginationComponent } from './lib/pagination/index';\nimport { TwAccordionComponent, TwAccordionItemComponent } from './lib/accordion/index';\nimport { TwDividerComponent } from './lib/divider/index';\n\n// New form components\nimport { TwCheckboxComponent } from './lib/checkbox/index';\nimport { TwRadioButtonComponent, TwRadioGroupComponent } from './lib/radio/index';\nimport { TwSwitchComponent } from './lib/switch/index';\nimport { TwSelectComponent } from './lib/select/index';\nimport { TwMultiSelectComponent } from './lib/multiselect/index';\nimport { TwSliderComponent } from './lib/slider/index';\nimport { TwRatingComponent } from './lib/rating/index';\nimport { TwChipComponent, TwChipsComponent } from './lib/chip/index';\n\n// New data display components\nimport { TwTableComponent } from './lib/table/index';\nimport { TwDatatablesComponent } from './lib/datatables/index';\nimport { TwTreeComponent } from './lib/tree/index';\nimport { TwTimelineComponent } from './lib/timeline/index';\n\n// New navigation components\nimport { TwStepsComponent } from './lib/steps/index';\nimport { TwContextMenuComponent, TwMenuComponent } from './lib/menu/index';\n\n// New overlay components\nimport { TwSidebarComponent } from './lib/sidebar/index';\nimport { TwPopoverComponent } from './lib/popover/index';\n\n// New media components\nimport { TwImageComponent } from './lib/image/index';\n\n// Misc components\nimport { TwScrollTopComponent } from './lib/scroll-top/index';\n\n// Layout components\nimport { TwContainerComponent } from './lib/container/index';\nimport { TwHStackComponent, TwStackComponent, TwVStackComponent } from './lib/stack/index';\nimport { TwGridComponent, TwSimpleGridComponent } from './lib/grid/index';\nimport { TwAspectRatioComponent } from './lib/aspect-ratio/index';\nimport { TwCenterComponent, TwCircleComponent, TwSquareComponent } from './lib/center/index';\nimport { TwSpacerComponent, TwWrapComponent } from './lib/spacer/index';\nimport { TwSplitterComponent, TwSplitterPaneComponent } from './lib/splitter/index';\nimport { TwStickyComponent } from './lib/sticky/index';\nimport { TwScrollAreaComponent } from './lib/scroll-area/index';\nimport { TwColumnsComponent } from './lib/columns/index';\nimport { TwBleedComponent } from './lib/bleed/index';\nimport { TwOverlayComponent } from './lib/overlay/index';\n\nexport const TW_AVATAR_COMPONENTS = [TwAvatarComponent, TwAvatarGroupComponent] as const;\n\nexport const TW_SPINNER_COMPONENTS = [TwSpinnerComponent, TwLoadingOverlayComponent] as const;\n\nexport const TW_PROGRESS_COMPONENTS = [TwProgressComponent, TwProgressCircularComponent] as const;\n\nexport const TW_SKELETON_COMPONENTS = [\n TwSkeletonComponent,\n TwSkeletonTextComponent,\n TwSkeletonCardComponent,\n TwSkeletonTableComponent,\n] as const;\n\nexport const TW_TOAST_COMPONENTS = [TwToastComponent, TwToastContainerComponent] as const;\n\nexport const TW_BREADCRUMB_COMPONENTS = [TwBreadcrumbComponent] as const;\n\nexport const TW_PAGINATION_COMPONENTS = [TwPaginationComponent] as const;\n\nexport const TW_ACCORDION_COMPONENTS = [TwAccordionComponent, TwAccordionItemComponent] as const;\n\nexport const TW_DIVIDER_COMPONENTS = [TwDividerComponent] as const;\n\n// New component groups\nexport const TW_CHECKBOX_COMPONENTS = [TwCheckboxComponent] as const;\n\nexport const TW_RADIO_COMPONENTS = [TwRadioButtonComponent, TwRadioGroupComponent] as const;\n\nexport const TW_SWITCH_COMPONENTS = [TwSwitchComponent] as const;\n\nexport const TW_SELECT_COMPONENTS = [TwSelectComponent] as const;\n\nexport const TW_MULTISELECT_COMPONENTS = [TwMultiSelectComponent] as const;\n\nexport const TW_SLIDER_COMPONENTS = [TwSliderComponent] as const;\n\nexport const TW_RATING_COMPONENTS = [TwRatingComponent] as const;\n\nexport const TW_CHIP_COMPONENTS = [TwChipComponent, TwChipsComponent] as const;\n\nexport const TW_TABLE_COMPONENTS = [TwTableComponent] as const;\nexport const TW_DATATABLES_COMPONENTS = [TwDatatablesComponent] as const;\n\nexport const TW_TREE_COMPONENTS = [TwTreeComponent] as const;\n\nexport const TW_TIMELINE_COMPONENTS = [TwTimelineComponent] as const;\n\nexport const TW_STEPS_COMPONENTS = [TwStepsComponent] as const;\n\nexport const TW_MENU_COMPONENTS = [TwMenuComponent, TwContextMenuComponent] as const;\n\nexport const TW_SIDEBAR_COMPONENTS = [TwSidebarComponent] as const;\n\nexport const TW_POPOVER_COMPONENTS = [TwPopoverComponent] as const;\n\nexport const TW_IMAGE_COMPONENTS = [TwImageComponent] as const;\n\nexport const TW_SCROLL_TOP_COMPONENTS = [TwScrollTopComponent] as const;\n\n// New layout component groups\nexport const TW_CONTAINER_COMPONENTS = [TwContainerComponent] as const;\n\nexport const TW_STACK_COMPONENTS = [\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n] as const;\n\nexport const TW_GRID_COMPONENTS = [TwGridComponent, TwSimpleGridComponent] as const;\n\nexport const TW_ASPECT_RATIO_COMPONENTS = [TwAspectRatioComponent] as const;\n\nexport const TW_CENTER_COMPONENTS = [\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n] as const;\n\nexport const TW_SPACER_COMPONENTS = [TwSpacerComponent, TwWrapComponent] as const;\n\n// New layout component groups\nexport const TW_SPLITTER_COMPONENTS = [TwSplitterComponent, TwSplitterPaneComponent] as const;\n\nexport const TW_STICKY_COMPONENTS = [TwStickyComponent] as const;\n\nexport const TW_SCROLL_AREA_COMPONENTS = [TwScrollAreaComponent] as const;\n\nexport const TW_COLUMNS_COMPONENTS = [TwColumnsComponent] as const;\n\nexport const TW_BLEED_COMPONENTS = [TwBleedComponent] as const;\n\nexport const TW_OVERLAY_COMPONENTS = [TwOverlayComponent] as const;\n\n/**\n * All ngx-tailwindcss components and directives\n * Use this for convenience when you want to import everything\n *\n * @example\n * ```typescript\n * import { TW_ALL } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * @Component({\n * imports: [...TW_ALL],\n * })\n * export class MyComponent {}\n * ```\n */\nexport const TW_ALL = [\n ...TW_DIRECTIVES,\n // Form\n ...TW_BUTTON_COMPONENTS,\n ...TW_INPUT_COMPONENTS,\n ...TW_CHECKBOX_COMPONENTS,\n ...TW_RADIO_COMPONENTS,\n ...TW_SWITCH_COMPONENTS,\n ...TW_SELECT_COMPONENTS,\n ...TW_MULTISELECT_COMPONENTS,\n ...TW_SLIDER_COMPONENTS,\n ...TW_RATING_COMPONENTS,\n ...TW_CHIP_COMPONENTS,\n // Layout\n ...TW_CARD_COMPONENTS,\n ...TW_ACCORDION_COMPONENTS,\n ...TW_TABS_COMPONENTS,\n ...TW_DIVIDER_COMPONENTS,\n ...TW_CONTAINER_COMPONENTS,\n ...TW_STACK_COMPONENTS,\n ...TW_GRID_COMPONENTS,\n ...TW_ASPECT_RATIO_COMPONENTS,\n ...TW_CENTER_COMPONENTS,\n ...TW_SPACER_COMPONENTS,\n ...TW_SPLITTER_COMPONENTS,\n ...TW_STICKY_COMPONENTS,\n ...TW_SCROLL_AREA_COMPONENTS,\n ...TW_COLUMNS_COMPONENTS,\n ...TW_BLEED_COMPONENTS,\n ...TW_OVERLAY_COMPONENTS,\n // Data Display\n ...TW_BADGE_COMPONENTS,\n ...TW_AVATAR_COMPONENTS,\n ...TW_TABLE_COMPONENTS,\n ...TW_DATATABLES_COMPONENTS,\n ...TW_TREE_COMPONENTS,\n ...TW_TIMELINE_COMPONENTS,\n // Navigation\n ...TW_BREADCRUMB_COMPONENTS,\n ...TW_PAGINATION_COMPONENTS,\n ...TW_STEPS_COMPONENTS,\n ...TW_MENU_COMPONENTS,\n // Feedback\n ...TW_ALERT_COMPONENTS,\n ...TW_TOAST_COMPONENTS,\n ...TW_SPINNER_COMPONENTS,\n ...TW_PROGRESS_COMPONENTS,\n ...TW_SKELETON_COMPONENTS,\n // Overlay\n ...TW_MODAL_COMPONENTS,\n ...TW_DROPDOWN_COMPONENTS,\n ...TW_SIDEBAR_COMPONENTS,\n ...TW_POPOVER_COMPONENTS,\n // Media\n ...TW_IMAGE_COMPONENTS,\n // Misc\n ...TW_SCROLL_TOP_COMPONENTS,\n] as const;\n\nexport { TW_CORE_DIRECTIVES, TW_DX_DIRECTIVES } from './lib/directives/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TwRippleDirective","i1.TwClassService","TW_CONTAINER_COMPONENTS","TW_STACK_COMPONENTS","GAP_CLASSES","TW_GRID_COMPONENTS","TW_ASPECT_RATIO_COMPONENTS","TW_CENTER_COMPONENTS","TW_SPACER_COMPONENTS","TW_DATATABLES_COMPONENTS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pegasusheavy-ngx-tailwindcss.mjs","sources":["../../../projects/ngx-tailwindcss/src/lib/core/tw-config.ts","../../../projects/ngx-tailwindcss/src/lib/core/provide-tw-config.ts","../../../projects/ngx-tailwindcss/src/lib/core/theme.ts","../../../projects/ngx-tailwindcss/src/lib/core/theme.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/provide-tw-theme.ts","../../../projects/ngx-tailwindcss/src/lib/core/tw-class.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/aria.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/i18n.service.ts","../../../projects/ngx-tailwindcss/src/lib/core/index.ts","../../../projects/ngx-tailwindcss/src/lib/directives/ripple.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/tooltip.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/click-outside.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/focus-trap.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/class-merge.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/auto-focus.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/in-view.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/long-press.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/debounce-click.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/copy-clipboard.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/keyboard-shortcut.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/swipe.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/resize-observer.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/lazy-image.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/scroll-anchor.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/hover-class.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/trap-scroll.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/aria.directive.ts","../../../projects/ngx-tailwindcss/src/lib/directives/index.ts","../../../projects/ngx-tailwindcss/src/lib/button/button.component.ts","../../../projects/ngx-tailwindcss/src/lib/button/button.component.html","../../../projects/ngx-tailwindcss/src/lib/button/button-link.component.html","../../../projects/ngx-tailwindcss/src/lib/button/index.ts","../../../projects/ngx-tailwindcss/src/lib/input/input.component.ts","../../../projects/ngx-tailwindcss/src/lib/input/input.component.html","../../../projects/ngx-tailwindcss/src/lib/input/textarea.component.html","../../../projects/ngx-tailwindcss/src/lib/input/index.ts","../../../projects/ngx-tailwindcss/src/lib/checkbox/checkbox.component.ts","../../../projects/ngx-tailwindcss/src/lib/checkbox/checkbox.component.html","../../../projects/ngx-tailwindcss/src/lib/radio/radio.component.ts","../../../projects/ngx-tailwindcss/src/lib/radio/radio-button.component.html","../../../projects/ngx-tailwindcss/src/lib/radio/radio-group.component.html","../../../projects/ngx-tailwindcss/src/lib/switch/switch.component.ts","../../../projects/ngx-tailwindcss/src/lib/switch/switch.component.html","../../../projects/ngx-tailwindcss/src/lib/select/select.component.ts","../../../projects/ngx-tailwindcss/src/lib/select/select.component.html","../../../projects/ngx-tailwindcss/src/lib/multiselect/multiselect.component.ts","../../../projects/ngx-tailwindcss/src/lib/multiselect/multiselect.component.html","../../../projects/ngx-tailwindcss/src/lib/slider/slider.component.ts","../../../projects/ngx-tailwindcss/src/lib/slider/slider.component.html","../../../projects/ngx-tailwindcss/src/lib/rating/rating.component.ts","../../../projects/ngx-tailwindcss/src/lib/rating/rating.component.html","../../../projects/ngx-tailwindcss/src/lib/chip/chip.component.ts","../../../projects/ngx-tailwindcss/src/lib/chip/chip.component.html","../../../projects/ngx-tailwindcss/src/lib/card/card.component.ts","../../../projects/ngx-tailwindcss/src/lib/card/card-horizontal.component.html","../../../projects/ngx-tailwindcss/src/lib/card/index.ts","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion.component.ts","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion-item.component.html","../../../projects/ngx-tailwindcss/src/lib/accordion/accordion.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/tabs.component.ts","../../../projects/ngx-tailwindcss/src/lib/tabs/tab-panel.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/tabs.component.html","../../../projects/ngx-tailwindcss/src/lib/tabs/index.ts","../../../projects/ngx-tailwindcss/src/lib/divider/divider.component.ts","../../../projects/ngx-tailwindcss/src/lib/divider/divider.component.html","../../../projects/ngx-tailwindcss/src/lib/container/container.component.ts","../../../projects/ngx-tailwindcss/src/lib/container/index.ts","../../../projects/ngx-tailwindcss/src/lib/stack/stack.component.ts","../../../projects/ngx-tailwindcss/src/lib/stack/index.ts","../../../projects/ngx-tailwindcss/src/lib/grid/grid.component.ts","../../../projects/ngx-tailwindcss/src/lib/grid/index.ts","../../../projects/ngx-tailwindcss/src/lib/aspect-ratio/aspect-ratio.component.ts","../../../projects/ngx-tailwindcss/src/lib/aspect-ratio/index.ts","../../../projects/ngx-tailwindcss/src/lib/center/center.component.ts","../../../projects/ngx-tailwindcss/src/lib/center/index.ts","../../../projects/ngx-tailwindcss/src/lib/spacer/spacer.component.ts","../../../projects/ngx-tailwindcss/src/lib/spacer/index.ts","../../../projects/ngx-tailwindcss/src/lib/splitter/splitter.component.ts","../../../projects/ngx-tailwindcss/src/lib/sticky/sticky.component.ts","../../../projects/ngx-tailwindcss/src/lib/scroll-area/scroll-area.component.ts","../../../projects/ngx-tailwindcss/src/lib/columns/columns.component.ts","../../../projects/ngx-tailwindcss/src/lib/bleed/bleed.component.ts","../../../projects/ngx-tailwindcss/src/lib/overlay/overlay.component.ts","../../../projects/ngx-tailwindcss/src/lib/badge/badge.component.ts","../../../projects/ngx-tailwindcss/src/lib/badge/badge.component.html","../../../projects/ngx-tailwindcss/src/lib/badge/badge-group.component.html","../../../projects/ngx-tailwindcss/src/lib/badge/index.ts","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar.component.ts","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar.component.html","../../../projects/ngx-tailwindcss/src/lib/avatar/avatar-group.component.html","../../../projects/ngx-tailwindcss/src/lib/table/table.component.ts","../../../projects/ngx-tailwindcss/src/lib/table/table.component.html","../../../projects/ngx-tailwindcss/src/lib/datatables/datatable.component.ts","../../../projects/ngx-tailwindcss/src/lib/datatables/datatable.component.html","../../../projects/ngx-tailwindcss/src/lib/datatables/index.ts","../../../projects/ngx-tailwindcss/src/lib/tree/tree.component.ts","../../../projects/ngx-tailwindcss/src/lib/tree/tree.component.html","../../../projects/ngx-tailwindcss/src/lib/timeline/timeline.component.ts","../../../projects/ngx-tailwindcss/src/lib/timeline/timeline.component.html","../../../projects/ngx-tailwindcss/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/ngx-tailwindcss/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/ngx-tailwindcss/src/lib/pagination/pagination.component.ts","../../../projects/ngx-tailwindcss/src/lib/pagination/pagination.component.html","../../../projects/ngx-tailwindcss/src/lib/steps/steps.component.ts","../../../projects/ngx-tailwindcss/src/lib/steps/steps.component.html","../../../projects/ngx-tailwindcss/src/lib/menu/menu.component.ts","../../../projects/ngx-tailwindcss/src/lib/menu/menu.component.html","../../../projects/ngx-tailwindcss/src/lib/alert/alert.component.ts","../../../projects/ngx-tailwindcss/src/lib/alert/alert.component.html","../../../projects/ngx-tailwindcss/src/lib/alert/index.ts","../../../projects/ngx-tailwindcss/src/lib/toast/toast.component.ts","../../../projects/ngx-tailwindcss/src/lib/toast/toast.component.html","../../../projects/ngx-tailwindcss/src/lib/toast/toast-container.component.html","../../../projects/ngx-tailwindcss/src/lib/spinner/spinner.component.ts","../../../projects/ngx-tailwindcss/src/lib/spinner/spinner.component.html","../../../projects/ngx-tailwindcss/src/lib/spinner/loading-overlay.component.html","../../../projects/ngx-tailwindcss/src/lib/progress/progress.component.ts","../../../projects/ngx-tailwindcss/src/lib/progress/progress.component.html","../../../projects/ngx-tailwindcss/src/lib/progress/progress-circular.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton.component.ts","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-text.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-card.component.html","../../../projects/ngx-tailwindcss/src/lib/skeleton/skeleton-table.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/modal.component.ts","../../../projects/ngx-tailwindcss/src/lib/modal/modal.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/confirm-dialog.component.html","../../../projects/ngx-tailwindcss/src/lib/modal/index.ts","../../../projects/ngx-tailwindcss/src/lib/dropdown/dropdown.component.ts","../../../projects/ngx-tailwindcss/src/lib/dropdown/dropdown.component.html","../../../projects/ngx-tailwindcss/src/lib/dropdown/index.ts","../../../projects/ngx-tailwindcss/src/lib/sidebar/sidebar.component.ts","../../../projects/ngx-tailwindcss/src/lib/sidebar/sidebar.component.html","../../../projects/ngx-tailwindcss/src/lib/popover/popover.component.ts","../../../projects/ngx-tailwindcss/src/lib/popover/popover.component.html","../../../projects/ngx-tailwindcss/src/lib/image/image.component.ts","../../../projects/ngx-tailwindcss/src/lib/image/image.component.html","../../../projects/ngx-tailwindcss/src/lib/scroll-top/scroll-top.component.ts","../../../projects/ngx-tailwindcss/src/lib/scroll-top/scroll-top.component.html","../../../projects/ngx-tailwindcss/src/public-api.ts","../../../projects/ngx-tailwindcss/src/pegasusheavy-ngx-tailwindcss.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Configuration interface for ngx-tailwindcss components\n * Allows users to customize default class mappings\n */\nexport interface TwConfig {\n /** Custom class prefix for component-specific classes */\n prefix?: string;\n\n /** Theme configuration for color variants */\n theme?: TwThemeConfig;\n\n /** Default animation duration in milliseconds */\n animationDuration?: number;\n\n /** Whether to use CSS transitions or Angular animations */\n useAngularAnimations?: boolean;\n\n /** Custom class overrides for components */\n classOverrides?: TwClassOverrides;\n}\n\nexport interface TwThemeConfig {\n /** Primary color variant classes */\n primary?: string;\n /** Secondary color variant classes */\n secondary?: string;\n /** Success/positive color variant classes */\n success?: string;\n /** Warning color variant classes */\n warning?: string;\n /** Danger/error color variant classes */\n danger?: string;\n /** Info color variant classes */\n info?: string;\n /** Neutral color variant classes */\n neutral?: string;\n}\n\nexport interface TwClassOverrides {\n button?: Partial<TwButtonClassConfig>;\n card?: Partial<TwCardClassConfig>;\n input?: Partial<TwInputClassConfig>;\n badge?: Partial<TwBadgeClassConfig>;\n alert?: Partial<TwAlertClassConfig>;\n modal?: Partial<TwModalClassConfig>;\n dropdown?: Partial<TwDropdownClassConfig>;\n tabs?: Partial<TwTabsClassConfig>;\n}\n\nexport interface TwButtonClassConfig {\n base: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n disabled: string;\n loading: string;\n}\n\nexport interface TwCardClassConfig {\n base: string;\n header: string;\n body: string;\n footer: string;\n variants: Record<string, string>;\n}\n\nexport interface TwInputClassConfig {\n base: string;\n label: string;\n wrapper: string;\n error: string;\n hint: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n}\n\nexport interface TwBadgeClassConfig {\n base: string;\n variants: Record<string, string>;\n sizes: Record<string, string>;\n}\n\nexport interface TwAlertClassConfig {\n base: string;\n icon: string;\n content: string;\n dismissButton: string;\n variants: Record<string, string>;\n}\n\nexport interface TwModalClassConfig {\n overlay: string;\n container: string;\n header: string;\n body: string;\n footer: string;\n closeButton: string;\n sizes: Record<string, string>;\n}\n\nexport interface TwDropdownClassConfig {\n trigger: string;\n menu: string;\n item: string;\n itemActive: string;\n itemDisabled: string;\n divider: string;\n}\n\nexport interface TwTabsClassConfig {\n container: string;\n tabList: string;\n tab: string;\n tabActive: string;\n tabDisabled: string;\n panel: string;\n variants: Record<string, string>;\n}\n\n/**\n * Injection token for providing custom ngx-tailwindcss configuration\n */\nexport const TW_CONFIG = new InjectionToken<TwConfig>('TW_CONFIG');\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_TW_CONFIG: TwConfig = {\n prefix: 'tw',\n animationDuration: 200,\n useAngularAnimations: true,\n theme: {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white',\n secondary: 'bg-slate-600 hover:bg-slate-700 text-white',\n success: 'bg-emerald-600 hover:bg-emerald-700 text-white',\n warning: 'bg-amber-500 hover:bg-amber-600 text-white',\n danger: 'bg-rose-600 hover:bg-rose-700 text-white',\n info: 'bg-cyan-600 hover:bg-cyan-700 text-white',\n neutral: 'bg-slate-200 hover:bg-slate-300 text-slate-900',\n },\n};\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { DEFAULT_TW_CONFIG, TW_CONFIG, TwConfig } from './tw-config';\n\n/**\n * Provides ngx-tailwindcss configuration at the application level\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTwConfig({\n * theme: {\n * primary: 'bg-indigo-600 hover:bg-indigo-700 text-white',\n * },\n * animationDuration: 300,\n * }),\n * ],\n * };\n * ```\n */\nexport function provideTwConfig(config?: Partial<TwConfig>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TW_CONFIG,\n useValue: { ...DEFAULT_TW_CONFIG, ...config },\n },\n ]);\n}\n\n/**\n * Provides ngx-tailwindcss configuration as a standard provider\n * Useful for component-level configuration overrides\n */\nexport function withTwConfig(config: Partial<TwConfig>): Provider {\n return {\n provide: TW_CONFIG,\n useValue: { ...DEFAULT_TW_CONFIG, ...config },\n };\n}\n","/**\n * Theme configuration system for ngx-tailwindcss\n *\n * This module provides a CSS custom properties (CSS variables) based theming system\n * that allows users to fully customize all colors used by the library components.\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * const customTheme = createTheme({\n * colors: {\n * primary: { light: '#3b82f6', dark: '#60a5fa' },\n * background: { light: '#ffffff', dark: '#0f172a' },\n * }\n * });\n *\n * export const appConfig = {\n * providers: [provideTwTheme(customTheme)]\n * };\n * ```\n */\n\nimport { InjectionToken } from '@angular/core';\n\n/**\n * Color value that can have light and dark variants\n */\nexport interface ThemeColorValue {\n /** Color value for light mode */\n light: string;\n /** Color value for dark mode */\n dark: string;\n}\n\n/**\n * Semantic color definitions for the theme\n */\nexport interface ThemeColors {\n // Brand colors\n primary?: ThemeColorValue;\n secondary?: ThemeColorValue;\n\n // Semantic colors\n success?: ThemeColorValue;\n warning?: ThemeColorValue;\n danger?: ThemeColorValue;\n info?: ThemeColorValue;\n\n // Neutral palette\n background?: ThemeColorValue;\n surface?: ThemeColorValue;\n surfaceAlt?: ThemeColorValue;\n\n // Text colors\n textPrimary?: ThemeColorValue;\n textSecondary?: ThemeColorValue;\n textMuted?: ThemeColorValue;\n textInverse?: ThemeColorValue;\n\n // Border colors\n border?: ThemeColorValue;\n borderLight?: ThemeColorValue;\n borderFocus?: ThemeColorValue;\n\n // Interactive states\n hover?: ThemeColorValue;\n active?: ThemeColorValue;\n disabled?: ThemeColorValue;\n\n // Overlay/backdrop\n overlay?: ThemeColorValue;\n}\n\n/**\n * Component-specific theme overrides\n */\nexport interface ThemeComponentOverrides {\n button?: {\n primaryBg?: ThemeColorValue;\n primaryText?: ThemeColorValue;\n secondaryBg?: ThemeColorValue;\n secondaryText?: ThemeColorValue;\n };\n card?: {\n bg?: ThemeColorValue;\n border?: ThemeColorValue;\n shadow?: ThemeColorValue;\n };\n input?: {\n bg?: ThemeColorValue;\n border?: ThemeColorValue;\n focusBorder?: ThemeColorValue;\n placeholderText?: ThemeColorValue;\n };\n modal?: {\n overlayBg?: ThemeColorValue;\n contentBg?: ThemeColorValue;\n };\n dropdown?: {\n bg?: ThemeColorValue;\n itemHover?: ThemeColorValue;\n };\n tooltip?: {\n bg?: ThemeColorValue;\n text?: ThemeColorValue;\n };\n}\n\n/**\n * Complete theme definition\n */\nexport interface TwTheme {\n /** Theme name for identification */\n name?: string;\n\n /** Semantic color definitions */\n colors: ThemeColors;\n\n /** Component-specific overrides */\n components?: ThemeComponentOverrides;\n\n /** Additional CSS custom properties */\n customProperties?: Record<string, ThemeColorValue | string>;\n}\n\n/**\n * Injection token for the theme configuration\n */\nexport const TW_THEME = new InjectionToken<TwTheme>('TW_THEME');\n\n/**\n * Default theme colors - these are used when no custom theme is provided\n * Users can override these by providing their own theme configuration.\n *\n * Note: The library uses Tailwind's dark: variant by default.\n * These CSS variables provide an ADDITIONAL way to customize colors\n * that works alongside or instead of Tailwind classes.\n */\nexport const DEFAULT_THEME_COLORS: Required<ThemeColors> = {\n // Brand colors\n primary: { light: '#3b82f6', dark: '#60a5fa' }, // blue-500, blue-400\n secondary: { light: '#64748b', dark: '#94a3b8' }, // slate-500, slate-400\n\n // Semantic colors\n success: { light: '#10b981', dark: '#34d399' }, // emerald-500, emerald-400\n warning: { light: '#f59e0b', dark: '#fbbf24' }, // amber-500, amber-400\n danger: { light: '#ef4444', dark: '#f87171' }, // rose-500, rose-400\n info: { light: '#06b6d4', dark: '#22d3ee' }, // cyan-500, cyan-400\n\n // Neutral palette\n background: { light: '#ffffff', dark: '#0f172a' }, // white, slate-900\n surface: { light: '#ffffff', dark: '#1e293b' }, // white, slate-800\n surfaceAlt: { light: '#f8fafc', dark: '#334155' }, // slate-50, slate-700\n\n // Text colors\n textPrimary: { light: '#0f172a', dark: '#f8fafc' }, // slate-900, slate-50\n textSecondary: { light: '#475569', dark: '#94a3b8' }, // slate-600, slate-400\n textMuted: { light: '#94a3b8', dark: '#64748b' }, // slate-400, slate-500\n textInverse: { light: '#ffffff', dark: '#0f172a' }, // white, slate-900\n\n // Border colors\n border: { light: '#e2e8f0', dark: '#334155' }, // slate-200, slate-700\n borderLight: { light: '#f1f5f9', dark: '#475569' }, // slate-100, slate-600\n borderFocus: { light: '#3b82f6', dark: '#60a5fa' }, // blue-500, blue-400\n\n // Interactive states\n hover: { light: '#f1f5f9', dark: '#334155' }, // slate-100, slate-700\n active: { light: '#e2e8f0', dark: '#475569' }, // slate-200, slate-600\n disabled: { light: '#e2e8f0', dark: '#334155' }, // slate-200, slate-700\n\n // Overlay/backdrop\n overlay: { light: 'rgba(0, 0, 0, 0.5)', dark: 'rgba(0, 0, 0, 0.7)' },\n};\n\n/**\n * Default complete theme\n */\nexport const DEFAULT_THEME: TwTheme = {\n name: 'default',\n colors: DEFAULT_THEME_COLORS,\n};\n\n/**\n * Creates a theme by merging user colors with defaults\n */\nexport function createTheme(config: Partial<TwTheme>): TwTheme {\n return {\n name: config.name ?? 'custom',\n colors: {\n ...DEFAULT_THEME_COLORS,\n ...config.colors,\n },\n components: config.components,\n customProperties: config.customProperties,\n };\n}\n\n/**\n * Generates CSS custom properties from a theme\n */\nexport function generateThemeCssProperties(theme: TwTheme): {\n light: Record<string, string>;\n dark: Record<string, string>;\n} {\n const light: Record<string, string> = {};\n const dark: Record<string, string> = {};\n\n // Process colors - use --tw-color- prefix for semantic colors\n const colors = { ...DEFAULT_THEME_COLORS, ...theme.colors };\n for (const [key, value] of Object.entries(colors)) {\n if (value && typeof value === 'object' && 'light' in value) {\n const cssVar = `--tw-color-${camelToKebab(key)}`;\n light[cssVar] = value.light;\n dark[cssVar] = value.dark;\n }\n }\n\n // Process component overrides\n if (theme.components) {\n for (const [component, overrides] of Object.entries(theme.components)) {\n if (!overrides) continue;\n for (const [prop, value] of Object.entries(overrides)) {\n if (value && typeof value === 'object' && 'light' in value && 'dark' in value) {\n const colorValue = value as ThemeColorValue;\n const cssVar = `--tw-${component}-${camelToKebab(prop)}`;\n light[cssVar] = colorValue.light;\n dark[cssVar] = colorValue.dark;\n }\n }\n }\n }\n\n // Process custom properties\n if (theme.customProperties) {\n for (const [key, value] of Object.entries(theme.customProperties)) {\n const cssVar = key.startsWith('--') ? key : `--tw-${key}`;\n if (typeof value === 'string') {\n light[cssVar] = value;\n dark[cssVar] = value;\n } else if (value && typeof value === 'object' && 'light' in value) {\n light[cssVar] = value.light;\n dark[cssVar] = value.dark;\n }\n }\n }\n\n return { light, dark };\n}\n\n/**\n * Converts camelCase to kebab-case\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * CSS class names for semantic colors (for components that still want to use classes)\n * These reference the CSS custom properties and provide a theme-aware alternative\n * to Tailwind's built-in color classes.\n *\n * @example\n * ```html\n * <!-- Instead of: -->\n * <div class=\"bg-blue-500 dark:bg-blue-400\">...</div>\n *\n * <!-- Use theme-aware: -->\n * <div class=\"bg-[var(--tw-color-primary)]\">...</div>\n * ```\n */\nexport const THEME_CSS_CLASSES = {\n // Backgrounds\n bgPrimary: 'bg-[var(--tw-color-primary)]',\n bgSecondary: 'bg-[var(--tw-color-secondary)]',\n bgSuccess: 'bg-[var(--tw-color-success)]',\n bgWarning: 'bg-[var(--tw-color-warning)]',\n bgDanger: 'bg-[var(--tw-color-danger)]',\n bgInfo: 'bg-[var(--tw-color-info)]',\n bgSurface: 'bg-[var(--tw-color-surface)]',\n bgSurfaceAlt: 'bg-[var(--tw-color-surface-alt)]',\n bgBackground: 'bg-[var(--tw-color-background)]',\n\n // Text\n textPrimary: 'text-[var(--tw-color-text)]',\n textSecondary: 'text-[var(--tw-color-text-secondary)]',\n textMuted: 'text-[var(--tw-color-text-muted)]',\n textInverse: 'text-[var(--tw-color-text-inverse)]',\n\n // Borders\n borderDefault: 'border-[var(--tw-color-border)]',\n borderLight: 'border-[var(--tw-color-border-light)]',\n borderFocus: 'border-[var(--tw-color-border-focus)]',\n} as const;\n\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n DestroyRef,\n inject,\n Injectable,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport {\n DEFAULT_THEME,\n generateThemeCssProperties,\n TW_THEME,\n TwTheme,\n} from './theme';\n\nexport type ColorMode = 'light' | 'dark' | 'system';\n\n/**\n * Service for managing the library theme and color mode\n *\n * This service:\n * - Applies CSS custom properties for theme colors\n * - Manages light/dark mode switching\n * - Persists color mode preference to localStorage\n * - Respects system color scheme preferences\n *\n * @example\n * ```typescript\n * // In a component\n * export class MyComponent {\n * private themeService = inject(TwThemeService);\n *\n * toggleDarkMode() {\n * this.themeService.setColorMode(\n * this.themeService.colorMode() === 'dark' ? 'light' : 'dark'\n * );\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class TwThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injectedTheme = inject(TW_THEME, { optional: true });\n\n private readonly STORAGE_KEY = 'tw-color-mode';\n private mediaQuery: MediaQueryList | null = null;\n\n /** Current theme configuration */\n public readonly theme = signal<TwTheme>(this.injectedTheme ?? DEFAULT_THEME);\n\n /** Current color mode setting (light, dark, or system) */\n public readonly colorMode = signal<ColorMode>('system');\n\n /** Resolved color mode (actual light or dark, resolving 'system' to its value) */\n public readonly resolvedColorMode = signal<'light' | 'dark'>('light');\n\n /** Whether dark mode is currently active */\n public readonly isDark = signal<boolean>(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.initialize();\n }\n }\n\n /**\n * Initializes the theme service\n */\n private initialize(): void {\n // Load saved color mode preference\n const savedMode = this.getSavedColorMode();\n if (savedMode) {\n this.colorMode.set(savedMode);\n }\n\n // Set up system preference detection\n this.setupSystemPreferenceListener();\n\n // Apply the theme\n this.applyTheme();\n this.updateColorMode();\n }\n\n /**\n * Sets up listener for system color scheme changes\n */\n private setupSystemPreferenceListener(): void {\n if (typeof window === 'undefined') return;\n\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n fromEvent<MediaQueryListEvent>(this.mediaQuery, 'change')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.colorMode() === 'system') {\n this.updateColorMode();\n }\n });\n }\n\n /**\n * Gets the saved color mode from localStorage\n */\n private getSavedColorMode(): ColorMode | null {\n if (typeof localStorage === 'undefined') return null;\n\n const saved = localStorage.getItem(this.STORAGE_KEY);\n if (saved === 'light' || saved === 'dark' || saved === 'system') {\n return saved;\n }\n return null;\n }\n\n /**\n * Sets the color mode\n */\n public setColorMode(mode: ColorMode): void {\n this.colorMode.set(mode);\n\n if (isPlatformBrowser(this.platformId)) {\n localStorage.setItem(this.STORAGE_KEY, mode);\n }\n\n this.updateColorMode();\n }\n\n /**\n * Cycles through color modes: light -> dark -> system -> light\n */\n public cycleColorMode(): void {\n const current = this.colorMode();\n const next: ColorMode =\n current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n this.setColorMode(next);\n }\n\n /**\n * Updates the resolved color mode based on current setting\n */\n private updateColorMode(): void {\n const mode = this.colorMode();\n let resolved: 'light' | 'dark';\n\n if (mode === 'system') {\n resolved = this.mediaQuery?.matches ? 'dark' : 'light';\n } else {\n resolved = mode;\n }\n\n this.resolvedColorMode.set(resolved);\n this.isDark.set(resolved === 'dark');\n\n // Update document class for Tailwind dark mode\n const html = this.document.documentElement;\n if (resolved === 'dark') {\n html.classList.add('dark');\n } else {\n html.classList.remove('dark');\n }\n\n // Apply theme colors for the resolved mode\n this.applyThemeColors(resolved);\n }\n\n /**\n * Sets a new theme configuration\n */\n public setTheme(theme: TwTheme): void {\n this.theme.set(theme);\n this.applyTheme();\n }\n\n /**\n * Applies the current theme's CSS custom properties\n */\n private applyTheme(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n this.applyThemeColors(this.resolvedColorMode());\n }\n\n /**\n * Applies theme colors for a specific color mode\n */\n private applyThemeColors(mode: 'light' | 'dark'): void {\n const theme = this.theme();\n const cssProps = generateThemeCssProperties(theme);\n const properties = mode === 'dark' ? cssProps.dark : cssProps.light;\n\n const root = this.document.documentElement;\n for (const [prop, value] of Object.entries(properties)) {\n root.style.setProperty(prop, value);\n }\n }\n\n /**\n * Gets the current value of a theme color\n */\n public getColor(\n colorName: keyof TwTheme['colors'],\n mode?: 'light' | 'dark'\n ): string {\n const theme = this.theme();\n const colorValue = theme.colors[colorName];\n if (!colorValue) return '';\n\n const resolvedMode = mode ?? this.resolvedColorMode();\n return resolvedMode === 'dark' ? colorValue.dark : colorValue.light;\n }\n\n /**\n * Gets the CSS variable name for a theme color\n */\n public getCssVar(colorName: string): string {\n const kebabName = colorName\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .toLowerCase();\n return `var(--tw-color-${kebabName})`;\n }\n\n /**\n * Gets the CSS variable reference for use in Tailwind arbitrary values\n * @example 'bg-[var(--tw-color-primary)]'\n */\n public getTailwindClass(\n property: 'bg' | 'text' | 'border' | 'ring',\n colorName: string\n ): string {\n return `${property}-[${this.getCssVar(colorName)}]`;\n }\n}\n\n","import {\n APP_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n Provider,\n} from '@angular/core';\nimport { DEFAULT_THEME, TW_THEME, TwTheme } from './theme';\nimport { TwThemeService } from './theme.service';\n\n/**\n * Provides ngx-tailwindcss theme configuration at the application level\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * const myTheme = createTheme({\n * colors: {\n * primary: { light: '#6366f1', dark: '#818cf8' },\n * secondary: { light: '#ec4899', dark: '#f472b6' },\n * }\n * });\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTwTheme(myTheme),\n * ],\n * };\n * ```\n */\nexport function provideTwTheme(theme?: TwTheme): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: TW_THEME,\n useValue: theme ?? DEFAULT_THEME,\n },\n // Initialize the theme service on app startup\n {\n provide: APP_INITIALIZER,\n useFactory: () => {\n const themeService = inject(TwThemeService);\n return () => {\n // The service initializes itself in the constructor\n // This just ensures it's created at app startup\n return Promise.resolve();\n };\n },\n multi: true,\n },\n ]);\n}\n\n/**\n * Provides theme configuration as a standard provider\n * Useful for lazy-loaded modules or component-level overrides\n */\nexport function withTwTheme(theme: TwTheme): Provider[] {\n return [\n {\n provide: TW_THEME,\n useValue: theme,\n },\n ];\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { DEFAULT_TW_CONFIG, TW_CONFIG, TwConfig } from './tw-config';\n\n/**\n * Service for managing Tailwind CSS classes with conflict resolution\n * Uses a lightweight approach similar to tailwind-merge\n */\n@Injectable({ providedIn: 'root' })\nexport class TwClassService {\n private readonly config: TwConfig;\n\n constructor() {\n const injectedConfig = inject(TW_CONFIG, { optional: true });\n this.config = { ...DEFAULT_TW_CONFIG, ...injectedConfig };\n }\n\n /**\n * Merges multiple class strings, handling Tailwind class conflicts\n * Later classes override earlier ones for the same utility\n */\n merge(...classes: Array<string | undefined | null | false>): string {\n const classMap = new Map<string, string>();\n\n for (const classString of classes) {\n if (!classString) continue;\n\n const classList = classString.split(/\\s+/).filter(Boolean);\n\n for (const cls of classList) {\n const group = this.getClassGroup(cls);\n classMap.set(group, cls);\n }\n }\n\n return [...classMap.values()].join(' ');\n }\n\n /**\n * Conditionally applies classes based on a condition map\n */\n conditional(baseClasses: string, conditionals: Record<string, boolean | undefined>): string {\n const activeClasses = Object.entries(conditionals)\n .filter(([, condition]) => condition)\n .map(([classes]) => classes);\n\n return this.merge(baseClasses, ...activeClasses);\n }\n\n /**\n * Gets the variant classes for a given variant name\n */\n getVariantClasses(variant: string): string {\n return this.config.theme?.[variant as keyof typeof this.config.theme] ?? '';\n }\n\n /**\n * Determines the class group for conflict resolution\n */\n private getClassGroup(cls: string): string {\n // Handle responsive/state prefixes\n const parts = cls.split(':');\n const baseClass = parts.at(-1) ?? cls;\n const prefix = parts.slice(0, -1).join(':');\n\n // Group patterns for common Tailwind utilities\n const groupPatterns: Array<[RegExp, string]> = [\n // Layout\n [\n /^(block|inline|inline-block|flex|inline-flex|grid|inline-grid|hidden|contents|flow-root)$/,\n 'display',\n ],\n [/^(static|fixed|absolute|relative|sticky)$/, 'position'],\n [/^(visible|invisible|collapse)$/, 'visibility'],\n [/^overflow-/, 'overflow'],\n [/^z-/, 'z-index'],\n\n // Flexbox & Grid\n [/^flex-/, 'flex'],\n [/^(grow|shrink)-?/, 'flex-grow-shrink'],\n [/^basis-/, 'flex-basis'],\n [/^justify-/, 'justify'],\n [/^items-/, 'items'],\n [/^self-/, 'self'],\n [/^content-/, 'content'],\n [/^place-/, 'place'],\n [/^gap-/, 'gap'],\n [/^(grid-cols|col-span|col-start|col-end)-/, 'grid-cols'],\n [/^(grid-rows|row-span|row-start|row-end)-/, 'grid-rows'],\n\n // Spacing - each direction is a separate group\n [/^px-/, 'padding-x'],\n [/^py-/, 'padding-y'],\n [/^pt-/, 'padding-top'],\n [/^pr-/, 'padding-right'],\n [/^pb-/, 'padding-bottom'],\n [/^pl-/, 'padding-left'],\n [/^p-/, 'padding'],\n [/^mx-/, 'margin-x'],\n [/^my-/, 'margin-y'],\n [/^mt-/, 'margin-top'],\n [/^mr-/, 'margin-right'],\n [/^mb-/, 'margin-bottom'],\n [/^ml-/, 'margin-left'],\n [/^m-/, 'margin'],\n [/^space-x-/, 'space-x'],\n [/^space-y-/, 'space-y'],\n\n // Sizing\n [/^w-/, 'width'],\n [/^min-w-/, 'min-width'],\n [/^max-w-/, 'max-width'],\n [/^h-/, 'height'],\n [/^min-h-/, 'min-height'],\n [/^max-h-/, 'max-height'],\n [/^size-/, 'size'],\n\n // Typography\n [/^text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)/, 'font-size'],\n [/^text-(left|center|right|justify|start|end)$/, 'text-align'],\n [/^text-/, 'text-color'],\n [/^font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)$/, 'font-weight'],\n [/^font-/, 'font-family'],\n [/^leading-/, 'line-height'],\n [/^tracking-/, 'letter-spacing'],\n [/^(uppercase|lowercase|capitalize|normal-case)$/, 'text-transform'],\n [/^(underline|overline|line-through|no-underline)$/, 'text-decoration'],\n [/^(truncate|text-ellipsis|text-clip)$/, 'text-overflow'],\n [/^(whitespace|break)-/, 'whitespace'],\n\n // Backgrounds\n [/^bg-/, 'background'],\n [/^from-/, 'gradient-from'],\n [/^via-/, 'gradient-via'],\n [/^to-/, 'gradient-to'],\n\n // Borders\n [/^border($|-[blrtxy]?-?\\d|-(solid|dashed|dotted|double|hidden|none))/, 'border-width'],\n [/^border-/, 'border-color'],\n [/^rounded(-|$)/, 'border-radius'],\n [/^ring-/, 'ring'],\n\n // Effects\n [/^shadow(-|$)/, 'shadow'],\n [/^opacity-/, 'opacity'],\n [/^blur(-|$)/, 'blur'],\n\n // Transitions & Animation\n [/^transition(-|$)/, 'transition'],\n [/^duration-/, 'duration'],\n [/^ease-/, 'ease'],\n [/^delay-/, 'delay'],\n [/^animate-/, 'animate'],\n\n // Transforms\n [/^scale-/, 'scale'],\n [/^rotate-/, 'rotate'],\n [/^translate-/, 'translate'],\n [/^skew-/, 'skew'],\n [/^origin-/, 'transform-origin'],\n\n // Interactivity\n [/^cursor-/, 'cursor'],\n [/^(pointer-events|select|resize|scroll)-/, 'interactivity'],\n [/^(outline|ring)-/, 'outline-ring'],\n ];\n\n for (const [pattern, group] of groupPatterns) {\n if (pattern.test(baseClass)) {\n return prefix ? `${prefix}:${group}` : group;\n }\n }\n\n // Return the full class as its own group if no pattern matches\n return cls;\n }\n\n /**\n * Creates a class string from an array of class names\n */\n join(...classes: Array<string | undefined | null | false>): string {\n return classes.filter(Boolean).join(' ');\n }\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Service for managing ARIA live regions and announcements for screen readers.\n * Provides utilities for making dynamic content accessible.\n */\n@Injectable({ providedIn: 'root' })\nexport class TwAriaService {\n private readonly document = inject(DOCUMENT);\n private liveRegion: HTMLElement | null = null;\n private assertiveRegion: HTMLElement | null = null;\n\n private readonly announceQueue = signal<string[]>([]);\n private readonly isProcessing = signal(false);\n\n /**\n * Announce a message to screen readers using a polite live region.\n * Messages are queued and announced sequentially.\n */\n announce(message: string, delay = 100): void {\n this.announceQueue.update(queue => [...queue, message]);\n this.processQueue(delay);\n }\n\n /**\n * Announce an urgent message to screen readers using an assertive live region.\n * This interrupts the current speech.\n */\n announceAssertive(message: string): void {\n this.ensureAssertiveRegion();\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = '';\n setTimeout(() => {\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = message;\n }\n }, 50);\n }\n }\n\n /**\n * Clear any pending announcements.\n */\n clearAnnouncements(): void {\n this.announceQueue.set([]);\n if (this.liveRegion) {\n this.liveRegion.textContent = '';\n }\n if (this.assertiveRegion) {\n this.assertiveRegion.textContent = '';\n }\n }\n\n private processQueue(delay: number): void {\n if (this.isProcessing()) return;\n\n this.isProcessing.set(true);\n this.ensureLiveRegion();\n\n const process = () => {\n const queue = this.announceQueue();\n if (queue.length === 0) {\n this.isProcessing.set(false);\n return;\n }\n\n const [message, ...rest] = queue;\n this.announceQueue.set(rest);\n\n if (this.liveRegion) {\n this.liveRegion.textContent = '';\n setTimeout(() => {\n if (this.liveRegion) {\n this.liveRegion.textContent = message;\n }\n setTimeout(process, delay + 500);\n }, 50);\n }\n };\n\n setTimeout(process, delay);\n }\n\n private ensureLiveRegion(): void {\n if (this.liveRegion) return;\n\n this.liveRegion = this.document.createElement('div');\n this.liveRegion.setAttribute('aria-live', 'polite');\n this.liveRegion.setAttribute('aria-atomic', 'true');\n this.liveRegion.setAttribute('role', 'status');\n this.applyScreenReaderOnlyStyles(this.liveRegion);\n this.document.body.append(this.liveRegion);\n }\n\n private ensureAssertiveRegion(): void {\n if (this.assertiveRegion) return;\n\n this.assertiveRegion = this.document.createElement('div');\n this.assertiveRegion.setAttribute('aria-live', 'assertive');\n this.assertiveRegion.setAttribute('aria-atomic', 'true');\n this.assertiveRegion.setAttribute('role', 'alert');\n this.applyScreenReaderOnlyStyles(this.assertiveRegion);\n this.document.body.append(this.assertiveRegion);\n }\n\n private applyScreenReaderOnlyStyles(element: HTMLElement): void {\n Object.assign(element.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n }\n}\n\n/**\n * Utility functions for generating ARIA attributes.\n */\nexport const AriaUtils = {\n /**\n * Generate a unique ID for ARIA relationships.\n */\n generateId(prefix = 'tw'): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n },\n\n /**\n * Create ARIA describedby value from multiple IDs.\n */\n describedBy(...ids: Array<string | null | undefined>): string | null {\n const validIds = ids.filter(Boolean);\n return validIds.length > 0 ? validIds.join(' ') : null;\n },\n\n /**\n * Create ARIA labelledby value from multiple IDs.\n */\n labelledBy(...ids: Array<string | null | undefined>): string | null {\n const validIds = ids.filter(Boolean);\n return validIds.length > 0 ? validIds.join(' ') : null;\n },\n\n /**\n * Get appropriate role for a component based on context.\n */\n getRole(component: string, context?: string): string {\n const roles: Record<string, Record<string, string>> = {\n button: { default: 'button', menu: 'menuitem', toolbar: 'button' },\n alert: { default: 'alert', status: 'status' },\n dialog: { default: 'dialog', alert: 'alertdialog' },\n tab: { default: 'tab' },\n tabpanel: { default: 'tabpanel' },\n tablist: { default: 'tablist' },\n menu: { default: 'menu', menubar: 'menubar' },\n menuitem: { default: 'menuitem', checkbox: 'menuitemcheckbox', radio: 'menuitemradio' },\n listbox: { default: 'listbox' },\n option: { default: 'option' },\n tree: { default: 'tree' },\n treeitem: { default: 'treeitem' },\n grid: { default: 'grid', treegrid: 'treegrid' },\n row: { default: 'row' },\n cell: {\n default: 'cell',\n gridcell: 'gridcell',\n columnheader: 'columnheader',\n rowheader: 'rowheader',\n },\n progressbar: { default: 'progressbar' },\n slider: { default: 'slider' },\n spinbutton: { default: 'spinbutton' },\n switch: { default: 'switch' },\n tooltip: { default: 'tooltip' },\n navigation: { default: 'navigation' },\n region: { default: 'region' },\n search: { default: 'search' },\n form: { default: 'form' },\n banner: { default: 'banner' },\n complementary: { default: 'complementary' },\n contentinfo: { default: 'contentinfo' },\n main: { default: 'main' },\n };\n\n const componentRoles = roles[component];\n if (!componentRoles) return component;\n\n return componentRoles[context || 'default'] || componentRoles['default'];\n },\n};\n","import {\n computed,\n effect,\n inject,\n Injectable,\n InjectionToken,\n LOCALE_ID,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * Default translations for the component library.\n */\nexport interface TwTranslations {\n // Common\n common: {\n loading: string;\n close: string;\n cancel: string;\n confirm: string;\n save: string;\n delete: string;\n edit: string;\n add: string;\n remove: string;\n search: string;\n clear: string;\n select: string;\n selectAll: string;\n deselectAll: string;\n noResults: string;\n noData: string;\n error: string;\n success: string;\n warning: string;\n info: string;\n required: string;\n optional: string;\n show: string;\n hide: string;\n expand: string;\n collapse: string;\n more: string;\n less: string;\n yes: string;\n no: string;\n ok: string;\n retry: string;\n back: string;\n next: string;\n previous: string;\n first: string;\n last: string;\n of: string;\n to: string;\n from: string;\n };\n\n // Components\n button: {\n loading: string;\n };\n\n input: {\n placeholder: string;\n clearInput: string;\n showPassword: string;\n hidePassword: string;\n characterCount: string;\n maxCharacters: string;\n };\n\n select: {\n placeholder: string;\n noOptions: string;\n searchPlaceholder: string;\n clearSelection: string;\n selectOption: string;\n optionsAvailable: string;\n };\n\n modal: {\n close: string;\n closeModal: string;\n };\n\n alert: {\n dismiss: string;\n dismissAlert: string;\n };\n\n toast: {\n dismiss: string;\n dismissToast: string;\n };\n\n table: {\n noData: string;\n loading: string;\n sortAscending: string;\n sortDescending: string;\n sortNone: string;\n rowsPerPage: string;\n pageOf: string;\n firstPage: string;\n lastPage: string;\n nextPage: string;\n previousPage: string;\n selectedRows: string;\n selectRow: string;\n selectAllRows: string;\n };\n\n pagination: {\n page: string;\n of: string;\n goToPage: string;\n firstPage: string;\n lastPage: string;\n nextPage: string;\n previousPage: string;\n };\n\n datepicker: {\n selectDate: string;\n selectTime: string;\n today: string;\n clear: string;\n previousMonth: string;\n nextMonth: string;\n previousYear: string;\n nextYear: string;\n months: string[];\n monthsShort: string[];\n weekdays: string[];\n weekdaysShort: string[];\n weekdaysMin: string[];\n };\n\n timepicker: {\n selectTime: string;\n hour: string;\n minute: string;\n second: string;\n am: string;\n pm: string;\n };\n\n upload: {\n dragDrop: string;\n browse: string;\n or: string;\n maxFileSize: string;\n allowedTypes: string;\n uploading: string;\n uploadComplete: string;\n uploadFailed: string;\n removeFile: string;\n };\n\n tree: {\n expand: string;\n collapse: string;\n expandAll: string;\n collapseAll: string;\n };\n\n accordion: {\n expand: string;\n collapse: string;\n };\n\n tabs: {\n selectTab: string;\n };\n\n slider: {\n value: string;\n minValue: string;\n maxValue: string;\n };\n\n rating: {\n rating: string;\n outOf: string;\n clear: string;\n };\n\n stepper: {\n step: string;\n of: string;\n completed: string;\n current: string;\n upcoming: string;\n };\n\n avatar: {\n image: string;\n status: string;\n online: string;\n offline: string;\n away: string;\n busy: string;\n };\n\n chip: {\n remove: string;\n removeChip: string;\n };\n\n dropdown: {\n open: string;\n close: string;\n selectOption: string;\n };\n\n popover: {\n close: string;\n };\n\n sidebar: {\n open: string;\n close: string;\n navigation: string;\n };\n\n progress: {\n progress: string;\n complete: string;\n percent: string;\n };\n\n spinner: {\n loading: string;\n };\n\n skeleton: {\n loading: string;\n };\n\n breadcrumb: {\n navigation: string;\n currentPage: string;\n };\n\n menu: {\n menu: string;\n submenu: string;\n };\n\n timeline: {\n timeline: string;\n event: string;\n };\n\n image: {\n loading: string;\n error: string;\n preview: string;\n closePreview: string;\n zoomIn: string;\n zoomOut: string;\n };\n}\n\n/**\n * Default English translations.\n */\nexport const TW_DEFAULT_TRANSLATIONS: TwTranslations = {\n common: {\n loading: 'Loading...',\n close: 'Close',\n cancel: 'Cancel',\n confirm: 'Confirm',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n clear: 'Clear',\n select: 'Select',\n selectAll: 'Select all',\n deselectAll: 'Deselect all',\n noResults: 'No results found',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n required: 'Required',\n optional: 'Optional',\n show: 'Show',\n hide: 'Hide',\n expand: 'Expand',\n collapse: 'Collapse',\n more: 'More',\n less: 'Less',\n yes: 'Yes',\n no: 'No',\n ok: 'OK',\n retry: 'Retry',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n first: 'First',\n last: 'Last',\n of: 'of',\n to: 'to',\n from: 'from',\n },\n\n button: {\n loading: 'Loading, please wait',\n },\n\n input: {\n placeholder: 'Enter value',\n clearInput: 'Clear input',\n showPassword: 'Show password',\n hidePassword: 'Hide password',\n characterCount: '{count} characters',\n maxCharacters: '{count} of {max} characters',\n },\n\n select: {\n placeholder: 'Select an option',\n noOptions: 'No options available',\n searchPlaceholder: 'Search...',\n clearSelection: 'Clear selection',\n selectOption: 'Select option',\n optionsAvailable: '{count} options available',\n },\n\n modal: {\n close: 'Close',\n closeModal: 'Close modal dialog',\n },\n\n alert: {\n dismiss: 'Dismiss',\n dismissAlert: 'Dismiss alert',\n },\n\n toast: {\n dismiss: 'Dismiss',\n dismissToast: 'Dismiss notification',\n },\n\n table: {\n noData: 'No data available',\n loading: 'Loading data...',\n sortAscending: 'Sort ascending',\n sortDescending: 'Sort descending',\n sortNone: 'No sorting',\n rowsPerPage: 'Rows per page',\n pageOf: 'Page {page} of {total}',\n firstPage: 'Go to first page',\n lastPage: 'Go to last page',\n nextPage: 'Go to next page',\n previousPage: 'Go to previous page',\n selectedRows: '{count} row(s) selected',\n selectRow: 'Select row',\n selectAllRows: 'Select all rows',\n },\n\n pagination: {\n page: 'Page',\n of: 'of',\n goToPage: 'Go to page {page}',\n firstPage: 'Go to first page',\n lastPage: 'Go to last page',\n nextPage: 'Go to next page',\n previousPage: 'Go to previous page',\n },\n\n datepicker: {\n selectDate: 'Select date',\n selectTime: 'Select time',\n today: 'Today',\n clear: 'Clear',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n previousYear: 'Previous year',\n nextYear: 'Next year',\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n monthsShort: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n },\n\n timepicker: {\n selectTime: 'Select time',\n hour: 'Hour',\n minute: 'Minute',\n second: 'Second',\n am: 'AM',\n pm: 'PM',\n },\n\n upload: {\n dragDrop: 'Drag and drop files here',\n browse: 'Browse',\n or: 'or',\n maxFileSize: 'Maximum file size: {size}',\n allowedTypes: 'Allowed types: {types}',\n uploading: 'Uploading...',\n uploadComplete: 'Upload complete',\n uploadFailed: 'Upload failed',\n removeFile: 'Remove file',\n },\n\n tree: {\n expand: 'Expand',\n collapse: 'Collapse',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n },\n\n accordion: {\n expand: 'Expand section',\n collapse: 'Collapse section',\n },\n\n tabs: {\n selectTab: 'Select {tab} tab',\n },\n\n slider: {\n value: 'Value: {value}',\n minValue: 'Minimum value: {value}',\n maxValue: 'Maximum value: {value}',\n },\n\n rating: {\n rating: 'Rating',\n outOf: 'out of {max}',\n clear: 'Clear rating',\n },\n\n stepper: {\n step: 'Step {current}',\n of: 'of {total}',\n completed: 'Completed',\n current: 'Current',\n upcoming: 'Upcoming',\n },\n\n avatar: {\n image: 'Avatar image',\n status: 'Status',\n online: 'Online',\n offline: 'Offline',\n away: 'Away',\n busy: 'Busy',\n },\n\n chip: {\n remove: 'Remove',\n removeChip: 'Remove {label}',\n },\n\n dropdown: {\n open: 'Open menu',\n close: 'Close menu',\n selectOption: 'Select option',\n },\n\n popover: {\n close: 'Close popover',\n },\n\n sidebar: {\n open: 'Open sidebar',\n close: 'Close sidebar',\n navigation: 'Navigation',\n },\n\n progress: {\n progress: 'Progress',\n complete: 'Complete',\n percent: '{value}% complete',\n },\n\n spinner: {\n loading: 'Loading',\n },\n\n skeleton: {\n loading: 'Loading content',\n },\n\n breadcrumb: {\n navigation: 'Breadcrumb navigation',\n currentPage: 'Current page',\n },\n\n menu: {\n menu: 'Menu',\n submenu: 'Submenu',\n },\n\n timeline: {\n timeline: 'Timeline',\n event: 'Event',\n },\n\n image: {\n loading: 'Loading image',\n error: 'Failed to load image',\n preview: 'Preview image',\n closePreview: 'Close preview',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n },\n};\n\n/**\n * Injection token for providing custom translations.\n */\nexport const TW_TRANSLATIONS = new InjectionToken<Partial<TwTranslations>>('TW_TRANSLATIONS');\n\n/**\n * Injection token for the current locale.\n */\nexport const TW_LOCALE = new InjectionToken<string>('TW_LOCALE');\n\n/**\n * RTL language codes.\n */\nconst RTL_LANGUAGES = new Set(['ar', 'he', 'fa', 'ur', 'ps', 'sd', 'yi', 'dv']);\n\n/**\n * Service for internationalization and localization.\n */\n@Injectable({ providedIn: 'root' })\nexport class TwI18nService {\n private readonly document = inject(DOCUMENT);\n private readonly customTranslations = signal<Partial<TwTranslations> | null>(null);\n private readonly _locale = signal<string>('en');\n private readonly _direction = signal<'ltr' | 'rtl'>('ltr');\n\n /** Current locale */\n readonly locale = this._locale.asReadonly();\n\n /** Current text direction (ltr or rtl) */\n readonly direction = this._direction.asReadonly();\n\n /** Whether the current locale is RTL */\n readonly isRtl = computed(() => this._direction() === 'rtl');\n\n /** Current translations merged with defaults */\n readonly translations = computed(() => {\n const custom = this.customTranslations();\n if (!custom) return TW_DEFAULT_TRANSLATIONS;\n\n return this.deepMerge(\n TW_DEFAULT_TRANSLATIONS as unknown as Record<string, unknown>,\n custom as unknown as Record<string, unknown>\n ) as unknown as TwTranslations;\n });\n\n constructor() {\n // Try to detect locale from Angular's LOCALE_ID or browser\n try {\n const localeId = inject(LOCALE_ID, { optional: true });\n if (localeId) {\n this.setLocale(localeId);\n }\n } catch {\n // Use browser locale if available\n if (typeof navigator !== 'undefined') {\n this.setLocale(navigator.language || 'en');\n }\n }\n\n // Try to inject custom translations\n try {\n const customTranslations = inject(TW_TRANSLATIONS, { optional: true });\n if (customTranslations) {\n this.customTranslations.set(customTranslations);\n }\n } catch {\n // No custom translations provided\n }\n\n // Update document direction when direction changes\n effect(() => {\n const dir = this._direction();\n if (this.document.documentElement) {\n this.document.documentElement.setAttribute('dir', dir);\n }\n });\n }\n\n /**\n * Set the current locale.\n */\n setLocale(locale: string): void {\n this._locale.set(locale);\n const langCode = locale.split('-')[0].toLowerCase();\n this._direction.set(RTL_LANGUAGES.has(langCode) ? 'rtl' : 'ltr');\n }\n\n /**\n * Set custom translations (merged with defaults).\n */\n setTranslations(translations: Partial<TwTranslations>): void {\n this.customTranslations.set(translations);\n }\n\n /**\n * Get a translation string with optional interpolation.\n */\n translate(key: string, params?: Record<string, string | number>): string {\n const keys = key.split('.');\n let value: unknown = this.translations();\n\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = (value as Record<string, unknown>)[k];\n } else {\n return key; // Return key if translation not found\n }\n }\n\n if (typeof value !== 'string') {\n return key;\n }\n\n // Interpolate parameters\n if (params) {\n return value.replaceAll(/{(\\w+)}/g, (_, paramKey) => {\n return params[paramKey]?.toString() ?? `{${paramKey}}`;\n });\n }\n\n return value;\n }\n\n /**\n * Shorthand for translate().\n */\n t(key: string, params?: Record<string, string | number>): string {\n return this.translate(key, params);\n }\n\n /**\n * Get all translations for a component.\n */\n getComponentTranslations<K extends keyof TwTranslations>(component: K): TwTranslations[K] {\n return this.translations()[component];\n }\n\n private deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n result[key] = this.deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n );\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Provider function for custom translations.\n */\nexport function provideTwTranslations(translations: Partial<TwTranslations>) {\n return {\n provide: TW_TRANSLATIONS,\n useValue: translations,\n };\n}\n\n/**\n * Provider function for setting the locale.\n */\nexport function provideTwLocale(locale: string) {\n return {\n provide: TW_LOCALE,\n useValue: locale,\n };\n}\n","// Configuration\nexport * from './tw-config';\nexport * from './provide-tw-config';\n\n// Theme System\nexport * from './theme';\nexport * from './theme.service';\nexport * from './provide-tw-theme';\n\n// Services\nexport * from './tw-class.service';\nexport * from './aria.service';\nexport * from './i18n.service';\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Adds a material-design style ripple effect to any element\n *\n * @example\n * ```html\n * <button twRipple>Click me</button>\n * <button twRipple [rippleColor]=\"'rgba(255,255,255,0.3)'\">Light ripple</button>\n * <button twRipple [rippleDisabled]=\"isDisabled\">Conditional</button>\n * ```\n */\n@Directive({\n selector: '[twRipple]',\n standalone: true,\n host: {\n style: 'position: relative; overflow: hidden;',\n },\n})\nexport class TwRippleDirective implements OnDestroy, AfterViewInit {\n private readonly el: ElementRef;\n private readonly renderer: Renderer2;\n\n /** Color of the ripple effect */\n @Input() rippleColor = 'rgba(255, 255, 255, 0.4)';\n\n /** Duration of the ripple animation in milliseconds */\n @Input() rippleDuration = 600;\n\n /** Whether the ripple effect is disabled */\n @Input({ transform: booleanAttribute }) rippleDisabled = false;\n\n /** Whether to center the ripple regardless of click position */\n @Input({ transform: booleanAttribute }) rippleCentered = false;\n\n private readonly activeRipples: HTMLElement[] = [];\n private initialized = false;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n }\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n onInteraction(event: MouseEvent | TouchEvent): void {\n if (this.rippleDisabled || !this.initialized) return;\n\n this.createRipple(event);\n }\n\n private createRipple(event: MouseEvent | TouchEvent): void {\n const el = this.el.nativeElement as HTMLElement;\n const rect = el.getBoundingClientRect();\n\n const ripple = this.renderer.createElement('span');\n\n // Calculate ripple size (should cover the entire element with some margin)\n const diameter = Math.max(rect.width, rect.height);\n const size = diameter * 2.5;\n\n // Calculate position\n let x: number;\n let y: number;\n\n if (this.rippleCentered) {\n x = rect.width / 2;\n y = rect.height / 2;\n } else if (event instanceof MouseEvent) {\n x = event.clientX - rect.left;\n y = event.clientY - rect.top;\n } else if (event.touches && event.touches[0]) {\n x = event.touches[0].clientX - rect.left;\n y = event.touches[0].clientY - rect.top;\n } else {\n x = rect.width / 2;\n y = rect.height / 2;\n }\n\n // Apply styles - use inline styles for maximum compatibility\n ripple.style.cssText = `\n position: absolute;\n border-radius: 50%;\n background-color: ${this.rippleColor};\n width: ${size}px;\n height: ${size}px;\n left: ${x - size / 2}px;\n top: ${y - size / 2}px;\n transform: scale(0);\n opacity: 0.6;\n pointer-events: none;\n z-index: 0;\n `;\n\n this.renderer.appendChild(el, ripple);\n this.activeRipples.push(ripple);\n\n // Trigger animation using Web Animations API for smoother animation\n const animation = ripple.animate(\n [\n { transform: 'scale(0)', opacity: 0.6 },\n { transform: 'scale(1)', opacity: 0 },\n ],\n {\n duration: this.rippleDuration,\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n fill: 'forwards',\n }\n );\n\n // Remove ripple after animation\n animation.onfinish = () => {\n this.removeRipple(ripple);\n };\n }\n\n private removeRipple(ripple: HTMLElement): void {\n const index = this.activeRipples.indexOf(ripple);\n if (index > -1) {\n this.activeRipples.splice(index, 1);\n }\n\n if (ripple.parentNode) {\n this.renderer.removeChild(this.el.nativeElement, ripple);\n }\n }\n\n ngOnDestroy(): void {\n this.activeRipples.forEach(ripple => {\n this.removeRipple(ripple);\n });\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n numberAttribute,\n OnChanges,\n OnDestroy,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Adds a tooltip to any element with customizable position and styling\n *\n * @example\n * ```html\n * <button twTooltip=\"Click to save\">Save</button>\n * <button twTooltip=\"Delete item\" tooltipPosition=\"bottom\">Delete</button>\n * <span [twTooltip]=\"dynamicMessage\" [tooltipClass]=\"'bg-red-500'\">Hover me</span>\n * ```\n */\n@Directive({\n selector: '[twTooltip]',\n standalone: true,\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focus)': 'show()',\n '(blur)': 'hide()',\n },\n})\nexport class TwTooltipDirective implements OnDestroy, OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n /** The tooltip text content */\n @Input('twTooltip') content = '';\n\n /** Position of the tooltip relative to the host element */\n @Input() tooltipPosition: TooltipPosition = 'top';\n\n /** Additional CSS classes to apply to the tooltip */\n @Input() tooltipClass = '';\n\n /** Delay before showing the tooltip in milliseconds */\n @Input({ transform: numberAttribute }) tooltipShowDelay = 200;\n\n /** Delay before hiding the tooltip in milliseconds */\n @Input({ transform: numberAttribute }) tooltipHideDelay = 0;\n\n /** Whether the tooltip is disabled */\n @Input({ transform: booleanAttribute }) tooltipDisabled = false;\n\n /** Custom z-index for the tooltip */\n @Input({ transform: numberAttribute }) tooltipZIndex = 9999;\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private isVisible = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['content'] && this.tooltipElement) {\n this.tooltipElement.textContent = this.content;\n this.updatePosition();\n }\n }\n\n show(): void {\n if (this.tooltipDisabled || !this.content) return;\n\n this.clearTimeouts();\n\n this.showTimeout = setTimeout(() => {\n this.createTooltip();\n this.isVisible = true;\n }, this.tooltipShowDelay);\n }\n\n hide(): void {\n this.clearTimeouts();\n\n this.hideTimeout = setTimeout(() => {\n this.destroyTooltip();\n this.isVisible = false;\n }, this.tooltipHideDelay);\n }\n\n private createTooltip(): void {\n if (this.tooltipElement) return;\n\n this.tooltipElement = this.renderer.createElement('div');\n this.tooltipElement!.textContent = this.content;\n\n // Base tooltip styles using Tailwind classes\n const baseClasses = [\n 'fixed',\n 'px-2',\n 'py-1',\n 'text-sm',\n 'font-medium',\n 'text-white',\n 'bg-slate-900',\n 'rounded',\n 'shadow-lg',\n 'pointer-events-none',\n 'whitespace-nowrap',\n 'opacity-0',\n 'transition-opacity',\n 'duration-150',\n ];\n\n // Add custom classes\n const allClasses = [...baseClasses, ...this.tooltipClass.split(' ').filter(Boolean)];\n allClasses.forEach(cls => {\n this.renderer.addClass(this.tooltipElement, cls);\n });\n\n this.renderer.setStyle(this.tooltipElement, 'z-index', this.tooltipZIndex.toString());\n\n // Add arrow\n const arrow = this.renderer.createElement('div');\n this.renderer.addClass(arrow, 'absolute');\n this.renderer.addClass(arrow, 'w-2');\n this.renderer.addClass(arrow, 'h-2');\n this.renderer.addClass(arrow, 'bg-slate-900');\n this.renderer.addClass(arrow, 'rotate-45');\n this.setArrowPosition(arrow);\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n // Add to body\n this.renderer.appendChild(document.body, this.tooltipElement);\n\n // Position and show\n this.updatePosition();\n\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.removeClass(this.tooltipElement, 'opacity-0');\n this.renderer.addClass(this.tooltipElement, 'opacity-100');\n }\n });\n }\n\n private setArrowPosition(arrow: HTMLElement): void {\n switch (this.tooltipPosition) {\n case 'top': {\n this.renderer.setStyle(arrow, 'bottom', '-4px');\n this.renderer.setStyle(arrow, 'left', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateX(-50%) rotate(45deg)');\n break;\n }\n case 'bottom': {\n this.renderer.setStyle(arrow, 'top', '-4px');\n this.renderer.setStyle(arrow, 'left', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateX(-50%) rotate(45deg)');\n break;\n }\n case 'left': {\n this.renderer.setStyle(arrow, 'right', '-4px');\n this.renderer.setStyle(arrow, 'top', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateY(-50%) rotate(45deg)');\n break;\n }\n case 'right': {\n this.renderer.setStyle(arrow, 'left', '-4px');\n this.renderer.setStyle(arrow, 'top', '50%');\n this.renderer.setStyle(arrow, 'transform', 'translateY(-50%) rotate(45deg)');\n break;\n }\n }\n }\n\n private updatePosition(): void {\n if (!this.tooltipElement) return;\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const gap = 8;\n\n let top: number;\n let left: number;\n\n switch (this.tooltipPosition) {\n case 'top': {\n top = hostRect.top - tooltipRect.height - gap;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n break;\n }\n case 'bottom': {\n top = hostRect.bottom + gap;\n left = hostRect.left + (hostRect.width - tooltipRect.width) / 2;\n break;\n }\n case 'left': {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left - tooltipRect.width - gap;\n break;\n }\n case 'right': {\n top = hostRect.top + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + gap;\n break;\n }\n }\n\n // Keep tooltip within viewport\n const padding = 8;\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding));\n top = Math.max(padding, Math.min(top, window.innerHeight - tooltipRect.height - padding));\n\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n }\n\n private destroyTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }\n\n private clearTimeouts(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n ngOnDestroy(): void {\n this.clearTimeouts();\n this.destroyTooltip();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\n/**\n * Emits an event when a click occurs outside the host element\n * Useful for closing dropdowns, modals, and other overlays\n *\n * @example\n * ```html\n * <div (twClickOutside)=\"closeDropdown()\">\n * Dropdown content\n * </div>\n *\n * <div\n * (twClickOutside)=\"closeMenu()\"\n * [clickOutsideEnabled]=\"isMenuOpen\"\n * [clickOutsideExclude]=\"['.menu-trigger']\">\n * Menu content\n * </div>\n * ```\n */\n@Directive({\n selector: '[twClickOutside]',\n standalone: true,\n})\nexport class TwClickOutsideDirective implements OnInit, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n /** Event emitted when a click occurs outside the element */\n @Output('twClickOutside') clickOutside = new EventEmitter<MouseEvent>();\n\n /** Whether the click outside detection is enabled */\n @Input({ transform: booleanAttribute }) clickOutsideEnabled = true;\n\n /** Array of selectors to exclude from triggering the click outside event */\n @Input() clickOutsideExclude: string[] = [];\n\n /** Delay before starting to listen for clicks (prevents immediate triggering) */\n @Input() clickOutsideDelay = 0;\n\n private clickHandler: ((event: MouseEvent) => void) | null = null;\n private isListening = false;\n private delayTimeout: ReturnType<typeof setTimeout> | null = null;\n\n ngOnInit(): void {\n this.setupListener();\n }\n\n private setupListener(): void {\n if (this.clickOutsideDelay > 0) {\n this.delayTimeout = setTimeout(() => {\n this.attachListener();\n }, this.clickOutsideDelay);\n } else {\n // Use a microtask delay to prevent immediate triggering\n Promise.resolve().then(() => {\n this.attachListener();\n });\n }\n }\n\n private attachListener(): void {\n if (this.isListening) return;\n\n this.clickHandler = (event: MouseEvent) => {\n if (!this.clickOutsideEnabled) return;\n\n const target = event.target as HTMLElement;\n\n // Check if click was inside the host element\n if (this.el.nativeElement.contains(target)) return;\n\n // Check if click was on an excluded element\n if (this.isExcluded(target)) return;\n\n // Run inside Angular zone to trigger change detection\n this.ngZone.run(() => {\n this.clickOutside.emit(event);\n });\n };\n\n // Run outside Angular zone for performance\n this.ngZone.runOutsideAngular(() => {\n document.addEventListener('click', this.clickHandler!, true);\n document.addEventListener('touchstart', this.clickHandler as EventListener, true);\n });\n\n this.isListening = true;\n }\n\n private isExcluded(target: HTMLElement): boolean {\n for (const selector of this.clickOutsideExclude) {\n // Check if the target matches the selector or is a descendant\n const excludedElements = Array.from(document.querySelectorAll(selector));\n for (const excluded of excludedElements) {\n if (excluded.contains(target)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private detachListener(): void {\n if (!this.isListening || !this.clickHandler) return;\n\n document.removeEventListener('click', this.clickHandler, true);\n document.removeEventListener('touchstart', this.clickHandler as EventListener, true);\n this.clickHandler = null;\n this.isListening = false;\n }\n\n ngOnDestroy(): void {\n if (this.delayTimeout) {\n clearTimeout(this.delayTimeout);\n }\n this.detachListener();\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(', ');\n\n/**\n * Traps focus within the host element, cycling through focusable elements\n * Essential for accessible modals and dialogs\n *\n * @example\n * ```html\n * <div twFocusTrap>\n * <input type=\"text\" placeholder=\"First input\">\n * <button>Action</button>\n * <button>Close</button>\n * </div>\n *\n * <div twFocusTrap [focusTrapAutoFocus]=\"true\" [focusTrapRestoreFocus]=\"true\">\n * Modal content\n * </div>\n * ```\n */\n@Directive({\n selector: '[twFocusTrap]',\n standalone: true,\n})\nexport class TwFocusTrapDirective implements OnInit, AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n\n /** Whether the focus trap is active */\n @Input({ alias: 'twFocusTrap', transform: booleanAttribute }) enabled = true;\n\n /** Whether to auto-focus the first focusable element when the trap is initialized */\n @Input({ transform: booleanAttribute }) focusTrapAutoFocus = true;\n\n /** Whether to restore focus to the previously focused element when the trap is destroyed */\n @Input({ transform: booleanAttribute }) focusTrapRestoreFocus = true;\n\n /** Selector for the initial focus target (if not first focusable) */\n @Input() focusTrapInitialFocus = '';\n\n private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n private previouslyFocusedElement: HTMLElement | null = null;\n\n ngOnInit(): void {\n // Store the currently focused element\n if (this.focusTrapRestoreFocus) {\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\n }\n }\n\n ngAfterViewInit(): void {\n if (this.enabled) {\n this.setupTrap();\n\n if (this.focusTrapAutoFocus) {\n // Delay focus to ensure DOM is ready\n setTimeout(() => {\n this.focusInitial();\n }, 0);\n }\n }\n }\n\n private setupTrap(): void {\n this.keydownHandler = (event: KeyboardEvent) => {\n if (!this.enabled || event.key !== 'Tab') return;\n\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n // Shift+Tab: if on first element, go to last\n if (document.activeElement === firstElement && lastElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n // Tab: if on last element, go to first\n if (document.activeElement === lastElement && firstElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n\n this.ngZone.runOutsideAngular(() => {\n this.el.nativeElement.addEventListener('keydown', this.keydownHandler);\n });\n }\n\n private getFocusableElements(): HTMLElement[] {\n const elements = this.el.nativeElement.querySelectorAll(FOCUSABLE_SELECTOR);\n return [...elements].filter(el => {\n const htmlEl = el as HTMLElement;\n return (\n htmlEl.offsetWidth > 0 &&\n htmlEl.offsetHeight > 0 &&\n getComputedStyle(htmlEl).visibility !== 'hidden'\n );\n }) as HTMLElement[];\n }\n\n private focusInitial(): void {\n if (this.focusTrapInitialFocus) {\n const target = this.el.nativeElement.querySelector(this.focusTrapInitialFocus);\n if (target) {\n target.focus();\n return;\n }\n }\n\n // Focus first focusable element\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n } else {\n // If no focusable elements, make the container focusable and focus it\n this.el.nativeElement.setAttribute('tabindex', '-1');\n this.el.nativeElement.focus();\n }\n }\n\n /** Manually focus the first focusable element */\n focusFirst(): void {\n const elements = this.getFocusableElements();\n if (elements.length > 0) {\n elements[0].focus();\n }\n }\n\n /** Manually focus the last focusable element */\n focusLast(): void {\n const elements = this.getFocusableElements();\n if (elements.length > 0) {\n elements[elements.length - 1].focus();\n }\n }\n\n ngOnDestroy(): void {\n if (this.keydownHandler) {\n this.el.nativeElement.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n\n // Restore focus to the previously focused element\n if (this.focusTrapRestoreFocus && this.previouslyFocusedElement) {\n try {\n this.previouslyFocusedElement.focus();\n } catch {\n // Element may no longer be focusable\n }\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { TwClassService } from '../core/tw-class.service';\n\n/**\n * Applies Tailwind classes with intelligent conflict resolution\n * Merges multiple class inputs, with later classes overriding conflicting earlier ones\n *\n * @example\n * ```html\n * <!-- Base classes with override -->\n * <div [twClass]=\"'px-4 py-2'\" [twClassMerge]=\"'px-8'\">\n * Will have px-8 py-2\n * </div>\n *\n * <!-- Conditional classes -->\n * <button\n * [twClass]=\"'bg-blue-500 text-white'\"\n * [twClassIf]=\"{ 'bg-red-500': hasError, 'opacity-50 cursor-not-allowed': isDisabled }\">\n * Button\n * </button>\n * ```\n */\n@Directive({\n selector: '[twClass]',\n standalone: true,\n})\nexport class TwClassDirective implements OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly twClass = inject(TwClassService);\n\n /** Base classes to apply */\n @Input('twClass') baseClasses = '';\n\n /** Additional classes to merge (will override conflicting base classes) */\n @Input() twClassMerge = '';\n\n /** Conditional classes (object with class strings as keys and booleans as values) */\n @Input() twClassIf: Record<string, boolean | undefined> = {};\n\n private appliedClasses: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['baseClasses'] || changes['twClassMerge'] || changes['twClassIf']) {\n this.updateClasses();\n }\n }\n\n private updateClasses(): void {\n // Remove previously applied classes\n this.appliedClasses.forEach(cls => {\n this.renderer.removeClass(this.el.nativeElement, cls);\n });\n\n // Get conditional classes\n const conditionalClasses = Object.entries(this.twClassIf)\n .filter(([, condition]) => condition)\n .map(([classes]) => classes)\n .join(' ');\n\n // Merge all classes\n const mergedClasses = this.twClass.merge(\n this.baseClasses,\n this.twClassMerge,\n conditionalClasses\n );\n\n // Apply new classes\n this.appliedClasses = mergedClasses.split(' ').filter(Boolean);\n this.appliedClasses.forEach(cls => {\n this.renderer.addClass(this.el.nativeElement, cls);\n });\n }\n}\n\n/**\n * Simple variant class directive for quick variant switching\n *\n * @example\n * ```html\n * <button [twVariant]=\"buttonVariant\">Click me</button>\n * ```\n */\n@Directive({\n selector: '[twVariant]',\n standalone: true,\n})\nexport class TwVariantDirective implements OnChanges {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly twClassService = inject(TwClassService);\n\n /** The variant name (primary, secondary, success, warning, danger, info, neutral) */\n @Input('twVariant') variant = '';\n\n private appliedClasses: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['variant']) {\n this.updateVariant();\n }\n }\n\n private updateVariant(): void {\n // Remove previously applied classes\n this.appliedClasses.forEach(cls => {\n this.renderer.removeClass(this.el.nativeElement, cls);\n });\n\n // Get variant classes\n const variantClasses = this.twClassService.getVariantClasses(this.variant);\n\n // Apply new classes\n this.appliedClasses = variantClasses.split(' ').filter(Boolean);\n this.appliedClasses.forEach(cls => {\n this.renderer.addClass(this.el.nativeElement, cls);\n });\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * Directive to automatically focus an element when it's rendered\n *\n * @example\n * ```html\n * <input twAutoFocus />\n * <input twAutoFocus [autoFocusDelay]=\"100\" />\n * <input [twAutoFocus]=\"shouldFocus\" />\n * ```\n */\n@Directive({\n selector: '[twAutoFocus]',\n standalone: true,\n})\nexport class TwAutoFocusDirective implements AfterViewInit {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n /** Whether auto-focus is enabled */\n @Input({ alias: 'twAutoFocus', transform: booleanAttribute })\n autoFocusEnabled = true;\n\n /** Delay in milliseconds before focusing */\n @Input({ transform: numberAttribute })\n autoFocusDelay = 0;\n\n /** Whether to select text content (for inputs) */\n @Input({ transform: booleanAttribute })\n autoFocusSelect = false;\n\n /** Whether to scroll element into view */\n @Input({ transform: booleanAttribute })\n autoFocusScroll = false;\n\n ngAfterViewInit(): void {\n if (!this.autoFocusEnabled) return;\n\n const focus = () => {\n const element = this.el.nativeElement;\n\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n element.focus();\n if (this.autoFocusSelect) {\n element.select();\n }\n } else if ('focus' in element && typeof element.focus === 'function') {\n element.focus();\n }\n\n if (this.autoFocusScroll) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n };\n\n if (this.autoFocusDelay > 0) {\n setTimeout(focus, this.autoFocusDelay);\n } else {\n // Use requestAnimationFrame for immediate but safe focus\n requestAnimationFrame(focus);\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface InViewEvent {\n isIntersecting: boolean;\n intersectionRatio: number;\n entry: IntersectionObserverEntry;\n}\n\n/**\n * Directive to detect when an element enters or leaves the viewport\n * Uses IntersectionObserver for performance\n *\n * @example\n * ```html\n * <div twInView (inView)=\"onVisible($event)\">Lazy content</div>\n * <div twInView [inViewThreshold]=\"0.5\" (enterView)=\"onEnter()\">50% visible trigger</div>\n * <div twInView [inViewOnce]=\"true\" (enterView)=\"loadOnce()\">Load once when visible</div>\n * ```\n */\n@Directive({\n selector: '[twInView]',\n standalone: true,\n})\nexport class TwInViewDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n private observer: IntersectionObserver | null = null;\n\n /** Root margin for intersection observer (CSS margin syntax) */\n @Input()\n inViewRootMargin = '0px';\n\n /** Threshold(s) for triggering - 0 to 1, or array of values */\n @Input()\n inViewThreshold: number | number[] = 0;\n\n /** Only trigger once when element enters view */\n @Input({ transform: booleanAttribute })\n inViewOnce = false;\n\n /** Disable the observer */\n @Input({ transform: booleanAttribute })\n inViewDisabled = false;\n\n /** Emits whenever intersection state changes */\n @Output()\n inView = new EventEmitter<InViewEvent>();\n\n /** Emits when element enters the viewport */\n @Output()\n enterView = new EventEmitter<InViewEvent>();\n\n /** Emits when element leaves the viewport */\n @Output()\n leaveView = new EventEmitter<InViewEvent>();\n\n ngOnInit(): void {\n if (this.inViewDisabled || typeof IntersectionObserver === 'undefined') {\n return;\n }\n\n this.observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n const event: InViewEvent = {\n isIntersecting: entry.isIntersecting,\n intersectionRatio: entry.intersectionRatio,\n entry,\n };\n\n this.inView.emit(event);\n\n if (entry.isIntersecting) {\n this.enterView.emit(event);\n\n if (this.inViewOnce && this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n } else {\n this.leaveView.emit(event);\n }\n });\n },\n {\n rootMargin: this.inViewRootMargin,\n threshold: this.inViewThreshold,\n }\n );\n\n this.observer.observe(this.el.nativeElement);\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport interface LongPressEvent {\n element: HTMLElement;\n duration: number;\n clientX: number;\n clientY: number;\n}\n\n/**\n * Directive to detect long press/touch events\n *\n * @example\n * ```html\n * <button twLongPress (longPress)=\"onLongPress($event)\">Hold me</button>\n * <button twLongPress [longPressDuration]=\"1000\" (longPress)=\"onLongPress($event)\">Hold 1 second</button>\n * ```\n */\n@Directive({\n selector: '[twLongPress]',\n standalone: true,\n})\nexport class TwLongPressDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private timeout: ReturnType<typeof setTimeout> | null = null;\n private startTime = 0;\n private startX = 0;\n private startY = 0;\n\n /** Duration in ms to trigger long press (default: 500ms) */\n @Input({ transform: numberAttribute })\n longPressDuration = 500;\n\n /** Maximum movement allowed during press (default: 10px) */\n @Input({ transform: numberAttribute })\n longPressMoveTolerance = 10;\n\n /** Disable the directive */\n @Input({ transform: booleanAttribute })\n longPressDisabled = false;\n\n /** Prevent default behavior on long press */\n @Input({ transform: booleanAttribute })\n longPressPreventDefault = true;\n\n /** Emits when long press is detected */\n @Output()\n longPress = new EventEmitter<LongPressEvent>();\n\n /** Emits when press starts */\n @Output()\n pressStart = new EventEmitter<void>();\n\n /** Emits when press ends (before long press threshold) */\n @Output()\n pressEnd = new EventEmitter<void>();\n\n private readonly onPointerDown = (event: PointerEvent): void => {\n if (this.longPressDisabled) return;\n\n this.startTime = Date.now();\n this.startX = event.clientX;\n this.startY = event.clientY;\n\n this.pressStart.emit();\n\n this.timeout = setTimeout(() => {\n this.ngZone.run(() => {\n this.longPress.emit({\n element: this.el.nativeElement,\n duration: this.longPressDuration,\n clientX: event.clientX,\n clientY: event.clientY,\n });\n });\n\n if (this.longPressPreventDefault) {\n event.preventDefault();\n }\n }, this.longPressDuration);\n };\n\n private readonly onPointerUp = (): void => {\n this.cancel();\n this.pressEnd.emit();\n };\n\n private readonly onPointerMove = (event: PointerEvent): void => {\n if (!this.timeout) return;\n\n const deltaX = Math.abs(event.clientX - this.startX);\n const deltaY = Math.abs(event.clientY - this.startY);\n\n if (deltaX > this.longPressMoveTolerance || deltaY > this.longPressMoveTolerance) {\n this.cancel();\n }\n };\n\n private readonly onContextMenu = (event: Event): void => {\n if (this.longPressPreventDefault && this.timeout) {\n event.preventDefault();\n }\n };\n\n private cancel(): void {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('pointerdown', this.onPointerDown);\n element.addEventListener('pointerup', this.onPointerUp);\n element.addEventListener('pointerleave', this.onPointerUp);\n element.addEventListener('pointermove', this.onPointerMove);\n element.addEventListener('contextmenu', this.onContextMenu);\n });\n }\n\n ngOnDestroy(): void {\n this.cancel();\n const element = this.el.nativeElement;\n\n element.removeEventListener('pointerdown', this.onPointerDown);\n element.removeEventListener('pointerup', this.onPointerUp);\n element.removeEventListener('pointerleave', this.onPointerUp);\n element.removeEventListener('pointermove', this.onPointerMove);\n element.removeEventListener('contextmenu', this.onContextMenu);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\n\n/**\n * Directive to debounce click events, preventing accidental double-clicks\n *\n * @example\n * ```html\n * <button twDebounceClick (debounceClick)=\"onSave()\">Save</button>\n * <button twDebounceClick [debounceTime]=\"500\" (debounceClick)=\"onSubmit()\">Submit</button>\n * ```\n */\n@Directive({\n selector: '[twDebounceClick]',\n standalone: true,\n})\nexport class TwDebounceClickDirective implements OnInit, OnDestroy {\n private readonly clicks = new Subject<MouseEvent>();\n private subscription: Subscription | null = null;\n\n /** Debounce time in milliseconds (default: 300ms) */\n @Input({ transform: numberAttribute })\n debounceTime = 300;\n\n /** Disable debouncing */\n @Input({ transform: booleanAttribute })\n debounceDisabled = false;\n\n /** Emits debounced click events */\n @Output()\n debounceClick = new EventEmitter<MouseEvent>();\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.debounceDisabled) {\n this.debounceClick.emit(event);\n } else {\n this.clicks.next(event);\n }\n }\n\n ngOnInit(): void {\n this.subscription = this.clicks.pipe(debounceTime(this.debounceTime)).subscribe(event => {\n this.debounceClick.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\nexport interface CopyClipboardEvent {\n success: boolean;\n text: string;\n error?: Error;\n}\n\n/**\n * Directive to copy text to clipboard on click\n *\n * @example\n * ```html\n * <button twCopyClipboard=\"Text to copy\" (copied)=\"onCopied($event)\">Copy</button>\n * <button [twCopyClipboard]=\"dynamicText\" (copied)=\"onCopied($event)\">Copy Dynamic</button>\n * ```\n */\n@Directive({\n selector: '[twCopyClipboard]',\n standalone: true,\n})\nexport class TwCopyClipboardDirective {\n /** Text to copy to clipboard */\n @Input({ required: true })\n twCopyClipboard = '';\n\n /** Disable copying */\n @Input({ transform: booleanAttribute })\n copyDisabled = false;\n\n /** Emits when copy operation completes */\n @Output()\n copied = new EventEmitter<CopyClipboardEvent>();\n\n @HostListener('click')\n async onClick(): Promise<void> {\n if (this.copyDisabled || !this.twCopyClipboard) return;\n\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(this.twCopyClipboard);\n this.copied.emit({ success: true, text: this.twCopyClipboard });\n } else {\n // Fallback for older browsers\n this.fallbackCopy(this.twCopyClipboard);\n this.copied.emit({ success: true, text: this.twCopyClipboard });\n }\n } catch (error) {\n this.copied.emit({\n success: false,\n text: this.twCopyClipboard,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n\n private fallbackCopy(text: string): void {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.left = '-9999px';\n textarea.style.top = '-9999px';\n document.body.append(textarea);\n textarea.focus();\n textarea.select();\n\n try {\n document.execCommand('copy');\n } finally {\n textarea.remove();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n EventEmitter,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport interface KeyboardShortcutEvent {\n key: string;\n event: KeyboardEvent;\n shortcut: string;\n}\n\n/**\n * Directive to handle keyboard shortcuts\n *\n * @example\n * ```html\n * <div twKeyboardShortcut=\"ctrl+s\" (shortcutPressed)=\"onSave($event)\">Press Ctrl+S to save</div>\n * <div twKeyboardShortcut=\"ctrl+shift+p\" (shortcutPressed)=\"openPalette()\">Command Palette</div>\n * <div twKeyboardShortcut=\"escape\" (shortcutPressed)=\"onEscape()\">Press ESC</div>\n * ```\n *\n * Supported modifiers: ctrl, alt, shift, meta (cmd on Mac)\n * Key names: Any KeyboardEvent.key value (a-z, 0-9, enter, escape, space, etc.)\n */\n@Directive({\n selector: '[twKeyboardShortcut]',\n standalone: true,\n})\nexport class TwKeyboardShortcutDirective implements OnInit, OnDestroy {\n private readonly ngZone: NgZone;\n private readonly platformId: object;\n\n constructor() {\n this.ngZone = inject(NgZone);\n this.platformId = inject(PLATFORM_ID);\n }\n\n /** Keyboard shortcut string (e.g., \"ctrl+s\", \"ctrl+shift+p\", \"escape\") */\n @Input({ required: true })\n twKeyboardShortcut = '';\n\n /** Listen globally (document) instead of element-only */\n @Input({ transform: booleanAttribute })\n shortcutGlobal = true;\n\n /** Prevent default browser behavior */\n @Input({ transform: booleanAttribute })\n shortcutPreventDefault = true;\n\n /** Stop event propagation */\n @Input({ transform: booleanAttribute })\n shortcutStopPropagation = false;\n\n /** Disable the shortcut */\n @Input({ transform: booleanAttribute })\n shortcutDisabled = false;\n\n /** Emits when the shortcut is pressed */\n @Output()\n shortcutPressed = new EventEmitter<KeyboardShortcutEvent>();\n\n private readonly keydownHandler = (event: Event): void => {\n const keyEvent = event as KeyboardEvent;\n if (this.shortcutDisabled) return;\n\n const shortcut = this.twKeyboardShortcut.toLowerCase();\n const parts = shortcut.split('+').map(p => p.trim());\n\n const key = parts.at(-1);\n const modifiers = new Set(parts.slice(0, -1));\n\n const ctrlRequired = modifiers.has('ctrl') || modifiers.has('control');\n const altRequired = modifiers.has('alt');\n const shiftRequired = modifiers.has('shift');\n const metaRequired = modifiers.has('meta') || modifiers.has('cmd');\n\n const ctrlPressed = keyEvent.ctrlKey || keyEvent.metaKey; // Treat meta as ctrl for cross-platform\n const altPressed = keyEvent.altKey;\n const shiftPressed = keyEvent.shiftKey;\n const metaPressed = keyEvent.metaKey;\n\n const keyMatches = keyEvent.key.toLowerCase() === key || keyEvent.code.toLowerCase() === key;\n\n const modifiersMatch =\n ctrlRequired === ctrlPressed &&\n altRequired === altPressed &&\n shiftRequired === shiftPressed &&\n (metaRequired ? metaPressed : true);\n\n if (keyMatches && modifiersMatch) {\n if (this.shortcutPreventDefault) {\n keyEvent.preventDefault();\n }\n if (this.shortcutStopPropagation) {\n keyEvent.stopPropagation();\n }\n\n this.ngZone.run(() => {\n this.shortcutPressed.emit({\n key: keyEvent.key,\n event: keyEvent,\n shortcut: this.twKeyboardShortcut,\n });\n });\n }\n };\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.ngZone.runOutsideAngular(() => {\n const target = this.shortcutGlobal ? document : document.body;\n target.addEventListener('keydown', this.keydownHandler);\n });\n }\n\n ngOnDestroy(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const target = this.shortcutGlobal ? document : document.body;\n target.removeEventListener('keydown', this.keydownHandler);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\nexport type SwipeDirection = 'left' | 'right' | 'up' | 'down';\n\nexport interface SwipeEvent {\n direction: SwipeDirection;\n distance: number;\n velocity: number;\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n duration: number;\n}\n\n/**\n * Directive to detect swipe gestures\n *\n * @example\n * ```html\n * <div twSwipe (swipe)=\"onSwipe($event)\">Swipe me</div>\n * <div twSwipe (swipeLeft)=\"goNext()\" (swipeRight)=\"goPrev()\">Carousel</div>\n * <div twSwipe [swipeThreshold]=\"100\" (swipeUp)=\"refresh()\">Pull to refresh</div>\n * ```\n */\n@Directive({\n selector: '[twSwipe]',\n standalone: true,\n})\nexport class TwSwipeDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private startX = 0;\n private startY = 0;\n private startTime = 0;\n\n /** Minimum distance in pixels to trigger swipe (default: 50px) */\n @Input({ transform: numberAttribute })\n swipeThreshold = 50;\n\n /** Maximum time in ms for the swipe gesture (default: 300ms) */\n @Input({ transform: numberAttribute })\n swipeTimeout = 300;\n\n /** Minimum velocity to trigger swipe (pixels/ms) */\n @Input({ transform: numberAttribute })\n swipeVelocity = 0.3;\n\n /** Disable swipe detection */\n @Input({ transform: booleanAttribute })\n swipeDisabled = false;\n\n /** Emits on any swipe */\n @Output()\n swipe = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe left */\n @Output()\n swipeLeft = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe right */\n @Output()\n swipeRight = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe up */\n @Output()\n swipeUp = new EventEmitter<SwipeEvent>();\n\n /** Emits on swipe down */\n @Output()\n swipeDown = new EventEmitter<SwipeEvent>();\n\n private readonly onTouchStart = (event: TouchEvent): void => {\n if (this.swipeDisabled || event.touches.length !== 1) return;\n\n const touch = event.touches[0];\n this.startX = touch.clientX;\n this.startY = touch.clientY;\n this.startTime = Date.now();\n };\n\n private readonly onTouchEnd = (event: TouchEvent): void => {\n if (this.swipeDisabled || event.changedTouches.length !== 1) return;\n\n const touch = event.changedTouches[0];\n const endX = touch.clientX;\n const endY = touch.clientY;\n const endTime = Date.now();\n\n const deltaX = endX - this.startX;\n const deltaY = endY - this.startY;\n const duration = endTime - this.startTime;\n\n if (duration > this.swipeTimeout) return;\n\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n\n // Determine if horizontal or vertical swipe\n const isHorizontal = absX > absY;\n const distance = isHorizontal ? absX : absY;\n const velocity = distance / duration;\n\n if (distance < this.swipeThreshold || velocity < this.swipeVelocity) return;\n\n let direction: SwipeDirection;\n if (isHorizontal) {\n direction = deltaX > 0 ? 'right' : 'left';\n } else {\n direction = deltaY > 0 ? 'down' : 'up';\n }\n\n const swipeEvent: SwipeEvent = {\n direction,\n distance,\n velocity,\n startX: this.startX,\n startY: this.startY,\n endX,\n endY,\n duration,\n };\n\n this.ngZone.run(() => {\n this.swipe.emit(swipeEvent);\n\n switch (direction) {\n case 'left': {\n this.swipeLeft.emit(swipeEvent);\n break;\n }\n case 'right': {\n this.swipeRight.emit(swipeEvent);\n break;\n }\n case 'up': {\n this.swipeUp.emit(swipeEvent);\n break;\n }\n case 'down': {\n this.swipeDown.emit(swipeEvent);\n break;\n }\n }\n });\n };\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('touchstart', this.onTouchStart, { passive: true });\n element.addEventListener('touchend', this.onTouchEnd, { passive: true });\n });\n }\n\n ngOnDestroy(): void {\n const element = this.el.nativeElement;\n element.removeEventListener('touchstart', this.onTouchStart);\n element.removeEventListener('touchend', this.onTouchEnd);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\n\nexport interface ResizeEvent {\n width: number;\n height: number;\n entry: ResizeObserverEntry;\n}\n\n/**\n * Directive to observe element size changes\n *\n * @example\n * ```html\n * <div twResizeObserver (resize)=\"onResize($event)\">Resizable content</div>\n * <div twResizeObserver [resizeDebounce]=\"100\" (resize)=\"onResize($event)\">Debounced resize</div>\n * ```\n */\n@Directive({\n selector: '[twResizeObserver]',\n standalone: true,\n})\nexport class TwResizeObserverDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n private observer: ResizeObserver | null = null;\n private readonly resizeSubject = new Subject<ResizeEvent>();\n private subscription: Subscription | null = null;\n\n /** Debounce time in milliseconds (default: 0 = no debounce) */\n @Input({ transform: numberAttribute })\n resizeDebounce = 0;\n\n /** Disable the observer */\n @Input({ transform: booleanAttribute })\n resizeDisabled = false;\n\n /** Emits when element size changes */\n @Output()\n resize = new EventEmitter<ResizeEvent>();\n\n ngOnInit(): void {\n if (this.resizeDisabled || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n // Set up debounced emission\n if (this.resizeDebounce > 0) {\n this.subscription = this.resizeSubject\n .pipe(debounceTime(this.resizeDebounce))\n .subscribe(event => {\n this.resize.emit(event);\n });\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n const event: ResizeEvent = { width, height, entry };\n\n if (this.resizeDebounce > 0) {\n this.resizeSubject.next(event);\n } else {\n this.ngZone.run(() => {\n this.resize.emit(event);\n });\n }\n }\n });\n\n this.observer.observe(this.el.nativeElement);\n });\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from '@angular/core';\n\nexport interface LazyImageEvent {\n loaded: boolean;\n src: string;\n error?: Error;\n}\n\n/**\n * Directive to lazy load images when they enter the viewport\n *\n * @example\n * ```html\n * <img twLazyImage=\"/image.jpg\" [lazyPlaceholder]=\"'/placeholder.jpg'\" (lazyLoaded)=\"onLoaded($event)\" />\n * <img twLazyImage=\"/large-image.jpg\" lazyLoadingClass=\"opacity-0\" lazyLoadedClass=\"opacity-100 transition-opacity\" />\n * ```\n */\n@Directive({\n selector: 'img[twLazyImage]',\n standalone: true,\n})\nexport class TwLazyImageDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLImageElement>;\n private readonly renderer: Renderer2;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n }\n\n private observer: IntersectionObserver | null = null;\n\n /** The image source to lazy load */\n @Input({ required: true })\n twLazyImage = '';\n\n /** Placeholder image to show before loading */\n @Input()\n lazyPlaceholder = '';\n\n /** CSS class to add while loading */\n @Input()\n lazyLoadingClass = '';\n\n /** CSS class to add after loaded */\n @Input()\n lazyLoadedClass = '';\n\n /** Root margin for intersection observer */\n @Input()\n lazyRootMargin = '100px';\n\n /** Disable lazy loading (load immediately) */\n @Input({ transform: booleanAttribute })\n lazyDisabled = false;\n\n /** Use native loading=\"lazy\" attribute */\n @Input({ transform: booleanAttribute })\n lazyNative = false;\n\n /** Emits when image loads or errors */\n @Output()\n lazyLoaded = new EventEmitter<LazyImageEvent>();\n\n ngOnInit(): void {\n const img = this.el.nativeElement;\n\n // Set placeholder if provided\n if (this.lazyPlaceholder) {\n this.renderer.setAttribute(img, 'src', this.lazyPlaceholder);\n }\n\n // Add loading class\n if (this.lazyLoadingClass) {\n this.lazyLoadingClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(img, cls);\n });\n }\n\n // Use native lazy loading if requested or browser supports it\n if (this.lazyNative || this.lazyDisabled) {\n if (this.lazyNative) {\n this.renderer.setAttribute(img, 'loading', 'lazy');\n }\n this.loadImage();\n return;\n }\n\n // Use IntersectionObserver for lazy loading\n if (typeof IntersectionObserver === 'undefined') {\n this.loadImage();\n return;\n }\n\n this.observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.loadImage();\n this.observer?.disconnect();\n this.observer = null;\n }\n });\n },\n {\n rootMargin: this.lazyRootMargin,\n }\n );\n\n this.observer.observe(img);\n }\n\n private loadImage(): void {\n const img = this.el.nativeElement;\n\n // Create a new image to preload\n const tempImg = new Image();\n\n tempImg.addEventListener('load', () => {\n this.renderer.setAttribute(img, 'src', this.twLazyImage);\n\n // Remove loading class, add loaded class\n if (this.lazyLoadingClass) {\n this.lazyLoadingClass.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(img, cls);\n });\n }\n if (this.lazyLoadedClass) {\n this.lazyLoadedClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(img, cls);\n });\n }\n\n this.lazyLoaded.emit({ loaded: true, src: this.twLazyImage });\n });\n\n tempImg.onerror = () => {\n this.lazyLoaded.emit({\n loaded: false,\n src: this.twLazyImage,\n error: new Error(`Failed to load image: ${this.twLazyImage}`),\n });\n };\n\n tempImg.src = this.twLazyImage;\n }\n\n ngOnDestroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * Directive to smooth scroll to a target element\n *\n * @example\n * ```html\n * <a twScrollTo=\"#section1\">Go to Section 1</a>\n * <a twScrollTo=\"#top\" [scrollOffset]=\"80\">Back to Top</a>\n * <button twScrollTo=\".my-element\" scrollBehavior=\"auto\">Jump to Element</button>\n * ```\n */\n@Directive({\n selector: '[twScrollTo]',\n standalone: true,\n})\nexport class TwScrollToDirective {\n /** Target selector or element ID */\n @Input({ required: true })\n twScrollTo = '';\n\n /** Offset from the top in pixels (useful for fixed headers) */\n @Input({ transform: numberAttribute })\n scrollOffset = 0;\n\n /** Scroll behavior: 'smooth' or 'auto' */\n @Input()\n scrollBehavior: ScrollBehavior = 'smooth';\n\n /** Block position: 'start', 'center', 'end', 'nearest' */\n @Input()\n scrollBlock: ScrollLogicalPosition = 'start';\n\n /** Disable scrolling */\n @Input({ transform: booleanAttribute })\n scrollDisabled = false;\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.scrollDisabled || !this.twScrollTo) return;\n\n event.preventDefault();\n\n const selector = this.twScrollTo.startsWith('#')\n ? this.twScrollTo\n : this.twScrollTo.startsWith('.')\n ? this.twScrollTo\n : `#${this.twScrollTo}`;\n\n const target = document.querySelector(selector);\n\n if (target) {\n const elementPosition = target.getBoundingClientRect().top;\n const offsetPosition = elementPosition + window.scrollY - this.scrollOffset;\n\n window.scrollTo({\n top: offsetPosition,\n behavior: this.scrollBehavior,\n });\n }\n }\n}\n\n/**\n * Directive to mark scroll target sections for scroll spy\n *\n * @example\n * ```html\n * <section twScrollSection=\"section1\">Content</section>\n * <section twScrollSection=\"section2\">Content</section>\n * ```\n */\n@Directive({\n selector: '[twScrollSection]',\n standalone: true,\n})\nexport class TwScrollSectionDirective {\n private readonly el: ElementRef<HTMLElement>;\n\n constructor() {\n this.el = inject(ElementRef);\n }\n\n /** Section identifier */\n @Input({ required: true })\n twScrollSection = '';\n\n /** Get the element's position relative to viewport */\n getPosition(): { top: number; bottom: number; id: string } {\n const rect = this.el.nativeElement.getBoundingClientRect();\n return {\n top: rect.top,\n bottom: rect.bottom,\n id: this.twScrollSection,\n };\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\n/**\n * Directive to dynamically add/remove classes on hover\n * Useful for complex hover states that can't be achieved with CSS alone\n *\n * @example\n * ```html\n * <div twHoverClass=\"scale-105 shadow-lg\">Hover me</div>\n * <div twHoverClass=\"bg-blue-500 text-white\" [hoverClassBase]=\"'bg-white text-black'\">Toggle colors</div>\n * <div twHoverClass=\"ring-2 ring-blue-500\" [hoverDelay]=\"200\">Delayed hover effect</div>\n * ```\n */\n@Directive({\n selector: '[twHoverClass]',\n standalone: true,\n})\nexport class TwHoverClassDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly renderer: Renderer2;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.renderer = inject(Renderer2);\n this.ngZone = inject(NgZone);\n }\n\n private hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n private isHovered = false;\n\n /** Classes to add on hover */\n @Input({ required: true })\n twHoverClass = '';\n\n /** Base classes to remove on hover (and restore on leave) */\n @Input()\n hoverClassBase = '';\n\n /** Delay before applying hover classes (ms) */\n @Input()\n hoverDelay = 0;\n\n /** Delay before removing hover classes (ms) */\n @Input()\n hoverLeaveDelay = 0;\n\n /** Disable hover effects */\n @Input({ transform: booleanAttribute })\n hoverDisabled = false;\n\n private readonly onMouseEnter = (): void => {\n if (this.hoverDisabled) return;\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const apply = () => {\n this.isHovered = true;\n this.applyHoverClasses();\n };\n\n if (this.hoverDelay > 0) {\n this.hoverTimeout = setTimeout(apply, this.hoverDelay);\n } else {\n apply();\n }\n };\n\n private readonly onMouseLeave = (): void => {\n if (this.hoverDisabled) return;\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const remove = () => {\n this.isHovered = false;\n this.removeHoverClasses();\n };\n\n if (this.hoverLeaveDelay > 0) {\n this.hoverTimeout = setTimeout(remove, this.hoverLeaveDelay);\n } else {\n remove();\n }\n };\n\n private applyHoverClasses(): void {\n const element = this.el.nativeElement;\n\n // Remove base classes\n if (this.hoverClassBase) {\n this.hoverClassBase.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(element, cls);\n });\n }\n\n // Add hover classes\n if (this.twHoverClass) {\n this.twHoverClass.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(element, cls);\n });\n }\n }\n\n private removeHoverClasses(): void {\n const element = this.el.nativeElement;\n\n // Remove hover classes\n if (this.twHoverClass) {\n this.twHoverClass.split(' ').forEach(cls => {\n if (cls) this.renderer.removeClass(element, cls);\n });\n }\n\n // Restore base classes\n if (this.hoverClassBase) {\n this.hoverClassBase.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(element, cls);\n });\n }\n }\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('mouseenter', this.onMouseEnter);\n element.addEventListener('mouseleave', this.onMouseLeave);\n });\n }\n\n ngOnDestroy(): void {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n const element = this.el.nativeElement;\n element.removeEventListener('mouseenter', this.onMouseEnter);\n element.removeEventListener('mouseleave', this.onMouseLeave);\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n} from '@angular/core';\n\n/**\n * Directive to trap scroll within an element, preventing scroll propagation to parent\n * Useful for dropdowns, modals, and scrollable panels\n *\n * @example\n * ```html\n * <div twTrapScroll class=\"h-64 overflow-auto\">\n * <!-- Scrolling here won't affect parent -->\n * <div class=\"h-[1000px]\">Long content</div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[twTrapScroll]',\n standalone: true,\n})\nexport class TwTrapScrollDirective implements OnInit, OnDestroy {\n private readonly el: ElementRef<HTMLElement>;\n private readonly ngZone: NgZone;\n\n constructor() {\n this.el = inject(ElementRef);\n this.ngZone = inject(NgZone);\n }\n\n /** Disable scroll trapping */\n @Input({ transform: booleanAttribute })\n trapScrollDisabled = false;\n\n /** Allow horizontal scroll to propagate */\n @Input({ transform: booleanAttribute })\n trapScrollAllowHorizontal = false;\n\n private readonly onWheel = (event: WheelEvent): void => {\n if (this.trapScrollDisabled) return;\n\n const element = this.el.nativeElement;\n const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = element;\n\n const isVertical = Math.abs(event.deltaY) > Math.abs(event.deltaX);\n const isHorizontal = !isVertical;\n\n if (isHorizontal && this.trapScrollAllowHorizontal) {\n return;\n }\n\n if (isVertical) {\n const atTop = scrollTop <= 0;\n const atBottom = scrollTop + clientHeight >= scrollHeight;\n const scrollingUp = event.deltaY < 0;\n const scrollingDown = event.deltaY > 0;\n\n if ((atTop && scrollingUp) || (atBottom && scrollingDown)) {\n event.preventDefault();\n }\n } else {\n const atLeft = scrollLeft <= 0;\n const atRight = scrollLeft + clientWidth >= scrollWidth;\n const scrollingLeft = event.deltaX < 0;\n const scrollingRight = event.deltaX > 0;\n\n if ((atLeft && scrollingLeft) || (atRight && scrollingRight)) {\n event.preventDefault();\n }\n }\n };\n\n private readonly onTouchMove = (event: TouchEvent): void => {\n if (this.trapScrollDisabled) return;\n\n const element = this.el.nativeElement;\n\n // If element is not scrollable, prevent all touch scroll\n if (\n element.scrollHeight <= element.clientHeight &&\n element.scrollWidth <= element.clientWidth\n ) {\n event.preventDefault();\n }\n };\n\n ngOnInit(): void {\n const element = this.el.nativeElement;\n\n this.ngZone.runOutsideAngular(() => {\n element.addEventListener('wheel', this.onWheel, { passive: false });\n element.addEventListener('touchmove', this.onTouchMove, { passive: false });\n });\n }\n\n ngOnDestroy(): void {\n const element = this.el.nativeElement;\n element.removeEventListener('wheel', this.onWheel);\n element.removeEventListener('touchmove', this.onTouchMove);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n HostBinding,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { AriaUtils, TwAriaService } from '../core/aria.service';\n\n/**\n * Directive to add screen reader only text to elements.\n * Content is visually hidden but accessible to screen readers.\n */\n@Directive({\n selector: '[twSrOnly]',\n standalone: true,\n host: {\n '[class]': 'srOnlyClasses()',\n },\n})\nexport class TwSrOnlyDirective {\n @Input({ transform: booleanAttribute }) set twSrOnly(value: boolean) {\n this._enabled.set(value);\n }\n\n @Input({ transform: booleanAttribute }) focusable = false;\n\n private readonly _enabled = signal(true);\n\n protected srOnlyClasses = computed(() => {\n if (!this._enabled()) return '';\n\n if (this.focusable) {\n return 'sr-only focus:not-sr-only focus:absolute focus:z-50 focus:p-2 focus:bg-white focus:text-slate-900 focus:border focus:border-slate-300 focus:rounded';\n }\n return 'sr-only';\n });\n}\n\n/**\n * Directive to announce content changes to screen readers.\n */\n@Directive({\n selector: '[twAnnounce]',\n standalone: true,\n})\nexport class TwAnnounceDirective implements OnDestroy {\n private readonly ariaService = inject(TwAriaService);\n private previousMessage = '';\n\n @Input() set twAnnounce(message: string) {\n if (message && message !== this.previousMessage) {\n this.ariaService.announce(message);\n this.previousMessage = message;\n }\n }\n\n @Input({ transform: booleanAttribute }) announceAssertive = false;\n\n ngOnDestroy(): void {\n this.ariaService.clearAnnouncements();\n }\n}\n\n/**\n * Directive for managing ARIA expanded state.\n */\n@Directive({\n selector: '[twAriaExpanded]',\n standalone: true,\n})\nexport class TwAriaExpandedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaExpanded(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-expanded', String(value));\n }\n\n @Input() set ariaControls(id: string | null) {\n if (id) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-controls', id);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-controls');\n }\n }\n}\n\n/**\n * Directive for managing ARIA selected state.\n */\n@Directive({\n selector: '[twAriaSelected]',\n standalone: true,\n})\nexport class TwAriaSelectedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaSelected(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-selected', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA checked state.\n */\n@Directive({\n selector: '[twAriaChecked]',\n standalone: true,\n})\nexport class TwAriaCheckedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaChecked(value: boolean | 'mixed') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-checked', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA pressed state (toggle buttons).\n */\n@Directive({\n selector: '[twAriaPressed]',\n standalone: true,\n})\nexport class TwAriaPressedDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaPressed(value: boolean | 'mixed') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-pressed', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA disabled state.\n */\n@Directive({\n selector: '[twAriaDisabled]',\n standalone: true,\n})\nexport class TwAriaDisabledDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaDisabled(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-disabled', String(value));\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', '-1');\n }\n }\n}\n\n/**\n * Directive for managing ARIA hidden state.\n */\n@Directive({\n selector: '[twAriaHidden]',\n standalone: true,\n})\nexport class TwAriaHiddenDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaHidden(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA live regions.\n */\n@Directive({\n selector: '[twAriaLive]',\n standalone: true,\n})\nexport class TwAriaLiveDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLive(value: 'off' | 'polite' | 'assertive') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-live', value);\n }\n\n @Input({ transform: booleanAttribute }) set ariaAtomic(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-atomic', String(value));\n }\n\n @Input() set ariaRelevant(value: 'additions' | 'removals' | 'text' | 'all' | string) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-relevant', value);\n }\n}\n\n/**\n * Directive for managing ARIA current state (navigation).\n */\n@Directive({\n selector: '[twAriaCurrent]',\n standalone: true,\n})\nexport class TwAriaCurrentDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaCurrent(\n value: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | boolean\n ) {\n const strValue = typeof value === 'boolean' ? String(value) : value;\n if (value && strValue !== 'false') {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-current', strValue);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-current');\n }\n }\n}\n\n/**\n * Directive for managing ARIA busy state.\n */\n@Directive({\n selector: '[twAriaBusy]',\n standalone: true,\n})\nexport class TwAriaBusyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaBusy(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-busy', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA describedby.\n */\n@Directive({\n selector: '[twAriaDescribedby]',\n standalone: true,\n})\nexport class TwAriaDescribedbyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaDescribedby(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', ids);\n }\n}\n\n/**\n * Directive for managing ARIA labelledby.\n */\n@Directive({\n selector: '[twAriaLabelledby]',\n standalone: true,\n})\nexport class TwAriaLabelledbyDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLabelledby(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-labelledby');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-labelledby', ids);\n }\n}\n\n/**\n * Directive for managing ARIA label.\n */\n@Directive({\n selector: '[twAriaLabel]',\n standalone: true,\n})\nexport class TwAriaLabelDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaLabel(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-label', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-label');\n }\n }\n}\n\n/**\n * Directive for managing ARIA valuenow/valuemin/valuemax (progress, sliders).\n */\n@Directive({\n selector: '[twAriaValue]',\n standalone: true,\n})\nexport class TwAriaValueDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: numberAttribute }) set twAriaValue(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuenow', String(value));\n }\n\n @Input({ transform: numberAttribute }) set ariaValueMin(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuemin', String(value));\n }\n\n @Input({ transform: numberAttribute }) set ariaValueMax(value: number) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuemax', String(value));\n }\n\n @Input() set ariaValueText(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-valuetext', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-valuetext');\n }\n }\n}\n\n/**\n * Directive for managing ARIA role.\n */\n@Directive({\n selector: '[twRole]',\n standalone: true,\n})\nexport class TwRoleDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twRole(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'role', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'role');\n }\n }\n}\n\n/**\n * Directive for managing ARIA modal.\n */\n@Directive({\n selector: '[twAriaModal]',\n standalone: true,\n})\nexport class TwAriaModalDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input({ transform: booleanAttribute }) set twAriaModal(value: boolean) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-modal', String(value));\n }\n}\n\n/**\n * Directive for managing ARIA haspopup.\n */\n@Directive({\n selector: '[twAriaHaspopup]',\n standalone: true,\n})\nexport class TwAriaHaspopupDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaHaspopup(\n value: 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | 'true' | 'false' | boolean\n ) {\n const strValue = typeof value === 'boolean' ? String(value) : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-haspopup', strValue);\n }\n}\n\n/**\n * Directive for managing ARIA owns.\n */\n@Directive({\n selector: '[twAriaOwns]',\n standalone: true,\n})\nexport class TwAriaOwnsDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaOwns(value: string | string[] | null) {\n if (!value) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-owns');\n return;\n }\n const ids = Array.isArray(value) ? value.join(' ') : value;\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-owns', ids);\n }\n}\n\n/**\n * Directive for managing ARIA activedescendant.\n */\n@Directive({\n selector: '[twAriaActivedescendant]',\n standalone: true,\n})\nexport class TwAriaActivedescendantDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n @Input() set twAriaActivedescendant(value: string | null) {\n if (value) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-activedescendant', value);\n } else {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-activedescendant');\n }\n }\n}\n\n/**\n * Collection of all ARIA directives.\n */\nexport const TW_ARIA_DIRECTIVES = [\n TwSrOnlyDirective,\n TwAnnounceDirective,\n TwAriaExpandedDirective,\n TwAriaSelectedDirective,\n TwAriaCheckedDirective,\n TwAriaPressedDirective,\n TwAriaDisabledDirective,\n TwAriaHiddenDirective,\n TwAriaLiveDirective,\n TwAriaCurrentDirective,\n TwAriaBusyDirective,\n TwAriaDescribedbyDirective,\n TwAriaLabelledbyDirective,\n TwAriaLabelDirective,\n TwAriaValueDirective,\n TwRoleDirective,\n TwAriaModalDirective,\n TwAriaHaspopupDirective,\n TwAriaOwnsDirective,\n TwAriaActivedescendantDirective,\n] as const;\n","// Core directives\nexport * from './ripple.directive';\nexport * from './tooltip.directive';\nexport * from './click-outside.directive';\nexport * from './focus-trap.directive';\nexport * from './class-merge.directive';\n\n// DX enhancement directives\nexport * from './auto-focus.directive';\nexport * from './in-view.directive';\nexport * from './long-press.directive';\nexport * from './debounce-click.directive';\nexport * from './copy-clipboard.directive';\nexport * from './keyboard-shortcut.directive';\nexport * from './swipe.directive';\nexport * from './resize-observer.directive';\nexport * from './lazy-image.directive';\nexport * from './scroll-anchor.directive';\nexport * from './hover-class.directive';\nexport * from './trap-scroll.directive';\n\n// ARIA accessibility directives\nexport * from './aria.directive';\n\n// Convenience export of all directives\nimport { TwRippleDirective } from './ripple.directive';\nimport { TwTooltipDirective } from './tooltip.directive';\nimport { TwClickOutsideDirective } from './click-outside.directive';\nimport { TwFocusTrapDirective } from './focus-trap.directive';\nimport { TwClassDirective, TwVariantDirective } from './class-merge.directive';\nimport { TwAutoFocusDirective } from './auto-focus.directive';\nimport { TwInViewDirective } from './in-view.directive';\nimport { TwLongPressDirective } from './long-press.directive';\nimport { TwDebounceClickDirective } from './debounce-click.directive';\nimport { TwCopyClipboardDirective } from './copy-clipboard.directive';\nimport { TwKeyboardShortcutDirective } from './keyboard-shortcut.directive';\nimport { TwSwipeDirective } from './swipe.directive';\nimport { TwResizeObserverDirective } from './resize-observer.directive';\nimport { TwLazyImageDirective } from './lazy-image.directive';\nimport { TwScrollSectionDirective, TwScrollToDirective } from './scroll-anchor.directive';\nimport { TwHoverClassDirective } from './hover-class.directive';\nimport { TwTrapScrollDirective } from './trap-scroll.directive';\nimport { TW_ARIA_DIRECTIVES } from './aria.directive';\n\n/** All core directives */\nexport const TW_CORE_DIRECTIVES = [\n TwRippleDirective,\n TwTooltipDirective,\n TwClickOutsideDirective,\n TwFocusTrapDirective,\n TwClassDirective,\n TwVariantDirective,\n] as const;\n\n/** All DX enhancement directives */\nexport const TW_DX_DIRECTIVES = [\n TwAutoFocusDirective,\n TwInViewDirective,\n TwLongPressDirective,\n TwDebounceClickDirective,\n TwCopyClipboardDirective,\n TwKeyboardShortcutDirective,\n TwSwipeDirective,\n TwResizeObserverDirective,\n TwLazyImageDirective,\n TwScrollToDirective,\n TwScrollSectionDirective,\n TwHoverClassDirective,\n TwTrapScrollDirective,\n] as const;\n\n/** All directives combined */\nexport const TW_DIRECTIVES = [\n ...TW_CORE_DIRECTIVES,\n ...TW_DX_DIRECTIVES,\n ...TW_ARIA_DIRECTIVES,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n HostBinding,\n inject,\n Input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\nimport { TwRippleDirective } from '../directives/ripple.directive';\n\nexport type ButtonVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'ghost'\n | 'outline'\n | 'link';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst BUTTON_BASE_CLASSES = `\n inline-flex items-center justify-center gap-2\n font-medium\n rounded-lg\n transition-all duration-200 ease-out\n focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\n disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none\n`;\n\nconst BUTTON_VARIANTS: Record<ButtonVariant, string> = {\n primary:\n 'bg-blue-600 hover:bg-blue-700 active:bg-blue-800 text-white shadow-sm hover:shadow focus-visible:ring-blue-500',\n secondary:\n 'bg-slate-600 hover:bg-slate-700 active:bg-slate-800 text-white shadow-sm hover:shadow focus-visible:ring-slate-500',\n success:\n 'bg-emerald-600 hover:bg-emerald-700 active:bg-emerald-800 text-white shadow-sm hover:shadow focus-visible:ring-emerald-500',\n warning:\n 'bg-amber-500 hover:bg-amber-600 active:bg-amber-700 text-white shadow-sm hover:shadow focus-visible:ring-amber-500',\n danger:\n 'bg-rose-600 hover:bg-rose-700 active:bg-rose-800 text-white shadow-sm hover:shadow focus-visible:ring-rose-500',\n info: 'bg-cyan-600 hover:bg-cyan-700 active:bg-cyan-800 text-white shadow-sm hover:shadow focus-visible:ring-cyan-500',\n ghost:\n 'bg-transparent hover:bg-slate-100 active:bg-slate-200 text-slate-700 focus-visible:ring-slate-500',\n outline:\n 'bg-white border-2 border-slate-500 hover:border-slate-600 hover:bg-slate-100 active:bg-slate-200 text-slate-800 shadow-sm focus-visible:ring-slate-500',\n link: 'bg-transparent text-blue-600 hover:text-blue-700 hover:underline active:text-blue-800 focus-visible:ring-blue-500 p-0 shadow-none',\n};\n\nconst BUTTON_SIZES: Record<ButtonSize, string> = {\n xs: 'text-xs px-4 py-2.5 min-h-9',\n sm: 'text-sm px-6 py-3 min-h-10',\n md: 'text-base px-8 py-3.5 min-h-11',\n lg: 'text-lg px-10 py-4 min-h-12',\n xl: 'text-xl px-12 py-5 min-h-14',\n};\n\nconst ICON_SIZES: Record<ButtonSize, string> = {\n xs: '[&_svg]:w-3 [&_svg]:h-3',\n sm: '[&_svg]:w-4 [&_svg]:h-4',\n md: '[&_svg]:w-5 [&_svg]:h-5',\n lg: '[&_svg]:w-5 [&_svg]:h-5',\n xl: '[&_svg]:w-6 [&_svg]:h-6',\n};\n\nconst ICON_ONLY_SIZES: Record<ButtonSize, string> = {\n xs: 'p-2 min-h-8 min-w-8',\n sm: 'p-2.5 min-h-9 min-w-9',\n md: 'p-3 min-h-10 min-w-10',\n lg: 'p-3.5 min-h-12 min-w-12',\n xl: 'p-4 min-h-14 min-w-14',\n};\n\nconst SPINNER_SIZES: Record<ButtonSize, string> = {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n xl: 'w-6 h-6',\n};\n\n/**\n * Highly customizable button component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-button>Default Button</tw-button>\n * <tw-button variant=\"primary\" size=\"lg\">Large Primary</tw-button>\n * <tw-button variant=\"outline\" [loading]=\"isLoading\">Submit</tw-button>\n * <tw-button variant=\"danger\" [disabled]=\"!canDelete\">Delete</tw-button>\n * ```\n */\n@Component({\n selector: 'tw-button',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './button.component.html',\n hostDirectives: [TwRippleDirective],\n host: {\n '[class]': 'computedClasses()',\n '[attr.disabled]': 'isDisabled() || null',\n '[attr.aria-disabled]': 'isDisabled()',\n '[attr.aria-busy]': '_loading()',\n role: 'button',\n '[attr.tabindex]': 'isDisabled() ? -1 : 0',\n '[style.display]': '\"inline-flex\"',\n '[style.position]': '\"relative\"',\n '[style.overflow]': '\"hidden\"',\n },\n})\nexport class TwButtonComponent {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly rippleDirective = inject(TwRippleDirective);\n\n // Internal signals for reactive state\n protected readonly _variant = signal<ButtonVariant>('primary');\n protected readonly _size = signal<ButtonSize>('md');\n protected readonly _disabled = signal(false);\n protected readonly _loading = signal(false);\n protected readonly _fullWidth = signal(false);\n protected readonly _iconOnly = signal(false);\n protected readonly _ripple = signal(true);\n protected readonly _rippleColor = signal('rgba(255, 255, 255, 0.4)');\n protected readonly _classOverride = signal('');\n protected readonly _classReplace = signal('');\n\n // Input setters that update signals\n @Input() set variant(value: ButtonVariant) {\n this._variant.set(value);\n }\n @Input() set size(value: ButtonSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set disabled(value: boolean) {\n this._disabled.set(value);\n }\n @Input({ transform: booleanAttribute }) set loading(value: boolean) {\n this._loading.set(value);\n }\n @Input({ transform: booleanAttribute }) set fullWidth(value: boolean) {\n this._fullWidth.set(value);\n }\n @Input({ transform: booleanAttribute }) set iconOnly(value: boolean) {\n this._iconOnly.set(value);\n }\n @Input({ transform: booleanAttribute }) set ripple(value: boolean) {\n this._ripple.set(value);\n }\n @Input() set rippleColor(value: string) {\n this._rippleColor.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n @Input() set classReplace(value: string) {\n this._classReplace.set(value);\n }\n\n // Computed signals\n protected readonly isDisabled = computed(() => this._disabled() || this._loading());\n\n protected readonly computedClasses = computed(() => {\n if (this._classReplace()) {\n return this._classReplace();\n }\n\n const variantClasses = BUTTON_VARIANTS[this._variant()];\n const sizeClasses = this._iconOnly()\n ? ICON_ONLY_SIZES[this._size()]\n : BUTTON_SIZES[this._size()];\n const iconClasses = ICON_SIZES[this._size()];\n\n const conditionalClasses: string[] = [];\n if (this._fullWidth()) conditionalClasses.push('w-full');\n if (this._loading()) conditionalClasses.push('cursor-wait');\n if (this._iconOnly()) conditionalClasses.push('gap-0');\n\n return this.twClass.merge(\n BUTTON_BASE_CLASSES,\n variantClasses,\n sizeClasses,\n iconClasses,\n conditionalClasses.join(' '),\n this._classOverride()\n );\n });\n\n protected readonly spinnerSizeClass = computed(() => SPINNER_SIZES[this._size()]);\n\n // Effect to sync ripple directive state\n constructor() {\n effect(() => {\n this.rippleDirective.rippleDisabled = !this._ripple() || this.isDisabled();\n this.rippleDirective.rippleColor = this._rippleColor();\n });\n }\n\n /** Get the native button element */\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /** Programmatically focus the button */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /** Programmatically blur the button */\n blur(): void {\n this.elementRef.nativeElement.blur();\n }\n}\n\n/**\n * Anchor-style button for navigation\n */\n@Component({\n selector: 'a[tw-button]',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './button-link.component.html',\n // Note: hostDirectives are inherited from TwButtonComponent, no need to redeclare\n host: {\n '[class]': 'computedClasses()',\n '[attr.aria-disabled]': '_disabled()',\n '[attr.tabindex]': '_disabled() ? -1 : 0',\n '[style.display]': '\"inline-flex\"',\n '[style.position]': '\"relative\"',\n '[style.overflow]': '\"hidden\"',\n },\n})\nexport class TwButtonLinkComponent extends TwButtonComponent {\n @HostBinding('style.pointer-events')\n get pointerEvents(): string | null {\n return this._disabled() ? 'none' : null;\n }\n}\n","<!-- Loading spinner -->\n@if (_loading()) {\n <svg\n class=\"animate-spin\"\n [class]=\"spinnerSizeClass()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n}\n\n<!-- Leading icon slot -->\n@if (!_loading()) {\n <ng-content select=\"[twButtonIcon], [slot=icon]\"></ng-content>\n}\n\n<!-- Button content (hidden for icon-only buttons) -->\n@if (!_iconOnly()) {\n <span>\n <ng-content></ng-content>\n </span>\n}\n\n<!-- Trailing icon slot -->\n<ng-content select=\"[twButtonIconEnd], [slot=icon-end]\"></ng-content>\n","<ng-content select=\"[twButtonIcon], [slot=icon]\"></ng-content>\n<span>\n <ng-content></ng-content>\n</span>\n<ng-content select=\"[twButtonIconEnd], [slot=icon-end]\"></ng-content>\n","export * from './button.component';\n\nimport { TwButtonComponent, TwButtonLinkComponent } from './button.component';\n\nexport const TW_BUTTON_COMPONENTS = [TwButtonComponent, TwButtonLinkComponent] as const;\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n Input,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type InputVariant = 'default' | 'filled' | 'outlined' | 'underlined';\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nconst INPUT_BASE_CLASSES = `\n w-full\n text-slate-900 dark:text-slate-100\n placeholder:text-slate-400 dark:placeholder:text-slate-500\n transition-all duration-200\n disabled:opacity-50 disabled:cursor-not-allowed\n focus:outline-none\n`;\n\nconst INPUT_VARIANTS: Record<InputVariant, string> = {\n default:\n 'bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20',\n filled:\n 'bg-slate-100 dark:bg-slate-700 border-2 border-transparent rounded-lg focus:bg-white dark:focus:bg-slate-800 focus:border-blue-500',\n outlined: 'bg-transparent border-2 border-slate-300 dark:border-slate-600 rounded-lg focus:border-blue-500',\n underlined: 'bg-transparent border-b-2 border-slate-300 dark:border-slate-600 rounded-none px-0 focus:border-blue-500',\n};\n\nconst INPUT_SIZES: Record<InputSize, string> = {\n sm: 'text-sm px-3 py-1.5 min-h-8',\n md: 'text-sm px-4 py-2.5 min-h-10',\n lg: 'text-base px-4 py-3 min-h-12',\n};\n\nconst INPUT_ERROR_CLASSES = 'border-rose-500 focus:border-rose-500 focus:ring-rose-500/20';\n\n/**\n * Label directive for form fields\n */\n@Directive({\n selector: 'tw-label, [twLabel]',\n standalone: true,\n})\nexport class TwLabelDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n @Input({ transform: booleanAttribute }) required = false;\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5', this.class);\n }\n}\n\n/**\n * Hint/helper text directive\n */\n@Directive({\n selector: 'tw-hint, [twHint]',\n standalone: true,\n})\nexport class TwHintDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-xs text-slate-500 dark:text-slate-400 mt-1.5', this.class);\n }\n}\n\n/**\n * Error message directive\n */\n@Directive({\n selector: 'tw-error, [twError]',\n standalone: true,\n})\nexport class TwErrorDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-xs text-rose-600 mt-1.5', this.class);\n }\n\n @HostBinding('attr.role')\n get role(): string {\n return 'alert';\n }\n}\n\n/**\n * Input prefix/suffix container\n */\n@Directive({\n selector: '[twInputPrefix], [twInputSuffix]',\n standalone: true,\n})\nexport class TwInputAffixDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('flex items-center text-slate-500 dark:text-slate-400', this.class);\n }\n}\n\n/**\n * Highly customizable text input component with Tailwind CSS styling\n * Implements ControlValueAccessor for Angular forms integration\n *\n * @example\n * ```html\n * <tw-input\n * [(ngModel)]=\"name\"\n * placeholder=\"Enter your name\"\n * label=\"Full Name\"\n * hint=\"As it appears on your ID\">\n * </tw-input>\n *\n * <tw-input\n * formControlName=\"email\"\n * type=\"email\"\n * variant=\"filled\"\n * [error]=\"emailError\">\n * <span twInputPrefix>@</span>\n * </tw-input>\n * ```\n */\n@Component({\n selector: 'tw-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './input.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwInputComponent),\n multi: true,\n },\n ],\n host: {\n class: 'block',\n },\n})\nexport class TwInputComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n\n @ViewChild('inputElement') inputElement!: ElementRef<HTMLInputElement>;\n\n /** Input type */\n @Input() type = 'text';\n\n /** Visual variant */\n @Input() variant: InputVariant = 'default';\n\n /** Size of the input */\n @Input() size: InputSize = 'md';\n\n /** Label text */\n @Input() label = '';\n\n /** Placeholder text */\n @Input() placeholder = '';\n\n /** Hint/helper text */\n @Input() hint = '';\n\n /** Error message */\n @Input() error = '';\n\n /** Whether the field is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether the field is readonly */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /** Whether the field is required */\n @Input({ transform: booleanAttribute }) required = false;\n\n /** Whether to show a clear button */\n @Input({ transform: booleanAttribute }) clearable = false;\n\n /** Unique ID for the input (auto-generated if not provided) */\n @Input() inputId = `tw-input-${Math.random().toString(36).slice(2, 9)}`;\n\n /** Autocomplete attribute */\n @Input() autocomplete = '';\n\n /** Input mode for virtual keyboards */\n @Input() inputmode = '';\n\n /** Validation pattern */\n @Input() pattern = '';\n\n /** Minimum value (for number/date inputs) */\n @Input() min = '';\n\n /** Maximum value (for number/date inputs) */\n @Input() max = '';\n\n /** Minimum length */\n @Input() minlength: number | null = null;\n\n /** Maximum length */\n @Input() maxlength: number | null = null;\n\n /** Step value (for number inputs) */\n @Input() step = '';\n\n /** IDs of elements that describe this input */\n @Input() describedBy = '';\n\n /** Additional classes to merge */\n @Input() classOverride = '';\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Clear event */\n @Output() onClear = new EventEmitter<void>();\n\n protected value = '';\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n get hasError(): boolean {\n return !!this.error;\n }\n\n protected wrapperClasses = computed(() => {\n const hasAffixes = this.elementRef.nativeElement.querySelector(\n '[twInputPrefix], [twInputSuffix]'\n );\n\n if (hasAffixes || this.clearable) {\n return this.twClass.merge(\n 'flex items-center gap-2',\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : ''\n );\n }\n\n return '';\n });\n\n protected computedClasses = computed(() => {\n const hasWrapper = this.wrapperClasses();\n\n if (hasWrapper) {\n // When wrapped, input should be transparent\n return this.twClass.merge(\n 'flex-1 min-w-0 bg-transparent border-none focus:ring-0 p-0',\n INPUT_BASE_CLASSES.replaceAll(/px-\\d+/g, '').replaceAll(/py-[\\d.]+/g, ''),\n this.classOverride\n );\n }\n\n return this.twClass.merge(\n INPUT_BASE_CLASSES,\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : '',\n this.classOverride\n );\n });\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n clear(): void {\n this.value = '';\n this.onChange('');\n this.onClear.emit();\n this.inputElement?.nativeElement?.focus();\n }\n\n /** Focus the input programmatically */\n focus(): void {\n this.inputElement?.nativeElement?.focus();\n }\n\n /** Select all text in the input */\n select(): void {\n this.inputElement?.nativeElement?.select();\n }\n}\n\n/**\n * Textarea component with the same API as tw-input\n */\n@Component({\n selector: 'tw-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './textarea.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwTextareaComponent),\n multi: true,\n },\n ],\n host: {\n class: 'block',\n },\n})\nexport class TwTextareaComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n @ViewChild('textareaElement') textareaElement!: ElementRef<HTMLTextAreaElement>;\n\n @Input() variant: InputVariant = 'default';\n @Input() size: InputSize = 'md';\n @Input() label = '';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() error = '';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) readonly = false;\n @Input({ transform: booleanAttribute }) required = false;\n @Input({ transform: booleanAttribute }) showCount = false;\n @Input() inputId = `tw-textarea-${Math.random().toString(36).slice(2, 9)}`;\n @Input() rows = 4;\n @Input() minlength: number | null = null;\n @Input() maxlength: number | null = null;\n @Input() classOverride = '';\n @Input({ transform: booleanAttribute }) autoResize = false;\n\n protected value = '';\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n get hasError(): boolean {\n return !!this.error;\n }\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n INPUT_BASE_CLASSES,\n INPUT_VARIANTS[this.variant],\n INPUT_SIZES[this.size],\n this.hasError ? INPUT_ERROR_CLASSES : '',\n this.autoResize ? 'resize-none overflow-hidden' : 'resize-y',\n this.classOverride\n );\n });\n\n writeValue(value: string): void {\n this.value = value ?? '';\n if (this.autoResize) {\n setTimeout(() => {\n this.adjustHeight();\n }, 0);\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n\n if (this.autoResize) {\n this.adjustHeight();\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private adjustHeight(): void {\n const textarea = this.textareaElement?.nativeElement;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }\n\n focus(): void {\n this.textareaElement?.nativeElement?.focus();\n }\n}\n","@if (label) {\n <label [for]=\"inputId\" class=\"block text-sm font-medium text-slate-700 mb-1.5\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n}\n\n<div [class]=\"wrapperClasses()\">\n <!-- Prefix -->\n <ng-content select=\"[twInputPrefix]\"></ng-content>\n\n <!-- Input element -->\n <input\n #inputElement\n [id]=\"inputId\"\n [type]=\"type\"\n [class]=\"computedClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-describedby]=\"describedBy\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.inputmode]=\"inputmode\"\n [attr.pattern]=\"pattern\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [attr.step]=\"step\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus.emit($event)\"\n />\n\n <!-- Suffix -->\n <ng-content select=\"[twInputSuffix]\"></ng-content>\n\n <!-- Clear button -->\n @if (clearable && value && !disabled && !readonly) {\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-5 h-5 text-slate-400 hover:text-slate-600 transition-colors\"\n (click)=\"clear()\"\n aria-label=\"Clear input\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</div>\n\n@if (hint && !error) {\n <span class=\"block text-xs text-slate-500 mt-1.5\">{{ hint }}</span>\n}\n\n@if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n}\n\n<ng-content select=\"tw-hint, [twHint], tw-error, [twError]\"></ng-content>\n","@if (label) {\n <label [for]=\"inputId\" class=\"block text-sm font-medium text-slate-700 mb-1.5\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n}\n\n<textarea\n #textareaElement\n [id]=\"inputId\"\n [class]=\"computedClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [rows]=\"rows\"\n [attr.aria-invalid]=\"hasError\"\n [attr.minlength]=\"minlength\"\n [attr.maxlength]=\"maxlength\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n></textarea>\n\n@if (hint && !error) {\n <span class=\"block text-xs text-slate-500 mt-1.5\">{{ hint }}</span>\n}\n\n@if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n}\n\n@if (maxlength && showCount) {\n <span class=\"block text-xs text-slate-400 mt-1 text-right\">\n {{ value.length }} / {{ maxlength }}\n </span>\n}\n","export * from './input.component';\n\nimport {\n TwErrorDirective,\n TwHintDirective,\n TwInputAffixDirective,\n TwInputComponent,\n TwLabelDirective,\n TwTextareaComponent,\n} from './input.component';\n\nexport const TW_INPUT_COMPONENTS = [\n TwInputComponent,\n TwTextareaComponent,\n TwLabelDirective,\n TwHintDirective,\n TwErrorDirective,\n TwInputAffixDirective,\n] as const;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type CheckboxVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\nconst CHECKBOX_VARIANTS: Record<CheckboxVariant, string> = {\n primary: 'text-blue-600 focus:ring-blue-500 border-slate-300 dark:border-slate-600',\n secondary: 'text-slate-600 focus:ring-slate-500 border-slate-300 dark:border-slate-600',\n success: 'text-emerald-600 focus:ring-emerald-500 border-slate-300 dark:border-slate-600',\n warning: 'text-amber-500 focus:ring-amber-500 border-slate-300 dark:border-slate-600',\n danger: 'text-rose-600 focus:ring-rose-500 border-slate-300 dark:border-slate-600',\n};\n\nconst CHECKBOX_SIZES: Record<CheckboxSize, { box: string; label: string }> = {\n sm: { box: 'w-4 h-4', label: 'text-sm' },\n md: { box: 'w-5 h-5', label: 'text-base' },\n lg: { box: 'w-6 h-6', label: 'text-lg' },\n};\n\n/**\n * Checkbox component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-checkbox [(ngModel)]=\"checked\">Accept terms</tw-checkbox>\n * <tw-checkbox variant=\"success\" [binary]=\"true\">Enable feature</tw-checkbox>\n * ```\n */\n@Component({\n selector: 'tw-checkbox',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwCheckboxComponent),\n multi: true,\n },\n ],\n templateUrl: './checkbox.component.html',\n})\nexport class TwCheckboxComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n // Signal-based inputs\n readonly variant = input<CheckboxVariant>('primary');\n readonly size = input<CheckboxSize>('md');\n readonly disabled = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly indeterminate = input(false, {\n transform: (v: boolean | string) => v === '' || v === true,\n });\n readonly name = input('');\n readonly value = input<any>();\n readonly readonly = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly classOverride = input('');\n\n // Signal-based outputs\n readonly onFocus = output<FocusEvent>();\n readonly onBlur = output<FocusEvent>();\n readonly onChange = output<{ checked: boolean; value: any }>();\n\n // Internal state\n protected readonly checked = signal(false);\n private readonly _disabled = signal(false);\n\n private onChangeFn: (value: boolean) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n // Sync disabled state from input\n constructor() {\n effect(() => {\n this._disabled.set(this.disabled());\n });\n }\n\n protected readonly labelContainerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-2 cursor-pointer',\n this._disabled() ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride()\n );\n });\n\n protected readonly checkboxClasses = computed(() => {\n const variantClasses = CHECKBOX_VARIANTS[this.variant()];\n const sizeClasses = CHECKBOX_SIZES[this.size()].box;\n\n return this.twClass.merge(\n 'rounded border-2 bg-white dark:bg-slate-800 transition-colors duration-150',\n 'focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-slate-900',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n variantClasses,\n sizeClasses\n );\n });\n\n protected readonly labelTextClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n CHECKBOX_SIZES[this.size()].label,\n this._disabled() ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n onCheckboxChange(event: Event): void {\n if (this._disabled() || this.readonly()) return;\n\n const input = event.target as HTMLInputElement;\n const isChecked = input.checked;\n\n this.checked.set(isChecked);\n this.onChangeFn(isChecked);\n this.onChange.emit({ checked: isChecked, value: this.value() });\n }\n\n onInputBlur(event: FocusEvent): void {\n this.onTouchedFn();\n this.onBlur.emit(event);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n /** Toggle the checkbox programmatically */\n toggle(): void {\n if (!this._disabled() && !this.readonly()) {\n this.checked.set(!this.checked());\n this.onChangeFn(this.checked());\n this.onChange.emit({ checked: this.checked(), value: this.value() });\n }\n }\n}\n","<label [class]=\"labelContainerClasses()\">\n <input\n type=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.name]=\"name()\"\n [attr.value]=\"value()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"onCheckboxChange($event)\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onInputBlur($event)\"\n />\n <span [class]=\"labelTextClasses()\">\n <ng-content></ng-content>\n </span>\n</label>\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n Output,\n QueryList,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type RadioVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\nconst RADIO_VARIANTS: Record<RadioVariant, string> = {\n primary: 'text-blue-600 focus:ring-blue-500 border-slate-300 dark:border-slate-600',\n secondary: 'text-slate-600 focus:ring-slate-500 border-slate-300 dark:border-slate-600',\n success: 'text-emerald-600 focus:ring-emerald-500 border-slate-300 dark:border-slate-600',\n warning: 'text-amber-500 focus:ring-amber-500 border-slate-300 dark:border-slate-600',\n danger: 'text-rose-600 focus:ring-rose-500 border-slate-300 dark:border-slate-600',\n};\n\nconst RADIO_SIZES: Record<RadioSize, { radio: string; label: string }> = {\n sm: { radio: 'w-4 h-4', label: 'text-sm' },\n md: { radio: 'w-5 h-5', label: 'text-base' },\n lg: { radio: 'w-6 h-6', label: 'text-lg' },\n};\n\n/**\n * Single radio button component\n *\n * @example\n * ```html\n * <tw-radio-button value=\"opt1\" label=\"Option 1\"></tw-radio-button>\n * ```\n */\n@Component({\n selector: 'tw-radio-button',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './radio-button.component.html',\n})\nexport class TwRadioButtonComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Value of the radio button */\n @Input({ required: true }) value: any;\n\n /** Label text */\n @Input() label = '';\n\n /** Name attribute (set by parent group) */\n @Input() name = '';\n\n /** Visual variant */\n @Input() variant: RadioVariant = 'primary';\n\n /** Size of the radio button */\n @Input() size: RadioSize = 'md';\n\n /** Whether the radio is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Blur event */\n @Output() onBlur = new EventEmitter<FocusEvent>();\n\n /** Internal: selected value from parent */\n selectedValue = signal<any>(null);\n\n /** Internal: change callback from parent */\n onSelectionChange: (value: any) => void = () => {};\n\n protected isChecked = computed(() => this.selectedValue() === this.value);\n\n protected labelContainerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-2 cursor-pointer',\n this.disabled ? 'opacity-50 cursor-not-allowed' : ''\n );\n });\n\n protected radioClasses = computed(() => {\n const variantClasses = RADIO_VARIANTS[this.variant];\n const sizeClasses = RADIO_SIZES[this.size].radio;\n\n return this.twClass.merge(\n 'rounded-full border-2 bg-white dark:bg-slate-800 transition-colors duration-150',\n 'focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-slate-900',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n variantClasses,\n sizeClasses\n );\n });\n\n protected labelTextClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n RADIO_SIZES[this.size].label,\n this.disabled ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n onRadioChange(): void {\n if (!this.disabled) {\n this.onSelectionChange(this.value);\n }\n }\n}\n\n/**\n * Radio button group component\n *\n * @example\n * ```html\n * <tw-radio-group [(ngModel)]=\"selectedOption\">\n * <tw-radio-button value=\"opt1\" label=\"Option 1\"></tw-radio-button>\n * <tw-radio-button value=\"opt2\" label=\"Option 2\"></tw-radio-button>\n * </tw-radio-group>\n * ```\n */\n@Component({\n selector: 'tw-radio-group',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwRadioGroupComponent),\n multi: true,\n },\n ],\n templateUrl: './radio-group.component.html',\n})\nexport class TwRadioGroupComponent implements ControlValueAccessor, AfterContentInit {\n private readonly twClass = inject(TwClassService);\n\n /** Name for all radio buttons in the group */\n @Input() name = `tw-radio-group-${Math.random().toString(36).slice(2)}`;\n\n /** Orientation of the group */\n @Input() orientation: 'horizontal' | 'vertical' = 'vertical';\n\n /** Gap between radio buttons */\n @Input() gap: 'sm' | 'md' | 'lg' = 'md';\n\n /** Whether all radios are disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Change event */\n @Output() onChange = new EventEmitter<any>();\n\n @ContentChildren(TwRadioButtonComponent) radioButtons!: QueryList<TwRadioButtonComponent>;\n\n protected selectedValue = signal<any>(null);\n\n private onChangeFn: (value: any) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n private readonly GAPS = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n protected groupClasses = computed(() => {\n return this.twClass.merge(\n 'flex',\n this.orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n this.GAPS[this.gap]\n );\n });\n\n ngAfterContentInit(): void {\n this.updateRadioButtons();\n this.radioButtons.changes.subscribe(() => {\n this.updateRadioButtons();\n });\n }\n\n private updateRadioButtons(): void {\n this.radioButtons.forEach(radio => {\n radio.name = this.name;\n radio.selectedValue.set(this.selectedValue());\n radio.disabled = this.disabled || radio.disabled;\n radio.onSelectionChange = (value: any) => {\n this.selectedValue.set(value);\n this.onChangeFn(value);\n this.onChange.emit(value);\n this.updateRadioButtonsSelection();\n };\n });\n }\n\n private updateRadioButtonsSelection(): void {\n this.radioButtons.forEach(radio => {\n radio.selectedValue.set(this.selectedValue());\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this.selectedValue.set(value);\n if (this.radioButtons) {\n this.updateRadioButtonsSelection();\n }\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (this.radioButtons) {\n this.updateRadioButtons();\n }\n }\n}\n","<label [class]=\"labelContainerClasses()\">\n <input\n type=\"radio\"\n [class]=\"radioClasses()\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n (change)=\"onRadioChange()\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n />\n <span [class]=\"labelTextClasses()\">\n {{ label }}\n <ng-content></ng-content>\n </span>\n</label>\n","<div [class]=\"groupClasses()\" role=\"radiogroup\">\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SwitchVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nconst SWITCH_VARIANTS: Record<SwitchVariant, { on: string; off: string }> = {\n primary: { on: 'bg-blue-600', off: 'bg-slate-300 dark:bg-slate-600' },\n secondary: { on: 'bg-slate-600', off: 'bg-slate-300 dark:bg-slate-600' },\n success: { on: 'bg-emerald-600', off: 'bg-slate-300 dark:bg-slate-600' },\n warning: { on: 'bg-amber-500', off: 'bg-slate-300 dark:bg-slate-600' },\n danger: { on: 'bg-rose-600', off: 'bg-slate-300 dark:bg-slate-600' },\n};\n\nconst SWITCH_SIZES: Record<\n SwitchSize,\n { track: string; thumb: string; translate: string; label: string }\n> = {\n sm: { track: 'w-8 h-5', thumb: 'w-4 h-4', translate: 'translate-x-3', label: 'text-sm' },\n md: { track: 'w-11 h-6', thumb: 'w-5 h-5', translate: 'translate-x-5', label: 'text-base' },\n lg: { track: 'w-14 h-8', thumb: 'w-7 h-7', translate: 'translate-x-6', label: 'text-lg' },\n};\n\n/**\n * Switch/Toggle component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-switch [(ngModel)]=\"enabled\">Enable notifications</tw-switch>\n * <tw-switch variant=\"success\" size=\"lg\">Dark mode</tw-switch>\n * ```\n */\n@Component({\n selector: 'tw-switch',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSwitchComponent),\n multi: true,\n },\n ],\n templateUrl: './switch.component.html',\n})\nexport class TwSwitchComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n // Signal-based inputs\n readonly variant = input<SwitchVariant>('primary');\n readonly size = input<SwitchSize>('md');\n readonly disabled = input(false, { transform: (v: boolean | string) => v === '' || v === true });\n readonly labelPosition = input<'left' | 'right'>('right');\n readonly classOverride = input('');\n\n // Signal-based output\n readonly onChange = output<boolean>();\n\n // Internal state\n protected readonly checked = signal(false);\n protected readonly hasLabel = true;\n private readonly _disabled = signal(false);\n\n private onChangeFn: (value: boolean) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n protected readonly containerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-3 cursor-pointer',\n this.labelPosition() === 'left' ? 'flex-row-reverse' : '',\n this._disabled() ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride()\n );\n });\n\n protected readonly trackClasses = computed(() => {\n const variant = SWITCH_VARIANTS[this.variant()];\n const sizeClasses = SWITCH_SIZES[this.size()].track;\n\n return this.twClass.merge(\n 'relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 focus-visible:ring-blue-500',\n 'disabled:cursor-not-allowed',\n this.checked() ? variant.on : variant.off,\n sizeClasses\n );\n });\n\n protected readonly thumbClasses = computed(() => {\n const sizeClasses = SWITCH_SIZES[this.size()];\n\n return this.twClass.merge(\n 'inline-block rounded-full bg-white shadow-md transform transition-transform duration-200 ease-in-out',\n 'pointer-events-none ml-0.5',\n this.checked() ? sizeClasses.translate : 'translate-x-0',\n sizeClasses.thumb\n );\n });\n\n protected readonly labelClasses = computed(() => {\n return this.twClass.merge(\n 'text-slate-700 dark:text-slate-300 select-none',\n SWITCH_SIZES[this.size()].label,\n this._disabled() ? 'text-slate-400 dark:text-slate-500' : ''\n );\n });\n\n toggle(): void {\n if (this._disabled()) return;\n\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.onChangeFn(newValue);\n this.onTouchedFn();\n this.onChange.emit(newValue);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n","<label [class]=\"containerClasses()\">\n <button\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [class]=\"trackClasses()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (keydown.enter)=\"toggle(); $event.preventDefault()\"\n >\n <span [class]=\"thumbClasses()\"></span>\n </button>\n @if (hasLabel) {\n <span [class]=\"labelClasses()\">\n <ng-content></ng-content>\n </span>\n }\n</label>\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface SelectOption {\n label: string;\n value: any;\n disabled?: boolean;\n icon?: string;\n}\n\nexport interface SelectGroup {\n label: string;\n options: SelectOption[];\n}\n\nexport type SelectSize = 'sm' | 'md' | 'lg';\nexport type SelectVariant = 'default' | 'filled';\nexport type SelectAppendTo = 'body' | 'self';\n\nconst SELECT_SIZES: Record<SelectSize, { trigger: string; text: string }> = {\n sm: { trigger: 'px-3 py-1.5 min-h-8', text: 'text-sm' },\n md: { trigger: 'px-4 py-2.5 min-h-10', text: 'text-base' },\n lg: { trigger: 'px-5 py-3 min-h-12', text: 'text-lg' },\n};\n\n/**\n * Select/Dropdown component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-select [options]=\"options\" [(ngModel)]=\"selected\" placeholder=\"Choose...\"></tw-select>\n * <tw-select [options]=\"options\" [filter]=\"true\" label=\"Country\"></tw-select>\n * <tw-select [options]=\"options\" appendTo=\"body\"></tw-select>\n * ```\n */\n@Component({\n selector: 'tw-select',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSelectComponent),\n multi: true,\n },\n ],\n templateUrl: './select.component.html',\n})\nexport class TwSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerButton') triggerButton!: ElementRef<HTMLButtonElement>;\n\n /** Options to display (flat list) */\n @Input() options: SelectOption[] = [];\n\n /** Grouped options to display */\n @Input() groups: SelectGroup[] = [];\n\n /** Placeholder text */\n @Input() placeholder = 'Select an option';\n\n /** Label text */\n @Input() label = '';\n\n /** Size of the select */\n @Input() size: SelectSize = 'md';\n\n /** Visual variant */\n @Input() variant: SelectVariant = 'default';\n\n /** Whether the select is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether the select is required */\n @Input({ transform: booleanAttribute }) required = false;\n\n /** Whether to show filter input */\n @Input({ transform: booleanAttribute }) filter = false;\n\n /** Filter placeholder text */\n @Input() filterPlaceholder = 'Search...';\n\n /** Empty message when no options match filter */\n @Input() emptyMessage = 'No results found';\n\n /** Whether to show checkmark for selected option */\n @Input({ transform: booleanAttribute }) showCheckmark = true;\n\n /** Hint text */\n @Input() hint = '';\n\n /** Error message */\n @Input() error = '';\n\n /** Input ID */\n @Input() inputId = `tw-select-${Math.random().toString(36).slice(2)}`;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /**\n * Where to append the dropdown\n * - 'body': Appends dropdown to document body (avoids overflow clipping)\n * - 'self': Keeps dropdown within the component (default)\n */\n @Input() appendTo: SelectAppendTo = 'body';\n\n /** Change event */\n @Output() onChange = new EventEmitter<SelectOption | null>();\n\n /** Open/Close event */\n @Output() onToggle = new EventEmitter<boolean>();\n\n protected isOpen = signal(false);\n protected filterValue = signal('');\n protected selectedValue = signal<any>(null);\n protected dropdownPosition = signal<{ top: number; left: number; width: number } | null>(null);\n\n private onChangeFn: (value: any) => void = () => {};\n private onTouchedFn: () => void = () => {};\n private portalContainer: HTMLElement | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n\n protected allOptions = computed(() => {\n if (this.groups.length > 0) {\n return this.groups.flatMap(g => g.options);\n }\n return this.options;\n });\n\n protected selectedOption = computed(() => {\n return this.allOptions().find(opt => opt.value === this.selectedValue()) || null;\n });\n\n protected filteredOptions = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.options;\n return this.options.filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n protected filteredGroups = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.groups;\n\n return this.groups\n .map(group => ({\n ...group,\n options: group.options.filter(opt => opt.label.toLowerCase().includes(filter)),\n }))\n .filter(group => group.options.length > 0);\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('relative', this.classOverride);\n });\n\n protected labelClasses = computed(() => {\n return 'block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5';\n });\n\n protected triggerClasses = computed(() => {\n const sizeClasses = SELECT_SIZES[this.size];\n const hasError = !!this.error;\n\n return this.twClass.merge(\n 'w-full flex items-center justify-between rounded-lg border bg-white dark:bg-slate-800 transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-offset-0',\n sizeClasses.trigger,\n sizeClasses.text,\n hasError\n ? 'border-rose-500 focus:ring-rose-500 focus:border-rose-500'\n : 'border-slate-300 dark:border-slate-600 focus:ring-blue-500 focus:border-blue-500 hover:border-slate-400 dark:hover:border-slate-500',\n this.disabled ? 'opacity-50 cursor-not-allowed bg-slate-50 dark:bg-slate-900' : 'cursor-pointer',\n this.isOpen() ? 'ring-2 ring-blue-500 border-blue-500' : ''\n );\n });\n\n protected valueDisplayClasses = computed(() => {\n return this.twClass.merge(\n 'truncate text-left',\n this.selectedOption() ? 'text-slate-900 dark:text-slate-100' : 'text-slate-400 dark:text-slate-500'\n );\n });\n\n protected chevronClasses = computed(() => {\n return this.twClass.merge(\n 'w-5 h-5 text-slate-400 transition-transform duration-200 flex-shrink-0 ml-2',\n this.isOpen() ? 'rotate-180' : ''\n );\n });\n\n protected dropdownClasses = computed(() => {\n const baseClasses = this.twClass.merge(\n 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 rounded-lg shadow-lg',\n 'animate-in fade-in-0 zoom-in-95 duration-100'\n );\n\n if (this.appendTo === 'body') {\n return this.twClass.merge(baseClasses, 'fixed z-[9999]');\n }\n return this.twClass.merge(baseClasses, 'absolute z-50 w-full mt-1');\n });\n\n protected dropdownStyle = computed(() => {\n if (this.appendTo === 'body') {\n const pos = this.dropdownPosition();\n if (pos) {\n return {\n top: `${pos.top}px`,\n left: `${pos.left}px`,\n width: `${pos.width}px`,\n };\n }\n }\n return {};\n });\n\n protected optionClasses(option: SelectOption) {\n const isSelected = this.isSelected(option);\n return this.twClass.merge(\n 'w-full flex items-center px-4 py-2.5 text-left text-sm transition-colors',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300'\n : 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-700',\n option.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'\n );\n }\n\n ngAfterViewInit(): void {\n if (this.appendTo === 'body' && isPlatformBrowser(this.platformId)) {\n this.setupScrollListener();\n this.setupResizeListener();\n }\n }\n\n ngOnDestroy(): void {\n this.removePortal();\n this.removeScrollListener();\n this.removeResizeListener();\n }\n\n isSelected(option: SelectOption): boolean {\n return option.value === this.selectedValue();\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n\n const willOpen = !this.isOpen();\n this.isOpen.set(willOpen);\n this.onToggle.emit(willOpen);\n\n if (willOpen) {\n this.updateDropdownPosition();\n } else {\n this.filterValue.set('');\n }\n }\n\n selectOption(option: SelectOption): void {\n if (option.disabled) return;\n\n this.selectedValue.set(option.value);\n this.onChangeFn(option.value);\n this.onChange.emit(option);\n this.isOpen.set(false);\n this.filterValue.set('');\n this.onTouchedFn();\n }\n\n onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterValue.set(input.value);\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.toggleDropdown();\n break;\n }\n case 'Escape': {\n this.isOpen.set(false);\n this.filterValue.set('');\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n if (!this.isOpen()) {\n this.isOpen.set(true);\n this.updateDropdownPosition();\n }\n break;\n }\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // Check if click is inside this component\n if (this.elementRef.nativeElement.contains(target)) {\n return;\n }\n\n // Check if click is inside the portal (for appendTo=\"body\")\n if (this.portalContainer && this.portalContainer.contains(target)) {\n return;\n }\n\n this.isOpen.set(false);\n this.filterValue.set('');\n }\n\n private updateDropdownPosition(): void {\n if (this.appendTo !== 'body' || !this.triggerButton) return;\n\n const triggerEl = this.triggerButton.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n\n this.dropdownPosition.set({\n top: rect.bottom + 4, // 4px gap\n left: rect.left,\n width: rect.width,\n });\n }\n\n private setupScrollListener(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.scrollListener = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n\n window.addEventListener('scroll', this.scrollListener, true);\n }\n\n private removeScrollListener(): void {\n if (this.scrollListener) {\n window.removeEventListener('scroll', this.scrollListener, true);\n this.scrollListener = null;\n }\n }\n\n private setupResizeListener(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n this.resizeListener = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n\n window.addEventListener('resize', this.resizeListener);\n }\n\n private removeResizeListener(): void {\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n this.resizeListener = null;\n }\n }\n\n private removePortal(): void {\n if (this.portalContainer) {\n this.portalContainer.remove();\n this.portalContainer = null;\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** Clear the selection */\n clear(): void {\n this.selectedValue.set(null);\n this.onChangeFn(null);\n this.onChange.emit(null);\n }\n}\n","<div [class]=\"containerClasses()\">\n @if (label) {\n <label [for]=\"inputId\" [class]=\"labelClasses()\">\n {{ label }}\n @if (required) {\n <span class=\"text-rose-500 ml-0.5\">*</span>\n }\n </label>\n }\n\n <div class=\"relative\">\n <button\n #triggerButton\n type=\"button\"\n [id]=\"inputId\"\n [class]=\"triggerClasses()\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeydown($event)\"\n >\n <span [class]=\"valueDisplayClasses()\">\n @if (selectedOption()) {\n {{ selectedOption()?.label }}\n } @else {\n {{ placeholder }}\n }\n </span>\n <svg\n [class]=\"chevronClasses()\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <!-- Dropdown for appendTo=\"self\" -->\n @if (isOpen() && appendTo === 'self') {\n <div [class]=\"dropdownClasses()\" role=\"listbox\">\n @if (filter) {\n <div class=\"p-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n <div class=\"max-h-60 overflow-auto py-1\">\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <div class=\"px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n @for (option of group.options; track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n </div>\n }\n @if (filteredGroups().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n @if (filteredOptions().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n\n @if (hint && !error) {\n <span class=\"block text-xs text-slate-500 dark:text-slate-400 mt-1.5\">{{ hint }}</span>\n }\n @if (error) {\n <span class=\"block text-xs text-rose-600 mt-1.5\" role=\"alert\">{{ error }}</span>\n }\n</div>\n\n<!-- Dropdown portal for appendTo=\"body\" -->\n@if (isOpen() && appendTo === 'body') {\n <div [class]=\"dropdownClasses()\" [ngStyle]=\"dropdownStyle()\" role=\"listbox\">\n @if (filter) {\n <div class=\"p-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n />\n </div>\n }\n <div class=\"max-h-60 overflow-auto py-1\">\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <div class=\"px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n @for (option of group.options; track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n </div>\n }\n @if (filteredGroups().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n } @else {\n @for (option of filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"optionClasses(option)\"\n [attr.aria-selected]=\"isSelected(option)\"\n role=\"option\"\n (click)=\"selectOption(option)\"\n >\n @if (showCheckmark && isSelected(option)) {\n <svg\n class=\"w-4 h-4 mr-2 text-blue-600 flex-shrink-0\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n <span class=\"truncate\">{{ option.label }}</span>\n </button>\n }\n @if (filteredOptions().length === 0) {\n <div class=\"px-4 py-3 text-sm text-slate-500 dark:text-slate-400 text-center\">\n {{ emptyMessage }}\n </div>\n }\n }\n </div>\n </div>\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface MultiSelectOption {\n label: string;\n value: unknown;\n disabled?: boolean;\n icon?: string;\n}\n\nexport interface MultiSelectGroup {\n label: string;\n options: MultiSelectOption[];\n}\n\nexport type MultiSelectSize = 'sm' | 'md' | 'lg';\nexport type MultiSelectVariant = 'default' | 'filled';\nexport type MultiSelectAppendTo = 'body' | 'self';\n\nconst MULTISELECT_SIZES: Record<MultiSelectSize, { trigger: string; text: string }> = {\n sm: { trigger: 'px-3 py-1.5 min-h-8', text: 'text-sm' },\n md: { trigger: 'px-4 py-2.5 min-h-10', text: 'text-base' },\n lg: { trigger: 'px-5 py-3 min-h-12', text: 'text-lg' },\n};\n\n/**\n * Multi-select/Dropdown component with Tailwind CSS styling.\n * Supports multiple selections and grouped options.\n *\n * @example\n * ```html\n * <tw-multiselect [options]=\"options\" [(ngModel)]=\"selected\" placeholder=\"Choose...\"></tw-multiselect>\n * <tw-multiselect [groups]=\"groups\" [filter]=\"true\" label=\"Countries\"></tw-multiselect>\n * <tw-multiselect [options]=\"options\" appendTo=\"body\" [maxSelections]=\"3\"></tw-multiselect>\n * ```\n */\n@Component({\n selector: 'tw-multiselect',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwMultiSelectComponent),\n multi: true,\n },\n ],\n templateUrl: './multiselect.component.html',\n})\nexport class TwMultiSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n @ViewChild('triggerButton') triggerButton!: ElementRef<HTMLButtonElement>;\n\n /** Options to display (flat list) */\n @Input() options: MultiSelectOption[] = [];\n\n /** Grouped options to display */\n @Input() groups: MultiSelectGroup[] = [];\n\n /** Placeholder text */\n @Input() placeholder = 'Select options';\n\n /** Label text */\n @Input() label = '';\n\n /** Enable search/filter */\n @Input({ transform: booleanAttribute }) filter = false;\n\n /** Size variant */\n @Input() size: MultiSelectSize = 'md';\n\n /** Visual variant */\n @Input() variant: MultiSelectVariant = 'default';\n\n /** Where to append dropdown */\n @Input() appendTo: MultiSelectAppendTo = 'self';\n\n /** Disabled state */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Show checkboxes */\n @Input({ transform: booleanAttribute }) showCheckbox = true;\n\n /** Show select all option */\n @Input({ transform: booleanAttribute }) showSelectAll = true;\n\n /** Maximum number of selections allowed (0 = unlimited) */\n @Input() maxSelections = 0;\n\n /** Custom class for dropdown */\n @Input() dropdownClass = '';\n\n /** Custom class for trigger button */\n @Input() triggerClass = '';\n\n /** Selection change event */\n @Output() selectionChange = new EventEmitter<unknown[]>();\n\n protected readonly twClass = inject(TwClassService);\n protected readonly elementRef = inject(ElementRef);\n protected readonly document = inject(DOCUMENT);\n protected readonly platformId = inject(PLATFORM_ID);\n\n protected isOpen = signal(false);\n protected filterValue = signal('');\n protected selectedValues = signal<Set<unknown>>(new Set());\n protected dropdownPosition = signal<{ top: number; left: number; width: number } | null>(null);\n\n private onChangeFn: (value: unknown[]) => void = () => {};\n private onTouchedFn: () => void = () => {};\n private clickListener: ((event: MouseEvent) => void) | null = null;\n private resizeListener: (() => void) | null = null;\n\n protected allOptions = computed(() => {\n if (this.groups.length > 0) {\n return this.groups.flatMap(g => g.options);\n }\n return this.options;\n });\n\n protected selectedOptions = computed(() => {\n const selected = this.selectedValues();\n return this.allOptions().filter(opt => selected.has(opt.value));\n });\n\n protected displayText = computed(() => {\n const selected = this.selectedOptions();\n if (selected.length === 0) return this.placeholder;\n if (selected.length === 1) return selected[0].label;\n return `${selected.length} selected`;\n });\n\n protected filteredGroups = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.groups;\n\n return this.groups\n .map(group => ({\n ...group,\n options: group.options.filter(opt => opt.label.toLowerCase().includes(filter)),\n }))\n .filter(group => group.options.length > 0);\n });\n\n protected filteredOptions = computed(() => {\n const filter = this.filterValue().toLowerCase();\n if (!filter) return this.options;\n\n return this.options.filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n protected triggerClasses = computed(() => {\n const sizeClasses = MULTISELECT_SIZES[this.size].trigger;\n const textClasses = MULTISELECT_SIZES[this.size].text;\n\n const baseClasses = [\n 'flex items-center justify-between w-full rounded-md border transition-colors',\n textClasses,\n sizeClasses,\n ];\n\n if (this.disabled) {\n baseClasses.push('bg-slate-100 dark:bg-slate-900 text-slate-400 dark:text-slate-500 cursor-not-allowed border-slate-300 dark:border-slate-700');\n } else if (this.variant === 'filled') {\n baseClasses.push(\n 'bg-slate-100 dark:bg-slate-700 border-slate-100 dark:border-slate-700 hover:bg-slate-200 dark:hover:bg-slate-600 focus:bg-white dark:focus:bg-slate-800 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20'\n );\n } else {\n baseClasses.push(\n 'bg-white dark:bg-slate-800 border-slate-300 dark:border-slate-600 hover:border-slate-400 dark:hover:border-slate-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 text-slate-900 dark:text-slate-100'\n );\n }\n\n return this.twClass.merge(baseClasses.join(' '), this.triggerClass);\n });\n\n protected dropdownClasses = computed(() => {\n const baseClasses = [\n 'absolute z-50 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white dark:bg-slate-800 py-1 shadow-lg ring-1 ring-black/5 dark:ring-white/10',\n 'focus:outline-none',\n ];\n\n return this.twClass.merge(baseClasses.join(' '), this.dropdownClass);\n });\n\n ngAfterViewInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.clickListener = this.onDocumentClick.bind(this);\n this.document.addEventListener('click', this.clickListener);\n\n this.resizeListener = () => {\n if (this.isOpen() && this.appendTo === 'body') {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('resize', this.resizeListener);\n }\n }\n\n ngOnDestroy(): void {\n if (this.clickListener) {\n this.document.removeEventListener('click', this.clickListener);\n }\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown[]): void {\n if (Array.isArray(value)) {\n this.selectedValues.set(new Set(value));\n } else {\n this.selectedValues.set(new Set());\n }\n }\n\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n toggleDropdown(): void {\n if (this.disabled) return;\n\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n openDropdown(): void {\n this.isOpen.set(true);\n this.onTouchedFn();\n\n if (this.appendTo === 'body') {\n setTimeout(() => { this.updateDropdownPosition(); }, 0);\n }\n }\n\n closeDropdown(): void {\n this.isOpen.set(false);\n this.filterValue.set('');\n this.dropdownPosition.set(null);\n }\n\n toggleOption(option: MultiSelectOption): void {\n if (option.disabled) return;\n\n const selected = new Set(this.selectedValues());\n\n if (selected.has(option.value)) {\n selected.delete(option.value);\n } else {\n if (this.maxSelections > 0 && selected.size >= this.maxSelections) {\n return; // Max selections reached\n }\n selected.add(option.value);\n }\n\n this.selectedValues.set(selected);\n const values = [...selected];\n this.onChangeFn(values);\n this.selectionChange.emit(values);\n }\n\n toggleSelectAll(): void {\n const allOptions = this.allOptions().filter(opt => !opt.disabled);\n const selected = this.selectedValues();\n\n if (selected.size === allOptions.length) {\n // Deselect all\n this.selectedValues.set(new Set());\n this.onChangeFn([]);\n this.selectionChange.emit([]);\n } else {\n // Select all (respecting max selections)\n const toSelect = this.maxSelections > 0\n ? allOptions.slice(0, this.maxSelections)\n : allOptions;\n const values = toSelect.map(opt => opt.value);\n this.selectedValues.set(new Set(values));\n this.onChangeFn(values);\n this.selectionChange.emit(values);\n }\n }\n\n isSelected(option: MultiSelectOption): boolean {\n return this.selectedValues().has(option.value);\n }\n\n isAllSelected(): boolean {\n const allOptions = this.allOptions().filter(opt => !opt.disabled);\n return allOptions.length > 0 && this.selectedValues().size === allOptions.length;\n }\n\n isSomeSelected(): boolean {\n const {size} = this.selectedValues();\n return size > 0 && size < this.allOptions().filter(opt => !opt.disabled).length;\n }\n\n clearAll(): void {\n this.selectedValues.set(new Set());\n this.onChangeFn([]);\n this.selectionChange.emit([]);\n }\n\n protected onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterValue.set(input.value);\n }\n\n @HostListener('document:keydown.escape')\n protected onEscapePress(): void {\n if (this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n private onDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n const clickedInside = this.elementRef.nativeElement.contains(target);\n\n if (!clickedInside && this.isOpen()) {\n this.closeDropdown();\n }\n }\n\n private updateDropdownPosition(): void {\n if (!this.triggerButton?.nativeElement) return;\n\n const rect = this.triggerButton.nativeElement.getBoundingClientRect();\n this.dropdownPosition.set({\n top: rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n });\n }\n}\n\n","<div class=\"tw-multiselect relative\">\n <!-- Label -->\n @if (label) {\n <label class=\"block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1\">\n {{ label }}\n </label>\n }\n\n <!-- Trigger Button -->\n <button\n #triggerButton\n type=\"button\"\n [class]=\"triggerClasses()\"\n [disabled]=\"disabled\"\n (click)=\"toggleDropdown()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n >\n <span class=\"flex-1 text-left truncate\">\n {{ displayText() }}\n </span>\n\n <div class=\"flex items-center gap-2\">\n @if (selectedValues().size > 0 && !disabled) {\n <button\n type=\"button\"\n class=\"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300\"\n (click)=\"clearAll(); $event.stopPropagation()\"\n aria-label=\"Clear all selections\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n\n <svg\n class=\"w-5 h-5 text-slate-400 dark:text-slate-500 transition-transform\"\n [class.rotate-180]=\"isOpen()\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </button>\n\n <!-- Dropdown -->\n @if (isOpen()) {\n @if (appendTo === 'body') {\n <div\n [class]=\"dropdownClasses()\"\n [style.top.px]=\"dropdownPosition()?.top\"\n [style.left.px]=\"dropdownPosition()?.left\"\n [style.width.px]=\"dropdownPosition()?.width\"\n [style.position]=\"'fixed'\"\n >\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n } @else {\n <div [class]=\"dropdownClasses()\">\n <ng-container *ngTemplateOutlet=\"dropdownContent\"></ng-container>\n </div>\n }\n }\n</div>\n\n<!-- Dropdown Content Template -->\n<ng-template #dropdownContent>\n <!-- Filter Input -->\n @if (filter) {\n <div class=\"px-2 py-2 border-b border-slate-200 dark:border-slate-700\">\n <input\n type=\"text\"\n class=\"w-full px-3 py-1.5 text-sm border border-slate-300 dark:border-slate-600 rounded-md bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder:text-slate-400 dark:placeholder:text-slate-500 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 focus:outline-none\"\n placeholder=\"Search...\"\n [value]=\"filterValue()\"\n (input)=\"onFilterInput($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <!-- Select All Option -->\n @if (showSelectAll && allOptions().length > 0) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer border-b border-slate-200 dark:border-slate-700 flex items-center gap-2\"\n (click)=\"toggleSelectAll(); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isAllSelected() || isSomeSelected()\"\n [class.bg-blue-600]=\"isAllSelected() || isSomeSelected()\"\n [class.border-slate-300]=\"!isAllSelected() && !isSomeSelected()\"\n [class.dark:border-slate-500]=\"!isAllSelected() && !isSomeSelected()\">\n @if (isAllSelected()) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n @if (isSomeSelected() && !isAllSelected()) {\n <div class=\"w-2 h-0.5 bg-white\"></div>\n }\n </div>\n }\n <span class=\"font-medium text-slate-900 dark:text-slate-100\">Select All</span>\n </div>\n }\n\n <!-- Grouped Options -->\n @if (groups.length > 0) {\n @for (group of filteredGroups(); track group.label) {\n <div>\n <!-- Group Header -->\n <div class=\"px-3 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase bg-slate-50 dark:bg-slate-900\">\n {{ group.label }}\n </div>\n\n <!-- Group Options -->\n @for (option of group.options; track option.value) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer flex items-center gap-2 transition-colors\"\n [class.opacity-50]=\"option.disabled\"\n [class.cursor-not-allowed]=\"option.disabled\"\n [class.bg-blue-50]=\"isSelected(option) && !option.disabled\"\n [class.dark:bg-blue-900/30]=\"isSelected(option) && !option.disabled\"\n (click)=\"toggleOption(option); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isSelected(option)\"\n [class.bg-blue-600]=\"isSelected(option)\"\n [class.border-slate-300]=\"!isSelected(option)\"\n [class.dark:border-slate-500]=\"!isSelected(option)\">\n @if (isSelected(option)) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n </div>\n }\n\n @if (option.icon) {\n <span class=\"text-slate-500 dark:text-slate-400\">{{ option.icon }}</span>\n }\n\n <span class=\"flex-1\" [class.text-slate-900]=\"!option.disabled\" [class.dark:text-slate-100]=\"!option.disabled\" [class.text-slate-400]=\"option.disabled\" [class.dark:text-slate-500]=\"option.disabled\">\n {{ option.label }}\n </span>\n </div>\n }\n </div>\n }\n } @else {\n <!-- Flat Options -->\n @for (option of filteredOptions(); track option.value) {\n <div\n class=\"px-3 py-2 hover:bg-slate-50 dark:hover:bg-slate-700 cursor-pointer flex items-center gap-2 transition-colors\"\n [class.opacity-50]=\"option.disabled\"\n [class.cursor-not-allowed]=\"option.disabled\"\n [class.bg-blue-50]=\"isSelected(option) && !option.disabled\"\n [class.dark:bg-blue-900/30]=\"isSelected(option) && !option.disabled\"\n (click)=\"toggleOption(option); $event.stopPropagation()\"\n >\n @if (showCheckbox) {\n <div class=\"flex items-center justify-center w-4 h-4 border-2 rounded transition-colors\"\n [class.border-blue-600]=\"isSelected(option)\"\n [class.bg-blue-600]=\"isSelected(option)\"\n [class.border-slate-300]=\"!isSelected(option)\"\n [class.dark:border-slate-500]=\"!isSelected(option)\">\n @if (isSelected(option)) {\n <svg class=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"3\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n </div>\n }\n\n @if (option.icon) {\n <span class=\"text-slate-500 dark:text-slate-400\">{{ option.icon }}</span>\n }\n\n <span class=\"flex-1\" [class.text-slate-900]=\"!option.disabled\" [class.dark:text-slate-100]=\"!option.disabled\" [class.text-slate-400]=\"option.disabled\" [class.dark:text-slate-500]=\"option.disabled\">\n {{ option.label }}\n </span>\n </div>\n }\n }\n\n <!-- No Results -->\n @if ((groups.length > 0 ? filteredGroups().length === 0 : filteredOptions().length === 0)) {\n <div class=\"px-3 py-2 text-sm text-slate-500 dark:text-slate-400 text-center\">\n No options found\n </div>\n }\n</ng-template>\n\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SliderVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\nexport type SliderSize = 'sm' | 'md' | 'lg';\n\nconst SLIDER_VARIANTS: Record<SliderVariant, { fill: string; thumb: string }> = {\n primary: { fill: 'bg-blue-600', thumb: 'border-blue-600' },\n secondary: { fill: 'bg-slate-600', thumb: 'border-slate-600' },\n success: { fill: 'bg-emerald-600', thumb: 'border-emerald-600' },\n warning: { fill: 'bg-amber-500', thumb: 'border-amber-500' },\n danger: { fill: 'bg-rose-600', thumb: 'border-rose-600' },\n};\n\nconst SLIDER_SIZES: Record<SliderSize, { track: string; thumb: string }> = {\n sm: { track: 'h-1', thumb: 'w-4 h-4' },\n md: { track: 'h-2', thumb: 'w-5 h-5' },\n lg: { track: 'h-3', thumb: 'w-6 h-6' },\n};\n\n/**\n * Slider/Range component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-slider [(ngModel)]=\"value\" [min]=\"0\" [max]=\"100\"></tw-slider>\n * <tw-slider [showValue]=\"true\" [showMinMax]=\"true\" label=\"Volume\"></tw-slider>\n * ```\n */\n@Component({\n selector: 'tw-slider',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwSliderComponent),\n multi: true,\n },\n ],\n templateUrl: './slider.component.html',\n})\nexport class TwSliderComponent implements ControlValueAccessor {\n private readonly twClass = inject(TwClassService);\n\n /** Minimum value */\n @Input({ transform: numberAttribute }) min = 0;\n\n /** Maximum value */\n @Input({ transform: numberAttribute }) max = 100;\n\n /** Step increment */\n @Input({ transform: numberAttribute }) step = 1;\n\n /** Label text */\n @Input() label = '';\n\n /** Visual variant */\n @Input() variant: SliderVariant = 'primary';\n\n /** Size of the slider */\n @Input() size: SliderSize = 'md';\n\n /** Whether the slider is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Whether to show the current value */\n @Input({ transform: booleanAttribute }) showValue = false;\n\n /** Whether to show min/max labels */\n @Input({ transform: booleanAttribute }) showMinMax = false;\n\n /** Whether to show tick marks */\n @Input({ transform: booleanAttribute }) showTicks = false;\n\n /** Number of tick marks to show */\n @Input({ transform: numberAttribute }) tickCount = 5;\n\n /** Whether to show value bubble while dragging */\n @Input({ transform: booleanAttribute }) showValueBubble = false;\n\n /** Format function for display value */\n @Input() valueFormat: (value: number) => string = v => v.toString();\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Change event (fires on mouseup/touchend) */\n @Output() onChange = new EventEmitter<number>();\n\n /** Input event (fires continuously while dragging) */\n @Output() onInput = new EventEmitter<number>();\n\n /** Focus event */\n @Output() onFocus = new EventEmitter<FocusEvent>();\n\n /** Blur event */\n @Output() onBlur = new EventEmitter<FocusEvent>();\n\n protected value = signal(0);\n protected isDragging = signal(false);\n\n private onChangeFn: (value: number) => void = () => {};\n private onTouchedFn: () => void = () => {};\n\n protected fillPercentage = computed(() => {\n const range = this.max - this.min;\n if (range === 0) return 0;\n return ((this.value() - this.min) / range) * 100;\n });\n\n protected displayValue = computed(() => {\n return this.valueFormat(this.value());\n });\n\n protected ticks = computed(() => {\n if (this.tickCount <= 0) return [];\n const ticks: number[] = [];\n const step = (this.max - this.min) / (this.tickCount - 1);\n for (let i = 0; i < this.tickCount; i++) {\n ticks.push(Math.round(this.min + step * i));\n }\n return ticks;\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('w-full', this.classOverride);\n });\n\n protected labelClasses = computed(() => {\n return 'text-sm font-medium text-slate-700 dark:text-slate-300';\n });\n\n protected sliderContainerClasses = computed(() => {\n return 'flex items-center';\n });\n\n protected trackClasses = computed(() => {\n const sizeClasses = SLIDER_SIZES[this.size].track;\n return this.twClass.merge(\n 'w-full rounded-full bg-slate-200 dark:bg-slate-700',\n sizeClasses,\n this.disabled ? 'opacity-50' : ''\n );\n });\n\n protected fillClasses = computed(() => {\n const variant = SLIDER_VARIANTS[this.variant];\n const sizeClasses = SLIDER_SIZES[this.size].track;\n return this.twClass.merge(\n 'rounded-full transition-all duration-100',\n variant.fill,\n sizeClasses\n );\n });\n\n protected inputClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 w-full opacity-0 cursor-pointer',\n this.disabled ? 'cursor-not-allowed' : ''\n );\n });\n\n protected thumbClasses = computed(() => {\n const variant = SLIDER_VARIANTS[this.variant];\n const sizeClasses = SLIDER_SIZES[this.size].thumb;\n return this.twClass.merge(\n 'rounded-full bg-white border-2 shadow-md transition-transform',\n variant.thumb,\n sizeClasses,\n this.isDragging() ? 'scale-110' : '',\n this.disabled ? 'opacity-50' : ''\n );\n });\n\n onSliderInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number.parseFloat(input.value);\n this.value.set(newValue);\n this.onInput.emit(newValue);\n }\n\n onSliderChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newValue = Number.parseFloat(input.value);\n this.value.set(newValue);\n this.onChangeFn(newValue);\n this.onChange.emit(newValue);\n }\n\n onInputBlur(): void {\n this.onTouchedFn();\n this.onBlur.emit();\n }\n\n onDragStart(): void {\n this.isDragging.set(true);\n }\n\n onDragEnd(): void {\n this.isDragging.set(false);\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n this.value.set(value ?? this.min);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Header row with label and/or value -->\n @if (label || showValue) {\n <div class=\"flex justify-between items-center mb-2\">\n @if (label) {\n <label [class]=\"labelClasses()\">{{ label }}</label>\n } @else {\n <span></span>\n }\n @if (showValue) {\n <span class=\"text-sm font-semibold text-slate-900 tabular-nums\">{{ displayValue() }}</span>\n }\n </div>\n }\n\n <div [class]=\"sliderContainerClasses()\">\n @if (showMinMax) {\n <span class=\"text-xs text-slate-500 mr-3 tabular-nums min-w-6\">{{ valueFormat(min) }}</span>\n }\n\n <div class=\"relative flex-1\">\n <!-- Track background -->\n <div [class]=\"trackClasses()\">\n <!-- Fill -->\n <div [class]=\"fillClasses()\" [style.width.%]=\"fillPercentage()\"></div>\n </div>\n\n <!-- Thumb indicator (visual only, positioned over the fill) -->\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 pointer-events-none\"\n [style.left.%]=\"fillPercentage()\"\n >\n <div [class]=\"thumbClasses()\"></div>\n\n <!-- Value tooltip bubble (shown while dragging or when showValueBubble is true) -->\n @if (showValueBubble && isDragging()) {\n <div\n class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-slate-800 text-white text-xs font-medium rounded shadow-lg whitespace-nowrap\"\n >\n {{ displayValue() }}\n <div\n class=\"absolute top-full left-1/2 -translate-x-1/2 border-4 border-transparent border-t-slate-800\"\n ></div>\n </div>\n }\n </div>\n\n <!-- Native range input (invisible, handles interaction) -->\n <input\n type=\"range\"\n [class]=\"inputClasses()\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value()\"\n [disabled]=\"disabled\"\n (input)=\"onSliderInput($event)\"\n (change)=\"onSliderChange($event)\"\n (mousedown)=\"onDragStart()\"\n (mouseup)=\"onDragEnd()\"\n (touchstart)=\"onDragStart()\"\n (touchend)=\"onDragEnd()\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onInputBlur()\"\n />\n </div>\n\n @if (showMinMax) {\n <span class=\"text-xs text-slate-500 ml-3 tabular-nums min-w-6 text-right\">{{\n valueFormat(max)\n }}</span>\n }\n </div>\n\n @if (showTicks && tickCount > 0) {\n <div class=\"flex justify-between px-1 mt-1\">\n @for (tick of ticks(); track $index) {\n <span class=\"text-xs text-slate-400 tabular-nums\">{{ tick }}</span>\n }\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type RatingVariant = 'primary' | 'warning' | 'danger';\nexport type RatingSize = 'sm' | 'md' | 'lg' | 'xl';\n\nconst RATING_VARIANTS: Record<RatingVariant, { filled: string; empty: string }> = {\n primary: { filled: 'text-blue-500', empty: 'text-slate-300 dark:text-slate-600' },\n warning: { filled: 'text-amber-400', empty: 'text-slate-300 dark:text-slate-600' },\n danger: { filled: 'text-rose-500', empty: 'text-slate-300 dark:text-slate-600' },\n};\n\nconst RATING_SIZES: Record<RatingSize, string> = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n};\n\n/**\n * Rating/Stars component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-rating [(ngModel)]=\"rating\"></tw-rating>\n * <tw-rating [stars]=\"10\" [allowHalf]=\"true\" variant=\"warning\"></tw-rating>\n * <tw-rating [readonly]=\"true\" [value]=\"4.5\"></tw-rating>\n * ```\n */\n@Component({\n selector: 'tw-rating',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TwRatingComponent),\n multi: true,\n },\n ],\n templateUrl: './rating.component.html',\n})\nexport class TwRatingComponent implements ControlValueAccessor {\n /** Number of stars */\n @Input({ transform: numberAttribute }) stars = 5;\n /** Visual variant */\n @Input() variant: RatingVariant = 'warning';\n /** Size of the stars */\n @Input() size: RatingSize = 'md';\n /** Whether the rating is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n /** Whether the rating is readonly (display only) */\n @Input({ transform: booleanAttribute }) readonly = false;\n /** Whether to allow half-star ratings */\n @Input({ transform: booleanAttribute }) allowHalf = false;\n /** Whether to show the current value */\n @Input({ transform: booleanAttribute }) showValue = false;\n /** Whether to show cancel button */\n @Input({ transform: booleanAttribute }) showCancel = false;\n /** Aria label for accessibility */\n @Input() ariaLabel = 'Rating';\n /** Additional classes */\n @Input() classOverride = '';\n /** Change event */\n @Output() change = new EventEmitter<number>();\n /** Focus event */\n @Output() focus = new EventEmitter<FocusEvent>();\n /** Blur event */\n @Output() blur = new EventEmitter<FocusEvent>();\n;\n;\n getFilledStars(index: number): number {\n const currentValue = this.hoverValue() ?? this.value();\n return currentValue;\n }\n onStarClick(index: number): void {\n if (this.disabled || this.readonly) return;\n\n let newValue = index + 1;\n\n // If clicking the same star that's already fully selected, decrease by 1 (or 0.5 if allowHalf)\n if (this.value() === newValue && !this.allowHalf) {\n newValue = 0;\n }\n\n this.value.set(newValue);\n this.onChangeFn(newValue);\n this.change.emit(newValue);\n }\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n this.value.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n protected value = signal(0);\n protected hoverValue = signal<number | null>(null);\n protected starsArray = computed(() => new Array(this.stars).fill(0));\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'inline-flex items-center gap-1',\n this.disabled ? 'opacity-50' : '',\n this.classOverride\n );\n });\n protected starClasses(index: number) {\n const variant = RATING_VARIANTS[this.variant];\n const isFilled = this.getFilledStars(index) > index;\n\n return this.twClass.merge(\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded transition-colors duration-100',\n this.readonly || this.disabled ? 'cursor-default' : 'cursor-pointer hover:scale-110',\n isFilled ? variant.filled : variant.empty\n );\n }\n private readonly twClass = inject(TwClassService);\n private onChangeFn: (value: number) => void = () => {}\n private onTouchedFn: () => void = () => {}\n onStarHover(index: number): void {\n if (this.disabled || this.readonly) return;\n this.hoverValue.set(index + 1);\n }\n onStarLeave(): void {\n this.hoverValue.set(null);\n }\n onInputBlur(event: FocusEvent): void {\n this.onTouchedFn();\n this.blur.emit(event);\n }\n clear(): void {\n this.value.set(0);\n this.onChangeFn(0);\n this.change.emit(0);\n }\n protected iconClasses() {\n return RATING_SIZES[this.size];\n }\n protected valueClasses() {\n return 'ml-2 text-sm font-medium text-slate-600 dark:text-slate-400';\n }\n}\n","<div [class]=\"containerClasses()\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel\">\n @for (star of starsArray(); track $index) {\n <button\n type=\"button\"\n [class]=\"starClasses($index)\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-checked]=\"$index < value()\"\n (click)=\"onStarClick($index)\"\n (mouseenter)=\"onStarHover($index)\"\n (mouseleave)=\"onStarLeave()\"\n (focus)=\"focus.emit($event)\"\n (blur)=\"onInputBlur($event)\"\n >\n @if ($index < getFilledStars($index)) {\n <!-- Filled star -->\n <svg [class]=\"iconClasses()\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n d=\"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\"\n />\n </svg>\n } @else if ($index < getFilledStars($index) + 0.5 && allowHalf) {\n <!-- Half star -->\n <svg [class]=\"iconClasses()\" viewBox=\"0 0 24 24\">\n <defs>\n <linearGradient [id]=\"'half-' + $index\">\n <stop offset=\"50%\" stop-color=\"currentColor\" />\n <stop offset=\"50%\" stop-color=\"transparent\" />\n </linearGradient>\n </defs>\n <path\n [attr.fill]=\"'url(#half-' + $index + ')'\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n d=\"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\"\n />\n </svg>\n } @else {\n <!-- Empty star -->\n <svg\n [class]=\"iconClasses()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"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\"\n />\n </svg>\n }\n </button>\n }\n @if (showValue) {\n <span [class]=\"valueClasses()\">{{ value() }}</span>\n }\n @if (showCancel && value() > 0 && !readonly) {\n <button\n type=\"button\"\n class=\"ml-2 p-1 text-slate-400 hover:text-slate-600 transition-colors\"\n (click)=\"clear()\"\n aria-label=\"Clear rating\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ChipVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\nexport type ChipStyle = 'solid' | 'soft' | 'outline';\nexport type ChipSize = 'sm' | 'md' | 'lg';\n\nconst CHIP_VARIANTS: Record<ChipVariant, Record<ChipStyle, string>> = {\n primary: {\n solid: 'bg-blue-600 text-white',\n soft: 'bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300',\n outline: 'border border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400',\n },\n secondary: {\n solid: 'bg-slate-600 text-white',\n soft: 'bg-slate-100 dark:bg-slate-700 text-slate-700 dark:text-slate-300',\n outline: 'border border-slate-600 dark:border-slate-400 text-slate-600 dark:text-slate-400',\n },\n success: {\n solid: 'bg-emerald-600 text-white',\n soft: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-700 dark:text-emerald-300',\n outline: 'border border-emerald-600 dark:border-emerald-400 text-emerald-600 dark:text-emerald-400',\n },\n warning: {\n solid: 'bg-amber-500 text-white',\n soft: 'bg-amber-100 dark:bg-amber-900/40 text-amber-700 dark:text-amber-300',\n outline: 'border border-amber-500 dark:border-amber-400 text-amber-600 dark:text-amber-400',\n },\n danger: {\n solid: 'bg-rose-600 text-white',\n soft: 'bg-rose-100 dark:bg-rose-900/40 text-rose-700 dark:text-rose-300',\n outline: 'border border-rose-600 dark:border-rose-400 text-rose-600 dark:text-rose-400',\n },\n info: {\n solid: 'bg-cyan-600 text-white',\n soft: 'bg-cyan-100 dark:bg-cyan-900/40 text-cyan-700 dark:text-cyan-300',\n outline: 'border border-cyan-600 dark:border-cyan-400 text-cyan-600 dark:text-cyan-400',\n },\n};\n\nconst CHIP_SIZES: Record<ChipSize, { chip: string; image: string }> = {\n sm: { chip: 'px-2 py-0.5 text-xs gap-1', image: 'w-4 h-4' },\n md: { chip: 'px-3 py-1 text-sm gap-1.5', image: 'w-5 h-5' },\n lg: { chip: 'px-4 py-1.5 text-base gap-2', image: 'w-6 h-6' },\n};\n\n/**\n * Chip component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-chip label=\"Angular\"></tw-chip>\n * <tw-chip variant=\"success\" [removable]=\"true\" (onRemove)=\"handleRemove()\">Active</tw-chip>\n * <tw-chip [image]=\"avatarUrl\" label=\"John Doe\"></tw-chip>\n * ```\n */\n@Component({\n selector: 'tw-chip',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './chip.component.html',\n})\nexport class TwChipComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Chip label text */\n @Input() label = '';\n\n /** Visual variant */\n @Input() variant: ChipVariant = 'primary';\n\n /** Style variant */\n @Input() chipStyle: ChipStyle = 'soft';\n\n /** Size */\n @Input() size: ChipSize = 'md';\n\n /** Image URL for avatar chip */\n @Input() image = '';\n\n /** Image alt text */\n @Input() imageAlt = '';\n\n /** Whether the chip can be removed */\n @Input({ transform: booleanAttribute }) removable = false;\n\n /** Whether the chip is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Remove event */\n @Output() onRemove = new EventEmitter<void>();\n\n protected chipClasses = computed(() => {\n const variantClasses = CHIP_VARIANTS[this.variant][this.chipStyle];\n const sizeClasses = CHIP_SIZES[this.size].chip;\n\n return this.twClass.merge(\n 'inline-flex items-center rounded-full font-medium transition-colors',\n variantClasses,\n sizeClasses,\n this.disabled ? 'opacity-50 cursor-not-allowed' : '',\n this.classOverride\n );\n });\n\n protected imageClasses = computed(() => {\n const sizeClasses = CHIP_SIZES[this.size].image;\n return this.twClass.merge('rounded-full object-cover -ml-1', sizeClasses);\n });\n\n protected removeButtonClasses = computed(() => {\n return this.twClass.merge(\n 'ml-1 -mr-1 p-0.5 rounded-full transition-colors',\n 'hover:bg-black/10 focus:outline-none focus:ring-2 focus:ring-offset-1'\n );\n });\n\n onRemoveClick(event: Event): void {\n event.stopPropagation();\n if (!this.disabled) {\n this.onRemove.emit();\n }\n }\n}\n\n/**\n * Chip input for creating/selecting multiple chips\n */\n@Component({\n selector: 'tw-chips',\n standalone: true,\n imports: [CommonModule, TwChipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [class]=\"containerClasses()\">\n @for (value of values; track $index) {\n <tw-chip\n [label]=\"getDisplayValue(value)\"\n [variant]=\"variant\"\n [chipStyle]=\"chipStyle\"\n [size]=\"size\"\n [removable]=\"!disabled\"\n (onRemove)=\"removeValue($index)\"\n >\n </tw-chip>\n }\n @if (allowAdd && !disabled) {\n <input\n type=\"text\"\n [class]=\"inputClasses()\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n (keydown.enter)=\"onAddChip($event)\"\n (keydown.backspace)=\"onBackspace($event)\"\n #inputRef\n />\n }\n </div>\n `,\n})\nexport class TwChipsComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() values: any[] = [];\n @Input() variant: ChipVariant = 'primary';\n @Input() chipStyle: ChipStyle = 'soft';\n @Input() size: ChipSize = 'md';\n @Input() placeholder = 'Add...';\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) allowAdd = true;\n @Input() field = '';\n @Input() classOverride = '';\n\n @Output() valuesChange = new EventEmitter<any[]>();\n @Output() onAdd = new EventEmitter<any>();\n @Output() onRemove = new EventEmitter<{ value: any; index: number }>();\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'flex flex-wrap items-center gap-2 p-2 min-h-10',\n 'border border-slate-300 dark:border-slate-600 rounded-lg focus-within:ring-2 focus-within:ring-blue-500 focus-within:border-blue-500',\n this.disabled ? 'bg-slate-50 dark:bg-slate-900 opacity-50' : 'bg-white dark:bg-slate-800',\n this.classOverride\n );\n });\n\n protected inputClasses = computed(() => {\n return 'flex-1 min-w-20 px-2 py-1 text-sm outline-none bg-transparent';\n });\n\n getDisplayValue(value: any): string {\n if (typeof value === 'object' && this.field) {\n return value[this.field];\n }\n return String(value);\n }\n\n removeValue(index: number): void {\n const removed = this.values[index];\n const newValues = [...this.values];\n newValues.splice(index, 1);\n this.values = newValues;\n this.valuesChange.emit(this.values);\n this.onRemove.emit({ value: removed, index });\n }\n\n onAddChip(event: Event): void {\n event.preventDefault();\n const input = event.target as HTMLInputElement;\n const value = input.value.trim();\n\n if (value) {\n this.values = [...this.values, value];\n this.valuesChange.emit(this.values);\n this.onAdd.emit(value);\n input.value = '';\n }\n }\n\n onBackspace(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.value === '' && this.values.length > 0) {\n this.removeValue(this.values.length - 1);\n }\n }\n}\n","<span [class]=\"chipClasses()\">\n <!-- Leading icon/image -->\n @if (image) {\n <img [src]=\"image\" [alt]=\"imageAlt\" [class]=\"imageClasses()\" />\n } @else {\n <ng-content select=\"[twChipIcon]\"></ng-content>\n }\n\n <!-- Label -->\n <span class=\"truncate\">\n @if (label) {\n {{ label }}\n } @else {\n <ng-content></ng-content>\n }\n </span>\n\n <!-- Remove button -->\n @if (removable && !disabled) {\n <button\n type=\"button\"\n [class]=\"removeButtonClasses()\"\n (click)=\"onRemoveClick($event)\"\n aria-label=\"Remove\"\n >\n <svg\n class=\"w-3.5 h-3.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n</span>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n HostBinding,\n inject,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\n\nconst CARD_BASE_CLASSES = `\n block\n rounded-xl\n transition-all duration-200\n`;\n\n/**\n * Card variant classes\n * IMPORTANT: Keep these as static strings for Tailwind JIT detection\n * The dark: prefix classes must be statically analyzable\n */\nconst CARD_VARIANTS: Record<CardVariant, string> = {\n // elevated: bg-white dark:bg-slate-800 shadow-md hover:shadow-lg dark:shadow-slate-900/50\n elevated: 'bg-white dark:bg-slate-800 shadow-md hover:shadow-lg dark:shadow-slate-900/50',\n // outlined: bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600\n outlined: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 hover:border-slate-300 dark:hover:border-slate-600',\n // filled: bg-slate-50 dark:bg-slate-700 hover:bg-slate-100 dark:hover:bg-slate-600\n filled: 'bg-slate-50 dark:bg-slate-700 hover:bg-slate-100 dark:hover:bg-slate-600',\n // ghost: bg-transparent\n ghost: 'bg-transparent',\n};\n\n/**\n * Card header directive for semantic structure\n */\n@Directive({\n selector: 'tw-card-header, [twCardHeader]',\n standalone: true,\n})\nexport class TwCardHeaderDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block px-6 py-4 border-b border-slate-100 dark:border-slate-700', this.class);\n }\n}\n\n/**\n * Card title directive\n */\n@Directive({\n selector: 'tw-card-title, [twCardTitle]',\n standalone: true,\n})\nexport class TwCardTitleDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-lg font-semibold text-slate-900 dark:text-white', this.class);\n }\n}\n\n/**\n * Card subtitle directive\n */\n@Directive({\n selector: 'tw-card-subtitle, [twCardSubtitle]',\n standalone: true,\n})\nexport class TwCardSubtitleDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block text-sm text-slate-500 dark:text-slate-400 mt-1', this.class);\n }\n}\n\n/**\n * Card body/content directive\n */\n@Directive({\n selector: 'tw-card-body, [twCardBody]',\n standalone: true,\n})\nexport class TwCardBodyDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge('block p-6', this.class);\n }\n}\n\n/**\n * Card footer directive\n */\n@Directive({\n selector: 'tw-card-footer, [twCardFooter]',\n standalone: true,\n})\nexport class TwCardFooterDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n @HostBinding('class')\n get hostClass(): string {\n return this.twClass.merge(\n 'block px-6 py-4 border-t border-slate-100 dark:border-slate-700 bg-slate-50/50 dark:bg-slate-700/50 rounded-b-xl',\n this.class\n );\n }\n}\n\n/**\n * Card media/image container directive\n */\n@Directive({\n selector: 'tw-card-media, [twCardMedia]',\n standalone: true,\n})\nexport class TwCardMediaDirective {\n private readonly twClass = inject(TwClassService);\n\n @Input() class = '';\n\n /** Position of the media (top for header image, full for background) */\n @Input() position: 'top' | 'bottom' | 'full' = 'top';\n\n @HostBinding('class')\n get hostClass(): string {\n const positionClasses: Record<string, string> = {\n top: 'block -mx-0 -mt-0 mb-0 rounded-t-xl overflow-hidden',\n bottom: 'block -mx-0 -mb-0 mt-0 rounded-b-xl overflow-hidden',\n full: 'block absolute inset-0 rounded-xl overflow-hidden',\n };\n\n return this.twClass.merge(\n positionClasses[this.position],\n '[&>img]:w-full [&>img]:h-full [&>img]:object-cover',\n this.class\n );\n }\n}\n\n/**\n * Highly customizable card component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-card>\n * <tw-card-header>\n * <tw-card-title>Card Title</tw-card-title>\n * <tw-card-subtitle>Subtitle text</tw-card-subtitle>\n * </tw-card-header>\n * <tw-card-body>\n * Card content goes here\n * </tw-card-body>\n * <tw-card-footer>\n * <button tw-button variant=\"primary\">Action</button>\n * </tw-card-footer>\n * </tw-card>\n *\n * <tw-card variant=\"outlined\" [hoverable]=\"true\" [clickable]=\"true\" (click)=\"handleClick()\">\n * <tw-card-media position=\"top\">\n * <img src=\"image.jpg\" alt=\"Card image\">\n * </tw-card-media>\n * <tw-card-body>\n * Content with image\n * </tw-card-body>\n * </tw-card>\n * ```\n */\n@Component({\n selector: 'tw-card',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClasses()',\n '[attr.tabindex]': 'clickable ? 0 : null',\n role: 'article',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwCardComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Visual variant of the card */\n @Input() variant: CardVariant = 'elevated';\n\n /** Whether the card should have hover effects */\n @Input({ transform: booleanAttribute }) hoverable = false;\n\n /** Whether the card is clickable (adds cursor and focus styles) */\n @Input({ transform: booleanAttribute }) clickable = false;\n\n /** Whether to add padding to the card (use false when using card-body) */\n @Input({ transform: booleanAttribute }) padded = false;\n\n /** Additional classes to merge with base styles */\n @Input() classOverride = '';\n\n /** Complete class override (replaces all default classes) */\n @Input() classReplace = '';\n\n protected computedClasses = computed(() => {\n if (this.classReplace) {\n return this.classReplace;\n }\n\n const baseClasses = CARD_BASE_CLASSES;\n const variantClasses = CARD_VARIANTS[this.variant];\n\n const conditionalClasses: string[] = [];\n\n if (this.hoverable) {\n conditionalClasses.push('hover:-translate-y-0.5');\n }\n\n if (this.clickable) {\n conditionalClasses.push(\n 'cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900'\n );\n }\n\n if (this.padded) {\n conditionalClasses.push('p-6');\n }\n\n return this.twClass.merge(\n baseClasses,\n variantClasses,\n conditionalClasses.join(' '),\n this.classOverride\n );\n });\n}\n\n/**\n * Horizontal card layout component\n */\n@Component({\n selector: 'tw-card-horizontal',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './card-horizontal.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'article',\n },\n})\nexport class TwCardHorizontalComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() variant: CardVariant = 'elevated';\n @Input() classOverride = '';\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n 'flex rounded-xl overflow-hidden',\n CARD_VARIANTS[this.variant],\n this.classOverride\n );\n });\n}\n","<div class=\"flex-shrink-0\">\n <ng-content select=\"tw-card-media, [twCardMedia]\"></ng-content>\n</div>\n<div class=\"flex-1 min-w-0\">\n <ng-content></ng-content>\n</div>\n","export * from './card.component';\n\nimport {\n TwCardBodyDirective,\n TwCardComponent,\n TwCardFooterDirective,\n TwCardHeaderDirective,\n TwCardHorizontalComponent,\n TwCardMediaDirective,\n TwCardSubtitleDirective,\n TwCardTitleDirective,\n} from './card.component';\n\nexport const TW_CARD_COMPONENTS = [\n TwCardComponent,\n TwCardHorizontalComponent,\n TwCardHeaderDirective,\n TwCardTitleDirective,\n TwCardSubtitleDirective,\n TwCardBodyDirective,\n TwCardFooterDirective,\n TwCardMediaDirective,\n] as const;\n","import {\n AfterContentInit,\n Component,\n computed,\n ContentChildren,\n EventEmitter,\n Input,\n Output,\n QueryList,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'tw-accordion-item',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './accordion-item.component.html',\n})\nexport class TwAccordionItemComponent {\n @Input() set itemTitle(value: string) {\n this._title.set(value);\n }\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n @Input() set itemDisabled(value: boolean) {\n this._disabled.set(value);\n }\n @Input() set value(value: string) {\n this._value.set(value);\n }\n @Input() variant: 'default' | 'bordered' | 'separated' = 'default';\n\n @Output() openChange = new EventEmitter<boolean>();\n\n protected _title = signal('');\n protected _open = signal(false);\n protected _disabled = signal(false);\n protected _value = signal('');\n\n hasHeaderContent = false;\n\n protected itemTitleValue = computed(() => this._title());\n protected isOpen = computed(() => this._open());\n protected isDisabled = computed(() => this._disabled());\n\n toggle(): void {\n if (this.isDisabled()) return;\n this._open.update(v => !v);\n this.openChange.emit(this._open());\n }\n\n setOpen(open: boolean): void {\n this._open.set(open);\n }\n\n getValue(): string {\n return this._value();\n }\n\n protected itemClasses = computed(() => {\n const { variant } = this;\n\n const variantClasses: Record<string, string> = {\n default: 'border-b border-slate-200 dark:border-slate-700 last:border-b-0',\n bordered: 'border border-slate-200 dark:border-slate-700 rounded-lg mb-2 last:mb-0',\n separated: 'bg-slate-50 dark:bg-slate-800 rounded-lg mb-2 last:mb-0',\n };\n\n return variantClasses[variant];\n });\n\n protected headerClasses = computed(() => {\n const disabled = this.isDisabled();\n\n const classes = [\n 'flex items-center justify-between w-full py-4 px-4 text-left font-medium transition-colors',\n ];\n\n if (disabled) {\n classes.push('text-slate-400 dark:text-slate-500 cursor-not-allowed');\n } else {\n classes.push('text-slate-900 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800');\n }\n\n return classes.join(' ');\n });\n\n protected iconClasses = computed(() => {\n const isOpen = this._open();\n\n return [\n 'w-5 h-5 text-slate-500 dark:text-slate-400 transition-transform duration-200',\n isOpen ? 'rotate-180' : '',\n ].join(' ');\n });\n\n protected contentClasses = computed(() => 'px-4 pb-4 text-slate-600 dark:text-slate-400');\n}\n\n@Component({\n selector: 'tw-accordion',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './accordion.component.html',\n})\nexport class TwAccordionComponent implements AfterContentInit {\n @Input() set allowMultiple(value: boolean) {\n this._allowMultiple.set(value);\n }\n @Input() set variant(value: 'default' | 'bordered' | 'separated') {\n this._variant.set(value);\n }\n @Input() set defaultValue(value: string | string[]) {\n this._defaultValue.set(value);\n }\n\n @ContentChildren(TwAccordionItemComponent) items!: QueryList<TwAccordionItemComponent>;\n\n protected _allowMultiple = signal(false);\n protected _variant = signal<'default' | 'bordered' | 'separated'>('default');\n protected _defaultValue = signal<string | string[]>('');\n\n ngAfterContentInit(): void {\n const defaultValue = this._defaultValue();\n const defaults = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n\n this.items.forEach(item => {\n item.variant = this._variant();\n\n if (defaults.includes(item.getValue())) {\n item.setOpen(true);\n }\n\n item.openChange.subscribe(isOpen => {\n if (isOpen && !this._allowMultiple()) {\n this.items.forEach(other => {\n if (other !== item) {\n other.setOpen(false);\n }\n });\n }\n });\n });\n }\n\n protected accordionClasses = computed(() => {\n const variant = this._variant();\n\n const variantClasses: Record<string, string> = {\n default: 'border border-slate-200 dark:border-slate-700 rounded-lg divide-y divide-slate-200 dark:divide-slate-700',\n bordered: '',\n separated: '',\n };\n\n return variantClasses[variant];\n });\n}\n","<div [class]=\"itemClasses()\">\n <button\n type=\"button\"\n [class]=\"headerClasses()\"\n [attr.aria-expanded]=\"isOpen()\"\n (click)=\"toggle()\"\n >\n <span class=\"flex-1 text-left\">\n <ng-content select=\"[twAccordionHeader]\"></ng-content>\n @if (!hasHeaderContent) {\n {{ itemTitleValue() }}\n }\n </span>\n <svg\n [class]=\"iconClasses()\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n @if (isOpen()) {\n <div [class]=\"contentClasses()\">\n <ng-content></ng-content>\n </div>\n }\n</div>\n","<div [class]=\"accordionClasses()\">\n <ng-content></ng-content>\n</div>\n","import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n Output,\n QueryList,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type TabsVariant = 'line' | 'enclosed' | 'pills' | 'soft-rounded';\nexport type TabsSize = 'sm' | 'md' | 'lg';\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\nconst TABS_VARIANTS: Record<TabsVariant, { list: string; tab: string; activeTab: string }> = {\n line: {\n list: 'border-b border-slate-200 dark:border-slate-700 gap-2',\n tab: 'border-b-2 border-transparent -mb-px text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:border-slate-300 dark:hover:border-slate-600',\n activeTab: 'border-blue-500 text-blue-600 dark:text-blue-400',\n },\n enclosed: {\n list: 'border-b border-slate-200 dark:border-slate-700 gap-1',\n tab: 'border border-transparent rounded-t-lg -mb-px text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800',\n activeTab: 'bg-white dark:bg-slate-800 border-slate-200 dark:border-slate-700 border-b-white dark:border-b-slate-800 text-slate-900 dark:text-slate-100',\n },\n pills: {\n list: 'gap-2',\n tab: 'rounded-lg text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100 hover:bg-slate-100 dark:hover:bg-slate-800',\n activeTab: 'bg-blue-600 text-white hover:bg-blue-700 hover:text-white',\n },\n 'soft-rounded': {\n list: 'bg-slate-100 dark:bg-slate-800 p-1.5 rounded-lg gap-2',\n tab: 'rounded-md text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100',\n activeTab: 'bg-white dark:bg-slate-700 text-slate-900 dark:text-slate-100 shadow-sm',\n },\n};\n\nconst TABS_SIZES: Record<TabsSize, string> = {\n sm: 'text-sm px-4 py-2',\n md: 'text-sm px-5 py-2.5',\n lg: 'text-base px-6 py-3',\n};\n\n/**\n * Tab panel component for tab content\n */\n@Component({\n selector: 'tw-tab-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab-panel.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'tabpanel',\n '[attr.aria-labelledby]': 'labelledBy',\n '[attr.tabindex]': '0',\n '[attr.hidden]': '!active ? true : null',\n },\n})\nexport class TwTabPanelComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Unique identifier for this tab */\n @Input() value = '';\n\n /** Label for the tab (if not using template) */\n @Input() label = '';\n\n /** Whether the tab is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Icon to show before the label */\n @Input() icon = '';\n\n /** Whether to lazy load the content */\n @Input({ transform: booleanAttribute }) lazy = false;\n\n /** Additional panel classes */\n @Input() panelClass = '';\n\n /** Whether this panel is active */\n active = false;\n\n /** ID of the tab that labels this panel */\n labelledBy = '';\n\n protected computedClasses = computed(() => {\n return this.twClass.merge(\n 'focus:outline-none',\n this.active ? 'block' : 'hidden',\n this.panelClass\n );\n });\n}\n\n/**\n * Tabs component for organizing content into switchable panels\n *\n * @example\n * ```html\n * <tw-tabs [(value)]=\"activeTab\" variant=\"line\">\n * <tw-tab-panel value=\"tab1\" label=\"Tab 1\">\n * Content for tab 1\n * </tw-tab-panel>\n * <tw-tab-panel value=\"tab2\" label=\"Tab 2\">\n * Content for tab 2\n * </tw-tab-panel>\n * <tw-tab-panel value=\"tab3\" label=\"Tab 3\" [disabled]=\"true\">\n * Content for tab 3\n * </tw-tab-panel>\n * </tw-tabs>\n * ```\n */\n@Component({\n selector: 'tw-tabs',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tabs.component.html',\n host: {\n class: 'block',\n },\n})\nexport class TwTabsComponent implements AfterContentInit {\n private readonly twClass = inject(TwClassService);\n\n @ContentChildren(TwTabPanelComponent) tabPanels!: QueryList<TwTabPanelComponent>;\n\n /** Currently active tab value */\n @Input() value = '';\n\n /** Visual variant */\n @Input() variant: TabsVariant = 'line';\n\n /** Size of the tabs */\n @Input() size: TabsSize = 'md';\n\n /** Orientation of the tabs */\n @Input() orientation: TabsOrientation = 'horizontal';\n\n /** Whether the tab list should be full width */\n @Input({ transform: booleanAttribute }) fullWidth = false;\n\n /** Whether to animate panel transitions */\n @Input({ transform: booleanAttribute }) animated = true;\n\n /** Additional tab list classes */\n @Input() tabListClass = '';\n\n /** Additional panels container classes */\n @Input() panelsClass = '';\n\n /** Value change event */\n @Output() valueChange = new EventEmitter<string>();\n\n /** Tab change event with previous and current values */\n @Output() tabChange = new EventEmitter<{ previous: string; current: string }>();\n\n protected panels: TwTabPanelComponent[] = [];\n\n ngAfterContentInit(): void {\n this.panels = this.tabPanels.toArray();\n\n // Set initial active tab\n if (this.value) {\n this.selectTab(this.value, false);\n } else if (this.panels.length > 0) {\n // Select first non-disabled tab\n const firstEnabled = this.panels.find(p => !p.disabled);\n if (firstEnabled) {\n this.selectTab(firstEnabled.value, false);\n }\n }\n\n // Update panels list when content changes\n this.tabPanels.changes.subscribe(() => {\n this.panels = this.tabPanels.toArray();\n });\n }\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(this.orientation === 'vertical' ? 'flex gap-4' : 'block');\n });\n\n protected tabListClasses = computed(() => {\n const variantClasses = TABS_VARIANTS[this.variant].list;\n\n return this.twClass.merge(\n 'flex',\n this.orientation === 'vertical' ? 'flex-col' : 'flex-row',\n this.fullWidth ? '[&>button]:flex-1' : '',\n variantClasses,\n this.tabListClass\n );\n });\n\n protected panelsContainerClasses = computed(() => {\n return this.twClass.merge(\n 'mt-4',\n this.orientation === 'vertical' ? 'flex-1 mt-0' : '',\n this.animated ? 'transition-opacity duration-150' : '',\n this.panelsClass\n );\n });\n\n protected getTabClasses(panel: TwTabPanelComponent): string {\n const variantConfig = TABS_VARIANTS[this.variant];\n\n return this.twClass.merge(\n 'font-medium transition-all duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed',\n TABS_SIZES[this.size],\n variantConfig.tab,\n panel.active ? variantConfig.activeTab : ''\n );\n }\n\n selectTab(value: string, emit = true): void {\n const previousValue = this.value;\n\n this.panels.forEach(panel => {\n panel.active = panel.value === value;\n panel.labelledBy = `tab-${panel.value}`;\n });\n\n this.value = value;\n\n if (emit) {\n this.valueChange.emit(value);\n this.tabChange.emit({ previous: previousValue, current: value });\n }\n }\n\n protected onKeydown(event: KeyboardEvent, currentValue: string): void {\n const enabledPanels = this.panels.filter(p => !p.disabled);\n const currentIndex = enabledPanels.findIndex(p => p.value === currentValue);\n\n let newIndex = currentIndex;\n\n if (this.orientation === 'horizontal') {\n if (event.key === 'ArrowRight') {\n newIndex = (currentIndex + 1) % enabledPanels.length;\n } else if (event.key === 'ArrowLeft') {\n newIndex = (currentIndex - 1 + enabledPanels.length) % enabledPanels.length;\n }\n } else if (event.key === 'ArrowDown') {\n newIndex = (currentIndex + 1) % enabledPanels.length;\n } else if (event.key === 'ArrowUp') {\n newIndex = (currentIndex - 1 + enabledPanels.length) % enabledPanels.length;\n }\n\n if (event.key === 'Home') {\n newIndex = 0;\n } else if (event.key === 'End') {\n newIndex = enabledPanels.length - 1;\n }\n\n if (newIndex !== currentIndex) {\n event.preventDefault();\n const newTab = enabledPanels[newIndex];\n this.selectTab(newTab.value);\n\n // Focus the new tab\n const tabElement = document.getElementById(`tab-${newTab.value}`);\n tabElement?.focus();\n }\n }\n\n /** Programmatically select a tab */\n select(value: string): void {\n this.selectTab(value);\n }\n\n /** Get the currently active panel */\n getActivePanel(): TwTabPanelComponent | undefined {\n return this.panels.find(p => p.active);\n }\n}\n","@if (active || !lazy) {\n <ng-content></ng-content>\n}\n","<div [class]=\"containerClasses()\">\n <!-- Tab list -->\n <div [class]=\"tabListClasses()\" role=\"tablist\" [attr.aria-orientation]=\"orientation\">\n @for (panel of panels; track panel.value) {\n <button\n type=\"button\"\n [class]=\"getTabClasses(panel)\"\n [id]=\"'tab-' + panel.value\"\n [attr.aria-selected]=\"panel.active\"\n [attr.aria-controls]=\"'panel-' + panel.value\"\n [attr.tabindex]=\"panel.active ? 0 : -1\"\n [disabled]=\"panel.disabled\"\n role=\"tab\"\n (click)=\"selectTab(panel.value)\"\n (keydown)=\"onKeydown($event, panel.value)\"\n >\n @if (panel.icon) {\n <span class=\"mr-2\" [innerHTML]=\"panel.icon\"></span>\n }\n {{ panel.label }}\n </button>\n }\n </div>\n\n <!-- Tab panels -->\n <div [class]=\"panelsContainerClasses()\">\n <ng-content></ng-content>\n </div>\n</div>\n","export * from './tabs.component';\n\nimport { TwTabPanelComponent, TwTabsComponent } from './tabs.component';\n\nexport const TW_TABS_COMPONENTS = [TwTabsComponent, TwTabPanelComponent] as const;\n","import { Component, computed, HostBinding, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted';\nexport type DividerLabelPosition = 'left' | 'center' | 'right';\n\n@Component({\n selector: 'tw-divider',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './divider.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n :host(.vertical) {\n display: inline-flex;\n align-self: stretch;\n height: auto;\n }\n .divider-solid {\n border-style: solid !important;\n }\n .divider-dashed {\n border-style: dashed !important;\n }\n .divider-dotted {\n border-style: dotted !important;\n }\n .vertical-line {\n width: 0;\n align-self: stretch;\n min-height: 1em;\n }\n `,\n ],\n})\nexport class TwDividerComponent {\n @Input() set orientation(value: DividerOrientation) {\n this._orientation.set(value);\n }\n @Input() set variant(value: DividerVariant) {\n this._variant.set(value);\n }\n // Alias for variant\n @Input() set dividerStyle(value: DividerVariant) {\n this._variant.set(value);\n }\n @Input() set labelPosition(value: DividerLabelPosition) {\n this._labelPosition.set(value);\n }\n @Input() set color(value: string) {\n this._color.set(value);\n }\n @Input() set spacing(value: 'sm' | 'md' | 'lg') {\n this._spacing.set(value);\n }\n @Input() set label(value: string) {\n this._label.set(value);\n }\n\n protected _orientation = signal<DividerOrientation>('horizontal');\n protected _variant = signal<DividerVariant>('solid');\n protected _labelPosition = signal<DividerLabelPosition>('center');\n protected _color = signal('');\n protected _spacing = signal<'sm' | 'md' | 'lg'>('md');\n protected _label = signal('');\n\n @HostBinding('class.vertical')\n get isVertical(): boolean {\n return this._orientation() === 'vertical';\n }\n\n protected orientationValue = computed(() => this._orientation());\n protected labelValue = computed(() => this._label());\n\n protected hrClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n const spacing = this._spacing();\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n const spacingClasses: Record<string, string> = {\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-8',\n };\n\n return ['border-t-2 border-0', variantClasses[variant], color, spacingClasses[spacing]].join(\n ' '\n );\n });\n\n protected containerClasses = computed(() => {\n const spacing = this._spacing();\n\n const spacingClasses: Record<string, string> = {\n sm: 'my-2',\n md: 'my-4',\n lg: 'my-8',\n };\n\n return ['flex items-center w-full', spacingClasses[spacing]].join(' ');\n });\n\n protected lineClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n return ['border-t-2 border-0', variantClasses[variant], color].join(' ');\n });\n\n protected firstLineClasses = computed(() => {\n const labelPosition = this._labelPosition();\n const baseClasses = this.lineClasses();\n\n if (labelPosition === 'left') {\n return `${baseClasses} w-8 shrink-0`;\n }\n return `${baseClasses} flex-1`;\n });\n\n protected lastLineClasses = computed(() => {\n const labelPosition = this._labelPosition();\n const baseClasses = this.lineClasses();\n\n if (labelPosition === 'right') {\n return `${baseClasses} w-8 shrink-0`;\n }\n return `${baseClasses} flex-1`;\n });\n\n protected labelClasses = computed(\n () => 'px-4 text-sm text-slate-500 whitespace-nowrap select-none'\n );\n\n protected verticalClasses = computed(() => {\n const variant = this._variant();\n const color = this._color() || 'border-slate-300';\n const spacing = this._spacing();\n\n const variantClasses: Record<DividerVariant, string> = {\n solid: 'divider-solid',\n dashed: 'divider-dashed',\n dotted: 'divider-dotted',\n };\n\n const spacingClasses: Record<string, string> = {\n sm: 'mx-2',\n md: 'mx-4',\n lg: 'mx-8',\n };\n\n return [\n 'vertical-line border-l-2 border-0',\n variantClasses[variant],\n color,\n spacingClasses[spacing],\n ].join(' ');\n });\n}\n","@if (orientationValue() === 'horizontal') {\n @if (labelValue()) {\n <div [class]=\"containerClasses()\">\n <div [class]=\"firstLineClasses()\"></div>\n <span [class]=\"labelClasses()\">{{ labelValue() }}</span>\n <div [class]=\"lastLineClasses()\"></div>\n </div>\n } @else {\n <hr [class]=\"hrClasses()\" />\n }\n} @else {\n <div [class]=\"verticalClasses()\"></div>\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'prose';\n\nconst CONTAINER_SIZES: Record<ContainerSize, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n prose: 'max-w-prose',\n};\n\n/**\n * Container component for creating centered, max-width layouts.\n *\n * @example\n * ```html\n * <tw-container size=\"lg\" [centered]=\"true\">\n * <h1>Page Content</h1>\n * </tw-container>\n * ```\n */\n@Component({\n selector: 'tw-container',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class TwContainerComponent {\n /** Maximum width of the container */\n @Input() size: ContainerSize = 'xl';\n\n /** Whether to center the container horizontally */\n @Input() centered = true;\n\n /** Horizontal padding */\n @Input() padding: 'none' | 'sm' | 'md' | 'lg' = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected containerClasses(): string {\n const paddingClasses: Record<string, string> = {\n none: '',\n sm: 'px-2 sm:px-4',\n md: 'px-4 sm:px-6 lg:px-8',\n lg: 'px-6 sm:px-8 lg:px-12',\n };\n\n return this.twClass.merge(\n 'w-full',\n CONTAINER_SIZES[this.size],\n this.centered ? 'mx-auto' : '',\n paddingClasses[this.padding],\n this.class\n );\n }\n}\n\n","import { TwContainerComponent } from './container.component';\n\nexport { TwContainerComponent, ContainerSize } from './container.component';\n\nexport const TW_CONTAINER_COMPONENTS = [TwContainerComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type StackDirection = 'vertical' | 'horizontal' | 'vertical-reverse' | 'horizontal-reverse';\nexport type StackSpacing = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nconst DIRECTION_CLASSES: Record<StackDirection, string> = {\n vertical: 'flex-col',\n horizontal: 'flex-row',\n 'vertical-reverse': 'flex-col-reverse',\n 'horizontal-reverse': 'flex-row-reverse',\n};\n\nconst SPACING_CLASSES: Record<StackSpacing, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n '3xl': 'gap-16',\n};\n\nconst ALIGN_CLASSES: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASSES: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\n/**\n * Stack component for arranging elements vertically or horizontally with consistent spacing.\n *\n * @example\n * ```html\n * <!-- Vertical stack (default) -->\n * <tw-stack spacing=\"md\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </tw-stack>\n *\n * <!-- Horizontal stack -->\n * <tw-stack direction=\"horizontal\" spacing=\"lg\" align=\"center\">\n * <button>Button 1</button>\n * <button>Button 2</button>\n * </tw-stack>\n * ```\n */\n@Component({\n selector: 'tw-stack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwStackComponent {\n /** Direction of the stack */\n @Input() direction: StackDirection = 'vertical';\n\n /** Spacing between items */\n @Input() spacing: StackSpacing = 'md';\n\n /** Alignment of items (perpendicular to direction) */\n @Input() align: StackAlign = 'stretch';\n\n /** Justification of items (along direction) */\n @Input() justify: StackJustify = 'start';\n\n /** Whether items should wrap */\n @Input() wrap = false;\n\n /** Whether to take full width */\n @Input() fullWidth = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex',\n DIRECTION_CLASSES[this.direction],\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.wrap ? 'flex-wrap' : '',\n this.fullWidth ? 'w-full' : '',\n this.class\n );\n }\n}\n\n/**\n * VStack component - shorthand for vertical Stack\n */\n@Component({\n selector: 'tw-vstack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwVStackComponent {\n @Input() spacing: StackSpacing = 'md';\n @Input() align: StackAlign = 'stretch';\n @Input() justify: StackJustify = 'start';\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex flex-col',\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.class\n );\n }\n}\n\n/**\n * HStack component - shorthand for horizontal Stack\n */\n@Component({\n selector: 'tw-hstack',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stackClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwHStackComponent {\n @Input() spacing: StackSpacing = 'md';\n @Input() align: StackAlign = 'center';\n @Input() justify: StackJustify = 'start';\n @Input() wrap = false;\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stackClasses(): string {\n return this.twClass.merge(\n 'flex flex-row',\n SPACING_CLASSES[this.spacing],\n ALIGN_CLASSES[this.align],\n JUSTIFY_CLASSES[this.justify],\n this.wrap ? 'flex-wrap' : '',\n this.class\n );\n }\n}\n\n","import {\n TwHStackComponent,\n TwStackComponent,\n TwVStackComponent,\n} from './stack.component';\n\nexport {\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n StackDirection,\n StackSpacing,\n StackAlign,\n StackJustify,\n} from './stack.component';\n\nexport const TW_STACK_COMPONENTS = [\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'none' | 'auto';\nexport type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst COLS_CLASSES: Record<string, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 7: 'grid-cols-7',\n 8: 'grid-cols-8',\n 9: 'grid-cols-9',\n 10: 'grid-cols-10',\n 11: 'grid-cols-11',\n 12: 'grid-cols-12',\n none: 'grid-cols-none',\n auto: 'grid-cols-[repeat(auto-fit,minmax(200px,1fr))]',\n};\n\nconst GAP_CLASSES: Record<GridGap, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n};\n\n/**\n * Grid component for creating CSS Grid layouts.\n *\n * @example\n * ```html\n * <!-- Simple 3-column grid -->\n * <tw-grid [cols]=\"3\" gap=\"md\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </tw-grid>\n *\n * <!-- Responsive grid -->\n * <tw-grid [cols]=\"1\" [colsSm]=\"2\" [colsMd]=\"3\" [colsLg]=\"4\" gap=\"lg\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * <div>Item 4</div>\n * </tw-grid>\n * ```\n */\n@Component({\n selector: 'tw-grid',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"gridClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwGridComponent {\n /** Number of columns (base) */\n @Input() cols: GridCols = 1;\n\n /** Number of columns at sm breakpoint */\n @Input() colsSm?: GridCols;\n\n /** Number of columns at md breakpoint */\n @Input() colsMd?: GridCols;\n\n /** Number of columns at lg breakpoint */\n @Input() colsLg?: GridCols;\n\n /** Number of columns at xl breakpoint */\n @Input() colsXl?: GridCols;\n\n /** Gap between items */\n @Input() gap: GridGap = 'md';\n\n /** Row gap (if different from column gap) */\n @Input() rowGap?: GridGap;\n\n /** Column gap (if different from row gap) */\n @Input() colGap?: GridGap;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected gridClasses(): string {\n const classes = ['grid', COLS_CLASSES[this.cols.toString()]];\n\n // Responsive columns\n if (this.colsSm) {\n classes.push(`sm:${COLS_CLASSES[this.colsSm.toString()]}`);\n }\n if (this.colsMd) {\n classes.push(`md:${COLS_CLASSES[this.colsMd.toString()]}`);\n }\n if (this.colsLg) {\n classes.push(`lg:${COLS_CLASSES[this.colsLg.toString()]}`);\n }\n if (this.colsXl) {\n classes.push(`xl:${COLS_CLASSES[this.colsXl.toString()]}`);\n }\n\n // Gap handling\n if (this.rowGap && this.colGap) {\n classes.push(GAP_CLASSES[this.rowGap].replace('gap-', 'gap-y-'));\n classes.push(GAP_CLASSES[this.colGap].replace('gap-', 'gap-x-'));\n } else {\n classes.push(GAP_CLASSES[this.gap]);\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n}\n\n/**\n * SimpleGrid component for auto-fit grid layouts with minimum column width.\n *\n * @example\n * ```html\n * <tw-simple-grid minChildWidth=\"200px\" gap=\"md\">\n * <div>Card 1</div>\n * <div>Card 2</div>\n * <div>Card 3</div>\n * </tw-simple-grid>\n * ```\n */\n@Component({\n selector: 'tw-simple-grid',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"gridClasses()\" [style.gridTemplateColumns]=\"gridTemplateColumns()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSimpleGridComponent {\n /** Minimum width of each child (e.g., '200px', '15rem') */\n @Input() minChildWidth = '200px';\n\n /** Gap between items */\n @Input() gap: GridGap = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected gridClasses(): string {\n return this.twClass.merge('grid', GAP_CLASSES[this.gap], this.class);\n }\n\n protected gridTemplateColumns(): string {\n return `repeat(auto-fit, minmax(${this.minChildWidth}, 1fr))`;\n }\n}\n\n","import { TwGridComponent, TwSimpleGridComponent } from './grid.component';\n\nexport {\n TwGridComponent,\n TwSimpleGridComponent,\n GridCols,\n GridGap,\n} from './grid.component';\n\nexport const TW_GRID_COMPONENTS = [TwGridComponent, TwSimpleGridComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type AspectRatioPreset = 'square' | 'video' | 'portrait' | 'wide' | 'ultrawide' | 'custom';\n\nconst RATIO_CLASSES: Record<string, string> = {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n wide: 'aspect-[2/1]',\n ultrawide: 'aspect-[21/9]',\n};\n\n/**\n * AspectRatio component for maintaining consistent aspect ratios.\n *\n * @example\n * ```html\n * <!-- Video aspect ratio (16:9) -->\n * <tw-aspect-ratio ratio=\"video\">\n * <img src=\"thumbnail.jpg\" class=\"object-cover w-full h-full\" />\n * </tw-aspect-ratio>\n *\n * <!-- Custom ratio -->\n * <tw-aspect-ratio ratio=\"custom\" [customRatio]=\"4/3\">\n * <iframe src=\"...\"></iframe>\n * </tw-aspect-ratio>\n * ```\n */\n@Component({\n selector: 'tw-aspect-ratio',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"containerClasses()\" [style.aspectRatio]=\"computedRatio()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n :host ::ng-deep > div > * {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n `,\n ],\n})\nexport class TwAspectRatioComponent {\n /** Preset aspect ratio */\n @Input() ratio: AspectRatioPreset = 'video';\n\n /** Custom ratio value (e.g., 16/9 or 1.777) - used when ratio is 'custom' */\n @Input() customRatio?: number;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected containerClasses(): string {\n const baseClasses = 'relative overflow-hidden';\n\n if (this.ratio === 'custom') {\n return this.twClass.merge(baseClasses, this.class);\n }\n\n return this.twClass.merge(baseClasses, RATIO_CLASSES[this.ratio], this.class);\n }\n\n protected computedRatio(): string | null {\n if (this.ratio === 'custom' && this.customRatio) {\n return String(this.customRatio);\n }\n return null;\n }\n}\n\n","import { TwAspectRatioComponent } from './aspect-ratio.component';\n\nexport { TwAspectRatioComponent, AspectRatioPreset } from './aspect-ratio.component';\n\nexport const TW_ASPECT_RATIO_COMPONENTS = [TwAspectRatioComponent] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\n/**\n * Center component for centering content horizontally and/or vertically.\n *\n * @example\n * ```html\n * <!-- Center both horizontally and vertically -->\n * <tw-center class=\"h-screen\">\n * <div>Centered content</div>\n * </tw-center>\n *\n * <!-- Center only horizontally (inline content) -->\n * <tw-center [inline]=\"true\">\n * <span>Centered text</span>\n * </tw-center>\n * ```\n */\n@Component({\n selector: 'tw-center',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"centerClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwCenterComponent {\n /** Use inline-flex instead of flex */\n @Input() inline = false;\n\n /** Center only horizontally */\n @Input() horizontal = true;\n\n /** Center only vertically */\n @Input() vertical = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected centerClasses(): string {\n const classes: string[] = [this.inline ? 'inline-flex' : 'flex'];\n\n if (this.horizontal) {\n classes.push('justify-center');\n }\n\n if (this.vertical) {\n classes.push('items-center');\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n}\n\n/**\n * Square component for creating square-shaped containers.\n * The width determines the height (1:1 aspect ratio).\n *\n * @example\n * ```html\n * <tw-square size=\"64px\" class=\"bg-blue-500 rounded-lg\">\n * <span>Icon</span>\n * </tw-square>\n * ```\n */\n@Component({\n selector: 'tw-square',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"squareClasses()\" [style.width]=\"size\" [style.height]=\"size\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwSquareComponent {\n /** Size of the square (e.g., '64px', '4rem') */\n @Input() size = '48px';\n\n /** Whether to center the content */\n @Input() centerContent = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected squareClasses(): string {\n return this.twClass.merge(\n this.centerContent ? 'flex items-center justify-center' : '',\n this.class\n );\n }\n}\n\n/**\n * Circle component for creating circular containers.\n *\n * @example\n * ```html\n * <tw-circle size=\"48px\" class=\"bg-gradient-to-br from-blue-500 to-purple-500\">\n * <span class=\"text-white\">AB</span>\n * </tw-circle>\n * ```\n */\n@Component({\n selector: 'tw-circle',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"circleClasses()\" [style.width]=\"size\" [style.height]=\"size\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwCircleComponent {\n /** Size of the circle (e.g., '64px', '4rem') */\n @Input() size = '48px';\n\n /** Whether to center the content */\n @Input() centerContent = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected circleClasses(): string {\n return this.twClass.merge(\n 'rounded-full',\n this.centerContent ? 'flex items-center justify-center' : '',\n this.class\n );\n }\n}\n\n","import {\n TwCenterComponent,\n TwCircleComponent,\n TwSquareComponent,\n} from './center.component';\n\nexport {\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n} from './center.component';\n\nexport const TW_CENTER_COMPONENTS = [\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n] as const;\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'auto';\n\nconst HORIZONTAL_SIZES: Record<string, string> = {\n xs: 'w-1',\n sm: 'w-2',\n md: 'w-4',\n lg: 'w-6',\n xl: 'w-8',\n '2xl': 'w-12',\n '3xl': 'w-16',\n auto: 'flex-1',\n};\n\nconst VERTICAL_SIZES: Record<string, string> = {\n xs: 'h-1',\n sm: 'h-2',\n md: 'h-4',\n lg: 'h-6',\n xl: 'h-8',\n '2xl': 'h-12',\n '3xl': 'h-16',\n auto: 'flex-1',\n};\n\n/**\n * Spacer component for adding space between elements.\n * In flex containers, use size=\"auto\" to create flexible space.\n *\n * @example\n * ```html\n * <!-- Fixed vertical space -->\n * <tw-spacer axis=\"vertical\" size=\"lg\"></tw-spacer>\n *\n * <!-- Flexible horizontal space (pushes elements apart) -->\n * <div class=\"flex\">\n * <span>Left</span>\n * <tw-spacer axis=\"horizontal\" size=\"auto\"></tw-spacer>\n * <span>Right</span>\n * </div>\n * ```\n */\n@Component({\n selector: 'tw-spacer',\n standalone: true,\n imports: [CommonModule],\n template: `<div [class]=\"spacerClasses()\" aria-hidden=\"true\"></div>`,\n styles: [\n `\n :host {\n display: block;\n }\n :host([axis='horizontal']) {\n display: inline-block;\n }\n `,\n ],\n})\nexport class TwSpacerComponent {\n /** Direction of the space */\n @Input() axis: 'horizontal' | 'vertical' = 'vertical';\n\n /** Size of the space (or 'auto' for flexible space in flex containers) */\n @Input() size: SpacerSize = 'md';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected spacerClasses(): string {\n const sizeClass =\n this.axis === 'horizontal' ? HORIZONTAL_SIZES[this.size] : VERTICAL_SIZES[this.size];\n\n return this.twClass.merge(sizeClass, this.class);\n }\n}\n\n/**\n * Wrap component for wrapping flex items with consistent spacing.\n *\n * @example\n * ```html\n * <tw-wrap spacing=\"md\">\n * <tw-badge>Tag 1</tw-badge>\n * <tw-badge>Tag 2</tw-badge>\n * <tw-badge>Tag 3</tw-badge>\n * </tw-wrap>\n * ```\n */\n@Component({\n selector: 'tw-wrap',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"wrapClasses()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwWrapComponent {\n /** Spacing between items */\n @Input() spacing: SpacerSize = 'md';\n\n /** Alignment of items */\n @Input() align: 'start' | 'center' | 'end' = 'start';\n\n /** Justification of items */\n @Input() justify: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly' = 'start';\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected wrapClasses(): string {\n const gapClasses: Record<string, string> = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n '3xl': 'gap-16',\n auto: 'gap-4',\n };\n\n const alignClasses: Record<string, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n };\n\n const justifyClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n };\n\n return this.twClass.merge(\n 'flex flex-wrap',\n gapClasses[this.spacing],\n alignClasses[this.align],\n justifyClasses[this.justify],\n this.class\n );\n }\n}\n\n","import { TwSpacerComponent, TwWrapComponent } from './spacer.component';\n\nexport { TwSpacerComponent, TwWrapComponent, SpacerSize } from './spacer.component';\n\nexport const TW_SPACER_COMPONENTS = [TwSpacerComponent, TwWrapComponent] as const;\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SplitterDirection = 'horizontal' | 'vertical';\nexport type SplitterGutterSize = 'sm' | 'md' | 'lg';\n\nconst GUTTER_SIZES: Record<SplitterGutterSize, number> = {\n sm: 4,\n md: 8,\n lg: 12,\n};\n\n/**\n * Splitter component for creating resizable split pane layouts.\n *\n * @example\n * ```html\n * <!-- Horizontal split -->\n * <tw-splitter direction=\"horizontal\" [initialSizes]=\"[30, 70]\">\n * <div twSplitterPane>Left Panel</div>\n * <div twSplitterPane>Right Panel</div>\n * </tw-splitter>\n *\n * <!-- Vertical split with min sizes -->\n * <tw-splitter direction=\"vertical\" [minSizes]=\"[100, 200]\">\n * <div twSplitterPane>Top Panel</div>\n * <div twSplitterPane>Bottom Panel</div>\n * </tw-splitter>\n * ```\n */\n@Component({\n selector: 'tw-splitter',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div #container [class]=\"containerClasses()\">\n <div\n [class]=\"paneClasses(0)\"\n [style.flexBasis.%]=\"sizes()[0]\"\n [style.minWidth.px]=\"direction === 'horizontal' ? minSizes[0] : undefined\"\n [style.minHeight.px]=\"direction === 'vertical' ? minSizes[0] : undefined\">\n <ng-content select=\"[twSplitterPane]:first-of-type, tw-splitter-pane:first-of-type\"></ng-content>\n </div>\n\n <div\n #gutter\n [class]=\"gutterClasses()\"\n (mousedown)=\"onGutterMouseDown($event)\"\n (touchstart)=\"onGutterTouchStart($event)\">\n <div [class]=\"gutterHandleClasses()\"></div>\n </div>\n\n <div\n [class]=\"paneClasses(1)\"\n [style.flexBasis.%]=\"sizes()[1]\"\n [style.minWidth.px]=\"direction === 'horizontal' ? minSizes[1] : undefined\"\n [style.minHeight.px]=\"direction === 'vertical' ? minSizes[1] : undefined\">\n <ng-content select=\"[twSplitterPane]:last-of-type, tw-splitter-pane:last-of-type\"></ng-content>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n }\n `,\n ],\n})\nexport class TwSplitterComponent implements AfterViewInit, OnDestroy {\n @ViewChild('container') containerRef!: ElementRef<HTMLElement>;\n @ViewChild('gutter') gutterRef!: ElementRef<HTMLElement>;\n\n /** Direction of the split */\n @Input() direction: SplitterDirection = 'horizontal';\n\n /** Initial sizes as percentages (should sum to 100) */\n @Input() initialSizes: [number, number] = [50, 50];\n\n /** Minimum sizes in pixels for each pane */\n @Input() minSizes: [number, number] = [50, 50];\n\n /** Size of the gutter */\n @Input() gutterSize: SplitterGutterSize = 'md';\n\n /** Whether the splitter is disabled */\n @Input() disabled = false;\n\n /** Whether to show visual gutter */\n @Input() showGutter = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n /** Emits when sizes change */\n @Output() sizesChange = new EventEmitter<[number, number]>();\n\n /** Emits when dragging starts */\n @Output() dragStart = new EventEmitter<void>();\n\n /** Emits when dragging ends */\n @Output() dragEnd = new EventEmitter<void>();\n\n protected sizes = signal<[number, number]>([50, 50]);\n protected isDragging = signal(false);\n\n private startPos = 0;\n private startSizes: [number, number] = [50, 50];\n private containerSize = 0;\n\n private readonly mouseMoveHandler = this.onMouseMove.bind(this);\n private readonly mouseUpHandler = this.onMouseUp.bind(this);\n private readonly touchMoveHandler = this.onTouchMove.bind(this);\n private readonly touchEndHandler = this.onTouchEnd.bind(this);\n\n constructor(private readonly twClass: TwClassService) {}\n\n ngAfterViewInit(): void {\n this.sizes.set([...this.initialSizes] as [number, number]);\n }\n\n ngOnDestroy(): void {\n this.removeListeners();\n }\n\n protected containerClasses(): string {\n return this.twClass.merge(\n 'flex h-full w-full overflow-hidden',\n this.direction === 'horizontal' ? 'flex-row' : 'flex-col',\n this.class\n );\n }\n\n protected paneClasses(index: number): string {\n return this.twClass.merge(\n 'overflow-auto',\n this.direction === 'horizontal' ? 'h-full' : 'w-full'\n );\n }\n\n protected gutterClasses(): string {\n const size = GUTTER_SIZES[this.gutterSize];\n const isHorizontal = this.direction === 'horizontal';\n\n return this.twClass.merge(\n 'flex items-center justify-center flex-shrink-0 transition-colors',\n isHorizontal ? `w-[${size}px] h-full cursor-col-resize` : `h-[${size}px] w-full cursor-row-resize`,\n this.showGutter ? 'bg-slate-200 hover:bg-slate-300' : 'bg-transparent hover:bg-slate-200',\n this.isDragging() ? 'bg-blue-400' : '',\n this.disabled ? 'cursor-default pointer-events-none opacity-50' : ''\n );\n }\n\n protected gutterHandleClasses(): string {\n const isHorizontal = this.direction === 'horizontal';\n\n return this.twClass.merge(\n 'rounded-full bg-slate-400 transition-all',\n isHorizontal ? 'w-1 h-8' : 'h-1 w-8',\n this.isDragging() ? 'bg-blue-600 scale-125' : ''\n );\n }\n\n protected onGutterMouseDown(event: MouseEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n this.startDrag(this.direction === 'horizontal' ? event.clientX : event.clientY);\n document.addEventListener('mousemove', this.mouseMoveHandler);\n document.addEventListener('mouseup', this.mouseUpHandler);\n }\n\n protected onGutterTouchStart(event: TouchEvent): void {\n if (this.disabled) return;\n event.preventDefault();\n const touch = event.touches[0];\n this.startDrag(this.direction === 'horizontal' ? touch.clientX : touch.clientY);\n document.addEventListener('touchmove', this.touchMoveHandler, { passive: false });\n document.addEventListener('touchend', this.touchEndHandler);\n }\n\n private startDrag(pos: number): void {\n this.isDragging.set(true);\n this.startPos = pos;\n this.startSizes = [...this.sizes()] as [number, number];\n this.containerSize = this.direction === 'horizontal'\n ? this.containerRef.nativeElement.offsetWidth\n : this.containerRef.nativeElement.offsetHeight;\n this.dragStart.emit();\n }\n\n private onMouseMove(event: MouseEvent): void {\n const pos = this.direction === 'horizontal' ? event.clientX : event.clientY;\n this.updateSizes(pos);\n }\n\n private onTouchMove(event: TouchEvent): void {\n event.preventDefault();\n const touch = event.touches[0];\n const pos = this.direction === 'horizontal' ? touch.clientX : touch.clientY;\n this.updateSizes(pos);\n }\n\n private updateSizes(currentPos: number): void {\n const gutterSize = GUTTER_SIZES[this.gutterSize];\n const availableSize = this.containerSize - gutterSize;\n const delta = currentPos - this.startPos;\n const deltaPercent = (delta / availableSize) * 100;\n\n let newSize0 = this.startSizes[0] + deltaPercent;\n let newSize1 = this.startSizes[1] - deltaPercent;\n\n // Apply minimum sizes\n const minPercent0 = (this.minSizes[0] / availableSize) * 100;\n const minPercent1 = (this.minSizes[1] / availableSize) * 100;\n\n if (newSize0 < minPercent0) {\n newSize0 = minPercent0;\n newSize1 = 100 - minPercent0;\n }\n if (newSize1 < minPercent1) {\n newSize1 = minPercent1;\n newSize0 = 100 - minPercent1;\n }\n\n this.sizes.set([newSize0, newSize1]);\n this.sizesChange.emit([newSize0, newSize1]);\n }\n\n private onMouseUp(): void {\n this.endDrag();\n this.removeListeners();\n }\n\n private onTouchEnd(): void {\n this.endDrag();\n this.removeListeners();\n }\n\n private endDrag(): void {\n this.isDragging.set(false);\n this.dragEnd.emit();\n }\n\n private removeListeners(): void {\n document.removeEventListener('mousemove', this.mouseMoveHandler);\n document.removeEventListener('mouseup', this.mouseUpHandler);\n document.removeEventListener('touchmove', this.touchMoveHandler);\n document.removeEventListener('touchend', this.touchEndHandler);\n }\n\n /** Programmatically set sizes */\n setSizes(sizes: [number, number]): void {\n this.sizes.set(sizes);\n this.sizesChange.emit(sizes);\n }\n\n /** Reset to initial sizes */\n reset(): void {\n this.sizes.set([...this.initialSizes] as [number, number]);\n this.sizesChange.emit(this.sizes());\n }\n}\n\n/**\n * Directive to mark elements as splitter panes\n */\n@Component({\n selector: 'tw-splitter-pane, [twSplitterPane]',\n standalone: true,\n template: '<ng-content></ng-content>',\n styles: [\n `\n :host {\n display: block;\n height: 100%;\n width: 100%;\n }\n `,\n ],\n})\nexport class TwSplitterPaneComponent {}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type StickyPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type StickyOffset = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst OFFSET_VALUES: Record<StickyOffset, string> = {\n none: '0',\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n};\n\n/**\n * Sticky component for creating sticky positioned elements.\n * Wraps content and applies sticky positioning with configurable offset.\n *\n * @example\n * ```html\n * <!-- Sticky header -->\n * <tw-sticky position=\"top\" offset=\"md\">\n * <header class=\"bg-white shadow\">\n * Navigation content here\n * </header>\n * </tw-sticky>\n *\n * <!-- Sticky sidebar -->\n * <tw-sticky position=\"top\" offset=\"lg\" [zIndex]=\"10\">\n * <aside class=\"w-64\">\n * Sidebar content\n * </aside>\n * </tw-sticky>\n * ```\n */\n@Component({\n selector: 'tw-sticky',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"stickyClasses()\" [style]=\"stickyStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwStickyComponent {\n /** Which edge to stick to */\n @Input() position: StickyPosition = 'top';\n\n /** Offset from the edge */\n @Input() offset: StickyOffset = 'none';\n\n /** Custom offset value (e.g., '60px', '4rem') */\n @Input() customOffset?: string;\n\n /** Z-index for stacking */\n @Input() zIndex = 10;\n\n /** Whether sticky is disabled */\n @Input() disabled = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected stickyClasses(): string {\n return this.twClass.merge(\n this.disabled ? 'relative' : 'sticky',\n this.class\n );\n }\n\n protected stickyStyles(): Record<string, string> {\n if (this.disabled) {\n return {};\n }\n\n const offsetValue = this.customOffset || OFFSET_VALUES[this.offset];\n\n return {\n [this.position]: offsetValue,\n zIndex: this.zIndex.toString(),\n };\n }\n}\n\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ScrollAreaDirection = 'vertical' | 'horizontal' | 'both';\nexport type ScrollAreaScrollbar = 'auto' | 'always' | 'hover' | 'hidden';\n\n/**\n * ScrollArea component for creating scrollable containers with styled scrollbars.\n *\n * @example\n * ```html\n * <!-- Vertical scrollable area -->\n * <tw-scroll-area [height]=\"'300px'\" direction=\"vertical\">\n * <div class=\"space-y-4\">\n * <p>Long content here...</p>\n * </div>\n * </tw-scroll-area>\n *\n * <!-- Horizontal scroll area for a carousel -->\n * <tw-scroll-area direction=\"horizontal\" scrollbar=\"hover\">\n * <div class=\"flex gap-4\">\n * <div class=\"flex-shrink-0 w-64\">Card 1</div>\n * <div class=\"flex-shrink-0 w-64\">Card 2</div>\n * <div class=\"flex-shrink-0 w-64\">Card 3</div>\n * </div>\n * </tw-scroll-area>\n * ```\n */\n@Component({\n selector: 'tw-scroll-area',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n #scrollContainer\n [class]=\"scrollAreaClasses()\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\"\n [style.width]=\"width\"\n [style.maxWidth]=\"maxWidth\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n /* Custom scrollbar styles */\n .scroll-area-styled::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n .scroll-area-styled::-webkit-scrollbar-track {\n background: transparent;\n border-radius: 4px;\n }\n\n .scroll-area-styled::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n border-radius: 4px;\n transition: background 0.2s;\n }\n\n .scroll-area-styled::-webkit-scrollbar-thumb:hover {\n background: rgba(100, 116, 139, 0.8);\n }\n\n .scroll-area-styled::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n /* Dark mode scrollbar */\n .scroll-area-dark::-webkit-scrollbar-thumb {\n background: rgba(148, 163, 184, 0.4);\n }\n\n .scroll-area-dark::-webkit-scrollbar-thumb:hover {\n background: rgba(148, 163, 184, 0.7);\n }\n\n /* Thin scrollbar variant */\n .scroll-area-thin::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n }\n\n /* Hide scrollbar until hover */\n .scroll-area-hover::-webkit-scrollbar-thumb {\n background: transparent;\n }\n\n .scroll-area-hover:hover::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n }\n\n /* Always visible scrollbar */\n .scroll-area-always::-webkit-scrollbar-thumb {\n background: rgba(100, 116, 139, 0.5);\n }\n\n /* Hidden scrollbar */\n .scroll-area-hidden::-webkit-scrollbar {\n display: none;\n }\n\n .scroll-area-hidden {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n `,\n ],\n})\nexport class TwScrollAreaComponent {\n @ViewChild('scrollContainer') scrollContainerRef!: ElementRef<HTMLElement>;\n\n /** Scroll direction */\n @Input() direction: ScrollAreaDirection = 'vertical';\n\n /** Scrollbar visibility */\n @Input() scrollbar: ScrollAreaScrollbar = 'auto';\n\n /** Fixed height */\n @Input() height?: string;\n\n /** Maximum height */\n @Input() maxHeight?: string;\n\n /** Fixed width */\n @Input() width?: string;\n\n /** Maximum width */\n @Input() maxWidth?: string;\n\n /** Whether to use thin scrollbar */\n @Input() thin = false;\n\n /** Whether to use dark mode scrollbar */\n @Input() dark = false;\n\n /** Whether to enable smooth scrolling */\n @Input() smooth = true;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected scrollAreaClasses(): string {\n const overflowClass = {\n vertical: 'overflow-y-auto overflow-x-hidden',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n }[this.direction];\n\n const scrollbarClass = {\n auto: '',\n always: 'scroll-area-always',\n hover: 'scroll-area-hover',\n hidden: 'scroll-area-hidden',\n }[this.scrollbar];\n\n return this.twClass.merge(\n 'scroll-area-styled',\n overflowClass,\n scrollbarClass,\n this.thin ? 'scroll-area-thin' : '',\n this.dark ? 'scroll-area-dark' : '',\n this.smooth ? 'scroll-smooth' : '',\n this.class\n );\n }\n\n /** Scroll to a specific position */\n scrollTo(options: ScrollToOptions): void {\n this.scrollContainerRef?.nativeElement.scrollTo(options);\n }\n\n /** Scroll to top */\n scrollToTop(smooth = true): void {\n this.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' });\n }\n\n /** Scroll to bottom */\n scrollToBottom(smooth = true): void {\n const element = this.scrollContainerRef?.nativeElement;\n if (element) {\n this.scrollTo({\n top: element.scrollHeight,\n behavior: smooth ? 'smooth' : 'auto',\n });\n }\n }\n\n /** Scroll to left */\n scrollToLeft(smooth = true): void {\n this.scrollTo({ left: 0, behavior: smooth ? 'smooth' : 'auto' });\n }\n\n /** Scroll to right */\n scrollToRight(smooth = true): void {\n const element = this.scrollContainerRef?.nativeElement;\n if (element) {\n this.scrollTo({\n left: element.scrollWidth,\n behavior: smooth ? 'smooth' : 'auto',\n });\n }\n }\n}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ColumnsCount = 1 | 2 | 3 | 4 | 5 | 6 | 'auto';\nexport type ColumnsGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type ColumnsRule = 'none' | 'solid' | 'dashed' | 'dotted';\n\nconst COLUMNS_CLASSES: Record<string, string> = {\n 1: 'columns-1',\n 2: 'columns-2',\n 3: 'columns-3',\n 4: 'columns-4',\n 5: 'columns-5',\n 6: 'columns-6',\n auto: 'columns-auto',\n};\n\nconst GAP_CLASSES: Record<ColumnsGap, string> = {\n none: 'gap-0',\n xs: 'gap-2',\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n xl: 'gap-12',\n};\n\n/**\n * Columns component for creating multi-column text layouts.\n * Uses CSS columns for newspaper-style content flow.\n *\n * @example\n * ```html\n * <!-- 2-column layout -->\n * <tw-columns [count]=\"2\" gap=\"md\">\n * <p>This content will flow into two columns automatically...</p>\n * <p>Additional paragraphs will continue in the next column...</p>\n * </tw-columns>\n *\n * <!-- 3-column with dividers -->\n * <tw-columns [count]=\"3\" gap=\"lg\" rule=\"solid\" ruleColor=\"slate-300\">\n * <article>Long article content...</article>\n * </tw-columns>\n *\n * <!-- Responsive columns -->\n * <tw-columns [count]=\"1\" [countMd]=\"2\" [countLg]=\"3\" gap=\"md\">\n * <p>Content here...</p>\n * </tw-columns>\n * ```\n */\n@Component({\n selector: 'tw-columns',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"columnsClasses()\" [style]=\"columnsStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwColumnsComponent {\n /** Number of columns (base) */\n @Input() count: ColumnsCount = 2;\n\n /** Number of columns at sm breakpoint */\n @Input() countSm?: ColumnsCount;\n\n /** Number of columns at md breakpoint */\n @Input() countMd?: ColumnsCount;\n\n /** Number of columns at lg breakpoint */\n @Input() countLg?: ColumnsCount;\n\n /** Number of columns at xl breakpoint */\n @Input() countXl?: ColumnsCount;\n\n /** Gap between columns */\n @Input() gap: ColumnsGap = 'md';\n\n /** Column rule style */\n @Input() rule: ColumnsRule = 'none';\n\n /** Column rule color (Tailwind color, e.g., 'slate-300') */\n @Input() ruleColor = 'slate-200';\n\n /** Column rule width in pixels */\n @Input() ruleWidth = 1;\n\n /** Whether children should not break across columns */\n @Input() avoidBreak = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected columnsClasses(): string {\n const classes = [\n COLUMNS_CLASSES[this.count.toString()],\n GAP_CLASSES[this.gap],\n ];\n\n // Responsive columns\n if (this.countSm) {\n classes.push(`sm:${COLUMNS_CLASSES[this.countSm.toString()]}`);\n }\n if (this.countMd) {\n classes.push(`md:${COLUMNS_CLASSES[this.countMd.toString()]}`);\n }\n if (this.countLg) {\n classes.push(`lg:${COLUMNS_CLASSES[this.countLg.toString()]}`);\n }\n if (this.countXl) {\n classes.push(`xl:${COLUMNS_CLASSES[this.countXl.toString()]}`);\n }\n\n // Avoid break styling\n if (this.avoidBreak) {\n classes.push('[&>*]:break-inside-avoid');\n }\n\n return this.twClass.merge(...classes, this.class);\n }\n\n protected columnsStyles(): Record<string, string> {\n if (this.rule === 'none') {\n return {};\n }\n\n // Convert Tailwind color to CSS variable or fallback\n const colorMap: Record<string, string> = {\n 'slate-200': '#e2e8f0',\n 'slate-300': '#cbd5e1',\n 'slate-400': '#94a3b8',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'zinc-200': '#e4e4e7',\n 'zinc-300': '#d4d4d8',\n };\n\n const color = colorMap[this.ruleColor] || this.ruleColor;\n\n return {\n columnRule: `${this.ruleWidth}px ${this.rule} ${color}`,\n };\n }\n}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type BleedDirection = 'horizontal' | 'left' | 'right' | 'all';\nexport type BleedAmount = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Bleed component for breaking out of container constraints.\n * Useful for full-width images or backgrounds within constrained layouts.\n *\n * @example\n * ```html\n * <tw-container size=\"lg\">\n * <h1>Page Title</h1>\n * <p>Content within container...</p>\n *\n * <!-- Full-width image that bleeds out of container -->\n * <tw-bleed direction=\"horizontal\" amount=\"full\">\n * <img src=\"hero.jpg\" class=\"w-full\" />\n * </tw-bleed>\n *\n * <p>More content within container...</p>\n * </tw-container>\n *\n * <!-- Bleed with custom amount -->\n * <tw-bleed direction=\"horizontal\" amount=\"lg\">\n * <div class=\"bg-slate-100 p-8\">\n * Full-width background section\n * </div>\n * </tw-bleed>\n * ```\n */\n@Component({\n selector: 'tw-bleed',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"bleedClasses()\" [style]=\"bleedStyles()\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwBleedComponent {\n /** Direction of the bleed */\n @Input() direction: BleedDirection = 'horizontal';\n\n /** Amount of bleed */\n @Input() amount: BleedAmount = 'md';\n\n /** Custom bleed amount (e.g., '2rem', '32px') */\n @Input() customAmount?: string;\n\n /** Whether to preserve the same visual spacing inside */\n @Input() preservePadding = false;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n constructor(private readonly twClass: TwClassService) {}\n\n protected bleedClasses(): string {\n return this.twClass.merge('relative', this.class);\n }\n\n protected bleedStyles(): Record<string, string> {\n const amountMap: Record<BleedAmount, string> = {\n sm: '1rem',\n md: '2rem',\n lg: '4rem',\n xl: '6rem',\n full: '50vw',\n };\n\n const bleedValue = this.customAmount || amountMap[this.amount];\n const isFull = this.amount === 'full';\n\n const styles: Record<string, string> = {};\n\n if (this.direction === 'horizontal' || this.direction === 'all') {\n if (isFull) {\n styles['marginLeft'] = 'calc(-50vw + 50%)';\n styles['marginRight'] = 'calc(-50vw + 50%)';\n styles['width'] = '100vw';\n } else {\n styles['marginLeft'] = `-${bleedValue}`;\n styles['marginRight'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingLeft'] = bleedValue;\n styles['paddingRight'] = bleedValue;\n }\n }\n\n if (this.direction === 'left') {\n if (isFull) {\n styles['marginLeft'] = 'calc(-50vw + 50%)';\n } else {\n styles['marginLeft'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingLeft'] = bleedValue;\n }\n }\n\n if (this.direction === 'right') {\n if (isFull) {\n styles['marginRight'] = 'calc(-50vw + 50%)';\n } else {\n styles['marginRight'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingRight'] = bleedValue;\n }\n }\n\n if (this.direction === 'all') {\n if (!isFull) {\n styles['marginTop'] = `-${bleedValue}`;\n styles['marginBottom'] = `-${bleedValue}`;\n }\n\n if (this.preservePadding && !isFull) {\n styles['paddingTop'] = bleedValue;\n styles['paddingBottom'] = bleedValue;\n }\n }\n\n return styles;\n }\n}\n\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type OverlayBlur = 'none' | 'sm' | 'md' | 'lg';\nexport type OverlayOpacity = 'light' | 'medium' | 'dark' | 'solid';\n\nconst BLUR_CLASSES: Record<OverlayBlur, string> = {\n none: '',\n sm: 'backdrop-blur-sm',\n md: 'backdrop-blur-md',\n lg: 'backdrop-blur-lg',\n};\n\nconst OPACITY_CLASSES: Record<OverlayOpacity, string> = {\n light: 'bg-black/25',\n medium: 'bg-black/50',\n dark: 'bg-black/75',\n solid: 'bg-black',\n};\n\n/**\n * Overlay component for creating backdrop overlays.\n * Useful as backgrounds for modals, drawers, and lightboxes.\n *\n * @example\n * ```html\n * <!-- Simple overlay -->\n * <tw-overlay [visible]=\"isOpen\" (close)=\"isOpen = false\">\n * <div class=\"bg-white p-6 rounded-lg\">\n * Modal content here\n * </div>\n * </tw-overlay>\n *\n * <!-- Overlay with blur effect -->\n * <tw-overlay [visible]=\"showDrawer\" blur=\"md\" opacity=\"light\" (close)=\"closeDrawer()\">\n * <aside class=\"fixed right-0 top-0 h-full w-80 bg-white\">\n * Drawer content\n * </aside>\n * </tw-overlay>\n * ```\n */\n@Component({\n selector: 'tw-overlay',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (visible) {\n <div\n [class]=\"overlayClasses()\"\n (click)=\"onOverlayClick($event)\"\n [@.disabled]=\"!animate\">\n <div class=\"relative z-10\" (click)=\"$event.stopPropagation()\">\n <ng-content></ng-content>\n </div>\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `,\n ],\n})\nexport class TwOverlayComponent {\n /** Whether the overlay is visible */\n @Input() visible = false;\n\n /** Whether clicking the overlay closes it */\n @Input() closeOnClick = true;\n\n /** Whether pressing Escape closes the overlay */\n @Input() closeOnEscape = true;\n\n /** Blur intensity */\n @Input() blur: OverlayBlur = 'none';\n\n /** Opacity level */\n @Input() opacity: OverlayOpacity = 'medium';\n\n /** Whether to center content */\n @Input() centered = true;\n\n /** Whether to lock body scroll when visible */\n @Input() lockScroll = true;\n\n /** Whether to animate transitions */\n @Input() animate = true;\n\n /** Z-index of the overlay */\n @Input() zIndex = 50;\n\n /** Additional CSS classes */\n @Input() class = '';\n\n /** Emits when overlay should close */\n @Output() close = new EventEmitter<void>();\n\n constructor(private readonly twClass: TwClassService) {}\n\n @HostListener('document:keydown.escape')\n onEscapeKey(): void {\n if (this.visible && this.closeOnEscape) {\n this.close.emit();\n }\n }\n\n protected overlayClasses(): string {\n return this.twClass.merge(\n 'fixed inset-0',\n BLUR_CLASSES[this.blur],\n OPACITY_CLASSES[this.opacity],\n this.centered ? 'flex items-center justify-center' : '',\n this.animate ? 'transition-opacity duration-200' : '',\n `z-[${this.zIndex}]`,\n this.class\n );\n }\n\n protected onOverlayClick(event: MouseEvent): void {\n if (this.closeOnClick && event.target === event.currentTarget) {\n this.close.emit();\n }\n }\n}\n\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type BadgeVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeStyle = 'solid' | 'soft' | 'outline' | 'dot';\n\nconst BADGE_BASE_CLASSES = `\n inline-flex items-center justify-center\n font-medium\n whitespace-nowrap\n`;\n\nconst BADGE_SOLID_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-600 text-white',\n secondary: 'bg-slate-600 text-white',\n success: 'bg-emerald-600 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-rose-600 text-white',\n info: 'bg-cyan-600 text-white',\n neutral: 'bg-slate-200 text-slate-800',\n};\n\nconst BADGE_SOFT_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-100 dark:bg-blue-900/40 text-blue-800 dark:text-blue-300',\n secondary: 'bg-slate-100 dark:bg-slate-700 text-slate-800 dark:text-slate-300',\n success: 'bg-emerald-100 dark:bg-emerald-900/40 text-emerald-800 dark:text-emerald-300',\n warning: 'bg-amber-100 dark:bg-amber-900/40 text-amber-800 dark:text-amber-300',\n danger: 'bg-rose-100 dark:bg-rose-900/40 text-rose-800 dark:text-rose-300',\n info: 'bg-cyan-100 dark:bg-cyan-900/40 text-cyan-800 dark:text-cyan-300',\n neutral: 'bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300',\n};\n\nconst BADGE_OUTLINE_VARIANTS: Record<BadgeVariant, string> = {\n primary: 'bg-transparent border border-blue-600 dark:border-blue-400 text-blue-600 dark:text-blue-400',\n secondary: 'bg-transparent border border-slate-600 dark:border-slate-400 text-slate-600 dark:text-slate-400',\n success: 'bg-transparent border border-emerald-600 dark:border-emerald-400 text-emerald-600 dark:text-emerald-400',\n warning: 'bg-transparent border border-amber-500 dark:border-amber-400 text-amber-600 dark:text-amber-400',\n danger: 'bg-transparent border border-rose-600 dark:border-rose-400 text-rose-600 dark:text-rose-400',\n info: 'bg-transparent border border-cyan-600 dark:border-cyan-400 text-cyan-600 dark:text-cyan-400',\n neutral: 'bg-transparent border border-slate-400 dark:border-slate-500 text-slate-600 dark:text-slate-400',\n};\n\nconst BADGE_DOT_COLORS: Record<BadgeVariant, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n neutral: 'bg-slate-400',\n};\n\nconst BADGE_SIZES: Record<BadgeSize, string> = {\n sm: 'text-xs px-2.5 py-1 gap-1.5',\n md: 'text-xs px-3 py-1.5 gap-2',\n lg: 'text-sm px-4 py-2 gap-2',\n};\n\nconst BADGE_ROUNDED: Record<string, string> = {\n default: 'rounded-md',\n pill: 'rounded-full',\n};\n\n/**\n * Badge component for status indicators, labels, and counts\n *\n * @example\n * ```html\n * <tw-badge>Default</tw-badge>\n * <tw-badge variant=\"success\">Active</tw-badge>\n * <tw-badge variant=\"danger\" badgeStyle=\"soft\">Error</tw-badge>\n * <tw-badge variant=\"info\" badgeStyle=\"outline\" [pill]=\"true\">New</tw-badge>\n * <tw-badge variant=\"primary\" badgeStyle=\"dot\">With dot</tw-badge>\n * <tw-badge [removable]=\"true\" (remove)=\"onRemove()\">Removable</tw-badge>\n * ```\n */\n@Component({\n selector: 'tw-badge',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge.component.html',\n host: {\n '[class]': 'computedClasses()',\n },\n})\nexport class TwBadgeComponent {\n private readonly twClass = inject(TwClassService);\n\n // Internal signals\n protected readonly _variant = signal<BadgeVariant>('neutral');\n protected readonly _badgeStyle = signal<BadgeStyle>('solid');\n protected readonly _size = signal<BadgeSize>('md');\n protected readonly _pill = signal(false);\n protected readonly _removable = signal(false);\n protected readonly _classOverride = signal('');\n\n // Input setters\n @Input() set variant(value: BadgeVariant) {\n this._variant.set(value);\n }\n @Input() set badgeStyle(value: BadgeStyle) {\n this._badgeStyle.set(value);\n }\n @Input() set size(value: BadgeSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set pill(value: boolean) {\n this._pill.set(value);\n }\n @Input({ transform: booleanAttribute }) set removable(value: boolean) {\n this._removable.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n // Output\n @Output() remove = new EventEmitter<void>();\n\n protected readonly computedClasses = computed(() => {\n const styleVariants: Record<BadgeStyle, Record<BadgeVariant, string>> = {\n solid: BADGE_SOLID_VARIANTS,\n soft: BADGE_SOFT_VARIANTS,\n outline: BADGE_OUTLINE_VARIANTS,\n dot: BADGE_SOFT_VARIANTS, // Dot style uses soft background\n };\n\n return this.twClass.merge(\n BADGE_BASE_CLASSES,\n styleVariants[this._badgeStyle()][this._variant()],\n BADGE_SIZES[this._size()],\n this._pill() ? BADGE_ROUNDED['pill'] : BADGE_ROUNDED['default'],\n this._classOverride()\n );\n });\n\n protected readonly dotClasses = computed(() => {\n const dotSizes: Record<BadgeSize, string> = {\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n };\n\n return this.twClass.merge(\n 'rounded-full',\n dotSizes[this._size()],\n BADGE_DOT_COLORS[this._variant()]\n );\n });\n\n protected onRemoveClick(event: Event): void {\n event.stopPropagation();\n this.remove.emit();\n }\n}\n\n/**\n * Badge group for displaying multiple badges\n */\n@Component({\n selector: 'tw-badge-group',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge-group.component.html',\n})\nexport class TwBadgeGroupComponent {\n private readonly twClass = inject(TwClassService);\n\n // Internal signals\n protected readonly _gap = signal<'sm' | 'md' | 'lg'>('sm');\n protected readonly _direction = signal<'row' | 'column'>('row');\n protected readonly _wrap = signal(true);\n protected readonly _classOverride = signal('');\n\n // Input setters\n @Input() set gap(value: 'sm' | 'md' | 'lg') {\n this._gap.set(value);\n }\n @Input() set direction(value: 'row' | 'column') {\n this._direction.set(value);\n }\n @Input({ transform: booleanAttribute }) set wrap(value: boolean) {\n this._wrap.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n protected readonly computedClasses = computed(() => {\n const gaps: Record<string, string> = {\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n };\n\n return this.twClass.merge(\n 'inline-flex',\n this._direction() === 'column' ? 'flex-col' : 'flex-row',\n this._wrap() ? 'flex-wrap' : '',\n gaps[this._gap()],\n this._classOverride()\n );\n });\n}\n","@if (_badgeStyle() === 'dot') {\n <span [class]=\"dotClasses()\" aria-hidden=\"true\"></span>\n}\n\n<ng-content></ng-content>\n\n@if (_removable()) {\n <button\n type=\"button\"\n class=\"ml-1 -mr-0.5 inline-flex items-center justify-center w-4 h-4 rounded-full hover:bg-black/10 focus:outline-none transition-colors\"\n (click)=\"onRemoveClick($event)\"\n aria-label=\"Remove\"\n >\n <svg class=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n}\n","<div [class]=\"computedClasses()\">\n <ng-content></ng-content>\n</div>\n","export * from './badge.component';\n\nimport { TwBadgeComponent, TwBadgeGroupComponent } from './badge.component';\n\nexport const TW_BADGE_COMPONENTS = [TwBadgeComponent, TwBadgeGroupComponent] as const;\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type AvatarVariant = 'circle' | 'rounded' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away' | 'none';\n\n@Component({\n selector: 'tw-avatar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar.component.html',\n})\nexport class TwAvatarComponent {\n @Input() set src(val: string) {\n this._src.set(val);\n }\n @Input() set alt(val: string) {\n this._alt.set(val);\n }\n @Input() set initials(val: string) {\n this._initials.set(val);\n }\n @Input() set size(val: AvatarSize) {\n this._size.set(val);\n }\n @Input() set variant(val: AvatarVariant) {\n this._variant.set(val);\n }\n @Input() set status(val: AvatarStatus) {\n this._status.set(val);\n }\n @Input() set badge(val: string | number) {\n this._badge.set(val?.toString() ?? '');\n }\n @Input() set color(val: string) {\n this._color.set(val);\n }\n\n protected _src = signal('');\n protected _alt = signal('');\n protected _initials = signal('');\n protected _size = signal<AvatarSize>('md');\n protected _variant = signal<AvatarVariant>('circle');\n protected _status = signal<AvatarStatus>('none');\n protected _badge = signal('');\n protected _color = signal('');\n protected _imageError = signal(false);\n\n protected srcVal = computed(() => (this._imageError() ? '' : this._src()));\n protected altVal = computed(() => this._alt());\n protected initialsVal = computed(() => this._initials());\n protected statusVal = computed(() => this._status());\n protected badgeVal = computed(() => this._badge());\n\n protected containerClasses = computed(() => {\n const sz = this._size();\n\n // Outer container needs extra padding for status/badge overflow\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-6 h-6',\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-16 h-16',\n '2xl': 'w-20 h-20',\n };\n\n return ['relative inline-block', sizeClasses[sz]].join(' ');\n });\n\n protected innerClasses = computed(() => {\n const sz = this._size();\n const vari = this._variant();\n const clr = this._color();\n\n const textSizeClasses: Record<AvatarSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n };\n\n const variantClasses: Record<AvatarVariant, string> = {\n circle: 'rounded-full',\n rounded: 'rounded-lg',\n square: 'rounded-none',\n };\n\n const baseColor = clr || 'bg-slate-200 dark:bg-slate-700 text-slate-600 dark:text-slate-300';\n\n return [\n 'w-full h-full flex items-center justify-center overflow-hidden',\n textSizeClasses[sz],\n variantClasses[vari],\n baseColor,\n ].join(' ');\n });\n\n protected initialsClasses = computed(() => 'font-medium uppercase');\n\n protected statusClasses = computed(() => {\n const sz = this._size();\n const stat = this._status();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-1.5 h-1.5 border',\n sm: 'w-2 h-2 border',\n md: 'w-2.5 h-2.5 border-2',\n lg: 'w-3 h-3 border-2',\n xl: 'w-3.5 h-3.5 border-2',\n '2xl': 'w-4 h-4 border-2',\n };\n\n const statusColors: Record<AvatarStatus, string> = {\n online: 'bg-emerald-500',\n offline: 'bg-slate-400',\n busy: 'bg-rose-500',\n away: 'bg-amber-500',\n none: '',\n };\n\n return [\n 'absolute bottom-0 right-0 rounded-full border-white dark:border-slate-800',\n sizeClasses[sz],\n statusColors[stat],\n ].join(' ');\n });\n\n protected badgeClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'text-[8px] min-w-3 h-3 -top-0.5 -right-0.5',\n sm: 'text-[9px] min-w-3.5 h-3.5 -top-0.5 -right-0.5',\n md: 'text-[10px] min-w-4 h-4 -top-1 -right-1',\n lg: 'text-xs min-w-5 h-5 -top-1 -right-1',\n xl: 'text-xs min-w-5 h-5 -top-1 -right-1',\n '2xl': 'text-sm min-w-6 h-6 -top-1 -right-1',\n };\n\n return [\n 'absolute flex items-center justify-center rounded-full bg-rose-500 text-white font-medium px-1',\n sizeClasses[sz],\n ].join(' ');\n });\n\n protected onImageError(): void {\n this._imageError.set(true);\n }\n}\n\n@Component({\n selector: 'tw-avatar-group',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './avatar-group.component.html',\n})\nexport class TwAvatarGroupComponent {\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set total(val: number) {\n this._total.set(val);\n }\n @Input() set size(val: AvatarSize) {\n this._size.set(val);\n }\n @Input() set spacing(val: 'tight' | 'normal' | 'loose') {\n this._spacing.set(val);\n }\n\n protected _max = signal(0);\n protected _total = signal(0);\n protected _size = signal<AvatarSize>('md');\n protected _spacing = signal<'tight' | 'normal' | 'loose'>('normal');\n\n protected maxVal = computed(() => this._max());\n protected overflowVal = computed(() => {\n const mx = this._max();\n const tot = this._total();\n return mx > 0 && tot > mx ? tot - mx : 0;\n });\n\n protected groupClasses = computed(() => {\n const sp = this._spacing();\n\n const spacingClasses: Record<string, string> = {\n tight: '-space-x-3',\n normal: '-space-x-2',\n loose: '-space-x-1',\n };\n\n return ['flex items-center', spacingClasses[sp], '[&>*]:ring-2 [&>*]:ring-white dark:[&>*]:ring-slate-800'].join(' ');\n });\n\n protected overflowClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<AvatarSize, string> = {\n xs: 'w-6 h-6 text-xs',\n sm: 'w-8 h-8 text-sm',\n md: 'w-10 h-10 text-base',\n lg: 'w-12 h-12 text-lg',\n xl: 'w-16 h-16 text-xl',\n '2xl': 'w-20 h-20 text-2xl',\n };\n\n return [\n 'flex items-center justify-center rounded-full bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300 font-medium ring-2 ring-white dark:ring-slate-800',\n sizeClasses[sz],\n ].join(' ');\n });\n}\n","<div [class]=\"containerClasses()\">\n <!-- Inner container with overflow-hidden for image clipping -->\n <div [class]=\"innerClasses()\">\n @if (srcVal()) {\n <img\n [src]=\"srcVal()\"\n [alt]=\"altVal()\"\n class=\"w-full h-full object-cover\"\n (error)=\"onImageError()\"\n />\n } @else if (initialsVal()) {\n <span [class]=\"initialsClasses()\">{{ initialsVal() }}</span>\n } @else {\n <svg class=\"w-3/5 h-3/5 text-current\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n 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.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n />\n </svg>\n }\n </div>\n\n <!-- Status indicator (outside overflow container) -->\n @if (statusVal() !== 'none') {\n <span [class]=\"statusClasses()\"></span>\n }\n\n <!-- Badge (outside overflow container) -->\n @if (badgeVal()) {\n <span [class]=\"badgeClasses()\">{{ badgeVal() }}</span>\n }\n</div>\n","<div [class]=\"groupClasses()\">\n <ng-content></ng-content>\n @if (maxVal() && overflowVal() > 0) {\n <div [class]=\"overflowClasses()\">+{{ overflowVal() }}</div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TableColumn {\n field: string;\n header: string;\n sortable?: boolean;\n width?: string;\n align?: 'left' | 'center' | 'right';\n template?: TemplateRef<any>;\n}\n\nexport type TableSize = 'sm' | 'md' | 'lg';\nexport type TableVariant = 'default' | 'striped' | 'bordered';\n\nconst TABLE_SIZES: Record<TableSize, { cell: string; text: string }> = {\n sm: { cell: 'px-3 py-2', text: 'text-sm' },\n md: { cell: 'px-4 py-3', text: 'text-sm' },\n lg: { cell: 'px-6 py-4', text: 'text-base' },\n};\n\n/**\n * Table/DataTable component with Tailwind CSS styling\n */\n@Component({\n selector: 'tw-table',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './table.component.html',\n})\nexport class TwTableComponent {\n private readonly twClass = inject(TwClassService);\n\n @Input() data: any[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() title = '';\n @Input() size: TableSize = 'md';\n @Input() variant: TableVariant = 'default';\n @Input({ transform: booleanAttribute }) selectable = false;\n @Input() selectionMode: 'single' | 'multiple' = 'multiple';\n @Input({ transform: booleanAttribute }) showGlobalFilter = false;\n @Input() filterPlaceholder = 'Search...';\n @Input({ transform: booleanAttribute }) paginator = false;\n @Input({ transform: numberAttribute }) rows = 10;\n @Input() rowsPerPageOptions: number[] = [10, 25, 50, 100];\n @Input() emptyMessage = 'No records found';\n @Input({ transform: booleanAttribute }) hoverable = true;\n @Input({ transform: booleanAttribute }) responsive = true;\n @Input() trackByFn: (item: any) => any = item => item;\n @Input() classOverride = '';\n\n @Output() selectionChange = new EventEmitter<any[]>();\n @Output() rowClick = new EventEmitter<any>();\n @Output() sortChange = new EventEmitter<{ field: string; order: number }>();\n @Output() pageChange = new EventEmitter<{ page: number; rows: number }>();\n\n @ContentChild('twTableActions') headerActionsTemplate!: TemplateRef<any>;\n @ContentChild('twRowActions') rowActionsTemplate!: TemplateRef<any>;\n\n protected globalFilter = signal('');\n protected sortField = signal<string>('');\n protected sortOrder = signal<1 | -1>(1);\n protected currentPage = signal(1);\n protected selection = signal<any[]>([]);\n\n protected get hasHeaderActions(): boolean {\n return !!this.headerActionsTemplate;\n }\n\n protected get hasRowActions(): boolean {\n return !!this.rowActionsTemplate;\n }\n\n protected get totalColumns(): number {\n let count = this.columns.length;\n if (this.selectable) count++;\n if (this.hasRowActions) count++;\n return count;\n }\n\n protected filteredData = computed(() => {\n let result = [...this.data];\n const filter = this.globalFilter().toLowerCase();\n if (filter) {\n result = result.filter(item =>\n this.columns.some(col => {\n const value = this.getFieldValue(item, col.field);\n return value?.toString().toLowerCase().includes(filter);\n })\n );\n }\n const field = this.sortField();\n if (field) {\n result.sort((a, b) => {\n const aVal = this.getFieldValue(a, field);\n const bVal = this.getFieldValue(b, field);\n const comparison = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n return comparison * this.sortOrder();\n });\n }\n return result;\n });\n\n protected totalRecords = computed(() => this.filteredData().length);\n protected totalPages = computed(() => Math.ceil(this.totalRecords() / this.rows));\n\n protected displayedData = computed(() => {\n if (!this.paginator) return this.filteredData();\n const start = (this.currentPage() - 1) * this.rows;\n return this.filteredData().slice(start, start + this.rows);\n });\n\n protected paginationStart = computed(() => {\n if (this.totalRecords() === 0) return 0;\n return (this.currentPage() - 1) * this.rows + 1;\n });\n\n protected paginationEnd = computed(() => {\n return Math.min(this.currentPage() * this.rows, this.totalRecords());\n });\n\n protected visiblePages = computed((): Array<number | string> => {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: Array<number | string> = [];\n if (total <= 7) {\n for (let i = 1; i <= total; i++) pages.push(i);\n } else {\n pages.push(1);\n if (current > 3) pages.push('...');\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push('...');\n pages.push(total);\n }\n return pages;\n });\n\n protected allSelected = computed(() => {\n const displayed = this.displayedData();\n return displayed.length > 0 && displayed.every(row => this.isSelected(row));\n });\n\n protected someSelected = computed(() => {\n const displayed = this.displayedData();\n const selectedCount = displayed.filter(row => this.isSelected(row)).length;\n return selectedCount > 0 && selectedCount < displayed.length;\n });\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n 'bg-white dark:bg-slate-800 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden',\n this.classOverride\n );\n });\n\n protected tableWrapperClasses = computed(() => (this.responsive ? 'overflow-x-auto' : ''));\n\n protected tableClasses = computed(() => {\n const sizeClasses = TABLE_SIZES[this.size].text;\n return this.twClass.merge(\n 'w-full',\n sizeClasses,\n this.variant === 'bordered' ? 'border-collapse' : ''\n );\n });\n\n protected theadClasses = computed(() => 'bg-slate-50 dark:bg-slate-900 border-b border-slate-200 dark:border-slate-700');\n\n protected thClasses(col: TableColumn) {\n const sizeClasses = TABLE_SIZES[this.size].cell;\n const alignClasses =\n col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left';\n return this.twClass.merge(\n 'font-semibold text-slate-700 dark:text-slate-300 whitespace-nowrap',\n sizeClasses,\n alignClasses,\n col.sortable === false ? '' : 'cursor-pointer hover:bg-slate-100 dark:hover:bg-slate-700 select-none'\n );\n }\n\n protected tbodyClasses = computed(() => 'divide-y divide-slate-100 dark:divide-slate-700');\n\n protected trClasses(row: any, isOdd: boolean) {\n const isSelected = this.isSelected(row);\n return this.twClass.merge(\n 'transition-colors',\n this.variant === 'striped' && isOdd ? 'bg-slate-50 dark:bg-slate-900/50' : 'bg-white dark:bg-slate-800',\n this.hoverable ? 'hover:bg-slate-50 dark:hover:bg-slate-700' : '',\n isSelected ? 'bg-blue-50 dark:bg-blue-900/30' : '',\n this.selectable ? 'cursor-pointer' : ''\n );\n }\n\n protected tdClasses(col: TableColumn) {\n const sizeClasses = TABLE_SIZES[this.size].cell;\n const alignClasses =\n col.align === 'center' ? 'text-center' : col.align === 'right' ? 'text-right' : 'text-left';\n return this.twClass.merge(\n 'text-slate-600 dark:text-slate-400',\n sizeClasses,\n alignClasses,\n this.variant === 'bordered' ? 'border border-slate-200 dark:border-slate-700' : ''\n );\n }\n\n protected pageButtonClasses(page: number) {\n const isCurrent = page === this.currentPage();\n return this.twClass.merge(\n 'w-8 h-8 text-sm font-medium rounded-lg transition-colors',\n isCurrent\n ? 'bg-blue-600 text-white'\n : 'text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 hover:bg-slate-50 dark:hover:bg-slate-700'\n );\n }\n\n getFieldValue(obj: any, field: string): any {\n return field.split('.').reduce((o, k) => o?.[k], obj);\n }\n\n onGlobalFilterChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.globalFilter.set(input.value);\n this.currentPage.set(1);\n }\n\n onSort(col: TableColumn): void {\n if (col.sortable === false) return;\n if (this.sortField() === col.field) {\n this.sortOrder.set(this.sortOrder() === 1 ? -1 : 1);\n } else {\n this.sortField.set(col.field);\n this.sortOrder.set(1);\n }\n this.sortChange.emit({ field: this.sortField(), order: this.sortOrder() });\n }\n\n goToPage(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.currentPage.set(page);\n this.pageChange.emit({ page, rows: this.rows });\n }\n\n isSelected(row: any): boolean {\n return this.selection().includes(row);\n }\n\n toggleSelection(row: any): void {\n const current = this.selection();\n const index = current.indexOf(row);\n if (this.selectionMode === 'single') {\n this.selection.set(index === -1 ? [row] : []);\n } else if (index === -1) {\n this.selection.set([...current, row]);\n } else {\n this.selection.set(current.filter(r => r !== row));\n }\n this.selectionChange.emit(this.selection());\n }\n\n toggleSelectAll(): void {\n const displayed = this.displayedData();\n if (this.allSelected()) {\n this.selection.set(this.selection().filter(r => !displayed.includes(r)));\n } else {\n const newSelection = [...this.selection()];\n displayed.forEach(row => {\n if (!newSelection.includes(row)) newSelection.push(row);\n });\n this.selection.set(newSelection);\n }\n this.selectionChange.emit(this.selection());\n }\n\n onRowClick(row: any): void {\n this.rowClick.emit(row);\n if (this.selectable) this.toggleSelection(row);\n }\n\n clearSelection(): void {\n this.selection.set([]);\n this.selectionChange.emit([]);\n }\n\n reset(): void {\n this.globalFilter.set('');\n this.sortField.set('');\n this.sortOrder.set(1);\n this.currentPage.set(1);\n this.clearSelection();\n }\n}\n","<div [class]=\"containerClasses()\">\n <!-- Header with title and actions -->\n @if (title || hasHeaderActions) {\n <div class=\"px-6 py-4 border-b border-slate-200 dark:border-slate-700 flex items-center justify-between\">\n @if (title) {\n <h3 class=\"text-lg font-semibold text-slate-900 dark:text-slate-100\">{{ title }}</h3>\n }\n <div class=\"flex items-center gap-2\">\n <ng-content select=\"[twTableActions]\"></ng-content>\n </div>\n </div>\n }\n\n <!-- Search/Filter bar -->\n @if (showGlobalFilter) {\n <div class=\"px-6 py-3 border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900\">\n <div class=\"relative max-w-md\">\n <svg\n class=\"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-slate-400 dark:text-slate-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n <input\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n class=\"w-full pl-10 pr-4 py-2 text-sm border border-slate-300 dark:border-slate-600 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 placeholder-slate-400 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n [value]=\"globalFilter()\"\n (input)=\"onGlobalFilterChange($event)\"\n />\n </div>\n </div>\n }\n\n <!-- Table wrapper -->\n <div [class]=\"tableWrapperClasses()\">\n <table [class]=\"tableClasses()\">\n <thead [class]=\"theadClasses()\">\n <tr>\n @if (selectable) {\n <th class=\"w-12 px-4 py-3\">\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 dark:border-slate-600 text-blue-600 focus:ring-blue-500 bg-white dark:bg-slate-700\"\n [checked]=\"allSelected()\"\n [indeterminate]=\"someSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n @for (col of columns; track col.field) {\n <th\n [class]=\"thClasses(col)\"\n [style.width]=\"col.width\"\n (click)=\"col.sortable !== false ? onSort(col) : null\"\n >\n <div class=\"flex items-center gap-2\">\n <span>{{ col.header }}</span>\n @if (col.sortable !== false && sortField() === col.field) {\n <svg\n class=\"w-4 h-4\"\n [class.rotate-180]=\"sortOrder() === -1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n }\n </div>\n </th>\n }\n @if (hasRowActions) {\n <th class=\"w-20 px-4 py-3 text-right text-slate-700 dark:text-slate-300\">Actions</th>\n }\n </tr>\n </thead>\n <tbody [class]=\"tbodyClasses()\">\n @for (row of displayedData(); track trackByFn(row); let i = $index; let odd = $odd) {\n <tr [class]=\"trClasses(row, odd)\" (click)=\"onRowClick(row)\">\n @if (selectable) {\n <td class=\"px-4 py-3\">\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 dark:border-slate-600 text-blue-600 focus:ring-blue-500 bg-white dark:bg-slate-700\"\n [checked]=\"isSelected(row)\"\n (change)=\"toggleSelection(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n </td>\n }\n @for (col of columns; track col.field) {\n <td [class]=\"tdClasses(col)\">\n @if (col.template) {\n <ng-container\n *ngTemplateOutlet=\"\n col.template;\n context: { $implicit: row, rowData: row, column: col }\n \"\n ></ng-container>\n } @else {\n {{ getFieldValue(row, col.field) }}\n }\n </td>\n }\n @if (hasRowActions) {\n <td class=\"px-4 py-3 text-right\">\n <ng-content select=\"[twRowActions]\"></ng-content>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [attr.colspan]=\"totalColumns\" class=\"px-6 py-12 text-center text-slate-500 dark:text-slate-400\">\n {{ emptyMessage }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- Pagination -->\n @if (paginator && totalRecords() > 0) {\n <div class=\"px-6 py-4 border-t border-slate-200 dark:border-slate-700 flex items-center justify-between bg-slate-50 dark:bg-slate-900\">\n <div class=\"text-sm text-slate-600 dark:text-slate-400\">\n Showing {{ paginationStart() }} to {{ paginationEnd() }} of {{ totalRecords() }} entries\n </div>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-sm font-medium text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg hover:bg-slate-50 dark:hover:bg-slate-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"goToPage(currentPage() - 1)\"\n >\n Previous\n </button>\n @for (page of visiblePages(); track page) {\n @if (page === '...') {\n <span class=\"px-2 text-slate-400 dark:text-slate-500\">...</span>\n } @else {\n <button type=\"button\" [class]=\"pageButtonClasses(+page)\" (click)=\"goToPage(+page)\">\n {{ page }}\n </button>\n }\n }\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-sm font-medium text-slate-600 dark:text-slate-400 bg-white dark:bg-slate-800 border border-slate-300 dark:border-slate-600 rounded-lg hover:bg-slate-50 dark:hover:bg-slate-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"goToPage(currentPage() + 1)\"\n >\n Next\n </button>\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport {\n TableColumn,\n TableSize,\n TableVariant,\n TwTableComponent,\n} from '../table/table.component';\n\n@Component({\n selector: 'tw-datatables',\n standalone: true,\n imports: [CommonModule, TwTableComponent],\n templateUrl: './datatable.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TwDatatablesComponent {\n @Input() public data: unknown[] = [];\n @Input() public columns: TableColumn[] = [];\n @Input() public title = '';\n @Input() public subtitle?: string;\n @Input() public description?: string;\n @Input() public tableSize: TableSize = 'md';\n @Input() public tableVariant: TableVariant = 'striped';\n @Input() public selectable = false;\n @Input() public selectionMode: 'single' | 'multiple' = 'multiple';\n @Input() public showGlobalFilter = true;\n @Input() public paginator = true;\n @Input() public rows = 10;\n @Input() public hoverable = true;\n @Input() public responsive = true;\n @Input() public emptyMessage = 'No records found';\n @Input() public classOverride = '';\n @Input() public containerClass = '';\n @Input() public toolbarClass = '';\n\n @Output() public selectionChange = new EventEmitter<unknown[]>();\n @Output() public rowClick = new EventEmitter<unknown>();\n @Output() public sortChange = new EventEmitter<{ field: string; order: number }>();\n @Output() public pageChange = new EventEmitter<{ page: number; rows: number }>();\n\n protected readonly baseContainerClass =\n 'bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-2xl shadow-sm p-6 space-y-6';\n\n protected readonly baseToolbarClass = 'flex items-center gap-2 flex-wrap';\n\n protected get containerClassList(): string {\n return [this.baseContainerClass, this.containerClass].filter(Boolean).join(' ');\n }\n\n protected get toolbarClassList(): string {\n return [this.baseToolbarClass, this.toolbarClass].filter(Boolean).join(' ');\n }\n}\n\n\n","<section [class]=\"containerClassList\">\n <header class=\"flex flex-wrap items-start justify-between gap-6\">\n <div class=\"space-y-1 max-w-3xl\">\n @if (subtitle) {\n <p class=\"text-xs font-semibold uppercase tracking-wider text-slate-500 dark:text-slate-400\">\n {{ subtitle }}\n </p>\n }\n <h3 class=\"text-xl font-semibold text-slate-900 dark:text-white\">{{ title }}</h3>\n @if (description) {\n <p class=\"text-sm text-slate-500 dark:text-slate-300\">\n {{ description }}\n </p>\n }\n </div>\n <div [class]=\"toolbarClassList\">\n <ng-content select=\"[twDatatablesActions]\"></ng-content>\n </div>\n </header>\n\n <div class=\"space-y-4\">\n <tw-table\n [data]=\"data\"\n [columns]=\"columns\"\n [size]=\"tableSize\"\n [variant]=\"tableVariant\"\n [selectable]=\"selectable\"\n [selectionMode]=\"selectionMode\"\n [showGlobalFilter]=\"showGlobalFilter\"\n [paginator]=\"paginator\"\n [rows]=\"rows\"\n [hoverable]=\"hoverable\"\n [responsive]=\"responsive\"\n [emptyMessage]=\"emptyMessage\"\n [classOverride]=\"classOverride\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (rowClick)=\"rowClick.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (pageChange)=\"pageChange.emit($event)\"\n ></tw-table>\n </div>\n</section>\n\n\n","export * from './datatable.component';\n\nimport { TwDatatablesComponent } from './datatable.component';\n\nexport const TW_DATATABLES_COMPONENTS = [TwDatatablesComponent] as const;\n\n\n\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TreeNode {\n key?: string | number;\n label: string;\n icon?: TemplateRef<any>;\n expanded?: boolean;\n selected?: boolean;\n disabled?: boolean;\n visible?: boolean;\n children?: TreeNode[];\n data?: any;\n badge?: string;\n styleClass?: string;\n}\n\nexport type TreeSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';\n\n/**\n * Tree component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-tree [nodes]=\"treeNodes\" selectionMode=\"checkbox\"></tw-tree>\n * <tw-tree [nodes]=\"nodes\" (onNodeSelect)=\"handleSelect($event)\"></tw-tree>\n * ```\n */\n@Component({\n selector: 'tw-tree',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tree.component.html',\n})\nexport class TwTreeComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Tree nodes */\n @Input() nodes: TreeNode[] = [];\n\n /** Selection mode */\n @Input() selectionMode: TreeSelectionMode = 'none';\n\n /** Indent size in pixels */\n @Input({ transform: numberAttribute }) indentSize = 24;\n\n /** Whether to propagate selection to children */\n @Input() propagateSelectionDown = true;\n\n /** Whether to propagate selection to parent */\n @Input() propagateSelectionUp = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Node select event */\n @Output() onNodeSelect = new EventEmitter<TreeNode>();\n\n /** Node unselect event */\n @Output() onNodeUnselect = new EventEmitter<TreeNode>();\n\n /** Node expand event */\n @Output() onNodeExpand = new EventEmitter<TreeNode>();\n\n /** Node collapse event */\n @Output() onNodeCollapse = new EventEmitter<TreeNode>();\n\n /** Selection change event */\n @Output() selectionChange = new EventEmitter<TreeNode[]>();\n\n protected selection = signal<TreeNode[]>([]);\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('py-2', this.classOverride);\n });\n\n protected nodeClasses(node: TreeNode, level: number) {\n return this.twClass.merge(\n 'flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors cursor-pointer',\n 'hover:bg-slate-100',\n node.selected ? 'bg-blue-50' : '',\n node.disabled ? 'opacity-50 cursor-not-allowed' : '',\n node.styleClass || ''\n );\n }\n\n protected labelClasses(node: TreeNode) {\n return this.twClass.merge(\n 'text-sm select-none',\n node.disabled ? 'text-slate-400' : 'text-slate-700'\n );\n }\n\n isSelected(node: TreeNode): boolean {\n return this.selection().includes(node);\n }\n\n isIndeterminate(node: TreeNode): boolean {\n if (!node.children || node.children.length === 0) return false;\n\n const selectedChildren = this.getSelectedDescendants(node);\n const allChildren = this.getAllDescendants(node);\n\n return selectedChildren.length > 0 && selectedChildren.length < allChildren.length;\n }\n\n onNodeClick(node: TreeNode): void {\n if (node.disabled) return;\n\n // Toggle expand/collapse if node has children\n if (node.children && node.children.length > 0) {\n this.toggleNode(node);\n }\n\n // Handle selection\n if (this.selectionMode === 'single') {\n this.selection.set([node]);\n this.onNodeSelect.emit(node);\n this.selectionChange.emit(this.selection());\n } else if (this.selectionMode === 'multiple') {\n const current = this.selection();\n if (current.includes(node)) {\n this.selection.set(current.filter(n => n !== node));\n this.onNodeUnselect.emit(node);\n } else {\n this.selection.set([...current, node]);\n this.onNodeSelect.emit(node);\n }\n this.selectionChange.emit(this.selection());\n }\n }\n\n onCheckboxChange(node: TreeNode, event: Event): void {\n if (node.disabled) return;\n\n const { checked } = event.target as HTMLInputElement;\n\n if (checked) {\n this.selectNode(node);\n } else {\n this.unselectNode(node);\n }\n\n this.selectionChange.emit(this.selection());\n }\n\n toggleNode(node: TreeNode): void {\n node.expanded = !node.expanded;\n\n if (node.expanded) {\n this.onNodeExpand.emit(node);\n } else {\n this.onNodeCollapse.emit(node);\n }\n }\n\n private selectNode(node: TreeNode): void {\n const current = this.selection();\n if (!current.includes(node)) {\n this.selection.set([...current, node]);\n this.onNodeSelect.emit(node);\n }\n\n if (this.propagateSelectionDown && node.children) {\n node.children.forEach(child => {\n this.selectNode(child);\n });\n }\n }\n\n private unselectNode(node: TreeNode): void {\n this.selection.set(this.selection().filter(n => n !== node));\n this.onNodeUnselect.emit(node);\n\n if (this.propagateSelectionDown && node.children) {\n node.children.forEach(child => {\n this.unselectNode(child);\n });\n }\n }\n\n private getSelectedDescendants(node: TreeNode): TreeNode[] {\n const selected: TreeNode[] = [];\n\n const traverse = (n: TreeNode) => {\n if (this.selection().includes(n)) {\n selected.push(n);\n }\n if (n.children) {\n n.children.forEach(traverse);\n }\n };\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n\n return selected;\n }\n\n private getAllDescendants(node: TreeNode): TreeNode[] {\n const descendants: TreeNode[] = [];\n\n const traverse = (n: TreeNode) => {\n descendants.push(n);\n if (n.children) {\n n.children.forEach(traverse);\n }\n };\n\n if (node.children) {\n node.children.forEach(traverse);\n }\n\n return descendants;\n }\n\n /** Expand all nodes */\n expandAll(): void {\n const expandNodes = (nodes: TreeNode[]) => {\n nodes.forEach(node => {\n if (node.children && node.children.length > 0) {\n node.expanded = true;\n expandNodes(node.children);\n }\n });\n };\n expandNodes(this.nodes);\n }\n\n /** Collapse all nodes */\n collapseAll(): void {\n const collapseNodes = (nodes: TreeNode[]) => {\n nodes.forEach(node => {\n node.expanded = false;\n if (node.children) {\n collapseNodes(node.children);\n }\n });\n };\n collapseNodes(this.nodes);\n }\n\n /** Get selected nodes */\n getSelection(): TreeNode[] {\n return this.selection();\n }\n\n /** Clear selection */\n clearSelection(): void {\n this.selection.set([]);\n this.selectionChange.emit([]);\n }\n}\n","<div [class]=\"containerClasses()\" role=\"tree\">\n <ng-container\n *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: nodes, level: 0 }\"\n ></ng-container>\n</div>\n\n<ng-template #nodeTemplate let-nodes let-level=\"level\">\n @for (node of nodes; track node.key ?? $index) {\n @if (node.visible !== false) {\n <div role=\"treeitem\" [attr.aria-expanded]=\"node.expanded\">\n <div\n [class]=\"nodeClasses(node, level)\"\n [style.paddingLeft.px]=\"level * indentSize\"\n (click)=\"onNodeClick(node)\"\n >\n <!-- Expand/Collapse toggle -->\n @if (node.children && node.children.length > 0) {\n <button\n type=\"button\"\n class=\"p-1 rounded hover:bg-slate-200 transition-colors\"\n (click)=\"toggleNode(node); $event.stopPropagation()\"\n [attr.aria-label]=\"node.expanded ? 'Collapse' : 'Expand'\"\n >\n <svg\n class=\"w-4 h-4 transition-transform duration-200\"\n [class.rotate-90]=\"node.expanded\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n } @else {\n <span class=\"w-6\"></span>\n }\n\n <!-- Checkbox for selection -->\n @if (selectionMode !== 'none') {\n <input\n type=\"checkbox\"\n class=\"w-4 h-4 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"isSelected(node)\"\n [indeterminate]=\"isIndeterminate(node)\"\n (change)=\"onCheckboxChange(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n\n <!-- Icon -->\n @if (node.icon) {\n <ng-container *ngTemplateOutlet=\"node.icon\"></ng-container>\n } @else if (node.children && node.children.length > 0) {\n <svg class=\"w-5 h-5 text-amber-500\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n @if (node.expanded) {\n <path d=\"M19 11H5a2 2 0 00-2 2v7a2 2 0 002 2h14a2 2 0 002-2v-7a2 2 0 00-2-2z\" />\n <path d=\"M17 11V7a2 2 0 00-2-2H5a2 2 0 00-2 2v4\" />\n } @else {\n <path\n d=\"M3 7v13a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6.586a1 1 0 01-.707-.293l-2-2A1 1 0 009.586 4H5a2 2 0 00-2 2z\"\n />\n }\n </svg>\n } @else {\n <svg\n class=\"w-5 h-5 text-slate-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n }\n\n <!-- Label -->\n <span [class]=\"labelClasses(node)\">{{ node.label }}</span>\n\n <!-- Badge -->\n @if (node.badge) {\n <span\n class=\"ml-auto px-2 py-0.5 text-xs font-medium rounded-full bg-blue-100 text-blue-700\"\n >\n {{ node.badge }}\n </span>\n }\n </div>\n\n <!-- Children -->\n @if (node.children && node.children.length > 0 && node.expanded) {\n <div class=\"animate-in slide-in-from-top-1 duration-200\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeTemplate;\n context: { $implicit: node.children, level: level + 1 }\n \"\n ></ng-container>\n </div>\n }\n </div>\n }\n }\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface TimelineEvent {\n id?: string | number;\n title?: string;\n description?: string;\n date?: string;\n icon?: TemplateRef<any>;\n content?: TemplateRef<any>;\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n}\n\nexport type TimelineLayout = 'vertical' | 'horizontal';\nexport type TimelineAlign = 'left' | 'right' | 'alternate';\n\nconst TIMELINE_COLORS: Record<string, { bg: string; border: string }> = {\n primary: { bg: 'bg-blue-600', border: 'border-blue-600' },\n secondary: { bg: 'bg-slate-600', border: 'border-slate-600' },\n success: { bg: 'bg-emerald-600', border: 'border-emerald-600' },\n warning: { bg: 'bg-amber-500', border: 'border-amber-500' },\n danger: { bg: 'bg-rose-600', border: 'border-rose-600' },\n info: { bg: 'bg-cyan-600', border: 'border-cyan-600' },\n};\n\n/**\n * Timeline component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-timeline [events]=\"timelineEvents\"></tw-timeline>\n * <tw-timeline [events]=\"events\" align=\"alternate\"></tw-timeline>\n * ```\n */\n@Component({\n selector: 'tw-timeline',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './timeline.component.html',\n})\nexport class TwTimelineComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Events to display */\n @Input() events: TimelineEvent[] = [];\n\n /** Layout direction */\n @Input() layout: TimelineLayout = 'vertical';\n\n /** Content alignment */\n @Input() align: TimelineAlign = 'left';\n\n /** Marker size */\n @Input() markerSize: 'sm' | 'md' | 'lg' = 'md';\n\n /** Track by function for ngFor */\n @Input() trackByFn: (event: TimelineEvent) => any = event => event.id ?? event;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n private readonly MARKER_SIZES = {\n sm: { dot: 'w-3 h-3', icon: 'w-8 h-8 text-sm' },\n md: { dot: 'w-4 h-4', icon: 'w-10 h-10 text-base' },\n lg: { dot: 'w-5 h-5', icon: 'w-12 h-12 text-lg' },\n };\n\n protected containerClasses = computed(() => {\n return this.twClass.merge(\n this.layout === 'horizontal' ? 'flex' : 'flex flex-col',\n this.classOverride\n );\n });\n\n protected itemClasses(isFirst: boolean, isLast: boolean) {\n return this.twClass.merge(\n 'relative flex gap-4',\n this.layout === 'horizontal' ? 'flex-col flex-1' : '',\n this.align === 'right' ? 'flex-row-reverse' : '',\n isLast ? '' : 'pb-8'\n );\n }\n\n protected connectorClasses() {\n if (this.layout === 'horizontal') {\n return this.twClass.merge(\n 'absolute top-4 left-full w-full h-0.5 bg-slate-300',\n '-translate-x-1/2'\n );\n }\n\n // Line runs through the CENTER of the marker (not starting at the bottom)\n // This creates a continuous visual connection through all markers\n // The markers have z-10, so they appear ON TOP of the line\n\n // Position line at the vertical center of the marker\n // sm (w-3 = 12px): center at 6px\n // md (w-4 = 16px): center at 8px\n // lg (w-5 = 20px): center at 10px\n const topPosition = {\n sm: 'top-[6px]',\n md: 'top-[8px]',\n lg: 'top-[10px]',\n };\n\n // Calculate the left position to center the 2px line (w-0.5) with the marker dot\n // sm (w-3 = 12px): center at 6px, line at 6px - 1px = 5px\n // md (w-4 = 16px): center at 8px, line at 8px - 1px = 7px\n // lg (w-5 = 20px): center at 10px, line at 10px - 1px = 9px\n const leftPosition = {\n sm: 'left-[5px]',\n md: 'left-[7px]',\n lg: 'left-[9px]',\n };\n\n const rightPosition = {\n sm: 'right-[5px]',\n md: 'right-[7px]',\n lg: 'right-[9px]',\n };\n\n return this.twClass.merge(\n 'absolute w-0.5 bg-slate-300 bottom-0',\n topPosition[this.markerSize],\n this.align === 'right' ? rightPosition[this.markerSize] : leftPosition[this.markerSize]\n );\n }\n\n protected markerContainerClasses() {\n return 'relative z-10 flex-shrink-0';\n }\n\n protected dotMarkerClasses(event: TimelineEvent) {\n const size = this.MARKER_SIZES[this.markerSize].dot;\n const color = event.color || 'primary';\n const colorClasses = TIMELINE_COLORS[color];\n\n return this.twClass.merge('rounded-full ring-4 ring-white', size, colorClasses.bg);\n }\n\n protected iconMarkerClasses(event: TimelineEvent) {\n const size = this.MARKER_SIZES[this.markerSize].icon;\n const color = event.color || 'primary';\n const colorClasses = TIMELINE_COLORS[color];\n\n return this.twClass.merge(\n 'rounded-full flex items-center justify-center text-white ring-4 ring-white',\n size,\n colorClasses.bg\n );\n }\n\n protected contentClasses() {\n return this.twClass.merge('flex-1 min-w-0', this.align === 'right' ? 'text-right' : '');\n }\n\n protected dateClasses() {\n return 'text-xs text-slate-500 font-medium uppercase tracking-wide';\n }\n\n protected titleClasses() {\n return 'text-base font-semibold text-slate-900 mt-1';\n }\n\n protected descriptionClasses() {\n return 'text-sm text-slate-600 mt-1';\n }\n}\n","<div [class]=\"containerClasses()\">\n @for (\n event of events;\n track trackByFn(event);\n let first = $first;\n let last = $last;\n let i = $index\n ) {\n <div [class]=\"itemClasses(first, last)\">\n <!-- Connector line -->\n @if (!last) {\n <div [class]=\"connectorClasses()\"></div>\n }\n\n <!-- Marker -->\n <div [class]=\"markerContainerClasses()\">\n @if (event.icon) {\n <div [class]=\"iconMarkerClasses(event)\">\n <ng-container *ngTemplateOutlet=\"event.icon\"></ng-container>\n </div>\n } @else {\n <div [class]=\"dotMarkerClasses(event)\"></div>\n }\n </div>\n\n <!-- Content -->\n <div [class]=\"contentClasses()\">\n @if (event.date) {\n <time [class]=\"dateClasses()\">{{ event.date }}</time>\n }\n @if (event.title) {\n <h4 [class]=\"titleClasses()\">{{ event.title }}</h4>\n }\n @if (event.description) {\n <p [class]=\"descriptionClasses()\">{{ event.description }}</p>\n }\n @if (event.content) {\n <ng-container *ngTemplateOutlet=\"event.content\"></ng-container>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n icon?: string;\n}\n\nexport type BreadcrumbSeparator = 'slash' | 'chevron' | 'arrow' | 'dot';\n\n@Component({\n selector: 'tw-breadcrumb',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './breadcrumb.component.html',\n})\nexport class TwBreadcrumbComponent {\n @Input() set items(value: BreadcrumbItem[]) {\n this._items.set(value);\n }\n @Input() set separator(value: BreadcrumbSeparator) {\n this._separator.set(value);\n }\n @Input() set size(value: 'sm' | 'md' | 'lg') {\n this._size.set(value);\n }\n\n protected _items = signal<BreadcrumbItem[]>([]);\n protected _separator = signal<BreadcrumbSeparator>('chevron');\n protected _size = signal<'sm' | 'md' | 'lg'>('md');\n\n protected itemsValue = computed(() => this._items());\n protected separatorValue = computed(() => this._separator());\n\n protected navClasses = computed(() => {\n const size = this._size();\n\n const sizeClasses: Record<string, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n };\n\n return sizeClasses[size];\n });\n\n protected separatorClasses = computed(() => 'mx-2 text-slate-400 dark:text-slate-500 flex items-center');\n\n protected linkClasses = computed(() => 'text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-300 transition-colors');\n\n protected currentClasses = computed(() => 'font-medium text-slate-900 dark:text-slate-100');\n}\n","<nav [class]=\"navClasses()\" aria-label=\"Breadcrumb\">\n <ol class=\"flex items-center flex-wrap gap-1\">\n @for (item of itemsValue(); track $index; let last = $last; let first = $first) {\n <li class=\"flex items-center\">\n @if (!first) {\n <span [class]=\"separatorClasses()\">\n @switch (separatorValue()) {\n @case ('chevron') {\n <svg\n class=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n }\n @case ('arrow') {\n <svg\n class=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M14 5l7 7m0 0l-7 7m7-7H3\"\n />\n </svg>\n }\n @case ('dot') {\n <span class=\"w-1 h-1 rounded-full bg-current\"></span>\n }\n @default {\n <span>/</span>\n }\n }\n </span>\n }\n @if (last) {\n <span [class]=\"currentClasses()\" aria-current=\"page\">\n {{ item.label }}\n </span>\n } @else if (item.href) {\n <a [href]=\"item.href\" [class]=\"linkClasses()\">\n {{ item.label }}\n </a>\n } @else {\n <span [class]=\"linkClasses()\">{{ item.label }}</span>\n }\n </li>\n }\n </ol>\n</nav>\n","import { Component, computed, EventEmitter, Input, Output, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type PaginationSize = 'sm' | 'md' | 'lg';\nexport type PaginationVariant = 'default' | 'outlined' | 'simple';\n\n@Component({\n selector: 'tw-pagination',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './pagination.component.html',\n})\nexport class TwPaginationComponent {\n @Input() set currentPage(value: number) {\n this._currentPage.set(value);\n }\n @Input() set totalPages(value: number) {\n this._totalPages.set(value);\n }\n @Input() set totalItems(value: number) {\n this._totalItems.set(value);\n }\n @Input() set itemsPerPage(value: number) {\n this._itemsPerPage.set(value);\n }\n @Input() set siblingCount(value: number) {\n this._siblingCount.set(value);\n }\n @Input() set size(value: PaginationSize) {\n this._size.set(value);\n }\n @Input() set variant(value: PaginationVariant) {\n this._variant.set(value);\n }\n @Input() set showFirstLast(value: boolean) {\n this._showFirstLast.set(value);\n }\n\n @Output() pageChange = new EventEmitter<number>();\n\n protected _currentPage = signal(1);\n protected _totalPages = signal(1);\n protected _totalItems = signal(0);\n protected _itemsPerPage = signal(10);\n protected _siblingCount = signal(1);\n protected _size = signal<PaginationSize>('md');\n protected _variant = signal<PaginationVariant>('default');\n protected _showFirstLast = signal(false);\n\n protected currentPageValue = computed(() => this._currentPage());\n protected variantValue = computed(() => this._variant());\n\n protected totalPagesValue = computed(() => {\n const totalPages = this._totalPages();\n const totalItems = this._totalItems();\n const itemsPerPage = this._itemsPerPage();\n\n if (totalPages > 0) return totalPages;\n if (totalItems > 0) return Math.ceil(totalItems / itemsPerPage);\n return 1;\n });\n\n protected visiblePages = computed(() => {\n const current = this._currentPage();\n const total = this.totalPagesValue();\n const siblings = this._siblingCount();\n\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalNumbers = siblings * 2 + 3; // siblings + first + last + current\n const totalBlocks = totalNumbers + 2; // + 2 for ellipsis\n\n if (total <= totalBlocks) {\n return range(1, total).map(String);\n }\n\n const leftSiblingIndex = Math.max(current - siblings, 1);\n const rightSiblingIndex = Math.min(current + siblings, total);\n\n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < total - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, 3 + siblings * 2);\n return [...leftRange.map(String), '...', String(total)];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(total - (3 + siblings * 2) + 1, total);\n return ['1', '...', ...rightRange.map(String)];\n }\n\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return ['1', '...', ...middleRange.map(String), '...', String(total)];\n });\n\n protected goToPage(page: number): void {\n if (page >= 1 && page <= this.totalPagesValue() && page !== this._currentPage()) {\n this.pageChange.emit(page);\n }\n }\n\n protected navButtonClasses(disabled: boolean): string {\n const size = this._size();\n const variant = this._variant();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'p-1',\n md: 'p-2',\n lg: 'p-2.5',\n };\n\n const baseClasses = [\n 'flex items-center justify-center rounded-lg transition-colors',\n sizeClasses[size],\n ];\n\n if (disabled) {\n baseClasses.push('text-slate-300 dark:text-slate-600 cursor-not-allowed');\n } else if (variant === 'outlined') {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800 border border-slate-300 dark:border-slate-600');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n\n protected pageButtonClasses(isActive: boolean): string {\n const size = this._size();\n const variant = this._variant();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'w-7 h-7 text-xs',\n md: 'w-9 h-9 text-sm',\n lg: 'w-11 h-11 text-base',\n };\n\n const baseClasses = [\n 'flex items-center justify-center rounded-lg font-medium transition-colors',\n sizeClasses[size],\n ];\n\n if (isActive) {\n baseClasses.push('bg-blue-600 text-white');\n } else if (variant === 'outlined') {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800 border border-slate-300 dark:border-slate-600');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n\n protected ellipsisClasses(): string {\n const size = this._size();\n\n const sizeClasses: Record<PaginationSize, string> = {\n sm: 'w-7 h-7 text-xs',\n md: 'w-9 h-9 text-sm',\n lg: 'w-11 h-11 text-base',\n };\n\n return `flex items-center justify-center text-slate-400 dark:text-slate-500 ${sizeClasses[size]}`;\n }\n\n protected simpleButtonClasses(disabled: boolean): string {\n const baseClasses = [\n 'flex items-center px-4 py-2 text-sm font-medium rounded-lg transition-colors',\n ];\n\n if (disabled) {\n baseClasses.push('text-slate-300 dark:text-slate-600 cursor-not-allowed');\n } else {\n baseClasses.push('text-slate-600 dark:text-slate-400 hover:bg-slate-100 dark:hover:bg-slate-800');\n }\n\n return baseClasses.join(' ');\n }\n}\n","@switch (variantValue()) {\n @case ('simple') {\n <div class=\"flex items-center justify-between\">\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() <= 1\"\n [class]=\"simpleButtonClasses(currentPageValue() <= 1)\"\n (click)=\"goToPage(currentPageValue() - 1)\"\n >\n <svg\n class=\"w-5 h-5 mr-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n Previous\n </button>\n <span class=\"text-sm text-slate-600\">\n Page {{ currentPageValue() }} of {{ totalPagesValue() }}\n </span>\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() >= totalPagesValue()\"\n [class]=\"simpleButtonClasses(currentPageValue() >= totalPagesValue())\"\n (click)=\"goToPage(currentPageValue() + 1)\"\n >\n Next\n <svg\n class=\"w-5 h-5 ml-1\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </div>\n }\n @default {\n <nav class=\"flex items-center gap-1\" aria-label=\"Pagination\">\n <!-- Previous -->\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() <= 1\"\n [class]=\"navButtonClasses(currentPageValue() <= 1)\"\n (click)=\"goToPage(currentPageValue() - 1)\"\n aria-label=\"Previous page\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n\n <!-- Page numbers -->\n @for (page of visiblePages(); track page) {\n @if (page === '...') {\n <span [class]=\"ellipsisClasses()\">...</span>\n } @else {\n <button\n type=\"button\"\n [class]=\"pageButtonClasses(+page === currentPageValue())\"\n [attr.aria-current]=\"+page === currentPageValue() ? 'page' : null\"\n (click)=\"goToPage(+page)\"\n >\n {{ page }}\n </button>\n }\n }\n\n <!-- Next -->\n <button\n type=\"button\"\n [disabled]=\"currentPageValue() >= totalPagesValue()\"\n [class]=\"navButtonClasses(currentPageValue() >= totalPagesValue())\"\n (click)=\"goToPage(currentPageValue() + 1)\"\n aria-label=\"Next page\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n </nav>\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface StepItem {\n id?: string | number;\n label: string;\n description?: string;\n icon?: TemplateRef<any>;\n disabled?: boolean;\n}\n\nexport type StepsOrientation = 'horizontal' | 'vertical';\nexport type StepsSize = 'sm' | 'md' | 'lg';\n\nconst STEPS_SIZES: Record<\n StepsSize,\n { indicator: string; indicatorSize: number; label: string; desc: string }\n> = {\n sm: { indicator: 'w-8 h-8 text-sm', indicatorSize: 32, label: 'text-sm', desc: 'text-xs' },\n md: { indicator: 'w-10 h-10 text-base', indicatorSize: 40, label: 'text-base', desc: 'text-sm' },\n lg: { indicator: 'w-12 h-12 text-lg', indicatorSize: 48, label: 'text-lg', desc: 'text-base' },\n};\n\n/**\n * Steps/Stepper component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-steps [steps]=\"steps\" [(activeIndex)]=\"currentStep\"></tw-steps>\n * <tw-steps [steps]=\"steps\" [activeIndex]=\"2\" [readonly]=\"true\"></tw-steps>\n * ```\n */\n@Component({\n selector: 'tw-steps',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './steps.component.html',\n})\nexport class TwStepsComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Step definitions */\n @Input() steps: StepItem[] = [];\n\n /** Current active step index */\n @Input({ transform: numberAttribute }) activeIndex = 0;\n\n /** Orientation */\n @Input() orientation: StepsOrientation = 'horizontal';\n\n /** Size variant */\n @Input() size: StepsSize = 'md';\n\n /** Whether to show labels */\n @Input({ transform: booleanAttribute }) showLabels = true;\n\n /** Whether steps are readonly (non-clickable) */\n @Input({ transform: booleanAttribute }) readonly = false;\n\n /** Whether to allow clicking future steps */\n @Input({ transform: booleanAttribute }) linear = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Active index change event */\n @Output() activeIndexChange = new EventEmitter<number>();\n\n /** Step click event */\n @Output() onStepClick$ = new EventEmitter<{ step: StepItem; index: number }>();\n\n protected containerClasses = computed(() => {\n return this.twClass.merge('w-full', this.classOverride);\n });\n\n protected listClasses = computed(() => {\n return this.twClass.merge(\n this.orientation === 'horizontal' ? 'flex items-start' : 'flex flex-col'\n );\n });\n\n protected itemClasses(isLast: boolean) {\n if (this.orientation === 'horizontal') {\n // Use items-start so connector aligns at the top with the indicator\n return this.twClass.merge('relative flex items-start', isLast ? '' : 'flex-1');\n }\n return '';\n }\n\n protected connectorClasses(index: number) {\n const isComplete = index < this.activeIndex;\n return this.twClass.merge('flex-1 h-0.5 mx-2', isComplete ? 'bg-blue-600' : 'bg-slate-200 dark:bg-slate-700');\n }\n\n protected getHorizontalConnectorStyle(): Record<string, string> {\n const { indicatorSize } = STEPS_SIZES[this.size];\n // Position connector at vertical center of indicator\n return {\n marginTop: `${indicatorSize / 2 - 1}px`,\n };\n }\n\n protected verticalConnectorClasses(index: number) {\n const isComplete = index < this.activeIndex;\n const { indicatorSize } = STEPS_SIZES[this.size];\n\n return this.twClass.merge('w-0.5 h-8', isComplete ? 'bg-blue-600' : 'bg-slate-200 dark:bg-slate-700');\n }\n\n protected getVerticalConnectorStyle(): Record<string, string> {\n const { indicatorSize } = STEPS_SIZES[this.size];\n return {\n marginLeft: `${indicatorSize / 2 - 1}px`,\n };\n }\n\n protected stepContentClasses(index: number) {\n const step = this.steps[index];\n const isClickable =\n !this.readonly && !step.disabled && (!this.linear || index <= this.activeIndex);\n\n return this.twClass.merge(\n 'flex items-center gap-3',\n this.orientation === 'horizontal' ? 'flex-col' : '',\n isClickable ? 'cursor-pointer group' : ''\n );\n }\n\n protected indicatorClasses(index: number) {\n const status = this.getStepStatus(index);\n const sizeClasses = STEPS_SIZES[this.size].indicator;\n const step = this.steps[index];\n const isClickable =\n !this.readonly && !step.disabled && (!this.linear || index <= this.activeIndex);\n\n const statusClasses = {\n complete: 'bg-blue-600 text-white',\n current: 'bg-white dark:bg-slate-800 border-2 border-blue-600 text-blue-600 dark:text-blue-400',\n upcoming: 'bg-white dark:bg-slate-800 border-2 border-slate-300 dark:border-slate-600 text-slate-500 dark:text-slate-400',\n };\n\n return this.twClass.merge(\n 'flex-shrink-0 flex items-center justify-center rounded-full font-semibold transition-all',\n sizeClasses,\n statusClasses[status],\n isClickable ? 'group-hover:shadow-md' : '',\n step.disabled ? 'opacity-50' : ''\n );\n }\n\n protected labelContainerClasses() {\n return this.twClass.merge(this.orientation === 'horizontal' ? 'text-center mt-2' : '');\n }\n\n protected labelClasses(index: number) {\n const status = this.getStepStatus(index);\n const sizeClasses = STEPS_SIZES[this.size].label;\n\n return this.twClass.merge(\n 'font-medium block',\n sizeClasses,\n status === 'upcoming' ? 'text-slate-500' : 'text-slate-900'\n );\n }\n\n protected descriptionClasses() {\n const sizeClasses = STEPS_SIZES[this.size].desc;\n return this.twClass.merge('text-slate-500 block', sizeClasses);\n }\n\n getStepStatus(index: number): 'complete' | 'current' | 'upcoming' {\n if (index < this.activeIndex) return 'complete';\n if (index === this.activeIndex) return 'current';\n return 'upcoming';\n }\n\n onStepClick(index: number): void {\n const step = this.steps[index];\n\n if (this.readonly || step.disabled) return;\n if (this.linear && index > this.activeIndex) return;\n\n this.activeIndexChange.emit(index);\n this.onStepClick$.emit({ step, index });\n }\n\n /** Go to next step */\n next(): void {\n if (this.activeIndex < this.steps.length - 1) {\n const nextIndex = this.activeIndex + 1;\n this.activeIndexChange.emit(nextIndex);\n }\n }\n\n /** Go to previous step */\n prev(): void {\n if (this.activeIndex > 0) {\n const prevIndex = this.activeIndex - 1;\n this.activeIndexChange.emit(prevIndex);\n }\n }\n\n /** Go to specific step */\n goTo(index: number): void {\n if (index >= 0 && index < this.steps.length) {\n this.activeIndexChange.emit(index);\n }\n }\n}\n","<nav [class]=\"containerClasses()\" aria-label=\"Progress\">\n <ol [class]=\"listClasses()\">\n @for (step of steps; track step.id ?? $index; let i = $index; let last = $last) {\n <li [class]=\"itemClasses(last)\">\n <!-- Step content (indicator + label) -->\n <div [class]=\"stepContentClasses(i)\" (click)=\"onStepClick(i)\">\n <!-- Step indicator -->\n <div [class]=\"indicatorClasses(i)\">\n @if (getStepStatus(i) === 'complete') {\n <svg class=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M19.916 4.626a.75.75 0 01.208 1.04l-9 13.5a.75.75 0 01-1.154.114l-6-6a.75.75 0 011.06-1.06l5.353 5.353 8.493-12.739a.75.75 0 011.04-.208z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n } @else if (step.icon) {\n <ng-container *ngTemplateOutlet=\"step.icon\"></ng-container>\n } @else {\n <span>{{ i + 1 }}</span>\n }\n </div>\n\n <!-- Label (for horizontal, shown below indicator) -->\n @if (showLabels && orientation === 'horizontal') {\n <div [class]=\"labelContainerClasses()\">\n <span [class]=\"labelClasses(i)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"descriptionClasses()\">{{ step.description }}</span>\n }\n </div>\n }\n </div>\n\n <!-- Label (for vertical, shown next to indicator) -->\n @if (showLabels && orientation === 'vertical') {\n <div class=\"ml-3\">\n <span [class]=\"labelClasses(i)\">{{ step.label }}</span>\n @if (step.description) {\n <span [class]=\"descriptionClasses()\">{{ step.description }}</span>\n }\n </div>\n }\n\n <!-- Horizontal connector (inline between steps) -->\n @if (!last && orientation === 'horizontal') {\n <div [class]=\"connectorClasses(i)\" [ngStyle]=\"getHorizontalConnectorStyle()\"></div>\n }\n </li>\n\n <!-- Vertical connector (between items) -->\n @if (!last && orientation === 'vertical') {\n <div [class]=\"verticalConnectorClasses(i)\" [ngStyle]=\"getVerticalConnectorStyle()\"></div>\n }\n }\n </ol>\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport interface MenuItem {\n id?: string | number;\n label?: string;\n icon?: TemplateRef<any>;\n command?: (event: { item: MenuItem }) => void;\n url?: string;\n routerLink?: string | any[];\n disabled?: boolean;\n visible?: boolean;\n separator?: boolean;\n items?: MenuItem[];\n shortcut?: string;\n badge?: string;\n styleClass?: string;\n}\n\nexport type MenuVariant = 'default' | 'bordered' | 'elevated';\n\n/**\n * Menu component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-menu [items]=\"menuItems\" (onSelect)=\"handleSelect($event)\"></tw-menu>\n * ```\n */\n@Component({\n selector: 'tw-menu',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './menu.component.html',\n})\nexport class TwMenuComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Menu items */\n @Input() items: MenuItem[] = [];\n\n /** Visual variant */\n @Input() variant: MenuVariant = 'default';\n\n /** Whether menu is popup style */\n @Input({ transform: booleanAttribute }) popup = false;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Item select event */\n @Output() onSelect = new EventEmitter<MenuItem>();\n\n protected openSubmenu = signal<MenuItem | null>(null);\n\n protected containerClasses = computed(() => {\n const variantClasses = {\n default: 'bg-white dark:bg-slate-800',\n bordered: 'bg-white dark:bg-slate-800 border border-slate-200 dark:border-slate-700 rounded-lg',\n elevated: 'bg-white dark:bg-slate-800 rounded-lg shadow-lg dark:shadow-slate-900/50 border border-slate-100 dark:border-slate-700',\n };\n\n return this.twClass.merge('py-1 min-w-48', variantClasses[this.variant], this.classOverride);\n });\n\n protected itemClasses(item: MenuItem) {\n return this.twClass.merge(\n 'w-full flex items-center gap-3 px-4 py-2 text-sm text-left transition-colors',\n 'focus:outline-none focus:bg-slate-50 dark:focus:bg-slate-700',\n item.disabled\n ? 'text-slate-400 dark:text-slate-500 cursor-not-allowed'\n : 'text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-700 hover:text-slate-900 dark:hover:text-slate-100 cursor-pointer',\n item.styleClass || ''\n );\n }\n\n protected separatorClasses() {\n return 'my-1 border-t border-slate-200 dark:border-slate-700';\n }\n\n protected submenuClasses() {\n return this.twClass.merge(\n 'absolute left-full top-0 ml-1 py-1 min-w-48 bg-white dark:bg-slate-800 rounded-lg shadow-lg dark:shadow-slate-900/50 border border-slate-100 dark:border-slate-700',\n 'animate-in fade-in-0 zoom-in-95 duration-100'\n );\n }\n\n protected badgeClasses() {\n return 'ml-auto px-2 py-0.5 text-xs font-medium rounded-full bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300';\n }\n\n onSubmenuEnter(item: MenuItem): void {\n this.openSubmenu.set(item);\n }\n\n onSubmenuLeave(): void {\n this.openSubmenu.set(null);\n }\n\n onItemClick(item: MenuItem): void {\n if (item.disabled) return;\n\n if (item.command) {\n item.command({ item });\n }\n\n this.onSelect.emit(item);\n }\n}\n\n/**\n * Context menu component\n */\n@Component({\n selector: 'tw-context-menu',\n standalone: true,\n imports: [CommonModule, TwMenuComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (visible()) {\n <div\n class=\"fixed z-50\"\n [style.left.px]=\"x()\"\n [style.top.px]=\"y()\"\n (click)=\"$event.stopPropagation()\"\n >\n <tw-menu [items]=\"items\" variant=\"elevated\" (onSelect)=\"onItemSelect($event)\"></tw-menu>\n </div>\n }\n `,\n host: {\n '(document:click)': 'hide()',\n '(document:contextmenu)': 'hide()',\n },\n})\nexport class TwContextMenuComponent {\n @Input() items: MenuItem[] = [];\n @Output() onSelect = new EventEmitter<MenuItem>();\n @Output() onHide = new EventEmitter<void>();\n\n protected visible = signal(false);\n protected x = signal(0);\n protected y = signal(0);\n\n show(event: MouseEvent): void {\n event.preventDefault();\n this.x.set(event.clientX);\n this.y.set(event.clientY);\n this.visible.set(true);\n }\n\n hide(): void {\n if (this.visible()) {\n this.visible.set(false);\n this.onHide.emit();\n }\n }\n\n onItemSelect(item: MenuItem): void {\n this.onSelect.emit(item);\n this.hide();\n }\n}\n","<div [class]=\"containerClasses()\" role=\"menu\">\n @for (item of items; track item.id ?? $index) {\n @if (item.separator) {\n <div [class]=\"separatorClasses()\"></div>\n } @else if (item.items && item.items.length > 0) {\n <!-- Submenu -->\n <div class=\"relative\" (mouseenter)=\"onSubmenuEnter(item)\" (mouseleave)=\"onSubmenuLeave()\">\n <button\n type=\"button\"\n [class]=\"itemClasses(item)\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"openSubmenu() === item\"\n >\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"item.icon\"></ng-container>\n }\n <span class=\"flex-1\">{{ item.label }}</span>\n <svg class=\"w-4 h-4 text-slate-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n @if (openSubmenu() === item) {\n <div [class]=\"submenuClasses()\">\n @for (subItem of item.items; track subItem.id ?? $index) {\n @if (subItem.separator) {\n <div [class]=\"separatorClasses()\"></div>\n } @else {\n <button\n type=\"button\"\n [class]=\"itemClasses(subItem)\"\n [disabled]=\"subItem.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(subItem)\"\n >\n @if (subItem.icon) {\n <ng-container *ngTemplateOutlet=\"subItem.icon\"></ng-container>\n }\n <span>{{ subItem.label }}</span>\n @if (subItem.shortcut) {\n <span class=\"ml-auto text-xs text-slate-400\">{{ subItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n }\n </div>\n } @else {\n <!-- Regular item -->\n <button\n type=\"button\"\n [class]=\"itemClasses(item)\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(item)\"\n >\n @if (item.icon) {\n <ng-container *ngTemplateOutlet=\"item.icon\"></ng-container>\n }\n <span>{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"ml-auto text-xs text-slate-400\">{{ item.shortcut }}</span>\n }\n @if (item.badge) {\n <span [class]=\"badgeClasses()\">{{ item.badge }}</span>\n }\n </button>\n }\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type AlertStyle = 'solid' | 'soft' | 'outlined' | 'accent';\n\nconst ALERT_BASE_CLASSES = `\n relative flex gap-3\n p-4 rounded-lg\n text-sm\n`;\n\nconst ALERT_SOLID_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-600 text-white',\n success: 'bg-emerald-600 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-rose-600 text-white',\n neutral: 'bg-slate-700 text-white',\n};\n\nconst ALERT_SOFT_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-50 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border border-blue-200 dark:border-blue-800',\n success: 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300 border border-emerald-200 dark:border-emerald-800',\n warning: 'bg-amber-50 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300 border border-amber-200 dark:border-amber-800',\n danger: 'bg-rose-50 dark:bg-rose-900/30 text-rose-800 dark:text-rose-300 border border-rose-200 dark:border-rose-800',\n neutral: 'bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-slate-300 border border-slate-200 dark:border-slate-700',\n};\n\nconst ALERT_OUTLINED_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-transparent text-blue-700 dark:text-blue-400 border-2 border-blue-500 dark:border-blue-600',\n success: 'bg-transparent text-emerald-700 dark:text-emerald-400 border-2 border-emerald-500 dark:border-emerald-600',\n warning: 'bg-transparent text-amber-700 dark:text-amber-400 border-2 border-amber-500 dark:border-amber-600',\n danger: 'bg-transparent text-rose-700 dark:text-rose-400 border-2 border-rose-500 dark:border-rose-600',\n neutral: 'bg-transparent text-slate-700 dark:text-slate-400 border-2 border-slate-400 dark:border-slate-600',\n};\n\nconst ALERT_ACCENT_VARIANTS: Record<AlertVariant, string> = {\n info: 'bg-blue-50 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 border-l-4 border-blue-500 rounded-l-none',\n success: 'bg-emerald-50 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-300 border-l-4 border-emerald-500 rounded-l-none',\n warning: 'bg-amber-50 dark:bg-amber-900/30 text-amber-800 dark:text-amber-300 border-l-4 border-amber-500 rounded-l-none',\n danger: 'bg-rose-50 dark:bg-rose-900/30 text-rose-800 dark:text-rose-300 border-l-4 border-rose-500 rounded-l-none',\n neutral: 'bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-slate-300 border-l-4 border-slate-500 rounded-l-none',\n};\n\nconst ICON_COLORS: Record<AlertVariant, Record<AlertStyle, string>> = {\n info: {\n solid: 'text-white',\n soft: 'text-blue-600',\n outlined: 'text-blue-600',\n accent: 'text-blue-600',\n },\n success: {\n solid: 'text-white',\n soft: 'text-emerald-600',\n outlined: 'text-emerald-600',\n accent: 'text-emerald-600',\n },\n warning: {\n solid: 'text-white',\n soft: 'text-amber-600',\n outlined: 'text-amber-600',\n accent: 'text-amber-600',\n },\n danger: {\n solid: 'text-white',\n soft: 'text-rose-600',\n outlined: 'text-rose-600',\n accent: 'text-rose-600',\n },\n neutral: {\n solid: 'text-white',\n soft: 'text-slate-600',\n outlined: 'text-slate-600',\n accent: 'text-slate-600',\n },\n};\n\n/**\n * Alert component for displaying important messages\n *\n * @example\n * ```html\n * <tw-alert variant=\"info\">\n * This is an informational message.\n * </tw-alert>\n *\n * <tw-alert variant=\"success\" alertStyle=\"soft\" [dismissible]=\"true\" (dismiss)=\"onDismiss()\">\n * <tw-alert-title>Success!</tw-alert-title>\n * Your changes have been saved successfully.\n * </tw-alert>\n *\n * <tw-alert variant=\"danger\" alertStyle=\"accent\" [icon]=\"customIcon\">\n * An error occurred while processing your request.\n * </tw-alert>\n * ```\n */\n@Component({\n selector: 'tw-alert',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './alert.component.html',\n host: {\n '[class]': 'computedClasses()',\n role: 'alert',\n '[attr.aria-live]': 'ariaLive',\n },\n})\nexport class TwAlertComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Color variant */\n @Input() variant: AlertVariant = 'info';\n\n /** Style variant */\n @Input() alertStyle: AlertStyle = 'soft';\n\n /** Whether the alert can be dismissed */\n @Input({ transform: booleanAttribute }) dismissible = false;\n\n /** Whether to show the icon */\n @Input({ transform: booleanAttribute }) showIcon = true;\n\n /** Whether a custom icon is provided */\n @Input({ transform: booleanAttribute }) hasCustomIcon = false;\n\n /** ARIA live region setting */\n @Input() ariaLive: 'polite' | 'assertive' | 'off' = 'polite';\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Dismiss event */\n @Output() dismiss = new EventEmitter<void>();\n\n protected dismissed = signal(false);\n\n protected computedClasses = computed(() => {\n if (this.dismissed()) return 'hidden';\n\n const styleVariants: Record<AlertStyle, Record<AlertVariant, string>> = {\n solid: ALERT_SOLID_VARIANTS,\n soft: ALERT_SOFT_VARIANTS,\n outlined: ALERT_OUTLINED_VARIANTS,\n accent: ALERT_ACCENT_VARIANTS,\n };\n\n return this.twClass.merge(\n ALERT_BASE_CLASSES,\n styleVariants[this.alertStyle][this.variant],\n this.classOverride\n );\n });\n\n protected iconClasses = computed(() => {\n return this.twClass.merge('flex-shrink-0', ICON_COLORS[this.variant][this.alertStyle]);\n });\n\n protected dismissButtonClasses = computed(() => {\n const baseClasses =\n 'inline-flex items-center justify-center rounded-md p-1 -m-1 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2';\n\n const hoverClasses: Record<AlertStyle, string> = {\n solid: 'hover:bg-white/20 focus-visible:ring-white',\n soft: 'hover:bg-black/5 focus-visible:ring-current',\n outlined: 'hover:bg-black/5 focus-visible:ring-current',\n accent: 'hover:bg-black/5 focus-visible:ring-current',\n };\n\n return this.twClass.merge(baseClasses, hoverClasses[this.alertStyle]);\n });\n\n protected onDismiss(): void {\n this.dismissed.set(true);\n this.dismiss.emit();\n }\n\n /** Programmatically dismiss the alert */\n dismissAlert(): void {\n this.onDismiss();\n }\n\n /** Programmatically show the alert again */\n show(): void {\n this.dismissed.set(false);\n }\n}\n\n/**\n * Alert title component\n */\n@Component({\n selector: 'tw-alert-title',\n standalone: true,\n host: {\n class: 'block font-semibold mb-1',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwAlertTitleComponent {}\n\n/**\n * Alert description component\n */\n@Component({\n selector: 'tw-alert-description',\n standalone: true,\n host: {\n class: 'block text-sm opacity-90',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwAlertDescriptionComponent {}\n","@if (!dismissed()) {\n <!-- Icon -->\n @if (showIcon) {\n <div [class]=\"iconClasses()\" aria-hidden=\"true\">\n <ng-content select=\"[twAlertIcon]\"></ng-content>\n @if (!hasCustomIcon) {\n @switch (variant) {\n @case ('info') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @case ('success') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @case ('warning') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n 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\"\n />\n </svg>\n }\n @case ('danger') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n @default {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n }\n }\n </div>\n }\n\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n <ng-content></ng-content>\n </div>\n\n <!-- Actions -->\n <div class=\"flex items-start gap-2 ml-auto\">\n <ng-content select=\"[twAlertAction]\"></ng-content>\n\n @if (dismissible) {\n <button\n type=\"button\"\n [class]=\"dismissButtonClasses()\"\n (click)=\"onDismiss()\"\n aria-label=\"Dismiss\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n}\n","export * from './alert.component';\n\nimport {\n TwAlertComponent,\n TwAlertDescriptionComponent,\n TwAlertTitleComponent,\n} from './alert.component';\n\nexport const TW_ALERT_COMPONENTS = [\n TwAlertComponent,\n TwAlertTitleComponent,\n TwAlertDescriptionComponent,\n] as const;\n","import { Component, computed, Injectable, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport interface ToastOptions {\n variant?: ToastVariant;\n title?: string;\n message: string;\n duration?: number;\n dismissible?: boolean;\n action?: { label: string; onClick: () => void };\n}\n\ninterface Toast extends ToastOptions {\n id: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TwToastService {\n private readonly _toasts = signal<Toast[]>([]);\n private readonly _position = signal<ToastPosition>('top-right');\n\n readonly toasts = this._toasts.asReadonly();\n readonly position = this._position.asReadonly();\n\n setPosition(position: ToastPosition): void {\n this._position.set(position);\n }\n\n show(options: ToastOptions): string {\n const id = Math.random().toString(36).slice(2, 9);\n const toast: Toast = {\n id,\n variant: options.variant || 'info',\n title: options.title,\n message: options.message,\n duration: options.duration ?? 5000,\n dismissible: options.dismissible ?? true,\n action: options.action,\n };\n\n this._toasts.update(toasts => [...toasts, toast]);\n\n if (toast.duration && toast.duration > 0) {\n setTimeout(() => {\n this.dismiss(id);\n }, toast.duration);\n }\n\n return id;\n }\n\n success(message: string, title?: string): string {\n return this.show({ variant: 'success', message, title });\n }\n\n error(message: string, title?: string): string {\n return this.show({ variant: 'danger', message, title });\n }\n\n warning(message: string, title?: string): string {\n return this.show({ variant: 'warning', message, title });\n }\n\n info(message: string, title?: string): string {\n return this.show({ variant: 'info', message, title });\n }\n\n dismiss(id: string): void {\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n dismissAll(): void {\n this._toasts.set([]);\n }\n}\n\n@Component({\n selector: 'tw-toast',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './toast.component.html',\n})\nexport class TwToastComponent {\n @Input() set variant(value: ToastVariant) {\n this._variant.set(value);\n }\n @Input() set title(value: string) {\n this._title.set(value);\n }\n @Input() set message(value: string) {\n this._message.set(value);\n }\n @Input() set dismissible(value: boolean) {\n this._dismissible.set(value);\n }\n @Input() set action(value: { label: string; onClick: () => void } | undefined) {\n this._action.set(value);\n }\n @Input() dismiss: () => void = () => {};\n\n protected _variant = signal<ToastVariant>('info');\n protected _title = signal('');\n protected _message = signal('');\n protected _dismissible = signal(true);\n protected _action = signal<{ label: string; onClick: () => void } | undefined>(undefined);\n\n protected variantValue = computed(() => this._variant());\n protected titleValue = computed(() => this._title());\n protected messageValue = computed(() => this._message());\n protected dismissibleValue = computed(() => this._dismissible());\n protected actionValue = computed(() => this._action());\n\n protected toastClasses = computed(() => {\n return [\n 'w-full max-w-sm bg-white dark:bg-slate-800 rounded-xl shadow-lg dark:shadow-slate-900/50 border border-slate-200 dark:border-slate-700 p-4',\n 'animate-[toast-in_0.3s_ease-out]',\n ].join(' ');\n });\n\n protected iconClasses = computed(() => {\n const variant = this._variant();\n\n const variantClasses: Record<ToastVariant, string> = {\n info: 'text-blue-500',\n success: 'text-emerald-500',\n warning: 'text-amber-500',\n danger: 'text-rose-500',\n neutral: 'text-slate-500',\n };\n\n return ['flex-shrink-0', variantClasses[variant]].join(' ');\n });\n\n protected onDismiss(): void {\n this.dismiss();\n }\n}\n\n@Component({\n selector: 'tw-toast-container',\n standalone: true,\n imports: [CommonModule, TwToastComponent],\n templateUrl: './toast-container.component.html',\n styles: [\n `\n @keyframes toast-in {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class TwToastContainerComponent {\n private readonly toastService: TwToastService;\n protected toasts;\n protected position;\n\n constructor(toastService: TwToastService) {\n this.toastService = toastService;\n this.toasts = this.toastService.toasts;\n this.position = this.toastService.position;\n }\n\n protected containerClasses = computed(() => {\n const position = this.position();\n\n const positionClasses: Record<ToastPosition, string> = {\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n };\n\n return [\n 'fixed z-50 flex flex-col gap-3 max-h-screen overflow-hidden pointer-events-none',\n '[&>*]:pointer-events-auto',\n positionClasses[position],\n ].join(' ');\n });\n\n getDismissFunction(id: string): () => void {\n return () => {\n this.toastService.dismiss(id);\n };\n }\n}\n","<div [class]=\"toastClasses()\" role=\"alert\">\n <div class=\"flex items-start gap-3\">\n <!-- Icon -->\n <div [class]=\"iconClasses()\">\n @switch (variantValue()) {\n @case ('success') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n }\n @case ('danger') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n }\n @case ('warning') {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n 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\"\n />\n </svg>\n }\n @default {\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n }\n }\n </div>\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n @if (titleValue()) {\n <p class=\"font-semibold text-slate-900\">{{ titleValue() }}</p>\n }\n <p [class]=\"titleValue() ? 'text-sm text-slate-600' : 'text-slate-700'\">\n {{ messageValue() }}\n </p>\n @if (actionValue()) {\n <button\n type=\"button\"\n class=\"mt-2 text-sm font-medium text-blue-600 hover:text-blue-700\"\n (click)=\"actionValue()!.onClick()\"\n >\n {{ actionValue()!.label }}\n </button>\n }\n </div>\n <!-- Dismiss -->\n @if (dismissibleValue()) {\n <button\n type=\"button\"\n class=\"flex-shrink-0 p-1 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 transition-colors\"\n (click)=\"onDismiss()\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n</div>\n","<div [class]=\"containerClasses()\">\n @for (toast of toasts(); track toast.id) {\n <tw-toast\n [variant]=\"toast.variant || 'info'\"\n [title]=\"toast.title || ''\"\n [message]=\"toast.message\"\n [dismissible]=\"toast.dismissible ?? true\"\n [action]=\"toast.action\"\n [dismiss]=\"getDismissFunction(toast.id)\"\n >\n </tw-toast>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type SpinnerVariant = 'border' | 'dots' | 'pulse' | 'bars';\nexport type SpinnerColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'neutral';\n\n@Component({\n selector: 'tw-spinner',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './spinner.component.html',\n styles: [\n `\n @keyframes bounce-dot {\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1);\n }\n }\n @keyframes stretch-bar {\n 0%,\n 40%,\n 100% {\n transform: scaleY(0.4);\n }\n 20% {\n transform: scaleY(1);\n }\n }\n .dot-bounce {\n animation: bounce-dot 1.4s infinite ease-in-out both;\n }\n .bar-stretch {\n animation: stretch-bar 1.2s infinite ease-in-out;\n }\n `,\n ],\n})\nexport class TwSpinnerComponent {\n @Input() set size(val: SpinnerSize) {\n this._size.set(val);\n }\n @Input() set variant(val: SpinnerVariant) {\n this._variant.set(val);\n }\n @Input() set color(val: SpinnerColor | string) {\n this._color.set(val);\n }\n\n protected _size = signal<SpinnerSize>('md');\n protected _variant = signal<SpinnerVariant>('border');\n protected _color = signal<SpinnerColor | string>('primary');\n\n protected variantVal = computed(() => this._variant());\n\n // Border color classes for border variant\n private readonly borderColors: Record<SpinnerColor, string> = {\n primary: 'border-blue-600',\n secondary: 'border-slate-600',\n success: 'border-emerald-600',\n warning: 'border-amber-500',\n danger: 'border-rose-600',\n info: 'border-cyan-600',\n neutral: 'border-slate-400',\n };\n\n // Background color classes for dots/pulse/bars variants\n private readonly bgColors: Record<SpinnerColor, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n neutral: 'bg-slate-400',\n };\n\n private getBorderColor(): string {\n const clr = this._color();\n if (clr in this.borderColors) {\n return this.borderColors[clr as SpinnerColor];\n }\n // If it's a custom Tailwind class, use it directly\n return clr.startsWith('border-') ? clr : `border-${clr}`;\n }\n\n private getBgColor(): string {\n const clr = this._color();\n if (clr in this.bgColors) {\n return this.bgColors[clr as SpinnerColor];\n }\n // If it's a custom Tailwind class, use it directly\n return clr.startsWith('bg-') ? clr : `bg-${clr}`;\n }\n\n protected borderClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-4 h-4 border-2',\n sm: 'w-5 h-5 border-2',\n md: 'w-6 h-6 border-2',\n lg: 'w-8 h-8 border-[3px]',\n xl: 'w-10 h-10 border-4',\n };\n\n return [\n 'inline-block rounded-full border-t-transparent animate-spin',\n sizeClasses[sz],\n this.getBorderColor(),\n ].join(' ');\n });\n\n protected dotsContainerClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-1.5',\n lg: 'gap-2',\n xl: 'gap-2.5',\n };\n\n return ['inline-flex items-center', sizeClasses[sz]].join(' ');\n });\n\n protected dotClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-1 h-1',\n sm: 'w-1.5 h-1.5',\n md: 'w-2 h-2',\n lg: 'w-2.5 h-2.5',\n xl: 'w-3 h-3',\n };\n\n return ['rounded-full dot-bounce', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n\n protected pulseClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n };\n\n return ['rounded-full animate-pulse', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n\n protected barsContainerClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'gap-0.5 h-4',\n sm: 'gap-0.5 h-5',\n md: 'gap-1 h-6',\n lg: 'gap-1 h-8',\n xl: 'gap-1.5 h-10',\n };\n\n return ['inline-flex items-center', sizeClasses[sz]].join(' ');\n });\n\n protected barClasses = computed(() => {\n const sz = this._size();\n\n const sizeClasses: Record<SpinnerSize, string> = {\n xs: 'w-0.5',\n sm: 'w-1',\n md: 'w-1',\n lg: 'w-1.5',\n xl: 'w-2',\n };\n\n return ['h-full rounded-full bar-stretch', sizeClasses[sz], this.getBgColor()].join(' ');\n });\n}\n\n@Component({\n selector: 'tw-loading-overlay',\n standalone: true,\n imports: [CommonModule, TwSpinnerComponent],\n templateUrl: './loading-overlay.component.html',\n})\nexport class TwLoadingOverlayComponent {\n @Input() set size(val: SpinnerSize) {\n this._size.set(val);\n }\n @Input() set variant(val: SpinnerVariant) {\n this._variant.set(val);\n }\n @Input() set color(val: SpinnerColor | string) {\n this._color.set(val);\n }\n @Input() set message(val: string) {\n this._message.set(val);\n }\n @Input() set overlay(val: 'full' | 'inline') {\n this._overlay.set(val);\n }\n\n protected _size = signal<SpinnerSize>('lg');\n protected _variant = signal<SpinnerVariant>('border');\n protected _color = signal<SpinnerColor | string>('primary');\n protected _message = signal('');\n protected _overlay = signal<'full' | 'inline'>('inline');\n\n protected sizeVal = computed(() => this._size());\n protected variantVal = computed(() => this._variant());\n protected colorVal = computed(() => this._color());\n protected messageVal = computed(() => this._message());\n\n protected overlayClasses = computed(() => {\n const ovl = this._overlay();\n\n const overlayStyles: Record<string, string> = {\n full: 'fixed inset-0 z-50 bg-white/80 dark:bg-slate-900/80 backdrop-blur-sm',\n inline: 'absolute inset-0 bg-white/80 dark:bg-slate-900/80 backdrop-blur-sm rounded-inherit',\n };\n\n return ['flex items-center justify-center', overlayStyles[ovl]].join(' ');\n });\n\n protected messageClasses = computed(() => 'text-sm font-medium text-slate-600 dark:text-slate-400');\n}\n","@switch (variantVal()) {\n @case ('border') {\n <div [class]=\"borderClasses()\" role=\"status\" aria-label=\"Loading\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('dots') {\n <div [class]=\"dotsContainerClasses()\" role=\"status\" aria-label=\"Loading\">\n <div [class]=\"dotClasses()\" style=\"animation-delay: 0ms\"></div>\n <div [class]=\"dotClasses()\" style=\"animation-delay: 150ms\"></div>\n <div [class]=\"dotClasses()\" style=\"animation-delay: 300ms\"></div>\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('pulse') {\n <div [class]=\"pulseClasses()\" role=\"status\" aria-label=\"Loading\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n @case ('bars') {\n <div [class]=\"barsContainerClasses()\" role=\"status\" aria-label=\"Loading\">\n <div [class]=\"barClasses()\" style=\"animation-delay: 0ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 100ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 200ms\"></div>\n <div [class]=\"barClasses()\" style=\"animation-delay: 300ms\"></div>\n <span class=\"sr-only\">Loading...</span>\n </div>\n }\n}\n","<div [class]=\"overlayClasses()\">\n <div class=\"flex flex-col items-center gap-3\">\n <tw-spinner [size]=\"sizeVal()\" [variant]=\"variantVal()\" [color]=\"colorVal()\"></tw-spinner>\n @if (messageVal()) {\n <p [class]=\"messageClasses()\">{{ messageVal() }}</p>\n }\n </div>\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ProgressSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type ProgressVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\n@Component({\n selector: 'tw-progress',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './progress.component.html',\n styles: [\n `\n @keyframes progress-stripes {\n 0% {\n background-position: 1rem 0;\n }\n 100% {\n background-position: 0 0;\n }\n }\n @keyframes progress-indeterminate {\n 0% {\n width: 30%;\n margin-left: -30%;\n }\n 100% {\n width: 30%;\n margin-left: 100%;\n }\n }\n .progress-stripes-animated {\n animation: progress-stripes 1s linear infinite;\n }\n .progress-indeterminate-animated {\n animation: progress-indeterminate 1.5s ease-in-out infinite;\n }\n `,\n ],\n})\nexport class TwProgressComponent {\n @Input() set value(val: number) {\n this._value.set(val);\n }\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set size(val: ProgressSize) {\n this._size.set(val);\n }\n @Input() set variant(val: ProgressVariant) {\n this._variant.set(val);\n }\n @Input() set label(val: string) {\n this._label.set(val);\n }\n @Input() set showValue(val: boolean) {\n this._showValue.set(val);\n }\n @Input() set labelPosition(val: 'top' | 'bottom' | 'inside') {\n this._labelPosition.set(val);\n }\n @Input() set striped(val: boolean) {\n this._striped.set(val);\n }\n @Input() set animated(val: boolean) {\n this._animated.set(val);\n }\n @Input() set indeterminate(val: boolean) {\n this._indeterminate.set(val);\n }\n\n protected _value = signal(0);\n protected _max = signal(100);\n protected _size = signal<ProgressSize>('md');\n protected _variant = signal<ProgressVariant>('primary');\n protected _label = signal('');\n protected _showValue = signal(false);\n protected _labelPosition = signal<'top' | 'bottom' | 'inside'>('top');\n protected _striped = signal(false);\n protected _animated = signal(false);\n protected _indeterminate = signal(false);\n\n protected valueNum = computed(() => this._value());\n protected maxNum = computed(() => this._max());\n protected labelText = computed(() => this._label());\n protected showValueFlag = computed(() => this._showValue());\n protected labelPositionVal = computed(() => this._labelPosition());\n\n protected percentage = computed(() => {\n const val = this._value();\n const maxVal = this._max();\n return Math.min(Math.max(Math.round((val / maxVal) * 100), 0), 100);\n });\n\n protected containerClasses = computed(() => 'w-full');\n\n protected trackClasses = computed(() => {\n const size = this._size();\n\n const sizeClasses: Record<ProgressSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n };\n\n return ['w-full overflow-hidden rounded-full bg-slate-200 dark:bg-slate-700', sizeClasses[size]].join(' ');\n });\n\n protected barClasses = computed(() => {\n const size = this._size();\n const variant = this._variant();\n const striped = this._striped();\n const animated = this._animated();\n const indeterminate = this._indeterminate();\n const labelPosition = this._labelPosition();\n\n const variantClasses: Record<ProgressVariant, string> = {\n primary: 'bg-blue-600',\n secondary: 'bg-slate-600',\n success: 'bg-emerald-600',\n warning: 'bg-amber-500',\n danger: 'bg-rose-600',\n info: 'bg-cyan-600',\n };\n\n const sizeClasses: Record<ProgressSize, string> = {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2.5',\n lg: 'h-4',\n };\n\n const classes = [\n 'rounded-full transition-all duration-300 ease-out',\n sizeClasses[size],\n variantClasses[variant],\n ];\n\n if (labelPosition === 'inside') {\n classes.push('flex items-center justify-center');\n }\n\n if (striped) {\n classes.push(\n 'bg-[length:1rem_1rem] bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]'\n );\n }\n\n if (animated && striped) {\n classes.push('progress-stripes-animated');\n }\n\n if (indeterminate) {\n classes.push('progress-indeterminate-animated');\n }\n\n return classes.join(' ');\n });\n}\n\n@Component({\n selector: 'tw-progress-circular',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './progress-circular.component.html',\n styles: [\n `\n :host {\n display: inline-block;\n }\n @keyframes circular-rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n @keyframes circular-dash {\n 0% {\n stroke-dasharray: 1, 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -35;\n }\n 100% {\n stroke-dasharray: 90, 150;\n stroke-dashoffset: -124;\n }\n }\n .circular-rotate {\n animation: circular-rotate 2s linear infinite;\n }\n .circular-dash {\n animation: circular-dash 1.5s ease-in-out infinite;\n }\n `,\n ],\n})\nexport class TwProgressCircularComponent {\n @Input() set value(val: number) {\n this._value.set(val);\n }\n @Input() set max(val: number) {\n this._max.set(val);\n }\n @Input() set size(val: number) {\n this._size.set(val);\n }\n @Input() set variant(val: ProgressVariant) {\n this._variant.set(val);\n }\n @Input() set showValue(val: boolean) {\n this._showValue.set(val);\n }\n @Input() set indeterminate(val: boolean) {\n this._indeterminate.set(val);\n }\n @Input() set thickness(val: number) {\n this._thickness.set(val);\n }\n\n protected _value = signal(0);\n protected _max = signal(100);\n protected _size = signal(48);\n protected _variant = signal<ProgressVariant>('primary');\n protected _showValue = signal(false);\n protected _indeterminate = signal(false);\n protected _thickness = signal(4);\n\n protected sizeValue = computed(() => this._size());\n protected valueNum = computed(() => this._value());\n protected maxNum = computed(() => this._max());\n protected showValueFlag = computed(() => this._showValue());\n protected indeterminateFlag = computed(() => this._indeterminate());\n protected strokeWidth = computed(() => this._thickness());\n\n // Circle with radius 15.9155 has circumference of ~100\n private readonly CIRCUMFERENCE = 100;\n\n protected percentage = computed(() => {\n const val = this._value();\n const maxVal = this._max();\n return Math.min(Math.max((val / maxVal) * 100, 0), 100);\n });\n\n protected dashOffset = computed(() => {\n const pct = this.percentage();\n return this.CIRCUMFERENCE - (pct / 100) * this.CIRCUMFERENCE;\n });\n\n protected strokeColor = computed(() => {\n const variant = this._variant();\n\n const colors: Record<ProgressVariant, string> = {\n primary: '#2563eb',\n secondary: '#475569',\n success: '#059669',\n warning: '#f59e0b',\n danger: '#e11d48',\n info: '#0891b2',\n };\n\n return colors[variant];\n });\n\n protected valueClasses = computed(() => {\n const sz = this._size();\n const fontSize =\n sz < 40 ? 'text-[10px]' : sz < 56 ? 'text-xs' : sz < 72 ? 'text-sm' : 'text-base';\n return `absolute inset-0 flex items-center justify-center font-semibold text-slate-700 dark:text-slate-300 ${fontSize}`;\n });\n}\n","<div\n [class]=\"containerClasses()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"valueNum()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"maxNum()\"\n>\n @if ((labelText() || showValueFlag()) && labelPositionVal() === 'top') {\n <div class=\"flex justify-between items-center mb-1\">\n <span class=\"text-sm font-medium text-slate-700\">{{ labelText() }}</span>\n @if (showValueFlag()) {\n <span class=\"text-sm text-slate-500\">{{ percentage() }}%</span>\n }\n </div>\n }\n <div [class]=\"trackClasses()\">\n <div [class]=\"barClasses()\" [style.width.%]=\"percentage()\">\n @if (showValueFlag() && labelPositionVal() === 'inside' && percentage() > 10) {\n <span class=\"text-xs font-medium text-white\">{{ percentage() }}%</span>\n }\n </div>\n </div>\n @if ((labelText() || showValueFlag()) && labelPositionVal() === 'bottom') {\n <div class=\"flex justify-between items-center mt-1\">\n <span class=\"text-sm font-medium text-slate-700\">{{ labelText() }}</span>\n @if (showValueFlag()) {\n <span class=\"text-sm text-slate-500\">{{ percentage() }}%</span>\n }\n </div>\n }\n</div>\n","<div\n class=\"relative inline-flex items-center justify-center\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminateFlag() ? undefined : valueNum()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"maxNum()\"\n>\n <svg\n class=\"-rotate-90\"\n [class.circular-rotate]=\"indeterminateFlag()\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n viewBox=\"0 0 36 36\"\n >\n <!-- Background circle -->\n <circle\n class=\"text-slate-200\"\n stroke=\"currentColor\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n cx=\"18\"\n cy=\"18\"\n r=\"15.9155\"\n />\n <!-- Progress circle -->\n <circle\n [class.circular-dash]=\"indeterminateFlag()\"\n [attr.stroke]=\"strokeColor()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n cx=\"18\"\n cy=\"18\"\n r=\"15.9155\"\n stroke-dasharray=\"100 100\"\n [style.stroke-dashoffset]=\"indeterminateFlag() ? undefined : dashOffset()\"\n class=\"transition-all duration-300\"\n />\n </svg>\n @if (showValueFlag() && !indeterminateFlag()) {\n <span [class]=\"valueClasses()\">{{ percentage() | number: '1.0-0' }}%</span>\n }\n</div>\n","import { Component, computed, Input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded';\n\n@Component({\n selector: 'tw-skeleton',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './skeleton.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonComponent {\n @Input() set variant(value: SkeletonVariant) {\n this._variant.set(value);\n }\n @Input() set width(value: string | number) {\n this._width.set(value);\n }\n @Input() set height(value: string | number) {\n this._height.set(value);\n }\n @Input() set animated(value: boolean) {\n this._animated.set(value);\n }\n\n protected _variant = signal<SkeletonVariant>('text');\n protected _width = signal<string | number>('100%');\n protected _height = signal<string | number>('');\n protected _animated = signal(true);\n\n protected skeletonClasses = computed(() => {\n const variant = this._variant();\n const animated = this._animated();\n\n const variantClasses: Record<SkeletonVariant, string> = {\n text: 'rounded',\n circular: 'rounded-full aspect-square',\n rectangular: 'rounded-none',\n rounded: 'rounded-lg',\n };\n\n const classes = ['bg-slate-200 dark:bg-slate-700', 'block', variantClasses[variant]];\n\n if (animated) {\n classes.push('animate-pulse');\n }\n\n return classes.join(' ');\n });\n\n protected customStyle = computed(() => {\n const width = this._width();\n const height = this._height();\n const variant = this._variant();\n\n const styles: Record<string, string> = {};\n\n if (width) {\n styles['width'] = typeof width === 'number' ? `${width}px` : width;\n }\n\n if (height) {\n styles['height'] = typeof height === 'number' ? `${height}px` : height;\n } else if (variant === 'text') {\n styles['height'] = '1.25rem'; // 20px - better default height for text skeleton\n }\n\n return styles;\n });\n}\n\nexport type SkeletonGap = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'tw-skeleton-text',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent],\n templateUrl: './skeleton-text.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonTextComponent {\n @Input() set lineCount(value: number) {\n this._lineCount.set(value);\n }\n @Input() set animated(value: boolean) {\n this._animated.set(value);\n }\n @Input() set lastLineWidth(value: string) {\n this._lastLineWidth.set(value);\n }\n @Input() set gap(value: SkeletonGap) {\n this._gap.set(value);\n }\n\n protected _lineCount = signal(3);\n protected _animated = signal(true);\n protected _lastLineWidth = signal('60%');\n protected _gap = signal<SkeletonGap>('md');\n\n protected animatedValue = computed(() => this._animated());\n\n protected gapPx = computed(() => {\n const gapMap: Record<SkeletonGap, number> = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n return gapMap[this._gap()];\n });\n\n protected lines = computed(() => {\n const count = this._lineCount();\n const lastWidth = this._lastLineWidth();\n\n return Array.from({ length: count }, (_, i) => ({\n width: i === count - 1 ? lastWidth : '100%',\n }));\n });\n}\n\n@Component({\n selector: 'tw-skeleton-card',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent, TwSkeletonTextComponent],\n templateUrl: './skeleton-card.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonCardComponent {\n @Input() set showMedia(value: boolean) {\n this._showMedia.set(value);\n }\n @Input() set showAvatar(value: boolean) {\n this._showAvatar.set(value);\n }\n @Input() set mediaHeight(value: number) {\n this._mediaHeight.set(value);\n }\n @Input() set lineCount(value: number) {\n this._lineCount.set(value);\n }\n\n protected _showMedia = signal(true);\n protected _showAvatar = signal(false);\n protected _mediaHeight = signal(200);\n protected _lineCount = signal(3);\n\n protected showMediaValue = computed(() => this._showMedia());\n protected showAvatarValue = computed(() => this._showAvatar());\n protected mediaHeightValue = computed(() => this._mediaHeight());\n protected lineCountValue = computed(() => this._lineCount());\n}\n\n@Component({\n selector: 'tw-skeleton-table',\n standalone: true,\n imports: [CommonModule, TwSkeletonComponent],\n templateUrl: './skeleton-table.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\nexport class TwSkeletonTableComponent {\n @Input() set rowCount(value: number) {\n this._rowCount.set(value);\n }\n @Input() set columnCount(value: number) {\n this._columnCount.set(value);\n }\n\n protected _rowCount = signal(5);\n protected _columnCount = signal(4);\n\n protected rows = computed(() => Array.from({ length: this._rowCount() }));\n protected columns = computed(() =>\n Array.from({ length: this._columnCount() }, (_, i) => ({\n flex: i === 0 ? 2 : 1,\n width: i === this._columnCount() - 1 ? '60%' : '100%',\n }))\n );\n}\n","<div [class]=\"skeletonClasses()\" [style]=\"customStyle()\"></div>\n","<div class=\"flex flex-col\">\n @for (line of lines(); track $index; let last = $last) {\n <tw-skeleton\n variant=\"text\"\n [width]=\"line.width\"\n [animated]=\"animatedValue()\"\n [style.margin-bottom.px]=\"last ? 0 : gapPx()\"\n >\n </tw-skeleton>\n }\n</div>\n","<div class=\"rounded-lg border border-slate-200 overflow-hidden\">\n @if (showMediaValue()) {\n <tw-skeleton variant=\"rectangular\" width=\"100%\" [height]=\"mediaHeightValue()\"></tw-skeleton>\n }\n <div class=\"p-5 space-y-4\">\n @if (showAvatarValue()) {\n <div class=\"flex items-center gap-4\">\n <tw-skeleton variant=\"circular\" [width]=\"48\" [height]=\"48\"></tw-skeleton>\n <div class=\"flex-1 space-y-3\">\n <tw-skeleton variant=\"text\" width=\"50%\" height=\"14px\"></tw-skeleton>\n <tw-skeleton variant=\"text\" width=\"30%\" height=\"12px\"></tw-skeleton>\n </div>\n </div>\n }\n <tw-skeleton-text\n [lineCount]=\"lineCountValue()\"\n [lastLineWidth]=\"'80%'\"\n gap=\"md\"\n ></tw-skeleton-text>\n </div>\n</div>\n","<div class=\"w-full\">\n <!-- Header -->\n <div class=\"flex gap-6 pb-4 border-b border-slate-200\">\n @for (col of columns(); track $index) {\n <div [style.flex]=\"col.flex || 1\">\n <tw-skeleton variant=\"text\" [width]=\"col.width || '100%'\" height=\"14px\"></tw-skeleton>\n </div>\n }\n </div>\n <!-- Rows -->\n @for (row of rows(); track $index) {\n <div class=\"flex gap-6 py-4 border-b border-slate-100 last:border-b-0\">\n @for (col of columns(); track $index) {\n <div [style.flex]=\"col.flex || 1\">\n <tw-skeleton variant=\"text\" [width]=\"col.width || '100%'\" height=\"12px\"></tw-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n OnDestroy,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\nimport { TwFocusTrapDirective } from '../directives/focus-trap.directive';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst MODAL_SIZES: Record<ModalSize, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full mx-4',\n};\n\n/**\n * Modal/Dialog component with accessibility features\n *\n * @example\n * ```html\n * <tw-modal [(open)]=\"isOpen\" [size]=\"'md'\" (closed)=\"onClose()\">\n * <tw-modal-header>\n * <tw-modal-title>Modal Title</tw-modal-title>\n * </tw-modal-header>\n * <tw-modal-body>\n * Modal content goes here\n * </tw-modal-body>\n * <tw-modal-footer>\n * <tw-button variant=\"ghost\" (click)=\"isOpen = false\">Cancel</tw-button>\n * <tw-button variant=\"primary\" (click)=\"save()\">Save</tw-button>\n * </tw-modal-footer>\n * </tw-modal>\n * ```\n */\n@Component({\n selector: 'tw-modal',\n standalone: true,\n imports: [CommonModule, TwFocusTrapDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './modal.component.html',\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('150ms ease-out', style({ opacity: 1 })),\n ]),\n transition(':leave', [animate('100ms ease-in', style({ opacity: 0 }))]),\n ]),\n trigger('panelAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'scale(0.95) translateY(-10px)' }),\n animate('150ms ease-out', style({ opacity: 1, transform: 'scale(1) translateY(0)' })),\n ]),\n transition(':leave', [\n animate('100ms ease-in', style({ opacity: 0, transform: 'scale(0.95) translateY(-10px)' })),\n ]),\n ]),\n ],\n})\nexport class TwModalComponent implements OnDestroy {\n /** Expose sizes to template for JIT detection */\n protected readonly MODAL_SIZES = MODAL_SIZES;\n\n private readonly twClass = inject(TwClassService);\n private readonly document = inject(DOCUMENT);\n\n @ViewChild('modalPanel') modalPanel!: ElementRef;\n\n // Internal signals for reactive state\n protected readonly _open = signal(false);\n protected readonly _size = signal<ModalSize>('md');\n protected readonly _closeOnBackdropClick = signal(true);\n protected readonly _closeOnEscape = signal(true);\n protected readonly _showCloseButton = signal(true);\n protected readonly _autoFocus = signal(true);\n protected readonly _restoreFocus = signal(true);\n protected readonly _centered = signal(true);\n protected readonly _ariaLabelledBy = signal('');\n protected readonly _ariaDescribedBy = signal('');\n protected readonly _backdropClass = signal('');\n protected readonly _panelClass = signal('');\n\n // Input setters\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n get open(): boolean {\n return this._open();\n }\n\n @Input() set size(value: ModalSize) {\n this._size.set(value);\n }\n @Input({ transform: booleanAttribute }) set closeOnBackdropClick(value: boolean) {\n this._closeOnBackdropClick.set(value);\n }\n @Input({ transform: booleanAttribute }) set closeOnEscape(value: boolean) {\n this._closeOnEscape.set(value);\n }\n @Input({ transform: booleanAttribute }) set showCloseButton(value: boolean) {\n this._showCloseButton.set(value);\n }\n @Input({ transform: booleanAttribute }) set autoFocus(value: boolean) {\n this._autoFocus.set(value);\n }\n @Input({ transform: booleanAttribute }) set restoreFocus(value: boolean) {\n this._restoreFocus.set(value);\n }\n @Input({ transform: booleanAttribute }) set centered(value: boolean) {\n this._centered.set(value);\n }\n @Input() set ariaLabelledBy(value: string) {\n this._ariaLabelledBy.set(value);\n }\n @Input() set ariaDescribedBy(value: string) {\n this._ariaDescribedBy.set(value);\n }\n @Input() set backdropClass(value: string) {\n this._backdropClass.set(value);\n }\n @Input() set panelClass(value: string) {\n this._panelClass.set(value);\n }\n\n // Outputs\n @Output() opened = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n @Output() openChange = new EventEmitter<boolean>();\n\n private previousOverflow = '';\n\n // Effect to manage scroll lock\n constructor() {\n effect(() => {\n if (this._open()) {\n this.lockScroll();\n this.opened.emit();\n } else {\n this.unlockScroll();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.unlockScroll();\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n onEscapeKey(event: Event): void {\n if (this._open() && this._closeOnEscape()) {\n event.preventDefault();\n this.closeModal();\n }\n }\n\n protected readonly backdropClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 bg-slate-900/50 backdrop-blur-sm',\n this._backdropClass()\n );\n });\n\n protected readonly containerClasses = computed(() => {\n return this.twClass.merge(\n 'flex min-h-full p-4',\n this._centered() ? 'items-center justify-center' : 'items-start justify-center pt-16'\n );\n });\n\n protected readonly panelClasses = computed(() => {\n return this.twClass.merge(\n 'relative w-full bg-white dark:bg-slate-800 rounded-xl shadow-2xl',\n MODAL_SIZES[this._size()],\n this._panelClass()\n );\n });\n\n /**\n * Returns only the size and custom panel classes (not base styling)\n * Base styling with dark: variants is in the template for Tailwind JIT detection\n */\n protected readonly sizeAndCustomClasses = computed(() => {\n return this.twClass.merge(MODAL_SIZES[this._size()], this._panelClass());\n });\n\n protected onBackdropClick(): void {\n if (this._closeOnBackdropClick()) {\n this.closeModal();\n }\n }\n\n closeModal(): void {\n this._open.set(false);\n this.openChange.emit(false);\n this.closed.emit();\n }\n\n openModal(): void {\n this._open.set(true);\n this.openChange.emit(true);\n }\n\n private lockScroll(): void {\n this.previousOverflow = this.document.body.style.overflow;\n this.document.body.style.overflow = 'hidden';\n }\n\n private unlockScroll(): void {\n this.document.body.style.overflow = this.previousOverflow;\n }\n}\n\n/**\n * Modal header component\n */\n@Component({\n selector: 'tw-modal-header',\n standalone: true,\n host: {\n class: 'block px-6 py-4 border-b border-slate-100 dark:border-slate-700',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalHeaderComponent {}\n\n/**\n * Modal title component\n */\n@Component({\n selector: 'tw-modal-title',\n standalone: true,\n host: {\n class: 'block text-lg font-semibold text-slate-900 dark:text-slate-100',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalTitleComponent {}\n\n/**\n * Modal body component\n */\n@Component({\n selector: 'tw-modal-body',\n standalone: true,\n host: {\n class: 'block p-6',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalBodyComponent {}\n\n/**\n * Modal footer component\n */\n@Component({\n selector: 'tw-modal-footer',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClasses()',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwModalFooterComponent {\n private readonly twClass = inject(TwClassService);\n\n protected readonly _align = signal<'start' | 'center' | 'end' | 'between'>('end');\n protected readonly _classOverride = signal('');\n\n @Input() set align(value: 'start' | 'center' | 'end' | 'between') {\n this._align.set(value);\n }\n @Input() set classOverride(value: string) {\n this._classOverride.set(value);\n }\n\n protected readonly computedClasses = computed(() => {\n const alignClasses: Record<string, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n };\n\n return this.twClass.merge(\n 'flex items-center gap-3 px-6 py-4 border-t border-slate-100 dark:border-slate-700 bg-slate-50/50 dark:bg-slate-900/50 rounded-b-xl',\n alignClasses[this._align()],\n this._classOverride()\n );\n });\n}\n\n/**\n * Confirmation dialog helper component\n */\n@Component({\n selector: 'tw-confirm-dialog',\n standalone: true,\n imports: [\n CommonModule,\n TwModalComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n TwModalBodyComponent,\n TwModalFooterComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './confirm-dialog.component.html',\n})\nexport class TwConfirmDialogComponent {\n private readonly twClass = inject(TwClassService);\n\n protected readonly _open = signal(false);\n protected readonly _title = signal('Confirm');\n protected readonly _message = signal('Are you sure you want to continue?');\n protected readonly _confirmText = signal('Confirm');\n protected readonly _cancelText = signal('Cancel');\n protected readonly _variant = signal<'primary' | 'danger'>('primary');\n protected readonly _loading = signal(false);\n\n @Input() set open(value: boolean) {\n this._open.set(value);\n }\n get open(): boolean {\n return this._open();\n }\n\n @Input() set title(value: string) {\n this._title.set(value);\n }\n @Input() set message(value: string) {\n this._message.set(value);\n }\n @Input() set confirmText(value: string) {\n this._confirmText.set(value);\n }\n @Input() set cancelText(value: string) {\n this._cancelText.set(value);\n }\n @Input() set variant(value: 'primary' | 'danger') {\n this._variant.set(value);\n }\n @Input({ transform: booleanAttribute }) set loading(value: boolean) {\n this._loading.set(value);\n }\n\n @Output() openChange = new EventEmitter<boolean>();\n @Output() confirm = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n protected readonly confirmButtonClasses = computed(() => {\n const variants = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus-visible:ring-blue-500',\n danger: 'bg-rose-600 hover:bg-rose-700 focus-visible:ring-rose-500',\n };\n\n return this.twClass.merge(\n 'inline-flex items-center px-4 py-2 text-sm font-medium text-white rounded-lg focus:outline-none focus-visible:ring-2 disabled:opacity-50',\n variants[this._variant()]\n );\n });\n\n protected onConfirm(): void {\n this.confirm.emit();\n }\n\n protected onCancel(): void {\n this._open.set(false);\n this.openChange.emit(false);\n this.cancel.emit();\n }\n}\n","@if (_open()) {\n <!-- Backdrop -->\n <div class=\"fixed inset-0 z-50\" [@overlayAnimation] (click)=\"onBackdropClick()\">\n <div [class]=\"backdropClasses()\"></div>\n </div>\n\n <!-- Modal container -->\n <div class=\"fixed inset-0 z-50 overflow-y-auto\" [@overlayAnimation]>\n <div [class]=\"containerClasses()\">\n <!-- Modal panel -->\n <!-- Static classes for Tailwind JIT detection: bg-white dark:bg-slate-800 -->\n <div\n #modalPanel\n class=\"relative w-full bg-white dark:bg-slate-800 rounded-xl shadow-2xl\"\n [ngClass]=\"sizeAndCustomClasses()\"\n [@panelAnimation]\n twFocusTrap\n [focusTrapAutoFocus]=\"_autoFocus()\"\n [focusTrapRestoreFocus]=\"_restoreFocus()\"\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_ariaLabelledBy()\"\n [attr.aria-describedby]=\"_ariaDescribedBy()\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- Close button -->\n @if (_showCloseButton()) {\n <button\n type=\"button\"\n class=\"absolute top-4 right-4 text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 rounded-lg p-1\"\n (click)=\"closeModal()\"\n aria-label=\"Close modal\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n}\n","<tw-modal\n [open]=\"_open()\"\n [size]=\"'sm'\"\n [closeOnBackdropClick]=\"!_loading()\"\n [closeOnEscape]=\"!_loading()\"\n [showCloseButton]=\"!_loading()\"\n (openChange)=\"openChange.emit($event)\"\n (closed)=\"onCancel()\"\n>\n <tw-modal-header>\n <tw-modal-title>{{ _title() }}</tw-modal-title>\n </tw-modal-header>\n <tw-modal-body>\n <p class=\"text-slate-600\">{{ _message() }}</p>\n <ng-content></ng-content>\n </tw-modal-body>\n <tw-modal-footer>\n <button\n type=\"button\"\n class=\"px-4 py-2 text-sm font-medium text-slate-700 bg-white border border-slate-300 rounded-lg hover:bg-slate-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 disabled:opacity-50\"\n [disabled]=\"_loading()\"\n (click)=\"onCancel()\"\n >\n {{ _cancelText() }}\n </button>\n <button\n type=\"button\"\n [class]=\"confirmButtonClasses()\"\n [disabled]=\"_loading()\"\n (click)=\"onConfirm()\"\n >\n @if (_loading()) {\n <svg class=\"animate-spin -ml-1 mr-2 h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n }\n {{ _confirmText() }}\n </button>\n </tw-modal-footer>\n</tw-modal>\n","export * from './modal.component';\n\nimport {\n TwConfirmDialogComponent,\n TwModalBodyComponent,\n TwModalComponent,\n TwModalFooterComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n} from './modal.component';\n\nexport const TW_MODAL_COMPONENTS = [\n TwModalComponent,\n TwModalHeaderComponent,\n TwModalTitleComponent,\n TwModalBodyComponent,\n TwModalFooterComponent,\n TwConfirmDialogComponent,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n PLATFORM_ID,\n Renderer2,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type DropdownPosition =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end'\n | 'left'\n | 'right';\n\n/**\n * Dropdown item directive\n */\n@Directive({\n selector: '[twDropdownItem]',\n standalone: true,\n host: {\n class:\n 'block w-full px-4 py-2 text-left text-sm text-slate-700 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-700 hover:text-slate-900 dark:hover:text-slate-100 focus:bg-slate-100 dark:focus:bg-slate-700 focus:text-slate-900 dark:focus:text-slate-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none transition-colors cursor-pointer',\n role: 'menuitem',\n '[attr.tabindex]': 'disabled ? -1 : 0',\n '[attr.aria-disabled]': 'disabled',\n },\n})\nexport class TwDropdownItemDirective {\n @Input({ transform: booleanAttribute }) disabled = false;\n}\n\n/**\n * Dropdown divider\n */\n@Component({\n selector: 'tw-dropdown-divider',\n standalone: true,\n host: {\n class: 'block my-1 border-t border-slate-200 dark:border-slate-700',\n role: 'separator',\n },\n template: ``,\n})\nexport class TwDropdownDividerComponent {}\n\n/**\n * Dropdown header/label\n */\n@Component({\n selector: 'tw-dropdown-header',\n standalone: true,\n host: {\n class: 'block px-4 py-2 text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider',\n },\n template: `<ng-content></ng-content>`,\n})\nexport class TwDropdownHeaderComponent {}\n\n/**\n * Dropdown menu component\n *\n * @example\n * ```html\n * <tw-dropdown>\n * <button twDropdownTrigger>Open Menu</button>\n * <tw-dropdown-menu>\n * <tw-dropdown-header>Actions</tw-dropdown-header>\n * <button twDropdownItem (click)=\"edit()\">Edit</button>\n * <button twDropdownItem (click)=\"duplicate()\">Duplicate</button>\n * <tw-dropdown-divider></tw-dropdown-divider>\n * <button twDropdownItem (click)=\"delete()\" class=\"text-rose-600 hover:text-rose-700 hover:bg-rose-50\">Delete</button>\n * </tw-dropdown-menu>\n * </tw-dropdown>\n * ```\n */\n@Component({\n selector: 'tw-dropdown',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dropdown.component.html',\n host: {\n class: 'inline-block text-left',\n },\n})\nexport class TwDropdownComponent implements OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerContainer') triggerContainer!: ElementRef<HTMLElement>;\n\n /** Position of the dropdown menu */\n @Input() position: DropdownPosition = 'bottom-start';\n\n /** Width of the dropdown menu */\n @Input() width: 'auto' | 'trigger' | string = 'auto';\n\n /** Maximum height of the dropdown menu */\n @Input() maxHeight = '300px';\n\n /** Whether the dropdown is disabled */\n @Input({ transform: booleanAttribute }) disabled = false;\n\n /** Close on item click */\n @Input({ transform: booleanAttribute }) closeOnSelect = true;\n\n /** Additional menu classes */\n @Input() menuClass = '';\n\n /** Event emitted when the dropdown opens */\n @Output() opened = new EventEmitter<void>();\n\n /** Event emitted when the dropdown closes */\n @Output() closed = new EventEmitter<void>();\n\n protected isOpen = signal(false);\n\n // Portal elements\n private portalHost: HTMLElement | null = null;\n private portalElement: HTMLElement | null = null;\n private menuContentElement: HTMLElement | null = null;\n private clickOutsideListener: (() => void) | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n private keydownListener: (() => void) | null = null;\n private menuClickListener: (() => void) | null = null;\n\n protected menuClasses = computed(() => {\n const widthClass = this.width === 'auto' ? 'min-w-[10rem]' : this.width === 'trigger' ? '' : '';\n\n return this.twClass.merge(\n 'rounded-lg bg-white dark:bg-slate-800 shadow-lg ring-1 ring-black/5 dark:ring-slate-700 overflow-auto py-1',\n widthClass,\n this.menuClass\n );\n });\n\n constructor() {\n // Create portal when open state changes\n effect(() => {\n if (this.isOpen()) {\n this.createPortal();\n } else {\n this.destroyPortal();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyPortal();\n }\n\n toggle(): void {\n if (this.disabled) return;\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled) return;\n this.isOpen.set(true);\n this.opened.emit();\n }\n\n close(): void {\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n private createPortal(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n // Create portal host at body level\n this.portalHost = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalHost, 'position', 'fixed');\n this.renderer.setStyle(this.portalHost, 'z-index', '9999');\n this.renderer.setStyle(this.portalHost, 'top', '0');\n this.renderer.setStyle(this.portalHost, 'left', '0');\n this.renderer.setStyle(this.portalHost, 'pointer-events', 'none');\n this.renderer.appendChild(this.document.body, this.portalHost);\n\n // Create the dropdown element\n this.portalElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalElement, 'position', 'absolute');\n this.renderer.setStyle(this.portalElement, 'pointer-events', 'auto');\n this.renderer.setStyle(this.portalElement, 'max-height', this.maxHeight);\n\n // Apply classes\n const classes = this.menuClasses().split(' ');\n classes.forEach(cls => {\n if (cls) this.renderer.addClass(this.portalElement, cls);\n });\n\n // Add animation classes\n this.renderer.setStyle(this.portalElement, 'opacity', '0');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(0.95)');\n this.renderer.setStyle(\n this.portalElement,\n 'transition',\n 'opacity 100ms ease-out, transform 100ms ease-out'\n );\n\n // Set ARIA attributes\n this.renderer.setAttribute(this.portalElement, 'role', 'menu');\n this.renderer.setAttribute(this.portalElement, 'aria-orientation', 'vertical');\n\n this.renderer.appendChild(this.portalHost, this.portalElement);\n\n // Move menu content to portal (not clone, to preserve Angular bindings)\n this.menuContentElement = this.elementRef.nativeElement.querySelector('tw-dropdown-menu');\n if (this.menuContentElement) {\n this.renderer.appendChild(this.portalElement, this.menuContentElement);\n }\n\n // Position the dropdown\n this.updatePosition();\n\n // Animate in\n requestAnimationFrame(() => {\n if (this.portalElement) {\n this.renderer.setStyle(this.portalElement, 'opacity', '1');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(1)');\n }\n });\n\n // Add event listeners\n this.clickOutsideListener = this.renderer.listen('document', 'click', (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideTrigger = this.elementRef.nativeElement.contains(target);\n const isInsidePortal = this.portalElement?.contains(target);\n\n if (!isInsideTrigger && !isInsidePortal) {\n this.close();\n }\n });\n\n this.scrollListener = this.renderer.listen('window', 'scroll', () => {\n this.updatePosition();\n });\n\n this.resizeListener = this.renderer.listen('window', 'resize', () => {\n this.updatePosition();\n });\n\n this.keydownListener = this.renderer.listen('document', 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n });\n\n // Handle clicks on dropdown items\n if (this.closeOnSelect && this.portalElement) {\n this.menuClickListener = this.renderer.listen(this.portalElement, 'click', (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target.hasAttribute('twdropdownitem') || target.closest('[twdropdownitem]')) {\n // Use setTimeout to allow the Angular click handler to fire first\n setTimeout(() => { this.close(); }, 0);\n }\n });\n }\n }\n\n private destroyPortal(): void {\n // Move menu content back to original location before destroying portal\n if (this.menuContentElement && this.elementRef.nativeElement) {\n this.renderer.appendChild(this.elementRef.nativeElement, this.menuContentElement);\n }\n this.menuContentElement = null;\n\n if (this.portalHost && this.document.body.contains(this.portalHost)) {\n this.renderer.removeChild(this.document.body, this.portalHost);\n }\n this.portalHost = null;\n this.portalElement = null;\n\n if (this.clickOutsideListener) {\n this.clickOutsideListener();\n this.clickOutsideListener = null;\n }\n if (this.scrollListener) {\n this.scrollListener();\n this.scrollListener = null;\n }\n if (this.resizeListener) {\n this.resizeListener();\n this.resizeListener = null;\n }\n if (this.keydownListener) {\n this.keydownListener();\n this.keydownListener = null;\n }\n if (this.menuClickListener) {\n this.menuClickListener();\n this.menuClickListener = null;\n }\n }\n\n private updatePosition(): void {\n if (!this.portalElement || !isPlatformBrowser(this.platformId)) return;\n\n const triggerEl = this.triggerContainer?.nativeElement || this.elementRef.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n const portalRect = this.portalElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n\n // Set width if trigger width\n if (this.width === 'trigger') {\n this.renderer.setStyle(this.portalElement, 'width', `${rect.width}px`);\n } else if (this.width !== 'auto') {\n this.renderer.setStyle(this.portalElement, 'width', this.width);\n }\n\n const gap = 4; // margin between trigger and dropdown\n\n switch (this.position) {\n case 'bottom-start': {\n top = rect.bottom + gap;\n left = rect.left;\n break;\n }\n case 'bottom-end': {\n top = rect.bottom + gap;\n left = rect.right - portalRect.width;\n break;\n }\n case 'top-start': {\n top = rect.top - portalRect.height - gap;\n left = rect.left;\n break;\n }\n case 'top-end': {\n top = rect.top - portalRect.height - gap;\n left = rect.right - portalRect.width;\n break;\n }\n case 'left': {\n top = rect.top;\n left = rect.left - portalRect.width - gap;\n break;\n }\n case 'right': {\n top = rect.top;\n left = rect.right + gap;\n break;\n }\n }\n\n // Ensure dropdown stays within viewport\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n if (left < 0) left = gap;\n if (left + portalRect.width > viewportWidth) {\n left = viewportWidth - portalRect.width - gap;\n }\n if (top < 0) top = gap;\n if (top + portalRect.height > viewportHeight) {\n top = viewportHeight - portalRect.height - gap;\n }\n\n this.renderer.setStyle(this.portalElement, 'top', `${top}px`);\n this.renderer.setStyle(this.portalElement, 'left', `${left}px`);\n }\n}\n\n/**\n * Dropdown menu container\n */\n@Component({\n selector: 'tw-dropdown-menu',\n standalone: true,\n template: `<ng-content></ng-content>`,\n})\nexport class TwDropdownMenuComponent {}\n\n/**\n * Trigger directive for dropdown\n */\n@Directive({\n selector: '[twDropdownTrigger]',\n standalone: true,\n host: {\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-expanded]': 'expanded',\n },\n})\nexport class TwDropdownTriggerDirective {\n expanded = false;\n}\n","<div #triggerContainer (click)=\"toggle()\">\n <ng-content select=\"[twDropdownTrigger]\"></ng-content>\n</div>\n\n<!-- Hidden template for menu content - will be cloned to portal -->\n<div style=\"display: none\">\n <ng-content select=\"tw-dropdown-menu\"></ng-content>\n</div>\n","export * from './dropdown.component';\n\nimport {\n TwDropdownComponent,\n TwDropdownDividerComponent,\n TwDropdownHeaderComponent,\n TwDropdownItemDirective,\n TwDropdownMenuComponent,\n TwDropdownTriggerDirective,\n} from './dropdown.component';\n\nexport const TW_DROPDOWN_COMPONENTS = [\n TwDropdownComponent,\n TwDropdownMenuComponent,\n TwDropdownItemDirective,\n TwDropdownDividerComponent,\n TwDropdownHeaderComponent,\n TwDropdownTriggerDirective,\n] as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type SidebarPosition = 'left' | 'right' | 'top' | 'bottom';\nexport type SidebarSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\nconst SIDEBAR_SIZES: Record<SidebarPosition, Record<SidebarSize, string>> = {\n left: { sm: 'w-64', md: 'w-80', lg: 'w-96', xl: 'w-[480px]', full: 'w-full' },\n right: { sm: 'w-64', md: 'w-80', lg: 'w-96', xl: 'w-[480px]', full: 'w-full' },\n top: { sm: 'h-48', md: 'h-64', lg: 'h-80', xl: 'h-96', full: 'h-full' },\n bottom: { sm: 'h-48', md: 'h-64', lg: 'h-80', xl: 'h-96', full: 'h-full' },\n};\n\n/**\n * Sidebar/Drawer component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-sidebar [(visible)]=\"showSidebar\" header=\"Menu\">\n * <p>Sidebar content here</p>\n * </tw-sidebar>\n * ```\n */\n@Component({\n selector: 'tw-sidebar',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './sidebar.component.html',\n host: {\n '[class]': '\"contents\"',\n },\n})\nexport class TwSidebarComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Whether the sidebar is visible */\n @Input({ transform: booleanAttribute })\n set visibleInput(value: boolean) {\n this.visible.set(value);\n }\n\n /** Header text */\n @Input() header = '';\n\n /** Position of the sidebar */\n @Input() position: SidebarPosition = 'left';\n\n /** Size of the sidebar */\n @Input() size: SidebarSize = 'md';\n\n /** Whether to show backdrop */\n @Input({ transform: booleanAttribute }) showBackdrop = true;\n\n /** Whether clicking backdrop closes sidebar */\n @Input({ transform: booleanAttribute }) dismissible = true;\n\n /** Whether pressing Escape closes sidebar */\n @Input({ transform: booleanAttribute }) closeOnEscape = true;\n\n /** Whether to show close button */\n @Input({ transform: booleanAttribute }) showCloseButton = true;\n\n /** Whether the sidebar is modal (blocks interaction with page) */\n @Input({ transform: booleanAttribute }) modal = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Visibility change event */\n @Output() visibleChange = new EventEmitter<boolean>();\n\n /** Show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Hide event */\n @Output() onHide = new EventEmitter<void>();\n\n @ContentChild('twSidebarFooter') footerTemplate!: TemplateRef<any>;\n\n protected visible = signal(false);\n\n protected get hasFooter(): boolean {\n return !!this.footerTemplate;\n }\n\n protected backdropClasses = computed(() => {\n return this.twClass.merge(\n 'fixed inset-0 bg-black/50 z-40 transition-opacity duration-300',\n this.visible() ? 'opacity-100' : 'opacity-0 pointer-events-none'\n );\n });\n\n protected panelClasses = computed(() => {\n const sizeClasses = this.getSizeClasses();\n const positionClasses = this.getPositionClasses();\n const transformClasses = this.getTransformClasses();\n\n return this.twClass.merge(\n 'fixed z-50 bg-white dark:bg-slate-800 shadow-xl dark:shadow-slate-900/50 flex flex-col transition-transform duration-300 ease-out',\n sizeClasses,\n positionClasses,\n transformClasses,\n this.classOverride\n );\n });\n\n protected headerClasses = computed(() => {\n return 'flex items-center justify-between px-6 py-4 border-b border-slate-200 dark:border-slate-700 text-slate-900 dark:text-slate-100';\n });\n\n protected contentClasses = computed(() => {\n return 'flex-1 overflow-auto p-6 text-slate-700 dark:text-slate-300';\n });\n\n protected footerClasses = computed(() => {\n return 'px-6 py-4 border-t border-slate-200 dark:border-slate-700';\n });\n\n private getSizeClasses(): string {\n return SIDEBAR_SIZES[this.position][this.size];\n }\n\n private getPositionClasses(): string {\n switch (this.position) {\n case 'left': {\n return 'top-0 left-0 h-full';\n }\n case 'right': {\n return 'top-0 right-0 h-full';\n }\n case 'top': {\n return 'top-0 left-0 w-full';\n }\n case 'bottom': {\n return 'bottom-0 left-0 w-full';\n }\n }\n }\n\n private getTransformClasses(): string {\n if (this.visible()) return 'translate-x-0 translate-y-0';\n\n switch (this.position) {\n case 'left': {\n return '-translate-x-full';\n }\n case 'right': {\n return 'translate-x-full';\n }\n case 'top': {\n return '-translate-y-full';\n }\n case 'bottom': {\n return 'translate-y-full';\n }\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.closeOnEscape && this.visible()) {\n this.hide();\n }\n }\n\n onBackdropClick(): void {\n if (this.dismissible) {\n this.hide();\n }\n }\n\n /** Show the sidebar */\n show(): void {\n this.visible.set(true);\n this.visibleChange.emit(true);\n this.onShow.emit();\n\n if (this.modal) {\n document.body.style.overflow = 'hidden';\n }\n }\n\n /** Hide the sidebar */\n hide(): void {\n this.visible.set(false);\n this.visibleChange.emit(false);\n this.onHide.emit();\n\n if (this.modal) {\n document.body.style.overflow = '';\n }\n }\n\n /** Toggle the sidebar visibility */\n toggle(): void {\n if (this.visible()) {\n this.hide();\n } else {\n this.show();\n }\n }\n}\n","<!-- Backdrop -->\n@if (visible() && showBackdrop) {\n <div [class]=\"backdropClasses()\" (click)=\"onBackdropClick()\" aria-hidden=\"true\"></div>\n}\n\n<!-- Sidebar panel -->\n<div [class]=\"panelClasses()\" [attr.aria-hidden]=\"!visible()\" role=\"dialog\" aria-modal=\"true\">\n <!-- Header -->\n @if (header || showCloseButton) {\n <div [class]=\"headerClasses()\">\n @if (header) {\n <h2 class=\"text-lg font-semibold text-slate-900\">{{ header }}</h2>\n }\n @if (showCloseButton) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 transition-colors\"\n (click)=\"hide()\"\n aria-label=\"Close sidebar\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n }\n </div>\n }\n\n <!-- Content -->\n <div [class]=\"contentClasses()\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n @if (hasFooter) {\n <div [class]=\"footerClasses()\">\n <ng-content select=\"[twSidebarFooter]\"></ng-content>\n </div>\n }\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n effect,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n Output,\n PLATFORM_ID,\n Renderer2,\n signal,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type PopoverPosition = 'top' | 'bottom' | 'left' | 'right';\nexport type PopoverTrigger = 'click' | 'hover' | 'focus' | 'manual';\n\n/**\n * Popover component with Tailwind CSS styling\n *\n * @example\n * ```html\n * <tw-popover header=\"Settings\">\n * <button twPopoverTrigger>Open</button>\n * <p>Popover content here</p>\n * </tw-popover>\n * ```\n */\n@Component({\n selector: 'tw-popover',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './popover.component.html',\n host: {\n class: 'inline-block',\n },\n})\nexport class TwPopoverComponent implements OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly platformId = inject(PLATFORM_ID);\n\n @ViewChild('triggerContainer') triggerContainer!: ElementRef<HTMLElement>;\n\n /** Position relative to trigger */\n @Input() position: PopoverPosition = 'bottom';\n\n /** How the popover is triggered */\n @Input() trigger: PopoverTrigger = 'click';\n\n /** Header text */\n @Input() header = '';\n\n /** Whether to show arrow */\n @Input({ transform: booleanAttribute }) showArrow = true;\n\n /** Whether clicking outside closes the popover */\n @Input({ transform: booleanAttribute }) dismissible = true;\n\n /** Close on escape key */\n @Input({ transform: booleanAttribute }) closeOnEscape = true;\n\n /** Hover delay in milliseconds */\n @Input({ transform: numberAttribute }) hoverDelay = 200;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Hide event */\n @Output() onHide = new EventEmitter<void>();\n\n @ContentChild('twPopoverFooter') footerTemplate!: TemplateRef<any>;\n\n protected visible = signal(false);\n private hoverTimeout: any = null;\n\n // Portal elements\n private portalHost: HTMLElement | null = null;\n private portalElement: HTMLElement | null = null;\n private clickOutsideListener: (() => void) | null = null;\n private scrollListener: (() => void) | null = null;\n private resizeListener: (() => void) | null = null;\n private keydownListener: (() => void) | null = null;\n private portalMouseEnterListener: (() => void) | null = null;\n private portalMouseLeaveListener: (() => void) | null = null;\n\n protected get hasFooter(): boolean {\n return !!this.footerTemplate;\n }\n\n protected popoverClasses = computed(() => {\n return this.twClass.merge(\n 'min-w-48 bg-white dark:bg-slate-800 rounded-lg shadow-lg border border-slate-200 dark:border-slate-700',\n this.classOverride\n );\n });\n\n constructor() {\n // Create portal when visible state changes\n effect(() => {\n if (this.visible()) {\n this.createPortal();\n } else {\n this.destroyPortal();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.clearHoverTimeout();\n this.destroyPortal();\n }\n\n onTriggerClick(): void {\n if (this.trigger === 'click') {\n this.toggle();\n }\n }\n\n onTriggerEnter(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.show();\n }, this.hoverDelay);\n }\n }\n\n onTriggerLeave(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.hide();\n }, this.hoverDelay);\n }\n }\n\n private onPopoverEnter(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n }\n }\n\n private onPopoverLeave(): void {\n if (this.trigger === 'hover') {\n this.clearHoverTimeout();\n this.hoverTimeout = setTimeout(() => {\n this.hide();\n }, this.hoverDelay);\n }\n }\n\n private clearHoverTimeout(): void {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n show(): void {\n this.visible.set(true);\n this.onShow.emit();\n }\n\n hide(): void {\n this.visible.set(false);\n this.onHide.emit();\n }\n\n toggle(): void {\n if (this.visible()) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n private createPortal(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n // Create portal host at body level\n this.portalHost = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalHost, 'position', 'fixed');\n this.renderer.setStyle(this.portalHost, 'z-index', '9999');\n this.renderer.setStyle(this.portalHost, 'top', '0');\n this.renderer.setStyle(this.portalHost, 'left', '0');\n this.renderer.setStyle(this.portalHost, 'pointer-events', 'none');\n this.renderer.appendChild(this.document.body, this.portalHost);\n\n // Create the popover element\n this.portalElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.portalElement, 'position', 'absolute');\n this.renderer.setStyle(this.portalElement, 'pointer-events', 'auto');\n\n // Apply classes\n const classes = this.popoverClasses().split(' ');\n classes.forEach(cls => {\n if (cls) this.renderer.addClass(this.portalElement, cls);\n });\n\n // Add animation styles\n this.renderer.setStyle(this.portalElement, 'opacity', '0');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(0.95)');\n this.renderer.setStyle(\n this.portalElement,\n 'transition',\n 'opacity 150ms ease-out, transform 150ms ease-out'\n );\n\n // Set ARIA attributes\n this.renderer.setAttribute(this.portalElement, 'role', 'tooltip');\n\n // Build popover content\n this.buildPopoverContent();\n\n this.renderer.appendChild(this.portalHost, this.portalElement);\n\n // Position the popover\n this.updatePosition();\n\n // Animate in\n requestAnimationFrame(() => {\n if (this.portalElement) {\n this.renderer.setStyle(this.portalElement, 'opacity', '1');\n this.renderer.setStyle(this.portalElement, 'transform', 'scale(1)');\n }\n });\n\n // Add event listeners\n if (this.dismissible && this.trigger === 'click') {\n this.clickOutsideListener = this.renderer.listen('document', 'click', (event: MouseEvent) => {\n const target = event.target as Node;\n const isInsideTrigger = this.elementRef.nativeElement.contains(target);\n const isInsidePortal = this.portalElement?.contains(target);\n\n if (!isInsideTrigger && !isInsidePortal) {\n this.hide();\n }\n });\n }\n\n this.scrollListener = this.renderer.listen('window', 'scroll', () => {\n this.updatePosition();\n });\n\n this.resizeListener = this.renderer.listen('window', 'resize', () => {\n this.updatePosition();\n });\n\n if (this.closeOnEscape) {\n this.keydownListener = this.renderer.listen('document', 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.hide();\n }\n });\n }\n\n // Hover listeners for portal\n if (this.trigger === 'hover' && this.portalElement) {\n this.portalMouseEnterListener = this.renderer.listen(this.portalElement, 'mouseenter', () => {\n this.onPopoverEnter();\n });\n this.portalMouseLeaveListener = this.renderer.listen(this.portalElement, 'mouseleave', () => {\n this.onPopoverLeave();\n });\n }\n }\n\n private buildPopoverContent(): void {\n if (!this.portalElement) return;\n\n // Arrow\n if (this.showArrow) {\n const arrow = this.renderer.createElement('div');\n const arrowClasses = this.getArrowClasses();\n arrowClasses.split(' ').forEach(cls => {\n if (cls) this.renderer.addClass(arrow, cls);\n });\n this.renderer.appendChild(this.portalElement, arrow);\n }\n\n // Header\n if (this.header) {\n const headerEl = this.renderer.createElement('div');\n this.renderer.addClass(headerEl, 'px-4');\n this.renderer.addClass(headerEl, 'py-2');\n this.renderer.addClass(headerEl, 'border-b');\n this.renderer.addClass(headerEl, 'border-slate-200');\n this.renderer.addClass(headerEl, 'dark:border-slate-700');\n this.renderer.addClass(headerEl, 'font-semibold');\n this.renderer.addClass(headerEl, 'text-slate-900');\n this.renderer.addClass(headerEl, 'dark:text-slate-100');\n const headerText = this.renderer.createText(this.header);\n this.renderer.appendChild(headerEl, headerText);\n this.renderer.appendChild(this.portalElement, headerEl);\n }\n\n // Content\n const contentWrapper = this.renderer.createElement('div');\n this.renderer.addClass(contentWrapper, 'px-4');\n this.renderer.addClass(contentWrapper, 'py-3');\n\n // Clone content from the component\n const contentSource = this.elementRef.nativeElement.querySelector('.popover-content-source');\n if (contentSource) {\n const clone = contentSource.cloneNode(true) as HTMLElement;\n clone.style.display = 'block';\n this.renderer.appendChild(contentWrapper, clone);\n }\n this.renderer.appendChild(this.portalElement, contentWrapper);\n\n // Footer\n const footerSource = this.elementRef.nativeElement.querySelector('[twPopoverFooter]');\n if (footerSource) {\n const footerWrapper = this.renderer.createElement('div');\n this.renderer.addClass(footerWrapper, 'px-4');\n this.renderer.addClass(footerWrapper, 'py-2');\n this.renderer.addClass(footerWrapper, 'border-t');\n this.renderer.addClass(footerWrapper, 'border-slate-200');\n this.renderer.addClass(footerWrapper, 'dark:border-slate-700');\n this.renderer.addClass(footerWrapper, 'bg-slate-50');\n this.renderer.addClass(footerWrapper, 'dark:bg-slate-900');\n const footerClone = footerSource.cloneNode(true) as HTMLElement;\n this.renderer.appendChild(footerWrapper, footerClone);\n this.renderer.appendChild(this.portalElement, footerWrapper);\n }\n }\n\n private getArrowClasses(): string {\n const baseClasses = 'absolute w-2.5 h-2.5 bg-white dark:bg-slate-800 rotate-45 shadow-sm';\n const positionClasses: Record<PopoverPosition, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 border-b border-r border-slate-200 dark:border-slate-700',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 border-t border-l border-slate-200 dark:border-slate-700',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-1/2 border-t border-r border-slate-200 dark:border-slate-700',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-1/2 border-b border-l border-slate-200 dark:border-slate-700',\n };\n return this.twClass.merge(baseClasses, positionClasses[this.position]);\n }\n\n private destroyPortal(): void {\n if (this.portalHost && this.document.body.contains(this.portalHost)) {\n this.renderer.removeChild(this.document.body, this.portalHost);\n }\n this.portalHost = null;\n this.portalElement = null;\n\n if (this.clickOutsideListener) {\n this.clickOutsideListener();\n this.clickOutsideListener = null;\n }\n if (this.scrollListener) {\n this.scrollListener();\n this.scrollListener = null;\n }\n if (this.resizeListener) {\n this.resizeListener();\n this.resizeListener = null;\n }\n if (this.keydownListener) {\n this.keydownListener();\n this.keydownListener = null;\n }\n if (this.portalMouseEnterListener) {\n this.portalMouseEnterListener();\n this.portalMouseEnterListener = null;\n }\n if (this.portalMouseLeaveListener) {\n this.portalMouseLeaveListener();\n this.portalMouseLeaveListener = null;\n }\n }\n\n private updatePosition(): void {\n if (!this.portalElement || !isPlatformBrowser(this.platformId)) return;\n\n const triggerEl = this.triggerContainer?.nativeElement || this.elementRef.nativeElement;\n const rect = triggerEl.getBoundingClientRect();\n const portalRect = this.portalElement.getBoundingClientRect();\n\n let top = 0;\n let left = 0;\n const gap = 8; // margin between trigger and popover\n\n switch (this.position) {\n case 'top': {\n top = rect.top - portalRect.height - gap;\n left = rect.left + rect.width / 2 - portalRect.width / 2;\n break;\n }\n case 'bottom': {\n top = rect.bottom + gap;\n left = rect.left + rect.width / 2 - portalRect.width / 2;\n break;\n }\n case 'left': {\n top = rect.top + rect.height / 2 - portalRect.height / 2;\n left = rect.left - portalRect.width - gap;\n break;\n }\n case 'right': {\n top = rect.top + rect.height / 2 - portalRect.height / 2;\n left = rect.right + gap;\n break;\n }\n }\n\n // Ensure popover stays within viewport\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n if (left < gap) left = gap;\n if (left + portalRect.width > viewportWidth - gap) {\n left = viewportWidth - portalRect.width - gap;\n }\n if (top < gap) top = gap;\n if (top + portalRect.height > viewportHeight - gap) {\n top = viewportHeight - portalRect.height - gap;\n }\n\n this.renderer.setStyle(this.portalElement, 'top', `${top}px`);\n this.renderer.setStyle(this.portalElement, 'left', `${left}px`);\n }\n}\n","<!-- Trigger -->\n<div\n #triggerContainer\n (click)=\"onTriggerClick()\"\n (mouseenter)=\"onTriggerEnter()\"\n (mouseleave)=\"onTriggerLeave()\"\n>\n <ng-content select=\"[twPopoverTrigger]\"></ng-content>\n</div>\n\n<!-- Hidden content source - will be cloned to portal -->\n<div class=\"popover-content-source\" style=\"display: none\">\n <ng-content></ng-content>\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ImageFit = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\nexport type ImageBorderRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';\n\n/**\n * Image component with preview, zoom, and rotation\n *\n * @example\n * ```html\n * <tw-image [src]=\"imageUrl\" alt=\"Description\" [preview]=\"true\"></tw-image>\n * <tw-image [src]=\"imageUrl\" [zoomable]=\"true\" [rotatable]=\"true\"></tw-image>\n * ```\n */\n@Component({\n selector: 'tw-image',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './image.component.html',\n})\nexport class TwImageComponent {\n private readonly twClass = inject(TwClassService);\n\n /** Image source URL */\n @Input({ required: true }) src = '';\n\n /** Alternative text */\n @Input() alt = '';\n\n /** Preview source (larger image for preview) */\n @Input() previewSrc = '';\n\n /** Width of the image */\n @Input() width = '';\n\n /** Height of the image */\n @Input() height = '';\n\n /** Object fit */\n @Input() set fit(value: ImageFit) {\n this._fit.set(value);\n }\n protected _fit = signal<ImageFit>('cover');\n\n /** Border radius */\n @Input() set borderRadius(value: ImageBorderRadius) {\n this._borderRadius.set(value);\n }\n protected _borderRadius = signal<ImageBorderRadius>('none');\n\n /** Whether to enable preview on click */\n @Input({ transform: booleanAttribute }) set preview(value: boolean) {\n this._preview.set(value);\n }\n protected _preview = signal(false);\n\n /** Whether zoom is enabled in preview */\n @Input({ transform: booleanAttribute }) zoomable = true;\n\n /** Whether rotation is enabled in preview */\n @Input({ transform: booleanAttribute }) rotatable = true;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n /** Preview show event */\n @Output() onShow = new EventEmitter<void>();\n\n /** Preview hide event */\n @Output() onHide = new EventEmitter<void>();\n\n /** Image load event */\n @Output() onLoad = new EventEmitter<void>();\n\n /** Image error event */\n @Output() onError = new EventEmitter<void>();\n\n protected loading = signal(true);\n protected previewVisible = signal(false);\n protected zoomLevel = signal(1);\n protected rotation = signal(0);\n\n // Expose Math to template\n protected Math = Math;\n\n protected containerClasses = computed(() => {\n const radiusClasses: Record<ImageBorderRadius, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl',\n full: 'rounded-full',\n };\n\n return this.twClass.merge(\n 'relative overflow-hidden inline-block',\n radiusClasses[this._borderRadius()],\n this._preview() ? 'cursor-zoom-in' : '',\n this.classOverride\n );\n });\n\n protected containerStyles = computed(() => {\n const styles: Record<string, string> = {};\n if (this.width) {\n styles['width'] =\n this.width.includes('px') || this.width.includes('%') ? this.width : `${this.width}px`;\n }\n if (this.height) {\n styles['height'] =\n this.height.includes('px') || this.height.includes('%') ? this.height : `${this.height}px`;\n }\n return styles;\n });\n\n protected imageClasses = computed(() => {\n const fitClasses: Record<ImageFit, string> = {\n contain: 'object-contain',\n cover: 'object-cover',\n fill: 'object-fill',\n none: 'object-none',\n 'scale-down': 'object-scale-down',\n };\n\n return this.twClass.merge('w-full h-full', fitClasses[this._fit()]);\n });\n\n protected placeholderClasses = computed(() => {\n return 'absolute inset-0 flex items-center justify-center bg-slate-100';\n });\n\n protected previewIconClasses = computed(() => {\n return this.twClass.merge(\n 'absolute inset-0 flex items-center justify-center',\n 'bg-black/0 hover:bg-black/40 transition-colors',\n 'text-white opacity-0 hover:opacity-100'\n );\n });\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.previewVisible()) {\n this.closePreview();\n }\n }\n\n onImageLoad(): void {\n this.loading.set(false);\n this.onLoad.emit();\n }\n\n onImageError(): void {\n this.loading.set(false);\n this.onError.emit();\n }\n\n onImageClick(): void {\n if (this._preview()) {\n this.openPreview();\n }\n }\n\n openPreview(): void {\n this.previewVisible.set(true);\n this.zoomLevel.set(1);\n this.rotation.set(0);\n this.onShow.emit();\n document.body.style.overflow = 'hidden';\n }\n\n closePreview(): void {\n this.previewVisible.set(false);\n this.onHide.emit();\n document.body.style.overflow = '';\n }\n\n zoomIn(): void {\n if (this.zoomLevel() < 3) {\n this.zoomLevel.set(Math.min(3, this.zoomLevel() + 0.25));\n }\n }\n\n zoomOut(): void {\n if (this.zoomLevel() > 0.5) {\n this.zoomLevel.set(Math.max(0.5, this.zoomLevel() - 0.25));\n }\n }\n\n rotateLeft(): void {\n this.rotation.set(this.rotation() - 90);\n }\n\n rotateRight(): void {\n this.rotation.set(this.rotation() + 90);\n }\n}\n","<!-- Thumbnail/Main image -->\n<div [class]=\"containerClasses()\" [style]=\"containerStyles()\" (click)=\"onImageClick()\">\n @if (loading()) {\n <div [class]=\"placeholderClasses()\">\n <svg\n class=\"w-8 h-8 text-slate-300 animate-pulse\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n </div>\n }\n <img\n [src]=\"src\"\n [alt]=\"alt\"\n [class]=\"imageClasses()\"\n [style.display]=\"loading() ? 'none' : 'block'\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError()\"\n />\n @if (_preview() && !loading()) {\n <div [class]=\"previewIconClasses()\">\n <svg class=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\"\n />\n </svg>\n </div>\n }\n</div>\n\n<!-- Preview modal -->\n@if (previewVisible()) {\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/90\"\n (click)=\"closePreview()\"\n >\n <!-- Controls -->\n <div class=\"absolute top-4 right-4 flex items-center gap-2\">\n @if (zoomable) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"zoomOut(); $event.stopPropagation()\"\n aria-label=\"Zoom out\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"zoomIn(); $event.stopPropagation()\"\n aria-label=\"Zoom in\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\"\n />\n </svg>\n </button>\n <span class=\"px-3 py-1 rounded-lg bg-white/10 text-white text-sm\">\n {{ Math.round(zoomLevel() * 100) }}%\n </span>\n }\n @if (rotatable) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"rotateLeft(); $event.stopPropagation()\"\n aria-label=\"Rotate left\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"rotateRight(); $event.stopPropagation()\"\n aria-label=\"Rotate right\"\n >\n <svg\n class=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M21 10H11a8 8 0 00-8 8v2m18-10l-6 6m6-6l-6-6\"\n />\n </svg>\n </button>\n }\n <button\n type=\"button\"\n class=\"p-2 rounded-lg bg-white/10 text-white hover:bg-white/20 transition-colors\"\n (click)=\"closePreview(); $event.stopPropagation()\"\n aria-label=\"Close\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Image -->\n <img\n [src]=\"previewSrc || src\"\n [alt]=\"alt\"\n class=\"max-w-full max-h-full object-contain transition-transform duration-200\"\n [style.transform]=\"'scale(' + zoomLevel() + ') rotate(' + rotation() + 'deg)'\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { TwClassService } from '../core/tw-class.service';\n\nexport type ScrollTopPosition = 'bottom-right' | 'bottom-left' | 'bottom-center';\nexport type ScrollTopVariant = 'primary' | 'secondary' | 'dark';\n\nconst POSITION_CLASSES: Record<ScrollTopPosition, string> = {\n 'bottom-right': 'right-6 bottom-6',\n 'bottom-left': 'left-6 bottom-6',\n 'bottom-center': 'left-1/2 -translate-x-1/2 bottom-6',\n};\n\nconst VARIANT_CLASSES: Record<ScrollTopVariant, string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 text-white shadow-lg hover:shadow-xl',\n secondary:\n 'bg-white hover:bg-slate-50 text-slate-700 border border-slate-200 shadow-lg hover:shadow-xl',\n dark: 'bg-slate-800 hover:bg-slate-900 text-white shadow-lg hover:shadow-xl',\n};\n\n/**\n * Scroll to top button component\n *\n * @example\n * ```html\n * <tw-scroll-top></tw-scroll-top>\n * <tw-scroll-top [threshold]=\"200\" position=\"bottom-left\"></tw-scroll-top>\n * ```\n */\n@Component({\n selector: 'tw-scroll-top',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './scroll-top.component.html',\n})\nexport class TwScrollTopComponent implements OnInit, OnDestroy {\n private readonly twClass = inject(TwClassService);\n private readonly platformId = inject(PLATFORM_ID);\n\n /** Scroll threshold to show button (in pixels) */\n @Input({ transform: numberAttribute }) threshold = 400;\n\n /** Position of the button */\n @Input() position: ScrollTopPosition = 'bottom-right';\n\n /** Visual variant */\n @Input() variant: ScrollTopVariant = 'primary';\n\n /** Scroll behavior */\n @Input() behavior: ScrollBehavior = 'smooth';\n\n /** Target element to scroll (defaults to window) */\n @Input() target: HTMLElement | Window | null = null;\n\n /** Custom icon template */\n @Input() icon: TemplateRef<any> | null = null;\n\n /** Additional classes */\n @Input() classOverride = '';\n\n protected visible = signal(false);\n\n private scrollListener: (() => void) | null = null;\n\n protected buttonClasses = computed(() => {\n const positionClasses = POSITION_CLASSES[this.position];\n const variantClasses = VARIANT_CLASSES[this.variant];\n\n return this.twClass.merge(\n 'fixed z-50 p-3 rounded-full transition-all duration-300',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n 'animate-in fade-in-0 zoom-in-95',\n positionClasses,\n variantClasses,\n this.classOverride\n );\n });\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.setupScrollListener();\n }\n }\n\n ngOnDestroy(): void {\n this.removeScrollListener();\n }\n\n private setupScrollListener(): void {\n const scrollTarget = this.target || window;\n\n this.scrollListener = () => {\n const scrollTop = this.getScrollTop();\n this.visible.set(scrollTop > this.threshold);\n };\n\n scrollTarget.addEventListener('scroll', this.scrollListener, { passive: true });\n // Check initial scroll position\n this.scrollListener();\n }\n\n private removeScrollListener(): void {\n if (this.scrollListener) {\n const scrollTarget = this.target || window;\n scrollTarget.removeEventListener('scroll', this.scrollListener);\n }\n }\n\n private getScrollTop(): number {\n if (this.target instanceof HTMLElement) {\n return this.target.scrollTop;\n }\n return window.scrollY || document.documentElement.scrollTop;\n }\n\n scrollToTop(): void {\n if (this.target instanceof HTMLElement) {\n this.target.scrollTo({ top: 0, behavior: this.behavior });\n } else {\n window.scrollTo({ top: 0, behavior: this.behavior });\n }\n }\n}\n","@if (visible()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n (click)=\"scrollToTop()\"\n aria-label=\"Scroll to top\"\n >\n @if (icon) {\n <ng-container *ngTemplateOutlet=\"icon\"></ng-container>\n } @else {\n <svg class=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n }\n </button>\n}\n","/*\n * Public API Surface of @pegasus-heavy/ngx-tailwindcss\n *\n * This library provides highly customizable Angular components designed\n * for Tailwind CSS 4+. Components use Tailwind utility classes and are\n * designed to work with your custom Tailwind configuration.\n *\n * IMPORTANT: This library does NOT import Tailwind CSS directly.\n * You must configure Tailwind in your application and ensure the\n * content paths include this library's templates.\n */\n\n// Core - Configuration and Services\nexport * from './lib/core/index';\n\n// Directives\nexport * from './lib/directives/index';\n\n// Form Components\nexport * from './lib/button/index';\nexport * from './lib/input/index';\nexport * from './lib/checkbox/index';\nexport * from './lib/radio/index';\nexport * from './lib/switch/index';\nexport * from './lib/select/index';\nexport * from './lib/multiselect/index';\nexport * from './lib/slider/index';\nexport * from './lib/rating/index';\nexport * from './lib/chip/index';\n\n// Layout Components\nexport * from './lib/card/index';\nexport * from './lib/accordion/index';\nexport * from './lib/tabs/index';\nexport * from './lib/divider/index';\nexport * from './lib/container/index';\nexport * from './lib/stack/index';\nexport * from './lib/grid/index';\nexport * from './lib/aspect-ratio/index';\nexport * from './lib/center/index';\nexport * from './lib/spacer/index';\nexport * from './lib/splitter/index';\nexport * from './lib/sticky/index';\nexport * from './lib/scroll-area/index';\nexport * from './lib/columns/index';\nexport * from './lib/bleed/index';\nexport * from './lib/overlay/index';\n\n// Data Display Components\nexport * from './lib/badge/index';\nexport * from './lib/avatar/index';\nexport * from './lib/table/index';\nexport * from './lib/datatables/index';\nexport * from './lib/tree/index';\nexport * from './lib/timeline/index';\n\n// Navigation Components\nexport * from './lib/breadcrumb/index';\nexport * from './lib/pagination/index';\nexport * from './lib/steps/index';\nexport * from './lib/menu/index';\n\n// Feedback Components\nexport * from './lib/alert/index';\nexport * from './lib/toast/index';\nexport * from './lib/spinner/index';\nexport * from './lib/progress/index';\nexport * from './lib/skeleton/index';\n\n// Overlay Components\nexport * from './lib/modal/index';\nexport * from './lib/dropdown/index';\nexport * from './lib/sidebar/index';\nexport * from './lib/popover/index';\n\n// Media Components\nexport * from './lib/image/index';\n\n// Misc Components\nexport * from './lib/scroll-top/index';\n\n// Convenience re-exports for all components\nimport { TW_DIRECTIVES } from './lib/directives/index';\n\nimport { TW_BUTTON_COMPONENTS } from './lib/button/index';\nimport { TW_CARD_COMPONENTS } from './lib/card/index';\nimport { TW_INPUT_COMPONENTS } from './lib/input/index';\nimport { TW_BADGE_COMPONENTS } from './lib/badge/index';\nimport { TW_ALERT_COMPONENTS } from './lib/alert/index';\nimport { TW_MODAL_COMPONENTS } from './lib/modal/index';\nimport { TW_DROPDOWN_COMPONENTS } from './lib/dropdown/index';\nimport { TW_TABS_COMPONENTS } from './lib/tabs/index';\nimport { TwAvatarComponent, TwAvatarGroupComponent } from './lib/avatar/index';\nimport { TwLoadingOverlayComponent, TwSpinnerComponent } from './lib/spinner/index';\nimport { TwProgressCircularComponent, TwProgressComponent } from './lib/progress/index';\nimport {\n TwSkeletonCardComponent,\n TwSkeletonComponent,\n TwSkeletonTableComponent,\n TwSkeletonTextComponent,\n} from './lib/skeleton/index';\nimport { TwToastComponent, TwToastContainerComponent } from './lib/toast/index';\nimport { TwBreadcrumbComponent } from './lib/breadcrumb/index';\nimport { TwPaginationComponent } from './lib/pagination/index';\nimport { TwAccordionComponent, TwAccordionItemComponent } from './lib/accordion/index';\nimport { TwDividerComponent } from './lib/divider/index';\n\n// New form components\nimport { TwCheckboxComponent } from './lib/checkbox/index';\nimport { TwRadioButtonComponent, TwRadioGroupComponent } from './lib/radio/index';\nimport { TwSwitchComponent } from './lib/switch/index';\nimport { TwSelectComponent } from './lib/select/index';\nimport { TwMultiSelectComponent } from './lib/multiselect/index';\nimport { TwSliderComponent } from './lib/slider/index';\nimport { TwRatingComponent } from './lib/rating/index';\nimport { TwChipComponent, TwChipsComponent } from './lib/chip/index';\n\n// New data display components\nimport { TwTableComponent } from './lib/table/index';\nimport { TwDatatablesComponent } from './lib/datatables/index';\nimport { TwTreeComponent } from './lib/tree/index';\nimport { TwTimelineComponent } from './lib/timeline/index';\n\n// New navigation components\nimport { TwStepsComponent } from './lib/steps/index';\nimport { TwContextMenuComponent, TwMenuComponent } from './lib/menu/index';\n\n// New overlay components\nimport { TwSidebarComponent } from './lib/sidebar/index';\nimport { TwPopoverComponent } from './lib/popover/index';\n\n// New media components\nimport { TwImageComponent } from './lib/image/index';\n\n// Misc components\nimport { TwScrollTopComponent } from './lib/scroll-top/index';\n\n// Layout components\nimport { TwContainerComponent } from './lib/container/index';\nimport { TwHStackComponent, TwStackComponent, TwVStackComponent } from './lib/stack/index';\nimport { TwGridComponent, TwSimpleGridComponent } from './lib/grid/index';\nimport { TwAspectRatioComponent } from './lib/aspect-ratio/index';\nimport { TwCenterComponent, TwCircleComponent, TwSquareComponent } from './lib/center/index';\nimport { TwSpacerComponent, TwWrapComponent } from './lib/spacer/index';\nimport { TwSplitterComponent, TwSplitterPaneComponent } from './lib/splitter/index';\nimport { TwStickyComponent } from './lib/sticky/index';\nimport { TwScrollAreaComponent } from './lib/scroll-area/index';\nimport { TwColumnsComponent } from './lib/columns/index';\nimport { TwBleedComponent } from './lib/bleed/index';\nimport { TwOverlayComponent } from './lib/overlay/index';\n\nexport const TW_AVATAR_COMPONENTS = [TwAvatarComponent, TwAvatarGroupComponent] as const;\n\nexport const TW_SPINNER_COMPONENTS = [TwSpinnerComponent, TwLoadingOverlayComponent] as const;\n\nexport const TW_PROGRESS_COMPONENTS = [TwProgressComponent, TwProgressCircularComponent] as const;\n\nexport const TW_SKELETON_COMPONENTS = [\n TwSkeletonComponent,\n TwSkeletonTextComponent,\n TwSkeletonCardComponent,\n TwSkeletonTableComponent,\n] as const;\n\nexport const TW_TOAST_COMPONENTS = [TwToastComponent, TwToastContainerComponent] as const;\n\nexport const TW_BREADCRUMB_COMPONENTS = [TwBreadcrumbComponent] as const;\n\nexport const TW_PAGINATION_COMPONENTS = [TwPaginationComponent] as const;\n\nexport const TW_ACCORDION_COMPONENTS = [TwAccordionComponent, TwAccordionItemComponent] as const;\n\nexport const TW_DIVIDER_COMPONENTS = [TwDividerComponent] as const;\n\n// New component groups\nexport const TW_CHECKBOX_COMPONENTS = [TwCheckboxComponent] as const;\n\nexport const TW_RADIO_COMPONENTS = [TwRadioButtonComponent, TwRadioGroupComponent] as const;\n\nexport const TW_SWITCH_COMPONENTS = [TwSwitchComponent] as const;\n\nexport const TW_SELECT_COMPONENTS = [TwSelectComponent] as const;\n\nexport const TW_MULTISELECT_COMPONENTS = [TwMultiSelectComponent] as const;\n\nexport const TW_SLIDER_COMPONENTS = [TwSliderComponent] as const;\n\nexport const TW_RATING_COMPONENTS = [TwRatingComponent] as const;\n\nexport const TW_CHIP_COMPONENTS = [TwChipComponent, TwChipsComponent] as const;\n\nexport const TW_TABLE_COMPONENTS = [TwTableComponent] as const;\nexport const TW_DATATABLES_COMPONENTS = [TwDatatablesComponent] as const;\n\nexport const TW_TREE_COMPONENTS = [TwTreeComponent] as const;\n\nexport const TW_TIMELINE_COMPONENTS = [TwTimelineComponent] as const;\n\nexport const TW_STEPS_COMPONENTS = [TwStepsComponent] as const;\n\nexport const TW_MENU_COMPONENTS = [TwMenuComponent, TwContextMenuComponent] as const;\n\nexport const TW_SIDEBAR_COMPONENTS = [TwSidebarComponent] as const;\n\nexport const TW_POPOVER_COMPONENTS = [TwPopoverComponent] as const;\n\nexport const TW_IMAGE_COMPONENTS = [TwImageComponent] as const;\n\nexport const TW_SCROLL_TOP_COMPONENTS = [TwScrollTopComponent] as const;\n\n// New layout component groups\nexport const TW_CONTAINER_COMPONENTS = [TwContainerComponent] as const;\n\nexport const TW_STACK_COMPONENTS = [\n TwStackComponent,\n TwVStackComponent,\n TwHStackComponent,\n] as const;\n\nexport const TW_GRID_COMPONENTS = [TwGridComponent, TwSimpleGridComponent] as const;\n\nexport const TW_ASPECT_RATIO_COMPONENTS = [TwAspectRatioComponent] as const;\n\nexport const TW_CENTER_COMPONENTS = [\n TwCenterComponent,\n TwSquareComponent,\n TwCircleComponent,\n] as const;\n\nexport const TW_SPACER_COMPONENTS = [TwSpacerComponent, TwWrapComponent] as const;\n\n// New layout component groups\nexport const TW_SPLITTER_COMPONENTS = [TwSplitterComponent, TwSplitterPaneComponent] as const;\n\nexport const TW_STICKY_COMPONENTS = [TwStickyComponent] as const;\n\nexport const TW_SCROLL_AREA_COMPONENTS = [TwScrollAreaComponent] as const;\n\nexport const TW_COLUMNS_COMPONENTS = [TwColumnsComponent] as const;\n\nexport const TW_BLEED_COMPONENTS = [TwBleedComponent] as const;\n\nexport const TW_OVERLAY_COMPONENTS = [TwOverlayComponent] as const;\n\n/**\n * All ngx-tailwindcss components and directives\n * Use this for convenience when you want to import everything\n *\n * @example\n * ```typescript\n * import { TW_ALL } from '@pegasus-heavy/ngx-tailwindcss';\n *\n * @Component({\n * imports: [...TW_ALL],\n * })\n * export class MyComponent {}\n * ```\n */\nexport const TW_ALL = [\n ...TW_DIRECTIVES,\n // Form\n ...TW_BUTTON_COMPONENTS,\n ...TW_INPUT_COMPONENTS,\n ...TW_CHECKBOX_COMPONENTS,\n ...TW_RADIO_COMPONENTS,\n ...TW_SWITCH_COMPONENTS,\n ...TW_SELECT_COMPONENTS,\n ...TW_MULTISELECT_COMPONENTS,\n ...TW_SLIDER_COMPONENTS,\n ...TW_RATING_COMPONENTS,\n ...TW_CHIP_COMPONENTS,\n // Layout\n ...TW_CARD_COMPONENTS,\n ...TW_ACCORDION_COMPONENTS,\n ...TW_TABS_COMPONENTS,\n ...TW_DIVIDER_COMPONENTS,\n ...TW_CONTAINER_COMPONENTS,\n ...TW_STACK_COMPONENTS,\n ...TW_GRID_COMPONENTS,\n ...TW_ASPECT_RATIO_COMPONENTS,\n ...TW_CENTER_COMPONENTS,\n ...TW_SPACER_COMPONENTS,\n ...TW_SPLITTER_COMPONENTS,\n ...TW_STICKY_COMPONENTS,\n ...TW_SCROLL_AREA_COMPONENTS,\n ...TW_COLUMNS_COMPONENTS,\n ...TW_BLEED_COMPONENTS,\n ...TW_OVERLAY_COMPONENTS,\n // Data Display\n ...TW_BADGE_COMPONENTS,\n ...TW_AVATAR_COMPONENTS,\n ...TW_TABLE_COMPONENTS,\n ...TW_DATATABLES_COMPONENTS,\n ...TW_TREE_COMPONENTS,\n ...TW_TIMELINE_COMPONENTS,\n // Navigation\n ...TW_BREADCRUMB_COMPONENTS,\n ...TW_PAGINATION_COMPONENTS,\n ...TW_STEPS_COMPONENTS,\n ...TW_MENU_COMPONENTS,\n // Feedback\n ...TW_ALERT_COMPONENTS,\n ...TW_TOAST_COMPONENTS,\n ...TW_SPINNER_COMPONENTS,\n ...TW_PROGRESS_COMPONENTS,\n ...TW_SKELETON_COMPONENTS,\n // Overlay\n ...TW_MODAL_COMPONENTS,\n ...TW_DROPDOWN_COMPONENTS,\n ...TW_SIDEBAR_COMPONENTS,\n ...TW_POPOVER_COMPONENTS,\n // Media\n ...TW_IMAGE_COMPONENTS,\n // Misc\n ...TW_SCROLL_TOP_COMPONENTS,\n] as const;\n\nexport { TW_CORE_DIRECTIVES, TW_DX_DIRECTIVES } from './lib/directives/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TwRippleDirective","i1.TwClassService","TW_CONTAINER_COMPONENTS","TW_STACK_COMPONENTS","GAP_CLASSES","TW_GRID_COMPONENTS","TW_ASPECT_RATIO_COMPONENTS","TW_CENTER_COMPONENTS","TW_SPACER_COMPONENTS","TW_DATATABLES_COMPONENTS"],"mappings":"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"}
|