@pie-lib/editable-html-tip-tap 1.0.2 → 1.0.3

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 (129) hide show
  1. package/lib/components/CharacterPicker.js +221 -0
  2. package/lib/components/EditableHtml.js +323 -0
  3. package/lib/components/MenuBar.js +693 -0
  4. package/lib/components/TiptapContainer.js +90 -0
  5. package/lib/components/buttons/done-button.js +53 -0
  6. package/lib/components/characters/characterUtils.js +112 -0
  7. package/lib/components/characters/custom-popper.js +73 -0
  8. package/lib/components/common/done-button.js +53 -0
  9. package/lib/components/icons/CssIcon.js +37 -0
  10. package/lib/components/icons/RespArea.js +95 -0
  11. package/lib/components/icons/TableIcons.js +69 -0
  12. package/lib/components/icons/TextAlign.js +194 -0
  13. package/lib/components/icons/index.js +194 -0
  14. package/lib/components/image/ImageToolbar.js +16 -0
  15. package/lib/components/image/InsertImageHandler.js +16 -0
  16. package/lib/components/media/MediaDialog.js +16 -0
  17. package/lib/components/media/MediaToolbar.js +16 -0
  18. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +94 -0
  19. package/lib/components/respArea/DragInTheBlank/choice.js +289 -0
  20. package/lib/components/respArea/DragInTheBlank.js +94 -0
  21. package/lib/components/respArea/ExplicitConstructedResponse.js +120 -0
  22. package/lib/components/respArea/InlineDropdown.js +126 -0
  23. package/lib/components/respArea/ToolbarIcon.js +105 -0
  24. package/lib/components/respArea/choice.js +2 -0
  25. package/lib/extensions/component.js +5 -5
  26. package/lib/extensions/custom-toolbar-wrapper.js +2 -4
  27. package/lib/extensions/extended-table.js +30 -0
  28. package/lib/extensions/index.js +52 -0
  29. package/lib/extensions/media.js +5 -5
  30. package/lib/extensions/responseArea.js +7 -7
  31. package/lib/index.js +16 -1481
  32. package/lib/plugins/index.js +8 -80
  33. package/lib/styles/editorContainerStyles.js +200 -0
  34. package/lib/utils/size.js +34 -0
  35. package/package.json +1 -1
  36. package/src/components/CharacterPicker.jsx +185 -0
  37. package/src/components/EditableHtml.jsx +306 -0
  38. package/src/components/MenuBar.jsx +630 -0
  39. package/src/components/TiptapContainer.jsx +96 -0
  40. package/src/components/characters/characterUtils.js +127 -0
  41. package/src/components/image/ImageToolbar.jsx +1 -0
  42. package/src/components/image/InsertImageHandler.js +1 -0
  43. package/src/components/media/MediaDialog.js +1 -0
  44. package/src/components/media/MediaToolbar.jsx +1 -0
  45. package/src/{plugins/respArea/drag-in-the-blank → components/respArea/DragInTheBlank}/choice.jsx +1 -1
  46. package/src/{plugins/respArea/inline-dropdown/index.jsx → components/respArea/InlineDropdown.jsx} +1 -1
  47. package/src/components/respArea/ToolbarIcon.jsx +68 -0
  48. package/src/extensions/component.jsx +2 -2
  49. package/src/extensions/custom-toolbar-wrapper.jsx +6 -7
  50. package/src/extensions/extended-table.js +27 -0
  51. package/src/extensions/index.js +76 -0
  52. package/src/extensions/media.js +10 -4
  53. package/src/extensions/responseArea.js +7 -7
  54. package/src/index.jsx +3 -1440
  55. package/src/styles/editorContainerStyles.js +203 -0
  56. package/src/utils/size.js +32 -0
  57. package/src/__tests__/editor.test.jsx +0 -363
  58. package/src/__tests__/serialization.test.js +0 -291
  59. package/src/block-tags.js +0 -17
  60. package/src/editor.jsx +0 -1197
  61. package/src/extensions/characters.js +0 -46
  62. package/src/old-index.jsx +0 -162
  63. package/src/parse-html.js +0 -8
  64. package/src/plugins/README.md +0 -27
  65. package/src/plugins/characters/index.jsx +0 -284
  66. package/src/plugins/characters/utils.js +0 -447
  67. package/src/plugins/css/index.jsx +0 -340
  68. package/src/plugins/customPlugin/index.jsx +0 -85
  69. package/src/plugins/html/icons/index.jsx +0 -19
  70. package/src/plugins/html/index.jsx +0 -72
  71. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +0 -51
  72. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +0 -27
  73. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +0 -44
  74. package/src/plugins/image/__tests__/component.test.jsx +0 -41
  75. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +0 -42
  76. package/src/plugins/image/__tests__/image-toolbar.test.jsx +0 -11
  77. package/src/plugins/image/__tests__/index.test.js +0 -95
  78. package/src/plugins/image/__tests__/insert-image-handler.test.js +0 -113
  79. package/src/plugins/image/__tests__/mock-change.js +0 -15
  80. package/src/plugins/image/alt-dialog.jsx +0 -82
  81. package/src/plugins/image/component.jsx +0 -343
  82. package/src/plugins/image/image-toolbar.jsx +0 -100
  83. package/src/plugins/image/index.jsx +0 -227
  84. package/src/plugins/image/insert-image-handler.js +0 -79
  85. package/src/plugins/index.jsx +0 -377
  86. package/src/plugins/list/__tests__/index.test.js +0 -54
  87. package/src/plugins/list/index.jsx +0 -305
  88. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +0 -48
  89. package/src/plugins/math/__tests__/index.test.jsx +0 -245
  90. package/src/plugins/math/index.jsx +0 -379
  91. package/src/plugins/media/__tests__/index.test.js +0 -75
  92. package/src/plugins/media/index.jsx +0 -325
  93. package/src/plugins/media/media-dialog.js +0 -624
  94. package/src/plugins/media/media-toolbar.jsx +0 -56
  95. package/src/plugins/media/media-wrapper.jsx +0 -43
  96. package/src/plugins/rendering/index.js +0 -31
  97. package/src/plugins/respArea/index.jsx +0 -299
  98. package/src/plugins/respArea/math-templated/index.jsx +0 -104
  99. package/src/plugins/respArea/utils.jsx +0 -90
  100. package/src/plugins/table/CustomTablePlugin.js +0 -113
  101. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +0 -44
  102. package/src/plugins/table/__tests__/index.test.jsx +0 -401
  103. package/src/plugins/table/__tests__/table-toolbar.test.jsx +0 -42
  104. package/src/plugins/table/index.jsx +0 -427
  105. package/src/plugins/table/table-toolbar.jsx +0 -136
  106. package/src/plugins/textAlign/index.jsx +0 -23
  107. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +0 -923
  108. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +0 -20
  109. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +0 -36
  110. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +0 -46
  111. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +0 -94
  112. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +0 -37
  113. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +0 -51
  114. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +0 -106
  115. package/src/plugins/toolbar/default-toolbar.jsx +0 -206
  116. package/src/plugins/toolbar/editor-and-toolbar.jsx +0 -257
  117. package/src/plugins/toolbar/index.jsx +0 -23
  118. package/src/plugins/toolbar/toolbar-buttons.jsx +0 -138
  119. package/src/plugins/toolbar/toolbar.jsx +0 -338
  120. package/src/plugins/utils.js +0 -31
  121. package/src/serialization.jsx +0 -621
  122. /package/src/{plugins → components}/characters/custom-popper.js +0 -0
  123. /package/src/{plugins/toolbar → components/common}/done-button.jsx +0 -0
  124. /package/src/{plugins/css/icons/index.jsx → components/icons/CssIcon.jsx} +0 -0
  125. /package/src/{plugins/respArea/icons/index.jsx → components/icons/RespArea.jsx} +0 -0
  126. /package/src/{plugins/table/icons/index.jsx → components/icons/TableIcons.jsx} +0 -0
  127. /package/src/{plugins/textAlign/icons/index.jsx → components/icons/TextAlign.jsx} +0 -0
  128. /package/src/{plugins/respArea/drag-in-the-blank/index.jsx → components/respArea/DragInTheBlank/DragInTheBlank.jsx} +0 -0
  129. /package/src/{plugins/respArea/explicit-constructed-response/index.jsx → components/respArea/ExplicitConstructedResponse.jsx} +0 -0
