@edsis/ui 21.3.6 → 21.3.8

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.
Files changed (35) hide show
  1. package/fesm2022/edsis-ui-avatar.mjs +1 -1
  2. package/fesm2022/edsis-ui-avatar.mjs.map +1 -1
  3. package/fesm2022/edsis-ui-card.mjs +1 -1
  4. package/fesm2022/edsis-ui-card.mjs.map +1 -1
  5. package/fesm2022/edsis-ui-chart.mjs +12 -12
  6. package/fesm2022/edsis-ui-chart.mjs.map +1 -1
  7. package/fesm2022/edsis-ui-composer.mjs +2 -2
  8. package/fesm2022/edsis-ui-composer.mjs.map +1 -1
  9. package/fesm2022/edsis-ui-editor.mjs +9 -2
  10. package/fesm2022/edsis-ui-editor.mjs.map +1 -1
  11. package/fesm2022/edsis-ui-input-group.mjs +2 -2
  12. package/fesm2022/edsis-ui-input-group.mjs.map +1 -1
  13. package/fesm2022/edsis-ui-kbd.mjs +1 -1
  14. package/fesm2022/edsis-ui-kbd.mjs.map +1 -1
  15. package/fesm2022/edsis-ui-layout.mjs +91 -43
  16. package/fesm2022/edsis-ui-layout.mjs.map +1 -1
  17. package/fesm2022/edsis-ui-nav.mjs +17 -11
  18. package/fesm2022/edsis-ui-nav.mjs.map +1 -1
  19. package/fesm2022/edsis-ui-page.mjs +42 -13
  20. package/fesm2022/edsis-ui-page.mjs.map +1 -1
  21. package/fesm2022/edsis-ui-pillbox.mjs +1 -1
  22. package/fesm2022/edsis-ui-pillbox.mjs.map +1 -1
  23. package/fesm2022/edsis-ui-scroll-area.mjs +2 -2
  24. package/fesm2022/edsis-ui-scroll-area.mjs.map +1 -1
  25. package/fesm2022/edsis-ui-theme.mjs +7 -3
  26. package/fesm2022/edsis-ui-theme.mjs.map +1 -1
  27. package/fesm2022/edsis-ui-timeline.mjs +17 -17
  28. package/fesm2022/edsis-ui-timeline.mjs.map +1 -1
  29. package/layout/README.md +53 -36
  30. package/package.json +1 -1
  31. package/page/README.md +103 -5
  32. package/types/edsis-ui-editor.d.ts +1 -0
  33. package/types/edsis-ui-layout.d.ts +29 -15
  34. package/types/edsis-ui-page.d.ts +26 -3
  35. package/types/edsis-ui-theme.d.ts +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"edsis-ui-pillbox.mjs","sources":["../../../library/ui/pillbox/pillbox.component.ts","../../../library/ui/pillbox/edsis-ui-pillbox.ts"],"sourcesContent":["import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n DestroyRef,\n ElementRef,\n Signal,\n TemplateRef,\n WritableSignal,\n booleanAttribute,\n contentChild,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { cn } from '@edsis/ui/utils';\n\nexport type PillboxSize = 'default' | 'sm';\nexport type PillboxVariant = 'default' | 'combobox';\n\ninterface PillboxSelectedItem {\n readonly value: unknown;\n readonly label: string;\n readonly template: TemplateRef<unknown> | null;\n readonly track: unknown;\n}\n\nabstract class PillboxContext {\n abstract readonly query: WritableSignal<string>;\n abstract readonly openState: Signal<boolean>;\n abstract optionVisible(option: PillboxOptionComponent): boolean;\n abstract optionSelected(option: PillboxOptionComponent): boolean;\n abstract chooseOption(option: PillboxOptionComponent, event: Event): void;\n abstract createVisible(option: PillboxOptionCreateComponent): boolean;\n abstract chooseCreate(option: PillboxOptionCreateComponent, event: Event): void;\n abstract emptyVisible(): boolean;\n abstract emptyMessage(): string;\n}\n\nlet nextPillboxId = 0;\n\nconst pillboxTriggerSizeClasses: Record<PillboxSize, string> = {\n default: 'min-h-10 px-3 py-2 text-sm',\n sm: 'min-h-8 px-2.5 py-1.5 text-xs',\n};\n\nconst pillboxPillSizeClasses: Record<PillboxSize, string> = {\n default: 'min-h-6 px-2 text-xs',\n sm: 'min-h-5 px-1.5 text-[0.6875rem]',\n};\n\n@Directive({\n selector: 'ng-template[uiPillboxSelected]',\n exportAs: 'uiPillboxSelected',\n})\nexport class PillboxSelectedDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n@Component({\n selector: 'ui-pillbox-option, button[ui-pillbox-option]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n type: 'button',\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option\"',\n '[attr.data-selected]': 'selected() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.role]': '\"option\"',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[hidden]': '!visible()',\n '(click)': 'handleClick($event)',\n '(keydown.enter)': 'handleKeydown($any($event))',\n '(keydown.space)': 'handleKeydown($any($event))',\n },\n template: `\n <span class=\"min-w-0 flex-1 truncate text-left\"><ng-content /></span>\n @if (selected()) {\n <svg\n aria-hidden=\"true\"\n class=\"ml-auto size-4 shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n }\n `,\n})\nexport class PillboxOptionComponent {\n private readonly context = inject(PillboxContext);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly selectedTemplate = contentChild(PillboxSelectedDirective);\n\n readonly value = input.required<unknown>();\n readonly label = input<string>('');\n readonly selectedLabel = input<string>('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly filterable = input(true, { transform: booleanAttribute });\n readonly class = input<string>('');\n\n readonly selectedChange = output<unknown>();\n\n protected readonly selected = computed(() => this.context.optionSelected(this));\n protected readonly visible = computed(() => this.context.optionVisible(this));\n protected readonly classes = computed(() =>\n cn(\n 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors',\n 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground',\n 'data-[selected]:bg-accent data-[selected]:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n this.class(),\n ),\n );\n\n textLabel(): string {\n return (this.label() || this.element.nativeElement.textContent || String(this.value())).trim();\n }\n\n pillLabel(): string {\n return (this.selectedLabel() || this.textLabel()).trim();\n }\n\n pillTemplate(): TemplateRef<unknown> | null {\n return this.selectedTemplate()?.template ?? null;\n }\n\n protected handleClick(event: Event): void {\n this.context.chooseOption(this, event);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n event.preventDefault();\n this.context.chooseOption(this, event);\n }\n}\n\n@Component({\n selector: 'ui-pillbox-option-create, button[ui-pillbox-option-create]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n type: 'button',\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option-create\"',\n '[attr.role]': '\"option\"',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[hidden]': '!visible()',\n '(click)': 'handleClick($event)',\n '(keydown.enter)': 'handleKeydown($any($event))',\n '(keydown.space)': 'handleKeydown($any($event))',\n },\n template: `<ng-content />`,\n})\nexport class PillboxOptionCreateComponent {\n private readonly context = inject(PillboxContext);\n\n readonly minLength = input(1, { transform: numberAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly class = input<string>('');\n\n readonly selected = output<string>();\n\n protected readonly visible = computed(() => this.context.createVisible(this));\n protected readonly classes = computed(() =>\n cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm font-medium text-primary outline-none transition-colors',\n 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n this.class(),\n ),\n );\n\n protected handleClick(event: Event): void {\n this.context.chooseCreate(this, event);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n event.preventDefault();\n this.context.chooseCreate(this, event);\n }\n}\n\n@Component({\n selector: 'ui-pillbox-option-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option-empty\"',\n role: 'presentation',\n '[hidden]': '!context.emptyVisible()',\n },\n template: `\n @if (context.emptyMessage()) {\n {{ context.emptyMessage() }}\n } @else {\n <ng-content />\n }\n `,\n})\nexport class PillboxOptionEmptyComponent {\n protected readonly context = inject(PillboxContext);\n\n readonly whenLoading = input<string>('');\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => cn('px-2 py-6 text-center text-sm text-muted-foreground', this.class()));\n}\n\n@Component({\n selector: 'ui-pillbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n providers: [\n { provide: PillboxContext, useExisting: forwardRef(() => PillboxComponent) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PillboxComponent), multi: true },\n ],\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox\"',\n '[attr.data-open]': 'openState() ? \"\" : null',\n '[attr.data-size]': 'size()',\n '[attr.data-variant]': 'variant()',\n },\n template: `\n <div\n #trigger\n [attr.id]=\"resolvedId()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"openState()\"\n [attr.aria-controls]=\"openState() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [attr.aria-disabled]=\"disabledState() ? 'true' : null\"\n [attr.tabindex]=\"disabledState() ? -1 : 0\"\n [class]=\"triggerClasses()\"\n (click)=\"handleTriggerClick()\"\n (keydown.enter)=\"handleTriggerKeydown($any($event))\"\n (keydown.space)=\"handleTriggerKeydown($any($event))\"\n (keydown.arrowDown)=\"handleTriggerKeydown($any($event))\"\n (keydown.escape)=\"close()\">\n <div class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1.5\">\n @if (selectedItems().length > 0) {\n @for (item of selectedItems(); track item.track) {\n <span [class]=\"pillClasses()\">\n @if (item.template; as template) {\n <span class=\"inline-flex min-w-0 max-w-40 items-center gap-1 truncate\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </span>\n } @else {\n <span class=\"max-w-40 truncate\">{{ item.label }}</span>\n }\n <button\n type=\"button\"\n class=\"-mr-1 inline-flex size-4 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"disabledState() || null\"\n (click)=\"removeSelected(item.value, $event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </span>\n }\n }\n\n @if (variant() === 'combobox') {\n <input\n #inlineSearch\n class=\"min-w-28 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\"\n [placeholder]=\"selectedItems().length === 0 ? placeholder() : ''\"\n [value]=\"query()\"\n [disabled]=\"disabledState() || null\"\n (click)=\"$event.stopPropagation(); open()\"\n (focus)=\"open()\"\n (input)=\"handleSearchInput($event)\"\n (keydown.backspace)=\"handleInlineBackspace($any($event))\"\n (keydown.escape)=\"close()\" />\n } @else if (selectedItems().length === 0) {\n <span class=\"truncate text-muted-foreground\">{{ placeholder() }}</span>\n }\n </div>\n\n @if (clearable() && selectedItems().length > 0 && !disabledState()) {\n <button\n type=\"button\"\n class=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n aria-label=\"Clear selected options\"\n (click)=\"clear($event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n\n <svg\n aria-hidden=\"true\"\n class=\"size-4 shrink-0 text-muted-foreground transition-transform\"\n [class.rotate-180]=\"openState()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n\n <div [attr.id]=\"panelId\" [class]=\"panelClasses()\" [hidden]=\"!openState()\" role=\"listbox\">\n @if (searchable() && variant() !== 'combobox') {\n <div class=\"border-b border-border p-2\">\n <div class=\"flex items-center gap-2 rounded-md border border-input bg-background px-2\">\n <svg\n aria-hidden=\"true\"\n class=\"size-4 shrink-0 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n <input\n #panelSearch\n class=\"h-9 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"query()\"\n (input)=\"handleSearchInput($event)\"\n (keydown.escape)=\"close()\" />\n @if (query().length > 0) {\n <button\n type=\"button\"\n class=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label=\"Clear search\"\n (click)=\"clearSearch($event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <div class=\"max-h-72 overflow-y-auto p-1\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class PillboxComponent extends PillboxContext implements ControlValueAccessor {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly id = input<string | null>(null);\n readonly placeholder = input<string>('Choose options...');\n readonly searchPlaceholder = input<string>('Search...');\n readonly size = input<PillboxSize>('default');\n readonly variant = input<PillboxVariant>('default');\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly searchable = input(false, { transform: booleanAttribute });\n readonly filter = input(true, { transform: booleanAttribute });\n readonly clearable = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly emptyText = input<string>('No options found.');\n readonly loadingText = input<string>('Loading...');\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly class = input<string>('');\n\n readonly valueChange = output<unknown>();\n readonly searchChange = output<string>();\n readonly create = output<string>();\n readonly openedChange = output<boolean>();\n\n override readonly query = signal('');\n override readonly openState = signal(false);\n\n private readonly selectedValues = signal<readonly unknown[]>([]);\n private readonly disabledFromControl = signal(false);\n private readonly generatedId = `ui-pillbox-${++nextPillboxId}`;\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly inlineSearch = viewChild<ElementRef<HTMLInputElement>>('inlineSearch');\n private readonly panelSearch = viewChild<ElementRef<HTMLInputElement>>('panelSearch');\n private readonly options = contentChildren(PillboxOptionComponent, { descendants: true });\n private readonly createOptions = contentChildren(PillboxOptionCreateComponent, { descendants: true });\n private readonly emptyOptions = contentChildren(PillboxOptionEmptyComponent, { descendants: true });\n\n private removeDocumentListener: (() => void) | null = null;\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly panelId = `${this.generatedId}-panel`;\n protected readonly resolvedId = computed(() => this.id() ?? this.generatedId);\n protected readonly disabledState = computed(() => this.disabled() || this.disabledFromControl());\n protected readonly classes = computed(() =>\n cn('relative block w-full min-w-0 text-sm text-foreground', this.class()),\n );\n protected readonly triggerClasses = computed(() =>\n cn(\n 'flex w-full min-w-0 cursor-default items-center gap-2 rounded-md border border-input bg-background shadow-sm transition-colors',\n 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background',\n 'hover:bg-accent/20',\n pillboxTriggerSizeClasses[this.size()],\n this.invalid() ? 'border-destructive ring-1 ring-destructive' : '',\n this.disabledState() ? 'pointer-events-none cursor-not-allowed opacity-50' : '',\n ),\n );\n protected readonly pillClasses = computed(() =>\n cn(\n 'inline-flex max-w-full shrink-0 items-center gap-1 rounded-md border border-border bg-muted font-medium text-muted-foreground',\n pillboxPillSizeClasses[this.size()],\n ),\n );\n protected readonly panelClasses = computed(() =>\n cn(\n 'absolute left-0 right-0 z-50 mt-1 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md',\n 'min-w-full',\n ),\n );\n protected readonly selectedItems = computed<readonly PillboxSelectedItem[]>(() =>\n this.selectedValues().map((value, index) => {\n const option = this.findOption(value);\n\n return {\n value,\n label: option?.pillLabel() || String(value),\n template: option?.pillTemplate() ?? null,\n track: this.trackValue(value, index),\n };\n }),\n );\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => this.removeOutsideListener());\n }\n\n override optionVisible(option: PillboxOptionComponent): boolean {\n if (!this.filter() || !option.filterable()) {\n return true;\n }\n\n const query = this.query().trim().toLowerCase();\n if (!query) {\n return true;\n }\n\n return option.textLabel().toLowerCase().includes(query);\n }\n\n override optionSelected(option: PillboxOptionComponent): boolean {\n return this.hasValue(option.value());\n }\n\n override chooseOption(option: PillboxOptionComponent, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabledState() || option.disabled()) {\n return;\n }\n\n if (this.multiple()) {\n const value = option.value();\n this.selectedValues.update((values) =>\n values.some((entry) => this.sameValue(entry, value))\n ? values.filter((entry) => !this.sameValue(entry, value))\n : [...values, value],\n );\n } else {\n this.selectedValues.set([option.value()]);\n this.close();\n }\n\n option.selectedChange.emit(option.value());\n this.query.set('');\n this.emitValue();\n }\n\n override createVisible(option: PillboxOptionCreateComponent): boolean {\n const query = this.query().trim();\n\n if (option.disabled() || query.length < option.minLength()) {\n return false;\n }\n\n return !this.options().some((entry) => entry.textLabel().trim().toLowerCase() === query.toLowerCase());\n }\n\n override chooseCreate(option: PillboxOptionCreateComponent, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n const query = this.query().trim();\n if (this.disabledState() || option.disabled() || !this.createVisible(option)) {\n return;\n }\n\n option.selected.emit(query);\n this.create.emit(query);\n }\n\n override emptyVisible(): boolean {\n return this.options().length > 0 && !this.hasVisibleOptions() && !this.hasVisibleCreateOption();\n }\n\n override emptyMessage(): string {\n const customEmptyOption = this.emptyOptions()[0];\n if (this.loading()) {\n return customEmptyOption?.whenLoading() || this.loadingText();\n }\n\n return customEmptyOption ? '' : this.emptyText();\n }\n\n protected handleTriggerClick(): void {\n this.open();\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (this.disabledState()) {\n return;\n }\n\n event.preventDefault();\n this.open();\n }\n\n protected handleSearchInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n this.query.set(inputElement.value);\n this.searchChange.emit(inputElement.value);\n this.open();\n }\n\n protected handleInlineBackspace(event: KeyboardEvent): void {\n if ((event.target as HTMLInputElement).value.length > 0 || this.selectedValues().length === 0) {\n return;\n }\n\n event.preventDefault();\n this.selectedValues.update((values) => values.slice(0, -1));\n this.emitValue();\n }\n\n protected clearSearch(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.query.set('');\n this.searchChange.emit('');\n this.focusSearchInput();\n }\n\n protected clear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.selectedValues.set([]);\n this.emitValue();\n }\n\n protected removeSelected(value: unknown, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.selectedValues.update((values) => values.filter((entry) => !this.sameValue(entry, value)));\n this.emitValue();\n }\n\n open(): void {\n if (this.disabledState() || this.openState()) {\n return;\n }\n\n this.openState.set(true);\n this.openedChange.emit(true);\n queueMicrotask(() => {\n this.focusSearchInput();\n this.bindOutsideListener();\n });\n }\n\n close(): void {\n if (!this.openState()) {\n return;\n }\n\n this.openState.set(false);\n this.openedChange.emit(false);\n this.removeOutsideListener();\n this.onTouched();\n }\n\n focus(): void {\n this.trigger().nativeElement.focus();\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : []);\n return;\n }\n\n this.selectedValues.set(value === null || value === undefined ? [] : [value]);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabledFromControl.set(disabled);\n }\n\n private emitValue(): void {\n const nextValue = this.multiple() ? [...this.selectedValues()] : (this.selectedValues()[0] ?? null);\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n }\n\n private hasValue(value: unknown): boolean {\n return this.selectedValues().some((entry) => this.sameValue(entry, value));\n }\n\n private findOption(value: unknown): PillboxOptionComponent | undefined {\n return this.options().find((option) => this.sameValue(option.value(), value));\n }\n\n private hasVisibleOptions(): boolean {\n return this.options().some((option) => this.optionVisible(option));\n }\n\n private hasVisibleCreateOption(): boolean {\n return this.createOptions().some((option) => this.createVisible(option));\n }\n\n private sameValue(left: unknown, right: unknown): boolean {\n return Object.is(left, right);\n }\n\n private trackValue(value: unknown, index: number): unknown {\n return index;\n }\n\n private focusSearchInput(): void {\n const searchInput =\n this.variant() === 'combobox' ? this.inlineSearch()?.nativeElement : this.panelSearch()?.nativeElement;\n searchInput?.focus();\n }\n\n private bindOutsideListener(): void {\n this.removeOutsideListener();\n\n const listener = (event: PointerEvent) => {\n if (!this.element.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n };\n\n this.document.addEventListener('pointerdown', listener, true);\n this.removeDocumentListener = () => this.document.removeEventListener('pointerdown', listener, true);\n }\n\n private removeOutsideListener(): void {\n this.removeDocumentListener?.();\n this.removeDocumentListener = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edsis-ui-pillbox.mjs","sources":["../../../library/ui/pillbox/pillbox.component.ts","../../../library/ui/pillbox/edsis-ui-pillbox.ts"],"sourcesContent":["import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n DestroyRef,\n ElementRef,\n Signal,\n TemplateRef,\n WritableSignal,\n booleanAttribute,\n contentChild,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { cn } from '@edsis/ui/utils';\n\nexport type PillboxSize = 'default' | 'sm';\nexport type PillboxVariant = 'default' | 'combobox';\n\ninterface PillboxSelectedItem {\n readonly value: unknown;\n readonly label: string;\n readonly template: TemplateRef<unknown> | null;\n readonly track: unknown;\n}\n\nabstract class PillboxContext {\n abstract readonly query: WritableSignal<string>;\n abstract readonly openState: Signal<boolean>;\n abstract optionVisible(option: PillboxOptionComponent): boolean;\n abstract optionSelected(option: PillboxOptionComponent): boolean;\n abstract chooseOption(option: PillboxOptionComponent, event: Event): void;\n abstract createVisible(option: PillboxOptionCreateComponent): boolean;\n abstract chooseCreate(option: PillboxOptionCreateComponent, event: Event): void;\n abstract emptyVisible(): boolean;\n abstract emptyMessage(): string;\n}\n\nlet nextPillboxId = 0;\n\nconst pillboxTriggerSizeClasses: Record<PillboxSize, string> = {\n default: 'min-h-10 px-3 py-2 text-sm',\n sm: 'min-h-8 px-2.5 py-1.5 text-xs',\n};\n\nconst pillboxPillSizeClasses: Record<PillboxSize, string> = {\n default: 'min-h-6 px-2 text-xs',\n sm: 'min-h-5 px-1.5 text-2xs-plus',\n};\n\n@Directive({\n selector: 'ng-template[uiPillboxSelected]',\n exportAs: 'uiPillboxSelected',\n})\nexport class PillboxSelectedDirective {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n\n@Component({\n selector: 'ui-pillbox-option, button[ui-pillbox-option]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n type: 'button',\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option\"',\n '[attr.data-selected]': 'selected() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.role]': '\"option\"',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[hidden]': '!visible()',\n '(click)': 'handleClick($event)',\n '(keydown.enter)': 'handleKeydown($any($event))',\n '(keydown.space)': 'handleKeydown($any($event))',\n },\n template: `\n <span class=\"min-w-0 flex-1 truncate text-left\"><ng-content /></span>\n @if (selected()) {\n <svg\n aria-hidden=\"true\"\n class=\"ml-auto size-4 shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n }\n `,\n})\nexport class PillboxOptionComponent {\n private readonly context = inject(PillboxContext);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly selectedTemplate = contentChild(PillboxSelectedDirective);\n\n readonly value = input.required<unknown>();\n readonly label = input<string>('');\n readonly selectedLabel = input<string>('');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly filterable = input(true, { transform: booleanAttribute });\n readonly class = input<string>('');\n\n readonly selectedChange = output<unknown>();\n\n protected readonly selected = computed(() => this.context.optionSelected(this));\n protected readonly visible = computed(() => this.context.optionVisible(this));\n protected readonly classes = computed(() =>\n cn(\n 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors',\n 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground',\n 'data-[selected]:bg-accent data-[selected]:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n this.class(),\n ),\n );\n\n textLabel(): string {\n return (this.label() || this.element.nativeElement.textContent || String(this.value())).trim();\n }\n\n pillLabel(): string {\n return (this.selectedLabel() || this.textLabel()).trim();\n }\n\n pillTemplate(): TemplateRef<unknown> | null {\n return this.selectedTemplate()?.template ?? null;\n }\n\n protected handleClick(event: Event): void {\n this.context.chooseOption(this, event);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n event.preventDefault();\n this.context.chooseOption(this, event);\n }\n}\n\n@Component({\n selector: 'ui-pillbox-option-create, button[ui-pillbox-option-create]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n type: 'button',\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option-create\"',\n '[attr.role]': '\"option\"',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[hidden]': '!visible()',\n '(click)': 'handleClick($event)',\n '(keydown.enter)': 'handleKeydown($any($event))',\n '(keydown.space)': 'handleKeydown($any($event))',\n },\n template: `<ng-content />`,\n})\nexport class PillboxOptionCreateComponent {\n private readonly context = inject(PillboxContext);\n\n readonly minLength = input(1, { transform: numberAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly class = input<string>('');\n\n readonly selected = output<string>();\n\n protected readonly visible = computed(() => this.context.createVisible(this));\n protected readonly classes = computed(() =>\n cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm font-medium text-primary outline-none transition-colors',\n 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n this.class(),\n ),\n );\n\n protected handleClick(event: Event): void {\n this.context.chooseCreate(this, event);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n event.preventDefault();\n this.context.chooseCreate(this, event);\n }\n}\n\n@Component({\n selector: 'ui-pillbox-option-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox-option-empty\"',\n role: 'presentation',\n '[hidden]': '!context.emptyVisible()',\n },\n template: `\n @if (context.emptyMessage()) {\n {{ context.emptyMessage() }}\n } @else {\n <ng-content />\n }\n `,\n})\nexport class PillboxOptionEmptyComponent {\n protected readonly context = inject(PillboxContext);\n\n readonly whenLoading = input<string>('');\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => cn('px-2 py-6 text-center text-sm text-muted-foreground', this.class()));\n}\n\n@Component({\n selector: 'ui-pillbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n providers: [\n { provide: PillboxContext, useExisting: forwardRef(() => PillboxComponent) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PillboxComponent), multi: true },\n ],\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"pillbox\"',\n '[attr.data-open]': 'openState() ? \"\" : null',\n '[attr.data-size]': 'size()',\n '[attr.data-variant]': 'variant()',\n },\n template: `\n <div\n #trigger\n [attr.id]=\"resolvedId()\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"openState()\"\n [attr.aria-controls]=\"openState() ? panelId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.aria-invalid]=\"invalid() ? 'true' : null\"\n [attr.aria-disabled]=\"disabledState() ? 'true' : null\"\n [attr.tabindex]=\"disabledState() ? -1 : 0\"\n [class]=\"triggerClasses()\"\n (click)=\"handleTriggerClick()\"\n (keydown.enter)=\"handleTriggerKeydown($any($event))\"\n (keydown.space)=\"handleTriggerKeydown($any($event))\"\n (keydown.arrowDown)=\"handleTriggerKeydown($any($event))\"\n (keydown.escape)=\"close()\">\n <div class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1.5\">\n @if (selectedItems().length > 0) {\n @for (item of selectedItems(); track item.track) {\n <span [class]=\"pillClasses()\">\n @if (item.template; as template) {\n <span class=\"inline-flex min-w-0 max-w-40 items-center gap-1 truncate\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </span>\n } @else {\n <span class=\"max-w-40 truncate\">{{ item.label }}</span>\n }\n <button\n type=\"button\"\n class=\"-mr-1 inline-flex size-4 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n [attr.aria-label]=\"'Remove ' + item.label\"\n [disabled]=\"disabledState() || null\"\n (click)=\"removeSelected(item.value, $event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n </span>\n }\n }\n\n @if (variant() === 'combobox') {\n <input\n #inlineSearch\n class=\"min-w-28 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\"\n [placeholder]=\"selectedItems().length === 0 ? placeholder() : ''\"\n [value]=\"query()\"\n [disabled]=\"disabledState() || null\"\n (click)=\"$event.stopPropagation(); open()\"\n (focus)=\"open()\"\n (input)=\"handleSearchInput($event)\"\n (keydown.backspace)=\"handleInlineBackspace($any($event))\"\n (keydown.escape)=\"close()\" />\n } @else if (selectedItems().length === 0) {\n <span class=\"truncate text-muted-foreground\">{{ placeholder() }}</span>\n }\n </div>\n\n @if (clearable() && selectedItems().length > 0 && !disabledState()) {\n <button\n type=\"button\"\n class=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n aria-label=\"Clear selected options\"\n (click)=\"clear($event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n\n <svg\n aria-hidden=\"true\"\n class=\"size-4 shrink-0 text-muted-foreground transition-transform\"\n [class.rotate-180]=\"openState()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </div>\n\n <div [attr.id]=\"panelId\" [class]=\"panelClasses()\" [hidden]=\"!openState()\" role=\"listbox\">\n @if (searchable() && variant() !== 'combobox') {\n <div class=\"border-b border-border p-2\">\n <div class=\"flex items-center gap-2 rounded-md border border-input bg-background px-2\">\n <svg\n aria-hidden=\"true\"\n class=\"size-4 shrink-0 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" />\n </svg>\n <input\n #panelSearch\n class=\"h-9 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"query()\"\n (input)=\"handleSearchInput($event)\"\n (keydown.escape)=\"close()\" />\n @if (query().length > 0) {\n <button\n type=\"button\"\n class=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label=\"Clear search\"\n (click)=\"clearSearch($event)\">\n <svg\n aria-hidden=\"true\"\n class=\"size-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <div class=\"max-h-72 overflow-y-auto p-1\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class PillboxComponent extends PillboxContext implements ControlValueAccessor {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly id = input<string | null>(null);\n readonly placeholder = input<string>('Choose options...');\n readonly searchPlaceholder = input<string>('Search...');\n readonly size = input<PillboxSize>('default');\n readonly variant = input<PillboxVariant>('default');\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly searchable = input(false, { transform: booleanAttribute });\n readonly filter = input(true, { transform: booleanAttribute });\n readonly clearable = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly emptyText = input<string>('No options found.');\n readonly loadingText = input<string>('Loading...');\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly class = input<string>('');\n\n readonly valueChange = output<unknown>();\n readonly searchChange = output<string>();\n readonly create = output<string>();\n readonly openedChange = output<boolean>();\n\n override readonly query = signal('');\n override readonly openState = signal(false);\n\n private readonly selectedValues = signal<readonly unknown[]>([]);\n private readonly disabledFromControl = signal(false);\n private readonly generatedId = `ui-pillbox-${++nextPillboxId}`;\n private readonly trigger = viewChild.required<ElementRef<HTMLElement>>('trigger');\n private readonly inlineSearch = viewChild<ElementRef<HTMLInputElement>>('inlineSearch');\n private readonly panelSearch = viewChild<ElementRef<HTMLInputElement>>('panelSearch');\n private readonly options = contentChildren(PillboxOptionComponent, { descendants: true });\n private readonly createOptions = contentChildren(PillboxOptionCreateComponent, { descendants: true });\n private readonly emptyOptions = contentChildren(PillboxOptionEmptyComponent, { descendants: true });\n\n private removeDocumentListener: (() => void) | null = null;\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly panelId = `${this.generatedId}-panel`;\n protected readonly resolvedId = computed(() => this.id() ?? this.generatedId);\n protected readonly disabledState = computed(() => this.disabled() || this.disabledFromControl());\n protected readonly classes = computed(() =>\n cn('relative block w-full min-w-0 text-sm text-foreground', this.class()),\n );\n protected readonly triggerClasses = computed(() =>\n cn(\n 'flex w-full min-w-0 cursor-default items-center gap-2 rounded-md border border-input bg-background shadow-sm transition-colors',\n 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background',\n 'hover:bg-accent/20',\n pillboxTriggerSizeClasses[this.size()],\n this.invalid() ? 'border-destructive ring-1 ring-destructive' : '',\n this.disabledState() ? 'pointer-events-none cursor-not-allowed opacity-50' : '',\n ),\n );\n protected readonly pillClasses = computed(() =>\n cn(\n 'inline-flex max-w-full shrink-0 items-center gap-1 rounded-md border border-border bg-muted font-medium text-muted-foreground',\n pillboxPillSizeClasses[this.size()],\n ),\n );\n protected readonly panelClasses = computed(() =>\n cn(\n 'absolute left-0 right-0 z-50 mt-1 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md',\n 'min-w-full',\n ),\n );\n protected readonly selectedItems = computed<readonly PillboxSelectedItem[]>(() =>\n this.selectedValues().map((value, index) => {\n const option = this.findOption(value);\n\n return {\n value,\n label: option?.pillLabel() || String(value),\n template: option?.pillTemplate() ?? null,\n track: this.trackValue(value, index),\n };\n }),\n );\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => this.removeOutsideListener());\n }\n\n override optionVisible(option: PillboxOptionComponent): boolean {\n if (!this.filter() || !option.filterable()) {\n return true;\n }\n\n const query = this.query().trim().toLowerCase();\n if (!query) {\n return true;\n }\n\n return option.textLabel().toLowerCase().includes(query);\n }\n\n override optionSelected(option: PillboxOptionComponent): boolean {\n return this.hasValue(option.value());\n }\n\n override chooseOption(option: PillboxOptionComponent, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabledState() || option.disabled()) {\n return;\n }\n\n if (this.multiple()) {\n const value = option.value();\n this.selectedValues.update((values) =>\n values.some((entry) => this.sameValue(entry, value))\n ? values.filter((entry) => !this.sameValue(entry, value))\n : [...values, value],\n );\n } else {\n this.selectedValues.set([option.value()]);\n this.close();\n }\n\n option.selectedChange.emit(option.value());\n this.query.set('');\n this.emitValue();\n }\n\n override createVisible(option: PillboxOptionCreateComponent): boolean {\n const query = this.query().trim();\n\n if (option.disabled() || query.length < option.minLength()) {\n return false;\n }\n\n return !this.options().some((entry) => entry.textLabel().trim().toLowerCase() === query.toLowerCase());\n }\n\n override chooseCreate(option: PillboxOptionCreateComponent, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n const query = this.query().trim();\n if (this.disabledState() || option.disabled() || !this.createVisible(option)) {\n return;\n }\n\n option.selected.emit(query);\n this.create.emit(query);\n }\n\n override emptyVisible(): boolean {\n return this.options().length > 0 && !this.hasVisibleOptions() && !this.hasVisibleCreateOption();\n }\n\n override emptyMessage(): string {\n const customEmptyOption = this.emptyOptions()[0];\n if (this.loading()) {\n return customEmptyOption?.whenLoading() || this.loadingText();\n }\n\n return customEmptyOption ? '' : this.emptyText();\n }\n\n protected handleTriggerClick(): void {\n this.open();\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (this.disabledState()) {\n return;\n }\n\n event.preventDefault();\n this.open();\n }\n\n protected handleSearchInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n this.query.set(inputElement.value);\n this.searchChange.emit(inputElement.value);\n this.open();\n }\n\n protected handleInlineBackspace(event: KeyboardEvent): void {\n if ((event.target as HTMLInputElement).value.length > 0 || this.selectedValues().length === 0) {\n return;\n }\n\n event.preventDefault();\n this.selectedValues.update((values) => values.slice(0, -1));\n this.emitValue();\n }\n\n protected clearSearch(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.query.set('');\n this.searchChange.emit('');\n this.focusSearchInput();\n }\n\n protected clear(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.selectedValues.set([]);\n this.emitValue();\n }\n\n protected removeSelected(value: unknown, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.selectedValues.update((values) => values.filter((entry) => !this.sameValue(entry, value)));\n this.emitValue();\n }\n\n open(): void {\n if (this.disabledState() || this.openState()) {\n return;\n }\n\n this.openState.set(true);\n this.openedChange.emit(true);\n queueMicrotask(() => {\n this.focusSearchInput();\n this.bindOutsideListener();\n });\n }\n\n close(): void {\n if (!this.openState()) {\n return;\n }\n\n this.openState.set(false);\n this.openedChange.emit(false);\n this.removeOutsideListener();\n this.onTouched();\n }\n\n focus(): void {\n this.trigger().nativeElement.focus();\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : []);\n return;\n }\n\n this.selectedValues.set(value === null || value === undefined ? [] : [value]);\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabledFromControl.set(disabled);\n }\n\n private emitValue(): void {\n const nextValue = this.multiple() ? [...this.selectedValues()] : (this.selectedValues()[0] ?? null);\n this.onChange(nextValue);\n this.valueChange.emit(nextValue);\n }\n\n private hasValue(value: unknown): boolean {\n return this.selectedValues().some((entry) => this.sameValue(entry, value));\n }\n\n private findOption(value: unknown): PillboxOptionComponent | undefined {\n return this.options().find((option) => this.sameValue(option.value(), value));\n }\n\n private hasVisibleOptions(): boolean {\n return this.options().some((option) => this.optionVisible(option));\n }\n\n private hasVisibleCreateOption(): boolean {\n return this.createOptions().some((option) => this.createVisible(option));\n }\n\n private sameValue(left: unknown, right: unknown): boolean {\n return Object.is(left, right);\n }\n\n private trackValue(value: unknown, index: number): unknown {\n return index;\n }\n\n private focusSearchInput(): void {\n const searchInput =\n this.variant() === 'combobox' ? this.inlineSearch()?.nativeElement : this.panelSearch()?.nativeElement;\n searchInput?.focus();\n }\n\n private bindOutsideListener(): void {\n this.removeOutsideListener();\n\n const listener = (event: PointerEvent) => {\n if (!this.element.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n };\n\n this.document.addEventListener('pointerdown', listener, true);\n this.removeDocumentListener = () => this.document.removeEventListener('pointerdown', listener, true);\n }\n\n private removeOutsideListener(): void {\n this.removeDocumentListener?.();\n this.removeDocumentListener = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ class ScrollAreaComponent {
23
23
  [attr.tabindex]="viewportTabIndex()">
24
24
  <ng-content />
25
25
  </div>
26
- `, isInline: true, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar{width:10px;height:10px}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--border)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--radius-lg)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
+ `, isInline: true, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb))) var(--tw-scrollbar-track, hsl(var(--scrollbar-track)))}.ui-scroll-area-viewport::-webkit-scrollbar{width:var(--scrollbar-size, .5rem);height:var(--scrollbar-size, .5rem)}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, hsl(var(--scrollbar-track)))}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--scrollbar-radius, 9999px)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb-hover))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
27
  }
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ScrollAreaComponent, decorators: [{
29
29
  type: Component,
@@ -37,7 +37,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
37
37
  [attr.tabindex]="viewportTabIndex()">
38
38
  <ng-content />
39
39
  </div>
40
- `, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar{width:10px;height:10px}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, transparent)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--border)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--radius-lg)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"] }]
40
+ `, styles: [":host{display:block;overflow:hidden;position:relative}.ui-scroll-area-viewport{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb))) var(--tw-scrollbar-track, hsl(var(--scrollbar-track)))}.ui-scroll-area-viewport::-webkit-scrollbar{width:var(--scrollbar-size, .5rem);height:var(--scrollbar-size, .5rem)}.ui-scroll-area-viewport::-webkit-scrollbar-track{background:var(--tw-scrollbar-track, hsl(var(--scrollbar-track)))}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb)));border:var(--border-width) solid transparent;background-clip:padding-box;border-radius:var(--scrollbar-radius, 9999px)}.ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover{background:var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb-hover))));background-clip:padding-box}@media(forced-colors:active){.ui-scroll-area-viewport{scrollbar-width:auto;scrollbar-color:auto}.ui-scroll-area-viewport::-webkit-scrollbar-thumb{background:CanvasText;border-color:transparent}}\n"] }]
41
41
  }], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], viewportClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportClass", required: false }] }], viewportAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportAriaLabel", required: false }] }], viewportTabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewportTabIndex", required: false }] }] } });
