@searpent/react-image-annotate 2.3.3 → 2.3.5

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 (60) hide show
  1. package/Annotator/examplePhotos.js +30 -30
  2. package/Annotator/examplePhotos_repr.js +28 -28
  3. package/Annotator/index.js +69 -32
  4. package/Annotator/index.story_bugdemo_15_1.js +895 -773
  5. package/Annotator/index.story_repr.js +1048 -933
  6. package/Annotator/reducers/convert-expanding-line-to-polygon.js +15 -16
  7. package/ClassSelectionMenu/index.js +55 -35
  8. package/Crosshairs/index.js +30 -23
  9. package/DebugSidebarBox/index.js +40 -9
  10. package/DemoSite/Editor.js +124 -79
  11. package/DemoSite/ErrorBoundaryDialog.js +19 -6
  12. package/DemoSite/index.js +26 -17
  13. package/Editor/index.js +70 -36
  14. package/Editor/index_bugdemo_15_1.js +68 -35
  15. package/Editor/readOnly.js +178 -127
  16. package/Errorer/index.js +8 -3
  17. package/FullImageSegmentationAnnotator/index.js +6 -3
  18. package/GroupSelectorSidebarBox/index.js +48 -32
  19. package/GroupsEditorSidebarBox/index.js +75 -40
  20. package/HelpSidebarBox/index.js +24 -13
  21. package/HighlightBox/index.js +37 -30
  22. package/HistorySidebarBox/index.js +51 -29
  23. package/ImageCanvas/index.js +165 -130
  24. package/ImageMask/index.js +9 -6
  25. package/ImageSelectorSidebarBox/index.js +44 -26
  26. package/KeyframeTimeline/index.js +65 -45
  27. package/KeyframesSelectorSidebarBox/index.js +76 -54
  28. package/LandingPage/index.js +76 -38
  29. package/Locker/index.js +8 -3
  30. package/MainLayout/RightSidebarItemsWrapper.js +7 -4
  31. package/MainLayout/icon-dictionary.js +99 -66
  32. package/MainLayout/index.js +256 -196
  33. package/MainLayout/index_bugdemo_15_1.js +253 -195
  34. package/MetadataEditorSidebarBox/index.js +152 -102
  35. package/MetadataEditorSidebarBox/index_14_01_25.js +152 -102
  36. package/MetadataEditorSidebarBox/index_repr.js +183 -128
  37. package/PageSelector/UpdatedBySemaphore.js +54 -0
  38. package/PageSelector/index.js +172 -96
  39. package/PageSelector/page-selector.css +126 -2
  40. package/PointDistances/index.js +45 -33
  41. package/PreventScrollToParents/index.js +16 -9
  42. package/RegionLabel/index.js +217 -165
  43. package/RegionSelectAndTransformBoxes/index.js +131 -105
  44. package/RegionSelectorSidebarBox/index.js +243 -165
  45. package/RegionShapes/index.js +213 -153
  46. package/RegionTags/index.js +83 -69
  47. package/SettingsDialog/index.js +50 -37
  48. package/SettingsProvider/index.js +8 -5
  49. package/Shortcuts/ShortcutField.js +21 -14
  50. package/Shortcuts/index.js +18 -12
  51. package/ShortcutsManager/index.js +7 -4
  52. package/Sidebar/index.js +46 -29
  53. package/SidebarBoxContainer/index.js +14 -7
  54. package/SmallToolButton/index.js +23 -16
  55. package/TagsSidebarBox/index.js +41 -28
  56. package/TaskDescriptionSidebarBox/index.js +24 -13
  57. package/Theme/index.js +8 -3
  58. package/VideoOrImageCanvasBackground/index.js +30 -17
  59. package/package.json +1 -1
  60. package/utils/spellcheck-nspell.js +2 -2
@@ -53,9 +53,12 @@ var HotkeyDiv = withHotKeys(function (_ref) {
53
53
  divRef = _ref.divRef,
54
54
  props = _objectWithoutProperties(_ref, ["hotKeys", "children", "divRef"]);
55
55
 
56
- return React.createElement("div", Object.assign({}, _objectSpread({}, hotKeys, props), {
57
- ref: divRef
58
- }), children);
56
+ return (
57
+ /*#__PURE__*/
58
+ React.createElement("div", Object.assign({}, _objectSpread({}, hotKeys, props), {
59
+ ref: divRef
60
+ }), children)
61
+ );
59
62
  });
