@searpent/react-image-annotate 2.1.1 → 2.1.2

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.
@@ -0,0 +1,1075 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
5
+ import React, { useState } from "react";
6
+ import { storiesOf } from "@storybook/react";
7
+ import { action as actionAddon } from "@storybook/addon-actions";
8
+ import exampleImage from "../ImageCanvas/seves_desk.story.jpg";
9
+ import bikeImg1 from "./bike-pic.png";
10
+ import bikeImg2 from "./bike-pic2.png";
11
+ import { HotKeys } from "react-hotkeys";
12
+ import { defaultKeyMap } from "../ShortcutsManager";
13
+ import Annotator from "./";
14
+ import { testRegions, testRegionsBoxes } from "../ImageCanvas/index.story";
15
+ import photosToImages from "../utils/photosToImages";
16
+ import examplePhotos from "./examplePhotos";
17
+ import exampleImages from './exampleImages';
18
+ var middlewares = [function (store) {
19
+ return function (next) {
20
+ return function (action) {
21
+ actionAddon(action.type)(action);
22
+ return next(action);
23
+ };
24
+ };
25
+ }];
26
+ storiesOf("Annotator", module).add("Basic", function () {
27
+ return /*#__PURE__*/React.createElement(Annotator, {
28
+ onExit: actionAddon("onExit"),
29
+ middlewares: middlewares,
30
+ labelImages: true,
31
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
32
+ regionTagList: ["tag1", "tag2", "tag3"],
33
+ imageClsList: ["Alpha", "Beta", "Charlie", "Delta"],
34
+ imageTagList: ["tag1", "tag2", "tag3"],
35
+ images: [{
36
+ src: exampleImage,
37
+ name: "Seve's Desk",
38
+ regions: testRegions
39
+ }, {
40
+ src: "https://loremflickr.com/100/100/cars?lock=1",
41
+ name: "Frame 0036"
42
+ }, {
43
+ src: "https://loremflickr.com/100/100/cars?lock=2",
44
+ name: "Frame 0037"
45
+ }, {
46
+ src: "https://loremflickr.com/100/100/cars?lock=3",
47
+ name: "Frame 0038"
48
+ }]
49
+ });
50
+ }).add("Basic with onImagesChange", function () {
51
+ return /*#__PURE__*/React.createElement(HotKeys, {
52
+ keyMap: defaultKeyMap
53
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Annotator, {
54
+ middlewares: middlewares,
55
+ labelImages: true,
56
+ regionClsList: ["author", "appendix", "photo_author", "photo_caption", "advertisement", "other_graphics", "unknown", "title", "about_author", "image", "subtitle", "interview", "table", "text", "continuation_ref", "cover_clip", "page_id", "continuation_mark", "follow_up_mark", "article_termination_mark", "page_splitting_stripe", "column_id_stripe", "prev_page_reference", "section_subcategory"],
57
+ help: "# Tools\n\n**E** - select tool\n\n**D** - frame tool\n\n**Ctrl** + **click frame** - edit frame\n\n**1**- **9** - change class",
58
+ onImagesChange: function onImagesChange(images) {
59
+ return console.log("[images changed to]:", images);
60
+ },
61
+ images: photosToImages([examplePhotos[0]]),
62
+ clsColors: {
63
+ title: "#f70202",
64
+ subtitle: "#ffb405",
65
+ text: "#14deef",
66
+ author: "#f8d51e",
67
+ appendix: "#bfede2",
68
+ photo_author: "#9a17bb",
69
+ photo_caption: "#ff84f6",
70
+ advertisement: "#ffb201",
71
+ other_graphics: "#ff5400",
72
+ unknown: "#bfede2",
73
+ about_author: "#9a17bb",
74
+ image: "#14deef",
75
+ interview: "#23b20f",
76
+ table: "#02b4ba",
77
+ continuation_ref: '#FF33CC',
78
+ cover_clip: '#669966',
79
+ page_id: '#4433AA',
80
+ continuation_mark: '#660066',
81
+ follow_up_mark: '#873e23',
82
+ article_termination_mark: '#873e23',
83
+ page_splitting_stripe: '#873e23',
84
+ column_id_stripe: '#873e23',
85
+ prev_page_reference: '#f3a864',
86
+ section_subcategory: '#442c55'
87
+ } // groupColors={[
88
+ // "#3853F1",
89
+ // "#F6E54C",
90
+ // "#39D33C",
91
+ // "#CF24CF",
92
+ // "#22E3ED",
93
+ // "#EF3029",
94
+ // ]}
95
+ ,
96
+ enabledTools: [],
97
+ groupColors: ['#343434', '#989898', '#dcdcdc'],
98
+ onGroupSelect: function onGroupSelect(groupId) {
99
+ return console.log('selected groupid:', groupId);
100
+ },
101
+ hideHeader: true,
102
+ hideHistory: true,
103
+ hideNotEditingLabel: true,
104
+ showEditor: true,
105
+ showPageSelector: true,
106
+ albumMetadata: [{
107
+ key: "issueNumber",
108
+ value: "12"
109
+ }, {
110
+ key: "issueType",
111
+ value: "news"
112
+ }],
113
+ metadataConfigs: [{
114
+ key: "issueNumber",
115
+ level: "album",
116
+ options: []
117
+ }, {
118
+ key: "issueType",
119
+ level: "album",
120
+ options: ['news', 'magazine', 'q&a']
121
+ }, {
122
+ key: "mutation",
123
+ level: "photo",
124
+ options: ['Morava', 'Slezsko', 'Cechy']
125
+ }, {
126
+ key: "previousArticleId",
127
+ level: "photo_metadata-engine",
128
+ options: [{
129
+ value: "alpha",
130
+ label: "0 - alpha"
131
+ }, {
132
+ value: "beta",
133
+ label: "1 - beta"
134
+ }, {
135
+ value: "gamma",
136
+ label: "2 - gamma"
137
+ }]
138
+ }, {
139
+ key: "pageNumber",
140
+ level: "photo",
141
+ options: []
142
+ }, {
143
+ key: "articleType",
144
+ level: "photo_metadata-engine",
145
+ selectable: true,
146
+ options: [{
147
+ value: "alpha",
148
+ label: "0 - alpha"
149
+ }, {
150
+ value: "beta",
151
+ label: "1 - beta"
152
+ }, {
153
+ value: "gamma",
154
+ label: "2 - gamma"
155
+ }]
156
+ }, {
157
+ key: "section",
158
+ level: "photo_metadata-engine",
159
+ options: ['editorial', 'article', 'last page']
160
+ }],
161
+ onSelectedImageChange: function onSelectedImageChange(d) {
162
+ return console.log("[onSelectedImageChange] triggered:", d);
163
+ },
164
+ onExit: function onExit(s) {
165
+ return console.log('[onExit] triggered:', s);
166
+ },
167
+ save: /*#__PURE__*/function () {
168
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
169
+ var image, triggerRecalc, albumMetadata;
170
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
171
+ while (1) {
172
+ switch (_context.prev = _context.next) {
173
+ case 0:
174
+ image = _ref.image, triggerRecalc = _ref.triggerRecalc, albumMetadata = _ref.albumMetadata;
175
+ console.log("[SYNC] image ".concat(image.id, " saving... recalc: ").concat(triggerRecalc, " albumMetadata: ").concat(albumMetadata.length));
176
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
177
+ setTimeout(function () {
178
+ var lockedUntil = null;
179
+
180
+ if (triggerRecalc) {
181
+ var now = new Date();
182
+ now.setSeconds(now.getSeconds() + 60);
183
+ lockedUntil = now;
184
+ }
185
+
186
+ resolve({
187
+ lockedUntil: lockedUntil
188
+ });
189
+ }, 3000);
190
+ }));
191
+
192
+ case 3:
193
+ case "end":
194
+ return _context.stop();
195
+ }
196
+ }
197
+ }, _callee);
198
+ }));
199
+
200
+ return function (_x) {
201
+ return _ref2.apply(this, arguments);
202
+ };
203
+ }(),
204
+ fetchImage: /*#__PURE__*/function () {
205
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
206
+ var imageId;
207
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
208
+ while (1) {
209
+ switch (_context2.prev = _context2.next) {
210
+ case 0:
211
+ imageId = _ref3.imageId;
212
+ console.log("[SYNC] image ".concat(imageId, " fetching..."));
213
+ return _context2.abrupt("return", new Promise(function (resolve, reject) {
214
+ setTimeout(function () {
215
+ console.log("[SYNC] image ".concat(imageId, " fetched")); // resolve({
216
+ // image: { ...exampleImages[0], lockedUntil: new Date().toISOString(), id: imageId }
217
+ // })
218
+
219
+ // resolve({
220
+ // image: { ...exampleImages[0], lockedUntil: new Date().toISOString(), id: imageId }
221
+ // })
222
+ resolve({
223
+ image: _objectSpread({}, exampleImages[0], {
224
+ lockedUntil: null,
225
+ id: imageId
226
+ })
227
+ });
228
+ }, 5000);
229
+ }));
230
+
231
+ case 3:
232
+ case "end":
233
+ return _context2.stop();
234
+ }
235
+ }
236
+ }, _callee2);
237
+ }));
238
+
239
+ return function (_x2) {
240
+ return _ref4.apply(this, arguments);
241
+ };
242
+ }()
243
+ }))));
244
+ }).add("Basic with onImagesChange (missing articleType value -> reproduce hang)", function () {
245
+ var _storyPhoto$modelResu, _storyPhoto$modelResu2, _metadataEngine$resul;
246
+
247
+ // This story intentionally simulates a production-like bug trigger:
248
+ // article metadata contains `{ key: "articleType" }` with NO `value` field
249
+ // (i.e. `value` is undefined), not an empty string.
250
+ var storyPhoto = JSON.parse(JSON.stringify(examplePhotos[0]));
251
+ var metadataEngine = storyPhoto === null || storyPhoto === void 0 ? void 0 : (_storyPhoto$modelResu = storyPhoto.modelResults) === null || _storyPhoto$modelResu === void 0 ? void 0 : (_storyPhoto$modelResu2 = _storyPhoto$modelResu.v1) === null || _storyPhoto$modelResu2 === void 0 ? void 0 : _storyPhoto$modelResu2.find(function (mr) {
252
+ return mr.modelFamily === "metadata-engine" || mr.name === "metadata-engine";
253
+ });
254
+
255
+ if (metadataEngine === null || metadataEngine === void 0 ? void 0 : (_metadataEngine$resul = metadataEngine.results) === null || _metadataEngine$resul === void 0 ? void 0 : _metadataEngine$resul.length) {
256
+ metadataEngine.results = metadataEngine.results.map(function (r) {
257
+ if (r.label !== "metadata") return r;
258
+ var alphaGroupId = "6";
259
+
260
+ if (r.groupId === alphaGroupId) {
261
+ return _objectSpread({}, r, {
262
+ text: '[{"key":"articleType","value":"alpha"},{"key":"section","value":"editorial"}]'
263
+ });
264
+ } // NOTE: `text` is a JSON string; omit `value` for articleType (undefined).
265
+ // This is the production-like shape that can lead to "hanging" DOM input values
266
+ // when switching directly from an article that had a value.
267
+
268
+
269
+ return _objectSpread({}, r, {
270
+ text: '[{"key":"articleType"},{"key":"section","value":"last page"}]'
271
+ });
272
+ });
273
+ } // Enable before first render (critical) so keys + value handling use buggy mode immediately.
274
+
275
+
276
+ if (typeof window !== "undefined") {
277
+ window.__RIA_ALLOW_UNCONTROLLED_METADATA_INPUTS__ = true;
278
+ }
279
+
280
+ var EnableBuggyMetadataInputMode = function EnableBuggyMetadataInputMode(_ref5) {
281
+ var children = _ref5.children;
282
+ React.useEffect(function () {
283
+ return function () {
284
+ delete window.__RIA_ALLOW_UNCONTROLLED_METADATA_INPUTS__;
285
+ };
286
+ }, []);
287
+ return children;
288
+ };
289
+
290
+ return /*#__PURE__*/React.createElement(HotKeys, {
291
+ keyMap: defaultKeyMap
292
+ }, /*#__PURE__*/React.createElement(EnableBuggyMetadataInputMode, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Annotator, {
293
+ middlewares: middlewares,
294
+ labelImages: true,
295
+ regionClsList: ["author", "appendix", "photo_author", "photo_caption", "advertisement", "other_graphics", "unknown", "title", "about_author", "image", "subtitle", "interview", "table", "text", "continuation_ref", "cover_clip", "page_id", "continuation_mark", "follow_up_mark", "article_termination_mark", "page_splitting_stripe", "column_id_stripe", "prev_page_reference", "section_subcategory"],
296
+ help: "# Tools\n\n**E** - select tool\n\n**D** - frame tool\n\n**Ctrl** + **click frame** - edit frame\n\n**1**- **9** - change class",
297
+ onImagesChange: function onImagesChange(images) {
298
+ return console.log("[images changed to]:", images);
299
+ },
300
+ images: photosToImages([storyPhoto]),
301
+ clsColors: {
302
+ title: "#f70202",
303
+ subtitle: "#ffb405",
304
+ text: "#14deef",
305
+ author: "#f8d51e",
306
+ appendix: "#bfede2",
307
+ photo_author: "#9a17bb",
308
+ photo_caption: "#ff84f6",
309
+ advertisement: "#ffb201",
310
+ other_graphics: "#ff5400",
311
+ unknown: "#bfede2",
312
+ about_author: "#9a17bb",
313
+ image: "#14deef",
314
+ interview: "#23b20f",
315
+ table: "#02b4ba",
316
+ continuation_ref: "#FF33CC",
317
+ cover_clip: "#669966",
318
+ page_id: "#4433AA",
319
+ continuation_mark: "#660066",
320
+ follow_up_mark: "#873e23",
321
+ article_termination_mark: "#873e23",
322
+ page_splitting_stripe: "#873e23",
323
+ column_id_stripe: "#873e23",
324
+ prev_page_reference: "#f3a864",
325
+ section_subcategory: "#442c55"
326
+ },
327
+ enabledTools: [],
328
+ groupColors: ["#343434", "#989898", "#dcdcdc"],
329
+ onGroupSelect: function onGroupSelect(groupId) {
330
+ return console.log("selected groupid:", groupId);
331
+ },
332
+ hideHeader: true,
333
+ hideHistory: true,
334
+ hideNotEditingLabel: true,
335
+ showEditor: true,
336
+ showPageSelector: true,
337
+ albumMetadata: [{
338
+ key: "issueNumber",
339
+ value: "12"
340
+ }, {
341
+ key: "issueType",
342
+ value: "news"
343
+ }],
344
+ metadataConfigs: [{
345
+ key: "issueNumber",
346
+ level: "album",
347
+ options: []
348
+ }, {
349
+ key: "issueType",
350
+ level: "album",
351
+ options: ["news", "magazine", "q&a"]
352
+ }, {
353
+ key: "mutation",
354
+ level: "photo",
355
+ options: ["Morava", "Slezsko", "Cechy"]
356
+ }, {
357
+ key: "previousArticleId",
358
+ level: "photo_metadata-engine",
359
+ selectable: true,
360
+ options: [{
361
+ value: "alpha",
362
+ label: "0 - alpha"
363
+ }, {
364
+ value: "beta",
365
+ label: "1 - beta"
366
+ }, {
367
+ value: "gamma",
368
+ label: "2 - gamma"
369
+ }]
370
+ }, {
371
+ key: "pageNumber",
372
+ level: "photo",
373
+ options: []
374
+ }, // IMPORTANT: articleType is a text input here (not selectable),
375
+ // to match production (`<input type="text" ...>`).
376
+ {
377
+ key: "articleType",
378
+ level: "photo_metadata-engine",
379
+ options: ["alpha", "beta", "gamma"]
380
+ }, {
381
+ key: "section",
382
+ level: "photo_metadata-engine",
383
+ options: ["editorial", "article", "last page"]
384
+ }],
385
+ onSelectedImageChange: function onSelectedImageChange(d) {
386
+ return console.log("[onSelectedImageChange] triggered:", d);
387
+ },
388
+ onExit: function onExit(s) {
389
+ return console.log("[onExit] triggered:", s);
390
+ },
391
+ save: /*#__PURE__*/function () {
392
+ var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref6) {
393
+ var image, triggerRecalc, albumMetadata;
394
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
395
+ while (1) {
396
+ switch (_context3.prev = _context3.next) {
397
+ case 0:
398
+ image = _ref6.image, triggerRecalc = _ref6.triggerRecalc, albumMetadata = _ref6.albumMetadata;
399
+ console.log("[SYNC] image ".concat(image.id, " saving... recalc: ").concat(triggerRecalc, " albumMetadata: ").concat(albumMetadata.length));
400
+ return _context3.abrupt("return", new Promise(function (resolve) {
401
+ setTimeout(function () {
402
+ var lockedUntil = null;
403
+
404
+ if (triggerRecalc) {
405
+ var now = new Date();
406
+ now.setSeconds(now.getSeconds() + 60);
407
+ lockedUntil = now;
408
+ }
409
+
410
+ resolve({
411
+ lockedUntil: lockedUntil
412
+ });
413
+ }, 3000);
414
+ }));
415
+
416
+ case 3:
417
+ case "end":
418
+ return _context3.stop();
419
+ }
420
+ }
421
+ }, _callee3);
422
+ }));
423
+
424
+ return function (_x3) {
425
+ return _ref7.apply(this, arguments);
426
+ };
427
+ }(),
428
+ fetchImage: /*#__PURE__*/function () {
429
+ var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref8) {
430
+ var imageId;
431
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
432
+ while (1) {
433
+ switch (_context4.prev = _context4.next) {
434
+ case 0:
435
+ imageId = _ref8.imageId;
436
+ console.log("[SYNC] image ".concat(imageId, " fetching..."));
437
+ return _context4.abrupt("return", new Promise(function (resolve) {
438
+ setTimeout(function () {
439
+ console.log("[SYNC] image ".concat(imageId, " fetched"));
440
+ resolve({
441
+ image: _objectSpread({}, exampleImages[0], {
442
+ lockedUntil: null,
443
+ id: imageId
444
+ })
445
+ });
446
+ }, 5000);
447
+ }));
448
+
449
+ case 3:
450
+ case "end":
451
+ return _context4.stop();
452
+ }
453
+ }
454
+ }, _callee4);
455
+ }));
456
+
457
+ return function (_x4) {
458
+ return _ref9.apply(this, arguments);
459
+ };
460
+ }()
461
+ })))));
462
+ }).add("Basic - Allow Comments", function () {
463
+ return /*#__PURE__*/React.createElement(Annotator, {
464
+ onExit: actionAddon("onExit"),
465
+ middlewares: middlewares,
466
+ labelImages: true,
467
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
468
+ regionTagList: ["tag1", "tag2", "tag3"],
469
+ imageClsList: ["Alpha", "Beta", "Charlie", "Delta"],
470
+ imageTagList: ["tag1", "tag2", "tag3"],
471
+ images: [{
472
+ src: exampleImage,
473
+ name: "Seve's Desk",
474
+ regions: testRegions
475
+ }, {
476
+ src: "https://loremflickr.com/100/100/cars?lock=1",
477
+ name: "Frame 0036"
478
+ }, {
479
+ src: "https://loremflickr.com/100/100/cars?lock=2",
480
+ name: "Frame 0037"
481
+ }, {
482
+ src: "https://loremflickr.com/100/100/cars?lock=3",
483
+ name: "Frame 0038"
484
+ }],
485
+ allowComments: true
486
+ });
487
+ }).add("Fixed Size Container", function () {
488
+ return /*#__PURE__*/React.createElement("div", {
489
+ style: {
490
+ width: 500,
491
+ height: 500
492
+ }
493
+ }, /*#__PURE__*/React.createElement(Annotator, {
494
+ onExit: actionAddon("onExit"),
495
+ middlewares: [function (store) {
496
+ return function (next) {
497
+ return function (action) {
498
+ actionAddon(action.type)(action);
499
+ return next(action);
500
+ };
501
+ };
502
+ }],
503
+ labelImages: true,
504
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
505
+ regionTagList: ["tag1", "tag2", "tag3"],
506
+ imageClsList: ["Alpha", "Beta", "Charlie", "Delta"],
507
+ imageTagList: ["tag1", "tag2", "tag3"],
508
+ images: [{
509
+ src: exampleImage,
510
+ name: "Seve's Desk",
511
+ regions: testRegions
512
+ }, {
513
+ src: "https://loremflickr.com/100/100/cars?lock=1",
514
+ name: "Frame 0036"
515
+ }, {
516
+ src: "https://loremflickr.com/100/100/cars?lock=2",
517
+ name: "Frame 0037"
518
+ }, {
519
+ src: "https://loremflickr.com/100/100/cars?lock=3",
520
+ name: "Frame 0038"
521
+ }]
522
+ }));
523
+ }).add("Shrunk Annotator (Test Fullscreen)", function () {
524
+ return /*#__PURE__*/React.createElement("div", {
525
+ style: {
526
+ padding: 100
527
+ }
528
+ }, /*#__PURE__*/React.createElement(Annotator, {
529
+ onExit: actionAddon("onExit"),
530
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
531
+ regionTagList: ["tag1", "tag2", "tag3"],
532
+ middlewares: [function (store) {
533
+ return function (next) {
534
+ return function (action) {
535
+ actionAddon(action.type)(action);
536
+ return next(action);
537
+ };
538
+ };
539
+ }],
540
+ images: [{
541
+ src: exampleImage,
542
+ name: "Seve's Desk",
543
+ regions: testRegions
544
+ }]
545
+ }));
546
+ }).add("Annotator w/o No Region Labels or Image Labels", function () {
547
+ return /*#__PURE__*/React.createElement(Annotator, {
548
+ onExit: actionAddon("onExit"),
549
+ middlewares: middlewares,
550
+ images: [{
551
+ src: exampleImage,
552
+ name: "Seve's Desk",
553
+ regions: testRegions
554
+ }]
555
+ });
556
+ }).add("Annotator with no enabled tools", function () {
557
+ return /*#__PURE__*/React.createElement(Annotator, {
558
+ onExit: actionAddon("onExit"),
559
+ enabledTools: [],
560
+ showTags: false,
561
+ middlewares: middlewares,
562
+ images: [{
563
+ src: exampleImage,
564
+ name: "Seve's Desk",
565
+ regions: testRegions
566
+ }]
567
+ });
568
+ }).add("Bounding Box Annotator with output to console.log", function () {
569
+ return /*#__PURE__*/React.createElement(Annotator, {
570
+ onExit: function onExit(out) {
571
+ window.lastOutput = out;
572
+ console.log(out);
573
+ },
574
+ taskDescription: "## Annotate Hands\nDraw a bounding box around each hand.",
575
+ enabledTools: ["select", "create-box"],
576
+ regionClsList: ["Hand", "Face"],
577
+ regionTagList: ["Open Pinch", "Closed Pinch", "In Frame"],
578
+ showTags: false,
579
+ images: [{
580
+ src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame017.png",
581
+ name: "Bounding Box Test",
582
+ regions: []
583
+ }, {
584
+ src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame001.png",
585
+ name: "Bounding Box Test",
586
+ regions: []
587
+ }]
588
+ });
589
+ }).add("Bounding Box Annotator with allowed area", function () {
590
+ return /*#__PURE__*/React.createElement(Annotator, {
591
+ taskDescription: "## Annotate Hands\nDraw a bounding box around each hand.",
592
+ enabledTools: ["select", "create-box"],
593
+ regionClsList: ["Hand", "Face"],
594
+ regionTagList: ["Open Pinch", "Closed Pinch", "In Frame"],
595
+ showTags: false,
596
+ allowedArea: {
597
+ x: 0,
598
+ y: 0.6,
599
+ w: 0.3,
600
+ h: 0.3
601
+ },
602
+ images: [{
603
+ src: "https://s3.amazonaws.com/jobstorage.workaround.online/Atheer/video-frames/VID_20190111_161054.mp4_frame017.png",
604
+ name: "Bounding Box Test",
605
+ regions: []
606
+ }]
607
+ });
608
+ }).add("Car Annotation", function () {
609
+ return /*#__PURE__*/React.createElement(Annotator, {
610
+ middlewares: middlewares,
611
+ labelImages: true,
612
+ regionClsList: ["Car", "Sign", "Construction Barrier"],
613
+ regionTagList: ["Moving", "Stopped", "Obstacle"],
614
+ imageClsList: ["On Street", "Sidewalk", "Other"] // imageTagList={["tag1", "tag2", "tag3"]}
615
+ ,
616
+ images: [{
617
+ src: bikeImg1,
618
+ name: "Frame 03021",
619
+ regions: [{
620
+ cls: "Car",
621
+ color: "hsl(82,100%,50%)",
622
+ h: 0.45921666772960146,
623
+ w: 0.3932156342484836,
624
+ x: 0.6302148980776354,
625
+ y: 0.5559504689545722,
626
+ type: "box",
627
+ id: "8776160642957009",
628
+ tags: ["Stopped"],
629
+ highlighted: false,
630
+ editingLabels: false
631
+ }, {
632
+ cls: "Car",
633
+ color: "hsl(264,100%,50%)",
634
+ type: "box",
635
+ id: "885140028730734",
636
+ tags: ["Moving"],
637
+ w: 0.2627711048576583,
638
+ x: 0.20751775748638238,
639
+ y: 0.5566583219431673,
640
+ h: 0.268717618171478,
641
+ highlighted: false,
642
+ editingLabels: false
643
+ }, {
644
+ cls: "Car",
645
+ color: "hsl(127,100%,50%)",
646
+ w: 0.033016094117647055,
647
+ x: 0.5051247779336334,
648
+ y: 0.5396378545840628,
649
+ h: 0.03423999999999994,
650
+ type: "box",
651
+ id: "5952553512262024",
652
+ tags: ["Stopped"],
653
+ highlighted: false,
654
+ editingLabels: false
655
+ }, {
656
+ type: "box",
657
+ x: 0.7847296794208894,
658
+ y: 0.3635007199404308,
659
+ w: 0.04871147880041349,
660
+ h: 0.10995961095800888,
661
+ highlighted: true,
662
+ editingLabels: false,
663
+ color: "hsl(268,100%,50%)",
664
+ id: "5647593040225252",
665
+ cls: "Sign"
666
+ }]
667
+ }, {
668
+ src: bikeImg2,
669
+ name: "Frame 03022",
670
+ regions: [{
671
+ type: "box",
672
+ x: 0.12226982552783494,
673
+ y: 0.5578947368421052,
674
+ w: 0.3301518695958121,
675
+ h: 0.33562583001232194,
676
+ highlighted: false,
677
+ editingLabels: false,
678
+ color: "hsl(171,100%,50%)",
679
+ id: "014393439034159128",
680
+ cls: "Car",
681
+ tags: ["Stopped"]
682
+ }, {
683
+ type: "box",
684
+ x: 0.5018477698901193,
685
+ y: 0.5954194079501558,
686
+ w: 0.07194249496837657,
687
+ h: 0.06826906557009338,
688
+ highlighted: false,
689
+ editingLabels: false,
690
+ color: "hsl(17,100%,50%)",
691
+ id: "02954614542034717",
692
+ cls: "Car",
693
+ tags: ["Moving"]
694
+ }, {
695
+ type: "box",
696
+ x: 0.6483083881082046,
697
+ y: 0.6217109311709718,
698
+ w: 0.08786544324705947,
699
+ h: 0.20450608002345438,
700
+ highlighted: true,
701
+ editingLabels: true,
702
+ color: "hsl(337,100%,50%)",
703
+ id: "9124138360972984",
704
+ cls: "Construction Barrier",
705
+ tags: ["Obstacle"]
706
+ }, {
707
+ type: "box",
708
+ x: 0.7628671305695606,
709
+ y: 0.6299511028935285,
710
+ w: 0.12734928166820647,
711
+ h: 0.2689292407634438,
712
+ highlighted: false,
713
+ editingLabels: false,
714
+ color: "hsl(89,100%,50%)",
715
+ id: "5960600741979638",
716
+ cls: "Construction Barrier"
717
+ }, {
718
+ type: "box",
719
+ x: 0.5871362440754417,
720
+ y: 0.6232091442114366,
721
+ w: 0.06562102723514573,
722
+ h: 0.15281773012741662,
723
+ highlighted: false,
724
+ editingLabels: false,
725
+ color: "hsl(326,100%,50%)",
726
+ id: "7955287536996538",
727
+ cls: "Construction Barrier"
728
+ }, {
729
+ type: "box",
730
+ x: 0.42943330004934643,
731
+ y: 0.6054718359824862,
732
+ w: 0.053210066743122564,
733
+ h: 0.054984658299147116,
734
+ highlighted: false,
735
+ editingLabels: false,
736
+ color: "hsl(66,100%,50%)",
737
+ id: "49573139861381166",
738
+ cls: "Car",
739
+ tags: ["Stopped"]
740
+ }]
741
+ }],
742
+ onExit: function onExit(out) {
743
+ window.lastOutput = out;
744
+ console.log(JSON.stringify(out.images));
745
+ }
746
+ });
747
+ }).add("Annotator blocks scroll from propagating", function () {
748
+ return /*#__PURE__*/React.createElement("div", {
749
+ style: {
750
+ height: "200vh"
751
+ }
752
+ }, /*#__PURE__*/React.createElement(Annotator, {
753
+ onExit: actionAddon("onExit"),
754
+ showTags: false,
755
+ middlewares: [function (store) {
756
+ return function (next) {
757
+ return function (action) {
758
+ actionAddon(action.type)(action);
759
+ return next(action);
760
+ };
761
+ };
762
+ }],
763
+ images: [{
764
+ src: exampleImage,
765
+ name: "Seve's Desk",
766
+ regions: testRegions
767
+ }]
768
+ }), /*#__PURE__*/React.createElement("div", {
769
+ style: {
770
+ color: "red"
771
+ }
772
+ }, "You shouldn't be able to see this"));
773
+ }).add("Annotator should not expand beyond parent", function () {
774
+ return /*#__PURE__*/React.createElement("div", {
775
+ style: {
776
+ width: "100vw",
777
+ height: "100vh",
778
+ padding: 100,
779
+ boxSizing: "border-box"
780
+ }
781
+ }, /*#__PURE__*/React.createElement(Annotator, {
782
+ onExit: actionAddon("onExit"),
783
+ showTags: false,
784
+ middlewares: [function (store) {
785
+ return function (next) {
786
+ return function (action) {
787
+ actionAddon(action.type)(action);
788
+ return next(action);
789
+ };
790
+ };
791
+ }],
792
+ images: [{
793
+ src: exampleImage,
794
+ name: "Seve's Desk",
795
+ regions: testRegions
796
+ }]
797
+ }));
798
+ }).add("Video with frames as each image", function () {
799
+ return /*#__PURE__*/React.createElement("div", {
800
+ style: {
801
+ width: "100vw",
802
+ height: "100vh",
803
+ boxSizing: "border-box"
804
+ }
805
+ }, /*#__PURE__*/React.createElement(Annotator, {
806
+ onExit: actionAddon("onExit"),
807
+ showTags: false,
808
+ middlewares: [function (store) {
809
+ return function (next) {
810
+ return function (action) {
811
+ actionAddon(action.type)(action);
812
+ return next(action);
813
+ };
814
+ };
815
+ }],
816
+ images: [{
817
+ src: "https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4",
818
+ frameTime: 0,
819
+ name: "Frame 1"
820
+ }, {
821
+ src: "https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4",
822
+ frameTime: 4500,
823
+ name: "Frame 2"
824
+ }]
825
+ }));
826
+ }).add("Keyframe video", function () {
827
+ return /*#__PURE__*/React.createElement("div", {
828
+ style: {
829
+ width: "100vw",
830
+ height: "100vh",
831
+ boxSizing: "border-box"
832
+ }
833
+ }, /*#__PURE__*/React.createElement(Annotator, {
834
+ onExit: function onExit() {
835
+ var _console;
836
+
837
+ (_console = console).log.apply(_console, arguments);
838
+
839
+ actionAddon("onExit").apply(void 0, arguments);
840
+ },
841
+ showTags: true,
842
+ videoSrc: "https://s3.amazonaws.com/asset.workaround.online/SampleVideo_1280x720_1mb.mp4",
843
+ videoTime: 1000,
844
+ keyframes: {
845
+ 0: {
846
+ regions: [{
847
+ type: "point",
848
+ x: 0.1608187134502924,
849
+ y: 0.5769980506822612,
850
+ highlighted: true,
851
+ editingLabels: false,
852
+ color: "hsl(238,100%,50%)",
853
+ id: "9995495728521284"
854
+ }, {
855
+ type: "box",
856
+ x: 0.089171974522293,
857
+ y: 0.36801132342533616,
858
+ w: 0.30573248407643316,
859
+ h: 0.4170794998820476,
860
+ highlighted: true,
861
+ editingLabels: false,
862
+ color: "hsl(263,100%,50%)",
863
+ id: "04858393322065635"
864
+ }]
865
+ },
866
+ 3333: {
867
+ regions: [{
868
+ type: "point",
869
+ x: 0.1608187134502924,
870
+ y: 0.5769980506822612,
871
+ highlighted: true,
872
+ editingLabels: false,
873
+ color: "hsl(238,100%,50%)",
874
+ id: "9995495728521284"
875
+ }, {
876
+ type: "box",
877
+ x: 0.14861995753715496,
878
+ y: 0.0934182590233546,
879
+ w: 0.3163481953290871,
880
+ h: 0.7596131163010142,
881
+ highlighted: true,
882
+ editingLabels: false,
883
+ color: "hsl(263,100%,50%)",
884
+ id: "04858393322065635"
885
+ }]
886
+ }
887
+ }
888
+ }));
889
+ }).add("Override Next/Prev Button Handling", function () {
890
+ var images = [exampleImage, "https://loremflickr.com/100/100/cars?lock=1", "https://loremflickr.com/100/100/cars?lock=2"];
891
+
892
+ var _useState = useState(0),
893
+ _useState2 = _slicedToArray(_useState, 2),
894
+ selectedImageIndex = _useState2[0],
895
+ changeSelectedImageIndex = _useState2[1];
896
+
897
+ return /*#__PURE__*/React.createElement(Annotator, {
898
+ onExit: actionAddon("onExit"),
899
+ onNextImage: function onNextImage() {
900
+ actionAddon("onNextImage")();
901
+ changeSelectedImageIndex((selectedImageIndex + 1) % 3);
902
+ },
903
+ onPrevImage: function onPrevImage() {
904
+ actionAddon("onPrevImage")();
905
+ changeSelectedImageIndex((selectedImageIndex - 1 + 3) % 3);
906
+ },
907
+ labelImages: true,
908
+ selectedImage: images[selectedImageIndex],
909
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
910
+ imageClsList: ["Alpha", "Beta", "Charlie", "Delta"],
911
+ images: [{
912
+ src: exampleImage,
913
+ name: "Seve's Desk"
914
+ }, {
915
+ src: images[1],
916
+ name: "Frame 0036"
917
+ }, {
918
+ src: images[2],
919
+ name: "Frame 0037"
920
+ }]
921
+ });
922
+ }).add("Override RegionEditLabel", function () {
923
+ var images = [exampleImage, "https://loremflickr.com/100/100/cars?lock=1", "https://loremflickr.com/100/100/cars?lock=2"];
924
+
925
+ var NewRegionEditLabel = function NewRegionEditLabel(_ref10) {
926
+ var region = _ref10.region,
927
+ editing = _ref10.editing,
928
+ onDelete = _ref10.onDelete,
929
+ onChange = _ref10.onChange,
930
+ onClose = _ref10.onClose,
931
+ onOpen = _ref10.onOpen;
932
+ return /*#__PURE__*/React.createElement("div", {
933
+ style: {
934
+ backgroundColor: "white"
935
+ }
936
+ }, "I'm the closed part", /*#__PURE__*/React.createElement("div", {
937
+ style: {
938
+ display: editing ? "block" : "none"
939
+ }
940
+ }, "I'm the part that shows when it's being edited!", /*#__PURE__*/React.createElement("button", {
941
+ onClick: function onClick() {
942
+ return onDelete(region);
943
+ }
944
+ }, "Delete This Region"), /*#__PURE__*/React.createElement("button", {
945
+ onClick: function onClick() {
946
+ return onChange(_objectSpread({}, region, {
947
+ cls: "awesome-value"
948
+ }));
949
+ }
950
+ }, "Set Classification to \"awesome-value\""), /*#__PURE__*/React.createElement("button", {
951
+ onClick: function onClick() {
952
+ return onClose(region);
953
+ }
954
+ }, "Close the edit mode")));
955
+ };
956
+
957
+ return /*#__PURE__*/React.createElement(Annotator, {
958
+ onExit: actionAddon("onExit"),
959
+ labelImages: true,
960
+ selectedImage: images[0],
961
+ RegionEditLabel: NewRegionEditLabel,
962
+ images: [{
963
+ src: exampleImage,
964
+ name: "Seve's Desk"
965
+ }, {
966
+ src: images[1],
967
+ name: "Frame 0036"
968
+ }, {
969
+ src: images[2],
970
+ name: "Frame 0037"
971
+ }]
972
+ });
973
+ }).add("Two on sample page w/ hotkeys", function () {
974
+ return /*#__PURE__*/React.createElement(HotKeys, {
975
+ keyMap: defaultKeyMap
976
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
977
+ style: {
978
+ height: 600
979
+ }
980
+ }, /*#__PURE__*/React.createElement(Annotator, {
981
+ onExit: actionAddon("onExit"),
982
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
983
+ imageClsList: ["Alpha", "Beta", "Charlie", "Delta"],
984
+ middlewares: [function (store) {
985
+ return function (next) {
986
+ return function (action) {
987
+ actionAddon(action.type)(action);
988
+ return next(action);
989
+ };
990
+ };
991
+ }],
992
+ images: [{
993
+ src: exampleImage,
994
+ name: "Seve's Desk",
995
+ regions: testRegions
996
+ }]
997
+ })), /*#__PURE__*/React.createElement("div", {
998
+ style: {
999
+ height: 600
1000
+ }
1001
+ }, /*#__PURE__*/React.createElement(Annotator, {
1002
+ onExit: actionAddon("onExit"),
1003
+ middlewares: [function (store) {
1004
+ return function (next) {
1005
+ return function (action) {
1006
+ actionAddon(action.type)(action);
1007
+ return next(action);
1008
+ };
1009
+ };
1010
+ }],
1011
+ images: [{
1012
+ src: exampleImage,
1013
+ name: "Seve's Desk",
1014
+ regions: testRegions
1015
+ }]
1016
+ }))));
1017
+ }).add("CORs Error (Pixel Segmentation)", function () {
1018
+ return /*#__PURE__*/React.createElement(Annotator, {
1019
+ onExit: actionAddon("onExit"),
1020
+ middlewares: middlewares,
1021
+ labelImages: true,
1022
+ fullImageSegmentationMode: true,
1023
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
1024
+ images: [{
1025
+ src: "https://placebear.com/200/300",
1026
+ name: "Frame 0036"
1027
+ }]
1028
+ });
1029
+ }).add("Modify Allowed Area", function () {
1030
+ return /*#__PURE__*/React.createElement(Annotator, {
1031
+ onExit: actionAddon("onExit"),
1032
+ middlewares: middlewares,
1033
+ labelImages: true,
1034
+ fullImageSegmentationMode: true,
1035
+ allowedArea: {
1036
+ x: 0,
1037
+ y: 0.6,
1038
+ w: 0.3,
1039
+ h: 0.3
1040
+ },
1041
+ enabledTools: ["modify-allowed-area"],
1042
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
1043
+ images: [{
1044
+ src: exampleImage,
1045
+ name: "Frame 0036"
1046
+ }]
1047
+ });
1048
+ }).add("Hide Next, Hide Header Text", function () {
1049
+ return /*#__PURE__*/React.createElement(Annotator, {
1050
+ onExit: actionAddon("onExit"),
1051
+ labelImages: true,
1052
+ hideNext: true,
1053
+ hideHeaderText: true,
1054
+ fullImageSegmentationMode: true,
1055
+ enabledTools: ["modify-allowed-area"],
1056
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
1057
+ images: [{
1058
+ src: exampleImage,
1059
+ name: "Frame 0036"
1060
+ }]
1061
+ });
1062
+ }).add("Hide Header", function () {
1063
+ return /*#__PURE__*/React.createElement(Annotator, {
1064
+ onExit: actionAddon("onExit"),
1065
+ labelImages: true,
1066
+ hideHeader: true,
1067
+ fullImageSegmentationMode: true,
1068
+ enabledTools: ["modify-allowed-area"],
1069
+ regionClsList: ["Alpha", "Beta", "Charlie", "Delta"],
1070
+ images: [{
1071
+ src: exampleImage,
1072
+ name: "Frame 0036"
1073
+ }]
1074
+ });
1075
+ });