{"version":3,"file":"uofx-app-components-form.mjs","sources":["../../../projects/uofx-app-pack/form/src/error-block/error-block.component.ts","../../../projects/uofx-app-pack/form/src/error-block/error-block.component.html","../../../projects/uofx-app-pack/form/src/error-block/error-block.module.ts","../../../projects/uofx-app-pack/form/src/error-tip/error-tip.component.ts","../../../projects/uofx-app-pack/form/src/error-tip/error-tip.component.html","../../../projects/uofx-app-pack/form/src/error-tip/error-tip.module.ts","../../../projects/uofx-app-pack/form/src/field-base/field-name/field-name.component.ts","../../../projects/uofx-app-pack/form/src/field-base/field-name/field-name.component.html","../../../projects/uofx-app-pack/form/src/tools/form-tools.ts","../../../projects/uofx-app-pack/form/src/field-base/logic/form-field.logic.ts","../../../projects/uofx-app-pack/form/src/field-base/form-field-base.module.ts","../../../projects/uofx-app-pack/form/src/field-base/interface/form-field-base.interface.ts","../../../projects/uofx-app-pack/form/src/field-base/interface/form-field-write.interface.ts","../../../projects/uofx-app-pack/form/src/field-base/interface/form-field-view.interface.ts","../../../projects/uofx-app-pack/form/src/validators/validator.ts","../../../projects/uofx-app-pack/form/uofx-app-components-form.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'uofx-error-block',\r\n  templateUrl: './error-block.component.html',\r\n  styleUrls: ['./error-block.component.scss'],\r\n  host: { '[class.uofx-error-block]': 'true' },\r\n})\r\nexport class UofxErrorBlockComponent {\r\n  /** 顯示的訊息 */\r\n  @Input() errorMessage: Array<string>;\r\n  /** 訊息樣式(預設為 error，message 則為藍色、error 則為紅色) */\r\n  @Input() mode: 'message' | 'error' = 'error';\r\n}\r\n","<div *ngIf=\"errorMessage && errorMessage.length > 0\" class=\"content\" [ngClass]=\"{ message: mode === 'message' }\">\r\n  <section *ngFor=\"let msg of errorMessage\" class=\"item d-flex\">\r\n    <div class=\"dot\"></div>\r\n    <div class=\"msg flex-1\" [translate]=\"msg\"></div>\r\n  </section>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { UofxTranslateModule } from '@uofx/app-components';\r\nimport { UofxErrorBlockComponent } from './error-block.component';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, UofxTranslateModule],\r\n  exports: [UofxErrorBlockComponent],\r\n  declarations: [UofxErrorBlockComponent],\r\n  providers: [],\r\n})\r\nexport class UofxErrorBlockModule {}\r\n","import { AbstractControl, FormControl } from '@angular/forms';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'uofx-form-error-tip',\r\n  templateUrl: './error-tip.component.html',\r\n  styleUrls: ['./error-tip.component.scss'],\r\n  host: { '[class.e-error]': 'true' },\r\n})\r\nexport class UofxFormErrorTipComponent {\r\n  @Input() control: FormControl | AbstractControl;\r\n\r\n  // *UKEY:\"global.comm.form.validation.required\"\r\n  @Input() requiredText = 'global.comm.form.validation.required';\r\n  // *UKEY:\"global.comm.form.validation.file-required\"\r\n  @Input() fileRequiredText = 'global.comm.form.validation.file-required';\r\n  // *UKEY:\"global.comm.form.validation.duplicate\"\r\n  @Input() duplicateText = 'global.comm.form.validation.duplicate';\r\n  // *UKEY:\"global.comm.form.validation.not-exists\"\r\n  @Input() notExistsText = 'global.comm.form.validation.not-exists';\r\n  // *UKEY:\"global.comm.form.validation.format-incorrect\"\r\n  @Input() formatIncorrectText = 'global.comm.form.validation.format-incorrect';\r\n\r\n  /**\r\n   * errors: {\r\n   *  maxlength: {\r\n   *    requiredLength: 50\r\n   *  }\r\n   * }\r\n   */\r\n  // *UKEY:\"global.comm.form.validation.maxLength\"\r\n  @Input() maxLengthText = 'global.comm.form.validation.maxLength';\r\n  // *UKEY:\"global.comm.form.validation.minLength\"\r\n  @Input() minLengthText = 'global.comm.form.validation.minLength';\r\n  // *UKEY:\"global.comm.form.validation.only-digits-and-letters\"\r\n  @Input() onlyDigitsAndLettersText = 'global.comm.form.validation.only-digits-and-letters';\r\n  /**\r\n   * errors: {\r\n   *  notEqual: {\r\n   *  }\r\n   * }\r\n   */\r\n  // *UKEY:\"global.comm.form.validation.not-equal\"\r\n  @Input() notEqualText = 'global.comm.form.validation.not-equal';\r\n  private event = new CustomEvent('scrollToFixedPositionEvent', {});\r\n  onChange() {\r\n    if (this.control && this.control.dirty) {\r\n      document.dispatchEvent(this.event);\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","<div *ngIf=\"onChange()\"></div>\r\n<div *ngIf=\"control && control.dirty && control.errors\">\r\n  <div *ngIf=\"control.hasError('required')\" [translate]=\"requiredText\"></div>\r\n  <div *ngIf=\"control.hasError('fileRequired')\" [translate]=\"fileRequiredText\"></div>\r\n  <div *ngIf=\"control.hasError('duplicate')\" [translate]=\"duplicateText\"></div>\r\n  <div *ngIf=\"control.hasError('not-exists')\" [translate]=\"notExistsText\"></div>\r\n  <div *ngIf=\"control.hasError('email')\" [translate]=\"formatIncorrectText\"></div>\r\n  <div\r\n    *ngIf=\"control.hasError('maxlength')\"\r\n    [translate]=\"maxLengthText\"\r\n    [translateParams]=\"control.errors && control.errors['maxlength']\"></div>\r\n  <div\r\n    *ngIf=\"control.hasError('minlength')\"\r\n    [translate]=\"minLengthText\"\r\n    [translateParams]=\"control.errors && control.errors['minlength']\"></div>\r\n  <div *ngIf=\"control.hasError('onlyDigitsAndLetters')\" [translate]=\"onlyDigitsAndLettersText\"></div>\r\n  <div *ngIf=\"control.hasError('pattern')\" [translate]=\"formatIncorrectText\"></div>\r\n  <div *ngIf=\"control.hasError('notEqual')\" [translate]=\"notEqualText\"></div>\r\n  <div *ngIf=\"control.hasError('phoneNumber')\" [translate]=\"formatIncorrectText\"></div>\r\n  <div *ngIf=\"control.hasError('idCardNumber')\" [translate]=\"formatIncorrectText\"></div>\r\n  <div *ngIf=\"control.hasError('telephone')\" [translate]=\"formatIncorrectText\"></div>\r\n  <div *ngIf=\"control.hasError('unifiedBusinessNo')\" [translate]=\"formatIncorrectText\"></div>\r\n  <ng-content></ng-content>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { UofxTranslateModule } from '@uofx/app-components';\r\nimport { UofxFormErrorTipComponent } from './error-tip.component';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, UofxTranslateModule],\r\n  exports: [UofxFormErrorTipComponent],\r\n  declarations: [UofxFormErrorTipComponent],\r\n  providers: [],\r\n})\r\nexport class UofxErrorTipModule {}\r\n","import { Component, Input } from '@angular/core';\r\nimport { InputBoolean } from '@uofx/core';\r\n\r\n@Component({\r\n  selector: 'uofx-form-field-name',\r\n  templateUrl: './field-name.component.html',\r\n  styleUrls: ['field-name.component.scss'],\r\n})\r\nexport class UofxFormFieldNameComponent {\r\n  @Input() name: string;\r\n  @Input() @InputBoolean() required: boolean;\r\n}\r\n","<label class=\"text-d-b1-m\" [attr.uofx-required]=\"required ? '' : null\">{{ name }}</label>\r\n","import { AbstractControl, FormArray, FormGroup } from '@angular/forms';\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UofxFormTools {\r\n  /**\r\n   * 重設 FormGroup 的驗證狀態\r\n   * @param {FormGroup} form\r\n   * @memberof UofxFormTools\r\n   */\r\n  resetFormValidators(form: FormGroup) {\r\n    // 因為某些頁面的 Form 初始寫法，會導致 API 資料回來後直接變成 form dirty (下拉選單 ex.uofx-timezone-select )\r\n    // 需要 setTimeout 0 才能清掉\r\n    setTimeout(() => {\r\n      form.markAsPristine();\r\n      form.markAsUntouched();\r\n      form.updateValueAndValidity();\r\n    }, 0);\r\n  }\r\n\r\n  /**\r\n   * 重設 FormControl 的驗證狀態\r\n   * @param {AbstractControl} control\r\n   * @memberof UofxFormTools\r\n   */\r\n  resetFormCtrlValidators(control: AbstractControl, emitEvent: boolean = true) {\r\n    control.markAsPristine();\r\n    control.markAsUntouched();\r\n    control.updateValueAndValidity({ emitEvent });\r\n  }\r\n\r\n  /**\r\n   * 設定 FormGroup 的驗證狀態\r\n   * @param {FormGroup} form\r\n   * @memberof UofxFormTools\r\n   */\r\n  markFormGroup(form: FormGroup) {\r\n    Object.keys(form.controls).forEach((key) => {\r\n      const control = form.get(key);\r\n      this.markControlBasedOnType(control);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 設定 FormArray 的驗證狀態\r\n   * @param {FormArray} formArray\r\n   * @memberof UofxFormTools\r\n   */\r\n  markFormArray(formArray: FormArray) {\r\n    formArray.controls.forEach((control) => {\r\n      this.markControlBasedOnType(control);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 設定 FormControl 的驗證狀態\r\n   * @param {AbstractControl} control\r\n   * @memberof UofxFormTools\r\n   */\r\n  markFormControl(control: AbstractControl, emitEvent: boolean = true) {\r\n    control.markAsDirty();\r\n    control.markAsTouched();\r\n    control.updateValueAndValidity({ emitEvent });\r\n  }\r\n\r\n  /**\r\n   * 根據傳入的 FormControl 類型決定要呼叫的驗證狀態方法\r\n   * @private\r\n   * @param {(FormArray | FormGroup | AbstractControl)} control\r\n   * @memberof UofxFormTools\r\n   */\r\n  private markControlBasedOnType(control: FormArray | FormGroup | AbstractControl) {\r\n    if (control instanceof FormArray) {\r\n      this.markFormArray(control);\r\n    } else if (control instanceof FormGroup) {\r\n      this.markFormGroup(control);\r\n    } else {\r\n      this.markFormControl(control);\r\n    }\r\n  }\r\n}\r\n","import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { UofxFormTools } from '../../tools/form-tools';\r\n\r\n@Injectable()\r\nexport class UofxFormFieldLogic {\r\n  constructor(private formTools: UofxFormTools) {}\r\n\r\n  /**\r\n   * @deprecated [2026R1 移除] 訂閱parent form的status changes，送出時，一併顯示欄位內整張form的錯誤訊息\r\n   * -\r\n   * @param {FormGroup} parentForm 整張表單 apply-form or sign-form\r\n   * @param {FormControl} selfControl 勾在表單上的各欄位control\r\n   * @param {FormGroup} form 欄位裡獨立的form\r\n   * @param {() => void} callback invalid時執行的callback (可用於觸發變更檢測)\r\n   * @memberof UofxFormFieldLogic\r\n   */\r\n  public parentFormBinding(parentForm: FormGroup, selfControl: FormControl, form: FormGroup, callback?: () => void) {\r\n    // 已經call過就不再markFormGroup，目的: 節流，避免過多次重複呼叫\r\n    let isCall = false;\r\n\r\n    parentForm.statusChanges.subscribe({\r\n      next: (res) => {\r\n        // form驗證有過時才會重置isCall\r\n        if (form.valid) {\r\n          isCall = false;\r\n        }\r\n        // 表單顯示錯誤訊息\r\n        if (res === 'INVALID' && selfControl.dirty && !isCall) {\r\n          this.formTools.markFormGroup(form);\r\n          isCall = true;\r\n          if (callback) callback();\r\n        }\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 放在form.valueChanges訂閱中，每次更新selfControl的值\r\n   * -\r\n   * 目的: 每次form.valueChanges，根據form.valid，更新selfControl (form.invalid時selfControl更新為null)\r\n   * @param {FormControl} selfControl 勾在表單上的各欄位control\r\n   * @param {FormGroup} form 欄位裡獨立的form\r\n   * @param {any} formModel 傳進來要更新selfControl的model\r\n   * @memberof UofxFormFieldLogic\r\n   */\r\n  public setSelfControlValue<T>(selfControl: FormControl, form: FormGroup, formModel: T) {\r\n    // 表單驗證通過時，才更新selfControl的值 (selfControl有值，才會執行checkBeforeSubmit)\r\n    // (1) emitEvent: false，避免parentForm訂閱重跑markFormGroup(造成無限循環)\r\n    if (form.valid) {\r\n      selfControl.setValue(formModel, { emitEvent: false });\r\n    } else {\r\n      selfControl.setValue(null, { emitEvent: false });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 放在checkBeforeSubmit中，如果是暫存就不需要驗證必填，且清除form control error\r\n   * -\r\n   * @param {boolean} checkValidator 是否檢查validator\r\n   * @param {FormControl} selfControl 勾在表單上的各欄位control\r\n   * @param {FormGroup} form 欄位裡獨立的form\r\n   * @memberof UofxFormFieldLogic\r\n   */\r\n  public checkValidators(checkValidator: boolean, selfControl: FormControl, form: FormGroup) {\r\n    /**\r\n     * if: 表單決策鈕不用檢查必填，其餘驗證還是要檢查\r\n     * else if: 所有驗證都要檢查，但form已經invalid就不用再updateValueAndValidity()\r\n     */\r\n    if (!checkValidator && selfControl.hasError('required')) {\r\n      delete selfControl.errors['required'];\r\n      selfControl.setErrors(Object.keys(selfControl.errors).length === 0 ? null : selfControl.errors, {\r\n        emitEvent: false,\r\n      });\r\n    } else if (checkValidator && selfControl.valid) {\r\n      // 執行這行的目的是為了檢查欄位本身validator內的驗證，ex: 必填...等\r\n      selfControl.updateValueAndValidity();\r\n    }\r\n\r\n    // 如果是暫存等按鈕，清除所有control error\r\n    if (checkValidator === false) {\r\n      this.clearFormError(form);\r\n    }\r\n  }\r\n\r\n  /** 清除form error */\r\n  public clearFormError(form: FormGroup) {\r\n    Object.keys(form.controls).forEach((key) => {\r\n      const control = form.get(key);\r\n      this.clearErrorBasedOnType(control);\r\n    });\r\n  }\r\n  /** 清除formArray error */\r\n  private clearFormArrayError(formArray: FormArray) {\r\n    formArray.setErrors(null);\r\n    formArray.controls.forEach((control) => {\r\n      this.clearErrorBasedOnType(control);\r\n    });\r\n  }\r\n\r\n  /** 根據傳入的 control 類型決定要呼叫的clearError方法 */\r\n  private clearErrorBasedOnType(control: FormArray | FormGroup | AbstractControl) {\r\n    if (control instanceof FormArray) {\r\n      this.clearFormArrayError(control);\r\n    } else if (control instanceof FormGroup) {\r\n      this.clearFormError(control);\r\n    } else {\r\n      control.setErrors(null);\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { UofxFormFieldNameComponent } from './field-name/field-name.component';\r\nimport { UofxFormFieldLogic } from './logic/form-field.logic';\r\n\r\n@NgModule({\r\n  declarations: [UofxFormFieldNameComponent],\r\n  imports: [CommonModule, FormsModule, ReactiveFormsModule],\r\n  exports: [UofxFormFieldNameComponent],\r\n  providers: [UofxFormFieldLogic],\r\n})\r\nexport class UofxFormFieldBaseModule {}\r\n","import { Subject } from 'rxjs';\r\n\r\n/** 動態欄位類型 */\r\nexport enum BpmFwMode {\r\n  /** 設計 */\r\n  Design = 'design',\r\n  /** 填寫 */\r\n  Write = 'write',\r\n  /** 觀看 */\r\n  View = 'view',\r\n  /** 列印 */\r\n  Print = 'print',\r\n  /** 屬性 */\r\n  Props = 'props',\r\n}\r\n\r\n/** 欄位-共用屬性 */\r\nexport abstract class BpmFwBaseComponent {\r\n  /** 表單設計草稿 Id */\r\n  scriptId: string;\r\n  /** 欄位id */\r\n  id: string;\r\n  /** 欄位代碼 */\r\n  code: string;\r\n  /** 欄位名稱 */\r\n  name: string;\r\n  /** 欄位說明 */\r\n  descr: string;\r\n  /** 欄位屬性 */\r\n  exProps: any;\r\n  /** 是否為可編輯狀態 */\r\n  editable: boolean;\r\n  /** 是否為必填 */\r\n  required: boolean;\r\n  /** 外掛欄位設定資訊 */\r\n  pluginSetting: BpmFieldPluginSettingModel;\r\n  /** [前端使用] 由各個欄位向field layout通知要做什麼邏輯的Subject */\r\n  fieldLayoutSub$?: Subject<FieldActionModel>;\r\n  /** [前端使用] 動態欄位類型 */\r\n  mode: BpmFwMode;\r\n}\r\n\r\n/** 外掛欄位設定資訊 */\r\nexport interface BpmFieldPluginSettingModel {\r\n  /** 外掛欄位站台網址 */\r\n  entryHost: string;\r\n}\r\n\r\n/**\r\n * 各欄位組成此model拋給field layout判斷要執行什麼邏輯\r\n * -\r\n * ex: 複製欄位、欄位互動皆需要從欄位拋出去告知field layout\r\n */\r\nexport interface FieldActionModel {\r\n  /** 要執行的邏輯類型 */\r\n  type: FieldActionType;\r\n  /** 需要執行邏輯的相關資訊 */\r\n  info: any;\r\n}\r\n\r\n/** 各欄位要跟field layout說要執行什麼邏輯的類型依據 */\r\nexport enum FieldActionType {\r\n  /** 欄位設定互動(下拉、單選、複選) */\r\n  Interaction = 0,\r\n  /** 由按鈕欄位通知欄位互動 */\r\n  InteractionButtonToField = 1,\r\n  /** 由欄位通知按鈕欄位繼續互動下一個項目 */\r\n  InteractionFieldToButton = 2,\r\n  /** 填入欄位代號，取得該欄位填寫的資料 */\r\n  GetValue = 3,\r\n  /** 取得用於歸檔的檔案欄位資訊 */\r\n  GetArchiveFieldInfo = 4,\r\n}\r\n\r\n/** 透過欄位id取得名稱 */\r\nexport interface FieldGetArchiveFieldInfoModel {\r\n  /** 歸檔欄位綁定的欄位id */\r\n  fieldId: string;\r\n  /** field layout會用來把歸檔欄位需要的資訊回傳 */\r\n  fwSubject$: Subject<FieldActionModel>;\r\n}\r\n\r\n/** 欄位填寫型態 */\r\nexport enum FieldFillType {\r\n  /** 必填 */\r\n  RequireFill = 0,\r\n  /** 非必填 */\r\n  None = 1,\r\n  /** 不能填寫 */\r\n  ReadOnly = 2,\r\n  /** 不能填且不顯示 */\r\n  NotDisplay = 3,\r\n}\r\n\r\n/** 表單節點的資訊 */\r\nexport interface BpmFwTaskNodeModel {\r\n  /** 站點 Node Id */\r\n  nodeId: string;\r\n  /** 表單 Task Id (目前只有純檢視表單的欄位會有，串外部的reqModel會用到) */\r\n  taskId?: string;\r\n  /** 申請者id */\r\n  applicantId: string;\r\n  /** 申請者部門(預設主要部門) */\r\n  applicantDeptName: string;\r\n  /** 申請時間 */\r\n  applicantDate: string;\r\n  /** 站點代號 */\r\n  codeOfProcessSite?: string;\r\n  /** 用來決定要使用哪支表單api (目前用在明細欄位細項) */\r\n  formType?: FormType;\r\n  /** 表單變數 */\r\n  variables?: Array<BpmFwTaskVariableModel>;\r\n  /** 草稿申請或全新申請 */\r\n  applyType?: ApplyType;\r\n}\r\n\r\n/** 欄位內表單變數 */\r\nexport interface BpmFwTaskVariableModel {\r\n  id: string;\r\n  code: string;\r\n  name: string;\r\n  value: string;\r\n}\r\n\r\n/** 用來決定要使用哪支表單api */\r\nexport enum FormType {\r\n  /** 申請 */\r\n  Apply,\r\n  /** 待簽表單 */\r\n  Sign,\r\n  /** 我的單據-我申請的 */\r\n  MyApply,\r\n  /** 查閱表單 */\r\n  Bylook,\r\n  /** 站內搜尋 */\r\n  SiteSearch,\r\n  /** 關聯表單 */\r\n  FormRel,\r\n  /** 起單資訊 */\r\n  CreateFormInfo,\r\n}\r\n\r\n/** 下拉、單選、複選-互動設定 model */\r\nexport interface InteractorsPropsModel {\r\n  /** 互動類型 */\r\n  interactorType: InteractorType;\r\n  /** 欄位id */\r\n  fieldId: string;\r\n}\r\n\r\n/** 欄位互動類型 */\r\nexport enum InteractorType {\r\n  /** 選取/勾選 */\r\n  Select = 0,\r\n}\r\n\r\n/** 依照欄位代號取得該欄位填寫的資料 */\r\nexport interface FieldGetValueModel {\r\n  /** 自己的欄位id */\r\n  fieldId: string;\r\n  /** 欲取得填寫資料的欄位代號 */\r\n  fieldCode: string;\r\n}\r\n\r\n/** 草稿申請或全新申請 */\r\nexport enum ApplyType {\r\n  /** 從暫存申請 */\r\n  Draft,\r\n  /** 全新申請(含範本) */\r\n  New,\r\n}\r\n","import { EventEmitter } from '@angular/core';\r\nimport { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\r\nimport { ErrorExModel } from '@uofx/core';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport {\r\n  BpmFwBaseComponent,\r\n  BpmFwTaskNodeModel,\r\n  FieldActionModel,\r\n  FieldActionType,\r\n  FieldFillType,\r\n  FieldGetValueModel,\r\n} from './form-field-base.interface';\r\n\r\nexport abstract class BpmFwWriteComponent extends BpmFwBaseComponent {\r\n  /** 用於自動取消訂閱 */\r\n  protected readonly destroy$ = new Subject<void>();\r\n  /**\r\n   * 表單內所有的欄位 control 集合\r\n   *\r\n   * control 可使用「代碼」取得\r\n   *\r\n   * 請參考 `getTargetFieldValue(...)` 函式 */\r\n  parentForm: FormGroup = new FormGroup({});\r\n  /** 在表單所有欄位中，自己的 Control */\r\n  selfControl: FormControl;\r\n\r\n  /** 驗證後的錯誤代碼 */\r\n  errors?: Array<ErrorExModel>;\r\n  /** 將表單資訊傳遞給欄位 */\r\n  taskNodeInfo: BpmFwTaskNodeModel;\r\n  /** 欄位值 */\r\n  value: any;\r\n  /** 資料目前會跟value一樣 */\r\n  displayValue: string;\r\n  /** value 的資料來源是否為外部給值填入的 */\r\n  isFromExternal?: boolean;\r\n  /** 申請者權限(必填0、非必填1(預設)、不能填寫2、不能填且不能看3) */\r\n  applyRequired: FieldFillType;\r\n  /** [前端UI] 由field layout告訴各個欄位要做什麼邏輯的Subject */\r\n  fwSubject$?: Subject<any>;\r\n\r\n  // -------------是否需要設定預設值---------\r\n  /** [用於明細欄位]目前欄位的\"殼\"的欄位類型 */\r\n  parentFieldTypeId?: string;\r\n  /** [用於明細欄位]是否為新增 */\r\n  isAddItem?: boolean;\r\n  //----------------------------------------\r\n\r\n  /**\r\n   * 表單送出前會呼叫此函式做檢查\r\n   * @param {boolean} [checkDefaultValidator=true] 告訴欄位在checkBeforeSubmit是否要檢查預設validator\r\n   * @return {*}  預設回傳 Promise.resolve(true)\r\n   * @returns 預設回傳 Promise.resolve(true)\r\n   */\r\n  checkBeforeSubmit(checkDefaultValidator = true): Promise<boolean> {\r\n    return Promise.resolve(true);\r\n  }\r\n  /**\r\n   * 拋出欄位值變更\r\n   *\r\n   * 此處送出的值才是真實會存進的 value，selfControl 可以放入作為驗證用的 value\r\n   */\r\n  valueChanges = new EventEmitter<any>();\r\n\r\n  //#region === 欄位相關工具 ===\r\n  /** 欄位工具 */\r\n  public readonly fieldUtils: IFieldUtil = {\r\n    syncParentFormStatusToInnerForm: this.syncParentFormStatusToInnerForm.bind(this),\r\n    syncParentFormStatusToInnerCtrl: this.syncParentFormStatusToInnerCtrl.bind(this),\r\n    destroySubscriptions: this.destroySubscriptions.bind(this),\r\n  };\r\n\r\n  /** 用來同步表單狀態 */\r\n  private syncParentFormStatusToInnerForm(innerForm: FormGroup) {\r\n    // 監聽父表單狀態變化\r\n    this.parentForm.statusChanges.pipe(takeUntil(this.destroy$)).subscribe({\r\n      next: (status) => {\r\n        // 父表單狀態為 INVALID，且 selfControl 已被修改，且尚未標記 dirty，則標記子表單為 dirty\r\n        if (status === 'INVALID' && this.selfControl.dirty) {\r\n          this.markControlAsDirty(innerForm);\r\n        }\r\n      },\r\n    });\r\n\r\n    // 監聽子表單狀態變化\r\n    innerForm.statusChanges.pipe(takeUntil(this.destroy$)).subscribe({\r\n      next: () => {\r\n        innerForm.invalid\r\n          ? this.selfControl.setErrors({ required: true }, { emitEvent: false })\r\n          : this.selfControl.setErrors(null, { emitEvent: false });\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 用來同步表單狀態\r\n   * @private\r\n   * @param {FormControl} innerControl 父表單狀態為 INVALID，且 selfControl 已被修改，則標記子 control 為 dirty\r\n   * @param {() => void} [afterSync] 如有提供 callback，會在子 control 同步完成後執行\r\n   * @memberof BpmFwWriteComponent\r\n   */\r\n  private syncParentFormStatusToInnerCtrl(innerControl: FormControl, afterSync?: () => void) {\r\n    this.parentForm.statusChanges.pipe(takeUntil(this.destroy$)).subscribe({\r\n      next: (status) => {\r\n        if (status === 'INVALID' && this.selfControl.dirty) {\r\n          innerControl.markAsDirty();\r\n          innerControl.updateValueAndValidity({ emitEvent: false });\r\n           afterSync?.();\r\n        }\r\n      },\r\n    });\r\n  }\r\n\r\n  /** 銷毀訂閱 */\r\n  private destroySubscriptions() {\r\n    // 所有 takeUntil(this.destroy$) 的訂閱都會自動取消\r\n    this.destroy$.next();\r\n    // 結束這個 Subject\r\n    this.destroy$.complete();\r\n  }\r\n  //#endregion\r\n\r\n  //#region === Plugin 相關工具 ===\r\n  /**\r\n   * @deprecated [2026R1 移除] 取得其他欄位的值，請改用 this.pluginUtil.getTargetFieldValue(targetCode)\r\n   * @param targetCode 目標欄位的代號\r\n   * @memberof BpmFwWriteComponent\r\n   */\r\n  protected getTargetFieldValue(targetCode: string): Promise<any> {\r\n    return this.getTargetFieldValue2(targetCode);\r\n  }\r\n\r\n  /** 外掛欄位工具 */\r\n  public readonly pluginUtils: IPluginUtils = {\r\n    getTargetFieldValue: this.getTargetFieldValue2.bind(this),\r\n  };\r\n\r\n  /**\r\n   * 取得其他欄位的值\r\n   * @param targetCode 目標欄位的代號\r\n   * @memberof BpmFwWriteComponent\r\n   */\r\n  private getTargetFieldValue2(targetCode: string): Promise<any> {\r\n    return new Promise((resolve) => {\r\n      const sub$ = this.fwSubject$.subscribe((actionModel: FieldActionModel) => {\r\n        if (actionModel.type === FieldActionType.GetValue) resolve(actionModel.info);\r\n        sub$.unsubscribe();\r\n      });\r\n      this.fieldLayoutSub$.next({\r\n        type: FieldActionType.GetValue,\r\n        info: <FieldGetValueModel>{\r\n          // 自己的欄位\r\n          fieldId: this.id,\r\n          // 目標欄位代號\r\n          fieldCode: targetCode,\r\n        },\r\n      });\r\n    });\r\n  }\r\n  //#endregion\r\n\r\n  /**\r\n   * 遞迴設定控制項為 dirty、touched 並觸發驗證\r\n   *\r\n   * - 可處理 FormGroup、FormArray、FormControl\r\n   *\r\n   * @param control 控制項\r\n   */\r\n  private markControlAsDirty(control: AbstractControl) {\r\n    if (control instanceof FormGroup || control instanceof FormArray) {\r\n      Object.values(control.controls).forEach((child) => this.markControlAsDirty(child));\r\n    } else {\r\n      control.markAsDirty();\r\n      control.markAsTouched();\r\n      control.updateValueAndValidity({ emitEvent: false });\r\n    }\r\n  }\r\n}\r\n\r\n// #region 欄位工具\r\n\r\n/** 欄位工具介面 */\r\ninterface IFieldUtil {\r\n  /**\r\n   * 欄位裡的 FormGroup 與整張表單 做 statusValues 的同步\r\n   * - 父表單狀態為 INVALID，且 selfControl 已被修改，且尚未標記 dirty，則標記子表單為 dirty\r\n   * - 當子表單狀態變為 INVALID，則會將 selfControl 設定錯誤狀態\r\n   * - 記得在使用完後要在 ngOnDestroy() 呼叫 destroySubscriptions() 來取消訂閱\r\n   * @param innerForm 要同步狀態的子 FormGroup\r\n   */\r\n  readonly syncParentFormStatusToInnerForm: syncParentFormStatusToInnerFormFn;\r\n  /**\r\n   * 欄位裡的 FormControl 與整張表單做 statusValues 的同步\r\n   * - 父表單狀態為 INVALID，且 selfControl 已被修改，則標記子 control 為 dirty\r\n   * - 如有提供 callback，會在子 control 同步完成後執行\r\n   * @param innerControl 要同步狀態的子 FormControl\r\n   */\r\n  readonly syncParentFormStatusToInnerCtrl: syncParentFormStatusToInnerCtrlFn;\r\n  /**\r\n   * 取消訂閱\r\n   */\r\n  readonly destroySubscriptions: () => void;\r\n}\r\n\r\ntype syncParentFormStatusToInnerFormFn = (innerForm: FormGroup) => void;\r\ntype syncParentFormStatusToInnerCtrlFn = (innerControl: FormControl, afterSync?: () => void) => void;\r\n// #endregion\r\n\r\n// #region Plugin 工具\r\n\r\n/** Plugin 工具介面 */\r\ninterface IPluginUtils {\r\n  /**\r\n   * 取得其他欄位的值\r\n   * @param targetCode 目標欄位的代號\r\n   */\r\n  readonly getTargetFieldValue: getTargetFieldValueFn;\r\n}\r\ntype getTargetFieldValueFn = (targetCode: string) => Promise<any>;\r\n\r\n// #endregion\r\n","import { BpmFwBaseComponent } from './form-field-base.interface';\r\nimport { ErrorExModel } from '@uofx/core';\r\nimport { FormControl } from '@angular/forms';\r\n\r\n/** 表單欄位-觀看頁基底 */\r\nexport abstract class BpmFwViewComponent extends BpmFwBaseComponent {\r\n  /** 表單內所有欄位中，自己的 control */\r\n  selfControl: FormControl;\r\n  /** 欄位值 */\r\n  value: any;\r\n  /** 驗證後的錯誤資訊 */\r\n  errors?: Array<ErrorExModel>;\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport interface ValidationResult {\r\n  [key: string]: boolean;\r\n}\r\n// TODO: APP與WEB各別有UofxValidators，如有調整時請記得互相檢查。\r\nexport class UofxValidators {\r\n  /** 只允許數字或字母 */\r\n  public static onlyDigitsOrLetters(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^[A-Za-z0-9]*$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { onlyDigitsOrLetters: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * 驗證密碼\r\n   * @description 密碼原則: 密碼長度為6~20，並且必須包含一個英文及一個數字\r\n   * @description 增強型密碼原則: 密碼長度至少為8~20，並且必須包含大小寫字母、數字和符號\r\n   * @param {AbstractControl} control\r\n   * @param {number} isStrong 密碼原則是否設定為增強型\r\n   */\r\n  public static passwordRule(control: AbstractControl, isStrong: number): ValidationResult {\r\n    let regex;\r\n\r\n    if (isStrong === 1) regex = new RegExp(/^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\\W).{8,20}$/);\r\n    else regex = new RegExp(/^(?=.*\\d)(?=.*[a-zA-Z]).{6,20}$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { passwordRule: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 手機號碼 0912345678 or 0912-345678 or 0912-345-678 */\r\n  public static phoneNumber(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^09\\d{8}$|^09\\d{2}-\\d{3}-\\d{3}$|^09\\d{2}-\\d{6}$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { phoneNumber: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 身分證字號 或 外籍居留證 */\r\n  public static idCardNumber(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^[A-Z]{1}[1-2]{1}\\d{8}$|^[A-Z][A-D]\\d{8}$|^[A-Z]{1}[8-9]{1}\\d{8}$/);\r\n    const idCardNumber = <string>control.value;\r\n\r\n    if (idCardNumber) {\r\n      // step 1：檢查身分證的字數跟格式\r\n      if (!regex.test(idCardNumber)) {\r\n        return { idCardNumber: true };\r\n      }\r\n      // step 2：檢查是否為有效的身分證，相關內容可以參考\r\n      // https://cynthiachuang.github.io/CheckUID/\r\n      // https://cynthiachuang.github.io/Check-Resident-Certificate-Number/\r\n\r\n      // 身分證區域代碼\r\n      const conver = 'ABCDEFGHJKLMNPQRSTUVXYWZIO';\r\n      // 身分證每一碼的權重\r\n      const weights = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1];\r\n      // 要驗證的身分證&新版居留證\r\n      let verifyId = '';\r\n      // 舊版居留證\r\n      let residentVerifyId = '';\r\n      // 進行權重加總時，紀錄目前是身分證第幾碼\r\n      let checkSum = 0;\r\n      let residentCheckSum = 0;\r\n\r\n      verifyId = String(conver.indexOf(idCardNumber[0]) + 10) + idCardNumber.slice(1);\r\n      residentVerifyId =\r\n        String(conver.indexOf(idCardNumber[0]) + 10) +\r\n        String((conver.indexOf(idCardNumber[1]) + 10) % 10) +\r\n        idCardNumber.slice(2);\r\n\r\n      // 身分證&新版居留證\r\n      for (let i = 0; i < verifyId.length; i++) {\r\n        const c = parseInt(verifyId[i]);\r\n        const w = weights[i];\r\n        checkSum += c * w;\r\n      }\r\n      // 舊版居留證\r\n      for (let i = 0; i < residentVerifyId.length; i++) {\r\n        const c = parseInt(residentVerifyId[i]);\r\n        const w = weights[i];\r\n        residentCheckSum += c * w;\r\n      }\r\n      // 若總和不是10的倍數，就不是有效的身分證\r\n      if (checkSum % 10 !== 0 && residentCheckSum % 10 !== 0) {\r\n        return { idCardNumber: true };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /** 代碼規則 */\r\n  public static codeRule(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^[A-Za-z0-9]*$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { codeRule: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 市內電話：中間須包含 - 符號，ex. 07-9706789、075-9706789、0756-9706789、0756-97067899  */\r\n\r\n  public static telephone(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^\\d{2,4}-\\d{7,8}$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { telephone: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 統一編號：8位數字，ex.22311556 */\r\n  public static unifiedBusinessNo(control: AbstractControl): ValidationResult {\r\n    const regex = new RegExp(/^\\d{8}$/);\r\n\r\n    if (control.value && !regex.test(control.value)) {\r\n      return { unifiedBusinessNo: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 驗證最小日期 */\r\n  public static dateMin(minDate: Date | string): ValidatorFn {\r\n    if (typeof minDate === 'string') minDate = new Date(minDate);\r\n\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      let controlValue = control.value;\r\n      if (typeof controlValue === 'string') controlValue = new Date(controlValue);\r\n\r\n      return minDate < controlValue ? null : { dateMin: minDate };\r\n    };\r\n  }\r\n\r\n  /** 驗證最大日期 */\r\n  public static dateMax(maxDate: Date | string): ValidatorFn {\r\n    if (typeof maxDate === 'string') maxDate = new Date(maxDate);\r\n\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      let controlValue = control.value;\r\n      if (typeof controlValue === 'string') controlValue = new Date(controlValue);\r\n\r\n      return controlValue < maxDate ? null : { dateMax: maxDate };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 用於結束日期，判斷結束日期必須晚於(或等於)開始日期\r\n   * -\r\n   * 起訖在不同control裡面\r\n   */\r\n  public static compareStartDate(startDateControl: AbstractControl, allowEqual: boolean = false): ValidatorFn {\r\n    return (control: AbstractControl): ValidationErrors | null => {\r\n      // 處理開始日期\r\n      let startDate = startDateControl.value;\r\n      if (typeof startDate === 'string') startDate = new Date(startDate);\r\n\r\n      // 處理結束日期\r\n      let controlValue = control.value;\r\n      if (typeof controlValue === 'string') controlValue = new Date(controlValue);\r\n\r\n      const isValid = allowEqual ? startDate <= controlValue : startDate < controlValue;\r\n      return isValid ? null : { compareStartDate: true };\r\n    };\r\n  }\r\n\r\n  /**\r\n   * 用於ejs-daterangepicker，結束日期必須晚於開始日期\r\n   * -\r\n   * 起訖在同一個control裡面\r\n   */\r\n  public static compareDateRangePicker(control: AbstractControl): ValidationResult {\r\n    if (control.value && Array.isArray(control.value)) {\r\n      return control.value[0].toISOString() > control.value[1].toISOString() ? { compareDateRangePicker: true } : null;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /** 必填時不允許純空格字串 */\r\n  public static notAllowedSpaceString(control: AbstractControl): ValidationResult {\r\n    if (control.value && typeof control.value === 'string' && control.value.trim().length === 0) {\r\n      return { required: true };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * @static 檔案必填\r\n   * @param {AbstractControl} control\r\n   * @description control.value 會是一個檔案物件，裡面有 files 陣列，陣列長度為0代表沒有檔案\r\n   * @return {*} {ValidationResult} 若驗證失敗，回傳 { fileRequired: true }，驗證成功回傳 null\r\n   * @memberof UofxValidators\r\n   */\r\n  public static fileRequired(control: AbstractControl): ValidationResult {\r\n    if (!control.value || (control.value && control.value.files.length === 0)) {\r\n      return { fileRequired: true };\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UofxFormTools"],"mappings":"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"}