@pie-lib/editable-html-tip-tap 1.2.0-next.28 → 1.2.0-next.30

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,18 @@
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.30](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.29...@pie-lib/editable-html-tip-tap@1.2.0-next.30) (2026-04-15)
7
+
8
+ ### Features
9
+
10
+ - made sure pasting image works in the editor [PIE-173] ([28c46e5](https://github.com/pie-framework/pie-lib/commit/28c46e5d1ec97fdc2d1b4dd454fe19882dea5125))
11
+
12
+ # [1.2.0-next.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.28...@pie-lib/editable-html-tip-tap@1.2.0-next.29) (2026-04-14)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **editable-html-tip-tap:** parseHTML as img tag image extension, avoid open upload automatically at mounted PIE-37 ([30bad4e](https://github.com/pie-framework/pie-lib/commit/30bad4ea07c1e4c738534aab115cc16d64195b60))
17
+
6
18
  # [1.2.0-next.28](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@1.2.0-next.27...@pie-lib/editable-html-tip-tap@1.2.0-next.28) (2026-04-13)
7
19
 
8
20
  ### Bug Fixes
@@ -1 +1 @@
1
- {"version":3,"file":"MediaDialog.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_styles","_Button","_Dialog","_Tabs","_Tab","_DialogTitle","_DialogContent","_DialogContentText","_DialogActions","_TextField","_Typography","_IconButton","_Delete","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchDriveUrl","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","concat","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","tabsTypeMap","uploadFile","insertUrl","StyledDialog","styled","Dialog","_ref","theme","minWidth","StyledDialogContent","DialogContent","_ref2","padding","StyledRow","_ref3","display","flexDirection","StyledUploadInput","_ref4","marginTop","spacing","StyledInput","_ref5","StyledError","Typography","_ref6","color","palette","error","main","StyledIconButton","IconButton","_ref7","marginLeft","MediaDialog","exports","_React$Component","props","_this","_classCallCheck2","_this$state","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","join","callback","setState","updating","newState","formatUrl","value","handleStateChange","invalid","regExp","id","replace","_ref8","target","type","checkAudio","checkVideo","val","handleClose","_this$state2","tabValue","fileUpload","isInsertURL","handleRemoveFile","_this$state3","height","width","tag","loading","scheduled","_ref9","_asyncToGenerator2","_regenerator","mark","_callee","fileChosen","reader","wrap","_context","prev","next","preventDefault","files","FileReader","onload","dataURL","result","mimeType","readAsDataURL","uploadSoundSupport","add","done","console","handleDone","bind","undefined","stop","_x","_callee2","_context2","showUploadFile","_inherits2","_createClass2","key","componentDidMount","urlChange","render","_this2","_this$props","open","disablePortal","edit","_this$state4","isUploadMedia","submitIsDisabled","onClose","indicatorColor","onChange","event","label","autoFocus","helperText","margin","placeholder","fullWidth","changeHandler","frameBorder","allow","allowFullScreen","Fragment","controls","controlsList","onClick","variant","accept","handleUploadFile","disabled","React","Component","PropTypes","bool","func","shape","string","number","_default"],"sources":["../../../src/components/media/MediaDialog.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { styled } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport MuiTabs from '@mui/material/Tabs';\nimport MuiTab from '@mui/material/Tab';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport ActionDelete from '@mui/icons-material/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const p =\n /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = (url) =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url,\n );\n\nconst matchDriveUrl = (url) =>\n url && /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)/.test(url);\n\nconst matchSoundCloudUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = (url) => {\n return new Promise((resolve) => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then((response) => response.json())\n .then((json) => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch((err) => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio',\n};\n\nconst tabsTypeMap = {\n uploadFile: 'upload-file',\n insertUrl: 'insert-url',\n};\n\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialog-paper': {\n minWidth: '500px',\n },\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: 0,\n}));\n\nconst StyledRow = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'space-between',\n}));\n\nconst StyledUploadInput = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n}));\n\nconst StyledInput = styled('input')(({ theme }) => ({}));\n\nconst StyledError = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n color: theme.palette.error.main,\n}));\n\nconst StyledIconButton = styled(IconButton)(({ theme }) => ({\n marginLeft: theme.spacing(1.5),\n}));\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n const { ends, height, src, starts, type, uploadSoundSupport, url, urlToUse, width } = props;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video' && !src;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n // default selected tab should be upload file if available\n tabValue: showUploadFile ? tabsTypeMap.uploadFile : tabsTypeMap.insertUrl,\n fileUpload: {\n error: null,\n loading: false,\n scheduled: false,\n url: '',\n mimeType: '',\n },\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url,\n },\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = (newState) => this.setState(newState, this.formatUrl);\n\n checkAudio = (value) => {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then((urlToUse) => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value,\n });\n })\n .catch(log);\n }\n };\n\n checkVideo = (value) => {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false,\n });\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n\n if (matchDriveUrl(value)) {\n // https://drive.google.com/file/d/11QkK_gUO068amNvZBm9cxZpKX74WYb8q/view\n const id = value.replace(\n /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)\\/.*/,\n '$1',\n );\n const urlToUse = `https://drive.google.com/file/d/${id}/preview`;\n\n log('is google drive');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n };\n\n urlChange = (e) => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n this.checkAudio(value);\n return;\n } else if (type && type === 'video') {\n this.checkVideo(value);\n return;\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true,\n });\n };\n\n changeHandler = (type) => (e) => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = (val) => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n\n if (!val) {\n if (fileUpload.url) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n return;\n }\n\n if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl,\n });\n return;\n }\n\n if (!fileUpload.loading) {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.url,\n });\n return;\n }\n\n this.setState({\n fileUpload: {\n ...fileUpload,\n scheduled: true,\n },\n });\n };\n\n handleUploadFile = async (e) => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: null,\n loading: true,\n },\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n url: dataURL,\n mimeType: fileChosen.type,\n },\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: (err, src) => {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n scheduled: false,\n loading: false,\n error: err,\n },\n });\n return;\n }\n\n const { fileUpload } = this.state;\n const callback = fileUpload && fileUpload.scheduled ? this.handleDone.bind(this, true) : undefined;\n\n this.setState(\n {\n fileUpload: {\n ...fileUpload,\n scheduled: false,\n loading: false,\n url: src,\n },\n },\n callback,\n );\n },\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.url, (err) => {\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: err,\n },\n });\n }\n });\n\n // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: '',\n mimeType: '',\n },\n });\n };\n\n render() {\n const { open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const { ends, height, invalid, starts, width, url, mimeType, formattedUrl, updating, tabValue, fileUpload } =\n this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n const isUploadMedia = tabValue === tabsTypeMap.uploadFile;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.url || fileUpload.scheduled;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video';\n\n return (\n <StyledDialog\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <StyledRow>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n {showUploadFile ? <MuiTab value={tabsTypeMap.uploadFile} label=\"Upload file\" /> : null}\n <MuiTab\n value={tabsTypeMap.insertUrl}\n label={type === 'video' ? 'Insert YouTube, Vimeo, or Google Drive URL' : 'Insert SoundCloud URL'}\n />\n </MuiTabs>\n </StyledRow>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <StyledDialogContent>\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </StyledDialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <StyledDialogContent>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </StyledDialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <StyledUploadInput>\n <div>\n {fileUpload.url ? (\n <>\n <StyledRow>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type={mimeType} src={fileUpload.url} />\n </audio>\n <StyledIconButton aria-label=\"delete\" onClick={this.handleRemoveFile}>\n <ActionDelete />\n </StyledIconButton>\n </StyledRow>\n {!fileUpload.scheduled && fileUpload.loading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : null}\n {fileUpload.scheduled ? (\n <Typography variant=\"subheading\">\n Waiting for Upload to finish, then inserting item...\n </Typography>\n ) : null}\n </>\n ) : !fileUpload.loading ? (\n <StyledInput accept=\"audio/*\" onChange={this.handleUploadFile} type=\"file\" />\n ) : null}\n {!!fileUpload.error && <StyledError variant=\"caption\">{fileUpload.error}</StyledError>}\n </div>\n </StyledUploadInput>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n }\n}\n\nexport default MediaDialog;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MediaDialog.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_styles","_Button","_Dialog","_Tabs","_Tab","_DialogTitle","_DialogContent","_DialogContentText","_DialogActions","_TextField","_Typography","_IconButton","_Delete","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","log","debug","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchDriveUrl","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","concat","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","tabsTypeMap","uploadFile","insertUrl","StyledDialog","styled","Dialog","_ref","theme","minWidth","StyledDialogContent","DialogContent","_ref2","padding","StyledRow","_ref3","display","flexDirection","StyledUploadInput","_ref4","marginTop","spacing","StyledInput","_ref5","StyledError","Typography","_ref6","color","palette","error","main","StyledIconButton","IconButton","_ref7","marginLeft","MediaDialog","exports","_React$Component","props","_this","_classCallCheck2","_this$state","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","join","callback","setState","updating","newState","formatUrl","value","handleStateChange","invalid","regExp","id","replace","_ref8","target","type","checkAudio","checkVideo","val","handleClose","_this$state2","tabValue","fileUpload","isInsertURL","handleRemoveFile","_this$state3","height","width","tag","loading","scheduled","_ref9","_asyncToGenerator2","_regenerator","mark","_callee","fileChosen","reader","wrap","_context","prev","next","preventDefault","files","FileReader","onload","dataURL","result","mimeType","readAsDataURL","uploadSoundSupport","add","done","console","handleDone","bind","undefined","stop","_x","_callee2","_context2","showUploadFile","_inherits2","_createClass2","key","componentDidMount","urlChange","render","_this2","_this$props","open","disablePortal","edit","_this$state4","isUploadMedia","submitIsDisabled","onClose","indicatorColor","onChange","event","label","autoFocus","helperText","margin","placeholder","fullWidth","changeHandler","frameBorder","allow","allowFullScreen","Fragment","controls","controlsList","onClick","variant","accept","handleUploadFile","disabled","React","Component","PropTypes","bool","func","shape","string","number","_default"],"sources":["../../../src/components/media/MediaDialog.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { styled } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport MuiTabs from '@mui/material/Tabs';\nimport MuiTab from '@mui/material/Tab';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport ActionDelete from '@mui/icons-material/Delete';\n\nconst log = debug('@pie-lib:editable-html:plugins:media:dialog');\n\nconst matchYoutubeUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const p =\n /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n if (url.match(p)) {\n return url.match(p)[1];\n }\n return false;\n};\n\nconst matchVimeoUrl = (url) =>\n url &&\n /(http|https)?:\\/\\/(www\\.)?(player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^/]*)\\/videos\\/|)(video\\/)?(\\d+)(?:|\\/\\?)/.test(\n url,\n );\n\nconst matchDriveUrl = (url) =>\n url && /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)/.test(url);\n\nconst matchSoundCloudUrl = (url) => {\n if (!url) {\n return false;\n }\n\n const regexp = /^https?:\\/\\/(soundcloud\\.com|snd\\.sc)\\/(.*)$/;\n return url.match(regexp) && url.match(regexp)[2];\n};\n\nconst makeApiRequest = (url) => {\n return new Promise((resolve) => {\n try {\n fetch(`https://soundcloud.com/oembed?format=json&url=${url}`)\n .then((response) => response.json())\n .then((json) => {\n const d = document.createElement('div');\n\n d.innerHTML = json.html;\n\n const iframe = d.querySelector('iframe');\n\n resolve(iframe.src);\n })\n .catch((err) => {\n resolve('');\n log(err);\n });\n } catch (err) {\n resolve('');\n }\n });\n};\n\nconst typeMap = {\n video: 'Video',\n audio: 'Audio',\n};\n\nconst tabsTypeMap = {\n uploadFile: 'upload-file',\n insertUrl: 'insert-url',\n};\n\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiDialog-paper': {\n minWidth: '500px',\n },\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: 0,\n}));\n\nconst StyledRow = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'space-between',\n}));\n\nconst StyledUploadInput = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n}));\n\nconst StyledInput = styled('input')(({ theme }) => ({}));\n\nconst StyledError = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n color: theme.palette.error.main,\n}));\n\nconst StyledIconButton = styled(IconButton)(({ theme }) => ({\n marginLeft: theme.spacing(1.5),\n}));\n\nexport class MediaDialog extends React.Component {\n static propTypes = {\n open: PropTypes.bool,\n edit: PropTypes.bool,\n disablePortal: PropTypes.bool,\n handleClose: PropTypes.func,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n type: PropTypes.string,\n src: PropTypes.string,\n url: PropTypes.string,\n urlToUse: PropTypes.string,\n starts: PropTypes.number,\n ends: PropTypes.number,\n height: PropTypes.number,\n width: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n const { ends, height, src, starts, type, uploadSoundSupport, url, urlToUse, width } = props;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video' && !src;\n\n this.state = {\n ends: ends || 0,\n url: url,\n urlToUse: urlToUse,\n formattedUrl: src,\n height: height || 315,\n invalid: false,\n starts: starts || 0,\n width: width || 560,\n // default selected tab should be upload file if available\n tabValue: showUploadFile ? tabsTypeMap.uploadFile : tabsTypeMap.insertUrl,\n fileUpload: {\n error: null,\n loading: false,\n scheduled: false,\n url: '',\n mimeType: '',\n },\n };\n }\n\n componentDidMount() {\n if (this.props.url) {\n this.urlChange({\n target: {\n value: this.props.url,\n },\n });\n }\n }\n\n formatUrl = () => {\n const { url, urlToUse, starts, ends } = this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isVimeo = matchVimeoUrl(url);\n let formattedUrl = urlToUse;\n\n if ((isYoutube || isVimeo) && urlToUse) {\n const params = [];\n\n let paramName;\n let paramStart;\n\n switch (true) {\n case isVimeo:\n paramName = 't';\n paramStart = '#';\n break;\n case isYoutube:\n paramName = 'start';\n paramStart = '?';\n break;\n default:\n paramName = 'start';\n paramStart = '?';\n }\n\n if (starts) {\n params.push(`${paramName}=${starts}`);\n }\n\n if (ends) {\n params.push(`end=${ends}`);\n }\n\n formattedUrl = `${urlToUse}${params.length ? paramStart : ''}${params.join('&')}`;\n }\n\n const callback = () => this.setState({ formattedUrl, updating: false });\n\n this.setState({ formattedUrl: null, updating: true }, callback);\n };\n\n handleStateChange = (newState) => this.setState(newState, this.formatUrl);\n\n checkAudio = (value) => {\n if (matchSoundCloudUrl(value)) {\n makeApiRequest(value)\n .then((urlToUse) => {\n this.handleStateChange({\n urlToUse,\n invalid: !urlToUse,\n url: value,\n });\n })\n .catch(log);\n }\n };\n\n checkVideo = (value) => {\n if (matchYoutubeUrl(value)) {\n const regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n const match = value.match(regExp);\n const id = match[2];\n const urlToUse = `https://youtube.com/embed/${id}`;\n\n log('is youtube');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n invalid: false,\n });\n }\n\n if (matchVimeoUrl(value)) {\n const id = value.replace(/.*vimeo.com\\/(.*)/g, '$1');\n const urlToUse = `https://player.vimeo.com/video/${id}`;\n\n log('is vimeo');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n\n if (matchDriveUrl(value)) {\n // https://drive.google.com/file/d/11QkK_gUO068amNvZBm9cxZpKX74WYb8q/view\n const id = value.replace(\n /^https:\\/\\/drive\\.google\\.com\\/(?:file\\/d\\/|drive\\/(?:u\\/\\d+\\/)?folders\\/|uc\\?id=)([a-zA-Z0-9_-]+)\\/.*/,\n '$1',\n );\n const urlToUse = `https://drive.google.com/file/d/${id}/preview`;\n\n log('is google drive');\n\n this.handleStateChange({\n urlToUse,\n url: value,\n ends: null,\n invalid: false,\n });\n }\n };\n\n urlChange = (e) => {\n const { value } = e.target || {};\n const { type } = this.props;\n\n if (type && type === 'audio') {\n this.checkAudio(value);\n return;\n } else if (type && type === 'video') {\n this.checkVideo(value);\n return;\n }\n\n this.handleStateChange({\n urlToUse: null,\n url: null,\n invalid: true,\n });\n };\n\n changeHandler = (type) => (e) => this.handleStateChange({ [type]: e.target.value });\n\n handleDone = (val) => {\n const { handleClose } = this.props;\n const { tabValue, fileUpload } = this.state;\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n\n if (!val) {\n if (fileUpload.url) {\n this.handleRemoveFile();\n }\n\n handleClose(val);\n return;\n }\n\n if (isInsertURL) {\n const { ends, height, url, urlToUse, formattedUrl, starts, width } = this.state;\n\n handleClose(val, {\n tag: 'iframe',\n ends,\n height,\n starts,\n width,\n url,\n urlToUse,\n src: formattedUrl,\n });\n return;\n }\n\n if (!fileUpload.loading) {\n handleClose(val, {\n tag: 'audio',\n src: fileUpload.url,\n });\n return;\n }\n\n this.setState({\n fileUpload: {\n ...fileUpload,\n scheduled: true,\n },\n });\n };\n\n handleUploadFile = async (e) => {\n e.preventDefault();\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: null,\n loading: true,\n },\n });\n\n const fileChosen = e.target.files[0];\n\n const reader = new FileReader();\n\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n url: dataURL,\n mimeType: fileChosen.type,\n },\n });\n };\n reader.readAsDataURL(fileChosen);\n\n this.props.uploadSoundSupport.add({\n fileChosen,\n done: (err, src) => {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n scheduled: false,\n loading: false,\n error: err,\n },\n });\n return;\n }\n\n const { fileUpload } = this.state;\n const callback = fileUpload && fileUpload.scheduled ? this.handleDone.bind(this, true) : undefined;\n\n this.setState(\n {\n fileUpload: {\n ...fileUpload,\n scheduled: false,\n loading: false,\n url: src,\n },\n },\n callback,\n );\n },\n });\n };\n\n handleRemoveFile = async () => {\n this.props.uploadSoundSupport.delete(this.state.fileUpload.url, (err) => {\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n error: err,\n },\n });\n }\n });\n\n // we should put it inside uploadSoundSupport.delete but we can leave it here for testing purposes\n this.setState({\n fileUpload: {\n ...this.state.fileUpload,\n loading: false,\n url: '',\n mimeType: '',\n },\n });\n };\n\n render() {\n const { open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const { ends, height, invalid, starts, width, url, mimeType, formattedUrl, updating, tabValue, fileUpload } =\n this.state;\n const isYoutube = matchYoutubeUrl(url);\n const isInsertURL = tabValue === tabsTypeMap.insertUrl;\n const isUploadMedia = tabValue === tabsTypeMap.uploadFile;\n const submitIsDisabled = isInsertURL\n ? invalid || url === null || url === undefined\n : !fileUpload.url || fileUpload.scheduled;\n const showUploadFile = uploadSoundSupport?.add && uploadSoundSupport?.delete && type !== 'video';\n\n return (\n <StyledDialog\n disablePortal={disablePortal}\n open={open}\n onClose={() => this.handleDone(false)}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">Insert {typeMap[type]}</DialogTitle>\n <DialogContent>\n <div>\n <StyledRow>\n <MuiTabs\n indicatorColor=\"primary\"\n value={tabValue}\n onChange={(event, value) => {\n this.setState({ tabValue: value });\n }}\n >\n {showUploadFile ? <MuiTab value={tabsTypeMap.uploadFile} label=\"Upload file\" /> : null}\n <MuiTab\n value={tabsTypeMap.insertUrl}\n label={type === 'video' ? 'Insert YouTube, Vimeo, or Google Drive URL' : 'Insert SoundCloud URL'}\n />\n </MuiTabs>\n </StyledRow>\n {isInsertURL && (\n <div>\n <TextField\n autoFocus\n error={invalid}\n helperText={invalid ? 'Invalid URL' : ''}\n margin=\"dense\"\n id=\"name\"\n label=\"URL\"\n placeholder={`Paste URL of ${type}...`}\n type=\"text\"\n onChange={this.urlChange}\n value={url}\n fullWidth\n />\n {type === 'video' && (\n <StyledDialogContent>\n <DialogContentText>Video Properties</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"width\"\n label=\"Width\"\n type=\"number\"\n placeholder=\"Width\"\n value={width}\n onChange={this.changeHandler('width')}\n />\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"height\"\n label=\"Height\"\n type=\"number\"\n placeholder=\"Height\"\n value={height}\n onChange={this.changeHandler('height')}\n />\n </StyledDialogContent>\n )}\n {formattedUrl && (\n <iframe\n width={width}\n height={height}\n src={formattedUrl}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n {type === 'video' && (formattedUrl || updating) && !invalid && (\n <React.Fragment>\n <StyledDialogContent>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"starts\"\n label=\"Starts\"\n type=\"number\"\n placeholder=\"Starts\"\n value={starts}\n onChange={this.changeHandler('starts')}\n />\n {isYoutube && (\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"ends\"\n label=\"Ends\"\n type=\"number\"\n placeholder=\"Ends\"\n value={ends}\n onChange={this.changeHandler('ends')}\n />\n )}\n </StyledDialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <StyledUploadInput>\n <div>\n {fileUpload.url ? (\n <>\n <StyledRow>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type={mimeType} src={fileUpload.url} />\n </audio>\n <StyledIconButton aria-label=\"delete\" onClick={this.handleRemoveFile}>\n <ActionDelete />\n </StyledIconButton>\n </StyledRow>\n {!fileUpload.scheduled && fileUpload.loading ? (\n <Typography variant=\"subheading\">Loading...</Typography>\n ) : null}\n {fileUpload.scheduled ? (\n <Typography variant=\"subheading\">\n Waiting for Upload to finish, then inserting item...\n </Typography>\n ) : null}\n </>\n ) : !fileUpload.loading ? (\n <StyledInput accept=\"audio/*\" onChange={this.handleUploadFile} type=\"file\" />\n ) : null}\n {!!fileUpload.error && <StyledError variant=\"caption\">{fileUpload.error}</StyledError>}\n </div>\n </StyledUploadInput>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.handleDone(false)} color=\"primary\">\n Cancel\n </Button>\n <Button disabled={submitIsDisabled} onClick={() => this.handleDone(true)} color=\"primary\">\n {edit ? 'Update' : 'Insert'}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n }\n}\n\nexport default MediaDialog;\n"],"mappings":"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","ignoreList":[]}
@@ -77,7 +77,7 @@ var StyledImage = (0, _styles.styled)('img', {
77
77
  var theme = _ref4.theme,
78
78
  active = _ref4.active;
79
79
  return {
80
- border: active ? "solid 1px ".concat(theme.palette.primary.main) : "solid 1px transparent"
80
+ border: active ? "solid 1px ".concat(theme.palette.primary.main) : 'solid 1px transparent'
81
81
  };
82
82
  });
83
83
  var StyledResize = (0, _styles.styled)('div')(function (_ref5) {
@@ -149,9 +149,15 @@ function ImageComponent(props) {
149
149
  }
150
150
  }, [editor, node, selected]);
151
151
  (0, _react.useEffect)(function () {
152
- options.imageHandling.insertImageRequested(node, function (finish) {
153
- return new _InsertImageHandler["default"](editor, node, finish);
154
- });
152
+ var _node$attrs$src, _node$attrs, _options$imageHandlin;
153
+ // Only open the upload UI for a fresh placeholder. Remounting after tab switch
154
+ // would otherwise call insertImageRequested again and reopen the file modal.
155
+ var hasImageSrc = String((_node$attrs$src = (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.src) !== null && _node$attrs$src !== void 0 ? _node$attrs$src : '').trim();
156
+ if (!hasImageSrc && (_options$imageHandlin = options.imageHandling) !== null && _options$imageHandlin !== void 0 && _options$imageHandlin.insertImageRequested) {
157
+ options.imageHandling.insertImageRequested(node, function (finish) {
158
+ return new _InsertImageHandler["default"](editor, node, finish);
159
+ });
160
+ }
155
161
  applySizeData();
156
162
  var resizeHandle = resizeRef.current;
157
163
  if (resizeHandle) {
@@ -299,18 +305,18 @@ function ImageComponent(props) {
299
305
  deletable: true,
300
306
  toolbarOpts: options.toolbarOpts || {},
301
307
  onDelete: function onDelete() {
302
- var _options$imageHandlin, _options$imageHandlin2;
308
+ var _options$imageHandlin2, _options$imageHandlin3;
303
309
  var nodePos = findNodePos();
304
310
  if (nodePos === null) return;
305
- (_options$imageHandlin = options.imageHandling) === null || _options$imageHandlin === void 0 || (_options$imageHandlin2 = _options$imageHandlin.onDelete) === null || _options$imageHandlin2 === void 0 || _options$imageHandlin2.call(_options$imageHandlin, latestNodeRef.current);
311
+ (_options$imageHandlin2 = options.imageHandling) === null || _options$imageHandlin2 === void 0 || (_options$imageHandlin3 = _options$imageHandlin2.onDelete) === null || _options$imageHandlin3 === void 0 || _options$imageHandlin3.call(_options$imageHandlin2, latestNodeRef.current);
306
312
  editor.view.dispatch(editor.state.tr["delete"](nodePos, nodePos + editor.state.doc.nodeAt(nodePos).nodeSize));
307
313
  setShowToolbar(false);
308
314
  editor.commands.focus();
309
315
  },
310
316
  onDone: function onDone() {
311
- var _options$imageHandlin3, _options$imageHandlin4;
317
+ var _options$imageHandlin4, _options$imageHandlin5;
312
318
  setShowToolbar(false);
313
- (_options$imageHandlin3 = options.imageHandling) === null || _options$imageHandlin3 === void 0 || (_options$imageHandlin4 = _options$imageHandlin3.onDone) === null || _options$imageHandlin4 === void 0 || _options$imageHandlin4.call(_options$imageHandlin3);
319
+ (_options$imageHandlin4 = options.imageHandling) === null || _options$imageHandlin4 === void 0 || (_options$imageHandlin5 = _options$imageHandlin4.onDone) === null || _options$imageHandlin5 === void 0 || _options$imageHandlin5.call(_options$imageHandlin4);
314
320
  editor.commands.focus('end');
315
321
  }
316
322
  }, /*#__PURE__*/_react["default"].createElement(_ImageToolbar["default"], {
@@ -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","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":[]}
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","_node$attrs$src","_node$attrs","_options$imageHandlin","hasImageSrc","String","src","trim","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","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$imageHandlin2","_options$imageHandlin3","nodePos","view","dispatch","tr","nodeAt","focus","onDone","_options$imageHandlin4","_options$imageHandlin5","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 // Only open the upload UI for a fresh placeholder. Remounting after tab switch\n // would otherwise call insertImageRequested again and reopen the file modal.\n const hasImageSrc = String(node.attrs?.src ?? '').trim();\n if (!hasImageSrc && options.imageHandling?.insertImageRequested) {\n options.imageHandling.insertImageRequested(node, (finish) => new InsertImageHandler(editor, node, finish));\n }\n\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 &&\n editor._tiptapContainerEl &&\n 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":[]}
@@ -8,6 +8,7 @@ exports.ImageUploadNode = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _core = require("@tiptap/core");
10
10
  var _react = require("@tiptap/react");
11
+ var _state = require("@tiptap/pm/state");
11
12
  var _react2 = _interopRequireDefault(require("react"));
12
13
  var _imageComponent = _interopRequireDefault(require("./image-component"));
13
14
  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; }
@@ -51,7 +52,7 @@ var ImageUploadNode = exports.ImageUploadNode = _core.Node.create({
51
52
  },
52
53
  parseHTML: function parseHTML() {
53
54
  return [{
54
- tag: 'div[data-type="image-upload-node"]'
55
+ tag: 'img[data-type="image-upload-node"]'
55
56
  }];
56
57
  },
57
58
  renderHTML: function renderHTML(_ref) {
@@ -80,6 +81,45 @@ var ImageUploadNode = exports.ImageUploadNode = _core.Node.create({
80
81
  };
81
82
  }
82
83
  };
84
+ },
85
+ addProseMirrorPlugins: function addProseMirrorPlugins() {
86
+ var editor = this.editor;
87
+ return [new _state.Plugin({
88
+ props: {
89
+ handlePaste: function handlePaste(view, event) {
90
+ var _event$clipboardData;
91
+ var items = Array.from(((_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.items) || []);
92
+ var imageItem = items.find(function (item) {
93
+ return item.kind === 'file' && item.type.startsWith('image/');
94
+ });
95
+ if (!imageItem) {
96
+ return false;
97
+ }
98
+ var file = imageItem.getAsFile();
99
+ if (!file) {
100
+ return false;
101
+ }
102
+
103
+ // Example 1: insert as base64 immediately
104
+ var reader = new FileReader();
105
+ reader.onload = function () {
106
+ var src = reader.result;
107
+ if (typeof src !== 'string') {
108
+ return;
109
+ }
110
+ editor.commands.insertContent({
111
+ type: 'imageUploadNode',
112
+ attrs: {
113
+ src: src,
114
+ loaded: true
115
+ }
116
+ });
117
+ };
118
+ reader.readAsDataURL(file);
119
+ return true;
120
+ }
121
+ }
122
+ })];
83
123
  }
84
124
  });
85
125
  //# sourceMappingURL=image.js.map
@@ -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});"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"image.js","names":["_core","require","_react","_state","_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","addProseMirrorPlugins","editor","Plugin","handlePaste","view","event","_event$clipboardData","items","Array","from","clipboardData","imageItem","find","item","kind","startsWith","file","getAsFile","reader","FileReader","onload","result","attrs","readAsDataURL"],"sources":["../../src/extensions/image.js"],"sourcesContent":["import { mergeAttributes, Node } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport { Plugin } from '@tiptap/pm/state';\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: 'img[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 addProseMirrorPlugins() {\n const editor = this.editor;\n\n return [\n new Plugin({\n props: {\n handlePaste(view, event) {\n const items = Array.from(event.clipboardData?.items || []);\n\n const imageItem = items.find((item) => item.kind === 'file' && item.type.startsWith('image/'));\n\n if (!imageItem) {\n return false;\n }\n\n const file = imageItem.getAsFile();\n\n if (!file) {\n return false;\n }\n\n // Example 1: insert as base64 immediately\n const reader = new FileReader();\n\n reader.onload = () => {\n const src = reader.result;\n\n if (typeof src !== 'string') {\n return;\n }\n\n editor.commands.insertContent({\n type: 'imageUploadNode',\n attrs: {\n src,\n loaded: true,\n },\n });\n };\n\n reader.readAsDataURL(file);\n\n return true;\n },\n },\n }),\n ];\n },\n});\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.2.0-next.28",
6
+ "version": "1.2.0-next.30",
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": "906c083b9cf45f4b2b30b5d57a564e94c0b6b3d1",
62
+ "gitHead": "28b124a688673138a0e8f3e48fd80f8552b99b4c",
63
63
  "scripts": {}
64
64
  }
@@ -185,8 +185,22 @@ describe('ImageComponent', () => {
185
185
  expect(root).toHaveStyle({ justifyContent: 'flex-end' });
186
186
  });
187
187
 
188
- it('calls insertImageRequested on mount', () => {
188
+ it('does not call insertImageRequested when image already has src', () => {
189
189
  render(<ImageComponent {...defaultProps} />);
190
+ expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
191
+ });
192
+
193
+ it('calls insertImageRequested on mount only for empty placeholder (no src)', () => {
194
+ const placeholderNode = {
195
+ ...mockNode,
196
+ attrs: {
197
+ ...mockNode.attrs,
198
+ src: null,
199
+ loaded: false,
200
+ percent: null,
201
+ },
202
+ };
203
+ render(<ImageComponent {...defaultProps} node={placeholderNode} />);
190
204
  expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalled();
191
205
  });
192
206
 
@@ -1,10 +1,15 @@
1
- import { ImageUploadNode } from '../image';
2
-
3
1
  jest.mock('@tiptap/core', () => ({
4
2
  Node: { create: jest.fn((config) => config) },
5
3
  mergeAttributes: jest.fn((...args) => Object.assign({}, ...args)),
6
4
  }));
7
5
 
6
+ jest.mock('@tiptap/pm/state', () => ({
7
+ Plugin: jest.fn(function MockPlugin(spec) {
8
+ this.spec = spec;
9
+ return { spec };
10
+ }),
11
+ }));
12
+
8
13
  jest.mock('@tiptap/react', () => ({
9
14
  ReactNodeViewRenderer: jest.fn((component) => component),
10
15
  }));
@@ -14,6 +19,19 @@ jest.mock('../image-component', () => ({
14
19
  default: jest.fn(() => <div data-testid="image-component" />),
15
20
  }));
16
21
 
22
+ import { Plugin } from '@tiptap/pm/state';
23
+ import { ImageUploadNode } from '../image';
24
+
25
+ function setupPastePlugin() {
26
+ const insertContent = jest.fn();
27
+ const editor = { commands: { insertContent } };
28
+ Plugin.mockClear();
29
+ ImageUploadNode.addProseMirrorPlugins.call({ editor });
30
+ expect(Plugin).toHaveBeenCalledTimes(1);
31
+ const handlePaste = Plugin.mock.calls[0][0].props.handlePaste;
32
+ return { handlePaste, insertContent, editor };
33
+ }
34
+
17
35
  describe('ImageUploadNode', () => {
18
36
  describe('configuration', () => {
19
37
  it('has correct name', () => {
@@ -67,7 +85,7 @@ describe('ImageUploadNode', () => {
67
85
 
68
86
  expect(Array.isArray(rules)).toBe(true);
69
87
  expect(rules).toHaveLength(1);
70
- expect(rules[0]).toHaveProperty('tag', 'div[data-type="image-upload-node"]');
88
+ expect(rules[0]).toHaveProperty('tag', 'img[data-type="image-upload-node"]');
71
89
  });
72
90
  });
73
91
 
@@ -132,4 +150,83 @@ describe('ImageUploadNode', () => {
132
150
  expect(result).toBe(true);
133
151
  });
134
152
  });
153
+
154
+ describe('addProseMirrorPlugins', () => {
155
+ const mockView = {};
156
+
157
+ beforeEach(() => {
158
+ jest.spyOn(global, 'FileReader').mockImplementation(function MockFileReader() {
159
+ this.readAsDataURL = function readAsDataURL() {
160
+ this.result = 'data:image/png;base64,Zm9v';
161
+ queueMicrotask(() => {
162
+ if (this.onload) {
163
+ this.onload();
164
+ }
165
+ });
166
+ };
167
+ });
168
+ });
169
+
170
+ afterEach(() => {
171
+ global.FileReader.mockRestore();
172
+ });
173
+
174
+ it('registers one paste plugin', () => {
175
+ const insertContent = jest.fn();
176
+ const editor = { commands: { insertContent } };
177
+ Plugin.mockClear();
178
+ const plugins = ImageUploadNode.addProseMirrorPlugins.call({ editor });
179
+ expect(plugins).toHaveLength(1);
180
+ expect(Plugin).toHaveBeenCalledTimes(1);
181
+ });
182
+
183
+ it('handlePaste returns false when clipboard has no image file', () => {
184
+ const { handlePaste } = setupPastePlugin();
185
+ const event = {
186
+ clipboardData: {
187
+ items: [{ kind: 'string', type: 'text/plain', getAsFile: () => null }],
188
+ },
189
+ };
190
+ expect(handlePaste(mockView, event)).toBe(false);
191
+ });
192
+
193
+ it('handlePaste returns false when clipboardData is missing', () => {
194
+ const { handlePaste } = setupPastePlugin();
195
+ const event = {};
196
+ expect(handlePaste(mockView, event)).toBe(false);
197
+ });
198
+
199
+ it('handlePaste returns false when the file item has no file', () => {
200
+ const { handlePaste } = setupPastePlugin();
201
+ const event = {
202
+ clipboardData: {
203
+ items: [{ kind: 'file', type: 'image/png', getAsFile: () => null }],
204
+ },
205
+ };
206
+ expect(handlePaste(mockView, event)).toBe(false);
207
+ });
208
+
209
+ it('handlePaste returns true and inserts imageUploadNode with data URL after read', async () => {
210
+ const { handlePaste, insertContent } = setupPastePlugin();
211
+ const file = new File([new Uint8Array([1, 2, 3])], 'p.png', { type: 'image/png' });
212
+ const event = {
213
+ clipboardData: {
214
+ items: [{ kind: 'file', type: 'image/png', getAsFile: () => file }],
215
+ },
216
+ };
217
+
218
+ expect(handlePaste(mockView, event)).toBe(true);
219
+ expect(insertContent).not.toHaveBeenCalled();
220
+
221
+ await new Promise((resolve) => queueMicrotask(resolve));
222
+
223
+ expect(insertContent).toHaveBeenCalledWith({
224
+ type: 'imageUploadNode',
225
+ attrs: {
226
+ src: 'data:image/png;base64,Zm9v',
227
+ loaded: true,
228
+ },
229
+ });
230
+ });
231
+ });
135
232
  });
@@ -49,10 +49,10 @@ const StyledImageContainer = styled('div')(({ theme }) => ({
49
49
  },
50
50
  }));
51
51
 
52
- const StyledImage = styled('img',{
52
+ const StyledImage = styled('img', {
53
53
  shouldForwardProp: (prop) => prop !== 'active',
54
54
  })(({ theme, active }) => ({
55
- border: active ? `solid 1px ${theme.palette.primary.main}` : `solid 1px transparent`,
55
+ border: active ? `solid 1px ${theme.palette.primary.main}` : 'solid 1px transparent',
56
56
  }));
57
57
 
58
58
  const StyledResize = styled('div')(({ theme }) => ({
@@ -128,7 +128,13 @@ function ImageComponent(props) {
128
128
  }, [editor, node, selected]);
129
129
 
130
130
  useEffect(() => {
131
- options.imageHandling.insertImageRequested(node, (finish) => new InsertImageHandler(editor, node, finish));
131
+ // Only open the upload UI for a fresh placeholder. Remounting after tab switch
132
+ // would otherwise call insertImageRequested again and reopen the file modal.
133
+ const hasImageSrc = String(node.attrs?.src ?? '').trim();
134
+ if (!hasImageSrc && options.imageHandling?.insertImageRequested) {
135
+ options.imageHandling.insertImageRequested(node, (finish) => new InsertImageHandler(editor, node, finish));
136
+ }
137
+
132
138
  applySizeData();
133
139
 
134
140
  const resizeHandle = resizeRef.current;
@@ -265,50 +271,52 @@ function ImageComponent(props) {
265
271
  </StyledImageContainer>
266
272
  </StyledRoot>
267
273
 
268
- {showToolbar && editor._tiptapContainerEl && ReactDOM.createPortal(
269
- <div
270
- ref={toolbarRef}
271
- style={{
272
- zIndex: 20,
273
- background: 'var(--editable-html-toolbar-bg, #efefef)',
274
- boxShadow:
275
- '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)',
276
- width: '100%',
277
- }}
278
- >
279
- <CustomToolbarWrapper
280
- showDone
281
- deletable
282
- toolbarOpts={options.toolbarOpts || {}}
283
- onDelete={() => {
284
- const nodePos = findNodePos();
285
- if (nodePos === null) return;
286
-
287
- options.imageHandling?.onDelete?.(latestNodeRef.current);
288
-
289
- editor.view.dispatch(
290
- editor.state.tr.delete(nodePos, nodePos + editor.state.doc.nodeAt(nodePos).nodeSize),
291
- );
292
- setShowToolbar(false);
293
- editor.commands.focus();
294
- }}
295
- onDone={() => {
296
- setShowToolbar(false);
297
- options.imageHandling?.onDone?.();
298
- editor.commands.focus('end');
274
+ {showToolbar &&
275
+ editor._tiptapContainerEl &&
276
+ ReactDOM.createPortal(
277
+ <div
278
+ ref={toolbarRef}
279
+ style={{
280
+ zIndex: 20,
281
+ background: 'var(--editable-html-toolbar-bg, #efefef)',
282
+ boxShadow:
283
+ '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)',
284
+ width: '100%',
299
285
  }}
300
286
  >
301
- <ImageToolbar
302
- disableImageAlignmentButtons={options.disableImageAlignmentButtons}
303
- alt={node.attrs.alt}
304
- imageLoaded={node.attrs.loaded}
305
- alignment={node.attrs.alignment || 'left'}
306
- onChange={onChange}
307
- />
308
- </CustomToolbarWrapper>
309
- </div>,
310
- editor._tiptapContainerEl,
311
- )}
287
+ <CustomToolbarWrapper
288
+ showDone
289
+ deletable
290
+ toolbarOpts={options.toolbarOpts || {}}
291
+ onDelete={() => {
292
+ const nodePos = findNodePos();
293
+ if (nodePos === null) return;
294
+
295
+ options.imageHandling?.onDelete?.(latestNodeRef.current);
296
+
297
+ editor.view.dispatch(
298
+ editor.state.tr.delete(nodePos, nodePos + editor.state.doc.nodeAt(nodePos).nodeSize),
299
+ );
300
+ setShowToolbar(false);
301
+ editor.commands.focus();
302
+ }}
303
+ onDone={() => {
304
+ setShowToolbar(false);
305
+ options.imageHandling?.onDone?.();
306
+ editor.commands.focus('end');
307
+ }}
308
+ >
309
+ <ImageToolbar
310
+ disableImageAlignmentButtons={options.disableImageAlignmentButtons}
311
+ alt={node.attrs.alt}
312
+ imageLoaded={node.attrs.loaded}
313
+ alignment={node.attrs.alignment || 'left'}
314
+ onChange={onChange}
315
+ />
316
+ </CustomToolbarWrapper>
317
+ </div>,
318
+ editor._tiptapContainerEl,
319
+ )}
312
320
  </NodeViewWrapper>
313
321
  );
314
322
  }
@@ -1,5 +1,6 @@
1
1
  import { mergeAttributes, Node } from '@tiptap/core';
2
2
  import { ReactNodeViewRenderer } from '@tiptap/react';
3
+ import { Plugin } from '@tiptap/pm/state';
3
4
  import React from 'react';
4
5
  import ImageComponent from './image-component';
5
6
 
@@ -27,7 +28,7 @@ export const ImageUploadNode = Node.create({
27
28
  parseHTML() {
28
29
  return [
29
30
  {
30
- tag: 'div[data-type="image-upload-node"]',
31
+ tag: 'img[data-type="image-upload-node"]',
31
32
  },
32
33
  ];
33
34
  },
@@ -44,11 +45,60 @@ export const ImageUploadNode = Node.create({
44
45
  return {
45
46
  setImageUploadNode:
46
47
  () =>
47
- ({ commands }) => {
48
- return commands.insertContent({
49
- type: this.name,
50
- });
51
- },
48
+ ({ commands }) => {
49
+ return commands.insertContent({
50
+ type: this.name,
51
+ });
52
+ },
52
53
  };
53
54
  },
54
- });
55
+
56
+ addProseMirrorPlugins() {
57
+ const editor = this.editor;
58
+
59
+ return [
60
+ new Plugin({
61
+ props: {
62
+ handlePaste(view, event) {
63
+ const items = Array.from(event.clipboardData?.items || []);
64
+
65
+ const imageItem = items.find((item) => item.kind === 'file' && item.type.startsWith('image/'));
66
+
67
+ if (!imageItem) {
68
+ return false;
69
+ }
70
+
71
+ const file = imageItem.getAsFile();
72
+
73
+ if (!file) {
74
+ return false;
75
+ }
76
+
77
+ // Example 1: insert as base64 immediately
78
+ const reader = new FileReader();
79
+
80
+ reader.onload = () => {
81
+ const src = reader.result;
82
+
83
+ if (typeof src !== 'string') {
84
+ return;
85
+ }
86
+
87
+ editor.commands.insertContent({
88
+ type: 'imageUploadNode',
89
+ attrs: {
90
+ src,
91
+ loaded: true,
92
+ },
93
+ });
94
+ };
95
+
96
+ reader.readAsDataURL(file);
97
+
98
+ return true;
99
+ },
100
+ },
101
+ }),
102
+ ];
103
+ },
104
+ });