@pie-lib/editable-html-tip-tap 1.0.17 → 1.0.19

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.
Files changed (41) hide show
  1. package/lib/components/CharacterPicker.js +2 -2
  2. package/lib/components/CharacterPicker.js.map +1 -0
  3. package/lib/components/EditableHtml.js +1 -3
  4. package/lib/components/EditableHtml.js.map +1 -0
  5. package/lib/components/MenuBar.js.map +1 -0
  6. package/lib/components/TiptapContainer.js.map +1 -0
  7. package/lib/components/characters/characterUtils.js.map +1 -0
  8. package/lib/components/characters/custom-popper.js.map +1 -0
  9. package/lib/components/common/done-button.js.map +1 -0
  10. package/lib/components/common/toolbar-buttons.js.map +1 -0
  11. package/lib/components/icons/CssIcon.js.map +1 -0
  12. package/lib/components/icons/RespArea.js.map +1 -0
  13. package/lib/components/icons/TableIcons.js.map +1 -0
  14. package/lib/components/icons/TextAlign.js.map +1 -0
  15. package/lib/components/image/AltDialog.js.map +1 -0
  16. package/lib/components/image/ImageToolbar.js.map +1 -0
  17. package/lib/components/image/InsertImageHandler.js.map +1 -0
  18. package/lib/components/media/MediaDialog.js.map +1 -0
  19. package/lib/components/media/MediaToolbar.js.map +1 -0
  20. package/lib/components/media/MediaWrapper.js.map +1 -0
  21. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -0
  22. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -0
  23. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -0
  24. package/lib/components/respArea/InlineDropdown.js.map +1 -0
  25. package/lib/components/respArea/ToolbarIcon.js.map +1 -0
  26. package/lib/constants.js.map +1 -0
  27. package/lib/extensions/component.js.map +1 -0
  28. package/lib/extensions/css.js.map +1 -0
  29. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -0
  30. package/lib/extensions/extended-table.js.map +1 -0
  31. package/lib/extensions/image.js.map +1 -0
  32. package/lib/extensions/index.js.map +1 -0
  33. package/lib/extensions/math.js.map +1 -0
  34. package/lib/extensions/media.js.map +1 -0
  35. package/lib/extensions/responseArea.js.map +1 -0
  36. package/lib/index.js.map +1 -0
  37. package/lib/styles/editorContainerStyles.js.map +1 -0
  38. package/lib/theme.js.map +1 -0
  39. package/lib/utils/size.js.map +1 -0
  40. package/package.json +1 -1
  41. package/src/components/CharacterPicker.jsx +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/icons/TextAlign.jsx"],"names":["AlignLeft","AlignRight","AlignCenter","AlignJustify","editor","onChange","open","setOpen","icon","isActive","textAlign","applyAlignment","event","alignType","target","closest","getAttribute","commands","setTextAlign","onMouseDown","preventDefault","stopPropagation","display","alignItems","marginLeft","fontSize","position","background","flexDirection","padding"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport Collapse from '@material-ui/core/Collapse';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\n\nexport const AlignLeft = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 66 66\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M42.1875 4.75C42.1875 7.38672 39.9902 9.4375 37.5 9.4375H4.6875C2.05078 9.4375 0 7.38672 0 4.75C0 2.25977 2.05078 0.0625 4.6875 0.0625H37.5C39.9902 0.0625 42.1875 2.25977 42.1875 4.75ZM42.1875 42.25C42.1875 44.8867 39.9902 46.9375 37.5 46.9375H4.6875C2.05078 46.9375 0 44.8867 0 42.25C0 39.7598 2.05078 37.5625 4.6875 37.5625H37.5C39.9902 37.5625 42.1875 39.7598 42.1875 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const AlignRight = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 66 66\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M65.625 4.75C65.625 7.38672 63.4277 9.4375 60.9375 9.4375H28.125C25.4883 9.4375 23.4375 7.38672 23.4375 4.75C23.4375 2.25977 25.4883 0.0625 28.125 0.0625H60.9375C63.4277 0.0625 65.625 2.25977 65.625 4.75ZM65.625 42.25C65.625 44.8867 63.4277 46.9375 60.9375 46.9375H28.125C25.4883 46.9375 23.4375 44.8867 23.4375 42.25C23.4375 39.7598 25.4883 37.5625 28.125 37.5625H60.9375C63.4277 37.5625 65.625 39.7598 65.625 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const AlignCenter = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 66 66\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M51.5625 4.75C51.5625 7.38672 49.3652 9.4375 46.875 9.4375H18.75C16.1133 9.4375 14.0625 7.38672 14.0625 4.75C14.0625 2.25977 16.1133 0.0625 18.75 0.0625H46.875C49.3652 0.0625 51.5625 2.25977 51.5625 4.75ZM65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5ZM0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61ZM51.5625 42.25C51.5625 44.8867 49.3652 46.9375 46.875 46.9375H18.75C16.1133 46.9375 14.0625 44.8867 14.0625 42.25C14.0625 39.7598 16.1133 37.5625 18.75 37.5625H46.875C49.3652 37.5625 51.5625 39.7598 51.5625 42.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const AlignJustify = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 66 66\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M65.625 4.75C65.625 7.38672 63.4277 9.4375 60.9375 9.4375H4.6875C2.05078 9.4375 0 7.38672 0 4.75C0 2.25977 2.05078 0.0625 4.6875 0.0625H60.9375C63.4277 0.0625 65.625 2.25977 65.625 4.75ZM65.625 42.25C65.625 44.8867 63.4277 46.9375 60.9375 46.9375H4.6875C2.05078 46.9375 0 44.8867 0 42.25C0 39.7598 2.05078 37.5625 4.6875 37.5625H60.9375C63.4277 37.5625 65.625 39.7598 65.625 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport default ({ editor, onChange }) => {\n const [open, setOpen] = useState(false);\n\n let icon;\n\n switch (true) {\n case editor.isActive({ textAlign: 'right' }):\n icon = <AlignRight />;\n break;\n case editor.isActive({ textAlign: 'center' }):\n icon = <AlignCenter />;\n break;\n case editor.isActive({ textAlign: 'justify' }):\n icon = <AlignJustify />;\n break;\n default:\n icon = <AlignLeft />;\n break;\n }\n\n const applyAlignment = (event) => {\n const alignType = event.target?.closest('div')?.getAttribute('value');\n\n if (alignType) {\n editor.commands.setTextAlign(alignType);\n }\n\n setOpen(false);\n };\n\n const onMouseDown = (event) => {\n event.preventDefault();\n event.stopPropagation();\n setOpen(!open);\n };\n\n return (\n <div>\n <div style={{ display: 'flex', alignItems: 'center' }} onClick={onMouseDown}>\n {icon}\n <span style={{ marginLeft: '5px', fontSize: '8px' }}>&#9660;</span>\n </div>\n <Collapse in={open} timeout=\"auto\" unmountOnExit style={{ position: 'absolute' }}>\n <List\n component=\"div\"\n disablePadding\n style={{\n background: '#fff',\n display: 'flex',\n flexDirection: 'row',\n padding: 0,\n }}\n >\n <ListItem button type=\"submit\" value=\"left\" aria-label=\"Align text left\" onClick={applyAlignment}>\n <AlignLeft />\n </ListItem>\n\n <ListItem button type=\"submit\" value=\"center\" aria-label=\"Align text center\" onClick={applyAlignment}>\n <AlignCenter />\n </ListItem>\n\n <ListItem button type=\"submit\" value=\"right\" aria-label=\"Align text right\" onClick={applyAlignment}>\n <AlignRight />\n </ListItem>\n\n <ListItem button type=\"submit\" value=\"justify\" aria-label=\"Justify text\" onClick={applyAlignment}>\n <AlignJustify />\n </ListItem>\n </List>\n </Collapse>\n </div>\n );\n};\n"],"file":"TextAlign.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/image/AltDialog.jsx"],"names":["AltDialog","props","allDialogs","document","querySelectorAll","forEach","s","remove","onDone","value","state","closeDialog","body","style","removeProperty","alt","handleOverflow","display","paddingTop","event","setState","target","fontSize","React","Component","PropTypes","func","isRequired","string"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,S;;;;;AAMX,qBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,oGAUL,YAAM;AAClB,UAAMC,UAAU,GAAGC,QAAQ,CAACC,gBAAT,CAA0B,cAA1B,CAAnB;AAEAF,MAAAA,UAAU,CAACG,OAAX,CAAmB,UAASC,CAAT,EAAY;AAC7B,eAAOA,CAAC,CAACC,MAAF,EAAP;AACD,OAFD;AAGD,KAhBkB;AAAA,+FAkBV,YAAM;AACb,UAAQC,MAAR,GAAmB,MAAKP,KAAxB,CAAQO,MAAR;AACA,UAAQC,KAAR,GAAkB,MAAKC,KAAvB,CAAQD,KAAR;AAEAD,MAAAA,MAAM,CAACC,KAAD,CAAN;;AACA,YAAKE,WAAL;AACD,KAxBkB;AAAA,uGA0BF,YAAM;AACrBR,MAAAA,QAAQ,CAACS,IAAT,CAAcC,KAAd,CAAoBC,cAApB,CAAmC,UAAnC;AACD,KA5BkB;AAGjB,QAAQC,GAAR,GAAgBd,KAAhB,CAAQc,GAAR;AAEA,UAAKL,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAEM;AADI,KAAb;AALiB;AAQlB;;;;WAsBD,kBAAS;AAAA;;AACP,UAAQN,KAAR,GAAkB,KAAKC,KAAvB,CAAQD,KAAR;AAEA,0BACE,gCAAC,kBAAD;AACE,QAAA,IAAI,MADN;AAEE,QAAA,aAAa,MAFf;AAGE,QAAA,OAAO,EAAE,KAAKE,WAHhB;AAIE,QAAA,EAAE,EAAC,aAJL;AAKE,QAAA,YAAY,MALd;AAME,QAAA,iBAAiB,MANnB;AAOE,QAAA,SAAS,EAAE,KAAKK;AAPlB,sBASE,gCAAC,yBAAD,qBACE;AAAK,QAAA,KAAK,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX;AAAZ,sBACE,gCAAC,wBAAD;AAAc,QAAA,KAAK,EAAE;AAAEC,UAAAA,UAAU,EAAE;AAAd;AAArB,QADF,eAEE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,WAAW,EAAE,6CAFf;AAGE,QAAA,UAAU,EACR,0HAJJ;AAME,QAAA,KAAK,EAAET,KANT;AAOE,QAAA,QAAQ,EAAE,kBAACU,KAAD;AAAA,iBAAW,MAAI,CAACC,QAAL,CAAc;AAAEX,YAAAA,KAAK,EAAEU,KAAK,CAACE,MAAN,CAAaZ;AAAtB,WAAd,CAAX;AAAA,SAPZ;AAQE,QAAA,mBAAmB,EAAE;AAAEI,UAAAA,KAAK,EAAE;AAAES,YAAAA,QAAQ,EAAE;AAAZ;AAAT;AARvB,QAFF,CADF,CATF,eAwBE,gCAAC,yBAAD,qBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE,KAAKd;AAAtB,gBADF,CAxBF,CADF;AA8BD;;;EArE4Be,kBAAMC,S;;;iCAAxBxB,S,eACQ;AACjBQ,EAAAA,MAAM,EAAEiB,sBAAUC,IAAV,CAAeC,UADN;AAEjBZ,EAAAA,GAAG,EAAEU,sBAAUG;AAFE,C;eAuEN5B,S","sourcesContent":["import React from 'react';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport ArrowBackIos from '@material-ui/icons/ArrowBackIos';\nimport TextField from '@material-ui/core/TextField';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport PropTypes from 'prop-types';\n\nexport class AltDialog extends React.Component {\n static propTypes = {\n onDone: PropTypes.func.isRequired,\n alt: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n\n const { alt } = props;\n\n this.state = {\n value: alt,\n };\n }\n\n closeDialog = () => {\n const allDialogs = document.querySelectorAll('#text-dialog');\n\n allDialogs.forEach(function(s) {\n return s.remove();\n });\n };\n\n onDone = () => {\n const { onDone } = this.props;\n const { value } = this.state;\n\n onDone(value);\n this.closeDialog();\n };\n\n handleOverflow = () => {\n document.body.style.removeProperty('overflow');\n };\n\n render() {\n const { value } = this.state;\n\n return (\n <Dialog\n open\n disablePortal\n onClose={this.closeDialog}\n id=\"text-dialog\"\n hideBackdrop\n disableScrollLock\n onEntered={this.handleOverflow}\n >\n <DialogContent>\n <div style={{ display: 'flex' }}>\n <ArrowBackIos style={{ paddingTop: '6px' }} />\n <TextField\n multiline\n placeholder={'Enter an Alt Text description of this image'}\n helperText={\n 'Users with visual limitations rely on Alt Text, since screen readers cannot otherwise describe the contents of an image.'\n }\n value={value}\n onChange={(event) => this.setState({ value: event.target.value })}\n FormHelperTextProps={{ style: { fontSize: 14 } }}\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={this.onDone}>Done</Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default AltDialog;\n"],"file":"AltDialog.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/image/ImageToolbar.jsx"],"names":["log","AlignmentButton","alignment","active","onClick","propTypes","PropTypes","string","isRequired","bool","func","ImageToolbar","newAlt","props","onChange","alt","popoverEl","document","createElement","el","onAltTextDone","ReactDOM","render","body","appendChild","classes","imageLoaded","disableImageAlignmentButtons","holder","onAlignmentClick","disabled","altButton","event","renderDialog","React","Component","object","styles","theme","paddingLeft","spacing","unit","display","alignItems","opacity","borderLeft","marginLeft"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport debug from 'debug';\nimport ReactDOM from 'react-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nimport AltDialog from './AltDialog';\nimport { MarkButton } from '../common/toolbar-buttons';\n\nconst log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');\n\nconst AlignmentButton = ({ alignment, active, onClick }) => {\n return (\n <MarkButton active={active} onToggle={() => onClick(alignment)} label={alignment}>\n {alignment}\n </MarkButton>\n );\n};\n\nAlignmentButton.propTypes = {\n alignment: PropTypes.string.isRequired,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nexport class ImageToolbar extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n alignment: PropTypes.string,\n alt: PropTypes.string,\n imageLoaded: PropTypes.bool,\n disableImageAlignmentButtons: PropTypes.bool,\n };\n\n onAltTextDone = (newAlt) => {\n log('[onAltTextDone]: alt:', newAlt);\n\n this.props.onChange({ alt: newAlt }, true);\n };\n\n onAlignmentClick = (alignment) => {\n log('[onAlignmentClick]: alignment:', alignment);\n this.props.onChange({ alignment });\n };\n\n renderDialog = () => {\n const { alt } = this.props;\n const popoverEl = document.createElement('div');\n\n const el = <AltDialog alt={alt} onDone={this.onAltTextDone} />;\n\n ReactDOM.render(el, popoverEl);\n\n document.body.appendChild(popoverEl);\n };\n\n render() {\n const { classes, alignment, imageLoaded, disableImageAlignmentButtons } = this.props;\n return (\n <div className={classes.holder}>\n {!disableImageAlignmentButtons && (\n <>\n <AlignmentButton alignment={'left'} active={alignment === 'left'} onClick={this.onAlignmentClick} />\n <AlignmentButton alignment={'center'} active={alignment === 'center'} onClick={this.onAlignmentClick} />\n <AlignmentButton alignment={'right'} active={alignment === 'right'} onClick={this.onAlignmentClick} />\n </>\n )}\n <span\n className={classNames({\n [classes.disabled]: !imageLoaded,\n [classes.altButton]: !disableImageAlignmentButtons,\n })}\n onMouseDown={(event) => imageLoaded && this.renderDialog(event)}\n >\n Alt text\n </span>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n holder: {\n paddingLeft: theme.spacing.unit,\n display: 'flex',\n alignItems: 'center',\n },\n disabled: {\n opacity: 0.5,\n },\n altButton: {\n borderLeft: '1px solid grey',\n paddingLeft: 8,\n marginLeft: 4,\n },\n});\n\nexport default withStyles(styles)(ImageToolbar);\n"],"file":"ImageToolbar.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/image/InsertImageHandler.js"],"names":["log","InsertImageHandler","editor","node","onFinish","isPasted","nodePos","state","doc","descendants","pos","chosenFile","deleteNode","err","newAttrs","view","tr","nodeAt","transaction","setNodeMarkup","undefined","attrs","dispatch","nodeSize","src","console","updateNode","loaded","percent","file","reader","FileReader","onload","dataURL","result","readAsDataURL","bytes","total"],"mappings":"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","sourcesContent":["import debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:image:insert-image-handler');\n\n/**\n * Handles user selection, insertion (or cancellation) of an image into the editor.\n * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image\n * @param {Function} onFinish - a function to call if uploading fails or succeeds\n * @param {Function} getValue - a function to return the value of the editor\n * @param {Function} onChange - callback to notify changes applied by the handler\n * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted\n */\nclass InsertImageHandler {\n constructor(editor, node, onFinish, isPasted = false) {\n this.editor = editor;\n this.node = node;\n\n let nodePos;\n\n editor.state.doc.descendants((node, pos) => {\n if (node === this.node) {\n nodePos = pos;\n return false\n }\n });\n\n this.nodePos = nodePos;\n this.onFinish = onFinish;\n this.isPasted = isPasted;\n this.chosenFile = null;\n }\n\n cancel() {\n log('insert cancelled');\n\n try {\n this.deleteNode();\n this.onFinish(false);\n } catch (err) {\n //\n }\n }\n\n updateNode(newAttrs) {\n const { state, view } = this.editor;\n const { tr } = state;\n const node = state.doc.nodeAt(this.nodePos);\n\n if (node) {\n const transaction = tr.setNodeMarkup(this.nodePos, undefined, { ...node.attrs, ...newAttrs });\n\n view.dispatch(transaction);\n }\n }\n\n deleteNode() {\n const { state, view } = this.editor;\n const { tr } = state;\n\n const transaction = tr.delete(this.nodePos, this.nodePos + this.node.nodeSize);\n\n view.dispatch(transaction);\n }\n\n done(err, src) {\n log('done: err:', err);\n if (err) {\n //eslint-disable-next-line\n console.log(err);\n this.onFinish(false);\n } else {\n this.updateNode({ loaded: true, src, percent: 100 });\n this.onFinish(true);\n }\n }\n\n /**\n * Notify handler that the user chose a file - will create a change with a preview in the editor.\n *\n * @param {File} file - the file that the user chose using a file input.\n */\n fileChosen(file) {\n if (!file) {\n return;\n }\n\n // Save the chosen file to this.chosenFile\n this.chosenFile = file;\n\n log('[fileChosen] file: ', file);\n const reader = new FileReader();\n reader.onload = () => {\n const dataURL = reader.result;\n\n this.updateNode({ src: dataURL });\n };\n reader.readAsDataURL(file);\n }\n\n progress(percent, bytes, total) {\n log('progress: ', percent, bytes, total);\n this.updateNode({ percent });\n }\n\n // Add a getter method to retrieve the chosen file\n getChosenFile() {\n return this.chosenFile;\n }\n}\n\nexport default InsertImageHandler;\n"],"file":"InsertImageHandler.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media/MediaDialog.js"],"names":["log","matchYoutubeUrl","url","p","match","matchVimeoUrl","test","matchDriveUrl","matchSoundCloudUrl","regexp","makeApiRequest","Promise","resolve","fetch","then","response","json","d","document","createElement","innerHTML","html","iframe","querySelector","src","err","typeMap","video","audio","tabsTypeMap","uploadFile","insertUrl","MediaDialog","props","state","urlToUse","starts","ends","isYoutube","isVimeo","formattedUrl","params","paramName","paramStart","push","length","join","callback","setState","updating","newState","formatUrl","value","handleStateChange","invalid","regExp","id","replace","e","target","type","checkAudio","checkVideo","val","handleClose","tabValue","fileUpload","isInsertURL","handleRemoveFile","height","width","tag","loading","scheduled","preventDefault","error","fileChosen","files","reader","FileReader","onload","dataURL","result","mimeType","readAsDataURL","uploadSoundSupport","add","done","console","handleDone","bind","undefined","showUploadFile","urlChange","classes","open","disablePortal","edit","isUploadMedia","submitIsDisabled","paper","row","event","root","properties","changeHandler","uploadInput","deleteIcon","input","handleUploadFile","React","Component","PropTypes","object","isRequired","bool","func","shape","string","number","styles","theme","minWidth","padding","display","flexDirection","rowItem","marginRight","spacing","unit","cursor","active","color","primary","borderBottom","marginTop","palette","main","marginLeft"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,6CAAN,CAAZ;;AAEA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,GAAD,EAAS;AAC/B,MAAI,CAACA,GAAL,EAAU;AACR,WAAO,KAAP;AACD;;AAED,MAAMC,CAAC,GAAG,0HAAV;;AACA,MAAID,GAAG,CAACE,KAAJ,CAAUD,CAAV,CAAJ,EAAkB;AAChB,WAAOD,GAAG,CAACE,KAAJ,CAAUD,CAAV,EAAa,CAAb,CAAP;AACD;;AACD,SAAO,KAAP;AACD,CAVD;;AAYA,IAAME,aAAa,GAAG,SAAhBA,aAAgB,CAACH,GAAD;AAAA,SACpBA,GAAG,IACH,8HAA8HI,IAA9H,CACEJ,GADF,CAFoB;AAAA,CAAtB;;AAMA,IAAMK,aAAa,GAAG,SAAhBA,aAAgB,CAACL,GAAD;AAAA,SACpBA,GAAG,IAAI,qGAAqGI,IAArG,CAA0GJ,GAA1G,CADa;AAAA,CAAtB;;AAGA,IAAMM,kBAAkB,GAAG,SAArBA,kBAAqB,CAACN,GAAD,EAAS;AAClC,MAAI,CAACA,GAAL,EAAU;AACR,WAAO,KAAP;AACD;;AAED,MAAMO,MAAM,GAAG,8CAAf;AACA,SAAOP,GAAG,CAACE,KAAJ,CAAUK,MAAV,KAAqBP,GAAG,CAACE,KAAJ,CAAUK,MAAV,EAAkB,CAAlB,CAA5B;AACD,CAPD;;AASA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACR,GAAD,EAAS;AAC9B,SAAO,IAAIS,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9B,QAAI;AACFC,MAAAA,KAAK,yDAAkDX,GAAlD,EAAL,CACGY,IADH,CACQ,UAACC,QAAD;AAAA,eAAcA,QAAQ,CAACC,IAAT,EAAd;AAAA,OADR,EAEGF,IAFH,CAEQ,UAACE,IAAD,EAAU;AACd,YAAMC,CAAC,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AAEAF,QAAAA,CAAC,CAACG,SAAF,GAAcJ,IAAI,CAACK,IAAnB;AAEA,YAAMC,MAAM,GAAGL,CAAC,CAACM,aAAF,CAAgB,QAAhB,CAAf;AAEAX,QAAAA,OAAO,CAACU,MAAM,CAACE,GAAR,CAAP;AACD,OAVH,WAWS,UAACC,GAAD,EAAS;AACdb,QAAAA,OAAO,CAAC,EAAD,CAAP;AACAZ,QAAAA,GAAG,CAACyB,GAAD,CAAH;AACD,OAdH;AAeD,KAhBD,CAgBE,OAAOA,GAAP,EAAY;AACZb,MAAAA,OAAO,CAAC,EAAD,CAAP;AACD;AACF,GApBM,CAAP;AAqBD,CAtBD;;AAwBA,IAAMc,OAAO,GAAG;AACdC,EAAAA,KAAK,EAAE,OADO;AAEdC,EAAAA,KAAK,EAAE;AAFO,CAAhB;AAKA,IAAMC,WAAW,GAAG;AAClBC,EAAAA,UAAU,EAAE,aADM;AAElBC,EAAAA,SAAS,EAAE;AAFO,CAApB;;IAKaC,W;;;;;AAqBX,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,kGAqCP,YAAM;AAChB,wBAAwC,MAAKC,KAA7C;AAAA,UAAQhC,GAAR,eAAQA,GAAR;AAAA,UAAaiC,QAAb,eAAaA,QAAb;AAAA,UAAuBC,MAAvB,eAAuBA,MAAvB;AAAA,UAA+BC,IAA/B,eAA+BA,IAA/B;AACA,UAAMC,SAAS,GAAGrC,eAAe,CAACC,GAAD,CAAjC;AACA,UAAMqC,OAAO,GAAGlC,aAAa,CAACH,GAAD,CAA7B;AACA,UAAIsC,YAAY,GAAGL,QAAnB;;AAEA,UAAI,CAACG,SAAS,IAAIC,OAAd,KAA0BJ,QAA9B,EAAwC;AACtC,YAAMM,MAAM,GAAG,EAAf;AAEA,YAAIC,SAAJ;AACA,YAAIC,UAAJ;;AAEA,gBAAQ,IAAR;AACE,eAAKJ,OAAL;AACEG,YAAAA,SAAS,GAAG,GAAZ;AACAC,YAAAA,UAAU,GAAG,GAAb;AACA;;AACF,eAAKL,SAAL;AACEI,YAAAA,SAAS,GAAG,OAAZ;AACAC,YAAAA,UAAU,GAAG,GAAb;AACA;;AACF;AACED,YAAAA,SAAS,GAAG,OAAZ;AACAC,YAAAA,UAAU,GAAG,GAAb;AAXJ;;AAcA,YAAIP,MAAJ,EAAY;AACVK,UAAAA,MAAM,CAACG,IAAP,WAAeF,SAAf,cAA4BN,MAA5B;AACD;;AAED,YAAIC,IAAJ,EAAU;AACRI,UAAAA,MAAM,CAACG,IAAP,eAAmBP,IAAnB;AACD;;AAEDG,QAAAA,YAAY,aAAML,QAAN,SAAiBM,MAAM,CAACI,MAAP,GAAgBF,UAAhB,GAA6B,EAA9C,SAAmDF,MAAM,CAACK,IAAP,CAAY,GAAZ,CAAnD,CAAZ;AACD;;AAED,UAAMC,QAAQ,GAAG,SAAXA,QAAW;AAAA,eAAM,MAAKC,QAAL,CAAc;AAAER,UAAAA,YAAY,EAAZA,YAAF;AAAgBS,UAAAA,QAAQ,EAAE;AAA1B,SAAd,CAAN;AAAA,OAAjB;;AAEA,YAAKD,QAAL,CAAc;AAAER,QAAAA,YAAY,EAAE,IAAhB;AAAsBS,QAAAA,QAAQ,EAAE;AAAhC,OAAd,EAAsDF,QAAtD;AACD,KA7EkB;AAAA,0GA+EC,UAACG,QAAD;AAAA,aAAc,MAAKF,QAAL,CAAcE,QAAd,EAAwB,MAAKC,SAA7B,CAAd;AAAA,KA/ED;AAAA,mGAiFN,UAACC,KAAD,EAAW;AACtB,UAAI5C,kBAAkB,CAAC4C,KAAD,CAAtB,EAA+B;AAC7B1C,QAAAA,cAAc,CAAC0C,KAAD,CAAd,CACGtC,IADH,CACQ,UAACqB,QAAD,EAAc;AAClB,gBAAKkB,iBAAL,CAAuB;AACrBlB,YAAAA,QAAQ,EAARA,QADqB;AAErBmB,YAAAA,OAAO,EAAE,CAACnB,QAFW;AAGrBjC,YAAAA,GAAG,EAAEkD;AAHgB,WAAvB;AAKD,SAPH,WAQSpD,GART;AASD;AACF,KA7FkB;AAAA,mGA+FN,UAACoD,KAAD,EAAW;AACtB,UAAInD,eAAe,CAACmD,KAAD,CAAnB,EAA4B;AAC1B,YAAMG,MAAM,GAAG,+DAAf;AACA,YAAMnD,KAAK,GAAGgD,KAAK,CAAChD,KAAN,CAAYmD,MAAZ,CAAd;AACA,YAAMC,EAAE,GAAGpD,KAAK,CAAC,CAAD,CAAhB;AACA,YAAM+B,QAAQ,uCAAgCqB,EAAhC,CAAd;AAEAxD,QAAAA,GAAG,CAAC,YAAD,CAAH;;AAEA,cAAKqD,iBAAL,CAAuB;AACrBlB,UAAAA,QAAQ,EAARA,QADqB;AAErBjC,UAAAA,GAAG,EAAEkD,KAFgB;AAGrBE,UAAAA,OAAO,EAAE;AAHY,SAAvB;AAKD;;AAED,UAAIjD,aAAa,CAAC+C,KAAD,CAAjB,EAA0B;AACxB,YAAMI,GAAE,GAAGJ,KAAK,CAACK,OAAN,CAAc,oBAAd,EAAoC,IAApC,CAAX;;AACA,YAAMtB,UAAQ,4CAAqCqB,GAArC,CAAd;;AAEAxD,QAAAA,GAAG,CAAC,UAAD,CAAH;;AAEA,cAAKqD,iBAAL,CAAuB;AACrBlB,UAAAA,QAAQ,EAARA,UADqB;AAErBjC,UAAAA,GAAG,EAAEkD,KAFgB;AAGrBf,UAAAA,IAAI,EAAE,IAHe;AAIrBiB,UAAAA,OAAO,EAAE;AAJY,SAAvB;AAMD;;AAED,UAAI/C,aAAa,CAAC6C,KAAD,CAAjB,EAA0B;AACxB;AACA,YAAMI,IAAE,GAAGJ,KAAK,CAACK,OAAN,CACT,wGADS,EAET,IAFS,CAAX;;AAIA,YAAMtB,UAAQ,6CAAsCqB,IAAtC,aAAd;;AAEAxD,QAAAA,GAAG,CAAC,iBAAD,CAAH;;AAEA,cAAKqD,iBAAL,CAAuB;AACrBlB,UAAAA,QAAQ,EAARA,UADqB;AAErBjC,UAAAA,GAAG,EAAEkD,KAFgB;AAGrBf,UAAAA,IAAI,EAAE,IAHe;AAIrBiB,UAAAA,OAAO,EAAE;AAJY,SAAvB;AAMD;AACF,KA9IkB;AAAA,kGAgJP,UAACI,CAAD,EAAO;AACjB,iBAAkBA,CAAC,CAACC,MAAF,IAAY,EAA9B;AAAA,UAAQP,KAAR,QAAQA,KAAR;;AACA,UAAQQ,IAAR,GAAiB,MAAK3B,KAAtB,CAAQ2B,IAAR;;AAEA,UAAIA,IAAI,IAAIA,IAAI,KAAK,OAArB,EAA8B;AAC5B,cAAKC,UAAL,CAAgBT,KAAhB;;AACA;AACD,OAHD,MAGO,IAAIQ,IAAI,IAAIA,IAAI,KAAK,OAArB,EAA8B;AACnC,cAAKE,UAAL,CAAgBV,KAAhB;;AACA;AACD;;AAED,YAAKC,iBAAL,CAAuB;AACrBlB,QAAAA,QAAQ,EAAE,IADW;AAErBjC,QAAAA,GAAG,EAAE,IAFgB;AAGrBoD,QAAAA,OAAO,EAAE;AAHY,OAAvB;AAKD,KAjKkB;AAAA,sGAmKH,UAACM,IAAD;AAAA,aAAU,UAACF,CAAD;AAAA,eAAO,MAAKL,iBAAL,sCAA0BO,IAA1B,EAAiCF,CAAC,CAACC,MAAF,CAASP,KAA1C,EAAP;AAAA,OAAV;AAAA,KAnKG;AAAA,mGAqKN,UAACW,GAAD,EAAS;AACpB,UAAQC,WAAR,GAAwB,MAAK/B,KAA7B,CAAQ+B,WAAR;AACA,yBAAiC,MAAK9B,KAAtC;AAAA,UAAQ+B,QAAR,gBAAQA,QAAR;AAAA,UAAkBC,UAAlB,gBAAkBA,UAAlB;AACA,UAAMC,WAAW,GAAGF,QAAQ,KAAKpC,WAAW,CAACE,SAA7C;;AAEA,UAAI,CAACgC,GAAL,EAAU;AACR,YAAIG,UAAU,CAAChE,GAAf,EAAoB;AAClB,gBAAKkE,gBAAL;AACD;;AAEDJ,QAAAA,WAAW,CAACD,GAAD,CAAX;AACA;AACD;;AAED,UAAII,WAAJ,EAAiB;AACf,2BAAqE,MAAKjC,KAA1E;AAAA,YAAQG,IAAR,gBAAQA,IAAR;AAAA,YAAcgC,MAAd,gBAAcA,MAAd;AAAA,YAAsBnE,GAAtB,gBAAsBA,GAAtB;AAAA,YAA2BiC,QAA3B,gBAA2BA,QAA3B;AAAA,YAAqCK,YAArC,gBAAqCA,YAArC;AAAA,YAAmDJ,MAAnD,gBAAmDA,MAAnD;AAAA,YAA2DkC,KAA3D,gBAA2DA,KAA3D;AAEAN,QAAAA,WAAW,CAACD,GAAD,EAAM;AACfQ,UAAAA,GAAG,EAAE,QADU;AAEflC,UAAAA,IAAI,EAAJA,IAFe;AAGfgC,UAAAA,MAAM,EAANA,MAHe;AAIfjC,UAAAA,MAAM,EAANA,MAJe;AAKfkC,UAAAA,KAAK,EAALA,KALe;AAMfpE,UAAAA,GAAG,EAAHA,GANe;AAOfiC,UAAAA,QAAQ,EAARA,QAPe;AAQfX,UAAAA,GAAG,EAAEgB;AARU,SAAN,CAAX;AAUA;AACD;;AAED,UAAI,CAAC0B,UAAU,CAACM,OAAhB,EAAyB;AACvBR,QAAAA,WAAW,CAACD,GAAD,EAAM;AACfQ,UAAAA,GAAG,EAAE,OADU;AAEf/C,UAAAA,GAAG,EAAE0C,UAAU,CAAChE;AAFD,SAAN,CAAX;AAIA;AACD;;AAED,YAAK8C,QAAL,CAAc;AACZkB,QAAAA,UAAU,kCACLA,UADK;AAERO,UAAAA,SAAS,EAAE;AAFH;AADE,OAAd;AAMD,KAjNkB;AAAA;AAAA,gGAmNA,iBAAOf,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AACjBA,gBAAAA,CAAC,CAACgB,cAAF;;AAEA,sBAAK1B,QAAL,CAAc;AACZkB,kBAAAA,UAAU,kCACL,MAAKhC,KAAL,CAAWgC,UADN;AAERS,oBAAAA,KAAK,EAAE,IAFC;AAGRH,oBAAAA,OAAO,EAAE;AAHD;AADE,iBAAd;;AAQMI,gBAAAA,UAXW,GAWElB,CAAC,CAACC,MAAF,CAASkB,KAAT,CAAe,CAAf,CAXF;AAaXC,gBAAAA,MAbW,GAaF,IAAIC,UAAJ,EAbE;;AAejBD,gBAAAA,MAAM,CAACE,MAAP,GAAgB,YAAM;AACpB,sBAAMC,OAAO,GAAGH,MAAM,CAACI,MAAvB;;AAEA,wBAAKlC,QAAL,CAAc;AACZkB,oBAAAA,UAAU,kCACL,MAAKhC,KAAL,CAAWgC,UADN;AAERhE,sBAAAA,GAAG,EAAE+E,OAFG;AAGRE,sBAAAA,QAAQ,EAAEP,UAAU,CAAChB;AAHb;AADE,mBAAd;AAOD,iBAVD;;AAWAkB,gBAAAA,MAAM,CAACM,aAAP,CAAqBR,UAArB;;AAEA,sBAAK3C,KAAL,CAAWoD,kBAAX,CAA8BC,GAA9B,CAAkC;AAChCV,kBAAAA,UAAU,EAAVA,UADgC;AAEhCW,kBAAAA,IAAI,EAAE,cAAC9D,GAAD,EAAMD,GAAN,EAAc;AAClBxB,oBAAAA,GAAG,CAAC,YAAD,EAAeyB,GAAf,CAAH;;AACA,wBAAIA,GAAJ,EAAS;AACP;AACA+D,sBAAAA,OAAO,CAACxF,GAAR,CAAYyB,GAAZ;;AACA,4BAAKuB,QAAL,CAAc;AACZkB,wBAAAA,UAAU,kCACL,MAAKhC,KAAL,CAAWgC,UADN;AAERO,0BAAAA,SAAS,EAAE,KAFH;AAGRD,0BAAAA,OAAO,EAAE,KAHD;AAIRG,0BAAAA,KAAK,EAAElD;AAJC;AADE,uBAAd;;AAQA;AACD;;AAED,wBAAQyC,UAAR,GAAuB,MAAKhC,KAA5B,CAAQgC,UAAR;AACA,wBAAMnB,QAAQ,GAAGmB,UAAU,IAAIA,UAAU,CAACO,SAAzB,GAAqC,MAAKgB,UAAL,CAAgBC,IAAhB,iDAA2B,IAA3B,CAArC,GAAwEC,SAAzF;;AAEA,0BAAK3C,QAAL,CACE;AACEkB,sBAAAA,UAAU,kCACLA,UADK;AAERO,wBAAAA,SAAS,EAAE,KAFH;AAGRD,wBAAAA,OAAO,EAAE,KAHD;AAIRtE,wBAAAA,GAAG,EAAEsB;AAJG;AADZ,qBADF,EASEuB,QATF;AAWD;AAhC+B,iBAAlC;;AA5BiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAnNA;;AAAA;AAAA;AAAA;AAAA;AAAA,oMAmRA;AAAA;AAAA;AAAA;AAAA;AACjB,oBAAKd,KAAL,CAAWoD,kBAAX,WAAqC,MAAKnD,KAAL,CAAWgC,UAAX,CAAsBhE,GAA3D,EAAgE,UAACuB,GAAD,EAAS;AACvE,oBAAIA,GAAJ,EAAS;AACP;AACA+D,kBAAAA,OAAO,CAACxF,GAAR,CAAYyB,GAAZ;;AACA,wBAAKuB,QAAL,CAAc;AACZkB,oBAAAA,UAAU,kCACL,MAAKhC,KAAL,CAAWgC,UADN;AAERS,sBAAAA,KAAK,EAAElD;AAFC;AADE,mBAAd;AAMD;AACF,eAXD,EADiB,CAcjB;;;AACA,oBAAKuB,QAAL,CAAc;AACZkB,gBAAAA,UAAU,kCACL,MAAKhC,KAAL,CAAWgC,UADN;AAERM,kBAAAA,OAAO,EAAE,KAFD;AAGRtE,kBAAAA,GAAG,EAAE,EAHG;AAIRiF,kBAAAA,QAAQ,EAAE;AAJF;AADE,eAAd;;AAfiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAnRA;AAGjB,QAAQ9C,KAAR,GAAsFJ,KAAtF,CAAQI,IAAR;AAAA,QAAcgC,OAAd,GAAsFpC,KAAtF,CAAcoC,MAAd;AAAA,QAAsB7C,IAAtB,GAAsFS,KAAtF,CAAsBT,GAAtB;AAAA,QAA2BY,OAA3B,GAAsFH,KAAtF,CAA2BG,MAA3B;AAAA,QAAmCwB,KAAnC,GAAsF3B,KAAtF,CAAmC2B,IAAnC;AAAA,QAAyCyB,kBAAzC,GAAsFpD,KAAtF,CAAyCoD,kBAAzC;AAAA,QAA6DnF,IAA7D,GAAsF+B,KAAtF,CAA6D/B,GAA7D;AAAA,QAAkEiC,SAAlE,GAAsFF,KAAtF,CAAkEE,QAAlE;AAAA,QAA4EmC,MAA5E,GAAsFrC,KAAtF,CAA4EqC,KAA5E;AACA,QAAMsB,cAAc,GAAG,CAAAP,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEC,GAApB,MAA2BD,kBAA3B,aAA2BA,kBAA3B,uBAA2BA,kBAAkB,UAA7C,KAAyDzB,KAAI,KAAK,OAAlE,IAA6E,CAACpC,IAArG;AAEA,UAAKU,KAAL,GAAa;AACXG,MAAAA,IAAI,EAAEA,KAAI,IAAI,CADH;AAEXnC,MAAAA,GAAG,EAAEA,IAFM;AAGXiC,MAAAA,QAAQ,EAAEA,SAHC;AAIXK,MAAAA,YAAY,EAAEhB,IAJH;AAKX6C,MAAAA,MAAM,EAAEA,OAAM,IAAI,GALP;AAMXf,MAAAA,OAAO,EAAE,KANE;AAOXlB,MAAAA,MAAM,EAAEA,OAAM,IAAI,CAPP;AAQXkC,MAAAA,KAAK,EAAEA,MAAK,IAAI,GARL;AASX;AACAL,MAAAA,QAAQ,EAAE2B,cAAc,GAAG/D,WAAW,CAACC,UAAf,GAA4BD,WAAW,CAACE,SAVrD;AAWXmC,MAAAA,UAAU,EAAE;AACVS,QAAAA,KAAK,EAAE,IADG;AAEVH,QAAAA,OAAO,EAAE,KAFC;AAGVC,QAAAA,SAAS,EAAE,KAHD;AAIVvE,QAAAA,GAAG,EAAE,EAJK;AAKViF,QAAAA,QAAQ,EAAE;AALA;AAXD,KAAb;AANiB;AAyBlB;;;;WAED,6BAAoB;AAClB,UAAI,KAAKlD,KAAL,CAAW/B,GAAf,EAAoB;AAClB,aAAK2F,SAAL,CAAe;AACblC,UAAAA,MAAM,EAAE;AACNP,YAAAA,KAAK,EAAE,KAAKnB,KAAL,CAAW/B;AADZ;AADK,SAAf;AAKD;AACF;;;WAyQD,kBAAS;AAAA;;AACP,wBAAyE,KAAK+B,KAA9E;AAAA,UAAQ6D,OAAR,eAAQA,OAAR;AAAA,UAAiBC,IAAjB,eAAiBA,IAAjB;AAAA,UAAuBC,aAAvB,eAAuBA,aAAvB;AAAA,UAAsCpC,IAAtC,eAAsCA,IAAtC;AAAA,UAA4CqC,IAA5C,eAA4CA,IAA5C;AAAA,UAAkDZ,kBAAlD,eAAkDA,kBAAlD;AACA,yBAYI,KAAKnD,KAZT;AAAA,UACEG,IADF,gBACEA,IADF;AAAA,UAEEgC,MAFF,gBAEEA,MAFF;AAAA,UAGEf,OAHF,gBAGEA,OAHF;AAAA,UAIElB,MAJF,gBAIEA,MAJF;AAAA,UAKEkC,KALF,gBAKEA,KALF;AAAA,UAMEpE,GANF,gBAMEA,GANF;AAAA,UAOEiF,QAPF,gBAOEA,QAPF;AAAA,UAQE3C,YARF,gBAQEA,YARF;AAAA,UASES,QATF,gBASEA,QATF;AAAA,UAUEgB,QAVF,gBAUEA,QAVF;AAAA,UAWEC,UAXF,gBAWEA,UAXF;AAaA,UAAM5B,SAAS,GAAGrC,eAAe,CAACC,GAAD,CAAjC;AACA,UAAMiE,WAAW,GAAGF,QAAQ,KAAKpC,WAAW,CAACE,SAA7C;AACA,UAAMmE,aAAa,GAAGjC,QAAQ,KAAKpC,WAAW,CAACC,UAA/C;AACA,UAAMqE,gBAAgB,GAAGhC,WAAW,GAChCb,OAAO,IAAIpD,GAAG,KAAK,IAAnB,IAA2BA,GAAG,KAAKyF,SADH,GAEhC,CAACzB,UAAU,CAAChE,GAAZ,IAAmBgE,UAAU,CAACO,SAFlC;AAGA,UAAMmB,cAAc,GAAG,CAAAP,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEC,GAApB,MAA2BD,kBAA3B,aAA2BA,kBAA3B,uBAA2BA,kBAAkB,UAA7C,KAAyDzB,IAAI,KAAK,OAAzF;AAEA,0BACE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAE;AACPwC,UAAAA,KAAK,EAAEN,OAAO,CAACM;AADR,SADX;AAIE,QAAA,aAAa,EAAEJ,aAJjB;AAKE,QAAA,IAAI,EAAED,IALR;AAME,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACN,UAAL,CAAgB,KAAhB,CAAN;AAAA,SANX;AAOE,2BAAgB;AAPlB,sBASE,gCAAC,uBAAD;AAAa,QAAA,EAAE,EAAC;AAAhB,oBAA4C/D,OAAO,CAACkC,IAAD,CAAnD,CATF,eAUE,gCAAC,yBAAD,qBACE,0DACE;AAAK,QAAA,SAAS,EAAEkC,OAAO,CAACO;AAAxB,sBACE,gCAAC,gBAAD;AACE,QAAA,cAAc,EAAC,SADjB;AAEE,QAAA,KAAK,EAAEpC,QAFT;AAGE,QAAA,QAAQ,EAAE,kBAACqC,KAAD,EAAQlD,KAAR,EAAkB;AAC1B,UAAA,MAAI,CAACJ,QAAL,CAAc;AAAEiB,YAAAA,QAAQ,EAAEb;AAAZ,WAAd;AACD;AALH,SAOGwC,cAAc,gBAAG,gCAAC,eAAD;AAAQ,QAAA,KAAK,EAAE/D,WAAW,CAACC,UAA3B;AAAuC,QAAA,KAAK,EAAC;AAA7C,QAAH,GAAmE,IAPpF,eAQE,gCAAC,eAAD;AACE,QAAA,KAAK,EAAED,WAAW,CAACE,SADrB;AAEE,QAAA,KAAK,EAAE6B,IAAI,KAAK,OAAT,GAAmB,4CAAnB,GAAkE;AAF3E,QARF,CADF,CADF,EAgBGO,WAAW,iBACV,0DACE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,KAAK,EAAEb,OAFT;AAGE,QAAA,UAAU,EAAEA,OAAO,GAAG,aAAH,GAAmB,EAHxC;AAIE,QAAA,MAAM,EAAC,OAJT;AAKE,QAAA,EAAE,EAAC,MALL;AAME,QAAA,KAAK,EAAC,KANR;AAOE,QAAA,WAAW,yBAAkBM,IAAlB,QAPb;AAQE,QAAA,IAAI,EAAC,MARP;AASE,QAAA,QAAQ,EAAE,KAAKiC,SATjB;AAUE,QAAA,KAAK,EAAE3F,GAVT;AAWE,QAAA,SAAS;AAXX,QADF,EAcG0D,IAAI,KAAK,OAAT,iBACC,gCAAC,yBAAD;AACE,QAAA,OAAO,EAAE;AACP2C,UAAAA,IAAI,EAAET,OAAO,CAACU;AADP;AADX,sBAKE,gCAAC,6BAAD,2BALF,eAME,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,MAAM,EAAC,OAFT;AAGE,QAAA,EAAE,EAAC,OAHL;AAIE,QAAA,KAAK,EAAC,OAJR;AAKE,QAAA,IAAI,EAAC,QALP;AAME,QAAA,WAAW,EAAC,OANd;AAOE,QAAA,KAAK,EAAElC,KAPT;AAQE,QAAA,QAAQ,EAAE,KAAKmC,aAAL,CAAmB,OAAnB;AARZ,QANF,eAgBE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,MAAM,EAAC,OAFT;AAGE,QAAA,EAAE,EAAC,QAHL;AAIE,QAAA,KAAK,EAAC,QAJR;AAKE,QAAA,IAAI,EAAC,QALP;AAME,QAAA,WAAW,EAAC,QANd;AAOE,QAAA,KAAK,EAAEpC,MAPT;AAQE,QAAA,QAAQ,EAAE,KAAKoC,aAAL,CAAmB,QAAnB;AARZ,QAhBF,CAfJ,EA2CGjE,YAAY,iBACX;AACE,QAAA,KAAK,EAAE8B,KADT;AAEE,QAAA,MAAM,EAAED,MAFV;AAGE,QAAA,GAAG,EAAE7B,YAHP;AAIE,QAAA,WAAW,EAAC,GAJd;AAKE,QAAA,KAAK,EAAC,0FALR;AAME,QAAA,eAAe;AANjB,QA5CJ,EAqDGoB,IAAI,KAAK,OAAT,KAAqBpB,YAAY,IAAIS,QAArC,KAAkD,CAACK,OAAnD,iBACC,gCAAC,iBAAD,CAAO,QAAP,qBACE,gCAAC,yBAAD;AACE,QAAA,OAAO,EAAE;AACPiD,UAAAA,IAAI,EAAET,OAAO,CAACU;AADP;AADX,sBAKE,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,MAAM,EAAC,OAFT;AAGE,QAAA,EAAE,EAAC,QAHL;AAIE,QAAA,KAAK,EAAC,QAJR;AAKE,QAAA,IAAI,EAAC,QALP;AAME,QAAA,WAAW,EAAC,QANd;AAOE,QAAA,KAAK,EAAEpE,MAPT;AAQE,QAAA,QAAQ,EAAE,KAAKqE,aAAL,CAAmB,QAAnB;AARZ,QALF,EAeGnE,SAAS,iBACR,gCAAC,qBAAD;AACE,QAAA,SAAS,MADX;AAEE,QAAA,MAAM,EAAC,OAFT;AAGE,QAAA,EAAE,EAAC,MAHL;AAIE,QAAA,KAAK,EAAC,MAJR;AAKE,QAAA,IAAI,EAAC,QALP;AAME,QAAA,WAAW,EAAC,MANd;AAOE,QAAA,KAAK,EAAED,IAPT;AAQE,QAAA,QAAQ,EAAE,KAAKoE,aAAL,CAAmB,MAAnB;AARZ,QAhBJ,CADF,CAtDJ,CAjBJ,EAwGGP,aAAa,iBACZ;AAAK,QAAA,SAAS,EAAEJ,OAAO,CAACY;AAAxB,sBACE,6CACGxC,UAAU,CAAChE,GAAX,gBACC,+EACE;AAAK,QAAA,SAAS,EAAE4F,OAAO,CAACO;AAAxB,sBACE;AAAO,QAAA,QAAQ,EAAC,UAAhB;AAA2B,QAAA,YAAY,EAAC;AAAxC,sBACE;AAAQ,QAAA,IAAI,EAAElB,QAAd;AAAwB,QAAA,GAAG,EAAEjB,UAAU,CAAChE;AAAxC,QADF,CADF,eAIE,gCAAC,sBAAD;AAAY,sBAAW,QAAvB;AAAgC,QAAA,SAAS,EAAE4F,OAAO,CAACa,UAAnD;AAA+D,QAAA,OAAO,EAAE,KAAKvC;AAA7E,sBACE,gCAAC,kBAAD,OADF,CAJF,CADF,EASG,CAACF,UAAU,CAACO,SAAZ,IAAyBP,UAAU,CAACM,OAApC,gBACC,gCAAC,sBAAD;AAAY,QAAA,OAAO,EAAC;AAApB,sBADD,GAEG,IAXN,EAYGN,UAAU,CAACO,SAAX,gBACC,gCAAC,sBAAD;AAAY,QAAA,OAAO,EAAC;AAApB,gEADD,GAIG,IAhBN,CADD,GAmBG,CAACP,UAAU,CAACM,OAAZ,gBACF;AAAO,QAAA,MAAM,EAAC,SAAd;AAAwB,QAAA,SAAS,EAAEsB,OAAO,CAACc,KAA3C;AAAkD,QAAA,QAAQ,EAAE,KAAKC,gBAAjE;AAAmF,QAAA,IAAI,EAAC;AAAxF,QADE,GAEA,IAtBN,EAuBG,CAAC,CAAC3C,UAAU,CAACS,KAAb,iBACC,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAEmB,OAAO,CAACnB,KAA/B;AAAsC,QAAA,OAAO,EAAC;AAA9C,SACGT,UAAU,CAACS,KADd,CAxBJ,CADF,CAzGJ,CADF,CAVF,eAsJE,gCAAC,yBAAD,qBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACc,UAAL,CAAgB,KAAhB,CAAN;AAAA,SAAjB;AAA+C,QAAA,KAAK,EAAC;AAArD,kBADF,eAIE,gCAAC,kBAAD;AAAQ,QAAA,QAAQ,EAAEU,gBAAlB;AAAoC,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACV,UAAL,CAAgB,IAAhB,CAAN;AAAA,SAA7C;AAA0E,QAAA,KAAK,EAAC;AAAhF,SACGQ,IAAI,GAAG,QAAH,GAAc,QADrB,CAJF,CAtJF,CADF;AAiKD;;;EAzf8Ba,kBAAMC,S;;;iCAA1B/E,W,eACQ;AACjB8D,EAAAA,OAAO,EAAEkB,sBAAUC,MAAV,CAAiBC,UADT;AAEjBnB,EAAAA,IAAI,EAAEiB,sBAAUG,IAFC;AAGjBlB,EAAAA,IAAI,EAAEe,sBAAUG,IAHC;AAIjBnB,EAAAA,aAAa,EAAEgB,sBAAUG,IAJR;AAKjBnD,EAAAA,WAAW,EAAEgD,sBAAUI,IALN;AAMjB/B,EAAAA,kBAAkB,EAAE2B,sBAAUK,KAAV,CAAgB;AAClC/B,IAAAA,GAAG,EAAE0B,sBAAUI,IADmB;AAElC,cAAQJ,sBAAUI;AAFgB,GAAhB,CANH;AAUjBxD,EAAAA,IAAI,EAAEoD,sBAAUM,MAVC;AAWjB9F,EAAAA,GAAG,EAAEwF,sBAAUM,MAXE;AAYjBpH,EAAAA,GAAG,EAAE8G,sBAAUM,MAZE;AAajBnF,EAAAA,QAAQ,EAAE6E,sBAAUM,MAbH;AAcjBlF,EAAAA,MAAM,EAAE4E,sBAAUO,MAdD;AAejBlF,EAAAA,IAAI,EAAE2E,sBAAUO,MAfC;AAgBjBlD,EAAAA,MAAM,EAAE2C,sBAAUO,MAhBD;AAiBjBjD,EAAAA,KAAK,EAAE0C,sBAAUO;AAjBA,C;;AA2frB,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBrB,IAAAA,KAAK,EAAE;AACLsB,MAAAA,QAAQ,EAAE;AADL,KADkB;AAIzBlB,IAAAA,UAAU,EAAE;AACVmB,MAAAA,OAAO,EAAE;AADC,KAJa;AAOzBtB,IAAAA,GAAG,EAAE;AACHuB,MAAAA,OAAO,EAAE,MADN;AAEHC,MAAAA,aAAa,EAAE;AAFZ,KAPoB;AAWzBC,IAAAA,OAAO,EAAE;AACPC,MAAAA,WAAW,EAAEN,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,GAD3B;AAEPC,MAAAA,MAAM,EAAE;AAFD,KAXgB;AAezBC,IAAAA,MAAM,EAAE;AACNC,MAAAA,KAAK,EAAEA,gBAAMC,OAAN,EADD;AAENC,MAAAA,YAAY,sBAAeF,gBAAMC,OAAN,EAAf;AAFN,KAfiB;AAmBzB3B,IAAAA,WAAW,EAAE;AACX6B,MAAAA,SAAS,EAAEd,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AADrB,KAnBY;AAsBzBtD,IAAAA,KAAK,EAAE;AACL4D,MAAAA,SAAS,EAAEd,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB,GAD3B;AAELG,MAAAA,KAAK,EAAEX,KAAK,CAACe,OAAN,CAAc7D,KAAd,CAAoB8D;AAFtB,KAtBkB;AA0BzB9B,IAAAA,UAAU,EAAE;AACV+B,MAAAA,UAAU,EAAEjB,KAAK,CAACO,OAAN,CAAcC,IAAd,GAAqB;AADvB;AA1Ba,GAAZ;AAAA,CAAf;;eA+Be,wBAAWT,MAAX,EAAmBxF,WAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { color } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport MuiTabs from '@material-ui/core/Tabs';\nimport MuiTab from '@material-ui/core/Tab';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionDelete from '@material-ui/icons/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 = /^(?: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\nexport class MediaDialog extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\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 { classes, open, disablePortal, type, edit, uploadSoundSupport } = this.props;\n const {\n ends,\n height,\n invalid,\n starts,\n width,\n url,\n mimeType,\n formattedUrl,\n updating,\n tabValue,\n 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 <Dialog\n classes={{\n paper: classes.paper,\n }}\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 <div className={classes.row}>\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 </div>\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 <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\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 </DialogContent>\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 <DialogContent\n classes={{\n root: classes.properties,\n }}\n >\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 </DialogContent>\n </React.Fragment>\n )}\n </div>\n )}\n {isUploadMedia && (\n <div className={classes.uploadInput}>\n <div>\n {fileUpload.url ? (\n <>\n <div className={classes.row}>\n <audio controls=\"controls\" controlsList=\"nodownload\">\n <source type={mimeType} src={fileUpload.url} />\n </audio>\n <IconButton aria-label=\"delete\" className={classes.deleteIcon} onClick={this.handleRemoveFile}>\n <ActionDelete />\n </IconButton>\n </div>\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 <input accept=\"audio/*\" className={classes.input} onChange={this.handleUploadFile} type=\"file\" />\n ) : null}\n {!!fileUpload.error && (\n <Typography className={classes.error} variant=\"caption\">\n {fileUpload.error}\n </Typography>\n )}\n </div>\n </div>\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 </Dialog>\n );\n }\n}\n\nconst styles = (theme) => ({\n paper: {\n minWidth: '500px',\n },\n properties: {\n padding: 0,\n },\n row: {\n display: 'flex',\n flexDirection: 'space-between',\n },\n rowItem: {\n marginRight: theme.spacing.unit * 1.5,\n cursor: 'pointer',\n },\n active: {\n color: color.primary(),\n borderBottom: `2px solid ${color.primary()}`,\n },\n uploadInput: {\n marginTop: theme.spacing.unit * 1.5,\n },\n error: {\n marginTop: theme.spacing.unit * 1.5,\n color: theme.palette.error.main,\n },\n deleteIcon: {\n marginLeft: theme.spacing.unit * 1.5,\n },\n});\n\nexport default withStyles(styles)(MediaDialog);\n"],"file":"MediaDialog.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media/MediaToolbar.jsx"],"names":["useStyles","theme","root","position","bottom","left","width","background","palette","common","white","display","padding","boxShadow","editContainer","cursor","flex","border","black","textAlign","borderWidth","marginRight","paddingRight","removeContainer","MediaToolbar","props","classes","hideEdit","onEdit","onRemove","React","Component","PropTypes","object","func","bool"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAEA,IAAMA,SAAS,GAAG,wBAAW,UAACC,KAAD;AAAA,SAAY;AACvCC,IAAAA,IAAI,EAAE;AACJC,MAAAA,QAAQ,EAAE,UADN;AAEJC,MAAAA,MAAM,EAAE,KAFJ;AAGJC,MAAAA,IAAI,EAAE,CAHF;AAIJC,MAAAA,KAAK,EAAE,MAJH;AAKJC,MAAAA,UAAU,EAAEN,KAAK,CAACO,OAAN,CAAcC,MAAd,CAAqBC,KAL7B;AAMJC,MAAAA,OAAO,EAAE,aANL;AAOJC,MAAAA,OAAO,EAAE,KAPL;AAQJC,MAAAA,SAAS,EAAE;AARP,KADiC;AAWvCC,IAAAA,aAAa,EAAE;AACbC,MAAAA,MAAM,EAAE,SADK;AAEbC,MAAAA,IAAI,EAAE,CAFO;AAGbC,MAAAA,MAAM,kBAAWhB,KAAK,CAACO,OAAN,CAAcC,MAAd,CAAqBS,KAAhC,CAHO;AAIbC,MAAAA,SAAS,EAAE,OAJE;AAKbC,MAAAA,WAAW,EAAE,WALA;AAMbC,MAAAA,WAAW,EAAE,KANA;AAObC,MAAAA,YAAY,EAAE;AAPD,KAXwB;AAoBvCC,IAAAA,eAAe,EAAE;AACfR,MAAAA,MAAM,EAAE;AADO;AApBsB,GAAZ;AAAA,CAAX,CAAlB;;IAyBMS,Y;;;;;;;;;;;;WAQJ,kBAAS;AACP,wBAAgD,KAAKC,KAArD;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,QAAjB,eAAiBA,QAAjB;AAAA,UAA2BC,MAA3B,eAA2BA,MAA3B;AAAA,UAAmCC,QAAnC,eAAmCA,QAAnC;AAEA,0BACE;AAAM,QAAA,SAAS,EAAEH,OAAO,CAACxB;AAAzB,SACGyB,QAAQ,GAAG,IAAH,gBACP;AAAM,QAAA,SAAS,EAAED,OAAO,CAACZ,aAAzB;AAAwC,QAAA,OAAO,EAAEc;AAAjD,yBAFJ,eAME;AAAM,QAAA,SAAS,EAAEF,OAAO,CAACH,eAAzB;AAA0C,QAAA,OAAO,EAAEM;AAAnD,kBANF,CADF;AAYD;;;EAvBwBC,kBAAMC,S;;iCAA3BP,Y,eACe;AACjBE,EAAAA,OAAO,EAAEM,sBAAUC,MADF;AAEjBL,EAAAA,MAAM,EAAEI,sBAAUE,IAFD;AAGjBP,EAAAA,QAAQ,EAAEK,sBAAUG,IAHH;AAIjBN,EAAAA,QAAQ,EAAEG,sBAAUE;AAJH,C;;eAyBNlC,SAAS,CAACwB,YAAD,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst useStyles = withStyles((theme) => ({\n root: {\n position: 'relative',\n bottom: '5px',\n left: 0,\n width: '100%',\n background: theme.palette.common.white,\n display: 'inline-flex',\n padding: '5px',\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)',\n },\n editContainer: {\n cursor: 'pointer',\n flex: 3,\n border: `solid ${theme.palette.common.black}`,\n textAlign: 'right',\n borderWidth: '0 2px 0 0',\n marginRight: '5px',\n paddingRight: '5px',\n },\n removeContainer: {\n cursor: 'pointer',\n },\n}));\n\nclass MediaToolbar extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n onEdit: PropTypes.func,\n hideEdit: PropTypes.bool,\n onRemove: PropTypes.func,\n };\n\n render() {\n const { classes, hideEdit, onEdit, onRemove } = this.props;\n\n return (\n <span className={classes.root}>\n {hideEdit ? null : (\n <span className={classes.editContainer} onClick={onEdit}>\n Edit Settings\n </span>\n )}\n <span className={classes.removeContainer} onClick={onRemove}>\n Remove\n </span>\n </span>\n );\n }\n}\n\nexport default useStyles(MediaToolbar);\n"],"file":"MediaToolbar.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media/MediaWrapper.jsx"],"names":["useStyles","root","position","editor","display","overflow","MediaWrapper","props","classes","children","width","rest","React","Component","PropTypes","object","array","bool","oneOfType","number","string"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,SAAS,GAAG,wBAAW;AAAA,SAAO;AAClCC,IAAAA,IAAI,EAAE;AACJC,MAAAA,QAAQ,EAAE;AADN,KAD4B;AAIlCC,IAAAA,MAAM,EAAE;AACNC,MAAAA,OAAO,EAAE,cADH;AAENC,MAAAA,QAAQ,EAAE;AAFJ;AAJ0B,GAAP;AAAA,CAAX,CAAlB;;IAUMC,Y;;;;;;;;;;;;WAQJ,kBAAS;AACP,wBAAsD,KAAKC,KAA3D;AAAA,UAAQJ,MAAR,eAAQA,MAAR;AAAA,UAAgBK,OAAhB,eAAgBA,OAAhB;AAAA,UAAyBC,QAAzB,eAAyBA,QAAzB;AAAA,UAAmCC,KAAnC,eAAmCA,KAAnC;AAAA,UAA6CC,IAA7C;AAEA,0BACE;AACE,QAAA,SAAS,EAAE,4BAAWH,OAAO,CAACP,IAAnB,uCACRO,OAAO,CAACL,MADA,EACSA,MADT;AADb,SAIMQ,IAJN;AAKE,QAAA,KAAK,EAAE;AACLD,UAAAA,KAAK,EAAEA,KAAK,IAAI;AADX;AALT,UASGD,QATH,CADF;AAaD;;;EAxBwBG,kBAAMC,S;;iCAA3BP,Y,eACe;AACjBE,EAAAA,OAAO,EAAEM,sBAAUC,MADF;AAEjBN,EAAAA,QAAQ,EAAEK,sBAAUE,KAFH;AAGjBb,EAAAA,MAAM,EAAEW,sBAAUG,IAHD;AAIjBP,EAAAA,KAAK,EAAEI,sBAAUI,SAAV,CAAoB,CAACJ,sBAAUK,MAAX,EAAmBL,sBAAUM,MAA7B,CAApB;AAJU,C;;eA0BNpB,SAAS,CAACM,YAAD,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst useStyles = withStyles(() => ({\n root: {\n position: 'relative',\n },\n editor: {\n display: 'inline-block',\n overflow: 'hidden',\n },\n}));\n\nclass MediaWrapper extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n children: PropTypes.array,\n editor: PropTypes.bool,\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n };\n\n render() {\n const { editor, classes, children, width, ...rest } = this.props;\n\n return (\n <span\n className={classNames(classes.root, {\n [classes.editor]: editor,\n })}\n {...rest}\n style={{\n width: width || 300,\n }}\n >\n {children}\n </span>\n );\n }\n}\n\nexport default useStyles(MediaWrapper);\n"],"file":"MediaWrapper.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/respArea/DragInTheBlank/DragInTheBlank.jsx"],"names":["onValueChange","editor","node","pos","choice","tr","state","setNodeMarkup","undefined","attrs","isDone","view","dispatch","onRemoveResponse","DragDrop","props","getPos","options","selected","attributes","inTable","display","minHeight","minWidth","position","margin","cursor","id","duplicates","propTypes","PropTypes","object","data","n","nodeProps","opts"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport DragDropTile from './choice';\nimport omit from 'lodash/omit';\n\nexport const onValueChange = (editor, node, pos, choice) => {\n const { tr } = editor.state;\n\n // Merge old and new attributes\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n ...choice,\n });\n tr.isDone = true;\n editor.view.dispatch(tr);\n};\n\nexport const onRemoveResponse = (editor, node, pos) => {\n const { tr } = editor.state;\n\n // Merge old and new attributes\n tr.setNodeMarkup(pos, undefined, omit(node.attrs, ['value', 'id']));\n tr.isDone = true;\n editor.view.dispatch(tr);\n};\n\nconst DragDrop = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { inTable } = attributes;\n const pos = getPos();\n\n // console.log({nodeProps.children})\n return (\n <NodeViewWrapper className=\"drag-in-the-blank\" data-selected={selected}>\n <span\n {...attributes}\n style={{\n display: 'inline-flex',\n minHeight: '50px',\n minWidth: '178px',\n position: 'relative',\n margin: inTable ? '10px' : '0 10px',\n cursor: 'pointer',\n }}\n >\n <DragDropTile\n n={attributes}\n dragKey={attributes.id}\n targetId=\"0\"\n value={attributes}\n duplicates={options.duplicates}\n onChange={(choice) => onValueChange(editor, node, pos, choice)}\n removeResponse={() => onRemoveResponse(editor, node, pos)}\n ></DragDropTile>\n </span>\n </NodeViewWrapper>\n );\n};\n\nDragDrop.propTypes = {\n attributes: PropTypes.object,\n data: PropTypes.object,\n n: PropTypes.object,\n nodeProps: PropTypes.object,\n opts: PropTypes.object,\n};\n\nexport default DragDrop;\n"],"file":"DragInTheBlank.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/respArea/DragInTheBlank/choice.jsx"],"names":["useStyles","theme","content","border","palette","primary","main","fontSize","chip","minWidth","correct","color","incorrect","error","selected","primaryDark","BlankContent","props","handleClick","bind","state","hoveredElementSize","document","addEventListener","removeEventListener","event","classes","elementRef","className","contains","target","prevProps","isOver","node","width","offsetWidth","height","offsetHeight","prevState","snapshot","renderMath","setState","n","children","isDragging","dragItem","value","label","finalLabel","hasGrip","isPreview","ref","display","minHeight","background","defaults","BORDER_LIGHT","WHITE","BORDER_DARK","boxSizing","borderRadius","overflow","position","padding","undefined","key","top","left","__html","React","Component","PropTypes","object","func","bool","StyledBlankContent","connectedBlankContent","connectDropTarget","connectDragSource","dragContent","dragEl","over","tileTarget","drop","monitor","draggedItem","getItem","shouldDrop","index","onChange","dropped","canDrop","instanceId","DropTile","connect","dropTarget","shallow","tileSource","canDrag","disabled","beginDrag","id","targetId","fromChoice","endDrag","dropResult","getDropResult","duplicates","removeResponse","dragSource"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport isUndefined from 'lodash/isUndefined';\nimport { DragSource, DropTarget } from '@pie-lib/drag';\nimport { color } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { GripIcon } from '../../icons/RespArea';\n\nconst useStyles = withStyles((theme) => ({\n content: {\n border: `solid 0px ${theme.palette.primary.main}`,\n '& mjx-frac': {\n fontSize: '120% !important',\n },\n },\n chip: {\n minWidth: '90px',\n },\n correct: {\n border: `solid 1px ${color.correct()}`,\n },\n incorrect: {\n border: `solid 1px ${theme.palette.error.main}`,\n },\n selected: {\n border: `2px solid ${color.primaryDark()} !important`,\n },\n}));\n\nexport class BlankContent extends React.Component {\n static propTypes = {\n n: PropTypes.object,\n children: PropTypes.func,\n isDragging: PropTypes.bool,\n isOver: PropTypes.bool,\n dragItem: PropTypes.object,\n value: PropTypes.object,\n classes: PropTypes.object,\n };\n\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.state = { hoveredElementSize: null };\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleClick);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleClick);\n }\n\n handleClick(event) {\n const { classes } = this.props;\n\n if (this.elementRef) {\n this.elementRef.className = this.elementRef.contains(event.target) ? classes.selected : '';\n }\n }\n\n getSnapshotBeforeUpdate(prevProps) {\n if (!prevProps.isOver && this.props.isOver && this.elementRef) {\n const node = this.elementRef;\n return { width: node.offsetWidth, height: node.offsetHeight };\n }\n return null;\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n if (this.elementRef && typeof renderMath === 'function') {\n renderMath(this.elementRef);\n }\n\n if (\n snapshot &&\n (!this.state.hoveredElementSize ||\n this.state.hoveredElementSize.width !== snapshot.width ||\n this.state.hoveredElementSize.height !== snapshot.height)\n ) {\n this.setState({ hoveredElementSize: snapshot });\n return;\n }\n\n if (prevProps.isOver && !this.props.isOver && this.state.hoveredElementSize) {\n this.setState({ hoveredElementSize: null });\n }\n }\n\n render() {\n const { n, children, isDragging, dragItem, isOver, value } = this.props;\n const { hoveredElementSize } = this.state;\n\n const label = dragItem && isOver ? dragItem.value.value : value.value || '\\u00A0';\n const finalLabel = isDragging ? '\\u00A0' : label;\n const hasGrip = finalLabel !== '\\u00A0';\n const isPreview = dragItem && isOver;\n\n return (\n <div\n ref={(ref) => (this.elementRef = ref)}\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n minHeight: '36px',\n background: isPreview ? `${color.defaults.BORDER_LIGHT}` : `${color.defaults.WHITE}`,\n border: isPreview ? `1px solid ${color.defaults.BORDER_DARK}` : `1px solid ${color.defaults.BORDER_LIGHT}`,\n boxSizing: 'border-box',\n borderRadius: '3px',\n overflow: 'hidden',\n position: 'relative',\n padding: '8px 8px 8px 35px',\n width: hoveredElementSize ? hoveredElementSize.width : undefined,\n height: hoveredElementSize ? hoveredElementSize.height : undefined,\n }}\n data-key={n.key}\n contentEditable={false}\n >\n {hasGrip && (\n <GripIcon\n style={{\n position: 'absolute',\n top: '6px',\n left: '15px',\n color: '#9B9B9B',\n }}\n contentEditable={false}\n />\n )}\n <span\n dangerouslySetInnerHTML={{\n __html: finalLabel,\n }}\n />\n {children}\n </div>\n );\n }\n}\n\nconst StyledBlankContent = useStyles(BlankContent);\n\nconst connectedBlankContent = useStyles(({ connectDropTarget, connectDragSource, ...props }) => {\n const { classes, isOver, value } = props;\n const dragContent = <StyledBlankContent {...props} />;\n const dragEl = !value ? dragContent : connectDragSource(<span>{dragContent}</span>);\n const content = <span className={classnames(classes.content, isOver && classes.over)}>{dragEl}</span>;\n\n return connectDropTarget ? connectDropTarget(content) : content;\n});\n\nexport const tileTarget = {\n drop(props, monitor) {\n const draggedItem = monitor.getItem();\n const shouldDrop =\n isUndefined(draggedItem.value.index) ||\n isUndefined(props.value.index) ||\n draggedItem.value.index !== props.value.index;\n\n if (shouldDrop) {\n props.onChange(draggedItem.value);\n }\n\n return {\n dropped: shouldDrop,\n };\n },\n canDrop(props, monitor) {\n const draggedItem = monitor.getItem();\n\n return draggedItem.instanceId === props.instanceId;\n },\n};\n\nconst DropTile = DropTarget('drag-in-the-blank-choice', tileTarget, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver({ shallow: true }),\n dragItem: monitor.getItem(),\n}))(connectedBlankContent);\n\nexport const tileSource = {\n canDrag(props) {\n return !props.disabled && !!props.value;\n },\n beginDrag(props) {\n return {\n id: props.targetId,\n value: props.value,\n instanceId: props.instanceId,\n fromChoice: true,\n };\n },\n endDrag(props, monitor) {\n // this will be null if it did not drop\n const dropResult = monitor.getDropResult();\n\n if (!dropResult || (dropResult.dropped && !props.duplicates)) {\n const draggedItem = monitor.getItem();\n\n if (draggedItem.fromChoice) {\n props.removeResponse(draggedItem.value);\n }\n }\n },\n};\n\nexport default DragSource('drag-in-the-blank-choice', tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging(),\n}))(DropTile);\n"],"file":"choice.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/respArea/ExplicitConstructedResponse.jsx"],"names":["ExplicitConstructedResponse","props","editor","node","getPos","options","selected","attributes","attrs","value","respAreaToolbar","errorFn","error","pos","showToolbar","setShowToolbar","EcrToolbar","toolbarRef","errorValue","respIndex","parseInt","index","handleDone","newLatex","updateAttributes","latex","commands","focus","selection","state","onlyThisNodeSelected","from","nodeSize","to","handleClickOutside","event","current","contains","target","closest","document","addEventListener","removeEventListener","display","minHeight","position","cursor","width","height","backgroundColor","border","boxSizing","borderRadius","overflow","padding","margin","minWidth","visibility","__html","zIndex","propTypes","PropTypes","object","any","string","isFocused","bool"],"mappings":"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","sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport PropTypes from 'prop-types';\n\nconst ExplicitConstructedResponse = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value } = attributes;\n const { respAreaToolbar, error: errorFn } = options;\n const pos = getPos();\n const [showToolbar, setShowToolbar] = useState(false);\n const EcrToolbar = respAreaToolbar(node, editor, () => {});\n const toolbarRef = useRef(null);\n\n let error;\n\n if (errorFn) {\n const errorValue = errorFn();\n const respIndex = parseInt(attributes.index, 10);\n\n error = !!errorValue?.[respIndex]?.[0];\n }\n\n const handleDone = (newLatex) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n editor.commands.focus();\n };\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 const handleClickOutside = (event) => {\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n setShowToolbar(false);\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar]);\n\n return (\n <NodeViewWrapper\n className=\"drag-in-the-blank\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n minHeight: '55px',\n position: 'relative',\n cursor: 'pointer',\n }}\n >\n <div\n {...attributes}\n style={{\n display: 'inline-flex',\n width: '100%',\n minHeight: '46px',\n height: '46px',\n backgroundColor: '#FFF',\n border: `1px solid ${error ? 'red' : '#C0C3CF'}`,\n boxSizing: 'border-box',\n borderRadius: '4px',\n overflow: 'hidden',\n padding: '12px 21px',\n margin: '0 4px',\n minWidth: '178px',\n visibility: showToolbar ? 'hidden' : 'visible',\n }}\n onClick={() => setShowToolbar(true)}\n dangerouslySetInnerHTML={{\n __html: value || '<div>&nbsp;</div>',\n }}\n />\n {showToolbar && (\n <div ref={toolbarRef} className=\"absolute z-50 bg-white shadow-lg rounded p-2\" style={{ zIndex: 1 }}>\n <EcrToolbar />\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nExplicitConstructedResponse.propTypes = {\n attributes: PropTypes.object,\n error: PropTypes.any,\n value: PropTypes.string,\n isFocused: PropTypes.bool,\n};\n\nexport default ExplicitConstructedResponse;\n"],"file":"ExplicitConstructedResponse.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/respArea/InlineDropdown.jsx"],"names":["InlineDropdown","props","editor","node","getPos","options","selected","attributes","attrs","value","error","html","toolbarRef","showToolbar","setShowToolbar","top","left","position","setPosition","InlineDropdownToolbar","respAreaToolbar","selection","state","onlyThisNodeSelected","from","nodeSize","to","bodyRect","document","body","getBoundingClientRect","start","view","coordsAtPos","Math","abs","handleClickOutside","event","current","contains","target","closest","addEventListener","removeEventListener","display","height","margin","cursor","minWidth","background","border","boxSizing","borderRadius","alignItems","flex","overflow","padding","whiteSpace","textOverflow","verticalAlign","__html","right","ReactDOM","createPortal","zIndex","propTypes","PropTypes","object","selectedItem","oneOfType","string"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { Chevron } from '../icons/RespArea';\nimport ReactDOM from \"react-dom\";\nimport { MathToolbar } from \"@pie-lib/math-toolbar\";\n\nconst InlineDropdown = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, error } = attributes;\n // TODO: Investigate\n // Needed because items with values inside have different positioning for some reason\n const html = value || '<div>&nbsp</div>';\n const toolbarRef = useRef(null);\n const [showToolbar, setShowToolbar] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const InlineDropdownToolbar = options.respAreaToolbar(node, editor, () => {});\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 // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n setShowToolbar(false);\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar]);\n\n return (\n <NodeViewWrapper\n className=\"inline-dropdown\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n height: '50px',\n margin: '0 5px',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n margin: '0 4px',\n position: 'relative',\n alignItems: 'center',\n }}\n onClick={() => setShowToolbar(true)}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n <span\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n </div>\n <Chevron\n direction=\"down\"\n style={{\n position: 'absolute',\n top: '5px',\n right: '5px',\n }}\n />\n </div>\n {showToolbar &&\n ReactDOM.createPortal(\n <div ref={toolbarRef} style={{ zIndex: 1 }}>\n <InlineDropdownToolbar />\n </div>,\n document.body,\n )}\n </NodeViewWrapper>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"file":"InlineDropdown.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/respArea/ToolbarIcon.jsx"],"names":["Chevron","props","direction","style","rotate","transform","GripIcon","margin","styles","theme","icon","fontFamily","fontSize","typography","fontWeight","lineHeight","position","top","width","height","whiteSpace","ToolbarIcon","classes"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAEO,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAACC,KAAD,EAAW;AAChC,MAAQC,SAAR,GAA6BD,KAA7B,CAAQC,SAAR;AAAA,MAAmBC,KAAnB,GAA6BF,KAA7B,CAAmBE,KAAnB;;AACA,MAAMC,MAAM,GAAI,YAAM;AACpB,YAAQF,SAAR;AACE,WAAK,MAAL;AACE,eAAO,EAAP;;AACF,WAAK,IAAL;AACE,eAAO,CAAC,EAAR;;AACF,WAAK,MAAL;AACE,eAAO,GAAP;;AACF;AACE,eAAO,CAAP;AARJ;AAUD,GAXc,EAAf;;AAaA,sBACE;AACE,IAAA,KAAK;AACHG,MAAAA,SAAS,mBAAYD,MAAZ;AADN,OAEAD,KAFA,CADP;AAKE,IAAA,KAAK,EAAC,IALR;AAME,IAAA,MAAM,EAAC,IANT;AAOE,IAAA,OAAO,EAAC,WAPV;AAQE,IAAA,KAAK,EAAC;AARR,kBAUE;AAAM,IAAA,CAAC,EAAC,gDAAR;AAAyD,IAAA,IAAI,EAAC;AAA9D,IAVF,CADF;AAcD,CA7BM;;;;AA+BA,IAAMG,QAAQ,GAAG,SAAXA,QAAW;AAAA,MAAGH,KAAH,QAAGA,KAAH;AAAA,sBACtB;AAAM,IAAA,KAAK,EAAEA;AAAb,kBACE;AACE,IAAA,KAAK,EAAE;AACLI,MAAAA,MAAM,EAAE;AADH,KADT;AAIE,IAAA,KAAK,EAAC,IAJR;AAKE,IAAA,MAAM,EAAC,IALT;AAME,IAAA,OAAO,EAAC,WANV;AAOE,IAAA,KAAK,EAAC;AAPR,kBASE;AAAM,IAAA,CAAC,EAAC;AAAR,IATF,CADF,eAYE;AAAK,IAAA,KAAK,EAAC,IAAX;AAAgB,IAAA,MAAM,EAAC,IAAvB;AAA4B,IAAA,OAAO,EAAC,WAApC;AAAgD,IAAA,KAAK,EAAC;AAAtD,kBACE;AAAM,IAAA,CAAC,EAAC;AAAR,IADF,CAZF,CADsB;AAAA,CAAjB;;;;AAmBP,IAAMC,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBC,IAAAA,IAAI,EAAE;AACJC,MAAAA,UAAU,EAAE,yBADR;AAEJC,MAAAA,QAAQ,EAAEH,KAAK,CAACI,UAAN,CAAiBD,QAFvB;AAGJE,MAAAA,UAAU,EAAE,MAHR;AAIJC,MAAAA,UAAU,EAAE,MAJR;AAKJC,MAAAA,QAAQ,EAAE,UALN;AAMJC,MAAAA,GAAG,EAAE,KAND;AAOJC,MAAAA,KAAK,EAAE,OAPH;AAQJC,MAAAA,MAAM,EAAE,MARJ;AASJC,MAAAA,UAAU,EAAE;AATR;AADmB,GAAZ;AAAA,CAAf;;AAcO,IAAMC,WAAW,GAAG,wBAAWb,MAAX,EAAmB;AAAA,MAAGc,OAAH,SAAGA,OAAH;AAAA,sBAAiB;AAAK,IAAA,SAAS,EAAEA,OAAO,CAACZ;AAAxB,uBAAjB;AAAA,CAAnB,CAApB","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\n\nexport const Chevron = (props) => {\n const { direction, style } = props;\n const rotate = (() => {\n switch (direction) {\n case 'down':\n return 90;\n case 'up':\n return -90;\n case 'left':\n return 180;\n default:\n return 0;\n }\n })();\n\n return (\n <svg\n style={{\n transform: `rotate(${rotate}deg)`,\n ...style,\n }}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" fill=\"currentColor\" />\n </svg>\n );\n};\n\nexport const GripIcon = ({ style }) => (\n <span style={style}>\n <svg\n style={{\n margin: '0 -16px',\n }}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 3H7v2h2V3zm0 4H7v2h2V7zm0 4H7v2h2v-2zm0 4H7v2h2v-2zm0 4H7v2h2v-2zm4-16h-2v2h2V3zm0 4h-2v2h2V7zm0 4h-2v2h2v-2zm0 4h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 3H7v2h2V3zm0 4H7v2h2V7zm0 4H7v2h2v-2zm0 4H7v2h2v-2zm0 4H7v2h2v-2zm4-16h-2v2h2V3zm0 4h-2v2h2V7zm0 4h-2v2h2v-2zm0 4h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n </svg>\n </span>\n);\n\nconst styles = (theme) => ({\n icon: {\n fontFamily: 'Cerebri Sans !important',\n fontSize: theme.typography.fontSize,\n fontWeight: 'bold',\n lineHeight: '14px',\n position: 'relative',\n top: '7px',\n width: '110px',\n height: '28px',\n whiteSpace: 'nowrap',\n },\n});\n\nexport const ToolbarIcon = withStyles(styles)(({ classes }) => <div className={classes.icon}>+ Response Area</div>);\n"],"file":"ToolbarIcon.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.js"],"names":["PIE_TOOLBAR__CLASS"],"mappings":";;;;;;AAAO,IAAMA,kBAAkB,GAAG,aAA3B;;eAEQ;AACbA,EAAAA,kBAAkB,EAAlBA;AADa,C","sourcesContent":["export const PIE_TOOLBAR__CLASS = 'pie-toolbar';\n\nexport default {\n PIE_TOOLBAR__CLASS,\n};\n"],"file":"constants.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/component.jsx"],"names":["log","sizePx","s","ImageComponent","props","node","editor","classes","attributes","onFocus","selected","options","maxImageWidth","maxImageHeight","latex","handleChange","handleDone","alt","attrs","showToolbar","setShowToolbar","imgRef","resizeRef","toolbarRef","getPercentFromWidth","width","floored","current","naturalWidth","parseInt","toFixed","applySizeData","update","resizePercent","commands","updateAttributes","selection","state","onlyThisNodeSelected","from","nodeSize","to","imageHandling","insertImageRequested","finish","InsertImageHandler","resizeHandle","addEventListener","initResize","removeEventListener","loadImage","box","style","w","Math","min","h","naturalHeight","height","updateAspect","initial","next","keepAspect","resizeType","ratio","startResize","e","bounds","target","getBoundingClientRect","clientX","left","clientY","top","onChange","newValues","stopResize","window","objectFit","flexAlign","center","right","alignment","root","loaded","loading","deleteStatus","pendingDelete","justifyContent","percent","progress","hideProgress","imageContainer","src","image","active","resize","position","zIndex","background","boxShadow","onDone","focus","disableImageAlignmentButtons","propTypes","PropTypes","object","isRequired","func","number","theme","portal","opacity","transition","floatingButtonRow","backgroundColor","palette","paper","borderRadius","display","padding","border","grey","common","white","alignItems","primary","main","cursor","marginLeft","marginRight","drawableHeight","minHeight"],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport debug from 'debug';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport { withStyles } from '@material-ui/core/styles';\nimport { NodeViewWrapper } from '@tiptap/react';\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 sizePx = (s) => (s ? `${s}px` : 'calc(20px)');\n\nfunction ImageComponent(props) {\n const {\n node,\n editor,\n classes,\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 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 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) resizeHandle.removeEventListener('mousedown', initResize, false);\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 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 <div\n onFocus={onFocus}\n className={classNames(\n classes.root,\n !node.attrs.loaded && classes.loading,\n node.attrs.deleteStatus === 'pending' && classes.pendingDelete,\n )}\n style={{ justifyContent: flexAlign }}\n >\n <LinearProgress\n mode=\"determinate\"\n value={node.attrs.percent || 0}\n className={classNames(classes.progress, node.attrs.loaded && classes.hideProgress)}\n />\n\n <div className={classes.imageContainer}>\n <img\n {...attributes}\n ref={imgRef}\n src={node.attrs.src}\n className={classNames(classes.image, selected && classes.active)}\n style={style}\n onLoad={loadImage}\n alt={node.attrs.alt}\n />\n <div ref={resizeRef} className={classNames(classes.resize, 'resize')} />\n </div>\n </div>\n\n {showToolbar && (\n <div\n ref={toolbarRef}\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\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 {...options}\n onDone={() => {\n setShowToolbar(false);\n props.imageHandling?.onDone();\n props.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 )}\n </NodeViewWrapper>\n );\n}\n\nImageComponent.propTypes = {\n node: PropTypes.object.isRequired,\n editor: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n attributes: PropTypes.object,\n onFocus: PropTypes.func,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n};\n\nexport default withStyles((theme) => ({\n portal: {\n position: 'absolute',\n opacity: 0,\n transition: 'opacity 200ms linear',\n },\n floatingButtonRow: {\n backgroundColor: theme.palette.background.paper,\n borderRadius: '1px',\n display: 'flex',\n padding: '10px',\n border: `solid 1px ${theme.palette.grey[200]}`,\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 },\n progress: {\n position: 'absolute',\n left: '0',\n width: 'fit-content',\n top: '0%',\n transition: 'opacity 200ms linear',\n },\n hideProgress: {\n opacity: 0,\n },\n loading: {\n opacity: 0.3,\n },\n pendingDelete: {\n opacity: 0.3,\n },\n root: {\n position: 'relative',\n border: `solid 1px ${theme.palette.common.white}`,\n display: 'flex',\n transition: 'opacity 200ms linear',\n },\n delete: {\n position: 'absolute',\n right: 0,\n },\n imageContainer: {\n position: 'relative',\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n\n '&&:hover > .resize': {\n display: 'block',\n },\n },\n active: {\n border: `solid 1px ${theme.palette.primary.main}`,\n },\n resize: {\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 drawableHeight: {\n minHeight: 350,\n },\n}))(ImageComponent);\n"],"file":"component.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/css.js"],"names":["removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","editor","callback","opts","selectedText","parentNode","editorDOM","options","element","newEl","createElement","selection","state","className","popoverEl","closePopOver","firstCallMade","listener","e","focusIsInModals","contains","target","focusIsInEditor","handleClose","undefined","body","removeEventListener","handleChange","name","parentNodeClass","attrs","createHTML","html","tag","object","text","slice","$anchor","textOffset","$head","el","background","height","padding","overflow","display","flexFlow","names","map","i","marginRight","__html","ReactDOM","render","cursorItem","view","nodeDOM","from","cursorNode","bodyRect","parentElement","getBoundingClientRect","boundRect","appendChild","style","maxWidth","position","top","zIndex","leftValue","left","Math","abs","offsetWidth","rightValue","x","leftAlignedWidth","right","rightAlignedWidth","addEventListener","CSSMark","Mark","create","addOptions","classes","addAttributes","parseHTML","getAttribute","renderHTML","attributes","getAttrs","cls","match","find","includes","HTMLAttributes","addCommands","setCSSClass","commands","setMark","unsetCSSClass","unsetMark","openCSSClassDialog","doc","textBetween","to","$from","nodeAfter","extraCSSRules","chain","focus","run"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Mark, mergeAttributes } from '@tiptap/core';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\n\nexport const removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-css-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nconst insertDialog = ({ editor, callback, opts, selectedText, parentNode }) => {\n const editorDOM = editor.options.element;\n const newEl = document.createElement('div');\n const { selection } = editor.state;\n\n removeDialogs();\n\n newEl.className = 'insert-css-dialog';\n\n let popoverEl;\n\n const closePopOver = () => {\n if (popoverEl) {\n popoverEl.remove();\n }\n };\n\n let firstCallMade = false;\n\n const listener = (e) => {\n // this will be triggered right after setting it because\n // this toolbar is added on the mousedown event\n // so right after mouseup, the click will be triggered\n if (firstCallMade) {\n const focusIsInModals = newEl.contains(e.target) || (popoverEl && popoverEl.contains(e.target));\n const focusIsInEditor = editorDOM.contains(e.target);\n\n if (!(focusIsInModals || focusIsInEditor)) {\n handleClose();\n }\n } else {\n firstCallMade = true;\n }\n };\n\n const handleClose = () => {\n callback(undefined, true);\n newEl.remove();\n closePopOver();\n document.body.removeEventListener('click', listener);\n };\n\n const handleChange = (name) => {\n callback(name, true);\n newEl.remove();\n closePopOver();\n document.body.removeEventListener('click', listener);\n };\n\n const parentNodeClass = parentNode?.attrs.class;\n const createHTML = (name) => {\n let html = `<span class=\"${name}\">${selectedText}</span>`;\n\n if (parentNode) {\n let tag = 'span';\n\n if (parentNode?.object === 'inline') {\n tag = 'span';\n }\n\n if (parentNode?.object === 'block') {\n tag = 'div';\n }\n\n html = `<${tag} class=\"${parentNodeClass}\">${parentNode.text.slice(0, selection.$anchor.textOffset)}${html}${parentNode.text.slice(\n selection.$head.textOffset,\n )}</${tag}>`;\n }\n\n return html;\n };\n\n const el = (\n <div\n style={{ background: 'white', height: 500, padding: 20, overflow: 'hidden', display: 'flex', flexFlow: 'column' }}\n >\n <h2>Please choose a css class</h2>\n {parentNodeClass && <div>The current parent has this class {parentNodeClass}</div>}\n <List component=\"nav\" style={{ overflow: 'scroll' }}>\n {opts.names.map((name, i) => (\n <ListItem key={`rule-${i}`} button onClick={() => handleChange(name)}>\n <div style={{ marginRight: 20 }}>{name}</div>\n <div\n dangerouslySetInnerHTML={{\n __html: createHTML(name),\n }}\n />\n </ListItem>\n ))}\n </List>\n </div>\n );\n\n ReactDOM.render(el, newEl, () => {\n const cursorItem = editor.view.nodeDOM(editor.state.selection.from);\n const cursorNode = cursorItem?.parentNode;\n\n if (cursorNode) {\n const bodyRect = editorDOM.parentElement.parentElement.parentElement.getBoundingClientRect();\n const boundRect = cursorNode.getBoundingClientRect();\n\n editorDOM.parentElement.parentElement.parentElement.appendChild(newEl);\n\n newEl.style.maxWidth = '500px';\n newEl.style.position = 'absolute';\n newEl.style.top = 0;\n newEl.style.zIndex = 99999;\n\n const leftValue = `${boundRect.left + Math.abs(bodyRect.left) + cursorNode.offsetWidth + 10}px`;\n\n const rightValue = `${boundRect.x}px`;\n\n newEl.style.left = leftValue;\n\n const leftAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = rightValue;\n\n const rightAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = 'unset';\n\n if (leftAlignedWidth >= rightAlignedWidth) {\n newEl.style.left = leftValue;\n } else {\n newEl.style.right = rightValue;\n }\n\n document.body.addEventListener('click', listener);\n }\n });\n};\n\nexport const CSSMark = Mark.create({\n name: 'cssmark',\n\n addOptions() {\n return {\n classes: [],\n };\n },\n\n addAttributes() {\n return {\n class: {\n default: null,\n parseHTML: (el) => el.getAttribute('class'),\n renderHTML: (attributes) => {\n if (!attributes.class) return {};\n return { class: attributes.class };\n },\n },\n };\n },\n\n parseHTML() {\n // Any span with a class that matches one of allowed classes\n return [\n {\n tag: 'span[class]',\n getAttrs: (el) => {\n const cls = el.getAttribute('class') || '';\n const match = this.options.classes.find((name) => cls.includes(name));\n return match ? { class: match } : false;\n },\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setCSSClass: (className) => ({ commands }) => {\n return commands.setMark(this.name, { class: className });\n },\n\n unsetCSSClass: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n\n openCSSClassDialog: () => ({ editor }) => {\n insertDialog({\n editor,\n selectedText: editor.state.doc.textBetween(editor.state.selection.from, editor.state.selection.to),\n parentNode: editor.state.selection.$from.nodeAfter,\n opts: this.options.extraCSSRules,\n callback: (className) => {\n if (className) {\n editor\n .chain()\n .focus()\n .setCSSClass(className)\n .run();\n }\n },\n });\n },\n };\n },\n});\n"],"file":"css.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/custom-toolbar-wrapper.jsx"],"names":["CustomToolbarWrapper","props","children","deletable","classes","toolbarOpts","autoWidth","isFocused","doneButtonRef","onDelete","showDone","onDone","names","toolbar","PIE_TOOLBAR__CLASS","toolbarWithNoDone","toolbarRight","alignment","focused","alwaysVisible","fullWidth","hidden","isHidden","customStyles","minWidth","undefined","shared","iconRoot","e","root","style","position","zIndex","cursor","justifyContent","background","margin","padding","boxShadow","boxSizing","display","opacity","right","width","visibility","height","verticalAlign","label","color","index"],"mappings":"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","sourcesContent":["import React, { useCallback } from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport Delete from '@material-ui/icons/Delete';\nimport classNames from 'classnames';\nimport { PIE_TOOLBAR__CLASS } from '../constants';\nimport { withStyles } from '@material-ui/core/styles';\nimport { DoneButton } from '../components/common/done-button';\n\nfunction CustomToolbarWrapper(props) {\n const {\n children,\n deletable,\n classes,\n toolbarOpts,\n autoWidth,\n isFocused,\n doneButtonRef,\n onDelete,\n showDone,\n onDone,\n } = props;\n const names = classNames(classes.toolbar, PIE_TOOLBAR__CLASS, {\n [classes.toolbarWithNoDone]: !showDone,\n [classes.toolbarRight]: toolbarOpts.alignment === 'right',\n [classes.focused]: toolbarOpts.alwaysVisible || isFocused,\n [classes.autoWidth]: autoWidth,\n [classes.fullWidth]: !autoWidth,\n [classes.hidden]: toolbarOpts.isHidden === true,\n });\n const customStyles = toolbarOpts.minWidth !== undefined ? { minWidth: toolbarOpts.minWidth } : {};\n\n return (\n <div className={names} style={{ ...customStyles }}>\n {children}\n\n <div className={classes.shared}>\n {deletable && (\n <IconButton\n aria-label=\"Delete\"\n className={classes.iconRoot}\n onMouseDown={(e) => onDelete?.(e)}\n classes={{\n root: classes.iconRoot,\n }}\n >\n <Delete />\n </IconButton>\n )}\n {showDone && <DoneButton doneButtonRef={doneButtonRef} onClick={onDone} />}\n </div>\n </div>\n );\n}\n\nconst style = {\n toolbar: {\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: '280px',\n margin: '5px 0 0 0',\n padding: '2px',\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 boxSizing: 'border-box',\n display: 'flex',\n opacity: 1,\n },\n toolbarWithNoDone: {\n minWidth: '265px',\n },\n toolbarRight: {\n right: 0,\n },\n fullWidth: {\n width: '100%',\n },\n hidden: {\n visibility: 'hidden',\n },\n autoWidth: {\n width: 'auto',\n },\n iconRoot: {\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top',\n },\n label: {\n color: 'var(--editable-html-toolbar-check, #00bb00)',\n },\n shared: {\n display: 'flex',\n },\n};\nexport default withStyles(style, { index: 1000 })(CustomToolbarWrapper);\n"],"file":"custom-toolbar-wrapper.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/extended-table.js"],"names":["ExtendedTable","Table","extend","addAttributes","border","renderHTML","props","originalTable","parent","HTMLAttributes","previousStyle","style","match"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,aAAa,GAAGC,sBAAMC,MAAN,CAAa;AACjCC,EAAAA,aADiC,2BACjB;AACd,WAAO;AACLC,MAAAA,MAAM,EAAE;AAAE,mBAAS;AAAX;AADH,KAAP;AAGD,GALgC;AAMjCC,EAAAA,UANiC,sBAMtBC,KANsB,EAMf;AAChB,QAAMC,aAAa,GAAG,KAAKC,MAAL,CAAYF,KAAZ,CAAtB;AACA,QAAQF,MAAR,GAAmBE,KAAK,CAACG,cAAzB,CAAQL,MAAR;AAEA,QAAMM,aAAa,aAAMH,aAAa,CAAC,CAAD,CAAb,CAAiBI,KAAvB,SAA+BJ,aAAa,CAAC,CAAD,CAAb,CAAiBI,KAAjB,CAAuBC,KAAvB,CAA6B,OAA7B,IAAwC,EAAxC,GAA6C,GAA5E,CAAnB;AAEAL,IAAAA,aAAa,CAAC,CAAD,CAAb,CAAiBI,KAAjB,aAA4BD,aAA5B;AAMAH,IAAAA,aAAa,CAAC,CAAD,CAAb,CAAiBH,MAAjB,GAA0BA,MAAM,GAAGA,MAAH,GAAY,GAA5C;AAEA,WAAOG,aAAP;AACD;AArBgC,CAAb,CAAtB;;eAwBeP,a","sourcesContent":["import { Table } from '@tiptap/extension-table';\n\nconst ExtendedTable = Table.extend({\n addAttributes() {\n return {\n border: { default: '1' },\n };\n },\n renderHTML(props) {\n const originalTable = this.parent(props);\n const { border } = props.HTMLAttributes;\n\n const previousStyle = `${originalTable[1].style}${originalTable[1].style.match(/.*; */) ? '' : ';'}`;\n\n originalTable[1].style = `${previousStyle}\n width: 100%;\n color: var(--pie-text, black);\n table-layout: fixed;\n border-collapse: collapse;\n background-color: var(--pie-background, rgba(255, 255, 255))`;\n originalTable[1].border = border ? border : '1';\n\n return originalTable;\n },\n});\n\nexport default ExtendedTable;\n"],"file":"extended-table.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/image.js"],"names":["ImageUploadNode","Node","create","name","group","atom","selectable","draggable","addAttributes","loaded","deleteStatus","alignment","percent","width","height","src","alt","parseHTML","tag","renderHTML","HTMLAttributes","addNodeView","props","options","addCommands","setImageUploadNode","commands","insertContent","type"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEO,IAAMA,eAAe,GAAGC,WAAKC,MAAL,CAAY;AACzCC,EAAAA,IAAI,EAAE,iBADmC;AAGzCC,EAAAA,KAAK,EAAE,OAHkC;AAIzCC,EAAAA,IAAI,EAAE,IAJmC;AAI7B;AACZC,EAAAA,UAAU,EAAE,IAL6B;AAKvB;AAClBC,EAAAA,SAAS,EAAE,IAN8B;AAMxB;AAEjBC,EAAAA,aARyC,2BAQzB;AACd,WAAO;AACLC,MAAAA,MAAM,EAAE;AAAE,mBAAS;AAAX,OADH;AAELC,MAAAA,YAAY,EAAE;AAAE,mBAAS;AAAX,OAFT;AAGLC,MAAAA,SAAS,EAAE;AAAE,mBAAS;AAAX,OAHN;AAILC,MAAAA,OAAO,EAAE;AAAE,mBAAS;AAAX,OAJJ;AAKLC,MAAAA,KAAK,EAAE;AAAE,mBAAS;AAAX,OALF;AAMLC,MAAAA,MAAM,EAAE;AAAE,mBAAS;AAAX,OANH;AAOLC,MAAAA,GAAG,EAAE;AAAE,mBAAS;AAAX,OAPA;AAQLC,MAAAA,GAAG,EAAE;AAAE,mBAAS;AAAX;AARA,KAAP;AAUD,GAnBwC;AAqBzCC,EAAAA,SArByC,uBAqB7B;AACV,WAAO,CACL;AACEC,MAAAA,GAAG,EAAE;AADP,KADK,CAAP;AAKD,GA3BwC;AA6BzCC,EAAAA,UA7ByC,4BA6BV;AAAA,QAAlBC,cAAkB,QAAlBA,cAAkB;AAC7B,WAAO,CAAC,KAAD,EAAQ,2BAAgBA,cAAhB,EAAgC;AAAE,mBAAa;AAAf,KAAhC,CAAR,CAAP;AACD,GA/BwC;AAiCzCC,EAAAA,WAjCyC,yBAiC3B;AAAA;;AACZ,WAAO,kCAAsB,UAACC,KAAD;AAAA,0BAAW,iCAAC,qBAAD,kCAAyBA,KAAzB;AAAgCC,QAAAA,OAAO,EAAE,KAAI,CAACA;AAA9C,SAAX;AAAA,KAAtB,CAAP;AACD,GAnCwC;AAqCzCC,EAAAA,WArCyC,yBAqC3B;AAAA;;AACZ,WAAO;AACLC,MAAAA,kBAAkB,EAAE;AAAA,eAAM,iBAAkB;AAAA,cAAfC,QAAe,SAAfA,QAAe;AAC1C,iBAAOA,QAAQ,CAACC,aAAT,CAAuB;AAC5BC,YAAAA,IAAI,EAAE,MAAI,CAACzB;AADiB,WAAvB,CAAP;AAGD,SAJmB;AAAA;AADf,KAAP;AAOD;AA7CwC,CAAZ,CAAxB","sourcesContent":["import { Node, mergeAttributes } from '@tiptap/core';\nimport { ReactNodeViewRenderer } from '@tiptap/react';\nimport React from 'react';\nimport ImageComponent from './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: () => ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n });\n },\n };\n },\n});\n"],"file":"image.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/index.js"],"names":["log","ALL_PLUGINS","DEFAULT_EXTENSIONS","filter","plug","includes","buildExtensions","activeExtensions","customExtensions","opts","addIf","key","shouldAdd","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","type","cssPlugin","extraCSSRules","languageCharactersPlugins","languageCharacters","map","plugin","html"],"mappings":"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","sourcesContent":["import React from 'react';\nimport compact from 'lodash/compact';\nimport isEmpty from 'lodash/isEmpty';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins');\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'html',\n 'extraCSSRules',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'blockquote',\n 'h3',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'redo',\n 'undo',\n 'superscript',\n 'subscript',\n];\n\nexport const DEFAULT_EXTENSIONS = ALL_PLUGINS.filter((plug) => !['responseArea', 'h3', 'blockquote'].includes(plug));\n\nexport const buildExtensions = (activeExtensions, customExtensions, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activeExtensions = activeExtensions || DEFAULT_EXTENSIONS;\n\n const addIf = (key, shouldAdd = true) => activeExtensions.includes(key) && shouldAdd && key;\n\n const imagePlugin = opts.image && opts.image.onDelete;\n const mathPlugin = opts.math;\n const respAreaPlugin = opts.responseArea && opts.responseArea.type;\n const cssPlugin = !isEmpty(opts.extraCSSRules);\n\n const languageCharactersPlugins = opts?.languageCharacters || [];\n\n return compact([\n addIf('table'),\n addIf('bold'),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic'),\n addIf('strikethrough'),\n addIf('underline'),\n // icon should be modifies accordingly\n addIf('superscript'),\n // icon should be modifies accordingly\n addIf('subscript'),\n addIf('image', !!imagePlugin),\n addIf('video'),\n addIf('audio'),\n addIf('math', !!mathPlugin),\n ...languageCharactersPlugins.map((plugin) => addIf('languageCharacters', plugin)),\n addIf('text-align'),\n addIf('blockquote'),\n addIf('h3'),\n addIf('bulleted-list'),\n addIf('numbered-list'),\n addIf('undo'),\n addIf('redo'),\n addIf('responseArea', !!respAreaPlugin),\n addIf('css', !!cssPlugin),\n addIf('html', !!opts.html),\n ]);\n};\n"],"file":"index.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/math.js"],"names":["ensureTextAfterMathPluginKey","PluginKey","EnsureTextAfterMathPlugin","mathNodeName","Plugin","key","appendTransaction","transactions","oldState","newState","some","tr","docChanged","changed","doc","descendants","node","pos","type","name","nextPos","nodeSize","nextNode","nodeAt","insert","schema","text","ZeroWidthSpaceHandlingPlugin","props","handleKeyDown","view","event","state","dispatch","selection","from","empty","prevChar","textBetween","posBefore","resolved","resolve","maybeNode","nodeAfter","nodeBefore","nodePos","nodeResolved","setSelection","NodeSelection","create","TextSelection","MathNode","Node","group","inline","atom","addAttributes","latex","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","textContent","innerHTML","addCommands","insertMath","editor","nodes","math","$from","sel","renderHTML","HTMLAttributes","dangerouslySetInnerHTML","__html","addNodeView","options","MathNodeView","updateAttributes","selected","showToolbar","setShowToolbar","toolbarRef","top","left","position","setPosition","attrs","_toolbarOpened","bodyRect","document","body","getBoundingClientRect","start","coordsAtPos","Math","abs","handleClickOutside","current","contains","target","closest","addEventListener","removeEventListener","handleChange","newLatex","handleDone","commands","focus","display","cursor","margin","ReactDOM","createPortal","zIndex","background","boxShadow"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Extension, Node, mergeAttributes } from '@tiptap/core';\nimport { NodeViewWrapper, ReactRenderer, ReactNodeViewRenderer } from '@tiptap/react';\nimport { Plugin, PluginKey, NodeSelection, TextSelection } from 'prosemirror-state';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\n\nconst ensureTextAfterMathPluginKey = new PluginKey('ensureTextAfterMath');\n\nexport const EnsureTextAfterMathPlugin = (mathNodeName) =>\n new Plugin({\n key: ensureTextAfterMathPluginKey,\n appendTransaction: (transactions, oldState, newState) => {\n // Only act when the doc actually changed\n if (!transactions.some((tr) => tr.docChanged)) return null;\n\n const tr = newState.tr;\n let changed = false;\n\n newState.doc.descendants((node, pos) => {\n if (node.type.name === mathNodeName) {\n const nextPos = pos + node.nodeSize;\n const nextNode = newState.doc.nodeAt(nextPos);\n\n // If there's no node after, or the next node isn't text, insert a space\n if (!nextNode || nextNode.type.name !== 'text') {\n tr.insert(nextPos, newState.schema.text('\\u200b'));\n changed = true;\n }\n }\n });\n\n return changed ? tr : null;\n },\n });\n\nexport const ZeroWidthSpaceHandlingPlugin = new Plugin({\n key: new PluginKey('zeroWidthSpaceHandling'),\n props: {\n handleKeyDown(view, event) {\n const { state, dispatch } = view;\n const { selection, doc } = state;\n const { from, empty } = selection;\n\n if (empty && event.key === 'Backspace' && from > 0) {\n const prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n if (prevChar === '\\u200b') {\n const tr = state.tr.delete(from - 2, from);\n dispatch(tr);\n return true; // handled\n }\n }\n\n if (empty && event.key === 'ArrowLeft' && from > 0) {\n const prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n // If the previous character is the zero-width space...\n if (prevChar === '\\u200b') {\n const posBefore = from - 1;\n const resolved = state.doc.resolve(posBefore - 1); // look just before the zwsp\n const maybeNode = resolved.nodeAfter || resolved.nodeBefore;\n\n // Check if there's an inline selectable node (e.g., your math node)\n if (maybeNode) {\n const nodePos = posBefore - maybeNode.nodeSize;\n const nodeResolved = state.doc.resolve(nodePos);\n const tr = state.tr.setSelection(NodeSelection.create(state.doc, nodeResolved.pos));\n dispatch(tr);\n return true;\n } else {\n // Just move the text cursor before the zwsp\n const tr = state.tr.setSelection(TextSelection.create(state.doc, from - 2));\n dispatch(tr);\n return true;\n }\n }\n }\n\n return false;\n },\n },\n});\n\nexport const MathNode = Node.create({\n name: 'math',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n latex: { default: '' },\n wrapper: { default: null },\n html: { default: null },\n };\n },\n\n addProseMirrorPlugins() {\n return [EnsureTextAfterMathPlugin(this.name), ZeroWidthSpaceHandlingPlugin];\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-latex]',\n getAttrs: (el) => ({\n latex: el.getAttribute('data-raw') || el.textContent,\n }),\n },\n {\n tag: 'span[data-type=\"mathml\"]',\n getAttrs: (el) => ({\n html: el.innerHTML,\n }),\n },\n ];\n },\n\n addCommands() {\n return {\n insertMath: (latex = '') => ({ tr, editor, dispatch }) => {\n const { state } = editor.view;\n const node = state.schema.nodes.math.create({\n latex,\n });\n const { selection } = state;\n\n // The inserted node is typically just before the cursor\n const pos = selection.$from.pos;\n\n tr.insert(pos, node);\n\n if (node?.type?.name === this.name) {\n // Create a NodeSelection from the current doc\n const sel = NodeSelection.create(tr.doc, selection.$from.pos);\n\n // Build a fresh transaction from the current state and set the selection\n tr.setSelection(sel);\n }\n\n dispatch(tr);\n\n return true;\n },\n // insertMath: (latex = '') => ({ commands }) => {\n // return commands.insertContent({\n // type: this.name,\n // attrs: { latex },\n // });\n // },\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n if (HTMLAttributes.html) {\n return ['span', { 'data-type': 'mathml', dangerouslySetInnerHTML: { __html: HTMLAttributes.html } }];\n }\n\n return [\n 'span',\n { 'data-latex': '', 'data-raw': HTMLAttributes.latex },\n wrapMath(HTMLAttributes.latex, HTMLAttributes.wrapper),\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MathNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nexport const MathNodeView = (props) => {\n const { node, updateAttributes, editor, selected, options } = props;\n const [showToolbar, setShowToolbar] = useState(selected);\n const toolbarRef = useRef(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n const latex = node.attrs.latex || '';\n\n useEffect(() => {\n if (selected) {\n setShowToolbar(true);\n }\n }, [selected]);\n\n useEffect(() => {\n editor._toolbarOpened = !!showToolbar;\n }, [showToolbar]);\n\n useEffect(() => {\n // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n setShowToolbar(false);\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [editor, showToolbar]);\n\n const handleChange = (newLatex) => {\n updateAttributes({ latex: newLatex });\n };\n\n const handleDone = (newLatex) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n\n editor._toolbarOpened = false;\n\n const { selection, tr, doc } = editor.state;\n const sel = TextSelection.create(doc, selection.from + 1);\n\n // Build a fresh transaction from the current state and set the selection\n tr.setSelection(sel);\n editor.view.dispatch(tr);\n editor.commands.focus();\n };\n\n return (\n <NodeViewWrapper\n className=\"math-node\"\n style={{\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n }}\n data-selected={selected}\n >\n <div onClick={() => setShowToolbar(true)} contentEditable={false}>\n <MathPreview latex={latex} />\n </div>\n {showToolbar &&\n ReactDOM.createPortal(\n <div\n ref={toolbarRef}\n style={{\n position: 'absolute',\n top: `${position.top}px`,\n left: `${position.left}px`,\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 }}\n >\n <MathToolbar latex={latex} autoFocus onChange={handleChange} onDone={handleDone} keypadMode=\"basic\" />\n </div>,\n document.body,\n )}\n </NodeViewWrapper>\n );\n};\n"],"file":"math.js"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/extensions/media.js"],"names":["Media","Node","create","name","group","inline","atom","addAttributes","type","src","width","height","title","starts","ends","editing","tag","url","parseHTML","getAttrs","el","getAttribute","dataset","querySelector","renderHTML","HTMLAttributes","controls","controlsList","frameborder","allow","allowfullscreen","addCommands","insertMedia","attrs","commands","insertContent","updateMedia","updateAttributes","addNodeView","props","options","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","newEl","createElement","callback","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","uploadSoundSupport","ReactDOM","render","appendChild","MediaNodeView","editor","node","deleteNode","handleEdit","edit","chain","focus","run"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { mergeAttributes, Node } from '@tiptap/core';\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';\nimport MediaDialog from '../components/media/MediaDialog';\nimport MediaToolbar from '../components/media/MediaToolbar';\n\nexport const Media = Node.create({\n name: 'media',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n type: { default: 'video' },\n src: { default: null },\n width: { default: null },\n height: { default: null },\n title: { default: null },\n starts: { default: null },\n ends: { default: null },\n editing: { default: false },\n tag: { default: 'iframe' }, // 'iframe' or 'audio'\n url: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'iframe[data-type=\"video\"]',\n getAttrs: (el) => ({\n type: 'video',\n tag: 'iframe',\n src: el.getAttribute('src'),\n width: el.getAttribute('width'),\n height: el.getAttribute('height'),\n title: el.dataset.title,\n starts: el.dataset.starts,\n ends: el.dataset.ends,\n url: el.dataset.url,\n }),\n },\n {\n tag: 'audio',\n getAttrs: (el) => ({\n type: 'audio',\n tag: 'audio',\n src: el.querySelector('source')?.getAttribute('src'),\n }),\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const { tag, src, width, height } = HTMLAttributes;\n\n if (tag === 'audio') {\n return ['audio', { controls: 'controls', controlsList: 'nodownload' }, ['source', { src, type: 'audio/mp3' }]];\n }\n\n return [\n 'iframe',\n mergeAttributes(\n {\n 'data-type': 'video',\n frameborder: '0',\n allow: 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture',\n allowfullscreen: '',\n src,\n },\n width ? { width } : {},\n height ? { height } : {},\n ),\n ];\n },\n\n addCommands() {\n return {\n insertMedia: (attrs) => ({ commands }) => {\n return commands.insertContent({ type: this.name, attrs });\n },\n updateMedia: (attrs) => ({ commands }) => {\n return commands.updateAttributes(this.name, attrs);\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MediaNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach((s) => s.remove());\n};\n\nexport const insertDialog = (props) => {\n const newEl = document.createElement('div');\n const { type, callback, options, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog\n {...rest}\n uploadSoundSupport={options.uploadSoundSupport}\n type={type}\n disablePortal={true}\n open={true}\n handleClose={handleClose}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nexport default function MediaNodeView({ editor, node, updateAttributes, deleteNode, options }) {\n const { type, src, width, height, tag } = node.attrs;\n\n const handleEdit = () => {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n }\n\n editor\n .chain()\n .focus()\n .run();\n },\n });\n };\n\n useEffect(() => {\n insertDialog({\n ...node.attrs,\n options: options,\n edit: true,\n callback: (val, data) => {\n if (val) {\n updateAttributes(data);\n } else {\n deleteNode();\n }\n\n editor\n .chain()\n .focus()\n .run();\n },\n });\n }, []);\n\n return (\n <NodeViewWrapper data-type={type} style={{ width, height }}>\n {tag === 'audio' ? (\n <audio controls controlsList=\"nodownload\">\n <source type=\"audio/mp3\" src={src} />\n </audio>\n ) : (\n <iframe src={src} allowFullScreen frameBorder=\"0\" />\n )}\n\n <MediaToolbar onEdit={handleEdit} onRemove={deleteNode} />\n </NodeViewWrapper>\n );\n}\n"],"file":"media.js"}