@pie-lib/editable-html-tip-tap 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CharacterPicker.d.ts +31 -0
- package/dist/components/CharacterPicker.d.ts.map +1 -0
- package/dist/components/CharacterPicker.js +129 -0
- package/dist/components/EditableHtml.d.ts +11 -0
- package/dist/components/EditableHtml.d.ts.map +1 -0
- package/dist/components/EditableHtml.js +270 -0
- package/dist/components/MenuBar.d.ts +11 -0
- package/dist/components/MenuBar.d.ts.map +1 -0
- package/dist/components/MenuBar.js +460 -0
- package/dist/components/TiptapContainer.d.ts +11 -0
- package/dist/components/TiptapContainer.d.ts.map +1 -0
- package/dist/components/TiptapContainer.js +157 -0
- package/dist/components/characters/characterUtils.d.ts +36 -0
- package/dist/components/characters/characterUtils.d.ts.map +1 -0
- package/dist/components/characters/characterUtils.js +465 -0
- package/dist/components/characters/custom-popper.d.ts +14 -0
- package/dist/components/characters/custom-popper.d.ts.map +1 -0
- package/dist/components/characters/custom-popper.js +32 -0
- package/dist/components/common/done-button.d.ts +30 -0
- package/dist/components/common/done-button.d.ts.map +1 -0
- package/dist/components/common/done-button.js +26 -0
- package/dist/components/common/toolbar-buttons.d.ts +39 -0
- package/dist/components/common/toolbar-buttons.d.ts.map +1 -0
- package/dist/components/common/toolbar-buttons.js +91 -0
- package/dist/components/icons/CssIcon.d.ts +11 -0
- package/dist/components/icons/CssIcon.d.ts.map +1 -0
- package/dist/components/icons/CssIcon.js +14 -0
- package/dist/components/icons/RespArea.d.ts +26 -0
- package/dist/components/icons/RespArea.d.ts.map +1 -0
- package/dist/components/icons/RespArea.js +42 -0
- package/dist/components/icons/TableIcons.d.ts +14 -0
- package/dist/components/icons/TableIcons.d.ts.map +1 -0
- package/dist/components/icons/TableIcons.js +32 -0
- package/dist/components/icons/TextAlign.d.ts +18 -0
- package/dist/components/icons/TextAlign.d.ts.map +1 -0
- package/dist/components/icons/TextAlign.js +134 -0
- package/dist/components/image/AltDialog.d.ts +23 -0
- package/dist/components/image/AltDialog.d.ts.map +1 -0
- package/dist/components/image/AltDialog.js +61 -0
- package/dist/components/image/ImageToolbar.d.ts +25 -0
- package/dist/components/image/ImageToolbar.d.ts.map +1 -0
- package/dist/components/image/ImageToolbar.js +80 -0
- package/dist/components/image/InsertImageHandler.d.ts +33 -0
- package/dist/components/image/InsertImageHandler.d.ts.map +1 -0
- package/dist/components/image/InsertImageHandler.js +55 -0
- package/dist/components/media/MediaDialog.d.ts +44 -0
- package/dist/components/media/MediaDialog.d.ts.map +1 -0
- package/dist/components/media/MediaDialog.js +389 -0
- package/dist/components/media/MediaToolbar.d.ts +20 -0
- package/dist/components/media/MediaToolbar.d.ts.map +1 -0
- package/dist/components/media/MediaToolbar.js +41 -0
- package/dist/components/media/MediaWrapper.d.ts +20 -0
- package/dist/components/media/MediaWrapper.d.ts.map +1 -0
- package/dist/components/respArea/DragInTheBlank/DragInTheBlank.d.ts +23 -0
- package/dist/components/respArea/DragInTheBlank/DragInTheBlank.d.ts.map +1 -0
- package/dist/components/respArea/DragInTheBlank/DragInTheBlank.js +58 -0
- package/dist/components/respArea/DragInTheBlank/choice.d.ts +56 -0
- package/dist/components/respArea/DragInTheBlank/choice.d.ts.map +1 -0
- package/dist/components/respArea/DragInTheBlank/choice.js +156 -0
- package/dist/components/respArea/ExplicitConstructedResponse.d.ts +20 -0
- package/dist/components/respArea/ExplicitConstructedResponse.d.ts.map +1 -0
- package/dist/components/respArea/ExplicitConstructedResponse.js +67 -0
- package/dist/components/respArea/InlineDropdown.d.ts +18 -0
- package/dist/components/respArea/InlineDropdown.d.ts.map +1 -0
- package/dist/components/respArea/InlineDropdown.js +91 -0
- package/dist/components/respArea/MathTemplated.d.ts +19 -0
- package/dist/components/respArea/MathTemplated.d.ts.map +1 -0
- package/dist/components/respArea/MathTemplated.js +97 -0
- package/dist/components/respArea/ToolbarIcon.d.ts +14 -0
- package/dist/components/respArea/ToolbarIcon.d.ts.map +1 -0
- package/dist/components/respArea/ToolbarIcon.js +17 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/extensions/css.d.ts +12 -0
- package/dist/extensions/css.d.ts.map +1 -0
- package/dist/extensions/css.js +115 -0
- package/dist/extensions/custom-toolbar-wrapper.d.ts +11 -0
- package/dist/extensions/custom-toolbar-wrapper.d.ts.map +1 -0
- package/dist/extensions/custom-toolbar-wrapper.js +58 -0
- package/dist/extensions/div-node.d.ts +11 -0
- package/dist/extensions/div-node.d.ts.map +1 -0
- package/dist/extensions/div-node.js +25 -0
- package/dist/extensions/extended-table.d.ts +11 -0
- package/dist/extensions/extended-table.d.ts.map +1 -0
- package/dist/extensions/extended-table.js +15 -0
- package/dist/extensions/image-component.d.ts +22 -0
- package/dist/extensions/image-component.d.ts.map +1 -0
- package/dist/extensions/image-component.js +200 -0
- package/dist/extensions/image.d.ts +11 -0
- package/dist/extensions/image.d.ts.map +1 -0
- package/dist/extensions/image.js +42 -0
- package/dist/extensions/index.d.ts +17 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +65 -0
- package/dist/extensions/math.d.ts +15 -0
- package/dist/extensions/math.d.ts.map +1 -0
- package/dist/extensions/math.js +150 -0
- package/dist/extensions/media.d.ts +19 -0
- package/dist/extensions/media.d.ts.map +1 -0
- package/dist/extensions/media.js +147 -0
- package/dist/extensions/responseArea.d.ts +28 -0
- package/dist/extensions/responseArea.d.ts.map +1 -0
- package/dist/extensions/responseArea.js +259 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/styles/editorContainerStyles.d.ts +135 -0
- package/dist/styles/editorContainerStyles.d.ts.map +1 -0
- package/dist/theme.d.ts +10 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/utils/helper.d.ts +10 -0
- package/dist/utils/helper.d.ts.map +1 -0
- package/dist/utils/helper.js +7 -0
- package/dist/utils/size.d.ts +10 -0
- package/dist/utils/size.d.ts.map +1 -0
- package/dist/utils/size.js +14 -0
- package/package.json +71 -0
- package/src/components/CharacterPicker.tsx +210 -0
- package/src/components/EditableHtml.tsx +416 -0
- package/src/components/MenuBar.tsx +558 -0
- package/src/components/TiptapContainer.tsx +228 -0
- package/src/components/characters/characterUtils.ts +457 -0
- package/src/components/characters/custom-popper.tsx +48 -0
- package/src/components/common/done-button.tsx +37 -0
- package/src/components/common/toolbar-buttons.tsx +132 -0
- package/src/components/icons/CssIcon.tsx +25 -0
- package/src/components/icons/RespArea.tsx +81 -0
- package/src/components/icons/TableIcons.tsx +62 -0
- package/src/components/icons/TextAlign.tsx +124 -0
- package/src/components/image/AltDialog.tsx +92 -0
- package/src/components/image/ImageToolbar.tsx +109 -0
- package/src/components/image/InsertImageHandler.ts +121 -0
- package/src/components/media/MediaDialog.tsx +606 -0
- package/src/components/media/MediaToolbar.tsx +59 -0
- package/src/components/media/MediaWrapper.tsx +49 -0
- package/src/components/respArea/DragInTheBlank/DragInTheBlank.tsx +86 -0
- package/src/components/respArea/DragInTheBlank/choice.tsx +266 -0
- package/src/components/respArea/ExplicitConstructedResponse.tsx +122 -0
- package/src/components/respArea/InlineDropdown.tsx +152 -0
- package/src/components/respArea/MathTemplated.tsx +134 -0
- package/src/components/respArea/ToolbarIcon.tsx +76 -0
- package/src/constants.ts +15 -0
- package/src/extensions/css.tsx +230 -0
- package/src/extensions/custom-toolbar-wrapper.tsx +88 -0
- package/src/extensions/div-node.tsx +46 -0
- package/src/extensions/extended-table.ts +34 -0
- package/src/extensions/image-component.tsx +303 -0
- package/src/extensions/image.tsx +64 -0
- package/src/extensions/index.tsx +91 -0
- package/src/extensions/math.tsx +285 -0
- package/src/extensions/media.tsx +198 -0
- package/src/extensions/responseArea.tsx +404 -0
- package/src/index.tsx +15 -0
- package/src/styles/editorContainerStyles.ts +155 -0
- package/src/theme.ts +11 -0
- package/src/utils/helper.tsx +27 -0
- package/src/utils/size.ts +42 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/editable-html-tip-tap/src/components/image/ImageToolbar.jsx
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import PropTypes from 'prop-types';
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import debug from 'debug';
|
|
14
|
+
import ReactDOM from 'react-dom';
|
|
15
|
+
import { styled } from '@mui/material/styles';
|
|
16
|
+
|
|
17
|
+
import AltDialog from './AltDialog.js';
|
|
18
|
+
import { MarkButton } from '../common/toolbar-buttons.js';
|
|
19
|
+
|
|
20
|
+
const log = debug('@pie-lib:editable-html:plugins:image:image-toolbar');
|
|
21
|
+
|
|
22
|
+
const StyledHolder: any = styled('div')(({ theme }) => ({
|
|
23
|
+
paddingLeft: theme.spacing.unit,
|
|
24
|
+
display: 'flex',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
}));
|
|
27
|
+
|
|
28
|
+
const StyledAltText: any = styled('span', {
|
|
29
|
+
shouldForwardProp: (prop) => !['disabled', 'hasAlignmentButtons'].includes(prop),
|
|
30
|
+
})(({ disabled, hasAlignmentButtons }) => ({
|
|
31
|
+
...(disabled && {
|
|
32
|
+
opacity: 0.5,
|
|
33
|
+
}),
|
|
34
|
+
...(hasAlignmentButtons && {
|
|
35
|
+
borderLeft: '1px solid grey',
|
|
36
|
+
paddingLeft: 8,
|
|
37
|
+
marginLeft: 4,
|
|
38
|
+
}),
|
|
39
|
+
}));
|
|
40
|
+
|
|
41
|
+
const AlignmentButton = ({ alignment, active, onClick }) => {
|
|
42
|
+
return (
|
|
43
|
+
<MarkButton active={active} onToggle={() => onClick(alignment)} label={alignment}>
|
|
44
|
+
{alignment}
|
|
45
|
+
</MarkButton>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
AlignmentButton.propTypes = {
|
|
50
|
+
alignment: PropTypes.string.isRequired,
|
|
51
|
+
active: PropTypes.bool.isRequired,
|
|
52
|
+
onClick: PropTypes.func.isRequired,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export class ImageToolbar extends React.Component {
|
|
56
|
+
static propTypes = {
|
|
57
|
+
onChange: PropTypes.func.isRequired,
|
|
58
|
+
alignment: PropTypes.string,
|
|
59
|
+
alt: PropTypes.string,
|
|
60
|
+
imageLoaded: PropTypes.bool,
|
|
61
|
+
disableImageAlignmentButtons: PropTypes.bool,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
onAltTextDone: any = (newAlt) => {
|
|
65
|
+
log('[onAltTextDone]: alt:', newAlt);
|
|
66
|
+
|
|
67
|
+
this.props.onChange({ alt: newAlt }, true);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
onAlignmentClick: any = (alignment) => {
|
|
71
|
+
log('[onAlignmentClick]: alignment:', alignment);
|
|
72
|
+
this.props.onChange({ alignment });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
renderDialog: any = () => {
|
|
76
|
+
const { alt } = this.props;
|
|
77
|
+
const popoverEl = document.createElement('div');
|
|
78
|
+
|
|
79
|
+
const el = <AltDialog alt={alt} onDone={this.onAltTextDone} />;
|
|
80
|
+
|
|
81
|
+
ReactDOM.render(el, popoverEl);
|
|
82
|
+
|
|
83
|
+
document.body.appendChild(popoverEl);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
render() {
|
|
87
|
+
const { alignment, imageLoaded, disableImageAlignmentButtons } = this.props;
|
|
88
|
+
return (
|
|
89
|
+
<StyledHolder>
|
|
90
|
+
{!disableImageAlignmentButtons && (
|
|
91
|
+
<>
|
|
92
|
+
<AlignmentButton alignment={'left'} active={alignment === 'left'} onClick={this.onAlignmentClick} />
|
|
93
|
+
<AlignmentButton alignment={'center'} active={alignment === 'center'} onClick={this.onAlignmentClick} />
|
|
94
|
+
<AlignmentButton alignment={'right'} active={alignment === 'right'} onClick={this.onAlignmentClick} />
|
|
95
|
+
</>
|
|
96
|
+
)}
|
|
97
|
+
<StyledAltText
|
|
98
|
+
disabled={!imageLoaded}
|
|
99
|
+
hasAlignmentButtons={!disableImageAlignmentButtons}
|
|
100
|
+
onMouseDown={(event) => imageLoaded && this.renderDialog(event)}
|
|
101
|
+
>
|
|
102
|
+
Alt text
|
|
103
|
+
</StyledAltText>
|
|
104
|
+
</StyledHolder>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export default ImageToolbar;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @synced-from pie-lib/packages/editable-html-tip-tap/src/components/image/InsertImageHandler.js
|
|
4
|
+
* @auto-generated
|
|
5
|
+
*
|
|
6
|
+
* This file is automatically synced from pie-elements and converted to TypeScript.
|
|
7
|
+
* Manual edits will be overwritten on next sync.
|
|
8
|
+
* To make changes, edit the upstream JavaScript file and run sync again.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import debug from 'debug';
|
|
12
|
+
|
|
13
|
+
const log = debug('@pie-lib:editable-html:image:insert-image-handler');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Handles user selection, insertion (or cancellation) of an image into the editor.
|
|
17
|
+
* @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
|
|
18
|
+
* @param {Function} onFinish - a function to call if uploading fails or succeeds
|
|
19
|
+
* @param {Function} getValue - a function to return the value of the editor
|
|
20
|
+
* @param {Function} onChange - callback to notify changes applied by the handler
|
|
21
|
+
* @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
|
|
22
|
+
*/
|
|
23
|
+
class InsertImageHandler {
|
|
24
|
+
constructor(editor, node, onFinish, isPasted = false) {
|
|
25
|
+
this.editor = editor;
|
|
26
|
+
this.node = node;
|
|
27
|
+
|
|
28
|
+
let nodePos;
|
|
29
|
+
|
|
30
|
+
editor.state.doc.descendants((node, pos) => {
|
|
31
|
+
if (node === this.node) {
|
|
32
|
+
nodePos = pos;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
this.nodePos = nodePos;
|
|
38
|
+
this.onFinish = onFinish;
|
|
39
|
+
this.isPasted = isPasted;
|
|
40
|
+
this.chosenFile = null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
cancel() {
|
|
44
|
+
log('insert cancelled');
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
this.deleteNode();
|
|
48
|
+
this.onFinish(false);
|
|
49
|
+
} catch (err) {
|
|
50
|
+
//
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
updateNode(newAttrs) {
|
|
55
|
+
const { state, view } = this.editor;
|
|
56
|
+
const { tr } = state;
|
|
57
|
+
const node = state.doc.nodeAt(this.nodePos);
|
|
58
|
+
|
|
59
|
+
if (node) {
|
|
60
|
+
const transaction = tr.setNodeMarkup(this.nodePos, undefined, { ...node.attrs, ...newAttrs });
|
|
61
|
+
|
|
62
|
+
view.dispatch(transaction);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
deleteNode() {
|
|
67
|
+
const { state, view } = this.editor;
|
|
68
|
+
const { tr } = state;
|
|
69
|
+
|
|
70
|
+
const transaction = tr.delete(this.nodePos, this.nodePos + this.node.nodeSize);
|
|
71
|
+
|
|
72
|
+
view.dispatch(transaction);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
done(err, src) {
|
|
76
|
+
log('done: err:', err);
|
|
77
|
+
if (err) {
|
|
78
|
+
//eslint-disable-next-line
|
|
79
|
+
console.log(err);
|
|
80
|
+
this.onFinish(false);
|
|
81
|
+
} else {
|
|
82
|
+
this.updateNode({ loaded: true, src, percent: 100 });
|
|
83
|
+
this.onFinish(true);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Notify handler that the user chose a file - will create a change with a preview in the editor.
|
|
89
|
+
*
|
|
90
|
+
* @param {File} file - the file that the user chose using a file input.
|
|
91
|
+
*/
|
|
92
|
+
fileChosen(file) {
|
|
93
|
+
if (!file) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Save the chosen file to this.chosenFile
|
|
98
|
+
this.chosenFile = file;
|
|
99
|
+
|
|
100
|
+
log('[fileChosen] file: ', file);
|
|
101
|
+
const reader = new FileReader();
|
|
102
|
+
reader.onload = () => {
|
|
103
|
+
const dataURL = reader.result;
|
|
104
|
+
|
|
105
|
+
this.updateNode({ src: dataURL });
|
|
106
|
+
};
|
|
107
|
+
reader.readAsDataURL(file);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
progress(percent, bytes, total) {
|
|
111
|
+
log('progress: ', percent, bytes, total);
|
|
112
|
+
this.updateNode({ percent });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Add a getter method to retrieve the chosen file
|
|
116
|
+
getChosenFile() {
|
|
117
|
+
return this.chosenFile;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export default InsertImageHandler;
|