@abdelfattahqandil21/ryzen-ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abdelfattahqandil21-ryzen-ui.mjs","sources":["../../../projects/rz-lib/src/lib/form/form.interface.ts","../../../projects/rz-lib/src/lib/form/checkbox/checkbox.component.ts","../../../projects/rz-lib/src/lib/form/checkbox/checkbox.component.html","../../../projects/rz-lib/src/lib/form/date-picker/date-picker.component.ts","../../../projects/rz-lib/src/lib/form/date-picker/date-picker.component.html","../../../projects/rz-lib/src/lib/form/drop-down/drop-down.component.ts","../../../projects/rz-lib/src/lib/form/drop-down/drop-down.component.html","../../../projects/rz-lib/src/lib/form/file-upload/file-upload.component.ts","../../../projects/rz-lib/src/lib/form/file-upload/file-upload.component.html","../../../projects/rz-lib/src/lib/form/multi-select/multi-select.component.ts","../../../projects/rz-lib/src/lib/form/multi-select/multi-select.component.html","../../../projects/rz-lib/src/lib/form/password-input/password-input.component.ts","../../../projects/rz-lib/src/lib/form/password-input/password-input.component.html","../../../projects/rz-lib/src/lib/form/search-input/search-input.component.ts","../../../projects/rz-lib/src/lib/form/search-input/search-input.component.html","../../../projects/rz-lib/src/lib/form/text-input/text-input.component.ts","../../../projects/rz-lib/src/lib/form/text-input/text-input.component.html","../../../projects/rz-lib/src/lib/form/toggle/toggle.component.ts","../../../projects/rz-lib/src/lib/form/toggle/toggle.component.html","../../../projects/rz-lib/src/lib/data-display/badge/badge.component.ts","../../../projects/rz-lib/src/lib/data-display/badge/badge.component.html","../../../projects/rz-lib/src/lib/data-display/banner-slider/banner-slider.component.ts","../../../projects/rz-lib/src/lib/data-display/banner-slider/banner-slider.component.html","../../../projects/rz-lib/src/lib/data-display/carousel/carousel.component.ts","../../../projects/rz-lib/src/lib/data-display/carousel/carousel.component.html","../../../projects/rz-lib/src/lib/data-display/empty-state/empty-state.component.ts","../../../projects/rz-lib/src/lib/data-display/empty-state/empty-state.component.html","../../../projects/rz-lib/src/lib/data-display/image-upload/image-upload.component.ts","../../../projects/rz-lib/src/lib/data-display/image-upload/image-upload.component.html","../../../projects/rz-lib/src/lib/data-display/skeleton/skeleton.component.ts","../../../projects/rz-lib/src/lib/data-display/skeleton/skeleton.component.html","../../../projects/rz-lib/src/lib/data-display/table-skeleton/table-skeleton.component.ts","../../../projects/rz-lib/src/lib/data-display/table-skeleton/table-skeleton.component.html","../../../projects/rz-lib/src/lib/data-display/tooltip/tooltip.component.ts","../../../projects/rz-lib/src/lib/data-display/tooltip/tooltip.component.html","../../../projects/rz-lib/src/lib/data-display/table/table.component.ts","../../../projects/rz-lib/src/lib/data-display/table/table.component.html","../../../projects/rz-lib/src/lib/feedback/alert/alert.component.ts","../../../projects/rz-lib/src/lib/feedback/alert/alert.component.html","../../../projects/rz-lib/src/lib/feedback/spinner/spinner.component.ts","../../../projects/rz-lib/src/lib/feedback/spinner/spinner.component.html","../../../projects/rz-lib/src/lib/feedback/toast/toast.service.ts","../../../projects/rz-lib/src/lib/feedback/toast/toast.component.ts","../../../projects/rz-lib/src/lib/feedback/toast/toast.component.html","../../../projects/rz-lib/src/lib/navigation/accordion/accordion-panel.component.ts","../../../projects/rz-lib/src/lib/navigation/accordion/accordion-panel.component.html","../../../projects/rz-lib/src/lib/navigation/accordion/accordion.component.ts","../../../projects/rz-lib/src/lib/navigation/nav/nav.component.ts","../../../projects/rz-lib/src/lib/navigation/nav/nav.component.html","../../../projects/rz-lib/src/lib/navigation/sidebar/sidebar.component.ts","../../../projects/rz-lib/src/lib/navigation/sidebar/sidebar.component.html","../../../projects/rz-lib/src/lib/overlay/confirm-dialog/confirm-dialog.component.ts","../../../projects/rz-lib/src/lib/overlay/confirm-dialog/confirm-dialog.component.html","../../../projects/rz-lib/src/lib/overlay/modal/modal.component.ts","../../../projects/rz-lib/src/lib/overlay/modal/modal.component.html","../../../projects/rz-lib/src/public-api.ts","../../../projects/rz-lib/src/abdelfattahqandil21-ryzen-ui.ts"],"sourcesContent":["export type FieldSize = 'sm' | 'md' | 'lg';\n\nexport const THEME_COLORS = [\n 'primary',\n 'secondary',\n 'accent',\n 'success',\n 'warning',\n 'danger',\n 'info',\n] as const;\n\nexport type ThemeColor = (typeof THEME_COLORS)[number];\n\nexport function isThemeColor(value: string): value is ThemeColor {\n return THEME_COLORS.includes(value as ThemeColor);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\n\n@Component({\n selector: 'app-checkbox',\n imports: [],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--cb-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n readonly checked = model(false);\n readonly label = input('');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly indeterminate = input(false);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input<string>('');\n\n readonly _size = computed(() => this.size());\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n toggle(): void {\n if (this.disabled()) return;\n this.checked.update(v => !v);\n }\n}\n","<label class=\"cb-field\" [class.is-disabled]=\"disabled()\">\n <span\n class=\"cb-box\"\n [class.is-checked]=\"checked()\"\n [class.is-indeterminate]=\"indeterminate() && !checked()\"\n role=\"checkbox\"\n [attr.aria-checked]=\"indeterminate() && !checked() ? 'mixed' : checked()\"\n tabindex=\"0\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n >\n @if (checked()) {\n <i class=\"pi pi-check\" style=\"color:white;font-weight:700\"></i>\n } @else if (indeterminate()) {\n <span class=\"w-2 h-0.5 rounded-full\" style=\"background:white\"></span>\n }\n </span>\n\n @if (label()) {\n <span class=\"cb-label\">{{ label() }}</span>\n }\n</label>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, model, OnDestroy, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\nimport type { CalendarDay, DatePickerConfig, ViewMode } from './date-picker.interface';\n\n@Component({\n selector: 'app-date-picker',\n imports: [],\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--date-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatePickerComponent implements OnDestroy {\n private _elementRef = inject(ElementRef);\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n private _docClickCleanup: (() => void) | undefined;\n private readonly _today = signal<Date>((() => { const d = new Date(); d.setHours(0, 0, 0, 0); return d; })());\n\n readonly value = model<Date | null>(null);\n\n readonly placeholder = input('Select date');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly format = input<'dd/MM/yyyy' | 'MM/dd/yyyy' | 'yyyy-MM-dd'>('dd/MM/yyyy');\n readonly width = input<string>('');\n readonly config = input<DatePickerConfig>({});\n\n readonly _size = computed(() => this.size());\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _accentColorValue = computed(() => {\n const c = this.accentColor();\n if (c && !isThemeColor(c)) return c;\n const key = c && isThemeColor(c) ? c : 'primary';\n const fallbacks: Record<string, string> = { primary: 'oklch(0.32 0.09 258)', secondary: 'oklch(0.55 0.12 40)', accent: 'oklch(0.64 0.2 50)', success: 'oklch(0.55 0.18 145)', warning: 'oklch(0.68 0.18 75)', danger: 'oklch(0.55 0.22 25)', info: 'oklch(0.55 0.15 235)' };\n return `var(--color-${key}, ${fallbacks[key]})`;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n readonly _panelDirection = signal<'up' | 'down'>('down');\n readonly _panelX = signal(0);\n readonly _panelY = signal(0);\n readonly _panelWidth = signal(0);\n private _panelEl: HTMLElement | null = null;\n readonly _viewDate = signal(new Date());\n readonly _viewMode = signal<ViewMode>('days');\n readonly _decade = signal(2020);\n\n readonly _monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n readonly _weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n readonly _weekdaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\n readonly _monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n readonly _displayValue = computed(() => {\n const date = this.value();\n if (!date) return '';\n const d = String(date.getDate()).padStart(2, '0');\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const y = date.getFullYear();\n switch (this.format()) {\n case 'MM/dd/yyyy': return `${m}/${d}/${y}`;\n case 'yyyy-MM-dd': return `${y}-${m}-${d}`;\n default: return `${d}/${m}/${y}`;\n }\n });\n\n readonly _monthName = computed(() => this._monthNames[this._viewDate().getMonth()]);\n readonly _year = computed(() => this._viewDate().getFullYear());\n readonly _decadeLabel = computed(() => `${this._decade()} - ${this._decade() + 9}`);\n\n readonly _appendToParent = computed(() => this.config().appendToParent ?? false);\n readonly _panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null);\n readonly _showTodayBtn = computed(() => this.config().showTodayButton !== false);\n readonly _showYearNav = computed(() => this.config().showYearNavigation !== false);\n readonly _firstDay = computed(() => this.config().firstDayOfWeek ?? 0);\n\n readonly _weekDaysOrdered = computed(() => {\n const arr = [...this._weekdays];\n if (this._firstDay() === 1) arr.push(arr.shift()!);\n return arr;\n });\n\n readonly _yearsList = computed(() =>\n Array.from({ length: 10 }, (_, i) => this._decade() + i)\n );\n\n readonly _calendarDays = computed<CalendarDay[]>(() => {\n const viewDate = this._viewDate();\n const selectedDate = this.value();\n const cfg = this.config();\n const today = this._today();\n\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n let startOffset = firstDay.getDay() - this._firstDay();\n if (startOffset < 0) startOffset += 7;\n\n const days: CalendarDay[] = [];\n\n const prevLast = new Date(year, month, 0).getDate();\n for (let i = startOffset - 1; i >= 0; i--) {\n const date = new Date(year, month - 1, prevLast - i);\n days.push(this._toDay(date, false, today, selectedDate, cfg));\n }\n\n for (let d = 1; d <= lastDay.getDate(); d++) {\n const date = new Date(year, month, d);\n days.push(this._toDay(date, true, today, selectedDate, cfg));\n }\n\n const remaining = 42 - days.length;\n for (let d = 1; d <= remaining; d++) {\n const date = new Date(year, month + 1, d);\n days.push(this._toDay(date, false, today, selectedDate, cfg));\n }\n\n return days;\n });\n\n private _toDay(date: Date, isCurrent: boolean, today: Date, selected: Date | null, cfg: DatePickerConfig): CalendarDay {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const t = new Date(today);\n t.setHours(0, 0, 0, 0);\n const sel = selected ? new Date(selected.getFullYear(), selected.getMonth(), selected.getDate()) : null;\n\n const disabled = (cfg.minDate && d < cfg.minDate)\n || (cfg.maxDate && d > cfg.maxDate)\n || !!cfg.disabledDates?.some(x => this._sameDay(x, date));\n\n const highlighted = !!cfg.highlightedDates?.some(x => this._sameDay(x, date));\n\n return {\n date,\n day: date.getDate(),\n isCurrentMonth: isCurrent,\n isToday: d.getTime() === t.getTime(),\n isSelected: !!sel && d.getTime() === sel.getTime(),\n isDisabled: disabled,\n isHighlighted: highlighted,\n };\n }\n\n private _sameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate();\n }\n\n /* ── input computed classes ── */\n\n readonly _inputSizeCls = computed(() => {\n const s = this.size();\n return s === 'sm' ? 'py-1 pl-2 pr-8 text-xs' : s === 'lg' ? 'py-3 pl-4 pr-10 text-base' : 'py-2 pl-3 pr-10 text-sm';\n });\n\n readonly _iconCls = computed(() => {\n const s = this.size();\n const r = s === 'sm' ? 'right-2' : s === 'lg' ? 'right-3' : 'right-2.5';\n const f = s === 'sm' ? 'text-xs' : s === 'lg' ? 'text-lg' : 'text-sm';\n return `absolute top-1/2 -translate-y-1/2 ${r} ${f} text-[var(--date-accent)] pointer-events-none`;\n });\n\n /* ── actions ── */\n\n _onTriggerClick(event: Event): void {\n if (this.disabled()) return;\n if (this._isOpen()) { this._close(); return; }\n this._open();\n }\n\n _onPanelClick(event: Event): void {\n event.stopPropagation();\n }\n\n private _open(): void {\n this._isClosing.set(false);\n this._isOpen.set(true);\n const d = new Date(); d.setHours(0, 0, 0, 0);\n this._today.set(d);\n this._viewMode.set('days');\n const val = this.value();\n if (val) this._viewDate.set(new Date(val.getFullYear(), val.getMonth(), 1));\n this._decade.set(Math.floor(this._viewDate().getFullYear() / 10) * 10);\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n this._panelDirection.set(window.innerHeight - rect.bottom >= 320 ? 'down' : 'up');\n if (this._appendToParent()) {\n this._panelX.set(rect.left);\n this._panelY.set(this._panelDirection() === 'down' ? rect.bottom : rect.top);\n this._panelWidth.set(rect.width);\n setTimeout(() => this._attachToBody());\n }\n const handler = (e: Event) => this._onDocClick(e);\n document.addEventListener('click', handler);\n this._docClickCleanup = () => document.removeEventListener('click', handler);\n }\n\n private _attachToBody(): void {\n const panel = this._elementRef.nativeElement.querySelector('[data-dp-panel]');\n if (panel) {\n document.body.appendChild(panel);\n this._panelEl = panel;\n }\n }\n\n private _detachFromBody(): void {\n if (!this._panelEl) return;\n const wrapper = this._elementRef.nativeElement.querySelector('.dp-wrapper');\n if (wrapper && this._panelEl.parentNode !== wrapper) {\n wrapper.appendChild(this._panelEl);\n }\n this._panelEl = null;\n }\n\n private _close(): void {\n if (!this._isOpen()) return;\n this._docClickCleanup?.();\n this._docClickCleanup = undefined;\n if (this._closeTimer) clearTimeout(this._closeTimer);\n this._isClosing.set(true);\n if (this._appendToParent()) this._detachFromBody();\n this._closeTimer = setTimeout(() => {\n this._isOpen.set(false);\n this._isClosing.set(false);\n this._viewMode.set('days');\n this._closeTimer = null;\n }, 150);\n }\n\n ngOnDestroy(): void {\n this._docClickCleanup?.();\n if (this._closeTimer) clearTimeout(this._closeTimer);\n if (this._panelEl && document.body.contains(this._panelEl)) {\n document.body.removeChild(this._panelEl);\n this._panelEl = null;\n }\n }\n\n _selectDate(date: Date): void {\n const d = new Date(date);\n const cfg = this.config();\n if (cfg.minDate && d < cfg.minDate) return;\n if (cfg.maxDate && d > cfg.maxDate) return;\n if (cfg.disabledDates?.some(x => this._sameDay(x, d))) return;\n this.value.set(d);\n this._close();\n }\n\n _selectMonth(idx: number): void {\n this._viewDate.set(new Date(this._year(), idx, 1));\n this._viewMode.set('days');\n }\n\n _selectYear(year: number): void {\n this._viewDate.set(new Date(year, this._viewDate().getMonth(), 1));\n this._viewMode.set('months');\n }\n\n _prevMonth(): void { this._viewDate.update(d => new Date(d.getFullYear(), d.getMonth() - 1, 1)); }\n _nextMonth(): void { this._viewDate.update(d => new Date(d.getFullYear(), d.getMonth() + 1, 1)); }\n _prevYear(): void { this._viewDate.update(d => new Date(d.getFullYear() - 1, d.getMonth(), 1)); }\n _nextYear(): void { this._viewDate.update(d => new Date(d.getFullYear() + 1, d.getMonth(), 1)); }\n _prevDecade(): void { this._decade.update(v => v - 10); }\n _nextDecade(): void { this._decade.update(v => v + 10); }\n\n _showMonths(): void { this._viewMode.set('months'); }\n _showYears(): void {\n this._decade.set(Math.floor(this._viewDate().getFullYear() / 10) * 10);\n this._viewMode.set('years');\n }\n\n _prevPeriod(): void {\n const m = this._viewMode();\n if (m === 'days') this._prevMonth();\n else if (m === 'months') this._prevYear();\n else this._prevDecade();\n }\n\n _nextPeriod(): void {\n const m = this._viewMode();\n if (m === 'days') this._nextMonth();\n else if (m === 'months') this._nextYear();\n else this._nextDecade();\n }\n\n _goToToday(): void {\n const today = new Date();\n this._viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n this._viewMode.set('days');\n this._selectDate(today);\n }\n\n _clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n _isCurrentMonth(idx: number): boolean { return this._viewDate().getMonth() === idx; }\n _isCurrentYear(year: number): boolean { return this._viewDate().getFullYear() === year; }\n\n _onDocClick(event: Event): void {\n if (!this._isOpen()) return;\n const target = event.target as Node;\n if (this._elementRef.nativeElement.contains(target)) return;\n if (this._panelEl?.contains(target)) return;\n this._close();\n }\n}\n","<div class=\"relative dp-wrapper\">\n <label class=\"flex items-center w-full\" (click)=\"_onTriggerClick($event)\">\n <input\n class=\"w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--date-bg)] border border-[var(--date-border)] rounded-[var(--date-radius)] text-[var(--date-text)] font-[var(--font-sans)] placeholder:text-[var(--date-muted)] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer focus:border-[var(--date-accent)] focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--date-accent)_20%,transparent)]\"\n [class]=\"_inputSizeCls()\"\n type=\"text\"\n readonly\n [attr.placeholder]=\"placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"_displayValue()\"\n />\n\n @if (_displayValue() && !disabled()) {\n <button class=\"absolute top-1/2 -translate-y-1/2 right-8 flex items-center justify-center p-0 border-none bg-transparent cursor-pointer text-[var(--date-muted)] hover:text-[var(--date-text)] transition-colors duration-150\" type=\"button\" (click)=\"_clear($event)\" aria-label=\"Clear date\">\n <i class=\"pi pi-times text-xs sm:text-sm lg:text-base\"></i>\n </button>\n }\n\n <i [class]=\"_iconCls() + ' pi pi-calendar'\"></i>\n </label>\n\n @if (_isOpen() || _isClosing()) {\n <div\n data-dp-panel\n class=\"left-0 z-50 w-full min-w-60 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--radius-md)] shadow-lg overflow-hidden text-[var(--color-text)]\"\n [class.absolute]=\"!_appendToParent()\"\n [style.position]=\"_panelFixed()\"\n [style.left.px]=\"_appendToParent() ? _panelX() : null\"\n [style.top.px]=\"_appendToParent() ? _panelY() : null\"\n [style.width.px]=\"_appendToParent() ? _panelWidth() : null\"\n [class.top-full]=\"!_appendToParent() && _panelDirection() === 'down'\"\n [class.bottom-full]=\"!_appendToParent() && _panelDirection() === 'up'\"\n [class.dp-fade-in]=\"_isOpen() && !_isClosing()\"\n [class.dp-fade-out]=\"_isClosing()\"\n (click)=\"_onPanelClick($event)\">\n <div [style.background-color]=\"_accentColorValue()\" class=\"text-white px-3 py-2.5\">\n <!-- top row: nav arrows + month/year title -->\n <div class=\"flex items-center justify-between mb-1.5\">\n @if (_viewMode() === 'days' && _showYearNav()) {\n <button type=\"button\" (click)=\"_prevYear()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-white/80 hover:bg-white/20 cursor-pointer transition-colors\" aria-label=\"Previous year\">\n <i class=\"pi pi-angle-double-left text-xs\"></i>\n </button>\n }\n @if (_viewMode() !== 'years') {\n <button type=\"button\" (click)=\"_prevPeriod()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-white/80 hover:bg-white/20 cursor-pointer transition-colors\" aria-label=\"Previous\">\n <i class=\"pi pi-angle-left text-sm\"></i>\n </button>\n }\n\n <div class=\"flex items-center gap-1 text-sm font-semibold\">\n @if (_viewMode() === 'days') {\n <button type=\"button\" (click)=\"_showMonths()\" class=\"px-1.5 py-0.5 border-none rounded bg-transparent text-white hover:bg-white/20 cursor-pointer transition-colors\">{{ _monthName() }}</button>\n <button type=\"button\" (click)=\"_showYears()\" class=\"px-1.5 py-0.5 border-none rounded bg-transparent text-white hover:bg-white/20 cursor-pointer transition-colors\">{{ _year() }}</button>\n }\n @if (_viewMode() === 'months') {\n <button type=\"button\" (click)=\"_showYears()\" class=\"px-1.5 py-0.5 border-none rounded bg-transparent text-white hover:bg-white/20 cursor-pointer transition-colors\">{{ _year() }}</button>\n }\n @if (_viewMode() === 'years') {\n <span class=\"px-1.5\">{{ _decadeLabel() }}</span>\n }\n </div>\n\n @if (_viewMode() !== 'years') {\n <button type=\"button\" (click)=\"_nextPeriod()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-white/80 hover:bg-white/20 cursor-pointer transition-colors\" aria-label=\"Next\">\n <i class=\"pi pi-angle-right text-sm\"></i>\n </button>\n }\n @if (_viewMode() === 'days' && _showYearNav()) {\n <button type=\"button\" (click)=\"_nextYear()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-white/80 hover:bg-white/20 cursor-pointer transition-colors\" aria-label=\"Next year\">\n <i class=\"pi pi-angle-double-right text-xs\"></i>\n </button>\n }\n </div>\n\n <!-- today button -->\n @if (_showTodayBtn() && _viewMode() === 'days') {\n <button type=\"button\" (click)=\"_goToToday()\" class=\"w-full flex items-center justify-center gap-1.5 py-1 px-2 border-none rounded bg-white/20 hover:bg-white/30 text-white text-xs cursor-pointer transition-colors\">\n <i class=\"pi pi-calendar-plus text-xs\"></i>\n Today\n </button>\n }\n </div>\n\n <!-- ===== DAYS VIEW ===== -->\n @if (_viewMode() === 'days') {\n <div class=\"p-2.5\">\n <div class=\"grid grid-cols-7 mb-0.5\">\n @for (day of _weekDaysOrdered(); track $index) {\n <div class=\"flex items-center justify-center h-7 text-xs font-medium text-[var(--color-text-muted)] font-[var(--font-sans)]\">{{ day }}</div>\n }\n </div>\n <div class=\"grid grid-cols-7 gap-0.5\">\n @for (day of _calendarDays(); track day.date.getTime()) {\n @if (day.date.getMonth() === _viewDate().getMonth() || day.date.getMonth() === _viewDate().getMonth() - 1 || day.date.getMonth() === _viewDate().getMonth() + 1) {\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-9 h-9 p-0 border-none rounded-full cursor-pointer text-sm font-[var(--font-sans)] transition-all duration-150\"\n [class.text-[var(--color-text-muted)]]=\"!day.isCurrentMonth && !day.isSelected\"\n [class.text-[var(--color-text)]]=\"day.isCurrentMonth && !day.isSelected && !day.isToday\"\n [class.font-semibold]=\"day.isToday || day.isSelected\"\n [class.bg-[var(--date-accent)]]=\"day.isSelected\"\n [class.text-white]=\"day.isSelected\"\n [class.ring-2]=\"day.isToday && !day.isSelected\"\n [class.ring-[var(--date-accent)]]=\"day.isToday && !day.isSelected\"\n [class.bg-[var(--color-surface-alt)]]=\"day.isHighlighted && !day.isSelected\"\n [class.hover:bg-[var(--color-surface-alt)]]=\"!day.isSelected && !day.isDisabled\"\n [class.opacity-30]=\"day.isDisabled\"\n [class.cursor-not-allowed]=\"day.isDisabled\"\n [disabled]=\"day.isDisabled\"\n (click)=\"_selectDate(day.date)\"\n [attr.aria-label]=\"day.date.toLocaleDateString()\"\n >{{ day.day }}</button>\n }\n }\n </div>\n </div>\n }\n\n <!-- ===== MONTHS VIEW ===== -->\n @if (_viewMode() === 'months') {\n <div class=\"grid grid-cols-3 gap-2 p-3\">\n @for (month of _monthNames; track $index) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg text-xs font-[var(--font-sans)] transition-colors cursor-pointer\"\n [class.bg-[var(--date-accent)]]=\"_isCurrentMonth($index)\"\n [class.text-white]=\"_isCurrentMonth($index)\"\n [class.text-[var(--color-text)]]=\"!_isCurrentMonth($index)\"\n [class.hover:bg-[var(--color-surface-alt)]]=\"!_isCurrentMonth($index)\"\n (click)=\"_selectMonth($index)\"\n >{{ _monthsShort[$index] }}</button>\n }\n </div>\n }\n\n <!-- ===== YEARS VIEW ===== -->\n @if (_viewMode() === 'years') {\n <div class=\"p-2.5\">\n <div class=\"flex items-center justify-between mb-2 px-1\">\n <button type=\"button\" (click)=\"_prevDecade()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-[var(--date-accent)] hover:bg-[var(--color-surface-alt)] cursor-pointer transition-colors\">\n <i class=\"pi pi-chevron-left text-xs\"></i>\n </button>\n <span class=\"text-sm font-semibold text-[var(--color-text)] font-[var(--font-sans)]\">{{ _decadeLabel() }}</span>\n <button type=\"button\" (click)=\"_nextDecade()\" class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-[var(--date-accent)] hover:bg-[var(--color-surface-alt)] cursor-pointer transition-colors\">\n <i class=\"pi pi-chevron-right text-xs\"></i>\n </button>\n </div>\n <div class=\"grid grid-cols-4 gap-2\">\n @for (year of _yearsList(); track $index) {\n <button\n type=\"button\"\n class=\"p-2 rounded-lg text-xs font-[var(--font-sans)] transition-colors cursor-pointer\"\n [class.bg-[var(--date-accent)]]=\"_isCurrentYear(year)\"\n [class.text-white]=\"_isCurrentYear(year)\"\n [class.text-[var(--color-text)]]=\"!_isCurrentYear(year)\"\n [class.hover:bg-[var(--color-surface-alt)]]=\"!_isCurrentYear(year)\"\n (click)=\"_selectYear(year)\"\n >{{ year }}</button>\n }\n </div>\n </div>\n }\n </div>\n }\n</div>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, model, OnDestroy, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\nimport type { DropdownConfig, DropdownOption } from './drop-down.interface';\n\n@Component({\n selector: 'app-drop-down',\n imports: [],\n templateUrl: './drop-down.component.html',\n styleUrl: './drop-down.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--drop-accent]': '_rawAccent',\n '[style.width]': '_width',\n '(window:scroll)': '_onWindowScroll()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropDownComponent implements OnDestroy {\n private _elementRef = inject(ElementRef);\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n private _docClickCleanup: (() => void) | undefined;\n\n readonly value = model<string | null>(null);\n\n readonly options = input<(DropdownOption | string)[]>([]);\n readonly placeholder = input('Select...');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly searchable = input(false);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input('');\n readonly config = input<DropdownConfig>({});\n\n readonly _size = computed(() => this.size());\n private readonly _direction = computed(() => this.config().direction ?? 'auto');\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _accentColorValue = computed(() => {\n const c = this.accentColor();\n if (c && !isThemeColor(c)) return c;\n const key = c && isThemeColor(c) ? c : 'primary';\n const fallbacks: Record<string, string> = { primary: 'oklch(0.32 0.09 258)', secondary: 'oklch(0.55 0.12 40)', accent: 'oklch(0.64 0.2 50)', success: 'oklch(0.55 0.18 145)', warning: 'oklch(0.68 0.18 75)', danger: 'oklch(0.55 0.22 25)', info: 'oklch(0.55 0.15 235)' };\n return `var(--color-${key}, ${fallbacks[key]})`;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _normalizedOptions = computed<DropdownOption[]>(() =>\n this.options().map(o => typeof o === 'string' ? { label: o, value: o } : o)\n );\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n readonly _panelDirection = signal<'up' | 'down'>('down');\n readonly _panelX = signal(0);\n readonly _panelY = signal(0);\n readonly _panelWidth = signal(0);\n private _panelEl: HTMLElement | null = null;\n\n readonly _searchQuery = signal('');\n\n readonly _appendToParent = computed(() => this.config().appendToParent ?? false);\n readonly _panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null);\n readonly _maxHeight = computed(() => this.config().maxHeight ?? '256px');\n\n readonly _selectedLabel = computed(() => {\n const v = this.value();\n if (!v) return '';\n const found = this._normalizedOptions().find(o => o.value === v);\n return found ? found.label : v;\n });\n\n readonly _filteredOptions = computed(() => {\n const q = this._searchQuery().toLowerCase();\n if (!q) return this._normalizedOptions();\n return this._normalizedOptions().filter(o => o.label.toLowerCase().includes(q));\n });\n\n readonly _inputSizeCls = computed(() => {\n const s = this.size();\n return s === 'sm' ? 'py-1 pl-2 pr-8 text-xs' : s === 'lg' ? 'py-3 pl-4 pr-10 text-base' : 'py-2 pl-3 pr-10 text-sm';\n });\n\n readonly _iconCls = computed(() => {\n const s = this.size();\n const r = s === 'sm' ? 'right-2' : s === 'lg' ? 'right-3' : 'right-2.5';\n const f = s === 'sm' ? 'text-xs' : s === 'lg' ? 'text-lg' : 'text-sm';\n return `absolute top-1/2 -translate-y-1/2 ${r} ${f} text-[var(--drop-muted)] pointer-events-none transition-transform duration-200 ${this._isOpen() ? 'rotate-180' : ''}`;\n });\n\n readonly _optionCls = computed(() => {\n const s = this.size();\n return `w-full text-left border-none cursor-pointer transition-colors duration-100 hover:bg-[color-mix(in_srgb,var(--color-accent)_12%,var(--color-surface))] ${s === 'sm' ? 'px-2 py-1.5 text-xs' : s === 'lg' ? 'px-4 py-3 text-base' : 'px-3 py-2 text-sm'}`;\n });\n\n _onTriggerClick(event: Event): void {\n if (this.disabled()) return;\n if (this._isOpen()) { this._close(); return; }\n this._open();\n }\n\n _onPanelClick(event: Event): void {\n event.stopPropagation();\n }\n\n private _open(): void {\n this._isClosing.set(false);\n this._isOpen.set(true);\n this._searchQuery.set('');\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n const dir = this._direction();\n if (dir === 'up' || dir === 'down') {\n this._panelDirection.set(dir);\n } else {\n const panelH = Math.min(320, parseInt(this._maxHeight()));\n this._panelDirection.set(window.innerHeight - rect.bottom >= panelH + 60 ? 'down' : 'up');\n }\n if (this._appendToParent()) {\n this._panelX.set(rect.left);\n this._panelY.set(this._panelDirection() === 'down' ? rect.bottom : rect.top);\n this._panelWidth.set(rect.width);\n setTimeout(() => this._attachToBody());\n }\n if (this.searchable()) {\n setTimeout(() => {\n const input = this._elementRef.nativeElement.querySelector('[data-dd-search]') as HTMLInputElement;\n input?.focus();\n });\n }\n const handler = (e: Event) => this._onDocClick(e);\n document.addEventListener('click', handler);\n this._docClickCleanup = () => document.removeEventListener('click', handler);\n }\n\n private _close(): void {\n if (!this._isOpen()) return;\n this._docClickCleanup?.();\n this._docClickCleanup = undefined;\n if (this._closeTimer) clearTimeout(this._closeTimer);\n this._isClosing.set(true);\n if (this._appendToParent()) this._detachFromBody();\n this._closeTimer = setTimeout(() => {\n this._isOpen.set(false);\n this._isClosing.set(false);\n this._closeTimer = null;\n }, 150);\n }\n\n private _attachToBody(): void {\n const panel = this._elementRef.nativeElement.querySelector('[data-dd-panel]');\n if (panel) {\n document.body.appendChild(panel);\n this._panelEl = panel;\n }\n }\n\n private _detachFromBody(): void {\n if (!this._panelEl) return;\n const wrapper = this._elementRef.nativeElement.querySelector('.dd-wrapper');\n if (wrapper && this._panelEl.parentNode !== wrapper) {\n wrapper.appendChild(this._panelEl);\n }\n this._panelEl = null;\n }\n\n _selectOption(option: DropdownOption): void {\n this.value.set(option.value as string);\n this._close();\n }\n\n _clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n _onWindowScroll(): void {\n if (this._isOpen() && this._appendToParent()) {\n this._close();\n }\n }\n\n _onDocClick(event: Event): void {\n if (!this._isOpen()) return;\n const target = event.target as Node;\n if (this._elementRef.nativeElement.contains(target)) return;\n if (this._panelEl?.contains(target)) return;\n this._close();\n }\n\n ngOnDestroy(): void {\n this._docClickCleanup?.();\n if (this._closeTimer) clearTimeout(this._closeTimer);\n if (this._panelEl && document.body.contains(this._panelEl)) {\n document.body.removeChild(this._panelEl);\n this._panelEl = null;\n }\n }\n}\n","<div class=\"relative dd-wrapper\">\n <label class=\"flex items-center w-full\" (click)=\"_onTriggerClick($event)\">\n <input\n class=\"w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--drop-bg)] border border-[var(--drop-border)] rounded-[var(--drop-radius)] text-[var(--drop-text)] font-[var(--font-sans)] placeholder:text-[var(--drop-muted)] disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer focus:border-[var(--drop-accent)] focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--drop-accent)_20%,transparent)]\"\n [class]=\"_inputSizeCls()\"\n type=\"text\"\n readonly\n [attr.placeholder]=\"placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"_selectedLabel()\"\n />\n\n @if (_selectedLabel() && !disabled()) {\n <button class=\"absolute top-1/2 -translate-y-1/2 right-8 flex items-center justify-center p-0 border-none bg-transparent cursor-pointer text-[var(--drop-muted)] hover:text-[var(--drop-text)] transition-colors duration-150\" type=\"button\" (click)=\"_clear($event)\" aria-label=\"Clear\">\n <i class=\"pi pi-times text-xs sm:text-sm lg:text-base\"></i>\n </button>\n }\n\n <i [class]=\"_iconCls() + ' pi pi-chevron-down'\"></i>\n </label>\n\n @if (_isOpen() || _isClosing()) {\n <div\n data-dd-panel\n class=\"left-0 z-50 w-full min-w-60 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--radius-md)] shadow-lg overflow-hidden text-[var(--color-text)]\"\n [class.absolute]=\"!_appendToParent()\"\n [style.position]=\"_panelFixed()\"\n [style.left.px]=\"_appendToParent() ? _panelX() : null\"\n [style.top.px]=\"_appendToParent() ? _panelY() : null\"\n [style.width.px]=\"_appendToParent() ? _panelWidth() : null\"\n [class.top-full]=\"!_appendToParent() && _panelDirection() === 'down'\"\n [class.bottom-full]=\"!_appendToParent() && _panelDirection() === 'up'\"\n [class.dd-fade-in]=\"_isOpen() && !_isClosing()\"\n [class.dd-fade-out]=\"_isClosing()\"\n (click)=\"_onPanelClick($event)\">\n\n @if (searchable()) {\n <div class=\"px-2 pt-2\">\n <input\n data-dd-search\n type=\"text\"\n class=\"w-full px-2 py-1.5 text-sm border border-[var(--color-border)] rounded outline-none bg-[var(--color-surface)] text-[var(--color-text)] placeholder:text-[var(--color-text-muted)] focus:border-[var(--color-accent)]\"\n placeholder=\"Search...\"\n [value]=\"_searchQuery()\"\n (input)=\"_searchQuery.set($any($event.target).value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <div\n class=\"overflow-y-auto\"\n [style.max-height]=\"_maxHeight()\"\n (scroll)=\"$event.stopPropagation()\">\n @for (option of _filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"_optionCls()\"\n [class.font-semibold]=\"option.value === value()\"\n [style.background-color]=\"option.value === value() ? 'var(--color-accent)' : null\"\n [style.color]=\"option.value === value() ? 'var(--color-primary-inverse)' : null\"\n (click)=\"_selectOption(option)\"\n >{{ option.label }}</button>\n }\n\n @if (_filteredOptions().length === 0) {\n <div class=\"px-3 py-4 text-center text-sm text-[var(--drop-muted)]\">No results found</div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, output, signal } from '@angular/core';\nimport { type FieldSize } from '../form.interface';\n\n@Component({\n selector: 'app-file-upload',\n imports: [],\n templateUrl: './file-upload.component.html',\n styleUrl: './file-upload.component.css',\n host: {\n '[attr.data-size]': '_size',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadComponent {\n readonly files = model<File[]>([]);\n readonly accept = input('');\n readonly multiple = input(true);\n readonly maxSize = input(0);\n readonly maxFiles = input(0);\n readonly disabled = input(false);\n readonly placeholder = input('Drop files here or click to browse');\n readonly size = input<FieldSize>('md');\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n\n readonly _size = computed(() => this.size());\n readonly _isDragOver = signal(false);\n\n readonly _totalSize = computed(() =>\n this.files().reduce((s, f) => s + f.size, 0)\n );\n\n _onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) this._isDragOver.set(true);\n }\n\n _onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragOver.set(false);\n }\n\n _onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragOver.set(false);\n if (this.disabled()) return;\n const dropped = event.dataTransfer?.files;\n if (dropped) this._addFiles(Array.from(dropped));\n }\n\n _onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) this._addFiles(Array.from(input.files));\n input.value = '';\n }\n\n _removeFile(index: number): void {\n this.files.update(f => f.filter((_, i) => i !== index));\n }\n\n private _addFiles(newFiles: File[]): void {\n let current = this.files();\n if (this.accept()) {\n const accepted = this.accept().split(',').map(a => a.trim().toLowerCase());\n newFiles = newFiles.filter(f =>\n accepted.some(a => f.type.match(a.replace('*', '.*')) || f.name.toLowerCase().endsWith(a.replace('.*', '')))\n );\n }\n if (this.maxSize()) {\n newFiles = newFiles.filter(f => f.size <= this.maxSize());\n }\n if (this.multiple()) {\n const max = this.maxFiles() || Infinity;\n const remaining = max - current.length;\n if (remaining <= 0) return;\n newFiles = newFiles.slice(0, remaining);\n current = [...current, ...newFiles];\n } else {\n current = newFiles.slice(0, 1);\n }\n this.files.set(current);\n }\n\n _formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1048576).toFixed(1)} MB`;\n }\n}\n","<div\n class=\"drop-zone\"\n [class.is-dragover]=\"_isDragOver()\"\n [class.is-disabled]=\"disabled()\"\n (dragover)=\"_onDragOver($event)\"\n (dragleave)=\"_onDragLeave($event)\"\n (drop)=\"_onDrop($event)\"\n (click)=\"_input.click()\"\n>\n <input\n #_input\n type=\"file\"\n [attr.accept]=\"accept() || null\"\n [attr.multiple]=\"multiple() ? true : null\"\n [attr.disabled]=\"disabled() ? true : null\"\n (change)=\"_onFileSelected($event)\"\n style=\"display:none\"\n />\n\n <i class=\"pi pi-cloud-upload\" [class.text-2xl]=\"size() !== 'sm'\" [class.text-xl]=\"size() === 'sm'\"></i>\n\n @if (files().length) {\n <span class=\"text-xs font-medium\">{{ files().length }} file{{ files().length !== 1 ? 's' : '' }} selected</span>\n } @else {\n <span class=\"text-xs\">{{ placeholder() }}</span>\n }\n\n @if (maxSize()) {\n <span class=\"text-[10px] opacity-60\">Max {{ _formatSize(maxSize()) }} per file</span>\n }\n</div>\n\n@if (files().length) {\n <div class=\"file-list\">\n @for (file of files(); track file.name + file.size + file.lastModified; let i = $index) {\n <div class=\"file-item\">\n <i class=\"pi pi-file file-item-icon\"></i>\n <span class=\"file-item-name\" [title]=\"file.name\">{{ file.name }}</span>\n <span class=\"file-item-size\">{{ _formatSize(file.size) }}</span>\n <button type=\"button\" class=\"file-item-remove\" (click)=\"_removeFile(i)\" aria-label=\"Remove file\">&times;</button>\n </div>\n }\n </div>\n}\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, model, OnDestroy, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\nimport type { DropdownOption } from '../drop-down/drop-down.interface';\nimport type { MultiSelectConfig } from './multi-select.interface';\n\n@Component({\n selector: 'app-multi-select',\n imports: [],\n templateUrl: './multi-select.component.html',\n styleUrl: './multi-select.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--drop-accent]': '_rawAccent',\n '[style.width]': '_width',\n '(window:scroll)': '_onWindowScroll()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiSelectComponent implements OnDestroy {\n private _elementRef = inject(ElementRef);\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n private _docClickCleanup: (() => void) | undefined;\n\n readonly value = model<string[]>([]);\n\n readonly options = input<(DropdownOption | string)[]>([]);\n readonly placeholder = input('Select...');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly selectAll = input(true);\n readonly selectAllLabel = input('Select All');\n readonly accentColor = input<string | null>(null);\n readonly searchable = input(false);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input('');\n readonly config = input<MultiSelectConfig>({});\n\n readonly _size = computed(() => this.size());\n private readonly _direction = computed(() => this.config().direction ?? 'auto');\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _normalizedOptions = computed<DropdownOption[]>(() =>\n this.options().map(o => typeof o === 'string' ? { label: o, value: o } : o)\n );\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n readonly _panelDirection = signal<'up' | 'down'>('down');\n readonly _panelX = signal(0);\n readonly _panelY = signal(0);\n readonly _panelWidth = signal(0);\n private _panelEl: HTMLElement | null = null;\n\n readonly _searchQuery = signal('');\n\n readonly _appendToParent = computed(() => this.config().appendToParent ?? false);\n readonly _panelFixed = computed(() => this._isOpen() && this._appendToParent() ? 'fixed' : null);\n readonly _maxHeight = computed(() => this.config().maxHeight ?? '256px');\n\n readonly _selectedLabels = computed(() => {\n const v = this.value();\n if (!v.length) return [];\n return this._normalizedOptions().filter(o => v.includes(o.value as string)).map(o => o.label);\n });\n\n readonly _filteredOptions = computed(() => {\n const q = this._searchQuery().toLowerCase();\n if (!q) return this._normalizedOptions();\n return this._normalizedOptions().filter(o => o.label.toLowerCase().includes(q));\n });\n\n readonly _allFilteredSelected = computed(() => {\n const v = this.value();\n return this._filteredOptions().every(o => v.includes(o.value as string));\n });\n\n readonly _triggerText = computed(() => {\n const labels = this._selectedLabels();\n if (!labels.length) return '';\n if (labels.length === 1) return labels[0];\n return `${labels.length} selected`;\n });\n\n readonly _inputSizeCls = computed(() => {\n const s = this.size();\n return s === 'sm' ? 'py-1 pl-2 pr-8 text-xs' : s === 'lg' ? 'py-3 pl-4 pr-10 text-base' : 'py-2 pl-3 pr-10 text-sm';\n });\n\n readonly _iconCls = computed(() => {\n const s = this.size();\n const r = s === 'sm' ? 'right-2' : s === 'lg' ? 'right-3' : 'right-2.5';\n const f = s === 'sm' ? 'text-xs' : s === 'lg' ? 'text-lg' : 'text-sm';\n return `absolute top-1/2 -translate-y-1/2 ${r} ${f} text-[var(--drop-muted)] pointer-events-none transition-transform duration-200 ${this._isOpen() ? 'rotate-180' : ''}`;\n });\n\n readonly _optionCls = computed(() => {\n const s = this.size();\n return `w-full flex items-center gap-2 text-left border-none cursor-pointer transition-colors duration-100 hover:bg-[color-mix(in_srgb,var(--color-accent)_12%,var(--color-surface))] ${s === 'sm' ? 'px-2 py-1.5 text-xs' : s === 'lg' ? 'px-4 py-3 text-base' : 'px-3 py-2 text-sm'}`;\n });\n\n readonly _chipCls = computed(() => {\n return `ms-chip`;\n });\n\n _isSelected(val: unknown): boolean {\n return this.value().includes(val as string);\n }\n\n _optVal(option: DropdownOption): string {\n return option.value as string;\n }\n\n _onTriggerClick(event: Event): void {\n if (this.disabled()) return;\n if (this._isOpen()) { this._close(); return; }\n this._open();\n }\n\n _onPanelClick(event: Event): void {\n event.stopPropagation();\n }\n\n _onInput(event: Event): void {\n this._searchQuery.set((event.target as HTMLInputElement).value);\n }\n\n private _open(): void {\n this._isClosing.set(false);\n this._isOpen.set(true);\n this._searchQuery.set('');\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n const dir = this._direction();\n if (dir === 'up' || dir === 'down') {\n this._panelDirection.set(dir);\n } else {\n const panelH = Math.min(320, parseInt(this._maxHeight()));\n this._panelDirection.set(window.innerHeight - rect.bottom >= panelH + 60 ? 'down' : 'up');\n }\n if (this._appendToParent()) {\n this._panelX.set(rect.left);\n this._panelY.set(this._panelDirection() === 'down' ? rect.bottom : rect.top);\n this._panelWidth.set(rect.width);\n setTimeout(() => this._attachToBody());\n }\n if (this.searchable()) {\n setTimeout(() => {\n const input = this._elementRef.nativeElement.querySelector('[data-ms-search]') as HTMLInputElement;\n input?.focus();\n });\n }\n const handler = (e: Event) => this._onDocClick(e);\n document.addEventListener('click', handler);\n this._docClickCleanup = () => document.removeEventListener('click', handler);\n }\n\n private _close(): void {\n if (!this._isOpen()) return;\n this._docClickCleanup?.();\n this._docClickCleanup = undefined;\n if (this._closeTimer) clearTimeout(this._closeTimer);\n this._isClosing.set(true);\n if (this._appendToParent()) this._detachFromBody();\n this._closeTimer = setTimeout(() => {\n this._isOpen.set(false);\n this._isClosing.set(false);\n this._closeTimer = null;\n }, 150);\n }\n\n private _attachToBody(): void {\n const panel = this._elementRef.nativeElement.querySelector('[data-ms-panel]');\n if (panel) {\n document.body.appendChild(panel);\n this._panelEl = panel;\n }\n }\n\n private _detachFromBody(): void {\n if (!this._panelEl) return;\n const wrapper = this._elementRef.nativeElement.querySelector('.ms-wrapper');\n if (wrapper && this._panelEl.parentNode !== wrapper) {\n wrapper.appendChild(this._panelEl);\n }\n this._panelEl = null;\n }\n\n _toggleOption(option: DropdownOption): void {\n const val = option.value as string;\n const current = this.value();\n if (current.includes(val)) {\n this.value.set(current.filter(v => v !== val));\n } else {\n this.value.set([...current, val]);\n }\n }\n\n _toggleSelectAll(): void {\n if (this._allFilteredSelected()) {\n const remove = this._filteredOptions().map(o => o.value as string);\n this.value.set(this.value().filter(v => !remove.includes(v)));\n } else {\n const add = this._filteredOptions().map(o => o.value as string);\n const existing = this.value();\n this.value.set([...new Set([...existing, ...add])]);\n }\n }\n\n _removeChip(val: string, event: Event): void {\n event.stopPropagation();\n this.value.set(this.value().filter(v => v !== val));\n }\n\n _clearAll(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n\n _onWindowScroll(): void {\n if (this._isOpen() && this._appendToParent()) {\n this._close();\n }\n }\n\n _onDocClick(event: Event): void {\n if (!this._isOpen()) return;\n const target = event.target as Node;\n if (this._elementRef.nativeElement.contains(target)) return;\n if (this._panelEl?.contains(target)) return;\n this._close();\n }\n\n ngOnDestroy(): void {\n this._docClickCleanup?.();\n if (this._closeTimer) clearTimeout(this._closeTimer);\n if (this._panelEl && document.body.contains(this._panelEl)) {\n document.body.removeChild(this._panelEl);\n this._panelEl = null;\n }\n }\n}\n","<div class=\"relative ms-wrapper\">\n <label class=\"flex items-center w-full cursor-text\" (click)=\"_onTriggerClick($event)\">\n @let chips = _selectedLabels();\n\n <div class=\"!flex flex-wrap items-center gap-1 min-h-0 h-auto cursor-pointer py-1.5 w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--drop-bg)] border border-[var(--drop-border)] rounded-[var(--drop-radius)] text-[var(--drop-text)] font-[var(--font-sans)] disabled:opacity-50 disabled:cursor-not-allowed\"\n [class]=\"_inputSizeCls()\"\n >\n @for (label of chips; track label) {\n <span class=\"ms-chip\">\n {{ label }}\n <button type=\"button\" class=\"ms-chip-remove\"\n (click)=\"_removeChip(value()[$index], $event)\"\n tabindex=\"-1\"\n aria-label=\"Remove {{ label }}\"\n >&times;</button>\n </span>\n }\n\n <input\n type=\"text\"\n class=\"flex-1 min-w-[50px] outline-none border-none bg-transparent text-[var(--drop-text)] placeholder:text-[var(--drop-muted)]\"\n [class.text-xs]=\"size() === 'sm'\"\n [class.text-sm]=\"size() !== 'sm'\"\n [style.height]=\"size() === 'sm' ? '1.25rem' : '1.5rem'\"\n [attr.placeholder]=\"chips.length ? '' : placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"chips.length ? '' : ''\"\n (input)=\"_onInput($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n\n <i [class]=\"_iconCls() + ' pi pi-chevron-down'\"></i>\n </label>\n\n @if (_isOpen() || _isClosing()) {\n <div\n data-ms-panel\n class=\"left-0 z-50 w-full min-w-60 bg-[var(--color-surface)] border border-[var(--color-border)] rounded-[var(--radius-md)] shadow-lg overflow-hidden text-[var(--color-text)]\"\n [class.absolute]=\"!_appendToParent()\"\n [style.position]=\"_panelFixed()\"\n [style.left.px]=\"_appendToParent() ? _panelX() : null\"\n [style.top.px]=\"_appendToParent() ? _panelY() : null\"\n [style.width.px]=\"_appendToParent() ? _panelWidth() : null\"\n [class.top-full]=\"!_appendToParent() && _panelDirection() === 'down'\"\n [class.bottom-full]=\"!_appendToParent() && _panelDirection() === 'up'\"\n [class.ms-fade-in]=\"_isOpen() && !_isClosing()\"\n [class.ms-fade-out]=\"_isClosing()\"\n (click)=\"_onPanelClick($event)\">\n\n @if (searchable()) {\n <div class=\"px-2 pt-2\">\n <input\n data-ms-search\n type=\"text\"\n class=\"w-full px-2 py-1.5 text-sm border border-[var(--color-border)] rounded outline-none bg-[var(--color-surface)] text-[var(--color-text)] placeholder:text-[var(--color-text-muted)] focus:border-[var(--color-accent)]\"\n placeholder=\"Search...\"\n [value]=\"_searchQuery()\"\n (input)=\"_searchQuery.set($any($event.target).value)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n }\n\n <div\n class=\"overflow-y-auto\"\n [style.max-height]=\"_maxHeight()\"\n (scroll)=\"$event.stopPropagation()\">\n\n @if (selectAll() && _filteredOptions().length > 0) {\n <button\n type=\"button\"\n [class]=\"_optionCls()\"\n (click)=\"_toggleSelectAll()\"\n >\n <span\n class=\"inline-flex items-center justify-center w-4 h-4 rounded border text-[10px] shrink-0 transition-colors\"\n [style.border-color]=\"'var(--drop-border)'\"\n [style.background-color]=\"_allFilteredSelected() ? 'var(--drop-accent)' : 'transparent'\"\n [style.color]=\"_allFilteredSelected() ? 'white' : 'transparent'\"\n >\n @if (_allFilteredSelected()) { &#10003; }\n </span>\n <span class=\"font-medium\">{{ selectAllLabel() }}</span>\n </button>\n <div class=\"h-px mx-2\" [style.background-color]=\"'var(--drop-border)'\"></div>\n }\n\n @for (option of _filteredOptions(); track option.value) {\n <button\n type=\"button\"\n [class]=\"_optionCls()\"\n [class.selected]=\"_isSelected(_optVal(option))\"\n (click)=\"_toggleOption(option)\"\n >\n <span\n class=\"inline-flex items-center justify-center w-4 h-4 rounded border text-[10px] shrink-0 transition-colors\"\n [style.border-color]=\"_isSelected(_optVal(option)) ? 'var(--color-accent)' : 'var(--drop-border)'\"\n [style.background-color]=\"_isSelected(_optVal(option)) ? 'var(--color-accent)' : 'transparent'\"\n [style.color]=\"_isSelected(_optVal(option)) ? 'white' : 'transparent'\"\n >\n @if (_isSelected(_optVal(option))) { &#10003; }\n </span>\n <span>{{ option.label }}</span>\n </button>\n }\n\n @if (_filteredOptions().length === 0) {\n <div class=\"px-3 py-4 text-center text-sm text-[var(--drop-muted)]\">No results found</div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\n\n@Component({\n selector: 'app-password-input',\n imports: [],\n templateUrl: './password-input.component.html',\n styleUrl: './password-input.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--password-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PasswordInputComponent {\n readonly value = model('');\n\n readonly placeholder = input('');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly hideToggle = input(false);\n readonly width = input<string>('');\n\n readonly visible = signal(false);\n\n readonly _size = computed(() => this.size());\n readonly _type = computed(() => (this.visible() ? 'text' : 'password'));\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _touched = signal(false);\n\n readonly _inputSizeCls = computed(() => {\n return this.size() === 'sm' ? 'py-1 pr-8 pl-2 text-xs' : this.size() === 'lg' ? 'py-3 pr-11 pl-4 text-base' : 'py-2 pr-10 pl-3 text-sm';\n });\n\n readonly _toggleCls = computed(() => {\n const base = 'absolute flex items-center justify-center p-0 border-none rounded-full bg-transparent cursor-pointer text-[var(--password-muted)] transition-[color,background] duration-150 hover:text-[var(--password-text)] hover:bg-[var(--color-surface-alt)]';\n const s = this.size();\n const pos = s === 'sm' ? 'right-1 w-5 h-5' : s === 'lg' ? 'right-2 w-6 h-6' : 'right-1.5 w-6 h-6';\n const icon = s === 'sm' ? 'text-xs' : s === 'lg' ? 'text-lg' : 'text-sm';\n return `${base} ${pos} ${icon}`;\n });\n\n toggleVisibility(): void {\n this.visible.update((v) => !v);\n }\n\n onInput(event: Event): void {\n this.value.set((event.target as HTMLInputElement).value);\n }\n\n onBlur(): void {\n this._touched.set(true);\n }\n}\n","<label class=\"relative flex items-center w-full\">\n <input\n class=\"w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--password-bg)] border border-[var(--password-border)] rounded-[var(--password-radius)] text-[var(--password-text)] font-[var(--font-sans)] placeholder:text-[var(--password-muted)] disabled:opacity-50 disabled:cursor-not-allowed focus:border-[var(--password-accent)] focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--password-accent)_20%,transparent)]\"\n [class]=\"_inputSizeCls()\"\n [attr.type]=\"_type()\"\n [attr.placeholder]=\"placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (!hideToggle()) {\n <button\n [class]=\"_toggleCls()\"\n type=\"button\"\n (click)=\"toggleVisibility()\"\n [attr.aria-label]=\"visible() ? 'Hide password' : 'Show password'\"\n >\n <i [class]=\"visible() ? 'pi pi-eye-slash' : 'pi pi-eye'\"></i>\n </button>\n }\n</label>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\n\n@Component({\n selector: 'app-search-input',\n imports: [],\n templateUrl: './search-input.component.html',\n styleUrl: './search-input.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--search-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchInputComponent {\n readonly value = model('');\n\n readonly placeholder = input('Search...');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input<string>('');\n\n readonly _size = computed(() => this.size());\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _touched = signal(false);\n\n readonly _iconCls = computed(() => {\n const l = this.size() === 'sm' ? 'left-2' : this.size() === 'lg' ? 'left-3.5' : 'left-3';\n const f = this.size() === 'sm' ? 'text-xs' : this.size() === 'lg' ? 'text-lg' : 'text-sm';\n return `absolute ${l} flex pointer-events-none transition-colors duration-200 text-[var(--search-muted)] ${f}`;\n });\n\n readonly _inputSizeCls = computed(() => {\n const s = this.size();\n return s === 'sm' ? 'py-1 px-8 text-xs' : s === 'lg' ? 'py-3 px-11 text-base' : 'py-2 pl-10 pr-10 text-sm';\n });\n\n onInput(event: Event): void {\n this.value.set((event.target as HTMLInputElement).value);\n }\n\n onBlur(): void {\n this._touched.set(true);\n }\n}\n","<label class=\"relative flex items-center w-full\">\n <span [class]=\"_iconCls()\" aria-hidden=\"true\">\n <i class=\"pi pi-search\"></i>\n </span>\n\n <input\n class=\"w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--search-bg)] border border-[var(--search-border)] rounded-[var(--search-radius)] text-[var(--search-text)] font-[var(--font-sans)] placeholder:text-[var(--search-muted)] disabled:opacity-50 disabled:cursor-not-allowed focus:border-[var(--search-accent)] focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--search-accent)_20%,transparent)]\"\n [class]=\"_inputSizeCls()\"\n type=\"search\"\n [attr.placeholder]=\"placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n\n @if (value() && !disabled()) {\n <button class=\"absolute right-2 flex items-center justify-center w-6 h-6 p-0 border-none rounded-full bg-transparent cursor-pointer text-[var(--search-muted)] transition-[color,background] duration-150 hover:text-[var(--search-text)] hover:bg-[var(--color-surface-alt)]\" type=\"button\" (click)=\"value.set('')\" aria-label=\"Clear search\">\n <i class=\"pi pi-times\"></i>\n </button>\n }\n</label>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\n\n@Component({\n selector: 'app-text-input',\n imports: [],\n templateUrl: './text-input.component.html',\n styleUrl: './text-input.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[style.--text-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextInputComponent {\n readonly value = model('');\n\n readonly placeholder = input('');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input<string>('');\n\n readonly _size = computed(() => this.size());\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n readonly _touched = signal(false);\n\n readonly _inputSizeCls = computed(() => {\n return this.size() === 'sm' ? 'py-1 px-2 text-xs' : this.size() === 'lg' ? 'py-3 px-4 text-base' : 'py-2 px-3 text-sm';\n });\n\n onInput(event: Event): void {\n this.value.set((event.target as HTMLInputElement).value);\n }\n\n onBlur(): void {\n this._touched.set(true);\n }\n}\n","<input\n class=\"w-full outline-none transition-[border-color,box-shadow] duration-200 ease bg-[var(--text-bg)] border border-[var(--text-border)] rounded-[var(--text-radius)] text-[var(--text-text)] font-[var(--font-sans)] placeholder:text-[var(--text-muted)] disabled:opacity-50 disabled:cursor-not-allowed focus:border-[var(--text-accent)] focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--text-accent)_20%,transparent)]\"\n [class]=\"_inputSizeCls()\"\n type=\"text\"\n [attr.placeholder]=\"placeholder()\"\n [attr.disabled]=\"disabled() ? true : null\"\n [value]=\"value()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n\n@if (hint() && !error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-text-muted)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)] whitespace-nowrap overflow-hidden text-ellipsis\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid value' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../form.interface';\n\n@Component({\n selector: 'app-toggle',\n imports: [],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.css',\n host: {\n '[attr.data-size]': '_size',\n '[attr.data-accent]': '_accentKey',\n '[class.has-error]': 'error()',\n '[class.is-checked]': 'checked()',\n '[style.--toggle-accent]': '_rawAccent',\n '[style.width]': '_width',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleComponent {\n readonly checked = model(false);\n\n readonly label = input('');\n readonly size = input<FieldSize>('md');\n readonly disabled = input(false);\n readonly accentColor = input<string | null>(null);\n readonly hint = input('');\n readonly errorMessage = input('');\n readonly error = input(false);\n readonly width = input<string>('');\n\n readonly _size = computed(() => this.size());\n readonly _accentKey = computed(() => {\n const c = this.accentColor();\n return c && isThemeColor(c) ? c : null;\n });\n readonly _rawAccent = computed(() => {\n const c = this.accentColor();\n return c && !isThemeColor(c) ? c : null;\n });\n readonly _width = computed(() => this.width() || null);\n\n toggle(): void {\n if (this.disabled()) return;\n this.checked.update(v => !v);\n }\n}\n","<label class=\"toggle-field\">\n @if (label()) {\n <span class=\"toggle-label\">{{ label() }}</span>\n }\n\n <button\n class=\"toggle-track\"\n type=\"button\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"toggle-knob\"></span>\n </button>\n</label>\n\n@if (hint() && !error()) {\n <span class=\"field-hint\" animate.enter=\"hint-enter\" animate.leave=\"hint-leave\">{{ hint() }}</span>\n}\n@if (error()) {\n <span class=\"field-error\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../../form/form.interface';\n\nexport type BadgeVariant = 'filled' | 'outlined' | 'subtle';\n\n@Component({\n selector: 'app-badge',\n imports: [],\n templateUrl: './badge.component.html',\n styleUrl: './badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BadgeComponent {\n readonly accentColor = input<string>('primary');\n readonly variant = input<BadgeVariant>('filled');\n readonly size = input<FieldSize>('sm');\n readonly dot = input(false);\n\n readonly _sizeCls = computed(() => {\n const sizes: Record<FieldSize, string> = {\n sm: 'px-1.5 py-0.5 text-[10px]',\n md: 'px-2 py-0.5 text-xs',\n lg: 'px-2.5 py-1 text-sm',\n };\n return sizes[this.size()] ?? sizes.sm;\n });\n\n private readonly _fallback: Record<string, string> = {\n primary: 'oklch(0.32 0.09 258)',\n secondary: 'oklch(0.55 0.12 40)',\n accent: 'oklch(0.64 0.2 50)',\n success: 'oklch(0.55 0.18 145)',\n warning: 'oklch(0.68 0.18 75)',\n danger: 'oklch(0.55 0.22 25)',\n info: 'oklch(0.55 0.15 235)',\n };\n\n readonly _resolvedColor = computed(() => {\n const c = this.accentColor();\n if (isThemeColor(c)) return `var(--color-${c}, ${this._fallback[c] ?? this._fallback['primary']})`;\n return c;\n });\n\n readonly _subtleBg = computed(() => {\n const c = this.accentColor();\n const key = isThemeColor(c) ? c : 'primary';\n return `color-mix(in srgb, var(--color-${key}, ${this._fallback[key]}) 15%, var(--color-surface, oklch(0.99 0 0)))`;\n });\n\n readonly _style = computed(() => {\n const v = this.variant();\n const color = this._resolvedColor();\n if (v === 'filled') return { backgroundColor: color, color: 'var(--color-primary-inverse,oklch(0.99 0 0))' };\n if (v === 'outlined') return { backgroundColor: 'transparent', color, border: `1px solid ${color}` };\n return { backgroundColor: this._subtleBg(), color };\n });\n}\n","<span class=\"inline-flex items-center gap-1 font-medium rounded-[var(--radius-sm,0.25rem)] whitespace-nowrap\" [style]=\"_style()\" [class]=\"_sizeCls()\">\n @if (dot()) {\n <span class=\"rounded-full shrink-0\" style=\"width:6px;height:6px;background-color:currentColor\"></span>\n }\n <ng-content />\n</span>\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\n\nexport interface BannerItem {\n src: string;\n alt?: string;\n title?: string;\n subtitle?: string;\n description?: string;\n ctaLabel?: string;\n ctaLink?: string;\n}\n\n@Component({\n selector: 'app-banner-slider',\n imports: [],\n templateUrl: './banner-slider.component.html',\n styleUrl: './banner-slider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BannerSliderComponent {\n readonly items = input.required<BannerItem[]>();\n readonly height = input('400px');\n readonly autoPlay = input(true);\n readonly interval = input(5000);\n readonly showArrows = input(true);\n readonly showDots = input(true);\n readonly overlayMode = input<'left' | 'center' | 'right'>('left');\n\n readonly ctaClick = output<BannerItem>();\n\n readonly _height = computed(() => this.height());\n readonly _index = signal(0);\n readonly _overlayCls = computed(() => `overlay-${this.overlayMode()}`);\n\n private _timer: ReturnType<typeof setInterval> | null = null;\n\n constructor() {\n effect(() => {\n if (this.autoPlay()) this._startTimer();\n else this._stopTimer();\n });\n }\n\n readonly _transform = computed(() => `translateX(-${this._index() * 100}%)`);\n readonly _current = computed(() => this.items()[this._index()]);\n\n _go(index: number): void {\n const len = this.items().length;\n if (len < 2) return;\n this._index.set(((index % len) + len) % len);\n if (this.autoPlay()) this._startTimer();\n }\n\n _prev(): void { this._go(this._index() - 1); }\n _next(): void { this._go(this._index() + 1); }\n\n _onCtaClick(): void {\n this.ctaClick.emit(this._current());\n }\n\n private _startTimer(): void {\n this._stopTimer();\n this._timer = setInterval(() => this._next(), this.interval());\n }\n\n private _stopTimer(): void {\n if (this._timer) { clearInterval(this._timer); this._timer = null; }\n }\n\n private _xStart = 0;\n _onTouchStart(event: TouchEvent): void {\n this._xStart = event.touches[0].clientX;\n }\n _onTouchEnd(event: TouchEvent): void {\n const dx = event.changedTouches[0].clientX - this._xStart;\n if (Math.abs(dx) > 50) dx > 0 ? this._prev() : this._next();\n }\n}\n","<div\n class=\"bs-track\"\n [style.transform]=\"_transform()\"\n [style.height]=\"_height()\"\n (touchstart)=\"_onTouchStart($event)\"\n (touchend)=\"_onTouchEnd($event)\"\n>\n @for (item of items(); track $index) {\n <div class=\"bs-slide\">\n <img [src]=\"item.src\" [alt]=\"item.alt || ''\" style=\"height:100%;width:100%;object-fit:cover\" />\n <div class=\"bs-overlay\" [class]=\"_overlayCls()\" [style.justify-content]=\"overlayMode() === 'center' ? 'center' : overlayMode() === 'right' ? 'flex-end' : 'flex-start'\">\n <div class=\"bs-content\" [style.text-align]=\"overlayMode() === 'center' ? 'center' : 'left'\" [style.max-width]=\"overlayMode() === 'center' ? '80%' : '50%'\">\n @if (item.subtitle) { <span class=\"bs-subtitle\">{{ item.subtitle }}</span> }\n @if (item.title) { <h2 class=\"bs-title\">{{ item.title }}</h2> }\n @if (item.description) { <p class=\"bs-desc\">{{ item.description }}</p> }\n @if (item.ctaLabel) {\n @if (item.ctaLink) {\n <a [href]=\"item.ctaLink\" class=\"bs-cta\" (click)=\"ctaClick.emit(item)\">\n {{ item.ctaLabel }}\n <i class=\"pi pi-arrow-right\" style=\"font-size:0.6875rem\"></i>\n </a>\n } @else {\n <button type=\"button\" class=\"bs-cta\" (click)=\"_onCtaClick()\">\n {{ item.ctaLabel }}\n <i class=\"pi pi-arrow-right\" style=\"font-size:0.6875rem\"></i>\n </button>\n }\n }\n </div>\n </div>\n </div>\n }\n</div>\n\n@if (showArrows() && items().length > 1) {\n <button type=\"button\" class=\"bs-arrow bs-arrow-prev\" (click)=\"_prev()\" aria-label=\"Previous\">\n <i class=\"pi pi-chevron-left\"></i>\n </button>\n <button type=\"button\" class=\"bs-arrow bs-arrow-next\" (click)=\"_next()\" aria-label=\"Next\">\n <i class=\"pi pi-chevron-right\"></i>\n </button>\n}\n\n@if (showDots() && items().length > 1) {\n <div class=\"bs-dots\">\n @for (item of items(); track $index) {\n <button\n type=\"button\"\n class=\"bs-dot\"\n [class.is-active]=\"$index === _index()\"\n (click)=\"_go($index)\"\n [attr.aria-label]=\"'Go to banner ' + ($index + 1)\"\n ></button>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, signal } from '@angular/core';\n\nexport interface CarouselItem {\n src: string;\n alt?: string;\n title?: string;\n description?: string;\n}\n\n@Component({\n selector: 'app-carousel',\n imports: [],\n templateUrl: './carousel.component.html',\n styleUrl: './carousel.component.css',\n host: {\n '[style.height]': '_height',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CarouselComponent {\n readonly items = input.required<CarouselItem[]>();\n readonly height = input<string>('320px');\n readonly autoPlay = input(true);\n readonly interval = input(4000);\n readonly showArrows = input(true);\n readonly showDots = input(true);\n\n readonly _height = computed(() => this.height());\n readonly _index = signal(0);\n\n private _timer: ReturnType<typeof setInterval> | null = null;\n\n constructor() {\n effect(() => {\n const ap = this.autoPlay();\n if (ap) {\n this._startTimer();\n } else {\n this._stopTimer();\n }\n });\n }\n\n readonly _current = computed(() => this.items()[this._index()]);\n readonly _transform = computed(() => `translateX(-${this._index() * 100}%)`);\n\n _go(index: number): void {\n const len = this.items().length;\n if (len < 2) return;\n this._index.set(((index % len) + len) % len);\n if (this.autoPlay()) this._startTimer();\n }\n\n _prev(): void { this._go(this._index() - 1); }\n _next(): void { this._go(this._index() + 1); }\n\n private _startTimer(): void {\n this._stopTimer();\n this._timer = setInterval(() => this._next(), this.interval());\n }\n\n private _stopTimer(): void {\n if (this._timer) { clearInterval(this._timer); this._timer = null; }\n }\n\n private _xStart = 0;\n _onTouchStart(event: TouchEvent): void {\n this._xStart = event.touches[0].clientX;\n }\n _onTouchEnd(event: TouchEvent): void {\n const dx = event.changedTouches[0].clientX - this._xStart;\n if (Math.abs(dx) > 50) {\n dx > 0 ? this._prev() : this._next();\n }\n }\n}\n","<div\n class=\"carousel-track\"\n [style.transform]=\"_transform()\"\n (touchstart)=\"_onTouchStart($event)\"\n (touchend)=\"_onTouchEnd($event)\"\n>\n @for (item of items(); track $index) {\n <div class=\"carousel-slide\">\n <img [src]=\"item.src\" [alt]=\"item.alt || ''\" />\n @if (item.title || item.description) {\n <div class=\"ca-caption\">\n @if (item.title) { <div class=\"ca-caption-title\">{{ item.title }}</div> }\n @if (item.description) { <div class=\"ca-caption-desc\">{{ item.description }}</div> }\n </div>\n }\n </div>\n }\n</div>\n\n@if (showArrows() && items().length > 1) {\n <button type=\"button\" class=\"arrow arrow-prev\" (click)=\"_prev()\" aria-label=\"Previous\">\n <i class=\"pi pi-chevron-left\"></i>\n </button>\n <button type=\"button\" class=\"arrow arrow-next\" (click)=\"_next()\" aria-label=\"Next\">\n <i class=\"pi pi-chevron-right\"></i>\n </button>\n}\n\n@if (showDots() && items().length > 1) {\n <div class=\"dots\">\n @for (item of items(); track $index) {\n <button\n type=\"button\"\n class=\"dot\"\n [class.is-active]=\"$index === _index()\"\n (click)=\"_go($index)\"\n [attr.aria-label]=\"'Go to slide ' + ($index + 1)\"\n ></button>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'app-empty-state',\n imports: [],\n templateUrl: './empty-state.component.html',\n styleUrl: './empty-state.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyStateComponent {\n readonly icon = input('');\n readonly title = input('');\n readonly message = input('');\n readonly width = input('');\n}\n","<div class=\"flex flex-col items-center justify-center gap-3 px-4 py-12 text-center\" [style.width]=\"width() || '100%'\">\n @if (icon()) {\n <div class=\"flex items-center justify-center w-14 h-14 rounded-full bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]\">\n <i [class]=\"icon()\" class=\"text-lg text-[var(--color-text-muted,oklch(0.48 0.01 260))]\"></i>\n </div>\n }\n @if (title()) {\n <h3 class=\"text-base font-semibold text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ title() }}</h3>\n }\n @if (message()) {\n <p class=\"text-sm text-[var(--color-text-muted,oklch(0.48 0.01 260))] max-w-xs\">{{ message() }}</p>\n }\n <ng-content />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\nimport { type FieldSize } from '../../form/form.interface';\n\nexport interface ImageFile {\n file: File;\n url: string;\n}\n\n@Component({\n selector: 'app-image-upload',\n imports: [],\n templateUrl: './image-upload.component.html',\n styleUrl: './image-upload.component.css',\n host: {\n '[attr.data-size]': '_size',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageUploadComponent {\n readonly images = model<ImageFile[]>([]);\n readonly multiple = input(true);\n readonly maxFiles = input(4);\n readonly maxSize = input(2097152);\n readonly disabled = input(false);\n readonly size = input<FieldSize>('md');\n readonly placeholder = input('Drop images or click');\n readonly errorMessage = input('');\n readonly error = input(false);\n\n readonly _size = computed(() => this.size());\n readonly _isDragOver = signal(false);\n\n _onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) this._isDragOver.set(true);\n }\n\n _onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragOver.set(false);\n }\n\n _onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._isDragOver.set(false);\n if (this.disabled()) return;\n const dropped = event.dataTransfer?.files;\n if (dropped) this._addFiles(Array.from(dropped));\n }\n\n _onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) this._addFiles(Array.from(input.files));\n input.value = '';\n }\n\n _removeFile(index: number): void {\n const removed = this.images()[index];\n URL.revokeObjectURL(removed.url);\n this.images.update(f => f.filter((_, i) => i !== index));\n }\n\n private _addFiles(newFiles: File[]): void {\n const imgs = newFiles.filter(f => f.type.startsWith('image/'));\n if (this.maxSize()) {\n imgs.splice(0, imgs.length, ...imgs.filter(f => f.size <= (this.maxSize() || Infinity)));\n }\n const current = this.images();\n if (!this.multiple()) {\n current.forEach(f => URL.revokeObjectURL(f.url));\n if (imgs.length) {\n this.images.set([{ file: imgs[0], url: URL.createObjectURL(imgs[0]) }]);\n } else {\n this.images.set([]);\n }\n return;\n }\n const max = this.maxFiles() || Infinity;\n const remaining = max - current.length;\n if (remaining <= 0) return;\n const add = imgs.slice(0, remaining).map(f => ({ file: f, url: URL.createObjectURL(f) }));\n this.images.set([...current, ...add]);\n }\n\n _formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1048576).toFixed(1)} MB`;\n }\n}\n","@if (images().length) {\n <div class=\"preview-grid\">\n @for (img of images(); track img.url; let i = $index) {\n <div class=\"preview-item\">\n <img [src]=\"img.url\" [alt]=\"img.file.name\" />\n <div class=\"preview-item-overlay\">\n <button type=\"button\" class=\"remove-btn\" (click)=\"_removeFile(i)\" aria-label=\"Remove\" title=\"Remove\">&times;</button>\n </div>\n </div>\n }\n @if (multiple() && images().length < maxFiles()) {\n <button type=\"button\" class=\"add-btn\" (click)=\"_input.click()\" title=\"Add image\">\n <i class=\"pi pi-plus text-lg\"></i>\n <span>Add</span>\n </button>\n }\n </div>\n} @else {\n <div\n class=\"drop-zone\"\n [class.is-dragover]=\"_isDragOver()\"\n (dragover)=\"_onDragOver($event)\"\n (dragleave)=\"_onDragLeave($event)\"\n (drop)=\"_onDrop($event)\"\n (click)=\"_input.click()\"\n >\n <i class=\"pi pi-image text-2xl\"></i>\n <span class=\"text-xs\">{{ placeholder() }}</span>\n @if (maxSize()) {\n <span class=\"text-[10px] opacity-60\">Max {{ _formatSize(maxSize()) }} each</span>\n }\n </div>\n}\n\n<input\n #_input\n type=\"file\"\n accept=\"image/*\"\n [attr.multiple]=\"multiple() ? true : null\"\n [attr.disabled]=\"disabled() ? true : null\"\n (change)=\"_onFileSelected($event)\"\n style=\"display:none\"\n/>\n\n@if (error()) {\n <span class=\"absolute left-0 right-0 bottom-0 m-0 text-xs font-[var(--font-sans)] text-[var(--color-danger)]\" animate.enter=\"error-enter\" animate.leave=\"error-leave\">{{ errorMessage() || 'Invalid' }}</span>\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type SkeletonVariant = 'text' | 'circle' | 'rect';\n\n@Component({\n selector: 'app-skeleton',\n imports: [],\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonComponent {\n readonly variant = input<SkeletonVariant>('text');\n readonly width = input('');\n readonly height = input('');\n readonly count = input(1);\n readonly borderRadius = input('');\n readonly accentColor = input('');\n\n readonly _items = computed(() => Array.from<SkeletonVariant>({ length: this.count() }));\n\n readonly _baseWidth = computed(() => this.width() || (this.variant() === 'circle' ? '40px' : '100%'));\n\n readonly _baseHeight = computed(() => {\n if (this.height()) return this.height();\n switch (this.variant()) {\n case 'circle': return '40px';\n case 'rect': return '100px';\n case 'text': default: return '14px';\n }\n });\n\n readonly _radius = computed(() => {\n if (this.borderRadius()) return this.borderRadius();\n switch (this.variant()) {\n case 'circle': return '9999px';\n case 'rect': return 'var(--radius-md,0.5rem)';\n case 'text': default: return 'var(--radius-sm,0.25rem)';\n }\n });\n\n readonly _bg = computed(() => {\n if (this.accentColor()) return `var(--color-${this.accentColor()}-bg,var(--color-surface-alt,oklch(0.975 0.005 260)))`;\n return 'var(--color-surface-alt,oklch(0.975 0.005 260))';\n });\n\n _lineWidth(index: number): string {\n if (this.width()) return this.width();\n const total = this.count();\n if (total <= 1) return '100%';\n if (index === total - 1) return '60%';\n return '100%';\n }\n}\n","<div class=\"flex flex-col gap-2\" [style.width]=\"_baseWidth()\">\n @for (item of _items(); track $index) {\n <div\n class=\"skeleton-pulse\"\n [style.height]=\"_baseHeight()\"\n [style.width]=\"_lineWidth($index)\"\n [style.border-radius]=\"_radius()\"\n [style.background-color]=\"_bg()\"\n ></div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type SkeletonShape = 'bar' | 'circle' | 'action';\n\nexport interface TableSkeletonColumn {\n shape?: SkeletonShape;\n width?: string;\n}\n\n@Component({\n selector: 'app-table-skeleton',\n imports: [],\n templateUrl: './table-skeleton.component.html',\n styleUrl: './table-skeleton.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableSkeletonComponent {\n readonly rows = input(5);\n readonly columns = input<TableSkeletonColumn[] | number>(4);\n\n readonly _rowArr = computed(() => Array.from({ length: this.rows() }));\n\n readonly _cols = computed<TableSkeletonColumn[]>(() => {\n const c = this.columns();\n if (typeof c === 'number') return Array.from({ length: c }, () => ({ shape: 'bar' as const }));\n return c.map(col => ({ shape: col.shape ?? 'bar', width: col.width }));\n });\n\n readonly _colWidth = computed(() => {\n const cols = this._cols();\n const count = cols.length;\n if (count === 0) return [];\n const defined = cols.filter(c => c.width);\n const definedTotal = defined.reduce((sum, c) => sum + parseFloat(c.width || '0'), 0);\n const undefinedCount = count - defined.length;\n const remainingPct = 100 - definedTotal;\n const eachPct = undefinedCount > 0 ? Math.floor(remainingPct / undefinedCount) : 0;\n return cols.map(c => c.width || `${eachPct}%`);\n });\n\n _shapeClass(shape?: SkeletonShape): string {\n switch (shape) {\n case 'circle': return 'rounded-full';\n case 'action': return 'rounded-md';\n default: return 'rounded-[var(--radius-sm,0.25rem)]';\n }\n }\n\n _shapeSize(shape?: SkeletonShape): { width: string; height: string } {\n switch (shape) {\n case 'circle': return { width: '32px', height: '32px' };\n case 'action': return { width: '28px', height: '28px' };\n default: return { width: '100%', height: '14px' };\n }\n }\n}\n","<div class=\"overflow-hidden rounded-[var(--radius-lg,0.75rem)] border border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n <table class=\"w-full border-collapse\">\n <thead>\n <tr>\n @for (col of _cols(); track $index) {\n <th\n class=\"px-3 py-2.5\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.width]=\"_colWidth()[$index]\"\n >\n <div class=\"skeleton-shimmer rounded-[var(--radius-sm,0.25rem)]\" style=\"height:14px;width:60%\"></div>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of _rowArr(); track $index) {\n <tr class=\"border-b border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n @for (col of _cols(); track $index) {\n <td class=\"px-3 py-2.5\">\n <div\n class=\"skeleton-shimmer\"\n [class]=\"_shapeClass(col.shape)\"\n [style]=\"_shapeSize(col.shape)\"\n [class.mx-auto]=\"col.shape === 'circle'\"\n ></div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, signal } from '@angular/core';\n\n@Component({\n selector: 'app-tooltip',\n imports: [],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.css',\n host: {\n '(mouseenter)': '_onMouseEnter()',\n '(mouseleave)': '_onMouseLeave()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TooltipComponent {\n private _el = inject(ElementRef);\n\n readonly text = input('');\n readonly position = input<'top' | 'bottom' | 'left' | 'right'>('top');\n readonly disabled = input(false);\n readonly alwaysShow = input(false);\n\n readonly _visible = signal(false);\n readonly _tipText = computed(() => this.text() || this._el.nativeElement.textContent?.trim() || '');\n\n _onMouseEnter(): void {\n if (this.disabled()) return;\n const content = this._el.nativeElement.querySelector('[data-tip-content]') as HTMLElement | null;\n if (content && !this.alwaysShow()) {\n if (content.scrollWidth <= content.clientWidth) return;\n }\n this._visible.set(true);\n }\n\n _onMouseLeave(): void {\n this._visible.set(false);\n }\n}\n","<div data-tip-content\n class=\"truncate\"\n>\n <ng-content />\n</div>\n@if (_visible()) {\n <div class=\"tooltip-panel tooltip-{{ position() }}\"\n animate.enter=\"tip-enter\"\n animate.leave=\"tip-leave\"\n >\n {{ _tipText() }}\n </div>\n}\n","import { ChangeDetectionStrategy, Component, computed, ContentChild, effect, input, output, signal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { SearchInputComponent } from '../../form/search-input/search-input.component';\nimport { DropDownComponent } from '../../form/drop-down/drop-down.component';\nimport { TableSkeletonComponent } from '../table-skeleton/table-skeleton.component';\nimport type { TableSkeletonColumn } from '../table-skeleton/table-skeleton.component';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\n\nexport interface ActionDef {\n icon?: string;\n label?: string;\n accentColor?: string;\n visible?: (row: Record<string, unknown>) => boolean;\n disabled?: (row: Record<string, unknown>) => boolean;\n click: (row: Record<string, unknown>) => void;\n}\n\nexport interface ColumnDef {\n key: string;\n header: string;\n sortable?: boolean;\n width?: string;\n align?: 'left' | 'center' | 'right';\n cell?: (row: Record<string, unknown>) => string;\n rowSpan?: (row: Record<string, unknown>, index: number, rows: Record<string, unknown>[]) => number;\n actions?: ActionDef[];\n filterable?: boolean;\n filterOptions?: { label: string; value: string }[];\n footer?: (rows: Record<string, unknown>[]) => string;\n truncate?: boolean;\n maxChars?: number;\n}\n\nexport interface SortChange {\n key: string;\n direction: 'asc' | 'desc' | '';\n}\n\n@Component({\n selector: 'app-table',\n imports: [SearchInputComponent, DropDownComponent, TableSkeletonComponent, NgTemplateOutlet, TooltipComponent],\n templateUrl: './table.component.html',\n styleUrl: './table.component.css',\n host: {\n '(document:mousemove)': '_onDocMouseMove($event)',\n '(document:mouseup)': '_onDocMouseUp()',\n '(document:click)': '_onDocClick($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent {\n readonly columns = input<ColumnDef[]>([]);\n readonly rows = input<Record<string, unknown>[]>([]);\n readonly striped = input(false);\n readonly hoverable = input(true);\n readonly sortable = input(false);\n readonly emptyMessage = input('No data available');\n readonly width = input('');\n readonly loading = input(false);\n readonly searchable = input(false);\n readonly filterable = input(false);\n readonly skeletonRows = input(5);\n readonly resizable = input(false);\n readonly pageable = input(false);\n readonly pageSize = input(10);\n readonly pageSizeOptions = input<number[]>([5, 10, 20, 50]);\n readonly selectable = input(false);\n readonly selectionMode = input<'single' | 'multiple'>('multiple');\n readonly selectionKey = input<string>('');\n readonly stickyHeader = input(false);\n readonly exportable = input(false);\n readonly columnToggle = input(false);\n readonly expandable = input(false);\n\n readonly sortChange = output<SortChange>();\n readonly pageChange = output<number>();\n readonly selectedRows = output<Record<string, unknown>[]>();\n\n @ContentChild('rowDetail', { read: TemplateRef, static: false })\n rowDetail?: TemplateRef<{ $implicit: Record<string, unknown> }>;\n\n private readonly _sortKey = signal('');\n private readonly _sortDir = signal<'asc' | 'desc' | ''>('');\n private readonly _searchQuery = signal('');\n private readonly _filters = signal<Record<string, string>>({});\n protected readonly _page = signal(1);\n protected readonly _pageSize = signal(10);\n private readonly _columnWidths = signal<Record<string, string>>({});\n private readonly _hiddenColumns = signal<Set<string>>(new Set());\n protected readonly _selectedKeys = signal<Set<string | number>>(new Set());\n protected readonly _expandedKeys = signal<Set<number>>(new Set());\n protected readonly _pageSizeOptions = computed(() =>\n this.pageSizeOptions().map(s => ({ label: `${s} / page`, value: String(s) }))\n );\n protected readonly _columnToggleOpen = signal(false);\n protected readonly _exportOpen = signal(false);\n\n private _resizing: { key: string; startX: number; startWidth: number } | null = null;\n\n constructor() {\n effect(() => { this._pageSize.set(this.pageSize()); });\n effect(() => {\n this._searchQuery();\n this._filters();\n this._page.set(1);\n });\n }\n\n readonly _displayColumns = computed(() =>\n this.columns().filter(c => !this._hiddenColumns().has(c.key))\n );\n\n readonly _colCount = computed(() => {\n let count = this._displayColumns().length;\n if (this.selectable()) count++;\n if (this.expandable()) count++;\n return count;\n });\n\n readonly _filteredRows = computed(() => {\n let data = this.rows();\n const key = this._sortKey();\n const dir = this._sortDir();\n if (key && dir) {\n data = [...data].sort((a, b) => {\n const aVal = a[key] as string | number;\n const bVal = b[key] as string | number;\n const direction = dir === 'asc' ? 1 : -1;\n if (aVal < bVal) return -1 * direction;\n if (aVal > bVal) return 1 * direction;\n return 0;\n });\n }\n const query = this._searchQuery().toLowerCase().trim();\n if (query) {\n data = data.filter(row =>\n Object.values(row).some(val => String(val).toLowerCase().includes(query))\n );\n }\n const filters = this._filters();\n for (const [fk, fv] of Object.entries(filters)) {\n if (fv) data = data.filter(row => String(row[fk]) === fv);\n }\n return data;\n });\n\n readonly _displayRows = computed(() => {\n if (!this.pageable()) return this._filteredRows();\n const total = this._filteredRows().length;\n const size = this._pageSize();\n if (total === 0) return [];\n const maxPage = Math.max(1, Math.ceil(total / size));\n const page = Math.min(this._page(), maxPage);\n const start = (page - 1) * size;\n return this._filteredRows().slice(start, start + size);\n });\n\n readonly _totalPages = computed(() =>\n this.pageable() ? Math.max(1, Math.ceil(this._filteredRows().length / this._pageSize())) : 1\n );\n\n readonly _pageInfo = computed(() => {\n const total = this._filteredRows().length;\n const page = this._page();\n const size = this._pageSize();\n const from = total > 0 ? (page - 1) * size + 1 : 0;\n return { from, to: Math.min(page * size, total), total };\n });\n\n readonly _visiblePages = computed(() => {\n const total = this._totalPages();\n const current = this._page();\n const range = 5;\n let start = Math.max(1, current - Math.floor(range / 2));\n let end = Math.min(total, start + range - 1);\n if (end - start + 1 < range) start = Math.max(1, end - range + 1);\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n });\n\n readonly _rowMeta = computed(() => {\n const cols = this._displayColumns();\n const rows = this._displayRows();\n const active: Record<string, number> = {};\n return rows.map((row, rowIndex) =>\n cols.map(col => {\n const key = col.key;\n if (active[key] !== undefined && active[key] > 1) { active[key]--; return { visible: false, rowspan: 0 }; }\n if (active[key] !== undefined) delete active[key];\n if (col.rowSpan) {\n const span = col.rowSpan(row, rowIndex, rows);\n if (span > 1) { active[key] = span; return { visible: true, rowspan: span }; }\n if (span === 0) return { visible: false, rowspan: 0 };\n }\n return { visible: true, rowspan: 1 };\n })\n );\n });\n\n readonly _skeletonCols = computed<TableSkeletonColumn[]>(() =>\n this.columns().map(col => ({ shape: col.actions ? 'action' : 'bar', width: col.width }))\n );\n\n readonly _filterCols = computed(() => this._displayColumns().filter(c => c.filterable && c.filterOptions));\n readonly _footerCols = computed(() => this._displayColumns().filter(c => c.footer));\n readonly _footerText = computed(() => this._footerCols().map(c => c.footer!(this._filteredRows())).join(' · '));\n\n _sortIcon(key: string): string {\n if (this._sortKey() !== key || !this._sortDir()) return 'pi pi-sort-alt';\n return this._sortDir() === 'asc' ? 'pi pi-sort-up' : 'pi pi-sort-down';\n }\n\n _toggleSort(key: string): void {\n if (this._sortKey() === key) {\n if (this._sortDir() === 'asc') this._sortDir.set('desc');\n else if (this._sortDir() === 'desc') { this._sortDir.set(''); this._sortKey.set(''); }\n else this._sortDir.set('asc');\n } else { this._sortKey.set(key); this._sortDir.set('asc'); }\n this.sortChange.emit({ key: this._sortKey(), direction: this._sortDir() });\n }\n\n _onSearch(value: string): void { this._searchQuery.set(value ?? ''); }\n\n _setFilter(key: string, value: string | null): void {\n this._filters.update(f => {\n if (!value) { const { [key]: _, ...rest } = f; return rest; }\n return { ...f, [key]: value };\n });\n }\n\n _colWidth(col: ColumnDef): string { return this._columnWidths()[col.key] || col.width || 'auto'; }\n\n _onResizeStart(event: MouseEvent, key: string): void {\n if (!this.resizable()) return;\n const th = (event.target as HTMLElement).closest('th');\n if (!th) return;\n this._resizing = { key, startX: event.clientX, startWidth: th.offsetWidth };\n event.preventDefault();\n }\n\n _onDocMouseMove(event: MouseEvent): void {\n const r = this._resizing;\n if (!r) return;\n const diff = event.clientX - r.startX;\n this._columnWidths.update(w => ({ ...w, [r.key]: `${Math.max(50, r.startWidth + diff)}px` }));\n }\n\n _onDocMouseUp(): void { this._resizing = null; }\n\n _onDocClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (this._columnToggleOpen() && !target.closest('[data-col-toggle]')) {\n this._columnToggleOpen.set(false);\n }\n if (this._exportOpen() && !target.closest('[data-export-toggle]')) {\n this._exportOpen.set(false);\n }\n }\n\n _goToPage(page: number): void {\n const p = Math.max(1, Math.min(page, this._totalPages()));\n this._page.set(p);\n this.pageChange.emit(p);\n }\n\n _onPageSizeChange(val: string | null): void {\n this._pageSize.set(parseInt(val ?? '10', 10));\n this._page.set(1);\n }\n\n _isSelected(row: Record<string, unknown>): boolean {\n const key = this.selectionKey();\n if (!key) return false;\n const val = row[key];\n return val != null && this._selectedKeys().has(val as string | number);\n }\n\n _toggleSelect(row: Record<string, unknown>): void {\n const key = this.selectionKey();\n const val = key ? row[key] : null;\n if (val == null) return;\n this._selectedKeys.update(s => {\n const next = new Set(s);\n if (this.selectionMode() === 'single') next.clear();\n if (next.has(val as string | number)) next.delete(val as string | number); else next.add(val as string | number);\n return next;\n });\n this._emitSelection();\n }\n\n _isAllSelected(): boolean {\n const rows = this._displayRows();\n const key = this.selectionKey();\n if (rows.length === 0 || !key) return false;\n return rows.every(row => { const val = row[key]; return val != null && this._selectedKeys().has(val as string | number); });\n }\n\n _toggleSelectAll(): void {\n const key = this.selectionKey();\n if (!key) return;\n if (this._isAllSelected()) { this._selectedKeys.set(new Set()); }\n else {\n const keys = new Set<string | number>();\n for (const row of this._displayRows()) { const val = row[key]; if (val != null) keys.add(val as string | number); }\n this._selectedKeys.set(keys);\n }\n this._emitSelection();\n }\n\n private _emitSelection(): void {\n const selected = this._selectedKeys();\n const key = this.selectionKey();\n if (!key) { this.selectedRows.emit([]); return; }\n this.selectedRows.emit(this.rows().filter(row => { const val = row[key]; return val != null && selected.has(val as string | number); }));\n }\n\n _isColumnVisible(k: string): boolean { return !this._hiddenColumns().has(k); }\n _toggleColumn(k: string): void { this._hiddenColumns.update(h => { const n = new Set(h); if (n.has(k)) n.delete(k); else n.add(k); return n; }); }\n\n _isExpanded(index: number): boolean { return this._expandedKeys().has(index); }\n _toggleExpand(index: number): void { this._expandedKeys.update(s => { const n = new Set(s); if (n.has(index)) n.delete(index); else n.add(index); return n; }); }\n\n _cellText(row: Record<string, unknown>, col: ColumnDef): string {\n return col.cell ? col.cell(row) : String(row[col.key] ?? '');\n }\n\n _cellLabel(row: Record<string, unknown>, col: ColumnDef): string {\n const text = this._cellText(row, col);\n if (col.maxChars && text.length > col.maxChars) return text.slice(0, col.maxChars) + '…';\n return text;\n }\n\n async _exportExcel(): Promise<void> {\n const ExcelJS = (await import('exceljs')).default;\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet('Sheet1');\n const cols = this._displayColumns();\n const rows = this._filteredRows();\n const headerRow = worksheet.addRow(cols.map(c => c.header));\n headerRow.font = { bold: true, color: { argb: 'FFFFFFFF' } };\n headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF0D4B7C' } };\n headerRow.alignment = { horizontal: 'center' };\n for (const row of rows) {\n worksheet.addRow(cols.map(c => this._cellText(row, c)));\n }\n cols.forEach((_, i) => { worksheet.getColumn(i + 1).width = 22; });\n const buffer = await workbook.xlsx.writeBuffer();\n const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `export-${new Date().toISOString().slice(0, 10)}.xlsx`;\n a.click();\n setTimeout(() => URL.revokeObjectURL(url), 2000);\n }\n\n async _exportPdf(): Promise<void> {\n const { default: jsPDF } = await import('jspdf');\n const doc = new jsPDF({ orientation: 'landscape', unit: 'pt' });\n const cols = this._displayColumns();\n const rows = this._filteredRows();\n const pageW = doc.internal.pageSize.getWidth();\n const margin = 30;\n const rh = 18;\n const colW = (pageW - margin * 2) / cols.length;\n const maxY = doc.internal.pageSize.getHeight() - margin;\n let y = margin;\n\n const drawHeader = () => {\n doc.setFillColor(13, 75, 124);\n doc.rect(margin, y, pageW - margin * 2, rh, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(9);\n doc.setFont('Helvetica', 'bold');\n cols.forEach((c, i) => {\n doc.text(c.header, margin + i * colW + 3, y + 12);\n });\n y += rh;\n };\n\n drawHeader();\n\n for (const row of rows) {\n if (y + rh > maxY) { doc.addPage(); y = margin; drawHeader(); }\n if ((rows.indexOf(row) + 1) % 2 === 0) {\n doc.setFillColor(247, 248, 250);\n doc.rect(margin, y, pageW - margin * 2, rh, 'F');\n }\n doc.setFont('Helvetica', 'normal');\n doc.setFontSize(8);\n doc.setTextColor(50, 50, 50);\n cols.forEach((c, ci) => {\n doc.text(this._cellText(row, c), margin + ci * colW + 3, y + 12);\n });\n doc.setDrawColor(220, 220, 220);\n doc.line(margin, y, pageW - margin, y);\n y += rh;\n }\n\n doc.save(`export-${new Date().toISOString().slice(0, 10)}.pdf`);\n }\n\n _trackByIndex(index: number): number { return index; }\n}\n","@if (loading()) {\n <app-table-skeleton [rows]=\"skeletonRows()\" [columns]=\"_skeletonCols()\" />\n} @else {\n <div class=\"overflow-x-auto relative rounded-md\"\n [style.width]=\"width() || '100%'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n <table class=\"w-full border-collapse\" style=\"table-layout:fixed\">\n <thead\n [style.position]=\"stickyHeader() ? 'sticky' : undefined\"\n [style.top]=\"stickyHeader() ? '0' : undefined\"\n [style.z-index]=\"stickyHeader() ? '2' : undefined\"\n >\n <tr>\n @if (selectable()) {\n <th class=\"relative px-3 py-2.5 text-xs whitespace-nowrap text-center\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n style=\"width:40px\"\n >\n <input type=\"checkbox\"\n [checked]=\"_isAllSelected()\"\n (change)=\"_toggleSelectAll()\"\n class=\"cursor-pointer\"\n />\n </th>\n }\n @if (expandable()) {\n <th class=\"relative px-3 py-2.5 text-xs whitespace-nowrap text-center\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n style=\"width:40px\"\n ></th>\n }\n @for (col of _displayColumns(); track col.key) {\n <th\n class=\"group relative px-3 py-2.5 text-xs font-semibold uppercase tracking-wider whitespace-nowrap\"\n [style.text-align]=\"col.align || 'left'\"\n [style.width]=\"_colWidth(col)\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n [class.cursor-pointer]=\"col.sortable && sortable()\"\n [class.select-none]=\"col.sortable && sortable()\"\n (click)=\"sortable() && col.sortable && _toggleSort(col.key)\"\n >\n {{ col.header }}\n @if (col.sortable && sortable()) {\n <i class=\"pi ml-1.5 text-[10px] align-middle\" [class]=\"_sortIcon(col.key)\"></i>\n }\n @if (resizable()) {\n <div\n class=\"absolute right-0 top-0 bottom-0 w-2 cursor-col-resize z-10 transition-opacity duration-150 opacity-30 hover:opacity-100 group-hover:opacity-80\"\n [style.background]=\"'linear-gradient(90deg,transparent 33%,var(--color-accent,oklch(0.64 0.2 50)) 33%,var(--color-accent,oklch(0.64 0.2 50)) 66%,transparent 66%)'\"\n [style.background-size]=\"'100% 40%'\"\n [style.background-repeat]=\"'no-repeat'\"\n [style.background-position]=\"'center'\"\n (mousedown)=\"_onResizeStart($event,col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n @if (searchable() || _filterCols().length || exportable()) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n [style.border-bottom]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.padding]=\"'8px 12px'\"\n [style.vertical-align]=\"'middle'\"\n >\n <div class=\"flex items-center flex-wrap gap-1.5\">\n @if (searchable()) {\n <app-search-input\n (valueChange)=\"_onSearch($event)\"\n placeholder=\"Search table...\"\n size=\"sm\"\n style=\"padding-bottom:0\"\n />\n }\n @for (col of _filterCols(); track col.key) {\n <app-drop-down\n [options]=\"col.filterOptions ?? []\"\n [placeholder]=\"'Filter ' + col.header\"\n size=\"sm\"\n [searchable]=\"true\"\n [config]=\"{ appendToParent: true }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_setFilter(col.key, $event)\"\n />\n }\n @if (columnToggle()) {\n <div data-col-toggle class=\"relative ml-auto\">\n <button\n type=\"button\"\n (click)=\"_columnToggleOpen.set(!_columnToggleOpen())\"\n class=\"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border cursor-pointer transition-colors hover:opacity-80\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n ><i class=\"pi pi-list text-[10px]\"></i> Columns</button>\n @if (_columnToggleOpen()) {\n <div\n class=\"absolute top-full right-0 mt-1 min-w-[140px] p-1.5 rounded-md shadow-lg z-50 border\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n @for (col of columns(); track col.key) {\n <label\n class=\"flex items-center gap-2 px-2 py-1.5 text-xs rounded cursor-pointer whitespace-nowrap transition-colors\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >\n <input type=\"checkbox\"\n [checked]=\"_isColumnVisible(col.key)\"\n (change)=\"_toggleColumn(col.key)\"\n />\n {{ col.header }}\n </label>\n }\n </div>\n }\n </div>\n }\n @if (exportable()) {\n <div data-export-toggle class=\"relative\">\n <button\n type=\"button\"\n (click)=\"_exportOpen.set(!_exportOpen())\"\n class=\"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-md border cursor-pointer transition-colors hover:opacity-80\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n ><i class=\"pi pi-download text-[10px]\"></i> Export</button>\n @if (_exportOpen()) {\n <div\n class=\"absolute top-full left-0 mt-1 min-w-[100px] p-1 rounded-md shadow-lg z-50 border\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n @for (fmt of ['Excel', 'PDF']; track fmt) {\n <button\n type=\"button\"\n (click)=\"fmt === 'Excel' ? _exportExcel() : _exportPdf(); _exportOpen.set(false)\"\n class=\"export-opt block w-full text-left px-2 py-1.5 text-xs rounded cursor-pointer border-none transition-colors\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n [style.background-color]=\"'transparent'\"\n >{{ fmt }}</button>\n }\n </div>\n }\n </div>\n }\n </div>\n </td>\n </tr>\n }\n </thead>\n <tbody>\n @if (_displayRows().length === 0) {\n <tr>\n <td [attr.colspan]=\"_colCount()\"\n class=\"px-3 py-8 text-center text-sm text-[var(--color-text-muted,oklch(0.48 0.01 260))]\"\n >{{ emptyMessage() }}</td>\n </tr>\n } @else {\n @for (row of _displayRows(); track _trackByIndex($index); let rowIndex = $index) {\n <tr\n class=\"border-b border-[var(--color-border-light,oklch(0.91 0.01 260))] transition-colors\"\n [class.hover:bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]]=\"hoverable()\"\n [style.background-color]=\"selectable() && _isSelected(row) ? 'color-mix(in srgb,var(--color-primary,oklch(0.32 0.09 258)) 8%,transparent)' : striped() && rowIndex % 2 === 1 ? 'var(--color-surface-alt,oklch(0.975 0.005 260))' : 'transparent'\"\n >\n @if (selectable()) {\n <td class=\"px-3 py-2.5 text-center\">\n <input type=\"checkbox\"\n [checked]=\"_isSelected(row)\"\n (change)=\"_toggleSelect(row)\"\n class=\"cursor-pointer\"\n />\n </td>\n }\n @if (expandable()) {\n <td class=\"px-3 py-2.5 text-center\">\n <button\n type=\"button\"\n (click)=\"_toggleExpand(rowIndex)\"\n class=\"inline-flex items-center justify-center w-6 h-6 border-none bg-transparent cursor-pointer rounded transition-colors hover:bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >\n <i class=\"pi text-[10px]\" [class.pi-chevron-down]=\"_isExpanded(rowIndex)\" [class.pi-chevron-right]=\"!_isExpanded(rowIndex)\"></i>\n </button>\n </td>\n }\n @for (col of _displayColumns(); track col.key; let colIndex = $index) {\n @let meta = _rowMeta()[rowIndex][colIndex];\n @if (meta.visible) {\n <td\n [attr.rowspan]=\"meta.rowspan > 1 ? meta.rowspan : null\"\n [style.text-align]=\"col.align || 'left'\"\n class=\"px-3 py-2.5 text-sm text-[var(--color-text,oklch(0.14 0.01 260))]\"\n >\n @if (col.actions) {\n <div class=\"flex items-center gap-1\">\n @for (action of col.actions; track $index) {\n @if (!action.visible || action.visible(row)) {\n <button\n type=\"button\"\n class=\"inline-flex items-center justify-center gap-1 px-2 py-1 text-xs rounded-md border-none cursor-pointer transition-opacity disabled:cursor-not-allowed\"\n [style.background-color]=\"'transparent'\"\n [style.color]=\"action.accentColor ? 'var(--color-' + action.accentColor + ',oklch(0.32 0.09 258))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n [style.opacity]=\"action.disabled?.(row) ? '0.5' : '1'\"\n [disabled]=\"action.disabled?.(row) ?? false\"\n (click)=\"action.click(row)\"\n [title]=\"action.label || ''\"\n >\n @if (action.icon) { <i [class]=\"action.icon\" class=\"text-xs\"></i> }\n @if (action.label) { <span>{{ action.label }}</span> }\n </button>\n }\n }\n </div>\n } @else {\n @if (col.truncate) {\n <app-tooltip position=\"top\" [text]=\"_cellText(row, col)\">\n {{ _cellLabel(row, col) }}\n </app-tooltip>\n } @else {\n {{ _cellLabel(row, col) }}\n }\n }\n </td>\n }\n }\n </tr>\n @if (expandable() && _isExpanded(rowIndex)) {\n <tr class=\"border-b border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n <td [attr.colspan]=\"_colCount()\" class=\"p-0\">\n <div [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\">\n @if (rowDetail) {\n <ng-container *ngTemplateOutlet=\"rowDetail; context: { $implicit: row }\" />\n } @else {\n <div class=\"p-3 text-sm text-[var(--color-text-muted,oklch(0.48 0.01 260))]\">No detail template</div>\n }\n </div>\n </td>\n </tr>\n }\n }\n @if (_footerCols().length) {\n <tr class=\"border-t-2 font-medium\"\n [style.border-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.background-color]=\"'var(--color-surface-alt,oklch(0.975 0.005 260))'\"\n >\n <td [attr.colspan]=\"_colCount()\" class=\"px-3 py-2.5 text-sm\"\n [style.color]=\"'var(--color-text,oklch(0.14 0.01 260))'\"\n >{{ _footerText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n @if (pageable() && _totalPages() > 1) {\n <div class=\"flex items-center justify-between px-3 py-2 border-t border-[var(--color-border-light,oklch(0.91 0.01 260))]\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n >\n <div class=\"flex items-center gap-2 text-xs text-[var(--color-text-muted,oklch(0.48 0.01 260))]\">\n <span>{{ _pageInfo().from }}–{{ _pageInfo().to }} of {{ _pageInfo().total }}</span>\n <app-drop-down\n [options]=\"_pageSizeOptions()\"\n [value]=\"'' + _pageSize()\"\n size=\"sm\"\n [config]=\"{ direction: 'up' }\"\n style=\"padding-bottom:0\"\n (valueChange)=\"_onPageSizeChange($event)\"\n />\n </div>\n <div class=\"flex items-center gap-0.5\">\n <button type=\"button\" (click)=\"_goToPage(1)\" [disabled]=\"_page() === 1\"\n class=\"inline-flex items-center justify-center w-7 h-7 text-xs rounded border-none cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\" [style.background-color]=\"'transparent'\"\n ><i class=\"pi pi-angle-double-left text-[10px]\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_page() - 1)\" [disabled]=\"_page() === 1\"\n class=\"inline-flex items-center justify-center w-7 h-7 text-xs rounded border-none cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\" [style.background-color]=\"'transparent'\"\n ><i class=\"pi pi-angle-left text-[10px]\"></i></button>\n @for (p of _visiblePages(); track p) {\n <button type=\"button\" (click)=\"_goToPage(p)\"\n class=\"inline-flex items-center justify-center w-7 h-7 text-xs rounded border-none cursor-pointer transition-colors font-medium\"\n [style.background-color]=\"p === _page() ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"p === _page() ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >{{ p }}</button>\n }\n <button type=\"button\" (click)=\"_goToPage(_page() + 1)\" [disabled]=\"_page() === _totalPages()\"\n class=\"inline-flex items-center justify-center w-7 h-7 text-xs rounded border-none cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\" [style.background-color]=\"'transparent'\"\n ><i class=\"pi pi-angle-right text-[10px]\"></i></button>\n <button type=\"button\" (click)=\"_goToPage(_totalPages())\" [disabled]=\"_page() === _totalPages()\"\n class=\"inline-flex items-center justify-center w-7 h-7 text-xs rounded border-none cursor-pointer disabled:opacity-30 disabled:cursor-not-allowed transition-colors\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\" [style.background-color]=\"'transparent'\"\n ><i class=\"pi pi-angle-double-right text-[10px]\"></i></button>\n </div>\n </div>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\n\nexport type AlertType = 'success' | 'warning' | 'danger' | 'info';\n\n@Component({\n selector: 'app-alert',\n imports: [],\n templateUrl: './alert.component.html',\n styleUrl: './alert.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlertComponent {\n readonly type = input<AlertType>('info');\n readonly title = input('');\n readonly dismissible = input(true);\n readonly showIcon = input(true);\n readonly width = input('');\n\n readonly dismiss = output<void>();\n\n readonly _visible = signal(true);\n readonly _isLeaving = signal(false);\n readonly _show = computed(() => this._visible() || this._isLeaving());\n\n readonly _icon = computed(() => {\n const icons: Record<AlertType, string> = {\n success: 'pi pi-check-circle',\n warning: 'pi pi-exclamation-triangle',\n danger: 'pi pi-times-circle',\n info: 'pi pi-info-circle',\n };\n return icons[this.type()];\n });\n\n private readonly _fallback: Record<AlertType, string> = {\n success: 'oklch(0.55 0.18 145)',\n warning: 'oklch(0.68 0.18 75)',\n danger: 'oklch(0.55 0.22 25)',\n info: 'oklch(0.55 0.15 235)',\n };\n\n readonly _bg = computed(() => `var(--color-${this.type()}-bg, color-mix(in srgb, ${this._fallback[this.type()]} 15%, white))`);\n readonly _border = computed(() => `var(--color-${this.type()}, ${this._fallback[this.type()]})`);\n\n _dismiss(): void {\n this._isLeaving.set(true);\n setTimeout(() => {\n this._visible.set(false);\n this._isLeaving.set(false);\n this.dismiss.emit();\n }, 200);\n }\n}\n","@if (_show()) {\n <div\n class=\"flex items-start gap-3 p-3 rounded-[var(--radius-md,0.5rem)] border\"\n [style.background-color]=\"_bg()\"\n [style.border-color]=\"_border()\"\n [style.transition]=\"'opacity 0.2s ease-out, margin-bottom 0.2s ease-out'\"\n [class.opacity-0]=\"_isLeaving()\"\n [class.mb-[-3rem]]=\"_isLeaving()\"\n [style.width]=\"width() || 'auto'\"\n role=\"alert\"\n >\n @if (showIcon()) {\n <i class=\"mt-0.5 text-sm\" [class]=\"_icon()\" [style.color]=\"_border()\"></i>\n }\n <div class=\"flex-1 min-w-0\">\n @if (title()) {\n <p class=\"text-sm font-semibold text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ title() }}</p>\n }\n <div class=\"text-sm text-[var(--color-text,oklch(0.14 0.01 260))]\"><ng-content /></div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-6 h-6 p-0 border-none bg-transparent cursor-pointer rounded-full hover:opacity-70 text-[var(--color-text-muted,oklch(0.48 0.01 260))] shrink-0\"\n (click)=\"_dismiss()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times text-xs\"></i>\n </button>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { type FieldSize, isThemeColor } from '../../form/form.interface';\n\nexport type SpinnerVariant = 'circle' | 'dual-ring' | 'dots' | 'pulse' | 'bars';\n\n@Component({\n selector: 'app-spinner',\n imports: [],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SpinnerComponent {\n readonly variant = input<SpinnerVariant>('dual-ring');\n readonly size = input<FieldSize>('md');\n readonly accentColor = input<string>('primary');\n readonly overlay = input(false);\n readonly text = input('');\n readonly imageUrl = input('');\n\n private readonly _px = computed(() => {\n const sizes: Record<FieldSize, number> = { sm: 96, md: 144, lg: 240 };\n return sizes[this.size()] ?? 144;\n });\n\n readonly _dims = computed(() => {\n const px = this._px();\n return {\n spinner: px,\n border: Math.max(2, Math.round(px / 6)),\n dualOuter: px * 2,\n dualInner: px,\n dualCenter: Math.round(px * 0.5),\n dot: Math.round(px * 0.45),\n pulse: Math.round(px * 1.8),\n barW: Math.max(3, Math.round(px * 0.2)),\n barH: px,\n };\n });\n\n readonly _color = computed(() => {\n const c = this.accentColor();\n if (isThemeColor(c)) return `var(--color-${c}, oklch(0.32 0.09 258))`;\n return c;\n });\n\n readonly _circleStyle = computed(() => ({\n width: this._dims().spinner + 'px',\n height: this._dims().spinner + 'px',\n borderWidth: this._dims().border + 'px',\n borderStyle: 'solid' as const,\n borderColor: 'var(--color-border,oklch(0.83 0.015 260))',\n borderTopColor: this._color(),\n }));\n\n readonly _dualOuterStyle = computed(() => ({\n width: this._dims().dualOuter + 'px',\n height: this._dims().dualOuter + 'px',\n borderWidth: this._dims().border + 'px',\n borderStyle: 'solid' as const,\n borderColor: 'var(--color-border,oklch(0.83 0.015 260))',\n borderTopColor: this._color(),\n }));\n\n readonly _dualInnerStyle = computed(() => ({\n width: this._dims().dualInner + 'px',\n height: this._dims().dualInner + 'px',\n borderWidth: Math.max(2, this._dims().border - 1) + 'px',\n borderStyle: 'solid' as const,\n borderColor: 'var(--color-border-light,oklch(0.91 0.01 260))',\n borderTopColor: this._color(),\n }));\n\n readonly _imageStyle = computed(() => ({\n width: this._dims().dualCenter + 'px',\n height: this._dims().dualCenter + 'px',\n }));\n\n readonly _dotStyle = computed(() => ({\n width: this._dims().dot + 'px',\n height: this._dims().dot + 'px',\n backgroundColor: this._color(),\n }));\n\n readonly _pulseStyle = computed(() => ({\n width: this._dims().pulse + 'px',\n height: this._dims().pulse + 'px',\n backgroundColor: this._color(),\n }));\n\n readonly _barStyle = computed(() => ({\n width: this._dims().barW + 'px',\n height: this._dims().barH + 'px',\n backgroundColor: this._color(),\n }));\n}\n","<div\n [style.display]=\"overlay() ? 'flex' : 'inline-flex'\"\n class=\"flex-col items-center justify-center\"\n [class.fixed]=\"overlay()\"\n [class.inset-0]=\"overlay()\"\n [class.z-50]=\"overlay()\"\n [style.background-color]=\"overlay() ? 'var(--color-backdrop,oklch(0 0 0/0.3))' : 'transparent'\"\n>\n @switch (variant()) {\n @case ('circle') {\n <div class=\"rounded-full animate-spin\" [style]=\"_circleStyle()\"></div>\n }\n @case ('dual-ring') {\n <div class=\"relative flex items-center justify-center\">\n <div class=\"rounded-full animate-spin\" [style]=\"_dualOuterStyle()\"></div>\n <div\n class=\"absolute rounded-full animate-spin\"\n [style]=\"_dualInnerStyle()\"\n style=\"animation-direction: reverse; animation-duration: 1.5s\"\n ></div>\n @if (imageUrl()) {\n <div class=\"absolute flex items-center justify-center\">\n <img [src]=\"imageUrl()\" [style]=\"_imageStyle()\" class=\"opacity-80\" alt=\"\" />\n </div>\n }\n </div>\n }\n @case ('dots') {\n <div class=\"flex items-center gap-1.5\">\n @for (dot of [0,1,2]; track dot) {\n <div\n class=\"rounded-full dot-loader\"\n [style]=\"_dotStyle()\"\n [style.animationDelay]=\"dot * 0.15 + 's'\"\n ></div>\n }\n </div>\n }\n @case ('pulse') {\n <div class=\"rounded-full pulse-loader\" [style]=\"_pulseStyle()\"></div>\n }\n @case ('bars') {\n <div class=\"flex items-end gap-[3px]\">\n @for (bar of [0,1,2,3,4]; track bar) {\n <div\n class=\"rounded-t-sm bar-loader\"\n [style]=\"_barStyle()\"\n [style.animationDelay]=\"bar * 0.1 + 's'\"\n ></div>\n }\n </div>\n }\n }\n\n @if (text()) {\n <p\n class=\"mt-2 text-xs\"\n [class.text-white]=\"overlay()\"\n [class.animate-pulse]=\"overlay()\"\n [class.text-[var(--color-text-muted,oklch(0.48 0.01 260))]]=\"!overlay()\"\n >{{ text() }}</p>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface ToastMessage {\n id: number;\n type: ToastType;\n message: string;\n title?: string;\n duration?: number;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private readonly _toasts = signal<ToastMessage[]>([]);\n private _counter = 0;\n\n readonly toasts = this._toasts.asReadonly();\n\n show(type: ToastType, message: string, config?: { title?: string; duration?: number }): void {\n const id = ++this._counter;\n const toast: ToastMessage = {\n id,\n type,\n message,\n title: config?.title,\n duration: config?.duration,\n };\n this._toasts.update(list => [...list, toast]);\n const ms = config?.duration ?? 4000;\n if (ms > 0) {\n setTimeout(() => this.remove(id), ms);\n }\n }\n\n success(message: string, config?: { title?: string; duration?: number }): void {\n this.show('success', message, config);\n }\n\n error(message: string, config?: { title?: string; duration?: number }): void {\n this.show('error', message, config);\n }\n\n warning(message: string, config?: { title?: string; duration?: number }): void {\n this.show('warning', message, config);\n }\n\n info(message: string, config?: { title?: string; duration?: number }): void {\n this.show('info', message, config);\n }\n\n remove(id: number): void {\n this._toasts.update(list => list.filter(t => t.id !== id));\n }\n\n clear(): void {\n this._toasts.set([]);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ToastService, type ToastType } from './toast.service';\n\n@Component({\n selector: 'app-toast',\n imports: [],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent {\n readonly position = input<'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'>('top-right');\n readonly maxVisible = input(5);\n\n private readonly _toastService = inject(ToastService);\n\n readonly _toasts = computed(() => this._toastService.toasts().slice(-this.maxVisible()));\n\n readonly _positionCls = computed(() => {\n const positions: Record<string, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n };\n return positions[this.position()] ?? 'top-4 right-4';\n });\n\n private readonly _fallback: Record<ToastType, string> = {\n success: 'oklch(0.55 0.18 145)',\n error: 'oklch(0.55 0.22 25)',\n warning: 'oklch(0.68 0.18 75)',\n info: 'oklch(0.55 0.15 235)',\n };\n\n private readonly _iconMap: Record<ToastType, string> = {\n success: 'pi pi-check-circle',\n error: 'pi pi-times-circle',\n warning: 'pi pi-exclamation-triangle',\n info: 'pi pi-info-circle',\n };\n\n private _themeKey(type: ToastType): string {\n return type === 'error' ? 'danger' : type;\n }\n\n _getBg(type: ToastType): string {\n return `var(--color-${this._themeKey(type)}-bg, color-mix(in srgb, ${this._fallback[type]} 15%, white))`;\n }\n\n _getIcon(type: ToastType): string {\n return this._iconMap[type];\n }\n\n _getBorder(type: ToastType): string {\n return `var(--color-${this._themeKey(type)}, ${this._fallback[type]})`;\n }\n\n _remove(id: number): void {\n this._toastService.remove(id);\n }\n}\n","<div\n class=\"fixed z-[9999] flex flex-col gap-2 w-72 max-w-[calc(100vw-2rem)] pointer-events-none\"\n [class]=\"_positionCls()\"\n>\n @for (toast of _toasts(); track toast.id) {\n <div\n class=\"flex items-start gap-3 p-3 rounded-[var(--radius-md,0.5rem)] shadow-lg border pointer-events-auto toast-enter\"\n [style.background-color]=\"_getBg(toast.type)\"\n [style.border-color]=\"_getBorder(toast.type)\"\n >\n <i class=\"mt-0.5 text-sm shrink-0\" [class]=\"_getIcon(toast.type)\" [style.color]=\"_getBorder(toast.type)\"></i>\n <div class=\"flex-1 min-w-0\">\n @if (toast.title) {\n <p class=\"text-xs font-semibold text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ toast.title }}</p>\n }\n <p class=\"text-sm text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ toast.message }}</p>\n </div>\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-5 h-5 p-0 border-none bg-transparent cursor-pointer rounded-full hover:opacity-70 shrink-0 text-[var(--color-text-muted,oklch(0.48 0.01 260))]\"\n (click)=\"_remove(toast.id)\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times text-xs\"></i>\n </button>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model, signal } from '@angular/core';\nimport { AccordionComponent } from './accordion.component';\n\n@Component({\n selector: 'app-accordion-panel',\n imports: [],\n templateUrl: './accordion-panel.component.html',\n styleUrl: './accordion-panel.component.css',\n host: {\n '[class]': \"'border border-[var(--color-border,oklch(0.83 0.015 260))] rounded-[var(--radius-md,0.5rem)] overflow-hidden'\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionPanelComponent {\n private _accordion = inject(AccordionComponent, { optional: true });\n\n readonly title = input('');\n readonly disabled = input(false);\n readonly expanded = model(false);\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n readonly _visible = computed(() => this._isOpen() || this._isClosing());\n\n _open(): void {\n if (this.disabled() || this._isOpen()) return;\n if (!this._accordion?.multi()) {\n this._accordion?.panels().forEach(p => { if (p !== this) p._close(); });\n }\n this._isOpen.set(true);\n this._isClosing.set(false);\n this.expanded.set(true);\n }\n\n _close(): void {\n if (!this._isOpen() || this._isClosing()) return;\n this._isClosing.set(true);\n this._isOpen.set(false);\n setTimeout(() => {\n this._isClosing.set(false);\n this.expanded.set(false);\n }, 150);\n }\n\n _toggle(): void {\n if (this._isOpen()) this._close();\n else this._open();\n }\n}\n","<button\n type=\"button\"\n (click)=\"_toggle()\"\n [disabled]=\"disabled()\"\n class=\"inline-flex items-center justify-between w-full px-3 py-2.5 text-sm font-medium border-none bg-transparent cursor-pointer disabled:cursor-not-allowed disabled:opacity-50 text-[var(--color-text,oklch(0.14 0.01 260))] transition-colors hover:bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]\"\n>\n <span>{{ title() }}</span>\n <i class=\"pi pi-chevron-down text-xs transition-transform duration-200\"\n [style.transform]=\"_isOpen() ? 'rotate(180deg)' : 'rotate(0deg)'\"\n ></i>\n</button>\n@if (_visible()) {\n <div\n class=\"origin-top border-t border-[var(--color-border-light,oklch(0.91 0.01 260))]\"\n [class.acc-enter]=\"_isOpen() && !_isClosing()\"\n [class.acc-leave]=\"_isClosing()\"\n >\n <div class=\"px-3 py-2.5 text-sm text-[var(--color-text-muted,oklch(0.48 0.01 260))]\">\n <ng-content />\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, Component, contentChildren, input } from '@angular/core';\nimport { AccordionPanelComponent } from './accordion-panel.component';\n\n@Component({\n selector: 'app-accordion',\n imports: [],\n template: '<ng-content />',\n host: { '[style.display]': \"'flex'\", '[style.flex-direction]': \"'column'\" },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionComponent {\n readonly multi = input(false);\n readonly panels = contentChildren(AccordionPanelComponent);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nimport { type NavItem } from './nav.interface';\n\n@Component({\n selector: 'app-nav',\n imports: [],\n templateUrl: './nav.component.html',\n styleUrl: './nav.component.css',\n host: {\n '(document:click)': '_onDocClick()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavComponent {\n private _router = inject(Router);\n private _routerSub?: Subscription;\n\n readonly items = input<NavItem[]>([]);\n readonly brandText = input('Brand');\n readonly brandIcon = input('pi pi-box');\n readonly fixed = input(true);\n\n readonly logout = output<void>();\n\n readonly _mobileOpen = signal(false);\n readonly _openDropdown = signal<string | null>(null);\n readonly _currentUrl = signal(this._router.url);\n\n constructor() {\n this._routerSub = this._router.events\n .pipe(filter(e => e instanceof NavigationEnd))\n .subscribe(() => this._currentUrl.set(this._router.url));\n }\n\n _isActive(segment: string): boolean {\n return this._currentUrl().includes(segment);\n }\n\n _toggleMobile(): void {\n this._mobileOpen.update(v => !v);\n if (!this._mobileOpen()) this._openDropdown.set(null);\n }\n\n _toggleDropdown(name: string): void {\n this._openDropdown.update(v => v === name ? null : name);\n }\n\n _navigate(route: string): void {\n this._router.navigate([route]);\n this._mobileOpen.set(false);\n this._openDropdown.set(null);\n }\n\n _onDocClick(): void {\n this._openDropdown.set(null);\n }\n}\n","<nav\n class=\"h-16 z-50 flex items-center px-5 gap-3\"\n [class.fixed]=\"fixed()\"\n [class.top-0]=\"fixed()\"\n [class.left-0]=\"fixed()\"\n [class.right-0]=\"fixed()\"\n [class.relative]=\"!fixed()\"\n [class.rounded-md]=\"!fixed()\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.color]=\"'var(--color-primary-inverse,oklch(0.99 0 0))'\"\n>\n <div class=\"flex items-center gap-2 shrink-0\">\n <i [class]=\"brandIcon()\" class=\"text-xl\"></i>\n <span class=\"text-sm font-bold hidden sm:inline\">{{ brandText() }}</span>\n </div>\n\n <button\n type=\"button\"\n (click)=\"_toggleMobile()\"\n class=\"inline-flex items-center justify-center w-8 h-8 border-none bg-transparent cursor-pointer rounded lg:hidden\"\n [style.color]=\"'inherit'\"\n >\n <i class=\"pi text-lg\" [class.pi-bars]=\"!_mobileOpen()\" [class.pi-times]=\"_mobileOpen()\"></i>\n </button>\n\n <!-- Desktop -->\n <div class=\"flex-1 hidden lg:flex items-center justify-center gap-1\">\n @for (item of items(); track item.id) {\n <div class=\"relative\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n (click)=\"item.children ? _toggleDropdown(item.id) : _navigate(item.route || '')\"\n class=\"inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-sm font-medium border-none cursor-pointer whitespace-nowrap\"\n [style.color]=\"'inherit'\"\n [style.background-color]=\"_isActive(item.id) || _openDropdown() === item.id ? 'rgba(255,255,255,0.15)' : 'transparent'\"\n >\n @if (item.icon) { <i [class]=\"'pi ' + item.icon\" class=\"text-sm\"></i> }\n <span>{{ item.label }}</span>\n @if (item.children) {\n <i class=\"pi pi-chevron-down text-[10px] transition-transform duration-200\"\n [style.transform]=\"_openDropdown() === item.id ? 'rotate(180deg)' : ''\"\n ></i>\n }\n </button>\n\n @if (item.children && _openDropdown() === item.id) {\n <div\n class=\"absolute top-full right-0 mt-1 min-w-[180px] flex flex-col gap-0.5 p-2 rounded-xl shadow-lg z-50\"\n [style.background-color]=\"'var(--color-surface,oklch(0.99 0 0))'\"\n [style.border]=\"'1px solid var(--color-border-light,oklch(0.91 0.01 260))'\"\n animate.enter=\"nav-dd-in\"\n animate.leave=\"nav-dd-out\"\n >\n @for (child of item.children; track child.id) {\n <button\n type=\"button\"\n (click)=\"_navigate(child.route || '')\"\n class=\"w-full flex items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border-none cursor-pointer whitespace-nowrap transition-colors\"\n [style.color]=\"_isActive(child.id) ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text,oklch(0.14 0.01 260))'\"\n [style.background-color]=\"_isActive(child.id) ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n >\n @if (child.icon) { <i [class]=\"'pi ' + child.icon\" class=\"text-xs\"></i> }\n <span>{{ child.label }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Mobile -->\n <div\n class=\"fixed left-0 right-0 top-16 flex flex-col gap-1 p-4 shadow-xl lg:hidden z-50\"\n [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\"\n [style.max-height]=\"_mobileOpen() ? 'calc(100vh - 64px)' : '0'\"\n [style.overflow]=\"_mobileOpen() ? 'auto' : 'hidden'\"\n [style.opacity]=\"_mobileOpen() ? '1' : '0'\"\n style=\"transition: max-height 0.3s ease, opacity 0.2s ease\"\n >\n @for (item of items(); track item.id) {\n <button\n type=\"button\"\n (click)=\"item.children ? _toggleDropdown(item.id) : _navigate(item.route || '')\"\n class=\"w-full flex items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border-none cursor-pointer transition-colors\"\n [style.color]=\"'inherit'\"\n [style.background-color]=\"_isActive(item.id) ? 'rgba(255,255,255,0.15)' : 'transparent'\"\n >\n @if (item.icon) { <i [class]=\"'pi ' + item.icon\" class=\"text-sm\"></i> }\n <span class=\"flex-1\">{{ item.label }}</span>\n @if (item.children) {\n <i class=\"pi pi-chevron-down text-xs transition-transform duration-200\"\n [style.transform]=\"_openDropdown() === item.id ? 'rotate(180deg)' : ''\"\n ></i>\n }\n </button>\n\n @if (item.children && _openDropdown() === item.id) {\n <div class=\"flex flex-col gap-0.5 mt-1 mr-4\"\n animate.enter=\"nav-mob-in\"\n animate.leave=\"nav-mob-out\"\n >\n @for (child of item.children; track child.id) {\n <button\n type=\"button\"\n (click)=\"_navigate(child.route || '')\"\n class=\"w-full flex items-center gap-2 px-3 py-2 rounded-lg text-sm border-none cursor-pointer transition-colors\"\n [style.color]=\"'rgba(255,255,255,0.85)'\"\n [style.background-color]=\"_isActive(child.id) ? 'rgba(255,255,255,0.15)' : 'transparent'\"\n >\n @if (child.icon) { <i [class]=\"'pi ' + child.icon\" class=\"text-xs\"></i> }\n <span>{{ child.label }}</span>\n </button>\n }\n </div>\n }\n }\n </div>\n\n <button\n type=\"button\"\n (click)=\"logout.emit()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-sm font-medium border whitespace-nowrap cursor-pointer transition-colors shrink-0\"\n [style.color]=\"'inherit'\"\n [style.border-color]=\"'rgba(255,255,255,0.3)'\"\n >\n <i class=\"pi pi-sign-out text-sm\"></i>\n <span class=\"hidden sm:inline\">Logout</span>\n </button>\n</nav>\n","import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, output, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { type SidebarItem } from './sidebar.interface';\n\n@Component({\n selector: 'app-sidebar',\n imports: [],\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.css',\n host: {\n '[style.display]': \"'contents'\",\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidebarComponent {\n private _router = inject(Router);\n private _destroyRef = inject(DestroyRef);\n\n readonly isOpen = input(false);\n readonly isCollapsed = input(false);\n readonly items = input<SidebarItem[]>([]);\n readonly title = input('Menu');\n readonly width = input('280px');\n readonly activeId = input<string | null>(null);\n\n readonly toggleOpen = output<void>();\n readonly toggleCollapse = output<void>();\n readonly itemClick = output<SidebarItem>();\n readonly logout = output<void>();\n\n readonly _expanded = signal<Set<string>>(new Set());\n readonly _currentUrl = signal(this._router.url);\n\n private _activeId = computed(() => {\n if (this.activeId() !== null) return this.activeId();\n const url = this._currentUrl();\n for (const item of this.items()) {\n if (item.route && this._router.isActive(item.route, false)) return item.id;\n if (item.children) {\n for (const child of item.children) {\n if (child.route && this._router.isActive(child.route, false)) return child.id;\n }\n }\n }\n return null;\n });\n\n readonly _asideStyle = computed(() => ({\n width: this.isCollapsed() ? '64px' : this.width(),\n 'background-color': 'var(--color-surface,oklch(0.99 0 0))',\n }));\n\n constructor() {\n this._router.events\n .pipe(\n filter(e => e instanceof NavigationEnd),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => this._currentUrl.set(this._router.url));\n }\n\n _isActive(id: string): boolean { return this._activeId() === id; }\n _isExpanded(id: string): boolean { return this._expanded().has(id); }\n\n _onItemClick(item: SidebarItem): void {\n if (item.children?.length) {\n this._expanded.update(s => {\n const n = new Set(s);\n if (n.has(item.id)) n.delete(item.id); else n.add(item.id);\n return n;\n });\n } else {\n this.itemClick.emit(item);\n }\n }\n\n _onBackdrop(): void { this.toggleOpen.emit(); }\n}\n","@if (isOpen()) {\n <div\n class=\"sd-backdrop\"\n animate.enter=\"sd-backdrop-in\"\n animate.leave=\"sd-backdrop-out\"\n (click)=\"_onBackdrop()\"\n ></div>\n}\n\n<aside\n class=\"sd-aside\"\n [class.sd-open]=\"isOpen()\"\n [class.sd-collapsed]=\"isCollapsed()\"\n [style]=\"_asideStyle()\"\n>\n <div class=\"flex items-center justify-between shrink-0 px-4 h-14 border-b\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n <button\n type=\"button\"\n (click)=\"toggleCollapse.emit()\"\n class=\"group inline-flex items-center justify-center w-8 h-8 border-none bg-transparent cursor-pointer rounded transition-all duration-200 hover:bg-[var(--color-accent,oklch(0.64 0.2 50))] active:bg-[var(--color-accent,oklch(0.64 0.2 50))]\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >\n <i class=\"pi pi-th-large text-sm transition-transform duration-500 ease-in-out active:scale-90\"\n [style.transform]=\"isCollapsed() ? 'rotate(180deg)' : 'rotate(0deg)'\"\n ></i>\n </button>\n\n @if (!isCollapsed()) {\n <span class=\"text-sm font-semibold text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ title() }}</span>\n }\n\n <button\n type=\"button\"\n (click)=\"_onBackdrop()\"\n class=\"sd-close-btn inline-flex items-center justify-center w-8 h-8 border-none bg-transparent cursor-pointer rounded transition-colors hover:bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]\"\n [style.color]=\"'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >\n <i class=\"pi pi-times text-sm\"></i>\n </button>\n </div>\n\n <nav class=\"flex-1 overflow-y-auto p-3\">\n <ul class=\"flex flex-col gap-1\" [style.list-style]=\"'none'\" [style.padding]=\"'0'\">\n @for (item of items(); track item.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"_onItemClick(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg transition-all duration-150 text-sm font-medium border-none cursor-pointer\"\n [style.background-color]=\"_isActive(item.id) ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"_isActive(item.id) ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text,oklch(0.14 0.01 260))'\"\n >\n @if (item.icon) {\n <i [class]=\"'pi ' + item.icon\" class=\"text-base shrink-0\"></i>\n }\n @if (!isCollapsed()) {\n <span class=\"flex-1 text-right\">{{ item.label }}</span>\n @if (item.children?.length) {\n <i class=\"pi pi-chevron-down text-xs transition-transform duration-200\"\n [style.transform]=\"_isExpanded(item.id) ? 'rotate(180deg)' : ''\"\n ></i>\n }\n }\n </button>\n\n @if (!isCollapsed() && item.children?.length && _isExpanded(item.id)) {\n <ul class=\"mt-1 mr-6 flex flex-col gap-0.5\"\n [style.list-style]=\"'none'\" [style.padding]=\"'0'\"\n animate.enter=\"sd-slide-in\"\n animate.leave=\"sd-slide-out\"\n >\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"_onItemClick(child)\"\n class=\"w-full flex items-center gap-2.5 px-3 py-2 rounded-lg transition-all duration-150 text-sm border-none cursor-pointer\"\n [style.background-color]=\"_isActive(child.id) ? 'var(--color-primary,oklch(0.32 0.09 258))' : 'transparent'\"\n [style.color]=\"_isActive(child.id) ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n >\n <span class=\"w-1.5 h-1.5 rounded-full shrink-0\"\n [style.background-color]=\"_isActive(child.id) ? 'var(--color-primary-inverse,oklch(0.99 0 0))' : 'var(--color-text-muted,oklch(0.48 0.01 260))'\"\n ></span>\n <span>{{ child.label }}</span>\n </button>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n </nav>\n\n <div class=\"shrink-0 p-3 border-t flex flex-col gap-2\"\n [style.border-color]=\"'var(--color-border-light,oklch(0.91 0.01 260))'\"\n >\n <button\n type=\"button\"\n (click)=\"logout.emit()\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium border-none cursor-pointer transition-colors\"\n [style.background-color]=\"'var(--color-danger,oklch(0.57 0.21 25))'\"\n [style.color]=\"'white'\"\n [class.justify-center]=\"isCollapsed()\"\n >\n <i class=\"pi pi-sign-out text-base shrink-0\"></i>\n @if (!isCollapsed()) {\n <span>Logout</span>\n }\n </button>\n </div>\n</aside>\n","import { ChangeDetectionStrategy, Component, computed, effect, input, model, OnDestroy, output, signal } from '@angular/core';\nimport { type ThemeColor, isThemeColor } from '../../form/form.interface';\n\nexport interface ConfirmDialogConfig {\n title?: string;\n confirmText?: string;\n cancelText?: string;\n icon?: string;\n confirmAccent?: ThemeColor | string;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n}\n\n@Component({\n selector: 'app-confirm-dialog',\n imports: [],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.css',\n host: {\n '(document:keydown.escape)': '_onEscape($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent implements OnDestroy {\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n readonly open = model(false);\n readonly message = input('');\n readonly config = input<ConfirmDialogConfig>({});\n\n readonly confirm = output<void>();\n readonly cancel = output<void>();\n\n readonly _title = computed(() => this.config().title ?? 'Confirm');\n readonly _confirmText = computed(() => this.config().confirmText ?? 'Confirm');\n readonly _cancelText = computed(() => this.config().cancelText ?? 'Cancel');\n readonly _icon = computed(() => this.config().icon ?? 'pi pi-question-circle');\n readonly _confirmAccent = computed(() => {\n const a = this.config().confirmAccent;\n if (a && isThemeColor(a)) return a;\n return 'primary';\n });\n readonly _closeOnBackdrop = computed(() => this.config().closeOnBackdrop ?? false);\n readonly _closeOnEscape = computed(() => this.config().closeOnEscape ?? true);\n readonly _confirmBg = computed(() => {\n const fallbacks: Record<string, string> = { primary: 'oklch(0.32 0.09 258)', danger: 'oklch(0.55 0.22 25)', accent: 'oklch(0.64 0.2 50)', success: 'oklch(0.55 0.18 145)' };\n const key = this._confirmAccent();\n return `var(--color-${key}, ${fallbacks[key] ?? fallbacks['primary']})`;\n });\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n\n readonly _visible = computed(() => this._isOpen() || this._isClosing());\n\n constructor() {\n effect(() => {\n if (this.open() && !this._isOpen()) {\n this._isOpen.set(true);\n this._isClosing.set(false);\n } else if (!this.open() && this._isOpen()) {\n this._startClose();\n }\n });\n }\n\n private _startClose(): void {\n if (this._closeTimer) clearTimeout(this._closeTimer);\n this._isClosing.set(true);\n this._closeTimer = setTimeout(() => {\n this._isOpen.set(false);\n this._isClosing.set(false);\n this._closeTimer = null;\n }, 200);\n }\n\n ngOnDestroy(): void {\n if (this._closeTimer) clearTimeout(this._closeTimer);\n }\n\n _onConfirm(): void {\n this.open.set(false);\n this.confirm.emit();\n }\n\n _onCancel(): void {\n this.open.set(false);\n this.cancel.emit();\n }\n\n _onBackdropClick(): void {\n if (this._closeOnBackdrop()) {\n this._onCancel();\n }\n }\n\n _onEscape(event: Event): void {\n if (this._closeOnEscape() && this._visible()) {\n event.preventDefault();\n this._onCancel();\n }\n }\n}\n","@if (_visible()) {\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-[var(--modal-backdrop,oklch(0 0 0/0.45))]\"\n [class.backdrop-enter]=\"_isOpen() && !_isClosing()\"\n [class.backdrop-leave]=\"_isClosing()\"\n (click)=\"_onBackdropClick()\"\n >\n <div\n class=\"bg-[var(--color-surface,oklch(0.99 0 0))] border border-[var(--color-border,oklch(0.83 0.015 260))] rounded-[var(--radius-lg,0.75rem)] shadow-xl w-full max-w-sm mx-4 overflow-hidden text-[var(--color-text,oklch(0.14 0.01 260))]\"\n [class.panel-enter]=\"_isOpen() && !_isClosing()\"\n [class.panel-leave]=\"_isClosing()\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (_title()) {\n <div class=\"flex items-center justify-between px-4 py-3 border-b border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n <h3 class=\"text-sm font-semibold\">{{ _title() }}</h3>\n </div>\n }\n\n <div class=\"flex flex-col items-center gap-3 px-6 py-6 text-center\">\n @if (_icon()) {\n <i class=\"{{ _icon() }} text-2xl text-[var(--color-primary,oklch(0.32 0.09 258))]\"></i>\n }\n <p class=\"text-sm text-[var(--color-text,oklch(0.14 0.01 260))]\">{{ message() }}</p>\n </div>\n\n <div class=\"flex items-center justify-end gap-2 px-4 py-3 border-t border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n <button\n type=\"button\"\n class=\"px-3 py-1.5 text-sm rounded-[var(--radius-md,0.5rem)] border border-[var(--color-border,oklch(0.83 0.015 260))] bg-transparent text-[var(--color-text,oklch(0.14 0.01 260))] cursor-pointer transition-colors duration-150 hover:bg-[var(--color-surface-alt,oklch(0.975 0.005 260))]\"\n (click)=\"_onCancel()\"\n >{{ _cancelText() }}</button>\n\n <button\n type=\"button\"\n [style.background-color]=\"_confirmBg()\"\n class=\"px-3 py-1.5 text-sm rounded-[var(--radius-md,0.5rem)] border-none text-white cursor-pointer transition-opacity duration-150 hover:opacity-90\"\n (click)=\"_onConfirm()\"\n >{{ _confirmText() }}</button>\n </div>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, model, OnDestroy, output, signal } from '@angular/core';\n\nexport interface ModalConfig {\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n showCloseButton?: boolean;\n maxWidth?: string;\n}\n\n@Component({\n selector: 'app-modal',\n imports: [],\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.css',\n host: {\n '(document:keydown.escape)': '_onEscape($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements OnDestroy {\n private _closeTimer: ReturnType<typeof setTimeout> | null = null;\n readonly open = model(false);\n readonly title = input('');\n readonly width = input('');\n readonly config = input<ModalConfig>({});\n\n readonly closed = output<void>();\n\n readonly _closeOnBackdrop = computed(() => this.config().closeOnBackdrop ?? true);\n readonly _closeOnEscape = computed(() => this.config().closeOnEscape ?? true);\n readonly _showClose = computed(() => this.config().showCloseButton ?? true);\n readonly _maxWidth = computed(() => this.config().maxWidth ?? '500px');\n readonly _width = computed(() => this.width() || this._maxWidth());\n\n readonly _isOpen = signal(false);\n readonly _isClosing = signal(false);\n\n readonly _visible = computed(() => this._isOpen() || this._isClosing());\n\n constructor() {\n effect(() => {\n if (this.open() && !this._isOpen()) {\n this._isOpen.set(true);\n this._isClosing.set(false);\n } else if (!this.open() && this._isOpen()) {\n this._startClose();\n }\n });\n }\n\n private _startClose(): void {\n if (this._closeTimer) clearTimeout(this._closeTimer);\n this._isClosing.set(true);\n this._closeTimer = setTimeout(() => {\n this._isOpen.set(false);\n this._isClosing.set(false);\n this.closed.emit();\n this._closeTimer = null;\n }, 200);\n }\n\n close(): void {\n if (this._isOpen()) {\n this._startClose();\n }\n this.open.set(false);\n }\n\n ngOnDestroy(): void {\n if (this._closeTimer) clearTimeout(this._closeTimer);\n }\n\n _onBackdropClick(_event: Event): void {\n if (this._closeOnBackdrop()) {\n this.close();\n }\n }\n\n _onEscape(event: Event): void {\n if (this._closeOnEscape() && this._visible()) {\n event.preventDefault();\n this.close();\n }\n }\n}\n","@if (_visible()) {\n <div\n class=\"modal-backdrop fixed inset-0 z-50 flex items-center justify-center bg-[var(--modal-backdrop,oklch(0 0 0/0.45))]\"\n [class.backdrop-enter]=\"_isOpen() && !_isClosing()\"\n [class.backdrop-leave]=\"_isClosing()\"\n (click)=\"_onBackdropClick($event)\"\n >\n <div\n class=\"bg-[var(--color-surface,oklch(0.99 0 0))] border border-[var(--color-border,oklch(0.83 0.015 260))] rounded-[var(--radius-lg,0.75rem)] shadow-xl w-full mx-4 overflow-hidden text-[var(--color-text,oklch(0.14 0.01 260))]\"\n [style.max-width]=\"_width()\"\n [class.panel-enter]=\"_isOpen() && !_isClosing()\"\n [class.panel-leave]=\"_isClosing()\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (title() || _showClose()) {\n <div class=\"flex items-center justify-between px-4 py-3\" [style.background-color]=\"'var(--color-primary,oklch(0.32 0.09 258))'\">\n <h3 class=\"text-sm font-semibold text-[var(--color-primary-inverse,oklch(0.99 0 0))]\">{{ title() }}</h3>\n @if (_showClose()) {\n <button\n type=\"button\"\n class=\"flex items-center justify-center w-7 h-7 p-0 border-none rounded-full bg-transparent text-white/80 hover:bg-white/20 cursor-pointer transition-colors\"\n (click)=\"close()\"\n aria-label=\"Close\"\n >\n <i class=\"pi pi-times text-xs\"></i>\n </button>\n }\n </div>\n }\n\n <div class=\"px-4 py-4\">\n <ng-content />\n </div>\n\n <div class=\"modal-footer flex items-center justify-end gap-2 px-4 py-3 border-t border-[var(--color-border-light,oklch(0.91 0.01 260))]\">\n <ng-content select=\"[modal-footer]\" />\n </div>\n </div>\n </div>\n}\n","// Form\nexport * from './lib/form/form.interface';\nexport * from './lib/form/checkbox/checkbox.component';\nexport * from './lib/form/date-picker/date-picker.component';\nexport * from './lib/form/date-picker/date-picker.interface';\nexport * from './lib/form/drop-down/drop-down.component';\nexport * from './lib/form/drop-down/drop-down.interface';\nexport * from './lib/form/file-upload/file-upload.component';\nexport * from './lib/form/multi-select/multi-select.component';\nexport * from './lib/form/multi-select/multi-select.interface';\nexport * from './lib/form/password-input/password-input.component';\nexport * from './lib/form/search-input/search-input.component';\nexport * from './lib/form/search-input/search-input.interface';\nexport * from './lib/form/text-input/text-input.component';\nexport * from './lib/form/toggle/toggle.component';\n\n// Data Display\nexport * from './lib/data-display/badge/badge.component';\nexport * from './lib/data-display/banner-slider/banner-slider.component';\nexport * from './lib/data-display/carousel/carousel.component';\nexport * from './lib/data-display/empty-state/empty-state.component';\nexport * from './lib/data-display/image-upload/image-upload.component';\nexport * from './lib/data-display/skeleton/skeleton.component';\nexport * from './lib/data-display/table/table.component';\nexport * from './lib/data-display/table-skeleton/table-skeleton.component';\nexport * from './lib/data-display/tooltip/tooltip.component';\n\n// Feedback\nexport * from './lib/feedback/alert/alert.component';\nexport * from './lib/feedback/spinner/spinner.component';\nexport * from './lib/feedback/toast/toast.component';\nexport * from './lib/feedback/toast/toast.service';\n\n// Navigation\nexport * from './lib/navigation/accordion/accordion.component';\nexport * from './lib/navigation/accordion/accordion-panel.component';\nexport * from './lib/navigation/nav/nav.component';\nexport * from './lib/navigation/nav/nav.interface';\nexport * from './lib/navigation/sidebar/sidebar.component';\nexport * from './lib/navigation/sidebar/sidebar.interface';\n\n// Overlay\nexport * from './lib/overlay/confirm-dialog/confirm-dialog.component';\nexport * from './lib/overlay/modal/modal.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}