@doku-com/tala 1.0.0-alpha.1 → 1.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"doku-com-tala.mjs","sources":["../../../projects/doku-tala/src/lib/components/avatar/avatar.ts","../../../projects/doku-tala/src/lib/components/avatar/avatar.html","../../../projects/doku-tala/src/lib/components/avatar/avatar-group.ts","../../../projects/doku-tala/src/lib/components/button/button.ts","../../../projects/doku-tala/src/lib/components/button/button.html","../../../projects/doku-tala/src/public-api.ts","../../../projects/doku-tala/src/doku-com-tala.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'square';\nexport type AvatarStatus = 'none' | 'online' | 'busy' | 'away' | 'offline';\n\n@Component({\n selector: 'tala-avatar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n host: {\n '[class]': 'hostClasses()',\n '[style.background-color]': 'bgColor()',\n '[attr.role]': '\"img\"',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class TalaAvatar {\n readonly name = input<string>('');\n readonly size = input<AvatarSize>('md');\n readonly shape = input<AvatarShape>('circle');\n readonly status = input<AvatarStatus>('none');\n readonly badgeCount = input<number>(0);\n readonly src = input<string>('');\n\n protected readonly initials = computed(() => this.getInitials(this.name()));\n\n protected readonly bgColor = computed(() =>\n this.src()\n ? 'transparent'\n : this.palette[this.hashName(this.name() || 'default') % this.palette.length],\n );\n\n protected readonly hasStatus = computed(() => this.status() !== 'none');\n protected readonly hasBadge = computed(() => !!this.badgeCount());\n\n protected readonly displayBadge = computed(() => {\n const count = this.badgeCount();\n return count > 99 ? '99+' : String(count);\n });\n\n protected readonly ariaLabel = computed(() => {\n const parts = [this.name() || 'Avatar'];\n if (this.hasStatus()) parts.push(`Status: ${this.status()}`);\n const count = this.badgeCount();\n if (count !== 0) parts.push(`${count} notification${count !== 1 ? 's' : ''}`);\n return parts.join(', ');\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-avatar',\n `tala-avatar--${this.size()}`,\n `tala-avatar--${this.shape()}`,\n this.src() ? 'tala-avatar--image' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n private readonly palette = [\n 'var(--color-blue-60)',\n 'var(--color-green-60)',\n 'var(--color-red-60)',\n 'var(--color-amber-60)',\n 'var(--color-blue-70)',\n 'var(--color-green-70)',\n 'var(--color-red-70)',\n 'var(--color-amber-70)',\n ];\n\n private hashName(name: string): number {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = (name.charCodeAt(i) + ((hash << 5) - hash)) | 0;\n }\n return Math.abs(hash);\n }\n\n private getInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '?';\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n }\n}\n","@if (src()) {\n <img class=\"tala-avatar__image\" [src]=\"src()\" [alt]=\"name()\" />\n} @else {\n <span class=\"tala-avatar__initials\">{{ initials() }}</span>\n}\n\n@if (hasStatus()) {\n <span [class]=\"'tala-avatar__status tala-avatar__status--' + status()\" role=\"presentation\"></span>\n}\n\n@if (hasBadge()) {\n <span class=\"tala-avatar__badge\" aria-hidden=\"true\">\n {{ displayBadge() }}\n </span>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport type { AvatarSize } from './avatar';\n\n@Component({\n selector: 'tala-avatar-group',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n styleUrl: './avatar-group.scss',\n host: {\n '[class]': '\"tala-avatar-group--\" + size()',\n role: 'group',\n },\n})\nexport class TalaAvatarGroup {\n readonly size = input<AvatarSize>('md');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'accent' | 'danger' | 'link';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'tala-button',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '\"button\"',\n '[attr.tabindex]': 'disabled() ? \"-1\" : \"0\"',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-busy]': 'loading() || null',\n '(click)': '_onClick($event)',\n '(keydown.enter)': '_onKeydown($event)',\n '(keydown.space)': '_onKeydown($event)',\n },\n})\nexport class TalaButton {\n readonly variant = input<ButtonVariant>('primary');\n readonly size = input<ButtonSize>('md');\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly iconOnly = input<boolean>(false);\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-button',\n `tala-button--${this.variant()}`,\n `tala-button--${this.size()}`,\n this.disabled() ? 'tala-button--disabled' : '',\n this.loading() ? 'tala-button--loading' : '',\n this.iconOnly() ? 'tala-button--icon-only' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n protected _onClick(event: MouseEvent): void {\n if (this.disabled() || this.loading()) {\n event.stopImmediatePropagation();\n }\n }\n\n protected _onKeydown(event: Event): void {\n if (this.disabled() || this.loading()) return;\n event.preventDefault();\n (event.currentTarget as HTMLElement).click();\n }\n}\n","@if (loading()) {\n <span class=\"tala-button__spinner\" aria-hidden=\"true\"></span>\n}\n\n<ng-content select=\"[slot=prefix]\"></ng-content>\n<ng-content></ng-content>\n<ng-content select=\"[slot=suffix]\"></ng-content>\n","/*\n * Public API Surface of doku-tala\n */\n\nexport * from './lib/components/avatar';\nexport * from './lib/components/button';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doku-com-tala.mjs","sources":["../../../projects/doku-tala/src/lib/components/avatar/avatar.ts","../../../projects/doku-tala/src/lib/components/avatar/avatar.html","../../../projects/doku-tala/src/lib/components/avatar/avatar-group.ts","../../../projects/doku-tala/src/lib/components/button/button.ts","../../../projects/doku-tala/src/lib/components/button/button.html","../../../projects/doku-tala/src/lib/components/input/input.ts","../../../projects/doku-tala/src/lib/components/input/input.html","../../../projects/doku-tala/src/lib/components/select/select.ts","../../../projects/doku-tala/src/lib/components/select/select.html","../../../projects/doku-tala/src/public-api.ts","../../../projects/doku-tala/src/doku-com-tala.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'square';\nexport type AvatarStatus = 'none' | 'online' | 'busy' | 'away' | 'offline';\n\n@Component({\n selector: 'tala-avatar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n host: {\n '[class]': 'hostClasses()',\n '[style.background-color]': 'bgColor()',\n '[attr.role]': '\"img\"',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class TalaAvatar {\n readonly name = input<string>('');\n readonly size = input<AvatarSize>('md');\n readonly shape = input<AvatarShape>('circle');\n readonly status = input<AvatarStatus>('none');\n readonly badgeCount = input<number>(0);\n readonly src = input<string>('');\n\n protected readonly initials = computed(() => this.getInitials(this.name()));\n\n protected readonly bgColor = computed(() =>\n this.src()\n ? 'transparent'\n : this.palette[this.hashName(this.name() || 'default') % this.palette.length],\n );\n\n protected readonly hasStatus = computed(() => this.status() !== 'none');\n protected readonly hasBadge = computed(() => !!this.badgeCount());\n\n protected readonly displayBadge = computed(() => {\n const count = this.badgeCount();\n return count > 99 ? '99+' : String(count);\n });\n\n protected readonly ariaLabel = computed(() => {\n const parts = [this.name() || 'Avatar'];\n if (this.hasStatus()) parts.push(`Status: ${this.status()}`);\n const count = this.badgeCount();\n if (count !== 0) parts.push(`${count} notification${count !== 1 ? 's' : ''}`);\n return parts.join(', ');\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-avatar',\n `tala-avatar--${this.size()}`,\n `tala-avatar--${this.shape()}`,\n this.src() ? 'tala-avatar--image' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n private readonly palette = [\n 'var(--color-blue-60)',\n 'var(--color-green-60)',\n 'var(--color-red-60)',\n 'var(--color-amber-60)',\n 'var(--color-blue-70)',\n 'var(--color-green-70)',\n 'var(--color-red-70)',\n 'var(--color-amber-70)',\n ];\n\n private hashName(name: string): number {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = (name.charCodeAt(i) + ((hash << 5) - hash)) | 0;\n }\n return Math.abs(hash);\n }\n\n private getInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '?';\n if (words.length === 1) return words[0].slice(0, 2).toUpperCase();\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n }\n}\n","@if (src()) {\n <img class=\"tala-avatar__image\" [src]=\"src()\" [alt]=\"name()\" />\n} @else {\n <span class=\"tala-avatar__initials\">{{ initials() }}</span>\n}\n\n@if (hasStatus()) {\n <span [class]=\"'tala-avatar__status tala-avatar__status--' + status()\" role=\"presentation\"></span>\n}\n\n@if (hasBadge()) {\n <span class=\"tala-avatar__badge\" aria-hidden=\"true\">\n {{ displayBadge() }}\n </span>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport type { AvatarSize } from './avatar';\n\n@Component({\n selector: 'tala-avatar-group',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n styleUrl: './avatar-group.scss',\n host: {\n '[class]': '\"tala-avatar-group--\" + size()',\n role: 'group',\n },\n})\nexport class TalaAvatarGroup {\n readonly size = input<AvatarSize>('md');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'accent' | 'danger' | 'link';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'tala-button',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '\"button\"',\n '[attr.tabindex]': 'disabled() ? \"-1\" : \"0\"',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-busy]': 'loading() || null',\n '(click)': '_onClick($event)',\n '(keydown.enter)': '_onKeydown($event)',\n '(keydown.space)': '_onKeydown($event)',\n },\n})\nexport class TalaButton {\n readonly variant = input<ButtonVariant>('primary');\n readonly size = input<ButtonSize>('md');\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly iconOnly = input<boolean>(false);\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-button',\n `tala-button--${this.variant()}`,\n `tala-button--${this.size()}`,\n this.disabled() ? 'tala-button--disabled' : '',\n this.loading() ? 'tala-button--loading' : '',\n this.iconOnly() ? 'tala-button--icon-only' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n protected _onClick(event: MouseEvent): void {\n if (this.disabled() || this.loading()) {\n event.stopImmediatePropagation();\n }\n }\n\n protected _onKeydown(event: Event): void {\n if (this.disabled() || this.loading()) return;\n event.preventDefault();\n (event.currentTarget as HTMLElement).click();\n }\n}\n","@if (loading()) {\n <span class=\"tala-button__spinner\" aria-hidden=\"true\"></span>\n}\n\n<ng-content select=\"[slot=prefix]\"></ng-content>\n<ng-content></ng-content>\n<ng-content select=\"[slot=suffix]\"></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type InputSize = 'sm' | 'md' | 'lg';\nexport type InputStatus = 'default' | 'error' | 'success' | 'warning';\n\n@Component({\n selector: 'tala-input',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './input.html',\n styleUrl: './input.scss',\n host: {\n '[class]': 'hostClasses()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TalaInput),\n multi: true,\n },\n ],\n})\nexport class TalaInput implements ControlValueAccessor {\n private static _nextId = 0;\n\n readonly size = input<InputSize>('md');\n readonly status = input<InputStatus>('default');\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly helperText = input<string>('');\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly prefix = input<string>('');\n readonly suffix = input<string>('');\n readonly type = input<string>('text');\n readonly name = input<string>('');\n\n protected readonly _id = `tala-input-${++TalaInput._nextId}`;\n protected readonly _helperId = `${this._id}-helper`;\n\n protected readonly _value = signal<string>('');\n protected readonly _disabledByForm = signal<boolean>(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._disabledByForm());\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-input',\n `tala-input--${this.size()}`,\n `tala-input--${this.status()}`,\n this._isDisabled() ? 'tala-input--disabled' : '',\n this.readonly() ? 'tala-input--readonly' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n private _onChange: (value: string) => void = () => {};\n private _onTouched: () => void = () => {};\n\n writeValue(value: string): void {\n this._value.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByForm.set(isDisabled);\n }\n\n protected _onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this._value.set(value);\n this._onChange(value);\n }\n\n protected _onBlur(): void {\n this._onTouched();\n }\n}\n","@if (label()) {\n <div class=\"tala-input__label-row\">\n <label class=\"tala-input__label\" [attr.for]=\"_id\">{{ label() }}</label>\n @if (required()) {\n <span class=\"tala-input__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"tala-input__container\"\n [class.tala-input__container--has-prefix]=\"prefix()\"\n [class.tala-input__container--has-suffix]=\"suffix()\"\n>\n @if (prefix()) {\n <div class=\"tala-input__prefix\">{{ prefix() }}</div>\n }\n <ng-content select=\"[slot=leading-icon]\"></ng-content>\n <input\n class=\"tala-input__field\"\n [id]=\"_id\"\n [type]=\"type()\"\n [name]=\"name()\"\n [placeholder]=\"placeholder()\"\n [value]=\"_value()\"\n [disabled]=\"_isDisabled()\"\n [attr.readonly]=\"readonly() || null\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"status() === 'error' || null\"\n [attr.aria-describedby]=\"helperText() && !_isDisabled() ? _helperId : null\"\n (input)=\"_onInput($event)\"\n (blur)=\"_onBlur()\"\n />\n <ng-content select=\"[slot=trailing-icon]\"></ng-content>\n @if (suffix()) {\n <div class=\"tala-input__suffix\">{{ suffix() }}</div>\n }\n</div>\n\n@if (helperText() && !_isDisabled()) {\n <div class=\"tala-input__helper-row\" [id]=\"_helperId\">\n <span class=\"tala-input__helper\">{{ helperText() }}</span>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type SelectType = 'single' | 'searchable' | 'multi';\nexport type SelectSize = 'sm' | 'md' | 'lg';\nexport type SelectStatus = 'default' | 'error' | 'success';\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'tala-select',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './select.html',\n styleUrl: './select.scss',\n host: {\n '[class]': 'hostClasses()',\n '[style.width]': '_hostWidth()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TalaSelect),\n multi: true,\n },\n ],\n})\nexport class TalaSelect implements ControlValueAccessor {\n private static _nextId = 0;\n private readonly _elementRef = inject(ElementRef);\n\n readonly type = input<SelectType>('single');\n readonly size = input<SelectSize>('md');\n readonly status = input<SelectStatus>('default');\n readonly options = input<SelectOption[]>([]);\n readonly placeholder = input<string>('');\n readonly label = input<string>('');\n readonly helperText = input<string>('');\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly width = input<'auto' | 'full' | string>('full');\n\n protected readonly _id = `tala-select-${++TalaSelect._nextId}`;\n protected readonly _helperId = `${this._id}-helper`;\n protected readonly _listboxId = `${this._id}-listbox`;\n\n protected readonly _isOpen = signal(false);\n protected readonly _value = signal<string | string[]>('');\n protected readonly _searchQuery = signal('');\n protected readonly _focusedIndex = signal(-1);\n protected readonly _disabledByForm = signal(false);\n\n protected readonly _isDisabled = computed(() => this.disabled() || this._disabledByForm());\n\n protected readonly _hostWidth = computed(() => {\n const w = this.width();\n if (w === 'full') return '100%';\n if (w === 'auto') return 'fit-content';\n return w;\n });\n\n protected readonly _filteredOptions = computed(() => {\n const opts = this.options();\n if (this.type() !== 'searchable') return opts;\n const q = this._searchQuery().toLowerCase().trim();\n if (!q) return opts;\n return opts.filter((o) => o.label.toLowerCase().includes(q));\n });\n\n protected readonly _hasValue = computed(() => {\n const v = this._value();\n return Array.isArray(v) ? v.length > 0 : v !== '';\n });\n\n protected readonly _displayValue = computed(() => {\n const v = this._value();\n const opts = this.options();\n if (this.type() === 'multi') {\n return (v as string[]).map((val) => opts.find((o) => o.value === val)?.label ?? val).join(', ');\n }\n return opts.find((o) => o.value === (v as string))?.label ?? '';\n });\n\n protected readonly _selectedLabels = computed(() => {\n const v = this._value();\n const opts = this.options();\n if (!Array.isArray(v)) return [];\n return v.map((val) => ({ value: val, label: opts.find((o) => o.value === val)?.label ?? val }));\n });\n\n protected readonly hostClasses = computed(() =>\n [\n 'tala-select',\n `tala-select--${this.size()}`,\n `tala-select--${this.status()}`,\n this._isOpen() ? 'tala-select--open' : '',\n this._isDisabled() ? 'tala-select--disabled' : '',\n this.loading() ? 'tala-select--loading' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n private _onChange: (value: string | string[]) => void = () => {};\n private _onTouched: () => void = () => {};\n\n @HostListener('document:click', ['$event.target'])\n _onDocumentClick(target: EventTarget | null): void {\n if (!this._elementRef.nativeElement.contains(target)) {\n this._isOpen.set(false);\n this._searchQuery.set('');\n this._focusedIndex.set(-1);\n }\n }\n\n writeValue(value: string | string[]): void {\n if (this.type() === 'multi') {\n this._value.set(Array.isArray(value) ? value : value ? [value] : []);\n } else {\n this._value.set(typeof value === 'string' ? value : '');\n }\n }\n\n registerOnChange(fn: (value: string | string[]) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByForm.set(isDisabled);\n }\n\n protected _onTriggerClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this._isDisabled() || this.loading()) return;\n if (this._isOpen()) {\n this._isOpen.set(false);\n this._searchQuery.set('');\n this._focusedIndex.set(-1);\n } else {\n this._isOpen.set(true);\n }\n }\n\n protected _onTriggerKeydown(event: KeyboardEvent): void {\n if (this._isDisabled() || this.loading()) return;\n\n switch (event.key) {\n case ' ':\n case 'Enter':\n event.preventDefault();\n if (!this._isOpen()) {\n this._isOpen.set(true);\n } else if (this._focusedIndex() >= 0) {\n const opt = this._filteredOptions()[this._focusedIndex()];\n if (opt && !opt.disabled) this._selectOption(opt, event);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this._isOpen.set(false);\n this._searchQuery.set('');\n this._focusedIndex.set(-1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this._isOpen()) {\n this._isOpen.set(true);\n } else {\n const max = this._filteredOptions().length - 1;\n this._focusedIndex.update((i) => Math.min(i + 1, max));\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this._isOpen()) {\n this._focusedIndex.update((i) => Math.max(i - 1, 0));\n }\n break;\n }\n }\n\n protected _selectOption(opt: SelectOption, event: Event): void {\n event.stopPropagation();\n if (opt.disabled) return;\n\n if (this.type() === 'multi') {\n const current = this._value() as string[];\n const idx = current.indexOf(opt.value);\n const next = idx >= 0 ? current.filter((v) => v !== opt.value) : [...current, opt.value];\n this._value.set(next);\n this._onChange(next);\n } else {\n this._value.set(opt.value);\n this._onChange(opt.value);\n this._isOpen.set(false);\n this._searchQuery.set('');\n this._focusedIndex.set(-1);\n }\n this._onTouched();\n }\n\n protected _removeChip(value: string, event: MouseEvent): void {\n event.stopPropagation();\n const current = this._value() as string[];\n const next = current.filter((v) => v !== value);\n this._value.set(next);\n this._onChange(next);\n this._onTouched();\n }\n\n protected _isSelected(value: string): boolean {\n const v = this._value();\n return Array.isArray(v) ? v.includes(value) : v === value;\n }\n\n protected _onSearchInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this._searchQuery.set(input.value);\n this._focusedIndex.set(-1);\n }\n\n protected _onDropdownClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n protected _onSearchKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this._focusedIndex.update((i) => Math.min(i + 1, this._filteredOptions().length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this._focusedIndex.update((i) => Math.max(i - 1, 0));\n break;\n case 'Enter':\n event.preventDefault();\n if (this._focusedIndex() >= 0) {\n const opt = this._filteredOptions()[this._focusedIndex()];\n if (opt && !opt.disabled) this._selectOption(opt, event);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this._isOpen.set(false);\n this._searchQuery.set('');\n this._focusedIndex.set(-1);\n break;\n }\n }\n}\n","@if (label()) {\n <div class=\"tala-select__label-row\">\n <label class=\"tala-select__label\" [attr.for]=\"_id\">{{ label() }}</label>\n @if (required()) {\n <span class=\"tala-select__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"tala-select__trigger\"\n [id]=\"_id\"\n role=\"combobox\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"_isOpen()\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-disabled]=\"_isDisabled() || null\"\n [attr.aria-invalid]=\"status() === 'error' || null\"\n [attr.aria-describedby]=\"helperText() && !_isDisabled() ? _helperId : null\"\n (click)=\"_onTriggerClick($event)\"\n (keydown)=\"_onTriggerKeydown($event)\"\n>\n <div class=\"tala-select__trigger-content\">\n @if (type() === 'multi' && _hasValue()) {\n <div class=\"tala-select__chips\">\n @for (chip of _selectedLabels(); track chip.value) {\n <span class=\"tala-select__chip\">\n {{ chip.label }}\n <button\n class=\"tala-select__chip-remove\"\n type=\"button\"\n aria-label=\"Remove {{ chip.label }}\"\n (click)=\"_removeChip(chip.value, $event)\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n >\n <line x1=\"4\" y1=\"4\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"4\" x2=\"4\" y2=\"12\" />\n </svg>\n </button>\n </span>\n }\n </div>\n } @else if (type() === 'searchable' && _isOpen()) {\n <input\n class=\"tala-select__search\"\n type=\"text\"\n autocomplete=\"off\"\n [placeholder]=\"placeholder() || 'Search...'\"\n [value]=\"_searchQuery()\"\n (input)=\"_onSearchInput($event)\"\n (keydown)=\"_onSearchKeydown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <span class=\"tala-select__value\" [class.tala-select__value--placeholder]=\"!_hasValue()\">\n {{ _hasValue() ? _displayValue() : placeholder() }}\n </span>\n }\n </div>\n\n <span class=\"tala-select__trailing\">\n @if (loading()) {\n <svg\n class=\"tala-select__spinner\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n } @else {\n <svg\n class=\"tala-select__chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 6l4 4 4-4\" />\n </svg>\n }\n </span>\n</div>\n\n@if (_isOpen() && !_isDisabled() && !loading()) {\n <div\n class=\"tala-select__dropdown\"\n role=\"listbox\"\n [id]=\"_listboxId\"\n [attr.aria-multiselectable]=\"type() === 'multi' || null\"\n (click)=\"_onDropdownClick($event)\"\n >\n @for (opt of _filteredOptions(); track opt.value; let i = $index) {\n <div\n class=\"tala-select__option\"\n [class.tala-select__option--selected]=\"_isSelected(opt.value)\"\n [class.tala-select__option--disabled]=\"opt.disabled\"\n [class.tala-select__option--focused]=\"_focusedIndex() === i\"\n role=\"option\"\n [attr.aria-selected]=\"_isSelected(opt.value)\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n (click)=\"_selectOption(opt, $event)\"\n >\n @if (type() === 'multi') {\n <span class=\"tala-select__checkbox\" aria-hidden=\"true\">\n @if (_isSelected(opt.value)) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M3 8.5L6.5 12 13 5\" />\n </svg>\n }\n </span>\n }\n <span class=\"tala-select__option-label\">{{ opt.label }}</span>\n @if (type() === 'single' && _isSelected(opt.value)) {\n <svg\n class=\"tala-select__option-check\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 8.5L6.5 12 13 5\" />\n </svg>\n }\n </div>\n } @empty {\n <div class=\"tala-select__empty\">No options found</div>\n }\n </div>\n}\n\n@if (helperText() && !_isDisabled()) {\n <div class=\"tala-select__helper-row\" [id]=\"_helperId\">\n <span class=\"tala-select__helper\">{{ helperText() }}</span>\n </div>\n}\n","/*\n * Public API Surface of doku-tala\n */\n\nexport * from './lib/components/avatar';\nexport * from './lib/components/button';\nexport * from './lib/components/input';\nexport * from './lib/components/select';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/llms.txt ADDED
@@ -0,0 +1,241 @@
1
+ # @doku-com/tala
2
+
3
+ Angular UI component library by DOKU. Provides accessible, themeable standalone components built with Angular signals and OnPush change detection.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @doku-com/tala
9
+ ```
10
+
11
+ Add global styles to your `angular.json`:
12
+
13
+ ```json
14
+ "styles": ["node_modules/@doku-com/tala/styles/index.scss"]
15
+ ```
16
+
17
+ Or import in your global stylesheet:
18
+
19
+ ```scss
20
+ @use '@doku-com/tala';
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Design Tokens
26
+
27
+ All tokens are CSS custom properties. Apply via `var(--token-name)`.
28
+
29
+ ### Colors
30
+
31
+ Background:
32
+ - `--color-background-base` — main page background
33
+ - `--color-background-subtle` — slightly elevated background
34
+ - `--color-background-muted` — muted background
35
+ - `--color-background-inverse` — inverse/dark background
36
+
37
+ Surface:
38
+ - `--color-surface-default` — default surface (cards, panels)
39
+ - `--color-surface-raised` — elevated surface
40
+ - `--color-surface-overlay` — overlay/modal surface
41
+ - `--color-surface-sunken` — recessed/inset surface
42
+
43
+ Border:
44
+ - `--color-border-default`
45
+ - `--color-border-strong`
46
+ - `--color-border-focus`
47
+ - `--color-border-danger`
48
+
49
+ Text:
50
+ - `--color-text-primary`
51
+ - `--color-text-secondary`
52
+ - `--color-text-tertiary`
53
+ - `--color-text-disabled`
54
+ - `--color-text-inverse`
55
+ - `--color-text-accent`
56
+ - `--color-text-link`
57
+ - `--color-text-placeholder`
58
+
59
+ Status:
60
+ - `--color-status-success-{bg|text|border}`
61
+ - `--color-status-warning-{bg|text|border}`
62
+ - `--color-status-danger-{bg|text|border}`
63
+ - `--color-status-info-{bg|text|border}`
64
+ - `--color-status-neutral-{bg|text|border}`
65
+
66
+ ### Spacing
67
+
68
+ - `--space-1: 4px`
69
+ - `--space-2: 8px`
70
+ - `--space-3: 12px`
71
+ - `--space-4: 16px`
72
+ - `--space-5: 20px`
73
+ - `--space-6: 24px`
74
+ - `--space-8: 32px`
75
+ - `--space-10: 40px`
76
+ - `--space-12: 48px`
77
+ - `--space-16: 64px`
78
+
79
+ ### Typography
80
+
81
+ Font families:
82
+ - `--font-family-din` — DIN Next LT Pro (headings)
83
+ - `--font-family-inter` — Inter (body)
84
+ - `--font-family-jetbrains` — JetBrains Mono (code)
85
+
86
+ Font weights:
87
+ - `--font-weight-regular: 400`
88
+ - `--font-weight-medium: 500`
89
+ - `--font-weight-semibold: 600`
90
+ - `--font-weight-bold: 700`
91
+
92
+ Font sizes: `--font-size-11` through `--font-size-40` (px values)
93
+
94
+ ### Border Radius
95
+
96
+ - `--radius-none: 0px`
97
+ - `--radius-xs: 2px`
98
+ - `--radius-sm: 4px`
99
+ - `--radius-md: 6px`
100
+ - `--radius-lg: 8px`
101
+ - `--radius-xl: 12px`
102
+ - `--radius-2xl: 16px`
103
+ - `--radius-full: 9999px`
104
+
105
+ ### Shadows
106
+
107
+ - `--shadow-xs` — subtle, for tight UI elements
108
+ - `--shadow-sm` — small elevation
109
+ - `--shadow-md` — medium elevation (cards)
110
+ - `--shadow-lg` — large elevation (dropdowns)
111
+ - `--shadow-xl` — extra large (modals, dialogs)
112
+
113
+ ---
114
+
115
+ ## Components
116
+
117
+ ### TalaButton
118
+
119
+ Selector: `tala-button`
120
+ Import: `import { TalaButton } from '@doku-com/tala'`
121
+
122
+ Inputs:
123
+ - `variant: ButtonVariant` — default: `'primary'`
124
+ - `size: ButtonSize` — default: `'md'`
125
+ - `disabled: boolean` — default: `false`
126
+ - `loading: boolean` — default: `false`
127
+ - `iconOnly: boolean` — default: `false`
128
+
129
+ Types:
130
+ - `ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'accent' | 'danger' | 'link'`
131
+ - `ButtonSize = 'xs' | 'sm' | 'md' | 'lg'`
132
+
133
+ Size heights: xs=24px, sm=32px, md=40px, lg=48px
134
+
135
+ Notes:
136
+ - Content is projected via `<ng-content>`
137
+ - Keyboard accessible: Enter and Space trigger click
138
+ - Click events are suppressed when `disabled` or `loading` is true
139
+
140
+ Example:
141
+
142
+ ```html
143
+ <tala-button>Submit</tala-button>
144
+ <tala-button variant="secondary" size="sm">Cancel</tala-button>
145
+ <tala-button variant="danger" [disabled]="true">Delete</tala-button>
146
+ <tala-button [loading]="isSaving">Save</tala-button>
147
+ <tala-button [iconOnly]="true"><svg><!-- icon --></svg></tala-button>
148
+ ```
149
+
150
+ ```typescript
151
+ import { TalaButton } from '@doku-com/tala';
152
+
153
+ @Component({
154
+ imports: [TalaButton],
155
+ template: `<tala-button [variant]="v" [loading]="loading">Submit</tala-button>`,
156
+ })
157
+ export class MyComponent {
158
+ v = 'primary';
159
+ loading = false;
160
+ }
161
+ ```
162
+
163
+ ---
164
+
165
+ ### TalaAvatar
166
+
167
+ Selector: `tala-avatar`
168
+ Import: `import { TalaAvatar } from '@doku-com/tala'`
169
+
170
+ Inputs:
171
+ - `name: string` — default: `''` — used for initials and background color
172
+ - `src: string` — default: `''` — image URL; when set, shows image instead of initials
173
+ - `size: AvatarSize` — default: `'md'`
174
+ - `shape: AvatarShape` — default: `'circle'`
175
+ - `status: AvatarStatus` — default: `'none'`
176
+ - `badgeCount: number` — default: `0` — shows `99+` when value exceeds 99
177
+
178
+ Types:
179
+ - `AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'`
180
+ - `AvatarShape = 'circle' | 'square'`
181
+ - `AvatarStatus = 'none' | 'online' | 'busy' | 'away' | 'offline'`
182
+
183
+ Size dimensions: xs=24px, sm=32px, md=40px, lg=48px, xl=64px
184
+
185
+ Notes:
186
+ - Background color is auto-derived from the `name` value via hashing
187
+ - `aria-label` is auto-generated from name, status, and badgeCount
188
+ - Role is set to `img`
189
+
190
+ Example:
191
+
192
+ ```html
193
+ <tala-avatar name="John Doe" />
194
+ <tala-avatar name="Jane Smith" src="https://example.com/jane.jpg" />
195
+ <tala-avatar name="Alice" size="lg" shape="square" status="online" />
196
+ <tala-avatar name="Bob" [badgeCount]="5" />
197
+ ```
198
+
199
+ ---
200
+
201
+ ### TalaAvatarGroup
202
+
203
+ Selector: `tala-avatar-group`
204
+ Import: `import { TalaAvatarGroup } from '@doku-com/tala'`
205
+
206
+ Inputs:
207
+ - `size: AvatarSize` — default: `'md'`
208
+
209
+ Notes:
210
+ - Wraps multiple `TalaAvatar` components for a stacked/grouped layout
211
+ - Set matching `size` on both the group and each child avatar
212
+ - Role is set to `group`
213
+
214
+ Example:
215
+
216
+ ```html
217
+ <tala-avatar-group size="md">
218
+ <tala-avatar name="Alice Smith" size="md" />
219
+ <tala-avatar name="Bob Jones" size="md" />
220
+ <tala-avatar name="Carol Lee" size="md" />
221
+ </tala-avatar-group>
222
+ ```
223
+
224
+ ```typescript
225
+ import { TalaAvatar, TalaAvatarGroup } from '@doku-com/tala';
226
+
227
+ @Component({
228
+ imports: [TalaAvatar, TalaAvatarGroup],
229
+ template: `
230
+ <tala-avatar-group [size]="size">
231
+ @for (user of users; track user.id) {
232
+ <tala-avatar [name]="user.name" [src]="user.avatar" [size]="size" />
233
+ }
234
+ </tala-avatar-group>
235
+ `,
236
+ })
237
+ export class MyComponent {
238
+ size = 'md' as const;
239
+ users = [{ id: 1, name: 'Alice', avatar: '' }];
240
+ }
241
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doku-com/tala",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.3",
4
4
  "description": "The next generation of Angular UI library",
5
5
  "keywords": [
6
6
  "doku",