@pie-lib/editable-html-tip-tap 1.2.0-next.26 → 1.2.0-next.27

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/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.2.0-next.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.26...@pie-lib/editable-html-tip-tap@1.2.0-next.27) (2026-04-09)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **editable-html-tip-tap:** image-component - fix active style, dragging issues and update image rendering logic PIE-34 ([5588e8b](https://github.com/pie-framework/pie-lib/commit/5588e8b10f61f2936d2356a4b2d403f29d094efa))
11
+ - handle optional chaining and fix test ([c4d4657](https://github.com/pie-framework/pie-lib/commit/c4d4657ed38718142c07ddf2a06225f2a11fd535))
12
+
6
13
  # [1.2.0-next.26](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.25...@pie-lib/editable-html-tip-tap@1.2.0-next.26) (2026-04-09)
7
14
 
8
15
  ### Bug Fixes
@@ -45,13 +45,10 @@ var StyledRoot = (0, _styles.styled)('div', {
45
45
  return !['active', 'loading', 'pendingDelete'].includes(prop);
46
46
  }
47
47
  })(function (_ref2) {
48
- var theme = _ref2.theme,
49
- active = _ref2.active,
50
- loading = _ref2.loading,
48
+ var loading = _ref2.loading,
51
49
  pendingDelete = _ref2.pendingDelete;
52
50
  return _objectSpread(_objectSpread({
53
51
  position: 'relative',
54
- border: active ? "solid 1px ".concat(theme.palette.primary.main) : "solid 1px ".concat(theme.palette.common.white),
55
52
  display: 'flex',
56
53
  transition: 'opacity 200ms linear'
57
54
  }, loading && {
@@ -72,8 +69,19 @@ var StyledImageContainer = (0, _styles.styled)('div')(function (_ref3) {
72
69
  }
73
70
  };
74
71
  });
75
- var StyledResize = (0, _styles.styled)('div')(function (_ref4) {
76
- var theme = _ref4.theme;
72
+ var StyledImage = (0, _styles.styled)('img', {
73
+ shouldForwardProp: function shouldForwardProp(prop) {
74
+ return prop !== 'active';
75
+ }
76
+ })(function (_ref4) {
77
+ var theme = _ref4.theme,
78
+ active = _ref4.active;
79
+ return {
80
+ border: active ? "solid 1px ".concat(theme.palette.primary.main) : "solid 1px transparent"
81
+ };
82
+ });
83
+ var StyledResize = (0, _styles.styled)('div')(function (_ref5) {
84
+ var theme = _ref5.theme;
77
85
  return {
78
86
  backgroundColor: theme.palette.primary.main,
79
87
  cursor: 'col-resize',
@@ -254,7 +262,6 @@ function ImageComponent(props) {
254
262
  }[node.attrs.alignment] || 'flex-start';
255
263
  return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledRoot, {
256
264
  onFocus: onFocus,
257
- active: selected,
258
265
  loading: !node.attrs.loaded,
259
266
  pendingDelete: node.attrs.deleteStatus === 'pending',
260
267
  style: {
@@ -264,7 +271,13 @@ function ImageComponent(props) {
264
271
  mode: "determinate",
265
272
  value: node.attrs.percent || 0,
266
273
  hideProgress: node.attrs.loaded
267
- }), /*#__PURE__*/_react["default"].createElement(StyledImageContainer, null, /*#__PURE__*/_react["default"].createElement("img", (0, _extends2["default"])({}, attributes, {
274
+ }), /*#__PURE__*/_react["default"].createElement(StyledImageContainer, {
275
+ onDragStart: function onDragStart(e) {
276
+ return e.preventDefault();
277
+ }
278
+ }, /*#__PURE__*/_react["default"].createElement(StyledImage, (0, _extends2["default"])({}, attributes, {
279
+ active: selected && node.attrs.loaded,
280
+ draggable: false,
268
281
  ref: imgRef,
269
282
  src: node.attrs.src,
270
283
  style: style,
@@ -1 +1 @@
1
- {"version":3,"file":"image-component.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_isEqual","_debug","_LinearProgress","_styles","_react2","_reactDom","_InsertImageHandler","_ImageToolbar","_customToolbarWrapper","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","log","debug","StyledProgress","styled","LinearProgress","shouldForwardProp","prop","_ref","hideProgress","position","left","width","top","transition","opacity","StyledRoot","includes","_ref2","theme","active","loading","pendingDelete","border","concat","palette","primary","main","common","white","display","StyledImageContainer","_ref3","alignItems","StyledResize","_ref4","backgroundColor","cursor","height","borderRadius","marginLeft","marginRight","sizePx","s","ImageComponent","props","node","editor","attributes","onFocus","selected","options","_props$maxImageWidth","maxImageWidth","_props$maxImageHeight","maxImageHeight","latex","handleChange","handleDone","alt","attrs","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","latestNodeRef","useRef","imgRef","resizeRef","toolbarRef","getPercentFromWidth","useCallback","floored","current","naturalWidth","parseInt","toFixed","applySizeData","update","resizePercent","isEqual","commands","updateAttributes","useEffect","selection","state","onlyThisNodeSelected","from","nodeSize","to","imageHandling","insertImageRequested","finish","InsertImageHandler","resizeHandle","addEventListener","initResize","removeEventListener","loadImage","box","style","w","Math","min","h","naturalHeight","updateAspect","initial","next","keepAspect","undefined","resizeType","ratio","startResize","bounds","target","getBoundingClientRect","clientX","clientY","findNodePos","found","src","doc","descendants","pos","type","name","onChange","newValues","stopResize","window","objectFit","flexAlign","center","right","alignment","createElement","NodeViewWrapper","loaded","deleteStatus","justifyContent","mode","value","percent","_extends2","ref","onLoad","className","_tiptapContainerEl","ReactDOM","createPortal","zIndex","background","boxShadow","showDone","deletable","toolbarOpts","onDelete","_options$imageHandlin","_options$imageHandlin2","nodePos","view","dispatch","tr","nodeAt","focus","onDone","_options$imageHandlin3","_options$imageHandlin4","disableImageAlignmentButtons","imageLoaded","propTypes","PropTypes","object","isRequired","func","number","_default","exports"],"sources":["../../src/extensions/image-component.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash-es/isEqual';\nimport debug from 'debug';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { styled } from '@mui/material/styles';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport ReactDOM from 'react-dom';\nimport InsertImageHandler from '../components/image/InsertImageHandler';\nimport ImageToolbar from '../components/image/ImageToolbar';\nimport CustomToolbarWrapper from './custom-toolbar-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:component');\n\nconst StyledProgress = styled(LinearProgress, {\n shouldForwardProp: (prop) => prop !== 'hideProgress',\n})(({ hideProgress }) => ({\n position: 'absolute',\n left: '0',\n width: 'fit-content',\n top: '0%',\n transition: 'opacity 200ms linear',\n ...(hideProgress && {\n opacity: 0,\n }),\n}));\n\nconst StyledRoot = styled('div', {\n shouldForwardProp: (prop) => !['active', 'loading', 'pendingDelete'].includes(prop),\n})(({ theme, active, loading, pendingDelete }) => ({\n position: 'relative',\n border: active ? `solid 1px ${theme.palette.primary.main}` : `solid 1px ${theme.palette.common.white}`,\n display: 'flex',\n transition: 'opacity 200ms linear',\n ...(loading && {\n opacity: 0.3,\n }),\n ...(pendingDelete && {\n opacity: 0.3,\n }),\n}));\n\nconst StyledImageContainer = styled('div')(({ theme }) => ({\n position: 'relative',\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n '&&:hover > .resize': {\n display: 'block',\n },\n}));\n\nconst StyledResize = styled('div')(({ theme }) => ({\n backgroundColor: theme.palette.primary.main,\n cursor: 'col-resize',\n height: '35px',\n width: '5px',\n borderRadius: 8,\n marginLeft: '5px',\n marginRight: '10px',\n display: 'none',\n}));\n\nconst sizePx = (s) => (s ? `${s}px` : 'calc(20px)');\n\nfunction ImageComponent(props) {\n const {\n node,\n editor,\n attributes,\n onFocus,\n selected,\n options,\n maxImageWidth = 700,\n maxImageHeight = 900,\n latex,\n handleChange,\n handleDone,\n } = props;\n const { alt } = node.attrs;\n\n const [showToolbar, setShowToolbar] = useState(false);\n\n const latestNodeRef = useRef(node);\n const imgRef = useRef(null);\n const resizeRef = useRef(null);\n const toolbarRef = useRef(null);\n\n const getPercentFromWidth = useCallback((width) => {\n const floored = (width / imgRef.current.naturalWidth) * 4;\n return parseInt(floored.toFixed(0) * 25, 10);\n }, []);\n\n const applySizeData = useCallback(() => {\n if (!node.attrs.width || !imgRef.current) return;\n\n const update = {\n ...node.attrs,\n resizePercent: getPercentFromWidth(node.attrs.width),\n };\n\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }, [editor, node.attrs, getPercentFromWidth]);\n\n // keep ref in sync with latest node\n useEffect(() => {\n latestNodeRef.current = node;\n }, [node]);\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(selected);\n }\n } else {\n setShowToolbar(selected);\n }\n }, [editor, node, selected]);\n\n useEffect(() => {\n options.imageHandling.insertImageRequested(node, (finish) => new InsertImageHandler(editor, node, finish));\n applySizeData();\n\n const resizeHandle = resizeRef.current;\n if (resizeHandle) {\n resizeHandle.addEventListener('mousedown', initResize, false);\n }\n return () => {\n if (resizeHandle) {\n resizeHandle.removeEventListener('mousedown', initResize, false);\n }\n };\n }, []);\n\n useEffect(() => {\n applySizeData();\n });\n\n const loadImage = useCallback(() => {\n const box = imgRef.current;\n if (!box) return;\n\n if (!box.style.width || box.style.width === 'calc(20px)') {\n const w = Math.min(box.naturalWidth, maxImageWidth);\n const h = Math.min(box.naturalHeight, maxImageHeight);\n\n box.style.width = `${w}px`;\n box.style.height = `${h}px`;\n\n const update = { width: w, height: h };\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }\n }, [editor, node.attrs, maxImageWidth, maxImageHeight]);\n\n const updateAspect = (initial, next, keepAspect = true, resizeType) => {\n if (keepAspect) {\n const ratio = initial.width / initial.height;\n if (resizeType === 'height') return { width: next.height * ratio, height: next.height };\n return { width: next.width, height: next.width / ratio };\n }\n return next;\n };\n\n const startResize = useCallback(\n (e) => {\n const box = imgRef.current;\n if (!box) return;\n\n const bounds = e.target.getBoundingClientRect();\n const initial = { width: box.naturalWidth, height: box.naturalHeight };\n\n const next = updateAspect(initial, {\n width: e.clientX - bounds.left,\n height: e.clientY - bounds.top,\n });\n\n if (next.width > 50 && next.height > 50 && next.width <= 700 && next.height <= 900) {\n box.style.width = `${next.width}px`;\n box.style.height = `${next.height}px`;\n\n const update = { width: next.width, height: next.height };\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }\n },\n [editor, node.attrs],\n );\n\n // Helper to find this node's current position in the doc.\n // We cannot use object identity (n === node) because ProseMirror replaces\n // node objects after every transaction — match by src instead.\n const findNodePos = useCallback(() => {\n let found = null;\n const src = latestNodeRef.current.attrs.src;\n editor.state.doc.descendants((n, pos) => {\n if (found !== null) return false;\n if (n.type.name === 'imageUploadNode' && n.attrs.src === src) {\n found = pos;\n return false;\n }\n });\n return found;\n }, [editor]);\n\n const onChange = useCallback(\n (newValues) => {\n editor.commands.updateAttributes('imageUploadNode', newValues);\n },\n [editor],\n );\n\n const stopResize = useCallback(() => {\n window.removeEventListener('mousemove', startResize);\n window.removeEventListener('mouseup', stopResize);\n }, [startResize]);\n\n const initResize = useCallback(() => {\n window.addEventListener('mousemove', startResize);\n window.addEventListener('mouseup', stopResize);\n }, [startResize, stopResize]);\n\n const style = {\n width: sizePx(node.attrs.width),\n height: sizePx(node.attrs.height),\n objectFit: 'contain',\n };\n\n const flexAlign = { left: 'flex-start', center: 'center', right: 'flex-end' }[node.attrs.alignment] || 'flex-start';\n\n return (\n <NodeViewWrapper>\n <StyledRoot\n onFocus={onFocus}\n active={selected}\n loading={!node.attrs.loaded}\n pendingDelete={node.attrs.deleteStatus === 'pending'}\n style={{ justifyContent: flexAlign }}\n >\n <StyledProgress mode=\"determinate\" value={node.attrs.percent || 0} hideProgress={node.attrs.loaded} />\n\n <StyledImageContainer>\n <img\n {...attributes}\n ref={imgRef}\n src={node.attrs.src}\n style={style}\n onLoad={loadImage}\n alt={node.attrs.alt}\n />\n <StyledResize ref={resizeRef} className=\"resize\" />\n </StyledImageContainer>\n </StyledRoot>\n\n {showToolbar && editor._tiptapContainerEl && ReactDOM.createPortal(\n <div\n ref={toolbarRef}\n style={{\n zIndex: 20,\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n width: '100%',\n }}\n >\n <CustomToolbarWrapper\n showDone\n deletable\n toolbarOpts={options.toolbarOpts || {}}\n onDelete={() => {\n const nodePos = findNodePos();\n if (nodePos === null) return;\n\n options.imageHandling?.onDelete?.(latestNodeRef.current);\n\n editor.view.dispatch(\n editor.state.tr.delete(nodePos, nodePos + editor.state.doc.nodeAt(nodePos).nodeSize),\n );\n setShowToolbar(false);\n editor.commands.focus();\n }}\n onDone={() => {\n setShowToolbar(false);\n options.imageHandling?.onDone?.();\n editor.commands.focus('end');\n }}\n >\n <ImageToolbar\n disableImageAlignmentButtons={options.disableImageAlignmentButtons}\n alt={node.attrs.alt}\n imageLoaded={node.attrs.loaded}\n alignment={node.attrs.alignment || 'left'}\n onChange={onChange}\n />\n </CustomToolbarWrapper>\n </div>,\n editor._tiptapContainerEl,\n )}\n </NodeViewWrapper>\n );\n}\n\nImageComponent.propTypes = {\n node: PropTypes.object.isRequired,\n editor: PropTypes.object.isRequired,\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n};\n\nexport default ImageComponent;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"image-component.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_isEqual","_debug","_LinearProgress","_styles","_react2","_reactDom","_InsertImageHandler","_ImageToolbar","_customToolbarWrapper","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","log","debug","StyledProgress","styled","LinearProgress","shouldForwardProp","prop","_ref","hideProgress","position","left","width","top","transition","opacity","StyledRoot","includes","_ref2","loading","pendingDelete","display","StyledImageContainer","_ref3","theme","alignItems","StyledImage","_ref4","active","border","concat","palette","primary","main","StyledResize","_ref5","backgroundColor","cursor","height","borderRadius","marginLeft","marginRight","sizePx","s","ImageComponent","props","node","editor","attributes","onFocus","selected","options","_props$maxImageWidth","maxImageWidth","_props$maxImageHeight","maxImageHeight","latex","handleChange","handleDone","alt","attrs","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","latestNodeRef","useRef","imgRef","resizeRef","toolbarRef","getPercentFromWidth","useCallback","floored","current","naturalWidth","parseInt","toFixed","applySizeData","update","resizePercent","isEqual","commands","updateAttributes","useEffect","selection","state","onlyThisNodeSelected","from","nodeSize","to","imageHandling","insertImageRequested","finish","InsertImageHandler","resizeHandle","addEventListener","initResize","removeEventListener","loadImage","box","style","w","Math","min","h","naturalHeight","updateAspect","initial","next","keepAspect","undefined","resizeType","ratio","startResize","bounds","target","getBoundingClientRect","clientX","clientY","findNodePos","found","src","doc","descendants","pos","type","name","onChange","newValues","stopResize","window","objectFit","flexAlign","center","right","alignment","createElement","NodeViewWrapper","loaded","deleteStatus","justifyContent","mode","value","percent","onDragStart","preventDefault","_extends2","draggable","ref","onLoad","className","_tiptapContainerEl","ReactDOM","createPortal","zIndex","background","boxShadow","showDone","deletable","toolbarOpts","onDelete","_options$imageHandlin","_options$imageHandlin2","nodePos","view","dispatch","tr","nodeAt","focus","onDone","_options$imageHandlin3","_options$imageHandlin4","disableImageAlignmentButtons","imageLoaded","propTypes","PropTypes","object","isRequired","func","number","_default","exports"],"sources":["../../src/extensions/image-component.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash-es/isEqual';\nimport debug from 'debug';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport { styled } from '@mui/material/styles';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport ReactDOM from 'react-dom';\nimport InsertImageHandler from '../components/image/InsertImageHandler';\nimport ImageToolbar from '../components/image/ImageToolbar';\nimport CustomToolbarWrapper from './custom-toolbar-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:component');\n\nconst StyledProgress = styled(LinearProgress, {\n shouldForwardProp: (prop) => prop !== 'hideProgress',\n})(({ hideProgress }) => ({\n position: 'absolute',\n left: '0',\n width: 'fit-content',\n top: '0%',\n transition: 'opacity 200ms linear',\n ...(hideProgress && {\n opacity: 0,\n }),\n}));\n\nconst StyledRoot = styled('div', {\n shouldForwardProp: (prop) => !['active', 'loading', 'pendingDelete'].includes(prop),\n})(({ loading, pendingDelete }) => ({\n position: 'relative',\n display: 'flex',\n transition: 'opacity 200ms linear',\n ...(loading && {\n opacity: 0.3,\n }),\n ...(pendingDelete && {\n opacity: 0.3,\n }),\n}));\n\nconst StyledImageContainer = styled('div')(({ theme }) => ({\n position: 'relative',\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n '&&:hover > .resize': {\n display: 'block',\n },\n}));\n\nconst StyledImage = styled('img',{\n shouldForwardProp: (prop) => prop !== 'active',\n})(({ theme, active }) => ({\n border: active ? `solid 1px ${theme.palette.primary.main}` : `solid 1px transparent`,\n}));\n\nconst StyledResize = styled('div')(({ theme }) => ({\n backgroundColor: theme.palette.primary.main,\n cursor: 'col-resize',\n height: '35px',\n width: '5px',\n borderRadius: 8,\n marginLeft: '5px',\n marginRight: '10px',\n display: 'none',\n}));\n\nconst sizePx = (s) => (s ? `${s}px` : 'calc(20px)');\n\nfunction ImageComponent(props) {\n const {\n node,\n editor,\n attributes,\n onFocus,\n selected,\n options,\n maxImageWidth = 700,\n maxImageHeight = 900,\n latex,\n handleChange,\n handleDone,\n } = props;\n const { alt } = node.attrs;\n\n const [showToolbar, setShowToolbar] = useState(false);\n\n const latestNodeRef = useRef(node);\n const imgRef = useRef(null);\n const resizeRef = useRef(null);\n const toolbarRef = useRef(null);\n\n const getPercentFromWidth = useCallback((width) => {\n const floored = (width / imgRef.current.naturalWidth) * 4;\n return parseInt(floored.toFixed(0) * 25, 10);\n }, []);\n\n const applySizeData = useCallback(() => {\n if (!node.attrs.width || !imgRef.current) return;\n\n const update = {\n ...node.attrs,\n resizePercent: getPercentFromWidth(node.attrs.width),\n };\n\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }, [editor, node.attrs, getPercentFromWidth]);\n\n // keep ref in sync with latest node\n useEffect(() => {\n latestNodeRef.current = node;\n }, [node]);\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(selected);\n }\n } else {\n setShowToolbar(selected);\n }\n }, [editor, node, selected]);\n\n useEffect(() => {\n options.imageHandling.insertImageRequested(node, (finish) => new InsertImageHandler(editor, node, finish));\n applySizeData();\n\n const resizeHandle = resizeRef.current;\n if (resizeHandle) {\n resizeHandle.addEventListener('mousedown', initResize, false);\n }\n return () => {\n if (resizeHandle) {\n resizeHandle.removeEventListener('mousedown', initResize, false);\n }\n };\n }, []);\n\n useEffect(() => {\n applySizeData();\n });\n\n const loadImage = useCallback(() => {\n const box = imgRef.current;\n if (!box) return;\n\n if (!box.style.width || box.style.width === 'calc(20px)') {\n const w = Math.min(box.naturalWidth, maxImageWidth);\n const h = Math.min(box.naturalHeight, maxImageHeight);\n\n box.style.width = `${w}px`;\n box.style.height = `${h}px`;\n\n const update = { width: w, height: h };\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }\n }, [editor, node.attrs, maxImageWidth, maxImageHeight]);\n\n const updateAspect = (initial, next, keepAspect = true, resizeType) => {\n if (keepAspect) {\n const ratio = initial.width / initial.height;\n if (resizeType === 'height') return { width: next.height * ratio, height: next.height };\n return { width: next.width, height: next.width / ratio };\n }\n return next;\n };\n\n const startResize = useCallback(\n (e) => {\n const box = imgRef.current;\n if (!box) return;\n\n const bounds = e.target.getBoundingClientRect();\n const initial = { width: box.naturalWidth, height: box.naturalHeight };\n\n const next = updateAspect(initial, {\n width: e.clientX - bounds.left,\n height: e.clientY - bounds.top,\n });\n\n if (next.width > 50 && next.height > 50 && next.width <= 700 && next.height <= 900) {\n box.style.width = `${next.width}px`;\n box.style.height = `${next.height}px`;\n\n const update = { width: next.width, height: next.height };\n if (!isEqual(update, node.attrs)) {\n editor.commands.updateAttributes('imageUploadNode', update);\n }\n }\n },\n [editor, node.attrs],\n );\n\n // Helper to find this node's current position in the doc.\n // We cannot use object identity (n === node) because ProseMirror replaces\n // node objects after every transaction — match by src instead.\n const findNodePos = useCallback(() => {\n let found = null;\n const src = latestNodeRef.current.attrs.src;\n editor.state.doc.descendants((n, pos) => {\n if (found !== null) return false;\n if (n.type.name === 'imageUploadNode' && n.attrs.src === src) {\n found = pos;\n return false;\n }\n });\n return found;\n }, [editor]);\n\n const onChange = useCallback(\n (newValues) => {\n editor.commands.updateAttributes('imageUploadNode', newValues);\n },\n [editor],\n );\n\n const stopResize = useCallback(() => {\n window.removeEventListener('mousemove', startResize);\n window.removeEventListener('mouseup', stopResize);\n }, [startResize]);\n\n const initResize = useCallback(() => {\n window.addEventListener('mousemove', startResize);\n window.addEventListener('mouseup', stopResize);\n }, [startResize, stopResize]);\n\n const style = {\n width: sizePx(node.attrs.width),\n height: sizePx(node.attrs.height),\n objectFit: 'contain',\n };\n\n const flexAlign = { left: 'flex-start', center: 'center', right: 'flex-end' }[node.attrs.alignment] || 'flex-start';\n\n return (\n <NodeViewWrapper>\n <StyledRoot\n onFocus={onFocus}\n loading={!node.attrs.loaded}\n pendingDelete={node.attrs.deleteStatus === 'pending'}\n style={{ justifyContent: flexAlign }}\n >\n <StyledProgress mode=\"determinate\" value={node.attrs.percent || 0} hideProgress={node.attrs.loaded} />\n\n <StyledImageContainer onDragStart={(e) => e.preventDefault()}>\n <StyledImage\n {...attributes}\n active={selected && node.attrs.loaded}\n draggable={false}\n ref={imgRef}\n src={node.attrs.src}\n style={style}\n onLoad={loadImage}\n alt={node.attrs.alt}\n />\n <StyledResize ref={resizeRef} className=\"resize\" />\n </StyledImageContainer>\n </StyledRoot>\n\n {showToolbar && editor._tiptapContainerEl && ReactDOM.createPortal(\n <div\n ref={toolbarRef}\n style={{\n zIndex: 20,\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n width: '100%',\n }}\n >\n <CustomToolbarWrapper\n showDone\n deletable\n toolbarOpts={options.toolbarOpts || {}}\n onDelete={() => {\n const nodePos = findNodePos();\n if (nodePos === null) return;\n\n options.imageHandling?.onDelete?.(latestNodeRef.current);\n\n editor.view.dispatch(\n editor.state.tr.delete(nodePos, nodePos + editor.state.doc.nodeAt(nodePos).nodeSize),\n );\n setShowToolbar(false);\n editor.commands.focus();\n }}\n onDone={() => {\n setShowToolbar(false);\n options.imageHandling?.onDone?.();\n editor.commands.focus('end');\n }}\n >\n <ImageToolbar\n disableImageAlignmentButtons={options.disableImageAlignmentButtons}\n alt={node.attrs.alt}\n imageLoaded={node.attrs.loaded}\n alignment={node.attrs.alignment || 'left'}\n onChange={onChange}\n />\n </CustomToolbarWrapper>\n </div>,\n editor._tiptapContainerEl,\n )}\n </NodeViewWrapper>\n );\n}\n\nImageComponent.propTypes = {\n node: PropTypes.object.isRequired,\n editor: PropTypes.object.isRequired,\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n};\n\nexport default ImageComponent;\n"],"mappings":"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","ignoreList":[]}
@@ -73,10 +73,34 @@ var ImageUploadNode = exports.ImageUploadNode = _core.Node.create({
73
73
  return {
74
74
  setImageUploadNode: function setImageUploadNode() {
75
75
  return function (_ref2) {
76
- var commands = _ref2.commands;
77
- return commands.insertContent({
78
- type: _this2.name
76
+ var _this2$options;
77
+ var editor = _ref2.editor;
78
+ var _ref3 = ((_this2$options = _this2.options) === null || _this2$options === void 0 ? void 0 : _this2$options.imageHandling) || {},
79
+ insertImageRequested = _ref3.insertImageRequested;
80
+ if (!insertImageRequested) return false;
81
+ insertImageRequested(null, function (onFinish) {
82
+ return {
83
+ fileChosen: function fileChosen(file) {
84
+ if (!file) {
85
+ onFinish(false);
86
+ return;
87
+ }
88
+
89
+ // only insert after file is chosen
90
+ editor.chain().focus().insertContent({
91
+ type: _this2.name,
92
+ attrs: {
93
+ src: URL.createObjectURL(file) // or leave null if upload handles it
94
+ }
95
+ }).run();
96
+ onFinish(true);
97
+ },
98
+ cancel: function cancel() {
99
+ onFinish(false);
100
+ }
101
+ };
79
102
  });
103
+ return true;
80
104
  };
81
105
  }
82
106
  };
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","names":["_core","require","_react","_react2","_interopRequireDefault","_imageComponent","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","ImageUploadNode","exports","Node","create","name","group","atom","selectable","draggable","addAttributes","loaded","deleteStatus","alignment","percent","width","height","src","alt","parseHTML","tag","renderHTML","_ref","HTMLAttributes","mergeAttributes","addNodeView","_this","ReactNodeViewRenderer","props","createElement","options","addCommands","_this2","setImageUploadNode","_ref2","commands","insertContent","type"],"sources":["../../src/extensions/image.js"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport React from 'react';\nimport ImageComponent from './image-component';\n\nexport const ImageUploadNode = Node.create({\n name: 'imageUploadNode',\n\n group: 'block',\n atom: true, // ✅ prevents content holes\n selectable: true, // optional\n draggable: true, // optional\n\n addAttributes() {\n return {\n loaded: { default: false },\n deleteStatus: { default: null },\n alignment: { default: null },\n percent: { default: null },\n width: { default: null },\n height: { default: null },\n src: { default: null },\n alt: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"image-upload-node\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['img', mergeAttributes(HTMLAttributes, { 'data-type': 'image-upload-node' })];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <ImageComponent {...{ ...props, options: this.options }} />);\n },\n\n addCommands() {\n return {\n setImageUploadNode:\n () =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n });\n },\n };\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"image.js","names":["_core","require","_react","_react2","_interopRequireDefault","_imageComponent","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","ImageUploadNode","exports","Node","create","name","group","atom","selectable","draggable","addAttributes","loaded","deleteStatus","alignment","percent","width","height","src","alt","parseHTML","tag","renderHTML","_ref","HTMLAttributes","mergeAttributes","addNodeView","_this","ReactNodeViewRenderer","props","createElement","options","addCommands","_this2","setImageUploadNode","_ref2","_this2$options","editor","_ref3","imageHandling","insertImageRequested","onFinish","fileChosen","file","chain","focus","insertContent","type","attrs","URL","createObjectURL","run","cancel"],"sources":["../../src/extensions/image.js"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport React from 'react';\nimport ImageComponent from './image-component';\n\nexport const ImageUploadNode = Node.create({\n name: 'imageUploadNode',\n\n group: 'block',\n atom: true, // ✅ prevents content holes\n selectable: true, // optional\n draggable: true, // optional\n\n addAttributes() {\n return {\n loaded: { default: false },\n deleteStatus: { default: null },\n alignment: { default: null },\n percent: { default: null },\n width: { default: null },\n height: { default: null },\n src: { default: null },\n alt: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"image-upload-node\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['img', mergeAttributes(HTMLAttributes, { 'data-type': 'image-upload-node' })];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <ImageComponent {...{ ...props, options: this.options }} />);\n },\n\n addCommands() {\n return {\n setImageUploadNode:\n () =>\n ({ editor }) => {\n const { insertImageRequested } = this.options?.imageHandling || {};\n if (!insertImageRequested) return false;\n\n insertImageRequested(null, (onFinish) => {\n return {\n fileChosen: (file) => {\n if (!file) {\n onFinish(false);\n return;\n }\n\n // only insert after file is chosen\n editor\n .chain()\n .focus()\n .insertContent({\n type: this.name,\n attrs: {\n src: URL.createObjectURL(file), // or leave null if upload handles it\n },\n })\n .run();\n\n onFinish(true);\n },\n\n cancel: () => {\n onFinish(false);\n },\n };\n });\n\n return true;\n },\n };\n },\n});\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,eAAA,GAAAD,sBAAA,CAAAH,OAAA;AAA+C,SAAAK,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAExC,IAAMoB,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAGE,UAAI,CAACC,MAAM,CAAC;EACzCC,IAAI,EAAE,iBAAiB;EAEvBC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE,IAAI;EAAE;EACZC,UAAU,EAAE,IAAI;EAAE;EAClBC,SAAS,EAAE,IAAI;EAAE;EAEjBC,aAAa,WAAbA,aAAaA,CAAA,EAAG;IACd,OAAO;MACLC,MAAM,EAAE;QAAE,WAAS;MAAM,CAAC;MAC1BC,YAAY,EAAE;QAAE,WAAS;MAAK,CAAC;MAC/BC,SAAS,EAAE;QAAE,WAAS;MAAK,CAAC;MAC5BC,OAAO,EAAE;QAAE,WAAS;MAAK,CAAC;MAC1BC,KAAK,EAAE;QAAE,WAAS;MAAK,CAAC;MACxBC,MAAM,EAAE;QAAE,WAAS;MAAK,CAAC;MACzBC,GAAG,EAAE;QAAE,WAAS;MAAK,CAAC;MACtBC,GAAG,EAAE;QAAE,WAAS;MAAK;IACvB,CAAC;EACH,CAAC;EAEDC,SAAS,WAATA,SAASA,CAAA,EAAG;IACV,OAAO,CACL;MACEC,GAAG,EAAE;IACP,CAAC,CACF;EACH,CAAC;EAEDC,UAAU,WAAVA,UAAUA,CAAAC,IAAA,EAAqB;IAAA,IAAlBC,cAAc,GAAAD,IAAA,CAAdC,cAAc;IACzB,OAAO,CAAC,KAAK,EAAE,IAAAC,qBAAe,EAACD,cAAc,EAAE;MAAE,WAAW,EAAE;IAAoB,CAAC,CAAC,CAAC;EACvF,CAAC;EAEDE,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,KAAA;IACZ,OAAO,IAAAC,4BAAqB,EAAC,UAACC,KAAK;MAAA,oBAAKnD,OAAA,YAAAoD,aAAA,CAAClD,eAAA,WAAc,EAAAc,aAAA,CAAAA,aAAA,KAAUmC,KAAK;QAAEE,OAAO,EAAEJ,KAAI,CAACI;MAAO,EAAK,CAAC;IAAA,EAAC;EACtG,CAAC;EAEDC,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,MAAA;IACZ,OAAO;MACLC,kBAAkB,EAChB,SADFA,kBAAkBA,CAAA;QAAA,OAEd,UAAAC,KAAA,EAAgB;UAAA,IAAAC,cAAA;UAAA,IAAbC,MAAM,GAAAF,KAAA,CAANE,MAAM;UACP,IAAAC,KAAA,GAAiC,EAAAF,cAAA,GAAAH,MAAI,CAACF,OAAO,cAAAK,cAAA,uBAAZA,cAAA,CAAcG,aAAa,KAAI,CAAC,CAAC;YAA1DC,oBAAoB,GAAAF,KAAA,CAApBE,oBAAoB;UAC5B,IAAI,CAACA,oBAAoB,EAAE,OAAO,KAAK;UAEvCA,oBAAoB,CAAC,IAAI,EAAE,UAACC,QAAQ,EAAK;YACvC,OAAO;cACLC,UAAU,EAAE,SAAZA,UAAUA,CAAGC,IAAI,EAAK;gBACpB,IAAI,CAACA,IAAI,EAAE;kBACTF,QAAQ,CAAC,KAAK,CAAC;kBACf;gBACF;;gBAEA;gBACAJ,MAAM,CACHO,KAAK,CAAC,CAAC,CACPC,KAAK,CAAC,CAAC,CACPC,aAAa,CAAC;kBACbC,IAAI,EAAEd,MAAI,CAAC3B,IAAI;kBACf0C,KAAK,EAAE;oBACL9B,GAAG,EAAE+B,GAAG,CAACC,eAAe,CAACP,IAAI,CAAC,CAAE;kBAClC;gBACF,CAAC,CAAC,CACDQ,GAAG,CAAC,CAAC;gBAERV,QAAQ,CAAC,IAAI,CAAC;cAChB,CAAC;cAEDW,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAQ;gBACZX,QAAQ,CAAC,KAAK,CAAC;cACjB;YACF,CAAC;UACH,CAAC,CAAC;UAEF,OAAO,IAAI;QACb,CAAC;MAAA;IACP,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.2.0-next.26",
6
+ "version": "1.2.0-next.27",
7
7
  "description": "",
8
8
  "license": "ISC",
9
9
  "main": "lib/index.js",
@@ -59,6 +59,6 @@
59
59
  "peerDependencies": {
60
60
  "react": "^18.2.0"
61
61
  },
62
- "gitHead": "109bafa6cffd57dac6c0a30ddc36dfc0c82ba541",
62
+ "gitHead": "df6d3c3a06a0b94db8a51ea0e8237577c58b9f46",
63
63
  "scripts": {}
64
64
  }
@@ -112,24 +112,35 @@ describe('ImageUploadNode', () => {
112
112
 
113
113
  describe('addCommands', () => {
114
114
  it('returns setImageUploadNode command', () => {
115
- const commands = ImageUploadNode.addCommands();
115
+ const context = { name: 'imageUploadNode' };
116
+ const commands = ImageUploadNode.addCommands.call(context);
116
117
 
117
118
  expect(commands).toHaveProperty('setImageUploadNode');
118
119
  expect(typeof commands.setImageUploadNode).toBe('function');
119
120
  });
120
121
 
121
- it('setImageUploadNode inserts content', () => {
122
+ it('setImageUploadNode returns false when insertImageRequested is not configured', () => {
122
123
  const context = { name: 'imageUploadNode' };
123
124
  const commands = ImageUploadNode.addCommands.call(context);
124
- const mockCommands = {
125
- insertContent: jest.fn(() => true),
125
+
126
+ const result = commands.setImageUploadNode()({ editor: {} });
127
+
128
+ expect(result).toBe(false);
129
+ });
130
+
131
+ it('setImageUploadNode calls insertImageRequested and returns true', () => {
132
+ const mockInsertImageRequested = jest.fn();
133
+ const context = { name: 'imageUploadNode', options: { imageHandling: { insertImageRequested: mockInsertImageRequested } } };
134
+ const commands = ImageUploadNode.addCommands.call(context);
135
+
136
+ const mockRun = jest.fn();
137
+ const mockEditor = {
138
+ chain: () => ({ focus: () => ({ insertContent: () => ({ run: mockRun }) }) }),
126
139
  };
127
140
 
128
- const result = commands.setImageUploadNode()({ commands: mockCommands });
141
+ const result = commands.setImageUploadNode()({ editor: mockEditor });
129
142
 
130
- expect(mockCommands.insertContent).toHaveBeenCalledWith({
131
- type: 'imageUploadNode',
132
- });
143
+ expect(mockInsertImageRequested).toHaveBeenCalledWith(null, expect.any(Function));
133
144
  expect(result).toBe(true);
134
145
  });
135
146
  });
@@ -27,9 +27,8 @@ const StyledProgress = styled(LinearProgress, {
27
27
 
28
28
  const StyledRoot = styled('div', {
29
29
  shouldForwardProp: (prop) => !['active', 'loading', 'pendingDelete'].includes(prop),
30
- })(({ theme, active, loading, pendingDelete }) => ({
30
+ })(({ loading, pendingDelete }) => ({
31
31
  position: 'relative',
32
- border: active ? `solid 1px ${theme.palette.primary.main}` : `solid 1px ${theme.palette.common.white}`,
33
32
  display: 'flex',
34
33
  transition: 'opacity 200ms linear',
35
34
  ...(loading && {
@@ -50,6 +49,12 @@ const StyledImageContainer = styled('div')(({ theme }) => ({
50
49
  },
51
50
  }));
52
51
 
52
+ const StyledImage = styled('img',{
53
+ shouldForwardProp: (prop) => prop !== 'active',
54
+ })(({ theme, active }) => ({
55
+ border: active ? `solid 1px ${theme.palette.primary.main}` : `solid 1px transparent`,
56
+ }));
57
+
53
58
  const StyledResize = styled('div')(({ theme }) => ({
54
59
  backgroundColor: theme.palette.primary.main,
55
60
  cursor: 'col-resize',
@@ -239,16 +244,17 @@ function ImageComponent(props) {
239
244
  <NodeViewWrapper>
240
245
  <StyledRoot
241
246
  onFocus={onFocus}
242
- active={selected}
243
247
  loading={!node.attrs.loaded}
244
248
  pendingDelete={node.attrs.deleteStatus === 'pending'}
245
249
  style={{ justifyContent: flexAlign }}
246
250
  >
247
251
  <StyledProgress mode="determinate" value={node.attrs.percent || 0} hideProgress={node.attrs.loaded} />
248
252
 
249
- <StyledImageContainer>
250
- <img
253
+ <StyledImageContainer onDragStart={(e) => e.preventDefault()}>
254
+ <StyledImage
251
255
  {...attributes}
256
+ active={selected && node.attrs.loaded}
257
+ draggable={false}
252
258
  ref={imgRef}
253
259
  src={node.attrs.src}
254
260
  style={style}
@@ -44,11 +44,41 @@ export const ImageUploadNode = Node.create({
44
44
  return {
45
45
  setImageUploadNode:
46
46
  () =>
47
- ({ commands }) => {
48
- return commands.insertContent({
49
- type: this.name,
50
- });
51
- },
47
+ ({ editor }) => {
48
+ const { insertImageRequested } = this.options?.imageHandling || {};
49
+ if (!insertImageRequested) return false;
50
+
51
+ insertImageRequested(null, (onFinish) => {
52
+ return {
53
+ fileChosen: (file) => {
54
+ if (!file) {
55
+ onFinish(false);
56
+ return;
57
+ }
58
+
59
+ // only insert after file is chosen
60
+ editor
61
+ .chain()
62
+ .focus()
63
+ .insertContent({
64
+ type: this.name,
65
+ attrs: {
66
+ src: URL.createObjectURL(file), // or leave null if upload handles it
67
+ },
68
+ })
69
+ .run();
70
+
71
+ onFinish(true);
72
+ },
73
+
74
+ cancel: () => {
75
+ onFinish(false);
76
+ },
77
+ };
78
+ });
79
+
80
+ return true;
81
+ },
52
82
  };
53
83
  },
54
84
  });