42
42
 
43
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"edsis-ui-scroll-area.mjs","sources":["../../../library/ui/scroll-area/scroll-area.component.ts","../../../library/ui/scroll-area/edsis-ui-scroll-area.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from '@angular/core';\nimport { cn } from '@edsis/ui/utils';\n\n/**\n * Lightweight scroll area using native scrollbars styled via CSS.\n * Fully accessible — real scrolling, keyboard, wheel, momentum.\n */\n@Component({\n selector: 'ui-scroll-area',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n },\n template: `\n <div\n [class]=\"viewportClasses()\"\n [attr.aria-label]=\"viewportAriaLabel()\"\n [attr.role]=\"viewportRole()\"\n [attr.tabindex]=\"viewportTabIndex()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n overflow: hidden;\n position: relative;\n }\n .ui-scroll-area-viewport {\n overflow: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--tw-scrollbar-thumb, hsl(var(--border))) var(--tw-scrollbar-track, transparent);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-track {\n background: var(--tw-scrollbar-track, transparent);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: var(--tw-scrollbar-thumb, hsl(var(--border)));\n border: var(--border-width) solid transparent;\n background-clip: padding-box;\n border-radius: var(--radius-lg);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover {\n background: var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--muted-foreground))));\n background-clip: padding-box;\n }\n @media (forced-colors: active) {\n .ui-scroll-area-viewport {\n scrollbar-width: auto;\n scrollbar-color: auto;\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: CanvasText;\n border-color: transparent;\n }\n }\n `,\n ],\n})\nexport class ScrollAreaComponent {\n readonly class = input<string>('');\n readonly viewportClass = input<string>('');\n readonly viewportAriaLabel = input<string | null>(null);\n readonly viewportTabIndex = input(0, { transform: numberAttribute });\n protected readonly classes = computed(() => cn('relative overflow-hidden', this.class()));\n protected readonly viewportRole = computed(() => (this.viewportAriaLabel() ? 'region' : null));\n protected readonly viewportClasses = computed(() =>\n cn(\n 'ui-scroll-area-viewport h-full w-full rounded-[inherit]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n this.viewportClass(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGA;;;AAGG;MA0DU,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,oFAAC;AACjC,IAAA,iBAAiB,GAAG,KAAK,CAAgB,IAAI,wFAAC;IAC9C,gBAAgB,GAAG,KAAK,CAAC,CAAC,wFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,8EAAC;IACtE,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,eAAe,GAAG,QAAQ,CAAC,MAC5C,EAAE,CACA,yDAAyD,EACzD,kGAAkG,EAClG,IAAI,CAAC,aAAa,EAAE,CACrB,sFACF;wGAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnDpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+8BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA2CU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzD/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,WAAW;qBACvB,EAAA,QAAA,EACS;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+8BAAA,CAAA,EAAA;;;ACrBH;;AAEG;;;;"}
1
+ {"version":3,"file":"edsis-ui-scroll-area.mjs","sources":["../../../library/ui/scroll-area/scroll-area.component.ts","../../../library/ui/scroll-area/edsis-ui-scroll-area.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from '@angular/core';\nimport { cn } from '@edsis/ui/utils';\n\n/**\n * Lightweight scroll area using native scrollbars styled via CSS.\n * Fully accessible — real scrolling, keyboard, wheel, momentum.\n */\n@Component({\n selector: 'ui-scroll-area',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n },\n template: `\n <div\n [class]=\"viewportClasses()\"\n [attr.aria-label]=\"viewportAriaLabel()\"\n [attr.role]=\"viewportRole()\"\n [attr.tabindex]=\"viewportTabIndex()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n overflow: hidden;\n position: relative;\n }\n .ui-scroll-area-viewport {\n overflow: auto;\n scrollbar-width: thin;\n scrollbar-color: var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb)))\n var(--tw-scrollbar-track, hsl(var(--scrollbar-track)));\n }\n .ui-scroll-area-viewport::-webkit-scrollbar {\n width: var(--scrollbar-size, 0.5rem);\n height: var(--scrollbar-size, 0.5rem);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-track {\n background: var(--tw-scrollbar-track, hsl(var(--scrollbar-track)));\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb)));\n border: var(--border-width) solid transparent;\n background-clip: padding-box;\n border-radius: var(--scrollbar-radius, 9999px);\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb:hover {\n background: var(--ui-scrollbar-thumb-hover, var(--tw-scrollbar-thumb, hsl(var(--scrollbar-thumb-hover))));\n background-clip: padding-box;\n }\n @media (forced-colors: active) {\n .ui-scroll-area-viewport {\n scrollbar-width: auto;\n scrollbar-color: auto;\n }\n .ui-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: CanvasText;\n border-color: transparent;\n }\n }\n `,\n ],\n})\nexport class ScrollAreaComponent {\n readonly class = input<string>('');\n readonly viewportClass = input<string>('');\n readonly viewportAriaLabel = input<string | null>(null);\n readonly viewportTabIndex = input(0, { transform: numberAttribute });\n protected readonly classes = computed(() => cn('relative overflow-hidden', this.class()));\n protected readonly viewportRole = computed(() => (this.viewportAriaLabel() ? 'region' : null));\n protected readonly viewportClasses = computed(() =>\n cn(\n 'ui-scroll-area-viewport h-full w-full rounded-[inherit]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n this.viewportClass(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGA;;;AAGG;MA2DU,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,aAAa,GAAG,KAAK,CAAS,EAAE,oFAAC;AACjC,IAAA,iBAAiB,GAAG,KAAK,CAAgB,IAAI,wFAAC;IAC9C,gBAAgB,GAAG,KAAK,CAAC,CAAC,wFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACjD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,8EAAC;IACtE,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC3E,IAAA,eAAe,GAAG,QAAQ,CAAC,MAC5C,EAAE,CACA,yDAAyD,EACzD,kGAAkG,EAClG,IAAI,CAAC,aAAa,EAAE,CACrB,sFACF;wGAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qkCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FA4CU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1D/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EACT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,WAAW;qBACvB,EAAA,QAAA,EACS;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,qkCAAA,CAAA,EAAA;;;ACrBH;;AAEG;;;;"}
@@ -7,6 +7,7 @@ const UI_THEME_OPTIONS = new InjectionToken('UI_THEME_OPTIONS');
7
7
  const THEME_MODES = ['light', 'dark', 'system'];
8
8
  const RESOLVED_THEME_MODES = ['light', 'dark'];
9
9
  const THEME_SEASONS = ['base', 'imlek', 'ramadhan', 'ied', 'natal', 'new-year'];
10
+ const DEFAULT_THEME_BRAND = 'etos';
10
11
  const DEFAULT_THEME_MODE = 'system';
11
12
  const DEFAULT_THEME_SEASON = 'base';
12
13
  const THEME_MODE_STORAGE_KEY = 'theme-mode';
@@ -23,6 +24,10 @@ function isThemeSeason(value) {
23
24
  function normalizeThemeMode(value) {
24
25
  return isThemeMode(value) ? value : DEFAULT_THEME_MODE;
25
26
  }
27
+ function normalizeThemeBrand(value) {
28
+ const normalized = value?.trim();
29
+ return normalized ? normalized : DEFAULT_THEME_BRAND;
30
+ }
26
31
  function normalizeThemeSeason(value) {
27
32
  return isThemeSeason(value) ? value : DEFAULT_THEME_SEASON;
28
33
  }
@@ -186,7 +191,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
186
191
  args: [{ providedIn: 'root' }]
187
192
  }], ctorParameters: () => [] });