60
63
  var FullScreenContainer = styled("div")(function (_ref2) {
61
64
  var theme = _ref2.theme;
@@ -201,7 +204,9 @@ export var MainLayout = function MainLayout(_ref5) {
201
204
  var allowedGroups = useMemo(function () {
202
205
  return regionsGroups(state.images[state.selectedImage].regions);
203
206
  }, [state.images, state.selectedImage]);
204
- var canvas = React.createElement(ImageCanvas, Object.assign({}, settings, {
207
+ var canvas =
208
+ /*#__PURE__*/
209
+ React.createElement(ImageCanvas, Object.assign({}, settings, {
205
210
  showCrosshairs: settings.showCrosshairs && !["select", "pan", "zoom"].includes(state.selectedTool),
206
211
  key: state.selectedImage,
207
212
  showMask: state.showMask,
@@ -388,199 +393,252 @@ export var MainLayout = function MainLayout(_ref5) {
388
393
  var selectedFrame = ((_state$images$state$s3 = state.images[state.selectedImage]) === null || _state$images$state$s3 === void 0 ? void 0 : (_state$images$state$s4 = _state$images$state$s3.regions.find(function (i) {
389
394
  return i.highlighted === true;
390
395
  })) === null || _state$images$state$s4 === void 0 ? void 0 : _state$images$state$s4.id) || '';
391
- return React.createElement(ThemeProvider, {
392
- theme: theme
393
- }, React.createElement(FullScreenContainer, null, React.createElement(FullScreen, {
394
- handle: fullScreenHandle,
395
- onChange: function onChange(open) {
396
- if (!open) {
397
- fullScreenHandle.exit();
398
- action("HEADER_BUTTON_CLICKED", "buttonName")("Window");
396
+ return (
397
+ /*#__PURE__*/
398
+ React.createElement(ThemeProvider, {
399
+ theme: theme
400
+ },
401
+ /*#__PURE__*/
402
+ React.createElement(FullScreenContainer, null,
403
+ /*#__PURE__*/
404
+ React.createElement(FullScreen, {
405
+ handle: fullScreenHandle,
406
+ onChange: function onChange(open) {
407
+ if (!open) {
408
+ fullScreenHandle.exit();
409
+ action("HEADER_BUTTON_CLICKED", "buttonName")("Window");
410
+ }
399
411
  }
400
- }
401
- }, React.createElement(HotkeyDiv, {
402
- tabIndex: -1,
403
- divRef: innerContainerRef,
404
- onMouseDown: refocusOnMouseEvent,
405
- onMouseOver: refocusOnMouseEvent,
406
- allowChanges: true,
407
- handlers: hotkeyHandlers,
408
- className: classnames(classes.container, state.fullScreen && "Fullscreen")
409
- }, React.createElement("div", {
410
- style: {
411
- display: 'flex',
412
- flexDirection: 'row'
413
- }
414
- }, showPageSelector && React.createElement(PageSelector, {
415
- pages: pages,
416
- onPageClick: handlePageClick,
417
- onMetadataChange: onMetadataChange,
418
- metadataConfigs: state.metadataConfigs || [],
419
- onRecalcClick: onRecalcClick
420
- }), React.createElement(WorkspaceWrapper, null, React.createElement(Workspace, {
421
- style: {
422
- width: "auto"
423
412
  },
424
- allowFullscreen: true,
425
- iconDictionary: iconDictionary,
426
- hideHeader: hideHeader,
427
- hideHeaderText: hideHeaderText,
428
- headerLeftSide: [state.annotationType === "video" ? React.createElement(KeyframeTimeline, {
429
- currentTime: state.currentVideoTime,
430
- duration: state.videoDuration,
431
- onChangeCurrentTime: action("CHANGE_VIDEO_TIME", "newTime"),
432
- keyframes: state.keyframes
433
- }) : activeImage ? React.createElement("div", {
434
- className: classes.headerTitle
435
- }, activeImage.name) : null].filter(Boolean),
436
- headerItems: [!hidePrev && {
437
- name: "Prev"
438
- }, !hideNext && {
439
- name: "Next"
440
- }, state.annotationType !== "video" ? null : !state.videoPlaying ? {
441
- name: "Play"
442
- } : {
443
- name: "Pause"
444
- }, !hideClone && !nextImageHasRegions && activeImage.regions && {
445
- name: "Clone"
446
- }, !hideSettings && {
447
- name: "Settings"
448
- }, !hideFullScreen && (state.fullScreen ? {
449
- name: "Window"
450
- } : {
451
- name: "Fullscreen"
452
- }), !hideSave && {
453
- name: "Save"
454
- }].filter(Boolean),
455
- onClickHeaderItem: onClickHeaderItem,
456
- onClickIconSidebarItem: onClickIconSidebarItem,
457
- selectedTools: [state.selectedTool, state.showTags && "show-tags", state.showMask && "show-mask"].filter(Boolean),
458
- iconSidebarItems: !state.enabledTools ? [] : [{
459
- name: "select",
460
- helperText: "Select" + getHotkeyHelpText("select_tool"),
461
- alwaysShowing: false
462
- }, {
463
- name: "pan",
464
- helperText: "Drag/Pan (right or middle click)" + getHotkeyHelpText("pan_tool"),
465
- alwaysShowing: false
466
- }, {
467
- name: "zoom",
468
- helperText: "Zoom In/Out (scroll)" + getHotkeyHelpText("zoom_tool"),
469
- alwaysShowing: false
470
- }, {
471
- name: "show-tags",
472
- helperText: "Show / Hide Tags",
473
- alwaysShowing: false
474
- }, {
475
- name: "create-point",
476
- helperText: "Add Point" + getHotkeyHelpText("create_point")
477
- }, {
478
- name: "create-box",
479
- helperText: "Add Bounding Box" + getHotkeyHelpText("create_bounding_box")
480
- }, {
481
- name: "create-polygon",
482
- helperText: "Add Polygon" + getHotkeyHelpText("create_polygon")
483
- }, {
484
- name: "create-line",
485
- helperText: "Add Line"
486
- }, {
487
- name: "create-expanding-line",
488
- helperText: "Add Expanding Line"
489
- }, {
490
- name: "create-keypoints",
491
- helperText: "Add Keypoints (Pose)"
492
- }, state.fullImageSegmentationMode && {
493
- name: "show-mask",
494
- alwaysShowing: false,
495
- helperText: "Show / Hide Mask"
496
- }, {
497
- name: "modify-allowed-area",
498
- helperText: "Modify Allowed Area"
499
- }].filter(Boolean).filter(function (a) {
500
- return a.alwaysShowing || state.enabledTools.includes(a.name);
501
- }),
502
- rightSidebarItems: [React.createElement(RightSidebarItemsWrapper, null, [isSelectedImageLocked && React.createElement(Locker, null), debugModeOn && React.createElement(DebugBox, {
503
- state: debugModeOn,
504
- lastAction: state.lastAction,
505
- key: "debug-box"
506
- }), state.taskDescription && React.createElement(TaskDescription, {
507
- description: state.taskDescription,
508
- key: "task-description"
509
- }), state.help && React.createElement(Help, {
510
- help: state.help,
511
- key: "help"
512
- }), state.regionClsList && React.createElement(ClassSelectionMenu, {
513
- selectedCls: state.selectedCls,
514
- regionClsList: state.regionClsList,
515
- onSelectCls: action("SELECT_CLASSIFICATION", "cls"),
516
- key: "class-selection-menu"
517
- }), state.labelImages && React.createElement(TagsSidebarBox, {
518
- currentImage: activeImage,
519
- imageClsList: state.imageClsList,
520
- imageTagList: state.imageTagList,
521
- onChangeImage: action("CHANGE_IMAGE", "delta"),
522
- expandedByDefault: true,
523
- key: "tags-sidebar-box"
524
- }),, // (state.images?.length || 0) > 1 && (
525
- // <ImageSelector
526
- // onSelect={action("SELECT_REGION", "region")}
527
- // images={state.images}
528
- // />
529
- // ),
530
- // groups && (
531
- // <GroupSelector
532
- // title="Articles"
533
- // groups={groups}
534
- // selectedGroupId={selectedGroupId}
535
- // onSelect={onGroupSelect}
536
- // />
537
- // )
538
- React.createElement(RegionSelector, {
539
- regions: activeImage ? activeImage.regions : emptyArr,
540
- onSelectRegion: action("SELECT_REGION", "region"),
541
- onDeleteRegion: action("DELETE_REGION", "region"),
542
- onChangeRegion: action("CHANGE_REGION", "region"),
543
- key: "region-selector"
544
- }), state.keyframes && React.createElement(KeyframesSelector, {
545
- onChangeVideoTime: action("CHANGE_VIDEO_TIME", "newTime"),
546
- onDeleteKeyframe: action("DELETE_KEYFRAME", "time"),
547
- onChangeCurrentTime: action("CHANGE_VIDEO_TIME", "newTime"),
548
- currentTime: state.currentVideoTime,
549
- duration: state.videoDuration,
550
- keyframes: state.keyframes,
551
- key: "key-frame-selector"
552
- }), !hideHistory && React.createElement(HistorySidebarBox, {
553
- history: state.history,
554
- onRestoreHistory: action("RESTORE_HISTORY"),
555
- key: "history-sidebar"
556
- }), React.createElement(MetadataEditor, {
557
- state: state,
413
+ /*#__PURE__*/
414
+ React.createElement(HotkeyDiv, {
415
+ tabIndex: -1,
416
+ divRef: innerContainerRef,
417
+ onMouseDown: refocusOnMouseEvent,
418
+ onMouseOver: refocusOnMouseEvent,
419
+ allowChanges: true,
420
+ handlers: hotkeyHandlers,
421
+ className: classnames(classes.container, state.fullScreen && "Fullscreen")
422
+ },
423
+ /*#__PURE__*/
424
+ React.createElement("div", {
425
+ style: {
426
+ display: 'flex',
427
+ flexDirection: 'row'
428
+ }
429
+ }, showPageSelector &&
430
+ /*#__PURE__*/
431
+ React.createElement(PageSelector, {
432
+ pages: pages,
433
+ onPageClick: handlePageClick,
558
434
  onMetadataChange: onMetadataChange,
559
- key: "metadata-editor"
560
- }), React.createElement(GroupsEditor, {
561
- groups: allowedGroups,
562
- onAddGroup: onAddGroup,
563
- key: "groups-editor"
564
- })].filter(Boolean))]
565
- }, isSelectedImageLocked && React.createElement(Locker, null), canvas)), showEditor && !isSelectedImageLocked && React.createElement(EditorWrapper, {
566
- id: "editor-wrapper"
567
- }, React.createElement(Editor, {
568
- id: "editor",
569
- blocks: blocks,
570
- imageIndex: state.selectedImage,
571
- key: "".concat(state.selectedImage, "#").concat(originalSelectedGroupId),
572
- selectedFrame: selectedFrame,
573
- onChange: handleEditorChange,
574
- selectedGroupId: selectedGroupIdForBug,
575
- originalSelectedGroupId: originalSelectedGroupId
576
- }))), React.createElement(SettingsDialog, {
577
- open: state.settingsOpen,
578
- onClose: function onClose() {
579
- return dispatch({
580
- type: "HEADER_BUTTON_CLICKED",
581
- buttonName: "Settings"
582
- });
583
- }
584
- })))));
435
+ metadataConfigs: state.metadataConfigs || [],
436
+ onRecalcClick: onRecalcClick
437
+ }),
438
+ /*#__PURE__*/
439
+ React.createElement(WorkspaceWrapper, null,
440
+ /*#__PURE__*/
441
+ React.createElement(Workspace, {
442
+ style: {
443
+ width: "auto"
444
+ },
445
+ allowFullscreen: true,
446
+ iconDictionary: iconDictionary,
447
+ hideHeader: hideHeader,
448
+ hideHeaderText: hideHeaderText,
449
+ headerLeftSide: [state.annotationType === "video" ?
450
+ /*#__PURE__*/
451
+ React.createElement(KeyframeTimeline, {
452
+ currentTime: state.currentVideoTime,
453
+ duration: state.videoDuration,
454
+ onChangeCurrentTime: action("CHANGE_VIDEO_TIME", "newTime"),
455
+ keyframes: state.keyframes
456
+ }) : activeImage ?
457
+ /*#__PURE__*/
458
+ React.createElement("div", {
459
+ className: classes.headerTitle
460
+ }, activeImage.name) : null].filter(Boolean),
461
+ headerItems: [!hidePrev && {
462
+ name: "Prev"
463
+ }, !hideNext && {
464
+ name: "Next"
465
+ }, state.annotationType !== "video" ? null : !state.videoPlaying ? {
466
+ name: "Play"
467
+ } : {
468
+ name: "Pause"
469
+ }, !hideClone && !nextImageHasRegions && activeImage.regions && {
470
+ name: "Clone"
471
+ }, !hideSettings && {
472
+ name: "Settings"
473
+ }, !hideFullScreen && (state.fullScreen ? {
474
+ name: "Window"
475
+ } : {
476
+ name: "Fullscreen"
477
+ }), !hideSave && {
478
+ name: "Save"
479
+ }].filter(Boolean),
480
+ onClickHeaderItem: onClickHeaderItem,
481
+ onClickIconSidebarItem: onClickIconSidebarItem,
482
+ selectedTools: [state.selectedTool, state.showTags && "show-tags", state.showMask && "show-mask"].filter(Boolean),
483
+ iconSidebarItems: !state.enabledTools ? [] : [{
484
+ name: "select",
485
+ helperText: "Select" + getHotkeyHelpText("select_tool"),
486
+ alwaysShowing: false
487
+ }, {
488
+ name: "pan",
489
+ helperText: "Drag/Pan (right or middle click)" + getHotkeyHelpText("pan_tool"),
490
+ alwaysShowing: false
491
+ }, {
492
+ name: "zoom",
493
+ helperText: "Zoom In/Out (scroll)" + getHotkeyHelpText("zoom_tool"),
494
+ alwaysShowing: false
495
+ }, {
496
+ name: "show-tags",
497
+ helperText: "Show / Hide Tags",
498
+ alwaysShowing: false
499
+ }, {
500
+ name: "create-point",
501
+ helperText: "Add Point" + getHotkeyHelpText("create_point")
502
+ }, {
503
+ name: "create-box",
504
+ helperText: "Add Bounding Box" + getHotkeyHelpText("create_bounding_box")
505
+ }, {
506
+ name: "create-polygon",
507
+ helperText: "Add Polygon" + getHotkeyHelpText("create_polygon")
508
+ }, {
509
+ name: "create-line",
510
+ helperText: "Add Line"
511
+ }, {
512
+ name: "create-expanding-line",
513
+ helperText: "Add Expanding Line"
514
+ }, {
515
+ name: "create-keypoints",
516
+ helperText: "Add Keypoints (Pose)"
517
+ }, state.fullImageSegmentationMode && {
518
+ name: "show-mask",
519
+ alwaysShowing: false,
520
+ helperText: "Show / Hide Mask"
521
+ }, {
522
+ name: "modify-allowed-area",
523
+ helperText: "Modify Allowed Area"
524
+ }].filter(Boolean).filter(function (a) {
525
+ return a.alwaysShowing || state.enabledTools.includes(a.name);
526
+ }),
527
+ rightSidebarItems: [
528
+ /*#__PURE__*/
529
+ React.createElement(RightSidebarItemsWrapper, null, [isSelectedImageLocked &&
530
+ /*#__PURE__*/
531
+ React.createElement(Locker, null), debugModeOn &&
532
+ /*#__PURE__*/
533
+ React.createElement(DebugBox, {
534
+ state: debugModeOn,
535
+ lastAction: state.lastAction,
536
+ key: "debug-box"
537
+ }), state.taskDescription &&
538
+ /*#__PURE__*/
539
+ React.createElement(TaskDescription, {
540
+ description: state.taskDescription,
541
+ key: "task-description"
542
+ }), state.help &&
543
+ /*#__PURE__*/
544
+ React.createElement(Help, {
545
+ help: state.help,
546
+ key: "help"
547
+ }), state.regionClsList &&
548
+ /*#__PURE__*/
549
+ React.createElement(ClassSelectionMenu, {
550
+ selectedCls: state.selectedCls,
551
+ regionClsList: state.regionClsList,
552
+ onSelectCls: action("SELECT_CLASSIFICATION", "cls"),
553
+ key: "class-selection-menu"
554
+ }), state.labelImages &&
555
+ /*#__PURE__*/
556
+ React.createElement(TagsSidebarBox, {
557
+ currentImage: activeImage,
558
+ imageClsList: state.imageClsList,
559
+ imageTagList: state.imageTagList,
560
+ onChangeImage: action("CHANGE_IMAGE", "delta"),
561
+ expandedByDefault: true,
562
+ key: "tags-sidebar-box"
563
+ }),,
564
+ /*#__PURE__*/
565
+ // (state.images?.length || 0) > 1 && (
566
+ // <ImageSelector
567
+ // onSelect={action("SELECT_REGION", "region")}
568
+ // images={state.images}
569
+ // />
570
+ // ),
571
+ // groups && (
572
+ // <GroupSelector
573
+ // title="Articles"
574
+ // groups={groups}
575
+ // selectedGroupId={selectedGroupId}
576
+ // onSelect={onGroupSelect}
577
+ // />
578
+ // )
579
+ React.createElement(RegionSelector, {
580
+ regions: activeImage ? activeImage.regions : emptyArr,
581
+ onSelectRegion: action("SELECT_REGION", "region"),
582
+ onDeleteRegion: action("DELETE_REGION", "region"),
583
+ onChangeRegion: action("CHANGE_REGION", "region"),
584
+ key: "region-selector"
585
+ }), state.keyframes &&
586
+ /*#__PURE__*/
587
+ React.createElement(KeyframesSelector, {
588
+ onChangeVideoTime: action("CHANGE_VIDEO_TIME", "newTime"),
589
+ onDeleteKeyframe: action("DELETE_KEYFRAME", "time"),
590
+ onChangeCurrentTime: action("CHANGE_VIDEO_TIME", "newTime"),
591
+ currentTime: state.currentVideoTime,
592
+ duration: state.videoDuration,
593
+ keyframes: state.keyframes,
594
+ key: "key-frame-selector"
595
+ }), !hideHistory &&
596
+ /*#__PURE__*/
597
+ React.createElement(HistorySidebarBox, {
598
+ history: state.history,
599
+ onRestoreHistory: action("RESTORE_HISTORY"),
600
+ key: "history-sidebar"
601
+ }),
602
+ /*#__PURE__*/
603
+ React.createElement(MetadataEditor, {
604
+ state: state,
605
+ onMetadataChange: onMetadataChange,
606
+ key: "metadata-editor"
607
+ }),
608
+ /*#__PURE__*/
609
+ React.createElement(GroupsEditor, {
610
+ groups: allowedGroups,
611
+ onAddGroup: onAddGroup,
612
+ key: "groups-editor"
613
+ })].filter(Boolean))]
614
+ }, isSelectedImageLocked &&
615
+ /*#__PURE__*/
616
+ React.createElement(Locker, null), canvas)), showEditor && !isSelectedImageLocked &&
617
+ /*#__PURE__*/
618
+ React.createElement(EditorWrapper, {
619
+ id: "editor-wrapper"
620
+ },
621
+ /*#__PURE__*/
622
+ React.createElement(Editor, {
623
+ id: "editor",
624
+ blocks: blocks,
625
+ imageIndex: state.selectedImage,
626
+ key: "".concat(state.selectedImage, "#").concat(originalSelectedGroupId),
627
+ selectedFrame: selectedFrame,
628
+ onChange: handleEditorChange,
629
+ selectedGroupId: selectedGroupIdForBug,
630
+ originalSelectedGroupId: originalSelectedGroupId
631
+ }))),
632
+ /*#__PURE__*/
633
+ React.createElement(SettingsDialog, {
634
+ open: state.settingsOpen,
635
+ onClose: function onClose() {
636
+ return dispatch({
637
+ type: "HEADER_BUTTON_CLICKED",
638
+ buttonName: "Settings"
639
+ });
640
+ }
641
+ })))))
642
+ );
585
643
  };
586
644
  export default MainLayout;