mirador-annotation-editor-video 1.1.4 → 1.1.6

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 (92) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/__tests__/AnnotationCreation.test.js +62 -28
  3. package/__tests__/AnnotationExportDialog.test.js +18 -16
  4. package/__tests__/CanvasListItem.test.js +53 -19
  5. package/__tests__/LocalStorageAdapter.test.js +1 -1
  6. package/__tests__/miradorAnnotationPlugin.test.js +97 -70
  7. package/__tests__/style-mock.js +1 -0
  8. package/__tests__/test-utils.js +57 -0
  9. package/demo/src/index.js +10 -5
  10. package/demo/src/quillConfig.js +34 -0
  11. package/es/AnnotationExportDialog.js +17 -25
  12. package/es/CanvasListItem.js +8 -4
  13. package/es/IIIFUtils.js +35 -3
  14. package/es/SingleCanvasDialog.js +1 -4
  15. package/es/TextEditor.js +9 -19
  16. package/es/annotationForm/AnnotationForm.js +14 -41
  17. package/es/annotationForm/AnnotationFormBody.js +36 -27
  18. package/es/annotationForm/AnnotationFormHeader.js +3 -3
  19. package/es/annotationForm/AnnotationFormOverlay/AnnotationDrawing.js +3 -1
  20. package/es/annotationForm/AnnotationFormOverlay/AnnotationFormOverlay.js +1 -1
  21. package/es/annotationForm/AnnotationFormOverlay/AnnotationFormOverlayTool.js +3 -2
  22. package/es/annotationForm/AnnotationFormOverlay/AnnotationFormOverlayToolOptions.js +8 -6
  23. package/es/annotationForm/AnnotationFormOverlay/KonvaDrawing/KonvaUtils.js +6 -20
  24. package/es/annotationForm/AnnotationFormOverlay/KonvaDrawing/shapes/ColorPicker.js +16 -6
  25. package/es/annotationForm/AnnotationFormTemplateSelector.js +9 -9
  26. package/es/annotationForm/AnnotationFormUtils.js +3 -0
  27. package/es/annotationForm/Debug.js +1 -0
  28. package/es/annotationForm/DebugInformation.js +27 -0
  29. package/es/annotationForm/MultiTagsInput.js +7 -8
  30. package/es/annotationForm/MultipleBodyTemplate.js +36 -8
  31. package/es/annotationForm/TaggingTemplate.js +0 -1
  32. package/es/annotationForm/TargetFormSection.js +4 -3
  33. package/es/annotationForm/TargetSpatialInput.js +4 -3
  34. package/es/annotationForm/TextCommentInput.js +30 -13
  35. package/es/annotationForm/TextCommentTemplate.js +0 -1
  36. package/es/annotationForm/UnsupportedMedia.js +43 -0
  37. package/es/containers/miradorAnnotationPlugin.js +1 -50
  38. package/es/custom.css +0 -13
  39. package/es/index.js +5 -12
  40. package/es/locales/locales.js +3 -2
  41. package/es/locales/locales_en.js +1 -1
  42. package/es/playerReferences.js +2 -1
  43. package/es/plugins/annotationCreationCompanionWindow.js +5 -8
  44. package/es/plugins/annotationSaga.js +44 -0
  45. package/es/plugins/canvasAnnotationsPlugin.js +86 -61
  46. package/es/plugins/canvasAnnotationsPluginUtils.js +202 -0
  47. package/es/plugins/externalStorageAnnotationPlugin.js +6 -71
  48. package/es/plugins/miradorAnnotationPlugin.js +44 -6
  49. package/es/plugins/windowSideBarButtonsPlugin.js +8 -10
  50. package/jest.config.js +14 -3
  51. package/package.json +8 -3
  52. package/setupJest.js +1 -4
  53. package/src/AnnotationExportDialog.js +12 -24
  54. package/src/CanvasListItem.js +4 -3
  55. package/src/IIIFUtils.js +33 -5
  56. package/src/SingleCanvasDialog.js +0 -3
  57. package/src/TextEditor.js +8 -32
  58. package/src/annotationForm/AnnotationForm.js +8 -47
  59. package/src/annotationForm/AnnotationFormBody.js +62 -83
  60. package/src/annotationForm/AnnotationFormHeader.js +3 -3
  61. package/src/annotationForm/AnnotationFormOverlay/AnnotationDrawing.js +3 -9
  62. package/src/annotationForm/AnnotationFormOverlay/AnnotationFormOverlay.js +1 -1
  63. package/src/annotationForm/AnnotationFormOverlay/AnnotationFormOverlayTool.js +2 -1
  64. package/src/annotationForm/AnnotationFormOverlay/AnnotationFormOverlayToolOptions.js +10 -6
  65. package/src/annotationForm/AnnotationFormOverlay/KonvaDrawing/KonvaUtils.js +14 -20
  66. package/src/annotationForm/AnnotationFormOverlay/KonvaDrawing/shapes/ColorPicker.js +14 -12
  67. package/src/annotationForm/AnnotationFormTemplateSelector.js +5 -7
  68. package/src/annotationForm/AnnotationFormUtils.js +2 -0
  69. package/src/annotationForm/Debug.js +0 -0
  70. package/src/annotationForm/DebugInformation.js +59 -0
  71. package/src/annotationForm/MultiTagsInput.js +7 -9
  72. package/src/annotationForm/MultipleBodyTemplate.js +38 -7
  73. package/src/annotationForm/TaggingTemplate.js +0 -1
  74. package/src/annotationForm/TargetFormSection.js +2 -3
  75. package/src/annotationForm/TargetSpatialInput.js +3 -3
  76. package/src/annotationForm/TextCommentInput.js +31 -14
  77. package/src/annotationForm/TextCommentTemplate.js +0 -1
  78. package/src/annotationForm/UnsupportedMedia.js +31 -0
  79. package/src/containers/miradorAnnotationPlugin.js +0 -36
  80. package/src/custom.css +0 -13
  81. package/src/index.js +10 -15
  82. package/src/locales/locales.js +3 -1
  83. package/src/locales/locales_en.js +1 -1
  84. package/src/playerReferences.js +5 -2
  85. package/src/plugins/annotationCreationCompanionWindow.js +9 -23
  86. package/src/plugins/annotationSaga.js +50 -0
  87. package/src/plugins/canvasAnnotationsPlugin.js +122 -98
  88. package/src/plugins/canvasAnnotationsPluginUtils.js +199 -0
  89. package/src/plugins/externalStorageAnnotationPlugin.js +6 -79
  90. package/src/plugins/miradorAnnotationPlugin.js +32 -4
  91. package/src/plugins/windowSideBarButtonsPlugin.js +6 -8
  92. package/webpack.config.js +1 -0
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.defaultLineWeightChoices = exports.SHAPES_TOOL = exports.OVERLAY_TOOL = exports.KONVA_MODE = void 0;
7
7
  exports.getKonvaAsDataURL = getKonvaAsDataURL;
