@pie-lib/editable-html 10.0.0-beta.7 → 10.0.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/CHANGELOG.json +1 -1
- package/CHANGELOG.md +81 -0
- package/LICENSE.md +5 -0
- package/lib/editor.js +410 -543
- package/lib/editor.js.map +1 -1
- package/lib/index.js +200 -101
- package/lib/index.js.map +1 -1
- package/lib/parse-html.js +5 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +12 -2
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +71 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/html/icons/index.js +38 -0
- package/lib/plugins/html/icons/index.js.map +1 -0
- package/lib/plugins/html/index.js +75 -0
- package/lib/plugins/html/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +26 -0
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +124 -90
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +45 -7
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +91 -113
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +54 -72
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +71 -31
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +129 -58
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +152 -118
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +185 -168
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +197 -110
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +24 -4
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +65 -23
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +50 -10
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +22 -9
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +9 -4
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +18 -1
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +133 -122
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +10 -4
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +33 -15
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +7 -0
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +279 -390
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +47 -14
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +63 -51
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +9 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +140 -83
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +5 -0
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +39 -8
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +261 -225
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +16 -19
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +70 -11
- package/lib/serialization.js.map +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -17
- package/src/editor.jsx +139 -434
- package/src/index.jsx +96 -62
- package/src/plugins/characters/index.jsx +17 -12
- package/src/plugins/html/icons/index.jsx +19 -0
- package/src/plugins/html/index.jsx +68 -0
- package/src/plugins/image/component.jsx +38 -60
- package/src/plugins/image/index.jsx +42 -95
- package/src/plugins/image/insert-image-handler.js +27 -62
- package/src/plugins/index.jsx +39 -21
- package/src/plugins/list/index.jsx +90 -62
- package/src/plugins/math/index.jsx +70 -93
- package/src/plugins/media/index.jsx +117 -146
- package/src/plugins/media/media-dialog.js +9 -10
- package/src/plugins/media/media-wrapper.jsx +27 -29
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -5
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +1 -2
- package/src/plugins/respArea/index.jsx +84 -114
- package/src/plugins/respArea/inline-dropdown/index.jsx +2 -3
- package/src/plugins/respArea/utils.jsx +28 -23
- package/src/plugins/table/index.jsx +214 -334
- package/src/plugins/table/table-toolbar.jsx +4 -3
- package/src/plugins/toolbar/default-toolbar.jsx +30 -48
- package/src/plugins/toolbar/editor-and-toolbar.jsx +114 -114
- package/src/plugins/toolbar/toolbar.jsx +224 -254
- package/src/plugins/utils.js +0 -16
- package/src/serialization.jsx +1 -1
- package/lib/components.js +0 -92
- package/lib/components.js.map +0 -1
- package/lib/new-serialization.js +0 -280
- package/lib/new-serialization.js.map +0 -1
- package/lib/plugins/hotKeys/index.js +0 -60
- package/lib/plugins/hotKeys/index.js.map +0 -1
- package/lib/test-serializer.js +0 -138
- package/lib/test-serializer.js.map +0 -1
- package/src/components.js +0 -135
- package/src/new-serialization.jsx +0 -310
- package/src/plugins/hotKeys/index.js +0 -54
- package/src/test-serializer.js +0 -132
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports["default"] = ResponseAreaPlugin;
|
|
8
9
|
exports.serialization = void 0;
|
|
9
|
-
|
|
10
|
+
|
|
10
11
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
-
|
|
12
|
-
var _slateHyperscript = require("slate-hyperscript");
|
|
12
|
+
|
|
13
13
|
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
-
|
|
15
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
14
|
+
|
|
16
15
|
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
16
|
+
|
|
17
17
|
var _inlineDropdown = _interopRequireDefault(require("./inline-dropdown"));
|
|
18
|
+
|
|
18
19
|
var _dragInTheBlank = _interopRequireDefault(require("./drag-in-the-blank"));
|
|
20
|
+
|
|
19
21
|
var _explicitConstructedResponse = _interopRequireDefault(require("./explicit-constructed-response"));
|
|
22
|
+
|
|
20
23
|
var _utils = require("./utils");
|
|
24
|
+
|
|
21
25
|
var _icons = require("./icons");
|
|
26
|
+
|
|
22
27
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:respArea');
|
|
23
28
|
var lastIndexMap = {};
|
|
24
29
|
var elTypesMap = {
|
|
@@ -27,178 +32,165 @@ var elTypesMap = {
|
|
|
27
32
|
'drag-in-the-blank': 'drag_in_the_blank'
|
|
28
33
|
};
|
|
29
34
|
var elTypesArray = Object.values(elTypesMap);
|
|
35
|
+
|
|
30
36
|
function ResponseAreaPlugin(opts) {
|
|
31
37
|
var isOfCurrentType = function isOfCurrentType(d) {
|
|
32
38
|
return d.type === opts.type || d.type === elTypesMap[opts.type];
|
|
33
39
|
};
|
|
40
|
+
|
|
34
41
|
var toolbar = {
|
|
35
42
|
icon: /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null),
|
|
36
43
|
buttonStyles: {
|
|
37
44
|
margin: '0 20px 0 auto'
|
|
38
45
|
},
|
|
39
|
-
onClick: function onClick(
|
|
46
|
+
onClick: function onClick(value, onChange) {
|
|
40
47
|
log('[toolbar] onClick');
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var _ref2 = (0, _slicedToArray2["default"])(_ref, 1),
|
|
46
|
-
d = _ref2[0];
|
|
47
|
-
return d;
|
|
48
|
-
});
|
|
49
|
-
descendants.forEach(function (d) {
|
|
50
|
-
if (isOfCurrentType(d)) {
|
|
51
|
-
currentRespAreaList.push(d);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
if (currentRespAreaList.length >= opts.maxResponseAreas) {
|
|
48
|
+
var change = value.change();
|
|
49
|
+
var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
|
|
50
|
+
|
|
51
|
+
if (currentRespAreaList.size >= opts.maxResponseAreas) {
|
|
55
52
|
return;
|
|
56
53
|
}
|
|
54
|
+
|
|
57
55
|
var type = opts.type.replace(/-/g, '_');
|
|
58
56
|
var prevIndex = lastIndexMap[type];
|
|
59
|
-
var newIndex =
|
|
57
|
+
var newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;
|
|
60
58
|
var newInline = (0, _utils.getDefaultElement)(opts, newIndex);
|
|
61
59
|
lastIndexMap[type] += 1;
|
|
60
|
+
|
|
62
61
|
if (newInline) {
|
|
63
|
-
|
|
62
|
+
if (change.value.selection.startKey || change.value.selection.endKey) {
|
|
64
63
|
change.insertInline(newInline);
|
|
65
64
|
} else {
|
|
66
65
|
// If the markup is empty and there's no focus
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
var lastText = value.document.getLastText();
|
|
67
|
+
|
|
68
|
+
if (!lastText) {
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
|
|
72
|
+
var parentNode = value.document.getParent(lastText.key);
|
|
73
|
+
|
|
74
|
+
if (parentNode) {
|
|
75
|
+
var index = parentNode.nodes.indexOf(lastText.key);
|
|
76
|
+
if (parentNode.isVoid) return;
|
|
77
|
+
change.insertNodeByKey(parentNode.key, index + 1, newInline);
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
|
|
81
|
+
if (newInline.type === 'drag_in_the_blank') {
|
|
82
|
+
var nextText = change.value.document.getNextText(newInline.key);
|
|
83
|
+
|
|
84
|
+
if (nextText) {
|
|
81
85
|
change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
|
|
82
86
|
}
|
|
83
|
-
}
|
|
84
|
-
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
onChange(change);
|
|
85
90
|
}
|
|
86
91
|
},
|
|
87
92
|
customToolbar: opts.respAreaToolbar,
|
|
93
|
+
supports: function supports(node) {
|
|
94
|
+
return node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0;
|
|
95
|
+
},
|
|
88
96
|
showDone: false
|
|
89
97
|
};
|
|
90
98
|
return {
|
|
91
99
|
name: 'response_area',
|
|
92
100
|
toolbar: toolbar,
|
|
93
|
-
rules: function rules(editor) {
|
|
94
|
-
var isVoid = editor.isVoid,
|
|
95
|
-
isInline = editor.isInline,
|
|
96
|
-
onChange = editor.onChange;
|
|
97
|
-
editor.isVoid = function (element) {
|
|
98
|
-
return elTypesArray.includes(element.type) ? true : isVoid(element);
|
|
99
|
-
};
|
|
100
|
-
editor.isInline = function (element) {
|
|
101
|
-
return elTypesArray.includes(element.type) ? true : isInline(element);
|
|
102
|
-
};
|
|
103
|
-
var oldEditor = (0, _cloneDeep["default"])(editor);
|
|
104
|
-
editor.onChange = function (options) {
|
|
105
|
-
var descendants = Array.from(_slate.Node.descendants(editor, {
|
|
106
|
-
reverse: true
|
|
107
|
-
})).map(function (_ref3) {
|
|
108
|
-
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 1),
|
|
109
|
-
d = _ref4[0];
|
|
110
|
-
return d;
|
|
111
|
-
});
|
|
112
|
-
var type = opts.type.replace(/-/g, '_');
|
|
113
|
-
if ((0, _isUndefined["default"])(lastIndexMap[type])) {
|
|
114
|
-
lastIndexMap[type] = 0;
|
|
115
|
-
descendants.forEach(function (d) {
|
|
116
|
-
if (d.type === type) {
|
|
117
|
-
var newIndex = parseInt(d.data.index, 10);
|
|
118
|
-
if (newIndex > lastIndexMap[type]) {
|
|
119
|
-
lastIndexMap[type] = newIndex;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
if ((0, _isEqual["default"])(editor, oldEditor)) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
var oldDescendants = Array.from(_slate.Node.descendants(oldEditor, {
|
|
128
|
-
reverse: true
|
|
129
|
-
})).map(function (_ref5) {
|
|
130
|
-
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 1),
|
|
131
|
-
d = _ref6[0];
|
|
132
|
-
return d;
|
|
133
|
-
});
|
|
134
|
-
var currentRespAreaList = descendants.filter(isOfCurrentType);
|
|
135
|
-
var oldRespAreaList = oldDescendants.filter(isOfCurrentType);
|
|
136
|
-
toolbar.disabled = currentRespAreaList.length >= opts.maxResponseAreas;
|
|
137
|
-
var arrayToFilter = oldRespAreaList.length > currentRespAreaList.length ? oldRespAreaList : currentRespAreaList;
|
|
138
|
-
var arrayToUseForFilter = arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;
|
|
139
|
-
var elementsWithChangedStatus = arrayToFilter.filter(function (d) {
|
|
140
|
-
return !arrayToUseForFilter.find(function (e) {
|
|
141
|
-
return e.data.index === d.data.index;
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
if (elementsWithChangedStatus.length && oldRespAreaList.length > currentRespAreaList.length) {
|
|
145
|
-
opts.onHandleAreaChange(elementsWithChangedStatus);
|
|
146
|
-
}
|
|
147
|
-
oldEditor = (0, _cloneDeep["default"])(editor);
|
|
148
|
-
onChange(options);
|
|
149
|
-
};
|
|
150
|
-
return editor;
|
|
151
|
-
},
|
|
152
101
|
filterPlugins: function filterPlugins(node, plugins) {
|
|
153
102
|
if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {
|
|
154
103
|
return [];
|
|
155
104
|
}
|
|
105
|
+
|
|
156
106
|
return plugins.filter(function (p) {
|
|
157
107
|
return p.name !== 'response_area';
|
|
158
108
|
});
|
|
159
109
|
},
|
|
160
|
-
deleteNode: function deleteNode(e, node,
|
|
110
|
+
deleteNode: function deleteNode(e, node, value, onChange) {
|
|
161
111
|
e.preventDefault();
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
path: nodePath
|
|
165
|
-
});
|
|
166
|
-
onChange(editor);
|
|
167
|
-
},
|
|
168
|
-
supports: function supports(node) {
|
|
169
|
-
return elTypesArray.indexOf(node.type) >= 0;
|
|
112
|
+
var change = value.change().removeNodeByKey(node.key);
|
|
113
|
+
onChange(change);
|
|
170
114
|
},
|
|
171
115
|
renderNode: function renderNode(props) {
|
|
172
116
|
var attributes = props.attributes,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
117
|
+
n = props.node;
|
|
118
|
+
|
|
119
|
+
if (n.type === 'explicit_constructed_response') {
|
|
120
|
+
var data = n.data.toJSON();
|
|
176
121
|
var error;
|
|
122
|
+
|
|
177
123
|
if (opts.error) {
|
|
178
124
|
error = opts.error();
|
|
179
125
|
}
|
|
126
|
+
|
|
180
127
|
return /*#__PURE__*/_react["default"].createElement(_explicitConstructedResponse["default"], {
|
|
181
128
|
attributes: attributes,
|
|
182
129
|
value: data.value,
|
|
183
130
|
error: error && error[data.index] && error[data.index][0]
|
|
184
|
-
}
|
|
131
|
+
});
|
|
185
132
|
}
|
|
186
|
-
|
|
187
|
-
|
|
133
|
+
|
|
134
|
+
if (n.type === 'drag_in_the_blank') {
|
|
135
|
+
var _data = n.data.toJSON();
|
|
136
|
+
|
|
188
137
|
return /*#__PURE__*/_react["default"].createElement(_dragInTheBlank["default"], {
|
|
189
138
|
attributes: attributes,
|
|
190
139
|
data: _data,
|
|
191
|
-
n:
|
|
140
|
+
n: n,
|
|
192
141
|
nodeProps: props,
|
|
193
142
|
opts: opts
|
|
194
|
-
}
|
|
143
|
+
});
|
|
195
144
|
}
|
|
196
|
-
|
|
197
|
-
|
|
145
|
+
|
|
146
|
+
if (n.type === 'inline_dropdown') {
|
|
147
|
+
var _data2 = n.data.toJSON();
|
|
148
|
+
|
|
198
149
|
return /*#__PURE__*/_react["default"].createElement(_inlineDropdown["default"], {
|
|
199
150
|
attributes: attributes,
|
|
200
151
|
selectedItem: _data2.value
|
|
201
|
-
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
onChange: function onChange(change, editor) {
|
|
156
|
+
var type = opts.type.replace(/-/g, '_');
|
|
157
|
+
|
|
158
|
+
if ((0, _isUndefined["default"])(lastIndexMap[type])) {
|
|
159
|
+
lastIndexMap[type] = 0;
|
|
160
|
+
change.value.document.forEachDescendant(function (d) {
|
|
161
|
+
if (d.type === type) {
|
|
162
|
+
var newIndex = parseInt(d.data.get('index'), 10);
|
|
163
|
+
|
|
164
|
+
if (newIndex > lastIndexMap[type]) {
|
|
165
|
+
lastIndexMap[type] = newIndex;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (!editor.value) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
var currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);
|
|
176
|
+
var oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);
|
|
177
|
+
|
|
178
|
+
if (currentRespAreaList.size >= opts.maxResponseAreas) {
|
|
179
|
+
toolbar.disabled = true;
|
|
180
|
+
} else {
|
|
181
|
+
toolbar.disabled = false;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
var arrayToFilter = oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;
|
|
185
|
+
var arrayToUseForFilter = arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;
|
|
186
|
+
var elementsWithChangedStatus = arrayToFilter.filter(function (d) {
|
|
187
|
+
return !arrayToUseForFilter.find(function (e) {
|
|
188
|
+
return e.data.get('index') === d.data.get('index');
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {
|
|
193
|
+
opts.onHandleAreaChange(elementsWithChangedStatus);
|
|
202
194
|
}
|
|
203
195
|
},
|
|
204
196
|
onDrop: function onDrop(event, change, editor) {
|
|
@@ -206,67 +198,86 @@ function ResponseAreaPlugin(opts) {
|
|
|
206
198
|
var inline = editor.value.document.findDescendant(function (d) {
|
|
207
199
|
return d.key === closestEl.dataset.key;
|
|
208
200
|
});
|
|
201
|
+
|
|
209
202
|
if (inline.type === 'drag_in_the_blank') {
|
|
210
203
|
return false;
|
|
211
204
|
}
|
|
212
205
|
}
|
|
213
206
|
};
|
|
214
207
|
}
|
|
208
|
+
|
|
215
209
|
var serialization = {
|
|
216
210
|
deserialize: function deserialize(el) {
|
|
217
211
|
var type = el.dataset && el.dataset.type;
|
|
212
|
+
|
|
218
213
|
switch (type) {
|
|
219
214
|
case 'inline_dropdown':
|
|
220
|
-
return
|
|
215
|
+
return {
|
|
216
|
+
object: 'inline',
|
|
221
217
|
type: 'inline_dropdown',
|
|
218
|
+
isVoid: true,
|
|
222
219
|
data: {
|
|
223
220
|
index: el.dataset.index,
|
|
224
221
|
value: el.dataset.value
|
|
225
222
|
}
|
|
226
|
-
}
|
|
223
|
+
};
|
|
224
|
+
|
|
227
225
|
case 'explicit_constructed_response':
|
|
228
|
-
return
|
|
226
|
+
return {
|
|
227
|
+
object: 'inline',
|
|
229
228
|
type: 'explicit_constructed_response',
|
|
229
|
+
isVoid: true,
|
|
230
230
|
data: {
|
|
231
231
|
index: el.dataset.index,
|
|
232
232
|
value: el.dataset.value
|
|
233
233
|
}
|
|
234
|
-
}
|
|
234
|
+
};
|
|
235
|
+
|
|
235
236
|
case 'drag_in_the_blank':
|
|
236
|
-
return
|
|
237
|
+
return {
|
|
238
|
+
object: 'inline',
|
|
237
239
|
type: 'drag_in_the_blank',
|
|
240
|
+
isVoid: true,
|
|
238
241
|
data: {
|
|
239
242
|
index: el.dataset.index,
|
|
240
243
|
id: el.dataset.id,
|
|
241
244
|
value: el.dataset.value,
|
|
242
245
|
inTable: el.dataset.inTable
|
|
243
246
|
}
|
|
244
|
-
}
|
|
247
|
+
};
|
|
245
248
|
}
|
|
246
249
|
},
|
|
247
250
|
serialize: function serialize(object) {
|
|
251
|
+
if (object.object !== 'inline') {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
248
255
|
switch (object.type) {
|
|
249
256
|
case 'inline_dropdown':
|
|
250
257
|
{
|
|
251
|
-
var data = object.data;
|
|
258
|
+
var data = object.data.toJSON();
|
|
252
259
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
253
260
|
"data-type": "inline_dropdown",
|
|
254
261
|
"data-index": data.index,
|
|
255
262
|
"data-value": data.value
|
|
256
263
|
});
|
|
257
264
|
}
|
|
265
|
+
|
|
258
266
|
case 'explicit_constructed_response':
|
|
259
267
|
{
|
|
260
|
-
var _data3 = object.data;
|
|
268
|
+
var _data3 = object.data.toJSON();
|
|
269
|
+
|
|
261
270
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
262
271
|
"data-type": "explicit_constructed_response",
|
|
263
272
|
"data-index": _data3.index,
|
|
264
273
|
"data-value": _data3.value
|
|
265
274
|
});
|
|
266
275
|
}
|
|
276
|
+
|
|
267
277
|
case 'drag_in_the_blank':
|
|
268
278
|
{
|
|
269
|
-
var _data4 = object.data;
|
|
279
|
+
var _data4 = object.data.toJSON();
|
|
280
|
+
|
|
270
281
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
271
282
|
"data-type": "drag_in_the_blank",
|
|
272
283
|
"data-index": _data4.index,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slate","_slateHyperscript","_debug","_cloneDeep","_isEqual","_isUndefined","_inlineDropdown","_dragInTheBlank","_explicitConstructedResponse","_utils","_icons","log","debug","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","isOfCurrentType","d","type","toolbar","icon","createElement","ToolbarIcon","buttonStyles","margin","onClick","editor","currentRespAreaList","descendants","Array","from","SlateNode","reverse","map","_ref","_ref2","_slicedToArray2","forEach","push","length","maxResponseAreas","replace","prevIndex","newIndex","newInline","getDefaultElement","insertNode","customToolbar","respAreaToolbar","showDone","name","rules","isVoid","isInline","onChange","element","includes","oldEditor","cloneDeep","options","_ref3","_ref4","isUndefined","parseInt","data","index","isEqual","oldDescendants","_ref5","_ref6","filter","oldRespAreaList","disabled","arrayToFilter","arrayToUseForFilter","elementsWithChangedStatus","find","e","onHandleAreaChange","filterPlugins","node","plugins","p","deleteNode","nodePath","preventDefault","apply","path","supports","indexOf","renderNode","props","attributes","error","value","children","n","nodeProps","selectedItem","onDrop","event","change","closestEl","target","closest","inline","document","findDescendant","key","dataset","serialization","deserialize","el","jsx","id","inTable","serialize","object","exports"],"sources":["../../../src/plugins/respArea/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Node as SlateNode } from 'slate';\nimport { jsx } from 'slate-hyperscript';\nimport debug from 'debug';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport isUndefined from 'lodash/isUndefined';\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank',\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const isOfCurrentType = (d) => d.type === opts.type || d.type === elTypesMap[opts.type];\n\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto',\n },\n onClick: editor => {\n log('[toolbar] onClick');\n const currentRespAreaList = [];\n const descendants = Array.from(SlateNode.descendants(editor, { reverse: true })).map(\n ([d]) => d\n );\n\n descendants.forEach(d => {\n if (isOfCurrentType(d)) {\n currentRespAreaList.push(d);\n }\n });\n\n if (currentRespAreaList.length >= opts.maxResponseAreas) {\n return;\n }\n\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = !prevIndex ? 0 : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n /* if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n\n if (!lastText) {\n return;\n }\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }*/\n editor.insertNode(newInline);\n }\n },\n customToolbar: opts.respAreaToolbar,\n showDone: false,\n };\n\n return {\n name: 'response_area',\n toolbar,\n rules: editor => {\n const { isVoid, isInline, onChange } = editor;\n\n editor.isVoid = element => {\n return elTypesArray.includes(element.type) ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return elTypesArray.includes(element.type) ? true : isInline(element);\n };\n\n let oldEditor = cloneDeep(editor);\n\n editor.onChange = options => {\n const descendants = Array.from(SlateNode.descendants(editor, { reverse: true })).map(\n ([d]) => d\n );\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n descendants.forEach(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.index, 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (isEqual(editor, oldEditor)) {\n return;\n }\n\n const oldDescendants = Array.from(SlateNode.descendants(oldEditor, { reverse: true })).map(\n ([d]) => d\n );\n const currentRespAreaList = descendants.filter(isOfCurrentType);\n const oldRespAreaList = oldDescendants.filter(isOfCurrentType);\n\n toolbar.disabled = currentRespAreaList.length >= opts.maxResponseAreas;\n\n const arrayToFilter =\n oldRespAreaList.length > currentRespAreaList.length\n ? oldRespAreaList\n : currentRespAreaList;\n const arrayToUseForFilter =\n arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n d => !arrayToUseForFilter.find(e => e.data.index === d.data.index)\n );\n\n if (\n elementsWithChangedStatus.length &&\n oldRespAreaList.length > currentRespAreaList.length\n ) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n\n oldEditor = cloneDeep(editor);\n onChange(options);\n };\n\n return editor;\n },\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter((p) => p.name !== 'response_area');\n },\n deleteNode: (e, node, nodePath, editor, onChange) => {\n e.preventDefault();\n\n editor.apply({\n type: 'remove_node',\n path: nodePath\n });\n\n onChange(editor);\n },\n supports: node => elTypesArray.indexOf(node.type) >= 0,\n renderNode(props) {\n const { attributes, node } = props;\n\n if (node.type === 'explicit_constructed_response') {\n const { data } = node;\n let error;\n\n if (opts.error) {\n error = opts.error();\n }\n\n return (\n <ExplicitConstructedResponse\n attributes={attributes}\n value={data.value}\n error={error && error[data.index] && error[data.index][0]}\n >\n {props.children}\n </ExplicitConstructedResponse>\n );\n }\n\n if (node.type === 'drag_in_the_blank') {\n const { data } = node;\n\n return (\n <DragInTheBlank\n attributes={attributes}\n data={data}\n n={node}\n nodeProps={props}\n opts={opts}\n >\n {props.children}\n </DragInTheBlank>\n );\n }\n\n if (node.type === 'inline_dropdown') {\n const { data } = node;\n\n return (\n <InlineDropdown attributes={attributes} selectedItem={data.value}>\n {props.children}\n </InlineDropdown>\n );\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant((d) => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n },\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return jsx('element', {\n type: 'inline_dropdown',\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n });\n case 'explicit_constructed_response':\n return jsx('element', {\n type: 'explicit_constructed_response',\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n });\n case 'drag_in_the_blank':\n return jsx('element', {\n type: 'drag_in_the_blank',\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n });\n }\n },\n serialize(object) {\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data;\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data;\n\n return <span data-type=\"explicit_constructed_response\" data-index={data.index} data-value={data.value} />;\n }\n case 'drag_in_the_blank': {\n const data = object.data;\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/plugins/respArea/index.jsx"],"names":["log","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","isOfCurrentType","d","type","toolbar","icon","buttonStyles","margin","onClick","value","onChange","change","currentRespAreaList","document","filterDescendants","size","maxResponseAreas","replace","prevIndex","newIndex","newInline","selection","startKey","endKey","insertInline","lastText","getLastText","parentNode","getParent","key","index","nodes","indexOf","isVoid","insertNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","customToolbar","respAreaToolbar","supports","node","object","showDone","name","filterPlugins","plugins","filter","p","deleteNode","e","preventDefault","removeNodeByKey","renderNode","props","attributes","n","data","toJSON","error","editor","forEachDescendant","parseInt","get","oldRespAreaList","disabled","arrayToFilter","arrayToUseForFilter","elementsWithChangedStatus","find","onHandleAreaChange","onDrop","event","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","el","id","inTable","serialize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debug from 'debug';\nimport isUndefined from 'lodash/isUndefined';\n\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank',\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const isOfCurrentType = (d) => d.type === opts.type || d.type === elTypesMap[opts.type];\n\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto',\n },\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const change = value.change();\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n\n if (currentRespAreaList.size >= opts.maxResponseAreas) {\n return;\n }\n\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n\n if (!lastText) {\n return;\n }\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }\n\n onChange(change);\n }\n },\n customToolbar: opts.respAreaToolbar,\n supports: (node) => node.object === 'inline' && elTypesArray.indexOf(node.type) >= 0,\n showDone: false,\n };\n\n return {\n name: 'response_area',\n toolbar,\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter((p) => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n const { attributes, node: n } = props;\n\n if (n.type === 'explicit_constructed_response') {\n const data = n.data.toJSON();\n let error;\n\n if (opts.error) {\n error = opts.error();\n }\n\n return (\n <ExplicitConstructedResponse\n attributes={attributes}\n value={data.value}\n error={error && error[data.index] && error[data.index][0]}\n />\n );\n }\n\n if (n.type === 'drag_in_the_blank') {\n const data = n.data.toJSON();\n\n return <DragInTheBlank attributes={attributes} data={data} n={n} nodeProps={props} opts={opts} />;\n }\n\n if (n.type === 'inline_dropdown') {\n const data = n.data.toJSON();\n\n return <InlineDropdown attributes={attributes} selectedItem={data.value} />;\n }\n },\n onChange(change, editor) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant((d) => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (!editor.value) {\n return;\n }\n\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n const oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);\n\n if (currentRespAreaList.size >= opts.maxResponseAreas) {\n toolbar.disabled = true;\n } else {\n toolbar.disabled = false;\n }\n\n const arrayToFilter = oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;\n const arrayToUseForFilter = arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n (d) => !arrayToUseForFilter.find((e) => e.data.get('index') === d.data.get('index')),\n );\n\n if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant((d) => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n },\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value,\n },\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value,\n },\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable,\n },\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return <span data-type=\"explicit_constructed_response\" data-index={data.index} data-value={data.value} />;\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n },\n};\n"],"file":"index.js"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports["default"] = void 0;
|
|
9
|
+
|
|
8
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
9
12
|
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
10
14
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
|
+
|
|
11
16
|
var _icons = require("../icons");
|
|
17
|
+
|
|
12
18
|
var InlineDropdown = function InlineDropdown(_ref) {
|
|
13
19
|
var attributes = _ref.attributes,
|
|
14
|
-
|
|
15
|
-
|
|
20
|
+
selectedItem = _ref.selectedItem;
|
|
21
|
+
// TODO: Investigate
|
|
16
22
|
// Needed because items with values inside have different positioning for some reason
|
|
17
23
|
var html = selectedItem || '<div> </div>';
|
|
18
24
|
return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, attributes, {
|
|
19
|
-
contentEditable: false,
|
|
20
25
|
style: {
|
|
21
26
|
display: 'inline-flex',
|
|
22
27
|
height: '50px',
|
|
@@ -34,7 +39,7 @@ var InlineDropdown = function InlineDropdown(_ref) {
|
|
|
34
39
|
borderRadius: '3px',
|
|
35
40
|
position: 'relative'
|
|
36
41
|
}
|
|
37
|
-
},
|
|
42
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
38
43
|
style: {
|
|
39
44
|
flex: 1,
|
|
40
45
|
overflow: 'hidden',
|
|
@@ -55,6 +60,7 @@ var InlineDropdown = function InlineDropdown(_ref) {
|
|
|
55
60
|
}
|
|
56
61
|
})));
|
|
57
62
|
};
|
|
63
|
+
|
|
58
64
|
InlineDropdown.propTypes = {
|
|
59
65
|
attributes: _propTypes["default"].object,
|
|
60
66
|
selectedItem: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../../src/plugins/respArea/inline-dropdown/index.jsx"],"names":["InlineDropdown","attributes","selectedItem","html","display","height","margin","cursor","minWidth","background","border","boxSizing","borderRadius","position","flex","overflow","padding","whiteSpace","textOverflow","lineHeight","__html","top","right","propTypes","PropTypes","object","oneOfType","string"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAAkC;AAAA,MAA/BC,UAA+B,QAA/BA,UAA+B;AAAA,MAAnBC,YAAmB,QAAnBA,YAAmB;AACvD;AACA;AACA,MAAMC,IAAI,GAAGD,YAAY,IAAI,kBAA7B;AAEA,sBACE,sEACMD,UADN;AAEE,IAAA,KAAK,EAAE;AACLG,MAAAA,OAAO,EAAE,aADJ;AAELC,MAAAA,MAAM,EAAE,MAFH;AAGLC,MAAAA,MAAM,EAAE,OAHH;AAILC,MAAAA,MAAM,EAAE;AAJH;AAFT,mBASE;AACE,IAAA,KAAK,EAAE;AACLH,MAAAA,OAAO,EAAE,aADJ;AAELI,MAAAA,QAAQ,EAAE,OAFL;AAGLH,MAAAA,MAAM,EAAE,MAHH;AAILI,MAAAA,UAAU,EAAE,MAJP;AAKLC,MAAAA,MAAM,EAAE,mBALH;AAMLC,MAAAA,SAAS,EAAE,YANN;AAOLC,MAAAA,YAAY,EAAE,KAPT;AAQLC,MAAAA,QAAQ,EAAE;AARL;AADT,kBAYE;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,CADD;AAELC,MAAAA,QAAQ,EAAE,QAFL;AAGLC,MAAAA,OAAO,EAAE,cAHJ;AAILC,MAAAA,UAAU,EAAE,QAJP;AAKLC,MAAAA,YAAY,EAAE,UALT;AAMLC,MAAAA,UAAU,EAAE;AANP,KADT;AASE,IAAA,uBAAuB,EAAE;AACvBC,MAAAA,MAAM,EAAEjB;AADe;AAT3B,IAZF,eAyBE,gCAAC,cAAD;AACE,IAAA,SAAS,EAAC,MADZ;AAEE,IAAA,KAAK,EAAE;AACLU,MAAAA,QAAQ,EAAE,UADL;AAELQ,MAAAA,GAAG,EAAE,KAFA;AAGLC,MAAAA,KAAK,EAAE;AAHF;AAFT,IAzBF,CATF,CADF;AA8CD,CAnDD;;AAqDAtB,cAAc,CAACuB,SAAf,GAA2B;AACzBtB,EAAAA,UAAU,EAAEuB,sBAAUC,MADG;AAEzBvB,EAAAA,YAAY,EAAEsB,sBAAUE,SAAV,CAAoB,CAACF,sBAAUG,MAAX,EAAmBH,sBAAUC,MAA7B,CAApB;AAFW,CAA3B;eAKezB,c","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Chevron } from '../icons';\n\nconst InlineDropdown = ({ attributes, selectedItem }) => {\n // TODO: Investigate\n // Needed because items with values inside have different positioning for some reason\n const html = selectedItem || '<div> </div>';\n\n return (\n <span\n {...attributes}\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 position: 'relative',\n }}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n lineHeight: '35px',\n }}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n <Chevron\n direction=\"down\"\n style={{\n position: 'absolute',\n top: '5px',\n right: '5px',\n }}\n />\n </div>\n </span>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"file":"index.js"}
|