@neural-ui/core 1.7.2 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/neural-ui-core-autocomplete.mjs +14 -5
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
- package/fesm2022/neural-ui-core-chip.mjs +2 -2
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +9 -3
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
- package/fesm2022/neural-ui-core-data-view.mjs +2 -2
- package/fesm2022/neural-ui-core-data-view.mjs.map +1 -1
- package/fesm2022/neural-ui-core-multiselect.mjs +11 -5
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
- package/fesm2022/neural-ui-core-select.mjs +10 -4
- package/fesm2022/neural-ui-core-select.mjs.map +1 -1
- package/fesm2022/neural-ui-core-table.mjs +2 -0
- package/fesm2022/neural-ui-core-table.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tabs.mjs +11 -4
- package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_tokens.scss +4 -3
- package/types/neural-ui-core-autocomplete.d.ts +2 -0
- package/types/neural-ui-core-dashboard-grid.d.ts +1 -0
- package/types/neural-ui-core-multiselect.d.ts +2 -0
- package/types/neural-ui-core-select.d.ts +2 -0
- package/types/neural-ui-core-tabs.d.ts +2 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, input, output, contentChild, signal, viewChild, inject, computed, ElementRef, forwardRef, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
|
-
import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { Directive, input, output, contentChild, signal, viewChild, inject, PLATFORM_ID, computed, ElementRef, forwardRef, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
|
+
import { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';
|
|
4
4
|
import * as i1 from '@angular/cdk/overlay';
|
|
5
5
|
import { Overlay, OverlayModule } from '@angular/cdk/overlay';
|
|
6
6
|
import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -102,6 +102,7 @@ class NeuAutocompleteComponent {
|
|
|
102
102
|
},
|
|
103
103
|
];
|
|
104
104
|
_document = inject(DOCUMENT);
|
|
105
|
+
_platformId = inject(PLATFORM_ID);
|
|
105
106
|
_overlay = inject(Overlay);
|
|
106
107
|
overlayScrollStrategy = this._overlay.scrollStrategies.reposition();
|
|
107
108
|
_onChange = () => { };
|
|
@@ -291,13 +292,13 @@ class NeuAutocompleteComponent {
|
|
|
291
292
|
return;
|
|
292
293
|
}
|
|
293
294
|
if (this.virtualScroll()) {
|
|
294
|
-
|
|
295
|
+
this._requestFrame(() => {
|
|
295
296
|
this._viewport()?.scrollToIndex(activeIndex, 'auto');
|
|
296
297
|
this._viewport()?.checkViewportSize();
|
|
297
298
|
});
|
|
298
299
|
return;
|
|
299
300
|
}
|
|
300
|
-
|
|
301
|
+
this._requestFrame(() => {
|
|
301
302
|
const activeOption = this._el.nativeElement.querySelector(`#${this._optionId(activeIndex)}`);
|
|
302
303
|
const overlayOption = activeOption ?? this._document.getElementById(this._optionId(activeIndex));
|
|
303
304
|
if (typeof overlayOption?.scrollIntoView === 'function') {
|
|
@@ -306,6 +307,9 @@ class NeuAutocompleteComponent {
|
|
|
306
307
|
});
|
|
307
308
|
}
|
|
308
309
|
_syncOverlayWidth() {
|
|
310
|
+
if (!isPlatformBrowser(this._platformId)) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
309
313
|
const trigger = this._el.nativeElement.querySelector('.neu-autocomplete__input-wrap');
|
|
310
314
|
if (!trigger) {
|
|
311
315
|
return;
|
|
@@ -315,7 +319,12 @@ class NeuAutocompleteComponent {
|
|
|
315
319
|
: 0;
|
|
316
320
|
this.overlayWidth.set(Math.min(width, window.innerWidth - 32));
|
|
317
321
|
if (this.virtualScroll()) {
|
|
318
|
-
|
|
322
|
+
this._requestFrame(() => this._viewport()?.checkViewportSize());
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
_requestFrame(callback) {
|
|
326
|
+
if (isPlatformBrowser(this._platformId)) {
|
|
327
|
+
requestAnimationFrame(callback);
|
|
319
328
|
}
|
|
320
329
|
}
|
|
321
330
|
// ── CVA ──────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-autocomplete.mjs","sources":["../../../../projects/ui-core/autocomplete/neu-autocomplete.component.ts","../../../../projects/ui-core/autocomplete/neural-ui-core-autocomplete.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostListener,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface NeuAutocompleteOption {\n /** Valor / Value */\n value: unknown;\n /** Texto visible / Display text */\n label: string;\n /** Desactiva la opción / Disables the option */\n disabled?: boolean;\n}\n\n@Directive({ selector: 'ng-template[neuAutocompleteItem]' })\nexport class NeuAutocompleteItemDirective {\n constructor(readonly templateRef: TemplateRef<{ $implicit: NeuAutocompleteOption }>) {}\n}\n\nlet _seq = 0;\n\n/**\n * NeuralUI Autocomplete\n *\n * Input con lista de sugerencias filtradas y navegación por teclado.\n * Implementa CVA para uso en formularios reactivos.\n *\n * Uso:\n * <neu-autocomplete\n * [options]=\"opts\"\n * placeholder=\"Buscar…\"\n * [formControl]=\"selectedCtrl\"\n * (optionSelected)=\"onSelect($event)\"\n * />\n */\n@Component({\n selector: 'neu-autocomplete',\n imports: [NgTemplateOutlet, OverlayModule, ScrollingModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuAutocompleteComponent),\n multi: true,\n },\n ],\n host: {\n class: 'neu-autocomplete',\n '[class.neu-autocomplete--open]': '_isOpen()',\n '[class.neu-autocomplete--disabled]': '_cvaDisabled()',\n '[class.neu-autocomplete--floating]': 'floatingLabel()',\n '[class.neu-autocomplete--focused]': '_focused()',\n '[class.neu-autocomplete--has-value]': '!!_query()',\n '[class.neu-autocomplete--sm]': 'size() === \"sm\"',\n '[class.neu-autocomplete--lg]': 'size() === \"lg\"',\n '[style.--neu-autocomplete-option-height]': 'virtualScrollItemSize() + \"px\"',\n },\n template: `\n @if (!floatingLabel() && label()) {\n <label class=\"neu-autocomplete__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <div\n cdkOverlayOrigin\n #autocompleteOrigin=\"cdkOverlayOrigin\"\n class=\"neu-autocomplete__input-wrap\"\n [class.neu-autocomplete__input-wrap--focused]=\"_focused()\"\n [class.neu-autocomplete__input-wrap--has-value]=\"!!_query()\"\n >\n <input\n #inputEl\n class=\"neu-autocomplete__input\"\n type=\"text\"\n autocomplete=\"off\"\n role=\"combobox\"\n [id]=\"_id\"\n [attr.placeholder]=\"floatingLabel() ? ' ' : placeholder() || null\"\n [attr.aria-label]=\"label() || placeholder()\"\n [attr.aria-autocomplete]=\"'list'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"_isOpen() ? 'true' : 'false'\"\n [attr.aria-controls]=\"_listId\"\n [attr.aria-activedescendant]=\"_activeId()\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [disabled]=\"_cvaDisabled()\"\n [value]=\"_query()\"\n (input)=\"onQueryChange($any($event.target).value)\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n />\n @if (floatingLabel() && label()) {\n <label class=\"neu-autocomplete__floating-label\" [for]=\"_id\">{{ label() }}</label>\n }\n @if (_query() && !_cvaDisabled()) {\n <button\n type=\"button\"\n class=\"neu-autocomplete__clear\"\n aria-label=\"Limpiar\"\n tabindex=\"-1\"\n (click)=\"clear()\"\n >\n ×\n </button>\n }\n @if (dropdown()) {\n <button\n type=\"button\"\n class=\"neu-autocomplete__dropdown\"\n [attr.aria-label]=\"dropdownAriaLabel()\"\n tabindex=\"-1\"\n [disabled]=\"_cvaDisabled()\"\n (click)=\"openAll()\"\n >\n ▾\n </button>\n }\n </div>\n <div class=\"neu-autocomplete__sr-status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ resultsAnnouncement() }}\n </div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"autocompleteOrigin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (detach)=\"_closePanel()\"\n >\n @if (loading()) {\n <div class=\"neu-autocomplete__empty\" role=\"status\" [style.width.px]=\"overlayWidth()\">\n {{ loadingLabel() }}\n </div>\n } @else if (_filtered().length) {\n <ng-template #autocompleteOptionTpl let-opt let-i=\"index\">\n <div\n class=\"neu-autocomplete__option\"\n role=\"option\"\n [id]=\"_optionId(i)\"\n [class.neu-autocomplete__option--active]=\"_activeIndex() === i\"\n [class.neu-autocomplete__option--disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"_activeIndex() === i\"\n [attr.aria-disabled]=\"opt.disabled ?? false\"\n (mousedown)=\"selectOption(opt)\"\n >\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: opt }\"\n />\n } @else {\n {{ opt.label }}\n }\n </div>\n </ng-template>\n\n @if (virtualScroll()) {\n <cdk-virtual-scroll-viewport\n class=\"neu-autocomplete__list neu-autocomplete__list--virtual\"\n role=\"listbox\"\n [id]=\"_listId\"\n [attr.aria-label]=\"label() || placeholder()\"\n [itemSize]=\"virtualScrollItemSize()\"\n [style.height]=\"virtualViewportHeight()\"\n [style.width.px]=\"overlayWidth()\"\n >\n <ng-container *cdkVirtualFor=\"let opt of _filtered(); trackBy: trackByOption; let i = index\">\n <ng-container\n [ngTemplateOutlet]=\"autocompleteOptionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: opt, index: i }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"neu-autocomplete__list\"\n role=\"listbox\"\n [id]=\"_listId\"\n [attr.aria-label]=\"label() || placeholder()\"\n [style.width.px]=\"overlayWidth()\"\n >\n @for (opt of _filtered(); track opt.label; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"autocompleteOptionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: opt, index: i }\"\n />\n }\n </div>\n }\n } @else {\n <div class=\"neu-autocomplete__empty\" role=\"status\" [style.width.px]=\"overlayWidth()\">\n {{ emptyLabel() }}\n </div>\n }\n </ng-template>\n @if (hasError()) {\n <p class=\"neu-autocomplete__error\" [id]=\"_id + '-error'\" role=\"alert\">\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p class=\"neu-autocomplete__hint\" [id]=\"_id + '-hint'\">{{ hint() }}</p>\n }\n `,\n styleUrl: './neu-autocomplete.component.scss',\n})\nexport class NeuAutocompleteComponent implements ControlValueAccessor {\n // ── Inputs / Outputs ────────────────────────────────────────────\n readonly options = input<NeuAutocompleteOption[]>([]);\n readonly placeholder = input<string>('');\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('');\n readonly emptyLabel = input<string>('Sin resultados');\n readonly minLength = input<number>(0);\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('Loading...');\n readonly dropdown = input<boolean>(false);\n readonly dropdownAriaLabel = input<string>('Show suggestions');\n readonly forceSelection = input<boolean>(false);\n /** Muestra el label como flotante (true) o estático encima del campo (false) / Shows the label as floating (true) or static above the field (false) */\n readonly floatingLabel = input<boolean>(false);\n /** Tamaño del campo: 'sm' = 36px | 'md' = 48px | 'lg' = 56px / Field size */\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Habilita scroll virtual para listas largas / Enables virtual scrolling for large result lists */\n readonly virtualScroll = input<boolean>(false);\n\n /** Número de resultados visibles en el viewport virtual / Number of visible results in the virtual viewport */\n readonly virtualScrollVisibleItems = input<number>(8);\n\n /** Emitido al seleccionar una opción / Emitted when an option is selected */\n readonly optionSelected = output<NeuAutocompleteOption>();\n\n /** Emitido al cambiar el texto del input / Emitted on query change */\n readonly queryChange = output<string>();\n readonly itemTpl = contentChild(NeuAutocompleteItemDirective);\n\n // ── Internal state ───────────────────────────────────────────────\n readonly _id = `neu-autocomplete-${++_seq}`;\n readonly _listId = `${this._id}-list`;\n\n readonly _query = signal('');\n readonly _isOpen = signal(false);\n readonly _activeIndex = signal(-1);\n readonly _cvaDisabled = signal(false);\n readonly _focused = signal(false);\n private readonly _viewport = viewChild(CdkVirtualScrollViewport);\n readonly overlayWidth = signal<number | null>(null);\n readonly _viewportMargin = 16;\n readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ];\n private readonly _document = inject(DOCUMENT);\n private readonly _overlay = inject(Overlay);\n readonly overlayScrollStrategy = this._overlay.scrollStrategies.reposition();\n\n private _onChange: (v: unknown) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────────\n readonly _filtered = computed(() => {\n const q = this._query().toLowerCase().trim();\n if (!q && !this.dropdown()) return [];\n if (q.length < this.minLength()) return [];\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n readonly _activeId = computed(() => {\n const i = this._activeIndex();\n return i >= 0 ? this._optionId(i) : null;\n });\n\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly describedBy = computed(() => {\n if (this.hasError()) {\n return `${this._id}-error`;\n }\n if (this.hint()) {\n return `${this._id}-hint`;\n }\n return null;\n });\n\n readonly resultsAnnouncement = computed(() => {\n const query = this._query().trim();\n if (!query || !this._isOpen()) {\n return '';\n }\n\n const total = this._filtered().length;\n if (!total) {\n return this.emptyLabel();\n }\n\n return total === 1 ? '1 resultado disponible' : `${total} resultados disponibles`;\n });\n\n readonly virtualScrollItemSize = computed(() => {\n switch (this.size()) {\n case 'sm':\n return 36;\n case 'lg':\n return 52;\n default:\n return 40;\n }\n });\n\n readonly virtualViewportHeight = computed(\n () => `${this.virtualScrollVisibleItems() * this.virtualScrollItemSize()}px`,\n );\n\n readonly trackByOption = (index: number, option: NeuAutocompleteOption) =>\n option.value ?? option.label ?? index;\n\n _optionId(i: number): string {\n return `${this._listId}-opt-${i}`;\n }\n\n // ── HostListener close on outside click ─────────────────────────\n private readonly _el = inject(ElementRef<HTMLElement>);\n\n @HostListener('document:mousedown', ['$event'])\n onDocClick(e: MouseEvent): void {\n const target = e.target as Element | null;\n const isInsideOverlay = !!target?.closest('.neu-autocomplete__list, .neu-autocomplete__empty');\n if (!this._el.nativeElement.contains(e.target as Node) && !isInsideOverlay) {\n this._closePanel();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this._isOpen()) {\n this._syncOverlayWidth();\n }\n }\n\n // ── Event handlers ───────────────────────────────────────────────\n onQueryChange(q: string): void {\n this._query.set(q);\n this._activeIndex.set(-1);\n // Sólo abrimos si hay texto suficiente; si no, cerramos.\n // Only open when there is enough text; otherwise close.\n const minLen = Math.max(1, this.minLength());\n const shouldOpen = q.trim().length >= minLen;\n if (shouldOpen) {\n this._syncOverlayWidth();\n }\n this._isOpen.set(shouldOpen);\n this.queryChange.emit(q);\n // CVA — emit null when query is cleared\n if (!q) {\n this._onChange(null);\n }\n }\n\n _onFocus(): void {\n this._focused.set(true);\n // Abre el dropdown solo si ya hay texto escrito / Only open when there is already a query.\n if (this._query().trim().length >= Math.max(1, this.minLength())) {\n this._syncOverlayWidth();\n this._isOpen.set(true);\n }\n }\n\n _onBlur(): void {\n this._focused.set(false);\n this._onTouched();\n if (this.forceSelection() && this._query()) {\n const match = this.options().find((option) => option.label === this._query());\n if (!match) {\n this.clear();\n }\n }\n // Small delay to allow mousedown on option to fire first\n setTimeout(() => this._closePanel(), 150);\n }\n\n openAll(): void {\n this._syncOverlayWidth();\n this._isOpen.set(true);\n this._activeIndex.set(this._filtered().findIndex((option) => !option.disabled));\n }\n\n onKeyDown(e: KeyboardEvent): void {\n const total = this._filtered().length;\n if (!total && e.key !== 'Escape') return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._syncOverlayWidth();\n this._moveActiveIndex(1);\n this._isOpen.set(true);\n this._scrollActiveOptionIntoView();\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._moveActiveIndex(-1);\n this._scrollActiveOptionIntoView();\n break;\n case 'Enter': {\n const idx = this._activeIndex();\n const opt = this._filtered()[idx];\n if (opt && !opt.disabled) this.selectOption(opt);\n break;\n }\n case 'Escape':\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n break;\n }\n }\n\n private _moveActiveIndex(step: 1 | -1): void {\n const filtered = this._filtered();\n if (!filtered.length) {\n this._activeIndex.set(-1);\n return;\n }\n\n const currentIndex = this._activeIndex();\n let nextIndex = currentIndex;\n\n for (let count = 0; count < filtered.length; count += 1) {\n nextIndex =\n step === 1 ? Math.min(nextIndex + 1, filtered.length - 1) : Math.max(nextIndex - 1, 0);\n\n if (!filtered[nextIndex]?.disabled) {\n this._activeIndex.set(nextIndex);\n return;\n }\n\n if ((step === 1 && nextIndex === filtered.length - 1) || (step === -1 && nextIndex === 0)) {\n break;\n }\n }\n\n if (currentIndex === -1) {\n this._activeIndex.set(filtered.findIndex((option) => !option.disabled));\n }\n }\n\n selectOption(opt: NeuAutocompleteOption): void {\n if (opt.disabled) return;\n this._query.set(opt.label);\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n this._onChange(opt.value);\n this.optionSelected.emit(opt);\n }\n\n clear(): void {\n this._query.set('');\n this._onChange(null);\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n this.queryChange.emit('');\n }\n\n _closePanel(): void {\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n }\n\n private _scrollActiveOptionIntoView(): void {\n const activeIndex = this._activeIndex();\n if (activeIndex < 0) {\n return;\n }\n\n if (this.virtualScroll()) {\n requestAnimationFrame(() => {\n this._viewport()?.scrollToIndex(activeIndex, 'auto');\n this._viewport()?.checkViewportSize();\n });\n return;\n }\n\n requestAnimationFrame(() => {\n const activeOption = this._el.nativeElement.querySelector(\n `#${this._optionId(activeIndex)}`,\n ) as HTMLElement | null;\n const overlayOption =\n activeOption ?? this._document.getElementById(this._optionId(activeIndex));\n if (typeof overlayOption?.scrollIntoView === 'function') {\n overlayOption.scrollIntoView({ block: 'nearest' });\n }\n });\n }\n\n private _syncOverlayWidth(): void {\n const trigger = this._el.nativeElement.querySelector(\n '.neu-autocomplete__input-wrap',\n ) as HTMLElement | null;\n if (!trigger) {\n return;\n }\n const width =\n typeof trigger.getBoundingClientRect === 'function'\n ? trigger.getBoundingClientRect().width\n : 0;\n this.overlayWidth.set(Math.min(width, window.innerWidth - 32));\n if (this.virtualScroll()) {\n requestAnimationFrame(() => this._viewport()?.checkViewportSize());\n }\n }\n\n // ── CVA ──────────────────────────────────────────────────────────\n writeValue(val: unknown): void {\n if (val === null || val === undefined) {\n this._query.set('');\n return;\n }\n const match = this.options().find((o) => o.value === val);\n this._query.set(match ? match.label : String(val));\n }\n\n registerOnChange(fn: (v: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(d: boolean): void {\n this._cvaDisabled.set(d);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"neural-ui-core-autocomplete.mjs","sources":["../../../../projects/ui-core/autocomplete/neu-autocomplete.component.ts","../../../../projects/ui-core/autocomplete/neural-ui-core-autocomplete.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostListener,\n PLATFORM_ID,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { ConnectedPosition, Overlay, OverlayModule } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface NeuAutocompleteOption {\n /** Valor / Value */\n value: unknown;\n /** Texto visible / Display text */\n label: string;\n /** Desactiva la opción / Disables the option */\n disabled?: boolean;\n}\n\n@Directive({ selector: 'ng-template[neuAutocompleteItem]' })\nexport class NeuAutocompleteItemDirective {\n constructor(readonly templateRef: TemplateRef<{ $implicit: NeuAutocompleteOption }>) {}\n}\n\nlet _seq = 0;\n\n/**\n * NeuralUI Autocomplete\n *\n * Input con lista de sugerencias filtradas y navegación por teclado.\n * Implementa CVA para uso en formularios reactivos.\n *\n * Uso:\n * <neu-autocomplete\n * [options]=\"opts\"\n * placeholder=\"Buscar…\"\n * [formControl]=\"selectedCtrl\"\n * (optionSelected)=\"onSelect($event)\"\n * />\n */\n@Component({\n selector: 'neu-autocomplete',\n imports: [NgTemplateOutlet, OverlayModule, ScrollingModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuAutocompleteComponent),\n multi: true,\n },\n ],\n host: {\n class: 'neu-autocomplete',\n '[class.neu-autocomplete--open]': '_isOpen()',\n '[class.neu-autocomplete--disabled]': '_cvaDisabled()',\n '[class.neu-autocomplete--floating]': 'floatingLabel()',\n '[class.neu-autocomplete--focused]': '_focused()',\n '[class.neu-autocomplete--has-value]': '!!_query()',\n '[class.neu-autocomplete--sm]': 'size() === \"sm\"',\n '[class.neu-autocomplete--lg]': 'size() === \"lg\"',\n '[style.--neu-autocomplete-option-height]': 'virtualScrollItemSize() + \"px\"',\n },\n template: `\n @if (!floatingLabel() && label()) {\n <label class=\"neu-autocomplete__label\" [for]=\"_id\">{{ label() }}</label>\n }\n <div\n cdkOverlayOrigin\n #autocompleteOrigin=\"cdkOverlayOrigin\"\n class=\"neu-autocomplete__input-wrap\"\n [class.neu-autocomplete__input-wrap--focused]=\"_focused()\"\n [class.neu-autocomplete__input-wrap--has-value]=\"!!_query()\"\n >\n <input\n #inputEl\n class=\"neu-autocomplete__input\"\n type=\"text\"\n autocomplete=\"off\"\n role=\"combobox\"\n [id]=\"_id\"\n [attr.placeholder]=\"floatingLabel() ? ' ' : placeholder() || null\"\n [attr.aria-label]=\"label() || placeholder()\"\n [attr.aria-autocomplete]=\"'list'\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"_isOpen() ? 'true' : 'false'\"\n [attr.aria-controls]=\"_listId\"\n [attr.aria-activedescendant]=\"_activeId()\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [disabled]=\"_cvaDisabled()\"\n [value]=\"_query()\"\n (input)=\"onQueryChange($any($event.target).value)\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n />\n @if (floatingLabel() && label()) {\n <label class=\"neu-autocomplete__floating-label\" [for]=\"_id\">{{ label() }}</label>\n }\n @if (_query() && !_cvaDisabled()) {\n <button\n type=\"button\"\n class=\"neu-autocomplete__clear\"\n aria-label=\"Limpiar\"\n tabindex=\"-1\"\n (click)=\"clear()\"\n >\n ×\n </button>\n }\n @if (dropdown()) {\n <button\n type=\"button\"\n class=\"neu-autocomplete__dropdown\"\n [attr.aria-label]=\"dropdownAriaLabel()\"\n tabindex=\"-1\"\n [disabled]=\"_cvaDisabled()\"\n (click)=\"openAll()\"\n >\n ▾\n </button>\n }\n </div>\n <div class=\"neu-autocomplete__sr-status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ resultsAnnouncement() }}\n </div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"autocompleteOrigin\"\n [cdkConnectedOverlayOpen]=\"_isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"_viewportMargin\"\n (detach)=\"_closePanel()\"\n >\n @if (loading()) {\n <div class=\"neu-autocomplete__empty\" role=\"status\" [style.width.px]=\"overlayWidth()\">\n {{ loadingLabel() }}\n </div>\n } @else if (_filtered().length) {\n <ng-template #autocompleteOptionTpl let-opt let-i=\"index\">\n <div\n class=\"neu-autocomplete__option\"\n role=\"option\"\n [id]=\"_optionId(i)\"\n [class.neu-autocomplete__option--active]=\"_activeIndex() === i\"\n [class.neu-autocomplete__option--disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"_activeIndex() === i\"\n [attr.aria-disabled]=\"opt.disabled ?? false\"\n (mousedown)=\"selectOption(opt)\"\n >\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: opt }\"\n />\n } @else {\n {{ opt.label }}\n }\n </div>\n </ng-template>\n\n @if (virtualScroll()) {\n <cdk-virtual-scroll-viewport\n class=\"neu-autocomplete__list neu-autocomplete__list--virtual\"\n role=\"listbox\"\n [id]=\"_listId\"\n [attr.aria-label]=\"label() || placeholder()\"\n [itemSize]=\"virtualScrollItemSize()\"\n [style.height]=\"virtualViewportHeight()\"\n [style.width.px]=\"overlayWidth()\"\n >\n <ng-container *cdkVirtualFor=\"let opt of _filtered(); trackBy: trackByOption; let i = index\">\n <ng-container\n [ngTemplateOutlet]=\"autocompleteOptionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: opt, index: i }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"neu-autocomplete__list\"\n role=\"listbox\"\n [id]=\"_listId\"\n [attr.aria-label]=\"label() || placeholder()\"\n [style.width.px]=\"overlayWidth()\"\n >\n @for (opt of _filtered(); track opt.label; let i = $index) {\n <ng-container\n [ngTemplateOutlet]=\"autocompleteOptionTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: opt, index: i }\"\n />\n }\n </div>\n }\n } @else {\n <div class=\"neu-autocomplete__empty\" role=\"status\" [style.width.px]=\"overlayWidth()\">\n {{ emptyLabel() }}\n </div>\n }\n </ng-template>\n @if (hasError()) {\n <p class=\"neu-autocomplete__error\" [id]=\"_id + '-error'\" role=\"alert\">\n {{ errorMessage() }}\n </p>\n } @else if (hint()) {\n <p class=\"neu-autocomplete__hint\" [id]=\"_id + '-hint'\">{{ hint() }}</p>\n }\n `,\n styleUrl: './neu-autocomplete.component.scss',\n})\nexport class NeuAutocompleteComponent implements ControlValueAccessor {\n // ── Inputs / Outputs ────────────────────────────────────────────\n readonly options = input<NeuAutocompleteOption[]>([]);\n readonly placeholder = input<string>('');\n readonly label = input<string>('');\n readonly hint = input<string>('');\n readonly errorMessage = input<string>('');\n readonly emptyLabel = input<string>('Sin resultados');\n readonly minLength = input<number>(0);\n readonly loading = input<boolean>(false);\n readonly loadingLabel = input<string>('Loading...');\n readonly dropdown = input<boolean>(false);\n readonly dropdownAriaLabel = input<string>('Show suggestions');\n readonly forceSelection = input<boolean>(false);\n /** Muestra el label como flotante (true) o estático encima del campo (false) / Shows the label as floating (true) or static above the field (false) */\n readonly floatingLabel = input<boolean>(false);\n /** Tamaño del campo: 'sm' = 36px | 'md' = 48px | 'lg' = 56px / Field size */\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n\n /** Habilita scroll virtual para listas largas / Enables virtual scrolling for large result lists */\n readonly virtualScroll = input<boolean>(false);\n\n /** Número de resultados visibles en el viewport virtual / Number of visible results in the virtual viewport */\n readonly virtualScrollVisibleItems = input<number>(8);\n\n /** Emitido al seleccionar una opción / Emitted when an option is selected */\n readonly optionSelected = output<NeuAutocompleteOption>();\n\n /** Emitido al cambiar el texto del input / Emitted on query change */\n readonly queryChange = output<string>();\n readonly itemTpl = contentChild(NeuAutocompleteItemDirective);\n\n // ── Internal state ───────────────────────────────────────────────\n readonly _id = `neu-autocomplete-${++_seq}`;\n readonly _listId = `${this._id}-list`;\n\n readonly _query = signal('');\n readonly _isOpen = signal(false);\n readonly _activeIndex = signal(-1);\n readonly _cvaDisabled = signal(false);\n readonly _focused = signal(false);\n private readonly _viewport = viewChild(CdkVirtualScrollViewport);\n readonly overlayWidth = signal<number | null>(null);\n readonly _viewportMargin = 16;\n readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ];\n private readonly _document = inject(DOCUMENT);\n private readonly _platformId = inject(PLATFORM_ID);\n private readonly _overlay = inject(Overlay);\n readonly overlayScrollStrategy = this._overlay.scrollStrategies.reposition();\n\n private _onChange: (v: unknown) => void = () => {};\n private _onTouched: () => void = () => {};\n\n // ── Computed ─────────────────────────────────────────────────────\n readonly _filtered = computed(() => {\n const q = this._query().toLowerCase().trim();\n if (!q && !this.dropdown()) return [];\n if (q.length < this.minLength()) return [];\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n readonly _activeId = computed(() => {\n const i = this._activeIndex();\n return i >= 0 ? this._optionId(i) : null;\n });\n\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly describedBy = computed(() => {\n if (this.hasError()) {\n return `${this._id}-error`;\n }\n if (this.hint()) {\n return `${this._id}-hint`;\n }\n return null;\n });\n\n readonly resultsAnnouncement = computed(() => {\n const query = this._query().trim();\n if (!query || !this._isOpen()) {\n return '';\n }\n\n const total = this._filtered().length;\n if (!total) {\n return this.emptyLabel();\n }\n\n return total === 1 ? '1 resultado disponible' : `${total} resultados disponibles`;\n });\n\n readonly virtualScrollItemSize = computed(() => {\n switch (this.size()) {\n case 'sm':\n return 36;\n case 'lg':\n return 52;\n default:\n return 40;\n }\n });\n\n readonly virtualViewportHeight = computed(\n () => `${this.virtualScrollVisibleItems() * this.virtualScrollItemSize()}px`,\n );\n\n readonly trackByOption = (index: number, option: NeuAutocompleteOption) =>\n option.value ?? option.label ?? index;\n\n _optionId(i: number): string {\n return `${this._listId}-opt-${i}`;\n }\n\n // ── HostListener close on outside click ─────────────────────────\n private readonly _el = inject(ElementRef<HTMLElement>);\n\n @HostListener('document:mousedown', ['$event'])\n onDocClick(e: MouseEvent): void {\n const target = e.target as Element | null;\n const isInsideOverlay = !!target?.closest('.neu-autocomplete__list, .neu-autocomplete__empty');\n if (!this._el.nativeElement.contains(e.target as Node) && !isInsideOverlay) {\n this._closePanel();\n }\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this._isOpen()) {\n this._syncOverlayWidth();\n }\n }\n\n // ── Event handlers ───────────────────────────────────────────────\n onQueryChange(q: string): void {\n this._query.set(q);\n this._activeIndex.set(-1);\n // Sólo abrimos si hay texto suficiente; si no, cerramos.\n // Only open when there is enough text; otherwise close.\n const minLen = Math.max(1, this.minLength());\n const shouldOpen = q.trim().length >= minLen;\n if (shouldOpen) {\n this._syncOverlayWidth();\n }\n this._isOpen.set(shouldOpen);\n this.queryChange.emit(q);\n // CVA — emit null when query is cleared\n if (!q) {\n this._onChange(null);\n }\n }\n\n _onFocus(): void {\n this._focused.set(true);\n // Abre el dropdown solo si ya hay texto escrito / Only open when there is already a query.\n if (this._query().trim().length >= Math.max(1, this.minLength())) {\n this._syncOverlayWidth();\n this._isOpen.set(true);\n }\n }\n\n _onBlur(): void {\n this._focused.set(false);\n this._onTouched();\n if (this.forceSelection() && this._query()) {\n const match = this.options().find((option) => option.label === this._query());\n if (!match) {\n this.clear();\n }\n }\n // Small delay to allow mousedown on option to fire first\n setTimeout(() => this._closePanel(), 150);\n }\n\n openAll(): void {\n this._syncOverlayWidth();\n this._isOpen.set(true);\n this._activeIndex.set(this._filtered().findIndex((option) => !option.disabled));\n }\n\n onKeyDown(e: KeyboardEvent): void {\n const total = this._filtered().length;\n if (!total && e.key !== 'Escape') return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._syncOverlayWidth();\n this._moveActiveIndex(1);\n this._isOpen.set(true);\n this._scrollActiveOptionIntoView();\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._moveActiveIndex(-1);\n this._scrollActiveOptionIntoView();\n break;\n case 'Enter': {\n const idx = this._activeIndex();\n const opt = this._filtered()[idx];\n if (opt && !opt.disabled) this.selectOption(opt);\n break;\n }\n case 'Escape':\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n break;\n }\n }\n\n private _moveActiveIndex(step: 1 | -1): void {\n const filtered = this._filtered();\n if (!filtered.length) {\n this._activeIndex.set(-1);\n return;\n }\n\n const currentIndex = this._activeIndex();\n let nextIndex = currentIndex;\n\n for (let count = 0; count < filtered.length; count += 1) {\n nextIndex =\n step === 1 ? Math.min(nextIndex + 1, filtered.length - 1) : Math.max(nextIndex - 1, 0);\n\n if (!filtered[nextIndex]?.disabled) {\n this._activeIndex.set(nextIndex);\n return;\n }\n\n if ((step === 1 && nextIndex === filtered.length - 1) || (step === -1 && nextIndex === 0)) {\n break;\n }\n }\n\n if (currentIndex === -1) {\n this._activeIndex.set(filtered.findIndex((option) => !option.disabled));\n }\n }\n\n selectOption(opt: NeuAutocompleteOption): void {\n if (opt.disabled) return;\n this._query.set(opt.label);\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n this._onChange(opt.value);\n this.optionSelected.emit(opt);\n }\n\n clear(): void {\n this._query.set('');\n this._onChange(null);\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n this.queryChange.emit('');\n }\n\n _closePanel(): void {\n this._isOpen.set(false);\n this._activeIndex.set(-1);\n }\n\n private _scrollActiveOptionIntoView(): void {\n const activeIndex = this._activeIndex();\n if (activeIndex < 0) {\n return;\n }\n\n if (this.virtualScroll()) {\n this._requestFrame(() => {\n this._viewport()?.scrollToIndex(activeIndex, 'auto');\n this._viewport()?.checkViewportSize();\n });\n return;\n }\n\n this._requestFrame(() => {\n const activeOption = this._el.nativeElement.querySelector(\n `#${this._optionId(activeIndex)}`,\n ) as HTMLElement | null;\n const overlayOption =\n activeOption ?? this._document.getElementById(this._optionId(activeIndex));\n if (typeof overlayOption?.scrollIntoView === 'function') {\n overlayOption.scrollIntoView({ block: 'nearest' });\n }\n });\n }\n\n private _syncOverlayWidth(): void {\n if (!isPlatformBrowser(this._platformId)) {\n return;\n }\n const trigger = this._el.nativeElement.querySelector(\n '.neu-autocomplete__input-wrap',\n ) as HTMLElement | null;\n if (!trigger) {\n return;\n }\n const width =\n typeof trigger.getBoundingClientRect === 'function'\n ? trigger.getBoundingClientRect().width\n : 0;\n this.overlayWidth.set(Math.min(width, window.innerWidth - 32));\n if (this.virtualScroll()) {\n this._requestFrame(() => this._viewport()?.checkViewportSize());\n }\n }\n\n private _requestFrame(callback: FrameRequestCallback): void {\n if (isPlatformBrowser(this._platformId)) {\n requestAnimationFrame(callback);\n }\n }\n\n // ── CVA ──────────────────────────────────────────────────────────\n writeValue(val: unknown): void {\n if (val === null || val === undefined) {\n this._query.set('');\n return;\n }\n const match = this.options().find((o) => o.value === val);\n this._query.set(match ? match.label : String(val));\n }\n\n registerOnChange(fn: (v: unknown) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(d: boolean): void {\n this._cvaDisabled.set(d);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;MAiCa,4BAA4B,CAAA;AAClB,IAAA,WAAA;AAArB,IAAA,WAAA,CAAqB,WAA8D,EAAA;QAA9D,IAAA,CAAA,WAAW,GAAX,WAAW;IAAsD;wGAD3E,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,SAAS;mBAAC,EAAE,QAAQ,EAAE,kCAAkC,EAAE;;AAK3D,IAAI,IAAI,GAAG,CAAC;AAEZ;;;;;;;;;;;;;AAaG;MA8KU,wBAAwB,CAAA;;AAE1B,IAAA,OAAO,GAAG,KAAK,CAA0B,EAAE,8EAAC;AAC5C,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,kFAAC;AAC/B,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,2EAAC;AACxB,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,mFAAC;AAChC,IAAA,UAAU,GAAG,KAAK,CAAS,gBAAgB,iFAAC;AAC5C,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,gFAAC;AAC5B,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,8EAAC;AAC/B,IAAA,YAAY,GAAG,KAAK,CAAS,YAAY,mFAAC;AAC1C,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChC,IAAA,iBAAiB,GAAG,KAAK,CAAS,kBAAkB,wFAAC;AACrD,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,qFAAC;;AAEtC,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,oFAAC;;AAErC,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,2EAAC;;AAGtC,IAAA,aAAa,GAAG,KAAK,CAAU,KAAK,oFAAC;;AAGrC,IAAA,yBAAyB,GAAG,KAAK,CAAS,CAAC,gGAAC;;IAG5C,cAAc,GAAG,MAAM,EAAyB;;IAGhD,WAAW,GAAG,MAAM,EAAU;AAC9B,IAAA,OAAO,GAAG,YAAY,CAAC,4BAA4B,8EAAC;;AAGpD,IAAA,GAAG,GAAG,CAAA,iBAAA,EAAoB,EAAE,IAAI,EAAE;AAClC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,OAAO;AAE5B,IAAA,MAAM,GAAG,MAAM,CAAC,EAAE,6EAAC;AACnB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,mFAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC5B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AAChB,IAAA,SAAS,GAAG,SAAS,CAAC,wBAAwB,gFAAC;AACvD,IAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,mFAAC;IAC1C,eAAe,GAAG,EAAE;AACpB,IAAA,gBAAgB,GAAwB;AAC/C,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,CAAC,CAAC;AACZ,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,CAAC,CAAC;AACZ,SAAA;KACF;AACgB,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAEpE,IAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;AAC1C,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;;AAGhC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAC5C,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,EAAE;AACrC,QAAA,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,EAAE;QAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxE,IAAA,CAAC,gFAAC;AAEO,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1C,IAAA,CAAC,gFAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,+EAAC;AAEhD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,QAAQ;QAC5B;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,YAAA,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,OAAO;QAC3B;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,kFAAC;AAEO,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;QAClC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7B,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;QAC1B;AAEA,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,wBAAwB,GAAG,CAAA,EAAG,KAAK,yBAAyB;AACnF,IAAA,CAAC,0FAAC;AAEO,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,QAAQ,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,EAAE;AACX,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,EAAE;AACX,YAAA;AACE,gBAAA,OAAO,EAAE;;AAEf,IAAA,CAAC,4FAAC;AAEO,IAAA,qBAAqB,GAAG,QAAQ,CACvC,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA,EAAA,CAAI,4FAC7E;AAEQ,IAAA,aAAa,GAAG,CAAC,KAAa,EAAE,MAA6B,KACpE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK;AAEvC,IAAA,SAAS,CAAC,CAAS,EAAA;AACjB,QAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA,KAAA,EAAQ,CAAC,EAAE;IACnC;;AAGiB,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;AAGtD,IAAA,UAAU,CAAC,CAAa,EAAA;AACtB,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAwB;QACzC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,mDAAmD,CAAC;AAC9F,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,IAAI,CAAC,eAAe,EAAE;YAC1E,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;;AAGA,IAAA,aAAa,CAAC,CAAS,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;AAGzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,MAAM;QAC5C,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,iBAAiB,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;;QAExB,IAAI,CAAC,CAAC,EAAE;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACtB;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;QAEvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;YAChE,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7E,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,KAAK,EAAE;YACd;QACF;;QAEA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC;IAC3C;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjF;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM;AACrC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE;AAClC,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;gBAClB,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACtB,IAAI,CAAC,2BAA2B,EAAE;gBAClC;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,2BAA2B,EAAE;gBAClC;YACF,KAAK,OAAO,EAAE;AACZ,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;gBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC;AACjC,gBAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAChD;YACF;AACA,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzB;;IAEN;AAEQ,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,IAAI,SAAS,GAAG,YAAY;AAE5B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;YACvD,SAAS;AACP,gBAAA,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;YAExF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;AAClC,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;gBAChC;YACF;YAEA,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;gBACzF;YACF;QACF;AAEA,QAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzE;IACF;AAEA,IAAA,YAAY,CAAC,GAA0B,EAAA;QACrC,IAAI,GAAG,CAAC,QAAQ;YAAE;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;IAC/B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B;IAEQ,2BAA2B,GAAA;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AACvC,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAK;gBACtB,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC;AACpD,gBAAA,IAAI,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE;AACvC,YAAA,CAAC,CAAC;YACF;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,MAAK;AACtB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CACvD,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA,CAAE,CACZ;AACvB,YAAA,MAAM,aAAa,GACjB,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5E,YAAA,IAAI,OAAO,aAAa,EAAE,cAAc,KAAK,UAAU,EAAE;gBACvD,aAAa,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACxC;QACF;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAClD,+BAA+B,CACV;QACvB,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AACA,QAAA,MAAM,KAAK,GACT,OAAO,OAAO,CAAC,qBAAqB,KAAK;AACvC,cAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC;cAChC,CAAC;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC;QACjE;IACF;AAEQ,IAAA,aAAa,CAAC,QAA8B,EAAA;AAClD,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACvC,qBAAqB,CAAC,QAAQ,CAAC;QACjC;IACF;;AAGA,IAAA,UAAU,CAAC,GAAY,EAAA;QACrB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACpD;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,CAAU,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B;wGAzWW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,kCAAA,EAAA,gBAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,iCAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,wCAAA,EAAA,kCAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAxKxB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgM+B,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAWrB,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/LrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6+JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxKS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA2K/C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA7KpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,aAAA,EAC5C,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,gCAAgC,EAAE,WAAW;AAC7C,wBAAA,oCAAoC,EAAE,gBAAgB;AACtD,wBAAA,oCAAoC,EAAE,iBAAiB;AACvD,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,qCAAqC,EAAE,YAAY;AACnD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,0CAA0C,EAAE,gCAAgC;qBAC7E,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6+JAAA,CAAA,EAAA;AAiC+B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,4BAA4B,wFAWrB,wBAAwB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA;sBAyG9D,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAS7C,YAAY;uBAAC,eAAe;;;AC7X/B;;AAEG;;;;"}
|
|
@@ -83,7 +83,7 @@ class NeuChipComponent {
|
|
|
83
83
|
</svg>
|
|
84
84
|
</button>
|
|
85
85
|
}
|
|
86
|
-
`, isInline: true, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
86
|
+
`, isInline: true, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}html[data-theme=dark] .neu-chip--warning.neu-chip--selected{background:#a16207;color:#fff}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
87
87
|
}
|
|
88
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuChipComponent, decorators: [{
|
|
89
89
|
type: Component,
|
|
@@ -119,7 +119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
119
119
|
</svg>
|
|
120
120
|
</button>
|
|
121
121
|
}
|
|
122
|
-
`, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"] }]
|
|
122
|
+
`, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}html[data-theme=dark] .neu-chip--default{color:#f2f7fb;background:#21262d;border-color:#6e7681}html[data-theme=dark] .neu-chip--primary{color:#e8f4ff;background:#0b3b74;border-color:#65b7ff}html[data-theme=dark] .neu-chip--success{color:#d7fbe8;background:#0f5132;border-color:#55d98c}html[data-theme=dark] .neu-chip--warning{color:#fff4cc;background:#6b4e00;border-color:#facc15}html[data-theme=dark] .neu-chip--danger{color:#ffe2e2;background:#7f1d1d;border-color:#f87171}html[data-theme=dark] .neu-chip--warning.neu-chip--selected{background:#a16207;color:#fff}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"] }]
|
|
123
123
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removeAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeAriaLabel", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], removed: [{ type: i0.Output, args: ["removed"] }] } });
|
|
124
124
|
|
|
125
125
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"neural-ui-core-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, input, output, signal, viewChildren, effect, untracked, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, PLATFORM_ID, input, output, signal, viewChildren, effect, untracked, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
3
4
|
import { moveItemInArray, CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropList } from '@angular/cdk/drag-drop';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -14,6 +15,7 @@ import { moveItemInArray, CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropLi
|
|
|
14
15
|
*/
|
|
15
16
|
class NeuDashboardGridComponent {
|
|
16
17
|
_host = inject(ElementRef);
|
|
18
|
+
_platformId = inject(PLATFORM_ID);
|
|
17
19
|
tiles = input([], ...(ngDevMode ? [{ debugName: "tiles" }] : /* istanbul ignore next */ []));
|
|
18
20
|
columns = input(3, ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
19
21
|
/** Emitido cuando el orden cambia / Emitted when order changes */
|
|
@@ -28,7 +30,9 @@ class NeuDashboardGridComponent {
|
|
|
28
30
|
effect(() => {
|
|
29
31
|
this._orderedTiles();
|
|
30
32
|
this._tileSlots();
|
|
31
|
-
|
|
33
|
+
if (isPlatformBrowser(this._platformId)) {
|
|
34
|
+
queueMicrotask(() => this._attachProjectedTiles());
|
|
35
|
+
}
|
|
32
36
|
});
|
|
33
37
|
}
|
|
34
38
|
_onDrop(event) {
|
|
@@ -38,7 +42,9 @@ class NeuDashboardGridComponent {
|
|
|
38
42
|
this.orderChange.emit(tiles);
|
|
39
43
|
}
|
|
40
44
|
_attachProjectedTiles() {
|
|
41
|
-
|
|
45
|
+
if (!isPlatformBrowser(this._platformId))
|
|
46
|
+
return;
|
|
47
|
+
const slots = new Map(this._tileSlots().filter(Boolean).map((slotRef) => [
|
|
42
48
|
slotRef.nativeElement.dataset['slotId'],
|
|
43
49
|
slotRef.nativeElement,
|
|
44
50
|
]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-dashboard-grid.mjs","sources":["../../../../projects/ui-core/dashboard-grid/neu-dashboard-grid.component.ts","../../../../projects/ui-core/dashboard-grid/neural-ui-core-dashboard-grid.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragPlaceholder,\n CdkDragPreview,\n CdkDropList,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\n\nexport interface NeuDashboardTileConfig {\n /** Identificador único / Unique identifier */\n id: string;\n /** Número de columnas que ocupa / Column span */\n cols?: number;\n /** Número de filas que ocupa / Row span */\n rows?: number;\n /** Título del tile / Tile title */\n title?: string;\n}\n\n/**\n * NeuralUI DashboardGrid\n *\n * Cuadrícula de tiles reordenables mediante drag-and-drop (CDK DragDrop).\n *\n * Uso:\n * <neu-dashboard-grid [tiles]=\"tileConfigs\" [columns]=\"3\">\n * <ng-template neuDashboardTile id=\"tile-1\">...</ng-template>\n * </neu-dashboard-grid>\n */\n@Component({\n selector: 'neu-dashboard-grid',\n imports: [CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropList],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-dg',\n '[style.--neu-dg-cols]': 'columns()',\n },\n template: `\n <div class=\"neu-dg__projection-source\" aria-hidden=\"true\">\n <ng-content />\n </div>\n\n <div\n class=\"neu-dg__grid\"\n cdkDropList\n [cdkDropListData]=\"_orderedTiles()\"\n (cdkDropListDropped)=\"_onDrop($event)\"\n >\n @for (tile of _orderedTiles(); track tile.id) {\n <div\n class=\"neu-dg__tile\"\n cdkDrag\n [cdkDragData]=\"tile\"\n [style.--tile-cols]=\"tile.cols ?? 1\"\n [style.--tile-rows]=\"tile.rows ?? 1\"\n >\n <!-- Drag handle -->\n <div class=\"neu-dg__tile-handle\" cdkDragHandle>\n @if (tile.title) {\n <span class=\"neu-dg__tile-title\">{{ tile.title }}</span>\n }\n <span class=\"neu-dg__handle-icon\" aria-hidden=\"true\">⠿</span>\n </div>\n <!-- Drag placeholder -->\n <div *cdkDragPlaceholder class=\"neu-dg__placeholder\"></div>\n <!-- Drag preview -->\n <div *cdkDragPreview class=\"neu-dg__preview\">{{ tile.title ?? tile.id }}</div>\n <!-- Content slot -->\n <div class=\"neu-dg__tile-content\" tabindex=\"0\">\n <div class=\"neu-dg__tile-slot\" #tileSlot [attr.data-slot-id]=\"tile.id\"></div>\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './neu-dashboard-grid.component.scss',\n})\nexport class NeuDashboardGridComponent {\n private readonly _host = inject(ElementRef) as ElementRef<HTMLElement>;\n\n readonly tiles = input<NeuDashboardTileConfig[]>([]);\n readonly columns = input<number>(3);\n\n /** Emitido cuando el orden cambia / Emitted when order changes */\n readonly orderChange = output<NeuDashboardTileConfig[]>();\n\n readonly _orderedTiles = signal<NeuDashboardTileConfig[]>([]);\n readonly _tileSlots = viewChildren<ElementRef<HTMLElement>>('tileSlot');\n\n constructor() {\n effect(() => {\n const t = this.tiles();\n untracked(() => this._orderedTiles.set([...t]));\n });\n\n effect(() => {\n this._orderedTiles();\n this._tileSlots();\n queueMicrotask(() => this._attachProjectedTiles());\n });\n }\n\n _onDrop(event: CdkDragDrop<NeuDashboardTileConfig[]>): void {\n const tiles = [...this._orderedTiles()];\n moveItemInArray(tiles, event.previousIndex, event.currentIndex);\n this._orderedTiles.set(tiles);\n this.orderChange.emit(tiles);\n }\n\n private _attachProjectedTiles(): void {\n const slots = new Map(\n this._tileSlots().map((slotRef) => [\n slotRef.nativeElement.dataset['slotId'],\n slotRef.nativeElement,\n ]),\n );\n\n const projectedTiles = this._host.nativeElement.querySelectorAll(\n '[data-tile-id]',\n ) as NodeListOf<HTMLElement>;\n\n for (const tileContent of projectedTiles) {\n const tileId = tileContent.dataset['tileId'];\n const slot = slots.get(tileId);\n\n if (slot && tileContent.parentElement !== slot) {\n slot.appendChild(tileContent);\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"neural-ui-core-dashboard-grid.mjs","sources":["../../../../projects/ui-core/dashboard-grid/neu-dashboard-grid.component.ts","../../../../projects/ui-core/dashboard-grid/neural-ui-core-dashboard-grid.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n PLATFORM_ID,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragPlaceholder,\n CdkDragPreview,\n CdkDropList,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\n\nexport interface NeuDashboardTileConfig {\n /** Identificador único / Unique identifier */\n id: string;\n /** Número de columnas que ocupa / Column span */\n cols?: number;\n /** Número de filas que ocupa / Row span */\n rows?: number;\n /** Título del tile / Tile title */\n title?: string;\n}\n\n/**\n * NeuralUI DashboardGrid\n *\n * Cuadrícula de tiles reordenables mediante drag-and-drop (CDK DragDrop).\n *\n * Uso:\n * <neu-dashboard-grid [tiles]=\"tileConfigs\" [columns]=\"3\">\n * <ng-template neuDashboardTile id=\"tile-1\">...</ng-template>\n * </neu-dashboard-grid>\n */\n@Component({\n selector: 'neu-dashboard-grid',\n imports: [CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropList],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-dg',\n '[style.--neu-dg-cols]': 'columns()',\n },\n template: `\n <div class=\"neu-dg__projection-source\" aria-hidden=\"true\">\n <ng-content />\n </div>\n\n <div\n class=\"neu-dg__grid\"\n cdkDropList\n [cdkDropListData]=\"_orderedTiles()\"\n (cdkDropListDropped)=\"_onDrop($event)\"\n >\n @for (tile of _orderedTiles(); track tile.id) {\n <div\n class=\"neu-dg__tile\"\n cdkDrag\n [cdkDragData]=\"tile\"\n [style.--tile-cols]=\"tile.cols ?? 1\"\n [style.--tile-rows]=\"tile.rows ?? 1\"\n >\n <!-- Drag handle -->\n <div class=\"neu-dg__tile-handle\" cdkDragHandle>\n @if (tile.title) {\n <span class=\"neu-dg__tile-title\">{{ tile.title }}</span>\n }\n <span class=\"neu-dg__handle-icon\" aria-hidden=\"true\">⠿</span>\n </div>\n <!-- Drag placeholder -->\n <div *cdkDragPlaceholder class=\"neu-dg__placeholder\"></div>\n <!-- Drag preview -->\n <div *cdkDragPreview class=\"neu-dg__preview\">{{ tile.title ?? tile.id }}</div>\n <!-- Content slot -->\n <div class=\"neu-dg__tile-content\" tabindex=\"0\">\n <div class=\"neu-dg__tile-slot\" #tileSlot [attr.data-slot-id]=\"tile.id\"></div>\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './neu-dashboard-grid.component.scss',\n})\nexport class NeuDashboardGridComponent {\n private readonly _host = inject(ElementRef) as ElementRef<HTMLElement>;\n private readonly _platformId = inject(PLATFORM_ID);\n\n readonly tiles = input<NeuDashboardTileConfig[]>([]);\n readonly columns = input<number>(3);\n\n /** Emitido cuando el orden cambia / Emitted when order changes */\n readonly orderChange = output<NeuDashboardTileConfig[]>();\n\n readonly _orderedTiles = signal<NeuDashboardTileConfig[]>([]);\n readonly _tileSlots = viewChildren<ElementRef<HTMLElement>>('tileSlot');\n\n constructor() {\n effect(() => {\n const t = this.tiles();\n untracked(() => this._orderedTiles.set([...t]));\n });\n\n effect(() => {\n this._orderedTiles();\n this._tileSlots();\n if (isPlatformBrowser(this._platformId)) {\n queueMicrotask(() => this._attachProjectedTiles());\n }\n });\n }\n\n _onDrop(event: CdkDragDrop<NeuDashboardTileConfig[]>): void {\n const tiles = [...this._orderedTiles()];\n moveItemInArray(tiles, event.previousIndex, event.currentIndex);\n this._orderedTiles.set(tiles);\n this.orderChange.emit(tiles);\n }\n\n private _attachProjectedTiles(): void {\n if (!isPlatformBrowser(this._platformId)) return;\n const slots = new Map(\n this._tileSlots().filter(Boolean).map((slotRef) => [\n slotRef.nativeElement.dataset['slotId'],\n slotRef.nativeElement,\n ]),\n );\n\n const projectedTiles = this._host.nativeElement.querySelectorAll(\n '[data-tile-id]',\n ) as NodeListOf<HTMLElement>;\n\n for (const tileContent of projectedTiles) {\n const tileId = tileContent.dataset['tileId'];\n const slot = slots.get(tileId);\n\n if (slot && tileContent.parentElement !== slot) {\n slot.appendChild(tileContent);\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -267,7 +267,7 @@ class NeuDataViewComponent {
|
|
|
267
267
|
@if (footerTpl()) {
|
|
268
268
|
<ng-container [ngTemplateOutlet]="footerTpl()!.templateRef" />
|
|
269
269
|
}
|
|
270
|
-
`, isInline: true, styles: [".neu-data-view{display:block;color:var(--neu-text, #111827)}.neu-data-view__toolbar,.neu-data-view__pagination{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.neu-data-view__search input{min-height:2.25rem;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);color:inherit;padding:0 .75rem}.neu-data-view__sort{min-width:12rem}.neu-data-view__modes{display:inline-flex;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__mode{border:0!important;border-radius:0!important;text-transform:capitalize;color:var(--neu-text, #111827)}.neu-data-view__mode--active{background:var(--neu-primary-solid, var(--neu-primary, #2563eb));color:var(--neu-primary-solid-fg, var(--neu-primary-fg, #fff))}html[data-theme=dark] .neu-data-view__mode{color:#f2f7fb}html[data-theme=dark] .neu-data-view__mode--active{background
|
|
270
|
+
`, isInline: true, styles: [".neu-data-view{display:block;color:var(--neu-text, #111827)}.neu-data-view__toolbar,.neu-data-view__pagination{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.neu-data-view__search input{min-height:2.25rem;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);color:inherit;padding:0 .75rem}.neu-data-view__sort{min-width:12rem}.neu-data-view__modes{display:inline-flex;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__mode{border:0!important;border-radius:0!important;text-transform:capitalize;color:var(--neu-text, #111827)}.neu-data-view__mode--active{background:var(--neu-primary-solid, var(--neu-primary, #2563eb));color:var(--neu-primary-solid-fg, var(--neu-primary-fg, #fff))}html[data-theme=dark] .neu-data-view__mode{color:#f2f7fb}html[data-theme=dark] .neu-data-view__mode--active{background:var(--neu-primary-solid);color:var(--neu-primary-solid-fg)}.neu-data-view__items{display:grid;gap:.75rem}.neu-data-view--grid .neu-data-view__items{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.neu-data-view--table .neu-data-view__items{gap:0;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__item{border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);padding:.875rem}.neu-data-view--table .neu-data-view__item{border:0;border-bottom:1px solid var(--neu-border, #d1d5db);border-radius:0}.neu-data-view__empty,.neu-data-view__loading{border:1px dashed var(--neu-border, #d1d5db);border-radius:.5rem;padding:2rem;text-align:center;color:var(--neu-text-muted, #6b7280)}.neu-data-view__pagination{justify-content:flex-end;margin-top:1rem;margin-bottom:0}.neu-data-view__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: NeuButtonComponent, selector: "button[neu-button]", inputs: ["variant", "size", "disabled", "loading", "fullWidth", "icon", "iconPosition", "iconOnly", "ariaLabel"], outputs: ["neuClick"] }, { kind: "component", type: NeuSelectComponent, selector: "neu-select", inputs: ["options", "label", "placeholder", "errorMessage", "hint", "disabled", "floatingLabel", "size", "searchable", "searchPlaceholder", "loading", "loadingLabel", "clearable", "virtualScroll", "virtualScrollVisibleItems", "noResultsMessage", "clearAriaLabel", "urlParam"], outputs: ["selectionChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
271
271
|
}
|
|
272
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuDataViewComponent, decorators: [{
|
|
273
273
|
type: Component,
|
|
@@ -375,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
375
375
|
@if (footerTpl()) {
|
|
376
376
|
<ng-container [ngTemplateOutlet]="footerTpl()!.templateRef" />
|
|
377
377
|
}
|
|
378
|
-
`, styles: [".neu-data-view{display:block;color:var(--neu-text, #111827)}.neu-data-view__toolbar,.neu-data-view__pagination{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.neu-data-view__search input{min-height:2.25rem;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);color:inherit;padding:0 .75rem}.neu-data-view__sort{min-width:12rem}.neu-data-view__modes{display:inline-flex;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__mode{border:0!important;border-radius:0!important;text-transform:capitalize;color:var(--neu-text, #111827)}.neu-data-view__mode--active{background:var(--neu-primary-solid, var(--neu-primary, #2563eb));color:var(--neu-primary-solid-fg, var(--neu-primary-fg, #fff))}html[data-theme=dark] .neu-data-view__mode{color:#f2f7fb}html[data-theme=dark] .neu-data-view__mode--active{background
|
|
378
|
+
`, styles: [".neu-data-view{display:block;color:var(--neu-text, #111827)}.neu-data-view__toolbar,.neu-data-view__pagination{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem}.neu-data-view__search input{min-height:2.25rem;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);color:inherit;padding:0 .75rem}.neu-data-view__sort{min-width:12rem}.neu-data-view__modes{display:inline-flex;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__mode{border:0!important;border-radius:0!important;text-transform:capitalize;color:var(--neu-text, #111827)}.neu-data-view__mode--active{background:var(--neu-primary-solid, var(--neu-primary, #2563eb));color:var(--neu-primary-solid-fg, var(--neu-primary-fg, #fff))}html[data-theme=dark] .neu-data-view__mode{color:#f2f7fb}html[data-theme=dark] .neu-data-view__mode--active{background:var(--neu-primary-solid);color:var(--neu-primary-solid-fg)}.neu-data-view__items{display:grid;gap:.75rem}.neu-data-view--grid .neu-data-view__items{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.neu-data-view--table .neu-data-view__items{gap:0;border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;overflow:hidden}.neu-data-view__item{border:1px solid var(--neu-border, #d1d5db);border-radius:.5rem;background:var(--neu-surface, #fff);padding:.875rem}.neu-data-view--table .neu-data-view__item{border:0;border-bottom:1px solid var(--neu-border, #d1d5db);border-radius:0}.neu-data-view__empty,.neu-data-view__loading{border:1px dashed var(--neu-border, #d1d5db);border-radius:.5rem;padding:2rem;text-align:center;color:var(--neu-text-muted, #6b7280)}.neu-data-view__pagination{justify-content:flex-end;margin-top:1rem;margin-bottom:0}.neu-data-view__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}\n"] }]
|
|
379
379
|
}], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], modes: [{ type: i0.Input, args: [{ isSignal: true, alias: "modes", required: false }] }], viewSwitcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewSwitcher", required: false }] }], viewAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewAriaLabel", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchFields: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFields", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], searchAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchAriaLabel", required: false }] }], sortOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortOptions", required: false }] }], sortAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortAriaLabel", required: false }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], emptyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyLabel", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], loadingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingLabel", required: false }] }], previousLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousLabel", required: false }] }], nextLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextLabel", required: false }] }], paginationAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationAriaLabel", required: false }] }], trackBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackBy", required: false }] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }], itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuDataViewItemDirective), { isSignal: true }] }], headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuDataViewHeaderDirective), { isSignal: true }] }], footerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuDataViewFooterDirective), { isSignal: true }] }] } });
|
|
380
380
|
|
|
381
381
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neural-ui-core-data-view.mjs","sources":["../../../../projects/ui-core/data-view/neu-data-view.component.ts","../../../../projects/ui-core/data-view/neural-ui-core-data-view.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NeuButtonComponent } from '@neural-ui/core/button';\nimport { NeuSelectComponent, type NeuSelectOption } from '@neural-ui/core/select';\n\nexport type NeuDataViewMode = 'list' | 'grid' | 'table';\nexport type NeuDataViewSortDirection = 'asc' | 'desc';\n\nexport interface NeuDataViewSortOption {\n label: string;\n value: string;\n direction?: NeuDataViewSortDirection;\n}\n\nexport interface NeuDataViewPageEvent {\n page: number;\n pageSize: number;\n}\n\n@Directive({ selector: 'ng-template[neuDataViewItem]' })\nexport class NeuDataViewItemDirective {\n constructor(readonly templateRef: TemplateRef<{ $implicit: unknown; index: number }>) {}\n}\n\n@Directive({ selector: 'ng-template[neuDataViewHeader]' })\nexport class NeuDataViewHeaderDirective {\n constructor(readonly templateRef: TemplateRef<void>) {}\n}\n\n@Directive({ selector: 'ng-template[neuDataViewFooter]' })\nexport class NeuDataViewFooterDirective {\n constructor(readonly templateRef: TemplateRef<void>) {}\n}\n\n@Component({\n selector: 'neu-data-view',\n imports: [NgTemplateOutlet, ReactiveFormsModule, NeuButtonComponent, NeuSelectComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-data-view',\n '[class.neu-data-view--grid]': 'mode() === \"grid\"',\n '[class.neu-data-view--list]': 'mode() === \"list\"',\n '[class.neu-data-view--table]': 'mode() === \"table\"',\n },\n template: `\n @if (headerTpl()) {\n <ng-container [ngTemplateOutlet]=\"headerTpl()!.templateRef\" />\n }\n\n @if (showToolbar()) {\n <div class=\"neu-data-view__toolbar\">\n @if (searchable()) {\n <label class=\"neu-data-view__search\">\n <span class=\"neu-data-view__sr\">{{ searchAriaLabel() }}</span>\n <input\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"query()\"\n (input)=\"setQuery($any($event.target).value)\"\n />\n </label>\n }\n @if (sortOptions().length) {\n <neu-select\n class=\"neu-data-view__sort\"\n [floatingLabel]=\"false\"\n [placeholder]=\"sortAriaLabel()\"\n [options]=\"_selectSortOptions()\"\n [formControl]=\"_sortControl\"\n size=\"sm\"\n />\n }\n @if (viewSwitcher()) {\n <div class=\"neu-data-view__modes\" role=\"group\" [attr.aria-label]=\"viewAriaLabel()\">\n @for (item of modes(); track item) {\n <button\n neu-button\n type=\"button\"\n class=\"neu-data-view__mode\"\n variant=\"ghost\"\n size=\"sm\"\n [class.neu-data-view__mode--active]=\"mode() === item\"\n [attr.aria-pressed]=\"mode() === item\"\n (click)=\"setMode(item)\"\n >\n {{ item }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n @if (loading()) {\n <div class=\"neu-data-view__loading\" role=\"status\">{{ loadingLabel() }}</div>\n } @else if (pagedItems().length === 0) {\n <div class=\"neu-data-view__empty\" role=\"status\">{{ emptyLabel() }}</div>\n } @else {\n <div class=\"neu-data-view__items\" [attr.role]=\"mode() === 'table' ? 'table' : 'list'\">\n @for (item of pagedItems(); track trackItem($index, item); let i = $index) {\n <div class=\"neu-data-view__item\" [attr.role]=\"mode() === 'table' ? 'row' : 'listitem'\">\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\n />\n } @else {\n {{ displayItem(item) }}\n }\n </div>\n }\n </div>\n }\n\n @if (pagination() && pageCount() > 1) {\n <nav class=\"neu-data-view__pagination\" [attr.aria-label]=\"paginationAriaLabel()\">\n <button\n neu-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"page() <= 1\"\n (click)=\"previousPage()\"\n >\n {{ previousLabel() }}\n </button>\n <span>{{ page() }} / {{ pageCount() }}</span>\n <button\n neu-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"page() >= pageCount()\"\n (click)=\"nextPage()\"\n >\n {{ nextLabel() }}\n </button>\n </nav>\n }\n\n @if (footerTpl()) {\n <ng-container [ngTemplateOutlet]=\"footerTpl()!.templateRef\" />\n }\n `,\n styleUrl: './neu-data-view.component.scss',\n})\nexport class NeuDataViewComponent {\n private readonly _destroyRef = inject(DestroyRef);\n\n readonly items = input<unknown[]>([]);\n readonly mode = input<NeuDataViewMode>('list');\n readonly modes = input<NeuDataViewMode[]>(['list', 'grid', 'table']);\n readonly viewSwitcher = input(true);\n readonly viewAriaLabel = input('View mode');\n readonly searchable = input(true);\n readonly searchFields = input<string[]>([]);\n readonly searchPlaceholder = input('Search...');\n readonly searchAriaLabel = input('Search items');\n readonly sortOptions = input<NeuDataViewSortOption[]>([]);\n readonly sortAriaLabel = input('Sort items');\n readonly pagination = input(true);\n readonly pageSize = input(9);\n readonly emptyLabel = input('No items found');\n readonly loading = input(false);\n readonly loadingLabel = input('Loading...');\n readonly previousLabel = input('Previous');\n readonly nextLabel = input('Next');\n readonly paginationAriaLabel = input('Data view pagination');\n readonly trackBy = input<(index: number, item: unknown) => unknown>((index) => index);\n\n readonly modeChange = output<NeuDataViewMode>();\n readonly searchChange = output<string>();\n readonly sortChange = output<string>();\n readonly pageChange = output<NeuDataViewPageEvent>();\n\n readonly itemTpl = contentChild(NeuDataViewItemDirective);\n readonly headerTpl = contentChild(NeuDataViewHeaderDirective);\n readonly footerTpl = contentChild(NeuDataViewFooterDirective);\n\n readonly query = signal('');\n readonly page = signal(1);\n readonly sortKey = signal('');\n readonly _sortControl = new FormControl<string | null>('');\n\n readonly _selectSortOptions = computed<NeuSelectOption[]>(() =>\n this.sortOptions().map((option) => ({ label: option.label, value: option.value })),\n );\n\n readonly showToolbar = computed(\n () => this.searchable() || this.sortOptions().length > 0 || this.viewSwitcher(),\n );\n\n readonly filteredItems = computed(() => {\n const q = this.query().trim().toLowerCase();\n const rows = [...this.items()];\n const sort = this.sortOptions().find((option) => option.value === this.sortKey());\n\n const filtered = q\n ? rows.filter((item) =>\n this.searchableText(item, this.searchFields()).toLowerCase().includes(q),\n )\n : rows;\n\n if (!sort) {\n return filtered;\n }\n\n const direction = sort.direction ?? 'asc';\n return [...filtered].sort((left, right) => {\n const a = this.valueFor(left, sort.value);\n const b = this.valueFor(right, sort.value);\n const result = String(a ?? '').localeCompare(String(b ?? ''), undefined, { numeric: true });\n return direction === 'asc' ? result : -result;\n });\n });\n\n readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.filteredItems().length / Math.max(1, this.pageSize()))),\n );\n\n readonly pagedItems = computed(() => {\n if (!this.pagination()) {\n return this.filteredItems();\n }\n const size = Math.max(1, this.pageSize());\n const start = (Math.min(this.page(), this.pageCount()) - 1) * size;\n return this.filteredItems().slice(start, start + size);\n });\n\n constructor() {\n this._sortControl.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.setSort(value ?? ''));\n\n effect(() => {\n const sortKey = this.sortKey();\n if (this._sortControl.value !== sortKey) {\n this._sortControl.setValue(sortKey, { emitEvent: false });\n }\n });\n }\n\n setMode(mode: NeuDataViewMode): void {\n this.modeChange.emit(mode);\n }\n\n setQuery(value: string): void {\n this.query.set(value);\n this.page.set(1);\n this.searchChange.emit(value);\n }\n\n setSort(value: string): void {\n this.sortKey.set(value);\n this.sortChange.emit(value);\n }\n\n previousPage(): void {\n this.setPage(Math.max(1, this.page() - 1));\n }\n\n nextPage(): void {\n this.setPage(Math.min(this.pageCount(), this.page() + 1));\n }\n\n trackItem(index: number, item: unknown): unknown {\n return this.trackBy()(index, item);\n }\n\n displayItem(item: unknown): string {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'object') {\n return JSON.stringify(item);\n }\n return String(item);\n }\n\n private setPage(page: number): void {\n this.page.set(page);\n this.pageChange.emit({ page, pageSize: this.pageSize() });\n }\n\n private searchableText(item: unknown, fields: string[]): string {\n if (!fields.length || typeof item !== 'object' || item === null) {\n return this.displayItem(item);\n }\n return fields.map((field) => this.valueFor(item, field)).join(' ');\n }\n\n private valueFor(item: unknown, field: string): unknown {\n if (typeof item !== 'object' || item === null) {\n return item;\n }\n return field.split('.').reduce<unknown>((value, key) => {\n if (typeof value !== 'object' || value === null) {\n return undefined;\n }\n return (value as Record<string, unknown>)[key];\n }, item);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"neural-ui-core-data-view.mjs","sources":["../../../../projects/ui-core/data-view/neu-data-view.component.ts","../../../../projects/ui-core/data-view/neural-ui-core-data-view.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NeuButtonComponent } from '@neural-ui/core/button';\nimport { NeuSelectComponent, type NeuSelectOption } from '@neural-ui/core/select';\n\nexport type NeuDataViewMode = 'list' | 'grid' | 'table';\nexport type NeuDataViewSortDirection = 'asc' | 'desc';\n\nexport interface NeuDataViewSortOption {\n label: string;\n value: string;\n direction?: NeuDataViewSortDirection;\n}\n\nexport interface NeuDataViewPageEvent {\n page: number;\n pageSize: number;\n}\n\n@Directive({ selector: 'ng-template[neuDataViewItem]' })\nexport class NeuDataViewItemDirective {\n constructor(readonly templateRef: TemplateRef<{ $implicit: unknown; index: number }>) {}\n}\n\n@Directive({ selector: 'ng-template[neuDataViewHeader]' })\nexport class NeuDataViewHeaderDirective {\n constructor(readonly templateRef: TemplateRef<void>) {}\n}\n\n@Directive({ selector: 'ng-template[neuDataViewFooter]' })\nexport class NeuDataViewFooterDirective {\n constructor(readonly templateRef: TemplateRef<void>) {}\n}\n\n@Component({\n selector: 'neu-data-view',\n imports: [NgTemplateOutlet, ReactiveFormsModule, NeuButtonComponent, NeuSelectComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'neu-data-view',\n '[class.neu-data-view--grid]': 'mode() === \"grid\"',\n '[class.neu-data-view--list]': 'mode() === \"list\"',\n '[class.neu-data-view--table]': 'mode() === \"table\"',\n },\n template: `\n @if (headerTpl()) {\n <ng-container [ngTemplateOutlet]=\"headerTpl()!.templateRef\" />\n }\n\n @if (showToolbar()) {\n <div class=\"neu-data-view__toolbar\">\n @if (searchable()) {\n <label class=\"neu-data-view__search\">\n <span class=\"neu-data-view__sr\">{{ searchAriaLabel() }}</span>\n <input\n type=\"search\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"query()\"\n (input)=\"setQuery($any($event.target).value)\"\n />\n </label>\n }\n @if (sortOptions().length) {\n <neu-select\n class=\"neu-data-view__sort\"\n [floatingLabel]=\"false\"\n [placeholder]=\"sortAriaLabel()\"\n [options]=\"_selectSortOptions()\"\n [formControl]=\"_sortControl\"\n size=\"sm\"\n />\n }\n @if (viewSwitcher()) {\n <div class=\"neu-data-view__modes\" role=\"group\" [attr.aria-label]=\"viewAriaLabel()\">\n @for (item of modes(); track item) {\n <button\n neu-button\n type=\"button\"\n class=\"neu-data-view__mode\"\n variant=\"ghost\"\n size=\"sm\"\n [class.neu-data-view__mode--active]=\"mode() === item\"\n [attr.aria-pressed]=\"mode() === item\"\n (click)=\"setMode(item)\"\n >\n {{ item }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n @if (loading()) {\n <div class=\"neu-data-view__loading\" role=\"status\">{{ loadingLabel() }}</div>\n } @else if (pagedItems().length === 0) {\n <div class=\"neu-data-view__empty\" role=\"status\">{{ emptyLabel() }}</div>\n } @else {\n <div class=\"neu-data-view__items\" [attr.role]=\"mode() === 'table' ? 'table' : 'list'\">\n @for (item of pagedItems(); track trackItem($index, item); let i = $index) {\n <div class=\"neu-data-view__item\" [attr.role]=\"mode() === 'table' ? 'row' : 'listitem'\">\n @if (itemTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\n />\n } @else {\n {{ displayItem(item) }}\n }\n </div>\n }\n </div>\n }\n\n @if (pagination() && pageCount() > 1) {\n <nav class=\"neu-data-view__pagination\" [attr.aria-label]=\"paginationAriaLabel()\">\n <button\n neu-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"page() <= 1\"\n (click)=\"previousPage()\"\n >\n {{ previousLabel() }}\n </button>\n <span>{{ page() }} / {{ pageCount() }}</span>\n <button\n neu-button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n [disabled]=\"page() >= pageCount()\"\n (click)=\"nextPage()\"\n >\n {{ nextLabel() }}\n </button>\n </nav>\n }\n\n @if (footerTpl()) {\n <ng-container [ngTemplateOutlet]=\"footerTpl()!.templateRef\" />\n }\n `,\n styleUrl: './neu-data-view.component.scss',\n})\nexport class NeuDataViewComponent {\n private readonly _destroyRef = inject(DestroyRef);\n\n readonly items = input<unknown[]>([]);\n readonly mode = input<NeuDataViewMode>('list');\n readonly modes = input<NeuDataViewMode[]>(['list', 'grid', 'table']);\n readonly viewSwitcher = input(true);\n readonly viewAriaLabel = input('View mode');\n readonly searchable = input(true);\n readonly searchFields = input<string[]>([]);\n readonly searchPlaceholder = input('Search...');\n readonly searchAriaLabel = input('Search items');\n readonly sortOptions = input<NeuDataViewSortOption[]>([]);\n readonly sortAriaLabel = input('Sort items');\n readonly pagination = input(true);\n readonly pageSize = input(9);\n readonly emptyLabel = input('No items found');\n readonly loading = input(false);\n readonly loadingLabel = input('Loading...');\n readonly previousLabel = input('Previous');\n readonly nextLabel = input('Next');\n readonly paginationAriaLabel = input('Data view pagination');\n readonly trackBy = input<(index: number, item: unknown) => unknown>((index) => index);\n\n readonly modeChange = output<NeuDataViewMode>();\n readonly searchChange = output<string>();\n readonly sortChange = output<string>();\n readonly pageChange = output<NeuDataViewPageEvent>();\n\n readonly itemTpl = contentChild(NeuDataViewItemDirective);\n readonly headerTpl = contentChild(NeuDataViewHeaderDirective);\n readonly footerTpl = contentChild(NeuDataViewFooterDirective);\n\n readonly query = signal('');\n readonly page = signal(1);\n readonly sortKey = signal('');\n readonly _sortControl = new FormControl<string | null>('');\n\n readonly _selectSortOptions = computed<NeuSelectOption[]>(() =>\n this.sortOptions().map((option) => ({ label: option.label, value: option.value })),\n );\n\n readonly showToolbar = computed(\n () => this.searchable() || this.sortOptions().length > 0 || this.viewSwitcher(),\n );\n\n readonly filteredItems = computed(() => {\n const q = this.query().trim().toLowerCase();\n const rows = [...this.items()];\n const sort = this.sortOptions().find((option) => option.value === this.sortKey());\n\n const filtered = q\n ? rows.filter((item) =>\n this.searchableText(item, this.searchFields()).toLowerCase().includes(q),\n )\n : rows;\n\n if (!sort) {\n return filtered;\n }\n\n const direction = sort.direction ?? 'asc';\n return [...filtered].sort((left, right) => {\n const a = this.valueFor(left, sort.value);\n const b = this.valueFor(right, sort.value);\n const result = String(a ?? '').localeCompare(String(b ?? ''), undefined, { numeric: true });\n return direction === 'asc' ? result : -result;\n });\n });\n\n readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.filteredItems().length / Math.max(1, this.pageSize()))),\n );\n\n readonly pagedItems = computed(() => {\n if (!this.pagination()) {\n return this.filteredItems();\n }\n const size = Math.max(1, this.pageSize());\n const start = (Math.min(this.page(), this.pageCount()) - 1) * size;\n return this.filteredItems().slice(start, start + size);\n });\n\n constructor() {\n this._sortControl.valueChanges\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((value) => this.setSort(value ?? ''));\n\n effect(() => {\n const sortKey = this.sortKey();\n if (this._sortControl.value !== sortKey) {\n this._sortControl.setValue(sortKey, { emitEvent: false });\n }\n });\n }\n\n setMode(mode: NeuDataViewMode): void {\n this.modeChange.emit(mode);\n }\n\n setQuery(value: string): void {\n this.query.set(value);\n this.page.set(1);\n this.searchChange.emit(value);\n }\n\n setSort(value: string): void {\n this.sortKey.set(value);\n this.sortChange.emit(value);\n }\n\n previousPage(): void {\n this.setPage(Math.max(1, this.page() - 1));\n }\n\n nextPage(): void {\n this.setPage(Math.min(this.pageCount(), this.page() + 1));\n }\n\n trackItem(index: number, item: unknown): unknown {\n return this.trackBy()(index, item);\n }\n\n displayItem(item: unknown): string {\n if (item === null || item === undefined) {\n return '';\n }\n if (typeof item === 'object') {\n return JSON.stringify(item);\n }\n return String(item);\n }\n\n private setPage(page: number): void {\n this.page.set(page);\n this.pageChange.emit({ page, pageSize: this.pageSize() });\n }\n\n private searchableText(item: unknown, fields: string[]): string {\n if (!fields.length || typeof item !== 'object' || item === null) {\n return this.displayItem(item);\n }\n return fields.map((field) => this.valueFor(item, field)).join(' ');\n }\n\n private valueFor(item: unknown, field: string): unknown {\n if (typeof item !== 'object' || item === null) {\n return item;\n }\n return field.split('.').reduce<unknown>((value, key) => {\n if (typeof value !== 'object' || value === null) {\n return undefined;\n }\n return (value as Record<string, unknown>)[key];\n }, item);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|