8
- exports.getKonvaShape = getKonvaShape;
9
8
  exports.getKonvaStage = getKonvaStage;
10
9
  exports.getSvg = getSvg;
11
10
  exports.hideKonvaStage = hideKonvaStage;
@@ -31,6 +30,7 @@ function getKonvaStage(windowId) {
31
30
  * @param height
32
31
  * @param scale
33
32
  * @param hideAfterResize
33
+ * @param scaleStrokeForPNGExport
34
34
  */
35
35
  function resizeKonvaStage(windowId, width, height, scale, hideAfterResize = true, scaleStrokeForPNGExport = false) {
36
36
  hideKonvaStage();
@@ -119,27 +119,14 @@ async function getSvg(windowId) {
119
119
  return svg;
120
120
  }
121
121
 
122
- /**
123
- *
124
- * @param windowId
125
- * @param shapeId
126
- * @returns {Node}
127
- */
128
- function getKonvaShape(windowId, shapeId) {
129
- const stage = getKonvaStage(windowId);
130
- const shape = stage.findOne(`#${shapeId}`);
131
- return shape;
132
- }
133
-
134
122
  /** Export the stage as a JPG image in a data url */
135
123
  async function getKonvaAsDataURL(windowId) {
136
124
  const stage = getKonvaStage(windowId);
137
125
  stage.find('Transformer').forEach(node => node.visible(false));
138
- const dataURL = stage.toDataURL({
126
+ return stage.toDataURL({
139
127
  mimeType: 'image/jpg',
140
128
  quality: 0.2
141
129
  });
142
- return dataURL;
143
130
  }
144
131
  const defaultLineWeightChoices = exports.defaultLineWeightChoices = [0, 2, 5, 10, 20, 50];
145
132
  const KONVA_MODE = exports.KONVA_MODE = {
@@ -176,24 +163,23 @@ function isShapesTool(activeTool) {
176
163
  const rgbaToObj = (rgba = 'rgba(255,255,255,0.5)') => {
177
164
  const rgbaArray = rgba.split(',');
178
165
  return {
179
- // eslint-disable-next-line sort-keys
166
+ /* eslint-disable sort-keys */
180
167
  r: Number(rgbaArray[0].split('(')[1]),
181
- // eslint-disable-next-line sort-keys
182
168
  g: Number(rgbaArray[1]),
183
- // eslint-disable-next-line sort-keys
184
169
  b: Number(rgbaArray[2]),
185
- // eslint-disable-next-line sort-keys
186
170
  a: Number(rgbaArray[3].split(')')[0])
171
+ /* eslint-enable sort-keys */
187
172
  };
188
173
  };
189
174
 
190
175
  /** Convert color object to rgba string */
191
176
  exports.rgbaToObj = rgbaToObj;
192
177
  const objToRgba = (obj = {
193
- // eslint-disable-next-line sort-keys
178
+ /* eslint-disable sort-keys */
194
179
  r: 255,
195
180
  g: 255,
196
181
  b: 255,
197
182
  a: 0.5
183
+ /* eslint-enable sort-keys */
198
184
  }) => `rgba(${obj.r},${obj.g},${obj.b},${obj.a})`;
199
185
  exports.objToRgba = objToRgba;
@@ -19,10 +19,13 @@ var _react = _interopRequireDefault(require("react"));
19
19
  var _styles = require("@mui/material/styles");
20
20
  var _propTypes = _interopRequireWildcard(require("prop-types"));
21
21
  var Proptypes = _propTypes;
22
+ var _reactI18next = require("react-i18next");
22
23
  var _KonvaUtils = require("../KonvaUtils");
23
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
+ /* eslint-disable react/forbid-prop-types */
28
+
26
29
  /** Display color picker and border * */
27
30
  function ColorPicker({
28
31
  changeClosedMode,
@@ -32,11 +35,13 @@ function ColorPicker({
32
35
  handleLineWeightSelect,
33
36
  openChooseColor,
34
37
  openChooseLineWeight,
35
- t,
36
38
  toolOptions,
37
39
  toolState,
38
40
  updateColor
39
41
  }) {
42
+ const {
43
+ t
44
+ } = (0, _reactI18next.useTranslation)();
40
45
  return /*#__PURE__*/_react.default.createElement(_material.Grid, {
41
46
  container: true,
42
47
  spacing: 1
@@ -128,12 +133,17 @@ ColorPicker.propTypes = {
128
133
  handleLineWeightSelect: Proptypes.func.isRequired,
129
134
  openChooseColor: Proptypes.func.isRequired,
130
135
  openChooseLineWeight: Proptypes.func.isRequired,
131
- t: Proptypes.func.isRequired,
132
- toolOptions: Proptypes.oneOfType(Proptypes.bool, Proptypes.string, Proptypes.bool, Proptypes.string, Proptypes.string).isRequired,
136
+ toolOptions: Proptypes.shape({
137
+ colorPopoverOpen: _propTypes.default.bool,
138
+ currentColorType: _propTypes.default.any,
139
+ lineWeightPopoverOpen: _propTypes.default.bool,
140
+ popoverAnchorEl: _propTypes.default.any,
141
+ popoverLineWeightAnchorEl: _propTypes.default.any
142
+ }).isRequired,
133
143
  toolState: _propTypes.default.shape({
134
144
  activeTool: _propTypes.default.string.isRequired,
135
- closedMode: _propTypes.default.bool.isRequired,
136
- fillColor: _propTypes.default.string.isRequired,
145
+ closedMode: _propTypes.default.string.isRequired,
146
+ fillColor: _propTypes.default.string,
137
147
  image: _propTypes.default.shape({
138
148
  id: _propTypes.default.string
139
149
  }),
@@ -141,7 +151,7 @@ ColorPicker.propTypes = {
141
151
  strokeWidth: _propTypes.default.number.isRequired,
142
152
  text: _propTypes.default.string,
143
153
  textBody: _propTypes.default.string,
144
- updateColor: _propTypes.default.func.isRequired
154
+ updateColor: _propTypes.default.func
145
155
  }).isRequired,
146
156
  updateColor: Proptypes.func.isRequired
147
157
  };
@@ -8,6 +8,7 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
9
9
  var _styles = require("@mui/material/styles");
10
10
  var _material = require("@mui/material");
11
+ var _reactI18next = require("react-i18next");
11
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
13
  var _AnnotationFormUtils = require("./AnnotationFormUtils");
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -17,12 +18,14 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
17
18
  */
18
19
  function AnnotationFormTemplateSelector({
19
20
  mediaType,
20
- setCommentingType,
21
- t
21
+ setCommentingType
22
22
  }) {
23
+ const {
24
+ t
25
+ } = (0, _reactI18next.useTranslation)();
23
26
  /**
24
- * Sets the comment type for the application.
25
- */
27
+ * Sets the comment type for the application.
28
+ */
26
29
  const setCommentType = template => setCommentingType(template);
27
30
  const templates = (0, _AnnotationFormUtils.TEMPLATE_TYPES)(t);
28
31
  return /*#__PURE__*/_react.default.createElement(CardContainer, null, mediaType === _AnnotationFormUtils.MEDIA_TYPES.AUDIO ? /*#__PURE__*/_react.default.createElement(_material.Grid, {
@@ -44,9 +47,7 @@ function AnnotationFormTemplateSelector({
44
47
  variant: "body2"
45
48
  }, t(template.description)))))));
46
49
  }
47
- const CardContainer = (0, _styles.styled)('div')(({
48
- theme
49
- }) => ({
50
+ const CardContainer = (0, _styles.styled)('div')(() => ({
50
51
  display: 'flex',
51
52
  flexDirection: 'column',
52
53
  gap: '30px',
@@ -69,6 +70,5 @@ const DescriptionCardTypography = (0, _styles.styled)(_Typography.default, {
69
70
  });
70
71
  AnnotationFormTemplateSelector.propTypes = {
71
72
  mediaType: _propTypes.default.string.isRequired,
72
- setCommentingType: _propTypes.default.func.isRequired,
73
- t: _propTypes.default.func.isRequired
73
+ setCommentingType: _propTypes.default.func.isRequired
74
74
  };
@@ -27,12 +27,15 @@ const TEMPLATE = exports.TEMPLATE = {
27
27
  TAGGING_TYPE: 'tagging',
28
28
  TEXT_TYPE: 'text'
29
29
  };
30
+
31
+ // TODO Move in MediaUtils
30
32
  const MEDIA_TYPES = exports.MEDIA_TYPES = {
31
33
  AUDIO: 'Audio',
32
34
  IMAGE: 'Image',
33
35
  UNKNOWN: 'Unknown',
34
36
  VIDEO: 'Video'
35
37
  };
38
+
36
39
  /** Return template type * */
37
40
  const getTemplateType = (t, templateType) => TEMPLATE_TYPES(t).find(type => type.id === templateType);
38
41
 
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DebugInformation = DebugInformation;
7
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * DebugInformation component to display media and container details
13
+ * @param playerReferences
14
+ * @returns {Element}
15
+ * @constructor
16
+ */
17
+ function DebugInformation({
18
+ playerReferences,
19
+ t
20
+ }) {
21
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.default, null, playerReferences.getMediaType()), /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('scale'), ":", playerReferences.getScale()), /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('zoom'), ":", playerReferences.getZoom()), /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('image_true_size'), ":", playerReferences.getMediaTrueWidth(), ' ', "x", playerReferences.getMediaTrueHeight()), /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('container_size'), ":", playerReferences.getContainerWidth(), ' ', "x", playerReferences.getContainerHeight()), /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('image_displayed'), ":", playerReferences.getDisplayedMediaWidth(), ' ', "x", playerReferences.getDisplayedMediaHeight()));
22
+ }
23
+ DebugInformation.propTypes = {
24
+ // eslint-disable-next-line react/forbid-prop-types
25
+ playerReferences: _propTypes.default.any.isRequired,
26
+ t: _propTypes.default.func.isRequired
27
+ };
@@ -12,8 +12,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
12
12
  /**
13
13
  * MultiTagsInput component
14
14
  * @param t
15
- * @param tags
16
- * @param tagsSuggestions
15
+ * @param tags as [{ label: string, value: string }]
16
+ * @param tagsSuggestions as [{ label: string, value: string }]
17
17
  * @param setTags
18
18
  * @returns {Element}
19
19
  * @constructor
@@ -24,15 +24,11 @@ function MultiTagsInput({
24
24
  tags,
25
25
  tagsSuggestions
26
26
  }) {
27
- const mappedSuggestionsTags = tagsSuggestions.map(suggestion => ({
28
- label: suggestion,
29
- value: suggestion
30
- }));
31
27
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Typography, {
32
28
  variant: "formSectionTitle"
33
29
  }, t('tags')), /*#__PURE__*/_react.default.createElement(_creatable.default, {
34
30
  isMulti: true,
35
- options: mappedSuggestionsTags,
31
+ options: tagsSuggestions,
36
32
  value: tags,
37
33
  onChange: setTags,
38
34
  closeMenuOnSelect: false,
@@ -46,5 +42,8 @@ MultiTagsInput.propTypes = {
46
42
  t: _propTypes.default.func.isRequired,
47
43
  // eslint-disable-next-line react/forbid-prop-types
48
44
  tags: _propTypes.default.any.isRequired,
49
- tagsSuggestions: _propTypes.default.arrayOf(_propTypes.default.string).isRequired
45
+ tagsSuggestions: _propTypes.default.arrayOf(_propTypes.default.shape({
46
+ label: _propTypes.default.string,
47
+ value: _propTypes.default.string
48
+ })).isRequired
50
49
  };
@@ -13,6 +13,8 @@ var _TargetFormSection = _interopRequireDefault(require("./TargetFormSection"));
13
13
  var _KonvaUtils = require("./AnnotationFormOverlay/KonvaDrawing/KonvaUtils");
14
14
  var _MultiTagsInput = require("./MultiTagsInput");
15
15
  var _TextCommentInput = require("./TextCommentInput");
16
+ var _reactRedux = require("react-redux");
17
+ var _selectors = require("mirador/dist/es/src/state/selectors");
16
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -23,10 +25,10 @@ function MultipleBodyTemplate({
23
25
  playerReferences,
24
26
  saveAnnotation,
25
27
  t,
26
- windowId,
27
- tagsSuggestions,
28
- commentTemplate
28
+ windowId
29
29
  }) {
30
+ const annotationConfig = (0, _reactRedux.useSelector)(state => (0, _selectors.getConfig)(state)).annotation;
31
+ const tagsSuggestions = annotationConfig.tagsSuggestions ?? [];
30
32
  let maeAnnotation = annotation;
31
33
  if (!maeAnnotation.id) {
32
34
  // If the annotation does not have maeData, the annotation was not created with mae
@@ -100,6 +102,35 @@ function MultipleBodyTemplate({
100
102
  (0, _KonvaUtils.resizeKonvaStage)(windowId, playerReferences.getMediaTrueWidth(), playerReferences.getMediaTrueHeight(), 1 / playerReferences.getScale());
101
103
  saveAnnotation(annotationState);
102
104
  };
105
+
106
+ /**
107
+ * When the user selects a template, we change text comment and try to add the tag with same name
108
+ * @param selectedTemplate
109
+ */
110
+ const onChangeTemplate = selectedTemplate => {
111
+ const associatedTag = mappedSuggestionsTags.find(tag => tag.value === selectedTemplate.title);
112
+ if (associatedTag) {
113
+ if (!annotationState.maeData.tags.find(tag => tag.value === associatedTag.value)) {
114
+ setAnnotationState({
115
+ ...annotationState,
116
+ maeData: {
117
+ ...annotationState.maeData,
118
+ tags: [...annotationState.maeData.tags, associatedTag],
119
+ textBody: {
120
+ ...annotationState.maeData.textBody,
121
+ value: selectedTemplate.value
122
+ }
123
+ }
124
+ });
125
+ return;
126
+ }
127
+ }
128
+ updateAnnotationTextualBodyValue(selectedTemplate.content);
129
+ };
130
+ const mappedSuggestionsTags = tagsSuggestions.map(suggestion => ({
131
+ label: suggestion,
132
+ value: suggestion
133
+ }));
103
134
  return /*#__PURE__*/_react.default.createElement(_material.Grid, {
104
135
  container: true,
105
136
  direction: "column",
@@ -107,9 +138,9 @@ function MultipleBodyTemplate({
107
138
  }, /*#__PURE__*/_react.default.createElement(_material.Grid, {
108
139
  item: true
109
140
  }, /*#__PURE__*/_react.default.createElement(_TextCommentInput.TextCommentInput, {
110
- commentTemplates: commentTemplate,
111
141
  comment: annotationState.maeData.textBody.value,
112
142
  setComment: updateAnnotationTextualBodyValue,
143
+ onChangeTemplate: onChangeTemplate,
113
144
  t: t
114
145
  })), /*#__PURE__*/_react.default.createElement(_material.Grid, {
115
146
  item: true
@@ -117,7 +148,7 @@ function MultipleBodyTemplate({
117
148
  t: t,
118
149
  tags: annotationState.maeData.tags,
119
150
  setTags: setTags,
120
- tagsSuggestions: tagsSuggestions
151
+ tagsSuggestions: mappedSuggestionsTags
121
152
  })), /*#__PURE__*/_react.default.createElement(_material.Grid, {
122
153
  item: true
123
154
  }, /*#__PURE__*/_react.default.createElement(_TargetFormSection.default, {
@@ -148,14 +179,11 @@ MultipleBodyTemplate.propTypes = {
148
179
  manifestNetwork: _propTypes.default.string,
149
180
  target: _propTypes.default.string
150
181
  }).isRequired,
151
- commentTemplate: _propTypes.default.string.isRequired,
152
- // eslint-disable-next-line react/forbid-prop-types
153
182
  closeFormCompanionWindow: _propTypes.default.func.isRequired,
154
183
  // eslint-disable-next-line react/forbid-prop-types
155
184
  playerReferences: _propTypes.default.object.isRequired,
156
185
  // eslint-disable-next-line react/forbid-prop-types
157
186
  saveAnnotation: _propTypes.default.func.isRequired,
158
187
  t: _propTypes.default.func.isRequired,
159
- tagsSuggestions: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
160
188
  windowId: _propTypes.default.string.isRequired
161
189
  };
@@ -91,7 +91,6 @@ function TaggingTemplate({
91
91
  onChangeTarget: updateTargetState,
92
92
  playerReferences: playerReferences,
93
93
  spatialTarget: true,
94
- t: t,
95
94
  target: annotationState.maeData.target,
96
95
  timeTarget: true,
97
96
  windowId: windowId
@@ -7,6 +7,7 @@ exports.default = TargetFormSection;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _material = require("@mui/material");
10
+ var _reactI18next = require("react-i18next");
10
11
  var _AnnotationFormUtils = require("./AnnotationFormUtils");
11
12
  var _TargetTimeInput = _interopRequireDefault(require("./TargetTimeInput"));
12
13
  var _TargetSpatialInput = require("./TargetSpatialInput");
@@ -15,7 +16,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
15
16
  *
16
17
  * @param onChangeTarget
17
18
  * @param spatialTarget
18
- * @param t
19
19
  * @param playerReferences
20
20
  * @param target
21
21
  * @param timeTarget
@@ -26,12 +26,14 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
26
26
  function TargetFormSection({
27
27
  onChangeTarget,
28
28
  spatialTarget,
29
- t,
30
29
  playerReferences,
31
30
  target,
32
31
  timeTarget,
33
32
  windowId
34
33
  }) {
34
+ const {
35
+ t
36
+ } = (0, _reactI18next.useTranslation)();
35
37
  if (!target) {
36
38
  // eslint-disable-next-line no-param-reassign
37
39
  target = {};
@@ -113,7 +115,6 @@ TargetFormSection.propTypes = {
113
115
  // eslint-disable-next-line react/forbid-prop-types
114
116
  playerReferences: _propTypes.default.object.isRequired,
115
117
  spatialTarget: _propTypes.default.bool.isRequired,
116
- t: _propTypes.default.func.isRequired,
117
118
  // eslint-disable-next-line react/forbid-prop-types
118
119
  target: _propTypes.default.object.isRequired,
119
120
  timeTarget: _propTypes.default.bool.isRequired,
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
10
10
  var _material = require("@mui/material");
11
+ var _reactI18next = require("react-i18next");
11
12
  var _AnnotationDrawing = _interopRequireDefault(require("./AnnotationFormOverlay/AnnotationDrawing"));
12
13
  var _AnnotationFormUtils = require("./AnnotationFormUtils");
13
14
  var _AnnotationFormOverlay = _interopRequireDefault(require("./AnnotationFormOverlay/AnnotationFormOverlay"));
@@ -19,11 +20,9 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
19
20
  function TargetSpatialInput({
20
21
  playerReferences,
21
22
  setTargetDrawingState,
22
- t,
23
23
  targetDrawingState,
24
24
  windowId
25
25
  }) {
26
- // TODO the targetSVGToolSTate is not used. Why the defaultToolState is used?
27
26
  const [toolState, setToolState] = (0, _react.useState)(_AnnotationFormUtils.TARGET_TOOL_STATE);
28
27
  const [viewTool, setViewTool] = (0, _react.useState)(_AnnotationFormUtils.TARGET_VIEW);
29
28
  const [scale, setScale] = (0, _react.useState)(playerReferences.getScale());
@@ -31,6 +30,9 @@ function TargetSpatialInput({
31
30
  const updateScale = () => {
32
31
  setScale(playerReferences.getScale());
33
32
  };
33
+ const {
34
+ t
35
+ } = (0, _reactI18next.useTranslation)();
34
36
  const [drawingState, setDrawingState] = (0, _react.useState)({
35
37
  ...targetDrawingState,
36
38
  currentShape: null,
@@ -135,7 +137,6 @@ TargetSpatialInput.propTypes = {
135
137
  // eslint-disable-next-line react/forbid-prop-types
136
138
  playerReferences: _propTypes.default.object.isRequired,
137
139
  setTargetDrawingState: _propTypes.default.func.isRequired,
138
- t: _propTypes.default.func.isRequired,
139
140
  // eslint-disable-next-line react/forbid-prop-types
140
141
  targetDrawingState: _propTypes.default.object.isRequired,
141
142
  windowId: _propTypes.default.string.isRequired
@@ -9,21 +9,44 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _material = require("@mui/material");
10
10
  var _creatable = _interopRequireDefault(require("react-select/creatable"));
11
11
  var _TextEditor = _interopRequireDefault(require("../TextEditor"));
12
+ var _reactRedux = require("react-redux");
13
+ var _selectors = require("mirador/dist/es/src/state/selectors");
12
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
15
  /**
14
16
  * TextCommentInput component
15
17
  * @param commentTemplates - The list of comment templates
16
18
  * @param comment - The current comment
17
19
  * @param setComment - Function to set the comment
20
+ * @param onChangeTemplate - Function to handle template selection
18
21
  * @param t - Translation function
19
22
  * @constructor
20
23
  */
21
24
  function TextCommentInput({
22
- commentTemplates,
23
25
  comment,
26
+ onChangeTemplate,
24
27
  setComment,
25
28
  t
26
29
  }) {
30
+ /**
31
+ * Format the option label for the select component
32
+ * @param option
33
+ * @returns {React.JSX.Element}
34
+ */
35
+ const formatOptionLabel = option => /*#__PURE__*/_react.default.createElement("div", {
36
+ title: option.title
37
+ }, option.label);
38
+ const annotationConfig = (0, _reactRedux.useSelector)(state => (0, _selectors.getConfig)(state)).annotation;
39
+ const commentTemplates = annotationConfig.commentTemplates ?? [];
40
+
41
+ /**
42
+ * Handle template selection change
43
+ * @param selectedOption
44
+ */
45
+ const onLocalChangeTemplate = selectedOption => {
46
+ if (selectedOption) {
47
+ onChangeTemplate(selectedOption.value);
48
+ }
49
+ };
27
50
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Grid, {
28
51
  container: true,
29
52
  item: true
@@ -37,20 +60,15 @@ function TextCommentInput({
37
60
  }, /*#__PURE__*/_react.default.createElement(_creatable.default, {
38
61
  options: commentTemplates.map(template => ({
39
62
  label: template.title,
40
- value: template.content,
41
- title: template.content // Add title attribute for tooltip
63
+ title: template.content,
64
+ // Add title attribute for tooltip
65
+ value: template
42
66
  })),
43
67
  placeholder: t('useTemplate'),
44
- onChange: selectedOption => {
45
- if (selectedOption) {
46
- setComment(selectedOption.value);
47
- }
48
- },
68
+ onChange: onLocalChangeTemplate,
49
69
  isClearable: true,
50
70
  isSearchable: true,
51
- formatOptionLabel: option => /*#__PURE__*/_react.default.createElement("div", {
52
- title: option.title
53
- }, option.label),
71
+ formatOptionLabel: formatOptionLabel,
54
72
  styles: {
55
73
  marginBottom: '20px'
56
74
  }
@@ -64,8 +82,7 @@ function TextCommentInput({
64
82
  }
65
83
  TextCommentInput.propTypes = {
66
84
  comment: _propTypes.default.string.isRequired,
67
- // eslint-disable-next-line react/forbid-prop-types
68
- commentTemplates: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
85
+ onChangeTemplate: _propTypes.default.func.isRequired,
69
86
  setComment: _propTypes.default.func.isRequired,
70
87
  t: _propTypes.default.func.isRequired
71
88
  };
@@ -96,7 +96,6 @@ function TextCommentTemplate({
96
96
  onChangeTarget: updateTargetState,
97
97
  playerReferences: playerReferences,
98
98
  spatialTarget: true,
99
- t: t,
100
99
  target: annotationState.maeData.target,
101
100
  timeTarget: true,
102
101
  windowId: windowId
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = UnsupportedMedia;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _CompanionWindow = _interopRequireDefault(require("mirador/dist/es/src/containers/CompanionWindow"));
9
+ var _material = require("@mui/material");
10
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ /** */
15
+ function UnsupportedMedia({
16
+ id,
17
+ windowId,
18
+ mediaType
19
+ }) {
20
+ const {
21
+ t
22
+ } = (0, _reactI18next.useTranslation)();
23
+ return /*#__PURE__*/_react.default.createElement(_CompanionWindow.default, {
24
+ title: t('media_not_supported'),
25
+ windowId: windowId,
26
+ id: id
27
+ }, /*#__PURE__*/_react.default.createElement(_material.Grid, {
28
+ container: true,
29
+ padding: 1,
30
+ spacing: 1
31
+ }, /*#__PURE__*/_react.default.createElement(_material.Grid, {
32
+ item: true
33
+ }, /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('media_not_supported'))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
34
+ item: true
35
+ }, /*#__PURE__*/_react.default.createElement(_Typography.default, null, t('detected_media_type', {
36
+ mediaType
37
+ })))));
38
+ }
39
+ UnsupportedMedia.propTypes = {
40
+ id: _propTypes.default.string.isRequired,
41
+ mediaType: _propTypes.default.string.isRequired,
42
+ windowId: _propTypes.default.string.isRequired
43
+ };
@@ -1,50 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _redux = require("redux");
8
- var _reactRedux = require("react-redux");
9
- var _selectors = require("mirador/dist/es/src/state/selectors");
10
- var _canvases = require("mirador/dist/es/src/state/selectors/canvases");
11
- var _companionWindows = require("mirador/dist/es/src/state/selectors/companionWindows");
12
- var _window = require("mirador/dist/es/src/state/selectors/window");
13
- var _reactI18next = require("react-i18next");
14
- var _miradorAnnotationPlugin = _interopRequireDefault(require("../plugins/miradorAnnotationPlugin"));
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- // TODO use selector in main componenent
17
- /**
18
- * this function map the state to the annotationPlugin's props
19
- * */
20
- function mapStateToProps(state, {
21
- targetProps: {
22
- windowId
23
- }
24
- }) {
25
- // Annotation edit companion window ou annotation creation companion window is the same thing
26
- const annotationCreationCompanionWindows = (0, _companionWindows.getCompanionWindowsForContent)(state, {
27
- content: 'annotationCreation',
28
- windowId
29
- });
30
- let annotationEditCompanionWindowIsOpened = true;
31
- if (Object.keys(annotationCreationCompanionWindows).length !== 0) {
32
- annotationEditCompanionWindowIsOpened = false;
33
- }
34
- const currrentTime = (0, _window.getWindowCurrentTime)(state, {
35
- windowId
36
- });
37
- return {
38
- annotationEditCompanionWindowIsOpened,
39
- canvases: (0, _canvases.getVisibleCanvases)(state, {
40
- windowId
41
- }),
42
- config: state.config,
43
- currentTime: currrentTime,
44
- windowViewType: (0, _selectors.getWindowViewType)(state, {
45
- windowId
46
- })
47
- };
48
- }
49
- const enhance = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps), (0, _reactI18next.withTranslation)());
50
- var _default = exports.default = enhance(_miradorAnnotationPlugin.default);
1
+ "use strict";
package/es/custom.css CHANGED
@@ -19,19 +19,6 @@
19
19
  width: 100%;
20
20
  }
21
21
 
22
- /*
23
- .ReactTags__tag {
24
- background-color: #f0f0f0;
25
- border: 1px solid #ccc;
26
- border-radius: 3px;
27
- color: #333;
28
- display: inline-block;
29
- margin: 0 5px 5px 0;
30
- padding: 5px 10px;
31
- }
32
- */
33
-
34
-
35
22
  .ReactTags__clearAll {
36
23
  cursor: pointer;
37
24
  padding: 10px;