UNPKG

@onesy/ui-react

Version:
1,022 lines (1,015 loc) 103 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _utils = require("@onesy/utils"); var _styleReact = require("@onesy/style-react"); var _IconMaterialFormatItalicW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatItalicW100")); var _IconMaterialFormatUnderlinedW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatUnderlinedW100")); var _IconMaterialFormatBoldW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatBoldW100")); var _IconMaterialContentCopyW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialContentCopyW100")); var _IconMaterialContentCutW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialContentCutW100")); var _IconMaterialContentPasteW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialContentPasteW100")); var _IconMaterialFormatAlignLeftW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatAlignLeftW100")); var _IconMaterialFormatAlignCenterW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatAlignCenterW100")); var _IconMaterialFormatAlignRightW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatAlignRightW100")); var _IconMaterialFormatAlignJustifyW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatAlignJustifyW100")); var _IconMaterialStrikethroughSW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialStrikethroughSW100")); var _IconMaterialUndoW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialUndoW100")); var _IconMaterialRedoW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialRedoW100")); var _IconMaterialFormatClearW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatClearW100")); var _IconMaterialSuperscriptW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialSuperscriptW100")); var _IconMaterialSubscriptW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialSubscriptW100")); var _IconMaterialFormatIndentIncreaseW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatIndentIncreaseW100")); var _IconMaterialFormatIndentDecreaseW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatIndentDecreaseW100")); var _IconMaterialFormatListNumberedW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatListNumberedW100")); var _IconMaterialFormatListBulletedW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatListBulletedW100")); var _IconMaterialHorizontalRuleW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialHorizontalRuleW100")); var _IconMaterialFormatColorTextW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatColorTextW100")); var _IconMaterialFormatColorFillW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatColorFillW100")); var _IconMaterialAddLinkW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialAddLinkW100")); var _IconMaterialLinkOffW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialLinkOffW100")); var _IconMaterialImageW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialImageW100")); var _IconMaterialFormatQuoteW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialFormatQuoteW100")); var _IconMaterialVideocamW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialVideocamW100")); var _IconMaterialPlayArrowW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialPlayArrowW100")); var _IconMaterialCodeW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialCodeW100")); var _IconMaterialDeleteSweepW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialDeleteSweepW100")); var _IconMaterialSelectAllW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialSelectAllW100")); var _IconMaterialPrintW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialPrintW100")); var _IconMaterialDownloadW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialDownloadW100")); var _IconMaterialTableW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialTableW100")); var _IconMaterialDrawW = _interopRequireDefault(require("@onesy/icons-material-rounded-react/IconMaterialDrawW100")); var _Type = _interopRequireDefault(require("../Type")); var _Tooltip = _interopRequireDefault(require("../Tooltip")); var _Fade = _interopRequireDefault(require("../Fade")); var _Append = _interopRequireDefault(require("../Append")); var _Select = _interopRequireDefault(require("../Select")); var _Switch = _interopRequireDefault(require("../Switch")); var _Label = _interopRequireDefault(require("../Label")); var _NumericTextField = _interopRequireDefault(require("../NumericTextField")); var _ColorTextField = _interopRequireDefault(require("../ColorTextField")); var _ToggleButtons = _interopRequireDefault(require("../ToggleButtons")); var _ToggleButton = _interopRequireDefault(require("../ToggleButton")); var _Drawing = _interopRequireDefault(require("../Drawing")); var _Divider = _interopRequireDefault(require("../Divider")); var _ClickListener = _interopRequireDefault(require("../ClickListener")); var _TextField = _interopRequireDefault(require("../TextField")); var _Button = _interopRequireDefault(require("../Button")); var _Surface = _interopRequireDefault(require("../Surface")); var _ListItem = _interopRequireDefault(require("../ListItem")); var _Line = _interopRequireDefault(require("../Line")); var _utils2 = require("../utils"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["ref", "tonal", "color", "version", "value", "onChange", "render", "miniMenu", "miniMenuInclude", "exclude", "updates", "actions", "fontFamilies", "addFontFamilies", "IconItalic", "IconUnderline", "IconBold", "IconStrikeLine", "IconColor", "IconBackground", "IconAlignLeft", "IconAlignCenter", "IconAlignRight", "IconAlignJustify", "IconIndent", "IconOutdent", "IconSuperscript", "IconSubscript", "IconListOrdered", "IconListUnordered", "IconHorizontalRule", "IconLinkAdd", "IconLinkRemove", "IconQuote", "IconImage", "IconVideo", "IconVideoYoutube", "IconTable", "IconCode", "IconDrawing", "IconCopy", "IconCut", "IconPaste", "IconDelete", "IconClear", "IconSelectAll", "IconSave", "IconPrint", "IconUndo", "IconRedo", "AppendProps", "ToolbarProps", "ToolbarUpdatesProps", "ToolbarActionsProps", "ToggleButtonProps", "ToggleButtonsProps", "DividerProps", "SelectProps", "ListItemProps", "TooltipProps", "MiniMenuProps", "DrawingProps", "IconProps", "ColorTextFieldProps", "Component", "className", "children"], _excluded2 = ["open", "name", "children"], _excluded3 = ["open", "element", "anchorElement", "onClose", "children"], _excluded4 = ["color"], _excluded5 = ["ref", "version", "onUpdate", "onClose"], _excluded6 = ["ref", "label", "labelButton", "value", "onChange", "onClick", "InputComponent", "InputProps"]; 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) { (0, _defineProperty2.default)(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; } const useStyle = (0, _styleReact.style)(theme => ({ root: { width: '100%' }, value: { padding: theme.methods.space.value(2, 'px'), whiteSpace: 'break-spaces', '& p': _objectSpread({}, theme.typography.values.b2), '& h1': _objectSpread({}, theme.typography.values.h1), '& h2': _objectSpread({}, theme.typography.values.h2), '& h3': _objectSpread({}, theme.typography.values.h3), '& h4': _objectSpread({}, theme.typography.values.t1), '& h5': _objectSpread({}, theme.typography.values.t2), '& a': { color: theme.palette.color.primary.main, textDecoration: 'underline' }, '& blockquote': { margin: '16px 0', marginInlineStart: '16px', padding: `${theme.methods.space.value(2.5, 'px')} ${theme.methods.space.value(2, 'px')}`, borderInlineStart: `4px solid ${theme.methods.palette.color.colorToRgb(theme.palette.text.default.primary, theme.palette.light ? 0.04 : 0.2)}`, background: theme.methods.palette.color.colorToRgb(theme.palette.text.default.primary, theme.palette.light ? 0.02 : 0.14), '& > *': { margin: '0px' }, '& > $blockquote': { marginBlock: '16px' } }, '& iframe': { display: 'block', maxWidth: '100%', margin: '16px auto' }, '& video': { display: 'block', margin: '16px auto' }, '& code': { padding: `${theme.methods.space.value(0.25, 'px')} ${theme.methods.space.value(0.5, 'px')}`, borderRadius: theme.methods.shape.radius.value(0.5, 'px'), color: theme.palette.text.default.primary, background: theme.methods.palette.color.colorToRgb(theme.palette.text.default.primary, theme.palette.light ? 0.04 : 0.1) }, '& pre': { margin: '16px 0', padding: theme.methods.space.value(2, 'px'), borderRadius: theme.methods.shape.radius.value(1, 'px'), color: theme.palette.text.default.primary, background: theme.methods.palette.color.colorToRgb(theme.palette.text.default.primary, theme.palette.light ? 0.04 : 0.1), '& code': { padding: '0px', background: 'transparent' } }, '& table': { margin: '16px auto', borderCollapse: 'collapse', border: `1px solid ${theme.palette.light ? theme.palette.color.neutral[80] : theme.palette.color.neutral[30]}`, '& th, & td': _objectSpread(_objectSpread({}, theme.typography.values.b2), {}, { height: '45px', padding: `${theme.methods.space.value(1.5, 'px')} ${theme.methods.space.value(2, 'px')}`, borderBottom: `1px solid ${theme.palette.light ? theme.palette.color.neutral[80] : theme.palette.color.neutral[30]}`, borderRight: `1px solid ${theme.palette.light ? theme.palette.color.neutral[80] : theme.palette.color.neutral[30]}` }), '& th': { fontWeight: 500, borderBottom: `1px solid ${theme.palette.light ? theme.palette.color.neutral[50] : theme.palette.color.neutral[50]}` } }, '& .onesy-Drawing-svg': { display: 'block', margin: '16px auto', background: theme.palette.color.neutral[100] } }, toolbars: { width: '100%' }, toolbar: { width: '100%', overflowX: 'auto', padding: theme.methods.space.value(1, 'px') }, divider: { '&.onesy-Divider-root': { margin: 0 } }, divider_middle: { '&.onesy-Divider-root': { opacity: theme.palette.light ? 0.07 : 0.24 } }, divider_end: { '&.onesy-Divider-root': { opacity: theme.palette.light ? 0.14 : 0.4 } }, select: { '& .onesy-TextField-input-wrapper': { height: '40px', paddingBlock: theme.methods.space.value(1.25, 'px') }, '& .onesy-Select-input': { '& > *': _objectSpread(_objectSpread({}, theme.typography.values.b2), {}, { fontWeight: 400 }) } }, miniMenu: { padding: theme.methods.space.value(1.5, 'px'), borderRadius: theme.methods.shape.radius.value(140, 'px'), boxShadow: theme.shadows.values.default[2] }, palette: { padding: theme.methods.space.value(1.5, 'px'), borderRadius: theme.methods.shape.radius.value(1, 'px'), boxShadow: theme.shadows.values.default[2] }, paletteItem: { position: 'relative', width: '17px', height: '17px', cursor: 'pointer', borderRadius: theme.methods.shape.radius.value(40, 'px'), boxShadow: theme.shadows.values.default[1], transition: theme.methods.transitions.make('box-shadow'), '&:hover': { boxShadow: theme.shadows.values.default[2] } }, textFieldColor: { flex: '1 1 auto' } }), { name: 'onesy-RichTextEditor' }); const RichTextEditor = props__ => { var _theme$ui, _theme$ui2, _theme$elements, _theme$elements2, _theme$elements3, _theme$elements4, _theme$elements5, _theme$elements6, _theme$elements7, _theme$elements8, _theme$elements9, _theme$elements0, _theme$elements1, _theme$elements10, _theme$elements11, _theme$elements12, _theme$elements13, _theme$elements14, _theme$elements15, _theme$elements16, _theme$elements17, _refs$root$current; const theme = (0, _styleReact.useOnesyTheme)(); const l = theme.l; const props = _objectSpread(_objectSpread(_objectSpread({}, theme === null || theme === void 0 || (_theme$ui = theme.ui) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.elements) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.all) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.props) === null || _theme$ui === void 0 ? void 0 : _theme$ui.default), theme === null || theme === void 0 || (_theme$ui2 = theme.ui) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.elements) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.onesyRichTextEditor) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.props) === null || _theme$ui2 === void 0 ? void 0 : _theme$ui2.default), props__); const Line = (theme === null || theme === void 0 || (_theme$elements = theme.elements) === null || _theme$elements === void 0 ? void 0 : _theme$elements.Line) || _Line.default; const Type = (theme === null || theme === void 0 || (_theme$elements2 = theme.elements) === null || _theme$elements2 === void 0 ? void 0 : _theme$elements2.Type) || _Type.default; const Tooltip = (theme === null || theme === void 0 || (_theme$elements3 = theme.elements) === null || _theme$elements3 === void 0 ? void 0 : _theme$elements3.Tooltip) || _Tooltip.default; const Fade = (theme === null || theme === void 0 || (_theme$elements4 = theme.elements) === null || _theme$elements4 === void 0 ? void 0 : _theme$elements4.Fade) || _Fade.default; const Append = (theme === null || theme === void 0 || (_theme$elements5 = theme.elements) === null || _theme$elements5 === void 0 ? void 0 : _theme$elements5.Append) || _Append.default; const Select = (theme === null || theme === void 0 || (_theme$elements6 = theme.elements) === null || _theme$elements6 === void 0 ? void 0 : _theme$elements6.Select) || _Select.default; const Switch = (theme === null || theme === void 0 || (_theme$elements7 = theme.elements) === null || _theme$elements7 === void 0 ? void 0 : _theme$elements7.Switch) || _Switch.default; const Label = (theme === null || theme === void 0 || (_theme$elements8 = theme.elements) === null || _theme$elements8 === void 0 ? void 0 : _theme$elements8.Label) || _Label.default; const NumericTextField = (theme === null || theme === void 0 || (_theme$elements9 = theme.elements) === null || _theme$elements9 === void 0 ? void 0 : _theme$elements9.NumericTextField) || _NumericTextField.default; const ColorTextField = (theme === null || theme === void 0 || (_theme$elements0 = theme.elements) === null || _theme$elements0 === void 0 ? void 0 : _theme$elements0.ColorTextField) || _ColorTextField.default; const ToggleButton = (theme === null || theme === void 0 || (_theme$elements1 = theme.elements) === null || _theme$elements1 === void 0 ? void 0 : _theme$elements1.ToggleButton) || _ToggleButton.default; const ToggleButtons = (theme === null || theme === void 0 || (_theme$elements10 = theme.elements) === null || _theme$elements10 === void 0 ? void 0 : _theme$elements10.ToggleButtons) || _ToggleButtons.default; const Drawing = (theme === null || theme === void 0 || (_theme$elements11 = theme.elements) === null || _theme$elements11 === void 0 ? void 0 : _theme$elements11.Drawing) || _Drawing.default; const Divider = (theme === null || theme === void 0 || (_theme$elements12 = theme.elements) === null || _theme$elements12 === void 0 ? void 0 : _theme$elements12.Divider) || _Divider.default; const ClickListener = (theme === null || theme === void 0 || (_theme$elements13 = theme.elements) === null || _theme$elements13 === void 0 ? void 0 : _theme$elements13.ClickListener) || _ClickListener.default; const TextField = (theme === null || theme === void 0 || (_theme$elements14 = theme.elements) === null || _theme$elements14 === void 0 ? void 0 : _theme$elements14.TextField) || _TextField.default; const Surface = (theme === null || theme === void 0 || (_theme$elements15 = theme.elements) === null || _theme$elements15 === void 0 ? void 0 : _theme$elements15.Surface) || _Surface.default; const Button = (theme === null || theme === void 0 || (_theme$elements16 = theme.elements) === null || _theme$elements16 === void 0 ? void 0 : _theme$elements16.Button) || _Button.default; const ListItem = (theme === null || theme === void 0 || (_theme$elements17 = theme.elements) === null || _theme$elements17 === void 0 ? void 0 : _theme$elements17.ListItem) || _ListItem.default; const { ref, tonal = true, color = 'default', version = 'filled', value, onChange, render, miniMenu = true, miniMenuInclude = ['italic', 'underline', 'bold', 'strike-line', 'font-color', 'font-background', 'align-left', 'align-center', 'align-right', 'align-justify', 'link-add', 'link-remove', 'clear'], exclude, updates = true, actions = true, fontFamilies = [{ label: 'Arial', value: `Arial, sans-serif` }, { label: 'Verdana', value: `Verdana, sans-serif` }, { label: 'Helvetica', value: `Helvetica, sans-serif` }, { label: 'Georgia', value: `Georgia, sans-serif` }, { label: 'Roboto', value: `Roboto, sans-serif` }, { label: 'DM Sans', value: `DM Sans, sans-serif` }], addFontFamilies = [], // Update IconItalic = _IconMaterialFormatItalicW.default, IconUnderline = _IconMaterialFormatUnderlinedW.default, IconBold = _IconMaterialFormatBoldW.default, IconStrikeLine = _IconMaterialStrikethroughSW.default, IconColor = _IconMaterialFormatColorTextW.default, IconBackground = _IconMaterialFormatColorFillW.default, IconAlignLeft = _IconMaterialFormatAlignLeftW.default, IconAlignCenter = _IconMaterialFormatAlignCenterW.default, IconAlignRight = _IconMaterialFormatAlignRightW.default, IconAlignJustify = _IconMaterialFormatAlignJustifyW.default, IconIndent = _IconMaterialFormatIndentIncreaseW.default, IconOutdent = _IconMaterialFormatIndentDecreaseW.default, IconSuperscript = _IconMaterialSuperscriptW.default, IconSubscript = _IconMaterialSubscriptW.default, IconListOrdered = _IconMaterialFormatListNumberedW.default, IconListUnordered = _IconMaterialFormatListBulletedW.default, IconHorizontalRule = _IconMaterialHorizontalRuleW.default, IconLinkAdd = _IconMaterialAddLinkW.default, IconLinkRemove = _IconMaterialLinkOffW.default, IconQuote = _IconMaterialFormatQuoteW.default, IconImage = _IconMaterialImageW.default, IconVideo = _IconMaterialVideocamW.default, IconVideoYoutube = _IconMaterialPlayArrowW.default, IconTable = _IconMaterialTableW.default, IconCode = _IconMaterialCodeW.default, IconDrawing = _IconMaterialDrawW.default, // Action IconCopy = _IconMaterialContentCopyW.default, IconCut = _IconMaterialContentCutW.default, IconPaste = _IconMaterialContentPasteW.default, IconDelete = _IconMaterialDeleteSweepW.default, IconClear = _IconMaterialFormatClearW.default, IconSelectAll = _IconMaterialSelectAllW.default, IconSave = _IconMaterialDownloadW.default, IconPrint = _IconMaterialPrintW.default, IconUndo = _IconMaterialUndoW.default, IconRedo = _IconMaterialRedoW.default, AppendProps: AppendProps_, ToolbarProps, ToolbarUpdatesProps, ToolbarActionsProps, ToggleButtonProps: ToggleButtonProps_, ToggleButtonsProps: ToggleButtonsProps_, DividerProps: DividerProps_, SelectProps: SelectProps_, ListItemProps: ListItemProps_, TooltipProps: TooltipProps_, MiniMenuProps: MiniMenuProps_, DrawingProps, IconProps: IconProps_, ColorTextFieldProps, Component = 'div', className, children } = props, other = (0, _objectWithoutProperties2.default)(props, _excluded); const { classes } = useStyle(); const [inputValues, setInputValues] = _react.default.useState({}); const [open, setOpen] = _react.default.useState({}); const [selected, setSelected] = _react.default.useState([]); const [selection, setSelection] = _react.default.useState(); const refs = { root: _react.default.useRef(null), value: _react.default.useRef(null), range: _react.default.useRef(null), inputValues: _react.default.useRef(null), open: _react.default.useRef(null), props: _react.default.useRef(null), selected: _react.default.useRef(null), miniMenu: _react.default.useRef(null), miniMenuInclude: _react.default.useRef(null), miniMenuElements: { color: _react.default.useRef(null), colorPalette: _react.default.useRef(null), background: _react.default.useRef(null), backgroundPalette: _react.default.useRef(null), linkAdd: _react.default.useRef(null), linkAddInput: _react.default.useRef(null), linkRemove: _react.default.useRef(null) }, elements: { color: _react.default.useRef(null), background: _react.default.useRef(null), linkAdd: _react.default.useRef(null), linkRemove: _react.default.useRef(null), quote: _react.default.useRef(null), image: _react.default.useRef(null), video: _react.default.useRef(null), videoYoutube: _react.default.useRef(null), table: _react.default.useRef(null), drawing: _react.default.useRef(null), drawingSvg: _react.default.useRef(null), drawingSize: _react.default.useRef(null), drawingSelect: _react.default.useRef(null), drawingPalette: _react.default.useRef(null), code: _react.default.useRef(null) }, rootDocument: _react.default.useRef(null), rootWindow: _react.default.useRef(null) }; refs.inputValues.current = inputValues; refs.open.current = open; refs.props.current = props; refs.selected.current = selected; refs.miniMenuInclude.current = miniMenuInclude; const rootDocument = (0, _utils.isEnvironment)('browser') && (((_refs$root$current = refs.root.current) === null || _refs$root$current === void 0 ? void 0 : _refs$root$current.ownerDocument) || window.document); const rootWindow = rootDocument && (rootDocument.defaultView || window); refs.rootDocument.current = rootDocument; refs.rootWindow.current = rootWindow; _react.default.useEffect(() => { // Add value as innerHTML refs.value.current.innerHTML = value; }, [value]); _react.default.useEffect(() => { var _selection_$anchorNod; const selection_ = refs.rootWindow.current.getSelection(); if (selection_ && selection_.anchorNode && !((_selection_$anchorNod = selection_.anchorNode) !== null && _selection_$anchorNod !== void 0 && (_selection_$anchorNod = _selection_$anchorNod.className) !== null && _selection_$anchorNod !== void 0 && _selection_$anchorNod.includes('TextField'))) refs.range.current = selection_.getRangeAt(0); }, [open]); _react.default.useEffect(() => { if (!selection) { updateOpen('colorMiniMenu', false); updateOpen('backgroundMiniMenu', false); updateOpen('linkMiniMenu', false); } }, [selection]); const query = command => { return (0, _utils.parse)(refs.rootDocument.current.queryCommandValue(command)); }; const includesMinMenu = (...args) => args.some(item => refs.miniMenuInclude.current.includes(item)); const clear = (element = refs.value.current) => { const children_ = Array.from(element.children); const toRemove = []; const other_ = []; children_.forEach((item_0, index) => { item_0.tagName === 'SPAN' && !item_0.innerHTML || item_0.tagName === 'BR' && index > 0 && children_[index - 1].tagName === 'SPAN' && !children_[index - 1].innerHTML ? toRemove.push(item_0) : other_.push(item_0); }); toRemove.forEach(item_1 => item_1.remove()); other_.forEach(item_2 => clear(item_2)); }; const onUpdate = event => { // Clear from empty element values clear(); if ((0, _utils.is)('function', onChange)) onChange(event); }; const updateInputValues = (property, itemValue) => { setInputValues(values => _objectSpread(_objectSpread({}, values), {}, { [property]: itemValue })); }; const updateOpen = (property_0, itemValue_0) => { setOpen(values_0 => _objectSpread(_objectSpread({}, values_0), {}, { [property_0]: itemValue_0 })); }; const paste = async () => { const value_ = await navigator.clipboard.read(); if (value_) { let values_1 = ''; for (const item_3 of Array.from(value_)) { const valueItem = await item_3.getType('text/html'); values_1 += await valueItem.text(); } refs.rootDocument.current.execCommand('insertHTML', undefined, values_1); } }; const method = command_0 => argument => { switch (command_0) { // updates case 'italic': refs.rootDocument.current.execCommand('italic'); if (query('italic')) setSelected(values_24 => [...values_24, 'italic']);else setSelected(values_25 => values_25.filter(item_21 => item_21 !== 'italic')); break; case 'underline': refs.rootDocument.current.execCommand('underline'); if (query('underline')) setSelected(values_22 => [...values_22, 'underline']);else setSelected(values_23 => values_23.filter(item_20 => item_20 !== 'underline')); break; case 'bold': refs.rootDocument.current.execCommand('bold'); if (query('bold')) setSelected(values_20 => [...values_20, 'bold']);else setSelected(values_21 => values_21.filter(item_19 => item_19 !== 'bold')); break; case 'strike-line': refs.rootDocument.current.execCommand('strikeThrough'); if (query('strikeThrough')) setSelected(values_18 => [...values_18, 'strike-line']);else setSelected(values_19 => values_19.filter(item_18 => item_18 !== 'strike-line')); break; case 'align-left': refs.rootDocument.current.execCommand('justifyLeft'); if (query('justifyLeft')) setSelected(values_16 => [...values_16.filter(item_16 => !item_16.includes('align')), 'align-left']);else setSelected(values_17 => values_17.filter(item_17 => item_17 !== 'align-left')); break; case 'align-center': refs.rootDocument.current.execCommand('justifyCenter'); if (query('justifyCenter')) setSelected(values_14 => [...values_14.filter(item_14 => !item_14.includes('align')), 'align-center']);else setSelected(values_15 => values_15.filter(item_15 => item_15 !== 'align-center')); break; case 'align-right': refs.rootDocument.current.execCommand('justifyRight'); if (query('justifyRight')) setSelected(values_12 => [...values_12.filter(item_12 => !item_12.includes('align')), 'align-right']);else setSelected(values_13 => values_13.filter(item_13 => item_13 !== 'align-right')); break; case 'align-justify': refs.rootDocument.current.execCommand('justifyFull'); if (query('justifyFull')) setSelected(values_10 => [...values_10.filter(item_10 => !item_10.includes('align')), 'align-justify']);else setSelected(values_11 => values_11.filter(item_11 => item_11 !== 'align-justify')); break; case 'superscript': refs.rootDocument.current.execCommand('superscript'); if (query('superscript')) setSelected(values_8 => [...values_8, 'superscript']);else setSelected(values_9 => values_9.filter(item_9 => item_9 !== 'superscript')); break; case 'subscript': refs.rootDocument.current.execCommand('subscript'); if (query('subscript')) setSelected(values_6 => [...values_6, 'subscript']);else setSelected(values_7 => values_7.filter(item_8 => item_8 !== 'subscript')); break; case 'indent': refs.rootDocument.current.execCommand('indent'); break; case 'outdent': refs.rootDocument.current.execCommand('outdent'); break; case 'font-version': refs.rootDocument.current.execCommand('formatBlock', undefined, argument); break; case 'font-family': refs.rootDocument.current.execCommand('styleWithCSS', true); refs.rootDocument.current.execCommand('fontName', undefined, argument); refs.rootDocument.current.execCommand('styleWithCSS', false); break; case 'font-size': refs.rootDocument.current.execCommand('styleWithCSS', true); refs.rootDocument.current.execCommand('fontSize', undefined, argument); refs.rootDocument.current.execCommand('styleWithCSS', false); break; case 'font-color': refs.rootDocument.current.execCommand('styleWithCSS', true); refs.rootDocument.current.execCommand('foreColor', undefined, argument); refs.rootDocument.current.execCommand('styleWithCSS', false); break; case 'font-background': refs.rootDocument.current.execCommand('styleWithCSS', true); refs.rootDocument.current.execCommand('backColor', undefined, argument); refs.rootDocument.current.execCommand('styleWithCSS', false); break; case 'list-ordered': refs.rootDocument.current.execCommand('insertOrderedList'); if (query('insertOrderedList')) setSelected(values_4 => [...values_4.filter(item_6 => !item_6.includes('list')), 'list-ordered']);else setSelected(values_5 => values_5.filter(item_7 => item_7 !== 'list-ordered')); break; case 'list-unordered': refs.rootDocument.current.execCommand('insertUnorderedList'); if (query('insertUnorderedList')) setSelected(values_2 => [...values_2.filter(item_4 => !item_4.includes('list')), 'list-unordered']);else setSelected(values_3 => values_3.filter(item_5 => item_5 !== 'list-unordered')); break; case 'horizontal-rule': refs.rootDocument.current.execCommand('insertHorizontalRule'); break; case 'link-add': refs.rootDocument.current.execCommand('createLink', undefined, argument); break; case 'link-remove': refs.rootDocument.current.execCommand('unlink'); break; case 'image': refs.rootDocument.current.execCommand('insertImage', undefined, argument); break; case 'html': refs.rootDocument.current.execCommand('insertHTML', undefined, argument); break; // actions case 'copy': refs.rootDocument.current.execCommand('copy'); break; case 'cut': refs.rootDocument.current.execCommand('cut'); break; case 'paste': if (refs.rootDocument.current.queryCommandSupported('paste')) refs.rootDocument.current.execCommand('paste');else paste(); break; case 'delete': refs.rootDocument.current.execCommand('delete'); break; case 'clear': refs.rootDocument.current.execCommand('removeFormat'); break; case 'select-all': refs.rootDocument.current.execCommand('selectAll'); break; case 'undo': refs.rootDocument.current.execCommand('undo'); break; case 'redo': refs.rootDocument.current.execCommand('redo'); break; default: break; } }; const includes = (...args_0) => !(0, _utils.is)('array', exclude) || args_0.some(item_22 => !exclude.includes(item_22)); // italic, underline, bold // updates toolbar const updateOptions = ['font-family', 'font-version', 'font-size', 'font-color', 'font-background', 'italic', 'underline', 'bold', 'strike-line', 'align-left', 'align-center', 'align-right', 'align-justify', 'superscript', 'subscript', 'indent', 'outdent', 'list-ordered', 'list-unordered', 'horizontal-rule', 'link-add', 'link-remove', 'quote', 'image', 'video', 'video-youtube', 'table', 'drawing', 'code']; const updates_ = updates && (!(0, _utils.is)('array', exclude) || includes(...updateOptions)); // copy, paste, cut // action toolbar const actions_ = actions && (!(0, _utils.is)('array', exclude) || includes('copy', 'paste', 'cut', 'clear', 'undo', 'redo', 'delete', 'select-all', 'save', 'print')); const AppendProps = _objectSpread({ padding: [14, 14] }, AppendProps_); const DividerProps = _objectSpread({ color: 'inherit' }, DividerProps_); const TooltipProps = _objectSpread({ position: 'bottom', interactive: false }, TooltipProps_); const ToggleButtonsProps = _objectSpread({ tonal, color, version: 'text', border: false }, ToggleButtonsProps_); const ToggleButtonProps = _objectSpread({ size: 'small' }, ToggleButtonProps_); const MiniMenuProps = _objectSpread({ tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed' }, MiniMenuProps_); const SelectProps = _objectSpread({ tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed', version: 'outlined', size: 'small', ListProps: { tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed' }, MenuProps: { portal: true } }, SelectProps_); const ListItemProps = _objectSpread({ size: 'small', PrimaryProps: { style: { fontFamily: 'inherit' } } }, ListItemProps_); const IconProps = _objectSpread({ size: 'small' }, IconProps_); const WrapperToggleButton = props_ => { const { open: open_, name, children: children__0 } = props_, other__0 = (0, _objectWithoutProperties2.default)(props_, _excluded2); return /*#__PURE__*/(0, _jsxRuntime.jsx)(Tooltip, _objectSpread(_objectSpread({ open: open_ !== undefined ? open_ : undefined, name: name }, TooltipProps), {}, { children: /*#__PURE__*/_react.default.cloneElement(children__0, _objectSpread(_objectSpread({}, other__0), children__0.props)) })); }; const WrapperAppend = props__0 => { const { open: open__0, element: element_0, anchorElement, onClose, children: children__1 } = props__0, other__1 = (0, _objectWithoutProperties2.default)(props__0, _excluded3); return /*#__PURE__*/(0, _jsxRuntime.jsx)(Append, _objectSpread(_objectSpread({ open: open__0, element: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Fade, { in: open__0, add: true, children: /*#__PURE__*/_react.default.cloneElement(element_0) }) }), anchorElement: anchorElement, portal: true, alignment: "center", position: "bottom" }, AppendProps), {}, { children: /*#__PURE__*/_react.default.cloneElement(children__1, _objectSpread(_objectSpread({}, other__1), children__1.props)) })); }; const onMouseDown = () => { var _selection__0$anchorN; const selection__0 = refs.rootWindow.current.getSelection(); if (selection__0.anchorNode && !((_selection__0$anchorN = selection__0.anchorNode) !== null && _selection__0$anchorN !== void 0 && (_selection__0$anchorN = _selection__0$anchorN.className) !== null && _selection__0$anchorN !== void 0 && _selection__0$anchorN.includes('TextField'))) refs.range.current = selection__0.getRangeAt(0); }; const onMouseUp = () => { if (refs.range.current) { const selection__1 = refs.rootWindow.current.getSelection(); selection__1.removeAllRanges(); selection__1.addRange(refs.range.current); } }; const PaletteItem = props__1 => { const { color: color_ } = props__1, other__2 = (0, _objectWithoutProperties2.default)(props__1, _excluded4); return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", _objectSpread({ className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-palette-item'], classes.paletteItem]), style: { background: color_ } }, other__2)); }; const Palette = props__2 => { const { ref: ref_, version: version_, onUpdate: onUpdate_, onClose: onClose_0 } = props__2, other__3 = (0, _objectWithoutProperties2.default)(props__2, _excluded5); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, _objectSpread(_objectSpread({ ref: ref_, gap: 1, direction: "column", tonal: tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed', Component: Surface, className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-palette'], classes.palette]) }, other__3), {}, { children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 0.5, onMouseUp: onMouseUp, onMouseDown: onMouseDown, children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 0.5, direction: "row", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(PaletteItem, { color: "#000000", onClick: () => { onUpdate_('#000000'); onClose_0(); } }), /*#__PURE__*/(0, _jsxRuntime.jsx)(PaletteItem, { color: "#ffffff", onClick: () => { onUpdate_('#ffffff'); onClose_0(); } })] }), Object.keys(_styleReact.colors).filter(item_23 => !['black', 'white'].includes(item_23)).map((item_24, index_0) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, { gap: 0.5, direction: "row", style: { width: '100%' }, children: Object.keys(_styleReact.colors[item_24]).map((item_, index_) => /*#__PURE__*/(0, _jsxRuntime.jsx)(PaletteItem, { color: _styleReact.colors[item_24][item_], onClick: () => { if (refs.range.current) { const selection__2 = refs.rootWindow.current.getSelection(); selection__2.removeAllRanges(); selection__2.addRange(refs.range.current); } onUpdate_(_styleReact.colors[item_24][item_]); onClose_0(); } }, index_)) }, index_0))] }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Divider, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 0.5, direction: "row", align: "center", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ColorTextField, _objectSpread(_objectSpread({ tonal: tonal, color: color, name: l('Custom color'), version: "outlined", size: "small", value: refs.inputValues.current[version_], onChange: valueNew => updateInputValues(version_, valueNew) }, ColorTextFieldProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-text-field-color'], ColorTextFieldProps === null || ColorTextFieldProps === void 0 ? void 0 : ColorTextFieldProps.className, classes.textFieldColor]) })), /*#__PURE__*/(0, _jsxRuntime.jsx)(Button, { tonal: tonal, color: "inherit", version: "text", size: "small", onClick: () => { if (refs.range.current) { const selection__3 = refs.rootWindow.current.getSelection(); selection__3.removeAllRanges(); selection__3.addRange(refs.range.current); } onUpdate_(refs.inputValues.current[version_]); onClose_0(); }, children: "Apply" })] })] })); }; const Input = props__3 => { const { ref: ref__0, label, labelButton, value: value__, onChange: onChange__, onClick, InputComponent = TextField, InputProps } = props__3, other__4 = (0, _objectWithoutProperties2.default)(props__3, _excluded6); return /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, _objectSpread(_objectSpread({ ref: ref__0, gap: 1, direction: "column", tonal: tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed', Component: Surface, className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-palette'], classes.palette]) }, other__4), {}, { children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 0.5, direction: "row", align: "center", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(InputComponent, _objectSpread({ tonal: tonal, color: color, name: label, version: "outlined", size: "small", value: value__, onChange: onChange__, className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-text-field-color'], classes.textFieldColor]) }, InputProps)), /*#__PURE__*/(0, _jsxRuntime.jsx)(Button, { tonal: tonal, color: "inherit", version: "text", size: "small", onClick: onClick, children: labelButton })] }) })); }; const font_families = [...fontFamilies, ...addFontFamilies]; const font_sizes = [{ label: '11', value: 1 }, { label: '14', value: 2 }, { label: '16', value: 3 }, { label: '18', value: 4 }, { label: '24', value: 5 }, { label: '32', value: 6 }, { label: '48', value: 7 }]; const font_versions = [{ label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b2", children: l('Normal text') }), value: 'p' }, { label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "h1", children: l('Heading 1') }), value: 'h1' }, { label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "h2", children: l('Heading 2') }), value: 'h2' }, { label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "h3", children: l('Heading 3') }), value: 'h3' }, { label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "t1", children: l('Heading 4') }), value: 'h4' }, { label: /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "t2", children: l('Heading 5') }), value: 'h5' }]; const queryValueUpdate = () => { const selected_ = []; const inputValues_ = _objectSpread({}, inputValues); const updateOptionValues = [{ name: 'italic', command: 'italic' }, { name: 'underline', command: 'underline' }, { name: 'bold', command: 'bold' }, { name: 'strike-line', command: 'strikeThrough' }, { name: 'align-left', command: 'justifyLeft' }, { name: 'align-center', command: 'justifyCenter' }, { name: 'align-right', command: 'justifyRight' }, { name: 'align-justify', command: 'justifyFull' }, { name: 'superscript', command: 'superscript' }, { name: 'subscript', command: 'subscript' }, { name: 'list-ordered', command: 'insertOrderedList' }, { name: 'list-unordered', command: 'insertUnorderedList' }]; updateOptionValues.forEach(item_25 => { if (query(item_25.command)) selected_.push(item_25.name); }); // Font version const fontVersion = query('formatBlock'); const fontVersionValue = font_versions.find(item__0 => item__0.value === fontVersion) || font_versions[0]; inputValues_['font-version'] = fontVersionValue === null || fontVersionValue === void 0 ? void 0 : fontVersionValue.value; // Font family const fontFamily = query('fontName'); const fontFamilyValue = font_families.find(item__2 => fontFamily === null || fontFamily === void 0 ? void 0 : fontFamily.includes(item__2.label)) || font_families.find(item__1 => item__1.label === 'DM Sans'); inputValues_['font-family'] = fontFamilyValue === null || fontFamilyValue === void 0 ? void 0 : fontFamilyValue.value; // Font version const fontSize = query('fontSize'); const fontSizeValue = font_sizes.find(item__4 => item__4.value === fontSize) || font_sizes.find(item__3 => item__3.label === '14'); inputValues_['font-size'] = fontSizeValue === null || fontSizeValue === void 0 ? void 0 : fontSizeValue.value; setInputValues(inputValues_); setSelected(selected_); }; const onMouseUpValue = () => { queryValueUpdate(); setTimeout(() => { const selection__4 = refs.rootWindow.current.getSelection(); if (!selection__4.anchorNode || !refs.value.current.contains(selection__4.anchorNode)) return setSelection(''); const rect = selection__4.getRangeAt(0).getBoundingClientRect(); setSelection(Math.round(rect.width) ? rect : ''); }); }; const onMouseDownValue = () => { queryValueUpdate(); }; const updateElements = { 'font-version': /*#__PURE__*/(0, _jsxRuntime.jsx)(Select, _objectSpread(_objectSpread({ name: l('Font Version'), valueDefault: font_versions.find(item_26 => item_26.value.includes('p')).value, value: inputValues['font-version'], onChange: valueNew_0 => { updateInputValues('font-version', valueNew_0); method('font-version')(valueNew_0); }, onMouseUp: onMouseUp, onMouseDown: onMouseDown }, SelectProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-select'], SelectProps === null || SelectProps === void 0 ? void 0 : SelectProps.className, classes.select]), style: { minWidth: '150px' }, children: font_versions.map(item_27 => /*#__PURE__*/(0, _jsxRuntime.jsx)(ListItem, _objectSpread({ primary: item_27.label, value: item_27.value, button: true }, ListItemProps), item_27.value)) })), 'font-family': /*#__PURE__*/(0, _jsxRuntime.jsx)(Select, _objectSpread(_objectSpread({ name: l('Font Family'), valueDefault: font_families.find(item_28 => item_28.label.includes('DM Sans')).value, value: inputValues['font-family'], onChange: valueNew_1 => { updateInputValues('font-family', valueNew_1); method('font-family')(valueNew_1); }, onMouseUp: onMouseUp, onMouseDown: onMouseDown }, SelectProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-select'], SelectProps === null || SelectProps === void 0 ? void 0 : SelectProps.className, classes.select]), style: { minWidth: '140px' }, children: font_families.map(item_29 => /*#__PURE__*/(0, _jsxRuntime.jsx)(ListItem, _objectSpread({ primary: item_29.label, value: item_29.value, button: true, style: { fontFamily: item_29.value } }, ListItemProps), item_29.value)) })), 'font-size': /*#__PURE__*/(0, _jsxRuntime.jsx)(Select, _objectSpread(_objectSpread({ name: l('Font Size'), valueDefault: +font_sizes.find(item_30 => item_30.label.includes('14')).value, value: inputValues['font-size'], onChange: valueNew_2 => { updateInputValues('font-size', +valueNew_2); method('font-size')(+valueNew_2); }, onMouseUp: onMouseUp, onMouseDown: onMouseDown }, SelectProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('RichTextEditor', theme) && ['onesy-RichTextEditor-select'], SelectProps === null || SelectProps === void 0 ? void 0 : SelectProps.className, classes.select]), children: font_sizes.map(item_31 => /*