@recogito/metaphor-annotation-plugin 0.0.0-stage → 0.0.11-beta.1

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 (382) hide show
  1. package/README.md +102 -2
  2. package/dist/extensions/GoToMetaphorAnnotationView.d.ts +3 -0
  3. package/dist/extensions/GoToMetaphorAnnotationView.d.ts.map +1 -0
  4. package/dist/extensions/GoToMetaphorAnnotationView.js +14 -0
  5. package/dist/index.d.ts +4 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +37 -0
  8. package/dist/pages/_components/ImageMetaphorView/ImageMetaphorView.css +22 -0
  9. package/dist/pages/_components/ImageMetaphorView/ImageMetaphorView.d.ts +10 -0
  10. package/dist/pages/_components/ImageMetaphorView/ImageMetaphorView.d.ts.map +1 -0
  11. package/dist/pages/_components/ImageMetaphorView/ImageMetaphorView.js +136 -0
  12. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/AnnotationPanel.d.ts +9 -0
  13. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/AnnotationPanel.d.ts.map +1 -0
  14. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/AnnotationPanel.js +12 -0
  15. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ImageListCard.d.ts +11 -0
  16. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ImageListCard.d.ts.map +1 -0
  17. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ImageListCard.js +37 -0
  18. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ListTab.d.ts +2 -0
  19. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ListTab.d.ts.map +1 -0
  20. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ListTab.js +70 -0
  21. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/index.d.ts +2 -0
  22. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/index.d.ts.map +1 -0
  23. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/index.js +1 -0
  24. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedArrowAnnotation.d.ts +8 -0
  25. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedArrowAnnotation.d.ts.map +1 -0
  26. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedArrowAnnotation.js +20 -0
  27. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedImageAnnotation.d.ts +9 -0
  28. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedImageAnnotation.d.ts.map +1 -0
  29. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedImageAnnotation.js +25 -0
  30. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.d.ts +6 -0
  31. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.d.ts.map +1 -0
  32. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.js +16 -0
  33. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/index.d.ts +2 -0
  34. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/index.d.ts.map +1 -0
  35. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/index.js +1 -0
  36. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.d.ts +2 -0
  37. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.d.ts.map +1 -0
  38. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.js +10 -0
  39. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/index.d.ts +2 -0
  40. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/index.d.ts.map +1 -0
  41. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/SettingsTab/index.js +1 -0
  42. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/index.d.ts +2 -0
  43. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/index.d.ts.map +1 -0
  44. package/dist/pages/_components/ImageMetaphorView/components/AnnotationPanel/index.js +1 -0
  45. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/ArrowToolbar.d.ts +3 -0
  46. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/ArrowToolbar.d.ts.map +1 -0
  47. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/ArrowToolbar.js +27 -0
  48. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/index.d.ts +2 -0
  49. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/index.d.ts.map +1 -0
  50. package/dist/pages/_components/ImageMetaphorView/components/ArrowToolbar/index.js +1 -0
  51. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/FilterAdapter.d.ts +9 -0
  52. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/FilterAdapter.d.ts.map +1 -0
  53. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/FilterAdapter.js +23 -0
  54. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/index.d.ts +2 -0
  55. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/index.d.ts.map +1 -0
  56. package/dist/pages/_components/ImageMetaphorView/components/FilterAdapter/index.js +1 -0
  57. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/HoverTooltip.d.ts +11 -0
  58. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/HoverTooltip.d.ts.map +1 -0
  59. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/HoverTooltip.js +16 -0
  60. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/index.d.ts +2 -0
  61. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/index.d.ts.map +1 -0
  62. package/dist/pages/_components/ImageMetaphorView/components/HoverTooltip/index.js +1 -0
  63. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/ImageArrows.d.ts +13 -0
  64. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/ImageArrows.d.ts.map +1 -0
  65. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/ImageArrows.js +42 -0
  66. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/index.d.ts +2 -0
  67. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/index.d.ts.map +1 -0
  68. package/dist/pages/_components/ImageMetaphorView/components/ImageArrows/index.js +1 -0
  69. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/ImageUndoStack.d.ts +7 -0
  70. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/ImageUndoStack.d.ts.map +1 -0
  71. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/ImageUndoStack.js +22 -0
  72. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/index.d.ts +2 -0
  73. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/index.d.ts.map +1 -0
  74. package/dist/pages/_components/ImageMetaphorView/components/ImageUndoStack/index.js +1 -0
  75. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Contents.d.ts +14 -0
  76. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Contents.d.ts.map +1 -0
  77. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Contents.js +36 -0
  78. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Info.d.ts +9 -0
  79. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Info.d.ts.map +1 -0
  80. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/Info.js +35 -0
  81. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/MetadataPanel.css +96 -0
  82. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/MetadataPanel.d.ts +18 -0
  83. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/MetadataPanel.d.ts.map +1 -0
  84. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/MetadataPanel.js +33 -0
  85. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/index.d.ts +2 -0
  86. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/index.d.ts.map +1 -0
  87. package/dist/pages/_components/ImageMetaphorView/components/MetadataPanel/index.js +1 -0
  88. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/ShapeToolbar.d.ts +9 -0
  89. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/ShapeToolbar.d.ts.map +1 -0
  90. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/ShapeToolbar.js +20 -0
  91. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/index.d.ts +2 -0
  92. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/index.d.ts.map +1 -0
  93. package/dist/pages/_components/ImageMetaphorView/components/ShapeToolbar/index.js +1 -0
  94. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/ImageMoreTools.d.ts +11 -0
  95. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/ImageMoreTools.d.ts.map +1 -0
  96. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/ImageMoreTools.js +15 -0
  97. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/Toolbar.css +105 -0
  98. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/Toolbar.d.ts +22 -0
  99. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/Toolbar.d.ts.map +1 -0
  100. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/Toolbar.js +61 -0
  101. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/index.d.ts +3 -0
  102. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/index.d.ts.map +1 -0
  103. package/dist/pages/_components/ImageMetaphorView/components/Toolbar/index.js +2 -0
  104. package/dist/pages/_components/ImageMetaphorView/components/image-panel.css +347 -0
  105. package/dist/pages/_components/ImageMetaphorView/components/shared/AddProperty.d.ts +6 -0
  106. package/dist/pages/_components/ImageMetaphorView/components/shared/AddProperty.d.ts.map +1 -0
  107. package/dist/pages/_components/ImageMetaphorView/components/shared/AddProperty.js +21 -0
  108. package/dist/pages/_components/ImageMetaphorView/components/shared/RelationPreview.d.ts +12 -0
  109. package/dist/pages/_components/ImageMetaphorView/components/shared/RelationPreview.d.ts.map +1 -0
  110. package/dist/pages/_components/ImageMetaphorView/components/shared/RelationPreview.js +34 -0
  111. package/dist/pages/_components/ImageMetaphorView/components/shared/SetCategory.d.ts +8 -0
  112. package/dist/pages/_components/ImageMetaphorView/components/shared/SetCategory.d.ts.map +1 -0
  113. package/dist/pages/_components/ImageMetaphorView/components/shared/SetCategory.js +20 -0
  114. package/dist/pages/_components/ImageMetaphorView/components/shared/colors.d.ts +2 -0
  115. package/dist/pages/_components/ImageMetaphorView/components/shared/colors.d.ts.map +1 -0
  116. package/dist/pages/_components/ImageMetaphorView/components/shared/colors.js +17 -0
  117. package/dist/pages/_components/ImageMetaphorView/components/shared/index.d.ts +6 -0
  118. package/dist/pages/_components/ImageMetaphorView/components/shared/index.d.ts.map +1 -0
  119. package/dist/pages/_components/ImageMetaphorView/components/shared/index.js +5 -0
  120. package/dist/pages/_components/ImageMetaphorView/components/shared/useRelations.d.ts +8 -0
  121. package/dist/pages/_components/ImageMetaphorView/components/shared/useRelations.d.ts.map +1 -0
  122. package/dist/pages/_components/ImageMetaphorView/components/shared/useRelations.js +13 -0
  123. package/dist/pages/_components/ImageMetaphorView/hooks/index.d.ts +2 -0
  124. package/dist/pages/_components/ImageMetaphorView/hooks/index.d.ts.map +1 -0
  125. package/dist/pages/_components/ImageMetaphorView/hooks/index.js +1 -0
  126. package/dist/pages/_components/ImageMetaphorView/hooks/useMultiPagePresence.d.ts +17 -0
  127. package/dist/pages/_components/ImageMetaphorView/hooks/useMultiPagePresence.d.ts.map +1 -0
  128. package/dist/pages/_components/ImageMetaphorView/hooks/useMultiPagePresence.js +43 -0
  129. package/dist/pages/_components/ImageMetaphorView/index.d.ts +2 -0
  130. package/dist/pages/_components/ImageMetaphorView/index.d.ts.map +1 -0
  131. package/dist/pages/_components/ImageMetaphorView/index.js +1 -0
  132. package/dist/pages/_components/TeiMetaphorView/TeiMetaphorView.css +2055 -0
  133. package/dist/pages/_components/TeiMetaphorView/TeiMetaphorView.d.ts +10 -0
  134. package/dist/pages/_components/TeiMetaphorView/TeiMetaphorView.d.ts.map +1 -0
  135. package/dist/pages/_components/TeiMetaphorView/TeiMetaphorView.js +41 -0
  136. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/AnnotatableTEI.d.ts +14 -0
  137. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/AnnotatableTEI.d.ts.map +1 -0
  138. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/AnnotatableTEI.js +35 -0
  139. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/index.d.ts +2 -0
  140. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/index.d.ts.map +1 -0
  141. package/dist/pages/_components/TeiMetaphorView/components/AnnotatableTEI/index.js +1 -0
  142. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/AnnotationPanel.css +67 -0
  143. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/AnnotationPanel.d.ts +10 -0
  144. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/AnnotationPanel.d.ts.map +1 -0
  145. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/AnnotationPanel.js +15 -0
  146. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListCard.d.ts +13 -0
  147. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListCard.d.ts.map +1 -0
  148. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListCard.js +32 -0
  149. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListTab.css +230 -0
  150. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListTab.d.ts +7 -0
  151. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListTab.d.ts.map +1 -0
  152. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/ListTab.js +100 -0
  153. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/index.d.ts +2 -0
  154. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/index.d.ts.map +1 -0
  155. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/ListTab/index.js +1 -0
  156. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.css +449 -0
  157. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.d.ts +10 -0
  158. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.d.ts.map +1 -0
  159. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/SelectedTab.js +81 -0
  160. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/LinkedWordItem.d.ts +11 -0
  161. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/LinkedWordItem.d.ts.map +1 -0
  162. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/LinkedWordItem.js +11 -0
  163. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorLinkedWords.d.ts +9 -0
  164. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorLinkedWords.d.ts.map +1 -0
  165. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorLinkedWords.js +45 -0
  166. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorPreview.d.ts +8 -0
  167. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorPreview.d.ts.map +1 -0
  168. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorPreview.js +27 -0
  169. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorTags.d.ts +10 -0
  170. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorTags.d.ts.map +1 -0
  171. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/MetaphorTags.js +39 -0
  172. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/SpanTools.d.ts +8 -0
  173. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/SpanTools.d.ts.map +1 -0
  174. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/SpanTools.js +9 -0
  175. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/Tag.d.ts +7 -0
  176. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/Tag.d.ts.map +1 -0
  177. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/Tag.js +7 -0
  178. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/TypeSelector.d.ts +9 -0
  179. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/TypeSelector.d.ts.map +1 -0
  180. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/TypeSelector.js +8 -0
  181. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordTags.d.ts +10 -0
  182. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordTags.d.ts.map +1 -0
  183. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordTags.js +32 -0
  184. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordUplink.d.ts +7 -0
  185. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordUplink.d.ts.map +1 -0
  186. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/components/WordUplink.js +17 -0
  187. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/index.d.ts +2 -0
  188. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/index.d.ts.map +1 -0
  189. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SelectedTab/index.js +1 -0
  190. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.css +157 -0
  191. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.d.ts +2 -0
  192. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.d.ts.map +1 -0
  193. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/SettingsTab.js +12 -0
  194. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/components/AnnotationStyle.d.ts +2 -0
  195. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/components/AnnotationStyle.d.ts.map +1 -0
  196. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/components/AnnotationStyle.js +19 -0
  197. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/index.d.ts +2 -0
  198. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/index.d.ts.map +1 -0
  199. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/SettingsTab/index.js +1 -0
  200. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/index.d.ts +2 -0
  201. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/index.d.ts.map +1 -0
  202. package/dist/pages/_components/TeiMetaphorView/components/AnnotationPanel/index.js +1 -0
  203. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/ColorCodingState.d.ts +31 -0
  204. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/ColorCodingState.d.ts.map +1 -0
  205. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/ColorCodingState.js +64 -0
  206. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/index.d.ts +2 -0
  207. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/index.d.ts.map +1 -0
  208. package/dist/pages/_components/TeiMetaphorView/components/ColorCodingState/index.js +1 -0
  209. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/InlineToolbar.css +189 -0
  210. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/InlineToolbar.d.ts +7 -0
  211. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/InlineToolbar.d.ts.map +1 -0
  212. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/InlineToolbar.js +24 -0
  213. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateChoice.d.ts +8 -0
  214. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateChoice.d.ts.map +1 -0
  215. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateChoice.js +26 -0
  216. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateSelected.d.ts +7 -0
  217. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateSelected.d.ts.map +1 -0
  218. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/ToolbarStateSelected.js +71 -0
  219. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/index.d.ts +2 -0
  220. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/index.d.ts.map +1 -0
  221. package/dist/pages/_components/TeiMetaphorView/components/InlineToolbar/index.js +1 -0
  222. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/Info.d.ts +8 -0
  223. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/Info.d.ts.map +1 -0
  224. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/Info.js +41 -0
  225. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/getTeiMetadata.d.ts +9 -0
  226. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/getTeiMetadata.d.ts.map +1 -0
  227. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/getTeiMetadata.js +33 -0
  228. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/index.d.ts +2 -0
  229. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/index.d.ts.map +1 -0
  230. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Info/index.js +1 -0
  231. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/MetadataPanel.css +159 -0
  232. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/MetadataPanel.d.ts +9 -0
  233. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/MetadataPanel.d.ts.map +1 -0
  234. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/MetadataPanel.js +47 -0
  235. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/Toc.d.ts +6 -0
  236. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/Toc.d.ts.map +1 -0
  237. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/Toc.js +15 -0
  238. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/TocLevel.d.ts +7 -0
  239. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/TocLevel.d.ts.map +1 -0
  240. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/TocLevel.js +13 -0
  241. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/buildTableOfContents.d.ts +12 -0
  242. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/buildTableOfContents.d.ts.map +1 -0
  243. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/buildTableOfContents.js +97 -0
  244. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/index.d.ts +2 -0
  245. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/index.d.ts.map +1 -0
  246. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/Toc/index.js +1 -0
  247. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/index.d.ts +2 -0
  248. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/index.d.ts.map +1 -0
  249. package/dist/pages/_components/TeiMetaphorView/components/MetadataPanel/index.js +1 -0
  250. package/dist/pages/_components/TeiMetaphorView/hooks/index.d.ts +6 -0
  251. package/dist/pages/_components/TeiMetaphorView/hooks/index.d.ts.map +1 -0
  252. package/dist/pages/_components/TeiMetaphorView/hooks/index.js +5 -0
  253. package/dist/pages/_components/TeiMetaphorView/hooks/useAnnotationsStyle.d.ts +3 -0
  254. package/dist/pages/_components/TeiMetaphorView/hooks/useAnnotationsStyle.d.ts.map +1 -0
  255. package/dist/pages/_components/TeiMetaphorView/hooks/useAnnotationsStyle.js +138 -0
  256. package/dist/pages/_components/TeiMetaphorView/hooks/useIntersectingAnnotations.d.ts +5 -0
  257. package/dist/pages/_components/TeiMetaphorView/hooks/useIntersectingAnnotations.d.ts.map +1 -0
  258. package/dist/pages/_components/TeiMetaphorView/hooks/useIntersectingAnnotations.js +35 -0
  259. package/dist/pages/_components/TeiMetaphorView/hooks/useLinkedMetaphors.d.ts +5 -0
  260. package/dist/pages/_components/TeiMetaphorView/hooks/useLinkedMetaphors.d.ts.map +1 -0
  261. package/dist/pages/_components/TeiMetaphorView/hooks/useLinkedMetaphors.js +14 -0
  262. package/dist/pages/_components/TeiMetaphorView/hooks/useMrwOptions.d.ts +6 -0
  263. package/dist/pages/_components/TeiMetaphorView/hooks/useMrwOptions.d.ts.map +1 -0
  264. package/dist/pages/_components/TeiMetaphorView/hooks/useMrwOptions.js +24 -0
  265. package/dist/pages/_components/TeiMetaphorView/hooks/useSuggestAnnotationType.d.ts +2 -0
  266. package/dist/pages/_components/TeiMetaphorView/hooks/useSuggestAnnotationType.d.ts.map +1 -0
  267. package/dist/pages/_components/TeiMetaphorView/hooks/useSuggestAnnotationType.js +35 -0
  268. package/dist/pages/_components/TeiMetaphorView/hooks/useTagVocabulary.d.ts +3 -0
  269. package/dist/pages/_components/TeiMetaphorView/hooks/useTagVocabulary.d.ts.map +1 -0
  270. package/dist/pages/_components/TeiMetaphorView/hooks/useTagVocabulary.js +46 -0
  271. package/dist/pages/_components/TeiMetaphorView/index.d.ts +2 -0
  272. package/dist/pages/_components/TeiMetaphorView/index.d.ts.map +1 -0
  273. package/dist/pages/_components/TeiMetaphorView/index.js +1 -0
  274. package/dist/pages/_components/TeiMetaphorView/utils.d.ts +15 -0
  275. package/dist/pages/_components/TeiMetaphorView/utils.d.ts.map +1 -0
  276. package/dist/pages/_components/TeiMetaphorView/utils.js +146 -0
  277. package/dist/pages/_components/shared/components/Accordion/Accordion.css +55 -0
  278. package/dist/pages/_components/shared/components/Accordion/Accordion.d.ts +6 -0
  279. package/dist/pages/_components/shared/components/Accordion/Accordion.d.ts.map +1 -0
  280. package/dist/pages/_components/shared/components/Accordion/Accordion.js +7 -0
  281. package/dist/pages/_components/shared/components/Accordion/index.d.ts +2 -0
  282. package/dist/pages/_components/shared/components/Accordion/index.d.ts.map +1 -0
  283. package/dist/pages/_components/shared/components/Accordion/index.js +1 -0
  284. package/dist/pages/_components/shared/components/AccountActions/AccountActions.css +49 -0
  285. package/dist/pages/_components/shared/components/AccountActions/AccountActions.d.ts +2 -0
  286. package/dist/pages/_components/shared/components/AccountActions/AccountActions.d.ts.map +1 -0
  287. package/dist/pages/_components/shared/components/AccountActions/AccountActions.js +33 -0
  288. package/dist/pages/_components/shared/components/AccountActions/index.d.ts +2 -0
  289. package/dist/pages/_components/shared/components/AccountActions/index.d.ts.map +1 -0
  290. package/dist/pages/_components/shared/components/AccountActions/index.js +1 -0
  291. package/dist/pages/_components/shared/components/Conversation/Comment.d.ts +6 -0
  292. package/dist/pages/_components/shared/components/Conversation/Comment.d.ts.map +1 -0
  293. package/dist/pages/_components/shared/components/Conversation/Comment.js +12 -0
  294. package/dist/pages/_components/shared/components/Conversation/Conversation.css +93 -0
  295. package/dist/pages/_components/shared/components/Conversation/Conversation.d.ts +8 -0
  296. package/dist/pages/_components/shared/components/Conversation/Conversation.d.ts.map +1 -0
  297. package/dist/pages/_components/shared/components/Conversation/Conversation.js +55 -0
  298. package/dist/pages/_components/shared/components/Conversation/index.d.ts +2 -0
  299. package/dist/pages/_components/shared/components/Conversation/index.d.ts.map +1 -0
  300. package/dist/pages/_components/shared/components/Conversation/index.js +1 -0
  301. package/dist/pages/_components/shared/components/EditorToolbar/EditorToolbar.css +218 -0
  302. package/dist/pages/_components/shared/components/EditorToolbar/EditorToolbar.d.ts +23 -0
  303. package/dist/pages/_components/shared/components/EditorToolbar/EditorToolbar.d.ts.map +1 -0
  304. package/dist/pages/_components/shared/components/EditorToolbar/EditorToolbar.js +13 -0
  305. package/dist/pages/_components/shared/components/EditorToolbar/PrivacySelector.d.ts +8 -0
  306. package/dist/pages/_components/shared/components/EditorToolbar/PrivacySelector.d.ts.map +1 -0
  307. package/dist/pages/_components/shared/components/EditorToolbar/PrivacySelector.js +9 -0
  308. package/dist/pages/_components/shared/components/EditorToolbar/UndoRedo.d.ts +2 -0
  309. package/dist/pages/_components/shared/components/EditorToolbar/UndoRedo.d.ts.map +1 -0
  310. package/dist/pages/_components/shared/components/EditorToolbar/UndoRedo.js +42 -0
  311. package/dist/pages/_components/shared/components/EditorToolbar/index.d.ts +3 -0
  312. package/dist/pages/_components/shared/components/EditorToolbar/index.d.ts.map +1 -0
  313. package/dist/pages/_components/shared/components/EditorToolbar/index.js +2 -0
  314. package/dist/pages/_components/shared/components/Filters/Filters.d.ts +6 -0
  315. package/dist/pages/_components/shared/components/Filters/Filters.d.ts.map +1 -0
  316. package/dist/pages/_components/shared/components/Filters/Filters.js +61 -0
  317. package/dist/pages/_components/shared/components/Filters/VisibilityFilter.d.ts +2 -0
  318. package/dist/pages/_components/shared/components/Filters/VisibilityFilter.d.ts.map +1 -0
  319. package/dist/pages/_components/shared/components/Filters/VisibilityFilter.js +23 -0
  320. package/dist/pages/_components/shared/components/Filters/index.d.ts +3 -0
  321. package/dist/pages/_components/shared/components/Filters/index.d.ts.map +1 -0
  322. package/dist/pages/_components/shared/components/Filters/index.js +2 -0
  323. package/dist/pages/_components/shared/components/HideAllState/HideAllState.d.ts +12 -0
  324. package/dist/pages/_components/shared/components/HideAllState/HideAllState.d.ts.map +1 -0
  325. package/dist/pages/_components/shared/components/HideAllState/HideAllState.js +9 -0
  326. package/dist/pages/_components/shared/components/HideAllState/index.d.ts +2 -0
  327. package/dist/pages/_components/shared/components/HideAllState/index.d.ts.map +1 -0
  328. package/dist/pages/_components/shared/components/HideAllState/index.js +1 -0
  329. package/dist/pages/_components/shared/components/Metadata/MetadataList.d.ts +10 -0
  330. package/dist/pages/_components/shared/components/Metadata/MetadataList.d.ts.map +1 -0
  331. package/dist/pages/_components/shared/components/Metadata/MetadataList.js +11 -0
  332. package/dist/pages/_components/shared/components/Metadata/index.d.ts +3 -0
  333. package/dist/pages/_components/shared/components/Metadata/index.d.ts.map +1 -0
  334. package/dist/pages/_components/shared/components/Metadata/index.js +2 -0
  335. package/dist/pages/_components/shared/components/Metadata/sanitize.d.ts +3 -0
  336. package/dist/pages/_components/shared/components/Metadata/sanitize.d.ts.map +1 -0
  337. package/dist/pages/_components/shared/components/Metadata/sanitize.js +53 -0
  338. package/dist/pages/_components/shared/components/StorageAdapter.d.ts +8 -0
  339. package/dist/pages/_components/shared/components/StorageAdapter.d.ts.map +1 -0
  340. package/dist/pages/_components/shared/components/StorageAdapter.js +12 -0
  341. package/dist/pages/_components/shared/components/SupabaseStorageAdapter.d.ts +23 -0
  342. package/dist/pages/_components/shared/components/SupabaseStorageAdapter.d.ts.map +1 -0
  343. package/dist/pages/_components/shared/components/SupabaseStorageAdapter.js +46 -0
  344. package/dist/pages/_components/shared/components/Tabs/Tabs.css +90 -0
  345. package/dist/pages/_components/shared/components/Tabs/Tabs.d.ts +6 -0
  346. package/dist/pages/_components/shared/components/Tabs/Tabs.d.ts.map +1 -0
  347. package/dist/pages/_components/shared/components/Tabs/Tabs.js +6 -0
  348. package/dist/pages/_components/shared/components/Tabs/index.d.ts +2 -0
  349. package/dist/pages/_components/shared/components/Tabs/index.d.ts.map +1 -0
  350. package/dist/pages/_components/shared/components/Tabs/index.js +1 -0
  351. package/dist/pages/_components/shared/components/index.d.ts +9 -0
  352. package/dist/pages/_components/shared/components/index.d.ts.map +1 -0
  353. package/dist/pages/_components/shared/components/index.js +8 -0
  354. package/dist/pages/_components/shared/hooks/index.d.ts +2 -0
  355. package/dist/pages/_components/shared/hooks/index.d.ts.map +1 -0
  356. package/dist/pages/_components/shared/hooks/index.js +1 -0
  357. package/dist/pages/_components/shared/hooks/useDocument.d.ts +3 -0
  358. package/dist/pages/_components/shared/hooks/useDocument.d.ts.map +1 -0
  359. package/dist/pages/_components/shared/hooks/useDocument.js +14 -0
  360. package/dist/pages/_components/shared/hooks/useDocumentLayers.d.ts +6 -0
  361. package/dist/pages/_components/shared/hooks/useDocumentLayers.d.ts.map +1 -0
  362. package/dist/pages/_components/shared/hooks/useDocumentLayers.js +18 -0
  363. package/dist/pages/_components/shared/hooks/useLayerPolicies.d.ts +3 -0
  364. package/dist/pages/_components/shared/hooks/useLayerPolicies.d.ts.map +1 -0
  365. package/dist/pages/_components/shared/hooks/useLayerPolicies.js +16 -0
  366. package/dist/pages/_components/shared/hooks/useSelectAction.d.ts +18 -0
  367. package/dist/pages/_components/shared/hooks/useSelectAction.d.ts.map +1 -0
  368. package/dist/pages/_components/shared/hooks/useSelectAction.js +26 -0
  369. package/dist/pages/_components/shared/hooks/useStoredFileDocument.d.ts +5 -0
  370. package/dist/pages/_components/shared/hooks/useStoredFileDocument.d.ts.map +1 -0
  371. package/dist/pages/_components/shared/hooks/useStoredFileDocument.js +22 -0
  372. package/dist/pages/_components/shared/i18n.d.ts +4 -0
  373. package/dist/pages/_components/shared/i18n.d.ts.map +1 -0
  374. package/dist/pages/_components/shared/i18n.js +31 -0
  375. package/dist/pages/_components/shared/supabase.d.ts +7 -0
  376. package/dist/pages/_components/shared/supabase.d.ts.map +1 -0
  377. package/dist/pages/_components/shared/supabase.js +7 -0
  378. package/dist/pages/_components/shared/types.d.ts +16 -0
  379. package/dist/pages/_components/shared/types.d.ts.map +1 -0
  380. package/dist/pages/_components/shared/types.js +1 -0
  381. package/dist/pages/metaphor-annotation-view.astro +122 -0
  382. package/package.json +69 -4
