@elvora/angular 1.0.0-rc.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.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/index.cjs +9544 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2636 -0
- package/dist/index.d.ts +2636 -0
- package/dist/index.js +9540 -0
- package/dist/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme.service.ts","../src/button.component.ts","../src/icon-button.component.ts","../src/input.component.ts","../src/textarea.component.ts","../src/icon.component.ts","../src/checkbox.component.ts","../src/radio.component.ts","../src/switch.component.ts","../src/select.component.ts","../src/label.component.ts","../src/divider.component.ts","../src/avatar.component.ts","../src/badge.component.ts","../src/tag.component.ts","../src/spinner.component.ts","../src/progress.component.ts","../src/tooltip.directive.ts","../src/box.component.ts","../src/stack.component.ts","../src/grid.component.ts","../src/container.component.ts","../src/card.component.ts","../src/alert.component.ts","../src/skeleton.component.ts","../src/empty.component.ts","../src/result.component.ts","../src/modal.component.ts","../src/drawer.component.ts","../src/popover.component.ts","../src/toast.service.ts","../src/tabs.component.ts","../src/menu.component.ts","../src/breadcrumb.component.ts","../src/pagination.component.ts","../src/steps.component.ts","../src/anchor.component.ts","../src/back-top.component.ts","../src/form.component.ts","../src/number-input.component.ts","../src/segmented.component.ts","../src/slider.component.ts","../src/rate.component.ts","../src/upload.component.ts","../src/auto-complete.component.ts","../src/color-picker.component.ts","../src/date-picker.component.ts","../src/time-picker.component.ts","../src/date-range-picker.component.ts","../src/cascader.component.ts","../src/tree-select.component.ts","../src/mentions.component.ts","../src/transfer.component.ts","../src/table.component.ts","../src/tree.component.ts","../src/list.component.ts","../src/descriptions.component.ts","../src/calendar.component.ts","../src/statistic.component.ts","../src/carousel.component.ts","../src/image.component.ts","../src/timeline.component.ts","../src/collapse.component.ts","../src/accordion.component.ts","../src/tour.component.ts","../src/float-button.component.ts","../src/watermark.component.ts","../src/qr-code.component.ts","../src/splitter.component.ts","../src/affix.component.ts","../src/speed-dial.component.ts","../src/backdrop.component.ts","../src/image-list.component.ts","../src/pagination-variants.component.ts","../src/stepper.component.ts","../src/toggle-button.component.ts","../src/button-group.component.ts","../src/chip-input.component.ts","../src/pro-table.component.ts","../src/pro-form.component.ts","../src/pro-layout.component.ts","../src/data-grid.component.ts"],"names":["InjectionToken","defaultTheme","ElvoraThemeService","inject","signal","Injectable","ElvoraButton","defaultButtonProps","EventEmitter","computed","getButtonStyle","Input","Output","Component","ChangeDetectionStrategy","ViewEncapsulation","NgIf","NgStyle","ElvoraIconButton","ElvoraInput","defaultInputProps","getInputStyle","ElvoraTextarea","ElvoraIcon","icons","getIcon","ElvoraCheckbox","sizeMap","ElvoraRadioGroup","ElvoraRadio","ElvoraSwitch","ElvoraSelect","NgFor","ElvoraLabel","ElvoraDivider","ElvoraAvatar","ElvoraBadge","statusIntent","ElvoraTag","sizePx","ElvoraSpinner","ElvoraProgress","ElvoraTooltip","ElementRef","Renderer2","HostListener","Directive","ElvoraBox","ElvoraStack","ElvoraHStack","ElvoraVStack","ElvoraGrid","ElvoraGridItem","ElvoraContainer","pad","ElvoraCard","ElvoraCardHeader","ElvoraCardBody","ElvoraCardFooter","ElvoraAlert","ElvoraSkeleton","ElvoraEmpty","ElvoraResult","ElvoraModal","effect","ElvoraDrawer","ElvoraPopover","ElvoraToastService","generateId","ElvoraToastHost","ElvoraTabTemplate","TemplateRef","ElvoraTabs","getNextTabIndex","ContentChildren","NgTemplateOutlet","ElvoraMenu","ElvoraBreadcrumb","ElvoraPagination","ElvoraSteps","ElvoraAnchor","ElvoraBackTop","ElvoraFormState","ElvoraForm","ElvoraFormField","ElvoraNumberInput","ElvoraSegmented","ElvoraSlider","ViewChild","ElvoraRate","ElvoraUpload","ElvoraAutoComplete","ElvoraColorPicker","ElvoraDatePicker","ElvoraTimePicker","defaultFormat","startOfMonth","addMonths","buildMatrix","isSameDay","ElvoraDateRangePicker","next","ElvoraCascader","flatten","ElvoraTreeSelect","ElvoraMentions","ElvoraTransfer","ElvoraTable","ElvoraTree","ElvoraList","ContentChild","ElvoraDescriptions","ElvoraCalendar","ElvoraStatistic","ElvoraCarousel","ElvoraImage","ElvoraTimeline","ElvoraCollapse","ElvoraAccordion","ElvoraTour","ElvoraFloatButton","ElvoraWatermark","ElvoraQrCode","generateQrMatrix","ElvoraSplitter","ElvoraAffix","ElvoraSpeedDial","ElvoraBackdrop","ElvoraImageList","ElvoraSimplePagination","ElvoraMiniPagination","ElvoraStepper","ElvoraToggleButton","ElvoraButtonGroup","ElvoraChipInput","ElvoraProTable","ElvoraProForm","NgSwitch","NgSwitchCase","NgSwitchDefault","ElvoraProLayout","defaultCompare","ElvoraDataGrid"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Injectable, signal, InjectionToken, inject, type Signal } from '@angular/core';\r\nimport type { ElvoraTheme, Direction } from '@elvora/core';\r\nimport { defaultTheme } from '@elvora/themes';\r\n\r\n/**\r\n * Provide a theme to an Angular app:\r\n *\r\n * ```ts\r\n * import { ApplicationConfig } from '@angular/core';\r\n * import { provideElvoraTheme } from '@elvora/angular';\r\n * import { darkTheme } from '@elvora/themes';\r\n *\r\n * export const appConfig: ApplicationConfig = {\r\n * providers: [provideElvoraTheme(darkTheme)],\r\n * };\r\n * ```\r\n */\r\nexport const ELVORA_THEME = new InjectionToken<ElvoraTheme>('ELVORA_THEME');\r\nexport const ELVORA_DIRECTION = new InjectionToken<Direction>('ELVORA_DIRECTION');\r\n\r\nexport function provideElvoraTheme(theme: ElvoraTheme = defaultTheme, direction: Direction = 'ltr') {\r\n return [\r\n { provide: ELVORA_THEME, useValue: theme },\r\n { provide: ELVORA_DIRECTION, useValue: direction },\r\n ];\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ElvoraThemeService {\r\n private readonly providedTheme = inject(ELVORA_THEME, { optional: true });\r\n private readonly providedDirection = inject(ELVORA_DIRECTION, { optional: true });\r\n\r\n private readonly themeSignal = signal<ElvoraTheme>(this.providedTheme ?? defaultTheme);\r\n private readonly directionSignal = signal<Direction>(this.providedDirection ?? 'ltr');\r\n\r\n readonly theme: Signal<ElvoraTheme> = this.themeSignal.asReadonly();\r\n readonly direction: Signal<Direction> = this.directionSignal.asReadonly();\r\n\r\n setTheme(theme: ElvoraTheme): void {\r\n this.themeSignal.set(theme);\r\n }\r\n\r\n setDirection(direction: Direction): void {\r\n this.directionSignal.set(direction);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { defaultButtonProps, getButtonStyle } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport type { ElvoraSize, ElvoraVariant, ElvoraTheme } from '@elvora/core';\r\n\r\n/**\r\n * Angular Elvora Button — standalone component.\r\n *\r\n * Usage:\r\n * ```html\r\n * <elvora-button variant=\"primary\" size=\"md\" (press)=\"onClick()\">\r\n * Click me\r\n * </elvora-button>\r\n * ```\r\n *\r\n * Implements WAI-ARIA Button pattern; identical visual contract as the React,\r\n * RN, and Vue adapters.\r\n */\r\n@Component({\r\n selector: 'elvora-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <button\r\n type=\"button\"\r\n [attr.aria-disabled]=\"inert() || null\"\r\n [attr.aria-busy]=\"isLoading || null\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size\"\r\n [attr.data-loading]=\"isLoading || null\"\r\n [disabled]=\"inert()\"\r\n [ngStyle]=\"rootStyle()\"\r\n (click)=\"handleClick($event)\"\r\n (mouseenter)=\"hovered.set(true)\"\r\n (mouseleave)=\"hovered.set(false); pressed.set(false)\"\r\n (mousedown)=\"pressed.set(true)\"\r\n (mouseup)=\"pressed.set(false)\"\r\n (focus)=\"focusVisible.set(true)\"\r\n (blur)=\"focusVisible.set(false)\"\r\n >\r\n <span *ngIf=\"isLoading\" class=\"elvora-button__spinner\" aria-hidden=\"true\">\r\n <svg [attr.width]=\"spinnerSize()\" [attr.height]=\"spinnerSize()\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"spinnerColor()\" stroke-opacity=\"0.25\" stroke-width=\"3\"></circle>\r\n <path d=\"M22 12a10 10 0 0 1-10 10\" [attr.stroke]=\"spinnerColor()\" stroke-width=\"3\" stroke-linecap=\"round\"></path>\r\n </svg>\r\n </span>\r\n <span [ngStyle]=\"labelStyle()\"><ng-content></ng-content></span>\r\n </button>\r\n <style>\r\n elvora-button .elvora-button__spinner svg { animation: elvora-spin 0.75s linear infinite; }\r\n @keyframes elvora-spin { to { transform: rotate(360deg); } }\r\n </style>\r\n `,\r\n imports: [NgIf, NgStyle],\r\n})\r\nexport class ElvoraButton {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() variant: ElvoraVariant = defaultButtonProps.variant;\r\n @Input() size: ElvoraSize = defaultButtonProps.size;\r\n @Input() intent: keyof ElvoraTheme['colors']['intent'] | undefined;\r\n @Input() fullWidth: boolean = defaultButtonProps.fullWidth;\r\n @Input() isLoading: boolean = defaultButtonProps.isLoading;\r\n @Input() isDisabled: boolean = defaultButtonProps.isDisabled;\r\n @Input() loadingText: string = defaultButtonProps.loadingText;\r\n\r\n @Output() press = new EventEmitter<MouseEvent>();\r\n\r\n protected readonly hovered = signal(false);\r\n protected readonly pressed = signal(false);\r\n protected readonly focusVisible = signal(false);\r\n\r\n protected readonly inert: Signal<boolean> = computed(() => this.isDisabled || this.isLoading);\r\n\r\n protected readonly style = computed(() =>\r\n getButtonStyle({\r\n theme: this.themeService.theme(),\r\n variant: this.variant,\r\n size: this.size,\r\n fullWidth: this.fullWidth,\r\n isLoading: this.isLoading,\r\n isDisabled: this.isDisabled,\r\n isPressed: this.pressed(),\r\n isHovered: this.hovered(),\r\n isFocusVisible: this.focusVisible(),\r\n intent: this.intent,\r\n }),\r\n );\r\n\r\n protected readonly rootStyle = computed(() => this.style().root);\r\n protected readonly labelStyle = computed(() => this.style().label);\r\n protected readonly spinnerColor = computed(() => this.style().spinnerColor);\r\n protected readonly spinnerSize = computed(() =>\r\n Math.max(12, Number(this.style().label.fontSize) || 14),\r\n );\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (this.inert()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.press.emit(event);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { defaultButtonProps, getButtonStyle, type ElvoraSize, type ElvoraTheme, type ElvoraVariant } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizePx: Record<ElvoraSize, number> = { xs: 24, sm: 32, md: 40, lg: 48, xl: 56 };\r\n\r\n/**\r\n * Square icon-only button. `ariaLabel` is REQUIRED — icon-only buttons must\r\n * announce a name to assistive tech.\r\n */\r\n@Component({\r\n selector: 'elvora-icon-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-disabled]=\"inert() || null\"\r\n [attr.aria-busy]=\"isLoading || null\"\r\n [attr.data-variant]=\"variant\"\r\n [attr.data-size]=\"size\"\r\n [disabled]=\"inert()\"\r\n [ngStyle]=\"rootStyle()\"\r\n (click)=\"handleClick($event)\"\r\n (mouseenter)=\"hovered.set(true)\"\r\n (mouseleave)=\"hovered.set(false); pressed.set(false)\"\r\n (mousedown)=\"pressed.set(true)\"\r\n (mouseup)=\"pressed.set(false)\"\r\n (focus)=\"focusVisible.set(true)\"\r\n (blur)=\"focusVisible.set(false)\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class ElvoraIconButton {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() ariaLabel = '';\r\n @Input() variant: ElvoraVariant = defaultButtonProps.variant;\r\n @Input() size: ElvoraSize = defaultButtonProps.size;\r\n @Input() intent: keyof ElvoraTheme['colors']['intent'] | undefined;\r\n @Input() isLoading = defaultButtonProps.isLoading;\r\n @Input() isDisabled = defaultButtonProps.isDisabled;\r\n\r\n @Output() press = new EventEmitter<MouseEvent>();\r\n\r\n protected readonly hovered = signal(false);\r\n protected readonly pressed = signal(false);\r\n protected readonly focusVisible = signal(false);\r\n\r\n protected readonly inert: Signal<boolean> = computed(() => this.isDisabled || this.isLoading);\r\n\r\n protected readonly rootStyle = computed(() => {\r\n const base = getButtonStyle({\r\n theme: this.themeService.theme(),\r\n variant: this.variant,\r\n size: this.size,\r\n fullWidth: false,\r\n isLoading: this.isLoading,\r\n isDisabled: this.isDisabled,\r\n isPressed: this.pressed(),\r\n isHovered: this.hovered(),\r\n isFocusVisible: this.focusVisible(),\r\n intent: this.intent,\r\n }).root;\r\n const px = sizePx[this.size];\r\n return { ...base, width: `${px}px`, minWidth: `${px}px`, paddingLeft: '0', paddingRight: '0' };\r\n });\r\n\r\n handleClick(event: MouseEvent) {\r\n if (this.inert()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.press.emit(event);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { defaultInputProps, getInputStyle, type ElvoraSize, type ElvoraStatus } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/** Text input. Two-way binding via `[(value)]`. */\r\n@Component({\r\n selector: 'elvora-input',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <input\r\n [type]=\"type\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder || ''\"\r\n [disabled]=\"isDisabled\"\r\n [readOnly]=\"isReadOnly\"\r\n [required]=\"isRequired\"\r\n [attr.aria-invalid]=\"isInvalid || status === 'error' || null\"\r\n [attr.aria-required]=\"isRequired || null\"\r\n [attr.data-size]=\"size\"\r\n [attr.data-status]=\"status\"\r\n [ngStyle]=\"style()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"focused.set(false)\"\r\n (mouseenter)=\"hovered.set(true)\"\r\n (mouseleave)=\"hovered.set(false)\"\r\n />\r\n `,\r\n})\r\nexport class ElvoraInput {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value: string | null = '';\r\n @Input() type: 'text' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'number' = 'text';\r\n @Input() placeholder?: string;\r\n @Input() size: ElvoraSize = defaultInputProps.size;\r\n @Input() status: ElvoraStatus = defaultInputProps.status;\r\n @Input() isReadOnly = defaultInputProps.isReadOnly;\r\n @Input() isDisabled = defaultInputProps.isDisabled;\r\n @Input() isRequired = defaultInputProps.isRequired;\r\n @Input() isInvalid = defaultInputProps.isInvalid;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n protected readonly focused = signal(false);\r\n protected readonly hovered = signal(false);\r\n\r\n protected readonly style = computed(() =>\r\n getInputStyle({\r\n theme: this.themeService.theme(),\r\n size: this.size,\r\n status: this.status,\r\n isDisabled: this.isDisabled,\r\n isReadOnly: this.isReadOnly,\r\n isInvalid: this.isInvalid,\r\n isFocused: this.focused(),\r\n isHovered: this.hovered(),\r\n }),\r\n );\r\n\r\n onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.valueChange.emit(target.value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { defaultInputProps, getInputStyle, type ElvoraSize, type ElvoraStatus } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/** Multi-line text input. Two-way binding via `[(value)]`. */\r\n@Component({\r\n selector: 'elvora-textarea',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <textarea\r\n [value]=\"value || ''\"\r\n [placeholder]=\"placeholder || ''\"\r\n [disabled]=\"isDisabled\"\r\n [readOnly]=\"isReadOnly\"\r\n [required]=\"isRequired\"\r\n [rows]=\"rows\"\r\n [attr.aria-invalid]=\"isInvalid || status === 'error' || null\"\r\n [attr.aria-required]=\"isRequired || null\"\r\n [ngStyle]=\"combinedStyle()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"focused.set(false)\"\r\n (mouseenter)=\"hovered.set(true)\"\r\n (mouseleave)=\"hovered.set(false)\"\r\n ></textarea>\r\n `,\r\n})\r\nexport class ElvoraTextarea {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value: string | null = '';\r\n @Input() placeholder?: string;\r\n @Input() rows = 3;\r\n @Input() isResizable = true;\r\n @Input() size: ElvoraSize = defaultInputProps.size;\r\n @Input() status: ElvoraStatus = defaultInputProps.status;\r\n @Input() isReadOnly = defaultInputProps.isReadOnly;\r\n @Input() isDisabled = defaultInputProps.isDisabled;\r\n @Input() isRequired = defaultInputProps.isRequired;\r\n @Input() isInvalid = defaultInputProps.isInvalid;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n protected readonly focused = signal(false);\r\n protected readonly hovered = signal(false);\r\n\r\n protected readonly combinedStyle = computed(() => {\r\n const base = getInputStyle({\r\n theme: this.themeService.theme(),\r\n size: this.size,\r\n status: this.status,\r\n isDisabled: this.isDisabled,\r\n isReadOnly: this.isReadOnly,\r\n isInvalid: this.isInvalid,\r\n isFocused: this.focused(),\r\n isHovered: this.hovered(),\r\n });\r\n return {\r\n ...base,\r\n minHeight: 'auto',\r\n resize: this.isResizable ? 'vertical' : 'none',\r\n } as Record<string, string | number | undefined>;\r\n });\r\n\r\n onInput(event: Event) {\r\n const target = event.target as HTMLTextAreaElement;\r\n this.value = target.value;\r\n this.valueChange.emit(target.value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { getIcon, icons, type IconName } from '@elvora/icons';\r\n\r\n/** Renders an SVG icon from `@elvora/icons` by name. */\r\n@Component({\r\n selector: 'elvora-icon',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf],\r\n template: `\r\n <svg\r\n *ngIf=\"def() as d\"\r\n [attr.width]=\"size\"\r\n [attr.height]=\"size\"\r\n viewBox=\"0 0 24 24\"\r\n [attr.fill]=\"d.stroke ? 'none' : color\"\r\n [attr.stroke]=\"d.stroke ? color : null\"\r\n [attr.stroke-width]=\"d.stroke ? (d.strokeWidth ?? 2) : null\"\r\n [attr.stroke-linecap]=\"d.stroke ? 'round' : null\"\r\n [attr.stroke-linejoin]=\"d.stroke ? 'round' : null\"\r\n [attr.role]=\"label ? 'img' : null\"\r\n [attr.aria-label]=\"label || null\"\r\n [attr.aria-hidden]=\"label ? null : true\"\r\n [attr.focusable]=\"label ? null : 'false'\"\r\n >\r\n <path *ngIf=\"d.d2\" [attr.d]=\"d.d2\"></path>\r\n <path [attr.d]=\"d.d\"></path>\r\n </svg>\r\n `,\r\n})\r\nexport class ElvoraIcon {\r\n @Input() name!: IconName;\r\n @Input() size = 16;\r\n @Input() color = 'currentColor';\r\n @Input() label?: string;\r\n\r\n def() {\r\n if (!(this.name in icons)) {\r\n if (typeof console !== 'undefined') {\r\n console.warn(`[elvora] Icon \"${String(this.name)}\" is not registered.`);\r\n }\r\n return null;\r\n }\r\n return getIcon(this.name);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nconst sizeMap = {\r\n sm: { box: 14, icon: 10, font: 13 },\r\n md: { box: 18, icon: 12, font: 14 },\r\n lg: { box: 22, icon: 14, font: 16 },\r\n};\r\n\r\ntype CheckboxSize = keyof typeof sizeMap;\r\n\r\n/** Checkbox. Use `[(isChecked)]` for two-way binding. */\r\n@Component({\r\n selector: 'elvora-checkbox',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <label\r\n [style.display]=\"'inline-flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n [style.cursor]=\"isDisabled ? 'not-allowed' : 'pointer'\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isChecked\"\r\n [disabled]=\"isDisabled\"\r\n [attr.aria-invalid]=\"isInvalid || null\"\r\n (change)=\"onToggle($event)\"\r\n style=\"position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;margin:-1px\"\r\n />\r\n <span [ngStyle]=\"boxStyle()\" aria-hidden=\"true\">\r\n <elvora-icon *ngIf=\"isIndeterminate\" name=\"minus\" [size]=\"dims.icon\" color=\"currentColor\"></elvora-icon>\r\n <elvora-icon *ngIf=\"!isIndeterminate && isChecked\" name=\"check\" [size]=\"dims.icon\" color=\"currentColor\"></elvora-icon>\r\n </span>\r\n <span *ngIf=\"hasLabel()\" [style.color]=\"fg()\" [style.fontSize.px]=\"dims.font\">\r\n <ng-content></ng-content>\r\n </span>\r\n </label>\r\n `,\r\n})\r\nexport class ElvoraCheckbox {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() size: CheckboxSize = 'md';\r\n @Input() isDisabled = false;\r\n @Input() isInvalid = false;\r\n @Input() isChecked = false;\r\n @Input() isIndeterminate = false;\r\n /** Set to true when content is projected (Angular has no clean way to detect). */\r\n @Input() hasLabelHint = true;\r\n\r\n @Output() isCheckedChange = new EventEmitter<boolean>();\r\n\r\n get dims() {\r\n return sizeMap[this.size];\r\n }\r\n\r\n protected hasLabel() {\r\n return this.hasLabelHint;\r\n }\r\n\r\n protected readonly fg = computed(() => this.themeService.theme().colors.fg);\r\n\r\n protected readonly boxStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = this.dims;\r\n const isActive = this.isChecked || this.isIndeterminate;\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: `${dims.box}px`,\r\n height: `${dims.box}px`,\r\n border: `1.5px solid ${\r\n this.isInvalid\r\n ? theme.colors.intent.danger.border\r\n : isActive\r\n ? theme.colors.intent.primary.solid\r\n : theme.colors.borderStrong\r\n }`,\r\n borderRadius: String(theme.radii.sm),\r\n backgroundColor: isActive ? theme.colors.intent.primary.solid : theme.colors.surfaceElevated,\r\n color: theme.colors.intent.primary.solidFg,\r\n transition: `background-color ${theme.durations.fast} ${theme.easings.standard}, border-color ${theme.durations.fast} ${theme.easings.standard}`,\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.5' : '1',\r\n flexShrink: '0',\r\n };\r\n });\r\n\r\n onToggle(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.isChecked = target.checked;\r\n this.isCheckedChange.emit(target.checked);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizeMap = {\r\n sm: { outer: 14, inner: 6, font: 13 },\r\n md: { outer: 18, inner: 8, font: 14 },\r\n lg: { outer: 22, inner: 10, font: 16 },\r\n};\r\n\r\ntype RadioSize = keyof typeof sizeMap;\r\n\r\n/**\r\n * Radio group container. Provides shared name/value/size to nested\r\n * `<elvora-radio>` items via DI.\r\n */\r\n@Component({\r\n selector: 'elvora-radio-group',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <div role=\"radiogroup\" [attr.aria-label]=\"label || null\" style=\"display:inline-flex;flex-direction:column;gap:8px\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraRadioGroup {\r\n @Input() name = '';\r\n @Input() value?: string;\r\n @Input() isDisabled = false;\r\n @Input() size: RadioSize = 'md';\r\n @Input() label?: string;\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n readonly valueSignal = signal<string | undefined>(undefined);\r\n\r\n ngOnChanges() {\r\n this.valueSignal.set(this.value);\r\n }\r\n\r\n setValue(v: string) {\r\n this.valueSignal.set(v);\r\n this.value = v;\r\n this.valueChange.emit(v);\r\n }\r\n}\r\n\r\n/** Single radio option. Must be a descendant of `<elvora-radio-group>`. */\r\n@Component({\r\n selector: 'elvora-radio',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <label\r\n [style.display]=\"'inline-flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n [style.cursor]=\"disabled() ? 'not-allowed' : 'pointer'\"\r\n [style.opacity]=\"disabled() ? '0.5' : '1'\"\r\n >\r\n <input\r\n type=\"radio\"\r\n [name]=\"group.name\"\r\n [value]=\"value\"\r\n [checked]=\"isChecked()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"onChange()\"\r\n style=\"position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;margin:-1px\"\r\n />\r\n <span [ngStyle]=\"outerStyle()\" aria-hidden=\"true\">\r\n <span [ngStyle]=\"innerStyle()\"></span>\r\n </span>\r\n <span *ngIf=\"hasLabelHint\" [style.color]=\"fg()\" [style.fontSize.px]=\"dims.font\">\r\n <ng-content></ng-content>\r\n </span>\r\n </label>\r\n `,\r\n})\r\nexport class ElvoraRadio {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n readonly group = inject(ElvoraRadioGroup);\r\n\r\n @Input() value!: string;\r\n @Input() isDisabled = false;\r\n @Input() hasLabelHint = true;\r\n\r\n get dims() {\r\n return sizeMap[this.group.size];\r\n }\r\n\r\n protected isChecked() {\r\n return this.group.valueSignal() === this.value;\r\n }\r\n\r\n protected disabled() {\r\n return Boolean(this.group.isDisabled || this.isDisabled);\r\n }\r\n\r\n protected readonly fg = computed(() => this.themeService.theme().colors.fg);\r\n\r\n protected readonly outerStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = this.dims;\r\n const isChecked = this.isChecked();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: `${dims.outer}px`,\r\n height: `${dims.outer}px`,\r\n border: `1.5px solid ${isChecked ? theme.colors.intent.primary.solid : theme.colors.borderStrong}`,\r\n borderRadius: '9999px',\r\n backgroundColor: theme.colors.surfaceElevated,\r\n transition: `border-color ${theme.durations.fast} ${theme.easings.standard}`,\r\n flexShrink: '0',\r\n };\r\n });\r\n\r\n protected readonly innerStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = this.dims;\r\n return {\r\n width: `${dims.inner}px`,\r\n height: `${dims.inner}px`,\r\n borderRadius: '9999px',\r\n backgroundColor: theme.colors.intent.primary.solid,\r\n transform: `scale(${this.isChecked() ? 1 : 0})`,\r\n transition: `transform ${theme.durations.fast} ${theme.easings.standard}`,\r\n };\r\n });\r\n\r\n onChange() {\r\n this.group.setValue(this.value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizeMap = {\r\n sm: { trackW: 28, trackH: 16, thumb: 12 },\r\n md: { trackW: 36, trackH: 20, thumb: 16 },\r\n lg: { trackW: 44, trackH: 24, thumb: 20 },\r\n};\r\n\r\ntype SwitchSize = keyof typeof sizeMap;\r\n\r\n/** Toggle switch. Use `[(isChecked)]` for two-way binding. */\r\n@Component({\r\n selector: 'elvora-switch',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <label\r\n [style.display]=\"'inline-flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n [style.cursor]=\"isDisabled ? 'not-allowed' : 'pointer'\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n [attr.aria-checked]=\"isChecked\"\r\n [checked]=\"isChecked\"\r\n [disabled]=\"isDisabled\"\r\n (change)=\"onToggle($event)\"\r\n style=\"position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;margin:-1px\"\r\n />\r\n <span [ngStyle]=\"trackStyle()\" aria-hidden=\"true\">\r\n <span [ngStyle]=\"thumbStyle()\"></span>\r\n </span>\r\n <span *ngIf=\"hasLabelHint\" [style.color]=\"fg()\" style=\"font-size:14px\">\r\n <ng-content></ng-content>\r\n </span>\r\n </label>\r\n `,\r\n})\r\nexport class ElvoraSwitch {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() size: SwitchSize = 'md';\r\n @Input() isDisabled = false;\r\n @Input() isChecked = false;\r\n @Input() hasLabelHint = true;\r\n\r\n @Output() isCheckedChange = new EventEmitter<boolean>();\r\n\r\n protected readonly fg = computed(() => this.themeService.theme().colors.fg);\r\n\r\n protected readonly trackStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = sizeMap[this.size];\r\n return {\r\n position: 'relative',\r\n display: 'inline-block',\r\n width: `${dims.trackW}px`,\r\n height: `${dims.trackH}px`,\r\n backgroundColor: this.isChecked ? theme.colors.intent.primary.solid : theme.colors.intent.neutral.subtle,\r\n border: `1px solid ${this.isChecked ? theme.colors.intent.primary.solid : theme.colors.border}`,\r\n borderRadius: '9999px',\r\n transition: `background-color ${theme.durations.fast} ${theme.easings.standard}, border-color ${theme.durations.fast} ${theme.easings.standard}`,\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.5' : '1',\r\n flexShrink: '0',\r\n };\r\n });\r\n\r\n protected readonly thumbStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = sizeMap[this.size];\r\n const offset = this.isChecked ? dims.trackW - dims.thumb - 4 : 0;\r\n return {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '2px',\r\n transform: `translate(${offset}px, -50%)`,\r\n width: `${dims.thumb}px`,\r\n height: `${dims.thumb}px`,\r\n backgroundColor: '#fff',\r\n borderRadius: '9999px',\r\n boxShadow: theme.shadows.sm,\r\n transition: `transform ${theme.durations.fast} ${theme.easings.standard}`,\r\n };\r\n });\r\n\r\n onToggle(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.isChecked = target.checked;\r\n this.isCheckedChange.emit(target.checked);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { defaultInputProps, getInputStyle, type ElvoraSize, type ElvoraStatus } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nexport interface ElvoraSelectOption {\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/** Native `<select>` styled with Elvora tokens. */\r\n@Component({\r\n selector: 'elvora-select',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <span style=\"position:relative;display:inline-flex;width:100%\">\r\n <select\r\n [value]=\"value || ''\"\r\n [disabled]=\"isDisabled\"\r\n [required]=\"isRequired\"\r\n [attr.aria-invalid]=\"isInvalid || status === 'error' || null\"\r\n [attr.aria-required]=\"isRequired || null\"\r\n [ngStyle]=\"style()\"\r\n (change)=\"onChange($event)\"\r\n (focus)=\"focused.set(true)\"\r\n (blur)=\"focused.set(false)\"\r\n (mouseenter)=\"hovered.set(true)\"\r\n (mouseleave)=\"hovered.set(false)\"\r\n >\r\n <option *ngIf=\"placeholder\" value=\"\" disabled hidden>{{ placeholder }}</option>\r\n <option *ngFor=\"let opt of options\" [value]=\"opt.value\" [disabled]=\"opt.disabled\">{{ opt.label }}</option>\r\n </select>\r\n <span aria-hidden=\"true\" [ngStyle]=\"chevronStyle()\">\r\n <elvora-icon name=\"chevronDown\" [size]=\"16\"></elvora-icon>\r\n </span>\r\n </span>\r\n `,\r\n})\r\nexport class ElvoraSelect {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() options: ElvoraSelectOption[] = [];\r\n @Input() value: string | null = '';\r\n @Input() placeholder?: string;\r\n @Input() size: ElvoraSize = defaultInputProps.size;\r\n @Input() status: ElvoraStatus = defaultInputProps.status;\r\n @Input() isDisabled = defaultInputProps.isDisabled;\r\n @Input() isRequired = defaultInputProps.isRequired;\r\n @Input() isInvalid = defaultInputProps.isInvalid;\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n protected readonly focused = signal(false);\r\n protected readonly hovered = signal(false);\r\n\r\n protected readonly style = computed(() => ({\r\n ...getInputStyle({\r\n theme: this.themeService.theme(),\r\n size: this.size,\r\n status: this.status,\r\n isDisabled: this.isDisabled,\r\n isReadOnly: false,\r\n isInvalid: this.isInvalid,\r\n isFocused: this.focused(),\r\n isHovered: this.hovered(),\r\n }),\r\n appearance: 'none',\r\n paddingRight: 36,\r\n }));\r\n\r\n protected readonly chevronStyle = computed(() => ({\r\n position: 'absolute',\r\n right: '12px',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n color: this.themeService.theme().colors.fgMuted,\r\n pointerEvents: 'none',\r\n display: 'inline-flex',\r\n }));\r\n\r\n onChange(event: Event) {\r\n const target = event.target as HTMLSelectElement;\r\n this.value = target.value;\r\n this.valueChange.emit(target.value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizeMap = {\r\n xs: { fontSize: 11, gap: 4 },\r\n sm: { fontSize: 12, gap: 4 },\r\n md: { fontSize: 14, gap: 6 },\r\n lg: { fontSize: 16, gap: 6 },\r\n};\r\n\r\ntype LabelSize = keyof typeof sizeMap;\r\n\r\n/** Form label. Use `for` attribute to associate with a form control. */\r\n@Component({\r\n selector: 'elvora-label',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <label [attr.for]=\"for || null\" [ngStyle]=\"rootStyle()\">\r\n <ng-content></ng-content>\r\n <span *ngIf=\"isRequired\" aria-hidden=\"true\" [style.color]=\"dangerFg()\">*</span>\r\n </label>\r\n `,\r\n})\r\nexport class ElvoraLabel {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() for?: string;\r\n @Input() isRequired = false;\r\n @Input() size: LabelSize = 'md';\r\n\r\n protected readonly rootStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = sizeMap[this.size];\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: `${dims.gap}px`,\r\n color: theme.colors.fg,\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: `${dims.fontSize}px`,\r\n fontWeight: String(theme.tokens.typography.fontWeights.medium),\r\n lineHeight: String(theme.tokens.typography.lineHeights.snug),\r\n userSelect: 'none',\r\n };\r\n });\r\n\r\n protected readonly dangerFg = computed(() => this.themeService.theme().colors.intent.danger.fg);\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { Orientation } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/**\r\n * Visual separator. Set `withLabel` to true and project content for an\r\n * \"OR\"-style inline divider.\r\n */\r\n@Component({\r\n selector: 'elvora-divider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div\r\n *ngIf=\"withLabel; else plain\"\r\n [attr.role]=\"role\"\r\n [attr.aria-orientation]=\"orientation\"\r\n [ngStyle]=\"wrapperStyle()\"\r\n >\r\n <span [ngStyle]=\"lineFlex()\"></span>\r\n <span><ng-content></ng-content></span>\r\n <span [ngStyle]=\"lineFlex()\"></span>\r\n </div>\r\n <ng-template #plain>\r\n <div [attr.role]=\"role\" [attr.aria-orientation]=\"orientation\" [ngStyle]=\"lineStyle()\"></div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class ElvoraDivider {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() orientation: Orientation = 'horizontal';\r\n @Input() thickness = 1;\r\n @Input() withLabel = false;\r\n @Input() isDecorative?: boolean;\r\n\r\n get role() {\r\n return (this.isDecorative ?? !this.withLabel) ? 'presentation' : 'separator';\r\n }\r\n\r\n protected readonly wrapperStyle = computed(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n color: this.themeService.theme().colors.fgMuted,\r\n fontSize: '13px',\r\n }));\r\n\r\n protected readonly lineFlex = computed(() => ({\r\n flex: '1',\r\n borderTop: `${this.thickness}px solid ${this.themeService.theme().colors.border}`,\r\n }));\r\n\r\n protected readonly lineStyle = computed(() => {\r\n const color = this.themeService.theme().colors.border;\r\n return this.orientation === 'vertical'\r\n ? { width: `${this.thickness}px`, alignSelf: 'stretch', backgroundColor: color }\r\n : { height: `${this.thickness}px`, width: '100%', backgroundColor: color };\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraSize } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizeMap: Record<ElvoraSize, number> = { xs: 20, sm: 28, md: 36, lg: 48, xl: 64 };\r\n\r\n/** User avatar. Falls back gracefully: image → initials → custom fallback. */\r\n@Component({\r\n selector: 'elvora-avatar',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <span [ngStyle]=\"containerStyle()\">\r\n <img\r\n *ngIf=\"showImage()\"\r\n [attr.src]=\"src\"\r\n [attr.alt]=\"alt ?? name ?? ''\"\r\n (error)=\"onImgError()\"\r\n style=\"width:100%;height:100%;object-fit:cover;display:block\"\r\n />\r\n <span *ngIf=\"!showImage() && initials\" [attr.aria-label]=\"name\">{{ initials }}</span>\r\n <ng-container *ngIf=\"!showImage() && !initials\">\r\n <ng-content></ng-content>\r\n </ng-container>\r\n </span>\r\n `,\r\n})\r\nexport class ElvoraAvatar {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly imgFailed = signal(false);\r\n\r\n @Input() src?: string;\r\n @Input() alt?: string;\r\n @Input() name?: string;\r\n @Input() size: ElvoraSize = 'md';\r\n @Input() shape: 'circle' | 'square' = 'circle';\r\n\r\n get initials(): string {\r\n return (this.name ?? '')\r\n .split(' ')\r\n .map((part) => part[0])\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .join('')\r\n .toUpperCase();\r\n }\r\n\r\n protected showImage() {\r\n return Boolean(this.src && !this.imgFailed());\r\n }\r\n\r\n protected onImgError() {\r\n this.imgFailed.set(true);\r\n }\r\n\r\n protected readonly containerStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const px = sizeMap[this.size];\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: `${px}px`,\r\n height: `${px}px`,\r\n flexShrink: '0',\r\n overflow: 'hidden',\r\n borderRadius: this.shape === 'circle' ? '9999px' : String(theme.radii.md),\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n color: theme.colors.intent.neutral.fg,\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: `${Math.max(10, Math.floor(px * 0.4))}px`,\r\n fontWeight: String(theme.tokens.typography.fontWeights.semibold),\r\n userSelect: 'none',\r\n };\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraSize, ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst sizeMap = {\r\n xs: { padX: 4, padY: 1, font: 10, height: 16, radius: 'sm' as const, dotSize: 6 },\r\n sm: { padX: 6, padY: 2, font: 11, height: 18, radius: 'sm' as const, dotSize: 8 },\r\n md: { padX: 8, padY: 2, font: 12, height: 22, radius: 'md' as const, dotSize: 10 },\r\n lg: { padX: 10, padY: 4, font: 13, height: 26, radius: 'md' as const, dotSize: 12 },\r\n};\r\n\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\ntype BadgeSize = Exclude<ElvoraSize, 'xl'>;\r\n\r\n/** Small status indicator (e.g. notification count, status pip). */\r\n@Component({\r\n selector: 'elvora-badge',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <span *ngIf=\"isDot\" role=\"status\" [ngStyle]=\"dotStyle()\"></span>\r\n <span *ngIf=\"!isDot\" [ngStyle]=\"badgeStyle()\"><ng-content></ng-content></span>\r\n `,\r\n})\r\nexport class ElvoraBadge {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() status: ElvoraStatus = 'neutral';\r\n @Input() size: BadgeSize = 'sm';\r\n @Input() tone: ElvoraTone = 'subtle';\r\n @Input() isDot = false;\r\n\r\n private resolveColors() {\r\n const theme = this.themeService.theme();\r\n const intent = theme.colors.intent[statusIntent[this.status]];\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let border = 'transparent';\r\n if (this.tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (this.tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n border = intent.border;\r\n }\r\n return { bg, fg, border };\r\n }\r\n\r\n protected readonly dotStyle = computed(() => {\r\n const dims = sizeMap[this.size];\r\n const { bg, border } = this.resolveColors();\r\n return {\r\n display: 'inline-block',\r\n width: `${dims.dotSize}px`,\r\n height: `${dims.dotSize}px`,\r\n backgroundColor: bg,\r\n borderRadius: '9999px',\r\n border: this.tone === 'outline' ? `1px solid ${border}` : 'none',\r\n };\r\n });\r\n\r\n protected readonly badgeStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = sizeMap[this.size];\r\n const { bg, fg, border } = this.resolveColors();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n paddingLeft: `${dims.padX}px`,\r\n paddingRight: `${dims.padX}px`,\r\n paddingTop: `${dims.padY}px`,\r\n paddingBottom: `${dims.padY}px`,\r\n minHeight: `${dims.height}px`,\r\n borderRadius: String(theme.radii[dims.radius]),\r\n borderWidth: this.tone === 'outline' ? '1px' : '0',\r\n borderStyle: 'solid',\r\n borderColor: border,\r\n backgroundColor: bg,\r\n color: fg,\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: `${dims.font}px`,\r\n fontWeight: String(theme.tokens.typography.fontWeights.medium),\r\n lineHeight: '1',\r\n whiteSpace: 'nowrap',\r\n };\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraSize, ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nconst sizeMap = {\r\n xs: { padX: 6, padY: 2, font: 11, height: 20 },\r\n sm: { padX: 8, padY: 3, font: 12, height: 24 },\r\n md: { padX: 10, padY: 4, font: 13, height: 28 },\r\n lg: { padX: 12, padY: 6, font: 14, height: 32 },\r\n};\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\ntype TagSize = Exclude<ElvoraSize, 'xl'>;\r\n\r\n/** Tag — a labeled chip. Optionally dismissible via `(close)`. */\r\n@Component({\r\n selector: 'elvora-tag',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <span [ngStyle]=\"rootStyle()\">\r\n <span><ng-content></ng-content></span>\r\n <button\r\n *ngIf=\"dismissible\"\r\n type=\"button\"\r\n [attr.aria-label]=\"closeLabel\"\r\n (click)=\"close.emit($event)\"\r\n [ngStyle]=\"closeBtnStyle()\"\r\n >\r\n <elvora-icon name=\"x\" [size]=\"dims.font\" [color]=\"rootColor()\"></elvora-icon>\r\n </button>\r\n </span>\r\n `,\r\n})\r\nexport class ElvoraTag {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() status: ElvoraStatus = 'neutral';\r\n @Input() size: TagSize = 'sm';\r\n @Input() tone: ElvoraTone = 'subtle';\r\n @Input() dismissible = false;\r\n @Input() closeLabel = 'Remove';\r\n @Output() close = new EventEmitter<MouseEvent>();\r\n\r\n get dims() {\r\n return sizeMap[this.size];\r\n }\r\n\r\n private resolveColors() {\r\n const theme = this.themeService.theme();\r\n const intent = theme.colors.intent[statusIntent[this.status]];\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let border = 'transparent';\r\n if (this.tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (this.tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n border = intent.border;\r\n }\r\n return { bg, fg, border };\r\n }\r\n\r\n protected readonly rootColor = computed(() => this.resolveColors().fg);\r\n\r\n protected readonly rootStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const dims = this.dims;\r\n const { bg, fg, border } = this.resolveColors();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n paddingLeft: `${dims.padX}px`,\r\n paddingRight: this.dismissible ? `${Math.max(4, dims.padX - 4)}px` : `${dims.padX}px`,\r\n paddingTop: `${dims.padY}px`,\r\n paddingBottom: `${dims.padY}px`,\r\n minHeight: `${dims.height}px`,\r\n borderRadius: String(theme.radii.md),\r\n borderWidth: this.tone === 'outline' ? '1px' : '0',\r\n borderStyle: 'solid',\r\n borderColor: border,\r\n backgroundColor: bg,\r\n color: fg,\r\n fontFamily: theme.tokens.typography.fontFamilies.sans,\r\n fontSize: `${dims.font}px`,\r\n fontWeight: String(theme.tokens.typography.fontWeights.medium),\r\n lineHeight: '1',\r\n whiteSpace: 'nowrap',\r\n };\r\n });\r\n\r\n protected readonly closeBtnStyle = computed(() => ({\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: `${this.dims.font + 4}px`,\r\n height: `${this.dims.font + 4}px`,\r\n border: '0',\r\n background: 'transparent',\r\n color: 'inherit',\r\n cursor: 'pointer',\r\n borderRadius: '9999px',\r\n padding: '0',\r\n marginLeft: '2px',\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport type { ElvoraSize } from '@elvora/core';\r\n\r\nconst sizePx: Record<ElvoraSize, number> = { xs: 12, sm: 14, md: 16, lg: 20, xl: 28 };\r\n\r\n/** Spinner — accessible loading indicator. */\r\n@Component({\r\n selector: 'elvora-spinner',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <span role=\"status\" aria-live=\"polite\" style=\"display:inline-flex;align-items:center\">\r\n <svg [attr.width]=\"px\" [attr.height]=\"px\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" class=\"elvora-spinner\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"color\" stroke-opacity=\"0.25\" [attr.stroke-width]=\"thickness\"></circle>\r\n <path d=\"M22 12a10 10 0 0 1-10 10\" [attr.stroke]=\"color\" [attr.stroke-width]=\"thickness\" stroke-linecap=\"round\"></path>\r\n </svg>\r\n <span class=\"elvora-sr-only\">{{ label }}</span>\r\n </span>\r\n <style>\r\n .elvora-spinner { animation: elvora-spin 0.75s linear infinite; }\r\n @keyframes elvora-spin { to { transform: rotate(360deg); } }\r\n .elvora-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\r\n </style>\r\n `,\r\n})\r\nexport class ElvoraSpinner {\r\n @Input() size: ElvoraSize | number = 'md';\r\n @Input() color = 'currentColor';\r\n @Input() label = 'Loading';\r\n @Input() thickness = 3;\r\n\r\n get px(): number {\r\n return typeof this.size === 'number' ? this.size : sizePx[this.size];\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraSize, ElvoraStatus } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst heights = { xs: 4, sm: 6, md: 8, lg: 12 };\r\nconst statusIntent = {\r\n neutral: 'primary',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\ntype ProgressSize = Exclude<ElvoraSize, 'xl'>;\r\n\r\n/** Linear progress bar. Omit `value` for indeterminate. */\r\n@Component({\r\n selector: 'elvora-progress',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div\r\n role=\"progressbar\"\r\n [attr.aria-valuemin]=\"min\"\r\n [attr.aria-valuemax]=\"max\"\r\n [attr.aria-valuenow]=\"indeterminate ? null : clamped\"\r\n [attr.aria-label]=\"label || null\"\r\n [ngStyle]=\"trackStyle()\"\r\n >\r\n <div [ngStyle]=\"fillStyle()\"></div>\r\n <style>\r\n @keyframes elvora-progress-indeterminate { 0% { transform: translateX(-100%); } 100% { transform: translateX(333%); } }\r\n </style>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraProgress {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value?: number;\r\n @Input() max = 100;\r\n @Input() min = 0;\r\n @Input() size: ProgressSize = 'md';\r\n @Input() status: ElvoraStatus = 'neutral';\r\n @Input() label?: string;\r\n\r\n get indeterminate() {\r\n return this.value === undefined;\r\n }\r\n get clamped() {\r\n return this.indeterminate ? 0 : Math.max(this.min, Math.min(this.max, this.value as number));\r\n }\r\n get pct() {\r\n return this.indeterminate ? 30 : ((this.clamped - this.min) / (this.max - this.min)) * 100;\r\n }\r\n\r\n protected readonly trackStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n return {\r\n position: 'relative',\r\n width: '100%',\r\n height: `${heights[this.size]}px`,\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderRadius: '9999px',\r\n overflow: 'hidden',\r\n };\r\n });\r\n\r\n protected readonly fillStyle = computed(() => {\r\n const theme = this.themeService.theme();\r\n const intent = theme.colors.intent[statusIntent[this.status]];\r\n const indeterminate = this.indeterminate;\r\n return {\r\n position: 'absolute',\r\n inset: '0',\r\n width: `${this.pct}%`,\r\n backgroundColor: intent.solid,\r\n borderRadius: '9999px',\r\n transition: indeterminate ? '' : `width ${theme.durations.normal} ${theme.easings.standard}`,\r\n animation: indeterminate ? 'elvora-progress-indeterminate 1.5s ease-in-out infinite' : '',\r\n };\r\n });\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n Renderer2,\r\n inject,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport type { Placement } from '@elvora/core';\r\n\r\nlet tooltipIdCounter = 0;\r\n\r\n/**\r\n * Tooltip directive. Apply to any focusable element; shows `label` on hover/\r\n * focus. Adds `aria-describedby` for assistive tech. For richer positioning,\r\n * compose with a popover library in Phase 2.\r\n *\r\n * ```html\r\n * <button elvoraTooltip=\"Save changes\">💾</button>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[elvoraTooltip]',\r\n standalone: true,\r\n})\r\nexport class ElvoraTooltip implements OnDestroy {\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input('elvoraTooltip') label = '';\r\n @Input() placement: Placement = 'top';\r\n @Input() openDelay = 200;\r\n @Input() closeDelay = 80;\r\n\r\n private readonly id = `elvora-tooltip-${++tooltipIdCounter}`;\r\n private tip: HTMLElement | null = null;\r\n private timer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n @HostListener('mouseenter') onEnter() {\r\n this.scheduleShow();\r\n }\r\n @HostListener('mouseleave') onLeave() {\r\n this.scheduleHide();\r\n }\r\n @HostListener('focus') onFocus() {\r\n this.scheduleShow();\r\n }\r\n @HostListener('blur') onBlur() {\r\n this.scheduleHide();\r\n }\r\n\r\n private scheduleShow() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.show(), this.openDelay);\r\n }\r\n\r\n private scheduleHide() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.timer = setTimeout(() => this.hide(), this.closeDelay);\r\n }\r\n\r\n private show() {\r\n if (this.tip || !this.label) return;\r\n const theme = this.themeService.theme();\r\n const host = this.el.nativeElement;\r\n const tip = this.renderer.createElement('span') as HTMLElement;\r\n this.renderer.setAttribute(tip, 'role', 'tooltip');\r\n this.renderer.setAttribute(tip, 'id', this.id);\r\n this.renderer.setStyle(tip, 'position', 'absolute');\r\n this.renderer.setStyle(tip, 'background', theme.colors.fg);\r\n this.renderer.setStyle(tip, 'color', theme.colors.background);\r\n this.renderer.setStyle(tip, 'padding', '6px 10px');\r\n this.renderer.setStyle(tip, 'border-radius', String(theme.radii.sm));\r\n this.renderer.setStyle(tip, 'font-size', '12px');\r\n this.renderer.setStyle(tip, 'white-space', 'nowrap');\r\n this.renderer.setStyle(tip, 'pointer-events', 'none');\r\n this.renderer.setStyle(tip, 'z-index', String(theme.tokens.zIndex.tooltip));\r\n this.renderer.setStyle(tip, 'box-shadow', theme.shadows.md);\r\n this.applyPlacement(tip);\r\n const text = this.renderer.createText(this.label);\r\n this.renderer.appendChild(tip, text);\r\n document.body.appendChild(tip);\r\n this.tip = tip;\r\n this.renderer.setAttribute(host, 'aria-describedby', this.id);\r\n }\r\n\r\n private applyPlacement(tip: HTMLElement) {\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n const top = window.scrollY;\r\n const left = window.scrollX;\r\n const offsets = (() => {\r\n switch (this.placement) {\r\n case 'bottom':\r\n case 'bottom-start':\r\n case 'bottom-end':\r\n return { top: rect.bottom + top + 8, left: rect.left + left };\r\n case 'left':\r\n case 'left-start':\r\n case 'left-end':\r\n return { top: rect.top + top, left: rect.left + left - 4 };\r\n case 'right':\r\n case 'right-start':\r\n case 'right-end':\r\n return { top: rect.top + top, left: rect.right + left + 4 };\r\n default:\r\n return { top: rect.top + top - 32, left: rect.left + left };\r\n }\r\n })();\r\n this.renderer.setStyle(tip, 'top', `${offsets.top}px`);\r\n this.renderer.setStyle(tip, 'left', `${offsets.left}px`);\r\n }\r\n\r\n private hide() {\r\n if (this.tip) {\r\n this.tip.remove();\r\n this.tip = null;\r\n this.renderer.removeAttribute(this.el.nativeElement, 'aria-describedby');\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.timer) clearTimeout(this.timer);\r\n this.hide();\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n/** Box — universal layout primitive. Accepts shorthand style inputs. */\r\n@Component({\r\n selector: 'elvora-box',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"resolvedStyle\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraBox {\r\n @Input() p?: number | string;\r\n @Input() px?: number | string;\r\n @Input() py?: number | string;\r\n @Input() pt?: number | string;\r\n @Input() pr?: number | string;\r\n @Input() pb?: number | string;\r\n @Input() pl?: number | string;\r\n @Input() m?: number | string;\r\n @Input() mx?: number | string;\r\n @Input() my?: number | string;\r\n @Input() mt?: number | string;\r\n @Input() mr?: number | string;\r\n @Input() mb?: number | string;\r\n @Input() ml?: number | string;\r\n @Input() w?: number | string;\r\n @Input() h?: number | string;\r\n @Input() bg?: string;\r\n @Input() color?: string;\r\n @Input() rounded?: number | string;\r\n @Input() shadow?: string;\r\n\r\n get resolvedStyle(): Record<string, string | number> {\r\n const s: Record<string, string | number> = {};\r\n const px = (v: number | string) => (typeof v === 'number' ? `${v}px` : v);\r\n if (this.p !== undefined) s['padding'] = px(this.p);\r\n if (this.px !== undefined) {\r\n s['paddingLeft'] = px(this.px);\r\n s['paddingRight'] = px(this.px);\r\n }\r\n if (this.py !== undefined) {\r\n s['paddingTop'] = px(this.py);\r\n s['paddingBottom'] = px(this.py);\r\n }\r\n if (this.pt !== undefined) s['paddingTop'] = px(this.pt);\r\n if (this.pr !== undefined) s['paddingRight'] = px(this.pr);\r\n if (this.pb !== undefined) s['paddingBottom'] = px(this.pb);\r\n if (this.pl !== undefined) s['paddingLeft'] = px(this.pl);\r\n if (this.m !== undefined) s['margin'] = px(this.m);\r\n if (this.mx !== undefined) {\r\n s['marginLeft'] = px(this.mx);\r\n s['marginRight'] = px(this.mx);\r\n }\r\n if (this.my !== undefined) {\r\n s['marginTop'] = px(this.my);\r\n s['marginBottom'] = px(this.my);\r\n }\r\n if (this.mt !== undefined) s['marginTop'] = px(this.mt);\r\n if (this.mr !== undefined) s['marginRight'] = px(this.mr);\r\n if (this.mb !== undefined) s['marginBottom'] = px(this.mb);\r\n if (this.ml !== undefined) s['marginLeft'] = px(this.ml);\r\n if (this.w !== undefined) s['width'] = px(this.w);\r\n if (this.h !== undefined) s['height'] = px(this.h);\r\n if (this.bg !== undefined) s['background'] = this.bg;\r\n if (this.color !== undefined) s['color'] = this.color;\r\n if (this.rounded !== undefined) s['borderRadius'] = px(this.rounded);\r\n if (this.shadow !== undefined) s['boxShadow'] = this.shadow;\r\n return s;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\ntype Direction = 'row' | 'column' | 'row-reverse' | 'column-reverse';\r\n\r\n/** Stack — flex container with `gap`, `direction`, `align`, `justify`. */\r\n@Component({\r\n selector: 'elvora-stack',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"resolvedStyle\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraStack {\r\n @Input() direction: Direction = 'column';\r\n @Input() gap: number | string = 8;\r\n @Input() align?: string;\r\n @Input() justify?: string;\r\n @Input() wrap = false;\r\n @Input() inline = false;\r\n\r\n get resolvedStyle(): Record<string, string | number> {\r\n return {\r\n display: this.inline ? 'inline-flex' : 'flex',\r\n flexDirection: this.direction,\r\n gap: typeof this.gap === 'number' ? `${this.gap}px` : this.gap,\r\n alignItems: this.align ?? '',\r\n justifyContent: this.justify ?? '',\r\n flexWrap: this.wrap ? 'wrap' : 'nowrap',\r\n };\r\n }\r\n}\r\n\r\n/** HStack — horizontal Stack convenience component. */\r\n@Component({\r\n selector: 'elvora-hstack',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [ElvoraStack],\r\n template: `<elvora-stack direction=\"row\" [align]=\"align ?? 'center'\" [gap]=\"gap\" [justify]=\"justify\"><ng-content></ng-content></elvora-stack>`,\r\n})\r\nexport class ElvoraHStack {\r\n @Input() gap: number | string = 8;\r\n @Input() align?: string;\r\n @Input() justify?: string;\r\n}\r\n\r\n/** VStack — vertical Stack convenience component. */\r\n@Component({\r\n selector: 'elvora-vstack',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [ElvoraStack],\r\n template: `<elvora-stack direction=\"column\" [align]=\"align\" [gap]=\"gap\" [justify]=\"justify\"><ng-content></ng-content></elvora-stack>`,\r\n})\r\nexport class ElvoraVStack {\r\n @Input() gap: number | string = 8;\r\n @Input() align?: string;\r\n @Input() justify?: string;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n/** Grid — CSS Grid container. */\r\n@Component({\r\n selector: 'elvora-grid',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"resolvedStyle\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraGrid {\r\n @Input() columns: number | string = 12;\r\n @Input() gap: number | string = 8;\r\n @Input() rows?: number | string;\r\n @Input() autoFlow?: string;\r\n\r\n get resolvedStyle(): Record<string, string | number> {\r\n const cols = typeof this.columns === 'number' ? `repeat(${this.columns}, minmax(0, 1fr))` : this.columns;\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: cols,\r\n gap: typeof this.gap === 'number' ? `${this.gap}px` : this.gap,\r\n gridTemplateRows: this.rows\r\n ? typeof this.rows === 'number'\r\n ? `repeat(${this.rows}, minmax(0, 1fr))`\r\n : this.rows\r\n : '',\r\n gridAutoFlow: this.autoFlow ?? '',\r\n };\r\n }\r\n}\r\n\r\n/** GridItem — child of `<elvora-grid>` with span controls. */\r\n@Component({\r\n selector: 'elvora-grid-item',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"resolvedStyle\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraGridItem {\r\n @Input() colSpan?: number;\r\n @Input() rowSpan?: number;\r\n @Input() colStart?: number;\r\n @Input() colEnd?: number;\r\n\r\n get resolvedStyle(): Record<string, string | number> {\r\n const s: Record<string, string | number> = {};\r\n if (this.colSpan !== undefined) s['gridColumn'] = `span ${this.colSpan} / span ${this.colSpan}`;\r\n if (this.rowSpan !== undefined) s['gridRow'] = `span ${this.rowSpan} / span ${this.rowSpan}`;\r\n if (this.colStart !== undefined) s['gridColumnStart'] = this.colStart;\r\n if (this.colEnd !== undefined) s['gridColumnEnd'] = this.colEnd;\r\n return s;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\nconst sizeMap: Record<string, string> = {\r\n sm: '640px',\r\n md: '768px',\r\n lg: '1024px',\r\n xl: '1280px',\r\n '2xl': '1536px',\r\n full: '100%',\r\n};\r\n\r\n/** Container — centered, max-width container. */\r\n@Component({\r\n selector: 'elvora-container',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"resolvedStyle\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraContainer {\r\n @Input() size: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' = 'lg';\r\n @Input() padding: number | string = 16;\r\n @Input() centerContent = false;\r\n\r\n get resolvedStyle(): Record<string, string | number> {\r\n const pad = typeof this.padding === 'number' ? `${this.padding}px` : this.padding;\r\n return {\r\n width: '100%',\r\n maxWidth: sizeMap[this.size] ?? '1024px',\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n paddingLeft: pad,\r\n paddingRight: pad,\r\n ...(this.centerContent ? { display: 'flex', flexDirection: 'column', alignItems: 'center' } : {}),\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/** Card — content container with elevation, padding, rounded corners. */\r\n@Component({\r\n selector: 'elvora-card',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"cardStyle()\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraCard {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() variant: 'outline' | 'elevated' | 'filled' = 'outline';\r\n @Input() padding: number | string = 16;\r\n\r\n protected readonly cardStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const pad = typeof this.padding === 'number' ? `${this.padding}px` : this.padding;\r\n return {\r\n backgroundColor:\r\n this.variant === 'filled' ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n border: this.variant === 'outline' ? `1px solid ${t.colors.border}` : 'none',\r\n boxShadow: this.variant === 'elevated' ? t.shadows.md : 'none',\r\n borderRadius: `${t.radii.lg}px`,\r\n padding: pad,\r\n };\r\n });\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-card-header',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"style()\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraCardHeader {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n protected readonly style = computed(() => ({\r\n paddingBottom: '12px',\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n marginBottom: '12px',\r\n }));\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-card-body',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `<div><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraCardBody {}\r\n\r\n@Component({\r\n selector: 'elvora-card-footer',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `<div [ngStyle]=\"style()\"><ng-content></ng-content></div>`,\r\n})\r\nexport class ElvoraCardFooter {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n protected readonly style = computed(() => ({\r\n paddingTop: '12px',\r\n borderTop: `1px solid ${this.themeService.theme().colors.border}`,\r\n marginTop: '12px',\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport type { IconName } from '@elvora/icons';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\nimport { ElvoraIconButton } from './icon-button.component';\r\n\r\nconst statusIntent: Record<ElvoraStatus, keyof import('@elvora/core').ThemeColors['intent']> = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n};\r\n\r\nconst defaultIcon: Record<ElvoraStatus, IconName> = {\r\n neutral: 'info',\r\n info: 'info',\r\n success: 'checkCircle',\r\n warning: 'alertCircle',\r\n error: 'x',\r\n};\r\n\r\n/** Alert — banner-style feedback message. */\r\n@Component({\r\n selector: 'elvora-alert',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon, ElvoraIconButton],\r\n template: `\r\n <div [attr.role]=\"roleAttr()\" [ngStyle]=\"rootStyle()\">\r\n <span aria-hidden=\"true\" style=\"display:inline-flex;margin-top:2px\">\r\n <elvora-icon [name]=\"iconName()\" [size]=\"18\" [color]=\"'currentColor'\"></elvora-icon>\r\n </span>\r\n <div style=\"flex:1;min-width:0\">\r\n <div *ngIf=\"title\" [ngStyle]=\"titleStyle()\">{{ title }}</div>\r\n <div *ngIf=\"description\" style=\"font-size:13px;line-height:1.45\">{{ description }}</div>\r\n <ng-content></ng-content>\r\n </div>\r\n <elvora-icon-button\r\n *ngIf=\"closeable\"\r\n size=\"xs\"\r\n variant=\"ghost\"\r\n [ariaLabel]=\"closeLabel\"\r\n (press)=\"close.emit()\"\r\n >\r\n <elvora-icon name=\"x\" [size]=\"14\" color=\"currentColor\"></elvora-icon>\r\n </elvora-icon-button>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraAlert {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() status: ElvoraStatus = 'info';\r\n @Input() tone: ElvoraTone = 'subtle';\r\n @Input() title?: string;\r\n @Input() description?: string;\r\n @Input() closeable = false;\r\n @Input() closeLabel = 'Dismiss';\r\n @Output() readonly close = new EventEmitter<void>();\r\n\r\n protected iconName(): IconName {\r\n return defaultIcon[this.status];\r\n }\r\n\r\n protected roleAttr() {\r\n return this.status === 'error' || this.status === 'warning' ? 'alert' : 'status';\r\n }\r\n\r\n protected readonly rootStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const intent = t.colors.intent[statusIntent[this.status]];\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let border = 'transparent';\r\n if (this.tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (this.tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n border = intent.border;\r\n }\r\n return {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n gap: '12px',\r\n padding: '12px 16px',\r\n borderRadius: `${t.radii.md}px`,\r\n backgroundColor: bg,\r\n color: fg,\r\n borderWidth: this.tone === 'outline' ? '1px' : '0',\r\n borderStyle: 'solid',\r\n borderColor: border,\r\n };\r\n });\r\n\r\n protected readonly titleStyle = computed(() => ({\r\n fontWeight: String(this.themeService.theme().tokens.typography.fontWeights.semibold),\r\n fontSize: '14px',\r\n marginBottom: this.description ? '2px' : '0',\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/** Skeleton — placeholder block with optional pulsing animation. */\r\n@Component({\r\n selector: 'elvora-skeleton',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div role=\"status\" aria-label=\"Loading\" [ngStyle]=\"boxStyle()\">\r\n <style>\r\n @keyframes elvora-skeleton-pulse { 0%,100%{opacity:0.6}50%{opacity:1} }\r\n </style>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraSkeleton {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() width: number | string = '100%';\r\n @Input() height: number | string = 16;\r\n @Input() rounded?: number | string;\r\n @Input() animated = true;\r\n\r\n protected readonly boxStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const w = typeof this.width === 'number' ? `${this.width}px` : this.width;\r\n const h = typeof this.height === 'number' ? `${this.height}px` : this.height;\r\n const r = this.rounded ?? `${t.radii.sm}px`;\r\n return {\r\n width: w,\r\n height: h,\r\n borderRadius: typeof r === 'number' ? `${r}px` : r,\r\n backgroundColor: t.colors.intent.neutral.subtle,\r\n animation: this.animated ? 'elvora-skeleton-pulse 1.4s ease-in-out infinite' : 'none',\r\n };\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\n/** Empty — placeholder for no-data states. */\r\n@Component({\r\n selector: 'elvora-empty',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <div role=\"status\" [ngStyle]=\"wrapperStyle()\">\r\n <div [ngStyle]=\"iconStyle()\">\r\n <elvora-icon name=\"search\" [size]=\"48\" [color]=\"fgSubtle()\"></elvora-icon>\r\n </div>\r\n <div *ngIf=\"title\" [ngStyle]=\"titleStyle()\">{{ title }}</div>\r\n <div *ngIf=\"description\" [ngStyle]=\"descStyle()\">{{ description }}</div>\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraEmpty {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() title = 'No data';\r\n @Input() description?: string;\r\n\r\n protected fgSubtle() {\r\n return this.themeService.theme().colors.fgSubtle;\r\n }\r\n\r\n protected readonly wrapperStyle = computed(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: '12px',\r\n padding: '40px 16px',\r\n textAlign: 'center',\r\n }));\r\n\r\n protected readonly iconStyle = computed(() => ({ color: this.themeService.theme().colors.fgSubtle }));\r\n\r\n protected readonly titleStyle = computed(() => ({\r\n color: this.themeService.theme().colors.fg,\r\n fontWeight: '600',\r\n fontSize: '16px',\r\n }));\r\n\r\n protected readonly descStyle = computed(() => ({\r\n color: this.themeService.theme().colors.fgMuted,\r\n fontSize: '14px',\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport type { ElvoraStatus } from '@elvora/core';\r\nimport type { IconName } from '@elvora/icons';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nexport type ElvoraResultStatus = ElvoraStatus | '404' | '500' | '403';\r\n\r\nconst statusIntent: Record<ElvoraResultStatus, keyof import('@elvora/core').ThemeColors['intent']> = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n '404': 'neutral',\r\n '500': 'danger',\r\n '403': 'warning',\r\n};\r\n\r\nconst statusIcon: Record<ElvoraResultStatus, IconName> = {\r\n neutral: 'info',\r\n info: 'info',\r\n success: 'checkCircle',\r\n warning: 'alertCircle',\r\n error: 'x',\r\n '404': 'info',\r\n '500': 'alertCircle',\r\n '403': 'x',\r\n};\r\n\r\n/** Result — page-level status component. */\r\n@Component({\r\n selector: 'elvora-result',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <div role=\"status\" [ngStyle]=\"wrapperStyle()\">\r\n <div [ngStyle]=\"iconWrapStyle()\">\r\n <elvora-icon [name]=\"iconName()\" [size]=\"56\" [color]=\"iconColor()\"></elvora-icon>\r\n </div>\r\n <div *ngIf=\"title\" [ngStyle]=\"titleStyle()\">{{ title }}</div>\r\n <div *ngIf=\"subtitle\" [ngStyle]=\"subtitleStyle()\">{{ subtitle }}</div>\r\n <ng-content></ng-content>\r\n <div *ngIf=\"hasExtra\" style=\"display:flex;gap:8px;margin-top:8px\">\r\n <ng-content select=\"[slot=extra]\"></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraResult {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() status: ElvoraResultStatus = 'info';\r\n @Input() title?: string;\r\n @Input() subtitle?: string;\r\n @Input() hasExtra = false;\r\n\r\n protected iconName(): IconName {\r\n return statusIcon[this.status];\r\n }\r\n\r\n protected iconColor() {\r\n return this.themeService.theme().colors.intent[statusIntent[this.status]].solid;\r\n }\r\n\r\n protected readonly wrapperStyle = computed(() => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n gap: '12px',\r\n padding: '40px 16px',\r\n textAlign: 'center',\r\n }));\r\n\r\n protected readonly iconWrapStyle = computed(() => ({\r\n color: this.iconColor(),\r\n }));\r\n\r\n protected readonly titleStyle = computed(() => ({\r\n color: this.themeService.theme().colors.fg,\r\n fontWeight: '700',\r\n fontSize: '20px',\r\n }));\r\n\r\n protected readonly subtitleStyle = computed(() => ({\r\n color: this.themeService.theme().colors.fgMuted,\r\n fontSize: '14px',\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n effect,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\nimport { ElvoraIconButton } from './icon-button.component';\r\n\r\nconst sizeMap = { sm: '380px', md: '520px', lg: '720px', xl: '960px', full: '95vw' } as const;\r\n\r\n/** Modal — centered overlay dialog. Renders inline (no portal). */\r\n@Component({\r\n selector: 'elvora-modal',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon, ElvoraIconButton],\r\n template: `\r\n <div *ngIf=\"isOpen\" [ngStyle]=\"overlayStyle()\" (click)=\"onOverlayClick($event)\">\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"title || null\"\r\n [ngStyle]=\"dialogStyle()\"\r\n (click)=\"$event.stopPropagation()\"\r\n tabindex=\"-1\"\r\n >\r\n <div *ngIf=\"title || showCloseButton\" [ngStyle]=\"headerStyle()\">\r\n <div style=\"flex:1;font-weight:600;font-size:16px\">{{ title }}</div>\r\n <elvora-icon-button\r\n *ngIf=\"showCloseButton\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [ariaLabel]=\"closeLabel\"\r\n (press)=\"close.emit()\"\r\n >\r\n <elvora-icon name=\"x\" [size]=\"16\" color=\"currentColor\"></elvora-icon>\r\n </elvora-icon-button>\r\n </div>\r\n <div style=\"padding:16px;overflow:auto;flex:1\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div *ngIf=\"hasFooter\" [ngStyle]=\"footerStyle()\">\r\n <ng-content select=\"[slot=footer]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraModal {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() isOpen = false;\r\n @Input() size: 'sm' | 'md' | 'lg' | 'xl' | 'full' = 'md';\r\n @Input() title?: string;\r\n @Input() showCloseButton = true;\r\n @Input() closeOnEscape = true;\r\n @Input() closeOnOverlayClick = true;\r\n @Input() hasFooter = false;\r\n @Input() closeLabel = 'Close';\r\n @Output() close = new EventEmitter<void>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const open = this.isOpen;\r\n if (typeof document === 'undefined') return;\r\n if (open) {\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n document.body.style.overflow = '';\r\n }\r\n });\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscape() {\r\n if (this.isOpen && this.closeOnEscape) this.close.emit();\r\n }\r\n\r\n onOverlayClick(_e: MouseEvent) {\r\n if (this.closeOnOverlayClick) this.close.emit();\r\n }\r\n\r\n protected readonly overlayStyle = computed(() => ({\r\n position: 'fixed',\r\n inset: '0',\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '16px',\r\n zIndex: String(this.themeService.theme().tokens.zIndex.modal),\r\n }));\r\n\r\n protected readonly dialogStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n backgroundColor: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n borderRadius: `${t.radii.lg}px`,\r\n boxShadow: t.tokens.shadows.xl,\r\n width: '100%',\r\n maxWidth: sizeMap[this.size],\r\n maxHeight: '90vh',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n };\r\n });\r\n\r\n protected readonly headerStyle = computed(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n padding: '14px 16px',\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n }));\r\n\r\n protected readonly footerStyle = computed(() => ({\r\n display: 'flex',\r\n gap: '8px',\r\n justifyContent: 'flex-end',\r\n padding: '12px 16px',\r\n borderTop: `1px solid ${this.themeService.theme().colors.border}`,\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n effect,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\nimport { ElvoraIconButton } from './icon-button.component';\r\n\r\n/** Drawer — edge-anchored overlay panel. */\r\n@Component({\r\n selector: 'elvora-drawer',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon, ElvoraIconButton],\r\n template: `\r\n <div *ngIf=\"isOpen\" [ngStyle]=\"overlayStyle()\" (click)=\"onOverlayClick()\">\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"title || null\"\r\n [ngStyle]=\"panelStyle()\"\r\n (click)=\"$event.stopPropagation()\"\r\n tabindex=\"-1\"\r\n >\r\n <div *ngIf=\"title || showCloseButton\" [ngStyle]=\"headerStyle()\">\r\n <div style=\"flex:1;font-weight:600;font-size:16px\">{{ title }}</div>\r\n <elvora-icon-button\r\n *ngIf=\"showCloseButton\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [ariaLabel]=\"closeLabel\"\r\n (press)=\"close.emit()\"\r\n >\r\n <elvora-icon name=\"x\" [size]=\"16\" color=\"currentColor\"></elvora-icon>\r\n </elvora-icon-button>\r\n </div>\r\n <div style=\"padding:16px;overflow:auto;flex:1\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div *ngIf=\"hasFooter\" [ngStyle]=\"footerStyle()\">\r\n <ng-content select=\"[slot=footer]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraDrawer {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() isOpen = false;\r\n @Input() placement: 'left' | 'right' | 'top' | 'bottom' = 'right';\r\n @Input() size: number | string = 360;\r\n @Input() title?: string;\r\n @Input() showCloseButton = true;\r\n @Input() closeOnEscape = true;\r\n @Input() closeOnOverlayClick = true;\r\n @Input() hasFooter = false;\r\n @Input() closeLabel = 'Close';\r\n @Output() close = new EventEmitter<void>();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (typeof document === 'undefined') return;\r\n document.body.style.overflow = this.isOpen ? 'hidden' : '';\r\n });\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscape() {\r\n if (this.isOpen && this.closeOnEscape) this.close.emit();\r\n }\r\n\r\n onOverlayClick() {\r\n if (this.closeOnOverlayClick) this.close.emit();\r\n }\r\n\r\n protected readonly overlayStyle = computed(() => ({\r\n position: 'fixed',\r\n inset: '0',\r\n backgroundColor: 'rgba(0,0,0,0.45)',\r\n display: 'flex',\r\n alignItems:\r\n this.placement === 'bottom' ? 'flex-end' : this.placement === 'top' ? 'flex-start' : 'stretch',\r\n justifyContent:\r\n this.placement === 'right' ? 'flex-end' : this.placement === 'left' ? 'flex-start' : 'stretch',\r\n zIndex: String(this.themeService.theme().tokens.zIndex.modal),\r\n }));\r\n\r\n protected readonly panelStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const horizontal = this.placement === 'left' || this.placement === 'right';\r\n const size = typeof this.size === 'number' ? `${this.size}px` : this.size;\r\n return {\r\n backgroundColor: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n boxShadow: t.tokens.shadows.xl,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: horizontal ? size : '100%',\r\n height: horizontal ? '100%' : size,\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n overflow: 'hidden',\r\n };\r\n });\r\n\r\n protected readonly headerStyle = computed(() => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n padding: '14px 16px',\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n }));\r\n\r\n protected readonly footerStyle = computed(() => ({\r\n display: 'flex',\r\n gap: '8px',\r\n justifyContent: 'flex-end',\r\n padding: '12px 16px',\r\n borderTop: `1px solid ${this.themeService.theme().colors.border}`,\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/**\r\n * Popover — content overlay anchored to a host element. Project the trigger\r\n * inside `<elvora-popover>` and the panel content into the `[slot=content]`\r\n * projection slot.\r\n */\r\n@Component({\r\n selector: 'elvora-popover',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\" (click)=\"toggle($event)\">\r\n <ng-content></ng-content>\r\n <div *ngIf=\"isOpen\" [ngStyle]=\"panelStyle()\" role=\"dialog\" (click)=\"$event.stopPropagation()\">\r\n <ng-content select=\"[slot=content]\"></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraPopover {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n @Input() isOpen = false;\r\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\r\n @Output() openChange = new EventEmitter<boolean>();\r\n\r\n toggle(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.isOpen = !this.isOpen;\r\n this.openChange.emit(this.isOpen);\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocClick(event: MouseEvent) {\r\n if (!this.isOpen) return;\r\n if (!this.host.nativeElement.contains(event.target as Node)) {\r\n this.isOpen = false;\r\n this.openChange.emit(false);\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEsc() {\r\n if (this.isOpen) {\r\n this.isOpen = false;\r\n this.openChange.emit(false);\r\n }\r\n }\r\n\r\n protected readonly panelStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const pos: Record<string, string> = {\r\n position: 'absolute',\r\n backgroundColor: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n padding: '8px 12px',\r\n minWidth: '160px',\r\n maxWidth: '320px',\r\n zIndex: String(t.tokens.zIndex.popover),\r\n };\r\n if (this.placement === 'bottom') {\r\n pos['top'] = '100%';\r\n pos['left'] = '0';\r\n pos['marginTop'] = '6px';\r\n } else if (this.placement === 'top') {\r\n pos['bottom'] = '100%';\r\n pos['left'] = '0';\r\n pos['marginBottom'] = '6px';\r\n } else if (this.placement === 'right') {\r\n pos['left'] = '100%';\r\n pos['top'] = '0';\r\n pos['marginLeft'] = '6px';\r\n } else {\r\n pos['right'] = '100%';\r\n pos['top'] = '0';\r\n pos['marginRight'] = '6px';\r\n }\r\n return pos;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Injectable,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgStyle } from '@angular/common';\r\nimport { generateId, type ElvoraStatus } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraAlert } from './alert.component';\r\n\r\nexport interface ElvoraToastOptions {\r\n id?: string;\r\n status?: ElvoraStatus;\r\n title?: string;\r\n description?: string;\r\n /** Duration in ms. `null` for sticky. */\r\n duration?: number | null;\r\n}\r\n\r\ninterface ToastInstance {\r\n id: string;\r\n status: ElvoraStatus;\r\n title?: string;\r\n description?: string;\r\n duration: number | null;\r\n}\r\n\r\n/**\r\n * Global toast service. Inject anywhere and call `show()`. Mount\r\n * `<elvora-toast-host></elvora-toast-host>` once at the application root.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ElvoraToastService {\r\n private readonly toastsSignal = signal<ToastInstance[]>([]);\r\n readonly toasts = this.toastsSignal.asReadonly();\r\n\r\n defaultDuration = 4000;\r\n\r\n show(opts: ElvoraToastOptions): string {\r\n const id = opts.id ?? generateId('toast');\r\n const inst: ToastInstance = {\r\n id,\r\n status: opts.status ?? 'info',\r\n title: opts.title,\r\n description: opts.description,\r\n duration: opts.duration === undefined ? this.defaultDuration : opts.duration,\r\n };\r\n this.toastsSignal.update((curr) => [...curr, inst]);\r\n if (inst.duration !== null && inst.duration > 0 && typeof globalThis.setTimeout === 'function') {\r\n setTimeout(() => this.dismiss(id), inst.duration);\r\n }\r\n return id;\r\n }\r\n\r\n dismiss(id: string): void {\r\n this.toastsSignal.update((curr) => curr.filter((t) => t.id !== id));\r\n }\r\n\r\n dismissAll(): void {\r\n this.toastsSignal.set([]);\r\n }\r\n}\r\n\r\n/**\r\n * Toast viewport. Mount once near the application root.\r\n *\r\n * ```html\r\n * <elvora-toast-host placement=\"top-right\"></elvora-toast-host>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'elvora-toast-host',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgStyle, ElvoraAlert],\r\n template: `\r\n <div [ngStyle]=\"containerStyle()\">\r\n <div *ngFor=\"let t of toasts(); trackBy: trackById\" style=\"pointer-events:auto;min-width:280px;max-width:420px\">\r\n <elvora-alert\r\n [status]=\"t.status\"\r\n tone=\"solid\"\r\n [title]=\"t.title || ''\"\r\n [description]=\"t.description || ''\"\r\n [closeable]=\"true\"\r\n (close)=\"dismiss(t.id)\"\r\n ></elvora-alert>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraToastHost {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly service = inject(ElvoraToastService);\r\n\r\n toasts = this.service.toasts;\r\n\r\n /** Position the stack appears in. */\r\n placement: 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' = 'top-right';\r\n\r\n protected readonly containerStyle = computed(() => {\r\n const base: Record<string, string> = {\r\n position: 'fixed',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n pointerEvents: 'none',\r\n zIndex: String(this.themeService.theme().tokens.zIndex.toast),\r\n };\r\n switch (this.placement) {\r\n case 'top-left':\r\n Object.assign(base, { top: '16px', left: '16px', alignItems: 'flex-start' });\r\n break;\r\n case 'top-center':\r\n Object.assign(base, { top: '16px', left: '50%', transform: 'translateX(-50%)', alignItems: 'center' });\r\n break;\r\n case 'bottom-right':\r\n Object.assign(base, { bottom: '16px', right: '16px', alignItems: 'flex-end' });\r\n break;\r\n case 'bottom-left':\r\n Object.assign(base, { bottom: '16px', left: '16px', alignItems: 'flex-start' });\r\n break;\r\n case 'bottom-center':\r\n Object.assign(base, { bottom: '16px', left: '50%', transform: 'translateX(-50%)', alignItems: 'center' });\r\n break;\r\n default:\r\n Object.assign(base, { top: '16px', right: '16px', alignItems: 'flex-end' });\r\n }\r\n return base;\r\n });\r\n\r\n trackById(_idx: number, item: ToastInstance) {\r\n return item.id;\r\n }\r\n\r\n dismiss(id: string) {\r\n this.service.dismiss(id);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChildren,\r\n Directive,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n computed,\r\n effect,\r\n inject,\r\n signal,\r\n type AfterContentInit,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { getNextTabIndex, type Orientation } from '@elvora/core';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n/** Tab definition. Use as a child of `<elvora-tabs>`. */\r\n@Directive({ selector: 'elvora-tab-template', standalone: true })\r\nexport class ElvoraTabTemplate {\r\n @Input({ required: true }) value!: string;\r\n @Input({ required: true }) label!: string;\r\n @Input() isDisabled = false;\r\n\r\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\r\n}\r\n\r\ntype Variant = 'underline' | 'pill' | 'solid';\r\n\r\n/**\r\n * Tabs — WAI-ARIA Tabs pattern with keyboard navigation. Use with\r\n * `<elvora-tab-template>` children which carry a `value`, `label`, and panel\r\n * template content.\r\n */\r\n@Component({\r\n selector: 'elvora-tabs',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, NgTemplateOutlet],\r\n template: `\r\n <div\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"orientation\"\r\n [ngStyle]=\"listStyle()\"\r\n >\r\n <button\r\n *ngFor=\"let tab of templates; let i = index\"\r\n type=\"button\"\r\n role=\"tab\"\r\n [id]=\"baseId + '-trigger-' + tab.value\"\r\n [attr.aria-controls]=\"baseId + '-panel-' + tab.value\"\r\n [attr.aria-selected]=\"value === tab.value\"\r\n [attr.aria-disabled]=\"tab.isDisabled || null\"\r\n [tabindex]=\"value === tab.value ? 0 : -1\"\r\n [disabled]=\"tab.isDisabled\"\r\n [ngStyle]=\"tabStyle(tab.value === value, tab.isDisabled)\"\r\n (click)=\"onClick(tab.value, tab.isDisabled)\"\r\n (keydown)=\"onKey($event, i)\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n </div>\r\n <ng-container *ngFor=\"let tab of templates\">\r\n <div\r\n *ngIf=\"value === tab.value\"\r\n role=\"tabpanel\"\r\n [id]=\"baseId + '-panel-' + tab.value\"\r\n [attr.aria-labelledby]=\"baseId + '-trigger-' + tab.value\"\r\n tabindex=\"0\"\r\n style=\"padding:12px 0;outline:none\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"tab.template\"></ng-container>\r\n </div>\r\n </ng-container>\r\n `,\r\n})\r\nexport class ElvoraTabs implements AfterContentInit {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private static counter = 0;\r\n protected readonly baseId = `elvora-tabs-${++ElvoraTabs.counter}`;\r\n\r\n @Input() value = '';\r\n @Input() variant: Variant = 'underline';\r\n @Input() orientation: Orientation = 'horizontal';\r\n @Input() activation: 'automatic' | 'manual' = 'automatic';\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n @ContentChildren(ElvoraTabTemplate) private tabRefs?: QueryList<ElvoraTabTemplate>;\r\n protected readonly templatesSignal = signal<ElvoraTabTemplate[]>([]);\r\n protected get templates(): ElvoraTabTemplate[] {\r\n return this.templatesSignal();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.templatesSignal();\r\n if (tabs.length && !this.value) {\r\n const first = tabs.find((t) => !t.isDisabled);\r\n if (first) {\r\n this.value = first.value;\r\n this.valueChange.emit(this.value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.templatesSignal.set(this.tabRefs?.toArray() ?? []);\r\n this.tabRefs?.changes.subscribe(() => {\r\n this.templatesSignal.set(this.tabRefs?.toArray() ?? []);\r\n });\r\n }\r\n\r\n protected onClick(value: string, disabled: boolean) {\r\n if (disabled) return;\r\n this.value = value;\r\n this.valueChange.emit(value);\r\n }\r\n\r\n protected onKey(event: KeyboardEvent, index: number) {\r\n const tabs = this.templates;\r\n const next = getNextTabIndex(event, index, tabs.map((t) => ({ isDisabled: t.isDisabled })), {\r\n orientation: this.orientation,\r\n activation: this.activation,\r\n });\r\n if (next !== index) {\r\n event.preventDefault();\r\n const el = (event.target as HTMLElement).parentElement?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')[next];\r\n el?.focus();\r\n if (this.activation === 'automatic') {\r\n const target = tabs[next];\r\n if (target && !target.isDisabled) {\r\n this.value = target.value;\r\n this.valueChange.emit(this.value);\r\n }\r\n }\r\n } else if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n const target = tabs[index];\r\n if (target && !target.isDisabled) {\r\n this.value = target.value;\r\n this.valueChange.emit(this.value);\r\n }\r\n }\r\n }\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n flexDirection: this.orientation === 'vertical' ? 'column' : 'row',\r\n gap: '4px',\r\n borderBottom:\r\n this.variant === 'underline' && this.orientation === 'horizontal'\r\n ? `1px solid ${t.colors.border}`\r\n : 'none',\r\n };\r\n });\r\n\r\n protected tabStyle(active: boolean, disabled?: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const intent = t.colors.intent.primary;\r\n const base: Record<string, string> = {\r\n appearance: 'none',\r\n background: 'transparent',\r\n border: 'none',\r\n padding: this.variant === 'pill' ? '8px 14px' : '10px 16px',\r\n fontSize: '14px',\r\n fontWeight: String(t.tokens.typography.fontWeights.medium),\r\n color: disabled ? t.colors.fgSubtle : active ? t.colors.fg : t.colors.fgMuted,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n outline: 'none',\r\n };\r\n const fallbackColor = base['color'] ?? t.colors.fg;\r\n if (this.variant === 'pill') {\r\n base['borderRadius'] = String(t.radii.full) + 'px';\r\n base['background'] = active ? intent.subtle : 'transparent';\r\n base['color'] = active ? intent.fg : fallbackColor;\r\n } else if (this.variant === 'solid') {\r\n base['borderRadius'] = String(t.radii.md) + 'px';\r\n base['background'] = active ? intent.solid : 'transparent';\r\n base['color'] = active ? intent.solidFg : fallbackColor;\r\n } else {\r\n if (this.orientation === 'horizontal') {\r\n base['borderBottom'] = `2px solid ${active ? intent.solid : 'transparent'}`;\r\n } else {\r\n base['borderRight'] = `2px solid ${active ? intent.solid : 'transparent'}`;\r\n }\r\n }\r\n return base;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraMenuItem {\r\n value: string;\r\n label: string;\r\n isDisabled?: boolean;\r\n hasSeparatorBefore?: boolean;\r\n}\r\n\r\n/**\r\n * Dropdown menu. Project the trigger as the default slot. Items are passed as\r\n * an input.\r\n */\r\n@Component({\r\n selector: 'elvora-menu',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <span (click)=\"toggle()\" style=\"display:inline-flex\">\r\n <ng-content></ng-content>\r\n </span>\r\n <ul\r\n *ngIf=\"isOpen\"\r\n role=\"menu\"\r\n [ngStyle]=\"listStyle()\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-container *ngFor=\"let item of items\">\r\n <li *ngIf=\"item.hasSeparatorBefore\" role=\"separator\" [ngStyle]=\"separatorStyle()\"></li>\r\n <li\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.isDisabled || null\"\r\n [tabindex]=\"item.isDisabled ? -1 : 0\"\r\n [ngStyle]=\"itemStyle(item.isDisabled)\"\r\n (click)=\"onSelect(item)\"\r\n (keydown.enter)=\"onSelect(item)\"\r\n (keydown.space)=\"onSelect(item); $event.preventDefault()\"\r\n >\r\n {{ item.label }}\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraMenu {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n\r\n @Input() items: ElvoraMenuItem[] = [];\r\n @Input() placement: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' = 'bottom-start';\r\n @Output() select = new EventEmitter<string>();\r\n\r\n isOpen = false;\r\n\r\n toggle() {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n onSelect(item: ElvoraMenuItem) {\r\n if (item.isDisabled) return;\r\n this.select.emit(item.value);\r\n this.isOpen = false;\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocClick(event: MouseEvent) {\r\n if (!this.isOpen) return;\r\n if (!this.host.nativeElement.contains(event.target as Node)) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEsc() {\r\n if (this.isOpen) this.isOpen = false;\r\n }\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const pos: Record<string, string> = {\r\n position: 'absolute',\r\n listStyle: 'none',\r\n margin: '0',\r\n padding: '4px',\r\n minWidth: '180px',\r\n backgroundColor: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.dropdown),\r\n };\r\n if (this.placement === 'bottom-end') {\r\n pos['top'] = '100%';\r\n pos['right'] = '0';\r\n pos['marginTop'] = '6px';\r\n } else if (this.placement === 'top-start') {\r\n pos['bottom'] = '100%';\r\n pos['left'] = '0';\r\n pos['marginBottom'] = '6px';\r\n } else if (this.placement === 'top-end') {\r\n pos['bottom'] = '100%';\r\n pos['right'] = '0';\r\n pos['marginBottom'] = '6px';\r\n } else {\r\n pos['top'] = '100%';\r\n pos['left'] = '0';\r\n pos['marginTop'] = '6px';\r\n }\r\n return pos;\r\n });\r\n\r\n protected itemStyle(disabled?: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '8px 12px',\r\n fontSize: '14px',\r\n borderRadius: `${t.radii.sm}px`,\r\n color: disabled ? t.colors.fgSubtle : t.colors.fg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n userSelect: 'none',\r\n };\r\n }\r\n\r\n protected readonly separatorStyle = computed(() => ({\r\n height: '1px',\r\n margin: '4px 0',\r\n backgroundColor: this.themeService.theme().colors.border,\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nexport interface ElvoraBreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n isCurrent?: boolean;\r\n}\r\n\r\n/** Breadcrumb — navigation trail. */\r\n@Component({\r\n selector: 'elvora-breadcrumb',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <nav aria-label=\"Breadcrumb\">\r\n <ol [ngStyle]=\"listStyle()\">\r\n <ng-container *ngFor=\"let item of items; let i = index; let last = last\">\r\n <li>\r\n <ng-container *ngIf=\"item.href && !(item.isCurrent ?? last); else plain\">\r\n <a [href]=\"item.href\" [ngStyle]=\"linkStyle(false)\" (click)=\"emit(i, $event)\">{{ item.label }}</a>\r\n </ng-container>\r\n <ng-template #plain>\r\n <span [attr.aria-current]=\"(item.isCurrent ?? last) ? 'page' : null\" [ngStyle]=\"linkStyle(true)\">\r\n {{ item.label }}\r\n </span>\r\n </ng-template>\r\n </li>\r\n <li *ngIf=\"!last\" aria-hidden=\"true\" style=\"display:inline-flex;align-items:center\">\r\n <elvora-icon name=\"chevronRight\" [size]=\"14\" [color]=\"separatorColor()\"></elvora-icon>\r\n </li>\r\n </ng-container>\r\n </ol>\r\n </nav>\r\n `,\r\n})\r\nexport class ElvoraBreadcrumb {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: ElvoraBreadcrumbItem[] = [];\r\n @Output() activate = new EventEmitter<number>();\r\n\r\n emit(i: number, e: MouseEvent) {\r\n if (!this.items[i]?.href) {\r\n e.preventDefault();\r\n }\r\n this.activate.emit(i);\r\n }\r\n\r\n protected readonly listStyle = computed(() => ({\r\n listStyle: 'none',\r\n margin: '0',\r\n padding: '0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n gap: '6px',\r\n fontSize: '14px',\r\n }));\r\n\r\n protected linkStyle(current: boolean) {\r\n const t = this.themeService.theme();\r\n return {\r\n color: current ? t.colors.fg : t.colors.fgMuted,\r\n textDecoration: 'none',\r\n };\r\n }\r\n\r\n protected separatorColor() {\r\n return this.themeService.theme().colors.fgSubtle;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nfunction range(start: number, end: number): number[] {\r\n const out: number[] = [];\r\n for (let i = start; i <= end; i++) out.push(i);\r\n return out;\r\n}\r\n\r\nfunction buildPages(current: number, totalPages: number, siblingCount: number): Array<number | 'gap'> {\r\n const totalNumbers = siblingCount * 2 + 5;\r\n if (totalPages <= totalNumbers) return range(1, totalPages);\r\n const left = Math.max(current - siblingCount, 1);\r\n const right = Math.min(current + siblingCount, totalPages);\r\n const out: Array<number | 'gap'> = [1];\r\n if (left > 2) out.push('gap');\r\n else if (left === 2) out.push(2);\r\n out.push(...range(Math.max(left, left > 2 ? left : 2), Math.min(right, totalPages - 1)));\r\n if (right < totalPages - 1) out.push('gap');\r\n else if (right === totalPages - 1) out.push(totalPages - 1);\r\n if (totalPages > 1) out.push(totalPages);\r\n const seen = new Set<number | 'gap'>();\r\n return out.filter((v) => {\r\n if (v === 'gap') return true;\r\n if (seen.has(v)) return false;\r\n seen.add(v);\r\n return true;\r\n });\r\n}\r\n\r\n/** Pagination — accessible page navigator. */\r\n@Component({\r\n selector: 'elvora-pagination',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <nav aria-label=\"Pagination\" *ngIf=\"visible\">\r\n <ul style=\"list-style:none;margin:0;padding:0;display:flex;gap:6px;align-items:center\">\r\n <li *ngIf=\"showFirstLast\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"First page\"\r\n [disabled]=\"current === 1\"\r\n [ngStyle]=\"btnStyle(false, current === 1)\"\r\n (click)=\"go(1)\"\r\n >\r\n «\r\n </button>\r\n </li>\r\n <li>\r\n <button\r\n type=\"button\"\r\n aria-label=\"Previous page\"\r\n [disabled]=\"current === 1\"\r\n [ngStyle]=\"btnStyle(false, current === 1)\"\r\n (click)=\"go(current - 1)\"\r\n >\r\n <elvora-icon name=\"chevronLeft\" [size]=\"14\" color=\"currentColor\"></elvora-icon>\r\n </button>\r\n </li>\r\n <ng-container *ngFor=\"let p of pages; let idx = index\">\r\n <li *ngIf=\"p === 'gap'\" aria-hidden=\"true\" [ngStyle]=\"gapStyle()\">…</li>\r\n <li *ngIf=\"p !== 'gap'\">\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"'Page ' + p\"\r\n [attr.aria-current]=\"p === current ? 'page' : null\"\r\n [ngStyle]=\"btnStyle(p === current)\"\r\n (click)=\"go(numberOf(p))\"\r\n >\r\n {{ p }}\r\n </button>\r\n </li>\r\n </ng-container>\r\n <li>\r\n <button\r\n type=\"button\"\r\n aria-label=\"Next page\"\r\n [disabled]=\"current === totalPages\"\r\n [ngStyle]=\"btnStyle(false, current === totalPages)\"\r\n (click)=\"go(current + 1)\"\r\n >\r\n <elvora-icon name=\"chevronRight\" [size]=\"14\" color=\"currentColor\"></elvora-icon>\r\n </button>\r\n </li>\r\n <li *ngIf=\"showFirstLast\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Last page\"\r\n [disabled]=\"current === totalPages\"\r\n [ngStyle]=\"btnStyle(false, current === totalPages)\"\r\n (click)=\"go(totalPages)\"\r\n >\r\n »\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n `,\r\n})\r\nexport class ElvoraPagination {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() total = 0;\r\n @Input() pageSize = 10;\r\n @Input() current = 1;\r\n @Input() siblingCount = 1;\r\n @Input() showFirstLast = false;\r\n @Input() hideOnSinglePage = false;\r\n @Output() currentChange = new EventEmitter<number>();\r\n\r\n get totalPages() {\r\n return Math.max(1, Math.ceil(this.total / this.pageSize));\r\n }\r\n get visible() {\r\n return !(this.hideOnSinglePage && this.totalPages <= 1);\r\n }\r\n get pages() {\r\n return buildPages(Math.min(Math.max(this.current, 1), this.totalPages), this.totalPages, this.siblingCount);\r\n }\r\n\r\n numberOf(p: number | 'gap'): number {\r\n return typeof p === 'number' ? p : this.current;\r\n }\r\n\r\n go(next: number) {\r\n const clamped = Math.min(Math.max(next, 1), this.totalPages);\r\n if (clamped !== this.current) {\r\n this.current = clamped;\r\n this.currentChange.emit(clamped);\r\n }\r\n }\r\n\r\n protected btnStyle(active: boolean, disabled?: boolean) {\r\n const t = this.themeService.theme();\r\n return {\r\n appearance: 'none',\r\n minWidth: '32px',\r\n height: '32px',\r\n padding: '0 8px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${active ? t.colors.intent.primary.solid : t.colors.border}`,\r\n backgroundColor: active ? t.colors.intent.primary.solid : t.colors.surfaceElevated,\r\n color: active ? t.colors.intent.primary.solidFg : t.colors.fg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? '0.5' : '1',\r\n fontSize: '13px',\r\n fontWeight: '500',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n };\r\n }\r\n\r\n protected gapStyle = computed(() => ({\r\n padding: '0 4px',\r\n color: this.themeService.theme().colors.fgSubtle,\r\n }));\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\nexport interface ElvoraStep {\r\n title: string;\r\n description?: string;\r\n status?: 'wait' | 'process' | 'finish' | 'error';\r\n}\r\n\r\n/** Steps — multi-step progress indicator. */\r\n@Component({\r\n selector: 'elvora-steps',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <ol [ngStyle]=\"listStyle()\">\r\n <ng-container *ngFor=\"let step of steps; let i = index; let last = last\">\r\n <li\r\n [attr.aria-current]=\"resolveStatus(i, step.status) === 'process' ? 'step' : null\"\r\n [ngStyle]=\"itemStyle()\"\r\n (click)=\"onClick(i)\"\r\n [style.cursor]=\"clickable ? 'pointer' : 'default'\"\r\n >\r\n <div [ngStyle]=\"dotStyle(resolveStatus(i, step.status))\">\r\n <elvora-icon\r\n *ngIf=\"resolveStatus(i, step.status) === 'finish'\"\r\n name=\"check\"\r\n [size]=\"14\"\r\n color=\"currentColor\"\r\n ></elvora-icon>\r\n <elvora-icon\r\n *ngIf=\"resolveStatus(i, step.status) === 'error'\"\r\n name=\"x\"\r\n [size]=\"14\"\r\n color=\"currentColor\"\r\n ></elvora-icon>\r\n <span *ngIf=\"resolveStatus(i, step.status) === 'process' || resolveStatus(i, step.status) === 'wait'\">\r\n {{ i + 1 }}\r\n </span>\r\n </div>\r\n <div [ngStyle]=\"textWrapStyle()\">\r\n <div [ngStyle]=\"titleStyle(resolveStatus(i, step.status))\">{{ step.title }}</div>\r\n <div *ngIf=\"step.description\" [ngStyle]=\"descStyle()\">{{ step.description }}</div>\r\n </div>\r\n </li>\r\n <li *ngIf=\"!last\" aria-hidden=\"true\" [ngStyle]=\"connectorStyle(resolveStatus(i, step.status))\"></li>\r\n </ng-container>\r\n </ol>\r\n `,\r\n})\r\nexport class ElvoraSteps {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() steps: ElvoraStep[] = [];\r\n @Input() current = 0;\r\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n @Output() change = new EventEmitter<number>();\r\n\r\n get clickable() {\r\n return this.change.observed;\r\n }\r\n\r\n resolveStatus(i: number, override?: ElvoraStep['status']): 'wait' | 'process' | 'finish' | 'error' {\r\n if (override) return override;\r\n if (i < this.current) return 'finish';\r\n if (i === this.current) return 'process';\r\n return 'wait';\r\n }\r\n\r\n onClick(i: number) {\r\n if (this.clickable) this.change.emit(i);\r\n }\r\n\r\n protected readonly listStyle = computed(() => ({\r\n listStyle: 'none',\r\n margin: '0',\r\n padding: '0',\r\n display: 'flex',\r\n flexDirection: this.orientation === 'horizontal' ? 'row' : 'column',\r\n gap: this.orientation === 'horizontal' ? '0' : '12px',\r\n alignItems: this.orientation === 'horizontal' ? 'flex-start' : 'stretch',\r\n }));\r\n\r\n protected readonly itemStyle = computed(() => ({\r\n display: 'flex',\r\n flex: this.orientation === 'horizontal' ? '1' : '0 0 auto',\r\n flexDirection: this.orientation === 'horizontal' ? 'column' : 'row',\r\n alignItems: this.orientation === 'horizontal' ? 'center' : 'flex-start',\r\n gap: '8px',\r\n }));\r\n\r\n protected dotStyle(status: 'wait' | 'process' | 'finish' | 'error'): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const intent = t.colors.intent.primary;\r\n let bg = t.colors.surfaceElevated;\r\n let fg = t.colors.fgMuted;\r\n let border = t.colors.border;\r\n if (status === 'finish') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n border = intent.solid;\r\n } else if (status === 'process') {\r\n bg = t.colors.surfaceElevated;\r\n fg = intent.solid;\r\n border = intent.solid;\r\n } else if (status === 'error') {\r\n bg = t.colors.surfaceElevated;\r\n fg = t.colors.intent.danger.solid;\r\n border = t.colors.intent.danger.solid;\r\n }\r\n return {\r\n width: '28px',\r\n height: '28px',\r\n borderRadius: '50%',\r\n border: `2px solid ${border}`,\r\n backgroundColor: bg,\r\n color: fg,\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '13px',\r\n fontWeight: '600',\r\n flexShrink: '0',\r\n };\r\n }\r\n\r\n protected readonly textWrapStyle = computed(() => ({\r\n textAlign: this.orientation === 'horizontal' ? 'center' : 'left',\r\n }));\r\n\r\n protected titleStyle(status: 'wait' | 'process' | 'finish' | 'error') {\r\n const t = this.themeService.theme();\r\n return {\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n color: status === 'wait' ? t.colors.fgMuted : t.colors.fg,\r\n };\r\n }\r\n\r\n protected readonly descStyle = computed(() => ({\r\n fontSize: '12px',\r\n color: this.themeService.theme().colors.fgMuted,\r\n marginTop: '2px',\r\n }));\r\n\r\n protected connectorStyle(status: 'wait' | 'process' | 'finish' | 'error') {\r\n const t = this.themeService.theme();\r\n const colored = status === 'finish' ? t.colors.intent.primary.solid : t.colors.border;\r\n if (this.orientation === 'horizontal') {\r\n return {\r\n flex: '1',\r\n height: '2px',\r\n backgroundColor: colored,\r\n alignSelf: 'center',\r\n marginTop: '13px',\r\n };\r\n }\r\n return {\r\n width: '2px',\r\n minHeight: '18px',\r\n backgroundColor: colored,\r\n marginLeft: '13px',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n HostListener,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraAnchorLink {\r\n href: string;\r\n label: string;\r\n children?: ElvoraAnchorLink[];\r\n}\r\n\r\nfunction flatten(links: ElvoraAnchorLink[]): ElvoraAnchorLink[] {\r\n return links.flatMap((l) => [l, ...(l.children ? flatten(l.children) : [])]);\r\n}\r\n\r\n/** Anchor — in-page navigation. */\r\n@Component({\r\n selector: 'elvora-anchor',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, NgTemplateOutlet],\r\n template: `\r\n <nav aria-label=\"Page sections\">\r\n <ul style=\"list-style:none;margin:0;padding:0\">\r\n <ng-container *ngTemplateOutlet=\"treeTpl; context: { items: links, depth: 0 }\"></ng-container>\r\n </ul>\r\n </nav>\r\n\r\n <ng-template #treeTpl let-items=\"items\" let-depth=\"depth\">\r\n <li *ngFor=\"let link of items\" style=\"list-style:none\">\r\n <a\r\n [href]=\"'#' + link.href\"\r\n [ngStyle]=\"linkStyle(link.href, depth)\"\r\n (click)=\"onActivate($event, link.href)\"\r\n >\r\n {{ link.label }}\r\n </a>\r\n <ul *ngIf=\"link.children?.length\" style=\"list-style:none;margin:0;padding:0\">\r\n <ng-container *ngTemplateOutlet=\"treeTpl; context: { items: link.children, depth: depth + 1 }\"></ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n `,\r\n})\r\nexport class ElvoraAnchor {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n protected readonly activeHref = signal<string | null>(null);\r\n\r\n @Input() links: ElvoraAnchorLink[] = [];\r\n @Input() offsetTop = 0;\r\n @Input() smooth = true;\r\n\r\n @HostListener('window:scroll')\r\n @HostListener('window:resize')\r\n onScroll() {\r\n const flat = flatten(this.links);\r\n let bestHref: string | null = null;\r\n let bestDistance = Infinity;\r\n for (const link of flat) {\r\n const el = document.getElementById(link.href);\r\n if (!el) continue;\r\n const rect = el.getBoundingClientRect();\r\n const dist = Math.abs(rect.top - this.offsetTop);\r\n if (rect.top - this.offsetTop <= 1 && dist < bestDistance) {\r\n bestDistance = dist;\r\n bestHref = link.href;\r\n }\r\n }\r\n if (!bestHref && flat.length > 0) bestHref = flat[0]?.href ?? null;\r\n this.activeHref.set(bestHref);\r\n }\r\n\r\n onActivate(event: MouseEvent, href: string) {\r\n event.preventDefault();\r\n const target = document.getElementById(href);\r\n if (!target) return;\r\n const top = target.getBoundingClientRect().top + window.scrollY - this.offsetTop;\r\n window.scrollTo({ top, behavior: this.smooth ? 'smooth' : 'auto' });\r\n this.activeHref.set(href);\r\n history.replaceState(null, '', `#${href}`);\r\n }\r\n\r\n protected linkStyle(href: string, depth: number) {\r\n const t = this.themeService.theme();\r\n const active = this.activeHref() === href;\r\n return {\r\n display: 'block',\r\n padding: '6px 12px',\r\n paddingLeft: `${12 + depth * 12}px`,\r\n color: active ? t.colors.intent.primary.fg : t.colors.fgMuted,\r\n fontSize: '13px',\r\n textDecoration: 'none',\r\n borderLeft: `2px solid ${active ? t.colors.intent.primary.solid : t.colors.border}`,\r\n backgroundColor: active ? t.colors.intent.primary.subtle : 'transparent',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n HostListener,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraIcon } from './icon.component';\r\n\r\n/** BackTop — floating \"scroll to top\" button. */\r\n@Component({\r\n selector: 'elvora-back-top',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraIcon],\r\n template: `\r\n <button\r\n *ngIf=\"visible()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"label\"\r\n [title]=\"label\"\r\n [ngStyle]=\"btnStyle()\"\r\n (click)=\"onClick()\"\r\n >\r\n <elvora-icon name=\"chevronUp\" [size]=\"18\" color=\"currentColor\"></elvora-icon>\r\n </button>\r\n `,\r\n})\r\nexport class ElvoraBackTop {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n protected readonly visible = signal(false);\r\n\r\n @Input() visibilityHeight = 400;\r\n @Input() bottom = 24;\r\n @Input() right = 24;\r\n @Input() smooth = true;\r\n @Input() label = 'Back to top';\r\n\r\n @HostListener('window:scroll')\r\n onScroll() {\r\n this.visible.set(window.scrollY > this.visibilityHeight);\r\n }\r\n\r\n onClick() {\r\n window.scrollTo({ top: 0, behavior: this.smooth ? 'smooth' : 'auto' });\r\n }\r\n\r\n protected readonly btnStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'fixed',\r\n bottom: `${this.bottom}px`,\r\n right: `${this.right}px`,\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '9999px',\r\n border: `1px solid ${t.colors.border}`,\r\n backgroundColor: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n boxShadow: t.shadows.lg,\r\n cursor: 'pointer',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: String(t.tokens.zIndex.overlay),\r\n };\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraLabel } from './label.component';\r\n\r\n@Injectable()\r\nexport class ElvoraFormState {\r\n layout = signal<'vertical' | 'horizontal'>('vertical');\r\n labelWidth = signal<number | string | null>(null);\r\n errors = signal<Record<string, string | undefined>>({});\r\n\r\n setLayout(value: 'vertical' | 'horizontal') {\r\n this.layout.set(value);\r\n }\r\n\r\n setLabelWidth(value: number | string | null) {\r\n this.labelWidth.set(value);\r\n }\r\n\r\n setFieldError(name: string, error: string | undefined) {\r\n const current = this.errors();\r\n if (current[name] === error) return;\r\n const next = { ...current };\r\n if (error === undefined) delete next[name];\r\n else next[name] = error;\r\n this.errors.set(next);\r\n }\r\n\r\n errorFor(name: string): string | undefined {\r\n return this.errors()[name];\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-form',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [ElvoraFormState],\r\n template: `\r\n <form (ngSubmit)=\"onSubmit.emit($event)\" novalidate>\r\n <ng-content></ng-content>\r\n </form>\r\n `,\r\n})\r\nexport class ElvoraForm {\r\n private readonly state = inject(ElvoraFormState);\r\n\r\n @Input() set layout(value: 'vertical' | 'horizontal') {\r\n this.state.setLayout(value);\r\n }\r\n get layout() {\r\n return this.state.layout();\r\n }\r\n @Input() set labelWidth(value: number | string | null) {\r\n this.state.setLabelWidth(value);\r\n }\r\n get labelWidth() {\r\n return this.state.labelWidth();\r\n }\r\n\r\n @Output() readonly onSubmit = new EventEmitter<Event>();\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-form-field',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle, ElvoraLabel],\r\n template: `\r\n <div [ngStyle]=\"wrapperStyle()\">\r\n <elvora-label *ngIf=\"label\" [isRequired]=\"isRequired\" [ngStyle]=\"labelStyle()\">{{ label }}</elvora-label>\r\n <div style=\"flex:1;min-width:0\">\r\n <ng-content></ng-content>\r\n <div *ngIf=\"hint && !displayedError()\" [ngStyle]=\"hintStyle()\">{{ hint }}</div>\r\n <div *ngIf=\"displayedError()\" role=\"alert\" [ngStyle]=\"errorStyle()\">{{ displayedError() }}</div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraFormField {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly state = inject(ElvoraFormState, { optional: true });\r\n\r\n @Input({ required: true }) name = '';\r\n @Input() label?: string;\r\n @Input() hint?: string;\r\n @Input() error?: string;\r\n @Input() isRequired = false;\r\n\r\n readonly displayedError = computed(() => this.error ?? this.state?.errorFor(this.name));\r\n\r\n protected readonly wrapperStyle = computed(() => {\r\n const horizontal = this.state?.layout() === 'horizontal';\r\n return {\r\n display: 'flex',\r\n flexDirection: horizontal ? 'row' : 'column',\r\n alignItems: horizontal ? 'flex-start' : 'stretch',\r\n gap: horizontal ? '16px' : '6px',\r\n marginBottom: '16px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly labelStyle = computed(() => {\r\n const horizontal = this.state?.layout() === 'horizontal';\r\n const width = this.state?.labelWidth() ?? 140;\r\n return {\r\n width: horizontal ? (typeof width === 'number' ? `${width}px` : width) : 'auto',\r\n paddingTop: horizontal ? '8px' : '0',\r\n flexShrink: '0',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly hintStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return { marginTop: '4px', fontSize: '12px', color: t.colors.fgMuted } as Record<string, string>;\r\n });\r\n\r\n protected readonly errorStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return { marginTop: '4px', fontSize: '12px', color: t.colors.intent.danger.fg } as Record<string, string>;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nfunction format(value: number, precision: number | undefined): string {\r\n if (precision === undefined) return String(value);\r\n return value.toFixed(precision);\r\n}\r\n\r\nfunction clamp(v: number, min?: number, max?: number): number {\r\n let out = v;\r\n if (typeof min === 'number') out = Math.max(out, min);\r\n if (typeof max === 'number') out = Math.min(out, max);\r\n return out;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-number-input',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div role=\"group\" [attr.aria-disabled]=\"isDisabled || null\" [ngStyle]=\"wrapperStyle()\">\r\n <input\r\n type=\"text\"\r\n inputmode=\"decimal\"\r\n role=\"spinbutton\"\r\n [attr.aria-valuenow]=\"value ?? null\"\r\n [attr.aria-valuemin]=\"min ?? null\"\r\n [attr.aria-valuemax]=\"max ?? null\"\r\n [disabled]=\"isDisabled\"\r\n [readonly]=\"isReadOnly\"\r\n [placeholder]=\"placeholder ?? ''\"\r\n [value]=\"text\"\r\n [ngStyle]=\"inputStyle()\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n <div *ngIf=\"!hideSteppers\" [ngStyle]=\"stepperContainerStyle()\">\r\n <button type=\"button\" tabindex=\"-1\" (click)=\"increment(step)\" [disabled]=\"isDisabled || isReadOnly\" [ngStyle]=\"stepperBtnStyle(true)\">▲</button>\r\n <button type=\"button\" tabindex=\"-1\" (click)=\"increment(-step)\" [disabled]=\"isDisabled || isReadOnly\" [ngStyle]=\"stepperBtnStyle(false)\">▼</button>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraNumberInput {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value: number | null = null;\r\n @Input() min?: number;\r\n @Input() max?: number;\r\n @Input() step = 1;\r\n @Input() precision?: number;\r\n @Input() isDisabled = false;\r\n @Input() isReadOnly = false;\r\n @Input() isInvalid = false;\r\n @Input() hideSteppers = false;\r\n @Input() placeholder?: string;\r\n @Output() readonly valueChange = new EventEmitter<number | null>();\r\n\r\n protected text = this.value == null ? '' : format(this.value, this.precision);\r\n\r\n private setValue(next: number | null) {\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n this.text = next == null ? '' : format(next, this.precision);\r\n }\r\n\r\n protected increment(delta: number) {\r\n if (this.isDisabled || this.isReadOnly) return;\r\n const current = typeof this.value === 'number' ? this.value : 0;\r\n this.setValue(clamp(parseFloat(format(current + delta, this.precision ?? 6)), this.min, this.max));\r\n }\r\n\r\n protected onInput(e: Event) {\r\n const raw = (e.target as HTMLInputElement).value;\r\n this.text = raw;\r\n if (raw === '' || raw === '-') {\r\n this.value = null;\r\n this.valueChange.emit(null);\r\n return;\r\n }\r\n const parsed = Number(raw);\r\n if (!Number.isNaN(parsed)) {\r\n const c = clamp(parsed, this.min, this.max);\r\n this.value = c;\r\n this.valueChange.emit(c);\r\n }\r\n }\r\n\r\n protected onBlur() {\r\n if (this.text === '' || this.text === '-') return;\r\n const parsed = Number(this.text);\r\n if (Number.isNaN(parsed)) {\r\n this.text = this.value == null ? '' : format(this.value, this.precision);\r\n return;\r\n }\r\n this.setValue(clamp(parsed, this.min, this.max));\r\n }\r\n\r\n protected onKeyDown(e: KeyboardEvent) {\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.increment(this.step);\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.increment(-this.step);\r\n }\r\n }\r\n\r\n protected readonly wrapperStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'stretch',\r\n border: `1px solid ${this.isInvalid ? t.colors.intent.danger.solid : t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n overflow: 'hidden',\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly inputStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '8px 12px',\r\n border: 'none',\r\n outline: 'none',\r\n background: 'transparent',\r\n color: t.colors.fg,\r\n fontSize: '14px',\r\n minWidth: '80px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly stepperContainerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n borderLeft: `1px solid ${t.colors.border}`,\r\n } as Record<string, string>;\r\n });\r\n\r\n protected stepperBtnStyle(top: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n flex: '1',\r\n padding: '0 6px',\r\n border: 'none',\r\n background: t.colors.surface,\r\n color: t.colors.fg,\r\n cursor: 'pointer',\r\n borderBottom: top ? `1px solid ${t.colors.border}` : 'none',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraSegmentedOption {\r\n value: string;\r\n label: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-segmented',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgStyle],\r\n template: `\r\n <div role=\"radiogroup\" [attr.aria-disabled]=\"isDisabled || null\" [ngStyle]=\"containerStyle()\">\r\n <button\r\n *ngFor=\"let opt of options\"\r\n type=\"button\"\r\n role=\"radio\"\r\n [attr.aria-checked]=\"opt.value === value\"\r\n [attr.aria-disabled]=\"(isDisabled || opt.isDisabled) || null\"\r\n [disabled]=\"isDisabled || opt.isDisabled\"\r\n [ngStyle]=\"btnStyle(opt.value === value)\"\r\n (click)=\"select(opt)\"\r\n >\r\n {{ opt.label }}\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraSegmented {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() options: ElvoraSegmentedOption[] = [];\r\n @Input() value = '';\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<string>();\r\n\r\n protected select(opt: ElvoraSegmentedOption) {\r\n if (this.isDisabled || opt.isDisabled) return;\r\n this.value = opt.value;\r\n this.valueChange.emit(opt.value);\r\n }\r\n\r\n protected readonly containerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n background: t.colors.intent.neutral.subtle,\r\n borderRadius: `${t.radii.md}px`,\r\n padding: '4px',\r\n gap: '2px',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected btnStyle(active: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const padding = this.size === 'sm' ? '4px 10px' : this.size === 'lg' ? '10px 16px' : '6px 12px';\r\n const fontSize = this.size === 'sm' ? '12px' : this.size === 'lg' ? '15px' : '14px';\r\n return {\r\n appearance: 'none',\r\n border: 'none',\r\n background: active ? t.colors.surfaceElevated : 'transparent',\r\n color: active ? t.colors.fg : t.colors.fgMuted,\r\n borderRadius: `${t.radii.sm}px`,\r\n padding,\r\n fontSize,\r\n fontWeight: String(t.tokens.typography.fontWeights.medium),\r\n cursor: 'pointer',\r\n boxShadow: active ? t.shadows.sm : 'none',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nfunction snap(value: number, min: number, max: number, step: number): number {\r\n const clamped = Math.min(Math.max(value, min), max);\r\n if (step <= 0) return clamped;\r\n const steps = Math.round((clamped - min) / step);\r\n return Math.min(Math.max(min + steps * step, min), max);\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-slider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div [ngStyle]=\"wrapperStyle()\">\r\n <div\r\n #track\r\n [ngStyle]=\"trackStyle()\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n >\r\n <div [ngStyle]=\"fillStyle()\"></div>\r\n <div\r\n role=\"slider\"\r\n [attr.tabindex]=\"isDisabled ? -1 : 0\"\r\n [attr.aria-valuemin]=\"min\"\r\n [attr.aria-valuemax]=\"max\"\r\n [attr.aria-valuenow]=\"value\"\r\n [attr.aria-disabled]=\"isDisabled || null\"\r\n [ngStyle]=\"thumbStyle()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n ></div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraSlider {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n @ViewChild('track') private trackRef?: ElementRef<HTMLDivElement>;\r\n\r\n @Input() value = 0;\r\n @Input() min = 0;\r\n @Input() max = 100;\r\n @Input() step = 1;\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<number>();\r\n @Output() readonly valueChangeEnd = new EventEmitter<number>();\r\n\r\n private dragging = signal(false);\r\n\r\n private commit(next: number): number {\r\n const snapped = snap(next, this.min, this.max, this.step);\r\n if (snapped !== this.value) {\r\n this.value = snapped;\r\n this.valueChange.emit(snapped);\r\n }\r\n return snapped;\r\n }\r\n\r\n private valueFromClient(clientX: number): number {\r\n const track = this.trackRef?.nativeElement;\r\n if (!track) return this.value;\r\n const rect = track.getBoundingClientRect();\r\n const ratio = (clientX - rect.left) / rect.width;\r\n return this.min + ratio * (this.max - this.min);\r\n }\r\n\r\n protected onPointerDown(e: PointerEvent) {\r\n if (this.isDisabled) return;\r\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\r\n this.dragging.set(true);\r\n this.commit(this.valueFromClient(e.clientX));\r\n }\r\n\r\n protected onPointerMove(e: PointerEvent) {\r\n if (!this.dragging() || this.isDisabled) return;\r\n this.commit(this.valueFromClient(e.clientX));\r\n }\r\n\r\n protected onPointerUp(e: PointerEvent) {\r\n if (!this.dragging()) return;\r\n this.dragging.set(false);\r\n try {\r\n (e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\r\n } catch {}\r\n this.valueChangeEnd.emit(this.value);\r\n }\r\n\r\n @HostListener('window:pointerup')\r\n protected onGlobalUp() {\r\n this.dragging.set(false);\r\n }\r\n\r\n protected onKeyDown(e: KeyboardEvent) {\r\n if (this.isDisabled) return;\r\n let next = this.value;\r\n const big = (this.max - this.min) / 10;\r\n switch (e.key) {\r\n case 'ArrowLeft':\r\n case 'ArrowDown':\r\n next -= this.step;\r\n break;\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n next += this.step;\r\n break;\r\n case 'PageDown':\r\n next -= big;\r\n break;\r\n case 'PageUp':\r\n next += big;\r\n break;\r\n case 'Home':\r\n next = this.min;\r\n break;\r\n case 'End':\r\n next = this.max;\r\n break;\r\n default:\r\n return;\r\n }\r\n e.preventDefault();\r\n const snapped = this.commit(next);\r\n this.valueChangeEnd.emit(snapped);\r\n }\r\n\r\n protected readonly wrapperStyle = computed(() => ({\r\n position: 'relative',\r\n padding: '12px 8px',\r\n minWidth: '120px',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n }) as Record<string, string>);\r\n\r\n protected readonly trackStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'relative',\r\n height: '4px',\r\n borderRadius: '999px',\r\n backgroundColor: t.colors.intent.neutral.subtle,\r\n touchAction: 'none',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly fillStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const pct = ((this.value - this.min) / (this.max - this.min)) * 100;\r\n return {\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n height: '100%',\r\n width: `${pct}%`,\r\n backgroundColor: t.colors.intent.primary.solid,\r\n borderRadius: '999px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly thumbStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const pct = ((this.value - this.min) / (this.max - this.min)) * 100;\r\n return {\r\n position: 'absolute',\r\n top: '50%',\r\n left: `${pct}%`,\r\n transform: 'translate(-50%, -50%)',\r\n width: '18px',\r\n height: '18px',\r\n borderRadius: '50%',\r\n backgroundColor: t.colors.surfaceElevated,\r\n border: `2px solid ${t.colors.intent.primary.solid}`,\r\n boxShadow: t.shadows.sm,\r\n outline: 'none',\r\n cursor: this.isDisabled ? 'not-allowed' : 'grab',\r\n } as Record<string, string>;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-rate',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgStyle],\r\n template: `\r\n <div\r\n role=\"slider\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"count\"\r\n [attr.aria-valuenow]=\"value\"\r\n [attr.aria-disabled]=\"isDisabled || null\"\r\n [tabindex]=\"isDisabled ? -1 : 0\"\r\n [ngStyle]=\"containerStyle()\"\r\n (keydown)=\"onKey($event)\"\r\n (mouseleave)=\"hover.set(null)\"\r\n >\r\n <span\r\n *ngFor=\"let _ of slots; let i = index\"\r\n [ngStyle]=\"starStyle(i)\"\r\n (mousemove)=\"onHover($event, i)\"\r\n (click)=\"onPick($event, i)\"\r\n >★</span>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraRate {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value = 0;\r\n @Input() count = 5;\r\n @Input() allowHalf = false;\r\n @Input() isDisabled = false;\r\n @Input() ariaLabel = 'Rating';\r\n @Output() readonly valueChange = new EventEmitter<number>();\r\n\r\n protected readonly hover = signal<number | null>(null);\r\n protected get slots() {\r\n return Array.from({ length: this.count });\r\n }\r\n\r\n protected setValue(next: number) {\r\n if (this.isDisabled) return;\r\n const clamped = Math.min(Math.max(next, 0), this.count);\r\n if (clamped !== this.value) {\r\n this.value = clamped;\r\n this.valueChange.emit(clamped);\r\n }\r\n }\r\n\r\n protected onHover(e: MouseEvent, i: number) {\r\n if (this.isDisabled) return;\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const left = e.clientX - rect.left < rect.width / 2;\r\n this.hover.set(left && this.allowHalf ? i + 0.5 : i + 1);\r\n }\r\n\r\n protected onPick(e: MouseEvent, i: number) {\r\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\r\n const left = e.clientX - rect.left < rect.width / 2;\r\n this.setValue(left && this.allowHalf ? i + 0.5 : i + 1);\r\n }\r\n\r\n protected onKey(e: KeyboardEvent) {\r\n if (this.isDisabled) return;\r\n const stepSize = this.allowHalf ? 0.5 : 1;\r\n if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.setValue(this.value - stepSize);\r\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.setValue(this.value + stepSize);\r\n } else if (e.key === 'Home') {\r\n e.preventDefault();\r\n this.setValue(0);\r\n } else if (e.key === 'End') {\r\n e.preventDefault();\r\n this.setValue(this.count);\r\n }\r\n }\r\n\r\n protected readonly containerStyle = computed(() => ({\r\n display: 'inline-flex',\r\n gap: '4px',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n outline: 'none',\r\n }) as Record<string, string>);\r\n\r\n protected starStyle(i: number): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const displayed = this.hover() ?? this.value;\r\n const filled = displayed >= i + 1;\r\n const half = !filled && this.allowHalf && displayed >= i + 0.5;\r\n const color = filled ? t.colors.intent.warning.solid : half ? t.colors.intent.warning.solid : t.colors.border;\r\n return {\r\n fontSize: '22px',\r\n color,\r\n lineHeight: '1',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraUploadFile {\r\n id: string;\r\n file: File;\r\n status: 'pending' | 'uploading' | 'done' | 'error';\r\n progress?: number;\r\n error?: string;\r\n}\r\n\r\nlet nextId = 0;\r\n\r\n@Component({\r\n selector: 'elvora-upload',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div>\r\n <label\r\n [ngStyle]=\"dropzoneStyle()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"dragOver.set(false)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <div style=\"font-size:14px;font-weight:500\">Click or drag {{ multiple ? 'files' : 'a file' }} here</div>\r\n <div *ngIf=\"description\" [ngStyle]=\"hintStyle()\">{{ description }}</div>\r\n <input\r\n type=\"file\"\r\n [multiple]=\"multiple\"\r\n [accept]=\"accept ?? ''\"\r\n [disabled]=\"isDisabled\"\r\n (change)=\"onInput($event)\"\r\n style=\"display:none\"\r\n />\r\n </label>\r\n <ul *ngIf=\"files.length > 0\" style=\"list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column;gap:6px\">\r\n <li *ngFor=\"let f of files\" [ngStyle]=\"rowStyle()\">\r\n <div style=\"flex:1;min-width:0\">\r\n <div style=\"font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">{{ f.file.name }}</div>\r\n <div style=\"font-size:11px;opacity:0.7\">{{ (f.file.size / 1024).toFixed(1) }} KB<span *ngIf=\"f.status !== 'pending'\"> • {{ f.status }}</span></div>\r\n </div>\r\n <button type=\"button\" (click)=\"remove(f.id)\" style=\"border:none;background:transparent;cursor:pointer;font-size:14px\">×</button>\r\n </li>\r\n </ul>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraUpload {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() files: ElvoraUploadFile[] = [];\r\n @Input() multiple = false;\r\n @Input() accept?: string;\r\n @Input() description?: string;\r\n @Input() isDisabled = false;\r\n @Output() readonly filesChange = new EventEmitter<ElvoraUploadFile[]>();\r\n @Output() readonly upload = new EventEmitter<File[]>();\r\n\r\n protected readonly dragOver = signal(false);\r\n\r\n protected onInput(e: Event) {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files) this.handleFiles(Array.from(input.files));\r\n input.value = '';\r\n }\r\n\r\n protected onDragOver(e: DragEvent) {\r\n e.preventDefault();\r\n if (!this.isDisabled) this.dragOver.set(true);\r\n }\r\n\r\n protected onDrop(e: DragEvent) {\r\n e.preventDefault();\r\n this.dragOver.set(false);\r\n if (e.dataTransfer?.files) this.handleFiles(Array.from(e.dataTransfer.files));\r\n }\r\n\r\n private handleFiles(arr: File[]) {\r\n if (this.isDisabled || arr.length === 0) return;\r\n const list = this.multiple ? arr : [arr[0]!];\r\n const wrapped: ElvoraUploadFile[] = list.map((f) => ({\r\n id: `upload-${++nextId}`,\r\n file: f,\r\n status: 'pending',\r\n }));\r\n const next = this.multiple ? [...this.files, ...wrapped] : wrapped;\r\n this.files = next;\r\n this.filesChange.emit(next);\r\n this.upload.emit(list);\r\n }\r\n\r\n protected remove(id: string) {\r\n this.files = this.files.filter((f) => f.id !== id);\r\n this.filesChange.emit(this.files);\r\n }\r\n\r\n protected readonly dropzoneStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n const over = this.dragOver();\r\n return {\r\n display: 'block',\r\n padding: '24px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `2px dashed ${over ? t.colors.intent.primary.solid : t.colors.border}`,\r\n background: over ? t.colors.intent.primary.subtle : t.colors.surface,\r\n textAlign: 'center',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n color: t.colors.fg,\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly hintStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return { fontSize: '12px', color: t.colors.fgMuted, marginTop: '4px' } as Record<string, string>;\r\n });\r\n\r\n protected readonly rowStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n padding: '8px 12px',\r\n borderRadius: `${t.radii.sm}px`,\r\n background: t.colors.surface,\r\n border: `1px solid ${t.colors.border}`,\r\n } as Record<string, string>;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraAutoCompleteOption {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-autocomplete',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <input\r\n role=\"combobox\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-autocomplete]=\"'list'\"\r\n [attr.aria-invalid]=\"isInvalid || null\"\r\n [disabled]=\"isDisabled\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder ?? ''\"\r\n [ngStyle]=\"inputStyle()\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"open()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n <ul *ngIf=\"isOpen() && filtered().length > 0\" [ngStyle]=\"listStyle()\">\r\n <li\r\n *ngFor=\"let opt of filtered(); let i = index\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === highlight()\"\r\n [ngStyle]=\"itemStyle(i === highlight())\"\r\n (mousedown)=\"$event.preventDefault(); select(opt)\"\r\n (mouseenter)=\"highlight.set(i)\"\r\n >\r\n {{ opt.label ?? opt.value }}\r\n </li>\r\n </ul>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraAutoComplete {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() value = '';\r\n @Input() options: ElvoraAutoCompleteOption[] = [];\r\n @Input() placeholder?: string;\r\n @Input() isDisabled = false;\r\n @Input() isInvalid = false;\r\n @Output() readonly valueChange = new EventEmitter<string>();\r\n @Output() readonly selected = new EventEmitter<ElvoraAutoCompleteOption>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly highlight = signal(-1);\r\n\r\n protected readonly filtered = computed(() => {\r\n const q = this.value.toLowerCase();\r\n return q ? this.options.filter((o) => o.value.toLowerCase().includes(q)) : this.options;\r\n });\r\n\r\n protected onInput(e: Event) {\r\n const v = (e.target as HTMLInputElement).value;\r\n this.value = v;\r\n this.valueChange.emit(v);\r\n this.isOpen.set(true);\r\n this.highlight.set(-1);\r\n }\r\n\r\n protected open() {\r\n this.isOpen.set(true);\r\n }\r\n\r\n protected select(opt: ElvoraAutoCompleteOption) {\r\n this.value = opt.value;\r\n this.valueChange.emit(opt.value);\r\n this.selected.emit(opt);\r\n this.isOpen.set(false);\r\n }\r\n\r\n protected onKeyDown(e: KeyboardEvent) {\r\n const list = this.filtered();\r\n if (!this.isOpen() && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\r\n this.isOpen.set(true);\r\n e.preventDefault();\r\n return;\r\n }\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.highlight.update((h) => (h + 1) % Math.max(list.length, 1));\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.highlight.update((h) => (h <= 0 ? list.length - 1 : h - 1));\r\n } else if (e.key === 'Enter') {\r\n const item = list[this.highlight()];\r\n if (item) {\r\n e.preventDefault();\r\n this.select(item);\r\n }\r\n } else if (e.key === 'Escape') {\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) {\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n protected readonly inputStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n width: '100%',\r\n padding: '8px 12px',\r\n fontSize: '14px',\r\n border: `1px solid ${this.isInvalid ? t.colors.intent.danger.solid : t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n outline: 'none',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n right: '0',\r\n marginTop: '4px',\r\n listStyle: 'none',\r\n padding: '4px',\r\n maxHeight: '220px',\r\n overflowY: 'auto',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.dropdown),\r\n } as Record<string, string>;\r\n });\r\n\r\n protected itemStyle(active: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n fontSize: '14px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: 'pointer',\r\n background: active ? t.colors.intent.neutral.subtle : 'transparent',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst DEFAULT_PRESETS = ['#0F172A', '#1D4ED8', '#16A34A', '#F59E0B', '#DC2626', '#7C3AED', '#0EA5E9', '#FFFFFF'];\r\n\r\nfunction normalize(v: string): string {\r\n if (!v) return '#000000';\r\n return v.startsWith('#') ? v.toUpperCase() : `#${v.toUpperCase()}`;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-color-picker',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <button\r\n type=\"button\"\r\n [disabled]=\"isDisabled\"\r\n [attr.aria-haspopup]=\"'dialog'\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n (click)=\"toggle()\"\r\n [ngStyle]=\"triggerStyle()\"\r\n >\r\n <span [ngStyle]=\"swatchStyle(currentValue())\"></span>\r\n <span style=\"font-family:monospace;font-size:13px\">{{ currentValue() }}</span>\r\n </button>\r\n <div *ngIf=\"isOpen()\" role=\"dialog\" [ngStyle]=\"popoverStyle()\">\r\n <input type=\"color\" [value]=\"currentValue()\" (input)=\"onPick($event)\" style=\"width:100%;height:80px;border:none;padding:0;background:transparent\" />\r\n <input\r\n type=\"text\"\r\n [value]=\"hexInput()\"\r\n (input)=\"onHexInput($event)\"\r\n style=\"margin-top:8px;width:100%;padding:6px 8px;font-family:monospace;font-size:13px;border-radius:6px\"\r\n />\r\n <div style=\"display:flex;flex-wrap:wrap;gap:6px;margin-top:10px\">\r\n <button\r\n *ngFor=\"let p of presets\"\r\n type=\"button\"\r\n [ngStyle]=\"swatchStyle(p, true)\"\r\n (click)=\"set(p)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraColorPicker {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() set value(v: string) {\r\n this._value = normalize(v);\r\n this.hexInput.set(this._value);\r\n }\r\n get value(): string {\r\n return this._value;\r\n }\r\n private _value = normalize('#0F172A');\r\n @Input() presets: string[] = DEFAULT_PRESETS;\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<string>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly hexInput = signal(this._value);\r\n protected readonly currentValue = computed(() => this._value);\r\n\r\n protected toggle() {\r\n this.isOpen.update((o) => !o);\r\n }\r\n\r\n protected set(next: string) {\r\n const n = normalize(next);\r\n this._value = n;\r\n this.hexInput.set(n);\r\n this.valueChange.emit(n);\r\n }\r\n\r\n protected onPick(e: Event) {\r\n this.set((e.target as HTMLInputElement).value);\r\n }\r\n\r\n protected onHexInput(e: Event) {\r\n const raw = (e.target as HTMLInputElement).value;\r\n this.hexInput.set(raw);\r\n if (/^#?[0-9a-fA-F]{6}$/.test(raw)) this.set(raw);\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '4px 8px 4px 4px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected swatchStyle(color: string, button = false): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-block',\r\n width: button ? '22px' : '24px',\r\n height: button ? '22px' : '24px',\r\n borderRadius: `${t.radii.sm}px`,\r\n background: color,\r\n border: `1px solid ${t.colors.border}`,\r\n cursor: button ? 'pointer' : 'default',\r\n };\r\n }\r\n\r\n protected readonly popoverStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '6px',\r\n padding: '12px',\r\n width: '220px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n } as Record<string, string>;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nconst pad = (n: number) => String(n).padStart(2, '0');\r\nconst defaultFormat = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\r\n\r\nfunction startOfMonth(d: Date) {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number) {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction buildMatrix(view: Date, weekStartsOn: number): Date[][] {\r\n const first = startOfMonth(view);\r\n const firstWeekday = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - firstWeekday);\r\n const weeks: Date[][] = [];\r\n for (let w = 0; w < 6; w++) {\r\n const row: Date[] = [];\r\n for (let d = 0; d < 7; d++) {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + w * 7 + d);\r\n row.push(day);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return a.toDateString() === b.toDateString();\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-date-picker',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <button\r\n type=\"button\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"toggle()\"\r\n [ngStyle]=\"triggerStyle()\"\r\n >\r\n {{ value ? format(value) : (placeholder || 'YYYY-MM-DD') }}\r\n </button>\r\n <div *ngIf=\"isOpen()\" role=\"dialog\" [ngStyle]=\"popoverStyle()\">\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:8px\">\r\n <button type=\"button\" (click)=\"prev()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">‹</button>\r\n <div style=\"font-size:14px;font-weight:500\">{{ monthLabel() }}</div>\r\n <button type=\"button\" (click)=\"next()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">›</button>\r\n </div>\r\n <div style=\"display:grid;grid-template-columns:repeat(7,1fr);gap:2px\">\r\n <div *ngFor=\"let wd of weekdays\" style=\"text-align:center;font-size:11px;padding:4px;font-weight:500\">{{ wd }}</div>\r\n <button\r\n *ngFor=\"let d of flatMatrix()\"\r\n type=\"button\"\r\n [ngStyle]=\"dayStyle(d)\"\r\n (click)=\"pick(d)\"\r\n [disabled]=\"!isInRange(d)\"\r\n >{{ d.getDate() }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraDatePicker {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() value: Date | null = null;\r\n @Input() min?: Date;\r\n @Input() max?: Date;\r\n @Input() placeholder?: string;\r\n @Input() isDisabled = false;\r\n @Input() isInvalid = false;\r\n @Input() weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0;\r\n @Input() format: (d: Date) => string = defaultFormat;\r\n @Output() readonly valueChange = new EventEmitter<Date | null>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly view = signal<Date>(this.value ?? new Date());\r\n\r\n protected get weekdays(): string[] {\r\n const base = new Date(2024, 0, 7);\r\n const arr: string[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + ((i + this.weekStartsOn) % 7));\r\n arr.push(d.toLocaleString(undefined, { weekday: 'short' }));\r\n }\r\n return arr;\r\n }\r\n\r\n protected toggle() {\r\n this.isOpen.update((o) => !o);\r\n if (this.value) this.view.set(this.value);\r\n }\r\n\r\n protected prev() {\r\n this.view.update((v) => addMonths(v, -1));\r\n }\r\n\r\n protected next() {\r\n this.view.update((v) => addMonths(v, 1));\r\n }\r\n\r\n protected pick(d: Date) {\r\n if (!this.isInRange(d)) return;\r\n this.value = d;\r\n this.valueChange.emit(d);\r\n this.isOpen.set(false);\r\n }\r\n\r\n protected isInRange(d: Date): boolean {\r\n if (this.min && d < new Date(this.min.getFullYear(), this.min.getMonth(), this.min.getDate())) return false;\r\n if (this.max && d > new Date(this.max.getFullYear(), this.max.getMonth(), this.max.getDate())) return false;\r\n return true;\r\n }\r\n\r\n protected readonly monthLabel = computed(() =>\r\n this.view().toLocaleString(undefined, { month: 'long', year: 'numeric' }),\r\n );\r\n\r\n protected readonly flatMatrix = computed(() => buildMatrix(this.view(), this.weekStartsOn).flat());\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '8px 12px',\r\n minWidth: '160px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${this.isInvalid ? t.colors.intent.danger.solid : t.colors.border}`,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n color: this.value ? t.colors.fg : t.colors.fgMuted,\r\n fontSize: '14px',\r\n textAlign: 'left',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly popoverStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '6px',\r\n padding: '12px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n width: '268px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected dayStyle(d: Date): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const today = new Date();\r\n const selected = isSameDay(d, this.value);\r\n const isToday = isSameDay(d, today);\r\n const inMonth = d.getMonth() === this.view().getMonth();\r\n const disabled = !this.isInRange(d);\r\n return {\r\n padding: '6px 0',\r\n fontSize: '13px',\r\n border: 'none',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n background: selected ? t.colors.intent.primary.solid : isToday ? t.colors.intent.primary.subtle : 'transparent',\r\n color: selected ? t.colors.intent.primary.solidFg : inMonth ? t.colors.fg : t.colors.fgSubtle,\r\n opacity: disabled ? '0.4' : '1',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraTimeValue {\r\n hours: number;\r\n minutes: number;\r\n seconds?: number;\r\n}\r\n\r\nconst pad = (n: number) => String(n).padStart(2, '0');\r\n\r\nfunction formatTime(t: ElvoraTimeValue | null, use12: boolean, showSec: boolean): string {\r\n if (!t) return '';\r\n const h = use12 ? ((t.hours + 11) % 12) + 1 : t.hours;\r\n const main = `${pad(h)}:${pad(t.minutes)}${showSec ? `:${pad(t.seconds ?? 0)}` : ''}`;\r\n return use12 ? `${main} ${t.hours >= 12 ? 'PM' : 'AM'}` : main;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-time-picker',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <button type=\"button\" [disabled]=\"isDisabled\" (click)=\"isOpen.update(v => !v)\" [ngStyle]=\"triggerStyle()\">\r\n {{ formatted() || placeholder || (showSeconds ? 'HH:MM:SS' : 'HH:MM') }}\r\n </button>\r\n <div *ngIf=\"isOpen()\" role=\"dialog\" [ngStyle]=\"popoverStyle()\">\r\n <ul [ngStyle]=\"colStyle()\">\r\n <li *ngFor=\"let h of hours\" (click)=\"setHour(h)\" [ngStyle]=\"cellStyle(activeHour === h)\">{{ display(h) }}</li>\r\n </ul>\r\n <ul [ngStyle]=\"colStyle()\">\r\n <li *ngFor=\"let m of minutes\" (click)=\"setMinute(m)\" [ngStyle]=\"cellStyle(value?.minutes === m)\">{{ pad(m) }}</li>\r\n </ul>\r\n <ul *ngIf=\"showSeconds\" [ngStyle]=\"colStyle()\">\r\n <li *ngFor=\"let s of seconds\" (click)=\"setSecond(s)\" [ngStyle]=\"cellStyle(value?.seconds === s)\">{{ pad(s) }}</li>\r\n </ul>\r\n <div *ngIf=\"use12Hours\" style=\"display:flex;flex-direction:column;padding:4px;gap:4px;width:56px\">\r\n <button *ngFor=\"let p of ['AM','PM']\" type=\"button\" [ngStyle]=\"periodStyle(p)\" (click)=\"setPeriod(p)\">{{ p }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraTimePicker {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() value: ElvoraTimeValue | null = null;\r\n @Input() showSeconds = false;\r\n @Input() use12Hours = false;\r\n @Input() minuteStep = 1;\r\n @Input() placeholder?: string;\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<ElvoraTimeValue | null>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly pad = pad;\r\n\r\n protected get hours(): number[] {\r\n return Array.from({ length: this.use12Hours ? 12 : 24 }, (_, i) => (this.use12Hours ? i + 1 : i));\r\n }\r\n protected get minutes(): number[] {\r\n return Array.from({ length: Math.ceil(60 / this.minuteStep) }, (_, i) => i * this.minuteStep);\r\n }\r\n protected get seconds(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n protected get activeHour(): number | undefined {\r\n if (!this.value) return undefined;\r\n return this.use12Hours ? ((this.value.hours + 11) % 12) + 1 : this.value.hours;\r\n }\r\n\r\n protected display(h: number): string {\r\n return pad(h);\r\n }\r\n\r\n protected formatted = computed(() => formatTime(this.value, this.use12Hours, this.showSeconds));\r\n\r\n protected setHour(h: number) {\r\n let actual = h;\r\n if (this.use12Hours) {\r\n const isPM = (this.value?.hours ?? 0) >= 12;\r\n actual = (h % 12) + (isPM ? 12 : 0);\r\n }\r\n this.emit({ hours: actual, minutes: this.value?.minutes ?? 0, seconds: this.showSeconds ? this.value?.seconds ?? 0 : undefined });\r\n }\r\n\r\n protected setMinute(m: number) {\r\n this.emit({ hours: this.value?.hours ?? 0, minutes: m, seconds: this.showSeconds ? this.value?.seconds ?? 0 : undefined });\r\n }\r\n\r\n protected setSecond(s: number) {\r\n this.emit({ hours: this.value?.hours ?? 0, minutes: this.value?.minutes ?? 0, seconds: s });\r\n }\r\n\r\n protected setPeriod(p: string) {\r\n const base = this.value?.hours ?? 0;\r\n const next = p === 'PM' && base < 12 ? base + 12 : p === 'AM' && base >= 12 ? base - 12 : base;\r\n this.emit({ hours: next, minutes: this.value?.minutes ?? 0, seconds: this.showSeconds ? this.value?.seconds ?? 0 : undefined });\r\n }\r\n\r\n protected periodStyle(p: string): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const isPM = (this.value?.hours ?? 0) >= 12;\r\n const active = p === 'PM' ? isPM : !isPM;\r\n return {\r\n padding: '6px 10px',\r\n fontSize: '13px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: 'pointer',\r\n border: 'none',\r\n background: active ? t.colors.intent.primary.solid : 'transparent',\r\n color: active ? t.colors.intent.primary.solidFg : t.colors.fg,\r\n };\r\n }\r\n\r\n private emit(next: ElvoraTimeValue) {\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '8px 12px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${t.colors.border}`,\r\n background: t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n fontSize: '14px',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly popoverStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '6px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n display: 'flex',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly colStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n listStyle: 'none',\r\n margin: '0',\r\n padding: '4px',\r\n height: '168px',\r\n overflowY: 'auto',\r\n borderRight: `1px solid ${t.colors.border}`,\r\n width: '56px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected cellStyle(active: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n fontSize: '13px',\r\n textAlign: 'center',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: 'pointer',\r\n background: active ? t.colors.intent.primary.solid : 'transparent',\r\n color: active ? t.colors.intent.primary.solidFg : t.colors.fg,\r\n fontFamily: 'monospace',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraDateRange {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nconst pad = (n: number) => String(n).padStart(2, '0');\r\nconst defaultFormat = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\r\n\r\nfunction startOfMonth(d: Date) {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number) {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction buildMatrix(view: Date, weekStartsOn: number): Date[][] {\r\n const first = startOfMonth(view);\r\n const firstWeekday = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - firstWeekday);\r\n const weeks: Date[][] = [];\r\n for (let w = 0; w < 6; w++) {\r\n const row: Date[] = [];\r\n for (let d = 0; d < 7; d++) {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + w * 7 + d);\r\n row.push(day);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\nfunction dayKey(d: Date): number {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\r\n}\r\n\r\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return a.toDateString() === b.toDateString();\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-date-range-picker',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <button type=\"button\" [disabled]=\"isDisabled\" (click)=\"toggle()\" [ngStyle]=\"triggerStyle()\">\r\n <span>{{ value?.start ? format(value!.start!) : (placeholder?.start || 'Start') }}</span>\r\n <span style=\"margin:0 8px\">→</span>\r\n <span>{{ value?.end ? format(value!.end!) : (placeholder?.end || 'End') }}</span>\r\n </button>\r\n <div *ngIf=\"isOpen()\" role=\"dialog\" [ngStyle]=\"popoverStyle()\">\r\n <div *ngFor=\"let offset of [0,1]\" style=\"width:240px\">\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:6px\">\r\n <button *ngIf=\"offset===0\" type=\"button\" (click)=\"prev()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">‹</button>\r\n <span *ngIf=\"offset===1\"></span>\r\n <div style=\"font-size:14px;font-weight:500\">{{ monthLabel(offset) }}</div>\r\n <button *ngIf=\"offset===1\" type=\"button\" (click)=\"next()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">›</button>\r\n <span *ngIf=\"offset===0\"></span>\r\n </div>\r\n <div style=\"display:grid;grid-template-columns:repeat(7,1fr);gap:2px\">\r\n <div *ngFor=\"let wd of weekdays\" style=\"text-align:center;font-size:11px;padding:4px\">{{ wd }}</div>\r\n <button\r\n *ngFor=\"let d of flatMatrix(offset)\"\r\n type=\"button\"\r\n [ngStyle]=\"dayStyle(d, offset)\"\r\n (click)=\"pickDay(d)\"\r\n [disabled]=\"!isInRange(d)\"\r\n >{{ d.getDate() }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraDateRangePicker {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() value: ElvoraDateRange | null = null;\r\n @Input() min?: Date;\r\n @Input() max?: Date;\r\n @Input() isDisabled = false;\r\n @Input() isInvalid = false;\r\n @Input() weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0;\r\n @Input() format: (d: Date) => string = defaultFormat;\r\n @Input() placeholder?: { start?: string; end?: string };\r\n @Output() readonly valueChange = new EventEmitter<ElvoraDateRange>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly view = signal<Date>(this.value?.start ?? new Date());\r\n private pendingStart: Date | null = null;\r\n\r\n protected toggle() {\r\n this.isOpen.update((o) => !o);\r\n }\r\n\r\n protected prev() {\r\n this.view.update((v) => addMonths(v, -1));\r\n }\r\n protected next() {\r\n this.view.update((v) => addMonths(v, 1));\r\n }\r\n\r\n protected pickDay(d: Date) {\r\n if (!this.isInRange(d)) return;\r\n if (!this.pendingStart || (this.value?.start && this.value?.end)) {\r\n this.pendingStart = d;\r\n const next: ElvoraDateRange = { start: d, end: null };\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n return;\r\n }\r\n const start = this.pendingStart;\r\n const end = d;\r\n const next: ElvoraDateRange = dayKey(end) < dayKey(start) ? { start: end, end: start } : { start, end };\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n this.pendingStart = null;\r\n this.isOpen.set(false);\r\n }\r\n\r\n protected isInRange(d: Date): boolean {\r\n if (this.min && d < new Date(this.min.getFullYear(), this.min.getMonth(), this.min.getDate())) return false;\r\n if (this.max && d > new Date(this.max.getFullYear(), this.max.getMonth(), this.max.getDate())) return false;\r\n return true;\r\n }\r\n\r\n protected get weekdays(): string[] {\r\n const base = new Date(2024, 0, 7);\r\n const arr: string[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + ((i + this.weekStartsOn) % 7));\r\n arr.push(d.toLocaleString(undefined, { weekday: 'short' }));\r\n }\r\n return arr;\r\n }\r\n\r\n protected monthLabel(offset: number): string {\r\n return addMonths(this.view(), offset).toLocaleString(undefined, { month: 'long', year: 'numeric' });\r\n }\r\n\r\n protected flatMatrix(offset: number): Date[] {\r\n return buildMatrix(addMonths(this.view(), offset), this.weekStartsOn).flat();\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n padding: '8px 12px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${this.isInvalid ? t.colors.intent.danger.solid : t.colors.border}`,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n color: t.colors.fg,\r\n fontSize: '14px',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly popoverStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '6px',\r\n padding: '12px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n display: 'flex',\r\n gap: '16px',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected dayStyle(d: Date, offset: number): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const monthView = addMonths(this.view(), offset);\r\n const inMonth = d.getMonth() === monthView.getMonth();\r\n const isStart = isSameDay(d, this.value?.start ?? null);\r\n const isEnd = isSameDay(d, this.value?.end ?? null);\r\n const inRange =\r\n this.value?.start &&\r\n this.value?.end &&\r\n dayKey(d) > dayKey(this.value.start) &&\r\n dayKey(d) < dayKey(this.value.end);\r\n const isEndpoint = isStart || isEnd;\r\n const disabled = !this.isInRange(d);\r\n return {\r\n padding: '6px 0',\r\n fontSize: '13px',\r\n border: 'none',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n background: isEndpoint ? t.colors.intent.primary.solid : inRange ? t.colors.intent.primary.subtle : 'transparent',\r\n color: isEndpoint ? t.colors.intent.primary.solidFg : inMonth ? t.colors.fg : t.colors.fgSubtle,\r\n opacity: disabled ? '0.4' : '1',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraCascaderOption {\r\n value: string;\r\n label: string;\r\n children?: ElvoraCascaderOption[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction findPath(options: ElvoraCascaderOption[], value: string[]): ElvoraCascaderOption[] {\r\n const path: ElvoraCascaderOption[] = [];\r\n let level = options;\r\n for (const v of value) {\r\n const found = level.find((o) => o.value === v);\r\n if (!found) break;\r\n path.push(found);\r\n level = found.children ?? [];\r\n }\r\n return path;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-cascader',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block\">\r\n <button type=\"button\" [disabled]=\"isDisabled\" (click)=\"toggle()\" [ngStyle]=\"triggerStyle()\">\r\n <span style=\"flex:1;text-align:left\">{{ displayed() || placeholder || 'Please select' }}</span>\r\n <span style=\"margin-left:8px\">▾</span>\r\n </button>\r\n <div *ngIf=\"isOpen()\" [ngStyle]=\"listStyle()\">\r\n <ul *ngFor=\"let col of columns(); let i = index\" [ngStyle]=\"colStyle(i, columns().length)\">\r\n <li\r\n *ngFor=\"let opt of col\"\r\n (click)=\"onSelectAtLevel(i, opt)\"\r\n [ngStyle]=\"itemStyle(i, opt)\"\r\n >\r\n <span>{{ opt.label }}</span>\r\n <span *ngIf=\"opt.children?.length\" style=\"opacity:0.6\">›</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraCascader {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() options: ElvoraCascaderOption[] = [];\r\n @Input() value: string[] = [];\r\n @Input() placeholder?: string;\r\n @Input() displaySeparator = ' / ';\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<{ value: string[]; path: ElvoraCascaderOption[] }>();\r\n\r\n protected readonly isOpen = signal(false);\r\n private activePath = signal<string[]>(this.value);\r\n\r\n protected readonly columns = computed(() => {\r\n const cols: ElvoraCascaderOption[][] = [this.options];\r\n let level = this.options;\r\n for (const v of this.activePath()) {\r\n const found = level.find((o) => o.value === v);\r\n if (!found || !found.children?.length) break;\r\n cols.push(found.children);\r\n level = found.children;\r\n }\r\n return cols;\r\n });\r\n\r\n protected readonly displayed = computed(() =>\r\n this.value.length > 0 ? findPath(this.options, this.value).map((o) => o.label).join(this.displaySeparator) : '',\r\n );\r\n\r\n protected toggle() {\r\n this.isOpen.update((o) => !o);\r\n if (this.isOpen()) this.activePath.set(this.value);\r\n }\r\n\r\n protected onSelectAtLevel(level: number, opt: ElvoraCascaderOption) {\r\n if (opt.isDisabled) return;\r\n const nextPath = [...this.activePath().slice(0, level), opt.value];\r\n this.activePath.set(nextPath);\r\n if (!opt.children?.length) {\r\n this.value = nextPath;\r\n this.valueChange.emit({ value: nextPath, path: findPath(this.options, nextPath) });\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n padding: '8px 12px',\r\n minWidth: '220px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${t.colors.border}`,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n color: this.displayed() ? t.colors.fg : t.colors.fgMuted,\r\n fontSize: '14px',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '6px',\r\n display: 'flex',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n } as Record<string, string>;\r\n });\r\n\r\n protected colStyle(i: number, total: number): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n listStyle: 'none',\r\n margin: '0',\r\n padding: '4px',\r\n width: '160px',\r\n borderRight: i < total - 1 ? `1px solid ${t.colors.border}` : 'none',\r\n maxHeight: '240px',\r\n overflowY: 'auto',\r\n };\r\n }\r\n\r\n protected itemStyle(level: number, opt: ElvoraCascaderOption): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const isActive = this.activePath()[level] === opt.value;\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '6px 10px',\r\n fontSize: '13px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: opt.isDisabled ? 'not-allowed' : 'pointer',\r\n background: isActive ? t.colors.intent.primary.subtle : 'transparent',\r\n color: opt.isDisabled ? t.colors.fgSubtle : t.colors.fg,\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraTreeNode {\r\n value: string;\r\n label: string;\r\n children?: ElvoraTreeNode[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction findNode(nodes: ElvoraTreeNode[], v: string): ElvoraTreeNode | undefined {\r\n for (const n of nodes) {\r\n if (n.value === v) return n;\r\n if (n.children) {\r\n const f = findNode(n.children, v);\r\n if (f) return f;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\ninterface FlatNode {\r\n node: ElvoraTreeNode;\r\n depth: number;\r\n hasChildren: boolean;\r\n}\r\n\r\nfunction flatten(nodes: ElvoraTreeNode[], expanded: Set<string>, depth = 0, out: FlatNode[] = []): FlatNode[] {\r\n for (const n of nodes) {\r\n out.push({ node: n, depth, hasChildren: !!n.children?.length });\r\n if (n.children?.length && expanded.has(n.value)) flatten(n.children, expanded, depth + 1, out);\r\n }\r\n return out;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-tree-select',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block;min-width:220px\">\r\n <button type=\"button\" [disabled]=\"isDisabled\" (click)=\"toggle()\" [ngStyle]=\"triggerStyle()\">\r\n <span style=\"flex:1;text-align:left\">{{ displayLabel() || placeholder || 'Please select' }}</span>\r\n <span style=\"margin-left:8px\">▾</span>\r\n </button>\r\n <div *ngIf=\"isOpen()\" role=\"tree\" [ngStyle]=\"listStyle()\">\r\n <div *ngFor=\"let f of flat()\" [ngStyle]=\"rowStyle(f)\" (click)=\"onSelect(f.node)\">\r\n <button\r\n *ngIf=\"f.hasChildren\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n (click)=\"toggleExpand($event, f.node.value)\"\r\n [ngStyle]=\"caretStyle()\"\r\n >{{ expanded().has(f.node.value) ? '▾' : '▸' }}</button>\r\n <span *ngIf=\"!f.hasChildren\" style=\"width:16px\"></span>\r\n <span *ngIf=\"multiple\" [ngStyle]=\"checkStyle(f.node.value)\"></span>\r\n {{ f.node.label }}\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraTreeSelect {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n @Input() options: ElvoraTreeNode[] = [];\r\n @Input() value: string | string[] = '';\r\n @Input() multiple = false;\r\n @Input() placeholder?: string;\r\n @Input() isDisabled = false;\r\n @Input() defaultExpanded: string[] = [];\r\n @Output() readonly valueChange = new EventEmitter<string | string[]>();\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly expanded = signal<Set<string>>(new Set(this.defaultExpanded));\r\n\r\n protected readonly flat = computed(() => flatten(this.options, this.expanded()));\r\n\r\n protected readonly displayLabel = computed(() => {\r\n if (this.multiple) {\r\n const arr = Array.isArray(this.value) ? this.value : [];\r\n return arr.map((v) => findNode(this.options, v)?.label).filter(Boolean).join(', ');\r\n }\r\n return typeof this.value === 'string' && this.value ? findNode(this.options, this.value)?.label ?? '' : '';\r\n });\r\n\r\n protected toggle() {\r\n this.isOpen.update((o) => !o);\r\n }\r\n\r\n protected toggleExpand(e: Event, v: string) {\r\n e.stopPropagation();\r\n const next = new Set(this.expanded());\r\n if (next.has(v)) next.delete(v);\r\n else next.add(v);\r\n this.expanded.set(next);\r\n }\r\n\r\n protected onSelect(n: ElvoraTreeNode) {\r\n if (n.isDisabled) return;\r\n if (this.multiple) {\r\n const arr = Array.isArray(this.value) ? [...this.value] : [];\r\n const idx = arr.indexOf(n.value);\r\n if (idx >= 0) arr.splice(idx, 1);\r\n else arr.push(n.value);\r\n this.value = arr;\r\n this.valueChange.emit(arr);\r\n } else {\r\n this.value = n.value;\r\n this.valueChange.emit(n.value);\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n protected isSelected(v: string): boolean {\r\n if (this.multiple) return Array.isArray(this.value) && this.value.includes(v);\r\n return this.value === v;\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n protected onDocMouse(e: MouseEvent) {\r\n if (!this.host.nativeElement.contains(e.target as Node)) this.isOpen.set(false);\r\n }\r\n\r\n protected readonly triggerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n width: '100%',\r\n padding: '8px 12px',\r\n borderRadius: `${t.radii.md}px`,\r\n border: `1px solid ${t.colors.border}`,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n fontSize: '14px',\r\n color: this.displayLabel() ? t.colors.fg : t.colors.fgMuted,\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n right: '0',\r\n marginTop: '6px',\r\n padding: '4px',\r\n maxHeight: '280px',\r\n overflowY: 'auto',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.popover),\r\n } as Record<string, string>;\r\n });\r\n\r\n protected rowStyle(f: FlatNode): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const sel = this.isSelected(f.node.value);\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n padding: '4px 6px',\r\n paddingLeft: `${6 + f.depth * 14}px`,\r\n fontSize: '13px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: f.node.isDisabled ? 'not-allowed' : 'pointer',\r\n background: sel ? t.colors.intent.primary.subtle : 'transparent',\r\n color: f.node.isDisabled ? t.colors.fgSubtle : t.colors.fg,\r\n };\r\n }\r\n\r\n protected caretStyle(): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n width: '16px',\r\n height: '16px',\r\n border: 'none',\r\n background: 'transparent',\r\n cursor: 'pointer',\r\n color: t.colors.fgMuted,\r\n };\r\n }\r\n\r\n protected checkStyle(v: string): Record<string, string> {\r\n const t = this.themeService.theme();\r\n const sel = this.isSelected(v);\r\n return {\r\n display: 'inline-block',\r\n width: '14px',\r\n height: '14px',\r\n borderRadius: `${t.radii.sm}px`,\r\n border: `1px solid ${t.colors.border}`,\r\n background: sel ? t.colors.intent.primary.solid : 'transparent',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraMentionItem {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-mentions',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"position:relative;display:inline-block;width:100%\">\r\n <textarea\r\n #textarea\r\n [value]=\"value\"\r\n [disabled]=\"isDisabled\"\r\n [ngStyle]=\"textareaStyle()\"\r\n (input)=\"onInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n ></textarea>\r\n <ul *ngIf=\"active() && suggestions().length > 0\" [ngStyle]=\"listStyle()\">\r\n <li\r\n *ngFor=\"let item of suggestions(); let i = index\"\r\n (mousedown)=\"$event.preventDefault(); insert(item)\"\r\n (mouseenter)=\"highlight.set(i)\"\r\n [ngStyle]=\"itemStyle(i === highlight())\"\r\n >\r\n {{ item.label ?? item.value }}\r\n </li>\r\n </ul>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraMentions {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n @ViewChild('textarea') private textarea?: ElementRef<HTMLTextAreaElement>;\r\n\r\n @Input() value = '';\r\n @Input() options: ElvoraMentionItem[] = [];\r\n @Input() trigger = '@';\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<string>();\r\n\r\n protected readonly active = signal(false);\r\n protected readonly highlight = signal(0);\r\n protected readonly query = signal('');\r\n private start = -1;\r\n\r\n protected readonly suggestions = computed(() =>\r\n this.active()\r\n ? this.options.filter((o) => o.value.toLowerCase().includes(this.query().toLowerCase())).slice(0, 8)\r\n : [],\r\n );\r\n\r\n protected onInput(e: Event) {\r\n const next = (e.target as HTMLTextAreaElement).value;\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n const caret = this.textarea?.nativeElement.selectionStart ?? next.length;\r\n let i = caret - 1;\r\n while (i >= 0 && next[i] !== this.trigger && !/\\s/.test(next[i]!)) {\r\n i--;\r\n }\r\n if (i >= 0 && next[i] === this.trigger) {\r\n this.start = i;\r\n this.query.set(next.slice(i + 1, caret));\r\n this.active.set(true);\r\n this.highlight.set(0);\r\n } else {\r\n this.active.set(false);\r\n }\r\n }\r\n\r\n protected onKeyDown(e: KeyboardEvent) {\r\n if (!this.active()) return;\r\n const list = this.suggestions();\r\n if (list.length === 0) return;\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.highlight.update((h) => (h + 1) % list.length);\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.highlight.update((h) => (h === 0 ? list.length - 1 : h - 1));\r\n } else if (e.key === 'Enter' || e.key === 'Tab') {\r\n const item = list[this.highlight()];\r\n if (item) {\r\n e.preventDefault();\r\n this.insert(item);\r\n }\r\n } else if (e.key === 'Escape') {\r\n this.active.set(false);\r\n }\r\n }\r\n\r\n protected insert(item: ElvoraMentionItem) {\r\n const ta = this.textarea?.nativeElement;\r\n if (!ta || this.start < 0) return;\r\n const text = this.value;\r\n const caret = ta.selectionStart ?? text.length;\r\n const before = text.slice(0, this.start);\r\n const after = text.slice(caret);\r\n const insertion = `${this.trigger}${item.value} `;\r\n const next = `${before}${insertion}${after}`;\r\n this.value = next;\r\n this.valueChange.emit(next);\r\n this.active.set(false);\r\n setTimeout(() => {\r\n const c = before.length + insertion.length;\r\n ta.focus();\r\n ta.setSelectionRange(c, c);\r\n });\r\n }\r\n\r\n protected readonly textareaStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n width: '100%',\r\n minHeight: '84px',\r\n padding: '8px 12px',\r\n fontSize: '14px',\r\n color: t.colors.fg,\r\n background: this.isDisabled ? t.colors.intent.neutral.subtle : t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n outline: 'none',\r\n resize: 'vertical',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n position: 'absolute',\r\n top: '100%',\r\n left: '0',\r\n marginTop: '4px',\r\n listStyle: 'none',\r\n padding: '4px',\r\n maxHeight: '220px',\r\n overflowY: 'auto',\r\n minWidth: '180px',\r\n background: t.colors.surfaceElevated,\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n boxShadow: t.shadows.lg,\r\n zIndex: String(t.tokens.zIndex.dropdown),\r\n } as Record<string, string>;\r\n });\r\n\r\n protected itemStyle(active: boolean): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n fontSize: '14px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: 'pointer',\r\n background: active ? t.colors.intent.neutral.subtle : 'transparent',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraTransferItem {\r\n key: string;\r\n label: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-transfer',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div style=\"display:flex;gap:12px;align-items:stretch\">\r\n <div [ngStyle]=\"listStyle()\">\r\n <div [ngStyle]=\"headerStyle()\">\r\n <input type=\"checkbox\" [checked]=\"allCheckedLeft()\" (change)=\"toggleAllLeft()\" [disabled]=\"isDisabled\" />\r\n <span style=\"flex:1;font-weight:500\">{{ titles?.[0] ?? 'Source' }}</span>\r\n <span style=\"font-size:12px;opacity:0.7\">{{ leftSelected().size }}/{{ leftItems().length }}</span>\r\n </div>\r\n <div *ngIf=\"showSearch\" [ngStyle]=\"searchStyle()\">\r\n <input type=\"text\" placeholder=\"Search\" [value]=\"leftQuery()\" (input)=\"leftQuery.set($any($event.target).value)\" [ngStyle]=\"searchInputStyle()\" />\r\n </div>\r\n <ul style=\"list-style:none;margin:0;padding:4px;flex:1;overflow-y:auto\">\r\n <li *ngFor=\"let it of filteredLeft()\" (click)=\"toggleLeft(it)\" [ngStyle]=\"itemStyle(leftSelected().has(it.key), it)\">\r\n <input type=\"checkbox\" [checked]=\"leftSelected().has(it.key)\" (click)=\"$event.stopPropagation()\" (change)=\"toggleLeft(it)\" [disabled]=\"it.isDisabled || isDisabled\" />\r\n <span style=\"flex:1\">{{ it.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n <div style=\"display:flex;flex-direction:column;justify-content:center;gap:8px\">\r\n <button type=\"button\" (click)=\"moveRight()\" [disabled]=\"isDisabled || leftSelected().size === 0\" [ngStyle]=\"arrowStyle()\">›</button>\r\n <button type=\"button\" (click)=\"moveLeft()\" [disabled]=\"isDisabled || rightSelected().size === 0\" [ngStyle]=\"arrowStyle()\">‹</button>\r\n </div>\r\n <div [ngStyle]=\"listStyle()\">\r\n <div [ngStyle]=\"headerStyle()\">\r\n <input type=\"checkbox\" [checked]=\"allCheckedRight()\" (change)=\"toggleAllRight()\" [disabled]=\"isDisabled\" />\r\n <span style=\"flex:1;font-weight:500\">{{ titles?.[1] ?? 'Target' }}</span>\r\n <span style=\"font-size:12px;opacity:0.7\">{{ rightSelected().size }}/{{ rightItems().length }}</span>\r\n </div>\r\n <div *ngIf=\"showSearch\" [ngStyle]=\"searchStyle()\">\r\n <input type=\"text\" placeholder=\"Search\" [value]=\"rightQuery()\" (input)=\"rightQuery.set($any($event.target).value)\" [ngStyle]=\"searchInputStyle()\" />\r\n </div>\r\n <ul style=\"list-style:none;margin:0;padding:4px;flex:1;overflow-y:auto\">\r\n <li *ngFor=\"let it of filteredRight()\" (click)=\"toggleRight(it)\" [ngStyle]=\"itemStyle(rightSelected().has(it.key), it)\">\r\n <input type=\"checkbox\" [checked]=\"rightSelected().has(it.key)\" (click)=\"$event.stopPropagation()\" (change)=\"toggleRight(it)\" [disabled]=\"it.isDisabled || isDisabled\" />\r\n <span style=\"flex:1\">{{ it.label }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraTransfer {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() dataSource: ElvoraTransferItem[] = [];\r\n @Input() value: string[] = [];\r\n @Input() titles?: [string, string];\r\n @Input() showSearch = false;\r\n @Input() isDisabled = false;\r\n @Output() readonly valueChange = new EventEmitter<string[]>();\r\n\r\n protected readonly leftSelected = signal(new Set<string>());\r\n protected readonly rightSelected = signal(new Set<string>());\r\n protected readonly leftQuery = signal('');\r\n protected readonly rightQuery = signal('');\r\n\r\n protected readonly leftItems = computed(() => this.dataSource.filter((it) => !this.value.includes(it.key)));\r\n protected readonly rightItems = computed(() => this.dataSource.filter((it) => this.value.includes(it.key)));\r\n\r\n protected readonly filteredLeft = computed(() => {\r\n const q = this.leftQuery().toLowerCase();\r\n return q ? this.leftItems().filter((it) => it.label.toLowerCase().includes(q)) : this.leftItems();\r\n });\r\n\r\n protected readonly filteredRight = computed(() => {\r\n const q = this.rightQuery().toLowerCase();\r\n return q ? this.rightItems().filter((it) => it.label.toLowerCase().includes(q)) : this.rightItems();\r\n });\r\n\r\n protected readonly allCheckedLeft = computed(() => {\r\n const items = this.filteredLeft();\r\n return items.length > 0 && items.every((it) => this.leftSelected().has(it.key));\r\n });\r\n\r\n protected readonly allCheckedRight = computed(() => {\r\n const items = this.filteredRight();\r\n return items.length > 0 && items.every((it) => this.rightSelected().has(it.key));\r\n });\r\n\r\n protected toggleLeft(it: ElvoraTransferItem) {\r\n if (it.isDisabled || this.isDisabled) return;\r\n const next = new Set(this.leftSelected());\r\n if (next.has(it.key)) next.delete(it.key);\r\n else next.add(it.key);\r\n this.leftSelected.set(next);\r\n }\r\n\r\n protected toggleRight(it: ElvoraTransferItem) {\r\n if (it.isDisabled || this.isDisabled) return;\r\n const next = new Set(this.rightSelected());\r\n if (next.has(it.key)) next.delete(it.key);\r\n else next.add(it.key);\r\n this.rightSelected.set(next);\r\n }\r\n\r\n protected toggleAllLeft() {\r\n const items = this.filteredLeft();\r\n const next = new Set(this.leftSelected());\r\n if (this.allCheckedLeft()) items.forEach((it) => next.delete(it.key));\r\n else items.forEach((it) => !it.isDisabled && next.add(it.key));\r\n this.leftSelected.set(next);\r\n }\r\n\r\n protected toggleAllRight() {\r\n const items = this.filteredRight();\r\n const next = new Set(this.rightSelected());\r\n if (this.allCheckedRight()) items.forEach((it) => next.delete(it.key));\r\n else items.forEach((it) => !it.isDisabled && next.add(it.key));\r\n this.rightSelected.set(next);\r\n }\r\n\r\n protected moveRight() {\r\n const keys = this.leftItems().filter((it) => this.leftSelected().has(it.key) && !it.isDisabled).map((it) => it.key);\r\n if (keys.length === 0) return;\r\n this.value = [...this.value, ...keys];\r\n this.valueChange.emit(this.value);\r\n this.leftSelected.set(new Set());\r\n }\r\n\r\n protected moveLeft() {\r\n const keys = new Set(this.value);\r\n this.rightItems().forEach((it) => {\r\n if (this.rightSelected().has(it.key) && !it.isDisabled) keys.delete(it.key);\r\n });\r\n this.value = Array.from(keys);\r\n this.valueChange.emit(this.value);\r\n this.rightSelected.set(new Set());\r\n }\r\n\r\n protected readonly listStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n width: '220px',\r\n maxHeight: '320px',\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.md}px`,\r\n background: t.colors.surfaceElevated,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly headerStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '8px 10px',\r\n borderBottom: `1px solid ${t.colors.border}`,\r\n } as Record<string, string>;\r\n });\r\n\r\n protected readonly searchStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return { padding: '8px', borderBottom: `1px solid ${t.colors.border}` } as Record<string, string>;\r\n });\r\n\r\n protected readonly searchInputStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n width: '100%',\r\n padding: '6px 8px',\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.sm}px`,\r\n fontSize: '13px',\r\n outline: 'none',\r\n } as Record<string, string>;\r\n });\r\n\r\n protected itemStyle(checked: boolean, it: ElvoraTransferItem): Record<string, string> {\r\n const t = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '6px 8px',\r\n fontSize: '13px',\r\n borderRadius: `${t.radii.sm}px`,\r\n cursor: it.isDisabled || this.isDisabled ? 'not-allowed' : 'pointer',\r\n color: it.isDisabled ? t.colors.fgSubtle : t.colors.fg,\r\n background: checked ? t.colors.intent.primary.subtle : 'transparent',\r\n };\r\n }\r\n\r\n protected readonly arrowStyle = computed(() => {\r\n const t = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n border: `1px solid ${t.colors.border}`,\r\n borderRadius: `${t.radii.sm}px`,\r\n background: t.colors.surfaceElevated,\r\n cursor: 'pointer',\r\n color: t.colors.fg,\r\n } as Record<string, string>;\r\n });\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport type ElvoraSortOrder = 'asc' | 'desc' | null;\r\n\r\nexport interface ElvoraTableColumn<Row = Record<string, unknown>> {\r\n key: string;\r\n title: string;\r\n dataIndex?: keyof Row | string;\r\n sortable?: boolean;\r\n sorter?: (a: Row, b: Row) => number;\r\n width?: number | string;\r\n align?: 'left' | 'center' | 'right';\r\n}\r\n\r\nfunction defaultCompare(a: unknown, b: unknown): number {\r\n if (a == null && b == null) return 0;\r\n if (a == null) return -1;\r\n if (b == null) return 1;\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n return String(a).localeCompare(String(b));\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-table',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, NgTemplateOutlet],\r\n template: `\r\n <table [ngStyle]=\"tableStyle()\">\r\n <thead [ngStyle]=\"theadStyle()\">\r\n <tr>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n scope=\"col\"\r\n [ngStyle]=\"thStyle(col)\"\r\n (click)=\"col.sortable ? onSort(col) : null\"\r\n >\r\n <span style=\"display:inline-flex;align-items:center;gap:6px\">\r\n {{ col.title }}\r\n <span *ngIf=\"col.sortable\" [style.color]=\"sortKey() === col.key ? primary() : muted()\">{{\r\n sortKey() === col.key ? (sortOrder() === 'asc' ? '↑' : sortOrder() === 'desc' ? '↓' : '⇅') : '⇅'\r\n }}</span>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let row of sorted(); let rowIndex = index\"\r\n [ngStyle]=\"rowStyle(rowIndex)\"\r\n (click)=\"rowClick.emit({ row, index: rowIndex })\"\r\n >\r\n <td *ngFor=\"let col of columns\" [ngStyle]=\"tdStyle(col)\">\r\n {{ cell(row, col) }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n `,\r\n})\r\nexport class ElvoraTable<Row extends Record<string, unknown> = Record<string, unknown>> {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() columns: ElvoraTableColumn<Row>[] = [];\r\n @Input() set dataSource(value: Row[]) {\r\n this._data.set(value);\r\n }\r\n get dataSource(): Row[] {\r\n return this._data();\r\n }\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n @Input() bordered = false;\r\n @Input() striped = false;\r\n @Output() readonly rowClick = new EventEmitter<{ row: Row; index: number }>();\r\n\r\n protected readonly sortKey = signal<string | null>(null);\r\n protected readonly sortOrder = signal<ElvoraSortOrder>(null);\r\n private readonly _data = signal<Row[]>([]);\r\n\r\n protected readonly sorted = computed<Row[]>(() => {\r\n const data = this._data();\r\n const key = this.sortKey();\r\n const order = this.sortOrder();\r\n if (!key || !order) return data;\r\n const col = this.columns.find((c) => c.key === key);\r\n if (!col || !col.sortable) return data;\r\n const arr = [...data];\r\n const compare = col.sorter\r\n ? col.sorter\r\n : (a: Row, b: Row) => defaultCompare(a[col.dataIndex as keyof Row], b[col.dataIndex as keyof Row]);\r\n arr.sort((a, b) => (order === 'asc' ? compare(a, b) : -compare(a, b)));\r\n return arr;\r\n });\r\n\r\n protected primary(): string {\r\n return this.themeService.theme().colors.intent.primary.solid;\r\n }\r\n\r\n protected muted(): string {\r\n return this.themeService.theme().colors.fgSubtle;\r\n }\r\n\r\n protected onSort(col: ElvoraTableColumn<Row>): void {\r\n if (this.sortKey() !== col.key) {\r\n this.sortKey.set(col.key);\r\n this.sortOrder.set('asc');\r\n return;\r\n }\r\n const order = this.sortOrder();\r\n if (order === 'asc') this.sortOrder.set('desc');\r\n else if (order === 'desc') {\r\n this.sortKey.set(null);\r\n this.sortOrder.set(null);\r\n } else this.sortOrder.set('asc');\r\n }\r\n\r\n protected cell(row: Row, col: ElvoraTableColumn<Row>): unknown {\r\n if (col.dataIndex == null) return '';\r\n return (row as Record<string, unknown>)[col.dataIndex as string];\r\n }\r\n\r\n protected tableStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n width: '100%',\r\n borderCollapse: 'separate',\r\n borderSpacing: 0,\r\n fontSize: '14px',\r\n color: theme.colors.fg,\r\n background: theme.colors.surfaceElevated,\r\n border: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n borderRadius: '8px',\r\n overflow: 'hidden',\r\n };\r\n }\r\n\r\n protected theadStyle() {\r\n return { background: this.themeService.theme().colors.intent.neutral.subtle };\r\n }\r\n\r\n protected thStyle(col: ElvoraTableColumn<Row>) {\r\n const padding = this.size === 'sm' ? '6px 10px' : this.size === 'lg' ? '14px 18px' : '10px 14px';\r\n return {\r\n textAlign: col.align ?? 'left',\r\n padding,\r\n fontWeight: '600',\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n width: col.width,\r\n cursor: col.sortable ? 'pointer' : undefined,\r\n userSelect: 'none',\r\n };\r\n }\r\n\r\n protected tdStyle(col: ElvoraTableColumn<Row>) {\r\n const padding = this.size === 'sm' ? '6px 10px' : this.size === 'lg' ? '14px 18px' : '10px 14px';\r\n return {\r\n padding,\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n textAlign: col.align ?? 'left',\r\n };\r\n }\r\n\r\n protected rowStyle(rowIndex: number) {\r\n return {\r\n background: this.striped && rowIndex % 2 === 1 ? this.themeService.theme().colors.intent.neutral.subtle : undefined,\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraTreeNode {\r\n key: string;\r\n label: string;\r\n children?: ElvoraTreeNode[];\r\n isDisabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-tree',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <ul role=\"tree\" style=\"list-style:none;margin:0;padding:0\">\r\n <ng-container *ngFor=\"let node of treeData\">\r\n <ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: node, depth: 0 }\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n <ng-template #nodeTpl let-node let-depth=\"depth\">\r\n <li role=\"treeitem\" [attr.aria-selected]=\"selected().has(node.key)\">\r\n <div [ngStyle]=\"rowStyle(node, depth)\" (click)=\"onClick(node)\">\r\n <span style=\"display:inline-flex;width:14px\">{{\r\n node.children?.length ? (expanded().has(node.key) ? '▾' : '▸') : ''\r\n }}</span>\r\n <span>{{ node.label }}</span>\r\n </div>\r\n <ul *ngIf=\"node.children?.length && expanded().has(node.key)\" role=\"group\" style=\"list-style:none;margin:0;padding:0\">\r\n <ng-container *ngFor=\"let child of node.children\">\r\n <ng-container *ngTemplateOutlet=\"nodeTpl; context: { $implicit: child, depth: depth + 1 }\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n `,\r\n})\r\nexport class ElvoraTree {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() treeData: ElvoraTreeNode[] = [];\r\n @Input() set expandedKeys(value: string[]) {\r\n this.expanded.set(new Set(value));\r\n }\r\n @Input() set selectedKeys(value: string[]) {\r\n this.selected.set(new Set(value));\r\n }\r\n @Input() multiple = false;\r\n\r\n @Output() readonly expandedKeysChange = new EventEmitter<string[]>();\r\n @Output() readonly selectedKeysChange = new EventEmitter<string[]>();\r\n @Output() readonly nodeSelect = new EventEmitter<ElvoraTreeNode>();\r\n\r\n protected readonly expanded = signal<Set<string>>(new Set());\r\n protected readonly selected = signal<Set<string>>(new Set());\r\n\r\n protected onClick(node: ElvoraTreeNode): void {\r\n if (node.isDisabled) return;\r\n if (node.children?.length) {\r\n const next = new Set(this.expanded());\r\n if (next.has(node.key)) next.delete(node.key);\r\n else next.add(node.key);\r\n this.expanded.set(next);\r\n this.expandedKeysChange.emit(Array.from(next));\r\n }\r\n const sel = new Set(this.selected());\r\n if (this.multiple) {\r\n if (sel.has(node.key)) sel.delete(node.key);\r\n else sel.add(node.key);\r\n } else {\r\n sel.clear();\r\n sel.add(node.key);\r\n }\r\n this.selected.set(sel);\r\n this.selectedKeysChange.emit(Array.from(sel));\r\n this.nodeSelect.emit(node);\r\n }\r\n\r\n protected rowStyle(node: ElvoraTreeNode, depth: number) {\r\n const theme = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n padding: '4px 6px',\r\n marginLeft: `${depth * 16}px`,\r\n borderRadius: '4px',\r\n background: this.selected().has(node.key) ? theme.colors.intent.primary.subtle : undefined,\r\n color: node.isDisabled ? theme.colors.fgSubtle : theme.colors.fg,\r\n cursor: node.isDisabled ? 'not-allowed' : 'pointer',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n Input,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-list',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, NgTemplateOutlet],\r\n template: `\r\n <div role=\"list\" [ngStyle]=\"containerStyle()\">\r\n <div *ngIf=\"header\" [ngStyle]=\"headerStyle()\">{{ header }}</div>\r\n <ng-container *ngIf=\"dataSource.length === 0 && emptyMessage; else listTpl\">\r\n <div [ngStyle]=\"paddingStyle()\">{{ emptyMessage }}</div>\r\n </ng-container>\r\n <ng-template #listTpl>\r\n <div\r\n *ngFor=\"let item of dataSource; let i = index; let last = last\"\r\n role=\"listitem\"\r\n [ngStyle]=\"rowStyle(last)\"\r\n >\r\n <ng-container\r\n *ngIf=\"itemTemplate; else stringItem\"\r\n [ngTemplateOutlet]=\"itemTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\r\n ></ng-container>\r\n <ng-template #stringItem>{{ item }}</ng-template>\r\n </div>\r\n </ng-template>\r\n <div *ngIf=\"footer\" [ngStyle]=\"footerStyle()\">{{ footer }}</div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraList<T = unknown> {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() dataSource: T[] = [];\r\n @Input() header?: string;\r\n @Input() footer?: string;\r\n @Input() bordered = false;\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n @Input() divided = true;\r\n @Input() emptyMessage?: string;\r\n\r\n @ContentChild('item', { static: false }) itemTemplate?: TemplateRef<{ $implicit: T; index: number }>;\r\n\r\n private padding(): string {\r\n return this.size === 'sm' ? '8px 12px' : this.size === 'lg' ? '16px 20px' : '12px 16px';\r\n }\r\n\r\n protected containerStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n border: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n borderRadius: this.bordered ? '8px' : undefined,\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n overflow: 'hidden',\r\n };\r\n }\r\n\r\n protected headerStyle() {\r\n return {\r\n padding: this.padding(),\r\n fontWeight: '600',\r\n borderBottom: `1px solid ${this.themeService.theme().colors.border}`,\r\n };\r\n }\r\n\r\n protected footerStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: this.padding(),\r\n borderTop: `1px solid ${theme.colors.border}`,\r\n color: theme.colors.fgSubtle,\r\n };\r\n }\r\n\r\n protected paddingStyle() {\r\n return { padding: this.padding() };\r\n }\r\n\r\n protected rowStyle(isLast: boolean) {\r\n return {\r\n padding: this.padding(),\r\n borderBottom: this.divided && !isLast ? `1px solid ${this.themeService.theme().colors.border}` : undefined,\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraDescriptionItem {\r\n key: string;\r\n label: string;\r\n value: string;\r\n span?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-descriptions',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <div *ngIf=\"title\" style=\"font-weight:600;margin-bottom:8px\">{{ title }}</div>\r\n <div [ngStyle]=\"gridStyle()\">\r\n <div *ngFor=\"let item of items\" [ngStyle]=\"itemStyle(item)\">\r\n <ng-container *ngIf=\"layout === 'horizontal'; else verticalTpl\">\r\n <div [ngStyle]=\"labelStyle()\">{{ item.label }}</div>\r\n <div [ngStyle]=\"valueStyle()\">{{ item.value }}</div>\r\n </ng-container>\r\n <ng-template #verticalTpl>\r\n <div [ngStyle]=\"verticalLabelStyle()\">{{ item.label }}</div>\r\n <div>{{ item.value }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraDescriptions {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: ElvoraDescriptionItem[] = [];\r\n @Input() title?: string;\r\n @Input() columns = 3;\r\n @Input() layout: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() bordered = false;\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n private padding(): string {\r\n return this.size === 'sm' ? '6px 10px' : this.size === 'lg' ? '14px 18px' : '10px 14px';\r\n }\r\n\r\n protected rootStyle() {\r\n return { color: this.themeService.theme().colors.fg };\r\n }\r\n\r\n protected gridStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: `repeat(${this.columns}, minmax(0, 1fr))`,\r\n border: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n borderRadius: this.bordered ? '8px' : undefined,\r\n overflow: 'hidden',\r\n };\r\n }\r\n\r\n protected itemStyle(item: ElvoraDescriptionItem) {\r\n const theme = this.themeService.theme();\r\n const span = Math.min(item.span ?? 1, this.columns);\r\n if (this.layout === 'horizontal') {\r\n return {\r\n gridColumn: `span ${span}`,\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 1fr',\r\n borderTop: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n };\r\n }\r\n return {\r\n gridColumn: `span ${span}`,\r\n padding: this.padding(),\r\n borderTop: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n borderRight: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n };\r\n }\r\n\r\n protected labelStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: this.padding(),\r\n background: this.bordered ? theme.colors.intent.neutral.subtle : undefined,\r\n fontWeight: '500',\r\n borderRight: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n };\r\n }\r\n\r\n protected valueStyle() {\r\n return { padding: this.padding() };\r\n }\r\n\r\n protected verticalLabelStyle() {\r\n return { fontWeight: '500', color: this.themeService.theme().colors.fgSubtle, marginBottom: '4px' };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nfunction startOfMonth(d: Date) {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number) {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction buildMatrix(view: Date, weekStartsOn: number): Date[] {\r\n const first = startOfMonth(view);\r\n const firstWeekday = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - firstWeekday);\r\n const days: Date[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + i);\r\n days.push(day);\r\n }\r\n return days;\r\n}\r\n\r\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return a.toDateString() === b.toDateString();\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-calendar',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:12px\">\r\n <button type=\"button\" (click)=\"prev()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">‹</button>\r\n <div style=\"font-weight:600\">{{ monthLabel() }}</div>\r\n <button type=\"button\" (click)=\"next()\" style=\"border:none;background:transparent;cursor:pointer;font-size:16px\">›</button>\r\n </div>\r\n <div style=\"display:grid;grid-template-columns:repeat(7,1fr);gap:2px\">\r\n <div *ngFor=\"let wd of weekdays\" style=\"text-align:center;font-size:12px;padding:6px;font-weight:500\">{{ wd }}</div>\r\n <button\r\n *ngFor=\"let d of matrix()\"\r\n type=\"button\"\r\n [ngStyle]=\"dayStyle(d)\"\r\n (click)=\"pick(d)\"\r\n >{{ d.getDate() }}</button>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraCalendar {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value: Date | null = null;\r\n @Input() weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0;\r\n @Input() locale?: string;\r\n @Output() readonly valueChange = new EventEmitter<Date>();\r\n\r\n protected readonly view = signal<Date>(startOfMonth(new Date()));\r\n protected readonly weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n\r\n protected readonly matrix = computed(() => buildMatrix(this.view(), this.weekStartsOn));\r\n protected readonly monthLabel = computed(() =>\r\n this.view().toLocaleDateString(this.locale, { month: 'long', year: 'numeric' }),\r\n );\r\n\r\n protected rootStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n borderRadius: '8px',\r\n border: `1px solid ${theme.colors.border}`,\r\n padding: '16px',\r\n minWidth: '280px',\r\n display: 'inline-block',\r\n };\r\n }\r\n\r\n protected dayStyle(d: Date) {\r\n const theme = this.themeService.theme();\r\n const selected = isSameDay(d, this.value);\r\n const today = isSameDay(d, new Date());\r\n const inMonth = d.getMonth() === this.view().getMonth();\r\n return {\r\n minHeight: '36px',\r\n padding: '4px 6px',\r\n border: 'none',\r\n borderRadius: '4px',\r\n cursor: 'pointer',\r\n background: selected\r\n ? theme.colors.intent.primary.solid\r\n : today\r\n ? theme.colors.intent.primary.subtle\r\n : 'transparent',\r\n color: selected\r\n ? theme.colors.intent.primary.solidFg\r\n : !inMonth\r\n ? theme.colors.fgSubtle\r\n : theme.colors.fg,\r\n };\r\n }\r\n\r\n protected prev(): void {\r\n this.view.set(addMonths(this.view(), -1));\r\n }\r\n\r\n protected next(): void {\r\n this.view.set(addMonths(this.view(), 1));\r\n }\r\n\r\n protected pick(d: Date): void {\r\n this.value = d;\r\n this.valueChange.emit(d);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-statistic',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <div *ngIf=\"title\" [ngStyle]=\"titleStyle()\">{{ title }}</div>\r\n <div [ngStyle]=\"valueRowStyle()\">\r\n <span *ngIf=\"prefix\" style=\"font-size:16px\">{{ prefix }}</span>\r\n <span>{{ formatted() }}</span>\r\n <span *ngIf=\"suffix\" style=\"font-size:16px\">{{ suffix }}</span>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraStatistic {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() title?: string;\r\n @Input() value: number | string = 0;\r\n @Input() precision?: number;\r\n @Input() prefix?: string;\r\n @Input() suffix?: string;\r\n @Input() groupSeparator = true;\r\n @Input() tone: 'default' | 'success' | 'danger' | 'warning' | 'primary' = 'default';\r\n\r\n protected formatted(): string {\r\n if (typeof this.value === 'string') return this.value;\r\n if (typeof this.precision === 'number') {\r\n return this.groupSeparator\r\n ? this.value.toLocaleString(undefined, { minimumFractionDigits: this.precision, maximumFractionDigits: this.precision })\r\n : this.value.toFixed(this.precision);\r\n }\r\n return this.groupSeparator ? this.value.toLocaleString() : String(this.value);\r\n }\r\n\r\n protected rootStyle() {\r\n return { color: this.themeService.theme().colors.fg };\r\n }\r\n\r\n protected titleStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle, fontSize: '14px', marginBottom: '4px' };\r\n }\r\n\r\n protected toneColor(): string {\r\n const theme = this.themeService.theme();\r\n switch (this.tone) {\r\n case 'success':\r\n return theme.colors.intent.success.solid;\r\n case 'danger':\r\n return theme.colors.intent.danger.solid;\r\n case 'warning':\r\n return theme.colors.intent.warning.solid;\r\n case 'primary':\r\n return theme.colors.intent.primary.solid;\r\n default:\r\n return theme.colors.fg;\r\n }\r\n }\r\n\r\n protected valueRowStyle() {\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'baseline',\r\n gap: '4px',\r\n color: this.toneColor(),\r\n fontSize: '28px',\r\n fontWeight: '600',\r\n lineHeight: '1.2',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-carousel',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div role=\"region\" aria-roledescription=\"carousel\" [ngStyle]=\"rootStyle()\">\r\n <div [ngStyle]=\"trackStyle()\">\r\n <div *ngFor=\"let item of items; let i = index\" [ngStyle]=\"slideStyle()\" role=\"group\" aria-roledescription=\"slide\">\r\n {{ item }}\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"arrows && items.length > 1\"\r\n type=\"button\"\r\n aria-label=\"Previous slide\"\r\n (click)=\"prev()\"\r\n style=\"position:absolute;top:50%;left:8px;transform:translateY(-50%);border:none;background:rgba(0,0,0,0.4);color:#fff;width:32px;height:32px;border-radius:50%;cursor:pointer\"\r\n >‹</button>\r\n <button\r\n *ngIf=\"arrows && items.length > 1\"\r\n type=\"button\"\r\n aria-label=\"Next slide\"\r\n (click)=\"next()\"\r\n style=\"position:absolute;top:50%;right:8px;transform:translateY(-50%);border:none;background:rgba(0,0,0,0.4);color:#fff;width:32px;height:32px;border-radius:50%;cursor:pointer\"\r\n >›</button>\r\n <div *ngIf=\"dots\" style=\"position:absolute;bottom:8px;left:0;right:0;display:flex;justify-content:center;gap:6px\">\r\n <button\r\n *ngFor=\"let _ of items; let i = index\"\r\n type=\"button\"\r\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\r\n [attr.aria-current]=\"i === current()\"\r\n (click)=\"goTo(i)\"\r\n [ngStyle]=\"dotStyle(i)\"\r\n ></button>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraCarousel implements OnDestroy {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: string[] = [];\r\n @Input() set autoplay(value: number) {\r\n this.clearTimer();\r\n if (value > 0) {\r\n this.timer = setInterval(() => this.next(), value);\r\n }\r\n }\r\n @Input() arrows = true;\r\n @Input() dots = true;\r\n @Input() loop = true;\r\n @Input() height = 240;\r\n\r\n @Output() readonly currentChange = new EventEmitter<number>();\r\n\r\n protected readonly current = signal(0);\r\n private timer: ReturnType<typeof setInterval> | null = null;\r\n\r\n protected rootStyle() {\r\n return {\r\n position: 'relative',\r\n overflow: 'hidden',\r\n borderRadius: '8px',\r\n background: this.themeService.theme().colors.surface,\r\n };\r\n }\r\n\r\n protected trackStyle() {\r\n const total = Math.max(this.items.length, 1);\r\n return {\r\n display: 'flex',\r\n width: `${total * 100}%`,\r\n height: `${this.height}px`,\r\n transform: `translateX(-${(this.current() * 100) / total}%)`,\r\n transition: 'transform 320ms ease',\r\n };\r\n }\r\n\r\n protected slideStyle() {\r\n const total = Math.max(this.items.length, 1);\r\n return {\r\n width: `${100 / total}%`,\r\n flex: '0 0 auto',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n };\r\n }\r\n\r\n protected dotStyle(i: number) {\r\n const theme = this.themeService.theme();\r\n return {\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n background: i === this.current() ? theme.colors.intent.primary.solid : theme.colors.intent.neutral.subtle,\r\n cursor: 'pointer',\r\n };\r\n }\r\n\r\n protected prev(): void {\r\n this.goTo(this.current() - 1);\r\n }\r\n\r\n protected next(): void {\r\n this.goTo(this.current() + 1);\r\n }\r\n\r\n protected goTo(idx: number): void {\r\n const total = this.items.length;\r\n if (total === 0) return;\r\n const wrapped = this.loop ? (idx + total) % total : Math.max(0, Math.min(total - 1, idx));\r\n this.current.set(wrapped);\r\n this.currentChange.emit(wrapped);\r\n }\r\n\r\n private clearTimer(): void {\r\n if (this.timer) clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearTimer();\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-image',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"wrapperStyle()\">\r\n <div *ngIf=\"!loaded() && !errored() && placeholder\" [ngStyle]=\"overlayStyle()\">{{ placeholder }}</div>\r\n <img\r\n *ngIf=\"!(errored() && !fallback)\"\r\n [src]=\"actualSrc()\"\r\n [alt]=\"alt\"\r\n (load)=\"loaded.set(true)\"\r\n (error)=\"errored.set(true)\"\r\n (click)=\"onClick()\"\r\n [ngStyle]=\"imgStyle()\"\r\n />\r\n <div *ngIf=\"errored() && !fallback\" [ngStyle]=\"overlayStyle()\">×</div>\r\n </div>\r\n <div *ngIf=\"preview && showPreview()\" (click)=\"showPreview.set(false)\" [ngStyle]=\"previewStyle()\">\r\n <img [src]=\"actualSrc()\" [alt]=\"alt\" style=\"max-width:90vw;max-height:90vh\" />\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraImage {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() src = '';\r\n @Input() alt = '';\r\n @Input() fallback?: string;\r\n @Input() placeholder?: string;\r\n @Input() preview = false;\r\n @Input() width?: number | string;\r\n @Input() height?: number | string;\r\n @Input() fit: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down' = 'cover';\r\n @Input() rounded = false;\r\n\r\n protected readonly loaded = signal(false);\r\n protected readonly errored = signal(false);\r\n protected readonly showPreview = signal(false);\r\n\r\n protected actualSrc(): string {\r\n return this.errored() && this.fallback ? this.fallback : this.src;\r\n }\r\n\r\n protected onClick(): void {\r\n if (this.preview) this.showPreview.set(true);\r\n }\r\n\r\n protected wrapperStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n position: 'relative',\r\n display: 'inline-block',\r\n width: typeof this.width === 'number' ? `${this.width}px` : this.width,\r\n height: typeof this.height === 'number' ? `${this.height}px` : this.height,\r\n borderRadius: this.rounded ? '8px' : undefined,\r\n overflow: 'hidden',\r\n background: theme.colors.intent.neutral.subtle,\r\n };\r\n }\r\n\r\n protected imgStyle() {\r\n return {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: this.fit,\r\n display: 'block',\r\n cursor: this.preview ? 'zoom-in' : undefined,\r\n };\r\n }\r\n\r\n protected overlayStyle() {\r\n return {\r\n position: 'absolute',\r\n inset: '0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: this.themeService.theme().colors.fgSubtle,\r\n };\r\n }\r\n\r\n protected previewStyle() {\r\n return {\r\n position: 'fixed',\r\n inset: '0',\r\n background: 'rgba(0,0,0,0.85)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: '1400',\r\n cursor: 'zoom-out',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport type ElvoraTimelineStatus = 'default' | 'success' | 'danger' | 'warning' | 'info' | 'primary';\r\n\r\nexport interface ElvoraTimelineItem {\r\n key: string;\r\n content: string;\r\n label?: string;\r\n status?: ElvoraTimelineStatus;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-timeline',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <ol style=\"list-style:none;margin:0;padding:0\">\r\n <li *ngFor=\"let item of resolved(); let last = last\" style=\"display:flex;gap:12px;padding-bottom:20px\">\r\n <div style=\"display:flex;flex-direction:column;align-items:center\">\r\n <div [ngStyle]=\"dotStyle(item)\"></div>\r\n <div *ngIf=\"!last\" [ngStyle]=\"lineStyle()\"></div>\r\n </div>\r\n <div style=\"flex:1\">\r\n <div *ngIf=\"item.label\" [ngStyle]=\"labelStyle()\">{{ item.label }}</div>\r\n <div>{{ item.content }}</div>\r\n </div>\r\n </li>\r\n </ol>\r\n `,\r\n})\r\nexport class ElvoraTimeline {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: ElvoraTimelineItem[] = [];\r\n @Input() reverse = false;\r\n\r\n protected resolved(): ElvoraTimelineItem[] {\r\n return this.reverse ? [...this.items].reverse() : this.items;\r\n }\r\n\r\n protected dotStyle(item: ElvoraTimelineItem) {\r\n return {\r\n width: '12px',\r\n height: '12px',\r\n borderRadius: '50%',\r\n background: this.colorFor(item.status),\r\n flex: '0 0 auto',\r\n };\r\n }\r\n\r\n protected lineStyle() {\r\n return {\r\n flex: '1',\r\n width: '2px',\r\n background: this.themeService.theme().colors.border,\r\n marginTop: '4px',\r\n };\r\n }\r\n\r\n protected labelStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle, marginBottom: '2px' };\r\n }\r\n\r\n private colorFor(status?: ElvoraTimelineStatus): string {\r\n const theme = this.themeService.theme();\r\n switch (status) {\r\n case 'success':\r\n return theme.colors.intent.success.solid;\r\n case 'danger':\r\n return theme.colors.intent.danger.solid;\r\n case 'warning':\r\n return theme.colors.intent.warning.solid;\r\n case 'info':\r\n return theme.colors.intent.info.solid;\r\n case 'primary':\r\n return theme.colors.intent.primary.solid;\r\n default:\r\n return theme.colors.intent.neutral.solid;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraCollapseItem {\r\n key: string;\r\n header: string;\r\n content: string;\r\n extra?: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-collapse',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <div *ngFor=\"let item of items; let last = last\">\r\n <button\r\n type=\"button\"\r\n [attr.aria-expanded]=\"active().has(item.key)\"\r\n [disabled]=\"item.isDisabled\"\r\n (click)=\"togglePanel(item.key)\"\r\n [ngStyle]=\"headerStyle(item, last)\"\r\n >\r\n <span style=\"width:14px\">{{ active().has(item.key) ? '▾' : '▸' }}</span>\r\n <span style=\"flex:1;font-weight:500\">{{ item.header }}</span>\r\n <span *ngIf=\"item.extra\" [ngStyle]=\"extraStyle()\">{{ item.extra }}</span>\r\n </button>\r\n <div *ngIf=\"active().has(item.key)\" role=\"region\" [ngStyle]=\"panelStyle(last)\">{{ item.content }}</div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraCollapse {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: ElvoraCollapseItem[] = [];\r\n @Input() set activeKeys(value: string[]) {\r\n this.active.set(new Set(value));\r\n }\r\n @Input() accordion = false;\r\n @Input() bordered = true;\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n @Output() readonly activeKeysChange = new EventEmitter<string[]>();\r\n\r\n protected readonly active = signal<Set<string>>(new Set());\r\n\r\n protected togglePanel(key: string): void {\r\n const next = new Set(this.active());\r\n if (next.has(key)) next.delete(key);\r\n else if (this.accordion) {\r\n next.clear();\r\n next.add(key);\r\n } else next.add(key);\r\n this.active.set(next);\r\n this.activeKeysChange.emit(Array.from(next));\r\n }\r\n\r\n private padding(): string {\r\n return this.size === 'sm' ? '8px 12px' : this.size === 'lg' ? '16px 20px' : '12px 16px';\r\n }\r\n\r\n protected rootStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n border: this.bordered ? `1px solid ${theme.colors.border}` : undefined,\r\n borderRadius: this.bordered ? '8px' : undefined,\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n overflow: 'hidden',\r\n };\r\n }\r\n\r\n protected headerStyle(item: ElvoraCollapseItem, isLast: boolean) {\r\n const theme = this.themeService.theme();\r\n const isOpen = this.active().has(item.key);\r\n return {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: this.padding(),\r\n background: 'transparent',\r\n color: 'inherit',\r\n border: 'none',\r\n cursor: item.isDisabled ? 'not-allowed' : 'pointer',\r\n textAlign: 'left',\r\n fontSize: '14px',\r\n opacity: item.isDisabled ? 0.6 : 1,\r\n borderBottom: !isLast || isOpen ? `1px solid ${theme.colors.border}` : undefined,\r\n };\r\n }\r\n\r\n protected panelStyle(isLast: boolean) {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: this.padding(),\r\n borderBottom: !isLast ? `1px solid ${theme.colors.border}` : undefined,\r\n background: theme.colors.surface,\r\n };\r\n }\r\n\r\n protected extraStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { ElvoraCollapse, type ElvoraCollapseItem } from './collapse.component';\r\n\r\nexport type ElvoraAccordionItem = ElvoraCollapseItem;\r\n\r\n@Component({\r\n selector: 'elvora-accordion',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [ElvoraCollapse],\r\n template: `\r\n <elvora-collapse\r\n [items]=\"items\"\r\n [bordered]=\"bordered\"\r\n [size]=\"size\"\r\n [activeKeys]=\"activeKeys\"\r\n [accordion]=\"true\"\r\n (activeKeysChange)=\"activeKeysChange.emit($event)\"\r\n ></elvora-collapse>\r\n `,\r\n})\r\nexport class ElvoraAccordion {\r\n @Input() items: ElvoraAccordionItem[] = [];\r\n @Input() activeKeys: string[] = [];\r\n @Input() bordered = true;\r\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n @Output() readonly activeKeysChange = new EventEmitter<string[]>();\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraTourStep {\r\n /** CSS selector for the element to spotlight. */\r\n target?: string;\r\n title: string;\r\n description?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-tour',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <ng-container *ngIf=\"open\">\r\n <div *ngIf=\"mask\" aria-hidden=\"true\" (click)=\"close()\" [ngStyle]=\"maskStyle()\"></div>\r\n <div role=\"dialog\" aria-modal=\"true\" [ngStyle]=\"popoverStyle()\">\r\n <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:8px\">\r\n <div style=\"font-weight:600\">{{ currentStep()?.title }}</div>\r\n <button type=\"button\" aria-label=\"Close tour\" (click)=\"close()\" style=\"border:none;background:transparent;cursor:pointer;font-size:18px\">×</button>\r\n </div>\r\n <div *ngIf=\"currentStep()?.description\" [ngStyle]=\"descStyle()\">{{ currentStep()?.description }}</div>\r\n <div style=\"display:flex;align-items:center;justify-content:space-between\">\r\n <div [ngStyle]=\"counterStyle()\">{{ current() + 1 }} / {{ steps.length }}</div>\r\n <div style=\"display:flex;gap:8px\">\r\n <button *ngIf=\"current() > 0\" type=\"button\" (click)=\"prev()\" [ngStyle]=\"prevBtnStyle()\">Previous</button>\r\n <button *ngIf=\"current() < steps.length - 1\" type=\"button\" (click)=\"next()\" [ngStyle]=\"nextBtnStyle()\">Next</button>\r\n <button *ngIf=\"current() === steps.length - 1\" type=\"button\" (click)=\"close()\" [ngStyle]=\"nextBtnStyle()\">{{ finishLabel }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n})\r\nexport class ElvoraTour {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() open = false;\r\n @Input() steps: ElvoraTourStep[] = [];\r\n @Input() mask = true;\r\n @Input() finishLabel = 'Finish';\r\n\r\n @Output() readonly openChange = new EventEmitter<boolean>();\r\n @Output() readonly currentChange = new EventEmitter<number>();\r\n\r\n protected readonly current = signal(0);\r\n\r\n protected currentStep(): ElvoraTourStep | undefined {\r\n return this.steps[this.current()];\r\n }\r\n\r\n protected close(): void {\r\n this.open = false;\r\n this.openChange.emit(false);\r\n }\r\n\r\n protected next(): void {\r\n if (this.current() < this.steps.length - 1) {\r\n this.current.set(this.current() + 1);\r\n this.currentChange.emit(this.current());\r\n }\r\n }\r\n\r\n protected prev(): void {\r\n if (this.current() > 0) {\r\n this.current.set(this.current() - 1);\r\n this.currentChange.emit(this.current());\r\n }\r\n }\r\n\r\n protected maskStyle() {\r\n return {\r\n position: 'fixed',\r\n inset: '0',\r\n background: 'rgba(0,0,0,0.55)',\r\n zIndex: '1400',\r\n };\r\n }\r\n\r\n protected popoverStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n position: 'fixed',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n minWidth: '280px',\r\n maxWidth: '360px',\r\n zIndex: '1402',\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n border: `1px solid ${theme.colors.border}`,\r\n borderRadius: '8px',\r\n padding: '16px',\r\n boxShadow: theme.shadows.lg,\r\n };\r\n }\r\n\r\n protected descStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle, marginBottom: '12px' };\r\n }\r\n\r\n protected counterStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle, fontSize: '12px' };\r\n }\r\n\r\n protected prevBtnStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n borderRadius: '6px',\r\n border: `1px solid ${theme.colors.border}`,\r\n background: 'transparent',\r\n color: theme.colors.fg,\r\n cursor: 'pointer',\r\n };\r\n }\r\n\r\n protected nextBtnStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: '6px 10px',\r\n borderRadius: '6px',\r\n border: 'none',\r\n background: theme.colors.intent.primary.solid,\r\n color: theme.colors.intent.primary.solidFg,\r\n cursor: 'pointer',\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport type ElvoraFloatButtonTone = 'primary' | 'neutral' | 'danger' | 'success';\r\n\r\n@Component({\r\n selector: 'elvora-float-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"ariaLabel ?? label\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"pressed.emit()\"\r\n [ngStyle]=\"buttonStyle()\"\r\n >\r\n <ng-content></ng-content>\r\n <span *ngIf=\"extended && label\">{{ label }}</span>\r\n </button>\r\n `,\r\n})\r\nexport class ElvoraFloatButton {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() label?: string;\r\n @Input() size = 56;\r\n @Input() right = 24;\r\n @Input() bottom = 24;\r\n @Input() tone: ElvoraFloatButtonTone = 'primary';\r\n @Input() extended = false;\r\n @Input() isDisabled = false;\r\n @Input() ariaLabel?: string;\r\n\r\n @Output() readonly pressed = new EventEmitter<void>();\r\n\r\n protected buttonStyle() {\r\n const theme = this.themeService.theme();\r\n const intent =\r\n this.tone === 'neutral'\r\n ? theme.colors.intent.neutral\r\n : this.tone === 'danger'\r\n ? theme.colors.intent.danger\r\n : this.tone === 'success'\r\n ? theme.colors.intent.success\r\n : theme.colors.intent.primary;\r\n return {\r\n position: 'fixed',\r\n right: `${this.right}px`,\r\n bottom: `${this.bottom}px`,\r\n height: `${this.size}px`,\r\n minWidth: `${this.size}px`,\r\n padding: this.extended ? '0 20px' : '0',\r\n borderRadius: this.extended ? `${this.size / 2}px` : '50%',\r\n background: intent.solid,\r\n color: intent.solidFg,\r\n boxShadow: theme.shadows.lg,\r\n border: 'none',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n fontSize: '14px',\r\n fontWeight: '500',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'elvora-watermark',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraWatermark {\r\n private readonly _content = signal<string[]>(['Elvora']);\r\n @Input() set content(value: string | string[]) {\r\n this._content.set(Array.isArray(value) ? value : [value]);\r\n }\r\n\r\n @Input() font = '14px sans-serif';\r\n @Input() fontSize = 14;\r\n @Input() color = 'rgba(0,0,0,0.15)';\r\n @Input() rotate = -22;\r\n @Input() gapX = 240;\r\n @Input() gapY = 180;\r\n\r\n protected readonly dataUri = computed(() => this.buildDataUri());\r\n\r\n protected rootStyle() {\r\n return {\r\n position: 'relative',\r\n backgroundImage: `url(\"${this.dataUri()}\")`,\r\n backgroundRepeat: 'repeat',\r\n backgroundSize: `${this.gapX}px ${this.gapY}px`,\r\n } as Record<string, string>;\r\n }\r\n\r\n private buildDataUri(): string {\r\n const content = this._content();\r\n const fontSize = this.fontSize;\r\n const lineHeight = fontSize * 1.4;\r\n const padding = 20;\r\n const textHeight = content.length * lineHeight + padding * 2;\r\n const maxLen = content.reduce((m, c) => Math.max(m, c.length), 0);\r\n const textWidth = maxLen * fontSize * 0.6 + padding * 2;\r\n const width = Math.max(this.gapX, textWidth);\r\n const height = Math.max(this.gapY, textHeight);\r\n const cx = width / 2;\r\n const cy = height / 2;\r\n const tspans = content\r\n .map(\r\n (line, idx) =>\r\n `<tspan x=\"${cx}\" dy=\"${idx === 0 ? 0 : lineHeight}\">${escapeXml(line)}</tspan>`,\r\n )\r\n .join('');\r\n const svg = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">\r\n <g transform=\"rotate(${this.rotate} ${cx} ${cy})\" font=\"${this.font}\" font-size=\"${fontSize}\" fill=\"${this.color}\" text-anchor=\"middle\">\r\n <text x=\"${cx}\" y=\"${cy - ((content.length - 1) * lineHeight) / 2}\" dominant-baseline=\"middle\">${tspans}</text>\r\n </g>\r\n</svg>`;\r\n return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;\r\n }\r\n}\r\n\r\nfunction escapeXml(input: string): string {\r\n return input\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n computed,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\nimport { generateQrMatrix, type ErrorCorrection } from '@elvora/core';\r\n\r\n@Component({\r\n selector: 'elvora-qr-code',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf],\r\n template: `\r\n <svg\r\n [attr.width]=\"size\"\r\n [attr.height]=\"size\"\r\n [attr.viewBox]=\"'0 0 ' + matrixSize() + ' ' + matrixSize()\"\r\n role=\"img\"\r\n [attr.aria-label]=\"ariaLabel ?? 'QR code'\"\r\n shape-rendering=\"crispEdges\"\r\n >\r\n <rect x=\"0\" y=\"0\" [attr.width]=\"matrixSize()\" [attr.height]=\"matrixSize()\" [attr.fill]=\"background\"></rect>\r\n <ng-container *ngFor=\"let row of matrix(); let ri = index\">\r\n <ng-container *ngFor=\"let cell of row; let ci = index\">\r\n <rect *ngIf=\"cell\" [attr.x]=\"ci\" [attr.y]=\"ri\" width=\"1\" height=\"1\" [attr.fill]=\"foreground\"></rect>\r\n </ng-container>\r\n </ng-container>\r\n </svg>\r\n `,\r\n})\r\nexport class ElvoraQrCode {\r\n private readonly _value = signal('');\r\n private readonly _level = signal<ErrorCorrection>('M');\r\n\r\n @Input() set value(v: string) {\r\n this._value.set(v);\r\n }\r\n @Input() set level(l: ErrorCorrection) {\r\n this._level.set(l);\r\n }\r\n\r\n @Input() size = 160;\r\n @Input() foreground = '#000';\r\n @Input() background = '#fff';\r\n @Input() ariaLabel?: string;\r\n\r\n protected readonly matrixData = computed(() => generateQrMatrix(this._value(), this._level()));\r\n protected readonly matrix = computed(() => this.matrixData().modules);\r\n protected readonly matrixSize = computed(() => this.matrixData().size);\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-splitter',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle, NgTemplateOutlet],\r\n template: `\r\n <div #container [ngStyle]=\"rootStyle()\">\r\n <div [ngStyle]=\"firstPaneStyle()\">\r\n <ng-content select=\"[elvoraSplitterFirst]\"></ng-content>\r\n </div>\r\n <div\r\n role=\"separator\"\r\n tabindex=\"0\"\r\n [attr.aria-orientation]=\"direction === 'horizontal' ? 'vertical' : 'horizontal'\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"100\"\r\n [attr.aria-valuenow]=\"Math.round(split() * 100)\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [ngStyle]=\"handleStyle()\"\r\n ></div>\r\n <div [ngStyle]=\"secondPaneStyle()\">\r\n <ng-content select=\"[elvoraSplitterSecond]\"></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraSplitter {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n protected readonly Math = Math;\r\n\r\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\r\n\r\n @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() set splitRatio(value: number) {\r\n if (typeof value === 'number') this.split.set(value);\r\n }\r\n @Input() minRatio = 0.1;\r\n @Input() maxRatio = 0.9;\r\n @Input() handleSize = 6;\r\n\r\n @Output() readonly splitRatioChange = new EventEmitter<number>();\r\n\r\n protected readonly split = signal(0.5);\r\n private dragging = false;\r\n private startCoord = 0;\r\n private startSplit = 0;\r\n\r\n protected rootStyle() {\r\n return {\r\n display: 'flex',\r\n flexDirection: this.direction === 'horizontal' ? 'row' : 'column',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected firstPaneStyle() {\r\n return {\r\n flexBasis: `${this.split() * 100}%`,\r\n overflow: 'auto',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected secondPaneStyle() {\r\n return { flex: '1', overflow: 'auto' } as Record<string, string>;\r\n }\r\n\r\n protected handleStyle() {\r\n return {\r\n width: this.direction === 'horizontal' ? `${this.handleSize}px` : '100%',\r\n height: this.direction === 'horizontal' ? '100%' : `${this.handleSize}px`,\r\n background: this.themeService.theme().colors.border,\r\n cursor: this.direction === 'horizontal' ? 'col-resize' : 'row-resize',\r\n flex: '0 0 auto',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n this.dragging = true;\r\n this.startCoord = this.direction === 'horizontal' ? event.clientX : event.clientY;\r\n this.startSplit = this.split();\r\n (event.target as Element).setPointerCapture?.(event.pointerId);\r\n const move = (e: PointerEvent) => this.onPointerMove(e);\r\n const up = (e: PointerEvent) => {\r\n this.dragging = false;\r\n window.removeEventListener('pointermove', move);\r\n window.removeEventListener('pointerup', up);\r\n (event.target as Element).releasePointerCapture?.(e.pointerId);\r\n };\r\n window.addEventListener('pointermove', move);\r\n window.addEventListener('pointerup', up);\r\n }\r\n\r\n private onPointerMove(event: PointerEvent): void {\r\n if (!this.dragging) return;\r\n const rect = this.container.nativeElement.getBoundingClientRect();\r\n const total = this.direction === 'horizontal' ? rect.width : rect.height;\r\n if (!total) return;\r\n const delta = (this.direction === 'horizontal' ? event.clientX : event.clientY) - this.startCoord;\r\n const next = Math.min(this.maxRatio, Math.max(this.minRatio, this.startSplit + delta / total));\r\n this.split.set(next);\r\n this.splitRatioChange.emit(next);\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent): void {\r\n const step = event.shiftKey ? 0.1 : 0.02;\r\n if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n const next = Math.max(this.minRatio, this.split() - step);\r\n this.split.set(next);\r\n this.splitRatioChange.emit(next);\r\n } else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n const next = Math.min(this.maxRatio, this.split() + step);\r\n this.split.set(next);\r\n this.splitRatioChange.emit(next);\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'elvora-affix',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div #placeholder [ngStyle]=\"placeholderStyle()\">\r\n <div #wrapper [ngStyle]=\"wrapperStyle()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraAffix implements AfterViewInit, OnDestroy {\r\n @ViewChild('placeholder', { static: true }) placeholder!: ElementRef<HTMLDivElement>;\r\n @ViewChild('wrapper', { static: true }) wrapper!: ElementRef<HTMLDivElement>;\r\n\r\n @Input() offsetTop?: number;\r\n @Input() offsetBottom?: number;\r\n\r\n @Output() readonly affixedChange = new EventEmitter<boolean>();\r\n\r\n protected readonly affixed = signal(false);\r\n private size = { width: 0, height: 0 };\r\n private boundUpdate = () => this.update();\r\n\r\n protected placeholderStyle() {\r\n return {\r\n width: '100%',\r\n height: this.affixed() && this.size.height ? `${this.size.height}px` : undefined,\r\n } as Record<string, string | undefined>;\r\n }\r\n\r\n protected wrapperStyle() {\r\n if (!this.affixed()) return {} as Record<string, string | undefined>;\r\n return {\r\n position: 'fixed',\r\n width: this.size.width ? `${this.size.width}px` : undefined,\r\n top: this.offsetTop !== undefined ? `${this.offsetTop}px` : undefined,\r\n bottom: this.offsetBottom !== undefined ? `${this.offsetBottom}px` : undefined,\r\n zIndex: '10',\r\n } as Record<string, string | undefined>;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (typeof window === 'undefined') return;\r\n window.addEventListener('scroll', this.boundUpdate, true);\r\n window.addEventListener('resize', this.boundUpdate);\r\n this.update();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (typeof window === 'undefined') return;\r\n window.removeEventListener('scroll', this.boundUpdate, true);\r\n window.removeEventListener('resize', this.boundUpdate);\r\n }\r\n\r\n private update(): void {\r\n const placeholder = this.placeholder.nativeElement;\r\n const rect = placeholder.getBoundingClientRect();\r\n let next = false;\r\n if (this.offsetTop !== undefined && rect.top <= this.offsetTop) next = true;\r\n if (this.offsetBottom !== undefined && rect.bottom >= window.innerHeight - this.offsetBottom) next = true;\r\n if (next !== this.affixed()) {\r\n this.affixed.set(next);\r\n this.affixedChange.emit(next);\r\n }\r\n if (!this.size.width) {\r\n const wrapper = this.wrapper.nativeElement;\r\n this.size = { width: wrapper.offsetWidth, height: wrapper.offsetHeight };\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraSpeedDialAction {\r\n key: string;\r\n label: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-speed-dial',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div role=\"group\" [attr.aria-label]=\"ariaLabel\">\r\n <ng-container *ngIf=\"open()\">\r\n <button\r\n *ngFor=\"let action of actions; let i = index\"\r\n type=\"button\"\r\n [attr.aria-label]=\"action.label\"\r\n [disabled]=\"action.isDisabled\"\r\n (click)=\"onAction(action)\"\r\n [ngStyle]=\"actionStyle(i)\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"ariaLabel ?? 'Open menu'\"\r\n (click)=\"toggle()\"\r\n [ngStyle]=\"triggerStyle()\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraSpeedDial {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() actions: ElvoraSpeedDialAction[] = [];\r\n @Input() right = 24;\r\n @Input() bottom = 24;\r\n @Input() direction: 'up' | 'down' | 'left' | 'right' = 'up';\r\n @Input() ariaLabel?: string;\r\n\r\n @Output() readonly openChange = new EventEmitter<boolean>();\r\n @Output() readonly actionPress = new EventEmitter<ElvoraSpeedDialAction>();\r\n\r\n protected readonly open = signal(false);\r\n\r\n protected toggle(): void {\r\n const next = !this.open();\r\n this.open.set(next);\r\n this.openChange.emit(next);\r\n }\r\n\r\n protected onAction(action: ElvoraSpeedDialAction): void {\r\n this.actionPress.emit(action);\r\n this.open.set(false);\r\n this.openChange.emit(false);\r\n }\r\n\r\n protected triggerStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n position: 'fixed',\r\n right: `${this.right}px`,\r\n bottom: `${this.bottom}px`,\r\n width: '56px',\r\n height: '56px',\r\n borderRadius: '50%',\r\n background: theme.colors.intent.primary.solid,\r\n color: theme.colors.intent.primary.solidFg,\r\n border: 'none',\r\n cursor: 'pointer',\r\n boxShadow: theme.shadows.lg,\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected actionStyle(idx: number) {\r\n const theme = this.themeService.theme();\r\n const offset = (idx + 1) * 64;\r\n const base: Record<string, string> = {\r\n position: 'fixed',\r\n padding: '0 14px',\r\n height: '44px',\r\n borderRadius: '22px',\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n border: `1px solid ${theme.colors.border}`,\r\n boxShadow: theme.shadows.md,\r\n cursor: 'pointer',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n };\r\n switch (this.direction) {\r\n case 'up':\r\n return { ...base, right: `${this.right}px`, bottom: `${this.bottom + offset}px` };\r\n case 'down':\r\n return { ...base, right: `${this.right}px`, top: `${this.bottom + offset}px` };\r\n case 'left':\r\n return { ...base, bottom: `${this.bottom}px`, right: `${this.right + offset}px` };\r\n case 'right':\r\n return { ...base, bottom: `${this.bottom}px`, left: `${this.right + offset}px` };\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-backdrop',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgIf, NgStyle],\r\n template: `\r\n <div\r\n *ngIf=\"open\"\r\n role=\"presentation\"\r\n (click)=\"closed.emit()\"\r\n [ngStyle]=\"rootStyle()\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraBackdrop {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() open = false;\r\n @Input() tint?: string;\r\n @Input() invisible = false;\r\n\r\n @Output() readonly closed = new EventEmitter<void>();\r\n\r\n protected rootStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n background: this.invisible ? 'transparent' : this.tint ?? 'rgba(0,0,0,0.55)',\r\n zIndex: String(theme.tokens.zIndex.overlay),\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraImageListItem {\r\n key: string;\r\n src?: string;\r\n alt?: string;\r\n caption?: string;\r\n cols?: number;\r\n rows?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-image-list',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\">\r\n <div *ngFor=\"let item of items\" [ngStyle]=\"cellStyle(item)\">\r\n <img *ngIf=\"item.src\" [src]=\"item.src\" [alt]=\"item.alt ?? ''\" [ngStyle]=\"imageStyle()\" />\r\n <div *ngIf=\"item.caption\" [ngStyle]=\"captionStyle()\">{{ item.caption }}</div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraImageList {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() items: ElvoraImageListItem[] = [];\r\n @Input() cols = 3;\r\n @Input() gap = 8;\r\n @Input() rowHeight = 160;\r\n\r\n protected rootStyle() {\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: `repeat(${this.cols}, minmax(0, 1fr))`,\r\n gridAutoRows: `${this.rowHeight}px`,\r\n gap: `${this.gap}px`,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected cellStyle(item: ElvoraImageListItem) {\r\n return {\r\n position: 'relative',\r\n overflow: 'hidden',\r\n borderRadius: this.themeService.theme().radii.sm,\r\n background: this.themeService.theme().colors.intent.neutral.subtle,\r\n gridColumn: item.cols && item.cols > 1 ? `span ${item.cols}` : undefined,\r\n gridRow: item.rows && item.rows > 1 ? `span ${item.rows}` : undefined,\r\n } as Record<string, string | undefined>;\r\n }\r\n\r\n protected imageStyle() {\r\n return {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected captionStyle() {\r\n return {\r\n position: 'absolute',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n padding: '6px 10px',\r\n fontSize: '12px',\r\n color: '#fff',\r\n background: 'linear-gradient(180deg, transparent, rgba(0,0,0,0.6))',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-simple-pagination',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <nav aria-label=\"Pagination\" [ngStyle]=\"rootStyle()\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Previous page\"\r\n [disabled]=\"currentPage() === 1\"\r\n (click)=\"goTo(currentPage() - 1)\"\r\n [ngStyle]=\"btnStyle(currentPage() === 1)\"\r\n >‹</button>\r\n <span [ngStyle]=\"labelStyle()\">{{ currentPage() }} / {{ totalPages() }}</span>\r\n <button\r\n type=\"button\"\r\n aria-label=\"Next page\"\r\n [disabled]=\"currentPage() === totalPages()\"\r\n (click)=\"goTo(currentPage() + 1)\"\r\n [ngStyle]=\"btnStyle(currentPage() === totalPages())\"\r\n >›</button>\r\n <select\r\n *ngIf=\"showSizeChanger\"\r\n aria-label=\"Page size\"\r\n (change)=\"onSizeChange($event)\"\r\n [ngStyle]=\"selectStyle()\"\r\n >\r\n <option *ngFor=\"let n of pageSizeOptions\" [value]=\"n\" [selected]=\"n === pageSize\">{{ n }} / page</option>\r\n </select>\r\n <span *ngIf=\"showJumper\" [ngStyle]=\"jumperStyle()\">\r\n Go to\r\n <input\r\n aria-label=\"Jump to page\"\r\n type=\"number\"\r\n [value]=\"''\"\r\n (keydown.enter)=\"onJump($event)\"\r\n [ngStyle]=\"inputStyle()\"\r\n />\r\n </span>\r\n </nav>\r\n `,\r\n})\r\nexport class ElvoraSimplePagination {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n private readonly _total = signal(0);\r\n private readonly _pageSize = signal(10);\r\n private readonly _current = signal(1);\r\n\r\n @Input() set total(v: number) {\r\n this._total.set(v);\r\n }\r\n @Input() set pageSize(v: number) {\r\n this._pageSize.set(v);\r\n }\r\n get pageSize(): number {\r\n return this._pageSize();\r\n }\r\n @Input() set current(v: number) {\r\n this._current.set(v);\r\n }\r\n @Input() showJumper = false;\r\n @Input() showSizeChanger = false;\r\n @Input() pageSizeOptions = [10, 20, 50, 100];\r\n\r\n @Output() readonly currentChange = new EventEmitter<number>();\r\n @Output() readonly pageSizeChange = new EventEmitter<number>();\r\n\r\n protected totalPages() {\r\n return Math.max(1, Math.ceil(this._total() / this._pageSize()));\r\n }\r\n\r\n protected currentPage() {\r\n return Math.min(Math.max(this._current(), 1), this.totalPages());\r\n }\r\n\r\n protected goTo(page: number): void {\r\n const next = Math.min(Math.max(page, 1), this.totalPages());\r\n if (next !== this.currentPage()) {\r\n this._current.set(next);\r\n this.currentChange.emit(next);\r\n }\r\n }\r\n\r\n protected onSizeChange(event: Event): void {\r\n const value = Number((event.target as HTMLSelectElement).value);\r\n this._pageSize.set(value);\r\n this.pageSizeChange.emit(value);\r\n }\r\n\r\n protected onJump(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const value = Number(input.value);\r\n if (Number.isFinite(value)) this.goTo(value);\r\n input.value = '';\r\n }\r\n\r\n protected rootStyle() {\r\n return { display: 'inline-flex', alignItems: 'center', gap: '8px' } as Record<string, string>;\r\n }\r\n\r\n protected btnStyle(disabled: boolean) {\r\n const theme = this.themeService.theme();\r\n return {\r\n minWidth: '32px',\r\n height: '32px',\r\n borderRadius: theme.radii.md,\r\n border: `1px solid ${theme.colors.border}`,\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? '0.5' : '1',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected labelStyle() {\r\n return {\r\n fontSize: '13px',\r\n color: this.themeService.theme().colors.fg,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected selectStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n height: '32px',\r\n borderRadius: theme.radii.md,\r\n border: `1px solid ${theme.colors.border}`,\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n padding: '0 8px',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected jumperStyle() {\r\n return { fontSize: '13px', color: this.themeService.theme().colors.fgSubtle, display: 'inline-flex', alignItems: 'center', gap: '6px' };\r\n }\r\n\r\n protected inputStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n width: '60px',\r\n height: '32px',\r\n borderRadius: theme.radii.md,\r\n border: `1px solid ${theme.colors.border}`,\r\n background: theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n padding: '0 8px',\r\n } as Record<string, string>;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-mini-pagination',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <nav aria-label=\"Pagination\" [ngStyle]=\"rootStyle()\">\r\n <button\r\n type=\"button\"\r\n aria-label=\"Previous page\"\r\n [disabled]=\"currentPage() === 1\"\r\n (click)=\"goTo(currentPage() - 1)\"\r\n [ngStyle]=\"btnStyle(currentPage() === 1)\"\r\n >‹</button>\r\n <span>{{ currentPage() }}/{{ totalPages() }}</span>\r\n <button\r\n type=\"button\"\r\n aria-label=\"Next page\"\r\n [disabled]=\"currentPage() === totalPages()\"\r\n (click)=\"goTo(currentPage() + 1)\"\r\n [ngStyle]=\"btnStyle(currentPage() === totalPages())\"\r\n >›</button>\r\n </nav>\r\n `,\r\n})\r\nexport class ElvoraMiniPagination {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n private readonly _total = signal(0);\r\n private readonly _pageSize = signal(10);\r\n private readonly _current = signal(1);\r\n\r\n @Input() set total(v: number) {\r\n this._total.set(v);\r\n }\r\n @Input() set pageSize(v: number) {\r\n this._pageSize.set(v);\r\n }\r\n @Input() set current(v: number) {\r\n this._current.set(v);\r\n }\r\n\r\n @Output() readonly currentChange = new EventEmitter<number>();\r\n\r\n protected totalPages() {\r\n return Math.max(1, Math.ceil(this._total() / this._pageSize()));\r\n }\r\n\r\n protected currentPage() {\r\n return Math.min(Math.max(this._current(), 1), this.totalPages());\r\n }\r\n\r\n protected goTo(page: number): void {\r\n const next = Math.min(Math.max(page, 1), this.totalPages());\r\n if (next !== this.currentPage()) {\r\n this._current.set(next);\r\n this.currentChange.emit(next);\r\n }\r\n }\r\n\r\n protected rootStyle() {\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n fontSize: '12px',\r\n color: this.themeService.theme().colors.fgSubtle,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected btnStyle(disabled: boolean) {\r\n const theme = this.themeService.theme();\r\n return {\r\n width: '24px',\r\n height: '24px',\r\n border: 'none',\r\n background: 'transparent',\r\n color: theme.colors.fg,\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? '0.4' : '1',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport interface ElvoraStepperStep {\r\n key: string;\r\n label: string;\r\n description?: string;\r\n optional?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-stepper',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle, NgTemplateOutlet],\r\n template: `\r\n <div>\r\n <div [ngStyle]=\"trackStyle()\">\r\n <div\r\n *ngFor=\"let step of steps; let idx = index; let last = last\"\r\n [ngStyle]=\"stepStyle()\"\r\n >\r\n <button\r\n type=\"button\"\r\n [attr.aria-current]=\"idx === activeStep() ? 'step' : null\"\r\n (click)=\"goTo(idx)\"\r\n [ngStyle]=\"circleStyle(idx)\"\r\n >\r\n {{ idx < activeStep() ? '✓' : idx + 1 }}\r\n </button>\r\n <div style=\"flex:1\">\r\n <div [ngStyle]=\"labelStyle(idx)\">\r\n {{ step.label }}\r\n <span *ngIf=\"step.optional\" style=\"font-size:11px;margin-left:4px\">(optional)</span>\r\n </div>\r\n <div *ngIf=\"step.description\" [ngStyle]=\"descStyle()\">{{ step.description }}</div>\r\n </div>\r\n <div *ngIf=\"orientation === 'horizontal' && !last\" [ngStyle]=\"connectorStyle(idx)\"></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showNavigation\" [ngStyle]=\"navStyle()\">\r\n <button *ngIf=\"activeStep() > 0\" type=\"button\" (click)=\"prev()\" [ngStyle]=\"navBtnStyle('outline')\">\r\n {{ prevLabel }}\r\n </button>\r\n <button *ngIf=\"activeStep() < steps.length - 1\" type=\"button\" (click)=\"next()\" [ngStyle]=\"navBtnStyle('primary')\">\r\n {{ nextLabel }}\r\n </button>\r\n <button *ngIf=\"activeStep() === steps.length - 1\" type=\"button\" (click)=\"finished.emit()\" [ngStyle]=\"navBtnStyle('primary')\">\r\n {{ finishLabel }}\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraStepper {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n private readonly _active = signal(0);\r\n\r\n @Input() steps: ElvoraStepperStep[] = [];\r\n @Input() set active(value: number) {\r\n this._active.set(value);\r\n }\r\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n @Input() showNavigation = true;\r\n @Input() nextLabel = 'Next';\r\n @Input() prevLabel = 'Back';\r\n @Input() finishLabel = 'Finish';\r\n\r\n @Output() readonly activeChange = new EventEmitter<number>();\r\n @Output() readonly finished = new EventEmitter<void>();\r\n\r\n protected activeStep() {\r\n return this._active();\r\n }\r\n\r\n protected goTo(idx: number): void {\r\n const clamped = Math.max(0, Math.min(this.steps.length - 1, idx));\r\n this._active.set(clamped);\r\n this.activeChange.emit(clamped);\r\n }\r\n\r\n protected next(): void {\r\n this.goTo(this.activeStep() + 1);\r\n }\r\n\r\n protected prev(): void {\r\n this.goTo(this.activeStep() - 1);\r\n }\r\n\r\n protected trackStyle() {\r\n return {\r\n display: 'flex',\r\n flexDirection: this.orientation === 'horizontal' ? 'row' : 'column',\r\n alignItems: this.orientation === 'horizontal' ? 'center' : 'flex-start',\r\n gap: this.orientation === 'horizontal' ? '8px' : '12px',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected stepStyle() {\r\n return {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: this.orientation === 'horizontal' ? 'center' : 'flex-start',\r\n flex: this.orientation === 'horizontal' ? '1' : undefined,\r\n gap: '8px',\r\n } as Record<string, string | undefined>;\r\n }\r\n\r\n protected circleStyle(idx: number) {\r\n const theme = this.themeService.theme();\r\n const done = idx < this.activeStep();\r\n const isActive = idx === this.activeStep();\r\n return {\r\n width: '28px',\r\n height: '28px',\r\n borderRadius: '50%',\r\n border: 'none',\r\n background: done || isActive ? theme.colors.intent.primary.solid : theme.colors.intent.neutral.subtle,\r\n color: done || isActive ? theme.colors.intent.primary.solidFg : theme.colors.fg,\r\n cursor: 'pointer',\r\n fontWeight: '600',\r\n fontSize: '13px',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected labelStyle(idx: number) {\r\n const theme = this.themeService.theme();\r\n return {\r\n fontWeight: '500',\r\n color: idx === this.activeStep() ? theme.colors.fg : theme.colors.fgSubtle,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected descStyle() {\r\n return { color: this.themeService.theme().colors.fgSubtle, fontSize: '12px' } as Record<string, string>;\r\n }\r\n\r\n protected connectorStyle(idx: number) {\r\n const theme = this.themeService.theme();\r\n return {\r\n flex: '1',\r\n height: '2px',\r\n background: idx < this.activeStep() ? theme.colors.intent.primary.solid : theme.colors.border,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected navStyle() {\r\n return { display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '16px' } as Record<string, string>;\r\n }\r\n\r\n protected navBtnStyle(variant: 'primary' | 'outline') {\r\n const theme = this.themeService.theme();\r\n return {\r\n padding: '6px 14px',\r\n borderRadius: theme.radii.md,\r\n border: variant === 'outline' ? `1px solid ${theme.colors.border}` : 'none',\r\n background: variant === 'outline' ? 'transparent' : theme.colors.intent.primary.solid,\r\n color: variant === 'outline' ? theme.colors.fg : theme.colors.intent.primary.solidFg,\r\n cursor: 'pointer',\r\n fontSize: '13px',\r\n fontWeight: '500',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport type { ElvoraSize } from '@elvora/core';\r\n\r\n@Component({\r\n selector: 'elvora-toggle-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <button\r\n type=\"button\"\r\n [attr.aria-pressed]=\"selected()\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"onToggle()\"\r\n [ngStyle]=\"buttonStyle()\"\r\n >\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n})\r\nexport class ElvoraToggleButton {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() value?: string;\r\n @Input() size: ElvoraSize = 'md';\r\n @Input() isDisabled = false;\r\n @Input() set selectedValue(value: boolean) {\r\n this.selected.set(value);\r\n }\r\n\r\n @Output() readonly selectedChange = new EventEmitter<boolean>();\r\n\r\n protected readonly selected = signal(false);\r\n\r\n protected onToggle(): void {\r\n const next = !this.selected();\r\n this.selected.set(next);\r\n this.selectedChange.emit(next);\r\n }\r\n\r\n protected buttonStyle() {\r\n const theme = this.themeService.theme();\r\n const intent = theme.colors.intent.primary;\r\n const pad = this.sizePadding();\r\n const isSelected = this.selected();\r\n return {\r\n padding: `${pad.padY}px ${pad.padX}px`,\r\n fontSize: `${pad.font}px`,\r\n fontWeight: '500',\r\n borderRadius: theme.radii.md,\r\n border: `1px solid ${isSelected ? intent.solid : theme.colors.border}`,\r\n background: isSelected ? intent.subtle : theme.colors.surfaceElevated,\r\n color: isSelected ? intent.fg : theme.colors.fg,\r\n cursor: this.isDisabled ? 'not-allowed' : 'pointer',\r\n opacity: this.isDisabled ? '0.5' : '1',\r\n } as Record<string, string>;\r\n }\r\n\r\n private sizePadding() {\r\n switch (this.size) {\r\n case 'xs':\r\n return { padX: 8, padY: 4, font: 11 };\r\n case 'sm':\r\n return { padX: 10, padY: 6, font: 12 };\r\n case 'lg':\r\n return { padX: 18, padY: 10, font: 14 };\r\n case 'xl':\r\n return { padX: 22, padY: 12, font: 16 };\r\n default:\r\n return { padX: 14, padY: 8, font: 13 };\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'elvora-button-group',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgStyle],\r\n template: `\r\n <div [attr.role]=\"'group'\" [ngStyle]=\"rootStyle()\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styles: [\r\n `\r\n :host ::ng-deep elvora-button-group > div > button:not(:first-child) {\r\n margin-left: -1px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class ElvoraButtonGroup {\r\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n\r\n protected rootStyle() {\r\n return {\r\n display: 'inline-flex',\r\n flexDirection: this.orientation === 'horizontal' ? 'row' : 'column',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\n@Component({\r\n selector: 'elvora-chip-input',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div [ngStyle]=\"rootStyle()\" (click)=\"focusInput()\">\r\n <span *ngFor=\"let chip of chips(); let i = index\" [ngStyle]=\"chipStyle()\">\r\n {{ chip }}\r\n <button\r\n *ngIf=\"!isDisabled\"\r\n type=\"button\"\r\n aria-label=\"Remove tag\"\r\n (click)=\"remove(i); $event.stopPropagation()\"\r\n [ngStyle]=\"closeBtnStyle()\"\r\n >×</button>\r\n </span>\r\n <input\r\n #inputEl\r\n [attr.aria-label]=\"ariaLabel ?? 'Add tag'\"\r\n [disabled]=\"isDisabled\"\r\n [value]=\"draft()\"\r\n [placeholder]=\"chips().length === 0 ? (placeholder ?? '') : ''\"\r\n (input)=\"onInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (blur)=\"commit()\"\r\n [ngStyle]=\"inputStyle()\"\r\n />\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraChipInput {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @ViewChild('inputEl', { static: true }) inputEl!: ElementRef<HTMLInputElement>;\r\n\r\n @Input() set value(v: string[]) {\r\n this.chips.set(v ?? []);\r\n }\r\n @Input() placeholder?: string;\r\n @Input() isDisabled = false;\r\n @Input() unique = true;\r\n @Input() maxChips?: number;\r\n @Input() ariaLabel?: string;\r\n\r\n @Output() readonly valueChange = new EventEmitter<string[]>();\r\n\r\n protected readonly chips = signal<string[]>([]);\r\n protected readonly draft = signal('');\r\n\r\n protected focusInput(): void {\r\n this.inputEl.nativeElement.focus();\r\n }\r\n\r\n protected onInput(event: Event): void {\r\n const v = (event.target as HTMLInputElement).value;\r\n if (v.endsWith(',')) this.addChip(v.slice(0, -1));\r\n else this.draft.set(v);\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === 'Tab') {\r\n if (this.draft()) {\r\n event.preventDefault();\r\n this.addChip(this.draft());\r\n }\r\n } else if (event.key === 'Backspace' && !this.draft() && this.chips().length > 0) {\r\n this.remove(this.chips().length - 1);\r\n }\r\n }\r\n\r\n protected commit(): void {\r\n if (this.draft()) this.addChip(this.draft());\r\n }\r\n\r\n protected addChip(raw: string): void {\r\n const trimmed = raw.trim();\r\n if (!trimmed) return;\r\n if (this.maxChips !== undefined && this.chips().length >= this.maxChips) return;\r\n if (this.unique && this.chips().includes(trimmed)) {\r\n this.draft.set('');\r\n return;\r\n }\r\n const next = [...this.chips(), trimmed];\r\n this.chips.set(next);\r\n this.draft.set('');\r\n this.valueChange.emit(next);\r\n }\r\n\r\n protected remove(idx: number): void {\r\n const next = this.chips().slice();\r\n next.splice(idx, 1);\r\n this.chips.set(next);\r\n this.valueChange.emit(next);\r\n }\r\n\r\n protected rootStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: '6px',\r\n minHeight: '36px',\r\n padding: '4px 8px',\r\n border: `1px solid ${theme.colors.border}`,\r\n borderRadius: theme.radii.md,\r\n background: theme.colors.surfaceElevated,\r\n cursor: this.isDisabled ? 'not-allowed' : 'text',\r\n opacity: this.isDisabled ? '0.6' : '1',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected chipStyle() {\r\n const theme = this.themeService.theme();\r\n return {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n padding: '2px 8px',\r\n borderRadius: theme.radii.full,\r\n background: theme.colors.intent.neutral.subtle,\r\n color: theme.colors.fg,\r\n fontSize: '12px',\r\n } as Record<string, string>;\r\n }\r\n\r\n protected closeBtnStyle() {\r\n return {\r\n border: 'none',\r\n background: 'transparent',\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n lineHeight: '1',\r\n padding: '0',\r\n color: this.themeService.theme().colors.fgSubtle,\r\n } as Record<string, string>;\r\n }\r\n\r\n protected inputStyle() {\r\n return {\r\n flex: '1',\r\n minWidth: '80px',\r\n border: 'none',\r\n outline: 'none',\r\n background: 'transparent',\r\n color: this.themeService.theme().colors.fg,\r\n fontSize: '14px',\r\n padding: '4px 0',\r\n } as Record<string, string>;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraInput } from './input.component';\r\nimport { ElvoraTable, type ElvoraTableColumn } from './table.component';\r\n\r\nexport interface ElvoraProTableColumn<Row = Record<string, unknown>> extends ElvoraTableColumn<Row> {\r\n searchable?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-pro-table',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, ElvoraInput, ElvoraTable],\r\n template: `\r\n <div [style.display]=\"'flex'\" [style.flexDirection]=\"'column'\" [style.gap]=\"'12px'\">\r\n <div\r\n *ngIf=\"title || search\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n [style.gap]=\"'12px'\"\r\n [style.flexWrap]=\"'wrap'\"\r\n >\r\n <div [style.color]=\"fgColor()\" [style.fontWeight]=\"'600'\" [style.fontSize]=\"'16px'\">{{ title }}</div>\r\n <elvora-input\r\n *ngIf=\"search\"\r\n [placeholder]=\"searchPlaceholder\"\r\n [value]=\"query()\"\r\n (valueChange)=\"query.set($event)\"\r\n />\r\n </div>\r\n <elvora-table\r\n [columns]=\"columns\"\r\n [dataSource]=\"filtered()\"\r\n [bordered]=\"true\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n <div\r\n *ngIf=\"filtered().length === 0\"\r\n [style.color]=\"mutedColor()\"\r\n [style.textAlign]=\"'center'\"\r\n [style.padding]=\"'24px'\"\r\n [style.fontSize]=\"'14px'\"\r\n >\r\n {{ empty }}\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraProTable<Row extends Record<string, unknown> = Record<string, unknown>> {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() title = '';\r\n @Input() columns: ElvoraProTableColumn<Row>[] = [];\r\n @Input() set dataSource(value: Row[]) {\r\n this._data.set(value);\r\n }\r\n get dataSource(): Row[] {\r\n return this._data();\r\n }\r\n @Input() search = true;\r\n @Input() searchPlaceholder = 'Search…';\r\n @Input() empty = 'No data';\r\n @Output() readonly rowClick = new EventEmitter<{ row: Row; index: number }>();\r\n\r\n protected readonly query = signal('');\r\n private readonly _data = signal<Row[]>([]);\r\n\r\n protected readonly filtered = computed<Row[]>(() => {\r\n const data = this._data();\r\n const q = this.query().trim().toLowerCase();\r\n if (!q) return data;\r\n const keys = this.columns.filter((c) => c.searchable !== false && c.dataIndex !== undefined).map((c) => String(c.dataIndex));\r\n return data.filter((row) =>\r\n keys.some((key) => String((row as Record<string, unknown>)[key] ?? '').toLowerCase().includes(q)),\r\n );\r\n });\r\n\r\n protected fgColor(): string {\r\n return this.themeService.theme().colors.fg;\r\n }\r\n protected mutedColor(): string {\r\n return this.themeService.theme().colors.fgMuted;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraInput } from './input.component';\r\nimport { ElvoraTextarea } from './textarea.component';\r\nimport { ElvoraCheckbox } from './checkbox.component';\r\nimport { ElvoraSwitch } from './switch.component';\r\nimport { ElvoraSelect, type ElvoraSelectOption } from './select.component';\r\nimport { ElvoraNumberInput } from './number-input.component';\r\nimport { ElvoraButton } from './button.component';\r\nimport { ElvoraLabel } from './label.component';\r\n\r\nexport type ElvoraProFormFieldType =\r\n | 'text'\r\n | 'password'\r\n | 'email'\r\n | 'number'\r\n | 'textarea'\r\n | 'switch'\r\n | 'checkbox'\r\n | 'select';\r\n\r\nexport interface ElvoraProFormField {\r\n name: string;\r\n label?: string;\r\n type: ElvoraProFormFieldType;\r\n placeholder?: string;\r\n hint?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n defaultValue?: unknown;\r\n options?: ElvoraSelectOption[];\r\n validate?: (value: unknown, values: Record<string, unknown>) => string | undefined;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-pro-form',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n NgFor,\r\n NgIf,\r\n NgSwitch,\r\n NgSwitchCase,\r\n NgSwitchDefault,\r\n ElvoraInput,\r\n ElvoraTextarea,\r\n ElvoraCheckbox,\r\n ElvoraSwitch,\r\n ElvoraSelect,\r\n ElvoraNumberInput,\r\n ElvoraButton,\r\n ElvoraLabel,\r\n ],\r\n template: `\r\n <form (submit)=\"$event.preventDefault(); handleSubmit()\" novalidate>\r\n <div\r\n *ngFor=\"let field of fields\"\r\n [style.display]=\"'flex'\"\r\n [style.flexDirection]=\"'column'\"\r\n [style.gap]=\"'6px'\"\r\n [style.marginBottom]=\"'16px'\"\r\n >\r\n <elvora-label *ngIf=\"field.label\" [isRequired]=\"!!field.required\">{{ field.label }}</elvora-label>\r\n <div [ngSwitch]=\"field.type\">\r\n <elvora-textarea\r\n *ngSwitchCase=\"'textarea'\"\r\n [value]=\"strValue(field.name)\"\r\n [placeholder]=\"field.placeholder ?? ''\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n [isInvalid]=\"!!error(field.name)\"\r\n (valueChange)=\"setValue(field.name, $event)\"\r\n />\r\n <elvora-select\r\n *ngSwitchCase=\"'select'\"\r\n [value]=\"strValue(field.name)\"\r\n [options]=\"field.options ?? []\"\r\n [placeholder]=\"field.placeholder\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n [isInvalid]=\"!!error(field.name)\"\r\n (valueChange)=\"setValue(field.name, $event)\"\r\n />\r\n <elvora-number-input\r\n *ngSwitchCase=\"'number'\"\r\n [value]=\"numberValue(field.name)\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n (valueChange)=\"setValue(field.name, $event)\"\r\n />\r\n <elvora-checkbox\r\n *ngSwitchCase=\"'checkbox'\"\r\n [isChecked]=\"boolValue(field.name)\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n (isCheckedChange)=\"setValue(field.name, $event)\"\r\n >\r\n {{ field.placeholder }}\r\n </elvora-checkbox>\r\n <elvora-switch\r\n *ngSwitchCase=\"'switch'\"\r\n [isChecked]=\"boolValue(field.name)\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n (isCheckedChange)=\"setValue(field.name, $event)\"\r\n />\r\n <elvora-input\r\n *ngSwitchDefault\r\n [type]=\"$any(field.type)\"\r\n [value]=\"strValue(field.name)\"\r\n [placeholder]=\"field.placeholder ?? ''\"\r\n [isDisabled]=\"!!field.disabled || !!isSubmitting\"\r\n [isInvalid]=\"!!error(field.name)\"\r\n (valueChange)=\"setValue(field.name, $event)\"\r\n />\r\n </div>\r\n <div\r\n *ngIf=\"!error(field.name) && field.hint\"\r\n [style.fontSize]=\"'12px'\"\r\n [style.color]=\"mutedColor()\"\r\n >\r\n {{ field.hint }}\r\n </div>\r\n <div\r\n *ngIf=\"error(field.name)\"\r\n role=\"alert\"\r\n [style.fontSize]=\"'12px'\"\r\n [style.color]=\"dangerColor()\"\r\n >\r\n {{ error(field.name) }}\r\n </div>\r\n </div>\r\n <div\r\n [style.display]=\"'flex'\"\r\n [style.justifyContent]=\"'flex-end'\"\r\n [style.gap]=\"'8px'\"\r\n [style.marginTop]=\"'8px'\"\r\n >\r\n <elvora-button *ngIf=\"resetLabel\" variant=\"ghost\" type=\"button\" (click)=\"reset()\" [isDisabled]=\"!!isSubmitting\">\r\n {{ resetLabel }}\r\n </elvora-button>\r\n <elvora-button type=\"submit\" [isLoading]=\"!!isSubmitting\">{{ submitLabel }}</elvora-button>\r\n </div>\r\n </form>\r\n `,\r\n})\r\nexport class ElvoraProForm {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() fields: ElvoraProFormField[] = [];\r\n @Input() set initialValues(value: Record<string, unknown> | null | undefined) {\r\n if (!value) return;\r\n this._initial.set({ ...value });\r\n this._values.set({ ...value });\r\n }\r\n @Input() submitLabel = 'Submit';\r\n @Input() resetLabel?: string;\r\n @Input() isSubmitting = false;\r\n\r\n @Output() readonly formSubmit = new EventEmitter<Record<string, unknown>>();\r\n @Output() readonly valuesChange = new EventEmitter<Record<string, unknown>>();\r\n\r\n private readonly _initial = signal<Record<string, unknown>>({});\r\n private readonly _values = signal<Record<string, unknown>>({});\r\n private readonly _errors = signal<Record<string, string | undefined>>({});\r\n\r\n protected strValue(name: string): string {\r\n const v = this._values()[name];\r\n return v == null ? '' : String(v);\r\n }\r\n protected numberValue(name: string): number {\r\n const v = this._values()[name];\r\n return typeof v === 'number' ? v : Number(v ?? 0);\r\n }\r\n protected boolValue(name: string): boolean {\r\n return Boolean(this._values()[name]);\r\n }\r\n protected error(name: string): string | undefined {\r\n return this._errors()[name];\r\n }\r\n\r\n protected mutedColor(): string {\r\n return this.themeService.theme().colors.fgMuted;\r\n }\r\n protected dangerColor(): string {\r\n return this.themeService.theme().colors.intent.danger.solid;\r\n }\r\n\r\n setValue(name: string, value: unknown) {\r\n const next = { ...this._values(), [name]: value };\r\n this._values.set(next);\r\n const errs = { ...this._errors() };\r\n delete errs[name];\r\n this._errors.set(errs);\r\n this.valuesChange.emit(next);\r\n }\r\n\r\n reset() {\r\n this._values.set({ ...this._initial() });\r\n this._errors.set({});\r\n }\r\n\r\n handleSubmit() {\r\n const values = this._values();\r\n const next: Record<string, string | undefined> = {};\r\n for (const f of this.fields) {\r\n const v = values[f.name];\r\n if (f.required && (v === undefined || v === null || v === '')) {\r\n next[f.name] = 'This field is required';\r\n continue;\r\n }\r\n if (f.validate) {\r\n const msg = f.validate(v, values);\r\n if (msg) next[f.name] = msg;\r\n }\r\n }\r\n this._errors.set(next);\r\n const valid = Object.values(next).every((e) => !e);\r\n if (!valid) return;\r\n this.formSubmit.emit(values);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\nimport { ElvoraAvatar } from './avatar.component';\r\nimport { ElvoraIcon } from './icon.component';\r\nimport type { IconName } from '@elvora/icons';\r\n\r\nexport interface ElvoraProLayoutMenuItem {\r\n key: string;\r\n label: string;\r\n icon?: IconName;\r\n children?: ElvoraProLayoutMenuItem[];\r\n}\r\n\r\nexport interface ElvoraProLayoutUser {\r\n name: string;\r\n avatar?: string;\r\n caption?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-pro-layout',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, ElvoraAvatar, ElvoraIcon],\r\n template: `\r\n <div\r\n [style.display]=\"'flex'\"\r\n [style.minHeight]=\"'100vh'\"\r\n [style.background]=\"bg()\"\r\n [style.color]=\"fg()\"\r\n >\r\n <aside\r\n [style.width]=\"sidebarWidth + 'px'\"\r\n [style.borderRight]=\"'1px solid ' + border()\"\r\n [style.background]=\"surface()\"\r\n [style.padding]=\"'16px'\"\r\n [style.display]=\"'flex'\"\r\n [style.flexDirection]=\"'column'\"\r\n [style.gap]=\"'16px'\"\r\n >\r\n <div *ngIf=\"brand\" [style.fontWeight]=\"'600'\" [style.fontSize]=\"'16px'\">{{ brand }}</div>\r\n <nav role=\"navigation\" [style.flex]=\"'1'\" [style.overflowY]=\"'auto'\">\r\n <ng-container *ngFor=\"let item of menu\">\r\n <button\r\n type=\"button\"\r\n [attr.aria-current]=\"active() === item.key ? 'page' : null\"\r\n (click)=\"onSelect(item.key)\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n [style.width]=\"'100%'\"\r\n [style.padding]=\"'8px 12px'\"\r\n [style.border]=\"'none'\"\r\n [style.background]=\"active() === item.key ? primarySubtle() : 'transparent'\"\r\n [style.color]=\"active() === item.key ? primaryFg() : fg()\"\r\n [style.borderRadius]=\"'6px'\"\r\n [style.cursor]=\"'pointer'\"\r\n [style.fontWeight]=\"active() === item.key ? '600' : '400'\"\r\n [style.fontSize]=\"'14px'\"\r\n [style.marginBottom]=\"'2px'\"\r\n [style.textAlign]=\"'left'\"\r\n >\r\n <elvora-icon *ngIf=\"item.icon\" [name]=\"item.icon\" [size]=\"16\" />\r\n {{ item.label }}\r\n </button>\r\n <ng-container *ngIf=\"item.children?.length\">\r\n <button\r\n *ngFor=\"let child of item.children\"\r\n type=\"button\"\r\n (click)=\"onSelect(child.key)\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n [style.width]=\"'100%'\"\r\n [style.padding]=\"'6px 12px 6px 28px'\"\r\n [style.border]=\"'none'\"\r\n [style.background]=\"active() === child.key ? primarySubtle() : 'transparent'\"\r\n [style.color]=\"active() === child.key ? primaryFg() : fg()\"\r\n [style.borderRadius]=\"'6px'\"\r\n [style.cursor]=\"'pointer'\"\r\n [style.fontSize]=\"'13px'\"\r\n [style.textAlign]=\"'left'\"\r\n >\r\n <elvora-icon *ngIf=\"child.icon\" [name]=\"child.icon\" [size]=\"14\" />\r\n {{ child.label }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </nav>\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </aside>\r\n <section [style.flex]=\"'1'\" [style.display]=\"'flex'\" [style.flexDirection]=\"'column'\">\r\n <header\r\n *ngIf=\"user || headerVisible\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n [style.gap]=\"'12px'\"\r\n [style.padding]=\"'12px 16px'\"\r\n [style.borderBottom]=\"'1px solid ' + border()\"\r\n [style.background]=\"surface()\"\r\n >\r\n <div [style.flex]=\"'1'\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n </div>\r\n <div\r\n *ngIf=\"user\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.gap]=\"'8px'\"\r\n >\r\n <elvora-avatar [src]=\"user.avatar\" [name]=\"user.name\" size=\"sm\" />\r\n <div>\r\n <div [style.fontSize]=\"'14px'\" [style.fontWeight]=\"'500'\">{{ user.name }}</div>\r\n <div *ngIf=\"user.caption\" [style.fontSize]=\"'12px'\" [style.color]=\"muted()\">{{ user.caption }}</div>\r\n </div>\r\n </div>\r\n </header>\r\n <main [style.flex]=\"'1'\" [style.padding]=\"'16px'\" [style.overflow]=\"'auto'\">\r\n <ng-content></ng-content>\r\n </main>\r\n </section>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraProLayout {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() brand?: string;\r\n @Input() menu: ElvoraProLayoutMenuItem[] = [];\r\n @Input() user?: ElvoraProLayoutUser;\r\n @Input() sidebarWidth = 240;\r\n @Input() headerVisible = true;\r\n @Input() set selectedKey(value: string | null | undefined) {\r\n if (value) this.active.set(value);\r\n }\r\n @Output() readonly selectionChange = new EventEmitter<string>();\r\n\r\n protected readonly active = signal<string | null>(null);\r\n\r\n onSelect(key: string) {\r\n this.active.set(key);\r\n this.selectionChange.emit(key);\r\n }\r\n\r\n protected bg(): string {\r\n return this.themeService.theme().colors.background;\r\n }\r\n protected surface(): string {\r\n return this.themeService.theme().colors.surfaceElevated;\r\n }\r\n protected border(): string {\r\n return this.themeService.theme().colors.border;\r\n }\r\n protected fg(): string {\r\n return this.themeService.theme().colors.fg;\r\n }\r\n protected muted(): string {\r\n return this.themeService.theme().colors.fgMuted;\r\n }\r\n protected primarySubtle(): string {\r\n return this.themeService.theme().colors.intent.primary.subtle;\r\n }\r\n protected primaryFg(): string {\r\n return this.themeService.theme().colors.intent.primary.solid;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgFor, NgIf, NgStyle } from '@angular/common';\r\nimport { ElvoraThemeService } from './theme.service';\r\n\r\nexport type ElvoraDataGridSortOrder = 'asc' | 'desc' | null;\r\n\r\nexport interface ElvoraDataGridColumn<Row = Record<string, unknown>> {\r\n key: string;\r\n title: string;\r\n dataIndex?: keyof Row | string;\r\n width?: number;\r\n sortable?: boolean;\r\n sorter?: (a: Row, b: Row) => number;\r\n align?: 'left' | 'center' | 'right';\r\n}\r\n\r\nfunction defaultCompare(a: unknown, b: unknown): number {\r\n if (a == null && b == null) return 0;\r\n if (a == null) return -1;\r\n if (b == null) return 1;\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n return String(a).localeCompare(String(b));\r\n}\r\n\r\n@Component({\r\n selector: 'elvora-data-grid',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [NgFor, NgIf, NgStyle],\r\n template: `\r\n <div\r\n [style.position]=\"'relative'\"\r\n [style.overflow]=\"'auto'\"\r\n [style.height.px]=\"height\"\r\n [style.border]=\"'1px solid ' + border()\"\r\n [style.borderRadius]=\"'8px'\"\r\n [style.background]=\"surface()\"\r\n (scroll)=\"onScroll($any($event).target)\"\r\n >\r\n <div [style.height.px]=\"totalHeight()\" [style.position]=\"'relative'\">\r\n <div\r\n [style.position]=\"'sticky'\"\r\n [style.top]=\"'0'\"\r\n [style.background]=\"headerBg()\"\r\n [style.zIndex]=\"'1'\"\r\n [style.display]=\"'flex'\"\r\n [style.borderBottom]=\"'1px solid ' + border()\"\r\n >\r\n <div\r\n *ngFor=\"let col of columns\"\r\n [style.width.px]=\"col.width ?? 120\"\r\n [style.padding]=\"'8px 12px'\"\r\n [style.fontWeight]=\"'600'\"\r\n [style.cursor]=\"col.sortable ? 'pointer' : 'default'\"\r\n [style.userSelect]=\"'none'\"\r\n [style.textAlign]=\"col.align ?? 'left'\"\r\n (click)=\"col.sortable ? toggleSort(col.key) : null\"\r\n >\r\n {{ col.title }}\r\n <span *ngIf=\"col.sortable\" [style.color]=\"mutedColor()\" [style.marginLeft]=\"'4px'\">\r\n {{ sortKey() === col.key ? (sortOrder() === 'asc' ? '↑' : sortOrder() === 'desc' ? '↓' : '⇅') : '⇅' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n *ngFor=\"let entry of visible(); trackBy: trackEntry\"\r\n [style.position]=\"'absolute'\"\r\n [style.top.px]=\"entry.top\"\r\n [style.left]=\"'0'\"\r\n [style.right]=\"'0'\"\r\n [style.display]=\"'flex'\"\r\n [style.height.px]=\"rowHeight\"\r\n [style.alignItems]=\"'center'\"\r\n [style.borderBottom]=\"'1px solid ' + border()\"\r\n (click)=\"rowClick.emit({ row: entry.row, index: entry.index })\"\r\n >\r\n <div\r\n *ngFor=\"let col of columns\"\r\n [style.width.px]=\"col.width ?? 120\"\r\n [style.padding]=\"'0 12px'\"\r\n [style.textAlign]=\"col.align ?? 'left'\"\r\n >\r\n {{ cell(entry.row, col) }}\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"sorted().length === 0\"\r\n [style.position]=\"'absolute'\"\r\n [style.top]=\"'40px'\"\r\n [style.left]=\"'0'\"\r\n [style.right]=\"'0'\"\r\n [style.padding]=\"'24px'\"\r\n [style.textAlign]=\"'center'\"\r\n [style.color]=\"mutedColor()\"\r\n >\r\n {{ empty }}\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class ElvoraDataGrid<Row extends Record<string, unknown> = Record<string, unknown>> {\r\n private readonly themeService = inject(ElvoraThemeService);\r\n\r\n @Input() columns: ElvoraDataGridColumn<Row>[] = [];\r\n @Input() set dataSource(value: Row[]) {\r\n this._data.set(value);\r\n }\r\n get dataSource(): Row[] {\r\n return this._data();\r\n }\r\n @Input() rowHeight = 36;\r\n @Input() height = 400;\r\n @Input() overscan = 6;\r\n @Input() empty = 'No data';\r\n @Output() readonly rowClick = new EventEmitter<{ row: Row; index: number }>();\r\n\r\n private readonly _data = signal<Row[]>([]);\r\n protected readonly sortKey = signal<string | null>(null);\r\n protected readonly sortOrder = signal<ElvoraDataGridSortOrder>(null);\r\n protected readonly scrollTop = signal(0);\r\n\r\n protected readonly sorted = computed<Row[]>(() => {\r\n const data = this._data();\r\n const key = this.sortKey();\r\n const order = this.sortOrder();\r\n if (!key || !order) return data;\r\n const col = this.columns.find((c) => c.key === key);\r\n if (!col || !col.sortable) return data;\r\n const arr = [...data];\r\n const compare = col.sorter\r\n ? col.sorter\r\n : (a: Row, b: Row) => defaultCompare(a[col.dataIndex as keyof Row], b[col.dataIndex as keyof Row]);\r\n arr.sort((a, b) => (order === 'asc' ? compare(a, b) : -compare(a, b)));\r\n return arr;\r\n });\r\n\r\n protected readonly totalHeight = computed(() => 40 + this.sorted().length * this.rowHeight);\r\n\r\n protected readonly visible = computed(() => {\r\n const rows = this.sorted();\r\n const headerOffset = 40;\r\n const top = Math.max(0, this.scrollTop() - headerOffset);\r\n const startIndex = Math.max(0, Math.floor(top / this.rowHeight) - this.overscan);\r\n const visibleCount = Math.ceil((this.height - headerOffset) / this.rowHeight) + this.overscan * 2;\r\n const endIndex = Math.min(rows.length, startIndex + visibleCount);\r\n const out: Array<{ row: Row; index: number; top: number; key: string }> = [];\r\n for (let i = startIndex; i < endIndex; i++) {\r\n const row = rows[i];\r\n if (!row) continue;\r\n out.push({ row, index: i, top: headerOffset + i * this.rowHeight, key: String(i) });\r\n }\r\n return out;\r\n });\r\n\r\n trackEntry = (_: number, entry: { key: string }): string => entry.key;\r\n\r\n protected onScroll(target: HTMLElement) {\r\n this.scrollTop.set(target.scrollTop);\r\n }\r\n\r\n toggleSort(key: string) {\r\n if (this.sortKey() !== key) {\r\n this.sortKey.set(key);\r\n this.sortOrder.set('asc');\r\n return;\r\n }\r\n const order = this.sortOrder();\r\n if (order === 'asc') this.sortOrder.set('desc');\r\n else if (order === 'desc') {\r\n this.sortKey.set(null);\r\n this.sortOrder.set(null);\r\n } else this.sortOrder.set('asc');\r\n }\r\n\r\n protected cell(row: Row, col: ElvoraDataGridColumn<Row>): unknown {\r\n if (col.dataIndex == null) return '';\r\n return (row as Record<string, unknown>)[col.dataIndex as string];\r\n }\r\n\r\n protected border(): string {\r\n return this.themeService.theme().colors.border;\r\n }\r\n protected surface(): string {\r\n return this.themeService.theme().colors.surfaceElevated;\r\n }\r\n protected headerBg(): string {\r\n return this.themeService.theme().colors.intent.neutral.subtle;\r\n }\r\n protected mutedColor(): string {\r\n return this.themeService.theme().colors.fgMuted;\r\n }\r\n}\r\n"]}
|