From ceb15f97179391e270d2f6d0fab35d7c679549d2 Mon Sep 17 00:00:00 2001 From: gengyang Date: Mon, 16 Mar 2020 20:50:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20component=20descri?= =?UTF-8?q?ptions=20in=20assets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/config/assets.js | 1041 ++++++++++++++++++++++++-- 1 file changed, 993 insertions(+), 48 deletions(-) diff --git a/packages/editor/src/config/assets.js b/packages/editor/src/config/assets.js index 954ac79e6..4a6193df6 100644 --- a/packages/editor/src/config/assets.js +++ b/packages/editor/src/config/assets.js @@ -24,19 +24,111 @@ export default { exportName: 'Button' }, props: [ + { + name: 'prefix', + propType: 'string', + defaultValue: "'next-'" + }, + { + name: 'rtl', + propType: 'bool' + }, { name: 'type', - propType: 'string' + propType: { + type: 'oneOf', + value: ['primary', 'secondary', 'normal'] + }, + description: '按钮的类型', + defaultValue: "'normal'" + }, + { + name: 'size', + propType: { + type: 'oneOf', + value: ['small', 'medium', 'large'] + }, + description: '按钮的尺寸', + defaultValue: "'medium'" + }, + { + name: 'iconSize', + propType: { + type: 'oneOf', + value: ['xxs', 'xs', 'small', 'medium', 'large', 'xl', 'xxl', 'xxxl'] + }, + description: '按钮中 Icon 的尺寸,用于替代 Icon 的默认大小' + }, + { + name: 'htmlType', + propType: { + type: 'oneOf', + value: ['submit', 'reset', 'button'] + }, + description: "当 component = 'button' 时,设置 button 标签的 type 值", + defaultValue: "'button'" + }, + { + name: 'component', + propType: { + type: 'oneOf', + value: ['button', 'a', 'div', 'span'] + }, + description: '设置标签类型', + defaultValue: "'button'" + }, + { + name: 'loading', + propType: 'bool', + description: '设置按钮的载入状态', + defaultValue: 'false' + }, + { + name: 'ghost', + propType: { + type: 'oneOf', + value: [true, false, 'light', 'dark'] + }, + description: '是否为幽灵按钮', + defaultValue: 'false' + }, + { + name: 'text', + propType: 'bool', + description: '是否为文本按钮', + defaultValue: 'false' + }, + { + name: 'warning', + propType: 'bool', + description: '是否为警告按钮', + defaultValue: 'false' + }, + { + name: 'disabled', + propType: 'bool', + description: '是否禁用', + defaultValue: 'false' }, { name: 'onClick', + propType: 'func', + description: '点击按钮的回调\n@param {Object} e Event Object', + defaultValue: '() => {}' + }, + { + name: 'className', + propType: 'string' + }, + { + name: 'onMouseUp', propType: 'func' }, { name: 'children', - propType: 'string' + propType: 'node' } - ], + ] }, 'Button.Group': { componentName: 'Button.Group', @@ -50,11 +142,30 @@ export default { subName: 'Group' }, props: [ + { + name: 'rtl', + propType: 'bool' + }, + { + name: 'prefix', + propType: 'string', + defaultValue: "'next-'" + }, { name: 'size', + propType: 'string', + description: '统一设置 Button 组件的按钮大小', + defaultValue: "'medium'" + }, + { + name: 'className', propType: 'string' + }, + { + name: 'children', + propType: 'node' } - ], + ] }, Input: { componentName: 'Input', @@ -68,26 +179,132 @@ export default { }, props: [ { - name: 'placeholder', + name: 'label', + propType: 'node', + description: 'label' + }, + { + name: 'hasClear', + propType: 'bool', + description: '是否出现clear按钮' + }, + { + name: 'hasBorder', + propType: 'bool', + description: '是否有边框', + defaultValue: 'true' + }, + { + name: 'state', + propType: { + type: 'oneOf', + value: ['error', 'loading', 'success', 'warning'] + }, + description: '状态\n@enumdesc 错误, 校验中, 成功, 警告' + }, + { + name: 'size', + propType: { + type: 'oneOf', + value: ['small', 'medium', 'large'] + }, + description: '尺寸\n@enumdesc 小, 中, 大', + defaultValue: "'medium'" + }, + { + name: 'onPressEnter', + propType: 'func', + description: '按下回车的回调', + defaultValue: 'func.noop' + }, + { + name: 'onClear', + propType: 'func' + }, + { + name: 'htmlType', + propType: 'string', + description: '原生type' + }, + { + name: 'htmlSize', propType: 'string' }, { - name: 'onChange', - propType: 'func' + name: 'hint', + propType: 'string', + description: '水印 (Icon的type类型,和hasClear占用一个地方)' }, { - name: 'onKeyDown', - propType: 'func' + name: 'innerBefore', + propType: 'node', + description: '文字前附加内容' }, { - name: 'onFocus', - propType: 'func' + name: 'innerAfter', + propType: 'node', + description: '文字后附加内容' }, { - name: 'onBlur', - propType: 'func' + name: 'addonBefore', + propType: 'node', + description: '输入框前附加内容' + }, + { + name: 'addonAfter', + propType: 'node', + description: '输入框后附加内容' + }, + { + name: 'addonTextBefore', + propType: 'node', + description: '输入框前附加文字' + }, + { + name: 'addonTextAfter', + propType: 'node', + description: '输入框后附加文字' + }, + { + name: 'autoComplete', + propType: 'string', + description: '(原生input支持)', + defaultValue: "'off'" + }, + { + name: 'autoFocus', + propType: 'bool', + description: '自动聚焦(原生input支持)' + }, + { + name: 'inputRender', + propType: 'func', + defaultValue: 'el => el' + }, + { + name: 'extra', + propType: 'node' + }, + { + name: 'innerBeforeClassName', + propType: 'string' + }, + { + name: 'innerAfterClassName', + propType: 'string' + }, + { + name: 'isPreview', + propType: 'bool', + description: '是否为预览态', + defaultValue: 'false' + }, + { + name: 'renderPreview', + propType: 'func', + description: '预览态模式下渲染的内容\n@param {number} value 评分值' } - ], + ] }, Form: { componentName: 'Form', @@ -101,14 +318,139 @@ export default { }, props: [ { - name: 'device', - propType: 'string' + name: 'prefix', + propType: 'string', + description: '样式前缀', + defaultValue: '"next-"' + }, + { + name: 'inline', + propType: 'bool', + description: '内联表单' + }, + { + name: 'size', + propType: { + type: 'oneOf', + value: ['large', 'medium', 'small'] + }, + description: + '单个 Item 的 size 自定义,优先级高于 Form 的 size, 并且当组件与 Item 一起使用时,组件自身设置 size 属性无效。\n@enumdesc 大, 中, 小', + defaultValue: '"medium"' + }, + { + name: 'fullWidth', + propType: 'bool', + description: '单个 Item 中表单类组件宽度是否是100%' + }, + { + name: 'labelAlign', + propType: { + type: 'oneOf', + value: ['top', 'left', 'inset'] + }, + description: '标签的位置\n@enumdesc 上, 左, 内', + defaultValue: '"left"' + }, + { + name: 'labelTextAlign', + propType: { + type: 'oneOf', + value: ['left', 'right'] + }, + description: '标签的左右对齐方式\n@enumdesc 左, 右' + }, + { + name: 'field', + propType: 'any', + description: 'field 实例, 传 false 会禁用 field' + }, + { + name: 'saveField', + propType: 'func', + description: '保存 Form 自动生成的 field 对象', + defaultValue: 'func.noop' + }, + { + name: 'labelCol', + propType: 'object', + description: '控制第一级 Item 的 labelCol' + }, + { + name: 'wrapperCol', + propType: 'object', + description: '控制第一级 Item 的 wrapperCol' + }, + { + name: 'onSubmit', + propType: 'func', + description: 'form内有 `htmlType="submit"` 的元素的时候会触发', + defaultValue: 'function preventDefault(e) {\n e.preventDefault();\n}' + }, + { + name: 'children', + propType: 'any', + description: '子元素' + }, + { + name: 'className', + propType: 'string', + description: '扩展class' + }, + { + name: 'style', + propType: 'object', + description: '自定义内联样式' + }, + { + name: 'value', + propType: 'object', + description: '表单数值' }, { name: 'onChange', - propType: 'func' + propType: 'func', + description: + '表单变化回调\n@param {Object} values 表单数据\n@param {Object} item 详细\n@param {String} item.name 变化的组件名\n@param {String} item.value 变化的数据\n@param {Object} item.field field 实例', + defaultValue: 'func.noop' }, - ], + { + name: 'component', + propType: { + type: 'oneOfType', + value: ['string', 'func'] + }, + description: '设置标签类型', + defaultValue: '"form"' + }, + { + name: 'fieldOptions', + propType: 'object' + }, + { + name: 'rtl', + propType: 'bool' + }, + { + name: 'device', + propType: { + type: 'oneOf', + value: ['phone', 'tablet', 'desktop'] + }, + description: '预设屏幕宽度', + defaultValue: '"desktop"' + }, + { + name: 'responsive', + propType: 'bool', + description: '是否开启内置的响应式布局 (使用ResponsiveGrid)' + }, + { + name: 'isPreview', + propType: 'bool', + description: '是否开启预览态' + } + ] }, 'Form.Item': { componentName: 'Form.Item', @@ -123,14 +465,289 @@ export default { }, props: [ { - name: 'label', + name: 'prefix', propType: 'string', + description: '样式前缀', + defaultValue: "'next-'" + }, + { + name: 'rtl', + propType: 'bool' + }, + { + name: 'label', + propType: 'node', + description: 'label 标签的文本' + }, + { + name: 'labelCol', + propType: 'object', + description: + 'label 标签布局,通 `` 组件,设置 span offset 值,如 {span: 8, offset: 16},该项仅在垂直表单有效' + }, + { + name: 'wrapperCol', + propType: 'object', + description: '需要为输入控件设置布局样式时,使用该属性,用法同 labelCol' + }, + { + name: 'help', + propType: 'node', + description: '自定义提示信息,如不设置,则会根据校验规则自动生成.' + }, + { + name: 'extra', + propType: 'node', + description: + '额外的提示信息,和 help 类似,当需要错误信息和提示文案同时出现时,可以使用这个。 位于错误信息后面' + }, + { + name: 'validateState', + propType: { + type: 'oneOf', + value: ['error', 'success', 'loading', 'warning'] + }, + description: '校验状态,如不设置,则会根据校验规则自动生成\n@enumdesc 失败, 成功, 校验中, 警告' + }, + { + name: 'hasFeedback', + propType: 'bool', + description: '配合 validateState 属性使用,是否展示 success/loading 的校验状态图标, 目前只有Input支持', + defaultValue: 'false' + }, + { + name: 'style', + propType: 'object', + description: '自定义内联样式' + }, + { + name: 'id', + propType: 'string' + }, + { + name: 'children', + propType: { + type: 'oneOfType', + value: ['node', 'func'] + }, + description: 'node 或者 function(values)' + }, + { + name: 'size', + propType: { + type: 'oneOf', + value: ['large', 'small', 'medium'] + }, + description: + '单个 Item 的 size 自定义,优先级高于 Form 的 size, 并且当组件与 Item 一起使用时,组件自身设置 size 属性无效。' + }, + { + name: 'fullWidth', + propType: 'bool', + description: '单个 Item 中表单类组件宽度是否是100%' + }, + { + name: 'labelAlign', + propType: { + type: 'oneOf', + value: ['top', 'left', 'inset'] + }, + description: '标签的位置\n@enumdesc 上, 左, 内' + }, + { + name: 'labelTextAlign', + propType: { + type: 'oneOf', + value: ['left', 'right'] + }, + description: '标签的左右对齐方式\n@enumdesc 左, 右' + }, + { + name: 'className', + propType: 'string', + description: '扩展class' + }, + { + name: 'required', + propType: 'bool', + description: '[表单校验] 不能为空' + }, + { + name: 'asterisk', + propType: 'bool', + description: 'required 的星号是否显示' + }, + { + name: 'requiredMessage', + propType: 'string', + description: 'required 自定义错误信息' + }, + { + name: 'requiredTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'required 自定义触发方式' + }, + { + name: 'min', + propType: 'number', + description: '[表单校验] 最小值' + }, + { + name: 'max', + propType: 'number', + description: '[表单校验] 最大值' + }, + { + name: 'minmaxMessage', + propType: 'string', + description: 'min/max 自定义错误信息' + }, + { + name: 'minmaxTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'min/max 自定义触发方式' + }, + { + name: 'minLength', + propType: 'number', + description: '[表单校验] 字符串最小长度 / 数组最小个数' + }, + { + name: 'maxLength', + propType: 'number', + description: '[表单校验] 字符串最大长度 / 数组最大个数' + }, + { + name: 'minmaxLengthMessage', + propType: 'string', + description: 'minLength/maxLength 自定义错误信息' + }, + { + name: 'minmaxLengthTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'minLength/maxLength 自定义触发方式' + }, + { + name: 'length', + propType: 'number', + description: '[表单校验] 字符串精确长度 / 数组精确个数' + }, + { + name: 'lengthMessage', + propType: 'string', + description: 'length 自定义错误信息' + }, + { + name: 'lengthTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'length 自定义触发方式' + }, + { + name: 'pattern', + propType: 'any', + description: '正则校验' + }, + { + name: 'patternMessage', + propType: 'string', + description: 'pattern 自定义错误信息' + }, + { + name: 'patternTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'pattern 自定义触发方式' + }, + { + name: 'format', + propType: { + type: 'oneOf', + value: ['number', 'email', 'url', 'tel'] + }, + description: '[表单校验] 四种常用的 pattern' + }, + { + name: 'formatMessage', + propType: 'string', + description: 'format 自定义错误信息' + }, + { + name: 'formatTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'format 自定义触发方式' + }, + { + name: 'validator', + propType: 'func', + description: '[表单校验] 自定义校验函数' + }, + { + name: 'validatorTrigger', + propType: { + type: 'oneOfType', + value: ['string', 'array'] + }, + description: 'validator 自定义触发方式' + }, + { + name: 'autoValidate', + propType: 'bool', + description: '是否修改数据时自动触发校验' }, { name: 'device', - propType: 'string' + propType: { + type: 'oneOf', + value: ['phone', 'tablet', 'desktop'] + }, + description: '预设屏幕宽度' + }, + { + name: 'responsive', + propType: 'bool' + }, + { + name: 'colSpan', + propType: 'number', + description: '在响应式布局模式下,表单项占多少列' + }, + { + name: 'labelWidth', + propType: { + type: 'oneOfType', + value: ['string', 'number'] + }, + description: '在响应式布局下,且label在左边时,label的宽度是多少', + defaultValue: '100' + }, + { + name: 'isPreview', + propType: 'bool', + description: '是否开启预览态' + }, + { + name: 'renderPreview', + propType: 'func', + description: '预览态模式下渲染的内容\n@param {any} value 根据包裹的组件的 value 类型而决定' } - ], + ] }, NumberPicker: { componentName: 'NumberPicker', @@ -140,38 +757,186 @@ export default { package: '@alifd/next', version: '1.19.18', destructuring: true, - exportName: 'NumberPicker', + exportName: 'NumberPicker' }, props: [ { - name: 'size', + name: 'prefix', propType: 'string', + description: '样式前缀', + defaultValue: '"next-"' + }, + { + name: 'type', + propType: { + type: 'oneOf', + value: ['normal', 'inline'] + }, + description: '设置类型\n@enumdesc 普通, 内联', + defaultValue: '"normal"' + }, + { + name: 'size', + propType: { + type: 'oneOf', + value: ['large', 'medium'] + }, + description: '大小', + defaultValue: '"medium"' + }, + { + name: 'value', + propType: 'number', + description: '当前值' }, { name: 'defaultValue', - propType: 'number' + propType: 'number', + description: '默认值' + }, + { + name: 'disabled', + propType: 'bool', + description: '是否禁用' + }, + { + name: 'step', + propType: { + type: 'oneOfType', + value: ['number', 'string'] + }, + description: '步长', + defaultValue: '1' + }, + { + name: 'precision', + propType: 'number', + description: '保留小数点后位数', + defaultValue: '0' + }, + { + name: 'editable', + propType: 'bool', + description: '用户是否可以输入', + defaultValue: 'true' + }, + { + name: 'autoFocus', + propType: 'bool', + description: '自动焦点' }, { name: 'onChange', - propType: 'func' + propType: 'func', + description: '数值被改变的事件\n@param {Number} value 数据\n@param {Event} e DOM事件对象', + defaultValue: 'func.noop' }, { name: 'onKeyDown', - propType: 'func' + propType: 'func', + description: '键盘按下', + defaultValue: 'func.noop' }, { name: 'onFocus', - propType: 'func' + propType: 'func', + description: '焦点获得' }, { name: 'onBlur', - propType: 'func' + propType: 'func', + description: '焦点失去', + defaultValue: 'func.noop' }, { name: 'onCorrect', - propType: 'func' + propType: 'func', + description: '数值订正后的回调\n@param {Object} obj {currentValue,oldValue:String}', + defaultValue: 'func.noop' + }, + { + name: 'onDisabled', + propType: 'func', + defaultValue: 'func.noop' + }, + { + name: 'max', + propType: 'number', + description: '最大值', + defaultValue: 'Infinity' + }, + { + name: 'min', + propType: 'number', + description: '最小值', + defaultValue: '-Infinity' + }, + { + name: 'className', + propType: 'string', + description: '自定义class' + }, + { + name: 'style', + propType: 'object', + description: '自定义内联样式', + defaultValue: '{}' + }, + { + name: 'state', + propType: { + type: 'oneOf', + value: ['error'] + } + }, + { + name: 'format', + propType: 'func', + description: '格式化当前值\n@param {Number} value\n@return {String|Number}' + }, + { + name: 'upBtnProps', + propType: 'object', + description: '增加按钮的props' + }, + { + name: 'downBtnProps', + propType: 'object', + description: '减少按钮的props' + }, + { + name: 'label', + propType: 'node', + description: '内联 label' + }, + { + name: 'innerAfter', + propType: 'node', + description: 'inner after' + }, + { + name: 'rtl', + propType: 'bool' + }, + { + name: 'isPreview', + propType: 'bool', + description: '是否为预览态' + }, + { + name: 'renderPreview', + propType: 'func', + description: '预览态模式下渲染的内容\n@param {number} value 评分值' + }, + { + name: 'device', + propType: { + type: 'oneOf', + value: ['phone', 'tablet', 'desktop'] + }, + description: '预设屏幕宽度' } - ], + ] }, Select: { componentName: 'Select', @@ -181,54 +946,234 @@ export default { package: '@alifd/next', version: '1.19.18', destructuring: true, - exportName: 'Select', + exportName: 'Select' }, props: [ { - name: 'size', - propType: 'string', + name: 'mode', + propType: { + type: 'oneOf', + value: ['single', 'multiple', 'tag'] + }, + description: '选择器模式', + defaultValue: '"single"' + }, + { + name: 'value', + propType: 'any', + description: '当前值,用于受控模式' }, { name: 'defaultValue', - propType: 'number' - }, - { - name: 'placeholder', - propType: 'string' + propType: 'any', + description: '初始的默认值' }, { name: 'onChange', - propType: 'func' + propType: 'func', + description: + "Select发生改变时触发的回调\n@param {*} value 选中的值\n@param {String} actionType 触发的方式, 'itemClick', 'enter', 'tag'\n@param {*} item 选中的值的对象数据 (useDetailValue=false有效)" }, { - name: 'onVisibleChange', - propType: 'func' + name: 'dataSource', + propType: { + type: 'arrayOf', + value: { + type: 'oneOfType', + value: [ + { + type: 'shape', + value: [ + { + name: 'value', + propType: 'any' + }, + { + name: 'label', + propType: 'any' + }, + { + name: 'disabled', + propType: 'bool' + }, + { + name: 'children', + propType: 'array' + } + ] + }, + 'bool', + 'number', + 'string' + ] + } + }, + description: '传入的数据源,可以动态渲染子项,详见 [dataSource的使用](#dataSource的使用)' }, { - name: 'onToggleHighlightItem', - propType: 'func' + name: 'hasBorder', + propType: 'bool', + description: '是否有边框' + }, + { + name: 'hasArrow', + propType: 'bool', + description: '是否有下拉箭头', + defaultValue: 'true' + }, + { + name: 'showSearch', + propType: 'bool', + description: '展开后是否能搜索(tag 模式下固定为true)', + defaultValue: 'false' }, { name: 'onSearch', - propType: 'func' + propType: 'func', + description: '当搜索框值变化时回调\n@param {String} value 数据' }, { name: 'onSearchClear', - propType: 'func' + propType: 'func', + description: + "当搜索框值被清空时候的回调\n@param {String} actionType 触发的方式, 'select'(选择清空), 'popupClose'(弹窗关闭清空)" + }, + { + name: 'hasSelectAll', + propType: { + type: 'oneOfType', + value: ['bool', 'string'] + }, + description: '多选模式下是否有全选功能' + }, + { + name: 'fillProps', + propType: 'string', + description: '填充到选择框里的值的 key\b\b' + }, + { + name: 'useDetailValue', + propType: 'bool', + description: 'onChange 返回的 value 使用 dataSource 的对象' + }, + { + name: 'cacheValue', + propType: 'bool', + description: 'dataSource 变化的时是否保留已选的内容', + defaultValue: 'true' + }, + { + name: 'valueRender', + propType: 'func', + description: + '渲染 Select 展现内容的方法\n@param {Object} item 渲染节点的item\n@return {ReactNode} 展现内容\n@default item => item.label \\|\\| item.value' + }, + { + name: 'itemRender', + propType: 'func', + description: + '渲染 MenuItem 内容的方法\n@param {Object} item 渲染节点的item\n@param {String} searchValue 搜索关键字(如果开启搜索)\n@return {ReactNode} item node' + }, + { + name: 'notFoundContent', + propType: 'node', + description: '弹层内容为空的文案' + }, + { + name: 'style', + propType: 'object' + }, + { + name: 'searchValue', + propType: 'string', + description: '受控搜索值,一般不需要设置\n@type {[type]}' + }, + { + name: 'tagInline', + propType: 'bool', + description: '是否一行显示,仅在 mode 为 multiple 的时候生效', + defaultValue: 'false' + }, + { + name: 'maxTagCount', + propType: 'number', + description: '最多显示多少个 tag' + }, + { + name: 'maxTagPlaceholder', + propType: 'func', + description: + '隐藏多余 tag 时显示的内容,在 maxTagCount 生效时起作用\n@param {number} selectedValues 当前已选中的元素\n@param {number} totalValues 总待选元素' + }, + { + name: 'hiddenSelected', + propType: 'bool', + description: '选择后是否立即隐藏菜单 (mode=multiple/tag 模式生效)' }, { name: 'onRemove', - propType: 'func' + propType: 'func', + description: 'tag 删除回调\n@param {object} item 渲染节点的item' }, { name: 'onFocus', - propType: 'func' + propType: 'func', + description: '焦点事件' }, { name: 'onBlur', + propType: 'func', + description: '失去焦点事件' + }, + { + name: 'onMouseEnter', propType: 'func' + }, + { + name: 'onMouseLeave', + propType: 'func' + }, + { + name: 'onKeyDown', + propType: 'func' + }, + { + name: 'locale', + propType: 'object', + defaultValue: 'zhCN.Select' } - ], + ] + }, + 'Select.Option': { + componentName: 'Select.Option', + title: '选择项', + devMode: 'proCode', + npm: { + package: '@alifd/next', + version: '1.19.18', + destructuring: true, + exportName: 'Select', + subName: 'Option' + }, + props: [ + { + name: 'value', + propType: { + type: 'any', + isRequired: true + }, + description: '选项值' + }, + { + name: 'disabled', + propType: 'bool', + description: '是否禁用' + }, + { + name: 'children', + propType: 'any' + } + ] } }, componentList: [