UNPKG

@ohayojp/form

Version:
918 lines 86.8 kB
/** * @fileoverview added by tsickle * Generated from: src/sf.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __decorate, __metadata } from "tslib"; import { Platform } from '@angular/cdk/platform'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { ACLService } from '@ohayojp/acl'; import { OHAYO_I18N_TOKEN, OhayoLocaleService } from '@ohayojp/theme'; import { OhayoConfigService, deepCopy, InputBoolean } from '@ohayojp/util'; import { merge, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; import { mergeConfig } from './config'; import { PropertyGroup } from './model/form.property'; import { FormPropertyFactory } from './model/form.property.factory'; import { TerminatorService } from './terminator.service'; import { di, resolveIfSchema, retrieveSchema } from './utils'; import { SchemaValidatorFactory } from './validator.factory'; import { WidgetFactory } from './widget.factory'; /** * @param {?} schemaValidatorFactory * @param {?} cogSrv * @return {?} */ export function useFactory(schemaValidatorFactory, cogSrv) { return new FormPropertyFactory(schemaValidatorFactory, cogSrv); } export class SFComponent { /** * @param {?} formPropertyFactory * @param {?} terminator * @param {?} dom * @param {?} cdr * @param {?} localeSrv * @param {?} aclSrv * @param {?} i18nSrv * @param {?} cogSrv * @param {?} platform */ constructor(formPropertyFactory, terminator, dom, cdr, localeSrv, aclSrv, i18nSrv, cogSrv, platform) { this.formPropertyFactory = formPropertyFactory; this.terminator = terminator; this.dom = dom; this.cdr = cdr; this.localeSrv = localeSrv; this.aclSrv = aclSrv; this.i18nSrv = i18nSrv; this.platform = platform; this.unsubscribe$ = new Subject(); this._renders = new Map(); this._valid = true; this._inited = false; this.locale = {}; this.rootProperty = null; // #region fields /** * 表单布局,等同 `nzLayout`,默认:horizontal */ this.layout = 'horizontal'; /** * 按钮 * - 值为 `null` 或 `undefined` 表示手动添加按钮,但保留容器 * - 值为 `none` 表示手动添加按钮,且不保留容器 * - 使用 `spanLabelFixed` 固定标签宽度时,若无 `render.class` 则默认为居中状态 */ this.button = {}; /** * 是否实时校验,默认:`true` * - `true` 每一次都校验 * - `false` 提交时校验 */ this.liveValidate = true; /** * 立即显示错误视觉 */ this.firstVisual = true; /** * 是否只展示错误视觉不显示错误文本 */ this.onlyVisual = false; this.compact = false; /** * Whether to load status,when `true` reset button is disabled status, submit button is loading status */ this.loading = false; this.disabled = false; this.noColon = false; this.cleanValue = false; this.formValueChange = new EventEmitter(); this.formChange = new EventEmitter(); this.formSubmit = new EventEmitter(); this.formReset = new EventEmitter(); this.formError = new EventEmitter(); this.options = mergeConfig(cogSrv); this.liveValidate = (/** @type {?} */ (this.options.liveValidate)); this.firstVisual = (/** @type {?} */ (this.options.firstVisual)); this.autocomplete = (/** @type {?} */ (this.options.autocomplete)); this.localeSrv.change.pipe(takeUntil(this.unsubscribe$)).subscribe((/** * @return {?} */ () => { this.locale = this.localeSrv.getData('sf'); if (this._inited) { this.validator({ emitError: false, onlyRoot: false }); this.coverButtonProperty(); this.cdr.markForCheck(); } })); /** @type {?} */ const refSchemas = [ this.aclSrv ? this.aclSrv.change : null, this.i18nSrv ? this.i18nSrv.change : null, ].filter((/** * @param {?} o * @return {?} */ o => o != null)); if (refSchemas.length > 0) { merge(...((/** @type {?} */ (refSchemas)))) .pipe(filter((/** * @return {?} */ () => this._inited)), takeUntil(this.unsubscribe$)) .subscribe((/** * @template THIS * @this {THIS} * @return {THIS} */ () => this.refreshSchema())); } } /** * 表单模式 * @param {?} value * @return {?} */ set mode(value) { switch (value) { case 'search': this.layout = 'inline'; this.firstVisual = false; this.liveValidate = false; if (this._btn) { this._btn.submit = this._btn.search; } break; case 'edit': this.layout = 'horizontal'; this.firstVisual = false; this.liveValidate = true; if (this._btn) { this._btn.submit = this._btn.edit; } break; } this._mode = value; } /** * @return {?} */ get mode() { return this._mode; } // #endregion /** * 表单校验状态 * @return {?} */ get valid() { return this._valid; } /** * 表单值 * @return {?} */ get value() { return this._item; } /** * 根据路径获取表单元素属性 * @param {?} path [路径](https://ohayojp.com/form/qa#path) * @return {?} */ getProperty(path) { return (/** @type {?} */ (this.rootProperty)).searchProperty(path); } /** * 根据路径获取表单元素当前值 * @param {?} path [路径](https://ohayojp.com/form/qa#path) * @return {?} */ getValue(path) { return (/** @type {?} */ (this.getProperty(path))).value; } /** * 根据路径设置某个表单元素属性值 * @template THIS * @this {THIS} * @param {?} path [路径](https://ohayojp.com/form/qa#path) * @param {?} value 新值 * @return {THIS} */ setValue(path, value) { /** @type {?} */ const item = (/** @type {?} */ (this)).getProperty(path); if (!item) { throw new Error(`Invalid path: ${path}`); } item.resetValue(value, false); return (/** @type {?} */ (this)); } /** * @param {?} e * @return {?} */ onSubmit(e) { e.preventDefault(); e.stopPropagation(); if (!this.liveValidate) this.validator(); if (!this.valid) return; this.formSubmit.emit(this.value); } /** * @protected * @param {?} key * @return {?} */ fanyi(key) { return (this.i18nSrv ? this.i18nSrv.fanyi(key) : '') || key; } /** * @private * @param {?} ui * @return {?} */ inheritUI(ui) { ['optionalHelp'].filter((/** * @param {?} key * @return {?} */ key => !!this._defUi[key])).forEach((/** * @param {?} key * @return {?} */ key => (ui[key] = Object.assign(Object.assign({}, this._defUi[key]), ui[key])))); } /** * @private * @return {?} */ coverProperty() { /** @type {?} */ const isHorizontal = this.layout === 'horizontal'; /** @type {?} */ const _schema = deepCopy(this.schema); const { definitions } = _schema; /** @type {?} */ const inFn = (/** * @param {?} schema * @param {?} _parentSchema * @param {?} uiSchema * @param {?} parentUiSchema * @param {?} uiRes * @return {?} */ (schema, _parentSchema, uiSchema, parentUiSchema, uiRes) => { if (!Array.isArray(schema.required)) schema.required = []; Object.keys((/** @type {?} */ (schema.properties))).forEach((/** * @param {?} key * @return {?} */ key => { /** @type {?} */ const uiKey = `$${key}`; /** @type {?} */ const property = retrieveSchema((/** @type {?} */ ((/** @type {?} */ (schema.properties))[key])), definitions); /** @type {?} */ const ui = (/** @type {?} */ (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ widget: property.type }, (property.format && ((/** @type {?} */ (this.options.formatMap)))[property.format])), (typeof property.ui === 'string' ? { widget: property.ui } : null)), (!property.format && !property.ui && Array.isArray(property.enum) && property.enum.length > 0 ? { widget: 'select' } : null)), this._defUi), ((/** @type {?} */ (property.ui)))), uiSchema[uiKey]))); // 继承父节点布局属性 if (isHorizontal) { if (parentUiSchema.spanLabelFixed) { if (!ui.spanLabelFixed) { ui.spanLabelFixed = parentUiSchema.spanLabelFixed; } } else { if (!ui.spanLabel) ui.spanLabel = typeof parentUiSchema.spanLabel === 'undefined' ? 5 : parentUiSchema.spanLabel; if (!ui.spanControl) ui.spanControl = typeof parentUiSchema.spanControl === 'undefined' ? 19 : parentUiSchema.spanControl; if (!ui.offsetControl) ui.offsetControl = typeof parentUiSchema.offsetControl === 'undefined' ? null : parentUiSchema.offsetControl; } } else { ui.spanLabel = null; ui.spanControl = null; ui.offsetControl = null; } // 内联强制清理 `grid` 参数 if (this.layout === 'inline') { delete ui.grid; } // 非水平布局强制清理 `spanLabelFixed` 值 if (this.layout !== 'horizontal') { ui.spanLabelFixed = null; } // 当指定标签为固定宽度时无须指定 `spanLabel`,`spanControl` if (ui.spanLabelFixed != null && ui.spanLabelFixed > 0) { ui.spanLabel = null; ui.spanControl = null; } if (ui.widget === 'date' && ui.end != null) { /** @type {?} */ const dateEndProperty = (/** @type {?} */ (schema.properties))[ui.end]; if (dateEndProperty) { dateEndProperty.ui = Object.assign(Object.assign({}, ((/** @type {?} */ (dateEndProperty.ui)))), { widget: ui.widget, hidden: true }); } else { ui.end = null; } } this.inheritUI(ui); if (ui.optionalHelp) { if (typeof ui.optionalHelp === 'string') { ui.optionalHelp = (/** @type {?} */ ({ text: ui.optionalHelp, })); } /** @type {?} */ const oh = (ui.optionalHelp = Object.assign({ text: '', icon: 'question-circle', placement: 'top', trigger: 'hover', mouseEnterDelay: 0.15, mouseLeaveDelay: 0.1 }, ui.optionalHelp)); if (oh.i18n) { oh.text = this.fanyi(oh.i18n); } if (!oh.text) { ui.optionalHelp = undefined; } } if (ui.i18n) { property.title = this.fanyi(ui.i18n); } if (ui.descriptionI18n) { property.description = this.fanyi(ui.descriptionI18n); } if (property.description) { property._description = this.dom.bypassSecurityTrustHtml(property.description); } ui.hidden = typeof ui.hidden === 'boolean' ? ui.hidden : false; if (ui.hidden === false && ui.acl && this.aclSrv && !this.aclSrv.can(ui.acl)) { ui.hidden = true; } uiRes[uiKey] = ui; delete property.ui; if (ui.hidden === true) { /** @type {?} */ const idx = (/** @type {?} */ (schema.required)).indexOf(key); if (idx !== -1) { (/** @type {?} */ (schema.required)).splice(idx, 1); } } if (property.items) { /** @type {?} */ const uiSchemaInArr = (uiSchema[uiKey] || {}).$items || {}; ui.$items = Object.assign(Object.assign(Object.assign({}, ((/** @type {?} */ (property.items.ui)))), uiSchemaInArr[uiKey]), ui.$items); inFn(property.items, property.items, uiSchemaInArr, ui.$items, ui.$items); } if (property.properties && Object.keys(property.properties).length) { inFn(property, schema, uiSchema[uiKey] || {}, ui, ui); } })); }); if (this.ui == null) this.ui = {}; this._defUi = Object.assign(Object.assign(Object.assign({ onlyVisual: this.options.onlyVisual, size: this.options.size, liveValidate: this.liveValidate, firstVisual: this.firstVisual }, this.options.ui), _schema.ui), this.ui['*']); if (this.onlyVisual === true) { this._defUi.onlyVisual = true; } // 内联强制清理 `grid` 参数 if (this.layout === 'inline') { delete this._defUi.grid; } // root this._ui = Object.assign({}, this._defUi); inFn(_schema, _schema, this.ui, this.ui, this._ui); // cond resolveIfSchema(_schema, this._ui); this._schema = _schema; di(this._ui, 'cover schema & ui', this._ui, _schema); } /** * @private * @return {?} */ coverButtonProperty() { this._btn = Object.assign(Object.assign(Object.assign({ render: { size: 'default' } }, this.locale), this.options.button), ((/** @type {?} */ (this.button)))); /** @type {?} */ const firstKey = Object.keys(this._ui).find((/** * @param {?} w * @return {?} */ w => w.startsWith('$'))); /** @type {?} */ const btnRender = (/** @type {?} */ (this._btn.render)); if (this.layout === 'horizontal') { /** @type {?} */ const btnUi = firstKey ? this._ui[firstKey] : this._defUi; if (!btnRender.grid) { btnRender.grid = { offset: btnUi.spanLabel, span: btnUi.spanControl, }; } // fixed label if (btnRender.spanLabelFixed == null) { btnRender.spanLabelFixed = btnUi.spanLabelFixed; } // 固定标签宽度时,若不指定样式,则默认居中 if (!btnRender.class && typeof btnUi.spanLabelFixed === 'number' && btnUi.spanLabelFixed > 0) { btnRender.class = 'text-center'; } } else { btnRender.grid = {}; } if (this._mode) { this.mode = this._mode; } di(this._ui, 'button property', this._btn); } /** * @return {?} */ ngOnInit() { if (!this.platform.isBrowser) { return; } this._inited = true; this.validator(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (Object.keys(changes).length === 1 && (changes.loading || changes.disabled)) { this.cdr.detectChanges(); return; } this.refreshSchema(); } /** * \@internal * @param {?} path * @param {?} templateRef * @return {?} */ _addTpl(path, templateRef) { if (this._renders.has(path)) { console.warn(`Duplicate definition "${path}" custom widget`); return; } this._renders.set(path, templateRef); this.attachCustomRender(); } /** * @private * @return {?} */ attachCustomRender() { this._renders.forEach((/** * @param {?} tpl * @param {?} path * @return {?} */ (tpl, path) => { /** @type {?} */ const property = (/** @type {?} */ (this.rootProperty)).searchProperty(path); if (property == null) { return; } property.ui._render = tpl; })); } /** * @template THIS * @this {THIS} * @param {?=} options * @return {THIS} */ validator(options = { emitError: true, onlyRoot: true }) { if (!(/** @type {?} */ (this)).platform.isBrowser) { return (/** @type {?} */ (this)); } /** @type {?} */ const fn = (/** * @param {?} property * @return {?} */ (property) => { property._runValidation(); if (!(property instanceof PropertyGroup) || !property.properties) return; if (Array.isArray(property.properties)) { property.properties.forEach((/** * @param {?} p * @return {?} */ p => fn(p))); } else { Object.keys(property.properties).forEach((/** * @param {?} key * @return {?} */ key => fn(((/** @type {?} */ (property.properties)))[key]))); } }); if (options.onlyRoot) { (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty))._runValidation(); } else { fn((/** @type {?} */ ((/** @type {?} */ (this)).rootProperty))); } /** @type {?} */ const errors = (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)).errors; (/** @type {?} */ (this))._valid = !(errors && errors.length); if (options.emitError && !(/** @type {?} */ (this))._valid) (/** @type {?} */ (this)).formError.emit((/** @type {?} */ (errors))); (/** @type {?} */ (this)).cdr.detectChanges(); return (/** @type {?} */ (this)); } /** * 刷新整个 Schema,当指定 `newSchema` 表示替换当前的 Schema * * 若希望对某个表单元素进行刷新请使用: * ``` * // 获取某个元素 * const statusProperty = this.sf.getProperty('/status')!; * // 重置 `schema` 或 `ui` 参数 * statusProperty.schema.enum = ['1', '2', '3']; * // 调用 `reset` 重置初始值 * statusProperty.widget.reset('2'); * ``` * @template THIS * @this {THIS} * @param {?=} newSchema * @param {?=} newUI * @return {THIS} */ refreshSchema(newSchema, newUI) { if (!(/** @type {?} */ (this)).platform.isBrowser) { return (/** @type {?} */ (this)); } if (newSchema) (/** @type {?} */ (this)).schema = newSchema; if (newUI) (/** @type {?} */ (this)).ui = newUI; if (!(/** @type {?} */ (this)).schema || typeof (/** @type {?} */ (this)).schema.properties === 'undefined') throw new Error(`Invalid Schema`); if ((/** @type {?} */ (this)).schema.ui && typeof (/** @type {?} */ (this)).schema.ui === 'string') throw new Error(`Don't support string with root ui property`); (/** @type {?} */ (this)).schema.type = 'object'; (/** @type {?} */ (this))._formData = Object.assign({}, (/** @type {?} */ (this)).formData); if ((/** @type {?} */ (this))._inited) (/** @type {?} */ (this)).terminator.destroy(); (/** @type {?} */ (this)).cleanRootSub(); (/** @type {?} */ (this)).coverProperty(); (/** @type {?} */ (this)).coverButtonProperty(); (/** @type {?} */ (this)).rootProperty = (/** @type {?} */ (this)).formPropertyFactory.createProperty((/** @type {?} */ (this))._schema, (/** @type {?} */ (this))._ui, (/** @type {?} */ (this)).formData); (/** @type {?} */ (this)).attachCustomRender(); (/** @type {?} */ (this)).cdr.detectChanges(); (/** @type {?} */ (this)).reset(); /** @type {?} */ let isFirst = true; (/** @type {?} */ (this)).rootProperty.valueChanges.subscribe((/** * @param {?} res * @return {?} */ res => { (/** @type {?} */ (this))._item = Object.assign(Object.assign({}, ((/** @type {?} */ (this)).cleanValue ? null : (/** @type {?} */ (this)).formData)), res.value); if (isFirst) { isFirst = false; return; } (/** @type {?} */ (this)).formChange.emit((/** @type {?} */ (this))._item); (/** @type {?} */ (this)).formValueChange.emit({ value: (/** @type {?} */ (this))._item, path: res.path, pathValue: res.pathValue }); })); (/** @type {?} */ (this)).rootProperty.errorsChanges.subscribe((/** * @param {?} errors * @return {?} */ errors => { (/** @type {?} */ (this))._valid = !(errors && errors.length); (/** @type {?} */ (this)).formError.emit((/** @type {?} */ (errors))); (/** @type {?} */ (this)).cdr.detectChanges(); })); return (/** @type {?} */ (this)); } /** * 重置表单 * @template THIS * @this {THIS} * @param {?=} emit * @return {THIS} */ reset(emit = false) { if (!(/** @type {?} */ (this)).platform.isBrowser) { return (/** @type {?} */ (this)); } (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)).resetValue((/** @type {?} */ (this)).formData, false); Promise.resolve().then((/** * @return {?} */ () => (/** @type {?} */ (this)).cdr.detectChanges())); if (emit) { (/** @type {?} */ (this)).formReset.emit((/** @type {?} */ (this)).value); } return (/** @type {?} */ (this)); } /** * @private * @return {?} */ cleanRootSub() { if (!this.rootProperty) return; this.rootProperty.errorsChanges.unsubscribe(); this.rootProperty.valueChanges.unsubscribe(); } /** * @return {?} */ ngOnDestroy() { this.cleanRootSub(); this.terminator.destroy(); const { unsubscribe$ } = this; unsubscribe$.next(); unsubscribe$.complete(); } } SFComponent.decorators = [ { type: Component, args: [{ selector: 'sf, [sf]', exportAs: 'sf', template: "<ng-template #con>\n <ng-content></ng-content>\n</ng-template>\n<form nz-form [nzLayout]=\"layout\" (submit)=\"onSubmit($event)\" [attr.autocomplete]=\"autocomplete\">\n <sf-item [formProperty]=\"rootProperty\"></sf-item>\n <ng-container *ngIf=\"button !== 'none'; else con\">\n <nz-form-item [ngClass]=\"_btn.render!.class\" class=\"sf-btns\" [fixed-label]=\"_btn.render!.spanLabelFixed\">\n <div\n nz-col\n class=\"ant-form-item-control\"\n [nzSpan]=\"_btn.render!.grid!.span\"\n [nzOffset]=\"_btn.render!.grid!.offset\"\n [nzXs]=\"_btn.render!.grid!.xs\"\n [nzSm]=\"_btn.render!.grid!.sm\"\n [nzMd]=\"_btn.render!.grid!.md\"\n [nzLg]=\"_btn.render!.grid!.lg\"\n [nzXl]=\"_btn.render!.grid!.xl\"\n [nzXXl]=\"_btn.render!.grid!.xxl\"\n >\n <div class=\"ant-form-item-control-input\">\n <div class=\"ant-form-item-control-input-content\">\n <ng-container *ngIf=\"button; else con\">\n <button\n type=\"submit\"\n nz-button\n data-type=\"submit\"\n [nzType]=\"_btn.submit_type\"\n [nzSize]=\"_btn.render!.size\"\n [nzLoading]=\"loading\"\n [disabled]=\"liveValidate && !valid\"\n >\n <i\n *ngIf=\"_btn.submit_icon\"\n nz-icon\n [nzType]=\"_btn.submit_icon.type\"\n [nzTheme]=\"_btn.submit_icon.theme\"\n [nzTwotoneColor]=\"_btn.submit_icon.twoToneColor\"\n [nzIconfont]=\"_btn.submit_icon.iconfont\"\n ></i>\n {{ _btn.submit }}\n </button>\n <button\n *ngIf=\"_btn.reset\"\n type=\"button\"\n nz-button\n data-type=\"reset\"\n [nzType]=\"_btn.reset_type\"\n [nzSize]=\"_btn.render!.size\"\n [disabled]=\"loading\"\n (click)=\"reset(true)\"\n >\n <i\n *ngIf=\"_btn.reset_icon\"\n nz-icon\n [nzType]=\"_btn.reset_icon.type\"\n [nzTheme]=\"_btn.reset_icon.theme\"\n [nzTwotoneColor]=\"_btn.reset_icon.twoToneColor\"\n [nzIconfont]=\"_btn.reset_icon.iconfont\"\n ></i>\n {{ _btn.reset }}\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </nz-form-item>\n </ng-container>\n</form>\n", providers: [ WidgetFactory, { provide: FormPropertyFactory, useFactory, deps: [SchemaValidatorFactory, OhayoConfigService], }, TerminatorService, ], host: { '[class.sf]': 'true', '[class.sf__inline]': `layout === 'inline'`, '[class.sf__horizontal]': `layout === 'horizontal'`, '[class.sf__search]': `mode === 'search'`, '[class.sf__edit]': `mode === 'edit'`, '[class.sf__no-error]': `onlyVisual`, '[class.sf__no-colon]': `noColon`, '[class.sf__compact]': `compact`, }, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ SFComponent.ctorParameters = () => [ { type: FormPropertyFactory }, { type: TerminatorService }, { type: DomSanitizer }, { type: ChangeDetectorRef }, { type: OhayoLocaleService }, { type: ACLService, decorators: [{ type: Optional }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [OHAYO_I18N_TOKEN,] }] }, { type: OhayoConfigService }, { type: Platform } ]; SFComponent.propDecorators = { layout: [{ type: Input }], schema: [{ type: Input }], ui: [{ type: Input }], formData: [{ type: Input }], button: [{ type: Input }], liveValidate: [{ type: Input }], autocomplete: [{ type: Input }], firstVisual: [{ type: Input }], onlyVisual: [{ type: Input }], compact: [{ type: Input }], mode: [{ type: Input }], loading: [{ type: Input }], disabled: [{ type: Input }], noColon: [{ type: Input }], cleanValue: [{ type: Input }], formValueChange: [{ type: Output }], formChange: [{ type: Output }], formSubmit: [{ type: Output }], formReset: [{ type: Output }], formError: [{ type: Output }] }; __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "liveValidate", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "firstVisual", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "onlyVisual", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "compact", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "loading", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "disabled", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "noColon", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "cleanValue", void 0); if (false) { /** @type {?} */ SFComponent.ngAcceptInputType_liveValidate; /** @type {?} */ SFComponent.ngAcceptInputType_firstVisual; /** @type {?} */ SFComponent.ngAcceptInputType_onlyVisual; /** @type {?} */ SFComponent.ngAcceptInputType_compact; /** @type {?} */ SFComponent.ngAcceptInputType_loading; /** @type {?} */ SFComponent.ngAcceptInputType_disabled; /** @type {?} */ SFComponent.ngAcceptInputType_noColon; /** @type {?} */ SFComponent.ngAcceptInputType_cleanValue; /** * @type {?} * @private */ SFComponent.prototype.unsubscribe$; /** * @type {?} * @private */ SFComponent.prototype._renders; /** * @type {?} * @private */ SFComponent.prototype._item; /** * @type {?} * @private */ SFComponent.prototype._valid; /** * @type {?} * @private */ SFComponent.prototype._defUi; /** @type {?} */ SFComponent.prototype.options; /** @type {?} */ SFComponent.prototype._inited; /** @type {?} */ SFComponent.prototype.locale; /** @type {?} */ SFComponent.prototype.rootProperty; /** @type {?} */ SFComponent.prototype._formData; /** @type {?} */ SFComponent.prototype._btn; /** @type {?} */ SFComponent.prototype._schema; /** @type {?} */ SFComponent.prototype._ui; /** * 表单布局,等同 `nzLayout`,默认:horizontal * @type {?} */ SFComponent.prototype.layout; /** * JSON Schema * @type {?} */ SFComponent.prototype.schema; /** * UI Schema * @type {?} */ SFComponent.prototype.ui; /** * 表单默认值 * @type {?} */ SFComponent.prototype.formData; /** * 按钮 * - 值为 `null` 或 `undefined` 表示手动添加按钮,但保留容器 * - 值为 `none` 表示手动添加按钮,且不保留容器 * - 使用 `spanLabelFixed` 固定标签宽度时,若无 `render.class` 则默认为居中状态 * @type {?} */ SFComponent.prototype.button; /** * 是否实时校验,默认:`true` * - `true` 每一次都校验 * - `false` 提交时校验 * @type {?} */ SFComponent.prototype.liveValidate; /** * 指定表单 `autocomplete` 值 * @type {?} */ SFComponent.prototype.autocomplete; /** * 立即显示错误视觉 * @type {?} */ SFComponent.prototype.firstVisual; /** * 是否只展示错误视觉不显示错误文本 * @type {?} */ SFComponent.prototype.onlyVisual; /** @type {?} */ SFComponent.prototype.compact; /** * @type {?} * @private */ SFComponent.prototype._mode; /** * Whether to load status,when `true` reset button is disabled status, submit button is loading status * @type {?} */ SFComponent.prototype.loading; /** @type {?} */ SFComponent.prototype.disabled; /** @type {?} */ SFComponent.prototype.noColon; /** @type {?} */ SFComponent.prototype.cleanValue; /** @type {?} */ SFComponent.prototype.formValueChange; /** @type {?} */ SFComponent.prototype.formChange; /** @type {?} */ SFComponent.prototype.formSubmit; /** @type {?} */ SFComponent.prototype.formReset; /** @type {?} */ SFComponent.prototype.formError; /** * @type {?} * @private */ SFComponent.prototype.formPropertyFactory; /** * @type {?} * @private */ SFComponent.prototype.terminator; /** * @type {?} * @private */ SFComponent.prototype.dom; /** * @type {?} * @private */ SFComponent.prototype.cdr; /** * @type {?} * @private */ SFComponent.prototype.localeSrv; /** * @type {?} * @private */ SFComponent.prototype.aclSrv; /** * @type {?} * @private */ SFComponent.prototype.i18nSrv; /** * @type {?} * @private */ SFComponent.prototype.platform; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2YuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vIiwic291cmNlcyI6WyJzcmMvc2YuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFJTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxrQkFBa0IsRUFBK0IsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RyxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdkMsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFC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