UNPKG

@yuntijs/ui

Version:

☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps

103 lines 4.66 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["language", "theme", "placeholder", "variant", "onBlur", "enableOutline", "className", "version", "options", "onMount"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import Editor, { loader } from '@monaco-editor/react'; import { Spin } from 'antd'; import { useEffect, useRef, useState } from 'react'; import { useCdnFn } from "../ConfigProvider"; import { useStyles } from "./base/style"; import { jsx as _jsx } from "react/jsx-runtime"; export var MonacoEditor2 = function MonacoEditor2(_ref) { var _options$minimap; var language = _ref.language, theme = _ref.theme, placeholder = _ref.placeholder, variant = _ref.variant, onBlur = _ref.onBlur, enableOutline = _ref.enableOutline, className = _ref.className, _ref$version = _ref.version, version = _ref$version === void 0 ? '0.52.2' : _ref$version, _ref$options = _ref.options, options = _ref$options === void 0 ? {} : _ref$options, onMount = _ref.onMount, props = _objectWithoutProperties(_ref, _excluded); var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), isFocus = _useState2[0], setIsFocus = _useState2[1]; var editorRef = useRef(null); var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), isMounted = _useState4[0], setIsMounted = _useState4[1]; var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), configed = _useState6[0], setConfiged = _useState6[1]; var _useStyles = useStyles({ minimapEnabled: options === null || options === void 0 || (_options$minimap = options.minimap) === null || _options$minimap === void 0 ? void 0 : _options$minimap.enabled, variant: variant }), cx = _useStyles.cx, styles = _useStyles.styles; var classnames = cx(styles.base, className, { 've-focused': isFocus, 've-outline': enableOutline }); var genCdnUrl = useCdnFn(); useEffect(function () { loader.config({ paths: { vs: genCdnUrl({ path: 'min/vs', pkg: 'monaco-editor', version: version }) } }); setConfiged(true); }, [genCdnUrl, version]); var handleEditorDidMount = function handleEditorDidMount(editor, monaco) { editorRef.current = editor; editor.onDidFocusEditorText(function () { setIsFocus(true); }); editor.onDidBlurEditorText(function (event) { var _editorRef$current; setIsFocus(false); var value = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || (_editorRef$current = _editorRef$current.getModel()) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getValue(); onBlur === null || onBlur === void 0 || onBlur(value !== null && value !== void 0 ? value : '', event); }); monaco.editor.setTheme('default-theme'); // Fix: sometimes not load the default theme onMount === null || onMount === void 0 || onMount(editor, monaco); setIsMounted(true); }; return /*#__PURE__*/_jsx(Spin, { spinning: !configed, children: configed ? /*#__PURE__*/_jsx(Editor, _objectSpread({ className: classnames, language: language || 'text', onMount: handleEditorDidMount, options: _objectSpread({ domReadOnly: true, quickSuggestions: false, minimap: { enabled: false }, lineNumbersMinChars: 1, // would change line num width wordWrap: 'on', // auto line wrap unicodeHighlight: { ambiguousCharacters: false }, placeholder: placeholder }, options), theme: isMounted ? theme : 'default-theme' // sometimes not load the default theme }, props)) : null }); };