amis-editor 4.0.1-beta.16 → 4.0.1-beta.18
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/component/Control/APIControl.d.ts +540 -0
- package/dist/component/Control/OptionControl.d.ts +163 -0
- package/dist/component/Control/PopoverEdit.d.ts +57 -0
- package/dist/component/Control/ValidationControl.d.ts +30 -0
- package/dist/component/Panel/LeftPanels.d.ts +0 -1
- package/dist/component/base/SearchRendererPanel.d.ts +51 -0
- package/dist/component/remarkTpl.d.ts +150 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.min.js +1 -1
- package/dist/manager.d.ts +2 -0
- package/dist/plugin/Card.d.ts +0 -1
- package/dist/plugin/Flex.d.ts +0 -1
- package/dist/plugin/Form/InputTable.d.ts +0 -1
- package/dist/plugin/Form/Static.d.ts +0 -1
- package/dist/plugin/HBox.d.ts +0 -1
- package/dist/plugin/ListItem.d.ts +0 -1
- package/dist/plugin/TableCell.d.ts +0 -1
- package/dist/store/editor.d.ts +9 -0
- package/dist/style.css +1 -1
- package/dist/util.d.ts +2 -2
- package/package.json +15 -13
@@ -0,0 +1,163 @@
|
|
1
|
+
/**
|
2
|
+
* @file 组件选项组件的可视化编辑控件
|
3
|
+
*/
|
4
|
+
import React from 'react';
|
5
|
+
import Sortable from 'sortablejs';
|
6
|
+
import type { Option } from 'amis';
|
7
|
+
import type { FormControlProps } from 'amis/lib/renderers/Form/Item';
|
8
|
+
import type { OptionValue } from 'amis/lib/components/Select';
|
9
|
+
export declare type valueType = 'text' | 'boolean' | 'number';
|
10
|
+
export interface PopoverForm {
|
11
|
+
optionLabel: string;
|
12
|
+
optionValue: any;
|
13
|
+
optionValueType: valueType;
|
14
|
+
}
|
15
|
+
export declare type OptionControlItem = Option & {
|
16
|
+
checked: boolean;
|
17
|
+
};
|
18
|
+
export interface OptionControlProps extends FormControlProps {
|
19
|
+
className?: string;
|
20
|
+
}
|
21
|
+
export interface OptionControlState {
|
22
|
+
options: Array<OptionControlItem>;
|
23
|
+
popOverData: any;
|
24
|
+
popOverCtx?: {
|
25
|
+
mode: 'add' | 'edit';
|
26
|
+
index?: number;
|
27
|
+
};
|
28
|
+
source: 'custom' | 'api' | 'form';
|
29
|
+
sourceOptions: Array<Option>;
|
30
|
+
}
|
31
|
+
export declare class OptionControl extends React.Component<OptionControlProps, OptionControlState> {
|
32
|
+
sortable?: Sortable;
|
33
|
+
drag?: HTMLElement | null;
|
34
|
+
target: HTMLElement | null;
|
35
|
+
internalProps: string[];
|
36
|
+
constructor(props: OptionControlProps);
|
37
|
+
componentDidUpdate(prevProps: OptionControlProps): void;
|
38
|
+
/**
|
39
|
+
* 获取当前选项值的类型
|
40
|
+
*/
|
41
|
+
getOptionValueType(value: any): valueType;
|
42
|
+
/**
|
43
|
+
* 将当前选项值转换为选择的类型
|
44
|
+
*/
|
45
|
+
normalizeOptionValue(value: any, valueType: valueType): string | number | boolean;
|
46
|
+
/**
|
47
|
+
* 处理填入输入框的值
|
48
|
+
*/
|
49
|
+
transformOptionValue(value: any): string;
|
50
|
+
transformOptions(props: OptionControlProps): {
|
51
|
+
checked: boolean;
|
52
|
+
label?: string | undefined;
|
53
|
+
scopeLabel?: string | undefined;
|
54
|
+
value?: any;
|
55
|
+
disabled?: boolean | undefined;
|
56
|
+
children?: import("amis").Options | undefined;
|
57
|
+
visible?: boolean | undefined;
|
58
|
+
hidden?: boolean | undefined;
|
59
|
+
description?: string | undefined;
|
60
|
+
defer?: boolean | undefined;
|
61
|
+
deferApi?: import("amis").SchemaApi | undefined;
|
62
|
+
loading?: boolean | undefined;
|
63
|
+
loaded?: boolean | undefined;
|
64
|
+
}[];
|
65
|
+
/**
|
66
|
+
* 处理当前组件的默认值
|
67
|
+
*/
|
68
|
+
normalizeValue(): OptionValue | OptionValue[];
|
69
|
+
/**
|
70
|
+
* 更新options字段的统一出口
|
71
|
+
*/
|
72
|
+
onChangeOptions(): void;
|
73
|
+
targetRef(ref: any): void;
|
74
|
+
dragRef(ref: any): void;
|
75
|
+
initDragging(): void;
|
76
|
+
destroyDragging(): void;
|
77
|
+
scroll2Bottom(): void;
|
78
|
+
/**
|
79
|
+
* 切换选项类型
|
80
|
+
*/
|
81
|
+
handleSourceChange(option: {
|
82
|
+
label: string;
|
83
|
+
value: 'custom' | 'api' | 'form';
|
84
|
+
}): void;
|
85
|
+
/**
|
86
|
+
* 删除选项
|
87
|
+
*/
|
88
|
+
handleDelete(index: number, e: React.UIEvent<any>): void;
|
89
|
+
/**
|
90
|
+
* 设置默认选项
|
91
|
+
*/
|
92
|
+
handleToggleDefaultValue(index: number, checked: any, shift?: boolean): void;
|
93
|
+
/**
|
94
|
+
* 编辑选项
|
95
|
+
*/
|
96
|
+
handleEdit(index: number, e: React.UIEvent<any>): void;
|
97
|
+
handleEditLabel(index: number, e: React.FocusEvent<HTMLInputElement>): void;
|
98
|
+
handleAdd(): void;
|
99
|
+
handlePopoverSubmit(values: PopoverForm, action: any): void;
|
100
|
+
closePopoverEdit(): boolean;
|
101
|
+
handleBatchAdd(values: {
|
102
|
+
batchOption: string;
|
103
|
+
}, action: any): void;
|
104
|
+
renderHeader(): JSX.Element;
|
105
|
+
renderOption(props: any): JSX.Element;
|
106
|
+
renderPopover(): JSX.Element;
|
107
|
+
buildBatchAddSchema(): {
|
108
|
+
type: string;
|
109
|
+
actionType: string;
|
110
|
+
level: string;
|
111
|
+
size: string;
|
112
|
+
label: string;
|
113
|
+
dialog: {
|
114
|
+
title: string;
|
115
|
+
headerClassName: string;
|
116
|
+
closeOnEsc: boolean;
|
117
|
+
closeOnOutside: boolean;
|
118
|
+
showCloseButton: boolean;
|
119
|
+
body: ({
|
120
|
+
type: string;
|
121
|
+
level: string;
|
122
|
+
body: string;
|
123
|
+
showIcon: boolean;
|
124
|
+
className: string;
|
125
|
+
wrapWithPanel?: undefined;
|
126
|
+
mode?: undefined;
|
127
|
+
wrapperComponent?: undefined;
|
128
|
+
resetAfterSubmit?: undefined;
|
129
|
+
autoFocus?: undefined;
|
130
|
+
preventEnterSubmit?: undefined;
|
131
|
+
horizontal?: undefined;
|
132
|
+
} | {
|
133
|
+
type: string;
|
134
|
+
wrapWithPanel: boolean;
|
135
|
+
mode: string;
|
136
|
+
wrapperComponent: string;
|
137
|
+
resetAfterSubmit: boolean;
|
138
|
+
autoFocus: boolean;
|
139
|
+
preventEnterSubmit: boolean;
|
140
|
+
horizontal: {
|
141
|
+
left: number;
|
142
|
+
right: number;
|
143
|
+
};
|
144
|
+
body: {
|
145
|
+
name: string;
|
146
|
+
type: string;
|
147
|
+
label: string;
|
148
|
+
placeholder: string;
|
149
|
+
trimContents: boolean;
|
150
|
+
minRows: number;
|
151
|
+
maxRows: number;
|
152
|
+
required: boolean;
|
153
|
+
}[];
|
154
|
+
level?: undefined;
|
155
|
+
showIcon?: undefined;
|
156
|
+
className?: undefined;
|
157
|
+
})[];
|
158
|
+
};
|
159
|
+
};
|
160
|
+
render(): JSX.Element;
|
161
|
+
}
|
162
|
+
export declare class OptionControlRenderer extends OptionControl {
|
163
|
+
}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/**
|
2
|
+
* @file 浮窗编辑
|
3
|
+
*/
|
4
|
+
import React from 'react';
|
5
|
+
import type { Action } from 'amis/lib/types';
|
6
|
+
import type { IScopedContext } from 'amis/lib/Scoped';
|
7
|
+
import type { FormSchema } from 'amis/lib/renderers/Form';
|
8
|
+
import type { FormControlProps } from 'amis/lib/renderers/Form/Item';
|
9
|
+
import type { Offset } from 'amis/lib/components/PopOver';
|
10
|
+
export interface PopoverEditProps extends FormControlProps {
|
11
|
+
className?: string;
|
12
|
+
popOverclassName?: string;
|
13
|
+
btnLabel?: string;
|
14
|
+
btnIcon?: string;
|
15
|
+
iconPosition?: 'right' | 'left';
|
16
|
+
mode: 'popover' | 'dialog';
|
17
|
+
form: Omit<FormSchema, 'type'>;
|
18
|
+
rootClose?: boolean;
|
19
|
+
placement?: string;
|
20
|
+
offset?: ((clip: object, offset: object) => Offset) | Offset;
|
21
|
+
style?: object;
|
22
|
+
overlay?: boolean;
|
23
|
+
container?: React.ReactNode | Function;
|
24
|
+
target?: React.ReactNode | Function;
|
25
|
+
trueValue?: any;
|
26
|
+
falseValue?: any;
|
27
|
+
enableEdit?: boolean;
|
28
|
+
removable?: boolean;
|
29
|
+
onClose: (e: React.UIEvent<any> | void) => void;
|
30
|
+
}
|
31
|
+
interface PopoverEditState {
|
32
|
+
/**
|
33
|
+
* 是否展示编辑窗口
|
34
|
+
*/
|
35
|
+
show: boolean;
|
36
|
+
/**
|
37
|
+
* 是否开启编辑
|
38
|
+
*/
|
39
|
+
checked: boolean;
|
40
|
+
}
|
41
|
+
export declare class PopoverEdit extends React.Component<PopoverEditProps, PopoverEditState> {
|
42
|
+
static defaultProps: Pick<PopoverEditProps, 'btnIcon' | 'iconPosition' | 'container' | 'placement' | 'overlay' | 'rootClose' | 'mode' | 'trueValue' | 'falseValue' | 'enableEdit'>;
|
43
|
+
overlay: HTMLElement | null;
|
44
|
+
constructor(props: PopoverEditProps);
|
45
|
+
overlayRef(ref: any): void;
|
46
|
+
openPopover(): void;
|
47
|
+
closePopover(): void;
|
48
|
+
handleDelete(e: React.UIEvent<any> | void): void;
|
49
|
+
handleSwitchChange(checked: boolean): void;
|
50
|
+
handleSubmit(values: any, action: any): void;
|
51
|
+
handleAction(e: React.UIEvent<any> | void, action: Action, data: object, throwErrors?: boolean, delegate?: IScopedContext): void;
|
52
|
+
renderPopover(): JSX.Element;
|
53
|
+
render(): JSX.Element;
|
54
|
+
}
|
55
|
+
export declare class PopoverEditRenderer extends PopoverEdit {
|
56
|
+
}
|
57
|
+
export {};
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/**
|
2
|
+
* @file 表单项校验配置
|
3
|
+
*/
|
4
|
+
/// <reference types="lodash" />
|
5
|
+
import React from 'react';
|
6
|
+
import type { FormControlProps } from 'amis/lib/renderers/Form/Item';
|
7
|
+
export interface ValidationControlProps extends FormControlProps {
|
8
|
+
}
|
9
|
+
interface Rule {
|
10
|
+
label: string;
|
11
|
+
key: string;
|
12
|
+
value: boolean | string | number;
|
13
|
+
checked: boolean;
|
14
|
+
message?: string;
|
15
|
+
}
|
16
|
+
interface ValidationControlState {
|
17
|
+
rules: Array<Rule>;
|
18
|
+
}
|
19
|
+
export declare class ValidationControl extends React.Component<ValidationControlProps, ValidationControlState> {
|
20
|
+
validationRules: Record<string, string>;
|
21
|
+
constructor(props: ValidationControlProps);
|
22
|
+
transformRules(): Rule[];
|
23
|
+
normalizeRules(): import("lodash").Dictionary<boolean | Record<string, any>>;
|
24
|
+
handleAddRule(): void;
|
25
|
+
handleSubmit(values: any, action: any): void;
|
26
|
+
render(): JSX.Element;
|
27
|
+
}
|
28
|
+
export declare class ValidationControlRenderer extends ValidationControl {
|
29
|
+
}
|
30
|
+
export {};
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { EditorStoreType } from '../../store/editor';
|
3
|
+
import { SubRendererInfo } from '../../plugin';
|
4
|
+
interface SearchRendererProps {
|
5
|
+
store: EditorStoreType;
|
6
|
+
}
|
7
|
+
interface SearchRendererStates {
|
8
|
+
subRenderersByOrder: Array<SubRendererInfo>;
|
9
|
+
groupedSubRenderers: {
|
10
|
+
[propName: string]: Array<SubRendererInfo>;
|
11
|
+
};
|
12
|
+
searchSubRenderers: {
|
13
|
+
[propName: string]: Array<SubRendererInfo>;
|
14
|
+
};
|
15
|
+
visible: boolean;
|
16
|
+
curKeyword: string;
|
17
|
+
curKeywordSearchHistory: string[];
|
18
|
+
toggleTagFolderStatus: boolean;
|
19
|
+
}
|
20
|
+
export default class SearchRendererPanel extends React.Component<SearchRendererProps, SearchRendererStates> {
|
21
|
+
ref: React.RefObject<HTMLDivElement>;
|
22
|
+
curInputBox: any;
|
23
|
+
localStorageKey: string;
|
24
|
+
curTagFolded: {
|
25
|
+
[propName: string]: boolean;
|
26
|
+
};
|
27
|
+
lastSubRenderersTag: string;
|
28
|
+
constructor(props: any);
|
29
|
+
componentDidMount(): void;
|
30
|
+
componentWillReceiveProps(nextProps: any): void;
|
31
|
+
componentWillUnmount(): void;
|
32
|
+
bindFocusEvent(): void;
|
33
|
+
bindBlurEvent(): void;
|
34
|
+
searchSubRenderersByKeyword(keywords: string): void;
|
35
|
+
changeTagFoldStatus(tagKey: string, event: any): void;
|
36
|
+
bindEnterEvent(event: any): void;
|
37
|
+
bindClearActionEvent(): void;
|
38
|
+
bindTagClickEvent(tag: string): void;
|
39
|
+
getSearchHistory(): any[];
|
40
|
+
addSearchHistory(newKeywords: string): void;
|
41
|
+
clickKeywordEvent(keywords: string): void;
|
42
|
+
deleteSearchHistory(event: any, newKeywords: string): void;
|
43
|
+
clearSearchHistory(event: any): void;
|
44
|
+
updateSearchHistory(): void;
|
45
|
+
renderNameByKeyword(rendererName: string, curKeyword: string): string | JSX.Element;
|
46
|
+
resultIsHasScroll(searchSubRenderers: {
|
47
|
+
[propName: string]: Array<SubRendererInfo>;
|
48
|
+
}, maxShowLine: number): boolean;
|
49
|
+
render(): JSX.Element;
|
50
|
+
}
|
51
|
+
export {};
|
@@ -0,0 +1,150 @@
|
|
1
|
+
/**
|
2
|
+
* @description 信息提示组件模版
|
3
|
+
* @file src/component/remarkTpl.tsx
|
4
|
+
* @author hanxiao11@baidu.com
|
5
|
+
*/
|
6
|
+
export default function remarkTpl(config: {
|
7
|
+
name: 'remark' | 'labelRemark';
|
8
|
+
label: string;
|
9
|
+
}): {
|
10
|
+
type: string;
|
11
|
+
label: string;
|
12
|
+
mode: string;
|
13
|
+
className: string;
|
14
|
+
labelRemark: {
|
15
|
+
icon: string;
|
16
|
+
trigger: string[];
|
17
|
+
setting: boolean;
|
18
|
+
title: string;
|
19
|
+
content: string;
|
20
|
+
placement: string;
|
21
|
+
};
|
22
|
+
body: {
|
23
|
+
type: string;
|
24
|
+
className: string;
|
25
|
+
body: ({
|
26
|
+
type: string;
|
27
|
+
name: "remark" | "labelRemark";
|
28
|
+
label: string;
|
29
|
+
btnLabel: string;
|
30
|
+
visibleOn: string;
|
31
|
+
className: string;
|
32
|
+
itemClassName: string;
|
33
|
+
icon: string;
|
34
|
+
form: {
|
35
|
+
title: string;
|
36
|
+
mode: string;
|
37
|
+
size: string;
|
38
|
+
body: {
|
39
|
+
type: string;
|
40
|
+
columns: ({
|
41
|
+
md: string;
|
42
|
+
body: ({
|
43
|
+
name: string;
|
44
|
+
type: string;
|
45
|
+
label: string;
|
46
|
+
placeholder: string;
|
47
|
+
} | {
|
48
|
+
name: string;
|
49
|
+
type: string;
|
50
|
+
label: string;
|
51
|
+
placeholder?: undefined;
|
52
|
+
})[];
|
53
|
+
} | {
|
54
|
+
md: string;
|
55
|
+
body: ({
|
56
|
+
name: string;
|
57
|
+
type: string;
|
58
|
+
size: string;
|
59
|
+
label: string;
|
60
|
+
options: {
|
61
|
+
label: string;
|
62
|
+
value: string;
|
63
|
+
}[];
|
64
|
+
labelRemark?: undefined;
|
65
|
+
multiple?: undefined;
|
66
|
+
pipeIn?: undefined;
|
67
|
+
pipeOut?: undefined;
|
68
|
+
visibleOn?: undefined;
|
69
|
+
} | {
|
70
|
+
name: string;
|
71
|
+
label: string;
|
72
|
+
type: string;
|
73
|
+
size?: undefined;
|
74
|
+
options?: undefined;
|
75
|
+
labelRemark?: undefined;
|
76
|
+
multiple?: undefined;
|
77
|
+
pipeIn?: undefined;
|
78
|
+
pipeOut?: undefined;
|
79
|
+
visibleOn?: undefined;
|
80
|
+
} | {
|
81
|
+
name: string;
|
82
|
+
label: string;
|
83
|
+
type: string;
|
84
|
+
labelRemark: {
|
85
|
+
trigger: string;
|
86
|
+
className: string;
|
87
|
+
rootClose: boolean;
|
88
|
+
content: string;
|
89
|
+
placement: string;
|
90
|
+
};
|
91
|
+
size?: undefined;
|
92
|
+
options?: undefined;
|
93
|
+
multiple?: undefined;
|
94
|
+
pipeIn?: undefined;
|
95
|
+
pipeOut?: undefined;
|
96
|
+
visibleOn?: undefined;
|
97
|
+
} | {
|
98
|
+
name: string;
|
99
|
+
type: string;
|
100
|
+
label: string;
|
101
|
+
multiple: boolean;
|
102
|
+
pipeIn: (value: any) => string | never[];
|
103
|
+
pipeOut: (value: any) => any;
|
104
|
+
options: {
|
105
|
+
label: string;
|
106
|
+
value: string;
|
107
|
+
}[];
|
108
|
+
size?: undefined;
|
109
|
+
labelRemark?: undefined;
|
110
|
+
visibleOn?: undefined;
|
111
|
+
} | {
|
112
|
+
name: string;
|
113
|
+
visibleOn: string;
|
114
|
+
label: string;
|
115
|
+
type: string;
|
116
|
+
size?: undefined;
|
117
|
+
options?: undefined;
|
118
|
+
labelRemark?: undefined;
|
119
|
+
multiple?: undefined;
|
120
|
+
pipeIn?: undefined;
|
121
|
+
pipeOut?: undefined;
|
122
|
+
})[];
|
123
|
+
})[];
|
124
|
+
};
|
125
|
+
};
|
126
|
+
mode?: undefined;
|
127
|
+
pipeIn?: undefined;
|
128
|
+
pipeOut?: undefined;
|
129
|
+
} | {
|
130
|
+
type: string;
|
131
|
+
name: "remark" | "labelRemark";
|
132
|
+
mode: string;
|
133
|
+
pipeIn: (value: any) => boolean;
|
134
|
+
pipeOut: (value: any) => {
|
135
|
+
icon: string;
|
136
|
+
trigger: string[];
|
137
|
+
className: string;
|
138
|
+
setting: boolean;
|
139
|
+
placement: string;
|
140
|
+
} | null;
|
141
|
+
label?: undefined;
|
142
|
+
btnLabel?: undefined;
|
143
|
+
visibleOn?: undefined;
|
144
|
+
className?: undefined;
|
145
|
+
itemClassName?: undefined;
|
146
|
+
icon?: undefined;
|
147
|
+
form?: undefined;
|
148
|
+
})[];
|
149
|
+
}[];
|
150
|
+
};
|
package/dist/index.d.ts
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
*/
|
4
4
|
import Editor from './component/Editor';
|
5
5
|
import './component/ClassNameControl';
|
6
|
+
import './component/Control/OptionControl';
|
7
|
+
import './component/Control/APIControl';
|
8
|
+
import './component/Control/ValidationControl';
|
9
|
+
import './component/Control/PopoverEdit';
|
6
10
|
import './plugin/Panel/AvailableRenderers';
|
7
11
|
import './plugin/Panel/Code';
|
8
12
|
import './plugin/Panel/Name';
|