amis 1.5.6-beta.4 → 1.5.6-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/lib/Schema.d.ts +1 -1
  2. package/lib/Schema.js.map +1 -1
  3. package/lib/components/AsideNav.d.ts +1 -1
  4. package/lib/components/AsideNav.js.map +1 -1
  5. package/lib/components/CodeMirror.d.ts +26 -0
  6. package/lib/components/CodeMirror.js +104 -0
  7. package/lib/components/CodeMirror.js.map +13 -0
  8. package/lib/components/Collapse.d.ts +22 -21
  9. package/lib/components/Collapse.js.map +2 -2
  10. package/lib/components/ColorPicker.d.ts +85 -84
  11. package/lib/components/ColorPicker.js +15 -3
  12. package/lib/components/ColorPicker.js.map +2 -2
  13. package/lib/components/DatePicker.js +7 -3
  14. package/lib/components/DatePicker.js.map +2 -2
  15. package/lib/components/DateRangePicker.d.ts +85 -84
  16. package/lib/components/DateRangePicker.js +5 -3
  17. package/lib/components/DateRangePicker.js.map +2 -2
  18. package/lib/components/MonthRangePicker.d.ts +85 -84
  19. package/lib/components/MonthRangePicker.js +5 -3
  20. package/lib/components/MonthRangePicker.js.map +2 -2
  21. package/lib/components/PickerContainer.d.ts +2 -1
  22. package/lib/components/PickerContainer.js +3 -3
  23. package/lib/components/PickerContainer.js.map +2 -2
  24. package/lib/components/PopUp.d.ts +93 -0
  25. package/lib/components/PopUp.js +58 -0
  26. package/lib/components/PopUp.js.map +13 -0
  27. package/lib/components/Steps.d.ts +1 -0
  28. package/lib/components/Steps.js +5 -3
  29. package/lib/components/Steps.js.map +2 -2
  30. package/lib/components/TabsTransferPicker.js +1 -1
  31. package/lib/components/TabsTransferPicker.js.map +2 -2
  32. package/lib/components/TransferPicker.d.ts +0 -1
  33. package/lib/components/TransferPicker.js +2 -15
  34. package/lib/components/TransferPicker.js.map +2 -2
  35. package/lib/components/formula/Editor.d.ts +560 -0
  36. package/lib/components/formula/Editor.js +186 -0
  37. package/lib/components/formula/Editor.js.map +13 -0
  38. package/lib/components/formula/FuncList.d.ts +67 -0
  39. package/lib/components/formula/FuncList.js +35 -0
  40. package/lib/components/formula/FuncList.js.map +13 -0
  41. package/lib/components/formula/Picker.d.ts +493 -0
  42. package/lib/components/formula/Picker.js +48 -0
  43. package/lib/components/formula/Picker.js.map +13 -0
  44. package/lib/components/formula/VariableList.d.ts +9 -0
  45. package/lib/components/formula/VariableList.js +15 -0
  46. package/lib/components/formula/VariableList.js.map +13 -0
  47. package/lib/components/formula/plugin.d.ts +18 -0
  48. package/lib/components/formula/plugin.js +136 -0
  49. package/lib/components/formula/plugin.js.map +13 -0
  50. package/lib/helper.css +57 -57
  51. package/lib/helper.css.map +1 -1
  52. package/lib/index.d.ts +1 -0
  53. package/lib/index.js +2 -1
  54. package/lib/index.js.map +2 -2
  55. package/lib/renderers/Form/InputColor.d.ts +84 -84
  56. package/lib/renderers/Form/InputColor.js +2 -2
  57. package/lib/renderers/Form/InputColor.js.map +2 -2
  58. package/lib/renderers/Form/InputDate.js +2 -2
  59. package/lib/renderers/Form/InputDate.js.map +2 -2
  60. package/lib/renderers/Form/InputDateRange.js +2 -2
  61. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  62. package/lib/renderers/Form/InputFormula.d.ts +35 -0
  63. package/lib/renderers/Form/InputFormula.js +25 -0
  64. package/lib/renderers/Form/InputFormula.js.map +13 -0
  65. package/lib/renderers/Form/InputMonthRange.js +2 -2
  66. package/lib/renderers/Form/InputMonthRange.js.map +2 -2
  67. package/lib/renderers/Form/InputQuarterRange.js +2 -2
  68. package/lib/renderers/Form/InputQuarterRange.js.map +2 -2
  69. package/lib/renderers/Form/InputYearRange.js +2 -2
  70. package/lib/renderers/Form/InputYearRange.js.map +2 -2
  71. package/lib/renderers/Form/TreeSelect.d.ts +1 -0
  72. package/lib/renderers/Form/TreeSelect.js +11 -8
  73. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  74. package/lib/renderers/Steps.js +2 -2
  75. package/lib/renderers/Steps.js.map +2 -2
  76. package/lib/themes/ang-ie11.css +261 -0
  77. package/lib/themes/ang.css +261 -0
  78. package/lib/themes/ang.css.map +1 -1
  79. package/lib/themes/antd-ie11.css +261 -0
  80. package/lib/themes/antd.css +261 -0
  81. package/lib/themes/antd.css.map +1 -1
  82. package/lib/themes/cxd-ie11.css +261 -0
  83. package/lib/themes/cxd.css +261 -0
  84. package/lib/themes/cxd.css.map +1 -1
  85. package/lib/themes/dark-ie11.css +261 -0
  86. package/lib/themes/dark.css +261 -0
  87. package/lib/themes/dark.css.map +1 -1
  88. package/lib/themes/default.css +261 -0
  89. package/lib/themes/default.css.map +1 -1
  90. package/lib/utils/api.js +2 -2
  91. package/lib/utils/api.js.map +2 -2
  92. package/package.json +4 -2
  93. package/scss/_variables.scss +1 -1
  94. package/scss/components/_formula.scss +122 -0
  95. package/scss/components/_popup.scss +123 -0
  96. package/scss/components/_steps.scss +60 -0
  97. package/scss/components/form/_color.scss +4 -0
  98. package/scss/components/form/_date-range.scss +4 -0
  99. package/scss/components/form/_date.scss +3 -0
  100. package/scss/components/form/_tree-select.scss +4 -0
  101. package/scss/helper/background/_background-color.scss +1 -1
  102. package/scss/helper/border/_border-color.scss +1 -1
  103. package/scss/helper/typography/_text-color.scss +1 -1
  104. package/scss/themes/_common.scss +2 -0
  105. package/sdk/ang-ie11.css +875 -0
  106. package/sdk/ang.css +875 -0
  107. package/sdk/antd-ie11.css +875 -0
  108. package/sdk/antd.css +875 -0
  109. package/sdk/charts.js +15 -15
  110. package/sdk/codemirror.js +14 -0
  111. package/sdk/color-picker.js +65 -65
  112. package/sdk/cropperjs.js +2 -2
  113. package/sdk/cxd-ie11.css +875 -0
  114. package/sdk/cxd.css +875 -0
  115. package/sdk/dark-ie11.css +875 -0
  116. package/sdk/dark.css +875 -0
  117. package/sdk/exceljs.js +1 -1
  118. package/sdk/helper.css +57 -57
  119. package/sdk/helper.css.map +1 -1
  120. package/sdk/markdown.js +69 -69
  121. package/sdk/papaparse.js +1 -1
  122. package/sdk/renderers/Form/CityDB.js +1 -1
  123. package/sdk/rest.js +18 -18
  124. package/sdk/rich-text.js +62 -62
  125. package/sdk/sdk-ie11.css +875 -0
  126. package/sdk/sdk.css +875 -0
  127. package/sdk/sdk.js +1219 -1201
  128. package/sdk/thirds/hls.js/hls.js +1 -1
  129. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  130. package/sdk/tinymce.js +57 -57
  131. package/src/Schema.ts +1 -0
  132. package/src/components/AsideNav.tsx +1 -1
  133. package/src/components/CodeMirror.tsx +99 -0
  134. package/src/components/Collapse.tsx +2 -1
  135. package/src/components/ColorPicker.tsx +45 -3
  136. package/src/components/DatePicker.tsx +33 -3
  137. package/src/components/DateRangePicker.tsx +17 -3
  138. package/src/components/MonthRangePicker.tsx +18 -4
  139. package/src/components/PickerContainer.tsx +10 -6
  140. package/src/components/PopUp.tsx +133 -0
  141. package/src/components/Steps.tsx +8 -3
  142. package/src/components/TabsTransferPicker.tsx +1 -1
  143. package/src/components/TransferPicker.tsx +1 -11
  144. package/src/components/formula/Editor.tsx +261 -0
  145. package/src/components/formula/FuncList.tsx +82 -0
  146. package/src/components/formula/Picker.tsx +86 -0
  147. package/src/components/formula/VariableList.tsx +49 -0
  148. package/src/components/formula/plugin.ts +177 -0
  149. package/src/index.tsx +1 -0
  150. package/src/renderers/Form/InputColor.tsx +2 -3
  151. package/src/renderers/Form/InputDate.tsx +2 -0
  152. package/src/renderers/Form/InputDateRange.tsx +2 -0
  153. package/src/renderers/Form/InputFormula.tsx +75 -0
  154. package/src/renderers/Form/InputMonthRange.tsx +2 -0
  155. package/src/renderers/Form/InputQuarterRange.tsx +2 -0
  156. package/src/renderers/Form/InputYearRange.tsx +2 -0
  157. package/src/renderers/Form/TreeSelect.tsx +82 -63
  158. package/src/renderers/Steps.tsx +4 -2
  159. package/src/utils/api.ts +5 -2
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormulaEditor = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * @file 公式编辑器
7
+ */
8
+ var react_1 = (0, tslib_1.__importDefault)(require("react"));
9
+ var uncontrollable_1 = require("uncontrollable");
10
+ var plugin_1 = require("./plugin");
11
+ var doc_1 = require("amis-formula/dist/doc");
12
+ var FuncList_1 = (0, tslib_1.__importDefault)(require("./FuncList"));
13
+ var VariableList_1 = require("./VariableList");
14
+ var amis_formula_1 = require("amis-formula");
15
+ var helper_1 = require("../../utils/helper");
16
+ var CodeMirror_1 = (0, tslib_1.__importDefault)(require("../CodeMirror"));
17
+ var theme_1 = require("../../theme");
18
+ var locale_1 = require("../../locale");
19
+ var FormulaEditor = /** @class */ (function (_super) {
20
+ (0, tslib_1.__extends)(FormulaEditor, _super);
21
+ function FormulaEditor() {
22
+ var _this = _super !== null && _super.apply(this, arguments) || this;
23
+ _this.state = {
24
+ focused: false
25
+ };
26
+ return _this;
27
+ }
28
+ FormulaEditor.buildDefaultFunctions = function (doc) {
29
+ var funcs = [];
30
+ doc.forEach(function (item) {
31
+ var namespace = item.namespace || 'Others';
32
+ var exists = funcs.find(function (item) { return item.groupName === namespace; });
33
+ if (!exists) {
34
+ exists = {
35
+ groupName: namespace,
36
+ items: []
37
+ };
38
+ funcs.push(exists);
39
+ }
40
+ exists.items.push(item);
41
+ });
42
+ return funcs;
43
+ };
44
+ FormulaEditor.highlightValue = function (value, variables, functions) {
45
+ // todo 高亮原始文本
46
+ return value;
47
+ };
48
+ FormulaEditor.prototype.componentWillUnmount = function () {
49
+ var _b;
50
+ (_b = this.editorPlugin) === null || _b === void 0 ? void 0 : _b.dispose();
51
+ };
52
+ FormulaEditor.prototype.handleFocus = function () {
53
+ this.setState({
54
+ focused: true
55
+ });
56
+ };
57
+ FormulaEditor.prototype.handleBlur = function () {
58
+ this.setState({
59
+ focused: false
60
+ });
61
+ };
62
+ FormulaEditor.prototype.insertValue = function (value, type) {
63
+ var _b;
64
+ (_b = this.editorPlugin) === null || _b === void 0 ? void 0 : _b.insertContent(value, type);
65
+ };
66
+ FormulaEditor.prototype.handleEditorMounted = function (cm, editor) {
67
+ var _this = this;
68
+ this.editorPlugin = new plugin_1.FormulaPlugin(editor, cm, function () { return _this.props; });
69
+ };
70
+ FormulaEditor.prototype.validate = function () {
71
+ var value = this.props.value;
72
+ try {
73
+ value
74
+ ? (0, amis_formula_1.parse)(value, {
75
+ evalMode: this.props.evalMode
76
+ })
77
+ : null;
78
+ }
79
+ catch (e) {
80
+ return e.message;
81
+ }
82
+ return;
83
+ };
84
+ FormulaEditor.prototype.handleFunctionSelect = function (item) {
85
+ var _b;
86
+ (_b = this.editorPlugin) === null || _b === void 0 ? void 0 : _b.insertContent("" + item.name, 'func');
87
+ };
88
+ FormulaEditor.prototype.handleVariableSelect = function (item) {
89
+ var _b;
90
+ (_b = this.editorPlugin) === null || _b === void 0 ? void 0 : _b.insertContent({
91
+ key: item.value,
92
+ name: item.label
93
+ }, 'variable');
94
+ };
95
+ FormulaEditor.prototype.handleOnChange = function (value) {
96
+ var onChange = this.props.onChange;
97
+ onChange === null || onChange === void 0 ? void 0 : onChange(value);
98
+ };
99
+ FormulaEditor.prototype.editorFactory = function (dom, cm) {
100
+ return (0, plugin_1.editorFactory)(dom, cm, this.props);
101
+ };
102
+ FormulaEditor.prototype.render = function () {
103
+ var _b = this.props, variables = _b.variables, header = _b.header, value = _b.value, functions = _b.functions, variableMode = _b.variableMode, cx = _b.classnames;
104
+ var focused = this.state.focused;
105
+ return (react_1.default.createElement("div", { className: cx("FormulaEditor", {
106
+ 'is-focused': focused
107
+ }) },
108
+ react_1.default.createElement("div", { className: cx("FormulaEditor-header") }, header !== null && header !== void 0 ? header : '表达式'),
109
+ react_1.default.createElement(CodeMirror_1.default, { className: cx('FormulaEditor-editor'), value: value, onChange: this.handleOnChange, editorFactory: this.editorFactory, editorDidMount: this.handleEditorMounted, onFocus: this.handleFocus, onBlur: this.handleBlur }),
110
+ react_1.default.createElement("div", { className: cx('FormulaEditor-settings') },
111
+ Array.isArray(functions) && functions.length ? (react_1.default.createElement("div", null,
112
+ react_1.default.createElement("h3", null, "\u53D8\u91CF"),
113
+ react_1.default.createElement(VariableList_1.VariableList, { className: cx('VariableList'), selectMode: variableMode, data: variables, onSelect: this.handleVariableSelect }))) : null,
114
+ Array.isArray(variables) && variables.length ? (react_1.default.createElement("div", null,
115
+ react_1.default.createElement("h3", null, "\u51FD\u6570"),
116
+ react_1.default.createElement(FuncList_1.default, { data: functions, onSelect: this.handleFunctionSelect }))) : null)));
117
+ };
118
+ var _a;
119
+ var _b;
120
+ _a = FormulaEditor;
121
+ FormulaEditor.defaultProps = {
122
+ functions: _a.buildDefaultFunctions(doc_1.doc),
123
+ variables: [],
124
+ evalMode: true
125
+ };
126
+ (0, tslib_1.__decorate)([
127
+ helper_1.autobind,
128
+ (0, tslib_1.__metadata)("design:type", Function),
129
+ (0, tslib_1.__metadata)("design:paramtypes", []),
130
+ (0, tslib_1.__metadata)("design:returntype", void 0)
131
+ ], FormulaEditor.prototype, "handleFocus", null);
132
+ (0, tslib_1.__decorate)([
133
+ helper_1.autobind,
134
+ (0, tslib_1.__metadata)("design:type", Function),
135
+ (0, tslib_1.__metadata)("design:paramtypes", []),
136
+ (0, tslib_1.__metadata)("design:returntype", void 0)
137
+ ], FormulaEditor.prototype, "handleBlur", null);
138
+ (0, tslib_1.__decorate)([
139
+ helper_1.autobind,
140
+ (0, tslib_1.__metadata)("design:type", Function),
141
+ (0, tslib_1.__metadata)("design:paramtypes", [Object, String]),
142
+ (0, tslib_1.__metadata)("design:returntype", void 0)
143
+ ], FormulaEditor.prototype, "insertValue", null);
144
+ (0, tslib_1.__decorate)([
145
+ helper_1.autobind,
146
+ (0, tslib_1.__metadata)("design:type", Function),
147
+ (0, tslib_1.__metadata)("design:paramtypes", [Object, Object]),
148
+ (0, tslib_1.__metadata)("design:returntype", void 0)
149
+ ], FormulaEditor.prototype, "handleEditorMounted", null);
150
+ (0, tslib_1.__decorate)([
151
+ helper_1.autobind,
152
+ (0, tslib_1.__metadata)("design:type", Function),
153
+ (0, tslib_1.__metadata)("design:paramtypes", []),
154
+ (0, tslib_1.__metadata)("design:returntype", void 0)
155
+ ], FormulaEditor.prototype, "validate", null);
156
+ (0, tslib_1.__decorate)([
157
+ helper_1.autobind,
158
+ (0, tslib_1.__metadata)("design:type", Function),
159
+ (0, tslib_1.__metadata)("design:paramtypes", [Object]),
160
+ (0, tslib_1.__metadata)("design:returntype", void 0)
161
+ ], FormulaEditor.prototype, "handleFunctionSelect", null);
162
+ (0, tslib_1.__decorate)([
163
+ helper_1.autobind,
164
+ (0, tslib_1.__metadata)("design:type", Function),
165
+ (0, tslib_1.__metadata)("design:paramtypes", [Object]),
166
+ (0, tslib_1.__metadata)("design:returntype", void 0)
167
+ ], FormulaEditor.prototype, "handleVariableSelect", null);
168
+ (0, tslib_1.__decorate)([
169
+ helper_1.autobind,
170
+ (0, tslib_1.__metadata)("design:type", Function),
171
+ (0, tslib_1.__metadata)("design:paramtypes", [Object]),
172
+ (0, tslib_1.__metadata)("design:returntype", void 0)
173
+ ], FormulaEditor.prototype, "handleOnChange", null);
174
+ (0, tslib_1.__decorate)([
175
+ helper_1.autobind,
176
+ (0, tslib_1.__metadata)("design:type", Function),
177
+ (0, tslib_1.__metadata)("design:paramtypes", [typeof (_b = typeof HTMLElement !== "undefined" && HTMLElement) === "function" ? _b : Object, Object]),
178
+ (0, tslib_1.__metadata)("design:returntype", void 0)
179
+ ], FormulaEditor.prototype, "editorFactory", null);
180
+ return FormulaEditor;
181
+ }(react_1.default.Component));
182
+ exports.FormulaEditor = FormulaEditor;
183
+ exports.default = (0, uncontrollable_1.uncontrollable)((0, theme_1.themeable)((0, locale_1.localeable)(FormulaEditor)), {
184
+ value: 'onChange'
185
+ }, ['validate']);
186
+ //# sourceMappingURL=./components/formula/Editor.js.map
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 3,
3
+ "file": "Editor.js",
4
+ "sourceRoot": "",
5
+ "sources": [
6
+ "/src/components/formula/Editor.tsx"
7
+ ],
8
+ "names": [],
9
+ "mappings": "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",
10
+ "sourcesContent": [
11
+ "/**\n * @file 公式编辑器\n */\nimport React from 'react';\nimport {uncontrollable} from 'uncontrollable';\nimport {FormulaPlugin, editorFactory} from './plugin';\nimport {doc} from 'amis-formula/dist/doc';\nimport FuncList from './FuncList';\nimport {VariableList} from './VariableList';\nimport {parse} from 'amis-formula';\nimport {autobind} from '../../utils/helper';\nimport CodeMirrorEditor from '../CodeMirror';\nimport {themeable, ThemeProps} from '../../theme';\nimport {localeable, LocaleProps} from '../../locale';\n\nexport interface VariableItem {\n label: string;\n value?: string;\n children?: Array<VariableItem>;\n selectMode?: 'tree' | 'tabs';\n}\n\nexport interface FuncGroup {\n groupName: string;\n items: Array<FuncItem>;\n}\n\nexport interface FuncItem {\n name: string;\n [propName: string]: any;\n}\n\nexport interface FormulaEditorProps extends ThemeProps, LocaleProps {\n onChange?: (value: string) => void;\n value: string;\n /**\n * evalMode 即直接就是表达式,否则\n * 需要 ${这里面才是表达式}\n * 默认为 true\n */\n evalMode?: boolean;\n\n /**\n * 用于提示的变量集合,默认为空\n */\n variables: Array<VariableItem>;\n\n variableMode?: 'tabs' | 'tree';\n\n /**\n * 函数集合,默认不需要传,即 amis-formula 里面那个函数\n * 如果有扩充,则需要传。\n */\n functions: Array<FuncGroup>;\n\n /**\n * 顶部标题,默认为表达式\n */\n header: string;\n}\n\nexport interface FunctionsProps {\n name: string;\n items: FunctionProps[];\n}\n\nexport interface FunctionProps {\n name: string;\n intro: string;\n usage: string;\n example: string;\n}\n\nexport interface FormulaState {\n focused: boolean;\n}\n\nexport class FormulaEditor extends React.Component<\n FormulaEditorProps,\n FormulaState\n> {\n state: FormulaState = {\n focused: false\n };\n editorPlugin?: FormulaPlugin;\n\n static buildDefaultFunctions(\n doc: Array<{\n namespace: string;\n name: string;\n [propName: string]: any;\n }>\n ) {\n const funcs: Array<FuncGroup> = [];\n\n doc.forEach(item => {\n const namespace = item.namespace || 'Others';\n let exists = funcs.find(item => item.groupName === namespace);\n if (!exists) {\n exists = {\n groupName: namespace,\n items: []\n };\n funcs.push(exists);\n }\n exists.items.push(item);\n });\n\n return funcs;\n }\n\n static defaultProps: Pick<\n FormulaEditorProps,\n 'functions' | 'variables' | 'evalMode'\n > = {\n functions: this.buildDefaultFunctions(doc),\n variables: [],\n evalMode: true\n };\n\n static highlightValue(\n value: string,\n variables: Array<VariableItem>,\n functions: Array<FuncGroup>\n ) {\n // todo 高亮原始文本\n return value;\n }\n\n componentWillUnmount() {\n this.editorPlugin?.dispose();\n }\n\n @autobind\n handleFocus() {\n this.setState({\n focused: true\n });\n }\n\n @autobind\n handleBlur() {\n this.setState({\n focused: false\n });\n }\n\n @autobind\n insertValue(value: any, type: 'variable' | 'func') {\n this.editorPlugin?.insertContent(value, type);\n }\n\n @autobind\n handleEditorMounted(cm: any, editor: any) {\n this.editorPlugin = new FormulaPlugin(editor, cm, () => this.props);\n }\n\n @autobind\n validate() {\n const value = this.props.value;\n\n try {\n value\n ? parse(value, {\n evalMode: this.props.evalMode\n })\n : null;\n } catch (e) {\n return e.message;\n }\n\n return;\n }\n\n @autobind\n handleFunctionSelect(item: FuncItem) {\n this.editorPlugin?.insertContent(`${item.name}`, 'func');\n }\n\n @autobind\n handleVariableSelect(item: VariableItem) {\n this.editorPlugin?.insertContent(\n {\n key: item.value,\n name: item.label\n },\n 'variable'\n );\n }\n\n @autobind\n handleOnChange(value: any) {\n const onChange = this.props.onChange;\n onChange?.(value);\n }\n\n @autobind\n editorFactory(dom: HTMLElement, cm: any) {\n return editorFactory(dom, cm, this.props);\n }\n\n render() {\n const {\n variables,\n header,\n value,\n functions,\n variableMode,\n classnames: cx\n } = this.props;\n const {focused} = this.state;\n\n return (\n <div\n className={cx(`FormulaEditor`, {\n 'is-focused': focused\n })}\n >\n <div className={cx(`FormulaEditor-header`)}>{header ?? '表达式'}</div>\n\n <CodeMirrorEditor\n className={cx('FormulaEditor-editor')}\n value={value}\n onChange={this.handleOnChange}\n editorFactory={this.editorFactory}\n editorDidMount={this.handleEditorMounted}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n ></CodeMirrorEditor>\n\n <div className={cx('FormulaEditor-settings')}>\n {Array.isArray(functions) && functions.length ? (\n <div>\n <h3>变量</h3>\n <VariableList\n className={cx('VariableList')}\n selectMode={variableMode}\n data={variables}\n onSelect={this.handleVariableSelect}\n />\n </div>\n ) : null}\n {Array.isArray(variables) && variables.length ? (\n <div>\n <h3>函数</h3>\n <FuncList data={functions} onSelect={this.handleFunctionSelect} />\n </div>\n ) : null}\n </div>\n </div>\n );\n }\n}\n\nexport default uncontrollable(\n themeable(localeable(FormulaEditor)),\n {\n value: 'onChange'\n },\n ['validate']\n);\n"
12
+ ]
13
+ }
@@ -0,0 +1,67 @@
1
+ /// <reference types="hoist-non-react-statics" />
2
+ import React from 'react';
3
+ import { ThemeProps } from '../../theme';
4
+ import type { FuncGroup, FuncItem } from './Editor';
5
+ export interface FuncListProps extends ThemeProps {
6
+ data: Array<FuncGroup>;
7
+ onSelect?: (item: FuncItem) => void;
8
+ }
9
+ export declare function FuncList(props: FuncListProps): JSX.Element;
10
+ declare const _default: {
11
+ new (props: (Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps) | Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>): {
12
+ render(): JSX.Element;
13
+ context: any;
14
+ setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
15
+ forceUpdate(callback?: (() => void) | undefined): void;
16
+ readonly props: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps> & Readonly<{
17
+ children?: React.ReactNode;
18
+ }>;
19
+ state: Readonly<{}>;
20
+ refs: {
21
+ [key: string]: React.ReactInstance;
22
+ };
23
+ componentDidMount?(): void;
24
+ shouldComponentUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): boolean;
25
+ componentWillUnmount?(): void;
26
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
27
+ getSnapshotBeforeUpdate?(prevProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, prevState: Readonly<{}>): any;
28
+ componentDidUpdate?(prevProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, prevState: Readonly<{}>, snapshot?: any): void;
29
+ componentWillMount?(): void;
30
+ UNSAFE_componentWillMount?(): void;
31
+ componentWillReceiveProps?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextContext: any): void;
32
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextContext: any): void;
33
+ componentWillUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): void;
34
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): void;
35
+ };
36
+ new (props: Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps, context: any): {
37
+ render(): JSX.Element;
38
+ context: any;
39
+ setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
40
+ forceUpdate(callback?: (() => void) | undefined): void;
41
+ readonly props: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps> & Readonly<{
42
+ children?: React.ReactNode;
43
+ }>;
44
+ state: Readonly<{}>;
45
+ refs: {
46
+ [key: string]: React.ReactInstance;
47
+ };
48
+ componentDidMount?(): void;
49
+ shouldComponentUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): boolean;
50
+ componentWillUnmount?(): void;
51
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
52
+ getSnapshotBeforeUpdate?(prevProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, prevState: Readonly<{}>): any;
53
+ componentDidUpdate?(prevProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, prevState: Readonly<{}>, snapshot?: any): void;
54
+ componentWillMount?(): void;
55
+ UNSAFE_componentWillMount?(): void;
56
+ componentWillReceiveProps?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextContext: any): void;
57
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextContext: any): void;
58
+ componentWillUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): void;
59
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<Omit<FuncListProps, keyof ThemeProps> & import("../../theme").ThemeOutterProps>, nextState: Readonly<{}>, nextContext: any): void;
60
+ };
61
+ displayName: string;
62
+ contextType: React.Context<string>;
63
+ ComposedComponent: React.ComponentType<typeof FuncList>;
64
+ } & import("hoist-non-react-statics").NonReactStatics<typeof FuncList, {}> & {
65
+ ComposedComponent: typeof FuncList;
66
+ };
67
+ export default _default;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FuncList = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = (0, tslib_1.__importDefault)(require("react"));
6
+ var theme_1 = require("../../theme");
7
+ var Collapse_1 = (0, tslib_1.__importDefault)(require("../Collapse"));
8
+ var CollapseGroup_1 = (0, tslib_1.__importDefault)(require("../CollapseGroup"));
9
+ var SearchBox_1 = (0, tslib_1.__importDefault)(require("../SearchBox"));
10
+ function FuncList(props) {
11
+ var _a;
12
+ var cx = props.classnames;
13
+ var _b = react_1.default.useState(props.data), filteredFuncs = _b[0], setFiteredFuncs = _b[1];
14
+ var _c = react_1.default.useState(null), activeFunc = _c[0], setActiveFunc = _c[1];
15
+ function onSearch(term) {
16
+ var filtered = props.data
17
+ .map(function (item) {
18
+ return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { items: term
19
+ ? item.items.filter(function (item) { return ~item.name.indexOf(term.toUpperCase()); })
20
+ : item.items });
21
+ })
22
+ .filter(function (item) { return item.items.length; });
23
+ setFiteredFuncs(filtered);
24
+ }
25
+ return (react_1.default.createElement("div", { className: cx('FormulaFuncList') },
26
+ react_1.default.createElement(SearchBox_1.default, { className: "FormulaFuncList-searchBox", mini: false, onSearch: onSearch }),
27
+ react_1.default.createElement("div", { className: cx('FormulaFuncList-columns') },
28
+ react_1.default.createElement(CollapseGroup_1.default, { className: "FormulaFuncList-group", defaultActiveKey: (_a = filteredFuncs[0]) === null || _a === void 0 ? void 0 : _a.groupName, accordion: true }, filteredFuncs.map(function (item) { return (react_1.default.createElement(Collapse_1.default, { headingClassName: "FormulaFuncList-groupTitle", bodyClassName: "FormulaFuncList-groupBody", propKey: item.groupName, header: item.groupName, key: item.groupName }, item.items.map(function (item) { return (react_1.default.createElement("div", { className: cx("FormulaFuncList-funcItem " + (item.name === (activeFunc === null || activeFunc === void 0 ? void 0 : activeFunc.name) ? 'is-active' : '')), onMouseEnter: function () { return setActiveFunc(item); }, onClick: function () { var _a; return (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, item); }, key: item.name }, item.name)); }))); })),
29
+ react_1.default.createElement("div", { className: cx('FormulaFuncList-column') }, activeFunc ? (react_1.default.createElement("div", { className: cx('FormulaFuncList-funcDetail') },
30
+ react_1.default.createElement("p", null, activeFunc.example),
31
+ react_1.default.createElement("div", null, activeFunc.description))) : null))));
32
+ }
33
+ exports.FuncList = FuncList;
34
+ exports.default = (0, theme_1.themeable)(FuncList);
35
+ //# sourceMappingURL=./components/formula/FuncList.js.map
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 3,
3
+ "file": "FuncList.js",
4
+ "sourceRoot": "",
5
+ "sources": [
6
+ "/src/components/formula/FuncList.tsx"
7
+ ],
8
+ "names": [],
9
+ "mappings": "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",
10
+ "sourcesContent": [
11
+ "import React from 'react';\nimport {themeable, ThemeProps} from '../../theme';\nimport Collapse from '../Collapse';\nimport CollapseGroup from '../CollapseGroup';\nimport SearchBox from '../SearchBox';\nimport type {FuncGroup, FuncItem} from './Editor';\n\nexport interface FuncListProps extends ThemeProps {\n data: Array<FuncGroup>;\n onSelect?: (item: FuncItem) => void;\n}\n\nexport function FuncList(props: FuncListProps) {\n const cx = props.classnames;\n const [filteredFuncs, setFiteredFuncs] = React.useState(props.data);\n const [activeFunc, setActiveFunc] = React.useState<any>(null);\n function onSearch(term: string) {\n const filtered = props.data\n .map(item => {\n return {\n ...item,\n items: term\n ? item.items.filter(item => ~item.name.indexOf(term.toUpperCase()))\n : item.items\n };\n })\n .filter(item => item.items.length);\n setFiteredFuncs(filtered);\n }\n\n return (\n <div className={cx('FormulaFuncList')}>\n <SearchBox\n className=\"FormulaFuncList-searchBox\"\n mini={false}\n onSearch={onSearch}\n />\n <div className={cx('FormulaFuncList-columns')}>\n <CollapseGroup\n className=\"FormulaFuncList-group\"\n defaultActiveKey={filteredFuncs[0]?.groupName}\n accordion\n >\n {filteredFuncs.map(item => (\n <Collapse\n headingClassName=\"FormulaFuncList-groupTitle\"\n bodyClassName=\"FormulaFuncList-groupBody\"\n propKey={item.groupName}\n header={item.groupName}\n key={item.groupName}\n >\n {item.items.map(item => (\n <div\n className={cx(\n `FormulaFuncList-funcItem ${\n item.name === activeFunc?.name ? 'is-active' : ''\n }`\n )}\n onMouseEnter={() => setActiveFunc(item)}\n onClick={() => props.onSelect?.(item)}\n key={item.name}\n >\n {item.name}\n </div>\n ))}\n </Collapse>\n ))}\n </CollapseGroup>\n <div className={cx('FormulaFuncList-column')}>\n {activeFunc ? (\n <div className={cx('FormulaFuncList-funcDetail')}>\n <p>{activeFunc.example}</p>\n <div>{activeFunc.description}</div>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\nexport default themeable(FuncList);\n"
12
+ ]
13
+ }