@uiw/react-codemirror 3.0.14 → 3.2.2

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.
package/lib/esm/index.js DELETED
@@ -1,166 +0,0 @@
1
- import _typeof from "@babel/runtime/helpers/typeof";
2
- import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
- import _regeneratorRuntime from "@babel/runtime/regenerator";
6
- import React, { useRef, useEffect, useImperativeHandle, useState, useMemo } from 'react';
7
- import CodeMirror from 'codemirror';
8
- import 'codemirror/mode/meta';
9
- import './codemirror.css';
10
- var defaultOptions = {
11
- tabSize: 2,
12
- autoCloseBrackets: true,
13
- matchBrackets: true,
14
- showCursorWhenSelecting: true,
15
- // 显示行号
16
- lineNumbers: true,
17
- fullScreen: true
18
- };
19
-
20
- function ReactCodeMirror() {
21
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
22
- var ref = arguments.length > 1 ? arguments[1] : undefined;
23
- var _props$options = props.options,
24
- options = _props$options === void 0 ? {} : _props$options,
25
- _props$value = props.value,
26
- value = _props$value === void 0 ? '' : _props$value,
27
- _props$width = props.width,
28
- width = _props$width === void 0 ? '100%' : _props$width,
29
- _props$height = props.height,
30
- height = _props$height === void 0 ? '100%' : _props$height;
31
-
32
- var _useState = useState(),
33
- _useState2 = _slicedToArray(_useState, 2),
34
- editor = _useState2[0],
35
- setEditor = _useState2[1];
36
-
37
- var textareaRef = useRef();
38
- var lastestProps = useRef(props);
39
- useImperativeHandle(ref, function () {
40
- return {
41
- editor: editor
42
- };
43
- }, [editor]);
44
- lastestProps.current = props; // 将props中所有的事件处理函数映射并保存
45
-
46
- function getEventHandleFromProps() {
47
- var propNames = Object.keys(props);
48
- var eventHandle = propNames.filter(function (keyName) {
49
- return /^on+/.test(keyName);
50
- });
51
- var eventDict = {};
52
- eventHandle.forEach(function (ele) {
53
- var name = ele.slice(2);
54
-
55
- if (name && name[0]) {
56
- eventDict[ele] = name.replace(name[0], name[0].toLowerCase());
57
- }
58
- });
59
- return eventDict;
60
- } // http://codemirror.net/doc/manual.html#config
61
-
62
-
63
- function setOptions(_x) {
64
- return _setOptions.apply(this, arguments);
65
- }
66
-
67
- function _setOptions() {
68
- _setOptions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(instance) {
69
- var opt,
70
- mode,
71
- _args = arguments;
72
- return _regeneratorRuntime.wrap(function _callee$(_context) {
73
- while (1) {
74
- switch (_context.prev = _context.next) {
75
- case 0:
76
- opt = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
77
-
78
- if (!(_typeof(opt) === 'object' && window)) {
79
- _context.next = 8;
80
- break;
81
- }
82
-
83
- mode = CodeMirror.findModeByName(opt.mode || '');
84
-
85
- if (!(mode && mode.mode)) {
86
- _context.next = 6;
87
- break;
88
- }
89
-
90
- _context.next = 6;
91
- return import("codemirror/mode/".concat(mode.mode, "/").concat(mode.mode, ".js"));
92
-
93
- case 6:
94
- if (mode) {
95
- opt.mode = mode.mime;
96
- }
97
-
98
- Object.keys(opt).forEach(function (name) {
99
- if ((opt[name] || opt[name] === false) && JSON.stringify(opt[name])) {
100
- instance.setOption(name, opt[name]);
101
- }
102
- });
103
-
104
- case 8:
105
- case "end":
106
- return _context.stop();
107
- }
108
- }
109
- }, _callee);
110
- }));
111
- return _setOptions.apply(this, arguments);
112
- }
113
-
114
- useEffect(function () {
115
- if (!editor && window) {
116
- // 生成codemirror实例
117
- var instance = CodeMirror.fromTextArea(textareaRef.current, _objectSpread(_objectSpread({}, defaultOptions), options));
118
- var eventDict = getEventHandleFromProps();
119
- Object.keys(eventDict).forEach(function (event) {
120
- instance.on(eventDict[event], function () {
121
- var _lastestProps$current;
122
-
123
- return (_lastestProps$current = lastestProps.current)[event].apply(_lastestProps$current, arguments);
124
- });
125
- });
126
- instance.setValue(value || '');
127
-
128
- if (width || height) {
129
- // 设置尺寸
130
- instance.setSize(width, height);
131
- }
132
-
133
- setEditor(instance);
134
- setOptions(instance, _objectSpread(_objectSpread({}, defaultOptions), options));
135
- }
136
-
137
- return function () {
138
- if (editor && window) {
139
- editor.toTextArea();
140
- setEditor(undefined);
141
- }
142
- };
143
- }, []);
144
- useMemo(function () {
145
- if (!editor || !window) return;
146
- var val = editor.getValue();
147
-
148
- if (value !== undefined && value !== val) {
149
- editor.setValue(value);
150
- }
151
- }, [value]);
152
- useMemo(function () {
153
- if (!editor || !window) return;
154
- editor.setSize(width, height);
155
- }, [width, height]);
156
- useMemo(function () {
157
- if (!editor || !window) return;
158
- setOptions(editor, _objectSpread(_objectSpread({}, defaultOptions), options));
159
- }, [editor, options]);
160
- return /*#__PURE__*/React.createElement("textarea", {
161
- ref: textareaRef
162
- });
163
- }
164
-
165
- export default /*#__PURE__*/React.forwardRef(ReactCodeMirror);
166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJDb2RlTWlycm9yIiwiZGVmYXVsdE9wdGlvbnMiLCJ0YWJTaXplIiwiYXV0b0Nsb3NlQnJhY2tldHMiLCJtYXRjaEJyYWNrZXRzIiwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCJsaW5lTnVtYmVycyIsImZ1bGxTY3JlZW4iLCJSZWFjdENvZGVNaXJyb3IiLCJwcm9wcyIsInJlZiIsIm9wdGlvbnMiLCJ2YWx1ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZWRpdG9yIiwic2V0RWRpdG9yIiwidGV4dGFyZWFSZWYiLCJsYXN0ZXN0UHJvcHMiLCJjdXJyZW50IiwiZ2V0RXZlbnRIYW5kbGVGcm9tUHJvcHMiLCJwcm9wTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiZXZlbnRIYW5kbGUiLCJmaWx0ZXIiLCJrZXlOYW1lIiwidGVzdCIsImV2ZW50RGljdCIsImZvckVhY2giLCJlbGUiLCJuYW1lIiwic2xpY2UiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJzZXRPcHRpb25zIiwiaW5zdGFuY2UiLCJvcHQiLCJ3aW5kb3ciLCJtb2RlIiwiZmluZE1vZGVCeU5hbWUiLCJtaW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldE9wdGlvbiIsImZyb21UZXh0QXJlYSIsImV2ZW50Iiwib24iLCJzZXRWYWx1ZSIsInNldFNpemUiLCJ0b1RleHRBcmVhIiwidW5kZWZpbmVkIiwidmFsIiwiZ2V0VmFsdWUiLCJmb3J3YXJkUmVmIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU9BLEtBQVAsSUFBZ0JDLE1BQWhCLEVBQXdCQyxTQUF4QixFQUFtQ0MsbUJBQW5DLEVBQXdEQyxRQUF4RCxFQUFrRUMsT0FBbEUsUUFBaUYsT0FBakY7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLFlBQXZCO0FBQ0EsT0FBTyxz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RCxJQUFXLENBQUN1QixNQUFoQixFQUF3QjtBQUN4QkgsSUFBQUEsVUFBVSxDQUFDcEIsTUFBRCxrQ0FBYWQsY0FBYixHQUFnQ1UsT0FBaEMsRUFBVjtBQUNELEdBSE0sRUFHSixDQUFDSSxNQUFELEVBQVNKLE9BQVQsQ0FISSxDQUFQO0FBS0Esc0JBQ0U7QUFBVSxJQUFBLEdBQUcsRUFBRU07QUFBZixJQURGO0FBR0Q7O0FBRUQsNEJBQWV2QixLQUFLLENBQUM0RCxVQUFOLENBQWlCOUMsZUFBakIsQ0FBZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29kZU1pcnJvciBmcm9tICdjb2RlbWlycm9yJztcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL21ldGEnO1xuaW1wb3J0ICcuL2NvZGVtaXJyb3IuY3NzJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHRhYlNpemU6IDIsXG4gIGF1dG9DbG9zZUJyYWNrZXRzOiB0cnVlLFxuICBtYXRjaEJyYWNrZXRzOiB0cnVlLFxuICBzaG93Q3Vyc29yV2hlblNlbGVjdGluZzogdHJ1ZSxcbiAgLy8g5pi+56S66KGM5Y+3XG4gIGxpbmVOdW1iZXJzOiB0cnVlLFxuICBmdWxsU2NyZWVuOiB0cnVlLFxufVxuXG5mdW5jdGlvbiBSZWFjdENvZGVNaXJyb3IocHJvcHMgPSB7fSwgcmVmKSB7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IHt9LCB2YWx1ZSA9ICcnLCB3aWR0aCA9ICcxMDAlJywgaGVpZ2h0ID0gJzEwMCUnICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtlZGl0b3IsIHNldEVkaXRvcl0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCB0ZXh0YXJlYVJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBsYXN0ZXN0UHJvcHMgPSB1c2VSZWYocHJvcHMpO1xuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoeyBlZGl0b3IgfSksIFtlZGl0b3JdKTtcbiAgbGFzdGVzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgXG4gIC8vIOWwhnByb3Bz5Lit5omA5pyJ55qE5LqL5Lu25aSE55CG5Ye95pWw5pig5bCE5bm25L+d5a2YXG4gIGZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlRnJvbVByb3BzKCkge1xuICAgIGNvbnN0IHByb3BOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BzKTtcbiAgICBjb25zdCBldmVudEhhbmRsZSA9IHByb3BOYW1lcy5maWx0ZXIoKGtleU5hbWUpID0+IHtcbiAgICAgIHJldHVybiAvXm9uKy8udGVzdChrZXlOYW1lKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50RGljdCA9IHt9O1xuICAgIGV2ZW50SGFuZGxlLmZvckVhY2goKGVsZSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGVsZS5zbGljZSgyKTtcbiAgICAgIGlmIChuYW1lICYmIG5hbWVbMF0pIHtcbiAgICAgICAgZXZlbnREaWN0W2VsZV0gPSBuYW1lLnJlcGxhY2UobmFtZVswXSwgbmFtZVswXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBldmVudERpY3Q7XG4gIH1cblxuICAvLyBodHRwOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI2NvbmZpZ1xuICBhc3luYyBmdW5jdGlvbiBzZXRPcHRpb25zKGluc3RhbmNlLCBvcHQgPSB7fSkge1xuICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSBDb2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lKG9wdC5tb2RlIHx8ICcnKTtcbiAgICAgIGlmIChtb2RlICYmIG1vZGUubW9kZSkge1xuICAgICAgICBhd2FpdCBpbXBvcnQoYGNvZGVtaXJyb3IvbW9kZS8ke21vZGUubW9kZX0vJHttb2RlLm1vZGV9LmpzYCk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICBvcHQubW9kZSA9IG1vZGUubWltZTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAoKG9wdFtuYW1lXSB8fCBvcHRbbmFtZV0gPT09IGZhbHNlKSAmJiBKU09OLnN0cmluZ2lmeShvcHRbbmFtZV0pKSB7XG4gICAgICAgICAgaW5zdGFuY2Uuc2V0T3B0aW9uKG5hbWUsIG9wdFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlZGl0b3IgJiYgd2luZG93KSB7XG4gICAgICAvLyDnlJ/miJBjb2RlbWlycm9y5a6e5L6LXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRleHRhcmVhUmVmLmN1cnJlbnQsIHsuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9uc30pO1xuICAgICAgY29uc3QgZXZlbnREaWN0ID0gZ2V0RXZlbnRIYW5kbGVGcm9tUHJvcHMoKTtcbiAgICAgIE9iamVjdC5rZXlzKGV2ZW50RGljdCkuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgaW5zdGFuY2Uub24oZXZlbnREaWN0W2V2ZW50XSwgKC4uLnBhcmFtcykgPT4gbGFzdGVzdFByb3BzLmN1cnJlbnRbZXZlbnRdKC4uLnBhcmFtcykpO1xuICAgICAgfSk7XG4gICAgICBpbnN0YW5jZS5zZXRWYWx1ZSh2YWx1ZSB8fCAnJyk7XG5cbiAgICAgIGlmICh3aWR0aCB8fCBoZWlnaHQpIHtcbiAgICAgICAgLy8g6K6+572u5bC65a+4XG4gICAgICAgIGluc3RhbmNlLnNldFNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICB9XG4gICAgICBzZXRFZGl0b3IoaW5zdGFuY2UpO1xuICAgICAgc2V0T3B0aW9ucyhpbnN0YW5jZSwgey4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zfSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yICYmIHdpbmRvdykge1xuICAgICAgICBlZGl0b3IudG9UZXh0QXJlYSgpO1xuICAgICAgICBzZXRFZGl0b3IodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcblxuICB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWVkaXRvciB8fCAhd2luZG93KSByZXR1cm47XG4gICAgY29uc3QgdmFsID0gZWRpdG9yLmdldFZhbHVlKCk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IHZhbCkge1xuICAgICAgZWRpdG9yLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuXG4gIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZWRpdG9yIHx8ICF3aW5kb3cpIHJldHVybjtcbiAgICBlZGl0b3Iuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgfSwgW3dpZHRoLCBoZWlnaHRdKTtcblxuXG4gIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZWRpdG9yIHx8ICF3aW5kb3cpIHJldHVybjtcbiAgICBzZXRPcHRpb25zKGVkaXRvciwgey4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zfSk7XG4gIH0sIFtlZGl0b3IsIG9wdGlvbnNdKTtcbiAgXG4gIHJldHVybiAoXG4gICAgPHRleHRhcmVhIHJlZj17dGV4dGFyZWFSZWZ9IC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmZvcndhcmRSZWYoUmVhY3RDb2RlTWlycm9yKTtcbiJdfQ==