UNPKG

@amaui/ui-react

Version:
803 lines (799 loc) 31.3 kB
import _extends from "@babel/runtime/helpers/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; const _excluded = ["tonal", "color", "version", "render", "updates", "actions", "exclude", "downloadName", "downloadType", "downloadQuality", "viewBox", "strokeColor", "strokeWidth", "svgRef", "valueDefault", "value", "onChange", "onMouseDown", "onClear", "onDownload", "IconClear", "IconDownload", "IconSize", "IconStrokeColor", "IconProps", "SizeProps", "AppendProps", "ToolbarProps", "ToolbarUpdatesProps", "ToolbarActionsProps", "ToggleButtonProps", "ToggleButtonsProps", "DividerProps", "SelectProps", "ListItemProps", "TooltipProps", "PaletteProps", "IconButtonProps", "ColorTextFieldProps", "Component", "className"], _excluded2 = ["open", "label", "children"], _excluded3 = ["open", "element", "anchorElement", "onClose", "children"], _excluded4 = ["color"], _excluded5 = ["version", "onUpdate", "onClose"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } import React from 'react'; import { elementToCanvas, is, isEnvironment } from '@amaui/utils'; import { classNames, colors, style as styleMethod, useAmauiTheme } from '@amaui/style-react'; import IconMaterialDeleteSweep from '@amaui/icons-material-rounded-react/IconMaterialDeleteSweepW100'; import IconMaterialDownload from '@amaui/icons-material-rounded-react/IconMaterialDownloadW100'; import IconMaterialCropLandscape from '@amaui/icons-material-rounded-react/IconMaterialCropLandscapeW100'; import IconMaterialPalette from '@amaui/icons-material-rounded-react/IconMaterialPaletteW100'; import ListItemElement from '../ListItem'; import SurfaceElement from '../Surface'; import TooltipElement from '../Tooltip'; import TypeElement from '../Type'; import ButtonElement from '../Button'; import LineElement from '../Line'; import SelectElement from '../Select'; import NumericTextFieldElement from '../NumericTextField'; import ToggleButtonsElement from '../ToggleButtons'; import DividerElement from '../Divider'; import ToggleButtonElement from '../ToggleButton'; import ColorTextFieldElement from '../ColorTextField'; import AppendElement from '../Append'; import FadeElement from '../Fade'; import ClickListenerElement from '../ClickListener'; import { staticClassName } from '../utils'; const useStyle = styleMethod(theme => ({ root: { position: 'relative' }, methods: { position: 'absolute', right: '8px', bottom: '8px', padding: `${theme.methods.space.value(0.5, 'px')} ${theme.methods.space.value(1.5, 'px')}` }, svg: { display: 'block', margin: '12px', cursor: 'none', touchAction: 'none', boxShadow: theme.shadows.values.default[1], background: theme.palette.color.neutral[100] }, toolbars: { width: '100%' }, toolbar: { width: '100%', overflowX: 'auto', padding: theme.methods.space.value(1, 'px') }, modal: { padding: theme.methods.space.value(1.5, 'px'), borderRadius: theme.methods.shape.radius.value(1, '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' }, inputColor: { border: 'none', borderRadius: theme.methods.shape.radius.value(40, 'px'), overflow: 'hidden', width: '17px', height: '17px', cursor: 'pointer', boxShadow: theme.shadows.values.default[1], '&::-webkit-color-swatch-wrapper': { padding: '0px' }, '&::-webkit-color-swatch': { border: 'none' } }, divider: { '&.amaui-Divider-root': { margin: '0' } }, divider_middle: { '&.amaui-Divider-root': { opacity: theme.palette.light ? '0.07' : '0.24' } }, divider_end: { '&.amaui-Divider-root': { opacity: theme.palette.light ? '0.14' : '0.4' } } }), { name: 'amaui-Drawing' }); const Drawing = /*#__PURE__*/React.forwardRef((props__, ref) => { const theme = useAmauiTheme(); const props = React.useMemo(() => _objectSpread(_objectSpread(_objectSpread({}, theme?.ui?.elements?.all?.props?.default), theme?.ui?.elements?.amauiDrawing?.props?.default), props__), [props__]); const Line = React.useMemo(() => theme?.elements?.Line || LineElement, [theme]); const ListItem = React.useMemo(() => theme?.elements?.ListItem || ListItemElement, [theme]); const Surface = React.useMemo(() => theme?.elements?.Surface || SurfaceElement, [theme]); const Tooltip = React.useMemo(() => theme?.elements?.Tooltip || TooltipElement, [theme]); const Type = React.useMemo(() => theme?.elements?.Type || TypeElement, [theme]); const Button = React.useMemo(() => theme?.elements?.Button || ButtonElement, [theme]); const Select = React.useMemo(() => theme?.elements?.Select || SelectElement, [theme]); const NumericTextField = React.useMemo(() => theme?.elements?.NumericTextField || NumericTextFieldElement, [theme]); const ToggleButton = React.useMemo(() => theme?.elements?.ToggleButton || ToggleButtonElement, [theme]); const ToggleButtons = React.useMemo(() => theme?.elements?.ToggleButtons || ToggleButtonsElement, [theme]); const Divider = React.useMemo(() => theme?.elements?.Divider || DividerElement, [theme]); const ColorTextField = React.useMemo(() => theme?.elements?.ColorTextField || ColorTextFieldElement, [theme]); const Append = React.useMemo(() => theme?.elements?.Append || AppendElement, [theme]); const Fade = React.useMemo(() => theme?.elements?.Fade || FadeElement, [theme]); const ClickListener = React.useMemo(() => theme?.elements?.ClickListener || ClickListenerElement, [theme]); const { tonal = true, color = 'default', version = 'filled', render, updates = true, actions = true, exclude, downloadName = `amaui-drawing.png`, downloadType = 'image/png', downloadQuality = 1, viewBox = '0 0 340 140', strokeColor = '#000000', strokeWidth = 1, svgRef, valueDefault, value: value_, onChange, onMouseDown: onMouseDown_, onClear: onClear_, onDownload: onDownload_, IconClear = IconMaterialDeleteSweep, IconDownload = IconMaterialDownload, IconSize = IconMaterialCropLandscape, IconStrokeColor = IconMaterialPalette, IconProps: IconProps_, SizeProps, AppendProps: AppendProps_, ToolbarProps, ToolbarUpdatesProps, ToolbarActionsProps, ToggleButtonProps: ToggleButtonProps_, ToggleButtonsProps: ToggleButtonsProps_, DividerProps: DividerProps_, SelectProps: SelectProps_, ListItemProps: ListItemProps_, TooltipProps: TooltipProps_, PaletteProps, IconButtonProps, ColorTextFieldProps, Component = 'div', className } = props, other = _objectWithoutProperties(props, _excluded); const { classes } = useStyle(); const [value, setValue] = React.useState((valueDefault !== undefined ? valueDefault : value_) || []); const [mouseDown, setMouseDown] = React.useState(false); const [move, setMove] = React.useState({}); const [loading, setLoading] = React.useState(false); const [inputValues, setInputValues] = React.useState({ viewBox: '0 0 340 140', width: 340, widthInput: 340, height: 140, heightInput: 140, strokeWidth: 1, strokeColor: '#000000' }); const [open, setOpen] = React.useState({}); const refs = { root: React.useRef(undefined), inputValues: React.useRef(undefined), svg: React.useRef(undefined), value: React.useRef(undefined), mouseDown: React.useRef(undefined), props: React.useRef(undefined), move: React.useRef(undefined), download: React.useRef(undefined), open: React.useRef(undefined), elements: { size: React.useRef(undefined), strokeColor: React.useRef(undefined) } }; refs.value.current = value; refs.open.current = open; refs.props.current = props; refs.inputValues.current = inputValues; refs.download.current = { name: downloadName, type: downloadType, quality: downloadQuality }; refs.mouseDown.current = mouseDown; refs.move.current = move; const updateValue = valueNew => { if (!props.hasOwnProperty('value')) setValue(valueNew); if (is('function', onChange)) onChange(valueNew); }; const updateInputValues = (property, itemValue) => { setInputValues(values => _objectSpread(_objectSpread({}, values), {}, { [property]: itemValue })); }; const updateOpen = (property, itemValue) => { setOpen(values => _objectSpread(_objectSpread({}, values), {}, { [property]: itemValue })); }; React.useEffect(() => { const onMouseUp = () => { if (refs.mouseDown.current) setMouseDown(false); }; const onMouseMove = event => { const x = event.clientX; const y = event.clientY; const rect = refs.svg.current?.getBoundingClientRect(); if (!rect) return; const { x: xRoot, y: yRoot } = rect; const valueMove = { x: x - xRoot, y: y - yRoot }; update(valueMove); }; const onTouchMove = event => { const x = event.touches[0].clientX; const y = event.touches[0].clientY; const rect = refs.svg.current?.getBoundingClientRect(); if (!rect) return; const { x: xRoot, y: yRoot } = rect; const valueMove = { x: x - xRoot, y: y - yRoot }; update(valueMove); }; const update = valueNew => { if (refs.mouseDown.current) { // Update // relative value from the previous one how much x and y moved const x = valueNew?.x; const y = valueNew?.y; const previous = refs.value.current?.[refs.value.current?.length - 1]; if (previous) { if (!(x === 0 && y === 0)) { previous.d += ` ${x},${y}`; updateValue([...refs.value.current]); } } } setMove(valueNew); }; const rootDocument = isEnvironment('browser') ? refs.root.current?.ownerDocument || window.document : undefined; rootDocument.addEventListener('mouseup', onMouseUp); rootDocument.addEventListener('mousemove', onMouseMove); rootDocument.addEventListener('touchend', onMouseUp, { passive: true }); rootDocument.addEventListener('touchmove', onTouchMove); return () => { rootDocument.removeEventListener('mouseup', onMouseUp); rootDocument.removeEventListener('touchend', onMouseUp); rootDocument.removeEventListener('mousemove', onMouseMove); rootDocument.removeEventListener('touchmove', onTouchMove); }; }, []); React.useEffect(() => { if (value_ !== refs.value.current) setValue(value_); }, [value_]); React.useEffect(() => { if (strokeColor !== undefined && strokeColor !== refs.inputValues.current.strokeColor) updateInputValues('strokeColor', strokeColor); if (strokeWidth !== undefined && strokeWidth !== refs.inputValues.current.strokeWidth) updateInputValues('strokeWidth', strokeWidth); }, [strokeColor, strokeWidth]); React.useEffect(() => { if (viewBox !== undefined && viewBox !== refs.inputValues.current.viewBox) { updateInputValues('viewBox', viewBox); updateInputValues('width', viewBox.split(' ')[2]); updateInputValues('height', viewBox.split(' ')[3]); } }, [viewBox]); const onMouseDown = React.useCallback(event => { setMouseDown(true); let x = event.touches ? event.touches[0].clientX : event.clientX; let y = event.touches ? event.touches[0].clientY : event.clientY; const rect = refs.svg.current.getBoundingClientRect(); x -= rect.x; y -= rect.y; setMove({ x, y }); // Create new value path updateValue([...(refs.value.current || []), { d: `M ${x},${y} L ${x} ${y}`, stroke: refs.inputValues.current.strokeColor, strokeWidth: refs.inputValues.current.strokeWidth }]); if (is('function', onMouseDown_)) onMouseDown_(event); }, []); const onClear = React.useCallback(() => { updateValue([]); if (is('function', onClear_)) onClear_(); }, []); const onDownload = React.useCallback(async () => { const svg = refs.svg.current; const rect = svg.getBoundingClientRect(); // Clean up const clone = svg.cloneNode(true); clone.style.margin = '0px'; clone.style.boxShadow = 'none'; if (refs.download.current.type?.includes('png')) { clone.style.background = 'transparent'; } try { setLoading(true); await elementToCanvas(clone, { response: 'download', filter: ['.amaui-Drawing-pointer'], download: refs.download.current, width: rect.width, height: rect.height }); } catch (error) {} setLoading(false); if (is('function', onDownload_)) onDownload_(); }, []); const includes = function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return !is('array', exclude) || args.some(item => !exclude.includes(item)); }; // updates toolbar const updateOptions = ['stroke-color', 'stroke-width', 'size']; const updates_ = updates && (!is('array', exclude) || includes(...updateOptions)); // action toolbar const actions_ = actions && (!is('array', exclude) || includes('clear', 'download')); 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 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 = React.useCallback( /*#__PURE__*/React.forwardRef((props_, ref_) => { const { open: open_, label, children } = props_, other_ = _objectWithoutProperties(props_, _excluded2); return /*#__PURE__*/React.createElement(Tooltip, _extends({ open: open_ !== undefined ? open_ : undefined, label: label }, TooltipProps), /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, other_), children.props))); }), []); const WrapperAppend = React.useCallback(props_ => { const { open: open_, element, anchorElement, onClose, children } = props_, other_ = _objectWithoutProperties(props_, _excluded3); return /*#__PURE__*/React.createElement(Append, _extends({ open: open_, element: /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Fade, { in: open_, add: true }, /*#__PURE__*/React.cloneElement(element))), anchorElement: anchorElement, portal: true, alignment: "center", position: "bottom" }, AppendProps), /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, other_), children.props))); }, []); const PaletteItem = React.useCallback(props_ => { const { color: color_ } = props_, other_ = _objectWithoutProperties(props_, _excluded4); return /*#__PURE__*/React.createElement("span", _extends({ className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-palette-item'], classes.paletteItem]), style: { background: color_ } }, other_)); }, []); const Palette = React.useCallback( /*#__PURE__*/React.forwardRef((props_, ref_) => { const { version: version_, onUpdate, onClose } = props_, other_ = _objectWithoutProperties(props_, _excluded5); return /*#__PURE__*/React.createElement(Line, _extends({ ref: ref_, gap: 1, direction: "column", tonal: tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed', Component: Surface, className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-palette'], classes.palette]) }, other_), /*#__PURE__*/React.createElement(Line, { gap: 0.5 }, /*#__PURE__*/React.createElement(Line, { gap: 0.5, direction: "row", style: { width: '100%' } }, /*#__PURE__*/React.createElement(PaletteItem, { color: "#000000", onClick: () => { onUpdate('#000000'); onClose(); } }), /*#__PURE__*/React.createElement(PaletteItem, { color: "#ffffff", onClick: () => { onUpdate('#ffffff'); onClose(); } })), Object.keys(colors).filter(item => !['black', 'white'].includes(item)).map((item, index) => /*#__PURE__*/React.createElement(Line, { key: index, gap: 0.5, direction: "row", style: { width: '100%' } }, Object.keys(colors[item]).map((item_, index_) => /*#__PURE__*/React.createElement(PaletteItem, { key: index_, color: colors[item][item_], onClick: () => { onUpdate(colors[item][item_]); onClose(); } }))))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Line, { gap: 0.5, direction: "row", align: "center", style: { width: '100%' } }, /*#__PURE__*/React.createElement(ColorTextField, _extends({ tonal: tonal, color: color, label: "Custom color", version: "outlined", size: "small", value: refs.inputValues.current[version_], onChange: valueNew => updateInputValues(version_, valueNew) }, ColorTextFieldProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-text-field-color'], ColorTextFieldProps?.className, classes.textFieldColor]) })), /*#__PURE__*/React.createElement(Button, { tonal: tonal, color: "inherit", version: "text", size: "small", onClick: () => { onUpdate(refs.inputValues.current[version_]); onClose(); } }, "Apply"))); }), []); const valueNew_ = (is('array', value) ? value : [value]).filter(Boolean); const valueNewActive = mouseDown && valueNew_[valueNew_.length - 1]; const circleStrokeWidth = +(valueNewActive ? valueNewActive.strokeWidth : refs.inputValues.current.strokeWidth); const stroke_width = [{ label: /*#__PURE__*/React.createElement(Line, { direction: "row", align: "center" }, /*#__PURE__*/React.createElement("div", { style: { width: 14, height: 1, background: theme.palette.text.default.primary } }), /*#__PURE__*/React.createElement(Type, { version: "b2" }, "1")), value: 1 }, { label: /*#__PURE__*/React.createElement(Line, { direction: "row", align: "center" }, /*#__PURE__*/React.createElement("div", { style: { width: 14, height: 2, background: theme.palette.text.default.primary } }), /*#__PURE__*/React.createElement(Type, { version: "b2" }, "2")), value: 2 }, { label: /*#__PURE__*/React.createElement(Line, { direction: "row", align: "center" }, /*#__PURE__*/React.createElement("div", { style: { width: 14, height: 4, background: theme.palette.text.default.primary } }), /*#__PURE__*/React.createElement(Type, { version: "b2" }, "4")), value: 4 }, { label: /*#__PURE__*/React.createElement(Line, { direction: "row", align: "center" }, /*#__PURE__*/React.createElement("div", { style: { width: 14, height: 8, background: theme.palette.text.default.primary } }), /*#__PURE__*/React.createElement(Type, { version: "b2" }, "8")), value: 8 }]; return /*#__PURE__*/React.createElement(Surface, _extends({ ref: item => { if (ref) { if (is('function', ref)) ref(item);else ref.current = item; } refs.root.current = item; }, tonal: tonal, color: color, version: version, Component: Component, className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-root', updates && `amaui-Drawing-updates`, actions && `amaui-Drawing-actions`], className, classes.root]) }, other), (updates || actions_) && /*#__PURE__*/React.createElement(Line, _extends({ tonal: tonal, color: color, version: version, gap: 0, direction: "column", align: "unset", justify: "unset", Component: Surface }, ToolbarProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-toolbars'], ToolbarProps?.className, classes.toolbars]) }), updates_ && /*#__PURE__*/React.createElement(Line, _extends({ gap: 2, direction: "row", align: "center", justify: "flex-start" }, ToolbarUpdatesProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-toolbar'], ToolbarUpdatesProps?.className, classes.toolbar, classes.toolbar_updates]) }), includes('stroke-width') && /*#__PURE__*/React.createElement(Line, { gap: 1, direction: "row", align: "center", justify: "flex-start" }, includes('stroke-width') && /*#__PURE__*/React.createElement(Select, _extends({ label: "Stroke Width", valueDefault: stroke_width.find(item => String(item.value).includes('1')).value, value: inputValues['strokeWidth'], onChange: valueNew => updateInputValues('strokeWidth', valueNew) }, SelectProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-select'], SelectProps?.className, classes.select]), style: { minWidth: '90px' } }), stroke_width.map(item => /*#__PURE__*/React.createElement(ListItem, _extends({ key: item.value, primary: item.label, value: item.value, button: true }, ListItemProps))))), includes('stroke-color') && /*#__PURE__*/React.createElement(ToggleButtons, ToggleButtonsProps, includes('stroke-color') && /*#__PURE__*/React.createElement(WrapperAppend, { open: refs.open.current.strokeColor, anchorElement: refs.elements.strokeColor.current, element: /*#__PURE__*/React.createElement(ClickListener, { onClickOutside: () => updateOpen('strokeColor', false), include: [refs.elements.strokeColor, refs.elements.strokeColor.current] }, /*#__PURE__*/React.createElement(Palette, _extends({ onClose: () => updateOpen('strokeColor', false), onUpdate: valueNew => updateInputValues('strokeColor', valueNew) }, PaletteProps))) }, /*#__PURE__*/React.createElement(WrapperToggleButton, { label: "Stroke Color", open: refs.open.current.strokeColor ? false : undefined }, is('function', render) ? render('stroke-color', ToggleButtonProps, refs.value.current) : /*#__PURE__*/React.createElement(ToggleButton, _extends({ ref: refs.elements.strokeColor }, ToggleButtonProps, { selected: refs.open.current.strokeColor, onClick: () => updateOpen('strokeColor', !refs.open.current.strokeColor) }), /*#__PURE__*/React.createElement(IconStrokeColor, IconProps))))), includes('size') && /*#__PURE__*/React.createElement(ToggleButtons, ToggleButtonsProps, includes('size') && /*#__PURE__*/React.createElement(WrapperAppend, { open: refs.open.current.size, anchorElement: refs.elements.size.current, element: /*#__PURE__*/React.createElement(ClickListener, { onClickOutside: () => updateOpen('size', false), include: [refs.elements.size] }, /*#__PURE__*/React.createElement(Line, _extends({ gap: 1, tonal: tonal, color: refs.props.current.color !== undefined ? refs.props.current.color : 'themed', Component: Surface, className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-modal'], classes.modal]) }, SizeProps), /*#__PURE__*/React.createElement(Line, { gap: 1, direction: "row", align: "center", justify: "center" }, /*#__PURE__*/React.createElement(NumericTextField, { label: "Width", tonal: tonal, color: color, size: "small", version: "outlined", min: 1, increment: false, decrement: false, value: refs.inputValues.current.widthInput, onChange: valueNew => updateInputValues('widthInput', !valueNew ? 1 : valueNew) }), "\xD7", /*#__PURE__*/React.createElement(NumericTextField, { label: "Height", tonal: tonal, color: color, size: "small", version: "outlined", min: 1, increment: false, decrement: false, value: refs.inputValues.current.heightInput, onChange: valueNew => updateInputValues('heightInput', !valueNew ? 1 : valueNew) })), /*#__PURE__*/React.createElement(Line, { gap: 1, direction: "row", align: "center", justify: "flex-end", style: { width: '100%' } }, /*#__PURE__*/React.createElement(Button, { tonal: tonal, color: "inherit", version: "text", size: "small", onClick: () => { const viewBox_ = refs.inputValues.current.viewBox?.split(' '); if (viewBox_) { viewBox_[2] = refs.inputValues.current.widthInput; viewBox_[3] = refs.inputValues.current.heightInput; } updateInputValues('viewBox', viewBox_.join(' ')); updateInputValues('width', refs.inputValues.current.widthInput); updateInputValues('height', refs.inputValues.current.heightInput); updateOpen('size', false); } }, "Update")))) }, /*#__PURE__*/React.createElement(WrapperToggleButton, { label: "Size", open: refs.open.current.size ? false : undefined }, is('function', render) ? render('size', ToggleButtonProps, refs.value.current) : /*#__PURE__*/React.createElement(ToggleButton, _extends({ ref: refs.elements.size }, ToggleButtonProps, { selected: refs.open.current.size, onClick: () => updateOpen('size', !refs.open.current.size) }), /*#__PURE__*/React.createElement(IconSize, IconProps)))))), updates_ && actions_ && /*#__PURE__*/React.createElement(Divider, _extends({}, DividerProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-divider'], DividerProps?.className, classes.divider, classes.divider_middle]) })), actions_ && /*#__PURE__*/React.createElement(Line, _extends({ gap: 2, direction: "row", align: "center", justify: "flex-start" }, ToolbarActionsProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-toolbar'], ToolbarActionsProps?.className, classes.toolbar, classes.toolbar_actions]) }), /*#__PURE__*/React.createElement(Line, { direction: "row", align: "center", justify: "space-between", style: { width: '100%' } }, /*#__PURE__*/React.createElement(Line, { gap: 2, direction: "row", align: "center", justify: "flex-start" }, includes('clear') && /*#__PURE__*/React.createElement(ToggleButtons, ToggleButtonsProps, includes('clear') && /*#__PURE__*/React.createElement(WrapperToggleButton, { label: "Clear" }, is('function', render) ? render('clear', ToggleButtonProps, refs.value.current) : /*#__PURE__*/React.createElement(ToggleButton, _extends({}, ToggleButtonProps, { onClick: onClear }), /*#__PURE__*/React.createElement(IconClear, IconProps))))), /*#__PURE__*/React.createElement(Line, { gap: 2, direction: "row", align: "center", justify: "flex-start" }, includes('download') && /*#__PURE__*/React.createElement(ToggleButtons, ToggleButtonsProps, includes('download') && /*#__PURE__*/React.createElement(WrapperToggleButton, { label: "Download" }, is('function', render) ? render('download', ToggleButtonProps, refs.value.current) : /*#__PURE__*/React.createElement(ToggleButton, _extends({}, ToggleButtonProps, { loading: loading, onClick: onDownload }), /*#__PURE__*/React.createElement(IconDownload, IconProps))))))), /*#__PURE__*/React.createElement(Divider, _extends({}, DividerProps, { className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-divider'], DividerProps?.className, classes.divider, classes.divider_end]) }))), /*#__PURE__*/React.createElement("svg", { ref: item => { if (svgRef) svgRef.current = item; refs.svg.current = item; }, viewBox: refs.inputValues.current.viewBox, onMouseDown: onMouseDown, onTouchStart: onMouseDown, className: classNames([staticClassName('Drawing', theme) && ['amaui-Drawing-svg'], classes.svg]), style: { width: refs.inputValues.current.width, height: refs.inputValues.current.height } }, valueNew_.map((item, index) => /*#__PURE__*/React.createElement("path", _extends({ key: index, fill: "none" }, item))), /*#__PURE__*/React.createElement("circle", { className: "amaui-Drawing-pointer", cx: move?.x, cy: move?.y, r: circleStrokeWidth + 1, fill: refs.inputValues.current.strokeColor }))); }); Drawing.displayName = 'amaui-Drawing'; export default Drawing;