package/README.md CHANGED
@@ -1,3 +1,103 @@
1
- # Temporary Holding Version
1
+ # Metaphor Annotation View
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A Recogito Studio plugin that **injects a custom Metaphor Annotation View** for working with metaphor in TEI documents, fully replacing the standard Recogito Studio text-/image annotation view. This plugin provides:
4
+ 1. A new Astro page route at `/[lang]/annotate-metaphor/[contextId]/[documentId]`
5
+ 2. A new menu option in the Document Card, which opens the document in the Metaphor Annotation View.
6
+
7
+ ## Overview
8
+
9
+ ### Injected Page Route
10
+
11
+ The annotation view is injected using the standard Astro Integrations mechanism (see `src/index.ts`). The page itself is a minimal `.astro` file (`src/pages/metaphor-annotation-view.astro`) that:
12
+ - Computes the realtime channel ID (derived from the server-side env variable).
13
+ - Instantiates the React entry-point component.
14
+
15
+ > [!NOTE]
16
+ > The React component is instantiated with `client:only`. This is necessary because OpenSeadragon is not compatible with SSR! Initially, I had trouble with `client:only` failing in Vite (`client:load` was fine):
17
+ >
18
+ > ```
19
+ > The request url [...] is outside of Vite serving allow list
20
+ > ```
21
+ >
22
+ > I got around this by explicitly allowing the parent directory in the dev app config (`.dev/astro.config.mjs`). This adjustment should only be necessary in dev mode, and wouldn't be needed in a Recogito Studio production deployment. But I haven't tested yet!
23
+
24
+ ### Document Menu Extension
25
+
26
+ The `GoToMetaphorAnnotationView` extension (`src/extensions/GoToMetaphorAnnotationView.tsx`) adds a new menu entry to the `project:document-actions` extension point, providing a link to the custom route.
27
+
28
+ <img src="menu-extension-screenshot.png" style="max-width: 600px;" width="600" />
29
+
30
+ > [!WARNING]
31
+ > Currently, we have no mechanism for disabling or replacing the standard **Open document** and **Open document in new tab** entries. This may be worth thinking about for later!
32
+
33
+ ### Metaphor Annotation View
34
+
35
+ The annotation view itself is a React single page app (`src/pages/_components/TeiMetaphorView/TeiMetaphorView.tsx`). It receives the following input props from the `.astro` page:
36
+
37
+ - **documentId**
38
+ - **contextId**
39
+ - **channelId** for realtime annotation updates
40
+
41
+ > [!IMPORTANT]
42
+ > The view only supports **TEI/XML documents**. For other content types (plaintext, PDF, image) it mounts an error message instead of the annotation view. Later, we should implement separate React SPAs, and conditionally load them from the `.astro` page.
43
+
44
+ **Implementation Notes:**
45
+
46
+ - Backend interaction happens through the SDK. This requires an **.env file with valid credentials** in the `.dev/` folder.
47
+ - I added convenience hooks for easier access to document, context and stored file content.
48
+ - Similarly, I added a simplified `SupabaseStorageAdapter` (`src/pages/_components/shared/components/SupabaseStorageAdapter.tsx`), adapted from the [core codebase](https://github.com/recogito/recogito-client/blob/develop/src/components/SupabasePlugin/SupabasePlugin.ts). This component transparently handles annotation storage and realtime sync.
49
+
50
+ ## Installation
51
+
52
+ To test this plugin, you'll need access to a live Recogito Studio backend. For most development, I recommend running the plugin through the SDK development app (already included in this repo), though setup is tricky.
53
+
54
+ ### 1. Build the Plugin
55
+
56
+ First, build the plugin itself:
57
+
58
+ ```sh
59
+ cd .dev
60
+ npm install
61
+ cd ..
62
+ npm install
63
+ npm run build
64
+ ```
65
+
66
+ ### 2. Install in a Local Recogito Client
67
+
68
+ 1. Clone a local copy of the [recogito-client](https://github.com/recogito/recogito-client).
69
+ 2. Make sure a valid `.env` file is configured in your client.
70
+ 3. Add this plugin as a local `file:` dependency in the client's `package.json` (adjust the path as needed), then run `npm install`:
71
+
72
+ ```jsonc
73
+ "dependencies": {
74
+ // ...
75
+ "@recogito/metaphor-annotation-plugin": "file:../metaphor-annotation-plugin"
76
+ // ...
77
+ }
78
+ ```
79
+ 4. Register the plugin by adding its package name to `INSTALLED_PLUGINS` in the client's `.env`:
80
+
81
+ ```sh
82
+ INSTALLED_PLUGINS="@recogito/metaphor-annotation-plugin"
83
+ ```
84
+ 5. Start Recogito Studio with `npm start`.
85
+ 6. To verify installation was successful: open a project, go to **Project Settings** → **Plugins** and check if the plugin is available in the plugin gallery.
86
+ 7. Navigate to a **TEI document**, open it in the annotation view, and note its **contextId** and **documentId** from the URL (e.g. `http://localhost:4321/en/annotate/[contextId]/[documentId]`).
87
+
88
+ ### 3. Run with the Development App
89
+
90
+ For active development, it's easier to use the plugin **outside of Recogito Studio**, with the SDK development app (with hot-reloading).
91
+
92
+ **Requirements:**
93
+
94
+ - A valid `.env` file in the `.dev/` folder with backend credentials (see `.dev/.env.example`).
95
+ - You must be **logged in to Recogito Studio**. The dev app does not currently provide a login mechanism. Therefore the ugly workaround is:
96
+ - Start a local Recogito Client (e.g. at http://localhost:4321) and log in.
97
+ - Stop Recogito, then **run the dev app on the same port**. This reuses the login credentials from your earlier session.
98
+
99
+ Finally, open a valid context/document manually:
100
+
101
+ ```
102
+ http://localhost:4321/en/annotate-metaphor/[contextId]/[documentId]
103
+ ```
@@ -0,0 +1,3 @@
1
+ import { DocumentCardActionsExtensionProps } from '@recogito/studio-sdk';
2
+ export declare const GoToMetaphorAnnotationView: import("react").ForwardRefExoticComponent<DocumentCardActionsExtensionProps<any> & import("react").RefAttributes<HTMLDivElement>>;
3
+ //# sourceMappingURL=GoToMetaphorAnnotationView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoToMetaphorAnnotationView.d.ts","sourceRoot":"","sources":["../../src/extensions/GoToMetaphorAnnotationView.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,MAAM,sBAAsB,CAAC;AAGzE,eAAO,MAAM,0BAA0B,mIAyBtC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import * as Dropdown from '@radix-ui/react-dropdown-menu';
4
+ import { useTranslation } from 'react-i18next';
5
+ export const GoToMetaphorAnnotationView = forwardRef((props, forwardedRef) => {
6
+ const { t, i18n } = useTranslation();
7
+ // the metaphor view supports TEI XML documents and IIIF images
8
+ const isTei = props.document.content_type === 'text/xml';
9
+ const isIIIF = props.document.meta_data?.protocol?.startsWith('IIIF');
10
+ if (!isTei && !isIIIF)
11
+ return null;
12
+ const onSelect = () => (window.location.href = `/${i18n.language}/annotate-metaphor/${props.context.id}/${props.document.id}`);
13
+ return (_jsx(Dropdown.Item, { ref: forwardedRef, className: 'dropdown-item', onSelect: onSelect, children: t('Open in Metaphor Annotation View') }));
14
+ });
@@ -0,0 +1,4 @@
1
+ import type { AstroIntegration } from 'astro';
2
+ declare const plugin: () => AstroIntegration;
3
+ export default plugin;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAuB9C,QAAA,MAAM,MAAM,QAAO,gBAmBjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ import { fileURLToPath } from 'url';
2
+ import { dirname, join } from 'path';
3
+ import { registerPlugin } from '@recogito/studio-sdk';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = dirname(__filename);
6
+ const MetaphorAnnotationViewPlugin = {
7
+ name: "Metaphor Annotation View",
8
+ module_name: '@recogito/metaphor-annotation-plugin',
9
+ description: "A plugin that adds the Metaphor Annotation View, a custom annotation view for TEI documents.",
10
+ author: "Performant Software",
11
+ homepage: "https://www.performantsoftware.com/",
12
+ extensions: [
13
+ {
14
+ name: "metaphor-annotation-view-menuitem",
15
+ component_name: "GoToMetaphorAnnotationView",
16
+ extension_point: "project:document-actions",
17
+ }
18
+ ]
19
+ };
20
+ const plugin = () => ({
21
+ name: "plugin-metaphor-annotation-view",
22
+ hooks: {
23
+ "astro:config:setup": ({ config, logger, injectRoute }) => {
24
+ // Register document menu items
25
+ registerPlugin(MetaphorAnnotationViewPlugin, config, logger);
26
+ // Inject route to the Metaphor Annotation View
27
+ logger.info('Injecting new API route: /[lang]/annotate-metaphor/[contextId]/[documentId]');
28
+ const integrationPagePath = join(__dirname, 'pages', 'metaphor-annotation-view.astro');
29
+ injectRoute({
30
+ pattern: '/[lang]/annotate-metaphor/[contextId]/[documentId]',
31
+ entrypoint: integrationPagePath,
32
+ prerender: false
33
+ });
34
+ },
35
+ },
36
+ });
37
+ export default plugin;
@@ -0,0 +1,22 @@
1
+ #metaphor-image-root {
2
+ display: flex;
3
+ max-width: 100vw;
4
+ height: 100vh;
5
+ overflow: hidden;
6
+ }
7
+
8
+ /* OpenSeadragon needs an explicitly-sized container */
9
+ .ia-osd-container {
10
+ position: relative;
11
+ flex: 1 1 auto;
12
+ min-width: 0;
13
+ min-height: 0;
14
+ width: 100%;
15
+ height: 100%;
16
+ background-color: var(--gray-100, #f4f4f4);
17
+ }
18
+
19
+ /* "Hide all" also hides relations (arrows) */
20
+ .ia-hide-arrows .a9s-arrows-layer {
21
+ display: none;
22
+ }
@@ -0,0 +1,10 @@
1
+ import { type Context, type Document, type Project } from '@recogito/studio-sdk';
2
+ interface ImageMetaphorViewProps {
3
+ channelId: string;
4
+ context: Context;
5
+ document: Document;
6
+ project: Project;
7
+ }
8
+ export declare const ImageMetaphorView: (props: ImageMetaphorViewProps) => import("react").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=ImageMetaphorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageMetaphorView.d.ts","sourceRoot":"","sources":["../../../../src/pages/_components/ImageMetaphorView/ImageMetaphorView.tsx"],"names":[],"mappings":"AAuBA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,sBAAsB,CAAC;AAmC9B,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsCD,eAAO,MAAM,iBAAiB,GAAI,OAAO,sBAAsB,gCA8Q9D,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useState } from 'react';
3
+ import { I18nextProvider } from 'react-i18next';
4
+ import { Annotorious, AnnotoriousPlugin, OpenSeadragonAnnotationPopup, OpenSeadragonAnnotator, OpenSeadragonHoverTooltip, OpenSeadragonViewer, } from '@annotorious/react';
5
+ import { mountPlugin as ToolsPlugin } from '@annotorious/plugin-tools';
6
+ import { mountPlugin as MagneticOutlinePlugin } from '@annotorious/plugin-magnetic-outline';
7
+ import { AuthorColorProvider, FilterState, SelectionURLState, Spinner, } from '@recogito/studio-sdk/components';
8
+ import { HideAllState } from '../shared/components';
9
+ import { FilterAdapter } from './components/FilterAdapter';
10
+ import { useDocumentIIIF } from '@recogito/studio-sdk/iiif';
11
+ import { useDocumentLayers } from '../shared/hooks/useDocumentLayers';
12
+ import { useLayerPolicies } from '../shared/hooks/useLayerPolicies';
13
+ import { useSelectAction } from '../shared/hooks/useSelectAction';
14
+ import { StorageAdapter } from '../shared/components';
15
+ import { supabase } from '../shared/supabase';
16
+ import clientI18next from '../shared/i18n';
17
+ import { EditorToolbar } from '../shared/components/EditorToolbar';
18
+ import { Toolbar, ImageMoreTools } from './components/Toolbar';
19
+ import { AnnotationPanel, } from './components/AnnotationPanel';
20
+ import { ShapeToolbar } from './components/ShapeToolbar';
21
+ import { ImageArrows } from './components/ImageArrows';
22
+ import { HoverTooltip } from './components/HoverTooltip';
23
+ import { useMultiPagePresence } from './hooks';
24
+ import { ImageUndoStack } from './components/ImageUndoStack';
25
+ import { MetadataPanel } from './components/MetadataPanel';
26
+ const CANTALOUPE_PATH = import.meta.env
27
+ .PUBLIC_IIIF_CANTALOUPE_PATH;
28
+ const getAccessToken = () => supabase.auth.getSession().then(({ data }) => data.session?.access_token);
29
+ const OSD_BASE_OPTIONS = {
30
+ crossOriginPolicy: 'Anonymous',
31
+ gestureSettingsMouse: {
32
+ clickToZoom: false,
33
+ dblClickToZoom: false,
34
+ },
35
+ gestureSettingsTouch: {
36
+ pinchRotate: true,
37
+ },
38
+ maxZoomLevel: 100,
39
+ minZoomLevel: 0.1,
40
+ preserveImageSizeOnResize: true,
41
+ showNavigationControl: false,
42
+ showRotationControl: true,
43
+ visibilityRatio: 0.2,
44
+ drawer: 'canvas',
45
+ };
46
+ // Match the client's default annotation style for now
47
+ const DRAWING_STYLE = (state) => ({
48
+ fill: '#0080ff',
49
+ fillOpacity: state?.hovered ? 0.28 : 0.2,
50
+ stroke: '#0080ff',
51
+ strokeOpacity: state?.selected ? 0.9 : 0.5,
52
+ strokeWidth: state?.selected ? 2 : 1,
53
+ });
54
+ // Same as the client: annotations on inactive (read-only) layers
55
+ const READ_ONLY_STYLE = (state) => ({
56
+ fill: '#010101',
57
+ fillOpacity: state?.hovered ? 0.1 : 0,
58
+ stroke: '#010101',
59
+ strokeOpacity: state?.selected ? 1 : 0.65,
60
+ strokeWidth: state?.selected ? 2.5 : 2,
61
+ });
62
+ export const ImageMetaphorView = (props) => {
63
+ const { channelId, context, document, project } = props;
64
+ const isIIIF = document.meta_data?.protocol?.startsWith('IIIF');
65
+ const { layers, activeLayer } = useDocumentLayers(document.id, context.id);
66
+ const policies = useLayerPolicies(activeLayer?.id);
67
+ const isLocked = Boolean(project.is_locked);
68
+ const style = useMemo(() => (annotation, state) => {
69
+ const layerId = annotation
70
+ .layer_id;
71
+ return activeLayer && layerId && layerId !== activeLayer.id
72
+ ? READ_ONLY_STYLE(state)
73
+ : DRAWING_STYLE(state);
74
+ }, [activeLayer?.id]);
75
+ const annoRef = useRef(null);
76
+ // Creators and layer admins can edit, everyone else can only select. The
77
+ // resulting `editable` flag drives the popups and the Selected tab.
78
+ const selectAction = useSelectAction({
79
+ isLocked,
80
+ activeLayerId: activeLayer?.id,
81
+ policies,
82
+ getUser: () => annoRef.current?.getUser(),
83
+ });
84
+ // Resolves remote IIIF (meta_data.url) and locally-uploaded images (served
85
+ // via cantaloupe)
86
+ const { manifest, canvases, currentCanvas, currentImage, image, error, authToken, isPresentationManifest, setCurrentCanvas, } = useDocumentIIIF(document, {
87
+ cantaloupePath: CANTALOUPE_PATH,
88
+ getAccessToken,
89
+ });
90
+ // OSD tile source: the info.json URL for a IIIF image service, or the plain
91
+ // image URL for a static image
92
+ const tilesource = useMemo(() => currentImage
93
+ ? currentImage.type === 'static'
94
+ ? currentImage.url
95
+ : currentImage.serviceUrl
96
+ : undefined, [currentImage]);
97
+ const [present, setPresent] = useState([]);
98
+ // Where other users are working, for multi-canvas documents
99
+ const { activeUsers, onPageActivity } = useMultiPagePresence(present);
100
+ const isMultiCanvas = canvases.length > 1;
101
+ const [privacy, setPrivacy] = useState('public');
102
+ const [tool, setTool] = useState('rectangle');
103
+ const [drawingEnabled, setDrawingEnabled] = useState(false);
104
+ const [arrowsMode, setArrowsMode] = useState('select');
105
+ const [arrowsVisibility, setArrowsVisibility] = useState('ALWAYS');
106
+ const [annotationTab, setAnnotationTab] = useState();
107
+ const [metadataOpen, setMetadataOpen] = useState(true);
108
+ const metadataOpenButtonRef = useRef(null);
109
+ const onMetadataOpenChange = (open) => {
110
+ setMetadataOpen(open);
111
+ if (!open) {
112
+ metadataOpenButtonRef.current?.focus();
113
+ }
114
+ };
115
+ const options = useMemo(() => {
116
+ if (!tilesource)
117
+ return OSD_BASE_OPTIONS;
118
+ return {
119
+ ...OSD_BASE_OPTIONS,
120
+ tileSources: {
121
+ tileSource: tilesource,
122
+ loadTilesWithAjax: Boolean(authToken),
123
+ ajaxHeaders: authToken
124
+ ? { Authorization: `Bearer ${authToken}` }
125
+ : undefined,
126
+ },
127
+ crossOriginPolicy: authToken ? undefined : 'Anonymous',
128
+ ajaxWithCredentials: authToken ? true : undefined,
129
+ };
130
+ }, [tilesource, authToken]);
131
+ return (_jsx(I18nextProvider, { i18n: clientI18next, children: !isIIIF ? (_jsx("div", { className: 'view-unsupported', children: clientI18next.t('This document type is not supported in this view.') })) : error ? (_jsx("div", { className: 'view-unsupported', children: error })) : activeLayer && tilesource ? (_jsx(AuthorColorProvider, { children: _jsx(Annotorious, { children: _jsx(FilterState, { children: _jsx(HideAllState, { children: _jsxs("div", { id: 'metaphor-image-root', children: [_jsx(MetadataPanel, { document: document, open: metadataOpen, onOpenChange: onMetadataOpenChange, canvases: canvases, currentCanvas: currentCanvas, image: image, manifest: manifest, authToken: authToken, onSelectCanvas: setCurrentCanvas, activeUsers: activeUsers }), _jsx("div", { id: 'main', children: _jsxs(OpenSeadragonAnnotator, { ref: annoRef, autoSave: true, disableUndoRedoKeys: true, tool: tool, drawingMode: 'drag', drawingEnabled: drawingEnabled && !isLocked, userSelectAction: selectAction, style: style, onInitError: (error) => console.error('[metaphor] OSD annotator init failed', error), children: [_jsx(EditorToolbar, { annotationsOpen: !!annotationTab, context: context, document: document, metadataOpen: metadataOpen, metadataOpenButtonRef: metadataOpenButtonRef, onMetadataOpenChange: onMetadataOpenChange, present: present, project: project, privacy: privacy, onChangePrivacy: setPrivacy, onAnnotationsOpenChange: (open) => setAnnotationTab(open ? 'list' : undefined), tools:
132
+ // no drawing tools in locked projects
133
+ !isLocked && (_jsx(Toolbar, { tool: tool, drawingEnabled: drawingEnabled, arrowsMode: arrowsMode, onChangeTool: setTool, onSetDrawingEnabled: setDrawingEnabled, onSetArrowsMode: setArrowsMode })), moreMenu: _jsx(ImageMoreTools, { privacy: privacy, arrowsVisibility: arrowsVisibility, onChangePrivacy: setPrivacy, onSetArrowsVisibility: setArrowsVisibility }) }), _jsx(OpenSeadragonViewer, { className: 'ia-osd-container', options: options }, currentCanvas?.id), _jsx(ImageUndoStack, {}), _jsx(SelectionURLState, { backButton: true }), _jsx(FilterAdapter, {}), layers.length > 0 && (_jsx(StorageAdapter, { activeLayer: activeLayer, channelId: channelId, layers: layers, onPresence: setPresent, onOffPageActivity: isMultiCanvas ? onPageActivity : undefined, onSelectionChange: isMultiCanvas && currentCanvas
134
+ ? (user) => onPageActivity({ source: currentCanvas.id, user })
135
+ : undefined, privacyMode: privacy === 'private', source: isPresentationManifest ? currentCanvas?.id : undefined })), _jsx(OpenSeadragonHoverTooltip, { tooltip: (tooltipProps) => (_jsx(HoverTooltip, { annotation: tooltipProps.annotation })) }), _jsx(OpenSeadragonAnnotationPopup, { popup: (popupProps) => (_jsx(ShapeToolbar, { annotation: popupProps.annotation, editable: Boolean(popupProps.editable), onClickAdvanced: () => setAnnotationTab('selected') })) }), _jsx(AnnotoriousPlugin, { plugin: ToolsPlugin }), _jsx(AnnotoriousPlugin, { plugin: MagneticOutlinePlugin }), _jsx(ImageArrows, { mode: arrowsMode, visibility: arrowsVisibility })] }) }), _jsx(AnnotationPanel, { isLocked: isLocked, tab: annotationTab, onStateChange: setAnnotationTab })] }) }) }) }) })) : (_jsx("div", { className: 'spinner-container', children: _jsx(Spinner, { className: 'spinner', size: 32 }) })) }));
136
+ };
@@ -0,0 +1,9 @@
1
+ export type AnnotationPanelTab = 'selected' | 'list' | 'settings';
2
+ interface AnnotationPanelProps {
3
+ isLocked: boolean;
4
+ tab?: AnnotationPanelTab;
5
+ onStateChange(tab?: AnnotationPanelTab): void;
6
+ }
7
+ export declare const AnnotationPanel: (props: AnnotationPanelProps) => import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=AnnotationPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/AnnotationPanel.tsx"],"names":[],"mappings":"AAkBA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAElB,GAAG,CAAC,EAAE,kBAAkB,CAAC;IAEzB,aAAa,CAAC,GAAG,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCA8D1D,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useTranslation } from 'react-i18next';
3
+ import { XIcon, CursorIcon, ChatsIcon, SlidersHorizontalIcon, } from '@phosphor-icons/react';
4
+ import { Button } from '@recogito/studio-sdk/components';
5
+ import { SelectedTab } from './SelectedTab';
6
+ import { ListTab } from './ListTab';
7
+ import { SettingsTab } from './SettingsTab';
8
+ import { Tabs, TabsList, TabsTrigger, TabsContent, } from '../../../shared/components';
9
+ export const AnnotationPanel = (props) => {
10
+ const { t } = useTranslation();
11
+ return (_jsx("div", { className: `annotation-panel ${props.tab ? 'open' : 'closed'}`, inert: !props.tab, children: _jsxs("div", { className: 'annotation-panel-content', children: [_jsxs("div", { className: 'annotation-panel-header', children: [_jsx("h3", { className: 'annotation-panel-title', children: t('Annotations') }), _jsx(Button, { className: 'unstyled toolbar-btn icon-only', onClick: () => props.onStateChange(undefined), "aria-label": t('Close sidebar'), children: _jsx(XIcon, { weight: 'bold', "aria-hidden": 'true' }) })] }), _jsxs(Tabs, { value: props.tab || 'selected', onValueChange: (val) => props.onStateChange(val), className: 'annotation-panel-tabs-root', children: [_jsxs(TabsList, { children: [_jsxs(TabsTrigger, { value: 'selected', children: [_jsx(CursorIcon, { weight: 'bold', "aria-hidden": 'true' }), _jsx("span", { className: 'tab-label', children: t('Selected') })] }), _jsxs(TabsTrigger, { value: 'list', children: [_jsx(ChatsIcon, { weight: 'bold', "aria-hidden": 'true' }), _jsx("span", { className: 'tab-label', children: t('List') })] }), _jsxs(TabsTrigger, { value: 'settings', children: [_jsx(SlidersHorizontalIcon, { weight: 'bold', "aria-hidden": 'true' }), _jsx("span", { className: 'tab-label', children: t('Settings') })] })] }), _jsx(TabsContent, { value: 'selected', className: 'annotation-panel-tab-content', children: _jsx(SelectedTab, { isLocked: props.isLocked }) }), _jsx(TabsContent, { value: 'list', className: 'annotation-panel-tab-content list-tab-container', children: _jsx(ListTab, {}) }), _jsx(TabsContent, { value: 'settings', className: 'annotation-panel-tab-content', children: _jsx(SettingsTab, {}) })] })] }) }));
12
+ };
@@ -0,0 +1,11 @@
1
+ import { type SupabaseAnnotation } from '@recogito/annotorious-supabase';
2
+ interface ImageListCardProps {
3
+ annotation: SupabaseAnnotation;
4
+ selected: boolean;
5
+ emphasize: boolean;
6
+ deemphasize: boolean;
7
+ onToggleSelect(): void;
8
+ }
9
+ export declare const ImageListCard: (props: ImageListCardProps) => import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=ImageListCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageListCard.d.ts","sourceRoot":"","sources":["../../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ImageListCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAcxC,UAAU,kBAAkB;IAC1B,UAAU,EAAE,kBAAkB,CAAC;IAE/B,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,OAAO,CAAC;IAEnB,WAAW,EAAE,OAAO,CAAC;IAErB,cAAc,IAAI,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,gCAyHtD,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { Visibility, } from '@recogito/annotorious-supabase';
5
+ import { ChatTeardropTextIcon, LockIcon } from '@phosphor-icons/react';
6
+ import { Avatar } from '@recogito/studio-sdk/components';
7
+ import { getCategoryColor, RelationPreview, useRelations } from '../../shared';
8
+ const timeAgo = (date, locale) => {
9
+ const rtf = new Intl.RelativeTimeFormat(locale || 'en', { numeric: 'auto' });
10
+ const mins = Math.round((date.getTime() - Date.now()) / 60000);
11
+ if (Math.abs(mins) < 60)
12
+ return rtf.format(mins, 'minute');
13
+ const hrs = Math.round(mins / 60);
14
+ if (Math.abs(hrs) < 24)
15
+ return rtf.format(hrs, 'hour');
16
+ return rtf.format(Math.round(hrs / 24), 'day');
17
+ };
18
+ export const ImageListCard = (props) => {
19
+ const { t, i18n } = useTranslation();
20
+ const { annotation } = props;
21
+ const category = useMemo(() => annotation.bodies.find((b) => b.purpose === 'classifying')?.value, [annotation.bodies]);
22
+ const properties = useMemo(() => annotation.bodies.filter((b) => b.purpose === 'tagging' && b.value), [annotation.bodies]);
23
+ const creator = annotation.target.creator;
24
+ const creatorName = creator?.name || t('Unknown User');
25
+ const created = annotation.target.created || new Date();
26
+ const isPrivate = annotation.visibility === Visibility.PRIVATE;
27
+ const arrows = useRelations(annotation.id);
28
+ const commentCount = useMemo(() => annotation.bodies.filter((b) => b.purpose === 'commenting' || b.purpose === 'replying').length, [annotation.bodies]);
29
+ const cardClass = [
30
+ 'list-card',
31
+ props.emphasize ? 'is-emphasized' : '',
32
+ props.deemphasize ? 'is-deemphasized' : '',
33
+ ]
34
+ .filter(Boolean)
35
+ .join(' ');
36
+ return (_jsxs("div", { className: cardClass, children: [_jsx("button", { type: 'button', className: 'unstyled list-card-select', "aria-pressed": props.selected, "aria-label": t('Select Annotation'), onClick: props.onToggleSelect }), _jsxs("div", { className: 'list-card-content', children: [category ? (_jsx("div", { className: 'ia-list-card-category', style: { backgroundColor: getCategoryColor(category) }, children: category })) : (_jsx("div", { className: 'ia-list-card-untitled', children: t('Untitled annotation') })), properties.length > 0 && (_jsx("div", { className: 'list-card-tags', children: properties.map((body, idx) => (_jsxs("div", { className: 'list-card-tag', children: [_jsx("div", { className: 'list-card-tag-dot' }), _jsx("span", { children: body.value })] }, body.id || idx))) })), arrows.length > 0 && (_jsx("div", { className: 'ia-relation-list', children: arrows.map((arrow) => (_jsx(RelationPreview, { arrow: arrow, referenceAnnotationId: annotation.id }, arrow.id))) })), _jsxs("div", { className: 'list-card-footer', children: [_jsxs("div", { className: 'list-card-meta', children: [_jsx(Avatar, { id: creator?.id || 'unknown', name: creatorName, avatar: creator?.avatar, size: 'sm' }), _jsx("span", { className: 'list-card-author', children: creatorName }), _jsxs("span", { className: 'list-card-date', children: ["\u00B7 ", timeAgo(created, i18n.language)] })] }), _jsxs("div", { className: 'list-card-footer-actions', children: [commentCount > 0 && (_jsxs("span", { className: 'list-card-comments', children: [_jsx(ChatTeardropTextIcon, { size: 14, weight: 'bold', "aria-hidden": 'true' }), _jsx("span", { children: commentCount })] })), isPrivate && (_jsx("span", { className: 'list-card-private', title: t('Private'), children: _jsx(LockIcon, { size: 14, weight: 'bold' }) }))] })] })] })] }));
37
+ };
@@ -0,0 +1,2 @@
1
+ export declare const ListTab: () => import("react").JSX.Element;
2
+ //# sourceMappingURL=ListTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListTab.d.ts","sourceRoot":"","sources":["../../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/ListTab.tsx"],"names":[],"mappings":"AAuBA,eAAO,MAAM,OAAO,mCA2NnB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import * as Tooltip from '@radix-ui/react-tooltip';
5
+ import * as Select from '@radix-ui/react-select';
6
+ import { CaretDownIcon, CheckIcon, SortAscendingIcon, SortDescendingIcon, } from '@phosphor-icons/react';
7
+ import { useAnnotationStore, useAnnotator, useSelection, useViewportState, } from '@annotorious/react';
8
+ import { useFilter } from '@recogito/studio-sdk/components';
9
+ import { isArrowAnchor, isArrowAnnotation } from '@annotorious/plugin-arrows-react';
10
+ import { ImageListCard } from './ImageListCard';
11
+ export const ListTab = () => {
12
+ const { t } = useTranslation();
13
+ const [sortBy, setSortBy] = useState('created');
14
+ const [sortDirection, setSortDirection] = useState('desc');
15
+ const [viewportFilter, setViewportFilter] = useState('all');
16
+ const anno = useAnnotator();
17
+ const store = useAnnotationStore();
18
+ const [allAnnotations, setAllAnnotations] = useState([]);
19
+ // Keep annotations list in sync
20
+ useEffect(() => {
21
+ if (!store)
22
+ return;
23
+ const update = () => setAllAnnotations(store.all());
24
+ update();
25
+ store.observe(update);
26
+ return () => store.unobserve(update);
27
+ }, [store]);
28
+ const visibleAnnotations = useViewportState(250);
29
+ const { selected } = useSelection();
30
+ const { filter } = useFilter();
31
+ const hasSelection = selected.length > 0;
32
+ const isSelected = (annotation) => selected.some((s) => s.annotation.id === annotation.id);
33
+ // When a relation (arrow) is selected, emphasize the annotations it links
34
+ const linkedBySelection = useMemo(() => new Set(selected
35
+ .map((s) => s.annotation)
36
+ .filter(isArrowAnnotation)
37
+ .flatMap(({ target: { selector } }) => [selector.start, selector.end])
38
+ .filter(isArrowAnchor)
39
+ .map((anchor) => anchor.annotationId)), [selected]);
40
+ const isEmphasized = (annotation) => isSelected(annotation) || linkedBySelection.has(annotation.id);
41
+ // Relations (arrows) are shown on the cards of the annotations they link,
42
+ // not as cards of their own
43
+ const unfiltered = (viewportFilter === 'viewport' ? visibleAnnotations : allAnnotations).filter((a) => !isArrowAnnotation(a));
44
+ const activeAnnotations = filter ? unfiltered.filter(filter) : unfiltered;
45
+ const sorted = useMemo(() => {
46
+ const getLatest = (a) => Math.max(a.target.created?.getTime() || 0, ...a.bodies.map((b) => b.created?.getTime() || 0));
47
+ const list = [...activeAnnotations].sort((a, b) => sortBy === 'updated'
48
+ ? getLatest(a) - getLatest(b)
49
+ : (a.target.created?.getTime() || 0) -
50
+ (b.target.created?.getTime() || 0));
51
+ if (sortDirection === 'desc')
52
+ list.reverse();
53
+ return list;
54
+ }, [activeAnnotations, sortBy, sortDirection]);
55
+ const onToggleSelect = (annotation) => {
56
+ if (!anno)
57
+ return;
58
+ if (isSelected(annotation)) {
59
+ anno.state.selection.clear();
60
+ }
61
+ else {
62
+ anno.state.selection.setSelected(annotation.id);
63
+ }
64
+ };
65
+ return (_jsxs(_Fragment, { children: [_jsxs("header", { className: 'list-header', children: [_jsxs("div", { className: 'list-header-group', children: [_jsx(Tooltip.Provider, { children: _jsxs(Tooltip.Root, { children: [_jsx(Tooltip.Trigger, { asChild: true, children: _jsx("button", { className: 'unstyled toolbar-btn icon-only', "aria-label": t('Toggle sort direction'), onClick: () => setSortDirection((prev) => prev === 'asc' ? 'desc' : 'asc'), children: sortDirection === 'asc' ? (_jsx(SortAscendingIcon, {})) : (_jsx(SortDescendingIcon, {})) }) }), _jsx(Tooltip.Portal, { children: _jsxs(Tooltip.Content, { side: 'top', className: 'tooltip-content', children: [sortDirection === 'asc'
66
+ ? t('Sort descending')
67
+ : t('Sort ascending'), _jsx(Tooltip.Arrow, { className: 'tooltip-arrow' })] }) })] }) }), _jsxs(Select.Root, { value: sortBy, onValueChange: (v) => setSortBy(v), children: [_jsxs(Select.Trigger, { className: 'unstyled list-select-trigger', children: [_jsx(Select.Value, {}), _jsx(Select.Icon, { children: _jsx(CaretDownIcon, { size: 12 }) })] }), _jsx(Select.Portal, { children: _jsx(Select.Content, { className: 'list-select-content', position: 'popper', sideOffset: 4, children: _jsxs(Select.Viewport, { children: [_jsxs(Select.Item, { value: 'created', className: 'list-select-item', children: [_jsx(Select.ItemText, { children: t('Created') }), _jsx(Select.ItemIndicator, { className: 'list-select-indicator', children: _jsx(CheckIcon, { size: 14 }) })] }), _jsxs(Select.Item, { value: 'updated', className: 'list-select-item', children: [_jsx(Select.ItemText, { children: t('Updated') }), _jsx(Select.ItemIndicator, { className: 'list-select-indicator', children: _jsx(CheckIcon, { size: 14 }) })] })] }) }) })] })] }), _jsx("div", { className: 'list-header-group', children: _jsxs(Select.Root, { value: viewportFilter, onValueChange: (v) => setViewportFilter(v), children: [_jsxs(Select.Trigger, { className: 'unstyled list-select-trigger', children: [_jsx(Select.Value, {}), _jsx(Select.Icon, { children: _jsx(CaretDownIcon, { size: 12 }) })] }), _jsx(Select.Portal, { children: _jsx(Select.Content, { className: 'list-select-content', position: 'popper', sideOffset: 4, children: _jsxs(Select.Viewport, { children: [_jsxs(Select.Item, { value: 'all', className: 'list-select-item', children: [_jsx(Select.ItemText, { children: t('Show all') }), _jsx(Select.ItemIndicator, { className: 'list-select-indicator', children: _jsx(CheckIcon, { size: 14 }) })] }), _jsxs(Select.Item, { value: 'viewport', className: 'list-select-item', children: [_jsx(Select.ItemText, { children: t('Current viewport') }), _jsx(Select.ItemIndicator, { className: 'list-select-indicator', children: _jsx(CheckIcon, { size: 14 }) })] })] }) }) })] }) })] }), sorted.length === 0 ? (_jsx("div", { className: 'ia-panel-empty', children: _jsx("p", { children: viewportFilter === 'viewport'
68
+ ? t('No annotations in the current view')
69
+ : t('No annotations yet') }) })) : (_jsx("div", { className: 'list-cards-wrapper', children: sorted.map((annotation) => (_jsx(ImageListCard, { annotation: annotation, selected: isSelected(annotation), emphasize: hasSelection && isEmphasized(annotation), deemphasize: hasSelection && !isEmphasized(annotation), onToggleSelect: () => onToggleSelect(annotation) }, annotation.id))) }))] }));
70
+ };
@@ -0,0 +1,2 @@
1
+ export * from './ListTab';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/ListTab/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ArrowAnnotation } from '@annotorious/plugin-arrows-react';
2
+ interface SelectedArrowAnnotationProps {
3
+ annotation: ArrowAnnotation;
4
+ editable: boolean;
5
+ }
6
+ export declare const SelectedArrowAnnotation: (props: SelectedArrowAnnotationProps) => import("react").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=SelectedArrowAnnotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedArrowAnnotation.d.ts","sourceRoot":"","sources":["../../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedArrowAnnotation.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,UAAU,4BAA4B;IACpC,UAAU,EAAE,eAAe,CAAC;IAE5B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,4BAA4B,gCAqE1E,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { ShapesIcon, TrashIcon, XIcon } from '@phosphor-icons/react';
5
+ import { createBody, useAnnotationStore } from '@annotorious/react';
6
+ import { getCategoryColor, RelationPreview, SetCategory } from '../../shared';
7
+ export const SelectedArrowAnnotation = (props) => {
8
+ const { t } = useTranslation();
9
+ const store = useAnnotationStore();
10
+ // Relation categories reuse the shape categories (a 'classifying' body)
11
+ const category = useMemo(() => props.annotation.bodies.find((b) => b.purpose === 'classifying')?.value, [props.annotation]);
12
+ const onSetCategory = (value) => store?.addBody(createBody(props.annotation, { purpose: 'classifying', value }));
13
+ const onClearCategory = () => {
14
+ const body = props.annotation.bodies.find((b) => b.purpose === 'classifying');
15
+ if (body)
16
+ store?.deleteBody(body);
17
+ };
18
+ const onDelete = () => store?.deleteAnnotation(props.annotation.id);
19
+ return (_jsxs("div", { className: 'ia-selected', children: [_jsx("div", { className: 'ia-selected-section', children: category ? (_jsxs("div", { className: 'ia-category-chip', style: { backgroundColor: getCategoryColor(category) }, children: [_jsx("span", { children: category }), props.editable && (_jsx("button", { className: 'unstyled icon-only', "aria-label": t('Clear class'), onClick: onClearCategory, children: _jsx(XIcon, {}) }))] })) : props.editable && (_jsx(SetCategory, { onSetCategory: onSetCategory, children: _jsxs("button", { className: 'ia-add-class', children: [_jsx(ShapesIcon, { size: 20 }), " ", t('Add class')] }) })) }), _jsx("div", { className: 'ia-selected-section', children: _jsx(RelationPreview, { arrow: props.annotation }) }), props.editable && (_jsx("div", { className: 'ia-selected-footer', children: _jsxs("button", { className: 'danger', onClick: onDelete, children: [_jsx(TrashIcon, {}), " ", t('Delete relation')] }) }))] }));
20
+ };
@@ -0,0 +1,9 @@
1
+ import { type ImageAnnotation } from '@annotorious/react';
2
+ interface SelectedImageAnnotationProps {
3
+ annotation: ImageAnnotation;
4
+ editable: boolean;
5
+ isLocked: boolean;
6
+ }
7
+ export declare const SelectedImageAnnotation: (props: SelectedImageAnnotationProps) => import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=SelectedImageAnnotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedImageAnnotation.d.ts","sourceRoot":"","sources":["../../../../../../../src/pages/_components/ImageMetaphorView/components/AnnotationPanel/SelectedTab/SelectedImageAnnotation.tsx"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAgB5B,UAAU,4BAA4B;IACpC,UAAU,EAAE,eAAe,CAAC;IAE5B,QAAQ,EAAE,OAAO,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,4BAA4B,gCAwJ1E,CAAC"}