@sdcorejs/angular 20.1.1 → 20.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +124 -807
  2. package/components/form-generic/index.d.ts +25 -2
  3. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +150 -60
  4. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  5. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +2 -7
  6. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  7. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +7 -15
  8. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  9. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +1 -1
  10. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  11. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +60 -30
  12. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  13. package/fesm2022/sdcorejs-angular-components-table.mjs +34 -33
  14. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  15. package/fesm2022/sdcorejs-angular-components-tree.mjs +2 -1
  16. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  17. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +2 -1
  18. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  19. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +2 -1
  20. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  21. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +2 -1
  22. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  23. package/fesm2022/sdcorejs-angular-forms-chip.mjs +2 -1
  24. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  25. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +2 -1
  26. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  27. package/fesm2022/sdcorejs-angular-forms-date.mjs +6 -5
  28. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +14 -465
  30. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  31. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +5 -3
  32. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  33. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +9 -6
  34. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  35. package/fesm2022/sdcorejs-angular-forms-input.mjs +10 -6
  36. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  37. package/fesm2022/sdcorejs-angular-forms-select.mjs +2 -1
  38. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  39. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +2 -1
  40. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  41. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  42. package/fesm2022/sdcorejs-angular-modules-layout.mjs +1 -1
  43. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  44. package/fesm2022/sdcorejs-angular-modules.mjs +0 -1
  45. package/fesm2022/sdcorejs-angular-modules.mjs.map +1 -1
  46. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  47. package/fesm2022/sdcorejs-angular-services-loading.mjs +23 -14
  48. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  49. package/forms/date/index.d.ts +1 -1
  50. package/forms/datetime/index.d.ts +1 -1
  51. package/forms/input/index.d.ts +3 -1
  52. package/forms/input-color/index.d.ts +3 -1
  53. package/forms/input-number/index.d.ts +3 -1
  54. package/modules/icon/index.d.ts +2 -3
  55. package/modules/index.d.ts +0 -1
  56. package/package.json +2 -5
  57. package/services/loading/index.d.ts +1 -1
  58. package/fesm2022/sdcorejs-angular-modules-authom.mjs +0 -360
  59. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +0 -1
  60. package/modules/authom/index.d.ts +0 -70
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-forms-textarea.mjs","sources":["../../../projects/sdcorejs-angular/forms/textarea/src/textarea.component.ts","../../../projects/sdcorejs-angular/forms/textarea/src/textarea.component.html","../../../projects/sdcorejs-angular/forms/textarea/sdcorejs-angular-forms-textarea.ts"],"sourcesContent":["import { Utilities } from '@sdcorejs/utils/fns';\n\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n OnDestroy,\n OnInit,\n output,\n viewChild,\n contentChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n AsyncValidatorFn,\n FormGroup,\n FormsModule,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdLabelDefDirective, SdSuffixDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport {\n SD_FORM_CONFIGURATION,\n SdCustomValidator,\n SdFormControl,\n sdFormControlState,\n SdInlineErrorValidator,\n SdViewed,\n SdViewedInput,\n sdViewedInline,\n sdViewedTransform,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { Size } from '@sdcorejs/utils/models';\nimport { NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { Subscription } from 'rxjs';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdEmptyPipe } from '@sdcorejs/angular/pipes';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n@Component({\n selector: 'sd-textarea',\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n standalone: true,\n host: { '[class.sd-has-label]': '!!label()', '[class.sd-viewed]': 'isViewed() || isInline()' },\n imports: [SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTooltipModule,\n SdLabel,\n SdEmptyPipe,\n TranslatePipe,\n ],\n})\nexport class SdTextarea implements OnInit, AfterViewInit, OnDestroy {\n id = `I${Utilities.generateUuid()}`;\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n sdViewDef = contentChild(SdViewDefDirective);\n sdLabelDef = contentChild(SdLabelDefDirective);\n sdSuffixDef = contentChild(SdSuffixDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n #ref = inject(ChangeDetectorRef);\n #formConfiguration = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-textarea-${this.autoIdInput()}` : undefined));\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataMaxLength = computed(() => {\n const v = this.maxlength();\n return v == null ? null : String(v);\n });\n readonly dataPattern = computed(() => {\n const v = this.pattern();\n return v == null || v === '' ? null : String(v);\n });\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n helperText = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n placeholder = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n rows = input<number>(5);\n\n hideInlineError = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n /** Display mode: `false` edit · `true` static view · `'inline'` borderless inline-edit (textarea reads like text). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n autoHeight = input(false, { transform: booleanAttribute });\n\n // Tri-state `viewed` — shared primitive. No panel; in `'inline'` the textarea renders borderless.\n // why: disabled 'inline' falls back to static view (cannot edit a disabled control).\n readonly #viewedState = sdViewedInline(this.viewed, () => this.textareaRef()?.nativeElement?.focus(), this.disabled);\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no editor). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Focus the inline textarea. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n maxlength = input<number | null, unknown>(null, {\n transform: v => (v != null && NumberUtilities.isPositiveInteger(Number(v)) ? Number(v) : null),\n });\n\n pattern = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n validator = input<SdCustomValidator | undefined>();\n inlineError = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n void this.#state();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.textarea.required');\n if (errors['maxlength']) return this.#i18n.t('core.form.textarea.maxlength', { max: this.maxlength() ?? '' });\n if (errors['pattern']) return this.#i18n.t('core.form.textarea.invalid-pattern');\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.#formConfiguration?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n valueModel = model<any>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<any>();\n\n // ==========================================\n // 5. INTERNAL STATE & STREAMS\n // ==========================================\n formControl = new SdFormControl();\n #subscription = new Subscription();\n isFocused = false;\n\n constructor() {\n // EFFECT 1: Sync model thay đổi từ bên ngoài\n effect(() => {\n const val = this.valueModel();\n untracked(() => {\n if (this.formControl.value !== val) {\n this.formControl.setValue(val, { emitEvent: false });\n // [IMPROVE] Cập nhật chiều cao khi value đổi từ bên ngoài\n if (this.autoHeight()) this.#adjustHeight();\n }\n });\n });\n\n // EFFECT 2: Sync Disable\n effect(() => {\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\n else this.formControl.enable({ emitEvent: false });\n });\n\n // EFFECT 3: Update Validators\n effect(() => {\n const req = this.required();\n const maxLen = this.maxlength();\n const pat = this.pattern();\n const val = this.validator();\n const inl = this.inlineError();\n\n untracked(() => this.#updateValidator(req, maxLen, pat, val, inl));\n });\n }\n\n ngOnInit() {\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.#ref.markForCheck()));\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\n\n const formGroup = this.form();\n formGroup?.addControl(this.name(), this.formControl);\n }\n\n ngAfterViewInit() {\n if (this.autoHeight()) {\n setTimeout(() => this.#adjustHeight(), 0);\n }\n }\n\n ngOnDestroy() {\n const formGroup = this.form();\n formGroup?.removeControl(this.name());\n this.#subscription.unsubscribe();\n }\n\n // Hàm private tính toán chiều cao mượt mà\n #adjustHeight() {\n const el = this.textareaRef()?.nativeElement;\n if (el) {\n el.style.height = 'auto';\n el.style.overflowY = 'hidden';\n el.style.height = `${el.scrollHeight}px`;\n }\n }\n\n onFocus = () => {\n this.isFocused = true;\n };\n\n onBlur = () => {\n this.isFocused = false;\n const val: string = (this.formControl.value ?? '').toString();\n if (val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n };\n\n onClick = () => {\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.textareaRef()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n setTimeout(() => {\n this.textareaRef()?.nativeElement?.focus();\n }, 100);\n };\n\n #onChange = (value: any) => {\n if (this.autoHeight()) {\n this.#adjustHeight();\n }\n this.valueModel.set(value);\n this.sdChange.emit(value);\n };\n\n #updateValidator = (\n req: boolean,\n maxLen: number | null,\n pat: string | undefined,\n val: SdCustomValidator | undefined,\n inl: string | undefined\n ) => {\n this.formControl.clearValidators();\n this.formControl.clearAsyncValidators();\n const validators: ValidatorFn[] = [];\n const asyncValidators: AsyncValidatorFn[] = [];\n\n if (req) validators.push(Validators.required);\n if (maxLen != null) validators.push(Validators.maxLength(maxLen));\n if (pat) validators.push(Validators.pattern(pat));\n if (val) asyncValidators.push(this.#customValidator(val));\n if (inl) validators.push(SdInlineErrorValidator);\n\n this.formControl.setValidators(validators.length ? validators : null);\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\n this.formControl.updateValueAndValidity({ emitEvent: false });\n };\n\n getCurrentLength = (): number => {\n return (this.formControl.value ?? '').toString().length;\n };\n\n isMaxlengthExceeded = (): boolean => {\n const max = this.maxlength();\n return !!(max && max > 0 && this.getCurrentLength() > max);\n };\n\n #customValidator = (func: (value: any) => string | Promise<string>): AsyncValidatorFn => {\n return async (c: AbstractControl): Promise<Record<string, any> | null> => {\n const value = c.value || null;\n if (func && typeof func === 'function') {\n const result = func(value);\n if (result instanceof Promise) {\n const message = await result;\n if (message) return { customValidator: message };\n return null;\n }\n if (result) return { customValidator: result };\n return null;\n }\n return null;\n };\n };\n}\n","@let _label = label();\n@let _appearance = appearance();\n@let _hideInlineError = hideInlineError();\n@let _errorMessage = errorMessage();\n@let _sdLabelDef = sdLabelDef();\n@let _helperText = helperText();\n@let _required = required();\n@let _maxLength = maxlength();\n@let _isInline = isInline();\n\n@if (isViewed()) {\n @if (_sdLabelDef?.templateRef) {\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n } @else if (_label) {\n <div class=\"T14R text-secondary\">{{ _label }}</div>\n }\n <div class=\"T14M\">{{ formControl.value | sdEmpty }}</div>\n} @else {\n @if (!_appearance && _sdLabelDef?.templateRef) {\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n }\n @if (!_appearance && _label && !_sdLabelDef?.templateRef) {\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\n }\n\n <div\n class=\"d-flex align-items-center sd-textarea-container\"\n [class.c-focused]=\"isFocused\"\n [class.c-disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n aria-hidden=\"true\">\n <div class=\"sd-textarea-field-wrap\" [class.sd-inline-textarea]=\"_isInline\">\n <mat-form-field\n [class.sd-md]=\"size() === 'md'\"\n [class.sd-sm]=\"size() === 'sm'\"\n [class.hide-inline-error]=\"_hideInlineError\"\n [appearance]=\"_appearance!\"\n [floatLabel]=\"floatLabel()\">\n @if (_appearance && _label) {\n <mat-label class=\"sd-form-field-label\">\n <span>{{ _label }}</span>\n @if (_helperText) {\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"above\" name=\"info\"></sd-icon>\n }\n </mat-label>\n }\n\n <textarea\n matInput\n [placeholder]=\"placeholder() || _label || ''\"\n [formControl]=\"formControl\"\n [required]=\"_required\"\n autocomplete=\"off\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [rows]=\"rows()\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-maxlength]=\"dataMaxLength()\"\n [attr.data-pattern]=\"dataPattern()\"\n [attr.data-error-message]=\"dataErrorMessage()\"\n spellcheck=\"false\"\n #textarea>\n </textarea>\n\n @if (_hideInlineError && _errorMessage && formControl.touched) {\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\n\n @if (!_hideInlineError && _errorMessage && formControl.touched) {\n <mat-error>{{ _errorMessage }}</mat-error>\n }\n\n @if (sdSuffixDef()?.templateRef; as suffixRef) {\n <ng-container matSuffix>\n <ng-container *ngTemplateOutlet=\"suffixRef\"></ng-container>\n </ng-container>\n }\n <!-- <ng-container matSuffix>\n <ng-content select=\"[sdSuffix]\"></ng-content>\n </ng-container> -->\n </mat-form-field>\n\n @if (_maxLength !== null && !_hideInlineError && !formControl.disabled) {\n <div\n class=\"sd-maxlength-counter\"\n [class.sd-maxlength-counter--visible]=\"isFocused\"\n [class.sd-maxlength-counter--exceeded]=\"isMaxlengthExceeded()\"\n [attr.title]=\"isMaxlengthExceeded() ? ('core.form.textarea.exceeded' | translate) : null\">\n {{ getCurrentLength() }}/{{ _maxLength }}\n </div>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-forms-textarea.mjs","sources":["../../../projects/sdcorejs-angular/forms/textarea/src/textarea.component.ts","../../../projects/sdcorejs-angular/forms/textarea/src/textarea.component.html","../../../projects/sdcorejs-angular/forms/textarea/sdcorejs-angular-forms-textarea.ts"],"sourcesContent":["import { Utilities } from '@sdcorejs/utils/fns';\n\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n OnDestroy,\n OnInit,\n output,\n viewChild,\n contentChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n AsyncValidatorFn,\n FormGroup,\n FormsModule,\n NgForm,\n ReactiveFormsModule,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdLabelDefDirective, SdSuffixDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport {\n SD_FORM_CONFIGURATION,\n SdCustomValidator,\n SdFormControl,\n sdFormControlState,\n SdInlineErrorValidator,\n SdViewed,\n SdViewedInput,\n sdViewedInline,\n sdViewedTransform,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { Size } from '@sdcorejs/utils/models';\nimport { NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { Subscription } from 'rxjs';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdEmptyPipe } from '@sdcorejs/angular/pipes';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n@Component({\n selector: 'sd-textarea',\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n standalone: true,\n host: { '[class.sd-has-label]': '!!label()', '[class.sd-viewed]': 'isViewed() || isInline()' },\n imports: [\n SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTooltipModule,\n SdLabel,\n SdEmptyPipe,\n TranslatePipe,\n ],\n})\nexport class SdTextarea implements OnInit, AfterViewInit, OnDestroy {\n id = `I${Utilities.generateUuid()}`;\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n sdViewDef = contentChild(SdViewDefDirective);\n sdLabelDef = contentChild(SdLabelDefDirective);\n sdSuffixDef = contentChild(SdSuffixDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n #ref = inject(ChangeDetectorRef);\n #formConfiguration = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-textarea-${this.autoIdInput()}` : undefined));\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => (sdIsEmpty(this.#state().value) ? 'true' : 'false'));\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataMaxLength = computed(() => {\n const v = this.maxlength();\n return v == null ? null : String(v);\n });\n readonly dataPattern = computed(() => {\n const v = this.pattern();\n return v == null || v === '' ? null : String(v);\n });\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n label = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n helperText = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n placeholder = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n rows = input<number>(5);\n\n hideInlineError = input(false, { transform: booleanAttribute });\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n /** Display mode: `false` edit · `true` static view · `'inline'` borderless inline-edit (textarea reads like text). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n autoHeight = input(false, { transform: booleanAttribute });\n\n // Tri-state `viewed` — shared primitive. No panel; in `'inline'` the textarea renders borderless.\n // why: disabled 'inline' falls back to static view (cannot edit a disabled control).\n readonly #viewedState = sdViewedInline(this.viewed, () => this.textareaRef()?.nativeElement?.focus(), this.disabled);\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no editor). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Focus the inline textarea. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n maxlength = input<number | null, unknown>(null, {\n transform: v => (v != null && NumberUtilities.isPositiveInteger(Number(v)) ? Number(v) : null),\n });\n\n pattern = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n validator = input<SdCustomValidator | undefined>();\n inlineError = input<string | undefined, string | undefined | null>(undefined, {\n transform: (v: string | undefined | null): string | undefined => v ?? undefined,\n });\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n void this.#state();\n const errors = this.formControl.errors;\n if (!errors) return undefined;\n\n if (errors['required']) return this.#i18n.t('core.form.textarea.required');\n if (errors['maxlength']) return this.#i18n.t('core.form.textarea.maxlength', { max: this.maxlength() ?? '' });\n if (errors['pattern']) return this.#i18n.t('core.form.textarea.invalid-pattern');\n if (errors['customValidator']) return errors['customValidator'] as string;\n if (errors['inlineError']) return this.inlineError();\n return undefined;\n });\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.#formConfiguration?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n valueModel = model<any>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<any>();\n\n // ==========================================\n // 5. INTERNAL STATE & STREAMS\n // ==========================================\n formControl = new SdFormControl();\n #subscription = new Subscription();\n isFocused = false;\n\n constructor() {\n // EFFECT 1: Sync model thay đổi từ bên ngoài\n effect(() => {\n const val = this.valueModel();\n untracked(() => {\n if (this.formControl.value !== val) {\n this.formControl.setValue(val, { emitEvent: false });\n // [IMPROVE] Cập nhật chiều cao khi value đổi từ bên ngoài\n if (this.autoHeight()) this.#adjustHeight();\n }\n });\n });\n\n // EFFECT 2: Sync Disable\n effect(() => {\n if (this.disabled()) this.formControl.disable({ emitEvent: false });\n else this.formControl.enable({ emitEvent: false });\n });\n\n // EFFECT 3: Update Validators\n effect(() => {\n const req = this.required();\n const maxLen = this.maxlength();\n const pat = this.pattern();\n const val = this.validator();\n const inl = this.inlineError();\n\n untracked(() => this.#updateValidator(req, maxLen, pat, val, inl));\n });\n }\n\n ngOnInit() {\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => this.#ref.markForCheck()));\n this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\n\n const formGroup = this.form();\n formGroup?.addControl(this.name(), this.formControl);\n }\n\n ngAfterViewInit() {\n if (this.autoHeight()) {\n setTimeout(() => this.#adjustHeight(), 0);\n }\n }\n\n ngOnDestroy() {\n const formGroup = this.form();\n formGroup?.removeControl(this.name());\n this.#subscription.unsubscribe();\n }\n\n // Hàm private tính toán chiều cao mượt mà\n #adjustHeight() {\n const el = this.textareaRef()?.nativeElement;\n if (el) {\n el.style.height = 'auto';\n el.style.overflowY = 'hidden';\n el.style.height = `${el.scrollHeight}px`;\n }\n }\n\n onFocus = () => {\n this.isFocused = true;\n };\n\n onBlur = () => {\n this.isFocused = false;\n const val: string = (this.formControl.value ?? '').toString();\n if (val.length > val.trim().length) {\n this.formControl.setValue(val.trim());\n }\n };\n\n onClick = () => {\n if (this.sdViewDef()?.templateRef) {\n if (!this.formControl.disabled && !this.isFocused) {\n this.focus();\n }\n }\n };\n\n blur = () => {\n this.textareaRef()?.nativeElement?.blur();\n };\n\n focus = () => {\n this.isFocused = true;\n setTimeout(() => {\n this.textareaRef()?.nativeElement?.focus();\n }, 100);\n };\n\n #onChange = (value: any) => {\n if (this.autoHeight()) {\n this.#adjustHeight();\n }\n this.valueModel.set(value);\n this.sdChange.emit(value);\n };\n\n #updateValidator = (\n req: boolean,\n maxLen: number | null,\n pat: string | undefined,\n val: SdCustomValidator | undefined,\n inl: string | undefined\n ) => {\n this.formControl.clearValidators();\n this.formControl.clearAsyncValidators();\n const validators: ValidatorFn[] = [];\n const asyncValidators: AsyncValidatorFn[] = [];\n\n if (req) validators.push(Validators.required);\n if (maxLen != null) validators.push(Validators.maxLength(maxLen));\n if (pat) validators.push(Validators.pattern(pat));\n if (val) asyncValidators.push(this.#customValidator(val));\n if (inl) validators.push(SdInlineErrorValidator);\n\n this.formControl.setValidators(validators.length ? validators : null);\n this.formControl.setAsyncValidators(asyncValidators.length ? asyncValidators : null);\n this.formControl.updateValueAndValidity({ emitEvent: false });\n };\n\n getCurrentLength = (): number => {\n return (this.formControl.value ?? '').toString().length;\n };\n\n isMaxlengthExceeded = (): boolean => {\n const max = this.maxlength();\n return !!(max && max > 0 && this.getCurrentLength() > max);\n };\n\n #customValidator = (func: (value: any) => string | Promise<string>): AsyncValidatorFn => {\n return async (c: AbstractControl): Promise<Record<string, any> | null> => {\n const value = c.value || null;\n if (func && typeof func === 'function') {\n const result = func(value);\n if (result instanceof Promise) {\n const message = await result;\n if (message) return { customValidator: message };\n return null;\n }\n if (result) return { customValidator: result };\n return null;\n }\n return null;\n };\n };\n}\n","@let _label = label();\n@let _appearance = appearance();\n@let _hideInlineError = hideInlineError();\n@let _errorMessage = errorMessage();\n@let _sdLabelDef = sdLabelDef();\n@let _helperText = helperText();\n@let _required = required();\n@let _maxLength = maxlength();\n@let _isInline = isInline();\n\n@if (isViewed()) {\n @if (_sdLabelDef?.templateRef) {\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n } @else if (_label) {\n <div class=\"T14R text-secondary\">{{ _label }}</div>\n }\n <div class=\"T14M\">{{ formControl.value | sdEmpty }}</div>\n} @else {\n @if (!_appearance && _sdLabelDef?.templateRef) {\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n }\n @if (!_appearance && _label && !_sdLabelDef?.templateRef) {\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\n }\n\n <div\n class=\"d-flex align-items-center sd-textarea-container\"\n [class.c-focused]=\"isFocused\"\n [class.c-disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n aria-hidden=\"true\">\n <div class=\"sd-textarea-field-wrap\" [class.sd-inline-textarea]=\"_isInline\">\n <mat-form-field\n [class.sd-md]=\"size() === 'md'\"\n [class.sd-sm]=\"size() === 'sm'\"\n [class.hide-inline-error]=\"_hideInlineError\"\n [appearance]=\"_appearance!\"\n [floatLabel]=\"floatLabel()\">\n @if (_appearance && _label) {\n <mat-label class=\"sd-form-field-label\">\n <span>{{ _label }}</span>\n @if (_helperText) {\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"above\" name=\"info\"></sd-icon>\n }\n </mat-label>\n }\n\n <textarea\n matInput\n [placeholder]=\"placeholder() || _label || ''\"\n [formControl]=\"formControl\"\n [required]=\"_required\"\n autocomplete=\"off\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [rows]=\"rows()\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-maxlength]=\"dataMaxLength()\"\n [attr.data-pattern]=\"dataPattern()\"\n [attr.data-error-message]=\"dataErrorMessage()\"\n spellcheck=\"false\"\n #textarea>\n </textarea>\n\n @if (_hideInlineError && _errorMessage && formControl.touched) {\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\n\n @if (!_hideInlineError && _errorMessage && formControl.touched) {\n <mat-error>{{ _errorMessage }}</mat-error>\n }\n\n @if (sdSuffixDef()?.templateRef; as suffixRef) {\n <ng-container matSuffix>\n <ng-container *ngTemplateOutlet=\"suffixRef\"></ng-container>\n </ng-container>\n }\n <!-- <ng-container matSuffix>\n <ng-content select=\"[sdSuffix]\"></ng-content>\n </ng-container> -->\n </mat-form-field>\n\n @if (_maxLength !== null && !_hideInlineError && !formControl.disabled) {\n <div\n class=\"sd-maxlength-counter\"\n [class.sd-maxlength-counter--visible]=\"isFocused\"\n [class.sd-maxlength-counter--exceeded]=\"isMaxlengthExceeded()\"\n [attr.title]=\"isMaxlengthExceeded() ? ('core.form.textarea.exceeded' | translate) : null\">\n {{ getCurrentLength() }}/{{ _maxLength }}\n </div>\n }\n </div>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-modules-icon.mjs","sources":["../../../projects/sdcorejs-angular/modules/icon/src/icon.model.ts","../../../projects/sdcorejs-angular/modules/icon/src/icon.provider.ts","../../../projects/sdcorejs-angular/modules/icon/src/icon.component.ts","../../../projects/sdcorejs-angular/modules/icon/sdcorejs-angular-modules-icon.ts"],"sourcesContent":["import { type LucideConfig, type LucideIcon, type LucideIconData } from '@lucide/angular';\nimport { type Size } from '@sdcorejs/utils/models';\nimport { DefaultSdIconSet, type SdIconSet, type SdMaterialIconSet } from '@sdcorejs/angular/utilities/models';\n\n/**\n * Chọn renderer icon chính cho `SdIcon`.\n *\n * Material dùng đúng tên font set để tránh thêm mapping nội bộ; `lucide` chuyển sang renderer SVG của `@lucide/angular`.\n */\nexport type { SdIconSet, SdMaterialIconSet };\n\n/** @deprecated Use `SdIconSet` instead. */\nexport type SdIconFontSet = SdIconSet;\n\n\n/**\n * Một icon Lucide có thể đăng ký bằng class icon Angular hoặc dữ liệu path thuần.\n */\nexport type SdLucideIconRegistration = LucideIcon | LucideIconData;\n\n/**\n * Danh sách đăng ký Lucide cho provider, hỗ trợ cả array và object map để app có thể giữ cấu trúc import riêng.\n */\nexport type SdLucideIconRegistrations = SdLucideIconRegistration[] | Record<string, SdLucideIconRegistration>;\n\n/**\n * Cấu hình app-level cho `SdIcon`.\n *\n * Các alias tách riêng theo renderer để app có thể giữ tên Material trong template trong lúc chuyển dần sang Lucide.\n */\nexport interface ISdIconConfiguration {\n /** Default icon font set when component does not pass `fontSet`. */\n defaultFontSet?: SdIconSet;\n /** Alias áp dụng khi renderer hiện tại là Material. */\n materialAliases?: Record<string, string>;\n /** Alias áp dụng khi renderer hiện tại là Lucide. */\n lucideAliases?: Record<string, string>;\n /** Cấu hình stroke toàn cục cho Lucide SVG. */\n lucideConfig?: Partial<LucideConfig>;\n /** Icon Lucide cần đăng ký vào `@lucide/angular`. */\n lucideIcons?: SdLucideIconRegistrations;\n}\n\n/**\n * Cấu hình đã resolve đầy đủ để component không phải tự xử lý fallback nhiều lần.\n */\nexport interface ISdIconResolvedConfiguration\n extends Required<Omit<ISdIconConfiguration, 'lucideIcons'>> {}\n\n/**\n * Quy đổi token `Size` chung của SDCoreJS sang pixel cho icon.\n */\nexport const SD_ICON_SIZE_MAP: Record<Size, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n};\n\n/**\n * Alias mặc định giúp template giữ tên Material trong khi renderer có thể là Lucide.\n */\nexport const SD_DEFAULT_LUCIDE_ALIASES: Record<string, string> = {\n account_balance: 'landmark',\n account_circle: 'circle-user-round',\n account_tree: 'workflow',\n add: 'plus',\n add_circle: 'circle-plus',\n arrow_back: 'arrow-left',\n arrow_downward: 'arrow-down',\n arrow_drop_down: 'chevron-down',\n arrow_drop_up: 'chevron-up',\n arrow_forward: 'arrow-right',\n arrow_upward: 'arrow-up',\n bar_chart: 'chart-column',\n block: 'ban',\n bookmark_add: 'bookmark-plus',\n bookmark_border: 'bookmark',\n build: 'wrench',\n calendar_month: 'calendar-days',\n campaign: 'megaphone',\n cancel: 'circle-x',\n celebration: 'party-popper',\n chevron_left: 'chevron-left',\n chevron_right: 'chevron-right',\n check: 'check',\n check_circle: 'circle-check',\n close: 'x',\n cloud_download: 'cloud-download',\n contact_page: 'contact',\n content_copy: 'copy',\n dashboard: 'layout-dashboard',\n delete: 'trash-2',\n delete_sweep: 'trash-2',\n description: 'file-text',\n done: 'check',\n done_all: 'check-check',\n drag_indicator: 'grip-vertical',\n edit: 'pencil',\n edit_note: 'file-pen-line',\n error: 'circle-alert',\n error_outline: 'circle-alert',\n expand_less: 'chevron-up',\n expand_more: 'chevron-down',\n filter_alt: 'list-filter',\n file_download: 'download',\n file_upload: 'upload',\n fiber_manual_record: 'circle',\n fit_screen: 'scan',\n folder: 'folder',\n first_page: 'chevrons-left',\n format_indent_decrease: 'list-indent-decrease',\n format_indent_increase: 'list-indent-increase',\n fullscreen: 'maximize',\n fullscreen_exit: 'minimize',\n get_app: 'download',\n group: 'users',\n hourglass_empty: 'hourglass',\n hourglass_top: 'hourglass',\n image: 'image',\n image_not_supported: 'image-off',\n info: 'info',\n info_outline: 'info',\n insert_drive_file: 'file',\n inventory_2: 'package',\n keyboard_arrow_down: 'chevron-down',\n keyboard_arrow_left: 'chevron-left',\n keyboard_arrow_right: 'chevron-right',\n keyboard_arrow_up: 'chevron-up',\n last_page: 'chevrons-right',\n list: 'list',\n local_offer: 'tag',\n lock: 'lock-keyhole',\n lock_outline: 'lock-keyhole',\n login: 'log-in',\n logout: 'log-out',\n match_case: 'case-sensitive',\n menu: 'menu',\n menu_open: 'panel-left-close',\n more_horiz: 'ellipsis',\n more_vert: 'ellipsis-vertical',\n notifications: 'bell',\n open_in_new: 'external-link',\n open_in_full: 'maximize',\n person: 'user',\n picture_as_pdf: 'file-text',\n play_arrow: 'play',\n print: 'printer',\n refresh: 'refresh-cw',\n remove: 'minus',\n remove_circle: 'circle-minus',\n restart_alt: 'rotate-ccw',\n rotate_right: 'rotate-cw',\n search_off: 'search-x',\n settings: 'settings',\n share: 'share-2',\n smart_toy: 'bot',\n space_dashboard: 'layout-dashboard',\n storefront: 'store',\n swap_horiz: 'arrow-left-right',\n table_chart: 'table',\n table_view: 'table-2',\n task_alt: 'circle-check',\n text_fields: 'text',\n today: 'calendar',\n unfold_more: 'chevrons-up-down',\n upload_file: 'upload',\n view_carousel: 'gallery-horizontal',\n view_day: 'panel-top',\n view_list: 'list',\n visibility: 'eye',\n visibility_off: 'eye-off',\n warning: 'triangle-alert',\n warning_amber: 'triangle-alert',\n widgets: 'layout-grid',\n zoom_in: 'zoom-in',\n};\n\n/**\n * Alias mac dinh giup template dung ten Lucide van render duoc khi quay ve Material font.\n */\nexport const SD_DEFAULT_MATERIAL_ALIASES: Record<string, string> = {\n 'arrow-down': 'arrow_downward',\n 'arrow-left': 'arrow_back',\n 'arrow-right': 'arrow_forward',\n 'arrow-up': 'arrow_upward',\n 'calendar-days': 'calendar_month',\n 'case-sensitive': 'match_case',\n 'chart-column': 'bar_chart',\n 'check-check': 'done_all',\n 'chevron-down': 'expand_more',\n 'chevron-left': 'chevron_left',\n 'chevron-right': 'chevron_right',\n 'chevron-up': 'expand_less',\n 'chevrons-left': 'first_page',\n 'chevrons-right': 'last_page',\n 'circle-alert': 'error',\n 'circle-check': 'check_circle',\n 'circle-minus': 'remove_circle',\n 'circle-plus': 'add_circle',\n 'circle-user-round': 'account_circle',\n 'circle-x': 'cancel',\n 'cloud-download': 'cloud_download',\n 'file-down': 'file_download',\n 'file-pen-line': 'edit_note',\n 'file-text': 'description',\n 'file-up': 'upload_file',\n 'gallery-horizontal': 'view_carousel',\n get_app: 'file_download',\n 'grip-vertical': 'drag_indicator',\n 'layout-dashboard': 'dashboard',\n 'layout-grid': 'widgets',\n 'list-indent-decrease': 'format_indent_decrease',\n 'list-indent-increase': 'format_indent_increase',\n 'list-filter': 'filter_alt',\n 'lock-keyhole': 'lock',\n 'log-in': 'login',\n 'log-out': 'logout',\n 'panel-left-close': 'menu_open',\n 'party-popper': 'celebration',\n 'refresh-cw': 'refresh',\n 'rotate-ccw': 'restart_alt',\n 'rotate-cw': 'rotate_right',\n 'share-2': 'share',\n 'square-pen': 'edit',\n 'trash-2': 'delete',\n 'triangle-alert': 'warning',\n 'zoom-in': 'zoom_in',\n ban: 'block',\n contact: 'contact_page',\n copy: 'content_copy',\n circle: 'fiber_manual_record',\n download: 'file_download',\n ellipsis: 'more_horiz',\n 'ellipsis-vertical': 'more_vert',\n error_outline: 'error',\n eye: 'visibility',\n 'eye-off': 'visibility_off',\n file: 'insert_drive_file',\n folder: 'folder',\n fullscreen: 'fullscreen',\n hourglass: 'hourglass_top',\n image: 'image',\n 'image-off': 'image_not_supported',\n info_outline: 'info',\n landmark: 'account_balance',\n list: 'list',\n lock_outline: 'lock',\n maximize: 'fullscreen',\n megaphone: 'campaign',\n menu: 'menu',\n minimize: 'fullscreen_exit',\n minus: 'remove',\n package: 'inventory_2',\n pencil: 'edit',\n plus: 'add',\n play: 'play_arrow',\n printer: 'print',\n scan: 'fit_screen',\n 'search-x': 'search_off',\n settings: 'settings',\n 'save-all': 'done_all',\n store: 'storefront',\n tag: 'local_offer',\n text: 'text_fields',\n upload: 'upload_file',\n user: 'person',\n users: 'group',\n workflow: 'account_tree',\n wrench: 'build',\n x: 'close',\n};\n\n/**\n * Cấu hình mặc định của Core UI icon.\n *\n * `material-icons-outlined` được giữ làm mặc định để không đổi visual của các component Material hiện có.\n */\nexport const SD_ICON_DEFAULT_CONFIG: ISdIconResolvedConfiguration = {\n defaultFontSet: DefaultSdIconSet,\n materialAliases: SD_DEFAULT_MATERIAL_ALIASES,\n lucideAliases: SD_DEFAULT_LUCIDE_ALIASES,\n lucideConfig: {},\n};\n","import { InjectionToken, makeEnvironmentProviders, type EnvironmentProviders, type Provider } from '@angular/core';\nimport { provideLucideConfig, provideLucideIcons } from '@lucide/angular';\nimport {\n SD_ICON_DEFAULT_CONFIG,\n type ISdIconConfiguration,\n type ISdIconResolvedConfiguration,\n type SdLucideIconRegistration,\n type SdLucideIconRegistrations,\n} from './icon.model';\n\n/**\n * Injection token chứa cấu hình icon đã resolve cho toàn bộ app.\n *\n * Token có factory mặc định để `SdIcon` vẫn chạy khi app chưa gọi `provideSdIcon`.\n */\nexport const SD_ICON_CONFIGURATION = new InjectionToken<ISdIconResolvedConfiguration>('SD_ICON_CONFIGURATION', {\n providedIn: 'root',\n factory: () => resolveSdIconConfig(),\n});\n\n/**\n * Đăng ký cấu hình icon Core UI ở app-level.\n *\n * Provider này gom cả cấu hình `SdIcon` và registry của `@lucide/angular` để consumer chỉ cần gọi một hàm.\n *\n * @param config - cấu hình app-level cho Material/Lucide icon.\n * @returns environment providers dùng được trong `ApplicationConfig.providers`.\n */\nexport function provideSdIcon(config: ISdIconConfiguration = {}): EnvironmentProviders {\n const providers: Provider[] = [\n {\n provide: SD_ICON_CONFIGURATION,\n useValue: resolveSdIconConfig(config),\n },\n ];\n\n if (config.lucideConfig) {\n providers.push(provideLucideConfig(config.lucideConfig));\n }\n\n const lucideIcons = normalizeSdLucideIcons(config.lucideIcons);\n if (lucideIcons.length) {\n // why: @lucide/angular chỉ render dynamic icon đã được đăng ký trước qua provider\n providers.push(provideLucideIcons(...lucideIcons));\n }\n\n return makeEnvironmentProviders(providers);\n}\n\n/**\n * Resolve cấu hình `SdIcon` thành object đầy đủ, không còn field optional.\n *\n * Alias mặc định đứng trước để app có thể override từng key mà không phải copy toàn bộ bảng alias.\n *\n * @param config - cấu hình rời rạc từ consumer hoặc mặc định rỗng.\n * @returns cấu hình đầy đủ dùng trực tiếp trong component.\n */\nexport function resolveSdIconConfig(config: ISdIconConfiguration = {}): ISdIconResolvedConfiguration {\n return {\n defaultFontSet: config.defaultFontSet ?? SD_ICON_DEFAULT_CONFIG.defaultFontSet,\n materialAliases: {\n ...SD_ICON_DEFAULT_CONFIG.materialAliases,\n ...config.materialAliases,\n },\n lucideAliases: {\n ...SD_ICON_DEFAULT_CONFIG.lucideAliases,\n ...config.lucideAliases,\n },\n lucideConfig: {\n ...SD_ICON_DEFAULT_CONFIG.lucideConfig,\n ...config.lucideConfig,\n },\n };\n}\n\n/**\n * Chuẩn hóa nhiều kiểu khai báo Lucide icon về array cho `provideLucideIcons`.\n *\n * @param registrations - array hoặc object map icon Lucide từ consumer.\n * @returns danh sách icon Lucide đã sẵn sàng để spread vào provider của Lucide.\n */\nexport function normalizeSdLucideIcons(registrations?: SdLucideIconRegistrations): SdLucideIconRegistration[] {\n if (!registrations) {\n return [];\n }\n\n return Array.isArray(registrations) ? registrations : Object.values(registrations);\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport { type Size } from '@sdcorejs/utils/models';\nimport { DefaultSdMaterialIconSet } from '@sdcorejs/angular/utilities/models';\nimport { SD_ICON_SIZE_MAP, type SdIconSet, type SdMaterialIconSet } from './icon.model';\nimport { SD_ICON_CONFIGURATION } from './icon.provider';\n\n/**\n * Facade icon dùng chung cho Core UI.\n *\n * Component này giữ template app theo tên icon ổn định, còn renderer có thể đổi giữa Material font và Lucide SVG qua provider hoặc input.\n */\n@Component({\n selector: 'sd-icon',\n standalone: true,\n imports: [MatIconModule, LucideDynamicIcon],\n template: `\n @if (resolvedName(); as _name) {\n @if (resolvedFontSet() === 'lucide') {\n <svg\n class=\"sd-icon__svg\"\n [lucideIcon]=\"_name\"\n [size]=\"resolvedSize()\"\n [strokeWidth]=\"resolvedStrokeWidth()\"\n [absoluteStrokeWidth]=\"resolvedAbsoluteStrokeWidth()\"\n [title]=\"ariaLabel()\"></svg>\n } @else {\n <mat-icon\n class=\"sd-icon__material\"\n [fontSet]=\"resolvedMaterialFontSet()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\">\n {{ _name }}\n </mat-icon>\n }\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--sd-icon-size);\n height: var(--sd-icon-size);\n min-width: var(--sd-icon-size);\n color: currentColor;\n font-size: var(--sd-icon-size);\n line-height: 1;\n vertical-align: middle;\n flex: 0 0 auto;\n }\n\n .sd-icon__material {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: currentColor;\n font-size: inherit;\n line-height: 1;\n overflow: hidden;\n }\n\n .sd-icon__svg {\n display: block;\n width: 100%;\n height: 100%;\n color: currentColor;\n stroke: currentColor;\n flex: 0 0 auto;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sd-icon',\n '[class.sd-icon--material]': 'resolvedFontSet() !== \"lucide\"',\n '[class.sd-icon--material-icons-outlined]': 'resolvedFontSet() === \"material-icons-outlined\"',\n '[class.sd-icon--lucide]': 'resolvedFontSet() === \"lucide\"',\n '[style.--sd-icon-size]': 'resolvedCssSize()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-hidden]': 'ariaLabel() ? null : \"true\"',\n '[attr.color]': 'color()',\n },\n})\nexport class SdIcon {\n // why: InjectionToken cho phép app đổi default/alias mà không buộc từng component nhận thêm input cấu hình\n private readonly config = inject(SD_ICON_CONFIGURATION);\n\n /**\n * Tên icon theo namespace hiện tại.\n *\n * Khi `set` là `lucide`, tên này sẽ đi qua alias để app có thể tiếp tục dùng tên Material trong template.\n */\n name = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n fontIcon = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n color = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n /**\n * Renderer icon của riêng instance này.\n *\n * Deprecated alias for `fontSet`.\n */\n set = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Escape hatch cho Material icon font set.\n *\n * Prefer this input for both Material font families and Lucide SVG icons.\n */\n fontSet = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Kích thước icon theo token SDCoreJS hoặc CSS size tùy biến.\n *\n * Token `sm | md | lg` giữ icon đồng bộ với các component Core UI; CSS string xử lý các ngoại lệ layout.\n */\n size = input<Size | (string & {}), Size | (string & {}) | undefined | null>('md', {\n transform: value => value ?? 'md',\n });\n\n /**\n * Độ dày stroke riêng cho Lucide SVG.\n *\n * Bỏ trống để nhận giá trị từ `lucideConfig` app-level.\n */\n strokeWidth = input<number | string | undefined, number | string | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Giữ stroke width tuyệt đối cho Lucide khi SVG đổi kích thước.\n *\n * Input này đi qua `booleanAttribute` để hỗ trợ cả attribute trần trong template.\n */\n absoluteStrokeWidth = input<boolean | undefined, boolean | string | undefined | null>(undefined, {\n transform: value => (value == null ? undefined : booleanAttribute(value)),\n });\n\n /**\n * Nhãn truy cập cho icon có ý nghĩa.\n *\n * Khi không có nhãn, component tự đánh dấu decorative bằng `aria-hidden`.\n */\n ariaLabel = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n /**\n * Set icon cuối cùng sau khi áp dụng input và provider.\n *\n * @returns renderer hiện tại của component.\n */\n resolvedFontSet = computed<SdIconSet>(() => this.fontSet() ?? this.set() ?? this.config.defaultFontSet);\n\n /** @deprecated Use `resolvedFontSet` instead. */\n resolvedSet = computed<SdIconSet>(() => this.resolvedFontSet());\n\n /**\n * Tên icon cuối cùng theo renderer hiện tại.\n *\n * @returns tên icon đã áp alias nếu renderer yêu cầu.\n */\n resolvedName = computed(() => {\n const name = this.name() ?? this.fontIcon();\n if (!name) {\n return undefined;\n }\n\n const aliases = this.resolvedFontSet() === 'lucide' ? this.config.lucideAliases : this.config.materialAliases;\n return aliases[name] ?? name;\n });\n\n /**\n * Font set Material cuối cùng.\n *\n * @returns font set dùng cho `mat-icon`; với Lucide trả về fallback Material để computed luôn có type ổn định.\n */\n resolvedMaterialFontSet = computed<SdMaterialIconSet>(() => {\n const fontSet = this.resolvedFontSet();\n return fontSet === 'lucide' ? DefaultSdMaterialIconSet : fontSet;\n });\n\n /**\n * Kích thước runtime cho renderer hiện tại.\n *\n * @returns số pixel cho token chuẩn hoặc CSS string nguyên bản cho custom size.\n */\n resolvedSize = computed<number | string>(() => {\n const size = this.size();\n return isSizeToken(size) ? SD_ICON_SIZE_MAP[size] : size;\n });\n\n /**\n * Kích thước CSS cuối cùng cho host element.\n *\n * @returns CSS length dùng cho custom property `--sd-icon-size`.\n */\n resolvedCssSize = computed(() => {\n const size = this.resolvedSize();\n return typeof size === 'number' ? `${size}px` : size;\n });\n\n /**\n * Stroke width cuối cùng cho Lucide SVG.\n *\n * @returns giá trị input instance hoặc fallback từ provider.\n */\n resolvedStrokeWidth = computed(() => this.strokeWidth() ?? this.config.lucideConfig.strokeWidth);\n\n /**\n * Absolute stroke width cuối cùng cho Lucide SVG.\n *\n * @returns giá trị input instance hoặc fallback từ provider.\n */\n resolvedAbsoluteStrokeWidth = computed(() => this.absoluteStrokeWidth() ?? this.config.lucideConfig.absoluteStrokeWidth);\n}\n\n/**\n * Chuẩn hóa string input rỗng thành `undefined` để fallback provider hoạt động nhất quán.\n *\n * @param value - giá trị string từ input Angular.\n * @returns string đã trim hoặc `undefined`.\n */\nfunction coerceStringInput(value: string | undefined | null): string | undefined {\n const trimmed = value?.trim();\n return trimmed || undefined;\n}\n\n/**\n * Kiểm tra một size có phải token chuẩn của SDCoreJS hay không.\n *\n * @param value - token size hoặc CSS size string.\n * @returns `true` khi value có mapping pixel trong `SD_ICON_SIZE_MAP`.\n */\nfunction isSizeToken(value: Size | (string & {})): value is Size {\n return value in SD_ICON_SIZE_MAP;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-modules-icon.mjs","sources":["../../../projects/sdcorejs-angular/modules/icon/src/icon.model.ts","../../../projects/sdcorejs-angular/modules/icon/src/icon.provider.ts","../../../projects/sdcorejs-angular/modules/icon/src/icon.component.ts","../../../projects/sdcorejs-angular/modules/icon/sdcorejs-angular-modules-icon.ts"],"sourcesContent":["import { type LucideConfig, type LucideIcon, type LucideIconData } from '@lucide/angular';\nimport { type Size } from '@sdcorejs/utils/models';\nimport { DefaultSdIconSet, type SdIconSet, type SdMaterialIconSet } from '@sdcorejs/angular/utilities/models';\n\n/**\n * Chọn renderer icon chính cho `SdIcon`.\n *\n * Material dùng đúng tên font set để tránh thêm mapping nội bộ; `lucide` chuyển sang renderer SVG của `@lucide/angular`.\n */\nexport type { SdIconSet, SdMaterialIconSet };\n\n/** @deprecated Use `SdIconSet` instead. */\nexport type SdIconFontSet = SdIconSet;\n\n/**\n * Một icon Lucide có thể đăng ký bằng class icon Angular hoặc dữ liệu path thuần.\n */\nexport type SdLucideIconRegistration = LucideIcon | LucideIconData;\n\n/**\n * Danh sách đăng ký Lucide cho provider, hỗ trợ cả array và object map để app có thể giữ cấu trúc import riêng.\n */\nexport type SdLucideIconRegistrations = SdLucideIconRegistration[] | Record<string, SdLucideIconRegistration>;\n\n/**\n * Cấu hình app-level cho `SdIcon`.\n *\n * Các alias tách riêng theo renderer để app có thể giữ tên Material trong template trong lúc chuyển dần sang Lucide.\n */\nexport interface ISdIconConfiguration {\n /** Default icon font set when component does not pass `fontSet`. */\n defaultFontSet?: SdIconSet;\n /** Alias áp dụng khi renderer hiện tại là Material. */\n materialAliases?: Record<string, string>;\n /** Alias áp dụng khi renderer hiện tại là Lucide. */\n lucideAliases?: Record<string, string>;\n /** Cấu hình stroke toàn cục cho Lucide SVG. */\n lucideConfig?: Partial<LucideConfig>;\n /** Icon Lucide cần đăng ký vào `@lucide/angular`. */\n lucideIcons?: SdLucideIconRegistrations;\n}\n\n/**\n * Cấu hình đã resolve đầy đủ để component không phải tự xử lý fallback nhiều lần.\n */\nexport type ISdIconResolvedConfiguration = Required<Omit<ISdIconConfiguration, 'lucideIcons'>>;\n\n/**\n * Quy đổi token `Size` chung của SDCoreJS sang pixel cho icon.\n */\nexport const SD_ICON_SIZE_MAP: Record<Size, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n};\n\n/**\n * Alias mặc định giúp template giữ tên Material trong khi renderer có thể là Lucide.\n */\nexport const SD_DEFAULT_LUCIDE_ALIASES: Record<string, string> = {\n account_balance: 'landmark',\n account_circle: 'circle-user-round',\n account_tree: 'workflow',\n add: 'plus',\n add_circle: 'circle-plus',\n arrow_back: 'arrow-left',\n arrow_downward: 'arrow-down',\n arrow_drop_down: 'chevron-down',\n arrow_drop_up: 'chevron-up',\n arrow_forward: 'arrow-right',\n arrow_upward: 'arrow-up',\n bar_chart: 'chart-column',\n block: 'ban',\n bookmark_add: 'bookmark-plus',\n bookmark_border: 'bookmark',\n build: 'wrench',\n calendar_month: 'calendar-days',\n campaign: 'megaphone',\n cancel: 'circle-x',\n celebration: 'party-popper',\n chevron_left: 'chevron-left',\n chevron_right: 'chevron-right',\n check: 'check',\n check_circle: 'circle-check',\n close: 'x',\n cloud_download: 'cloud-download',\n contact_page: 'contact',\n content_copy: 'copy',\n dashboard: 'layout-dashboard',\n delete: 'trash-2',\n delete_sweep: 'trash-2',\n description: 'file-text',\n done: 'check',\n done_all: 'check-check',\n drag_indicator: 'grip-vertical',\n edit: 'pencil',\n edit_note: 'file-pen-line',\n error: 'circle-alert',\n error_outline: 'circle-alert',\n expand_less: 'chevron-up',\n expand_more: 'chevron-down',\n filter_alt: 'list-filter',\n file_download: 'download',\n file_upload: 'upload',\n fiber_manual_record: 'circle',\n fit_screen: 'scan',\n folder: 'folder',\n first_page: 'chevrons-left',\n format_indent_decrease: 'list-indent-decrease',\n format_indent_increase: 'list-indent-increase',\n fullscreen: 'maximize',\n fullscreen_exit: 'minimize',\n get_app: 'download',\n group: 'users',\n hourglass_empty: 'hourglass',\n hourglass_top: 'hourglass',\n image: 'image',\n image_not_supported: 'image-off',\n info: 'info',\n info_outline: 'info',\n insert_drive_file: 'file',\n inventory_2: 'package',\n keyboard_arrow_down: 'chevron-down',\n keyboard_arrow_left: 'chevron-left',\n keyboard_arrow_right: 'chevron-right',\n keyboard_arrow_up: 'chevron-up',\n last_page: 'chevrons-right',\n list: 'list',\n local_offer: 'tag',\n lock: 'lock-keyhole',\n lock_outline: 'lock-keyhole',\n login: 'log-in',\n logout: 'log-out',\n match_case: 'case-sensitive',\n menu: 'menu',\n menu_open: 'panel-left-close',\n more_horiz: 'ellipsis',\n more_vert: 'ellipsis-vertical',\n notifications: 'bell',\n open_in_new: 'external-link',\n open_in_full: 'maximize',\n person: 'user',\n picture_as_pdf: 'file-text',\n play_arrow: 'play',\n print: 'printer',\n refresh: 'refresh-cw',\n remove: 'minus',\n remove_circle: 'circle-minus',\n restart_alt: 'rotate-ccw',\n rotate_right: 'rotate-cw',\n search_off: 'search-x',\n settings: 'settings',\n share: 'share-2',\n smart_toy: 'bot',\n space_dashboard: 'layout-dashboard',\n storefront: 'store',\n swap_horiz: 'arrow-left-right',\n table_chart: 'table',\n table_view: 'table-2',\n task_alt: 'circle-check',\n text_fields: 'text',\n today: 'calendar',\n unfold_more: 'chevrons-up-down',\n upload_file: 'upload',\n view_carousel: 'gallery-horizontal',\n view_day: 'panel-top',\n view_list: 'list',\n visibility: 'eye',\n visibility_off: 'eye-off',\n warning: 'triangle-alert',\n warning_amber: 'triangle-alert',\n widgets: 'layout-grid',\n zoom_in: 'zoom-in',\n};\n\n/**\n * Alias mac dinh giup template dung ten Lucide van render duoc khi quay ve Material font.\n */\nexport const SD_DEFAULT_MATERIAL_ALIASES: Record<string, string> = {\n 'arrow-down': 'arrow_downward',\n 'arrow-left': 'arrow_back',\n 'arrow-right': 'arrow_forward',\n 'arrow-up': 'arrow_upward',\n 'calendar-days': 'calendar_month',\n 'case-sensitive': 'match_case',\n 'chart-column': 'bar_chart',\n 'check-check': 'done_all',\n 'chevron-down': 'expand_more',\n 'chevron-left': 'chevron_left',\n 'chevron-right': 'chevron_right',\n 'chevron-up': 'expand_less',\n 'chevrons-left': 'first_page',\n 'chevrons-right': 'last_page',\n 'circle-alert': 'error',\n 'circle-check': 'check_circle',\n 'circle-minus': 'remove_circle',\n 'circle-plus': 'add_circle',\n 'circle-user-round': 'account_circle',\n 'circle-x': 'cancel',\n 'cloud-download': 'cloud_download',\n 'file-down': 'file_download',\n 'file-pen-line': 'edit_note',\n 'file-text': 'description',\n 'file-up': 'upload_file',\n 'gallery-horizontal': 'view_carousel',\n get_app: 'file_download',\n 'grip-vertical': 'drag_indicator',\n 'layout-dashboard': 'dashboard',\n 'layout-grid': 'widgets',\n 'list-indent-decrease': 'format_indent_decrease',\n 'list-indent-increase': 'format_indent_increase',\n 'list-filter': 'filter_alt',\n 'lock-keyhole': 'lock',\n 'log-in': 'login',\n 'log-out': 'logout',\n 'panel-left-close': 'menu_open',\n 'party-popper': 'celebration',\n 'refresh-cw': 'refresh',\n 'rotate-ccw': 'restart_alt',\n 'rotate-cw': 'rotate_right',\n 'share-2': 'share',\n 'square-pen': 'edit',\n 'trash-2': 'delete',\n 'triangle-alert': 'warning',\n 'zoom-in': 'zoom_in',\n ban: 'block',\n contact: 'contact_page',\n copy: 'content_copy',\n circle: 'fiber_manual_record',\n download: 'file_download',\n ellipsis: 'more_horiz',\n 'ellipsis-vertical': 'more_vert',\n error_outline: 'error',\n eye: 'visibility',\n 'eye-off': 'visibility_off',\n file: 'insert_drive_file',\n folder: 'folder',\n fullscreen: 'fullscreen',\n hourglass: 'hourglass_top',\n image: 'image',\n 'image-off': 'image_not_supported',\n info_outline: 'info',\n landmark: 'account_balance',\n list: 'list',\n lock_outline: 'lock',\n maximize: 'fullscreen',\n megaphone: 'campaign',\n menu: 'menu',\n minimize: 'fullscreen_exit',\n minus: 'remove',\n package: 'inventory_2',\n pencil: 'edit',\n plus: 'add',\n play: 'play_arrow',\n printer: 'print',\n scan: 'fit_screen',\n 'search-x': 'search_off',\n settings: 'settings',\n 'save-all': 'done_all',\n store: 'storefront',\n tag: 'local_offer',\n text: 'text_fields',\n upload: 'upload_file',\n user: 'person',\n users: 'group',\n workflow: 'account_tree',\n wrench: 'build',\n x: 'close',\n};\n\n/**\n * Cấu hình mặc định của Core UI icon.\n *\n * `material-icons-outlined` được giữ làm mặc định để không đổi visual của các component Material hiện có.\n */\nexport const SD_ICON_DEFAULT_CONFIG: ISdIconResolvedConfiguration = {\n defaultFontSet: DefaultSdIconSet,\n materialAliases: SD_DEFAULT_MATERIAL_ALIASES,\n lucideAliases: SD_DEFAULT_LUCIDE_ALIASES,\n lucideConfig: {},\n};\n","import { InjectionToken, makeEnvironmentProviders, type EnvironmentProviders, type Provider } from '@angular/core';\nimport { provideLucideConfig, provideLucideIcons } from '@lucide/angular';\nimport {\n SD_ICON_DEFAULT_CONFIG,\n type ISdIconConfiguration,\n type ISdIconResolvedConfiguration,\n type SdLucideIconRegistration,\n type SdLucideIconRegistrations,\n} from './icon.model';\n\n/**\n * Injection token chứa cấu hình icon đã resolve cho toàn bộ app.\n *\n * Token có factory mặc định để `SdIcon` vẫn chạy khi app chưa gọi `provideSdIcon`.\n */\nexport const SD_ICON_CONFIGURATION = new InjectionToken<ISdIconResolvedConfiguration>('SD_ICON_CONFIGURATION', {\n providedIn: 'root',\n factory: () => resolveSdIconConfig(),\n});\n\n/**\n * Đăng ký cấu hình icon Core UI ở app-level.\n *\n * Provider này gom cả cấu hình `SdIcon` và registry của `@lucide/angular` để consumer chỉ cần gọi một hàm.\n *\n * @param config - cấu hình app-level cho Material/Lucide icon.\n * @returns environment providers dùng được trong `ApplicationConfig.providers`.\n */\nexport function provideSdIcon(config: ISdIconConfiguration = {}): EnvironmentProviders {\n const providers: Provider[] = [\n {\n provide: SD_ICON_CONFIGURATION,\n useValue: resolveSdIconConfig(config),\n },\n ];\n\n if (config.lucideConfig) {\n providers.push(provideLucideConfig(config.lucideConfig));\n }\n\n const lucideIcons = normalizeSdLucideIcons(config.lucideIcons);\n if (lucideIcons.length) {\n // why: @lucide/angular chỉ render dynamic icon đã được đăng ký trước qua provider\n providers.push(provideLucideIcons(...lucideIcons));\n }\n\n return makeEnvironmentProviders(providers);\n}\n\n/**\n * Resolve cấu hình `SdIcon` thành object đầy đủ, không còn field optional.\n *\n * Alias mặc định đứng trước để app có thể override từng key mà không phải copy toàn bộ bảng alias.\n *\n * @param config - cấu hình rời rạc từ consumer hoặc mặc định rỗng.\n * @returns cấu hình đầy đủ dùng trực tiếp trong component.\n */\nexport function resolveSdIconConfig(config: ISdIconConfiguration = {}): ISdIconResolvedConfiguration {\n return {\n defaultFontSet: config.defaultFontSet ?? SD_ICON_DEFAULT_CONFIG.defaultFontSet,\n materialAliases: {\n ...SD_ICON_DEFAULT_CONFIG.materialAliases,\n ...config.materialAliases,\n },\n lucideAliases: {\n ...SD_ICON_DEFAULT_CONFIG.lucideAliases,\n ...config.lucideAliases,\n },\n lucideConfig: {\n ...SD_ICON_DEFAULT_CONFIG.lucideConfig,\n ...config.lucideConfig,\n },\n };\n}\n\n/**\n * Chuẩn hóa nhiều kiểu khai báo Lucide icon về array cho `provideLucideIcons`.\n *\n * @param registrations - array hoặc object map icon Lucide từ consumer.\n * @returns danh sách icon Lucide đã sẵn sàng để spread vào provider của Lucide.\n */\nexport function normalizeSdLucideIcons(registrations?: SdLucideIconRegistrations): SdLucideIconRegistration[] {\n if (!registrations) {\n return [];\n }\n\n return Array.isArray(registrations) ? registrations : Object.values(registrations);\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport { type Size } from '@sdcorejs/utils/models';\nimport { DefaultSdMaterialIconSet } from '@sdcorejs/angular/utilities/models';\nimport { SD_ICON_SIZE_MAP, type SdIconSet, type SdMaterialIconSet } from './icon.model';\nimport { SD_ICON_CONFIGURATION } from './icon.provider';\n\n/**\n * Facade icon dùng chung cho Core UI.\n *\n * Component này giữ template app theo tên icon ổn định, còn renderer có thể đổi giữa Material font và Lucide SVG qua provider hoặc input.\n */\n@Component({\n selector: 'sd-icon',\n standalone: true,\n imports: [MatIconModule, LucideDynamicIcon],\n template: `\n @if (resolvedName(); as _name) {\n @if (resolvedFontSet() === 'lucide') {\n <svg\n class=\"sd-icon__svg\"\n [lucideIcon]=\"_name\"\n [size]=\"resolvedSize()\"\n [strokeWidth]=\"resolvedStrokeWidth()\"\n [absoluteStrokeWidth]=\"resolvedAbsoluteStrokeWidth()\"\n [title]=\"ariaLabel()\"></svg>\n } @else {\n <mat-icon\n class=\"sd-icon__material\"\n [fontSet]=\"resolvedMaterialFontSet()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\">\n {{ _name }}\n </mat-icon>\n }\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--sd-icon-size);\n height: var(--sd-icon-size);\n min-width: var(--sd-icon-size);\n color: currentColor;\n font-size: var(--sd-icon-size);\n line-height: 1;\n vertical-align: middle;\n flex: 0 0 auto;\n }\n\n .sd-icon__material {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: currentColor;\n font-size: inherit;\n line-height: 1;\n overflow: hidden;\n }\n\n .sd-icon__svg {\n display: block;\n width: 100%;\n height: 100%;\n color: currentColor;\n stroke: currentColor;\n flex: 0 0 auto;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sd-icon',\n '[class.sd-icon--material]': 'resolvedFontSet() !== \"lucide\"',\n '[class.sd-icon--material-icons-outlined]': 'resolvedFontSet() === \"material-icons-outlined\"',\n '[class.sd-icon--lucide]': 'resolvedFontSet() === \"lucide\"',\n '[style.--sd-icon-size]': 'resolvedCssSize()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-hidden]': 'ariaLabel() ? null : \"true\"',\n '[attr.color]': 'color()',\n },\n})\nexport class SdIcon {\n // why: InjectionToken cho phép app đổi default/alias mà không buộc từng component nhận thêm input cấu hình\n private readonly config = inject(SD_ICON_CONFIGURATION);\n\n /**\n * Tên icon theo namespace hiện tại.\n *\n * Khi `set` là `lucide`, tên này sẽ đi qua alias để app có thể tiếp tục dùng tên Material trong template.\n */\n name = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n fontIcon = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n color = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n /**\n * Renderer icon của riêng instance này.\n *\n * Deprecated alias for `fontSet`.\n */\n set = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Escape hatch cho Material icon font set.\n *\n * Prefer this input for both Material font families and Lucide SVG icons.\n */\n fontSet = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Kích thước icon theo token SDCoreJS hoặc CSS size tùy biến.\n *\n * Token `sm | md | lg` giữ icon đồng bộ với các component Core UI; CSS string xử lý các ngoại lệ layout.\n */\n size = input<Size | (string & {}), Size | (string & {}) | undefined | null>('md', {\n transform: value => value ?? 'md',\n });\n\n /**\n * Độ dày stroke riêng cho Lucide SVG.\n *\n * Bỏ trống để nhận giá trị từ `lucideConfig` app-level.\n */\n strokeWidth = input<number | string | undefined, number | string | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n /**\n * Giữ stroke width tuyệt đối cho Lucide khi SVG đổi kích thước.\n *\n * Input này đi qua `booleanAttribute` để hỗ trợ cả attribute trần trong template.\n */\n absoluteStrokeWidth = input<boolean | undefined, boolean | string | undefined | null>(undefined, {\n transform: value => (value == null ? undefined : booleanAttribute(value)),\n });\n\n /**\n * Nhãn truy cập cho icon có ý nghĩa.\n *\n * Khi không có nhãn, component tự đánh dấu decorative bằng `aria-hidden`.\n */\n ariaLabel = input<string | undefined, string | undefined | null>(undefined, {\n transform: coerceStringInput,\n });\n\n /**\n * Set icon cuối cùng sau khi áp dụng input và provider.\n *\n * @returns renderer hiện tại của component.\n */\n resolvedFontSet = computed<SdIconSet>(() => this.fontSet() ?? this.set() ?? this.config.defaultFontSet);\n\n /** @deprecated Use `resolvedFontSet` instead. */\n resolvedSet = computed<SdIconSet>(() => this.resolvedFontSet());\n\n /**\n * Tên icon cuối cùng theo renderer hiện tại.\n *\n * @returns tên icon đã áp alias nếu renderer yêu cầu.\n */\n resolvedName = computed(() => {\n const name = this.name() ?? this.fontIcon();\n if (!name) {\n return undefined;\n }\n\n const aliases = this.resolvedFontSet() === 'lucide' ? this.config.lucideAliases : this.config.materialAliases;\n return aliases[name] ?? name;\n });\n\n /**\n * Font set Material cuối cùng.\n *\n * @returns font set dùng cho `mat-icon`; với Lucide trả về fallback Material để computed luôn có type ổn định.\n */\n resolvedMaterialFontSet = computed<SdMaterialIconSet>(() => {\n const fontSet = this.resolvedFontSet();\n return fontSet === 'lucide' ? DefaultSdMaterialIconSet : fontSet;\n });\n\n /**\n * Kích thước runtime cho renderer hiện tại.\n *\n * @returns số pixel cho token chuẩn hoặc CSS string nguyên bản cho custom size.\n */\n resolvedSize = computed<number | string>(() => {\n const size = this.size();\n return isSizeToken(size) ? SD_ICON_SIZE_MAP[size] : size;\n });\n\n /**\n * Kích thước CSS cuối cùng cho host element.\n *\n * @returns CSS length dùng cho custom property `--sd-icon-size`.\n */\n resolvedCssSize = computed(() => {\n const size = this.resolvedSize();\n return typeof size === 'number' ? `${size}px` : size;\n });\n\n /**\n * Stroke width cuối cùng cho Lucide SVG.\n *\n * @returns giá trị input instance hoặc fallback từ provider.\n */\n resolvedStrokeWidth = computed(() => this.strokeWidth() ?? this.config.lucideConfig.strokeWidth);\n\n /**\n * Absolute stroke width cuối cùng cho Lucide SVG.\n *\n * @returns giá trị input instance hoặc fallback từ provider.\n */\n resolvedAbsoluteStrokeWidth = computed(() => this.absoluteStrokeWidth() ?? this.config.lucideConfig.absoluteStrokeWidth);\n}\n\n/**\n * Chuẩn hóa string input rỗng thành `undefined` để fallback provider hoạt động nhất quán.\n *\n * @param value - giá trị string từ input Angular.\n * @returns string đã trim hoặc `undefined`.\n */\nfunction coerceStringInput(value: string | undefined | null): string | undefined {\n const trimmed = value?.trim();\n return trimmed || undefined;\n}\n\n/**\n * Kiểm tra một size có phải token chuẩn của SDCoreJS hay không.\n *\n * @param value - token size hoặc CSS size string.\n * @returns `true` khi value có mapping pixel trong `SD_ICON_SIZE_MAP`.\n */\nfunction isSizeToken(value: Size | (string & {})): value is Size {\n return value in SD_ICON_SIZE_MAP;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -900,7 +900,7 @@ class SidebarComponent {
900
900
  return count;
901
901
  };
902
902
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
903
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SidebarComponent, isStandalone: true, selector: "sidebar", inputs: { isShowSidebar: { classPropertyName: "isShowSidebar", publicName: "isShowSidebar", isSignal: true, isRequired: true, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: true, transformFunction: null }, userInfo: { classPropertyName: "userInfo", publicName: "userInfo", isSignal: true, isRequired: true, transformFunction: null }, sidebar: { classPropertyName: "sidebar", publicName: "sidebar", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { expandSideBar: "expandSideBar", popupUserMenuClosed: "popupUserMenuClosed", popupUserMenuOpened: "popupUserMenuOpened", showSideBar: "showSideBar" }, ngImport: i0, template: "@let _userInfo = userInfo();\n@let _sidebar = sidebar();\n\n@if (_userInfo && _sidebar) {\n <div class=\"wrapper\" [style.height]=\"isMobileOrTablet ? screenHeight + 'px' : '100%'\">\n <div class=\"c-header\">\n @if (_sidebar.logoUrl) {\n <div class=\"c-logo\">\n <a href=\"javascript:;\" (click)=\"openHomePage()\">\n <img alt=\"logo\" [src]=\"_sidebar.logoUrl\" />\n </a>\n </div>\n }\n <div class=\"c-title-menu-group\">\n <span>{{ titleMenuGroup() || _sidebar.defaultTitle || 'Back Office' }}</span>\n </div>\n </div>\n <div class=\"c-body\">\n <div class=\"c-menu\">\n <div class=\"c-menu-group\">\n @if (_sidebar?.pin?.enabled && pinnedMenuGroup().children?.length) {\n <button\n (mouseenter)=\"onMouseOverMenuGroupNode($event, pinnedMenuGroup())\"\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, pinnedMenuGroup())\"\n (click)=\"expandPinnedGroup()\"\n [matTooltip]=\"'\u0110\u00E3 ghim'\"\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\n [matTooltipPosition]=\"'right'\"\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\n <sd-icon class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n color: isPinnedMenuGroupActive() ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text-secondary, #44474f)',\n backgroundColor: isPinnedMenuGroupActive() ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\" name=\"push_pin\"></sd-icon>\n </button>\n }\n @for (nodeMenuGroup of menus(); track nodeMenuGroup.id) {\n <button\n (mouseenter)=\"onMouseOverMenuGroupNode($event, nodeMenuGroup)\"\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, nodeMenuGroup)\"\n (click)=\"expandMenuGroup(nodeMenuGroup)\"\n [matTooltip]=\"nodeMenuGroup.tooltipTitle || nodeMenuGroup.title\"\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\n [matTooltipPosition]=\"'right'\"\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\n @if (nodeMenuGroup.iconUrl) {\n <span\n class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n backgroundColor: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\">\n <img width=\"24px\" height=\"24px\" [src]=\"nodeMenuGroup.iconUrl\" [alt]=\"nodeMenuGroup.title\" />\n </span>\n } @else {\n <sd-icon class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n color: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text-secondary, #44474f)',\n backgroundColor: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\" [name]=\"nodeMenuGroup.icon || 'widgets'\"></sd-icon>\n }\n </button>\n }\n </div>\n <div class=\"c-menu-tree\">\n @if (totalMenuInMenusByGroup() >= 10) {\n <div style=\"padding: 0px 4px\" class=\"c-menu-tree-search\">\n <sd-input size=\"sm\" [placeholder]=\"'core.module.layout.sidebar.search' | translate\" [model]=\"searchText()\" (sdChange)=\"onFilterSearchText($event)\">\n <ng-template sdSuffixDef>\n @if (searchText()) {\n <sd-icon class=\"c-search-prefix-icon cancel\" (click)=\"onClearSearchText()\" name=\"cancel\"></sd-icon>\n } @else {\n <sd-icon class=\"c-search-prefix-icon search\" name=\"search\"></sd-icon>\n }\n </ng-template>\n </sd-input>\n </div>\n }\n <div class=\"c-menu-tree-container\">\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" [style.backgroundColor]=\"'transparent'\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: !hasChild\">\n <li\n class=\"c-menu-node\"\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\"\n [ngStyle]=\"{\n backgroundColor: (currentPath() | menuFocus: node) ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\">\n <div aria-hidden=\"true\" class=\"c-menu-node-description\" (click)=\"navigate(node)\" [class.d-none]=\"!isShowSidebar()\">\n <div\n class=\"c-menu-node-description-content\"\n [ngStyle]=\"{\n color: (currentPath() | menuFocus: node) ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text, #1a1b1f)',\n }\"\n [innerHTML]=\"node.title | highLightSearch: searchText() | sdSafeHtml\"></div>\n\n @if (_sidebar?.pin?.enabled) {\n <sd-icon class=\"c-menu-node-description-icon-pin\"\n [style.opacity]=\"isPinnedNode(node) || isHoveredNode(node) ? '1' : null\"\n [style.color]=\"isPinnedNode(node) || isHoveredNode(node) ? sidebar().brandColor || 'var(--sd-primary, #005cbb)' : null\"\n (click)=\"onTogglePin($event, node)\" name=\"push_pin\"></sd-icon>\n }\n </div>\n </li>\n </mat-nested-tree-node>\n\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild\"\n aria-hidden=\"true\"\n [class]=\"{ expanded: treeControl.isExpanded(node), isfocus: currentPath() | menuFocus: node }\">\n <li>\n <div\n class=\"c-menu-node\"\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px; width: 100%\">\n <div [class.d-none]=\"!isShowSidebar()\" class=\"c-menu-node-description\" (click)=\"onToggleMenuNode(node)\">\n <div\n class=\"c-menu-node-description-content\"\n [innerHTML]=\"node.title | highLightSearch: searchText() | sdSafeHtml\"></div>\n <sd-icon class=\"c-menu-node-description-icon-expand\" [name]=\"treeControl.isExpanded(node) ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\"></sd-icon>\n </div>\n </div>\n </div>\n <ul class=\"p-0\" [class.d-none]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </mat-nested-tree-node>\n </mat-tree>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"c-footer\">\n <lib-layout-user\n [userInfo]=\"_userInfo\"\n [isMobileOrTablet]=\"isMobileOrTablet\"\n (menuOpened)=\"onUserMenuOpened()\"\n (menuClosed)=\"onUserMenuClosed()\"\n [isShowSidebar]=\"isShowSidebar()\"\n (toggleMenuLock)=\"toggleMenuLock($event)\">\n </lib-layout-user>\n </div>\n\n <div class=\"c-vertical\"></div>\n </div>\n}\n", styles: ["::ng-deep .mat-mdc-tooltip-panel:has(.c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140){pointer-events:none}:host ::ng-deep .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:16px!important}:host ::ng-deep .mat-nested-tree-node ul .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:32px!important}:host ::ng-deep .mat-nested-tree-node ul .mat-nested-tree-node ul .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:48px!important}ul,li{margin-top:0;margin-bottom:0;list-style-type:none}.wrapper{display:flex;flex-direction:column;width:290px;background-color:#fff}.wrapper .c-header{display:flex;align-items:center;height:52px;padding:3px;gap:16px}.wrapper .c-header .c-logo{display:flex;justify-content:center;align-items:center;width:52px;height:52px}.wrapper .c-header .c-logo img{width:32px;height:32px;object-fit:cover}.wrapper .c-header .c-title-menu-group{display:flex;align-items:center;font-size:18px;font-weight:500;flex:1}.wrapper .c-body{flex:1;overflow-y:hidden}.wrapper .c-body .c-menu{height:100%;display:flex}.wrapper .c-body .c-menu .c-menu-group{display:flex;flex-direction:column;align-items:center;width:60px;overflow-y:scroll;scrollbar-width:none}.wrapper .c-body .c-menu .c-menu-group .c-menu-group-icon{display:flex;justify-content:center;align-items:center;min-height:50px;width:52px;border-radius:8px;transition:all .15s}.wrapper .c-body .c-menu .c-menu-group .c-menu-group-icon img{height:24px;width:24px;object-fit:contain}.wrapper .c-body .c-menu .c-menu-tree{flex:1;display:flex;flex-direction:column;padding:3px 4px 3px 3px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon{cursor:pointer;color:#757575;padding:0}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon.search{width:20px;height:20px;font-size:18px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon.cancel{width:16px;height:16px;font-size:16px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container{flex:1;overflow-y:scroll;scrollbar-width:none}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node{width:100%;display:flex;cursor:pointer;min-height:44px;padding:8px;border-radius:8px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-icon{display:flex;justify-content:center;align-items:center;height:100%}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description{flex:1;display:flex;align-items:center}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-content{flex:1;display:flex;align-items:center;flex-wrap:wrap;white-space:pre-wrap;font-size:15px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-icon-expand{display:flex;align-items:center;justify-content:start;background-color:transparent;border:none;font-size:20px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-icon-pin{display:flex;align-items:center;justify-content:start;background-color:transparent;border:none;font-size:18px;opacity:0}.wrapper .c-footer{height:80px}.wrapper .c-vertical{position:fixed;height:100vh;left:58px;width:2px;background-color:#f8f9fa;pointer-events:none}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: SdInput, selector: "sd-input", inputs: ["autoId", "name", "appearance", "floatLabel", "size", "form", "label", "helperText", "placeholder", "type", "hideInlineError", "blurOnEnter", "required", "readonly", "disabled", "viewed", "minlength", "maxlength", "pattern", "patternErrorMessage", "validator", "inlineError", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdFocus", "sdBlur", "keyupEnter", "cleared", "sdFocusForceBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i2$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "component", type: i2$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: SdSuffixDefDirective, selector: "[sdSuffixDef]" }, { kind: "component", type: LayoutUserComponent$1, selector: "lib-layout-user", inputs: ["isMobileOrTablet", "isMenuLock", "isShowSidebar", "userInfo"], outputs: ["menuClosed", "menuOpened", "toggleMenuLock"] }, { kind: "pipe", type: SdSafeHtmlPipe, name: "sdSafeHtml" }, { kind: "pipe", type: MenuFocusPipe, name: "menuFocus" }, { kind: "pipe", type: HighlightSearchPipe, name: "highLightSearch" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
903
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SidebarComponent, isStandalone: true, selector: "sidebar", inputs: { isShowSidebar: { classPropertyName: "isShowSidebar", publicName: "isShowSidebar", isSignal: true, isRequired: true, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: true, transformFunction: null }, userInfo: { classPropertyName: "userInfo", publicName: "userInfo", isSignal: true, isRequired: true, transformFunction: null }, sidebar: { classPropertyName: "sidebar", publicName: "sidebar", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { expandSideBar: "expandSideBar", popupUserMenuClosed: "popupUserMenuClosed", popupUserMenuOpened: "popupUserMenuOpened", showSideBar: "showSideBar" }, ngImport: i0, template: "@let _userInfo = userInfo();\n@let _sidebar = sidebar();\n\n@if (_userInfo && _sidebar) {\n <div class=\"wrapper\" [style.height]=\"isMobileOrTablet ? screenHeight + 'px' : '100%'\">\n <div class=\"c-header\">\n @if (_sidebar.logoUrl) {\n <div class=\"c-logo\">\n <a href=\"javascript:;\" (click)=\"openHomePage()\">\n <img alt=\"logo\" [src]=\"_sidebar.logoUrl\" />\n </a>\n </div>\n }\n <div class=\"c-title-menu-group\">\n <span>{{ titleMenuGroup() || _sidebar.defaultTitle || 'Back Office' }}</span>\n </div>\n </div>\n <div class=\"c-body\">\n <div class=\"c-menu\">\n <div class=\"c-menu-group\">\n @if (_sidebar?.pin?.enabled && pinnedMenuGroup().children?.length) {\n <button\n (mouseenter)=\"onMouseOverMenuGroupNode($event, pinnedMenuGroup())\"\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, pinnedMenuGroup())\"\n (click)=\"expandPinnedGroup()\"\n [matTooltip]=\"'\u0110\u00E3 ghim'\"\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\n [matTooltipPosition]=\"'right'\"\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\n <sd-icon class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n color: isPinnedMenuGroupActive() ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text-secondary, #44474f)',\n backgroundColor: isPinnedMenuGroupActive() ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\" name=\"push_pin\"></sd-icon>\n </button>\n }\n @for (nodeMenuGroup of menus(); track nodeMenuGroup.id) {\n <button\n (mouseenter)=\"onMouseOverMenuGroupNode($event, nodeMenuGroup)\"\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, nodeMenuGroup)\"\n (click)=\"expandMenuGroup(nodeMenuGroup)\"\n [matTooltip]=\"nodeMenuGroup.tooltipTitle || nodeMenuGroup.title\"\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\n [matTooltipPosition]=\"'right'\"\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\n @if (nodeMenuGroup.iconUrl) {\n <span\n class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n backgroundColor: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\">\n <img width=\"24px\" height=\"24px\" [src]=\"nodeMenuGroup.iconUrl\" [alt]=\"nodeMenuGroup.title\" />\n </span>\n } @else {\n <sd-icon class=\"c-menu-group-icon\"\n [ngStyle]=\"{\n color: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text-secondary, #44474f)',\n backgroundColor: idMenuGroupActive() === nodeMenuGroup?.id ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\" [name]=\"nodeMenuGroup.icon || 'widgets'\"></sd-icon>\n }\n </button>\n }\n </div>\n <div class=\"c-menu-tree\">\n @if (totalMenuInMenusByGroup() >= 10) {\n <div style=\"padding: 0px 4px\" class=\"c-menu-tree-search\">\n <sd-input size=\"sm\" [placeholder]=\"'core.module.layout.sidebar.search' | translate\" [model]=\"searchText()\" (sdChange)=\"onFilterSearchText($event)\">\n <ng-template sdSuffixDef>\n @if (searchText()) {\n <sd-icon class=\"c-search-prefix-icon cancel\" (click)=\"onClearSearchText()\" name=\"cancel\"></sd-icon>\n } @else {\n <sd-icon class=\"c-search-prefix-icon search\" name=\"search\"></sd-icon>\n }\n </ng-template>\n </sd-input>\n </div>\n }\n <div class=\"c-menu-tree-container\">\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" [style.backgroundColor]=\"'transparent'\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: !hasChild\">\n <li\n class=\"c-menu-node\"\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\"\n [ngStyle]=\"{\n backgroundColor: (currentPath() | menuFocus: node) ? _sidebar.brandLightColor || 'var(--sd-primary-light, #d7e3ff)' : 'transparent',\n }\">\n <div aria-hidden=\"true\" class=\"c-menu-node-description\" (click)=\"navigate(node)\" [class.d-none]=\"!isShowSidebar()\">\n <div\n class=\"c-menu-node-description-content\"\n [ngStyle]=\"{\n color: (currentPath() | menuFocus: node) ? _sidebar.brandColor || 'var(--sd-primary, #005cbb)' : 'var(--sd-text, #1a1b1f)',\n }\"\n [innerHTML]=\"node.title | highLightSearch: searchText() | sdSafeHtml\"></div>\n\n @if (_sidebar?.pin?.enabled) {\n <sd-icon class=\"c-menu-node-description-icon-pin\"\n [style.opacity]=\"isPinnedNode(node) || isHoveredNode(node) ? '1' : null\"\n [style.color]=\"isPinnedNode(node) || isHoveredNode(node) ? sidebar().brandColor || 'var(--sd-primary, #005cbb)' : null\"\n (click)=\"onTogglePin($event, node)\" name=\"push_pin\"></sd-icon>\n }\n </div>\n </li>\n </mat-nested-tree-node>\n\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild\"\n aria-hidden=\"true\"\n [class]=\"{ expanded: treeControl.isExpanded(node), isfocus: currentPath() | menuFocus: node }\">\n <li>\n <div\n class=\"c-menu-node\"\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\">\n <div class=\"d-flex align-items-center\" style=\"gap: 10px; width: 100%\">\n <div [class.d-none]=\"!isShowSidebar()\" class=\"c-menu-node-description\" (click)=\"onToggleMenuNode(node)\">\n <div\n class=\"c-menu-node-description-content\"\n [innerHTML]=\"node.title | highLightSearch: searchText() | sdSafeHtml\"></div>\n <sd-icon class=\"c-menu-node-description-icon-expand\" [name]=\"treeControl.isExpanded(node) ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\"></sd-icon>\n </div>\n </div>\n </div>\n <ul class=\"p-0\" [class.d-none]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </ul>\n </li>\n </mat-nested-tree-node>\n </mat-tree>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"c-footer\">\n <lib-layout-user\n [userInfo]=\"_userInfo\"\n [isMobileOrTablet]=\"isMobileOrTablet\"\n (menuOpened)=\"onUserMenuOpened()\"\n (menuClosed)=\"onUserMenuClosed()\"\n [isShowSidebar]=\"isShowSidebar()\"\n (toggleMenuLock)=\"toggleMenuLock($event)\">\n </lib-layout-user>\n </div>\n\n <div class=\"c-vertical\"></div>\n </div>\n}\n", styles: ["::ng-deep .mat-mdc-tooltip-panel:has(.c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140){pointer-events:none}:host ::ng-deep .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:16px!important}:host ::ng-deep .mat-nested-tree-node ul .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:32px!important}:host ::ng-deep .mat-nested-tree-node ul .mat-nested-tree-node ul .mat-nested-tree-node ul .c-menu-node-description-content{margin-left:48px!important}ul,li{margin-top:0;margin-bottom:0;list-style-type:none}.wrapper{display:flex;flex-direction:column;width:290px;background-color:#fff}.wrapper .c-header{display:flex;align-items:center;height:52px;padding:3px;gap:16px}.wrapper .c-header .c-logo{display:flex;justify-content:center;align-items:center;width:52px;height:52px}.wrapper .c-header .c-logo img{width:32px;height:32px;object-fit:cover}.wrapper .c-header .c-title-menu-group{display:flex;align-items:center;font-size:18px;font-weight:500;flex:1}.wrapper .c-body{flex:1;overflow-y:hidden}.wrapper .c-body .c-menu{height:100%;display:flex}.wrapper .c-body .c-menu .c-menu-group{display:flex;flex-direction:column;align-items:center;width:60px;overflow-y:scroll;scrollbar-width:none}.wrapper .c-body .c-menu .c-menu-group .c-menu-group-icon{display:flex;justify-content:center;align-items:center;min-height:50px;width:52px;border-radius:8px;transition:all .15s}.wrapper .c-body .c-menu .c-menu-group .c-menu-group-icon img{height:24px;width:24px;object-fit:contain}.wrapper .c-body .c-menu .c-menu-tree{flex:1;display:flex;flex-direction:column;padding:3px 4px 3px 3px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon{cursor:pointer;color:#757575;padding:0}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon.search{width:20px;height:20px;font-size:18px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-search .c-search-prefix-icon.cancel{width:16px;height:16px;font-size:16px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container{flex:1;overflow-y:scroll;scrollbar-width:none}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node{width:100%;display:flex;cursor:pointer;min-height:44px;padding:8px;border-radius:8px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-icon{display:flex;justify-content:center;align-items:center;height:100%}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description{flex:1;display:flex;align-items:center}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-content{flex:1;display:flex;align-items:center;flex-wrap:wrap;white-space:pre-wrap;font-size:15px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-icon-expand{display:flex;align-items:center;justify-content:start;background-color:transparent;border:none;font-size:20px}.wrapper .c-body .c-menu .c-menu-tree .c-menu-tree-container .c-menu-node .c-menu-node-description .c-menu-node-description-icon-pin{display:flex;align-items:center;justify-content:start;background-color:transparent;border:none;font-size:18px;opacity:0}.wrapper .c-footer{height:80px}.wrapper .c-vertical{position:fixed;height:100vh;left:58px;width:2px;background-color:#f8f9fa;pointer-events:none}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: SdInput, selector: "sd-input", inputs: ["autoId", "name", "appearance", "floatLabel", "size", "form", "label", "helperText", "placeholder", "type", "hideInlineError", "blurOnEnter", "clearable", "required", "readonly", "disabled", "viewed", "minlength", "maxlength", "pattern", "patternErrorMessage", "validator", "inlineError", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdFocus", "sdBlur", "keyupEnter", "cleared", "sdFocusForceBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i2$1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], outputs: ["activation", "expandedChange"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i2$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "component", type: i2$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i2$1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: SdSuffixDefDirective, selector: "[sdSuffixDef]" }, { kind: "component", type: LayoutUserComponent$1, selector: "lib-layout-user", inputs: ["isMobileOrTablet", "isMenuLock", "isShowSidebar", "userInfo"], outputs: ["menuClosed", "menuOpened", "toggleMenuLock"] }, { kind: "pipe", type: SdSafeHtmlPipe, name: "sdSafeHtml" }, { kind: "pipe", type: MenuFocusPipe, name: "menuFocus" }, { kind: "pipe", type: HighlightSearchPipe, name: "highLightSearch" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
904
904
  }
905
905
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SidebarComponent, decorators: [{
906
906
  type: Component,