@searpent/react-image-annotate 2.0.77 → 2.0.79

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 (224) hide show
  1. package/Annotator/exampleImages.js +41 -0
  2. package/Annotator/examplePhotos.js +6980 -0
  3. package/Annotator/index.js +417 -0
  4. package/Annotator/reducers/combine-reducers.js +14 -0
  5. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  6. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  7. package/Annotator/reducers/general-reducer.js +1430 -0
  8. package/Annotator/reducers/get-active-image.js +27 -0
  9. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  10. package/Annotator/reducers/history-handler.js +38 -0
  11. package/Annotator/reducers/image-reducer.js +20 -0
  12. package/Annotator/reducers/video-reducer.js +88 -0
  13. package/ClassSelectionMenu/index.js +140 -0
  14. package/Crosshairs/index.js +53 -0
  15. package/DebugSidebarBox/index.js +20 -0
  16. package/DemoSite/Editor.js +194 -0
  17. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  18. package/DemoSite/index.js +40 -0
  19. package/Editor/annotation-plugin/annotation.js +702 -0
  20. package/Editor/index.js +93 -0
  21. package/Editor/readOnly.js +123 -0
  22. package/{src/Editor → Editor}/tools.js +2 -3
  23. package/Errorer/index.js +11 -0
  24. package/FullImageSegmentationAnnotator/index.js +7 -0
  25. package/GroupSelectorSidebarBox/index.js +63 -0
  26. package/GroupsEditorSidebarBox/index.js +138 -0
  27. package/HelpSidebarBox/index.js +58 -0
  28. package/HighlightBox/index.js +102 -0
  29. package/HistorySidebarBox/index.js +71 -0
  30. package/ImageCanvas/index.js +441 -0
  31. package/ImageCanvas/region-tools.js +165 -0
  32. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  33. package/ImageCanvas/use-mouse.js +180 -0
  34. package/ImageCanvas/use-project-box.js +27 -0
  35. package/ImageCanvas/use-wasd-mode.js +62 -0
  36. package/ImageMask/index.js +133 -0
  37. package/ImageMask/load-image.js +25 -0
  38. package/ImageSelectorSidebarBox/index.js +60 -0
  39. package/KeyframeTimeline/get-time-string.js +27 -0
  40. package/KeyframeTimeline/index.js +233 -0
  41. package/KeyframesSelectorSidebarBox/index.js +93 -0
  42. package/LandingPage/index.js +159 -0
  43. package/Locker/index.js +11 -0
  44. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  45. package/MainLayout/icon-dictionary.js +104 -0
  46. package/MainLayout/index.js +526 -0
  47. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  48. package/MainLayout/types.js +0 -0
  49. package/MainLayout/use-implied-video-regions.js +13 -0
  50. package/MetadataEditorSidebarBox/index.js +231 -0
  51. package/PageSelector/index.js +180 -0
  52. package/PointDistances/index.js +73 -0
  53. package/PreventScrollToParents/index.js +51 -0
  54. package/RegionLabel/index.js +232 -0
  55. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  56. package/RegionSelectAndTransformBoxes/index.js +169 -0
  57. package/RegionSelectorSidebarBox/index.js +254 -0
  58. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  59. package/RegionShapes/index.js +294 -0
  60. package/RegionTags/index.js +144 -0
  61. package/SettingsDialog/index.js +52 -0
  62. package/SettingsProvider/index.js +60 -0
  63. package/Shortcuts/ShortcutField.js +46 -0
  64. package/Shortcuts/index.js +133 -0
  65. package/ShortcutsManager/index.js +155 -0
  66. package/Sidebar/index.js +69 -0
  67. package/SidebarBoxContainer/index.js +93 -0
  68. package/SmallToolButton/index.js +42 -0
  69. package/TagsSidebarBox/index.js +105 -0
  70. package/TaskDescriptionSidebarBox/index.js +58 -0
  71. package/Theme/index.js +30 -0
  72. package/VideoOrImageCanvasBackground/index.js +151 -0
  73. package/colors.js +14 -0
  74. package/hooks/use-colors.js +127 -0
  75. package/hooks/use-event-callback.js +10 -0
  76. package/hooks/use-exclude-pattern.js +24 -0
  77. package/hooks/use-load-image.js +26 -0
  78. package/hooks/use-window-size.js +46 -0
  79. package/{src/hooks → hooks}/xpattern.js +1 -1
  80. package/index.js +3 -0
  81. package/lib.js +3 -0
  82. package/package.json +1 -1
  83. package/stories.js +5 -0
  84. package/utils/blocks-to-article.js +60 -0
  85. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  86. package/{src/utils → utils}/default-locked-until.js +2 -1
  87. package/{src/utils → utils}/filter-only-unique.js +1 -1
  88. package/utils/get-from-local-storage.js +7 -0
  89. package/utils/get-hotkey-help-text.js +9 -0
  90. package/utils/get-landmarks-with-transform.js +40 -0
  91. package/utils/photosToImages.js +85 -0
  92. package/utils/regions-groups.js +28 -0
  93. package/utils/regions-to-blocks.js +18 -0
  94. package/utils/saveable-actions-enum.js +3 -0
  95. package/utils/set-in-local-storage.js +3 -0
  96. package/utils/sleep.js +7 -0
  97. package/utils/uuid-to-hash.js +5 -0
  98. package/.babelrc +0 -6
  99. package/.env +0 -1
  100. package/.flowconfig +0 -2
  101. package/.github/workflows/release-on-master.yml +0 -32
  102. package/.github/workflows/test.yml +0 -16
  103. package/.prettierrc +0 -3
  104. package/.releaserc.js +0 -18
  105. package/.storybook/addons.js +0 -2
  106. package/.storybook/config.js +0 -16
  107. package/LICENSE +0 -21
  108. package/public/favicon.ico +0 -0
  109. package/public/index.html +0 -38
  110. package/src/Annotator/bike-pic.png +0 -0
  111. package/src/Annotator/bike-pic2.png +0 -0
  112. package/src/Annotator/dab-keyframes.story.json +0 -1
  113. package/src/Annotator/exampleImages.js +0 -48
  114. package/src/Annotator/examplePhotos.js +0 -7603
  115. package/src/Annotator/index.js +0 -380
  116. package/src/Annotator/index.story.js +0 -899
  117. package/src/Annotator/poses.story.js +0 -150
  118. package/src/Annotator/reducers/combine-reducers.js +0 -7
  119. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  120. package/src/Annotator/reducers/general-reducer.js +0 -1228
  121. package/src/Annotator/reducers/get-active-image.js +0 -21
  122. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  123. package/src/Annotator/reducers/history-handler.js +0 -60
  124. package/src/Annotator/reducers/image-reducer.js +0 -23
  125. package/src/Annotator/reducers/video-reducer.js +0 -85
  126. package/src/Annotator/video.story.js +0 -51
  127. package/src/ClassSelectionMenu/index.js +0 -112
  128. package/src/Crosshairs/index.js +0 -64
  129. package/src/DebugSidebarBox/index.js +0 -36
  130. package/src/DemoSite/Editor.js +0 -235
  131. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  132. package/src/DemoSite/index.js +0 -41
  133. package/src/DemoSite/index.story.js +0 -10
  134. package/src/DemoSite/simple-segmentation-example.json +0 -572
  135. package/src/Editor/annotation-plugin/annotation.js +0 -546
  136. package/src/Editor/index.js +0 -50
  137. package/src/Editor/readOnly.js +0 -31
  138. package/src/Errorer/index.js +0 -13
  139. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  140. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  143. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  144. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  145. package/src/GroupSelectorSidebarBox/index.js +0 -48
  146. package/src/GroupsEditorSidebarBox/index.js +0 -108
  147. package/src/HelpSidebarBox/index.js +0 -43
  148. package/src/HighlightBox/index.js +0 -143
  149. package/src/HistorySidebarBox/index.js +0 -78
  150. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  151. package/src/ImageCanvas/index.js +0 -515
  152. package/src/ImageCanvas/index.story.js +0 -314
  153. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  154. package/src/ImageCanvas/region-tools.js +0 -171
  155. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  156. package/src/ImageCanvas/use-mouse.js +0 -168
  157. package/src/ImageCanvas/use-project-box.js +0 -23
  158. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  159. package/src/ImageMask/index.js +0 -127
  160. package/src/ImageMask/load-image.js +0 -32
  161. package/src/ImageSelectorSidebarBox/index.js +0 -54
  162. package/src/KeyframeTimeline/get-time-string.js +0 -25
  163. package/src/KeyframeTimeline/index.js +0 -223
  164. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  165. package/src/LandingPage/content.md +0 -57
  166. package/src/LandingPage/github-markdown.css +0 -964
  167. package/src/LandingPage/index.js +0 -147
  168. package/src/Locker/index.js +0 -13
  169. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  170. package/src/MainLayout/icon-dictionary.js +0 -79
  171. package/src/MainLayout/index.js +0 -564
  172. package/src/MainLayout/index.story.js +0 -240
  173. package/src/MainLayout/types.js +0 -171
  174. package/src/MainLayout/use-implied-video-regions.js +0 -17
  175. package/src/MetadataEditorSidebarBox/index.js +0 -160
  176. package/src/PageSelector/index.js +0 -159
  177. package/src/PointDistances/index.js +0 -90
  178. package/src/PreventScrollToParents/index.js +0 -48
  179. package/src/PreventScrollToParents/index.story.js +0 -23
  180. package/src/RegionLabel/index.js +0 -236
  181. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  182. package/src/RegionSelectorSidebarBox/index.js +0 -220
  183. package/src/RegionShapes/index.js +0 -254
  184. package/src/RegionTags/index.js +0 -136
  185. package/src/SettingsDialog/index.js +0 -58
  186. package/src/SettingsProvider/index.js +0 -57
  187. package/src/Shortcuts/ShortcutField.js +0 -44
  188. package/src/Shortcuts/index.js +0 -129
  189. package/src/ShortcutsManager/index.js +0 -162
  190. package/src/Sidebar/index.js +0 -117
  191. package/src/SidebarBoxContainer/index.js +0 -93
  192. package/src/SmallToolButton/index.js +0 -57
  193. package/src/TagsSidebarBox/index.js +0 -93
  194. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  195. package/src/Theme/index.js +0 -36
  196. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  197. package/src/colors.js +0 -32
  198. package/src/hooks/use-colors.js +0 -95
  199. package/src/hooks/use-event-callback.js +0 -11
  200. package/src/hooks/use-exclude-pattern.js +0 -27
  201. package/src/hooks/use-load-image.js +0 -21
  202. package/src/hooks/use-window-size.js +0 -46
  203. package/src/hooks/xpattern.png +0 -0
  204. package/src/index.js +0 -18
  205. package/src/lib.js +0 -7
  206. package/src/screenshot.png +0 -0
  207. package/src/site.css +0 -5
  208. package/src/stories.js +0 -2
  209. package/src/utils/blocks-to-article.js +0 -61
  210. package/src/utils/get-from-local-storage.js +0 -7
  211. package/src/utils/get-hotkey-help-text.js +0 -11
  212. package/src/utils/get-landmarks-with-transform.js +0 -23
  213. package/src/utils/photosToImages.js +0 -67
  214. package/src/utils/regions-groups.js +0 -19
  215. package/src/utils/regions-to-blocks.js +0 -16
  216. package/src/utils/saveable-actions-enum.js +0 -5
  217. package/src/utils/set-in-local-storage.js +0 -6
  218. package/src/utils/sleep.js +0 -3
  219. package/src/utils/uuid-to-hash.js +0 -5
  220. /package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  221. /package/{src/Errorer → Errorer}/errorer.css +0 -0
  222. /package/{src/Locker → Locker}/locker.css +0 -0
  223. /package/{src/PageSelector → PageSelector}/page-selector.css +0 -0
  224. /package/{src/utils → utils}/next-group-id.js +0 -0
