k-form-design
Version:
基于vue、ant-design-vue的表单设计器,可视化开发表单
1,616 lines (1,297 loc) • 51.5 kB
JavaScript
((typeof self !== 'undefined' ? self : this)["webpackJsonpk_form_design"] = (typeof self !== 'undefined' ? self : this)["webpackJsonpk_form_design"] || []).push([[4],{
/***/ "0a1b":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelHelperVueJsxMergeProps = __webpack_require__("92fa");
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _extends2 = __webpack_require__("41b2");
var _extends3 = _interopRequireDefault(_extends2);
var _defineProperty2 = __webpack_require__("6042");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
exports.fixControlledValue = fixControlledValue;
exports.resolveOnChange = resolveOnChange;
exports.getInputClassName = getInputClassName;
var _classnames = __webpack_require__("4d26");
var _classnames2 = _interopRequireDefault(_classnames);
var _TextArea = __webpack_require__("516f");
var _TextArea2 = _interopRequireDefault(_TextArea);
var _omit = __webpack_require__("0464");
var _omit2 = _interopRequireDefault(_omit);
var _inputProps = __webpack_require__("8bc7");
var _inputProps2 = _interopRequireDefault(_inputProps);
var _propsUtil = __webpack_require__("73c8");
var _configConsumerProps = __webpack_require__("bad7");
var _ClearableLabeledInput = __webpack_require__("1fde");
var _ClearableLabeledInput2 = _interopRequireDefault(_ClearableLabeledInput);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function noop() {}
function fixControlledValue(value) {
if (typeof value === 'undefined' || value === null) {
return '';
}
return value;
}
function resolveOnChange(target, e, onChange) {
if (onChange) {
var event = e;
if (e.type === 'click') {
// click clear icon
//event = Object.create(e);
Object.defineProperty(event, 'target', {
writable: true
});
Object.defineProperty(event, 'currentTarget', {
writable: true
});
event.target = target;
event.currentTarget = target;
var originalInputValue = target.value;
// change target ref value cause e.target.value should be '' when clear input
target.value = '';
onChange(event);
// reset target ref value
target.value = originalInputValue;
return;
}
onChange(event);
}
}
function getInputClassName(prefixCls, size, disabled) {
var _classNames;
return (0, _classnames2['default'])(prefixCls, (_classNames = {}, (0, _defineProperty3['default'])(_classNames, prefixCls + '-sm', size === 'small'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-lg', size === 'large'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-disabled', disabled), _classNames));
}
exports['default'] = {
name: 'AInput',
inheritAttrs: false,
model: {
prop: 'value',
event: 'change.value'
},
props: (0, _extends3['default'])({}, _inputProps2['default']),
inject: {
configProvider: { 'default': function _default() {
return _configConsumerProps.ConfigConsumerProps;
} }
},
data: function data() {
var props = this.$props;
var value = typeof props.value === 'undefined' ? props.defaultValue : props.value;
return {
stateValue: typeof value === 'undefined' ? '' : value
};
},
watch: {
value: function value(val) {
this.stateValue = val;
}
},
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
if (_this.autoFocus) {
_this.focus();
}
_this.clearPasswordValueAttribute();
});
},
beforeDestroy: function beforeDestroy() {
if (this.removePasswordTimeout) {
clearTimeout(this.removePasswordTimeout);
}
},
methods: {
onBlur: function onBlur(e) {
// fix this isssue: https://github.com/vueComponent/ant-design-vue/issues/3816
// reference: https://github.com/vuejs/vue/issues/5847 and https://github.com/vuejs/vue/issues/8431
this.$forceUpdate();
var _getListeners = (0, _propsUtil.getListeners)(this),
blur = _getListeners.blur;
blur && blur(e);
},
focus: function focus() {
this.$refs.input.focus();
},
blur: function blur() {
this.$refs.input.blur();
},
select: function select() {
this.$refs.input.select();
},
setValue: function setValue(value, callback) {
if (this.stateValue === value) {
return;
}
if (!(0, _propsUtil.hasProp)(this, 'value')) {
this.stateValue = value;
this.$nextTick(function () {
callback && callback();
});
} else {
// 不在严格受控
// https://github.com/vueComponent/ant-design-vue/issues/2207,modal 是 新 new 实例,更新队列和当前不在同一个更新队列中
// this.$forceUpdate();
}
},
onChange: function onChange(e) {
this.$emit('change.value', e.target.value);
this.$emit('change', e);
this.$emit('input', e);
},
handleReset: function handleReset(e) {
var _this2 = this;
this.setValue('', function () {
_this2.focus();
});
resolveOnChange(this.$refs.input, e, this.onChange);
},
renderInput: function renderInput(prefixCls) {
var h = this.$createElement;
var otherProps = (0, _omit2['default'])(this.$props, ['prefixCls', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear', 'value', 'defaultValue', 'lazy', 'size', 'inputType', 'className']);
var stateValue = this.stateValue,
handleKeyDown = this.handleKeyDown,
handleChange = this.handleChange,
size = this.size,
disabled = this.disabled;
var inputProps = {
directives: [{ name: 'ant-input' }],
domProps: {
value: fixControlledValue(stateValue)
},
attrs: (0, _extends3['default'])({}, otherProps, this.$attrs),
on: (0, _extends3['default'])({}, (0, _propsUtil.getListeners)(this), {
keydown: handleKeyDown,
input: handleChange,
change: noop,
blur: this.onBlur
}),
'class': getInputClassName(prefixCls, size, disabled),
ref: 'input',
key: 'ant-input'
};
return h('input', inputProps);
},
clearPasswordValueAttribute: function clearPasswordValueAttribute() {
var _this3 = this;
// https://github.com/ant-design/ant-design/issues/20541
this.removePasswordTimeout = setTimeout(function () {
if (_this3.$refs.input && _this3.$refs.input.getAttribute && _this3.$refs.input.getAttribute('type') === 'password' && _this3.$refs.input.hasAttribute('value')) {
_this3.$refs.input.removeAttribute('value');
}
});
},
handleChange: function handleChange(e) {
var _e$target = e.target,
value = _e$target.value,
composing = _e$target.composing;
// https://github.com/vueComponent/ant-design-vue/issues/2203
if ((e.isComposing || composing) && this.lazy || this.stateValue === value) return;
this.setValue(value, this.clearPasswordValueAttribute);
resolveOnChange(this.$refs.input, e, this.onChange);
},
handleKeyDown: function handleKeyDown(e) {
if (e.keyCode === 13) {
this.$emit('pressEnter', e);
}
this.$emit('keydown', e);
}
},
render: function render() {
var h = arguments[0];
if (this.$props.type === 'textarea') {
var textareaProps = {
props: this.$props,
attrs: this.$attrs,
on: (0, _extends3['default'])({}, (0, _propsUtil.getListeners)(this), {
input: this.handleChange,
keydown: this.handleKeyDown,
change: noop,
blur: this.onBlur
})
};
return h(_TextArea2['default'], (0, _babelHelperVueJsxMergeProps2['default'])([textareaProps, { ref: 'input' }]));
}
var customizePrefixCls = this.$props.prefixCls;
var stateValue = this.$data.stateValue;
var getPrefixCls = this.configProvider.getPrefixCls;
var prefixCls = getPrefixCls('input', customizePrefixCls);
var addonAfter = (0, _propsUtil.getComponentFromProp)(this, 'addonAfter');
var addonBefore = (0, _propsUtil.getComponentFromProp)(this, 'addonBefore');
var suffix = (0, _propsUtil.getComponentFromProp)(this, 'suffix');
var prefix = (0, _propsUtil.getComponentFromProp)(this, 'prefix');
var props = {
props: (0, _extends3['default'])({}, (0, _propsUtil.getOptionProps)(this), {
prefixCls: prefixCls,
inputType: 'input',
value: fixControlledValue(stateValue),
element: this.renderInput(prefixCls),
handleReset: this.handleReset,
addonAfter: addonAfter,
addonBefore: addonBefore,
suffix: suffix,
prefix: prefix
}),
on: (0, _propsUtil.getListeners)(this)
};
return h(_ClearableLabeledInput2['default'], props);
}
};
/***/ }),
/***/ "133a":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.svgBaseProps = undefined;
exports.getThemeFromTypeName = getThemeFromTypeName;
exports.removeTypeTheme = removeTypeTheme;
exports.withThemeSuffix = withThemeSuffix;
exports.alias = alias;
var _warning = __webpack_require__("a7e2");
var _warning2 = _interopRequireDefault(_warning);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// These props make sure that the SVG behaviours like general text.
// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4
var svgBaseProps = exports.svgBaseProps = {
width: '1em',
height: '1em',
fill: 'currentColor',
'aria-hidden': 'true',
focusable: 'false'
};
var fillTester = /-fill$/;
var outlineTester = /-o$/;
var twoToneTester = /-twotone$/;
function getThemeFromTypeName(type) {
var result = null;
if (fillTester.test(type)) {
result = 'filled';
} else if (outlineTester.test(type)) {
result = 'outlined';
} else if (twoToneTester.test(type)) {
result = 'twoTone';
}
return result;
}
function removeTypeTheme(type) {
return type.replace(fillTester, '').replace(outlineTester, '').replace(twoToneTester, '');
}
function withThemeSuffix(type, theme) {
var result = type;
if (theme === 'filled') {
result += '-fill';
} else if (theme === 'outlined') {
result += '-o';
} else if (theme === 'twoTone') {
result += '-twotone';
} else {
(0, _warning2['default'])(false, 'Icon', 'This icon \'' + type + '\' has unknown theme \'' + theme + '\'');
}
return result;
}
// For alias or compatibility
function alias(type) {
var newType = type;
switch (type) {
case 'cross':
newType = 'close';
break;
// https://github.com/ant-design/ant-design/issues/13007
case 'interation':
newType = 'interaction';
break;
// https://github.com/ant-design/ant-design/issues/16810
case 'canlendar':
newType = 'calendar';
break;
// https://github.com/ant-design/ant-design/issues/17448
case 'colum-height':
newType = 'column-height';
break;
default:
}
(0, _warning2['default'])(newType === type, 'Icon', 'Icon \'' + type + '\' was a typo and is now deprecated, please use \'' + newType + '\' instead.');
return newType;
}
/***/ }),
/***/ "1fde":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = __webpack_require__("6042");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
exports.hasPrefixSuffix = hasPrefixSuffix;
var _classnames = __webpack_require__("4d26");
var _classnames2 = _interopRequireDefault(_classnames);
var _icon = __webpack_require__("50f6");
var _icon2 = _interopRequireDefault(_icon);
var _Input = __webpack_require__("0a1b");
var _vueTypes = __webpack_require__("7b44");
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _vnode = __webpack_require__("d2f9");
var _propsUtil = __webpack_require__("73c8");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function hasPrefixSuffix(instance) {
return !!((0, _propsUtil.getComponentFromProp)(instance, 'prefix') || (0, _propsUtil.getComponentFromProp)(instance, 'suffix') || instance.$props.allowClear);
}
var ClearableInputType = ['text', 'input'];
var ClearableLabeledInput = {
props: {
prefixCls: _vueTypes2['default'].string,
inputType: _vueTypes2['default'].oneOf(ClearableInputType),
value: _vueTypes2['default'].any,
defaultValue: _vueTypes2['default'].any,
allowClear: _vueTypes2['default'].bool,
element: _vueTypes2['default'].any,
handleReset: _vueTypes2['default'].func,
disabled: _vueTypes2['default'].bool,
size: _vueTypes2['default'].oneOf(['small', 'large', 'default']),
suffix: _vueTypes2['default'].any,
prefix: _vueTypes2['default'].any,
addonBefore: _vueTypes2['default'].any,
addonAfter: _vueTypes2['default'].any,
className: _vueTypes2['default'].string,
readOnly: _vueTypes2['default'].bool
},
methods: {
renderClearIcon: function renderClearIcon(prefixCls) {
var h = this.$createElement;
var _$props = this.$props,
allowClear = _$props.allowClear,
value = _$props.value,
disabled = _$props.disabled,
readOnly = _$props.readOnly,
inputType = _$props.inputType,
handleReset = _$props.handleReset;
if (!allowClear || disabled || readOnly || value === undefined || value === null || value === '') {
return null;
}
var className = inputType === ClearableInputType[0] ? prefixCls + '-textarea-clear-icon' : prefixCls + '-clear-icon';
return h(_icon2['default'], {
attrs: {
type: 'close-circle',
theme: 'filled',
role: 'button'
},
on: {
'click': handleReset
},
'class': className });
},
renderSuffix: function renderSuffix(prefixCls) {
var h = this.$createElement;
var _$props2 = this.$props,
suffix = _$props2.suffix,
allowClear = _$props2.allowClear;
if (suffix || allowClear) {
return h(
'span',
{ 'class': prefixCls + '-suffix' },
[this.renderClearIcon(prefixCls), suffix]
);
}
return null;
},
renderLabeledIcon: function renderLabeledIcon(prefixCls, element) {
var _classNames;
var h = this.$createElement;
var props = this.$props;
var suffix = this.renderSuffix(prefixCls);
if (!hasPrefixSuffix(this)) {
return (0, _vnode.cloneElement)(element, {
props: { value: props.value }
});
}
var prefix = props.prefix ? h(
'span',
{ 'class': prefixCls + '-prefix' },
[props.prefix]
) : null;
var affixWrapperCls = (0, _classnames2['default'])(props.className, prefixCls + '-affix-wrapper', (_classNames = {}, (0, _defineProperty3['default'])(_classNames, prefixCls + '-affix-wrapper-sm', props.size === 'small'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-affix-wrapper-lg', props.size === 'large'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-affix-wrapper-input-with-clear-btn', props.suffix && props.allowClear && this.$props.value), _classNames));
return h(
'span',
{ 'class': affixWrapperCls, style: props.style },
[prefix, (0, _vnode.cloneElement)(element, {
style: null,
props: { value: props.value },
'class': (0, _Input.getInputClassName)(prefixCls, props.size, props.disabled)
}), suffix]
);
},
renderInputWithLabel: function renderInputWithLabel(prefixCls, labeledElement) {
var _classNames3;
var h = this.$createElement;
var _$props3 = this.$props,
addonBefore = _$props3.addonBefore,
addonAfter = _$props3.addonAfter,
style = _$props3.style,
size = _$props3.size,
className = _$props3.className;
// Not wrap when there is not addons
if (!addonBefore && !addonAfter) {
return labeledElement;
}
var wrapperClassName = prefixCls + '-group';
var addonClassName = wrapperClassName + '-addon';
var addonBeforeNode = addonBefore ? h(
'span',
{ 'class': addonClassName },
[addonBefore]
) : null;
var addonAfterNode = addonAfter ? h(
'span',
{ 'class': addonClassName },
[addonAfter]
) : null;
var mergedWrapperClassName = (0, _classnames2['default'])(prefixCls + '-wrapper', (0, _defineProperty3['default'])({}, wrapperClassName, addonBefore || addonAfter));
var mergedGroupClassName = (0, _classnames2['default'])(className, prefixCls + '-group-wrapper', (_classNames3 = {}, (0, _defineProperty3['default'])(_classNames3, prefixCls + '-group-wrapper-sm', size === 'small'), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-group-wrapper-lg', size === 'large'), _classNames3));
// Need another wrapper for changing display:table to display:inline-block
// and put style prop in wrapper
return h(
'span',
{ 'class': mergedGroupClassName, style: style },
[h(
'span',
{ 'class': mergedWrapperClassName },
[addonBeforeNode, (0, _vnode.cloneElement)(labeledElement, { style: null }), addonAfterNode]
)]
);
},
renderTextAreaWithClearIcon: function renderTextAreaWithClearIcon(prefixCls, element) {
var h = this.$createElement;
var _$props4 = this.$props,
value = _$props4.value,
allowClear = _$props4.allowClear,
className = _$props4.className,
style = _$props4.style;
if (!allowClear) {
return (0, _vnode.cloneElement)(element, {
props: { value: value }
});
}
var affixWrapperCls = (0, _classnames2['default'])(className, prefixCls + '-affix-wrapper', prefixCls + '-affix-wrapper-textarea-with-clear-btn');
return h(
'span',
{ 'class': affixWrapperCls, style: style },
[(0, _vnode.cloneElement)(element, {
style: null,
props: { value: value }
}), this.renderClearIcon(prefixCls)]
);
},
renderClearableLabeledInput: function renderClearableLabeledInput() {
var _$props5 = this.$props,
prefixCls = _$props5.prefixCls,
inputType = _$props5.inputType,
element = _$props5.element;
if (inputType === ClearableInputType[0]) {
return this.renderTextAreaWithClearIcon(prefixCls, element);
}
return this.renderInputWithLabel(prefixCls, this.renderLabeledIcon(prefixCls, element));
}
},
render: function render() {
return this.renderClearableLabeledInput();
}
};
exports['default'] = ClearableLabeledInput;
/***/ }),
/***/ "50f6":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelHelperVueJsxMergeProps = __webpack_require__("92fa");
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _extends2 = __webpack_require__("41b2");
var _extends3 = _interopRequireDefault(_extends2);
var _defineProperty2 = __webpack_require__("6042");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _toConsumableArray2 = __webpack_require__("9b57");
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _classnames = __webpack_require__("4d26");
var _classnames2 = _interopRequireDefault(_classnames);
var _dist = __webpack_require__("3a9b");
var allIcons = _interopRequireWildcard(_dist);
var _iconsVue = __webpack_require__("8520");
var _iconsVue2 = _interopRequireDefault(_iconsVue);
var _vueTypes = __webpack_require__("7b44");
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _IconFont = __webpack_require__("bbf5");
var _IconFont2 = _interopRequireDefault(_IconFont);
var _utils = __webpack_require__("133a");
var _warning = __webpack_require__("a7e2");
var _warning2 = _interopRequireDefault(_warning);
var _LocaleReceiver = __webpack_require__("3f5f");
var _LocaleReceiver2 = _interopRequireDefault(_LocaleReceiver);
var _twoTonePrimaryColor = __webpack_require__("f3dc");
var _propsUtil = __webpack_require__("73c8");
var _base = __webpack_require__("baff");
var _base2 = _interopRequireDefault(_base);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// Initial setting
// https://github.com/vueComponent/ant-design-vue/issues/2745
_iconsVue2['default'].add.apply(_iconsVue2['default'], (0, _toConsumableArray3['default'])(Object.keys(allIcons).filter(function (key) {
return key !== 'default';
}).map(function (key) {
return allIcons[key];
})));
(0, _twoTonePrimaryColor.setTwoToneColor)('#1890ff');
var defaultTheme = 'outlined';
var dangerousTheme = void 0;
function renderIcon(h, locale, context) {
var _classNames;
var props = context.$props,
$slots = context.$slots;
var listeners = (0, _propsUtil.getListeners)(context);
var type = props.type,
Component = props.component,
viewBox = props.viewBox,
spin = props.spin,
theme = props.theme,
twoToneColor = props.twoToneColor,
rotate = props.rotate,
tabIndex = props.tabIndex;
var children = (0, _propsUtil.filterEmpty)($slots['default']);
children = children.length === 0 ? undefined : children;
(0, _warning2['default'])(Boolean(type || Component || children), 'Icon', 'Icon should have `type` prop or `component` prop or `children`.');
var classString = (0, _classnames2['default'])((_classNames = {}, (0, _defineProperty3['default'])(_classNames, 'anticon', true), (0, _defineProperty3['default'])(_classNames, 'anticon-' + type, !!type), _classNames));
var svgClassString = (0, _classnames2['default'])((0, _defineProperty3['default'])({}, 'anticon-spin', !!spin || type === 'loading'));
var svgStyle = rotate ? {
msTransform: 'rotate(' + rotate + 'deg)',
transform: 'rotate(' + rotate + 'deg)'
} : undefined;
var innerSvgProps = {
attrs: (0, _extends3['default'])({}, _utils.svgBaseProps, {
viewBox: viewBox
}),
'class': svgClassString,
style: svgStyle
};
if (!viewBox) {
delete innerSvgProps.attrs.viewBox;
}
var renderInnerNode = function renderInnerNode() {
// component > children > type
if (Component) {
return h(
Component,
innerSvgProps,
[children]
);
}
if (children) {
(0, _warning2['default'])(Boolean(viewBox) || children.length === 1 && children[0].tag === 'use', 'Icon', 'Make sure that you provide correct `viewBox`' + ' prop (default `0 0 1024 1024`) to the icon.');
var _innerSvgProps = {
attrs: (0, _extends3['default'])({}, _utils.svgBaseProps),
'class': svgClassString,
style: svgStyle
};
return h(
'svg',
(0, _babelHelperVueJsxMergeProps2['default'])([_innerSvgProps, {
attrs: { viewBox: viewBox }
}]),
[children]
);
}
if (typeof type === 'string') {
var computedType = type;
if (theme) {
var themeInName = (0, _utils.getThemeFromTypeName)(type);
(0, _warning2['default'])(!themeInName || theme === themeInName, 'Icon', 'The icon name \'' + type + '\' already specify a theme \'' + themeInName + '\',' + (' the \'theme\' prop \'' + theme + '\' will be ignored.'));
}
computedType = (0, _utils.withThemeSuffix)((0, _utils.removeTypeTheme)((0, _utils.alias)(computedType)), dangerousTheme || theme || defaultTheme);
return h(_iconsVue2['default'], {
attrs: {
focusable: 'false',
type: computedType,
primaryColor: twoToneColor
},
'class': svgClassString, style: svgStyle
});
}
};
var iconTabIndex = tabIndex;
if (iconTabIndex === undefined && 'click' in listeners) {
iconTabIndex = -1;
}
// functional component not support nativeOn,https://github.com/vuejs/vue/issues/7526
var iProps = {
attrs: {
'aria-label': type && locale.icon + ': ' + type,
tabIndex: iconTabIndex
},
on: listeners,
'class': classString,
staticClass: ''
};
return h(
'i',
iProps,
[renderInnerNode()]
);
}
var Icon = {
name: 'AIcon',
props: {
tabIndex: _vueTypes2['default'].number,
type: _vueTypes2['default'].string,
component: _vueTypes2['default'].any,
viewBox: _vueTypes2['default'].any,
spin: _vueTypes2['default'].bool.def(false),
rotate: _vueTypes2['default'].number,
theme: _vueTypes2['default'].oneOf(['filled', 'outlined', 'twoTone']),
twoToneColor: _vueTypes2['default'].string,
role: _vueTypes2['default'].string
},
render: function render(h) {
var _this = this;
return h(_LocaleReceiver2['default'], {
attrs: {
componentName: 'Icon'
},
scopedSlots: { 'default': function _default(locale) {
return renderIcon(h, locale, _this);
} }
});
}
};
Icon.createFromIconfontCN = _IconFont2['default'];
Icon.getTwoToneColor = _twoTonePrimaryColor.getTwoToneColor;
Icon.setTwoToneColor = _twoTonePrimaryColor.setTwoToneColor;
/* istanbul ignore next */
Icon.install = function (Vue) {
Vue.use(_base2['default']);
Vue.component(Icon.name, Icon);
};
exports['default'] = Icon;
/***/ }),
/***/ "516f":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelHelperVueJsxMergeProps = __webpack_require__("92fa");
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _extends2 = __webpack_require__("41b2");
var _extends3 = _interopRequireDefault(_extends2);
var _ClearableLabeledInput = __webpack_require__("1fde");
var _ClearableLabeledInput2 = _interopRequireDefault(_ClearableLabeledInput);
var _ResizableTextArea = __webpack_require__("ccf8");
var _ResizableTextArea2 = _interopRequireDefault(_ResizableTextArea);
var _inputProps = __webpack_require__("8bc7");
var _inputProps2 = _interopRequireDefault(_inputProps);
var _propsUtil = __webpack_require__("73c8");
var _propsUtil2 = _interopRequireDefault(_propsUtil);
var _configConsumerProps = __webpack_require__("bad7");
var _Input = __webpack_require__("0a1b");
var _vueTypes = __webpack_require__("7b44");
var _vueTypes2 = _interopRequireDefault(_vueTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var TextAreaProps = (0, _extends3['default'])({}, _inputProps2['default'], {
autosize: _vueTypes2['default'].oneOfType([Object, Boolean]),
autoSize: _vueTypes2['default'].oneOfType([Object, Boolean])
});
exports['default'] = {
name: 'ATextarea',
inheritAttrs: false,
model: {
prop: 'value',
event: 'change.value'
},
props: (0, _extends3['default'])({}, TextAreaProps),
inject: {
configProvider: { 'default': function _default() {
return _configConsumerProps.ConfigConsumerProps;
} }
},
data: function data() {
var value = typeof this.value === 'undefined' ? this.defaultValue : this.value;
return {
stateValue: typeof value === 'undefined' ? '' : value
};
},
computed: {},
watch: {
value: function value(val) {
this.stateValue = val;
}
},
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
if (_this.autoFocus) {
_this.focus();
}
});
},
methods: {
setValue: function setValue(value, callback) {
if (!(0, _propsUtil2['default'])(this, 'value')) {
this.stateValue = value;
this.$nextTick(function () {
callback && callback();
});
} else {
// 不在严格受控
// https://github.com/vueComponent/ant-design-vue/issues/2207,modal 是 新 new 实例,更新队列和当前不在同一个更新队列中
// this.$forceUpdate();
}
},
handleKeyDown: function handleKeyDown(e) {
if (e.keyCode === 13) {
this.$emit('pressEnter', e);
}
this.$emit('keydown', e);
},
onChange: function onChange(e) {
this.$emit('change.value', e.target.value);
this.$emit('change', e);
this.$emit('input', e);
},
handleChange: function handleChange(e) {
var _this2 = this;
var _e$target = e.target,
value = _e$target.value,
composing = _e$target.composing;
if ((e.isComposing || composing) && this.lazy || this.stateValue === value) return;
this.setValue(e.target.value, function () {
_this2.$refs.resizableTextArea.resizeTextarea();
});
(0, _Input.resolveOnChange)(this.$refs.resizableTextArea.$refs.textArea, e, this.onChange);
},
focus: function focus() {
this.$refs.resizableTextArea.$refs.textArea.focus();
},
blur: function blur() {
this.$refs.resizableTextArea.$refs.textArea.blur();
},
handleReset: function handleReset(e) {
var _this3 = this;
this.setValue('', function () {
_this3.$refs.resizableTextArea.renderTextArea();
_this3.focus();
});
(0, _Input.resolveOnChange)(this.$refs.resizableTextArea.$refs.textArea, e, this.onChange);
},
renderTextArea: function renderTextArea(prefixCls) {
var h = this.$createElement;
var props = (0, _propsUtil.getOptionProps)(this);
var resizeProps = {
props: (0, _extends3['default'])({}, props, {
prefixCls: prefixCls
}),
on: (0, _extends3['default'])({}, (0, _propsUtil.getListeners)(this), {
input: this.handleChange,
keydown: this.handleKeyDown
}),
attrs: this.$attrs
};
return h(_ResizableTextArea2['default'], (0, _babelHelperVueJsxMergeProps2['default'])([resizeProps, { ref: 'resizableTextArea' }]));
}
},
render: function render() {
var h = arguments[0];
var stateValue = this.stateValue,
customizePrefixCls = this.prefixCls;
var getPrefixCls = this.configProvider.getPrefixCls;
var prefixCls = getPrefixCls('input', customizePrefixCls);
var props = {
props: (0, _extends3['default'])({}, (0, _propsUtil.getOptionProps)(this), {
prefixCls: prefixCls,
inputType: 'text',
value: (0, _Input.fixControlledValue)(stateValue),
element: this.renderTextArea(prefixCls),
handleReset: this.handleReset
}),
on: (0, _propsUtil.getListeners)(this)
};
return h(_ClearableLabeledInput2['default'], props);
}
};
/***/ }),
/***/ "8bc7":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _vueTypes = __webpack_require__("7b44");
var _vueTypes2 = _interopRequireDefault(_vueTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
exports['default'] = {
prefixCls: _vueTypes2['default'].string,
inputPrefixCls: _vueTypes2['default'].string,
defaultValue: _vueTypes2['default'].oneOfType([_vueTypes2['default'].string, _vueTypes2['default'].number]),
value: _vueTypes2['default'].oneOfType([_vueTypes2['default'].string, _vueTypes2['default'].number]),
placeholder: [String, Number],
type: {
'default': 'text',
type: String
},
name: String,
size: _vueTypes2['default'].oneOf(['small', 'large', 'default']),
disabled: _vueTypes2['default'].bool,
readOnly: _vueTypes2['default'].bool,
addonBefore: _vueTypes2['default'].any,
addonAfter: _vueTypes2['default'].any,
// onPressEnter?: React.FormEventHandler<any>;
// onKeyDown?: React.FormEventHandler<any>;
// onChange?: React.ChangeEventHandler<HTMLInputElement>;
// onClick?: React.FormEventHandler<any>;
// onFocus?: React.FormEventHandler<any>;
// onBlur?: React.FormEventHandler<any>;
prefix: _vueTypes2['default'].any,
suffix: _vueTypes2['default'].any,
// spellCheck: Boolean,
autoFocus: Boolean,
allowClear: Boolean,
lazy: {
'default': true,
type: Boolean
},
maxLength: _vueTypes2['default'].number,
loading: _vueTypes2['default'].bool,
className: _vueTypes2['default'].string
};
/***/ }),
/***/ "a7f2":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _resizeObserverPolyfill = __webpack_require__("6dd8");
var _resizeObserverPolyfill2 = _interopRequireDefault(_resizeObserverPolyfill);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// Still need to be compatible with React 15, we use class component here
var VueResizeObserver = {
name: 'ResizeObserver',
props: {
disabled: Boolean
},
data: function data() {
this.currentElement = null;
this.resizeObserver = null;
return {
width: 0,
height: 0
};
},
mounted: function mounted() {
this.onComponentUpdated();
},
updated: function updated() {
this.onComponentUpdated();
},
beforeDestroy: function beforeDestroy() {
this.destroyObserver();
},
methods: {
onComponentUpdated: function onComponentUpdated() {
var disabled = this.$props.disabled;
// Unregister if disabled
if (disabled) {
this.destroyObserver();
return;
}
// Unregister if element changed
var element = this.$el;
var elementChanged = element !== this.currentElement;
if (elementChanged) {
this.destroyObserver();
this.currentElement = element;
}
if (!this.resizeObserver && element) {
this.resizeObserver = new _resizeObserverPolyfill2['default'](this.onResize);
this.resizeObserver.observe(element);
}
},
onResize: function onResize(entries) {
var target = entries[0].target;
var _target$getBoundingCl = target.getBoundingClientRect(),
width = _target$getBoundingCl.width,
height = _target$getBoundingCl.height;
/**
* Resize observer trigger when content size changed.
* In most case we just care about element size,
* let's use `boundary` instead of `contentRect` here to avoid shaking.
*/
var fixedWidth = Math.floor(width);
var fixedHeight = Math.floor(height);
if (this.width !== fixedWidth || this.height !== fixedHeight) {
var size = { width: fixedWidth, height: fixedHeight };
this.width = fixedWidth;
this.height = fixedHeight;
this.$emit('resize', size);
}
},
destroyObserver: function destroyObserver() {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
this.resizeObserver = null;
}
}
},
render: function render() {
return this.$slots['default'][0];
}
}; // based on rc-resize-observer 0.1.3
exports['default'] = VueResizeObserver;
/***/ }),
/***/ "ab92":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports['default'] = wrapperRaf;
var _raf = __webpack_require__("c449");
var _raf2 = _interopRequireDefault(_raf);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var id = 0;
var ids = {};
// Support call raf with delay specified frame
function wrapperRaf(callback) {
var delayFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var myId = id++;
var restFrames = delayFrames;
function internalCallback() {
restFrames -= 1;
if (restFrames <= 0) {
callback();
delete ids[myId];
} else {
ids[myId] = (0, _raf2['default'])(internalCallback);
}
}
ids[myId] = (0, _raf2['default'])(internalCallback);
return myId;
}
wrapperRaf.cancel = function (pid) {
if (pid === undefined) return;
_raf2['default'].cancel(ids[pid]);
delete ids[pid];
};
wrapperRaf.ids = ids; // export this for test usage
/***/ }),
/***/ "bbf5":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _objectWithoutProperties2 = __webpack_require__("8e8e");
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
exports['default'] = create;
var _index = __webpack_require__("50f6");
var _index2 = _interopRequireDefault(_index);
var _propsUtil = __webpack_require__("73c8");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var customCache = new Set();
function create(options) {
var scriptUrl = options.scriptUrl,
_options$extraCommonP = options.extraCommonProps,
extraCommonProps = _options$extraCommonP === undefined ? {} : _options$extraCommonP;
/**
* DOM API required.
* Make sure in browser environment.
* The Custom Icon will create a <script/>
* that loads SVG symbols and insert the SVG Element into the document body.
*/
if (typeof document !== 'undefined' && typeof window !== 'undefined' && typeof document.createElement === 'function' && typeof scriptUrl === 'string' && scriptUrl.length && !customCache.has(scriptUrl)) {
var script = document.createElement('script');
script.setAttribute('src', scriptUrl);
script.setAttribute('data-namespace', scriptUrl);
customCache.add(scriptUrl);
document.body.appendChild(script);
}
var Iconfont = {
functional: true,
name: 'AIconfont',
props: _index2['default'].props,
render: function render(h, context) {
var props = context.props,
slots = context.slots,
listeners = context.listeners,
data = context.data;
var type = props.type,
restProps = (0, _objectWithoutProperties3['default'])(props, ['type']);
var slotsMap = slots();
var children = slotsMap['default'];
// component > children > type
var content = null;
if (type) {
content = h('use', { attrs: { 'xlink:href': '#' + type } });
}
if (children) {
content = children;
}
var iconProps = (0, _propsUtil.mergeProps)(extraCommonProps, data, { props: restProps, on: listeners });
return h(
_index2['default'],
iconProps,
[content]
);
}
};
return Iconfont;
}
/***/ }),
/***/ "bfb7":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.calculateNodeStyling = calculateNodeStyling;
exports['default'] = calculateNodeHeight;
// Thanks to https://github.com/andreypopp/react-textarea-autosize/
/**
* calculateNodeHeight(uiTextNode, useCache = false)
*/
var HIDDEN_TEXTAREA_STYLE = '\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n';
var SIZING_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'font-variant', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];
var computedStyleCache = {};
var hiddenTextarea = void 0;
function calculateNodeStyling(node) {
var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var nodeRef = node.getAttribute('id') || node.getAttribute('data-reactid') || node.getAttribute('name');
if (useCache && computedStyleCache[nodeRef]) {
return computedStyleCache[nodeRef];
}
var style = window.getComputedStyle(node);
var boxSizing = style.getPropertyValue('box-sizing') || style.getPropertyValue('-moz-box-sizing') || style.getPropertyValue('-webkit-box-sizing');
var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));
var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));
var sizingStyle = SIZING_STYLE.map(function (name) {
return name + ':' + style.getPropertyValue(name);
}).join(';');
var nodeInfo = {
sizingStyle: sizingStyle,
paddingSize: paddingSize,
borderSize: borderSize,
boxSizing: boxSizing
};
if (useCache && nodeRef) {
computedStyleCache[nodeRef] = nodeInfo;
}
return nodeInfo;
}
function calculateNodeHeight(uiTextNode) {
var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var minRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var maxRows = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
if (!hiddenTextarea) {
hiddenTextarea = document.createElement('textarea');
document.body.appendChild(hiddenTextarea);
}
// Fix wrap="off" issue
// https://github.com/ant-design/ant-design/issues/6577
if (uiTextNode.getAttribute('wrap')) {
hiddenTextarea.setAttribute('wrap', uiTextNode.getAttribute('wrap'));
} else {
hiddenTextarea.removeAttribute('wrap');
}
// Copy all CSS properties that have an impact on the height of the content in
// the textbox
var _calculateNodeStyling = calculateNodeStyling(uiTextNode, useCache),
paddingSize = _calculateNodeStyling.paddingSize,
borderSize = _calculateNodeStyling.borderSize,
boxSizing = _calculateNodeStyling.boxSizing,
sizingStyle = _calculateNodeStyling.sizingStyle;
// Need to have the overflow attribute to hide the scrollbar otherwise
// text-lines will not calculated properly as the shadow will technically be
// narrower for content
hiddenTextarea.setAttribute('style', sizingStyle + ';' + HIDDEN_TEXTAREA_STYLE);
hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || '';
var minHeight = Number.MIN_SAFE_INTEGER;
var maxHeight = Number.MAX_SAFE_INTEGER;
var height = hiddenTextarea.scrollHeight;
var overflowY = void 0;
if (boxSizing === 'border-box') {
// border-box: add border, since height = content + padding + border
height += borderSize;
} else if (boxSizing === 'content-box') {
// remove padding, since height = content
height -= paddingSize;
}
if (minRows !== null || maxRows !== null) {
// measure height of a textarea with a single row
hiddenTextarea.value = ' ';
var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
if (minRows !== null) {
minHeight = singleRowHeight * minRows;
if (boxSizing === 'border-box') {
minHeight = minHeight + paddingSize + borderSize;
}
height = Math.max(minHeight, height);
}
if (maxRows !== null) {
maxHeight = singleRowHeight * maxRows;
if (boxSizing === 'border-box') {
maxHeight = maxHeight + paddingSize + borderSize;
}
overflowY = height > maxHeight ? '' : 'hidden';
height = Math.min(maxHeight, height);
}
}
return {
height: height + 'px',
minHeight: minHeight + 'px',
maxHeight: maxHeight + 'px',
overflowY: overflowY
};
}
/***/ }),
/***/ "ccf8":
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelHelperVueJsxMergeProps = __webpack_require__("92fa");
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _defineProperty2 = __webpack_require__("6042");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends2 = __webpack_require__("41b2");
var _extends3 = _interopRequireDefault(_extends2);
var _vcResizeObserver = __webpack_require__("a7f2");
var _vcResizeObserver2 = _interopRequireDefault(_vcResizeObserver);
var _omit = __webpack_require__("0464");
var _omit2 = _interopRequireDefault(_omit);
var _classnames = __webpack_require__("4d26");
var _classnames2 = _interopRequireDefault(_classnames);
var _calculateNodeHeight = __webpack_require__("bfb7");
var _calculateNodeHeight2 = _interopRequireDefault(_calculateNodeHeight);
var _raf = __webpack_require__("ab92");
var _raf2 = _interopRequireDefault(_raf);
var _warning = __webpack_require__("a7e2");
var _warning2 = _interopRequireDefault(_warning);
var _BaseMixin = __webpack_require__("48bb");
var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
var _inputProps = __webpack_require__("8bc7");
var _inputProps2 = _interopRequireDefault(_inputProps);
var _vueTypes = __webpack_require__("7b44");
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _propsUtil = __webpack_require__("73c8");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var RESIZE_STATUS_NONE = 0;
var RESIZE_STATUS_RESIZING = 1;
var RESIZE_STATUS_RESIZED = 2;
var TextAreaProps = (0, _extends3['default'])({}, _inputProps2['default'], {
autosize: _vueTypes2['default'].oneOfType([Object, Boolean]),
autoSize: _vueTypes2['default'].oneOfType([Object, Boolean])
});
var ResizableTextArea = {
name: 'ResizableTextArea',
props: TextAreaProps,
data: function data() {
return {
textareaStyles: {},
resizeStatus: RESIZE_STATUS_NONE
};
},
mixins: [_BaseMixin2['default']],
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
_this.resizeTextarea();
});
},
beforeDestroy: function beforeDestroy() {
_raf2['default'].cancel(this.nextFrameActionId);
_raf2['default'].cancel(this.resizeFrameId);
},
watch: {
value: function value() {
var _this2 = this;
this.$nextTick(function () {
_this2.resizeTextarea();
});
}
},
methods: {
handleResize: function handleResize(size) {
var resizeStatus = this.$data.resizeStatus;
var autoSize = this.$props.autoSize;
if (resizeStatus !== RESIZE_STATUS_NONE) {
return;
}
this.$emit('resize', size);
if (autoSize) {
this.resizeOnNextFrame();
}
},
resizeOnNextFrame: function resizeOnNextFrame() {
_raf2['default'].cancel(this.nextFrameActionId);
this.nextFrameActionId = (0, _raf2['default'])(this.resizeTextarea);
},
resizeTextarea: function resizeTextarea() {
var _this3 = this;
var autoSize = this.$props.autoSize || this.$props.autosize;
if (!autoSize || !this.$refs.textArea) {
return;
}
var minRows = autoSize.minRows,
maxRows = autoSize.maxRows;
var textareaStyles = (0, _calculateNodeHeight2['default'])(this.$refs.textArea, false, minRows, maxRows);
this.setState({ textareaStyles: textareaStyles, resizeStatus: RESIZE_STATUS_RESIZING }, function () {
_raf2['default'].cancel(_this3.resizeFrameId);
_this3.resizeFrameId = (0, _raf2['default'])(function () {
_this3.setState({ resizeStatus: RESIZE_STATUS_RESIZED }, function () {
_this3.resizeFrameId = (0, _raf2['default'])(function () {
_this3.setState({ resizeStatus: RESIZE_STATUS_NONE });
_this3.fixFirefoxAutoScroll();
});
});
});
});
},
// https://github.com/ant-design/ant-design/issues/21870
fixFirefoxAutoScroll: function fixFirefoxAutoScroll() {
try {
if (document.activeElement === this.$refs.textArea) {
var currentStart = this.$refs.textArea.selectionStart;
var currentEnd = this.$refs.textArea.selectionEnd;
this.$refs.textArea.setSelectionRange(currentStart, currentEnd);
}
} catch (e) {
// Fix error in Chrome:
// Failed to read the 'selectionStart' property from 'HTMLInputElement'
// http://stackoverflow.com/q/21177489/3040605
}
},
renderTextArea: function renderTextArea() {
var h = this.$createElement;
var props = (0, _propsUtil.getOptionProps)(this);
var prefixCls = props.prefixCls,
autoSize = props.autoSize,
autosize = props.autosize,
disabled = props.disabled;
var _$data = this.$data,
textareaStyles = _$data.textareaStyles,
resizeStatus = _$data.resizeStatus;
(0, _warning2['default'])(autosize === undefined, 'Input.TextArea', 'autosize is deprecated, please use autoSize instead.');
var otherProps = (0, _omit2['default'])(props, ['prefixCls', 'autoSize', 'autosize', 'defaultValue', 'allowClear', 'type', 'lazy', 'value']);
var cls = (0, _classnames2['default'])(prefixCls, (0, _defineProperty3['default'])({}, prefixCls + '-disabled', disabled));
var domProps = {};
// Fix https://github.com/ant-design/ant-design/issues/6776
// Make sure it could be reset when using form.getFieldDecorator
if ('value' in props) {
domProps.value = props.value || '';
}
var style = (0, _extends3['default'])({}, textareaStyles, resizeStatus === RESIZE_STATUS_RESIZING ? { overflowX: 'hidden', overflowY: 'hidden' } : null);
var textareaProps = {
attrs: otherProps,
domProps: domProps,
style: sty