@pie-lib/editable-html-tip-tap 1.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.
Files changed (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = MediaNodeView;
9
+ exports.insertDialog = void 0;
10
+
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
+
15
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
16
+
17
+ var _react = _interopRequireDefault(require("react"));
18
+
19
+ var _react2 = require("@tiptap/react");
20
+
21
+ var _mediaToolbar = _interopRequireDefault(require("../plugins/media/media-toolbar"));
22
+
23
+ var _mediaDialog = require("../plugins/media/media-dialog");
24
+
25
+ var _reactDom = _interopRequireDefault(require("react-dom"));
26
+
27
+ var _excluded = ["type", "callback", "opts"];
28
+
29
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
30
+
31
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
32
+
33
+ var removeDialogs = function removeDialogs() {
34
+ var prevDialogs = document.querySelectorAll('.insert-media-dialog');
35
+ prevDialogs.forEach(function (s) {
36
+ return s.remove();
37
+ });
38
+ };
39
+
40
+ var insertDialog = function insertDialog(props) {
41
+ var newEl = document.createElement('div');
42
+ var type = props.type,
43
+ callback = props.callback,
44
+ opts = props.opts,
45
+ rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
46
+ var initialBodyOverflow = document.body.style.overflow;
47
+ removeDialogs();
48
+ newEl.className = 'insert-media-dialog';
49
+ document.body.style.overflow = 'hidden';
50
+
51
+ var handleClose = function handleClose(val, data) {
52
+ callback(val, data);
53
+ newEl.remove();
54
+ document.body.style.overflow = initialBodyOverflow;
55
+ };
56
+
57
+ var el = /*#__PURE__*/_react["default"].createElement(_mediaDialog.MediaDialog, (0, _extends2["default"])({}, rest, {
58
+ uploadSoundSupport: opts.uploadSoundSupport,
59
+ type: type,
60
+ disablePortal: true,
61
+ open: true,
62
+ handleClose: handleClose
63
+ }));
64
+
65
+ _reactDom["default"].render(el, newEl);
66
+
67
+ document.body.appendChild(newEl);
68
+ };
69
+
70
+ exports.insertDialog = insertDialog;
71
+
72
+ function MediaNodeView(_ref) {
73
+ var node = _ref.node,
74
+ updateAttributes = _ref.updateAttributes,
75
+ deleteNode = _ref.deleteNode;
76
+ var _node$attrs = node.attrs,
77
+ type = _node$attrs.type,
78
+ src = _node$attrs.src,
79
+ width = _node$attrs.width,
80
+ height = _node$attrs.height,
81
+ tag = _node$attrs.tag;
82
+
83
+ var handleEdit = function handleEdit() {
84
+ insertDialog(_objectSpread(_objectSpread({}, node.attrs), {}, {
85
+ edit: true,
86
+ callback: function callback(val, data) {
87
+ if (val) updateAttributes(data);
88
+ }
89
+ }));
90
+ };
91
+
92
+ return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
93
+ "data-type": type,
94
+ style: {
95
+ width: width,
96
+ height: height
97
+ }
98
+ }, tag === 'audio' ? /*#__PURE__*/_react["default"].createElement("audio", {
99
+ controls: true,
100
+ controlsList: "nodownload"
101
+ }, /*#__PURE__*/_react["default"].createElement("source", {
102
+ src: src
103
+ })) : /*#__PURE__*/_react["default"].createElement("iframe", {
104
+ src: src,
105
+ allowFullScreen: true,
106
+ frameBorder: "0"
107
+ }), /*#__PURE__*/_react["default"].createElement(_mediaToolbar["default"], {
108
+ onEdit: handleEdit,
109
+ onRemove: deleteNode
110
+ }));
111
+ }
112
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL01lZGlhVmlldy5qcyJdLCJuYW1lcyI6WyJyZW1vdmVEaWFsb2dzIiwicHJldkRpYWxvZ3MiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwicyIsInJlbW92ZSIsImluc2VydERpYWxvZyIsInByb3BzIiwibmV3RWwiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsImNhbGxiYWNrIiwib3B0cyIsInJlc3QiLCJpbml0aWFsQm9keU92ZXJmbG93IiwiYm9keSIsInN0eWxlIiwib3ZlcmZsb3ciLCJjbGFzc05hbWUiLCJoYW5kbGVDbG9zZSIsInZhbCIsImRhdGEiLCJlbCIsInVwbG9hZFNvdW5kU3VwcG9ydCIsIlJlYWN0RE9NIiwicmVuZGVyIiwiYXBwZW5kQ2hpbGQiLCJNZWRpYU5vZGVWaWV3Iiwibm9kZSIsInVwZGF0ZUF0dHJpYnV0ZXMiLCJkZWxldGVOb2RlIiwiYXR0cnMiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCIsInRhZyIsImhhbmRsZUVkaXQiLCJlZGl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixHQUFNO0FBQzFCLE1BQU1DLFdBQVcsR0FBR0MsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixzQkFBMUIsQ0FBcEI7QUFFQUYsRUFBQUEsV0FBVyxDQUFDRyxPQUFaLENBQW9CLFVBQUNDLENBQUQ7QUFBQSxXQUFPQSxDQUFDLENBQUNDLE1BQUYsRUFBUDtBQUFBLEdBQXBCO0FBQ0QsQ0FKRDs7QUFNTyxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDQyxLQUFELEVBQVc7QUFDckMsTUFBTUMsS0FBSyxHQUFHUCxRQUFRLENBQUNRLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZDtBQUNBLE1BQVFDLElBQVIsR0FBMENILEtBQTFDLENBQVFHLElBQVI7QUFB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XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTm9kZVZpZXdXcmFwcGVyIH0gZnJvbSAnQHRpcHRhcC9yZWFjdCc7XG5pbXBvcnQgTWVkaWFUb29sYmFyIGZyb20gJy4uL3BsdWdpbnMvbWVkaWEvbWVkaWEtdG9vbGJhcic7XG5pbXBvcnQgeyBNZWRpYURpYWxvZyB9IGZyb20gXCIuLi9wbHVnaW5zL21lZGlhL21lZGlhLWRpYWxvZ1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgcmVtb3ZlRGlhbG9ncyA9ICgpID0+IHtcbiAgY29uc3QgcHJldkRpYWxvZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zZXJ0LW1lZGlhLWRpYWxvZycpO1xuXG4gIHByZXZEaWFsb2dzLmZvckVhY2goKHMpID0+IHMucmVtb3ZlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydERpYWxvZyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBuZXdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb25zdCB7IHR5cGUsIGNhbGxiYWNrLCBvcHRzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3QgaW5pdGlhbEJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG5cbiAgcmVtb3ZlRGlhbG9ncygpO1xuXG4gIG5ld0VsLmNsYXNzTmFtZSA9ICdpbnNlcnQtbWVkaWEtZGlhbG9nJztcbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHZhbCwgZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbCwgZGF0YSk7XG4gICAgbmV3RWwucmVtb3ZlKCk7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IGluaXRpYWxCb2R5T3ZlcmZsb3c7XG4gIH07XG5cbiAgY29uc3QgZWwgPSAoXG4gICAgPE1lZGlhRGlhbG9nXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17b3B0cy51cGxvYWRTb3VuZFN1cHBvcnR9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGlzYWJsZVBvcnRhbD17dHJ1ZX1cbiAgICAgIG9wZW49e3RydWV9XG4gICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgLz5cbiAgKTtcblxuICBSZWFjdERPTS5yZW5kZXIoZWwsIG5ld0VsKTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld0VsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lZGlhTm9kZVZpZXcoeyBub2RlLCB1cGRhdGVBdHRyaWJ1dGVzLCBkZWxldGVOb2RlIH0pIHtcbiAgY29uc3QgeyB0eXBlLCBzcmMsIHdpZHRoLCBoZWlnaHQsIHRhZyB9ID0gbm9kZS5hdHRycztcblxuICBjb25zdCBoYW5kbGVFZGl0ID0gKCkgPT4ge1xuICAgIGluc2VydERpYWxvZyh7XG4gICAgICAuLi5ub2RlLmF0dHJzLFxuICAgICAgZWRpdDogdHJ1ZSxcbiAgICAgIGNhbGxiYWNrOiAodmFsLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICh2YWwpIHVwZGF0ZUF0dHJpYnV0ZXMoZGF0YSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE5vZGVWaWV3V3JhcHBlciBkYXRhLXR5cGU9e3R5cGV9IHN0eWxlPXt7IHdpZHRoLCBoZWlnaHQgfX0+XG4gICAgICB7dGFnID09PSAnYXVkaW8nID8gKFxuICAgICAgICA8YXVkaW8gY29udHJvbHMgY29udHJvbHNMaXN0PVwibm9kb3dubG9hZFwiPlxuICAgICAgICAgIDxzb3VyY2Ugc3JjPXtzcmN9IC8+XG4gICAgICAgIDwvYXVkaW8+XG4gICAgICApIDogKFxuICAgICAgICA8aWZyYW1lIHNyYz17c3JjfSBhbGxvd0Z1bGxTY3JlZW4gZnJhbWVCb3JkZXI9XCIwXCIgLz5cbiAgICAgICl9XG5cbiAgICAgIDxNZWRpYVRvb2xiYXIgb25FZGl0PXtoYW5kbGVFZGl0fSBvblJlbW92ZT17ZGVsZXRlTm9kZX0gLz5cbiAgICA8L05vZGVWaWV3V3JhcHBlcj5cbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ExplicitConstructedResponseNode = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _react2 = require("@tiptap/react");
13
+
14
+ var _explicitConstructedResponse = _interopRequireDefault(require("../plugins/respArea/explicit-constructed-response"));
15
+
16
+ var _dragInTheBlank = _interopRequireDefault(require("../plugins/respArea/drag-in-the-blank"));
17
+
18
+ var _inlineDropdown = _interopRequireDefault(require("../plugins/respArea/inline-dropdown"));
19
+
20
+ // InlineNodes.js
21
+
22
+ /**
23
+ * ExplicitConstructedResponse Node
24
+ */
25
+ var ExplicitConstructedResponseNode = _react2.Node.create({
26
+ name: 'explicit_constructed_response',
27
+ group: 'inline',
28
+ inline: true,
29
+ atom: true,
30
+ addAttributes: function addAttributes() {
31
+ return {
32
+ index: {
33
+ "default": null
34
+ },
35
+ value: {
36
+ "default": ''
37
+ }
38
+ };
39
+ },
40
+ parseHTML: function parseHTML() {
41
+ return [{
42
+ tag: 'span[data-type="explicit_constructed_response"]',
43
+ getAttrs: function getAttrs(el) {
44
+ return {
45
+ index: el.dataset.index,
46
+ value: el.dataset.value
47
+ };
48
+ }
49
+ }];
50
+ },
51
+ renderHTML: function renderHTML(_ref) {
52
+ var HTMLAttributes = _ref.HTMLAttributes;
53
+ return ['span', {
54
+ 'data-type': 'explicit_constructed_response',
55
+ 'data-index': HTMLAttributes.index,
56
+ 'data-value': HTMLAttributes.value
57
+ }];
58
+ },
59
+ addNodeView: function addNodeView() {
60
+ return (0, _react2.ReactNodeViewRenderer)(_explicitConstructedResponse["default"]);
61
+ }
62
+ });
63
+
64
+ exports.ExplicitConstructedResponseNode = ExplicitConstructedResponseNode;
65
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL2NoYXJhY3RlcnMuanMiXSwibmFtZXMiOlsiRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZSIsIk5vZGUiLCJjcmVhdGUiLCJuYW1lIiwiZ3JvdXAiLCJpbmxpbmUiLCJhdG9tIiwiYWRkQXR0cmlidXRlcyIsImluZGV4IiwidmFsdWUiLCJwYXJzZUhUTUwiLCJ0YWciLCJnZXRBdHRycyIsImVsIiwiZGF0YXNldCIsInJlbmRlckhUTUwiLCJIVE1MQXR0cmlidXRlcyIsImFkZE5vZGVWaWV3IiwiRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFMQTs7QUFPQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQSwrQkFBK0IsR0FBR0MsYUFBS0MsTUFBTCxDQUFZO0FBQ3pEQyxFQUFBQSxJQUFJLEVBQUUsK0JBRG1EO0FBRXpEQyxFQUFBQSxLQUFLLEVBQUUsUUFGa0Q7QUFHekRDLEVBQUFBLE1BQU0sRUFBRSxJQUhpRDtBQUl6REMsRUFBQUEsSUFBSSxFQUFFLElBSm1EO0FBS3pEQyxFQUFBQSxhQUx5RCwyQkFLekM7QUFDZCxXQUFPO0FBQ0xDLE1BQUFBLEtBQUssRUFBRTtBQUFFLG1CQUFTO0FBQVgsT0FERjtBQUVMQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxtQkFBUztBQUFYO0FBRkYsS0FBUDtBQUlELEdBVndEO0FBV3pEQyxFQUFBQSxTQVh5RCx1QkFXN0M7QUFDVixXQUFPLENBQ0w7QUFDRUMsTUFBQUEsR0FBRyxFQUFFLGlEQURQO0FBRUVDLE1BQUFBLFFBQVEsRUFBRSxrQkFBQ0MsRUFBRDtBQUFBLGVBQVM7QUFDakJMLFVBQUFBLEtBQUssRUFBRUssRUFBRSxDQUFDQyxPQUFILENBQVdOLEtBREQ7QUFFakJDLFVBQUFBLEtBQUssRUFBRUksRUFBRSxDQUFDQyxPQUFILENBQVdMO0FBRkQsU0FBVDtBQUFBO0FBRlosS0FESyxDQUFQO0FBU0QsR0FyQndEO0FBc0J6RE0sRUFBQUEsVUF0QnlELDRCQXNCMUI7QUFBQSxRQUFsQkMsY0FBa0IsUUFBbEJBLGNBQWtCO0FBQzdCLFdBQU8sQ0FDTCxNQURLLEVBRUw7QUFDRSxtQkFBYSwrQkFEZjtBQUVFLG9CQUFjQSxjQUFjLENBQUNSLEtBRi9CO0FBR0Usb0JBQWNRLGNBQWMsQ0FBQ1A7QUFIL0IsS0FGSyxDQUFQO0FBUUQsR0EvQndEO0FBZ0N6RFEsRUFBQUEsV0FoQ3lELHlCQWdDM0M7QUFDWixXQUFPLG1DQUFzQkMsdUNBQXRCLENBQVA7QUFDRDtBQWxDd0QsQ0FBWixDQUF4QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIElubGluZU5vZGVzLmpzXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTm9kZSwgUmVhY3ROb2RlVmlld1JlbmRlcmVyIH0gZnJvbSAnQHRpcHRhcC9yZWFjdCc7XG5pbXBvcnQgRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlIGZyb20gJy4uL3BsdWdpbnMvcmVzcEFyZWEvZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnO1xuaW1wb3J0IERyYWdJblRoZUJsYW5rIGZyb20gJy4uL3BsdWdpbnMvcmVzcEFyZWEvZHJhZy1pbi10aGUtYmxhbmsnO1xuaW1wb3J0IElubGluZURyb3Bkb3duIGZyb20gJy4uL3BsdWdpbnMvcmVzcEFyZWEvaW5saW5lLWRyb3Bkb3duJztcblxuLyoqXG4gKiBFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2UgTm9kZVxuICovXG5leHBvcnQgY29uc3QgRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZSA9IE5vZGUuY3JlYXRlKHtcbiAgbmFtZTogJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJyxcbiAgZ3JvdXA6ICdpbmxpbmUnLFxuICBpbmxpbmU6IHRydWUsXG4gIGF0b206IHRydWUsXG4gIGFkZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiB7IGRlZmF1bHQ6IG51bGwgfSxcbiAgICAgIHZhbHVlOiB7IGRlZmF1bHQ6ICcnIH0sXG4gICAgfTtcbiAgfSxcbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRhZzogJ3NwYW5bZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIl0nLFxuICAgICAgICBnZXRBdHRyczogKGVsKSA9PiAoe1xuICAgICAgICAgIGluZGV4OiBlbC5kYXRhc2V0LmluZGV4LFxuICAgICAgICAgIHZhbHVlOiBlbC5kYXRhc2V0LnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcbiAgcmVuZGVySFRNTCh7IEhUTUxBdHRyaWJ1dGVzIH0pIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ3NwYW4nLFxuICAgICAge1xuICAgICAgICAnZGF0YS10eXBlJzogJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJyxcbiAgICAgICAgJ2RhdGEtaW5kZXgnOiBIVE1MQXR0cmlidXRlcy5pbmRleCxcbiAgICAgICAgJ2RhdGEtdmFsdWUnOiBIVE1MQXR0cmlidXRlcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcbiAgYWRkTm9kZVZpZXcoKSB7XG4gICAgcmV0dXJuIFJlYWN0Tm9kZVZpZXdSZW5kZXJlcihFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2UpO1xuICB9LFxufSk7XG4iXX0=
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _propTypes = _interopRequireDefault(require("prop-types"));
21
+
22
+ var _classnames = _interopRequireDefault(require("classnames"));
23
+
24
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
25
+
26
+ var _debug = _interopRequireDefault(require("debug"));
27
+
28
+ var _LinearProgress = _interopRequireDefault(require("@material-ui/core/LinearProgress"));
29
+
30
+ var _styles = require("@material-ui/core/styles");
31
+
32
+ var _react2 = require("@tiptap/react");
33
+
34
+ var _insertImageHandler = _interopRequireDefault(require("../plugins/image/insert-image-handler"));
35
+
36
+ var _imageToolbar = _interopRequireDefault(require("../plugins/image/image-toolbar"));
37
+
38
+ var _customToolbarWrapper = _interopRequireDefault(require("./custom-toolbar-wrapper"));
39
+
40
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
+
42
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
+
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
48
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image:component');
49
+
50
+ var sizePx = function sizePx(s) {
51
+ return s ? "".concat(s, "px") : 'calc(20px)';
52
+ };
53
+
54
+ function ImageComponent(props) {
55
+ var node = props.node,
56
+ editor = props.editor,
57
+ classes = props.classes,
58
+ attributes = props.attributes,
59
+ onFocus = props.onFocus,
60
+ selected = props.selected,
61
+ options = props.options,
62
+ _props$maxImageWidth = props.maxImageWidth,
63
+ maxImageWidth = _props$maxImageWidth === void 0 ? 700 : _props$maxImageWidth,
64
+ _props$maxImageHeight = props.maxImageHeight,
65
+ maxImageHeight = _props$maxImageHeight === void 0 ? 900 : _props$maxImageHeight,
66
+ latex = props.latex,
67
+ handleChange = props.handleChange,
68
+ handleDone = props.handleDone;
69
+ var alt = node.attrs.alt;
70
+
71
+ var _useState = (0, _react.useState)(false),
72
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
73
+ showToolbar = _useState2[0],
74
+ setShowToolbar = _useState2[1];
75
+
76
+ var imgRef = (0, _react.useRef)(null);
77
+ var resizeRef = (0, _react.useRef)(null);
78
+ var toolbarRef = (0, _react.useRef)(null);
79
+ var getPercentFromWidth = (0, _react.useCallback)(function (width) {
80
+ var floored = width / imgRef.current.naturalWidth * 4;
81
+ return parseInt(floored.toFixed(0) * 25, 10);
82
+ }, []);
83
+ var applySizeData = (0, _react.useCallback)(function () {
84
+ if (!node.attrs.width || !imgRef.current) return;
85
+
86
+ var update = _objectSpread(_objectSpread({}, node.attrs), {}, {
87
+ resizePercent: getPercentFromWidth(node.attrs.width)
88
+ });
89
+
90
+ if (!(0, _isEqual["default"])(update, node.attrs)) {
91
+ editor.commands.updateAttributes('imageUploadNode', update);
92
+ }
93
+ }, [editor, node.attrs, getPercentFromWidth]);
94
+ (0, _react.useEffect)(function () {
95
+ setShowToolbar(selected);
96
+ }, [selected]);
97
+ (0, _react.useEffect)(function () {
98
+ options.imageHandling.insertImageRequested(node, function (finish) {
99
+ return new _insertImageHandler["default"](editor, finish);
100
+ });
101
+ applySizeData();
102
+ var resizeHandle = resizeRef.current;
103
+
104
+ if (resizeHandle) {
105
+ resizeHandle.addEventListener('mousedown', initResize, false);
106
+ }
107
+
108
+ return function () {
109
+ if (resizeHandle) resizeHandle.removeEventListener('mousedown', initResize, false);
110
+ };
111
+ }, []);
112
+ (0, _react.useEffect)(function () {
113
+ applySizeData();
114
+ });
115
+ var loadImage = (0, _react.useCallback)(function () {
116
+ var box = imgRef.current;
117
+ if (!box) return;
118
+
119
+ if (!box.style.width || box.style.width === 'calc(20px)') {
120
+ var w = Math.min(box.naturalWidth, maxImageWidth);
121
+ var h = Math.min(box.naturalHeight, maxImageHeight);
122
+ box.style.width = "".concat(w, "px");
123
+ box.style.height = "".concat(h, "px");
124
+ var update = {
125
+ width: w,
126
+ height: h
127
+ };
128
+
129
+ if (!(0, _isEqual["default"])(update, node.attrs)) {
130
+ editor.commands.updateAttributes('imageUploadNode', update);
131
+ }
132
+ }
133
+ }, [editor, node.attrs, maxImageWidth, maxImageHeight]);
134
+
135
+ var updateAspect = function updateAspect(initial, next) {
136
+ var keepAspect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
137
+ var resizeType = arguments.length > 3 ? arguments[3] : undefined;
138
+
139
+ if (keepAspect) {
140
+ var ratio = initial.width / initial.height;
141
+ if (resizeType === 'height') return {
142
+ width: next.height * ratio,
143
+ height: next.height
144
+ };
145
+ return {
146
+ width: next.width,
147
+ height: next.width / ratio
148
+ };
149
+ }
150
+
151
+ return next;
152
+ };
153
+
154
+ var startResize = (0, _react.useCallback)(function (e) {
155
+ var box = imgRef.current;
156
+ if (!box) return;
157
+ var bounds = e.target.getBoundingClientRect();
158
+ var initial = {
159
+ width: box.naturalWidth,
160
+ height: box.naturalHeight
161
+ };
162
+ var next = updateAspect(initial, {
163
+ width: e.clientX - bounds.left,
164
+ height: e.clientY - bounds.top
165
+ });
166
+
167
+ if (next.width > 50 && next.height > 50 && next.width <= 700 && next.height <= 900) {
168
+ box.style.width = "".concat(next.width, "px");
169
+ box.style.height = "".concat(next.height, "px");
170
+ var update = {
171
+ width: next.width,
172
+ height: next.height
173
+ };
174
+
175
+ if (!(0, _isEqual["default"])(update, node.attrs)) {
176
+ editor.commands.updateAttributes('imageUploadNode', update);
177
+ }
178
+ }
179
+ }, [editor, node.attrs]);
180
+ var onChange = (0, _react.useCallback)(function (newValues) {
181
+ editor.commands.updateAttributes('imageUploadNode', newValues);
182
+ }, [editor]);
183
+ var stopResize = (0, _react.useCallback)(function () {
184
+ window.removeEventListener('mousemove', startResize);
185
+ window.removeEventListener('mouseup', stopResize);
186
+ }, [startResize]);
187
+ var initResize = (0, _react.useCallback)(function () {
188
+ window.addEventListener('mousemove', startResize);
189
+ window.addEventListener('mouseup', stopResize);
190
+ }, [startResize, stopResize]);
191
+ var style = {
192
+ width: sizePx(node.attrs.width),
193
+ height: sizePx(node.attrs.height),
194
+ objectFit: 'contain'
195
+ };
196
+ var flexAlign = {
197
+ left: 'flex-start',
198
+ center: 'center',
199
+ right: 'flex-end'
200
+ }[node.attrs.alignment] || 'flex-start';
201
+ return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, null, /*#__PURE__*/_react["default"].createElement("div", {
202
+ onFocus: onFocus,
203
+ className: (0, _classnames["default"])(classes.root, !node.attrs.loaded && classes.loading, node.attrs.deleteStatus === 'pending' && classes.pendingDelete),
204
+ style: {
205
+ justifyContent: flexAlign
206
+ }
207
+ }, /*#__PURE__*/_react["default"].createElement(_LinearProgress["default"], {
208
+ mode: "determinate",
209
+ value: node.attrs.percent || 0,
210
+ className: (0, _classnames["default"])(classes.progress, node.attrs.loaded && classes.hideProgress)
211
+ }), /*#__PURE__*/_react["default"].createElement("div", {
212
+ className: classes.imageContainer
213
+ }, /*#__PURE__*/_react["default"].createElement("img", (0, _extends2["default"])({}, attributes, {
214
+ ref: imgRef,
215
+ src: node.attrs.src,
216
+ className: (0, _classnames["default"])(classes.image, selected && classes.active),
217
+ style: style,
218
+ onLoad: loadImage,
219
+ alt: node.attrs.alt
220
+ })), /*#__PURE__*/_react["default"].createElement("div", {
221
+ ref: resizeRef,
222
+ className: (0, _classnames["default"])(classes.resize, 'resize')
223
+ }))), showToolbar && /*#__PURE__*/_react["default"].createElement("div", {
224
+ ref: toolbarRef,
225
+ style: {
226
+ position: 'absolute',
227
+ top: '100%',
228
+ left: 0,
229
+ zIndex: 20,
230
+ background: 'var(--editable-html-toolbar-bg, #efefef)',
231
+ boxShadow: '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)',
232
+ width: '100%'
233
+ }
234
+ }, /*#__PURE__*/_react["default"].createElement(_customToolbarWrapper["default"], (0, _extends2["default"])({
235
+ showDone: true
236
+ }, options), /*#__PURE__*/_react["default"].createElement(_imageToolbar["default"], {
237
+ disableImageAlignmentButtons: options.disableImageAlignmentButtons,
238
+ alt: node.attrs.alt,
239
+ imageLoaded: node.attrs.loaded,
240
+ alignment: node.attrs.alignment || 'left',
241
+ onChange: onChange
242
+ }))));
243
+ }
244
+
245
+ ImageComponent.propTypes = {
246
+ node: _propTypes["default"].object.isRequired,
247
+ editor: _propTypes["default"].object.isRequired,
248
+ classes: _propTypes["default"].object.isRequired,
249
+ attributes: _propTypes["default"].object,
250
+ onFocus: _propTypes["default"].func,
251
+ maxImageWidth: _propTypes["default"].number,
252
+ maxImageHeight: _propTypes["default"].number
253
+ };
254
+
255
+ var _default = (0, _styles.withStyles)(function (theme) {
256
+ return {
257
+ portal: {
258
+ position: 'absolute',
259
+ opacity: 0,
260
+ transition: 'opacity 200ms linear'
261
+ },
262
+ floatingButtonRow: {
263
+ backgroundColor: theme.palette.background.paper,
264
+ borderRadius: '1px',
265
+ display: 'flex',
266
+ padding: '10px',
267
+ border: "solid 1px ".concat(theme.palette.grey[200]),
268
+ boxShadow: '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)'
269
+ },
270
+ progress: {
271
+ position: 'absolute',
272
+ left: '0',
273
+ width: 'fit-content',
274
+ top: '0%',
275
+ transition: 'opacity 200ms linear'
276
+ },
277
+ hideProgress: {
278
+ opacity: 0
279
+ },
280
+ loading: {
281
+ opacity: 0.3
282
+ },
283
+ pendingDelete: {
284
+ opacity: 0.3
285
+ },
286
+ root: {
287
+ position: 'relative',
288
+ border: "solid 1px ".concat(theme.palette.common.white),
289
+ display: 'flex',
290
+ transition: 'opacity 200ms linear'
291
+ },
292
+ "delete": {
293
+ position: 'absolute',
294
+ right: 0
295
+ },
296
+ imageContainer: {
297
+ position: 'relative',
298
+ width: 'fit-content',
299
+ display: 'flex',
300
+ alignItems: 'center',
301
+ '&&:hover > .resize': {
302
+ display: 'block'
303
+ }
304
+ },
305
+ active: {
306
+ border: "solid 1px ".concat(theme.palette.primary.main)
307
+ },
308
+ resize: {
309
+ backgroundColor: theme.palette.primary.main,
310
+ cursor: 'col-resize',
311
+ height: '35px',
312
+ width: '5px',
313
+ borderRadius: 8,
314
+ marginLeft: '5px',
315
+ marginRight: '10px',
316
+ display: 'none'
317
+ },
318
+ drawableHeight: {
319
+ minHeight: 350
320
+ }
321
+ };
322
+ })(ImageComponent);
323
+
324
+ exports["default"] = _default;
325
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL2NvbXBvbmVudC5qc3giXSwibmFtZXMiOlsibG9nIiwic2l6ZVB4IiwicyIsIkltYWdlQ29tcG9uZW50IiwicHJvcHMiLCJub2RlIiwiZWRpdG9yIiwiY2xhc3NlcyIsImF0dHJpYnV0ZXMiLCJvbkZvY3VzIiwic2VsZWN0ZWQiLCJvcHRpb25zIiwibWF4SW1hZ2VXaWR0aCIsIm1heEltYWdlSGVpZ2h0IiwibGF0ZXgiLCJoYW5kbGVDaGFuZ2UiLCJoYW5kbGVEb25lIiwiYWx0IiwiYXR0cnMiLCJzaG93VG9vbGJhciIsInNldFNob3dUb29sYmFyIiwiaW1nUmVmIiwicmVzaXplUmVmIiwidG9vbGJhclJlZiIsImdldFBlcmNlbnRGcm9tV2lkdGgiLCJ3aWR0aCIsImZsb29yZWQiLCJjdXJyZW50IiwibmF0dXJhbFdpZHRoIiwicGFyc2VJbnQiLCJ0b0ZpeGVkIiwiYXBwbHlTaXplRGF0YSIsInVwZGF0ZSIsInJlc2l6ZVBlcmNlbnQiLCJjb21tYW5kcyIsInVwZGF0ZUF0dHJpYnV0ZXMiLCJpbWFnZUhhbmRsaW5nIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJmaW5pc2giLCJJbnNlcnRJbWFnZUhhbmRsZXIiLCJyZXNpemVIYW5kbGUiLCJhZGRFdmVudExpc3RlbmVyIiwiaW5pdFJlc2l6ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsb2FkSW1hZ2UiLCJib3giLCJzdHlsZSIsInciLCJNYXRoIiwibWluIiwiaCIsIm5hdHVyYWxIZWlnaHQiLCJoZWlnaHQiLCJ1cGRhdGVBc3BlY3QiLCJpbml0aWFsIiwibmV4dCIsImtlZXBBc3BlY3QiLCJyZXNpemVUeXBlIiwicmF0aW8iLCJzdGFydFJlc2l6ZSIsImUiLCJib3VuZHMiLCJ0YXJnZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRYIiwibGVmdCIsImNsaWVudFkiLCJ0b3AiLCJvbkNoYW5nZSIsIm5ld1ZhbHVlcyIsInN0b3BSZXNpemUiLCJ3aW5kb3ciLCJvYmplY3RGaXQiLCJmbGV4QWxpZ24iLCJjZW50ZXIiLCJyaWdodCIsImFsaWdubWVudCIsInJvb3QiLCJsb2FkZWQiLCJsb2FkaW5nIiwiZGVsZXRlU3RhdHVzIiwicGVuZGluZ0RlbGV0ZSIsImp1c3RpZnlDb250ZW50IiwicGVyY2VudCIsInByb2dyZXNzIiwiaGlkZVByb2dyZXNzIiwiaW1hZ2VDb250YWluZXIiLCJzcmMiLCJpbWFnZSIsImFjdGl2ZSIsInJlc2l6ZSIsInBvc2l0aW9uIiwiekluZGV4IiwiYmFja2dyb3VuZCIsImJveFNoYWRvdyIsImRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiZnVuYyIsIm51bWJlciIsInRoZW1lIiwicG9ydGFsIiwib3BhY2l0eSIsInRyYW5zaXRpb24iLCJmbG9hdGluZ0J1dHRvblJvdyIsImJhY2tncm91bmRDb2xvciIsInBhbGV0dGUiLCJwYXBlciIsImJvcmRlclJhZGl1cyIsImRpc3BsYXkiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZ3JleSIsImNvbW1vbiIsIndoaXRlIiwiYWxpZ25JdGVtcyIsInByaW1hcnkiLCJtYWluIiwiY3Vyc29yIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwiZHJhd2FibGVIZWlnaHQiLCJtaW5IZWlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsdUJBQU0sZ0RBQU4sQ0FBWjs7QUFFQSxJQUFNQyxNQUFNLEdBQUcsU0FBVEEsTUFBUyxDQUFDQyxDQUFEO0FBQUEsU0FBUUEsQ0FBQyxhQUFNQSxDQUFOLFVBQWMsWUFBdkI7QUFBQSxDQUFmOztBQUVBLFNBQVNDLGNBQVQsQ0FBd0JDLEtBQXhCLEVBQStCO0FBQzdCLE1BQ0VDLElBREYs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QUFjLEVBQUU7QUFDZEssTUFBQUEsUUFBUSxFQUFFLFVBREk7QUFFZGxFLE1BQUFBLEtBQUssRUFBRSxhQUZPO0FBR2RzRixNQUFBQSxPQUFPLEVBQUUsTUFISztBQUlkTSxNQUFBQSxVQUFVLEVBQUUsUUFKRTtBQU1kLDRCQUFzQjtBQUNwQk4sUUFBQUEsT0FBTyxFQUFFO0FBRFc7QUFOUixLQXpDb0I7QUFtRHBDdEIsSUFBQUEsTUFBTSxFQUFFO0FBQ053QixNQUFBQSxNQUFNLHNCQUFlWCxLQUFLLENBQUNNLE9BQU4sQ0FBY1UsT0FBZCxDQUFzQkMsSUFBckM7QUFEQSxLQW5ENEI7QUFzRHBDN0IsSUFBQUEsTUFBTSxFQUFFO0FBQ05pQixNQUFBQSxlQUFlLEVBQUVMLEtBQUssQ0FBQ00sT0FBTixDQUFjVSxPQUFkLENBQXNCQyxJQURqQztBQUVOQyxNQUFBQSxNQUFNLEVBQUUsWUFGRjtBQUdOcEUsTUFBQUEsTUFBTSxFQUFFLE1BSEY7QUFJTjNCLE1BQUFBLEtBQUssRUFBRSxLQUpEO0FBS05xRixNQUFBQSxZQUFZLEVBQUUsQ0FMUjtBQU1OVyxNQUFBQSxVQUFVLEVBQUUsS0FOTjtBQU9OQyxNQUFBQSxXQUFXLEVBQUUsTUFQUDtBQVFOWCxNQUFBQSxPQUFPLEVBQUU7QUFSSCxLQXRENEI7QUFnRXBDWSxJQUFBQSxjQUFjLEVBQUU7QUFDZEMsTUFBQUEsU0FBUyxFQUFFO0FBREc7QUFoRW9CLEdBQVo7QUFBQSxDQUFYLEVBbUVYekgsY0FuRVcsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBMaW5lYXJQcm9ncmVzcyBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9MaW5lYXJQcm9ncmVzcyc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCB7IE5vZGVWaWV3V3JhcHBlciB9IGZyb20gJ0B0aXB0YXAvcmVhY3QnO1xuaW1wb3J0IEluc2VydEltYWdlSGFuZGxlciBmcm9tICcuLi9wbHVnaW5zL2ltYWdlL2luc2VydC1pbWFnZS1oYW5kbGVyJztcbmltcG9ydCBJbWFnZVRvb2xiYXIgZnJvbSAnLi4vcGx1Z2lucy9pbWFnZS9pbWFnZS10b29sYmFyJztcbmltcG9ydCBDdXN0b21Ub29sYmFyV3JhcHBlciBmcm9tIFwiLi9jdXN0b20tdG9vbGJhci13cmFwcGVyXCI7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6aW1hZ2U6Y29tcG9uZW50Jyk7XG5cbmNvbnN0IHNpemVQeCA9IChzKSA9PiAocyA/IGAke3N9cHhgIDogJ2NhbGMoMjBweCknKTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG5vZGUsXG4gICAgZWRpdG9yLFxuICAgIGNsYXNzZXMsXG4gICAgYXR0cmlidXRlcyxcbiAgICBvbkZvY3VzLFxuICAgIHNlbGVjdGVkLFxuICAgIG9wdGlvbnMsXG4gICAgbWF4SW1hZ2VXaWR0aCA9IDcwMCxcbiAgICBtYXhJbWFnZUhlaWdodCA9IDkwMCxcbiAgICBsYXRleCxcbiAgICBoYW5kbGVDaGFuZ2UsXG4gICAgaGFuZGxlRG9uZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7IGFsdCB9ID0gbm9kZS5hdHRycztcblxuICBjb25zdCBbc2hvd1Rvb2xiYXIsIHNldFNob3dUb29sYmFyXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBpbWdSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlc2l6ZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgdG9vbGJhclJlZiA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCBnZXRQZXJjZW50RnJvbVdpZHRoID0gdXNlQ2FsbGJhY2soKHdpZHRoKSA9PiB7XG4gICAgY29uc3QgZmxvb3JlZCA9ICh3aWR0aCAvIGltZ1JlZi5jdXJyZW50Lm5hdHVyYWxXaWR0aCkgKiA0O1xuICAgIHJldHVybiBwYXJzZUludChmbG9vcmVkLnRvRml4ZWQoMCkgKiAyNSwgMTApO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgYXBwbHlTaXplRGF0YSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIW5vZGUuYXR0cnMud2lkdGggfHwgIWltZ1JlZi5jdXJyZW50KSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAuLi5ub2RlLmF0dHJzLFxuICAgICAgcmVzaXplUGVyY2VudDogZ2V0UGVyY2VudEZyb21XaWR0aChub2RlLmF0dHJzLndpZHRoKSxcbiAgICB9O1xuXG4gICAgaWYgKCFpc0VxdWFsKHVwZGF0ZSwgbm9kZS5hdHRycykpIHtcbiAgICAgIGVkaXRvci5jb21tYW5kcy51cGRhdGVBdHRyaWJ1dGVzKCdpbWFnZVVwbG9hZE5vZGUnLCB1cGRhdGUpO1xuICAgIH1cbiAgfSwgW2VkaXRvciwgbm9kZS5hdHRycywgZ2V0UGVyY2VudEZyb21XaWR0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2hvd1Rvb2xiYXIoc2VsZWN0ZWQpO1xuICB9LCBbc2VsZWN0ZWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9wdGlvbnMuaW1hZ2VIYW5kbGluZy5pbnNlcnRJbWFnZVJlcXVlc3RlZChub2RlLCAoZmluaXNoKSA9PiBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGVkaXRvciwgZmluaXNoKSk7XG4gICAgYXBwbHlTaXplRGF0YSgpO1xuXG4gICAgY29uc3QgcmVzaXplSGFuZGxlID0gcmVzaXplUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHJlc2l6ZUhhbmRsZSkge1xuICAgICAgcmVzaXplSGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGluaXRSZXNpemUsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyZXNpemVIYW5kbGUpIHJlc2l6ZUhhbmRsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBpbml0UmVzaXplLCBmYWxzZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXBwbHlTaXplRGF0YSgpO1xuICB9KTtcblxuICBjb25zdCBsb2FkSW1hZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYm94ID0gaW1nUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFib3gpIHJldHVybjtcblxuICAgIGlmICghYm94LnN0eWxlLndpZHRoIHx8IGJveC5zdHlsZS53aWR0aCA9PT0gJ2NhbGMoMjBweCknKSB7XG4gICAgICBjb25zdCB3ID0gTWF0aC5taW4oYm94Lm5hdHVyYWxXaWR0aCwgbWF4SW1hZ2VXaWR0aCk7XG4gICAgICBjb25zdCBoID0gTWF0aC5taW4oYm94Lm5hdHVyYWxIZWlnaHQsIG1heEltYWdlSGVpZ2h0KTtcblxuICAgICAgYm94LnN0eWxlLndpZHRoID0gYCR7d31weGA7XG4gICAgICBib3guc3R5bGUuaGVpZ2h0ID0gYCR7aH1weGA7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgd2lkdGg6IHcsIGhlaWdodDogaCB9O1xuICAgICAgaWYgKCFpc0VxdWFsKHVwZGF0ZSwgbm9kZS5hdHRycykpIHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnVwZGF0ZUF0dHJpYnV0ZXMoJ2ltYWdlVXBsb2FkTm9kZScsIHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbZWRpdG9yLCBub2RlLmF0dHJzLCBtYXhJbWFnZVdpZHRoLCBtYXhJbWFnZUhlaWdodF0pO1xuXG4gIGNvbnN0IHVwZGF0ZUFzcGVjdCA9IChpbml0aWFsLCBuZXh0LCBrZWVwQXNwZWN0ID0gdHJ1ZSwgcmVzaXplVHlwZSkgPT4ge1xuICAgIGlmIChrZWVwQXNwZWN0KSB7XG4gICAgICBjb25zdCByYXRpbyA9IGluaXRpYWwud2lkdGggLyBpbml0aWFsLmhlaWdodDtcbiAgICAgIGlmIChyZXNpemVUeXBlID09PSAnaGVpZ2h0JykgcmV0dXJuIHsgd2lkdGg6IG5leHQuaGVpZ2h0ICogcmF0aW8sIGhlaWdodDogbmV4dC5oZWlnaHQgfTtcbiAgICAgIHJldHVybiB7IHdpZHRoOiBuZXh0LndpZHRoLCBoZWlnaHQ6IG5leHQud2lkdGggLyByYXRpbyB9O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfTtcblxuICBjb25zdCBzdGFydFJlc2l6ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBjb25zdCBib3ggPSBpbWdSZWYuY3VycmVudDtcbiAgICAgIGlmICghYm94KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaW5pdGlhbCA9IHsgd2lkdGg6IGJveC5uYXR1cmFsV2lkdGgsIGhlaWdodDogYm94Lm5hdHVyYWxIZWlnaHQgfTtcblxuICAgICAgY29uc3QgbmV4dCA9IHVwZGF0ZUFzcGVjdChpbml0aWFsLCB7XG4gICAgICAgIHdpZHRoOiBlLmNsaWVudFggLSBib3VuZHMubGVmdCxcbiAgICAgICAgaGVpZ2h0OiBlLmNsaWVudFkgLSBib3VuZHMudG9wLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChuZXh0LndpZHRoID4gNTAgJiYgbmV4dC5oZWlnaHQgPiA1MCAmJiBuZXh0LndpZHRoIDw9IDcwMCAmJiBuZXh0LmhlaWdodCA8PSA5MDApIHtcbiAgICAgICAgYm94LnN0eWxlLndpZHRoID0gYCR7bmV4dC53aWR0aH1weGA7XG4gICAgICAgIGJveC5zdHlsZS5oZWlnaHQgPSBgJHtuZXh0LmhlaWdodH1weGA7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlID0geyB3aWR0aDogbmV4dC53aWR0aCwgaGVpZ2h0OiBuZXh0LmhlaWdodCB9O1xuICAgICAgICBpZiAoIWlzRXF1YWwodXBkYXRlLCBub2RlLmF0dHJzKSkge1xuICAgICAgICAgIGVkaXRvci5jb21tYW5kcy51cGRhdGVBdHRyaWJ1dGVzKCdpbWFnZVVwbG9hZE5vZGUnLCB1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbZWRpdG9yLCBub2RlLmF0dHJzXSxcbiAgKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdWYWx1ZXMpID0+IHtcbiAgICAgIGVkaXRvci5jb21tYW5kcy51cGRhdGVBdHRyaWJ1dGVzKCdpbWFnZVVwbG9hZE5vZGUnLCBuZXdWYWx1ZXMpO1xuICAgIH0sXG4gICAgW2VkaXRvcl0sXG4gICk7XG5cbiAgY29uc3Qgc3RvcFJlc2l6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc3RhcnRSZXNpemUpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3RvcFJlc2l6ZSk7XG4gIH0sIFtzdGFydFJlc2l6ZV0pO1xuXG4gIGNvbnN0IGluaXRSZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0YXJ0UmVzaXplKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN0b3BSZXNpemUpO1xuICB9LCBbc3RhcnRSZXNpemUsIHN0b3BSZXNpemVdKTtcblxuICBjb25zdCBzdHlsZSA9IHtcbiAgICB3aWR0aDogc2l6ZVB4KG5vZGUuYXR0cnMud2lkdGgpLFxuICAgIGhlaWdodDogc2l6ZVB4KG5vZGUuYXR0cnMuaGVpZ2h0KSxcbiAgICBvYmplY3RGaXQ6ICdjb250YWluJyxcbiAgfTtcblxuICBjb25zdCBmbGV4QWxpZ24gPSB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVtub2RlLmF0dHJzLmFsaWdubWVudF0gfHwgJ2ZsZXgtc3RhcnQnO1xuXG4gIHJldHVybiAoXG4gICAgPE5vZGVWaWV3V3JhcHBlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgIGNsYXNzZXMucm9vdCxcbiAgICAgICAgICAhbm9kZS5hdHRycy5sb2FkZWQgJiYgY2xhc3Nlcy5sb2FkaW5nLFxuICAgICAgICAgIG5vZGUuYXR0cnMuZGVsZXRlU3RhdHVzID09PSAncGVuZGluZycgJiYgY2xhc3Nlcy5wZW5kaW5nRGVsZXRlLFxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17eyBqdXN0aWZ5Q29udGVudDogZmxleEFsaWduIH19XG4gICAgICA+XG4gICAgICAgIDxMaW5lYXJQcm9ncmVzc1xuICAgICAgICAgIG1vZGU9XCJkZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgdmFsdWU9e25vZGUuYXR0cnMucGVyY2VudCB8fCAwfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLnByb2dyZXNzLCBub2RlLmF0dHJzLmxvYWRlZCAmJiBjbGFzc2VzLmhpZGVQcm9ncmVzcyl9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuaW1hZ2VDb250YWluZXJ9PlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICAgICAgcmVmPXtpbWdSZWZ9XG4gICAgICAgICAgICBzcmM9e25vZGUuYXR0cnMuc3JjfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuaW1hZ2UsIHNlbGVjdGVkICYmIGNsYXNzZXMuYWN0aXZlKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgIG9uTG9hZD17bG9hZEltYWdlfVxuICAgICAgICAgICAgYWx0PXtub2RlLmF0dHJzLmFsdH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgcmVmPXtyZXNpemVSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLnJlc2l6ZSwgJ3Jlc2l6ZScpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7c2hvd1Rvb2xiYXIgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgcmVmPXt0b29sYmFyUmVmfVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHpJbmRleDogMjAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZWRpdGFibGUtaHRtbC10b29sYmFyLWJnLCAjZWZlZmVmKScsXG4gICAgICAgICAgICBib3hTaGFkb3c6XG4gICAgICAgICAgICAgICcwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEN1c3RvbVRvb2xiYXJXcmFwcGVyIHNob3dEb25lIHsuLi5vcHRpb25zfT5cbiAgICAgICAgICAgIDxJbWFnZVRvb2xiYXJcbiAgICAgICAgICAgICAgZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucz17b3B0aW9ucy5kaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zfVxuICAgICAgICAgICAgICBhbHQ9e25vZGUuYXR0cnMuYWx0fVxuICAgICAgICAgICAgICBpbWFnZUxvYWRlZD17bm9kZS5hdHRycy5sb2FkZWR9XG4gICAgICAgICAgICAgIGFsaWdubWVudD17bm9kZS5hdHRycy5hbGlnbm1lbnQgfHwgJ2xlZnQnfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvQ3VzdG9tVG9vbGJhcldyYXBwZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L05vZGVWaWV3V3JhcHBlcj5cbiAgKTtcbn1cblxuSW1hZ2VDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICBub2RlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGVkaXRvcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBtYXhJbWFnZVdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtYXhJbWFnZUhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoKHRoZW1lKSA9PiAoe1xuICBwb3J0YWw6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDIwMG1zIGxpbmVhcicsXG4gIH0sXG4gIGZsb2F0aW5nQnV0dG9uUm93OiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmJhY2tncm91bmQucGFwZXIsXG4gICAgYm9yZGVyUmFkaXVzOiAnMXB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIGJvcmRlcjogYHNvbGlkIDFweCAke3RoZW1lLnBhbGV0dGUuZ3JleVsyMDBdfWAsXG4gICAgYm94U2hhZG93OlxuICAgICAgJzBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiknLFxuICB9LFxuICBwcm9ncmVzczoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJ2ZpdC1jb250ZW50JyxcbiAgICB0b3A6ICcwJScsXG4gICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMjAwbXMgbGluZWFyJyxcbiAgfSxcbiAgaGlkZVByb2dyZXNzOiB7XG4gICAgb3BhY2l0eTogMCxcbiAgfSxcbiAgbG9hZGluZzoge1xuICAgIG9wYWNpdHk6IDAuMyxcbiAgfSxcbiAgcGVuZGluZ0RlbGV0ZToge1xuICAgIG9wYWNpdHk6IDAuMyxcbiAgfSxcbiAgcm9vdDoge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJvcmRlcjogYHNvbGlkIDFweCAke3RoZW1lLnBhbGV0dGUuY29tbW9uLndoaXRlfWAsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDIwMG1zIGxpbmVhcicsXG4gIH0sXG4gIGRlbGV0ZToge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAwLFxuICB9LFxuICBpbWFnZUNvbnRhaW5lcjoge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnZml0LWNvbnRlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcblxuICAgICcmJjpob3ZlciA+IC5yZXNpemUnOiB7XG4gICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIH0sXG4gIH0sXG4gIGFjdGl2ZToge1xuICAgIGJvcmRlcjogYHNvbGlkIDFweCAke3RoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWlufWAsXG4gIH0sXG4gIHJlc2l6ZToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sXG4gICAgY3Vyc29yOiAnY29sLXJlc2l6ZScsXG4gICAgaGVpZ2h0OiAnMzVweCcsXG4gICAgd2lkdGg6ICc1cHgnLFxuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBtYXJnaW5MZWZ0OiAnNXB4JyxcbiAgICBtYXJnaW5SaWdodDogJzEwcHgnLFxuICAgIGRpc3BsYXk6ICdub25lJyxcbiAgfSxcbiAgZHJhd2FibGVIZWlnaHQ6IHtcbiAgICBtaW5IZWlnaHQ6IDM1MCxcbiAgfSxcbn0pKShJbWFnZUNvbXBvbmVudCk7XG4iXX0=