@@ -0,0 +1,702 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+
4
+ /**
5
+ * Build styles
6
+ */
7
+ import './annotation.css';
8
+ export function whitespaceCharactersToHTML() {
9
+ var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
10
+ return str // new line whitespace
11
+ .replaceAll(/[ ]\n[ ]/gm, '&nbsp;<br>&nbsp;') // space both sides adds &nbsp;
12
+ .replaceAll(/\n[ ]/gm, '<br>&nbsp;') // space right side adds &nbsp;
13
+ .replaceAll(/[ ]\n/gm, '&nbsp;<br>') // space left side adds &nbsp;
14
+ .replaceAll(/\n/gm, '<br>') // no spaces
15
+ // tab whitespace
16
+ .replaceAll(/\t/gm, '&nbsp;&nbsp;&nbsp;&nbsp;'); // no spaces
17
+ }
18
+
19
+ function HTMLToWhitespaceCharacters() {
20
+ var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
21
+ return str.replaceAll(/((&nbsp;|\s){4})/gm, '\t').replaceAll('&nbsp;', ' ').replaceAll('<br>', '\n'); // new line whitespace
22
+ } // Possible classes
23
+ // ================
24
+
25
+
26
+ var Annotation =
27
+ /*#__PURE__*/
28
+ function () {
29
+ /**
30
+ * Render plugin`s main Element and fill it with saved data
31
+ *
32
+ * @param {{data: HeaderData, config: HeaderConfig, api: object}}
33
+ * data — previously saved data
34
+ * config - user config for Tool
35
+ * api - Editor.js API
36
+ * readOnly - read only mode flag
37
+ */
38
+ function Annotation(_ref) {
39
+ var data = _ref.data,
40
+ config = _ref.config,
41
+ api = _ref.api,
42
+ readOnly = _ref.readOnly;
43
+
44
+ _classCallCheck(this, Annotation);
45
+
46
+ this.api = api;
47
+ this.readOnly = readOnly;
48
+ /**
49
+ * Styles
50
+ *
51
+ * @type {object}
52
+ */
53
+
54
+ this._CSS = {
55
+ block: this.api.styles.block,
56
+ settingsButton: this.api.styles.settingsButton,
57
+ settingsButtonActive: this.api.styles.settingsButtonActive,
58
+ wrapper: 'ce-header',
59
+ backgroundColor: (data === null || data === void 0 ? void 0 : data.highlighted) && (data === null || data === void 0 ? void 0 : data.clsColor) ? data.clsColor : undefined
60
+ };
61
+ /**
62
+ * Tool's settings passed from Editor
63
+ *
64
+ * @type {HeaderConfig}
65
+ * @private
66
+ */
67
+
68
+ this._settings = config;
69
+ /**
70
+ * Block's data
71
+ *
72
+ * @type {HeaderData}
73
+ * @private
74
+ */
75
+
76
+ this._data = this.normalizeData(data);
77
+ /**
78
+ * List of settings buttons
79
+ *
80
+ * @type {HTMLElement[]}
81
+ */
82
+
83
+ this.settingsButtons = [];
84
+ /**
85
+ * Main Block wrapper
86
+ *
87
+ * @type {HTMLElement}
88
+ * @private
89
+ */
90
+
91
+ this._element = this.getTag();
92
+ }
93
+ /**
94
+ * Normalize input data
95
+ *
96
+ * @param {HeaderData} data - saved data to process
97
+ *
98
+ * @returns {HeaderData}
99
+ * @private
100
+ */
101
+
102
+
103
+ _createClass(Annotation, [{
104
+ key: "normalizeData",
105
+ value: function normalizeData(data) {
106
+ var newData = {};
107
+
108
+ if (typeof data !== 'object') {
109
+ data = {};
110
+ }
111
+
112
+ newData.text = whitespaceCharactersToHTML(data.text);
113
+ newData.labelName = data.labelName || this.defaultLabel.labelName;
114
+ return newData;
115
+ }
116
+ /**
117
+ * Return Tool's view
118
+ *
119
+ * @returns {HTMLHeadingElement}
120
+ * @public
121
+ */
122
+
123
+ }, {
124
+ key: "render",
125
+ value: function render() {
126
+ return this._element;
127
+ }
128
+ /**
129
+ * Create Block's settings block
130
+ *
131
+ * @returns {HTMLElement}
132
+ */
133
+
134
+ }, {
135
+ key: "renderSettings",
136
+ value: function renderSettings() {
137
+ var _this = this;
138
+
139
+ var holder = document.createElement('DIV'); // do not add settings button, when only one label is configured
140
+
141
+ if (this.labels.length <= 1) {
142
+ return holder;
143
+ }
144
+ /** Add type selectors */
145
+
146
+
147
+ this.labels.forEach(function (label) {
148
+ var selectTypeButton = document.createElement('DIV');
149
+ selectTypeButton.classList.add(_this._CSS.settingsButton);
150
+ /**
151
+ * Highlight current label button
152
+ */
153
+
154
+ if (_this.currentLabel.labelName === label.labelName) {
155
+ selectTypeButton.classList.add(_this._CSS.settingsButtonActive);
156
+ }
157
+ /**
158
+ * Add SVG icon
159
+ */
160
+
161
+
162
+ selectTypeButton.innerHTML = "".concat(label.labelName);
163
+ /**
164
+ * Save label to its button
165
+ */
166
+
167
+ selectTypeButton.dataset.labelName = label.labelName;
168
+ /**
169
+ * Set up click handler
170
+ */
171
+
172
+ selectTypeButton.addEventListener('click', function () {
173
+ _this.setLabelName(label.labelName);
174
+ });
175
+ /**
176
+ * Append settings button to holder
177
+ */
178
+
179
+ holder.appendChild(selectTypeButton);
180
+ /**
181
+ * Save settings buttons
182
+ */
183
+
184
+ _this.settingsButtons.push(selectTypeButton);
185
+ });
186
+ return holder;
187
+ }
188
+ /**
189
+ * Callback for Block's settings buttons
190
+ *
191
+ * @param {labelName} labelName - labelName to set
192
+ */
193
+
194
+ }, {
195
+ key: "setLabelName",
196
+ value: function setLabelName(labelName) {
197
+ var _this2 = this;
198
+
199
+ this.data = {
200
+ labelName: labelName,
201
+ text: this.data.text
202
+ };
203
+ /**
204
+ * Highlight button by selected labelName
205
+ */
206
+
207
+ this.settingsButtons.forEach(function (button) {
208
+ button.classList.toggle(_this2._CSS.settingsButtonActive, button.dataset.labelName === labelName);
209
+ });
210
+ }
211
+ /**
212
+ * Method that specified how to merge two Text blocks.
213
+ * Called by Editor.js by backspace at the beginning of the Block
214
+ *
215
+ * @param {HeaderData} data - saved data to merger with current block
216
+ * @public
217
+ */
218
+
219
+ }, {
220
+ key: "merge",
221
+ value: function merge(data) {
222
+ var newData = {
223
+ text: this.data.text + data.text,
224
+ labelName: this.data.labelName
225
+ };
226
+ this.data = newData;
227
+ }
228
+ /**
229
+ * Validate Text block data:
230
+ * - check for emptiness
231
+ *
232
+ * @param {HeaderData} blockData — data received after saving
233
+ * @returns {boolean} false if saved data is not correct, otherwise true
234
+ * @public
235
+ */
236
+
237
+ }, {
238
+ key: "validate",
239
+ value: function validate(blockData) {
240
+ return blockData.text.trim() !== '';
241
+ }
242
+ /**
243
+ * Extract Tool's data from the view
244
+ *
245
+ * @param {HTMLHeadingElement} toolsContent - Text tools rendered view
246
+ * @returns {HeaderData} - saved data
247
+ * @public
248
+ */
249
+
250
+ }, {
251
+ key: "save",
252
+ value: function save(toolsContent) {
253
+ return {
254
+ text: HTMLToWhitespaceCharacters(toolsContent.innerHTML),
255
+ labelName: this.currentLabel.labelName
256
+ };
257
+ }
258
+ /**
259
+ * Allow Header to be converted to/from other blocks
260
+ */
261
+
262
+ }, {
263
+ key: "getTag",
264
+
265
+ /**
266
+ * Get tag for target label
267
+ * By default returns second-labelled header
268
+ *
269
+ * @returns {HTMLElement}
270
+ */
271
+ value: function getTag() {
272
+ /**
273
+ * Create element for current Block's label
274
+ */
275
+ var tag = document.createElement(this.currentLabel.tag);
276
+
277
+ if (this._CSS.backgroundColor) {
278
+ tag.style.backgroundColor = this._CSS.backgroundColor;
279
+ }
280
+ /**
281
+ * Add text to block
282
+ */
283
+
284
+
285
+ tag.innerHTML = this._data.text || '';
286
+ /**
287
+ * Add styles class
288
+ */
289
+
290
+ tag.classList.add(this._CSS.wrapper);
291
+ /**
292
+ * Make tag editable
293
+ */
294
+
295
+ tag.contentEditable = this.readOnly ? 'false' : 'true';
296
+ /**
297
+ * Add Placeholder
298
+ */
299
+
300
+ tag.dataset.placeholder = this.api.i18n.t(this._settings.placeholder || '');
301
+ /**
302
+ * Add spellcheck
303
+ */
304
+
305
+ tag.spellcheck = 'true';
306
+ return tag;
307
+ }
308
+ /**
309
+ * Get current label
310
+ *
311
+ * @returns {label}
312
+ */
313
+
314
+ }, {
315
+ key: "onPaste",
316
+
317
+ /**
318
+ * Handle H1-H6 tags on paste to substitute it with header Tool
319
+ *
320
+ * @param {PasteEvent} event - event with pasted content
321
+ */
322
+ value: function onPaste(event) {
323
+ var content = event.detail.data;
324
+ /**
325
+ * Define default label value
326
+ *
327
+ * @type {labelName}
328
+ */
329
+
330
+ var labelName = this.defaultLabel.labelName;
331
+
332
+ switch (content.tagName) {
333
+ case 'H1':
334
+ labelName = 1;
335
+ break;
336
+
337
+ case 'H2':
338
+ labelName = 2;
339
+ break;
340
+
341
+ case 'H3':
342
+ labelName = 3;
343
+ break;
344
+
345
+ case 'H4':
346
+ labelName = 4;
347
+ break;
348
+
349
+ case 'H5':
350
+ labelName = 5;
351
+ break;
352
+
353
+ case 'H6':
354
+ labelName = 6;
355
+ break;
356
+ } // if (this._settings.labels) {
357
+ // // Fallback to nearest label when specified not available
358
+ // label = this._settings.labels.reduce((prevLabel, currLabel) => {
359
+ // return Math.abs(currLabel - label) < Math.abs(prevLabel - label)
360
+ // ? currLabel
361
+ // : prevLabel;
362
+ // });
363
+ // }
364
+
365
+
366
+ this.data = {
367
+ labelName: labelName,
368
+ text: content.innerHTML
369
+ };
370
+ }
371
+ /**
372
+ * Used by Editor.js paste handling API.
373
+ * Provides configuration to handle H1-H6 tags.
374
+ *
375
+ * @returns {{handler: (function(HTMLElement): {text: string}), tags: string[]}}
376
+ */
377
+
378
+ }, {
379
+ key: "data",
380
+
381
+ /**
382
+ * Get current Tools`s data
383
+ *
384
+ * @returns {HeaderData} Current data
385
+ * @private
386
+ */
387
+ get: function get() {
388
+ this._data.text = this._element.innerHTML;
389
+ this._data.labelName = this.currentLabel.labelName;
390
+ return this._data;
391
+ }
392
+ /**
393
+ * Store data in plugin:
394
+ * - at the this._data property
395
+ * - at the HTML
396
+ *
397
+ * @param {HeaderData} data — data to set
398
+ * @private
399
+ */
400
+ ,
401
+ set: function set(data) {
402
+ this._data = this.normalizeData(data);
403
+ /**
404
+ * If labelName is set and block in DOM
405
+ * then replace it to a new block
406
+ */
407
+
408
+ if (data.labelName !== undefined && this._element.parentNode) {
409
+ /**
410
+ * Create a new tag
411
+ *
412
+ * @type {HTMLHeadingElement}
413
+ */
414
+ var newHeader = this.getTag();
415
+ /**
416
+ * Save Block's content
417
+ */
418
+
419
+ newHeader.innerHTML = this._element.innerHTML;
420
+ /**
421
+ * Replace blocks
422
+ */
423
+
424
+ this._element.parentNode.replaceChild(newHeader, this._element);
425
+ /**
426
+ * Save new block to private variable
427
+ *
428
+ * @type {HTMLHeadingElement}
429
+ * @private
430
+ */
431
+
432
+
433
+ this._element = newHeader;
434
+ }
435
+ /**
436
+ * If data.text was passed then update block's content
437
+ */
438
+
439
+
440
+ if (data.text !== undefined) {
441
+ this._element.innerHTML = this._data.text || '';
442
+ }
443
+ }
444
+ }, {
445
+ key: "currentLabel",
446
+ get: function get() {
447
+ var _this3 = this;
448
+
449
+ var label = this.labels.find(function (labelItem) {
450
+ return labelItem.labelName === _this3._data.labelName;
451
+ });
452
+
453
+ if (!label) {
454
+ label = this.defaultLabel;
455
+ }
456
+
457
+ return label;
458
+ }
459
+ /**
460
+ * Return default label
461
+ *
462
+ * @returns {label}
463
+ */
464
+
465
+ }, {
466
+ key: "defaultLabel",
467
+ get: function get() {
468
+ var _this4 = this;
469
+
470
+ /**
471
+ * User can specify own default label value
472
+ */
473
+ if (this._settings.defaultLabel) {
474
+ var userSpecified = this.labels.find(function (labelItem) {
475
+ return labelItem.labelName === _this4._settings.defaultLabel;
476
+ });
477
+
478
+ if (userSpecified) {
479
+ return userSpecified;
480
+ }
481
+
482
+ console.warn("(ง'̀-'́)ง Annotation Tool: the default label specified was not found in available labels");
483
+ }
484
+ /**
485
+ * With no additional options, there will be H2 by default
486
+ *
487
+ * @type {label}
488
+ */
489
+
490
+
491
+ return this.labels[1];
492
+ }
493
+ /**
494
+ * @typedef {object} label
495
+ * @property {labelName} labelName - label labelName
496
+ * @property {string} tag - tag corresponds with label labelName
497
+ * @property {string} svg - icon
498
+ */
499
+
500
+ /**
501
+ * Available header labels
502
+ *
503
+ * @returns {label[]}
504
+ */
505
+
506
+ }, {
507
+ key: "labels",
508
+ get: function get() {
509
+ var _this5 = this;
510
+
511
+ var availableLabels = [{
512
+ labelName: 'title',
513
+ tag: 'h1',
514
+ name: 'title',
515
+ backgroundColor: '#ffcccc'
516
+ }, {
517
+ labelName: 'subtitle',
518
+ tag: 'h2',
519
+ name: 'subtitle',
520
+ backgroundColor: '#ffccff'
521
+ }, {
522
+ labelName: 'text',
523
+ tag: 'p',
524
+ name: 'text',
525
+ backgroundColor: '#14deef'
526
+ }, {
527
+ labelName: 'author',
528
+ tag: 'i',
529
+ name: 'author',
530
+ backgroundColor: '#00bb00'
531
+ }, {
532
+ labelName: 'appendix',
533
+ tag: 'p',
534
+ name: 'appendix',
535
+ backgroundColor: '#dcfcec'
536
+ }, {
537
+ labelName: 'photo_author',
538
+ tag: 'p',
539
+ name: 'photo_author',
540
+ backgroundColor: '#bb0000'
541
+ }, {
542
+ labelName: 'photo_caption',
543
+ tag: 'p',
544
+ name: 'photo_caption',
545
+ backgroundColor: '#ccffff'
546
+ }, {
547
+ labelName: 'advertisement',
548
+ tag: 'p',
549
+ name: 'advertisement',
550
+ backgroundColor: '#ffeccc'
551
+ }, {
552
+ labelName: 'other_graphics',
553
+ tag: 'p',
554
+ name: 'other_graphics',
555
+ backgroundColor: '#ff5400'
556
+ }, {
557
+ labelName: 'unknown',
558
+ tag: 's',
559
+ name: 'unknown',
560
+ backgroundColor: '#cccccc'
561
+ }, {
562
+ labelName: 'about_author',
563
+ tag: 'p',
564
+ name: 'about_author',
565
+ backgroundColor: '#ecffec'
566
+ }, {
567
+ labelName: 'image',
568
+ tag: 'p',
569
+ name: 'image',
570
+ backgroundColor: '#ffffcc'
571
+ }, {
572
+ labelName: 'interview',
573
+ tag: 'p',
574
+ name: 'interview',
575
+ backgroundColor: '#23b20f'
576
+ }, {
577
+ labelName: 'table',
578
+ tag: 'p',
579
+ name: 'table',
580
+ backgroundColor: '#0000bb'
581
+ }, {
582
+ labelName: 'section',
583
+ tag: 'p',
584
+ name: 'section',
585
+ backgroundColor: '#ffcccc'
586
+ }, {
587
+ labelName: 'continuation_ref',
588
+ backgroundColor: '#FF33CC',
589
+ name: 'continuation_ref',
590
+ tag: 'p'
591
+ }, {
592
+ labelName: 'cover_clip',
593
+ backgroundColor: '#669966',
594
+ name: 'cover_clip',
595
+ tag: 'p'
596
+ }, {
597
+ labelName: 'page_id',
598
+ backgroundColor: '#4433AA',
599
+ name: 'page_id',
600
+ tag: 'p'
601
+ }, {
602
+ labelName: 'continuation_mark',
603
+ backgroundColor: '#660066',
604
+ name: 'continuation_mark',
605
+ tag: 'p'
606
+ }, {
607
+ labelName: 'follow_up_mark',
608
+ backgroundColor: '#873e23',
609
+ name: 'follow_up_mark',
610
+ tag: 'p'
611
+ }, {
612
+ labelName: 'article_termination_mark',
613
+ backgroundColor: '#873e23',
614
+ name: 'article_termination_mark',
615
+ tag: 'p'
616
+ }, {
617
+ labelName: 'page_splitting_stripe',
618
+ backgroundColor: '#873e23',
619
+ name: 'page_splitting_stripe',
620
+ tag: 'p'
621
+ }, {
622
+ labelName: 'column_id_stripe',
623
+ backgroundColor: '#873e23',
624
+ name: 'column_id_stripe',
625
+ tag: 'p'
626
+ }, {
627
+ labelName: 'prev_page_reference',
628
+ backgroundColor: '#f3a864',
629
+ name: 'prev_page_reference',
630
+ tag: 'p'
631
+ }, {
632
+ labelName: 'section_subcategory',
633
+ backgroundColor: '#442c55',
634
+ name: 'section_subcategory',
635
+ tag: 'p'
636
+ }];
637
+ return this._settings.labels ? availableLabels.filter(function (l) {
638
+ return _this5._settings.labels.includes(l.labelName);
639
+ }) : availableLabels;
640
+ }
641
+ }], [{
642
+ key: "conversionConfig",
643
+ get: function get() {
644
+ return {
645
+ export: 'text',
646
+ // use 'text' property for other blocks
647
+ import: 'text' // fill 'text' property from other block's export string
648
+
649
+ };
650
+ }
651
+ /**
652
+ * Sanitizer Rules
653
+ */
654
+
655
+ }, {
656
+ key: "sanitize",
657
+ get: function get() {
658
+ return {
659
+ labelName: false,
660
+ text: {}
661
+ };
662
+ }
663
+ /**
664
+ * Returns true to notify core that read-only is supported
665
+ *
666
+ * @returns {boolean}
667
+ */
668
+
669
+ }, {
670
+ key: "isReadOnlySupported",
671
+ get: function get() {
672
+ return true;
673
+ }
674
+ }, {
675
+ key: "pasteConfig",
676
+ get: function get() {
677
+ return {
678
+ tags: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']
679
+ };
680
+ }
681
+ /**
682
+ * Get Tool toolbox settings
683
+ * icon - Tool icon's SVG
684
+ * title - title to show in toolbox
685
+ *
686
+ * @returns {{icon: string, title: string}}
687
+ */
688
+
689
+ }, {
690
+ key: "toolbox",
691
+ get: function get() {
692
+ return {
693
+ icon: '<svg width="17" height="15" viewBox="0 0 336 276" xmlns="http://www.w3.org/2000/svg"><path d="M291 150V79c0-19-15-34-34-34H79c-19 0-34 15-34 34v42l67-44 81 72 56-29 42 30zm0 52l-43-30-56 30-81-67-66 39v23c0 19 15 34 34 34h178c17 0 31-13 34-29zM79 0h178c44 0 79 35 79 79v118c0 44-35 79-79 79H79c-44 0-79-35-79-79V79C0 35 35 0 79 0z"/></svg>',
694
+ title: 'Annotation'
695
+ };
696
+ }
697
+ }]);
698
+
699
+ return Annotation;
700
+ }();
701
+
702
+ export default Annotation;