{"version":3,"file":"xmagic-nz-formly-common.mjs","sources":["../../../lib/common/formly-box-templates.directive.ts","../../../lib/common/common.module.ts","../../../lib/common/formly-utils.ts","../../../lib/common/xmagic-nz-formly-common.ts"],"sourcesContent":["import {\r\n  AfterContentInit,\r\n  ContentChildren,\r\n  Directive,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  Output,\r\n  QueryList,\r\n  SimpleChange,\r\n  SimpleChanges,\r\n  TemplateRef\r\n} from '@angular/core';\r\nimport { NamedTemplate } from '@xmagic/nzx-antd/directive';\r\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\r\n\r\n@Directive({\r\n  selector: '[formly-box]',\r\n  exportAs: 'FormlyBox'\r\n})\r\nexport class FormlyBoxTemplates implements AfterContentInit, OnChanges {\r\n  private tplMap = new Map<string, TemplateRef<NzSafeAny>>();\r\n  @Input('formly-box') templateList?: TemplateList;\r\n  @Output() templateChange = new EventEmitter<Map<string, TemplateRef<NzSafeAny>>>();\r\n  @ContentChildren(NamedTemplate) namedTemplate!: QueryList<NamedTemplate<NzSafeAny>>;\r\n\r\n  get templates(): Map<string, TemplateRef<NzSafeAny>> {\r\n    return this.tplMap;\r\n  }\r\n\r\n  /**\r\n   * 根据模板名称获取TemplateRef\r\n   * @param templateName 模板名称\r\n   */\r\n  get(templateName: string): TemplateRef<NzSafeAny> | undefined {\r\n    return this.tplMap.get(templateName);\r\n  }\r\n\r\n  constructor() {}\r\n\r\n  ngAfterContentInit(): void {\r\n    this.update();\r\n    this.namedTemplate.changes.subscribe(v => {\r\n      this.update();\r\n    });\r\n  }\r\n\r\n  update(emitChange = true) {\r\n    this.tplMap.clear();\r\n    this.mergeTemplate(this.tplMap, emitChange);\r\n  }\r\n\r\n  ngOnChanges(changes: { [K in keyof this]?: SimpleChange } & SimpleChanges): void {\r\n    if (changes.templateList && !changes.templateList.isFirstChange()) {\r\n      this.update();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 合并参数模板\r\n   * @param tplMap\r\n   * @param emitChange\r\n   */\r\n  mergeTemplate(tplMap: Map<string, TemplateRef<NzSafeAny>>, emitChange = true) {\r\n    this.mergeTemplates(tplMap, this.templateList);\r\n    this.mergeQueryTemplate(tplMap, this.namedTemplate);\r\n    this.templateChange.emit(tplMap);\r\n  }\r\n\r\n  /**\r\n   * 合并content 模板\r\n   * @param tplMap\r\n   * @param templateList\r\n   * @private\r\n   */\r\n  private mergeQueryTemplate(\r\n    tplMap: Map<string, TemplateRef<NzSafeAny>>,\r\n    templateList?: QueryList<NamedTemplate<NzSafeAny>>\r\n  ): void {\r\n    if (templateList) {\r\n      templateList.forEach(v => {\r\n        tplMap.set(v.named, v.template);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 合并魔板列表\r\n   * @param tplMap 模板Map\r\n   * @param templateList\r\n   */\r\n  private mergeTemplates(tplMap: Map<string, TemplateRef<NzSafeAny>>, templateList?: TemplateList): void {\r\n    if (!templateList) {\r\n      return;\r\n    }\r\n\r\n    templateList.forEach(v => {\r\n      if (v instanceof NamedTemplate) {\r\n        tplMap.set(v.named, v.template);\r\n      } else {\r\n        const namedTpl = new NamedTemplate(v);\r\n        namedTpl.resolveName();\r\n        tplMap.set(namedTpl.named, namedTpl.template);\r\n      }\r\n    });\r\n\r\n    return;\r\n  }\r\n}\r\n\r\n/**\r\n * 魔板列表\r\n */\r\nexport type TemplateList =\r\n  | QueryList<TemplateRef<NzSafeAny>>\r\n  | QueryList<NamedTemplate<NzSafeAny>>\r\n  | NamedTemplate<NzSafeAny>[];\r\n","import { NgModule } from '@angular/core';\nimport { FormlyBoxTemplates } from './formly-box-templates.directive';\nimport { CommonModule } from '@angular/common';\n\nconst COMPONENT = [FormlyBoxTemplates];\n\n@NgModule({\n  declarations: COMPONENT,\n  imports: [CommonModule],\n  exports: COMPONENT\n})\nexport class FormlyCommonModule {}\n","import { TemplateRef } from '@angular/core';\r\nimport { NzSafeAny } from 'ng-zorro-antd/core/types';\r\nimport { NzDropDownDirective } from 'ng-zorro-antd/dropdown';\r\nimport { FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AsyncOption } from '@xmagic/nzx-antd/pipe';\r\nimport { FormlyBoxTemplates } from './formly-box-templates.directive';\r\n\r\n/**\r\n * 下拉菜单配置\r\n */\r\nexport interface DropdownWrapperOptions {\r\n  nzDropdown?: {\r\n    ref: string;\r\n    /**\r\n     * 菜单是否禁用\r\n     */\r\n    nzDisabled?: boolean;\r\n    /**\r\n     * 菜单弹出位置\r\n     */\r\n    nzPlacement?: 'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight';\r\n    /**\r\n     * 触发下拉的行为\r\n     */\r\n    nzTrigger?: 'click' | 'hover';\r\n    /**\r\n     * 点击后是否隐藏菜单\r\n     */\r\n    nzClickHide?: boolean;\r\n    /**\r\n     * 菜单是否显示，可双向绑定\r\n     */\r\n    nzVisible?: boolean;\r\n    /**\r\n     * 下拉根元素的类名称\r\n     */\r\n    nzOverlayClassName?: string;\r\n    /**\r\n     * 下拉根元素的样式\r\n     */\r\n    nzOverlayStyle?: object;\r\n    /**\r\n     * 菜单显示状态改变时调用，参数为 nzVisible\r\n     */\r\n    nzVisibleChange?: (evt: boolean, field: FormlyFieldConfig, instance: NzDropDownDirective) => void;\r\n  };\r\n}\r\n\r\n/**\r\n * 处理属性为模板类型, 根据模板名称处理成模板对象\r\n * @param value 数据对象\r\n * @param fieldTemplates 模板容器\r\n * @param propName 属性名\r\n * @param propTemplateName 模板属性名称\r\n */\r\nexport function resolveTplName<T = NzSafeAny>(\r\n  value: NzSafeAny,\r\n  fieldTemplates: FormlyBoxTemplates,\r\n  propName: string,\r\n  propTemplateName?: string\r\n): TemplateRef<T> | undefined {\r\n  if (value[propName]) {\r\n    return value[propName];\r\n  }\r\n  if (!fieldTemplates) {\r\n    return undefined;\r\n  }\r\n  const tplName = propTemplateName || getTplName(propName);\r\n  return fieldTemplates.get(value[tplName]);\r\n}\r\n\r\n/**\r\n * 处理属性为模板类型, 根据模板名称处理成模板对象列表\r\n * @param value 数据对象\r\n * @param fieldTemplates 模板容器\r\n * @param propName 属性名\r\n * @param propTemplateName 模板属性名称\r\n */\r\nexport function resolveTplNameArray<T = NzSafeAny>(\r\n  value: NzSafeAny,\r\n  fieldTemplates: FormlyBoxTemplates,\r\n  propName: string,\r\n  propTemplateName?: string\r\n): TemplateRef<T>[] {\r\n  if (value[propName] != null) {\r\n    return value[propName];\r\n  }\r\n  if (!fieldTemplates) {\r\n    return [];\r\n  }\r\n  const tplName = propTemplateName || getTplName(propName);\r\n  const tplValue = value[tplName];\r\n  if (Array.isArray(tplValue)) {\r\n    return tplValue.map(key => fieldTemplates.get(key)).filter(tpl => tpl) as TemplateRef<T>[];\r\n  }\r\n  return [];\r\n}\r\n\r\n/**\r\n * 根据属性名获取模板名称\r\n * @param propName 属性名\r\n */\r\nexport function getTplName(propName: string) {\r\n  return `${propName}Name`;\r\n}\r\n\r\n/**\r\n * 获取模板名称\r\n * @param value\r\n * @param propName\r\n * @param propTemplateName 模板属性名称\r\n */\r\nexport function hasTplNameValue(value: NzSafeAny, propName: string, propTemplateName?: string): boolean {\r\n  const tplName = propTemplateName || getTplName(propName);\r\n  return value[propName] || value[tplName];\r\n}\r\n\r\n/**\r\n * 获取根节点的FieldConfig\r\n * @param field 当前节点配置\r\n */\r\nexport function getRootFiled(field: FormlyFieldConfig) {\r\n  let p = field.parent;\r\n  while (p && p.parent) {\r\n    p = p.parent;\r\n  }\r\n  return p || field;\r\n}\r\n\r\n/**\r\n * 根据key获取指定FieldConfig\r\n * @param field 当前节点配置\r\n * @param key 配置的key\r\n */\r\nexport function findField(field: FormlyFieldConfig, key: string): FormlyFieldConfig | undefined {\r\n  const rootField = getRootFiled(field);\r\n  return rootField.get!(key);\r\n}\r\n\r\n/**\r\n * 异步配置信息\r\n */\r\nexport interface AsyncFormlyOptions<T extends NzSafeAny = NzSafeAny, U extends NzSafeAny = NzSafeAny>\r\n  extends AsyncOption {\r\n  /**\r\n   * 可选项数据源\r\n   */\r\n  options?: string | Observable<U[]> | Promise<U[]> | U[];\r\n}\r\n\r\n/**\r\n * 控件模板参数配置项\r\n */\r\nexport type ControlOptions = DropdownWrapperOptions &\r\n  Omit<FormlyFieldProps, 'options'> & {\r\n    valueChanges?: (value: NzSafeAny, field: NzFormlyFieldConfig) => void;\r\n    attributes?: {\r\n      style: string;\r\n      class: string;\r\n      id: string;\r\n      name: string;\r\n      [key: string]: string | number;\r\n    };\r\n  };\r\n\r\nexport interface NzFormlyFieldConfig<T extends ControlOptions = ControlOptions> extends FormlyFieldConfig {\r\n  /**\r\n   * 这是为模板扩展的属性，所有模板访问的属性都应该从这里访问\r\n   */\r\n  props?: T;\r\n  /**\r\n   * @deprecated 使用 `props` 代替\r\n   */\r\n  templateOptions?: T;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}