@lxlib/form
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.
893 lines • 81 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: src/sf.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ACLService } from '@lxlib/acl';
import { LXLIB_I18N_TOKEN, LxlibLocaleService } from '@lxlib/theme';
import { deepCopy, InputBoolean } from '@lxlib/util';
import { merge, Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { LxlibFormConfig } from './config';
import { PropertyGroup } from './model/form.property';
import { FormPropertyFactory } from './model/form.property.factory';
import { TerminatorService } from './terminator.service';
import { di, FORMATMAPS, resolveIf, retrieveSchema } from './utils';
import { SchemaValidatorFactory } from './validator.factory';
import { WidgetFactory } from './widget.factory';
/**
* @param {?} schemaValidatorFactory
* @param {?} options
* @return {?}
*/
export function useFactory(schemaValidatorFactory, options) {
return new FormPropertyFactory(schemaValidatorFactory, options);
}
export class SFComponent {
/**
* @param {?} formPropertyFactory
* @param {?} terminator
* @param {?} options
* @param {?} dom
* @param {?} cdr
* @param {?} localeSrv
* @param {?} aclSrv
* @param {?} i18nSrv
*/
constructor(formPropertyFactory, terminator, options, dom, cdr, localeSrv, aclSrv, i18nSrv) {
this.formPropertyFactory = formPropertyFactory;
this.terminator = terminator;
this.options = options;
this.dom = dom;
this.cdr = cdr;
this.localeSrv = localeSrv;
this.aclSrv = aclSrv;
this.i18nSrv = i18nSrv;
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;
/**
* 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.formChange = new EventEmitter();
/**
* 提交表单时回调
*/
this.formSubmit = new EventEmitter();
/**
* 重置表单时回调
*/
this.formReset = new EventEmitter();
/**
* 表单校验结果回调
*/
this.formError = new EventEmitter();
this.liveValidate = (/** @type {?} */ (options.liveValidate));
this.firstVisual = (/** @type {?} */ (options.firstVisual));
this.autocomplete = (/** @type {?} */ (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://ng-alain.com/form/qa#path)
* @return {?}
*/
getProperty(path) {
return (/** @type {?} */ (this.rootProperty)).searchProperty(path);
}
/**
* 根据路径获取表单元素当前值
* @param {?} path [路径](https://ng-alain.com/form/qa#path)
* @return {?}
*/
getValue(path) {
return (/** @type {?} */ (this.getProperty(path))).value;
}
/**
* 根据路径设置某个表单元素属性值
* @template THIS
* @this {THIS}
* @param {?} path [路径](https://ng-alain.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 {?} */ (FORMATMAPS)))[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;
}
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)))), { 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);
}
}));
});
/** @type {?} */
const inIfFn = (/**
* @param {?} schema
* @param {?} ui
* @return {?}
*/
(schema, ui) => {
Object.keys((/** @type {?} */ (schema.properties))).forEach((/**
* @param {?} key
* @return {?}
*/
key => {
/** @type {?} */
const property = (/** @type {?} */ (schema.properties))[key];
/** @type {?} */
const uiKey = `$${key}`;
resolveIf(property, ui[uiKey]);
if (property.items) {
inIfFn(property.items, ui[uiKey].$items);
}
if (property.properties) {
inIfFn(property, ui[uiKey]);
}
}));
});
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;
}
// root
this._ui = Object.assign({}, this._defUi);
inFn(_schema, _schema, this.ui, this.ui, this._ui);
// cond
resolveIf(_schema, this._ui);
inIfFn(_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('$')));
if (this.layout === 'horizontal') {
/** @type {?} */
const btnUi = firstKey ? this._ui[firstKey] : this._defUi;
if (!(/** @type {?} */ (this._btn.render)).grid) {
(/** @type {?} */ (this._btn.render)).grid = {
offset: btnUi.spanLabel,
span: btnUi.spanControl,
};
}
// fixed label
if ((/** @type {?} */ (this._btn.render)).spanLabelFixed == null) {
(/** @type {?} */ (this._btn.render)).spanLabelFixed = btnUi.spanLabelFixed;
}
// 固定标签宽度时,若不指定样式,则默认居中
if (!(/** @type {?} */ (this._btn.render)).class && typeof btnUi.spanLabelFixed === 'number' && btnUi.spanLabelFixed > 0) {
(/** @type {?} */ (this._btn.render)).class = 'text-center';
}
}
else {
(/** @type {?} */ (this._btn.render)).grid = {};
}
if (this._mode) {
this.mode = this._mode;
}
di(this._ui, 'button property', this._btn);
}
/**
* @return {?}
*/
ngOnInit() {
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 }) {
/** @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,一般需要动态修改 Schema 某个值时可以方便调用
* @template THIS
* @this {THIS}
* @param {?=} newSchema
* @param {?=} newUI
* @return {THIS}
*/
refreshSchema(newSchema, newUI) {
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 {?} value
* @return {?}
*/
value => {
(/** @type {?} */ (this))._item = Object.assign(Object.assign({}, ((/** @type {?} */ (this)).cleanValue ? null : (/** @type {?} */ (this)).formData)), value);
if (isFirst) {
isFirst = false;
return;
}
(/** @type {?} */ (this)).formChange.emit((/** @type {?} */ (this))._item);
}));
(/** @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) {
(/** @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 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 <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 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 <i *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\"></i>\n {{_btn.submit}}\n </button>\n <button *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 <i *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\"></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, LxlibFormConfig],
},
TerminatorService,
],
host: {
'[class.sf]': 'true',
'[class.sf__inline]': `layout === 'inline'`,
'[class.sf__search]': `mode === 'search'`,
'[class.sf__edit]': `mode === 'edit'`,
'[class.sf__no-error]': `onlyVisual`,
'[class.sf__no-colon]': `noColon`,
},
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SFComponent.ctorParameters = () => [
{ type: FormPropertyFactory },
{ type: TerminatorService },
{ type: LxlibFormConfig },
{ type: DomSanitizer },
{ type: ChangeDetectorRef },
{ type: LxlibLocaleService },
{ type: ACLService, decorators: [{ type: Optional }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [LXLIB_I18N_TOKEN,] }] }
];
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 }],
mode: [{ type: Input }],
loading: [{ type: Input }],
disabled: [{ type: Input }],
noColon: [{ type: Input }],
cleanValue: [{ type: Input }],
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, "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 {?}
* @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 {?}
* @private
*/
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 {?}
* @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.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.options;
/**
* @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;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2YuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx4bGliL2Zvcm0vIiwic291cmNlcyI6WyJzcmMvc2YuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUlOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQW9CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFjLE1BQU0sY0FBYyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczQyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFF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