@@ -1,257 +0,0 @@
1
- import React from 'react';
2
- import Toolbar from './toolbar';
3
- import classNames from 'classnames';
4
- import debug from 'debug';
5
- import { primary } from '../../theme';
6
- import { withStyles } from '@material-ui/core/styles';
7
- import PropTypes from 'prop-types';
8
- import SlatePropTypes from 'slate-prop-types';
9
- import { color } from '@pie-lib/render-ui';
10
-
11
- const log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');
12
-
13
- export class EditorAndToolbar extends React.Component {
14
- static propTypes = {
15
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
16
- value: SlatePropTypes.value.isRequired,
17
- plugins: PropTypes.array.isRequired,
18
- onChange: PropTypes.func.isRequired,
19
- getFocusedValue: PropTypes.func.isRequired,
20
- onDone: PropTypes.func.isRequired,
21
- onDataChange: PropTypes.func,
22
- toolbarRef: PropTypes.func,
23
- focusedNode: SlatePropTypes.node,
24
- readOnly: PropTypes.bool,
25
- disableScrollbar: PropTypes.bool,
26
- disableUnderline: PropTypes.bool,
27
- autoWidth: PropTypes.bool,
28
- classes: PropTypes.object.isRequired,
29
- pluginProps: PropTypes.object,
30
- toolbarOpts: PropTypes.shape({
31
- position: PropTypes.oneOf(['bottom', 'top']),
32
- alwaysVisible: PropTypes.bool,
33
- error: PropTypes.string,
34
- noBorder: PropTypes.any,
35
- noPadding: PropTypes.any,
36
- }),
37
- focusToolbar: PropTypes.bool.isRequired,
38
- onToolbarFocus: PropTypes.func.isRequired,
39
- onToolbarBlur: PropTypes.func.isRequired,
40
- doneButtonRef: PropTypes.func,
41
- };
42
-
43
- render() {
44
- const {
45
- classes,
46
- children,
47
- value,
48
- plugins,
49
- onChange,
50
- getFocusedValue,
51
- onDone,
52
- focusedNode,
53
- autoWidth,
54
- readOnly,
55
- disableScrollbar,
56
- disableUnderline,
57
- pluginProps,
58
- toolbarOpts,
59
- onDataChange,
60
- toolbarRef,
61
- doneButtonRef,
62
- focusToolbar,
63
- onToolbarFocus,
64
- onToolbarBlur,
65
- } = this.props;
66
-
67
- let inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined) || focusToolbar;
68
-
69
- const holderNames = classNames(classes.editorHolder, {
70
- [classes.editorInFocus]: inFocus,
71
- [classes.readOnly]: readOnly,
72
- [classes.disabledUnderline]: disableUnderline,
73
- [classes.disabledScrollbar]: disableScrollbar,
74
- });
75
-
76
- let clonedChildren = children;
77
-
78
- if (typeof children !== 'string') {
79
- clonedChildren = React.cloneElement(children, {
80
- ref: (el) => (this.editorRef = el),
81
- });
82
- }
83
-
84
- log('[render] inFocus: ', inFocus, 'value.isFocused:', value.isFocused, 'focused node: ', focusedNode);
85
-
86
- return (
87
- <div
88
- className={classNames(
89
- {
90
- [classes.noBorder]: toolbarOpts && toolbarOpts.noBorder,
91
- [classes.error]: toolbarOpts && toolbarOpts.error,
92
- },
93
- classes.root,
94
- )}
95
- >
96
- <div className={holderNames}>
97
- <div
98
- className={classNames(
99
- {
100
- [classes.noPadding]: toolbarOpts && toolbarOpts.noPadding,
101
- },
102
- classes.children,
103
- )}
104
- >
105
- {clonedChildren}
106
- </div>
107
- </div>
108
-
109
- <Toolbar
110
- autoWidth={autoWidth}
111
- plugins={plugins}
112
- focusedNode={focusedNode}
113
- value={value}
114
- isFocused={inFocus}
115
- onBlur={onToolbarBlur}
116
- onFocus={onToolbarFocus}
117
- onChange={onChange}
118
- getFocusedValue={getFocusedValue}
119
- onDone={onDone}
120
- onDataChange={onDataChange}
121
- toolbarRef={toolbarRef}
122
- doneButtonRef={doneButtonRef}
123
- pluginProps={pluginProps}
124
- toolbarOpts={toolbarOpts}
125
- />
126
- </div>
127
- );
128
- }
129
- }
130
-
131
- const style = (theme) => ({
132
- root: {
133
- position: 'relative',
134
- padding: '0px',
135
- border: '1px solid #ccc',
136
- borderRadius: '4px',
137
- cursor: 'text',
138
- '& [data-slate-editor="true"]': {
139
- wordBreak: 'break-word',
140
- overflow: 'visible',
141
- maxHeight: '500px',
142
- // needed in order to be able to put the focus before a void element when it is the first one in the editor
143
- padding: '5px',
144
- },
145
- },
146
- children: {
147
- padding: '10px 16px',
148
- },
149
- editorHolder: {
150
- position: 'relative',
151
- padding: '0px',
152
- overflowY: 'auto',
153
- color: color.text(),
154
- backgroundColor: color.background(),
155
- '&::before': {
156
- left: '0',
157
- right: '0',
158
- bottom: '0',
159
- height: '1px',
160
- content: '""',
161
- position: 'absolute',
162
- transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
163
- pointerEvents: 'none',
164
- backgroundColor: 'rgba(0, 0, 0, 0.42)',
165
- },
166
- '&::after': {
167
- left: '0',
168
- right: '0',
169
- bottom: '0',
170
- height: '1px',
171
- content: '""',
172
- position: 'absolute',
173
- transform: 'scaleX(0)',
174
- transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',
175
- backgroundColor: 'rgba(0, 0, 0, 0.42)',
176
- },
177
- '&:focus': {
178
- '&::after': {
179
- transform: 'scaleX(1)',
180
- backgroundColor: primary,
181
- height: '2px',
182
- },
183
- },
184
- '&:hover': {
185
- '&::after': {
186
- transform: 'scaleX(1)',
187
- backgroundColor: theme.palette.common.black,
188
- height: '2px',
189
- },
190
- },
191
- },
192
- disabledUnderline: {
193
- '&::before': {
194
- display: 'none',
195
- },
196
- '&::after': {
197
- display: 'none',
198
- },
199
- },
200
- disabledScrollbar: {
201
- '&::-webkit-scrollbar': {
202
- display: 'none',
203
- },
204
- scrollbarWidth: 'none',
205
- '-ms-overflow-style': 'none',
206
- },
207
- readOnly: {
208
- '&::before': {
209
- background: 'transparent',
210
- backgroundSize: '5px 1px',
211
- backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',
212
- backgroundRepeat: 'repeat-x',
213
- backgroundPosition: 'left top',
214
- },
215
- '&::after': {
216
- left: '0',
217
- right: '0',
218
- bottom: '0',
219
- height: '1px',
220
- content: '""',
221
- position: 'absolute',
222
- transform: 'scaleX(0)',
223
- transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',
224
- backgroundColor: 'rgba(0, 0, 0, 0)',
225
- },
226
- '&:hover': {
227
- '&::after': {
228
- transform: 'scaleX(0)',
229
- backgroundColor: theme.palette.common.black,
230
- height: '2px',
231
- },
232
- },
233
- },
234
- editorInFocus: {
235
- '&::after': {
236
- transform: 'scaleX(1)',
237
- backgroundColor: primary,
238
- height: '2px',
239
- },
240
- '&:hover': {
241
- '&::after': {
242
- backgroundColor: primary,
243
- },
244
- },
245
- },
246
- error: {
247
- border: `2px solid ${theme.palette.error.main} !important`,
248
- },
249
- noBorder: {
250
- border: 'none',
251
- },
252
- noPadding: {
253
- padding: 0,
254
- },
255
- });
256
-
257
- export default withStyles(style)(EditorAndToolbar);
@@ -1,23 +0,0 @@
1
- import React from 'react';
2
-
3
- import EditorAndToolbar from './editor-and-toolbar';
4
-
5
- /**
6
- * Adds a toolbar which is shown when the editor is focused.
7
- * @param {*} opts
8
- */
9
- export default function ToolbarPlugin(opts) {
10
- return {
11
- /* eslint-disable-next-line */
12
- renderEditor: (props) => (
13
- <EditorAndToolbar
14
- {...props}
15
- mainEditorRef={opts.mainEditorRef}
16
- disableScrollbar={opts.disableScrollbar}
17
- disableUnderline={opts.disableUnderline}
18
- autoWidth={opts.autoWidth}
19
- onDone={opts.onDone}
20
- />
21
- ),
22
- };
23
- }
@@ -1,138 +0,0 @@
1
- import React from 'react';
2
- import debug from 'debug';
3
- import { withStyles } from '@material-ui/core/styles';
4
- import classNames from 'classnames';
5
- import PropTypes from 'prop-types';
6
-
7
- const styles = (theme) => ({
8
- button: {
9
- color: 'grey',
10
- display: 'inline-flex',
11
- padding: '2px',
12
- background: 'none',
13
- border: 'none',
14
- cursor: 'pointer',
15
- '&:hover': {
16
- color: 'black',
17
- },
18
- '&:focus': {
19
- outline: `2px solid ${theme.palette.grey[700]}`,
20
- },
21
- },
22
- active: {
23
- color: 'black',
24
- },
25
- disabled: {
26
- opacity: 0.7,
27
- cursor: 'not-allowed',
28
- '& :hover': {
29
- color: 'grey',
30
- },
31
- },
32
- });
33
-
34
- const log = debug('pie-elements:editable-html:raw-button');
35
-
36
- export class RawButton extends React.Component {
37
- static propTypes = {
38
- onClick: PropTypes.func.isRequired,
39
- classes: PropTypes.object.isRequired,
40
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
41
- active: PropTypes.bool,
42
- disabled: PropTypes.bool,
43
- extraStyles: PropTypes.object,
44
- };
45
-
46
- constructor(props) {
47
- super(props);
48
- }
49
-
50
- onClick = (e) => {
51
- log('[onClick]');
52
- e.preventDefault();
53
- const { onClick } = this.props;
54
- onClick(e);
55
- };
56
-
57
- onKeyDown = (e) => {
58
- if (e.key === 'Enter' || e.key === ' ') {
59
- log('[onKeyDown]');
60
- e.preventDefault();
61
- const { onClick } = this.props;
62
- onClick(e);
63
- }
64
- };
65
-
66
- render() {
67
- const { active, classes, children, disabled, extraStyles, ariaLabel } = this.props;
68
-
69
- const names = classNames(classes.button, {
70
- [classes.active]: active,
71
- [classes.disabled]: disabled,
72
- });
73
-
74
- return (
75
- <button
76
- style={extraStyles}
77
- className={names}
78
- onMouseDown={this.onClick}
79
- onKeyDown={this.onKeyDown}
80
- disabled={disabled}
81
- aria-label={ariaLabel}
82
- aria-pressed={active}
83
- tabIndex={0}
84
- >
85
- {children}
86
- </button>
87
- );
88
- }
89
- }
90
-
91
- export const Button = withStyles(styles)(RawButton);
92
-
93
- export class RawMarkButton extends React.Component {
94
- static propTypes = {
95
- onToggle: PropTypes.func.isRequired,
96
- mark: PropTypes.string,
97
- label: PropTypes.string.isRequired,
98
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
99
- classes: PropTypes.object.isRequired,
100
- active: PropTypes.bool,
101
- };
102
-
103
- constructor(props) {
104
- super(props);
105
- }
106
-
107
- onToggle = (e) => {
108
- e.preventDefault();
109
- this.props.onToggle(this.props.mark);
110
- };
111
-
112
- onKeyDown = (e) => {
113
- if (e.key === 'Enter' || e.key === ' ') {
114
- e.preventDefault();
115
- this.props.onToggle(this.props.mark);
116
- }
117
- };
118
-
119
- render() {
120
- const { classes, children, active, label } = this.props;
121
-
122
- const names = classNames(classes.button, active && classes.active);
123
- return (
124
- <button
125
- className={names}
126
- onMouseDown={this.onToggle}
127
- aria-pressed={active}
128
- onKeyDown={this.onKeyDown}
129
- aria-label={label}
130
- tabIndex={0}
131
- >
132
- {children}
133
- </button>
134
- );
135
- }
136
- }
137
-
138
- export const MarkButton = withStyles(styles)(RawMarkButton);