@yuuvis/client-components 3.1.0 → 3.2.0
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/yuuvis-client-components-autocomplete.mjs +7 -7
- package/fesm2022/yuuvis-client-components-autocomplete.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-charts.mjs +6 -6
- package/fesm2022/yuuvis-client-components-charts.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-common.mjs +96 -98
- package/fesm2022/yuuvis-client-components-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-datepicker.mjs +13 -13
- package/fesm2022/yuuvis-client-components-datepicker.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-list.mjs +21 -21
- package/fesm2022/yuuvis-client-components-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-master-details.mjs +7 -7
- package/fesm2022/yuuvis-client-components-master-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-overflow-hidden.mjs +7 -7
- package/fesm2022/yuuvis-client-components-overflow-hidden.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-overflow-menu.mjs +7 -7
- package/fesm2022/yuuvis-client-components-overflow-menu.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-popout.mjs +10 -10
- package/fesm2022/yuuvis-client-components-popout.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-split-view.mjs +13 -13
- package/fesm2022/yuuvis-client-components-split-view.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-table-grid.mjs +3 -3
- package/fesm2022/yuuvis-client-components-table-grid.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components-widget-grid.mjs +28 -28
- package/fesm2022/yuuvis-client-components-widget-grid.mjs.map +1 -1
- package/fesm2022/yuuvis-client-components.mjs +3 -3
- package/fesm2022/yuuvis-client-components.mjs.map +1 -1
- package/package.json +2 -2
- package/types/yuuvis-client-components-common.d.ts +6 -6
- package/types/yuuvis-client-components-list.d.ts +8 -8
|
@@ -196,10 +196,10 @@ class AutocompleteComponent extends AbstractMatFormField {
|
|
|
196
196
|
ngOnDestroy() {
|
|
197
197
|
super.onNgOnDestroy();
|
|
198
198
|
}
|
|
199
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
200
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
199
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
200
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: AutocompleteComponent, isStandalone: true, selector: "yuv-autocomplete", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, distinctValues: { classPropertyName: "distinctValues", publicName: "distinctValues", isSignal: true, isRequired: false, transformFunction: null }, addOnBlur: { classPropertyName: "addOnBlur", publicName: "addOnBlur", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxItems: { classPropertyName: "maxItems", publicName: "maxItems", isSignal: true, isRequired: false, transformFunction: null }, forceSelection: { classPropertyName: "forceSelection", publicName: "forceSelection", isSignal: true, isRequired: false, transformFunction: null }, autocompleteValues: { classPropertyName: "autocompleteValues", publicName: "autocompleteValues", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { autocompleteFnc: "autocompleteFnc", acBlur: "acBlur" }, host: { attributes: { "attr.aria-disabled": "disabled" } }, providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }], queries: [{ propertyName: "chipTemplate", first: true, predicate: ["chipTemplate"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "matAutocomplete", first: true, predicate: ["auto"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (multiple()) {\n <mat-chip-grid yuvScrollButtons #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n </mat-chip-grid>\n} @else {\n <input\n type=\"text\"\n matInput\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n", styles: [":host{display:inline-flex;position:relative}:host:has(mat-chip-grid){min-width:0}:host input{background-color:transparent;border:0;width:100%;min-height:calc(var(--mdc-chip-container-height, 32px) + 4px);font-family:var(--mdc-chip-label-text-font, var(--mat-sys-label-large-font));line-height:var(--mdc-chip-label-text-line-height, var(--mat-sys-label-large-line-height));font-size:var(--mdc-chip-label-text-size, var(--mat-sys-label-large-size));font-weight:var(--mdc-chip-label-text-weight, var(--mat-sys-label-large-weight));letter-spacing:var(--mdc-chip-label-text-tracking, var(--mat-sys-label-large-tracking))}:host mat-spinner{align-self:center;position:absolute;inset-inline-end:0}:host mat-chip-grid{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: ScrollButtonsDirective, selector: "[yuvScrollButtons]", inputs: ["yuvScrollButtonsAmount"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
201
201
|
}
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
203
203
|
type: Component,
|
|
204
204
|
args: [{ selector: 'yuv-autocomplete', imports: [
|
|
205
205
|
CommonModule,
|
|
@@ -216,11 +216,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
216
216
|
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], matAutocomplete: [{ type: i0.ViewChild, args: ['auto', { isSignal: true }] }], chipTemplate: [{ type: i0.ContentChild, args: ['chipTemplate', { ...{ read: TemplateRef }, isSignal: true }] }], optionTemplate: [{ type: i0.ContentChild, args: ['optionTemplate', { ...{ read: TemplateRef }, isSignal: true }] }], busy: [{ type: i0.Input, args: [{ isSignal: true, alias: "busy", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], distinctValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "distinctValues", required: false }] }], addOnBlur: [{ type: i0.Input, args: [{ isSignal: true, alias: "addOnBlur", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxItems", required: false }] }], forceSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "forceSelection", required: false }] }], autocompleteValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocompleteValues", required: false }] }], autocompleteFnc: [{ type: i0.Output, args: ["autocompleteFnc"] }], acBlur: [{ type: i0.Output, args: ["acBlur"] }] } });
|
|
217
217
|
|
|
218
218
|
class YuvAutocompleteModule {
|
|
219
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
220
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.
|
|
221
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.
|
|
219
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
220
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.12", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent], exports: [AutocompleteComponent] });
|
|
221
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvAutocompleteModule, imports: [AutocompleteComponent] });
|
|
222
222
|
}
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvAutocompleteModule, decorators: [{
|
|
224
224
|
type: NgModule,
|
|
225
225
|
args: [{
|
|
226
226
|
imports: [AutocompleteComponent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-components-autocomplete.mjs","sources":["../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.component.ts","../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.component.html","../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.module.ts","../../../../../libs/yuuvis/client-components/autocomplete/src/yuuvis-client-components-autocomplete.ts"],"sourcesContent":["import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n TemplateRef,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteActivatedEvent,\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent\n} from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AbstractMatFormField, injectNgControl, ScrollButtonsDirective } from '@yuuvis/client-components/common';\nimport { debounceTime, filter } from 'rxjs/operators';\nimport { AutocompleteItem } from './autocomplete.interface';\n\n@Component({\n selector: 'yuv-autocomplete',\n imports: [\n CommonModule,\n MatChipsModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n ScrollButtonsDirective\n ],\n templateUrl: './autocomplete.component.html',\n styleUrl: './autocomplete.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }],\n host: {\n 'attr.aria-disabled': 'disabled'\n }\n})\nexport class AutocompleteComponent\n extends AbstractMatFormField<AutocompleteItem[]>\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n #dRef = inject(DestroyRef);\n\n ariaLabel = input<string>('');\n\n matAutocomplete = viewChild.required<MatAutocomplete>('auto');\n /**\n * Template to be used for rendering selected items in multiselect (multiple=\"true\") mode\n */\n chipTemplate = contentChild('chipTemplate', { read: TemplateRef });\n optionTemplate = contentChild('optionTemplate', { read: TemplateRef });\n\n /**\n * Show a loading spinner\n */\n busy = input<boolean>(false);\n /**\n * Enable multiple values\n */\n multiple = input<boolean>(false);\n /**\n * Force distinct values (only applicable for multiselect)\n */\n distinctValues = input<boolean>(true);\n /**\n * Add user inputs to the list of values when the user leaves the\n * control without entering (only applicable for multiselect)\n */\n addOnBlur = input<boolean>(false);\n /**\n * Minimum number of characters entered to trigger suggestions\n */\n minLength = input<number>(2);\n /**\n * Maximum number of items when multiple is true. -1 means no limit.\n */\n maxItems = input<number>(-1);\n /**\n * Setting this to `true` will not allow values that are not contained in the suggestions list. The input\n * will be cleared on blur if no value from the list has been selected. Also values are only emitted when a\n * list item has been selected (usually every key stroke is changing the form controls value)\n */\n forceSelection = input<boolean>(false);\n\n _acValues = signal<AutocompleteItem[]>([]);\n autocompleteValues = input<AutocompleteItem[]>([]);\n #acValueEffect = effect(() => {\n const acv =\n this.multiple() && this.distinctValues()\n ? this.autocompleteValues().filter((v) => !(this.value || []).some((i) => i.label === v.label))\n : this.autocompleteValues();\n this._acValues.set(acv);\n });\n autocompleteFnc = output<string>();\n acBlur = output<void>();\n\n // value = signal<AutocompleteItem[]>([]);\n chipsInputDisabled = computed(\n () => this.multiple() && this.maxItems() !== -1 && this.value && this.value.length >= this.maxItems()\n );\n chipsControl = new FormControl<AutocompleteItem[]>([]);\n inputControl = new FormControl<AutocompleteItem | string>('', {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n\n displayFn(i: AutocompleteItem): string {\n return i?.label;\n }\n\n #activeAutocompleteValue = signal<AutocompleteItem | null>(null);\n\n acOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (this.multiple()) {\n this.value = [...(this.value || []), event.option.value];\n this.inputControl.setValue('');\n } else {\n this.value = event.option.value;\n }\n this._onChange(this.value);\n event.option.deselect();\n this._acValues.set([]);\n }\n\n acOptionActivated(event: MatAutocompleteActivatedEvent): void {\n if (event.option) this.#activeAutocompleteValue.set(event.option.value);\n }\n\n acPanelClosed() {\n this.#activeAutocompleteValue.set(null);\n this._acValues.set([]);\n }\n\n // multiple selection\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n // triggered when the user presses enter or comma\n add(event: MatChipInputEvent): void {\n if (this.#activeAutocompleteValue()) return;\n let hasChanged = false;\n const value = (event.value || '').trim();\n const match = this.autocompleteValues().find((i) => i.label === value);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n hasChanged = true;\n }\n\n const isDistinct = !(this.value || []).some((i) => i.label === value);\n if ((!this.distinctValues() || isDistinct) && value.length > 0) {\n this.value = [...(this.value || []), { label: value, value }];\n hasChanged = true;\n }\n\n if (this.forceSelection() && !match) {\n this.value = (this.value || []).filter((v) => v.label !== value) || [];\n }\n hasChanged && this._onChange(this.value);\n // Clear the input value\n this.inputControl.setValue('');\n this.matAutocomplete().showPanel = false;\n }\n\n onInputBlur() {\n if (!this.multiple()) return;\n // need to timeout because clicking on the option will trigger the blur event before the click event\n // and the input value will be cleared before the option is selected\n setTimeout(() => {\n const iv = this.inputControl.value as string;\n if (iv && iv.length > 0 && this.addOnBlur()) {\n const match = this.autocompleteValues().find((i) => i.label === iv);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n this._onChange(this.value);\n } else if (!this.forceSelection()) {\n const v = { label: iv, value: iv };\n this.value = this.multiple() ? [...(this.value || []), v] : [v];\n this._onChange(this.value);\n }\n }\n this.inputControl.setValue('');\n this._acValues.set([]);\n this.acBlur.emit();\n }, 500);\n }\n\n removeItem(item: AutocompleteItem) {\n this.value = (this.value || []).filter((i) => i !== item);\n this._onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: readonly AutocompleteItem[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched = () => {};\n\n writeValue(value: readonly AutocompleteItem[] | AutocompleteItem): void {\n if (!this.multiple()) {\n this.value = [value as AutocompleteItem];\n this.inputControl.patchValue(value as AutocompleteItem, { emitEvent: false });\n } else {\n this.value = structuredClone(value) as AutocompleteItem[];\n }\n }\n registerOnChange(fn: (value: readonly AutocompleteItem[] | null) => void): void {\n this._onChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean) {\n if (isDisabled) {\n this.inputControl.disable();\n this.chipsControl.disable();\n } else {\n this.inputControl.enable();\n this.chipsControl.enable();\n }\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {\n this.inputControl.valueChanges\n .pipe(\n filter((value) => !!value && (value as string).length >= this.minLength()),\n debounceTime(300),\n takeUntilDestroyed(this.#dRef)\n )\n .subscribe((value) => {\n this.autocompleteFnc.emit((value as string) || '');\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if (multiple()) {\n <mat-chip-grid yuvScrollButtons #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n </mat-chip-grid>\n} @else {\n <input\n type=\"text\"\n matInput\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { AutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n imports: [AutocompleteComponent],\n exports: [AutocompleteComponent]\n})\nexport class YuvAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-components-autocomplete.mjs","sources":["../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.component.ts","../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.component.html","../../../../../libs/yuuvis/client-components/autocomplete/src/lib/autocomplete.module.ts","../../../../../libs/yuuvis/client-components/autocomplete/src/yuuvis-client-components-autocomplete.ts"],"sourcesContent":["import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n TemplateRef,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteActivatedEvent,\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent\n} from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AbstractMatFormField, injectNgControl, ScrollButtonsDirective } from '@yuuvis/client-components/common';\nimport { debounceTime, filter } from 'rxjs/operators';\nimport { AutocompleteItem } from './autocomplete.interface';\n\n@Component({\n selector: 'yuv-autocomplete',\n imports: [\n CommonModule,\n MatChipsModule,\n MatIconModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n ScrollButtonsDirective\n ],\n templateUrl: './autocomplete.component.html',\n styleUrl: './autocomplete.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: MatFormFieldControl, useExisting: AutocompleteComponent }],\n host: {\n 'attr.aria-disabled': 'disabled'\n }\n})\nexport class AutocompleteComponent\n extends AbstractMatFormField<AutocompleteItem[]>\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n #dRef = inject(DestroyRef);\n\n ariaLabel = input<string>('');\n\n matAutocomplete = viewChild.required<MatAutocomplete>('auto');\n /**\n * Template to be used for rendering selected items in multiselect (multiple=\"true\") mode\n */\n chipTemplate = contentChild('chipTemplate', { read: TemplateRef });\n optionTemplate = contentChild('optionTemplate', { read: TemplateRef });\n\n /**\n * Show a loading spinner\n */\n busy = input<boolean>(false);\n /**\n * Enable multiple values\n */\n multiple = input<boolean>(false);\n /**\n * Force distinct values (only applicable for multiselect)\n */\n distinctValues = input<boolean>(true);\n /**\n * Add user inputs to the list of values when the user leaves the\n * control without entering (only applicable for multiselect)\n */\n addOnBlur = input<boolean>(false);\n /**\n * Minimum number of characters entered to trigger suggestions\n */\n minLength = input<number>(2);\n /**\n * Maximum number of items when multiple is true. -1 means no limit.\n */\n maxItems = input<number>(-1);\n /**\n * Setting this to `true` will not allow values that are not contained in the suggestions list. The input\n * will be cleared on blur if no value from the list has been selected. Also values are only emitted when a\n * list item has been selected (usually every key stroke is changing the form controls value)\n */\n forceSelection = input<boolean>(false);\n\n _acValues = signal<AutocompleteItem[]>([]);\n autocompleteValues = input<AutocompleteItem[]>([]);\n #acValueEffect = effect(() => {\n const acv =\n this.multiple() && this.distinctValues()\n ? this.autocompleteValues().filter((v) => !(this.value || []).some((i) => i.label === v.label))\n : this.autocompleteValues();\n this._acValues.set(acv);\n });\n autocompleteFnc = output<string>();\n acBlur = output<void>();\n\n // value = signal<AutocompleteItem[]>([]);\n chipsInputDisabled = computed(\n () => this.multiple() && this.maxItems() !== -1 && this.value && this.value.length >= this.maxItems()\n );\n chipsControl = new FormControl<AutocompleteItem[]>([]);\n inputControl = new FormControl<AutocompleteItem | string>('', {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n\n displayFn(i: AutocompleteItem): string {\n return i?.label;\n }\n\n #activeAutocompleteValue = signal<AutocompleteItem | null>(null);\n\n acOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (this.multiple()) {\n this.value = [...(this.value || []), event.option.value];\n this.inputControl.setValue('');\n } else {\n this.value = event.option.value;\n }\n this._onChange(this.value);\n event.option.deselect();\n this._acValues.set([]);\n }\n\n acOptionActivated(event: MatAutocompleteActivatedEvent): void {\n if (event.option) this.#activeAutocompleteValue.set(event.option.value);\n }\n\n acPanelClosed() {\n this.#activeAutocompleteValue.set(null);\n this._acValues.set([]);\n }\n\n // multiple selection\n readonly separatorKeysCodes: number[] = [ENTER, COMMA];\n\n // triggered when the user presses enter or comma\n add(event: MatChipInputEvent): void {\n if (this.#activeAutocompleteValue()) return;\n let hasChanged = false;\n const value = (event.value || '').trim();\n const match = this.autocompleteValues().find((i) => i.label === value);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n hasChanged = true;\n }\n\n const isDistinct = !(this.value || []).some((i) => i.label === value);\n if ((!this.distinctValues() || isDistinct) && value.length > 0) {\n this.value = [...(this.value || []), { label: value, value }];\n hasChanged = true;\n }\n\n if (this.forceSelection() && !match) {\n this.value = (this.value || []).filter((v) => v.label !== value) || [];\n }\n hasChanged && this._onChange(this.value);\n // Clear the input value\n this.inputControl.setValue('');\n this.matAutocomplete().showPanel = false;\n }\n\n onInputBlur() {\n if (!this.multiple()) return;\n // need to timeout because clicking on the option will trigger the blur event before the click event\n // and the input value will be cleared before the option is selected\n setTimeout(() => {\n const iv = this.inputControl.value as string;\n if (iv && iv.length > 0 && this.addOnBlur()) {\n const match = this.autocompleteValues().find((i) => i.label === iv);\n if (this.forceSelection() && match) {\n this.value = this.multiple() ? [...(this.value || []), match] : [match];\n this._onChange(this.value);\n } else if (!this.forceSelection()) {\n const v = { label: iv, value: iv };\n this.value = this.multiple() ? [...(this.value || []), v] : [v];\n this._onChange(this.value);\n }\n }\n this.inputControl.setValue('');\n this._acValues.set([]);\n this.acBlur.emit();\n }, 500);\n }\n\n removeItem(item: AutocompleteItem) {\n this.value = (this.value || []).filter((i) => i !== item);\n this._onChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: readonly AutocompleteItem[] | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched = () => {};\n\n writeValue(value: readonly AutocompleteItem[] | AutocompleteItem): void {\n if (!this.multiple()) {\n this.value = [value as AutocompleteItem];\n this.inputControl.patchValue(value as AutocompleteItem, { emitEvent: false });\n } else {\n this.value = structuredClone(value) as AutocompleteItem[];\n }\n }\n registerOnChange(fn: (value: readonly AutocompleteItem[] | null) => void): void {\n this._onChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}): void {\n this._onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean) {\n if (isDisabled) {\n this.inputControl.disable();\n this.chipsControl.disable();\n } else {\n this.inputControl.enable();\n this.chipsControl.enable();\n }\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {\n this.inputControl.valueChanges\n .pipe(\n filter((value) => !!value && (value as string).length >= this.minLength()),\n debounceTime(300),\n takeUntilDestroyed(this.#dRef)\n )\n .subscribe((value) => {\n this.autocompleteFnc.emit((value as string) || '');\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if (multiple()) {\n <mat-chip-grid yuvScrollButtons #chipGrid [attr.aria-label]=\"ariaLabel()\" [formControl]=\"chipsControl\">\n @for (v of value; track $index) {\n <mat-chip-row (removed)=\"removeItem(v)\">\n {{ v.label || v.value || v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"!!chipsInputDisabled()\"\n type=\"text\"\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"add($event)\"\n />\n </mat-chip-grid>\n} @else {\n <input\n type=\"text\"\n matInput\n (blur)=\"onInputBlur()\"\n [placeholder]=\"placeholder || ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [formControl]=\"inputControl\"\n [matAutocomplete]=\"auto\"\n />\n}\n@if (busy()) {\n <mat-spinner [diameter]=\"16\"></mat-spinner>\n}\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"acOptionSelected($event)\"\n (optionActivated)=\"acOptionActivated($event)\"\n (closed)=\"acPanelClosed()\"\n [displayWith]=\"displayFn\"\n>\n @for (option of _acValues(); track option.label) {\n <mat-option [value]=\"option\">\n <ng-container *ngTemplateOutlet=\"optionTemplate() || null; context: { $implicit: option }\"></ng-container>\n @if (!optionTemplate()) {\n {{ option.label }}\n }\n </mat-option>\n }\n</mat-autocomplete>\n","import { NgModule } from '@angular/core';\nimport { AutocompleteComponent } from './autocomplete.component';\n\n@NgModule({\n imports: [AutocompleteComponent],\n exports: [AutocompleteComponent]\n})\nexport class YuvAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -136,10 +136,10 @@ class YuvChartThemeService {
|
|
|
136
136
|
body.removeChild(probe);
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
140
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
139
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvChartThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
140
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvChartThemeService, providedIn: 'root' });
|
|
141
141
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvChartThemeService, decorators: [{
|
|
143
143
|
type: Injectable,
|
|
144
144
|
args: [{ providedIn: 'root' }]
|
|
145
145
|
}], ctorParameters: () => [] });
|
|
@@ -190,10 +190,10 @@ class YuvChartComponent {
|
|
|
190
190
|
theme: userTheme ?? this.themeService.chartTheme()
|
|
191
191
|
};
|
|
192
192
|
}, ...(ngDevMode ? [{ debugName: "mergedOptions" }] : /* istanbul ignore next */ []));
|
|
193
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
194
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.
|
|
193
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.12", type: YuvChartComponent, isStandalone: true, selector: "yuv-chart", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ag-charts [options]=\"mergedOptions()\" />\n", styles: [":host{display:block;width:100%;height:100%;min-height:200px;background:var(--ymt-surface);color:var(--ymt-text-color);border-radius:var(--ymt-corner-s);font:var(--ymt-font-body);overflow:hidden}ag-charts{display:block;width:100%;height:100%}:host ::ng-deep .ag-charts-tooltip{background:var(--ymt-surface-container);color:var(--ymt-on-surface);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-xs);box-shadow:0 4px 12px #0000001f;font:var(--ymt-font-body-subtle);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs)}:host ::ng-deep .ag-charts-tooltip-heading{background:var(--ymt-surface-container-high);color:var(--ymt-on-surface);border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs)}\n"], dependencies: [{ kind: "component", type: AgCharts, selector: "ag-charts", inputs: ["options"], outputs: ["onChartReady"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
195
195
|
}
|
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: YuvChartComponent, decorators: [{
|
|
197
197
|
type: Component,
|
|
198
198
|
args: [{ selector: 'yuv-chart', standalone: true, imports: [AgCharts], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ag-charts [options]=\"mergedOptions()\" />\n", styles: [":host{display:block;width:100%;height:100%;min-height:200px;background:var(--ymt-surface);color:var(--ymt-text-color);border-radius:var(--ymt-corner-s);font:var(--ymt-font-body);overflow:hidden}ag-charts{display:block;width:100%;height:100%}:host ::ng-deep .ag-charts-tooltip{background:var(--ymt-surface-container);color:var(--ymt-on-surface);border:1px solid var(--ymt-outline-variant);border-radius:var(--ymt-corner-xs);box-shadow:0 4px 12px #0000001f;font:var(--ymt-font-body-subtle);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs)}:host ::ng-deep .ag-charts-tooltip-heading{background:var(--ymt-surface-container-high);color:var(--ymt-on-surface);border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-2xs) var(--ymt-spacing-xs)}\n"] }]
|
|
199
199
|
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-components-charts.mjs","sources":["../../../../../libs/yuuvis/client-components/charts/src/lib/chart-theme.service.ts","../../../../../libs/yuuvis/client-components/charts/src/lib/chart.component.ts","../../../../../libs/yuuvis/client-components/charts/src/lib/chart.component.html","../../../../../libs/yuuvis/client-components/charts/src/yuuvis-client-components-charts.ts"],"sourcesContent":["import { computed, DOCUMENT, effect, inject, Injectable, signal } from '@angular/core';\nimport { HIGH_CONTRAST_THEME_KEY, ThemeService } from '@yuuvis/client-components/common';\nimport type { AgChartTheme } from 'ag-charts-community';\n\n@Injectable({ providedIn: 'root' })\nexport class YuvChartThemeService {\n readonly #document = inject(DOCUMENT);\n readonly #themeService = inject(ThemeService);\n\n readonly #revision = signal(0);\n\n readonly chartTheme = computed<AgChartTheme>(() => {\n this.#revision();\n return this.#buildTheme();\n });\n\n constructor() {\n effect((onCleanup) => {\n this.#themeService.mode();\n this.#themeService.currentTheme();\n const win = this.#document.defaultView;\n if (!win) {\n this.#revision.update((v) => v + 1);\n return;\n }\n const id = win.requestAnimationFrame(() => this.#revision.update((v) => v + 1));\n onCleanup(() => win.cancelAnimationFrame(id));\n });\n }\n\n refresh(): void {\n this.#revision.update((v) => v + 1);\n }\n\n #buildTheme(): AgChartTheme {\n const t = this.#tokens();\n const isDark = this.#themeService.mode() === 'dark';\n const isHighContrast = this.#themeService.currentTheme() === HIGH_CONTRAST_THEME_KEY;\n const baseTheme: 'ag-default' | 'ag-default-dark' = isDark ? 'ag-default-dark' : 'ag-default';\n\n const palette = {\n fills: [t.primary, t.success, t.warning, t.danger, t.brand].filter(Boolean) as string[],\n strokes: [t.outline].filter(Boolean) as string[]\n };\n\n const fontFamily = t.fontFamily || 'Roboto, \"Helvetica Neue\", sans-serif';\n\n return {\n baseTheme,\n palette,\n overrides: {\n common: {\n background: { fill: t.surface || 'transparent' },\n title: {\n color: t.textColor,\n fontFamily,\n fontSize: 16,\n fontWeight: 'bold'\n },\n subtitle: {\n color: t.textColorSubtle,\n fontFamily,\n fontSize: 12\n },\n padding: { top: 16, right: 16, bottom: 16, left: 16 },\n legend: {\n item: {\n label: {\n color: t.textColor,\n fontFamily,\n fontSize: 12\n },\n marker: {\n strokeWidth: isHighContrast ? 2 : 0\n }\n }\n },\n axes: {\n number: this.#axisTheme(t, fontFamily),\n category: this.#axisTheme(t, fontFamily),\n time: this.#axisTheme(t, fontFamily),\n log: this.#axisTheme(t, fontFamily)\n }\n }\n }\n };\n }\n\n #axisTheme(themeToken: ThemeTokens, fontFamily: string) {\n return {\n line: { stroke: themeToken.outlineVariant },\n tick: { stroke: themeToken.outlineVariant },\n label: {\n color: themeToken.textColorSubtle,\n fontFamily,\n fontSize: 11\n },\n title: {\n color: themeToken.textColor,\n fontFamily,\n fontSize: 12\n },\n gridLine: {\n style: [{ stroke: themeToken.outlineVariant, lineDash: [] }]\n }\n };\n }\n\n #tokens(): ThemeTokens {\n const win = this.#document.defaultView;\n const body = this.#document.body;\n if (!win || !body) {\n return EMPTY_TOKENS;\n }\n const probe = this.#document.createElement('span');\n probe.style.position = 'absolute';\n probe.style.visibility = 'hidden';\n probe.style.pointerEvents = 'none';\n body.appendChild(probe);\n try {\n const resolveColor = (token: string): string => {\n probe.style.color = '';\n probe.style.color = `var(${token})`;\n return win.getComputedStyle(probe).color || '';\n };\n const resolveProp = (token: string, prop: 'fontFamily'): string => {\n probe.style.fontFamily = '';\n probe.style.fontFamily = `var(${token})`;\n return win.getComputedStyle(probe)[prop] || '';\n };\n return {\n surface: resolveColor('--ymt-surface'),\n textColor: resolveColor('--ymt-text-color'),\n textColorSubtle: resolveColor('--ymt-text-color-subtle'),\n primary: resolveColor('--ymt-primary'),\n brand: resolveColor('--ymt-brand'),\n success: resolveColor('--ymt-success'),\n warning: resolveColor('--ymt-warning'),\n danger: resolveColor('--ymt-danger'),\n outline: resolveColor('--ymt-outline'),\n outlineVariant: resolveColor('--ymt-outline-variant'),\n fontFamily: resolveProp('--mat-sys-body-medium-font', 'fontFamily')\n };\n } finally {\n body.removeChild(probe);\n }\n }\n}\n\ninterface ThemeTokens {\n surface: string;\n textColor: string;\n textColorSubtle: string;\n primary: string;\n brand: string;\n success: string;\n warning: string;\n danger: string;\n outline: string;\n outlineVariant: string;\n fontFamily: string;\n}\n\nconst EMPTY_TOKENS: ThemeTokens = {\n surface: '',\n textColor: '',\n textColorSubtle: '',\n primary: '',\n brand: '',\n success: '',\n warning: '',\n danger: '',\n outline: '',\n outlineVariant: '',\n fontFamily: ''\n};\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { AgCharts } from 'ag-charts-angular';\nimport type { AgChartOptions, AgChartTheme } from 'ag-charts-community';\nimport { YuvChartThemeService } from './chart-theme.service';\nimport { YuvChartOptions } from './chart.types';\n\n/**\n * Wrapper component around AG Charts that automatically applies the\n * application's chart theme based on the current UI theme (light, dark,\n * high-contrast). Consumers provide standard AG Charts options and may\n * optionally override the theme.\n *\n * @example\n * ```html\n * <yuv-chart [options]=\"chartOptions\" />\n * ```\n */\n@Component({\n selector: 'yuv-chart',\n standalone: true,\n imports: [AgCharts],\n templateUrl: './chart.component.html',\n styleUrl: './chart.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YuvChartComponent {\n private readonly themeService = inject(YuvChartThemeService);\n\n /** AG Charts configuration (data, series, axes, etc.). */\n readonly options = input.required<YuvChartOptions>();\n\n /**\n * Optional theme override. When provided, takes precedence over the\n * theme resolved by {@link YuvChartThemeService} from the current UI mode.\n */\n readonly theme = input<AgChartTheme | string | undefined>(undefined);\n\n /**\n * Final options passed to AG Charts: the user-supplied {@link options}\n * merged with either the explicit {@link theme} input or the theme\n * derived from the active UI mode.\n */\n protected readonly mergedOptions = computed<AgChartOptions>(() => {\n const userOptions = this.options();\n const userTheme = this.theme();\n return {\n ...userOptions,\n theme: userTheme ?? this.themeService.chartTheme()\n } as AgChartOptions;\n });\n}\n","<ag-charts [options]=\"mergedOptions()\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-components-charts.mjs","sources":["../../../../../libs/yuuvis/client-components/charts/src/lib/chart-theme.service.ts","../../../../../libs/yuuvis/client-components/charts/src/lib/chart.component.ts","../../../../../libs/yuuvis/client-components/charts/src/lib/chart.component.html","../../../../../libs/yuuvis/client-components/charts/src/yuuvis-client-components-charts.ts"],"sourcesContent":["import { computed, DOCUMENT, effect, inject, Injectable, signal } from '@angular/core';\nimport { HIGH_CONTRAST_THEME_KEY, ThemeService } from '@yuuvis/client-components/common';\nimport type { AgChartTheme } from 'ag-charts-community';\n\n@Injectable({ providedIn: 'root' })\nexport class YuvChartThemeService {\n readonly #document = inject(DOCUMENT);\n readonly #themeService = inject(ThemeService);\n\n readonly #revision = signal(0);\n\n readonly chartTheme = computed<AgChartTheme>(() => {\n this.#revision();\n return this.#buildTheme();\n });\n\n constructor() {\n effect((onCleanup) => {\n this.#themeService.mode();\n this.#themeService.currentTheme();\n const win = this.#document.defaultView;\n if (!win) {\n this.#revision.update((v) => v + 1);\n return;\n }\n const id = win.requestAnimationFrame(() => this.#revision.update((v) => v + 1));\n onCleanup(() => win.cancelAnimationFrame(id));\n });\n }\n\n refresh(): void {\n this.#revision.update((v) => v + 1);\n }\n\n #buildTheme(): AgChartTheme {\n const t = this.#tokens();\n const isDark = this.#themeService.mode() === 'dark';\n const isHighContrast = this.#themeService.currentTheme() === HIGH_CONTRAST_THEME_KEY;\n const baseTheme: 'ag-default' | 'ag-default-dark' = isDark ? 'ag-default-dark' : 'ag-default';\n\n const palette = {\n fills: [t.primary, t.success, t.warning, t.danger, t.brand].filter(Boolean) as string[],\n strokes: [t.outline].filter(Boolean) as string[]\n };\n\n const fontFamily = t.fontFamily || 'Roboto, \"Helvetica Neue\", sans-serif';\n\n return {\n baseTheme,\n palette,\n overrides: {\n common: {\n background: { fill: t.surface || 'transparent' },\n title: {\n color: t.textColor,\n fontFamily,\n fontSize: 16,\n fontWeight: 'bold'\n },\n subtitle: {\n color: t.textColorSubtle,\n fontFamily,\n fontSize: 12\n },\n padding: { top: 16, right: 16, bottom: 16, left: 16 },\n legend: {\n item: {\n label: {\n color: t.textColor,\n fontFamily,\n fontSize: 12\n },\n marker: {\n strokeWidth: isHighContrast ? 2 : 0\n }\n }\n },\n axes: {\n number: this.#axisTheme(t, fontFamily),\n category: this.#axisTheme(t, fontFamily),\n time: this.#axisTheme(t, fontFamily),\n log: this.#axisTheme(t, fontFamily)\n }\n }\n }\n };\n }\n\n #axisTheme(themeToken: ThemeTokens, fontFamily: string) {\n return {\n line: { stroke: themeToken.outlineVariant },\n tick: { stroke: themeToken.outlineVariant },\n label: {\n color: themeToken.textColorSubtle,\n fontFamily,\n fontSize: 11\n },\n title: {\n color: themeToken.textColor,\n fontFamily,\n fontSize: 12\n },\n gridLine: {\n style: [{ stroke: themeToken.outlineVariant, lineDash: [] }]\n }\n };\n }\n\n #tokens(): ThemeTokens {\n const win = this.#document.defaultView;\n const body = this.#document.body;\n if (!win || !body) {\n return EMPTY_TOKENS;\n }\n const probe = this.#document.createElement('span');\n probe.style.position = 'absolute';\n probe.style.visibility = 'hidden';\n probe.style.pointerEvents = 'none';\n body.appendChild(probe);\n try {\n const resolveColor = (token: string): string => {\n probe.style.color = '';\n probe.style.color = `var(${token})`;\n return win.getComputedStyle(probe).color || '';\n };\n const resolveProp = (token: string, prop: 'fontFamily'): string => {\n probe.style.fontFamily = '';\n probe.style.fontFamily = `var(${token})`;\n return win.getComputedStyle(probe)[prop] || '';\n };\n return {\n surface: resolveColor('--ymt-surface'),\n textColor: resolveColor('--ymt-text-color'),\n textColorSubtle: resolveColor('--ymt-text-color-subtle'),\n primary: resolveColor('--ymt-primary'),\n brand: resolveColor('--ymt-brand'),\n success: resolveColor('--ymt-success'),\n warning: resolveColor('--ymt-warning'),\n danger: resolveColor('--ymt-danger'),\n outline: resolveColor('--ymt-outline'),\n outlineVariant: resolveColor('--ymt-outline-variant'),\n fontFamily: resolveProp('--mat-sys-body-medium-font', 'fontFamily')\n };\n } finally {\n body.removeChild(probe);\n }\n }\n}\n\ninterface ThemeTokens {\n surface: string;\n textColor: string;\n textColorSubtle: string;\n primary: string;\n brand: string;\n success: string;\n warning: string;\n danger: string;\n outline: string;\n outlineVariant: string;\n fontFamily: string;\n}\n\nconst EMPTY_TOKENS: ThemeTokens = {\n surface: '',\n textColor: '',\n textColorSubtle: '',\n primary: '',\n brand: '',\n success: '',\n warning: '',\n danger: '',\n outline: '',\n outlineVariant: '',\n fontFamily: ''\n};\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { AgCharts } from 'ag-charts-angular';\nimport type { AgChartOptions, AgChartTheme } from 'ag-charts-community';\nimport { YuvChartThemeService } from './chart-theme.service';\nimport { YuvChartOptions } from './chart.types';\n\n/**\n * Wrapper component around AG Charts that automatically applies the\n * application's chart theme based on the current UI theme (light, dark,\n * high-contrast). Consumers provide standard AG Charts options and may\n * optionally override the theme.\n *\n * @example\n * ```html\n * <yuv-chart [options]=\"chartOptions\" />\n * ```\n */\n@Component({\n selector: 'yuv-chart',\n standalone: true,\n imports: [AgCharts],\n templateUrl: './chart.component.html',\n styleUrl: './chart.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YuvChartComponent {\n private readonly themeService = inject(YuvChartThemeService);\n\n /** AG Charts configuration (data, series, axes, etc.). */\n readonly options = input.required<YuvChartOptions>();\n\n /**\n * Optional theme override. When provided, takes precedence over the\n * theme resolved by {@link YuvChartThemeService} from the current UI mode.\n */\n readonly theme = input<AgChartTheme | string | undefined>(undefined);\n\n /**\n * Final options passed to AG Charts: the user-supplied {@link options}\n * merged with either the explicit {@link theme} input or the theme\n * derived from the active UI mode.\n */\n protected readonly mergedOptions = computed<AgChartOptions>(() => {\n const userOptions = this.options();\n const userTheme = this.theme();\n return {\n ...userOptions,\n theme: userTheme ?? this.themeService.chartTheme()\n } as AgChartOptions;\n });\n}\n","<ag-charts [options]=\"mergedOptions()\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|