188
193
 
189
- const DEFAULT_THEME_BRAND = 'etos';
190
194
  function provideUiTheme(options = {}) {
191
195
  return makeEnvironmentProviders([
192
196
  {
@@ -194,7 +198,7 @@ function provideUiTheme(options = {}) {
194
198
  useValue: options,
195
199
  },
196
200
  provideEnvironmentInitializer(() => {
197
- inject(DOCUMENT, { optional: true })?.documentElement.setAttribute('theme-brand', DEFAULT_THEME_BRAND);
201
+ inject(DOCUMENT, { optional: true })?.documentElement.setAttribute('theme-brand', normalizeThemeBrand(options.brand));
198
202
  inject(ThemeModeService);
199
203
  inject(ThemeSeasonService);
200
204
  }),
@@ -205,5 +209,5 @@ function provideUiTheme(options = {}) {
205
209
  * Generated bundle index. Do not edit.
206
210
  */
207
211
 
208
- export { DEFAULT_THEME_MODE, DEFAULT_THEME_SEASON, RESOLVED_THEME_MODES, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_SEASONS, THEME_SEASON_STORAGE_KEY, ThemeModeService, ThemeSeasonService, UI_THEME_OPTIONS, isResolvedThemeMode, isThemeMode, isThemeSeason, normalizeThemeMode, normalizeThemeSeason, provideUiTheme };
212
+ export { DEFAULT_THEME_BRAND, DEFAULT_THEME_MODE, DEFAULT_THEME_SEASON, RESOLVED_THEME_MODES, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_SEASONS, THEME_SEASON_STORAGE_KEY, ThemeModeService, ThemeSeasonService, UI_THEME_OPTIONS, isResolvedThemeMode, isThemeMode, isThemeSeason, normalizeThemeBrand, normalizeThemeMode, normalizeThemeSeason, provideUiTheme };
209
213
  //# sourceMappingURL=edsis-ui-theme.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"edsis-ui-theme.mjs","sources":["../../../library/ui/theme/theme.config.ts","../../../library/ui/theme/theme.types.ts","../../../library/ui/theme/theme-mode.service.ts","../../../library/ui/theme/theme-season.service.ts","../../../library/ui/theme/theme.provider.ts","../../../library/ui/theme/edsis-ui-theme.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { ThemeMode, ThemeSeason } from './theme.types';\n\nexport interface UiThemeOptions {\n readonly mode?: ThemeMode;\n readonly season?: ThemeSeason;\n}\n\nexport const UI_THEME_OPTIONS = new InjectionToken<Readonly<UiThemeOptions>>('UI_THEME_OPTIONS');\n","export const THEME_MODES = ['light', 'dark', 'system'] as const;\nexport const RESOLVED_THEME_MODES = ['light', 'dark'] as const;\nexport const THEME_SEASONS = ['base', 'imlek', 'ramadhan', 'ied', 'natal', 'new-year'] as const;\n\nexport type ThemeMode = (typeof THEME_MODES)[number];\nexport type ResolvedThemeMode = (typeof RESOLVED_THEME_MODES)[number];\nexport type ThemeSeason = (typeof THEME_SEASONS)[number];\n\nexport const DEFAULT_THEME_MODE: ThemeMode = 'system';\nexport const DEFAULT_THEME_SEASON: ThemeSeason = 'base';\n\nexport const THEME_MODE_STORAGE_KEY = 'theme-mode';\nexport const THEME_SEASON_STORAGE_KEY = 'theme-season';\n\nexport function isThemeMode(value: string | null | undefined): value is ThemeMode {\n return typeof value === 'string' && THEME_MODES.includes(value as ThemeMode);\n}\n\nexport function isResolvedThemeMode(value: string | null | undefined): value is ResolvedThemeMode {\n return typeof value === 'string' && RESOLVED_THEME_MODES.includes(value as ResolvedThemeMode);\n}\n\nexport function isThemeSeason(value: string | null | undefined): value is ThemeSeason {\n return typeof value === 'string' && THEME_SEASONS.includes(value as ThemeSeason);\n}\n\nexport function normalizeThemeMode(value: string | null | undefined): ThemeMode {\n return isThemeMode(value) ? value : DEFAULT_THEME_MODE;\n}\n\nexport function normalizeThemeSeason(value: string | null | undefined): ThemeSeason {\n return isThemeSeason(value) ? value : DEFAULT_THEME_SEASON;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { UI_THEME_OPTIONS } from './theme.config';\nimport {\n DEFAULT_THEME_MODE,\n THEME_MODE_STORAGE_KEY,\n type ResolvedThemeMode,\n type ThemeMode,\n normalizeThemeMode,\n} from './theme.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeModeService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly options = inject(UI_THEME_OPTIONS, { optional: true });\n private readonly modeState = signal<ThemeMode>(DEFAULT_THEME_MODE);\n private readonly systemPrefersDark = signal(this.readSystemPreference());\n\n readonly mode = this.modeState.asReadonly();\n readonly resolvedMode = computed<ResolvedThemeMode>(() => {\n const mode = this.modeState();\n\n if (mode === 'system') {\n return this.systemPrefersDark() ? 'dark' : 'light';\n }\n\n return mode;\n });\n\n readonly isDark = computed(() => this.resolvedMode() === 'dark');\n\n constructor() {\n this.bindSystemPreferenceListener();\n this.ensureDefaults();\n\n effect(() => {\n const mode = this.modeState();\n const resolvedMode = this.resolvedMode();\n\n this.persistMode(mode);\n this.applyModeAttributes(resolvedMode);\n });\n }\n\n setMode(mode: ThemeMode): void {\n this.modeState.set(mode);\n }\n\n toggle(): void {\n this.setMode(this.isDark() ? 'light' : 'dark');\n }\n\n private ensureDefaults(): void {\n const defaultMode = normalizeThemeMode(this.options?.mode);\n const storedMode = this.readStorage(THEME_MODE_STORAGE_KEY) ?? defaultMode;\n\n this.modeState.set(normalizeThemeMode(storedMode));\n }\n\n private persistMode(mode: ThemeMode): void {\n this.writeStorage(THEME_MODE_STORAGE_KEY, mode);\n }\n\n private applyModeAttributes(mode: ResolvedThemeMode): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-mode', mode);\n root.dataset['mode'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return this.mediaQueryList()?.matches ?? false;\n }\n\n private bindSystemPreferenceListener(): void {\n const mediaQueryList = this.mediaQueryList();\n\n if (!mediaQueryList) {\n return;\n }\n\n const onChange = (event: MediaQueryListEvent) => {\n this.systemPrefersDark.set(event.matches);\n };\n\n mediaQueryList.addEventListener('change', onChange);\n this.destroyRef.onDestroy(() => mediaQueryList.removeEventListener('change', onChange));\n }\n\n private mediaQueryList(): MediaQueryList | null {\n return this.documentRef?.defaultView?.matchMedia?.('(prefers-color-scheme: dark)') ?? null;\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, effect, inject, signal } from '@angular/core';\nimport { UI_THEME_OPTIONS } from './theme.config';\nimport { DEFAULT_THEME_SEASON, THEME_SEASON_STORAGE_KEY, type ThemeSeason, normalizeThemeSeason } from './theme.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeSeasonService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly options = inject(UI_THEME_OPTIONS, { optional: true });\n private readonly seasonState = signal<ThemeSeason>(DEFAULT_THEME_SEASON);\n\n readonly season = this.seasonState.asReadonly();\n\n constructor() {\n this.ensureDefaults();\n\n effect(() => {\n const season = this.seasonState();\n\n this.persistSeason(season);\n this.applySeasonAttribute(season);\n });\n }\n\n setSeason(season: ThemeSeason): void {\n this.seasonState.set(season);\n }\n\n private ensureDefaults(): void {\n const defaultSeason = normalizeThemeSeason(this.options?.season);\n const storedSeason = this.readStorage(THEME_SEASON_STORAGE_KEY) ?? defaultSeason;\n\n this.seasonState.set(normalizeThemeSeason(storedSeason));\n }\n\n private persistSeason(season: ThemeSeason): void {\n this.writeStorage(THEME_SEASON_STORAGE_KEY, season);\n }\n\n private applySeasonAttribute(season: ThemeSeason): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-season', season);\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { UI_THEME_OPTIONS, type UiThemeOptions } from './theme.config';\nimport { ThemeModeService } from './theme-mode.service';\nimport { ThemeSeasonService } from './theme-season.service';\n\nconst DEFAULT_THEME_BRAND = 'etos';\n\nexport function provideUiTheme(options: UiThemeOptions = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: UI_THEME_OPTIONS,\n useValue: options,\n },\n provideEnvironmentInitializer(() => {\n inject(DOCUMENT, { optional: true })?.documentElement.setAttribute('theme-brand', DEFAULT_THEME_BRAND);\n inject(ThemeModeService);\n inject(ThemeSeasonService);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edsis-ui-theme.mjs","sources":["../../../library/ui/theme/theme.config.ts","../../../library/ui/theme/theme.types.ts","../../../library/ui/theme/theme-mode.service.ts","../../../library/ui/theme/theme-season.service.ts","../../../library/ui/theme/theme.provider.ts","../../../library/ui/theme/edsis-ui-theme.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { ThemeBrand, ThemeMode, ThemeSeason } from './theme.types';\n\nexport interface UiThemeOptions {\n readonly brand?: ThemeBrand;\n readonly mode?: ThemeMode;\n readonly season?: ThemeSeason;\n}\n\nexport const UI_THEME_OPTIONS = new InjectionToken<Readonly<UiThemeOptions>>('UI_THEME_OPTIONS');\n","export const THEME_MODES = ['light', 'dark', 'system'] as const;\nexport const RESOLVED_THEME_MODES = ['light', 'dark'] as const;\nexport const THEME_SEASONS = ['base', 'imlek', 'ramadhan', 'ied', 'natal', 'new-year'] as const;\n\nexport type ThemeBrand = string;\nexport type ThemeMode = (typeof THEME_MODES)[number];\nexport type ResolvedThemeMode = (typeof RESOLVED_THEME_MODES)[number];\nexport type ThemeSeason = (typeof THEME_SEASONS)[number];\n\nexport const DEFAULT_THEME_BRAND: ThemeBrand = 'etos';\nexport const DEFAULT_THEME_MODE: ThemeMode = 'system';\nexport const DEFAULT_THEME_SEASON: ThemeSeason = 'base';\n\nexport const THEME_MODE_STORAGE_KEY = 'theme-mode';\nexport const THEME_SEASON_STORAGE_KEY = 'theme-season';\n\nexport function isThemeMode(value: string | null | undefined): value is ThemeMode {\n return typeof value === 'string' && THEME_MODES.includes(value as ThemeMode);\n}\n\nexport function isResolvedThemeMode(value: string | null | undefined): value is ResolvedThemeMode {\n return typeof value === 'string' && RESOLVED_THEME_MODES.includes(value as ResolvedThemeMode);\n}\n\nexport function isThemeSeason(value: string | null | undefined): value is ThemeSeason {\n return typeof value === 'string' && THEME_SEASONS.includes(value as ThemeSeason);\n}\n\nexport function normalizeThemeMode(value: string | null | undefined): ThemeMode {\n return isThemeMode(value) ? value : DEFAULT_THEME_MODE;\n}\n\nexport function normalizeThemeBrand(value: string | null | undefined): ThemeBrand {\n const normalized = value?.trim();\n\n return normalized ? normalized : DEFAULT_THEME_BRAND;\n}\n\nexport function normalizeThemeSeason(value: string | null | undefined): ThemeSeason {\n return isThemeSeason(value) ? value : DEFAULT_THEME_SEASON;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { UI_THEME_OPTIONS } from './theme.config';\nimport {\n DEFAULT_THEME_MODE,\n THEME_MODE_STORAGE_KEY,\n type ResolvedThemeMode,\n type ThemeMode,\n normalizeThemeMode,\n} from './theme.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeModeService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly options = inject(UI_THEME_OPTIONS, { optional: true });\n private readonly modeState = signal<ThemeMode>(DEFAULT_THEME_MODE);\n private readonly systemPrefersDark = signal(this.readSystemPreference());\n\n readonly mode = this.modeState.asReadonly();\n readonly resolvedMode = computed<ResolvedThemeMode>(() => {\n const mode = this.modeState();\n\n if (mode === 'system') {\n return this.systemPrefersDark() ? 'dark' : 'light';\n }\n\n return mode;\n });\n\n readonly isDark = computed(() => this.resolvedMode() === 'dark');\n\n constructor() {\n this.bindSystemPreferenceListener();\n this.ensureDefaults();\n\n effect(() => {\n const mode = this.modeState();\n const resolvedMode = this.resolvedMode();\n\n this.persistMode(mode);\n this.applyModeAttributes(resolvedMode);\n });\n }\n\n setMode(mode: ThemeMode): void {\n this.modeState.set(mode);\n }\n\n toggle(): void {\n this.setMode(this.isDark() ? 'light' : 'dark');\n }\n\n private ensureDefaults(): void {\n const defaultMode = normalizeThemeMode(this.options?.mode);\n const storedMode = this.readStorage(THEME_MODE_STORAGE_KEY) ?? defaultMode;\n\n this.modeState.set(normalizeThemeMode(storedMode));\n }\n\n private persistMode(mode: ThemeMode): void {\n this.writeStorage(THEME_MODE_STORAGE_KEY, mode);\n }\n\n private applyModeAttributes(mode: ResolvedThemeMode): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-mode', mode);\n root.dataset['mode'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return this.mediaQueryList()?.matches ?? false;\n }\n\n private bindSystemPreferenceListener(): void {\n const mediaQueryList = this.mediaQueryList();\n\n if (!mediaQueryList) {\n return;\n }\n\n const onChange = (event: MediaQueryListEvent) => {\n this.systemPrefersDark.set(event.matches);\n };\n\n mediaQueryList.addEventListener('change', onChange);\n this.destroyRef.onDestroy(() => mediaQueryList.removeEventListener('change', onChange));\n }\n\n private mediaQueryList(): MediaQueryList | null {\n return this.documentRef?.defaultView?.matchMedia?.('(prefers-color-scheme: dark)') ?? null;\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, effect, inject, signal } from '@angular/core';\nimport { UI_THEME_OPTIONS } from './theme.config';\nimport { DEFAULT_THEME_SEASON, THEME_SEASON_STORAGE_KEY, type ThemeSeason, normalizeThemeSeason } from './theme.types';\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeSeasonService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly options = inject(UI_THEME_OPTIONS, { optional: true });\n private readonly seasonState = signal<ThemeSeason>(DEFAULT_THEME_SEASON);\n\n readonly season = this.seasonState.asReadonly();\n\n constructor() {\n this.ensureDefaults();\n\n effect(() => {\n const season = this.seasonState();\n\n this.persistSeason(season);\n this.applySeasonAttribute(season);\n });\n }\n\n setSeason(season: ThemeSeason): void {\n this.seasonState.set(season);\n }\n\n private ensureDefaults(): void {\n const defaultSeason = normalizeThemeSeason(this.options?.season);\n const storedSeason = this.readStorage(THEME_SEASON_STORAGE_KEY) ?? defaultSeason;\n\n this.seasonState.set(normalizeThemeSeason(storedSeason));\n }\n\n private persistSeason(season: ThemeSeason): void {\n this.writeStorage(THEME_SEASON_STORAGE_KEY, season);\n }\n\n private applySeasonAttribute(season: ThemeSeason): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-season', season);\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { UI_THEME_OPTIONS, type UiThemeOptions } from './theme.config';\nimport { ThemeModeService } from './theme-mode.service';\nimport { ThemeSeasonService } from './theme-season.service';\nimport { normalizeThemeBrand } from './theme.types';\n\nexport function provideUiTheme(options: UiThemeOptions = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: UI_THEME_OPTIONS,\n useValue: options,\n },\n provideEnvironmentInitializer(() => {\n inject(DOCUMENT, { optional: true })?.documentElement.setAttribute(\n 'theme-brand',\n normalizeThemeBrand(options.brand),\n );\n inject(ThemeModeService);\n inject(ThemeSeasonService);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -27,23 +27,23 @@ const timelineIndicatorStatusClasses = {
27
27
  incomplete: 'border-border bg-background text-muted-foreground',
28
28
  };
29
29
  const timelineIndicatorColorClasses = {
30
- red: 'border-red-500 bg-red-500 text-white',
31
- orange: 'border-orange-500 bg-orange-500 text-white',
32
- amber: 'border-amber-500 bg-amber-500 text-white',
33
- yellow: 'border-yellow-400 bg-yellow-400 text-black',
34
- lime: 'border-lime-500 bg-lime-500 text-black',
35
- green: 'border-green-600 bg-green-600 text-white',
36
- emerald: 'border-emerald-600 bg-emerald-600 text-white',
37
- teal: 'border-teal-600 bg-teal-600 text-white',
38
- cyan: 'border-cyan-600 bg-cyan-600 text-white',
39
- sky: 'border-sky-600 bg-sky-600 text-white',
40
- blue: 'border-blue-600 bg-blue-600 text-white',
41
- indigo: 'border-indigo-600 bg-indigo-600 text-white',
42
- violet: 'border-violet-600 bg-violet-600 text-white',
43
- purple: 'border-purple-600 bg-purple-600 text-white',
44
- fuchsia: 'border-fuchsia-600 bg-fuchsia-600 text-white',
45
- pink: 'border-pink-600 bg-pink-600 text-white',
46
- rose: 'border-rose-600 bg-rose-600 text-white',
30
+ red: 'border-[hsl(var(--timeline-indicator-red))] bg-[hsl(var(--timeline-indicator-red))] text-[hsl(var(--timeline-indicator-red-foreground))]',
31
+ orange: 'border-[hsl(var(--timeline-indicator-orange))] bg-[hsl(var(--timeline-indicator-orange))] text-[hsl(var(--timeline-indicator-orange-foreground))]',
32
+ amber: 'border-[hsl(var(--timeline-indicator-amber))] bg-[hsl(var(--timeline-indicator-amber))] text-[hsl(var(--timeline-indicator-amber-foreground))]',
33
+ yellow: 'border-[hsl(var(--timeline-indicator-yellow))] bg-[hsl(var(--timeline-indicator-yellow))] text-[hsl(var(--timeline-indicator-yellow-foreground))]',
34
+ lime: 'border-[hsl(var(--timeline-indicator-lime))] bg-[hsl(var(--timeline-indicator-lime))] text-[hsl(var(--timeline-indicator-lime-foreground))]',
35
+ green: 'border-[hsl(var(--timeline-indicator-green))] bg-[hsl(var(--timeline-indicator-green))] text-[hsl(var(--timeline-indicator-green-foreground))]',
36
+ emerald: 'border-[hsl(var(--timeline-indicator-emerald))] bg-[hsl(var(--timeline-indicator-emerald))] text-[hsl(var(--timeline-indicator-emerald-foreground))]',
37
+ teal: 'border-[hsl(var(--timeline-indicator-teal))] bg-[hsl(var(--timeline-indicator-teal))] text-[hsl(var(--timeline-indicator-teal-foreground))]',
38
+ cyan: 'border-[hsl(var(--timeline-indicator-cyan))] bg-[hsl(var(--timeline-indicator-cyan))] text-[hsl(var(--timeline-indicator-cyan-foreground))]',
39
+ sky: 'border-[hsl(var(--timeline-indicator-sky))] bg-[hsl(var(--timeline-indicator-sky))] text-[hsl(var(--timeline-indicator-sky-foreground))]',
40
+ blue: 'border-[hsl(var(--timeline-indicator-blue))] bg-[hsl(var(--timeline-indicator-blue))] text-[hsl(var(--timeline-indicator-blue-foreground))]',
41
+ indigo: 'border-[hsl(var(--timeline-indicator-indigo))] bg-[hsl(var(--timeline-indicator-indigo))] text-[hsl(var(--timeline-indicator-indigo-foreground))]',
42
+ violet: 'border-[hsl(var(--timeline-indicator-violet))] bg-[hsl(var(--timeline-indicator-violet))] text-[hsl(var(--timeline-indicator-violet-foreground))]',
43
+ purple: 'border-[hsl(var(--timeline-indicator-purple))] bg-[hsl(var(--timeline-indicator-purple))] text-[hsl(var(--timeline-indicator-purple-foreground))]',
44
+ fuchsia: 'border-[hsl(var(--timeline-indicator-fuchsia))] bg-[hsl(var(--timeline-indicator-fuchsia))] text-[hsl(var(--timeline-indicator-fuchsia-foreground))]',
45
+ pink: 'border-[hsl(var(--timeline-indicator-pink))] bg-[hsl(var(--timeline-indicator-pink))] text-[hsl(var(--timeline-indicator-pink-foreground))]',
46
+ rose: 'border-[hsl(var(--timeline-indicator-rose))] bg-[hsl(var(--timeline-indicator-rose))] text-[hsl(var(--timeline-indicator-rose-foreground))]',
47
47
  };
48
48
  class TimelineComponent {
49
49
  horizontal = input(false, { ...(ngDevMode ? { debugName: "horizontal" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
@@ -1 +1 @@
1
- {"version":3,"file":"edsis-ui-timeline.mjs","sources":["../../../library/ui/timeline/timeline.component.ts","../../../library/ui/timeline/edsis-ui-timeline.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { cn } from '@edsis/ui/utils';\n\nexport type TimelineAlign = 'start' | 'baseline' | 'center' | 'end';\nexport type TimelineSize = 'default' | 'lg';\nexport type TimelineStatus = 'complete' | 'current' | 'incomplete';\nexport type TimelineIndicatorVariant = 'default' | 'bare';\nexport type TimelineIndicatorColor =\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose';\n\nconst TIMELINE_BASE = [\n 'w-full min-w-0 text-sm text-foreground',\n '[--timeline-content-gap:0.75rem] [--timeline-indicator-size:1.5rem] [--timeline-item-gap:1.5rem]',\n].join(' ');\n\nconst timelineSizeClasses: Record<TimelineSize, string> = {\n default: '[--timeline-indicator-size:1.5rem]',\n lg: '[--timeline-indicator-size:2.5rem] [--timeline-content-gap:1rem]',\n};\n\nconst timelineAlignClasses: Record<TimelineAlign, string> = {\n start: 'items-start',\n baseline: 'items-baseline',\n center: 'items-center',\n end: 'items-end',\n};\n\nconst timelineItemStatusClasses: Record<TimelineStatus, string> = {\n complete: 'before:bg-primary after:bg-primary',\n current: 'before:bg-border after:bg-border',\n incomplete: 'before:bg-border/70 after:bg-border/70',\n};\n\nconst timelineIndicatorStatusClasses: Record<TimelineStatus, string> = {\n complete: 'border-primary bg-primary text-primary-foreground',\n current: 'border-ring bg-background text-foreground ring-2 ring-ring ring-offset-2 ring-offset-background',\n incomplete: 'border-border bg-background text-muted-foreground',\n};\n\nconst timelineIndicatorColorClasses: Record<TimelineIndicatorColor, string> = {\n red: 'border-red-500 bg-red-500 text-white',\n orange: 'border-orange-500 bg-orange-500 text-white',\n amber: 'border-amber-500 bg-amber-500 text-white',\n yellow: 'border-yellow-400 bg-yellow-400 text-black',\n lime: 'border-lime-500 bg-lime-500 text-black',\n green: 'border-green-600 bg-green-600 text-white',\n emerald: 'border-emerald-600 bg-emerald-600 text-white',\n teal: 'border-teal-600 bg-teal-600 text-white',\n cyan: 'border-cyan-600 bg-cyan-600 text-white',\n sky: 'border-sky-600 bg-sky-600 text-white',\n blue: 'border-blue-600 bg-blue-600 text-white',\n indigo: 'border-indigo-600 bg-indigo-600 text-white',\n violet: 'border-violet-600 bg-violet-600 text-white',\n purple: 'border-purple-600 bg-purple-600 text-white',\n fuchsia: 'border-fuchsia-600 bg-fuchsia-600 text-white',\n pink: 'border-pink-600 bg-pink-600 text-white',\n rose: 'border-rose-600 bg-rose-600 text-white',\n};\n\n@Component({\n selector: 'ui-timeline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline\"',\n '[attr.data-orientation]': 'horizontal() ? \"horizontal\" : \"vertical\"',\n '[attr.data-align]': 'align()',\n '[attr.data-size]': 'size()',\n },\n template: `<ng-content />`,\n})\nexport class TimelineComponent {\n readonly horizontal = input(false, { transform: booleanAttribute });\n readonly align = input<TimelineAlign>('center');\n readonly size = input<TimelineSize>('default');\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n TIMELINE_BASE,\n timelineSizeClasses[this.size()],\n this.horizontal() ? 'flex min-w-0 items-start gap-[var(--timeline-item-gap)] overflow-x-auto pb-1' : 'grid',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'ui-timeline-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-item\"',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-align]': 'resolvedAlign()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-status]': 'status() ?? null',\n },\n template: `<ng-content />`,\n})\nexport class TimelineItemComponent {\n private readonly timeline = inject(TimelineComponent, { optional: true });\n\n readonly status = input<TimelineStatus | null>(null);\n readonly align = input<TimelineAlign | null>(null);\n readonly size = input<TimelineSize | null>(null);\n readonly class = input<string>('');\n\n readonly orientation = computed(() => (this.timeline?.horizontal() ? 'horizontal' : 'vertical'));\n readonly resolvedAlign = computed(() => this.align() ?? this.timeline?.align() ?? 'center');\n readonly resolvedSize = computed(() => this.size() ?? this.timeline?.size() ?? 'default');\n\n protected readonly classes = computed(() => {\n const status = this.status();\n const orientation = this.orientation();\n\n return cn(\n 'relative min-w-0',\n timelineSizeClasses[this.resolvedSize()],\n orientation === 'horizontal'\n ? [\n \"before:content-['']\",\n 'grid min-w-32 flex-1 justify-items-center gap-y-2 text-center',\n 'before:absolute before:left-0 before:right-0 before:top-[calc(var(--timeline-indicator-size)/2)] before:h-px before:bg-border',\n 'first:before:left-1/2 last:before:right-1/2',\n ].join(' ')\n : [\n \"after:content-['']\",\n 'grid grid-cols-[var(--timeline-indicator-size)_minmax(0,1fr)] gap-x-[var(--timeline-content-gap)] pb-[var(--timeline-item-gap)] last:pb-0',\n 'after:absolute after:bottom-0 after:left-[calc(var(--timeline-indicator-size)/2)] after:top-[calc(var(--timeline-indicator-size)+0.25rem)] after:w-px after:-translate-x-1/2 after:bg-border last:after:hidden',\n timelineAlignClasses[this.resolvedAlign()],\n ].join(' '),\n status ? timelineItemStatusClasses[status] : 'before:bg-border after:bg-border',\n this.class(),\n );\n });\n}\n\n@Component({\n selector: 'ui-timeline-indicator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-indicator\"',\n '[attr.data-variant]': 'variant()',\n '[attr.data-status]': 'resolvedStatus()',\n '[attr.data-color]': 'color() ?? null',\n },\n template: `<ng-content />`,\n})\nexport class TimelineIndicatorComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly variant = input<TimelineIndicatorVariant>('default');\n readonly status = input<TimelineStatus | null>(null);\n readonly color = input<TimelineIndicatorColor | null>(null);\n readonly class = input<string>('');\n\n protected readonly resolvedStatus = computed(() => this.status() ?? this.item?.status() ?? 'incomplete');\n protected readonly classes = computed(() => {\n const color = this.color();\n\n return cn(\n 'relative z-10 col-start-1 row-start-1 inline-flex shrink-0 items-center justify-center justify-self-center',\n this.item?.orientation() === 'horizontal' ? 'row-start-1' : '',\n this.variant() === 'bare'\n ? 'bg-background text-muted-foreground'\n : [\n 'size-[var(--timeline-indicator-size)] rounded-full border text-xs font-medium shadow-sm',\n color ? timelineIndicatorColorClasses[color] : timelineIndicatorStatusClasses[this.resolvedStatus()],\n ].join(' '),\n this.class(),\n );\n });\n}\n\n@Component({\n selector: 'ui-timeline-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-content\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineContentComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'min-w-0 text-sm leading-6 text-foreground',\n this.item?.orientation() === 'horizontal' ? 'row-start-2 max-w-40 text-center' : 'col-start-2 row-start-1',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'ui-timeline-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-block\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineBlockComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn('min-w-0', this.item?.orientation() === 'horizontal' ? 'row-start-2 w-full' : 'col-span-full', this.class()),\n );\n}\n\n@Component({\n selector: 'ui-timeline-subgrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-subgrid\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineSubgridComponent {\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'grid min-w-0 grid-cols-[var(--timeline-indicator-size)_minmax(0,1fr)] gap-x-[var(--timeline-content-gap)]',\n this.class(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edsis-ui-timeline.mjs","sources":["../../../library/ui/timeline/timeline.component.ts","../../../library/ui/timeline/edsis-ui-timeline.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { cn } from '@edsis/ui/utils';\n\nexport type TimelineAlign = 'start' | 'baseline' | 'center' | 'end';\nexport type TimelineSize = 'default' | 'lg';\nexport type TimelineStatus = 'complete' | 'current' | 'incomplete';\nexport type TimelineIndicatorVariant = 'default' | 'bare';\nexport type TimelineIndicatorColor =\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose';\n\nconst TIMELINE_BASE = [\n 'w-full min-w-0 text-sm text-foreground',\n '[--timeline-content-gap:0.75rem] [--timeline-indicator-size:1.5rem] [--timeline-item-gap:1.5rem]',\n].join(' ');\n\nconst timelineSizeClasses: Record<TimelineSize, string> = {\n default: '[--timeline-indicator-size:1.5rem]',\n lg: '[--timeline-indicator-size:2.5rem] [--timeline-content-gap:1rem]',\n};\n\nconst timelineAlignClasses: Record<TimelineAlign, string> = {\n start: 'items-start',\n baseline: 'items-baseline',\n center: 'items-center',\n end: 'items-end',\n};\n\nconst timelineItemStatusClasses: Record<TimelineStatus, string> = {\n complete: 'before:bg-primary after:bg-primary',\n current: 'before:bg-border after:bg-border',\n incomplete: 'before:bg-border/70 after:bg-border/70',\n};\n\nconst timelineIndicatorStatusClasses: Record<TimelineStatus, string> = {\n complete: 'border-primary bg-primary text-primary-foreground',\n current: 'border-ring bg-background text-foreground ring-2 ring-ring ring-offset-2 ring-offset-background',\n incomplete: 'border-border bg-background text-muted-foreground',\n};\n\nconst timelineIndicatorColorClasses: Record<TimelineIndicatorColor, string> = {\n red: 'border-[hsl(var(--timeline-indicator-red))] bg-[hsl(var(--timeline-indicator-red))] text-[hsl(var(--timeline-indicator-red-foreground))]',\n orange:\n 'border-[hsl(var(--timeline-indicator-orange))] bg-[hsl(var(--timeline-indicator-orange))] text-[hsl(var(--timeline-indicator-orange-foreground))]',\n amber:\n 'border-[hsl(var(--timeline-indicator-amber))] bg-[hsl(var(--timeline-indicator-amber))] text-[hsl(var(--timeline-indicator-amber-foreground))]',\n yellow:\n 'border-[hsl(var(--timeline-indicator-yellow))] bg-[hsl(var(--timeline-indicator-yellow))] text-[hsl(var(--timeline-indicator-yellow-foreground))]',\n lime: 'border-[hsl(var(--timeline-indicator-lime))] bg-[hsl(var(--timeline-indicator-lime))] text-[hsl(var(--timeline-indicator-lime-foreground))]',\n green:\n 'border-[hsl(var(--timeline-indicator-green))] bg-[hsl(var(--timeline-indicator-green))] text-[hsl(var(--timeline-indicator-green-foreground))]',\n emerald:\n 'border-[hsl(var(--timeline-indicator-emerald))] bg-[hsl(var(--timeline-indicator-emerald))] text-[hsl(var(--timeline-indicator-emerald-foreground))]',\n teal: 'border-[hsl(var(--timeline-indicator-teal))] bg-[hsl(var(--timeline-indicator-teal))] text-[hsl(var(--timeline-indicator-teal-foreground))]',\n cyan: 'border-[hsl(var(--timeline-indicator-cyan))] bg-[hsl(var(--timeline-indicator-cyan))] text-[hsl(var(--timeline-indicator-cyan-foreground))]',\n sky: 'border-[hsl(var(--timeline-indicator-sky))] bg-[hsl(var(--timeline-indicator-sky))] text-[hsl(var(--timeline-indicator-sky-foreground))]',\n blue: 'border-[hsl(var(--timeline-indicator-blue))] bg-[hsl(var(--timeline-indicator-blue))] text-[hsl(var(--timeline-indicator-blue-foreground))]',\n indigo:\n 'border-[hsl(var(--timeline-indicator-indigo))] bg-[hsl(var(--timeline-indicator-indigo))] text-[hsl(var(--timeline-indicator-indigo-foreground))]',\n violet:\n 'border-[hsl(var(--timeline-indicator-violet))] bg-[hsl(var(--timeline-indicator-violet))] text-[hsl(var(--timeline-indicator-violet-foreground))]',\n purple:\n 'border-[hsl(var(--timeline-indicator-purple))] bg-[hsl(var(--timeline-indicator-purple))] text-[hsl(var(--timeline-indicator-purple-foreground))]',\n fuchsia:\n 'border-[hsl(var(--timeline-indicator-fuchsia))] bg-[hsl(var(--timeline-indicator-fuchsia))] text-[hsl(var(--timeline-indicator-fuchsia-foreground))]',\n pink: 'border-[hsl(var(--timeline-indicator-pink))] bg-[hsl(var(--timeline-indicator-pink))] text-[hsl(var(--timeline-indicator-pink-foreground))]',\n rose: 'border-[hsl(var(--timeline-indicator-rose))] bg-[hsl(var(--timeline-indicator-rose))] text-[hsl(var(--timeline-indicator-rose-foreground))]',\n};\n\n@Component({\n selector: 'ui-timeline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline\"',\n '[attr.data-orientation]': 'horizontal() ? \"horizontal\" : \"vertical\"',\n '[attr.data-align]': 'align()',\n '[attr.data-size]': 'size()',\n },\n template: `<ng-content />`,\n})\nexport class TimelineComponent {\n readonly horizontal = input(false, { transform: booleanAttribute });\n readonly align = input<TimelineAlign>('center');\n readonly size = input<TimelineSize>('default');\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n TIMELINE_BASE,\n timelineSizeClasses[this.size()],\n this.horizontal() ? 'flex min-w-0 items-start gap-[var(--timeline-item-gap)] overflow-x-auto pb-1' : 'grid',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'ui-timeline-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-item\"',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-align]': 'resolvedAlign()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-status]': 'status() ?? null',\n },\n template: `<ng-content />`,\n})\nexport class TimelineItemComponent {\n private readonly timeline = inject(TimelineComponent, { optional: true });\n\n readonly status = input<TimelineStatus | null>(null);\n readonly align = input<TimelineAlign | null>(null);\n readonly size = input<TimelineSize | null>(null);\n readonly class = input<string>('');\n\n readonly orientation = computed(() => (this.timeline?.horizontal() ? 'horizontal' : 'vertical'));\n readonly resolvedAlign = computed(() => this.align() ?? this.timeline?.align() ?? 'center');\n readonly resolvedSize = computed(() => this.size() ?? this.timeline?.size() ?? 'default');\n\n protected readonly classes = computed(() => {\n const status = this.status();\n const orientation = this.orientation();\n\n return cn(\n 'relative min-w-0',\n timelineSizeClasses[this.resolvedSize()],\n orientation === 'horizontal'\n ? [\n \"before:content-['']\",\n 'grid min-w-32 flex-1 justify-items-center gap-y-2 text-center',\n 'before:absolute before:left-0 before:right-0 before:top-[calc(var(--timeline-indicator-size)/2)] before:h-px before:bg-border',\n 'first:before:left-1/2 last:before:right-1/2',\n ].join(' ')\n : [\n \"after:content-['']\",\n 'grid grid-cols-[var(--timeline-indicator-size)_minmax(0,1fr)] gap-x-[var(--timeline-content-gap)] pb-[var(--timeline-item-gap)] last:pb-0',\n 'after:absolute after:bottom-0 after:left-[calc(var(--timeline-indicator-size)/2)] after:top-[calc(var(--timeline-indicator-size)+0.25rem)] after:w-px after:-translate-x-1/2 after:bg-border last:after:hidden',\n timelineAlignClasses[this.resolvedAlign()],\n ].join(' '),\n status ? timelineItemStatusClasses[status] : 'before:bg-border after:bg-border',\n this.class(),\n );\n });\n}\n\n@Component({\n selector: 'ui-timeline-indicator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-indicator\"',\n '[attr.data-variant]': 'variant()',\n '[attr.data-status]': 'resolvedStatus()',\n '[attr.data-color]': 'color() ?? null',\n },\n template: `<ng-content />`,\n})\nexport class TimelineIndicatorComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly variant = input<TimelineIndicatorVariant>('default');\n readonly status = input<TimelineStatus | null>(null);\n readonly color = input<TimelineIndicatorColor | null>(null);\n readonly class = input<string>('');\n\n protected readonly resolvedStatus = computed(() => this.status() ?? this.item?.status() ?? 'incomplete');\n protected readonly classes = computed(() => {\n const color = this.color();\n\n return cn(\n 'relative z-10 col-start-1 row-start-1 inline-flex shrink-0 items-center justify-center justify-self-center',\n this.item?.orientation() === 'horizontal' ? 'row-start-1' : '',\n this.variant() === 'bare'\n ? 'bg-background text-muted-foreground'\n : [\n 'size-[var(--timeline-indicator-size)] rounded-full border text-xs font-medium shadow-sm',\n color ? timelineIndicatorColorClasses[color] : timelineIndicatorStatusClasses[this.resolvedStatus()],\n ].join(' '),\n this.class(),\n );\n });\n}\n\n@Component({\n selector: 'ui-timeline-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-content\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineContentComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'min-w-0 text-sm leading-6 text-foreground',\n this.item?.orientation() === 'horizontal' ? 'row-start-2 max-w-40 text-center' : 'col-start-2 row-start-1',\n this.class(),\n ),\n );\n}\n\n@Component({\n selector: 'ui-timeline-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-block\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineBlockComponent {\n private readonly item = inject(TimelineItemComponent, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn('min-w-0', this.item?.orientation() === 'horizontal' ? 'row-start-2 w-full' : 'col-span-full', this.class()),\n );\n}\n\n@Component({\n selector: 'ui-timeline-subgrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-slot]': '\"timeline-subgrid\"',\n },\n template: `<ng-content />`,\n})\nexport class TimelineSubgridComponent {\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'grid min-w-0 grid-cols-[var(--timeline-indicator-size)_minmax(0,1fr)] gap-x-[var(--timeline-content-gap)]',\n this.class(),\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}