{"version":3,"file":"sdcorejs-angular-forms-input.mjs","sources":["../../../projects/sdcorejs-angular/forms/input/src/input-mask.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.ts","../../../projects/sdcorejs-angular/forms/input/src/input.component.html","../../../projects/sdcorejs-angular/forms/input/sdcorejs-angular-forms-input.ts"],"sourcesContent":["export type SdInputMaskStatus = 'empty' | 'incomplete' | 'valid' | 'invalid';\n\nexport type SdInputMaskInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n\nexport interface SdInputMaskResult {\n  readonly raw: string;\n  readonly display: string;\n  readonly status: SdInputMaskStatus;\n  readonly selectionStart: number;\n  readonly selectionEnd: number;\n}\n\nexport interface SdInputMaskAdapter {\n  readonly inputMode?: SdInputMaskInputMode;\n  readonly maxDisplayLength?: number;\n  format(raw: string | null | undefined): SdInputMaskResult;\n  parse(display: string, selectionStart?: number | null, selectionEnd?: number | null): SdInputMaskResult;\n}\n\nexport interface SdInputMaskToken {\n  readonly pattern: RegExp;\n  readonly optional?: boolean;\n  readonly transform?: (value: string) => string;\n}\n\nexport interface SdCreateInputMaskOptions {\n  readonly tokens?: Readonly<Record<string, SdInputMaskToken>>;\n  readonly inputMode?: SdInputMaskInputMode;\n}\n\ninterface MaskSlot {\n  readonly unitIndex: number;\n  readonly slotIndex: number;\n  readonly token: SdInputMaskToken;\n}\n\ninterface MaskLiteral {\n  readonly unitIndex: number;\n  readonly value: string;\n}\n\ninterface AssignedSlot {\n  readonly slotIndex: number;\n  readonly unitIndex: number;\n  readonly value: string;\n  readonly sourceIndex: number;\n}\n\nconst DEFAULT_TOKENS: Readonly<Record<string, SdInputMaskToken>> = {\n  '#': { pattern: /[0-9]/ },\n  '9': { pattern: /[0-9]/, optional: true },\n  A: { pattern: /[A-Za-z]/ },\n  a: { pattern: /[A-Za-z]/, optional: true },\n  '*': { pattern: /[A-Za-z0-9]/ },\n  '?': { pattern: /[A-Za-z0-9]/, optional: true },\n};\n\nfunction tokenAccepts(token: SdInputMaskToken, value: string): boolean {\n  token.pattern.lastIndex = 0;\n  const accepted = token.pattern.test(value);\n  token.pattern.lastIndex = 0;\n  return accepted;\n}\n\n/**\n * Creates a dependency-free slot mask.\n *\n * Default tokens: `#` required digit, `9` optional digit, `A`/`a` required/optional\n * letter, and `*`/`?` required/optional alphanumeric. Every other character is a\n * display literal and never leaks into the raw model.\n */\nexport function sdCreateInputMask(pattern: string, options: SdCreateInputMaskOptions = {}): SdInputMaskAdapter {\n  if (!pattern) throw new Error('Input mask pattern must not be empty.');\n\n  const tokens = { ...DEFAULT_TOKENS, ...options.tokens };\n  const slots: MaskSlot[] = [];\n  const literals: MaskLiteral[] = [];\n  const units = Array.from(pattern, (value, unitIndex) => {\n    const token = tokens[value];\n    if (token) {\n      const slot = { unitIndex, slotIndex: slots.length, token } satisfies MaskSlot;\n      slots.push(slot);\n      return slot;\n    }\n    const literal = { unitIndex, value } satisfies MaskLiteral;\n    literals.push(literal);\n    return literal;\n  });\n  if (slots.length === 0) throw new Error('Input mask pattern must contain at least one token.');\n\n  const literalValues = new Set(literals.map(item => item.value));\n\n  const convert = (\n    source: string,\n    sourceSelectionStart: number,\n    sourceSelectionEnd: number,\n    sourceIsDisplay: boolean\n  ): SdInputMaskResult => {\n    const assigned: AssignedSlot[] = [];\n    let unitCursor = 0;\n    let invalid = false;\n\n    for (let sourceIndex = 0; sourceIndex < source.length; sourceIndex += 1) {\n      const value = source[sourceIndex];\n      let consumed = false;\n\n      // why: literals are consumed at the pattern cursor, not filtered globally;\n      // a global filter would corrupt raw digits in masks with prefixes such as `+84`.\n      while (unitCursor < units.length) {\n        const unit = units[unitCursor];\n\n        if ('value' in unit) {\n          unitCursor += 1;\n          if (sourceIsDisplay && value === unit.value) {\n            consumed = true;\n            break;\n          }\n          continue;\n        }\n\n        if (tokenAccepts(unit.token, value)) {\n          assigned.push({\n            slotIndex: unit.slotIndex,\n            unitIndex: unit.unitIndex,\n            value: unit.token.transform?.(value) ?? value,\n            sourceIndex,\n          });\n          unitCursor += 1;\n          consumed = true;\n          break;\n        }\n\n        if (sourceIsDisplay && literalValues.has(value)) {\n          consumed = true;\n          break;\n        }\n\n        if (unit.token.optional) {\n          unitCursor += 1;\n          continue;\n        }\n\n        invalid = true;\n        consumed = true;\n        break;\n      }\n\n      if (!consumed) invalid = true;\n    }\n\n    const assignedByUnit = new Map(assigned.map(item => [item.unitIndex, item] as const));\n    const lastFilledUnit = assigned.at(-1)?.unitIndex ?? -1;\n    let display = '';\n    let acceptedCount = 0;\n    const displayPositionByAcceptedCount = new Map<number, number>([[0, 0]]);\n\n    for (const unit of units) {\n      if ('token' in unit) {\n        const item = assignedByUnit.get(unit.unitIndex);\n        if (!item) continue;\n        display += item.value;\n        acceptedCount += 1;\n        displayPositionByAcceptedCount.set(acceptedCount, display.length);\n      } else if (unit.unitIndex < lastFilledUnit) {\n        display += unit.value;\n      }\n    }\n\n    const raw = assigned.map(item => item.value).join('');\n    const hasEveryRequiredSlot = slots.every((slot, index) => slot.token.optional || assigned.some(item => item.slotIndex === index));\n    const status: SdInputMaskStatus = invalid ? 'invalid' : raw.length === 0 ? 'empty' : hasEveryRequiredSlot ? 'valid' : 'incomplete';\n\n    const acceptedBefore = (position: number): number => assigned.filter(item => item.sourceIndex < Math.max(0, position)).length;\n    const mapSelection = (position: number): number => {\n      const count = acceptedBefore(position);\n      return displayPositionByAcceptedCount.get(count) ?? display.length;\n    };\n\n    return {\n      raw,\n      display,\n      status,\n      selectionStart: mapSelection(sourceSelectionStart),\n      selectionEnd: mapSelection(sourceSelectionEnd),\n    };\n  };\n\n  return {\n    inputMode: options.inputMode ?? (slots.every(slot => tokenAccepts(slot.token, '0')) ? 'numeric' : 'text'),\n    maxDisplayLength: pattern.length,\n    format: raw => {\n      const source = raw == null ? '' : String(raw);\n      return convert(source, source.length, source.length, false);\n    },\n    parse: (display, selectionStart = display.length, selectionEnd = selectionStart) =>\n      convert(display, selectionStart ?? display.length, selectionEnd ?? selectionStart ?? display.length, true),\n  };\n}\n\n/** Common business masks. Models remain raw strings; separators are display-only. */\nexport const SD_INPUT_MASKS = {\n  VN_PHONE: sdCreateInputMask('#### ### ###', { inputMode: 'tel' }),\n  VN_ID: sdCreateInputMask('#### #### ####', { inputMode: 'numeric' }),\n  VN_TAX_CODE: sdCreateInputMask('##########-999', { inputMode: 'numeric' }),\n  BANK_ACCOUNT: sdCreateInputMask('######99999999999999', { inputMode: 'numeric' }),\n  BUSINESS_CODE: sdCreateInputMask('****-????????????', { inputMode: 'text' }),\n} as const satisfies Readonly<Record<string, SdInputMaskAdapter>>;\n\nexport type SdInputMaskPreset = keyof typeof SD_INPUT_MASKS;\nexport type SdInputMask = SdInputMaskAdapter | SdInputMaskPreset;\n\nexport function sdResolveInputMask(mask: SdInputMask | null | undefined): SdInputMaskAdapter | undefined {\n  if (!mask) return undefined;\n  return typeof mask === 'string' ? SD_INPUT_MASKS[mask] : mask;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  contentChild,\n  effect,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  OnInit,\n  Output,\n  output,\n  signal,\n  TemplateRef,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { AsyncValidatorFn, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { SdInlineText } from '@sdcorejs/angular/forms/inline-text';\nimport { SdSuffixDefDirective, SdViewDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport {\n  HandleSdCustomValidator,\n  SD_FORM_CONFIGURATION,\n  SdCustomValidator,\n  SdFormControl,\n  sdFormControlState,\n  SdInlineErrorValidator,\n  SdViewed,\n  SdViewedInput,\n  sdViewedInline,\n  sdViewedTransform,\n  ɵsdFormControlConnector,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue, sdIsEmpty } from '@sdcorejs/angular/utilities/data-state';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Size } from '@sdcorejs/utils/models';\nimport type { ValidationPatternType } from '@sdcorejs/utils/models';\nimport { VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';\n\n// Back-compat: SdPatternType cũ → ValidationPatternType mới.\n// 3 key đã đổi tên trong @sdcorejs/utils v1.x.\nconst LEGACY_PATTERN_ALIAS: Record<string, ValidationPatternType> = {\n  PHONE_VN: 'VN_PHONE',\n  IDVN: 'VN_ID',\n  IDVN_OR_PASSPORT: 'VN_ID_OR_PASSPORT',\n};\nimport { Subscription } from 'rxjs';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nimport { SdInputMask, SdInputMaskResult, SdInputMaskStatus, sdResolveInputMask } from './input-mask';\n\n@Component({\n  selector: 'sd-input',\n  templateUrl: './input.component.html',\n  styleUrl: './input.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\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    MatButtonModule,\n    SdLabel,\n    SdView,\n    SdInlineText,\n    TranslatePipe,\n  ],\n})\nexport class SdInput implements OnDestroy, OnInit, AfterViewInit {\n  id = `I${Utilities.generateUuid()}`;\n\n  // ==========================================\n  // 1. SIGNAL QUERIES (Thay thế @ViewChild / @ContentChild)\n  // ==========================================\n  control = viewChild<ElementRef<HTMLInputElement>>('control');\n  /** The inline primitive — only present when `viewed='inline'`; drives focus/blur in that mode. */\n  inlineRef = viewChild(SdInlineText);\n  sdLabelTemplate = contentChild<TemplateRef<any>>('sdLabel');\n  sdValueTemplate = contentChild<TemplateRef<any>>('sdValue');\n  sdSuffixDef = contentChild(SdSuffixDefDirective);\n  sdViewDef = contentChild(SdViewDefDirective);\n\n  // ==========================================\n  // 2. SIGNAL INPUTS & MODEL\n  // ==========================================\n  autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n  autoId = computed(() => (this.autoIdInput() ? `forms-input-${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<string | null>(() => {\n    if (this.type() === 'password') return null;\n    return sdSerializeDataValue(this.#state().value);\n  });\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 dataMinLength = computed(() => {\n    const v = this.minlength();\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  // ==========================================\n  // 3. INJECT (Thay thế Constructor DI)\n  // ==========================================\n  #ref = inject(ChangeDetectorRef);\n  #formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n  readonly #i18n = inject(I18nService);\n\n  appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n  appearance = computed(() => this.appearanceInput() ?? this.#formConfig?.appearance ?? 'outline');\n\n  floatLabel = input<FloatLabelType>('auto');\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>();\n  helperText = input<string | undefined>();\n  placeholder = input<string | undefined>();\n  type = input<'text' | 'number' | 'password' | 'email'>('text');\n  mask = input<SdInputMask | null | undefined>();\n  readonly maskAdapter = computed(() => sdResolveInputMask(this.mask()));\n  readonly effectiveType = computed(() => (this.maskAdapter() ? 'text' : this.type()));\n  readonly inputMode = computed(() => this.maskAdapter()?.inputMode);\n  readonly maxDisplayLength = computed(() => this.maskAdapter()?.maxDisplayLength);\n\n  hideInlineError = input(false, { transform: booleanAttribute });\n  blurOnEnter = input(false, { transform: booleanAttribute });\n  /** Whether to show the value-gated clear button in edit and inline modes. */\n  clearable = input(false, { transform: booleanAttribute });\n  required = input(false, { transform: booleanAttribute });\n  readonly = input(false, { transform: booleanAttribute });\n  disabled = input(false, { transform: booleanAttribute });\n  /** Display mode: `false` edit · `true` static view · `'inline'` borderless inline-edit (no panel — the input IS the face). */\n  viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n\n  /** Focus whichever input is live: the inline primitive in `'inline'` mode, else the mat input. */\n  #focusActiveInput = (): void => {\n    const inline = this.inlineRef();\n    if (inline) inline.focus();\n    else this.control()?.nativeElement?.focus();\n  };\n  /** View display template: `sdViewDef` overrides the projected `#sdValue` for the static view (unified). */\n  readonly viewTemplate = computed<TemplateRef<any> | undefined>(() => this.sdViewDef()?.templateRef ?? this.sdValueTemplate());\n\n  minlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n  maxlength = input<number | undefined, unknown>(undefined, { transform: v => (v == null ? undefined : Number(v)) });\n\n  pattern = input<ValidationPatternType | string | undefined | null>();\n  patternErrorMessage = input<string | undefined | null>();\n\n  // Bỏ qua nếu val không phải string (number/boolean/object truyền nhầm → tránh validator hỏng)\n  #lookupPattern = (val: unknown) => {\n    if (typeof val !== 'string') return undefined;\n    const key = (LEGACY_PATTERN_ALIAS[val] ?? val) as ValidationPatternType;\n    return VALIDATION_PATTERNS.find(e => e.type === key);\n  };\n\n  resolvedPattern = computed(() => {\n    const val = this.pattern();\n    if (typeof val !== 'string') return undefined;\n    const patternObj = this.#lookupPattern(val);\n    return patternObj ? patternObj.pattern : val;\n  });\n\n  resolvedPatternErrorMsg = computed(() => {\n    // patternObj.errorMessage là i18n key (vd 'core.validator.email.error') → wrap qua i18n.t() để hiển thị string đã dịch\n    const customMsg = this.patternErrorMessage();\n    if (customMsg) return customMsg;\n    const patternObj = this.#lookupPattern(this.pattern());\n    return patternObj ? this.#i18n.t(patternObj.errorMessage) : undefined;\n  });\n\n  /**\n   * First active error message for tooltip display when `hideInlineError = true`.\n   * Re-runs only when `#state` ticks (value / status / touched change) — no longer\n   * invoked on every change-detection cycle as a getter would be.\n   */\n  readonly errorMessage = computed<string | undefined>(() => {\n    // Subscribe to form-state changes so the computed re-evaluates correctly.\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.input.required');\n    if (errors['maxlength']) return this.#i18n.t('core.form.input.maxlength', { max: this.maxlength() ?? '' });\n    if (errors['maskIncomplete']) return this.#i18n.t('core.form.input.mask-incomplete');\n    if (errors['maskInvalid']) return this.#i18n.t('core.form.input.mask-invalid');\n    if (errors['pattern']) return this.resolvedPatternErrorMsg() || this.#i18n.t('core.form.input.invalid-pattern');\n    if (errors['customValidator']) return errors['customValidator'] as string;\n    if (errors['inlineError']) return this.inlineError();\n    return undefined;\n  });\n\n  validator = input<SdCustomValidator | undefined>();\n  inlineError = input<string | undefined>();\n  hyperlink = input<string | null | undefined>();\n\n  valueModel = model<any>(undefined, { alias: 'model' });\n\n  // ==========================================\n  // 4. SIGNAL OUTPUTS (Thay thế @Output)\n  // ==========================================\n  sdChange = output<any>();\n  sdFocus = output<void>(); // Đổi sang void vì không truyền data\n  sdBlur = output<any>();\n  keyupEnter = output<any>();\n  // why: sdChange fire per-keystroke nên consumer KHÔNG dùng nó để trigger\n  // \"commit filter\" (sẽ over-reload). `cleared` là intent rõ ràng cho action\n  // X (clear button) — consumer như column-filter dùng để fire reload ngay.\n  cleared = output<void>();\n\n  // why: focus handling reads EventEmitter.observed before emitting a forced blur event.\n  @Output() readonly sdFocusForceBlur = new EventEmitter<void>();\n\n  formControl = new SdFormControl();\n  /** Display-only control used by the input element while a mask is active. */\n  readonly displayControl = new SdFormControl();\n  readonly activeControl = computed(() => (this.maskAdapter() ? this.displayControl : this.formControl));\n  readonly maskStatus = signal<SdInputMaskStatus>('empty');\n  readonly displayValue = computed(() => {\n    const adapter = this.maskAdapter();\n    return adapter ? adapter.format(this.formControl.value == null ? '' : String(this.formControl.value)).display : this.formControl.value;\n  });\n  #subscription = new Subscription();\n  #isComposing = false;\n  #pendingMaskResult: SdInputMaskResult | undefined;\n  isFocused = false;\n  readonly #validators = computed<readonly ValidatorFn[]>(() => {\n    const validators: ValidatorFn[] = [];\n    const min = this.minlength();\n    const max = this.maxlength();\n    const pattern = this.resolvedPattern();\n\n    if (min && min > 0) validators.push(Validators.minLength(min));\n    if (max && max > 0) validators.push(Validators.maxLength(max));\n    if (pattern) validators.push(Validators.pattern(pattern));\n    if (this.maskAdapter()) {\n      const maskStatus = this.maskStatus();\n      validators.push(() => {\n        if (maskStatus === 'invalid') return { maskInvalid: true };\n        if (maskStatus === 'incomplete') return { maskIncomplete: true };\n        return null;\n      });\n    }\n    if (this.inlineError()) validators.push(SdInlineErrorValidator);\n    return validators;\n  });\n  readonly #asyncValidators = computed<readonly AsyncValidatorFn[]>(() => {\n    const validator = this.validator();\n    return validator ? [HandleSdCustomValidator(validator)] : [];\n  });\n  readonly #formConnector = ɵsdFormControlConnector<unknown, unknown>({\n    form: this.form,\n    name: this.name,\n    control: computed(() => this.formControl),\n    validators: this.#validators,\n    asyncValidators: this.#asyncValidators,\n    required: this.required,\n    disabled: this.disabled,\n    readonly: this.readonly,\n    viewed: this.viewed,\n    validationError: computed(() => this.errorMessage()),\n  });\n  /** Shared reactive form policy consumed by template-facing state below. */\n  readonly connectorState = this.#formConnector.state;\n  readonly isReadonly = computed(() => this.connectorState().readonly);\n  readonly visibleErrorMessage = computed(() => this.connectorState().validationError);\n\n  // Tri-state `viewed` — shared primitive. Input has NO panel; in `'inline'` the input is rendered\n  // borderless/transparent (looks like text), always editable — clicking/focusing it edits directly.\n  readonly #viewedState = sdViewedInline(\n    computed(() => this.connectorState().viewed),\n    () => this.#focusActiveInput(),\n    this.disabled\n  );\n  /** `true` when `viewed === 'inline'`. */\n  readonly isInline = this.#viewedState.isInline;\n  /** `true` when `viewed === true` (static view, no input). */\n  readonly isViewed = this.#viewedState.isViewed;\n  /** Focus the inline input. No-op unless `viewed='inline'`. */\n  enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n  constructor() {\n    effect(() => {\n      const val = this.valueModel();\n      const adapter = this.maskAdapter();\n      untracked(() => {\n        if (this.formControl.value !== val) {\n          this.formControl.setValue(val, { emitEvent: false });\n        }\n        if (adapter) {\n          const rawValue = val == null ? '' : String(val);\n          const result = this.#pendingMaskResult?.raw === rawValue ? this.#pendingMaskResult : adapter.format(rawValue);\n          this.#pendingMaskResult = undefined;\n          this.maskStatus.set(result.status);\n          if (this.displayControl.value !== result.display) {\n            this.displayControl.setValue(result.display, { emitEvent: false });\n          }\n        } else {\n          this.maskStatus.set('empty');\n        }\n      });\n    });\n\n    effect(() => {\n      const masked = !!this.maskAdapter();\n      const disabled = this.disabled();\n      untracked(() => {\n        if (masked && disabled) this.displayControl.disable({ emitEvent: false });\n        else this.displayControl.enable({ emitEvent: false });\n      });\n    });\n  }\n\n  ngOnInit() {\n    this.#subscription.add(\n      this.formControl.sdChanges.subscribe(() => {\n        this.#ref.markForCheck();\n      })\n    );\n  }\n\n  ngAfterViewInit() {\n    this.#subscription.add(this.formControl.valueChanges.subscribe(this.#onChange));\n    this.#subscription.add(this.displayControl.valueChanges.subscribe(value => this.#onMaskedDisplayChange(value)));\n\n    this.#ref.detectChanges();\n  }\n\n  ngOnDestroy() {\n    this.#subscription.unsubscribe();\n  }\n\n  reValidate = () => {\n    this.formControl.updateValueAndValidity();\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  #onChange = () => {\n    const value = this.formControl.value ?? '';\n\n    this.valueModel.set(value);\n    this.sdChange.emit(value);\n  };\n\n  #onMaskedDisplayChange(value: unknown): void {\n    const adapter = this.maskAdapter();\n    if (!adapter || this.#isComposing) return;\n\n    const nativeInput = this.control()?.nativeElement;\n    const display = value == null ? '' : String(value);\n    const result = adapter.parse(display, nativeInput?.selectionStart, nativeInput?.selectionEnd);\n    this.#applyMaskResult(result);\n  }\n\n  #applyMaskResult(result: SdInputMaskResult): void {\n    this.maskStatus.set(result.status);\n    if (this.displayControl.value !== result.display) {\n      this.displayControl.setValue(result.display, { emitEvent: false });\n    }\n    if (this.formControl.value !== result.raw) {\n      this.#pendingMaskResult = this.valueModel() === result.raw ? undefined : result;\n      this.formControl.setValue(result.raw);\n    } else {\n      this.#pendingMaskResult = undefined;\n      this.formControl.updateValueAndValidity({ emitEvent: false });\n    }\n\n    queueMicrotask(() => {\n      const nativeInput = this.control()?.nativeElement;\n      if (nativeInput) {\n        nativeInput.setSelectionRange(result.selectionStart, result.selectionEnd);\n      }\n    });\n  }\n\n  onCompositionStart(): void {\n    if (this.maskAdapter()) this.#isComposing = true;\n  }\n\n  onCompositionEnd(event: CompositionEvent): void {\n    const adapter = this.maskAdapter();\n    if (!adapter) return;\n    this.#isComposing = false;\n    const target = event.target as HTMLInputElement | null;\n    const display = target?.value ?? String(this.displayControl.value ?? '');\n    this.#applyMaskResult(adapter.parse(display, target?.selectionStart, target?.selectionEnd));\n  }\n\n  // why: dựa trên valueModel() (signal model-input) thay vì formControl.value —\n  // khi bị wrap (vd <sd-input-color>) effect set formControl chạy SAU lúc template\n  // eval nên formControl.value chưa kịp có; valueModel() thì có ngay. Method (không\n  // computed) để re-eval mỗi CD. clearable là opt-in; required không được clear;\n  // disabled/readonly ẩn nút.\n  showClear = (): boolean => {\n    if (!this.clearable() || this.required() || this.disabled() || this.readonly()) return false;\n    return !sdIsEmpty(this.valueModel());\n  };\n\n  clear = ($event?: Event) => {\n    $event?.stopPropagation();\n    if (sdIsEmpty(this.valueModel()) && sdIsEmpty(this.formControl.value)) return;\n    // why: clear là thao tác chủ động → model về null (không phải '' hay undefined).\n    // undefined chỉ dành cho trạng thái pristine chưa từng nhập.\n    this.formControl.setValue(null, { emitEvent: false });\n    this.displayControl.setValue('', { emitEvent: false });\n    this.maskStatus.set('empty');\n    this.valueModel.set(null);\n    this.sdChange.emit(null);\n    this.cleared.emit();\n  };\n\n  onKeyupEnter = () => {\n    const val: string = (this.formControl.value ?? '').toString();\n    if (!this.maskAdapter() && val.length > val.trim().length) {\n      this.formControl.setValue(val.trim());\n    }\n    this.keyupEnter.emit(this.formControl.value);\n    if (this.blurOnEnter()) {\n      this.blur();\n    }\n  };\n\n  onFocus = () => {\n    this.isFocused = true;\n    this.sdFocus.emit(); // Gọi .emit() y hệt như cũ\n\n    if (this.sdFocusForceBlur.observed) {\n      this.blur();\n      this.sdFocusForceBlur.emit();\n    }\n  };\n\n  onBlur = () => {\n    this.isFocused = false;\n    const val: string = (this.formControl.value ?? '').toString();\n    if (!this.maskAdapter() && val.length > val.trim().length) {\n      this.formControl.setValue(val.trim());\n    }\n    this.sdBlur.emit(this.formControl.value);\n  };\n\n  onClick = () => {\n    // 🚨 GỌI SIGNAL: Phải thêm () vào sdViewDef\n    if (this.sdViewDef()?.templateRef) {\n      if (!this.formControl.disabled && !this.isFocused) {\n        this.focus();\n      }\n    }\n  };\n\n  blur = () => {\n    this.isFocused = false;\n    const inline = this.inlineRef();\n    if (inline) inline.blur();\n    else this.control()?.nativeElement?.blur();\n  };\n\n  focus = () => {\n    this.isFocused = true;\n    setTimeout(() => {\n      this.#focusActiveInput();\n    }, 100);\n  };\n}\n","@let _label = label();\n@let _appearance = appearance();\n@let _hideInlineError = hideInlineError();\n@let _helperText = helperText();\n@let _maxLength = maxlength();\n@let _errorMessage = visibleErrorMessage();\n@let _required = required();\n@let _isInline = isInline();\n\n@if (isViewed()) {\n  <sd-view\n    [label]=\"_label\"\n    [labelTemplate]=\"sdLabelTemplate()\"\n    [value]=\"formControl.value\"\n    [display]=\"displayValue()\"\n    [hyperlink]=\"hyperlink()\"\n    [valueTemplate]=\"viewTemplate()\">\n  </sd-view>\n} @else if (_isInline) {\n  <sd-inline-text\n    [control]=\"activeControl()\"\n    [placeholder]=\"placeholder() || _label || ''\"\n    [clearable]=\"clearable() && !_required\"\n    [autoId]=\"autoId()\"\n    [state]=\"connectorState().invalid ? 'error' : 'auto'\"\n    (sdFocus)=\"onFocus()\"\n    (sdBlur)=\"onBlur()\"\n    (keyupEnter)=\"onKeyupEnter()\"\n    (cleared)=\"cleared.emit()\">\n  </sd-inline-text>\n} @else {\n  @if (!_appearance) {\n    <ng-content select=\"[sdLabel]\">\n      @if (_label) {\n        <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\n      }\n    </ng-content>\n  }\n\n  <div\n    class=\"d-flex align-items-center sd-input-container\"\n    [class.c-focused]=\"isFocused\"\n    [class.c-disabled]=\"formControl.disabled\"\n    (click)=\"onClick()\"\n    aria-hidden=\"true\">\n    <div class=\"sd-input-field-wrap\">\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=\"below\" name=\"info\"></sd-icon>\n            }\n          </mat-label>\n        }\n\n        <input\n          aria-hidden=\"true\"\n          [id]=\"id\"\n          [formControl]=\"activeControl()\"\n          [type]=\"effectiveType()\"\n          #control\n          matInput\n          [placeholder]=\"placeholder() || _label || ''\"\n          (keyup.enter)=\"onKeyupEnter()\"\n          (focus)=\"onFocus()\"\n          (blur)=\"onBlur()\"\n          [required]=\"_required\"\n          [readonly]=\"isReadonly()\"\n          [autocomplete]=\"id\"\n          autocorrect=\"off\"\n          [step]=\"1\"\n          [attr.inputmode]=\"inputMode()\"\n          [attr.maxlength]=\"maxDisplayLength()\"\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-minlength]=\"dataMinLength()\"\n          [attr.data-pattern]=\"dataPattern()\"\n          [attr.data-error-message]=\"dataErrorMessage()\"\n          (compositionstart)=\"onCompositionStart()\"\n          (compositionend)=\"onCompositionEnd($event)\" />\n\n        @if (!_hideInlineError && _errorMessage) {\n          <mat-error>{{ _errorMessage }}</mat-error>\n        }\n\n        <!-- why: nút clear render TRƯỚC error icon. Clear hover-gated (visibility:hidden) vẫn\n               chiếm chỗ trong layout → nếu đứng sau sẽ đẩy error icon \"tụt vào trong\". Đứng trước\n               thì error icon nằm sát mép phải, clear giữ slot vô hình bên trái. -->\n        @if (showClear()) {\n          <button type=\"button\" class=\"sd-clear-btn sd-hover\" matSuffix (click)=\"clear($event)\" title=\"Xóa\" aria-label=\"Xóa\">\n            <sd-icon name=\"close\"></sd-icon>\n          </button>\n        }\n\n        @if (_hideInlineError && _errorMessage) {\n          <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\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 && !_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.input.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":["ɵsdFormControlConnector"],"mappings":"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"}