@sd-angular/core 19.0.0-beta.34 → 19.0.0-beta.36
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/sd-angular-core-components-table.mjs +2 -2
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +78 -68
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date-range.mjs +145 -245
- package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date.mjs +1 -0
- package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-datetime.mjs +1 -0
- package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-number.mjs +1 -0
- package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs +1 -0
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +79 -66
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-textarea.mjs +1 -0
- package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
- package/forms/autocomplete/src/autocomplete.component.d.ts +10 -10
- package/forms/date/src/date.component.d.ts +2 -2
- package/forms/date-range/src/date-range.component.d.ts +28 -33
- package/forms/datetime/src/datetime.component.d.ts +2 -2
- package/forms/input/src/input.component.d.ts +2 -2
- package/forms/input-number/src/input-number.component.d.ts +2 -2
- package/forms/select/src/select.component.d.ts +8 -8
- package/forms/textarea/src/textarea.component.d.ts +2 -2
- package/package.json +37 -37
- package/sd-angular-core-19.0.0-beta.36.tgz +0 -0
- package/sd-angular-core-19.0.0-beta.34.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-forms-select.mjs","sources":["../../../projects/sd-angular/forms/select/src/select.component.ts","../../../projects/sd-angular/forms/select/src/select.component.html","../../../projects/sd-angular/forms/select/sd-angular-core-forms-select.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n computed,\r\n effect,\r\n untracked,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n TemplateRef,\r\n viewChild,\r\n contentChild,\r\n signal\r\n} from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n AsyncValidatorFn,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInput, MatInputModule } from '@angular/material/input';\r\nimport { MatSelect, MatSelectChange, MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\nimport { SdItemDefDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport {\r\n HandleSdCustomValidator,\r\n ISdFormConfiguration,\r\n SD_FORM_CONFIGURATION,\r\n SdCustomValidator,\r\n SdFormControl,\r\n SdSearch,\r\n SdSelectionData,\r\n} from '@sd-angular/core/forms/models';\r\nimport { ArrayUtilities, SdUtilities, StringUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdSize } from '@sd-angular/core/utilities/models';\r\nimport { SdView } from '@sd-angular/core/components/view';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\n\r\nimport { BehaviorSubject, Observable, Subscription, combineLatest, timer } from 'rxjs';\r\nimport { debounce, map, startWith, switchMap, tap } from 'rxjs/operators';\r\nimport * as uuid from 'uuid';\r\n\r\n@Component({\r\n selector: 'sd-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatCheckboxModule,\r\n MatProgressSpinnerModule,\r\n SdLabel,\r\n SdView\r\n ],\r\n})\r\nexport class SdSelect implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n\r\n // ==========================================\r\n // 1. SIGNAL QUERIES\r\n // ==========================================\r\n matInputRef = viewChild(MatInput);\r\n selectRef = viewChild<MatSelect>('select');\r\n \r\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\r\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\r\n itemDef = contentChild(SdItemDefDefDirective);\r\n sdViewDef = contentChild(SdViewDefDirective);\r\n\r\n // ==========================================\r\n // 2. INJECTS\r\n // ==========================================\r\n private ref = inject(ChangeDetectorRef);\r\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\r\n\r\n // ==========================================\r\n // 3. SIGNAL INPUTS & MODEL\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n autoId = computed(() => this.autoIdInput() ? `forms-select-${this.autoIdInput()}` : undefined);\r\n name = input<string>(uuid.v4());\r\n\r\n size = input<SdSize>('md');\r\n form = input<NgForm | FormGroup<any> | undefined | null>();\r\n label = input<string | undefined>();\r\n helperText = input<string | undefined>();\r\n placeholder = input<string | undefined>();\r\n \r\n // Các field bắt buộc\r\n valueField = input.required<string>();\r\n displayField = input.required<string>();\r\n disabledField = input<string>('');\r\n cacheChecksum = input<any>();\r\n\r\n limit = input<number>(50);\r\n hyperlink = input<string | null | undefined>();\r\n\r\n hideInlineError = input(false, { transform: booleanAttribute });\r\n required = input(false, { transform: booleanAttribute });\r\n disabled = input(false, { transform: booleanAttribute });\r\n viewed = input(false, { transform: booleanAttribute });\r\n multiple = input(false, { transform: booleanAttribute });\r\n\r\n validator = input<SdCustomValidator | undefined>();\r\n inlineError = input<string | undefined>();\r\n\r\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\r\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\r\n\r\n items = input<undefined | null | any[] | SdSearch>();\r\n valueModel = model<boolean | number | string | (number | string)[] | undefined | null>(undefined, { alias: 'model' });\r\n\r\n // ==========================================\r\n // 4. SIGNAL OUTPUTS\r\n // ==========================================\r\n sdChange = output<any>();\r\n sdSelection = output<SdSelectionData>();\r\n\r\n // ==========================================\r\n // 5. INTERNAL STATE, COMPUTED & STREAMS\r\n // ==========================================\r\n formControl = new SdFormControl();\r\n inputControl = new FormControl('');\r\n \r\n loading = signal<boolean>(false);\r\n isFocused = false;\r\n allSelected = false;\r\n tooltip?: string;\r\n \r\n #cache: Record<string, any[]> = {};\r\n #allItem: Record<string, any> = {};\r\n #subscription = new Subscription();\r\n #searchRequestId = 0;\r\n #hashedValue?: string;\r\n\r\n // [COMPUTED SIÊU THÔNG MINH]: Tự động tính toán xem có nên hiện ô Search (filtered) hay không\r\n filtered = computed(() => {\r\n const data = this.items();\r\n if (typeof data === 'function') return true; // Server search luôn bật\r\n if (Array.isArray(data)) return data.filter(e => e != null).length > 10; // Mảng > 10 phần tử tự bật\r\n return false;\r\n });\r\n\r\n // Delay động: Server thì 500ms, Local thì 0ms\r\n delayTime = computed(() => typeof this.items() === 'function' ? 500 : 0);\r\n\r\n selectedItems?: Observable<any[]>;\r\n #allItems?: Observable<any[]>;\r\n filteredItems?: Observable<any[]>;\r\n display?: Observable<string>;\r\n\r\n constructor() {\r\n // EFFECT 1: Sync model\r\n effect(() => {\r\n const val = this.valueModel();\r\n untracked(() => {\r\n if (this.multiple() && val !== undefined && val !== null && !Array.isArray(val)) {\r\n this.formControl.setValue([val], { emitEvent: false });\r\n } else {\r\n this.formControl.setValue(val, { emitEvent: false });\r\n }\r\n });\r\n });\r\n\r\n // EFFECT 2: Sync Disable\r\n effect(() => {\r\n if (this.disabled()) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n });\r\n\r\n // EFFECT 3: Update Validators\r\n effect(() => {\r\n const req = this.required();\r\n const val = this.validator();\r\n const inl = this.inlineError();\r\n untracked(() => this.#updateValidator(req, val, inl));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.ref.markForCheck()));\r\n\r\n const cleanItems$ = toObservable(this.items).pipe(\r\n tap(() => {\r\n this.#cache = {}; // Clear cache khi items đổi\r\n this.inputControl.setValue('');\r\n }),\r\n map(items => {\r\n if (!items) return [];\r\n if (Array.isArray(items)) return items.filter(e => e !== null && e !== undefined);\r\n return items;\r\n })\r\n );\r\n\r\n this.#allItems = combineLatest([\r\n cleanItems$,\r\n this.inputControl.valueChanges.pipe(\r\n startWith(''), \r\n debounce(() => timer(this.delayTime()))\r\n ),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value)),\r\n ]).pipe(\r\n switchMap(async ([items]) => {\r\n const searchText = this.inputControl.value;\r\n const formValue = this.formControl.value;\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (typeof items === 'function') {\r\n return await this.#loadItems(searchText, items);\r\n }\r\n\r\n this.#allItem = ArrayUtilities.toObject(vField, items);\r\n const isArray = Array.isArray(formValue);\r\n const hasFields = !!vField && !!dField;\r\n \r\n const filteredList = items.filter(item => {\r\n const value = hasFields ? item[vField] : item;\r\n const display = hasFields ? item[dField] : item;\r\n if (StringUtilities.aliasIncludes(value, searchText) || StringUtilities.aliasIncludes(display, searchText)) {\r\n return true;\r\n }\r\n if (isArray) return formValue.some((e: any) => e === value);\r\n return formValue === value;\r\n });\r\n\r\n if (items.length <= this.limit()) return filteredList;\r\n\r\n // Đưa selected items lên đầu cho mat-select\r\n return filteredList.sort((current, next) => {\r\n const value1 = hasFields ? current[vField] : current;\r\n const value2 = hasFields ? next[vField] : next;\r\n let flag1 = 0; let flag2 = 0;\r\n if (isArray) {\r\n flag1 = formValue.some((e: any) => e === value1) ? 1 : 0;\r\n flag2 = formValue.some((e: any) => e === value2) ? 1 : 0;\r\n return flag2 - flag1;\r\n }\r\n flag1 = formValue === value1 ? 1 : 0;\r\n flag2 = formValue === value2 ? 1 : 0;\r\n return flag2 - flag1;\r\n });\r\n })\r\n );\r\n\r\n this.selectedItems = combineLatest([\r\n cleanItems$,\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value)),\r\n ]).pipe(\r\n switchMap(async ([items]) => {\r\n const val = this.formControl.value;\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (!val?.toString()) return [];\r\n \r\n const values = Array.isArray(val) ? val : [val];\r\n if (!vField) return values;\r\n \r\n if (typeof items === 'function') {\r\n return await this.#loadSelectedItems(val, items);\r\n }\r\n \r\n return values.map(value => {\r\n return (items as any[])?.find(item => item[vField] === value) || {\r\n [vField]: value,\r\n [dField]: value,\r\n };\r\n });\r\n })\r\n );\r\n\r\n this.filteredItems = this.#allItems.pipe(map(allItems => ArrayUtilities.paging(allItems, this.limit())));\r\n \r\n this.display = this.selectedItems.pipe(\r\n map(selectedItems => selectedItems?.map(item => (this.displayField() ? item[this.displayField()] : item))?.join(', '))\r\n );\r\n\r\n this.#subscription.add(\r\n this.selectedItems.subscribe(\r\n selectedItems => (this.tooltip = selectedItems\r\n ?.map(item => (this.valueField() ? `• ${item[this.valueField()]} - ${item[this.displayField()]}` : `• ${item}`))\r\n ?.join('\\n'))\r\n )\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.addControl(this.name(), this.formControl);\r\n }\r\n\r\n ngOnDestroy() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.removeControl(this.name());\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = (req: boolean, val: SdCustomValidator | undefined, inl: string | undefined) => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n\r\n if (req) validators.push(Validators.required);\r\n if (val) asyncValidators.push(HandleSdCustomValidator(val));\r\n if (inl) validators.push(this.customInlineErrorValidator());\r\n\r\n this.formControl.setValidators(validators.length ? validators : null);\r\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n };\r\n\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => ({ inlineError: true });\r\n }\r\n\r\n #loadSelectedItems = async (value: string | string[], items: SdSearch) => {\r\n if (!value?.toString()) return [];\r\n \r\n const values = Array.isArray(value) ? value : [value];\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (!vField && !dField) return values;\r\n\r\n if (values.some(val => this.#allItem[val] === undefined)) {\r\n const results: any[] = await items({ type: 'VALUE', value }).catch(() => []);\r\n const objItem = ArrayUtilities.toObject(vField, results);\r\n \r\n const objValue = ArrayUtilities.toObject(\r\n vField,\r\n values.map(val => ({\r\n [val?.toString()]: {\r\n [vField]: val,\r\n [dField]: val,\r\n },\r\n }))\r\n );\r\n this.#allItem = { ...objValue, ...this.#allItem, ...objItem };\r\n }\r\n return values.map(\r\n val => this.#allItem[val?.toString()] ?? { [vField]: val, [dField]: val }\r\n );\r\n };\r\n\r\n #loadItems = async (searchText: string | undefined | null, items: SdSearch) => {\r\n searchText = searchText?.toString() || '';\r\n const key = SdUtilities.hash({\r\n checksum: this.cacheChecksum() || null,\r\n searchText,\r\n });\r\n const vField = this.valueField();\r\n\r\n this.#searchRequestId++;\r\n const currentRequestId = this.#searchRequestId;\r\n \r\n if (this.#cache[key] === undefined && this.isFocused) {\r\n this.loading.set(true);\r\n\r\n const results: any[] = await items({ type: 'SEARCH', searchText })\r\n .catch(() => [])\r\n .finally(() => {\r\n if (currentRequestId === this.#searchRequestId) {\r\n this.loading.set(false);\r\n }\r\n });\r\n\r\n if (currentRequestId !== this.#searchRequestId) return [];\r\n\r\n const objItem = ArrayUtilities.toObject(vField, results);\r\n this.#allItem = { ...this.#allItem, ...objItem };\r\n this.#cache[key] = ArrayUtilities.union(vField, results);\r\n }\r\n\r\n const selectedItems = await this.#loadSelectedItems(this.formControl.value, items);\r\n\r\n if (currentRequestId !== this.#searchRequestId) return [];\r\n\r\n return ArrayUtilities.union(vField, [...selectedItems, ...(this.#cache[key] || [])]);\r\n };\r\n\r\n onSelectionChange = (change: MatSelectChange) => {\r\n this.allSelected = !this.selectRef()?.options.some(e => !e.selected);\r\n const value = change?.value ?? '';\r\n if (this.multiple()) {\r\n this.formControl.setValue(value || [], { emitEvent: false });\r\n this.#onChange(value || []);\r\n } else {\r\n this.inputControl.setValue('');\r\n this.formControl.setValue(value, { emitEvent: false });\r\n this.#onChange(value);\r\n }\r\n };\r\n\r\n reValidate = () => {\r\n this.formControl.updateValueAndValidity({ emitEvent: true });\r\n };\r\n\r\n #onChange = async (value: boolean | number | string | (number | string)[]) => {\r\n this.valueModel.set(value);\r\n if (Array.isArray(value)) {\r\n this.sdSelection.emit({\r\n multiple: true,\r\n values: value,\r\n selectedItems: value.map(val => this.#allItem[val?.toString()]),\r\n });\r\n } else {\r\n this.sdSelection.emit({\r\n multiple: false,\r\n values: [value],\r\n selectedItems: [this.#allItem[value?.toString()]],\r\n value,\r\n selectedItem: this.#allItem[value?.toString()],\r\n });\r\n }\r\n };\r\n\r\n clear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n if (this.multiple()) {\r\n this.formControl.setValue([]);\r\n this.valueModel.set([]);\r\n this.sdChange.emit([]);\r\n this.sdSelection.emit({ multiple: true, values: [], selectedItems: [], value: undefined, selectedItem: undefined });\r\n } else {\r\n this.formControl.setValue(null);\r\n this.valueModel.set(null);\r\n this.sdChange.emit(null);\r\n this.sdSelection.emit({ multiple: false, values: [], selectedItems: [], value: null, selectedItem: null });\r\n }\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef()?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.selectRef()?.focus();\r\n this.selectRef()?.open();\r\n }, 100);\r\n };\r\n\r\n onOpenedChange = (isOpened: boolean) => {\r\n if (isOpened) {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n const input = this.matInputRef();\r\n if (input) {\r\n input.value = '';\r\n input.focus();\r\n }\r\n }, 100);\r\n this.#hashedValue = SdUtilities.hash({ value: this.formControl.value });\r\n this.inputControl.setValue('');\r\n } else {\r\n this.isFocused = false;\r\n const hashedValue = SdUtilities.hash({ value: this.formControl.value });\r\n \r\n if (this.#hashedValue !== hashedValue) {\r\n this.sdChange.emit(this.formControl.value);\r\n if (this.multiple()) {\r\n this.sdSelection.emit({\r\n multiple: true,\r\n values: this.formControl.value,\r\n selectedItems: this.formControl.value?.map((val: any) => this.#allItem[val?.toString()]) || [],\r\n });\r\n } else {\r\n this.sdSelection.emit({\r\n multiple: false,\r\n values: [this.formControl.value],\r\n selectedItems: [this.#allItem[this.formControl.value?.toString()]],\r\n value: this.formControl.value,\r\n selectedItem: this.#allItem[this.formControl.value?.toString()],\r\n });\r\n }\r\n }\r\n this.#hashedValue = undefined;\r\n }\r\n };\r\n}","@let lbl = label();\r\n@let app = appearance();\r\n@let hideErr = hideInlineError();\r\n@let viewDef = sdViewDef();\r\n@let hText = helperText();\r\n@let isMulti = multiple();\r\n@let req = required();\r\n@let vField = valueField();\r\n@let dField = displayField();\r\n@let disField = disabledField();\r\n\r\n@if (viewed()) {\r\n <sd-view\r\n [label]=\"lbl\"\r\n [labelTemplate]=\"sdLabelTemplate()\"\r\n [value]=\"formControl.value\"\r\n [display]=\"display | async\"\r\n [hyperlink]=\"hyperlink()\"\r\n [valueTemplate]=\"sdValueTemplate()\">\r\n </sd-view>\r\n} @else {\r\n @if (!app) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n \r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"viewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n \r\n @if (viewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n viewDef!.templateRef;\r\n context: {\r\n value: formControl.value,\r\n selectedItems: selectedItems | async,\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size() === 'md'\"\r\n [class.sd-sm]=\"size() === 'sm'\"\r\n [class.hide-inline-error]=\"hideErr\"\r\n [appearance]=\"app!\">\r\n \r\n @if (app && lbl) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ lbl }}</span>\r\n @if (hText) {\r\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n\r\n <mat-select\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder() || lbl || ''\"\r\n [multiple]=\"isMulti\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n [panelClass]=\"isMulti ? ['sd-select-panel', 'sd-multiple'] : 'sd-select-panel'\"\r\n [class.sd-selected]=\"!req && (isMulti ? formControl.value?.length : formControl.value !== undefined && formControl.value !== null)\"\r\n [required]=\"req\"\r\n (openedChange)=\"onOpenedChange($event)\"\r\n [attr.data-autoId]=\"autoId()\"\r\n matTooltipClass=\"sd-multiline-tooltip\"\r\n [matTooltipDisabled]=\"!formControl.disabled || !formControl.value?.length\"\r\n [matTooltip]=\"tooltip || ''\">\r\n \r\n <mat-select-trigger>\r\n @if (isMulti) {\r\n <div class=\"sd-trigger-text\" [matTooltip]=\"(display | async) || ''\" matTooltipPosition=\"above\">\r\n {{ display | async }}\r\n </div>\r\n } @else {\r\n {{ display | async }}\r\n }\r\n </mat-select-trigger>\r\n\r\n @if (filtered()) {\r\n <div class=\"c-filter-input-container\">\r\n <div class=\"filter-input-wrapper\">\r\n <mat-icon>search</mat-icon>\r\n <input\r\n [formControl]=\"inputControl\"\r\n aria-hidden=\"true\"\r\n matInput\r\n autocomplete=\"off\"\r\n class=\"c-search-input\"\r\n (keydown)=\"$event.stopPropagation()\" />\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (loading()) {\r\n <mat-option disabled class=\"sd-loading-option\">\r\n <mat-spinner diameter=\"24\"></mat-spinner>\r\n </mat-option>\r\n } @else {\r\n @let asyncItems = filteredItems | async;\r\n @if (asyncItems) {\r\n @if (!asyncItems.length) {\r\n <mat-option class=\"sd-empty\" disabled>\r\n <img class=\"sd-empty-img\" alt=\"empty-image\" />\r\n </mat-option>\r\n } @else {\r\n @let iDefTpl = itemDef()?.templateRef;\r\n\r\n @if (vField && dField) {\r\n @for (item of asyncItems; track item?.[valueField()]) {\r\n <mat-option [value]=\"item[vField]\" [disabled]=\"disField ? item[disField] : false\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[dField]\">\r\n @if (iDefTpl) {\r\n <ng-container *ngTemplateOutlet=\"iDefTpl ?? null; context: { item: item }\"> </ng-container>\r\n } @else {\r\n {{ item[dField] }}\r\n }\r\n </div>\r\n </mat-option>\r\n }\r\n } @else if (!vField && !dField) {\r\n @for (item of asyncItems; track item) {\r\n <mat-option [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n @if (iDefTpl) {\r\n <ng-container *ngTemplateOutlet=\"iDefTpl ?? null; context: { item: item }\"> </ng-container>\r\n } @else {\r\n {{ item }}\r\n }\r\n </div>\r\n </mat-option>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </mat-select>\r\n\r\n @if (\r\n (isMulti ? formControl.value?.length : formControl.value !== undefined && formControl.value !== null) &&\r\n !req &&\r\n !formControl.disabled\r\n ) {\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"clear($event)\" matSuffix>cancel</mat-icon>\r\n } @else {\r\n <span matSuffix class=\"c-custom-arrow\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#757575\">\r\n <path d=\"M24 24H0V0h24v24z\" fill=\"none\" opacity=\".87\" />\r\n <path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z\" />\r\n </svg>\r\n </span>\r\n }\r\n\r\n @if (formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n Vui lòng nhập thông tin\r\n }\r\n </mat-error>\r\n }\r\n @if (formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-forms-select.mjs","sources":["../../../projects/sd-angular/forms/select/src/select.component.ts","../../../projects/sd-angular/forms/select/src/select.component.html","../../../projects/sd-angular/forms/select/sd-angular-core-forms-select.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n computed,\r\n effect,\r\n untracked,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n TemplateRef,\r\n viewChild,\r\n contentChild,\r\n signal,\r\n} from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n AsyncValidatorFn,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInput, MatInputModule } from '@angular/material/input';\r\nimport { MatSelect, MatSelectChange, MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\nimport { SdItemDefDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport {\r\n HandleSdCustomValidator,\r\n ISdFormConfiguration,\r\n SD_FORM_CONFIGURATION,\r\n SdCustomValidator,\r\n SdFormControl,\r\n SdSearch,\r\n SdSelectionData,\r\n} from '@sd-angular/core/forms/models';\r\nimport { ArrayUtilities, SdUtilities, StringUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdSize } from '@sd-angular/core/utilities/models';\r\nimport { SdView } from '@sd-angular/core/components/view';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\n\r\nimport { combineLatest, Observable, Subscription, timer } from 'rxjs';\r\nimport { debounce, map, startWith, switchMap, tap } from 'rxjs/operators';\r\nimport * as uuid from 'uuid';\r\n\r\n@Component({\r\n selector: 'sd-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatCheckboxModule,\r\n MatProgressSpinnerModule,\r\n SdLabel,\r\n SdView,\r\n ],\r\n})\r\nexport class SdSelect implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n\r\n // ==========================================\r\n // 1. SIGNAL QUERIES\r\n // ==========================================\r\n matInputRef = viewChild(MatInput);\r\n selectRef = viewChild<MatSelect>('select');\r\n\r\n sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\r\n sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\r\n itemDef = contentChild(SdItemDefDefDirective);\r\n sdViewDef = contentChild(SdViewDefDirective);\r\n\r\n // ==========================================\r\n // 2. INJECTS\r\n // ==========================================\r\n private ref = inject(ChangeDetectorRef);\r\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\r\n\r\n // ==========================================\r\n // 3. SIGNAL INPUTS & MODEL\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n autoId = computed(() => (this.autoIdInput() ? `forms-select-${this.autoIdInput()}` : undefined));\r\n name = input<string>(uuid.v4());\r\n\r\n size = input<SdSize>('md');\r\n form = input<any>();\r\n label = input<string | undefined>();\r\n helperText = input<string | undefined>();\r\n placeholder = input<string | undefined>();\r\n\r\n valueField = input.required<string>();\r\n displayField = input.required<string>();\r\n disabledField = input<string>('');\r\n cacheChecksum = input<any>();\r\n\r\n limit = input<number>(50);\r\n hyperlink = input<string | null | undefined>();\r\n\r\n hideInlineError = input(false, { transform: booleanAttribute });\r\n required = input(false, { transform: booleanAttribute });\r\n disabled = input(false, { transform: booleanAttribute });\r\n viewed = input(false, { transform: booleanAttribute });\r\n multiple = input(false, { transform: booleanAttribute });\r\n\r\n validator = input<SdCustomValidator | undefined>();\r\n inlineError = input<string | undefined>();\r\n\r\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\r\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\r\n\r\n items = input<undefined | null | any[] | SdSearch>();\r\n valueModel = model<boolean | number | string | (number | string)[] | undefined | null>(undefined, { alias: 'model' });\r\n\r\n // ==========================================\r\n // 4. SIGNAL OUTPUTS\r\n // ==========================================\r\n sdChange = output<any>();\r\n sdSelection = output<SdSelectionData>();\r\n\r\n // ==========================================\r\n // 5. INTERNAL STATE & STREAMS\r\n // ==========================================\r\n formControl = new SdFormControl();\r\n inputControl = new FormControl('');\r\n\r\n loading = signal<boolean>(false);\r\n isFocused = false;\r\n allSelected = false;\r\n\r\n #cache: Record<string, any[]> = {};\r\n #allItem: Record<string, any> = {};\r\n #subscription = new Subscription();\r\n #searchRequestId = 0;\r\n #hashedValue?: string;\r\n\r\n // RXJS STREAMS (Khai báo ở cấp độ Class để tránh lỗi NG0203 - Injection Context)\r\n #items$ = toObservable(this.items);\r\n #valueModel$ = toObservable(this.valueModel);\r\n\r\n // PUBLIC SIGNALS (Dùng để render View)\r\n filteredItems = signal<any[]>([]);\r\n selectedItems = signal<any[]>([]);\r\n display = signal<string>('');\r\n normalizedValue = computed(() => {\r\n const val = this.valueModel();\r\n if (this.multiple() && val !== undefined && val !== null && !Array.isArray(val)) {\r\n return [val];\r\n }\r\n return val;\r\n });\r\n\r\n filtered = computed(() => {\r\n const data = this.items();\r\n if (typeof data === 'function') return true;\r\n if (Array.isArray(data)) return data.filter(e => e != null).length > 10;\r\n return false;\r\n });\r\n\r\n delayTime = computed(() => (typeof this.items() === 'function' ? 500 : 0));\r\n\r\n tooltip = computed(() => {\r\n const items = this.selectedItems();\r\n if (!items || !items.length) return '';\r\n const vF = this.valueField();\r\n const dF = this.displayField();\r\n return items.map(item => (vF ? `• ${item[vF]} - ${item[dF]}` : `• ${item}`)).join('\\n');\r\n });\r\n\r\n constructor() {\r\n // Sync 1: Signal Model -> FormControl (Khi dùng [(model)])\r\n effect(() => {\r\n const val = this.normalizedValue();\r\n untracked(() => {\r\n const current = this.formControl.value;\r\n const isDiff = Array.isArray(val) && Array.isArray(current) ? JSON.stringify(val) !== JSON.stringify(current) : val !== current;\r\n\r\n if (isDiff) {\r\n this.formControl.setValue(val, { emitEvent: false });\r\n }\r\n });\r\n });\r\n\r\n effect(() => {\r\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\r\n else this.formControl.enable({ emitEvent: false });\r\n });\r\n\r\n effect(() => {\r\n const req = this.required();\r\n const val = this.validator();\r\n const inl = this.inlineError();\r\n untracked(() => this.#updateValidator(req, val, inl));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n // Sync 2: FormControl -> Signal Model\r\n this.#subscription.add(\r\n this.formControl.valueChanges.subscribe(val => {\r\n const currentModel = this.valueModel();\r\n const isDiff =\r\n Array.isArray(val) && Array.isArray(currentModel) ? JSON.stringify(val) !== JSON.stringify(currentModel) : val !== currentModel;\r\n\r\n if (isDiff) {\r\n this.valueModel.set(val);\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.ref.markForCheck()));\r\n\r\n const cleanItems$ = this.#items$.pipe(\r\n tap(() => {\r\n this.#cache = {};\r\n this.inputControl.setValue('');\r\n }),\r\n map(items => {\r\n if (!items) return [];\r\n if (Array.isArray(items)) return items.filter(e => e !== null && e !== undefined);\r\n return items;\r\n })\r\n );\r\n\r\n const search$ = this.inputControl.valueChanges.pipe(\r\n startWith(''),\r\n debounce(() => timer(this.delayTime()))\r\n );\r\n\r\n const allItems$ = combineLatest([cleanItems$, search$, this.#valueModel$]).pipe(\r\n switchMap(async ([items, searchText]) => {\r\n const sText = searchText || '';\r\n const formValue = this.valueModel();\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (typeof items === 'function') {\r\n return await this.#loadItems(sText, items);\r\n }\r\n\r\n this.#allItem = ArrayUtilities.toObject(vField, items);\r\n const isArray = Array.isArray(formValue);\r\n const hasFields = !!vField && !!dField;\r\n\r\n const filteredList = items.filter(item => {\r\n const value = hasFields ? item[vField] : item;\r\n const display = hasFields ? item[dField] : item;\r\n if (StringUtilities.aliasIncludes(value, sText) || StringUtilities.aliasIncludes(display, sText)) return true;\r\n if (isArray) return formValue.some((e: any) => e === value);\r\n return formValue === value;\r\n });\r\n\r\n if (items.length <= this.limit()) return filteredList;\r\n\r\n return filteredList.sort((current, next) => {\r\n const value1 = hasFields ? current[vField] : current;\r\n const value2 = hasFields ? next[vField] : next;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n if (isArray) {\r\n flag1 = formValue.some((e: any) => e === value1) ? 1 : 0;\r\n flag2 = formValue.some((e: any) => e === value2) ? 1 : 0;\r\n return flag2 - flag1;\r\n }\r\n flag1 = formValue === value1 ? 1 : 0;\r\n flag2 = formValue === value2 ? 1 : 0;\r\n return flag2 - flag1;\r\n });\r\n })\r\n );\r\n\r\n const selectedItems$ = combineLatest([cleanItems$, this.#valueModel$]).pipe(\r\n switchMap(async ([items, val]) => {\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (val === undefined || val === null || val === '') return [];\r\n\r\n const values = Array.isArray(val) ? val : [val];\r\n if (!vField) return values;\r\n\r\n if (typeof items === 'function') {\r\n return await this.#loadSelectedItems(val, items);\r\n }\r\n\r\n return values.map(value => {\r\n return (\r\n (items as any[])?.find(item => item[vField] === value) || {\r\n [vField]: value,\r\n [dField]: value,\r\n }\r\n );\r\n });\r\n })\r\n );\r\n\r\n const filteredItems$ = allItems$.pipe(map(allItems => ArrayUtilities.paging(allItems, this.limit())));\r\n\r\n const display$ = selectedItems$.pipe(\r\n map(items => items?.map(item => (this.displayField() ? item[this.displayField()] : item))?.join(', ') || '')\r\n );\r\n\r\n // Bơm dữ liệu từ RxJS vào Signal một cách an toàn\r\n this.#subscription.add(\r\n filteredItems$.subscribe(val => {\r\n this.filteredItems.set(val || []);\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n selectedItems$.subscribe(val => {\r\n this.selectedItems.set(val || []);\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n display$.subscribe(val => {\r\n this.display.set(val || '');\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : (this.form() as FormGroup);\r\n formGroup?.addControl(this.name(), this.formControl);\r\n }\r\n\r\n ngOnDestroy() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : (this.form() as FormGroup);\r\n formGroup?.removeControl(this.name());\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = (req: boolean, val: SdCustomValidator | undefined, inl: string | undefined) => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n\r\n if (req) validators.push(Validators.required);\r\n if (val) asyncValidators.push(HandleSdCustomValidator(val));\r\n if (inl) validators.push(this.customInlineErrorValidator());\r\n\r\n this.formControl.setValidators(validators.length ? validators : null);\r\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n };\r\n\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => ({ inlineError: true });\r\n }\r\n\r\n #loadSelectedItems = async (value: any, items: SdSearch) => {\r\n if (value === undefined || value === null || value === '') return [];\r\n\r\n const values = Array.isArray(value) ? value : [value];\r\n const vField = this.valueField();\r\n const dField = this.displayField();\r\n\r\n if (!vField && !dField) return values;\r\n\r\n if (values.some(val => this.#allItem[val?.toString()] === undefined)) {\r\n const results: any[] = await items({ type: 'VALUE', value }).catch(() => []);\r\n const objItem = ArrayUtilities.toObject(vField, results);\r\n\r\n const objValue = ArrayUtilities.toObject(\r\n vField,\r\n values.map(val => ({\r\n [val?.toString()]: {\r\n [vField]: val,\r\n [dField]: val,\r\n },\r\n }))\r\n );\r\n this.#allItem = { ...objValue, ...this.#allItem, ...objItem };\r\n }\r\n return values.map(val => this.#allItem[val?.toString()] ?? { [vField]: val, [dField]: val });\r\n };\r\n\r\n #loadItems = async (searchText: string | undefined | null, items: SdSearch) => {\r\n searchText = searchText?.toString() || '';\r\n const key = SdUtilities.hash({ checksum: this.cacheChecksum() || null, searchText });\r\n const vField = this.valueField();\r\n\r\n this.#searchRequestId++;\r\n const currentRequestId = this.#searchRequestId;\r\n\r\n if (this.#cache[key] === undefined && this.isFocused) {\r\n this.loading.set(true);\r\n\r\n const results: any[] = await items({ type: 'SEARCH', searchText })\r\n .catch(() => [])\r\n .finally(() => {\r\n if (currentRequestId === this.#searchRequestId) this.loading.set(false);\r\n });\r\n\r\n if (currentRequestId !== this.#searchRequestId) return [];\r\n\r\n const objItem = ArrayUtilities.toObject(vField, results);\r\n this.#allItem = { ...this.#allItem, ...objItem };\r\n this.#cache[key] = ArrayUtilities.union(vField, results);\r\n }\r\n\r\n const selectedItems = await this.#loadSelectedItems(this.valueModel(), items);\r\n\r\n if (currentRequestId !== this.#searchRequestId) return [];\r\n\r\n return ArrayUtilities.union(vField, [...selectedItems, ...(this.#cache[key] || [])]);\r\n };\r\n\r\n onSelectionChange = (change: MatSelectChange) => {\r\n this.allSelected = !this.selectRef()?.options.some(e => !e.selected);\r\n const value = change?.value ?? '';\r\n if (this.multiple()) {\r\n this.formControl.setValue(value || [], { emitEvent: false });\r\n this.#onChange(value || []);\r\n } else {\r\n this.inputControl.setValue('');\r\n this.formControl.setValue(value, { emitEvent: false });\r\n this.#onChange(value);\r\n }\r\n };\r\n\r\n reValidate = () => {\r\n this.formControl.updateValueAndValidity({ emitEvent: true });\r\n };\r\n\r\n #onChange = async (value: boolean | number | string | (number | string)[]) => {\r\n this.valueModel.set(value);\r\n if (Array.isArray(value)) {\r\n this.sdSelection.emit({\r\n multiple: true,\r\n values: value,\r\n selectedItems: value.map(val => this.#allItem[val?.toString()]),\r\n });\r\n } else {\r\n this.sdSelection.emit({\r\n multiple: false,\r\n values: [value],\r\n selectedItems: [this.#allItem[value?.toString()]],\r\n value,\r\n selectedItem: this.#allItem[value?.toString()],\r\n });\r\n }\r\n };\r\n\r\n clear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n if (this.multiple()) {\r\n this.formControl.setValue([]);\r\n this.valueModel.set([]);\r\n this.sdChange.emit([]);\r\n this.sdSelection.emit({ multiple: true, values: [], selectedItems: [], value: undefined, selectedItem: undefined });\r\n } else {\r\n this.formControl.setValue(null);\r\n this.valueModel.set(null);\r\n this.sdChange.emit(null);\r\n this.sdSelection.emit({ multiple: false, values: [], selectedItems: [], value: null, selectedItem: null });\r\n }\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef()?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) this.focus();\r\n }\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.selectRef()?.focus();\r\n this.selectRef()?.open();\r\n }, 100);\r\n };\r\n\r\n onOpenedChange = (isOpened: boolean) => {\r\n if (isOpened) {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n const input = this.matInputRef();\r\n if (input) {\r\n input.value = '';\r\n input.focus();\r\n }\r\n }, 100);\r\n this.#hashedValue = SdUtilities.hash({ value: this.formControl.value });\r\n this.inputControl.setValue('');\r\n } else {\r\n this.isFocused = false;\r\n const hashedValue = SdUtilities.hash({ value: this.formControl.value });\r\n\r\n if (this.#hashedValue !== hashedValue) {\r\n this.sdChange.emit(this.formControl.value);\r\n if (this.multiple()) {\r\n this.sdSelection.emit({\r\n multiple: true,\r\n values: this.formControl.value,\r\n selectedItems: this.formControl.value?.map((val: any) => this.#allItem[val?.toString()]) || [],\r\n });\r\n } else {\r\n this.sdSelection.emit({\r\n multiple: false,\r\n values: [this.formControl.value],\r\n selectedItems: [this.#allItem[this.formControl.value?.toString()]],\r\n value: this.formControl.value,\r\n selectedItem: this.#allItem[this.formControl.value?.toString()],\r\n });\r\n }\r\n }\r\n this.#hashedValue = undefined;\r\n }\r\n };\r\n}\r\n","@let lbl = label();\r\n@let app = appearance();\r\n@let hideErr = hideInlineError();\r\n@let viewDef = sdViewDef();\r\n@let hText = helperText();\r\n@let isMulti = multiple();\r\n@let req = required();\r\n@let vField = valueField();\r\n@let dField = displayField();\r\n@let disField = disabledField();\r\n@let nVal = $any(normalizedValue());\r\n\r\n@if (viewed()) {\r\n <sd-view\r\n [label]=\"lbl\"\r\n [labelTemplate]=\"sdLabelTemplate()\"\r\n [value]=\"nVal\"\r\n [display]=\"display()\"\r\n [hyperlink]=\"hyperlink()\"\r\n [valueTemplate]=\"sdValueTemplate()\">\r\n </sd-view>\r\n} @else {\r\n @if (!app) {\r\n <ng-content select=\"[sdLabel]\">\r\n @if (lbl) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\r\n }\r\n </ng-content>\r\n }\r\n \r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"viewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n \r\n @if (viewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n viewDef!.templateRef;\r\n context: {\r\n value: nVal,\r\n selectedItems: selectedItems()\r\n }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size() === 'md'\"\r\n [class.sd-sm]=\"size() === 'sm'\"\r\n [class.hide-inline-error]=\"hideErr\"\r\n [appearance]=\"app!\">\r\n \r\n @if (app && lbl) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ lbl }}</span>\r\n @if (hText) {\r\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"below\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n\r\n <mat-select\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder() || lbl || ''\"\r\n [multiple]=\"isMulti\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n [panelClass]=\"isMulti ? ['sd-select-panel', 'sd-multiple'] : 'sd-select-panel'\"\r\n [class.sd-selected]=\"!req && (isMulti ? nVal?.length : nVal !== undefined && nVal !== null)\"\r\n [required]=\"req\"\r\n (openedChange)=\"onOpenedChange($event)\"\r\n [attr.data-autoId]=\"autoId()\"\r\n matTooltipClass=\"sd-multiline-tooltip\"\r\n [matTooltipDisabled]=\"!formControl.disabled || !nVal?.length\"\r\n [matTooltip]=\"tooltip() || ''\">\r\n \r\n <mat-select-trigger>\r\n @if (isMulti) {\r\n <div class=\"sd-trigger-text\" [matTooltip]=\"display() || ''\" matTooltipPosition=\"above\">\r\n {{ display() }}\r\n </div>\r\n } @else {\r\n {{ display() }}\r\n }\r\n </mat-select-trigger>\r\n\r\n @if (filtered()) {\r\n <div class=\"c-filter-input-container\">\r\n <div class=\"filter-input-wrapper\">\r\n <mat-icon>search</mat-icon>\r\n <input\r\n [formControl]=\"inputControl\"\r\n aria-hidden=\"true\"\r\n matInput\r\n autocomplete=\"off\"\r\n class=\"c-search-input\"\r\n (keydown)=\"$event.stopPropagation()\" />\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (loading()) {\r\n <mat-option disabled class=\"sd-loading-option\">\r\n <mat-spinner diameter=\"24\"></mat-spinner>\r\n </mat-option>\r\n } @else {\r\n @let asyncItems = filteredItems();\r\n @if (asyncItems) {\r\n @if (!asyncItems.length) {\r\n <mat-option class=\"sd-empty\" disabled>\r\n <img class=\"sd-empty-img\" alt=\"empty-image\" />\r\n </mat-option>\r\n } @else {\r\n @let iDefTpl = itemDef()?.templateRef;\r\n\r\n @if (vField && dField) {\r\n @for (item of asyncItems; track item?.[valueField()]) {\r\n <mat-option [value]=\"item[vField]\" [disabled]=\"disField ? item[disField] : false\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[dField]\">\r\n @if (iDefTpl) {\r\n <ng-container *ngTemplateOutlet=\"iDefTpl ?? null; context: { item: item }\"> </ng-container>\r\n } @else {\r\n {{ item[dField] }}\r\n }\r\n </div>\r\n </mat-option>\r\n }\r\n } @else if (!vField && !dField) {\r\n @for (item of asyncItems; track item) {\r\n <mat-option [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n @if (iDefTpl) {\r\n <ng-container *ngTemplateOutlet=\"iDefTpl ?? null; context: { item: item }\"> </ng-container>\r\n } @else {\r\n {{ item }}\r\n }\r\n </div>\r\n </mat-option>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </mat-select>\r\n\r\n @if (\r\n (isMulti ? nVal?.length : nVal !== undefined && nVal !== null) &&\r\n !req &&\r\n !formControl.disabled\r\n ) {\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"clear($event)\" matSuffix>cancel</mat-icon>\r\n } @else {\r\n <span matSuffix class=\"c-custom-arrow\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"20px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#757575\">\r\n <path d=\"M24 24H0V0h24v24z\" fill=\"none\" opacity=\".87\" />\r\n <path d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6-1.41-1.41z\" />\r\n </svg>\r\n </span>\r\n }\r\n\r\n @if (formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n Vui lòng nhập thông tin\r\n }\r\n </mat-error>\r\n }\r\n @if (formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,7 @@ class SdTextarea {
|
|
|
43
43
|
autoId = computed(() => this.autoIdInput() ? `forms-textarea-${this.autoIdInput()}` : undefined);
|
|
44
44
|
name = input(uuid.v4());
|
|
45
45
|
size = input('md');
|
|
46
|
+
// Chấp nhận mọi loại Form cha truyền xuống (FormGroup<{}>, FormGroup<any>, NgForm...)
|
|
46
47
|
form = input();
|
|
47
48
|
label = input();
|
|
48
49
|
helperText = input();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-forms-textarea.mjs","sources":["../../../projects/sd-angular/forms/textarea/src/textarea.component.ts","../../../projects/sd-angular/forms/textarea/src/textarea.component.html","../../../projects/sd-angular/forms/textarea/sd-angular-core-forms-textarea.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n booleanAttribute,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n computed,\r\n effect,\r\n untracked,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n viewChild,\r\n contentChild\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n FormGroup,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdLabelDefDirective, SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport { ISdFormConfiguration, SD_FORM_CONFIGURATION, SdCustomValidator, SdFormControl } from '@sd-angular/core/forms/models';\r\nimport { SdSize } from '@sd-angular/core/utilities';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\nimport { SdEmptyPipe } from '@sd-angular/core/pipes';\r\n\r\n@Component({\r\n selector: 'sd-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n SdLabel,\r\n SdEmptyPipe,\r\n ],\r\n})\r\nexport class SdTextarea implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n\r\n // ==========================================\r\n // 1. SIGNAL QUERIES\r\n // ==========================================\r\n textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\r\n sdViewDef = contentChild(SdViewDefDirective);\r\n sdLabelDef = contentChild(SdLabelDefDirective);\r\n sdSuffixDef = contentChild(SdSuffixDefDirective);\r\n\r\n // ==========================================\r\n // 2. INJECTS\r\n // ==========================================\r\n private ref = inject(ChangeDetectorRef);\r\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\r\n\r\n // ==========================================\r\n // 3. SIGNAL INPUTS & MODEL\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n autoId = computed(() => this.autoIdInput() ? `forms-textarea-${this.autoIdInput()}` : undefined);\r\n name = input<string>(uuid.v4());\r\n\r\n size = input<SdSize>('md');\r\n form = input<NgForm | FormGroup<any> | undefined | null>();\r\n label = input<string | undefined>();\r\n helperText = input<string | undefined>();\r\n placeholder = input<string>('');\r\n rows = input<number>(5);\r\n \r\n hideInlineError = input(false, { transform: booleanAttribute });\r\n required = input(false, { transform: booleanAttribute });\r\n disabled = input(false, { transform: booleanAttribute });\r\n viewed = input(false, { transform: booleanAttribute });\r\n autoHeight = input(false, { transform: booleanAttribute });\r\n\r\n maxlength = input<number | null, unknown>(null, { \r\n transform: (v) => (v != null && NumberUtilities.isPositiveInteger(Number(v))) ? Number(v) : null \r\n });\r\n \r\n pattern = input<string | undefined>();\r\n validator = input<SdCustomValidator | undefined>();\r\n inlineError = input<string | undefined>();\r\n\r\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\r\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\r\n\r\n valueModel = model<any>(undefined, { alias: 'model' });\r\n\r\n // ==========================================\r\n // 4. SIGNAL OUTPUTS\r\n // ==========================================\r\n sdChange = output<any>();\r\n\r\n // ==========================================\r\n // 5. INTERNAL STATE & STREAMS\r\n // ==========================================\r\n formControl = new SdFormControl();\r\n #subscription = new Subscription();\r\n isFocused = false;\r\n\r\n constructor() {\r\n // EFFECT 1: Sync model thay đổi từ bên ngoài\r\n effect(() => {\r\n const val = this.valueModel();\r\n untracked(() => {\r\n if (this.formControl.value !== val) {\r\n this.formControl.setValue(val, { emitEvent: false });\r\n // [IMPROVE] Cập nhật chiều cao khi value đổi từ bên ngoài\r\n if (this.autoHeight()) this.#adjustHeight();\r\n }\r\n });\r\n });\r\n\r\n // EFFECT 2: Sync Disable\r\n effect(() => {\r\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\r\n else this.formControl.enable({ emitEvent: false });\r\n });\r\n\r\n // EFFECT 3: Update Validators\r\n effect(() => {\r\n const req = this.required();\r\n const maxLen = this.maxlength();\r\n const pat = this.pattern();\r\n const val = this.validator();\r\n const inl = this.inlineError();\r\n\r\n untracked(() => this.#updateValidator(req, maxLen, pat, val, inl));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.ref.markForCheck()));\r\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\r\n\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.addControl(this.name(), this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.autoHeight()) {\r\n setTimeout(() => this.#adjustHeight(), 0);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.removeControl(this.name());\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Hàm private tính toán chiều cao mượt mà\r\n #adjustHeight() {\r\n const el = this.textareaRef()?.nativeElement;\r\n if (el) {\r\n el.style.height = 'auto';\r\n el.style.overflowY = 'hidden';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n const val: string = (this.formControl.value ?? '').toString();\r\n if (val.length > val.trim().length) {\r\n this.formControl.setValue(val.trim());\r\n }\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef()?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.textareaRef()?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.textareaRef()?.nativeElement?.focus();\r\n }, 100);\r\n };\r\n\r\n #onChange = (value: any) => {\r\n if (this.autoHeight()) {\r\n this.#adjustHeight();\r\n }\r\n this.valueModel.set(value);\r\n this.sdChange.emit(value);\r\n };\r\n\r\n #updateValidator = (\r\n req: boolean, maxLen: number | null, pat: string | undefined, \r\n val: SdCustomValidator | undefined, inl: string | undefined\r\n ) => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n\r\n if (req) validators.push(Validators.required);\r\n if (maxLen != null) validators.push(Validators.maxLength(maxLen));\r\n if (pat) validators.push(Validators.pattern(pat));\r\n if (val) asyncValidators.push(this.#customValidator(val));\r\n if (inl) validators.push(this.customInlineErrorValidator());\r\n\r\n this.formControl.setValidators(validators.length ? validators : null);\r\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n };\r\n\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => ({ inlineError: true });\r\n }\r\n\r\n #customValidator = (func: (value: any) => string | Promise<string>): AsyncValidatorFn => {\r\n return async (c: AbstractControl): Promise<Record<string, any> | null> => {\r\n const value = c.value || null;\r\n if (func && typeof func === 'function') {\r\n const result = func(value);\r\n if (result instanceof Promise) {\r\n const message = await result;\r\n if (message) return { customValidator: message };\r\n return null;\r\n }\r\n if (result) return { customValidator: result };\r\n return null;\r\n }\r\n return null;\r\n };\r\n };\r\n}","@let lbl = label();\r\n@let app = appearance();\r\n@let hideErr = hideInlineError();\r\n@let viewDef = sdViewDef();\r\n@let lblDef = sdLabelDef();\r\n@let hText = helperText();\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n\r\n@if (viewed()) {\r\n @if (lblDef?.templateRef) {\r\n <ng-container *ngTemplateOutlet=\"lblDef!.templateRef\"> </ng-container>\r\n } @else if (lbl) {\r\n <div class=\"T14R text-black400\">{{ lbl }}</div>\r\n }\r\n <div class=\"T14M\">{{ formControl.value | sdEmpty }}</div>\r\n} @else {\r\n @if (!app && lblDef?.templateRef) {\r\n <ng-container *ngTemplateOutlet=\"lblDef!.templateRef\"> </ng-container>\r\n }\r\n @if (!app && lbl && !lblDef?.templateRef) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\r\n }\r\n \r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"viewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n \r\n @if (viewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n viewDef!.templateRef;\r\n context: { value: formControl.value }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size() === 'md'\"\r\n [class.sd-sm]=\"size() === 'sm'\"\r\n [class.hide-inline-error]=\"hideErr\"\r\n [appearance]=\"app!\">\r\n \r\n @if (app && lbl) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ lbl }}</span>\r\n @if (hText) {\r\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"above\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n \r\n <textarea\r\n matInput\r\n [placeholder]=\"placeholder() || lbl || ''\"\r\n [formControl]=\"formControl\"\r\n [required]=\"req\"\r\n autocomplete=\"off\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [rows]=\"rows()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n spellcheck=\"false\"\r\n #textarea>\r\n </textarea>\r\n\r\n @if (maxLen !== null && !formControl.disabled) {\r\n <span matSuffix>{{ formControl.value?.length || 0 }}/{{ maxLen }}</span>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Vui lòng nhập thông tin' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['maxlength']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Số ký tự tối đa: ' }} <strong>{{ maxLen }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['pattern']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Định dạng không hợp lệ' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['inlineError']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ inlineError() }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-forms-textarea.mjs","sources":["../../../projects/sd-angular/forms/textarea/src/textarea.component.ts","../../../projects/sd-angular/forms/textarea/src/textarea.component.html","../../../projects/sd-angular/forms/textarea/sd-angular-core-forms-textarea.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n booleanAttribute,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n computed,\r\n effect,\r\n untracked,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n viewChild,\r\n contentChild\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n FormGroup,\r\n FormsModule,\r\n NgForm,\r\n ReactiveFormsModule,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdLabelDefDirective, SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';\r\nimport { ISdFormConfiguration, SD_FORM_CONFIGURATION, SdCustomValidator, SdFormControl } from '@sd-angular/core/forms/models';\r\nimport { SdSize } from '@sd-angular/core/utilities';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\nimport { SdEmptyPipe } from '@sd-angular/core/pipes';\r\n\r\n@Component({\r\n selector: 'sd-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n SdLabel,\r\n SdEmptyPipe,\r\n ],\r\n})\r\nexport class SdTextarea implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n\r\n // ==========================================\r\n // 1. SIGNAL QUERIES\r\n // ==========================================\r\n textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\r\n sdViewDef = contentChild(SdViewDefDirective);\r\n sdLabelDef = contentChild(SdLabelDefDirective);\r\n sdSuffixDef = contentChild(SdSuffixDefDirective);\r\n\r\n // ==========================================\r\n // 2. INJECTS\r\n // ==========================================\r\n private ref = inject(ChangeDetectorRef);\r\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\r\n\r\n // ==========================================\r\n // 3. SIGNAL INPUTS & MODEL\r\n // ==========================================\r\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\r\n autoId = computed(() => this.autoIdInput() ? `forms-textarea-${this.autoIdInput()}` : undefined);\r\n name = input<string>(uuid.v4());\r\n\r\n size = input<SdSize>('md');\r\n // Chấp nhận mọi loại Form cha truyền xuống (FormGroup<{}>, FormGroup<any>, NgForm...)\r\nform = input<any>();\r\n label = input<string | undefined>();\r\n helperText = input<string | undefined>();\r\n placeholder = input<string>('');\r\n rows = input<number>(5);\r\n \r\n hideInlineError = input(false, { transform: booleanAttribute });\r\n required = input(false, { transform: booleanAttribute });\r\n disabled = input(false, { transform: booleanAttribute });\r\n viewed = input(false, { transform: booleanAttribute });\r\n autoHeight = input(false, { transform: booleanAttribute });\r\n\r\n maxlength = input<number | null, unknown>(null, { \r\n transform: (v) => (v != null && NumberUtilities.isPositiveInteger(Number(v))) ? Number(v) : null \r\n });\r\n \r\n pattern = input<string | undefined>();\r\n validator = input<SdCustomValidator | undefined>();\r\n inlineError = input<string | undefined>();\r\n\r\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\r\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\r\n\r\n valueModel = model<any>(undefined, { alias: 'model' });\r\n\r\n // ==========================================\r\n // 4. SIGNAL OUTPUTS\r\n // ==========================================\r\n sdChange = output<any>();\r\n\r\n // ==========================================\r\n // 5. INTERNAL STATE & STREAMS\r\n // ==========================================\r\n formControl = new SdFormControl();\r\n #subscription = new Subscription();\r\n isFocused = false;\r\n\r\n constructor() {\r\n // EFFECT 1: Sync model thay đổi từ bên ngoài\r\n effect(() => {\r\n const val = this.valueModel();\r\n untracked(() => {\r\n if (this.formControl.value !== val) {\r\n this.formControl.setValue(val, { emitEvent: false });\r\n // [IMPROVE] Cập nhật chiều cao khi value đổi từ bên ngoài\r\n if (this.autoHeight()) this.#adjustHeight();\r\n }\r\n });\r\n });\r\n\r\n // EFFECT 2: Sync Disable\r\n effect(() => {\r\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\r\n else this.formControl.enable({ emitEvent: false });\r\n });\r\n\r\n // EFFECT 3: Update Validators\r\n effect(() => {\r\n const req = this.required();\r\n const maxLen = this.maxlength();\r\n const pat = this.pattern();\r\n const val = this.validator();\r\n const inl = this.inlineError();\r\n\r\n untracked(() => this.#updateValidator(req, maxLen, pat, val, inl));\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.ref.markForCheck()));\r\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\r\n\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.addControl(this.name(), this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.autoHeight()) {\r\n setTimeout(() => this.#adjustHeight(), 0);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n const formGroup = this.form() instanceof NgForm ? (this.form() as NgForm).form : this.form() as FormGroup;\r\n formGroup?.removeControl(this.name());\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Hàm private tính toán chiều cao mượt mà\r\n #adjustHeight() {\r\n const el = this.textareaRef()?.nativeElement;\r\n if (el) {\r\n el.style.height = 'auto';\r\n el.style.overflowY = 'hidden';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n const val: string = (this.formControl.value ?? '').toString();\r\n if (val.length > val.trim().length) {\r\n this.formControl.setValue(val.trim());\r\n }\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdViewDef()?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.textareaRef()?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.textareaRef()?.nativeElement?.focus();\r\n }, 100);\r\n };\r\n\r\n #onChange = (value: any) => {\r\n if (this.autoHeight()) {\r\n this.#adjustHeight();\r\n }\r\n this.valueModel.set(value);\r\n this.sdChange.emit(value);\r\n };\r\n\r\n #updateValidator = (\r\n req: boolean, maxLen: number | null, pat: string | undefined, \r\n val: SdCustomValidator | undefined, inl: string | undefined\r\n ) => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n\r\n if (req) validators.push(Validators.required);\r\n if (maxLen != null) validators.push(Validators.maxLength(maxLen));\r\n if (pat) validators.push(Validators.pattern(pat));\r\n if (val) asyncValidators.push(this.#customValidator(val));\r\n if (inl) validators.push(this.customInlineErrorValidator());\r\n\r\n this.formControl.setValidators(validators.length ? validators : null);\r\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n };\r\n\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (): Record<string, any> | null => ({ inlineError: true });\r\n }\r\n\r\n #customValidator = (func: (value: any) => string | Promise<string>): AsyncValidatorFn => {\r\n return async (c: AbstractControl): Promise<Record<string, any> | null> => {\r\n const value = c.value || null;\r\n if (func && typeof func === 'function') {\r\n const result = func(value);\r\n if (result instanceof Promise) {\r\n const message = await result;\r\n if (message) return { customValidator: message };\r\n return null;\r\n }\r\n if (result) return { customValidator: result };\r\n return null;\r\n }\r\n return null;\r\n };\r\n };\r\n}","@let lbl = label();\r\n@let app = appearance();\r\n@let hideErr = hideInlineError();\r\n@let viewDef = sdViewDef();\r\n@let lblDef = sdLabelDef();\r\n@let hText = helperText();\r\n@let req = required();\r\n@let maxLen = maxlength();\r\n\r\n@if (viewed()) {\r\n @if (lblDef?.templateRef) {\r\n <ng-container *ngTemplateOutlet=\"lblDef!.templateRef\"> </ng-container>\r\n } @else if (lbl) {\r\n <div class=\"T14R text-black400\">{{ lbl }}</div>\r\n }\r\n <div class=\"T14M\">{{ formControl.value | sdEmpty }}</div>\r\n} @else {\r\n @if (!app && lblDef?.templateRef) {\r\n <ng-container *ngTemplateOutlet=\"lblDef!.templateRef\"> </ng-container>\r\n }\r\n @if (!app && lbl && !lblDef?.templateRef) {\r\n <sd-label [label]=\"lbl\" [required]=\"req\"></sd-label>\r\n }\r\n \r\n <div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"viewDef?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\"\r\n aria-hidden=\"true\">\r\n \r\n @if (viewDef?.templateRef && !isFocused) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n viewDef!.templateRef;\r\n context: { value: formControl.value }\r\n \">\r\n </ng-container>\r\n } @else {\r\n <mat-form-field\r\n [class.sd-md]=\"size() === 'md'\"\r\n [class.sd-sm]=\"size() === 'sm'\"\r\n [class.hide-inline-error]=\"hideErr\"\r\n [appearance]=\"app!\">\r\n \r\n @if (app && lbl) {\r\n <mat-label style=\"display: inline-block\">\r\n <div style=\"display: flex; align-items: center; gap: 4px\">\r\n <span>{{ lbl }}</span>\r\n @if (hText) {\r\n <mat-icon [matTooltip]=\"hText\" matTooltipPosition=\"above\">info_outline</mat-icon>\r\n }\r\n </div>\r\n </mat-label>\r\n }\r\n \r\n <textarea\r\n matInput\r\n [placeholder]=\"placeholder() || lbl || ''\"\r\n [formControl]=\"formControl\"\r\n [required]=\"req\"\r\n autocomplete=\"off\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [rows]=\"rows()\"\r\n [attr.data-autoId]=\"autoId()\"\r\n spellcheck=\"false\"\r\n #textarea>\r\n </textarea>\r\n\r\n @if (maxLen !== null && !formControl.disabled) {\r\n <span matSuffix>{{ formControl.value?.length || 0 }}/{{ maxLen }}</span>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['required']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Vui lòng nhập thông tin' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['maxlength']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Số ký tự tối đa: ' }} <strong>{{ maxLen }}</strong>\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['pattern']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ 'Định dạng không hợp lệ' }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['customValidator']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ formControl.errors?.['customValidator'] }}\r\n }\r\n </mat-error>\r\n }\r\n\r\n @if (formControl.touched && formControl.errors?.['inlineError']) {\r\n <mat-error>\r\n @if (!hideErr) {\r\n {{ inlineError() }}\r\n }\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;MA4Da,UAAU,CAAA;AACrB,IAAA,EAAE,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,EAAE,EAAE;;;;AAKpB,IAAA,WAAW,GAAG,SAAS,CAAkC,UAAU,CAAC;AACpE,IAAA,SAAS,GAAG,YAAY,CAAC,kBAAkB,CAAC;AAC5C,IAAA,UAAU,GAAG,YAAY,CAAC,mBAAmB,CAAC;AAC9C,IAAA,WAAW,GAAG,YAAY,CAAC,oBAAoB,CAAC;;;;AAKxC,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;;IAKtE,WAAW,GAAG,KAAK,CAA4B,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC9E,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAA,eAAA,EAAkB,IAAI,CAAC,WAAW,EAAE,CAAA,CAAE,GAAG,SAAS,CAAC;IAChG,IAAI,GAAG,KAAK,CAAS,IAAI,CAAC,EAAE,EAAE,CAAC;AAE/B,IAAA,IAAI,GAAG,KAAK,CAAS,IAAI,CAAC;;IAE5B,IAAI,GAAG,KAAK,EAAO;IACjB,KAAK,GAAG,KAAK,EAAsB;IACnC,UAAU,GAAG,KAAK,EAAsB;AACxC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAS,CAAC,CAAC;IAEvB,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC/D,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACxD,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACxD,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACtD,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAE1D,IAAA,SAAS,GAAG,KAAK,CAAyB,IAAI,EAAE;AAC9C,QAAA,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;AAC7F,KAAA,CAAC;IAEF,OAAO,GAAG,KAAK,EAAsB;IACrC,SAAS,GAAG,KAAK,EAAiC;IAClD,WAAW,GAAG,KAAK,EAAsB;IAEzC,eAAe,GAAG,KAAK,CAAqC,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC/F,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,SAAS,CAAC;IAE/F,UAAU,GAAG,KAAK,CAAM,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;;;;IAKtD,QAAQ,GAAG,MAAM,EAAO;;;;AAKxB,IAAA,WAAW,GAAG,IAAI,aAAa,EAAE;AACjC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;IAClC,SAAS,GAAG,KAAK;AAEjB,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7B,SAAS,CAAC,MAAK;gBACb,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,GAAG,EAAE;AAClC,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;oBAEpD,IAAI,IAAI,CAAC,UAAU,EAAE;wBAAE,IAAI,CAAC,aAAa,EAAE;gBAC7C;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;gBAC9D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpD,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAE9B,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,MAAM,GAAI,IAAI,CAAC,IAAI,EAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAe;AACzG,QAAA,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC;IACtD;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,UAAU,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC3C;IACF;IAEA,WAAW,GAAA;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,MAAM,GAAI,IAAI,CAAC,IAAI,EAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAe;QACzG,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;IAClC;;IAGA,aAAa,GAAA;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;QAC5C,IAAI,EAAE,EAAE;AACN,YAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACxB,YAAA,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ;YAC7B,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAA,EAAA,CAAI;QAC1C;IACF;IAEA,OAAO,GAAG,MAAK;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACvB,IAAA,CAAC;IAED,MAAM,GAAG,MAAK;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,MAAM,GAAG,GAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE;QAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC;AACF,IAAA,CAAC;IAED,OAAO,GAAG,MAAK;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjD,IAAI,CAAC,KAAK,EAAE;YACd;QACF;AACF,IAAA,CAAC;IAED,IAAI,GAAG,MAAK;QACV,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;AAC3C,IAAA,CAAC;IAED,KAAK,GAAG,MAAK;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;QAC5C,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;AAED,IAAA,SAAS,GAAG,CAAC,KAAU,KAAI;AACzB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACrB,IAAI,CAAC,aAAa,EAAE;QACtB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,IAAA,CAAC;AAED,IAAA,gBAAgB,GAAG,CACjB,GAAY,EAAE,MAAqB,EAAE,GAAuB,EAC5D,GAAkC,EAAE,GAAuB,KACzD;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;QACvC,MAAM,UAAU,GAAkB,EAAE;QACpC,MAAM,eAAe,GAAuB,EAAE;AAE9C,QAAA,IAAI,GAAG;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7C,IAAI,MAAM,IAAI,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjE,QAAA,IAAI,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,GAAG;YAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACzD,QAAA,IAAI,GAAG;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAE3D,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AACrE,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC/D,IAAA,CAAC;IAED,0BAA0B,GAAA;QACxB,OAAO,OAAmC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAClE;AAEA,IAAA,gBAAgB,GAAG,CAAC,IAA8C,KAAsB;AACtF,QAAA,OAAO,OAAO,CAAkB,KAAyC;AACvE,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI;AAC7B,YAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AACtC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,gBAAA,IAAI,MAAM,YAAY,OAAO,EAAE;AAC7B,oBAAA,MAAM,OAAO,GAAG,MAAM,MAAM;AAC5B,oBAAA,IAAI,OAAO;AAAE,wBAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE;AAChD,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,IAAI,MAAM;AAAE,oBAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE;AAC9C,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;AACH,IAAA,CAAC;wGA1MU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,QAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOI,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAClB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEjD,0zHAqHC,EAAA,MAAA,EAAA,CAAA,i2JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnEG,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,mnBACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACP,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA;;4FAGF,UAAU,EAAA,UAAA,EAAA,CAAA;kBAjBtB,SAAS;+BACE,aAAa,EAAA,UAAA,EAGX,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,OAAO;wBACP,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,0zHAAA,EAAA,MAAA,EAAA,CAAA,i2JAAA,CAAA,EAAA;;;AE3DH;;AAEG;;;;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { FormControl, FormGroup, FormGroupDirective, NgForm, ValidatorFn } from '@angular/forms';
|
|
2
|
+
import { FormControl, FormGroupDirective, NgForm, ValidatorFn } from '@angular/forms';
|
|
4
3
|
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
5
4
|
import { ErrorStateMatcher } from '@angular/material/core';
|
|
6
5
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
@@ -16,7 +15,7 @@ declare class SdAutocompleteErrotStateMatcher implements ErrorStateMatcher {
|
|
|
16
15
|
export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy, AfterViewInit {
|
|
17
16
|
#private;
|
|
18
17
|
id: string;
|
|
19
|
-
|
|
18
|
+
inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
20
19
|
autocompleteTrigger: import("@angular/core").Signal<MatAutocompleteTrigger | undefined>;
|
|
21
20
|
sdLabelTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
22
21
|
sdValueTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
@@ -28,7 +27,7 @@ export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy, After
|
|
|
28
27
|
autoId: import("@angular/core").Signal<string | undefined>;
|
|
29
28
|
name: import("@angular/core").InputSignal<string>;
|
|
30
29
|
size: import("@angular/core").InputSignal<SdSize>;
|
|
31
|
-
form: import("@angular/core").InputSignal<
|
|
30
|
+
form: import("@angular/core").InputSignal<any>;
|
|
32
31
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
33
32
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
34
33
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -52,16 +51,17 @@ export declare class SdAutocomplete<T = any> implements OnInit, OnDestroy, After
|
|
|
52
51
|
sdChange: import("@angular/core").OutputEmitterRef<string | number | null>;
|
|
53
52
|
sdSelection: import("@angular/core").OutputEmitterRef<SdSelectionData<any>>;
|
|
54
53
|
sdAdd: EventEmitter<void>;
|
|
55
|
-
loading: boolean
|
|
54
|
+
loading: import("@angular/core").WritableSignal<boolean>;
|
|
56
55
|
isFocused: boolean;
|
|
57
|
-
isTyping: boolean
|
|
56
|
+
isTyping: import("@angular/core").WritableSignal<boolean>;
|
|
58
57
|
inputControl: SdFormControl;
|
|
59
58
|
formControl: SdFormControl;
|
|
60
59
|
matcher: SdAutocompleteErrotStateMatcher;
|
|
61
|
-
filteredItems
|
|
62
|
-
selected
|
|
63
|
-
display
|
|
64
|
-
controlPlaceHolder
|
|
60
|
+
filteredItems: import("@angular/core").WritableSignal<any[]>;
|
|
61
|
+
selected: import("@angular/core").WritableSignal<any>;
|
|
62
|
+
display: import("@angular/core").WritableSignal<string>;
|
|
63
|
+
controlPlaceHolder: import("@angular/core").WritableSignal<string>;
|
|
64
|
+
normalizedValue: import("@angular/core").Signal<string | number | null | undefined>;
|
|
65
65
|
constructor();
|
|
66
66
|
ngOnInit(): void;
|
|
67
67
|
ngAfterViewInit(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ElementRef, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ValidatorFn } from '@angular/forms';
|
|
3
3
|
import { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';
|
|
4
4
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';
|
|
@@ -22,7 +22,7 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
22
22
|
autoId: import("@angular/core").Signal<string | undefined>;
|
|
23
23
|
name: import("@angular/core").InputSignal<string>;
|
|
24
24
|
size: import("@angular/core").InputSignal<SdSize>;
|
|
25
|
-
form: import("@angular/core").InputSignal<
|
|
25
|
+
form: import("@angular/core").InputSignal<any>;
|
|
26
26
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
27
27
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
28
28
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { FormControl
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
3
|
import { MatDatepickerInputEvent, MatDateRangePicker } from '@angular/material/datepicker';
|
|
4
4
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdLabelDefDirective } from '@sd-angular/core/forms/directives';
|
|
6
|
-
import { ISdFormConfiguration } from '@sd-angular/core/forms/models';
|
|
7
6
|
import { SdSize } from '@sd-angular/core/utilities/models';
|
|
8
7
|
import { Moment } from 'moment';
|
|
9
8
|
import * as i0 from "@angular/core";
|
|
@@ -13,41 +12,37 @@ interface Daterange {
|
|
|
13
12
|
}
|
|
14
13
|
export declare class SdDateRange implements OnDestroy, OnInit {
|
|
15
14
|
#private;
|
|
16
|
-
private cdRef;
|
|
17
|
-
private formConfig;
|
|
18
|
-
picker: MatDateRangePicker<Date>;
|
|
19
|
-
autoId?: string;
|
|
20
|
-
set _autoId(val: string | undefined | null);
|
|
21
15
|
id1: string;
|
|
22
16
|
id2: string;
|
|
17
|
+
picker: import("@angular/core").Signal<MatDateRangePicker<Date> | undefined>;
|
|
18
|
+
sdLabelDef: import("@angular/core").Signal<SdLabelDefDirective | undefined>;
|
|
19
|
+
private cdRef;
|
|
20
|
+
private formConfig;
|
|
21
|
+
autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
|
|
22
|
+
autoId: import("@angular/core").Signal<string | undefined>;
|
|
23
|
+
name: import("@angular/core").InputSignal<string>;
|
|
24
|
+
size: import("@angular/core").InputSignal<SdSize>;
|
|
25
|
+
form: import("@angular/core").InputSignal<any>;
|
|
26
|
+
label: import("@angular/core").InputSignal<string | undefined>;
|
|
27
|
+
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
28
|
+
hideInlineError: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
29
|
+
required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
30
|
+
disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
31
|
+
appearanceInput: import("@angular/core").InputSignal<MatFormFieldAppearance | undefined>;
|
|
32
|
+
appearance: import("@angular/core").Signal<MatFormFieldAppearance>;
|
|
33
|
+
minInput: import("@angular/core").InputSignal<any>;
|
|
34
|
+
resolvedMin: import("@angular/core").Signal<Date | null>;
|
|
35
|
+
maxInput: import("@angular/core").InputSignal<any>;
|
|
36
|
+
resolvedMax: import("@angular/core").Signal<Date | null>;
|
|
37
|
+
valueModel: import("@angular/core").ModelSignal<Daterange | null | undefined>;
|
|
38
|
+
sdChange: import("@angular/core").OutputEmitterRef<Daterange | null | undefined>;
|
|
23
39
|
isMobileOrTablet: boolean;
|
|
24
|
-
set name(val: string);
|
|
25
|
-
appearance: MatFormFieldAppearance;
|
|
26
|
-
size: SdSize;
|
|
27
40
|
formControl: FormControl<any>;
|
|
28
|
-
set _form(val: NgForm | FormGroup | undefined | null);
|
|
29
|
-
set disabled(val: boolean | '' | undefined | null);
|
|
30
|
-
required: boolean;
|
|
31
|
-
set _required(val: boolean | '' | undefined | null);
|
|
32
|
-
label?: string;
|
|
33
|
-
set _label(label: string | undefined);
|
|
34
|
-
helperText?: string;
|
|
35
|
-
set _helperText(val: string | undefined);
|
|
36
|
-
hideInlineError: boolean;
|
|
37
|
-
set _hideInlineError(val: boolean | '' | undefined | null);
|
|
38
|
-
min?: Date | null;
|
|
39
|
-
set _min(val: 'TODAY' | string | Date | number | undefined | null);
|
|
40
|
-
max?: Date | null;
|
|
41
|
-
set _max(val: 'TODAY' | string | Date | number | undefined | null);
|
|
42
|
-
set model(val: Daterange | undefined | null);
|
|
43
|
-
modelChange: EventEmitter<Daterange>;
|
|
44
|
-
sdChange: EventEmitter<Daterange>;
|
|
45
|
-
sdLabelDef?: SdLabelDefDirective;
|
|
46
41
|
control1: FormControl<any>;
|
|
47
42
|
control2: FormControl<any>;
|
|
48
|
-
constructor(
|
|
49
|
-
ngOnDestroy(): void;
|
|
43
|
+
constructor();
|
|
50
44
|
ngOnInit(): void;
|
|
45
|
+
ngOnDestroy(): void;
|
|
51
46
|
onStartChange: (event: MatDatepickerInputEvent<Moment>) => void;
|
|
52
47
|
onEndChange: (event: MatDatepickerInputEvent<Moment>) => void;
|
|
53
48
|
clear: () => void;
|
|
@@ -56,7 +51,7 @@ export declare class SdDateRange implements OnDestroy, OnInit {
|
|
|
56
51
|
onBlur: () => void;
|
|
57
52
|
onClosePicker: () => void;
|
|
58
53
|
onOpenPicker: (event: MouseEvent) => void;
|
|
59
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SdDateRange,
|
|
60
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "
|
|
54
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SdDateRange, never>;
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdDateRange, "sd-date-range", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, ["sdLabelDef"], never, true, never>;
|
|
61
56
|
}
|
|
62
57
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ElementRef, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ValidatorFn } from '@angular/forms';
|
|
3
3
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
4
4
|
import { MtxDatetimepicker } from '@ng-matero/extensions/datetimepicker';
|
|
5
5
|
import { SdViewDefDirective } from '@sd-angular/core/forms/directives';
|
|
@@ -21,7 +21,7 @@ export declare class SdDatetime implements OnDestroy, OnInit {
|
|
|
21
21
|
autoId: import("@angular/core").Signal<string | undefined>;
|
|
22
22
|
name: import("@angular/core").InputSignal<string>;
|
|
23
23
|
size: import("@angular/core").InputSignal<SdSize>;
|
|
24
|
-
form: import("@angular/core").InputSignal<
|
|
24
|
+
form: import("@angular/core").InputSignal<any>;
|
|
25
25
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
26
26
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
27
27
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { ValidatorFn } from '@angular/forms';
|
|
3
3
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
4
4
|
import { SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';
|
|
5
5
|
import { SdCustomValidator, SdFormControl } from '@sd-angular/core/forms/models';
|
|
@@ -19,7 +19,7 @@ export declare class SdInput implements OnDestroy, OnInit, AfterViewInit {
|
|
|
19
19
|
appearanceInput: import("@angular/core").InputSignal<MatFormFieldAppearance | undefined>;
|
|
20
20
|
appearance: import("@angular/core").Signal<MatFormFieldAppearance>;
|
|
21
21
|
size: import("@angular/core").InputSignal<SdSize>;
|
|
22
|
-
form: import("@angular/core").InputSignal<
|
|
22
|
+
form: import("@angular/core").InputSignal<any>;
|
|
23
23
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
24
24
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
25
25
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
-
import { FormControl,
|
|
2
|
+
import { FormControl, FormGroupDirective, NgForm, ValidatorFn } from '@angular/forms';
|
|
3
3
|
import { ErrorStateMatcher } from '@angular/material/core';
|
|
4
4
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
5
5
|
import { SdSuffixDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/directives';
|
|
@@ -27,7 +27,7 @@ export declare class SdInputNumber implements OnDestroy, OnInit, AfterViewInit {
|
|
|
27
27
|
autoId: import("@angular/core").Signal<string | undefined>;
|
|
28
28
|
name: import("@angular/core").InputSignal<string>;
|
|
29
29
|
size: import("@angular/core").InputSignal<SdSize>;
|
|
30
|
-
form: import("@angular/core").InputSignal<
|
|
30
|
+
form: import("@angular/core").InputSignal<any>;
|
|
31
31
|
label: import("@angular/core").InputSignal<string | undefined>;
|
|
32
32
|
helperText: import("@angular/core").InputSignal<string | undefined>;
|
|
33
33
|
placeholder: import("@angular/core").InputSignal<string | undefined>;
|