@arpproject/recrate 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/.eslintrc.json +37 -0
  2. package/.storybook/main.ts +40 -0
  3. package/.storybook/preview.tsx +46 -0
  4. package/LICENCE +18 -0
  5. package/README.md +83 -0
  6. package/babel.config.json +5 -0
  7. package/dist/app/App.d.ts +2 -0
  8. package/dist/app/EmbeddedComponent.d.ts +3 -0
  9. package/dist/app/index.d.ts +0 -0
  10. package/dist/app/lookup.d.ts +82 -0
  11. package/dist/crate-builder/CrateManager/contexts.d.ts +6 -0
  12. package/dist/crate-builder/CrateManager/crate-manager-benchmarking.spec.d.ts +1 -0
  13. package/dist/crate-builder/CrateManager/crate-manager-loading-exporting.spec.d.ts +1 -0
  14. package/dist/crate-builder/CrateManager/crate-manager-operations.spec.d.ts +0 -0
  15. package/dist/crate-builder/CrateManager/crate-manager.d.ts +641 -0
  16. package/dist/crate-builder/CrateManager/crate-manager.spec.d.ts +1 -0
  17. package/dist/crate-builder/CrateManager/lib.d.ts +26 -0
  18. package/dist/crate-builder/CrateManager/lib.spec.d.ts +1 -0
  19. package/dist/crate-builder/CrateManager/profile-manager.d.ts +143 -0
  20. package/dist/crate-builder/CrateManager/profile-manager.spec.d.ts +1 -0
  21. package/dist/crate-builder/CrateManager/schema-type-definitions.json.d.ts +35125 -0
  22. package/dist/crate-builder/CrateManager/validate-identifier.d.ts +10 -0
  23. package/dist/crate-builder/CrateManager/validate-identifier.spec.d.ts +1 -0
  24. package/dist/crate-builder/RenderEntity/Add.d.ts +26 -0
  25. package/dist/crate-builder/RenderEntity/AddControl.d.ts +14 -0
  26. package/dist/crate-builder/RenderEntity/AddControl.stories.d.ts +29 -0
  27. package/dist/crate-builder/RenderEntity/AutoComplete.d.ts +12 -0
  28. package/dist/crate-builder/RenderEntity/BulkAdd.d.ts +10 -0
  29. package/dist/crate-builder/RenderEntity/DeleteProperty.d.ts +8 -0
  30. package/dist/crate-builder/RenderEntity/DialogAddProperty.d.ts +9 -0
  31. package/dist/crate-builder/RenderEntity/DialogBrowseEntities.d.ts +8 -0
  32. package/dist/crate-builder/RenderEntity/DialogEditContext.d.ts +8 -0
  33. package/dist/crate-builder/RenderEntity/DialogPreviewCrate.d.ts +7 -0
  34. package/dist/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.d.ts +13 -0
  35. package/dist/crate-builder/RenderEntity/DialogSaveEntityTemplate.d.ts +14 -0
  36. package/dist/crate-builder/RenderEntity/DisplayPropertyName.d.ts +8 -0
  37. package/dist/crate-builder/RenderEntity/DisplayPropertyName.stories.d.ts +6 -0
  38. package/dist/crate-builder/RenderEntity/EntityId.d.ts +13 -0
  39. package/dist/crate-builder/RenderEntity/EntityName.d.ts +13 -0
  40. package/dist/crate-builder/RenderEntity/EntityProperty.d.ts +19 -0
  41. package/dist/crate-builder/RenderEntity/EntityPropertyInstance.d.ts +25 -0
  42. package/dist/crate-builder/RenderEntity/EntityType.d.ts +12 -0
  43. package/dist/crate-builder/RenderEntity/ItemLink.d.ts +14 -0
  44. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.d.ts +23 -0
  45. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.stories.d.ts +7 -0
  46. package/dist/crate-builder/RenderEntity/PropertyHelp.d.ts +6 -0
  47. package/dist/crate-builder/RenderEntity/RenderControls.d.ts +22 -0
  48. package/dist/crate-builder/RenderEntity/RenderLinkedItem.d.ts +20 -0
  49. package/dist/crate-builder/RenderEntity/RenderPropertyHelp.d.ts +6 -0
  50. package/dist/crate-builder/RenderEntity/RenderReverseConnections.d.ts +16 -0
  51. package/dist/crate-builder/RenderEntity/RenderTypes.d.ts +6 -0
  52. package/dist/crate-builder/RenderEntity/Shell2.d.ts +14 -0
  53. package/dist/crate-builder/RenderEntity/UnlinkEntity.d.ts +14 -0
  54. package/dist/crate-builder/RenderEntity/auto-complete.lib.d.ts +25 -0
  55. package/dist/crate-builder/RenderEntity/keys.d.ts +4 -0
  56. package/dist/crate-builder/RenderEntity/layout.d.ts +14 -0
  57. package/dist/crate-builder/RenderEntity/layout.spec.d.ts +1 -0
  58. package/dist/crate-builder/Shell.d.ts +40 -0
  59. package/dist/crate-builder/editor-state.d.ts +72 -0
  60. package/dist/crate-builder/helpers.d.ts +9 -0
  61. package/dist/crate-builder/i18n.d.ts +2 -0
  62. package/dist/crate-builder/lib/validate-iri.d.ts +6 -0
  63. package/dist/crate-builder/locales/en.d.ts +79 -0
  64. package/dist/crate-builder/locales/hu.d.ts +79 -0
  65. package/dist/crate-builder/primitives/Boolean.d.ts +11 -0
  66. package/dist/crate-builder/primitives/Boolean.stories.d.ts +7 -0
  67. package/dist/crate-builder/primitives/Date.d.ts +11 -0
  68. package/dist/crate-builder/primitives/Date.stories.d.ts +5 -0
  69. package/dist/crate-builder/primitives/DateTime.d.ts +11 -0
  70. package/dist/crate-builder/primitives/DateTime.stories.d.ts +5 -0
  71. package/dist/crate-builder/primitives/Geo.d.ts +12 -0
  72. package/dist/crate-builder/primitives/Geo.stories.d.ts +26 -0
  73. package/dist/crate-builder/primitives/Map.SelectArea.d.ts +9 -0
  74. package/dist/crate-builder/primitives/Map.d.ts +15 -0
  75. package/dist/crate-builder/primitives/Map.stories.d.ts +6 -0
  76. package/dist/crate-builder/primitives/Number.d.ts +16 -0
  77. package/dist/crate-builder/primitives/Number.stories.d.ts +10 -0
  78. package/dist/crate-builder/primitives/Select.d.ts +15 -0
  79. package/dist/crate-builder/primitives/Select.stories.d.ts +9 -0
  80. package/dist/crate-builder/primitives/SelectObject.d.ts +13 -0
  81. package/dist/crate-builder/primitives/SelectObject.stories.d.ts +5 -0
  82. package/dist/crate-builder/primitives/SelectUrl.d.ts +14 -0
  83. package/dist/crate-builder/primitives/SelectUrl.stories.d.ts +7 -0
  84. package/dist/crate-builder/primitives/Text.d.ts +19 -0
  85. package/dist/crate-builder/primitives/Text.stories.d.ts +13 -0
  86. package/dist/crate-builder/primitives/Time.d.ts +11 -0
  87. package/dist/crate-builder/primitives/Time.stories.d.ts +7 -0
  88. package/dist/crate-builder/primitives/Url.d.ts +11 -0
  89. package/dist/crate-builder/primitives/Url.stories.d.ts +7 -0
  90. package/dist/crate-builder/primitives/Value.d.ts +7 -0
  91. package/dist/crate-builder/primitives/Value.stories.d.ts +7 -0
  92. package/dist/crate-builder/primitives/date-libs.d.ts +1 -0
  93. package/dist/crate-builder/property-definitions.d.ts +78 -0
  94. package/dist/crate-builder/store.d.ts +8 -0
  95. package/dist/favicon.ico +0 -0
  96. package/dist/index.d.ts +3 -0
  97. package/dist/index.html +43 -0
  98. package/dist/logo192.png +0 -0
  99. package/dist/logo512.png +0 -0
  100. package/dist/manifest.json +25 -0
  101. package/dist/marker-icon.png +0 -0
  102. package/dist/marker-shadow.png +0 -0
  103. package/dist/recrate.es.js +158699 -0
  104. package/dist/recrate.umd.js +158717 -0
  105. package/dist/robots.txt +3 -0
  106. package/dist/style.css +1721 -0
  107. package/dist/types.d.ts +42 -0
  108. package/docker-compose.yml +30 -0
  109. package/docs/.nojekyll +1 -0
  110. package/docs/assets/highlight.css +99 -0
  111. package/docs/assets/icons.js +18 -0
  112. package/docs/assets/icons.svg +1 -0
  113. package/docs/assets/main.js +60 -0
  114. package/docs/assets/navigation.js +1 -0
  115. package/docs/assets/search.js +1 -0
  116. package/docs/assets/style.css +1448 -0
  117. package/docs/classes/src_crate_builder_CrateManager_crate_manager.CrateManager.html +240 -0
  118. package/docs/classes/src_crate_builder_CrateManager_profile_manager.ProfileManager.html +42 -0
  119. package/docs/classes/src_crate_builder_editor_state.EditorState.html +28 -0
  120. package/docs/classes/src_crate_builder_types.CrateManagerType.html +57 -0
  121. package/docs/classes/src_crate_builder_types.ProfileManagerType.html +13 -0
  122. package/docs/functions/src_crate_builder_CrateManager_lib.isURL.html +2 -0
  123. package/docs/functions/src_crate_builder_CrateManager_lib.mintNewCrate.html +3 -0
  124. package/docs/functions/src_crate_builder_CrateManager_lib.normalise.html +5 -0
  125. package/docs/functions/src_crate_builder_CrateManager_lib.normaliseEntityType.html +1 -0
  126. package/docs/index.html +58 -0
  127. package/docs/interfaces/src_crate_builder_types.NormalisedCrate.html +3 -0
  128. package/docs/interfaces/src_crate_builder_types.NormalisedEntityDefinition.html +4 -0
  129. package/docs/interfaces/src_crate_builder_types.NormalisedProfile.html +9 -0
  130. package/docs/interfaces/src_crate_builder_types.ProfileLayout.html +2 -0
  131. package/docs/interfaces/src_crate_builder_types.ProfileLayoutGroup.html +9 -0
  132. package/docs/interfaces/src_crate_builder_types.UnverifiedCrate.html +3 -0
  133. package/docs/interfaces/src_crate_builder_types.UnverifiedEntityDefinition.html +4 -0
  134. package/docs/modules/src_crate_builder_CrateManager_crate_manager.html +2 -0
  135. package/docs/modules/src_crate_builder_CrateManager_lib.html +6 -0
  136. package/docs/modules/src_crate_builder_CrateManager_profile_manager.html +2 -0
  137. package/docs/modules/src_crate_builder_editor_state.html +2 -0
  138. package/docs/modules/src_crate_builder_types.html +16 -0
  139. package/docs/types/src_crate_builder_types.EntityReference.html +1 -0
  140. package/docs/types/src_crate_builder_types.NormalisedContext.html +1 -0
  141. package/docs/types/src_crate_builder_types.PrimitiveType.html +1 -0
  142. package/docs/types/src_crate_builder_types.ProfileAssociation.html +1 -0
  143. package/docs/types/src_crate_builder_types.ProfileInput.html +1 -0
  144. package/docs/types/src_crate_builder_types.UnverifiedContext.html +1 -0
  145. package/docs/variables/src_crate_builder_CrateManager_lib.urlProtocols.html +1 -0
  146. package/index.html +13 -0
  147. package/load-data-packs.cjs +38 -0
  148. package/package.json +135 -0
  149. package/postcss.config.cjs +6 -0
  150. package/public/favicon.ico +0 -0
  151. package/public/index.html +43 -0
  152. package/public/logo192.png +0 -0
  153. package/public/logo512.png +0 -0
  154. package/public/manifest.json +25 -0
  155. package/public/marker-icon.png +0 -0
  156. package/public/marker-shadow.png +0 -0
  157. package/public/robots.txt +3 -0
  158. package/react-app-env.d.ts +1 -0
  159. package/rollup.config.js +26 -0
  160. package/src/app/App.tsx +13 -0
  161. package/src/app/EmbeddedComponent.tsx +432 -0
  162. package/src/app/index.html +20 -0
  163. package/src/app/index.tsx +19 -0
  164. package/src/app/lookup.ts +141 -0
  165. package/src/app/override-styles.css +96 -0
  166. package/src/crate-builder/CrateManager/contexts/1.1-context.jsonld +2660 -0
  167. package/src/crate-builder/CrateManager/contexts/1.2-DRAFT-context.jsonld +2918 -0
  168. package/src/crate-builder/CrateManager/contexts.ts +42 -0
  169. package/src/crate-builder/CrateManager/crate-manager-benchmarking.spec.ts +31 -0
  170. package/src/crate-builder/CrateManager/crate-manager-loading-exporting.spec.ts +431 -0
  171. package/src/crate-builder/CrateManager/crate-manager-operations.spec.ts +298 -0
  172. package/src/crate-builder/CrateManager/crate-manager.spec.ts +2336 -0
  173. package/src/crate-builder/CrateManager/crate-manager.ts +2111 -0
  174. package/src/crate-builder/CrateManager/lib.spec.ts +133 -0
  175. package/src/crate-builder/CrateManager/lib.ts +170 -0
  176. package/src/crate-builder/CrateManager/profile-manager.spec.ts +593 -0
  177. package/src/crate-builder/CrateManager/profile-manager.ts +367 -0
  178. package/src/crate-builder/CrateManager/schema-type-definitions.json +35122 -0
  179. package/src/crate-builder/CrateManager/validate-identifier.spec.ts +82 -0
  180. package/src/crate-builder/CrateManager/validate-identifier.ts +65 -0
  181. package/src/crate-builder/RenderEntity/Add.tsx +249 -0
  182. package/src/crate-builder/RenderEntity/AddControl.stories.tsx +126 -0
  183. package/src/crate-builder/RenderEntity/AddControl.tsx +84 -0
  184. package/src/crate-builder/RenderEntity/AutoComplete.tsx +215 -0
  185. package/src/crate-builder/RenderEntity/BulkAdd.tsx +136 -0
  186. package/src/crate-builder/RenderEntity/DeleteProperty.tsx +33 -0
  187. package/src/crate-builder/RenderEntity/DialogAddProperty.tsx +83 -0
  188. package/src/crate-builder/RenderEntity/DialogBrowseEntities.tsx +136 -0
  189. package/src/crate-builder/RenderEntity/DialogEditContext.tsx +107 -0
  190. package/src/crate-builder/RenderEntity/DialogPreviewCrate.tsx +54 -0
  191. package/src/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.tsx +65 -0
  192. package/src/crate-builder/RenderEntity/DialogSaveEntityTemplate.tsx +87 -0
  193. package/src/crate-builder/RenderEntity/DisplayPropertyName.stories.tsx +30 -0
  194. package/src/crate-builder/RenderEntity/DisplayPropertyName.tsx +21 -0
  195. package/src/crate-builder/RenderEntity/EntityId.tsx +75 -0
  196. package/src/crate-builder/RenderEntity/EntityName.tsx +49 -0
  197. package/src/crate-builder/RenderEntity/EntityProperty.tsx +188 -0
  198. package/src/crate-builder/RenderEntity/EntityPropertyInstance.tsx +255 -0
  199. package/src/crate-builder/RenderEntity/EntityType.tsx +95 -0
  200. package/src/crate-builder/RenderEntity/ItemLink.tsx +37 -0
  201. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.stories.tsx +43 -0
  202. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.tsx +141 -0
  203. package/src/crate-builder/RenderEntity/PropertyHelp.tsx +39 -0
  204. package/src/crate-builder/RenderEntity/RenderControls.tsx +278 -0
  205. package/src/crate-builder/RenderEntity/RenderLinkedItem.tsx +139 -0
  206. package/src/crate-builder/RenderEntity/RenderPropertyHelp.tsx +41 -0
  207. package/src/crate-builder/RenderEntity/RenderReverseConnections.tsx +150 -0
  208. package/src/crate-builder/RenderEntity/RenderTypes.tsx +102 -0
  209. package/src/crate-builder/RenderEntity/Shell2.tsx +576 -0
  210. package/src/crate-builder/RenderEntity/UnlinkEntity.tsx +30 -0
  211. package/src/crate-builder/RenderEntity/auto-complete.lib.ts +184 -0
  212. package/src/crate-builder/RenderEntity/keys.ts +4 -0
  213. package/src/crate-builder/RenderEntity/layout.spec.js +593 -0
  214. package/src/crate-builder/RenderEntity/layout.ts +220 -0
  215. package/src/crate-builder/Shell.tsx +323 -0
  216. package/src/crate-builder/component.css +65 -0
  217. package/src/crate-builder/editor-state.ts +114 -0
  218. package/src/crate-builder/helpers.ts +16 -0
  219. package/src/crate-builder/i18n.ts +22 -0
  220. package/src/crate-builder/lib/validate-iri.js +69 -0
  221. package/src/crate-builder/lib/validate-iri.ts +57 -0
  222. package/src/crate-builder/locales/en.js +149 -0
  223. package/src/crate-builder/locales/hu.js +147 -0
  224. package/src/crate-builder/primitives/Boolean.stories.tsx +33 -0
  225. package/src/crate-builder/primitives/Boolean.tsx +67 -0
  226. package/src/crate-builder/primitives/Date.stories.tsx +32 -0
  227. package/src/crate-builder/primitives/Date.tsx +58 -0
  228. package/src/crate-builder/primitives/DateTime.stories.tsx +32 -0
  229. package/src/crate-builder/primitives/DateTime.tsx +64 -0
  230. package/src/crate-builder/primitives/Geo.stories.tsx +57 -0
  231. package/src/crate-builder/primitives/Geo.tsx +225 -0
  232. package/src/crate-builder/primitives/Map.SelectArea.js +359 -0
  233. package/src/crate-builder/primitives/Map.stories.tsx +61 -0
  234. package/src/crate-builder/primitives/Map.tsx +124 -0
  235. package/src/crate-builder/primitives/Number.stories.tsx +74 -0
  236. package/src/crate-builder/primitives/Number.tsx +166 -0
  237. package/src/crate-builder/primitives/Select.stories.tsx +66 -0
  238. package/src/crate-builder/primitives/Select.tsx +122 -0
  239. package/src/crate-builder/primitives/SelectObject.stories.tsx +29 -0
  240. package/src/crate-builder/primitives/SelectObject.tsx +105 -0
  241. package/src/crate-builder/primitives/SelectUrl.stories.tsx +42 -0
  242. package/src/crate-builder/primitives/SelectUrl.tsx +110 -0
  243. package/src/crate-builder/primitives/Text.stories.tsx +106 -0
  244. package/src/crate-builder/primitives/Text.tsx +197 -0
  245. package/src/crate-builder/primitives/Time.stories.tsx +38 -0
  246. package/src/crate-builder/primitives/Time.tsx +71 -0
  247. package/src/crate-builder/primitives/Url.stories.tsx +43 -0
  248. package/src/crate-builder/primitives/Url.tsx +75 -0
  249. package/src/crate-builder/primitives/Value.stories.tsx +37 -0
  250. package/src/crate-builder/primitives/Value.tsx +30 -0
  251. package/src/crate-builder/primitives/date-libs.ts +12 -0
  252. package/src/crate-builder/profile-schema.json +145 -0
  253. package/src/crate-builder/property-definitions.ts +78 -0
  254. package/src/crate-builder/store.ts +14 -0
  255. package/src/crate-builder/tailwind.css +7 -0
  256. package/src/crate-builder/types.d.ts +318 -0
  257. package/src/examples/collection/collections-entity-example.json +131 -0
  258. package/src/examples/collection/crate-builder-entity-example.json +33 -0
  259. package/src/examples/item/complex-collection/ro-crate-metadata.json +174 -0
  260. package/src/examples/item/complex-item/ro-crate-metadata.json +769 -0
  261. package/src/examples/item/crate-with-language.json +38 -0
  262. package/src/examples/item/empty/ro-crate-metadata.json +20 -0
  263. package/src/examples/item/item-with-relationship-and-action/ro-crate-metadata.json +66 -0
  264. package/src/examples/item/large-crate/ro-crate-metadata.json +5762 -0
  265. package/src/examples/item/multiple-types/ro-crate-metadata.json +20 -0
  266. package/src/examples/item/ridiculously-big-collection/ro-crate-metadata.json +162977 -0
  267. package/src/examples/profile/aroma.complex.profile.json +11098 -0
  268. package/src/examples/profile/aroma.profile.json +9158 -0
  269. package/src/examples/profile/nyingarn-item-profile.json +426 -0
  270. package/src/examples/profile/profile-to-test-inverse-associations.json +73 -0
  271. package/src/examples/profile/profile-to-test-multiple-types.json +31 -0
  272. package/src/examples/profile/profile-with-all-primitives-and-groups.json +207 -0
  273. package/src/examples/profile/profile-with-all-primitives.json +244 -0
  274. package/src/examples/profile/profile-with-constraints.json +446 -0
  275. package/src/examples/profile/profile-with-resolve.json +57 -0
  276. package/src/examples/profile/vocabulary-creation-profile.json +231 -0
  277. package/src/images.d.ts +5 -0
  278. package/src/index.ts +10 -0
  279. package/src/types.ts +104 -0
  280. package/tailwind.config.js +20 -0
  281. package/tsconfig.app.json +31 -0
  282. package/tsconfig.json +26 -0
  283. package/typedoc.json +11 -0
  284. package/update-deps.sh +4 -0
  285. package/vite-env.d.ts +1 -0
  286. package/vite.config.ts +41 -0
@@ -0,0 +1,114 @@
1
+ interface State {
2
+ id: string;
3
+ [key: string]: any; // Add index signature to allow dynamic properties
4
+ }
5
+
6
+ /**
7
+ * @class
8
+ *
9
+ * EditorState
10
+ *
11
+ * A class to work with the internal editor state of the component
12
+ *
13
+ */
14
+ export class EditorState {
15
+ history: State[];
16
+ current: number;
17
+ constructor() {
18
+ this.history = [];
19
+ this.current = 0;
20
+ }
21
+
22
+ /**
23
+ * Reset the internal state
24
+ */
25
+ reset() {
26
+ this.history = [];
27
+ this.current = 0;
28
+ }
29
+
30
+ /**
31
+ * Push a new state onto the history stack
32
+ *
33
+ * A new state is an entry with the id of the currently displayed entity.
34
+ *
35
+ * @param {Object} options
36
+ * @param {String} options.id - the id of the entity that is currently displayed
37
+ */
38
+ push({ id }: State) {
39
+ if (!id) return;
40
+ if (this.history.length - 1 > this.current) {
41
+ this.history = this.history.slice(0, this.current + 1);
42
+ }
43
+ this.history = [...this.history, { id }];
44
+ this.current = this.history.length - 1;
45
+ }
46
+
47
+ /**
48
+ * Go back through the state
49
+ */
50
+ back() {
51
+ if (this.current === 0) return;
52
+ this.current -= 1;
53
+ }
54
+
55
+ /**
56
+ * Go forward through the state
57
+ */
58
+ forward() {
59
+ if (this.current === this.history.length - 1) return;
60
+ this.current += 1;
61
+ }
62
+
63
+ /**
64
+ * Return the current entry
65
+ */
66
+ latest() {
67
+ return this.history[this.current];
68
+ }
69
+
70
+ /**
71
+ * Update the current entry
72
+ *
73
+ * @param {Object} an object to be merged into the current entry
74
+ */
75
+ update(newState: State) {
76
+ this.history[this.current] = { ...this.history[this.current], ...newState };
77
+ }
78
+
79
+ /**
80
+ * Delete a property from the current entry
81
+ *
82
+ * @param {Object} object
83
+ * @param {String} object.property - the property to remove from the current entry
84
+ */
85
+ deleteFromState({ property }: { property: string }) {
86
+ delete (this.history as any)[this.current][property];
87
+ }
88
+
89
+ /**
90
+ * Replace an id in the state
91
+ *
92
+ * When we change an entity id, we also need to update the history
93
+ * so we don't try to navigate back to a non-existent entity
94
+ *
95
+ * @param {Object} object
96
+ * @param {String} object.id - the id to replace
97
+ * @param {String} object.newId - the replacement
98
+ */
99
+ replaceId({ id, newId }: { id: string; newId: string }) {
100
+ // remove the latest history entry
101
+ // if we don't do this, we end up with a duplicate
102
+ this.history = this.history.slice(0, -1);
103
+ this.current = this.history.length - 1;
104
+
105
+ // updating the rest of the history
106
+ this.history = this.history.map((e, i) => {
107
+ if (e.id === id) {
108
+ return { ...e, id: newId };
109
+ } else {
110
+ return e;
111
+ }
112
+ });
113
+ }
114
+ }
@@ -0,0 +1,16 @@
1
+ import Ajv from "ajv";
2
+ import profileSchema from "./profile-schema.json";
3
+
4
+ export function validateProfile(profile: any) {
5
+ const ajv = new Ajv();
6
+ const validate = ajv.compile(profileSchema);
7
+ let valid = validate(profile);
8
+ if (!valid) {
9
+ return {
10
+ valid,
11
+ description: `Structural issues have been found in the profile.`,
12
+ data: validate.errors,
13
+ };
14
+ }
15
+ return { valid };
16
+ }
@@ -0,0 +1,22 @@
1
+ import i18next from "i18next";
2
+ import { initReactI18next } from "react-i18next";
3
+ import en from "./locales/en.js";
4
+ import hu from "./locales/hu.js";
5
+
6
+ // Initialize i18next with React integration
7
+ i18next
8
+ .use(initReactI18next) // This line connects i18next with React
9
+ .init({
10
+ debug: false,
11
+ resources: {
12
+ en,
13
+ hu,
14
+ },
15
+ lng: "en", // Default language
16
+ fallbackLng: "en",
17
+ interpolation: {
18
+ escapeValue: false // React already escapes values
19
+ }
20
+ });
21
+
22
+ export default i18next;
@@ -0,0 +1,69 @@
1
+ var __getOwnPropNames = Object.getOwnPropertyNames;
2
+ var __commonJS = (cb, mod) => function __require() {
3
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
4
+ };
5
+
6
+ // node_modules/validate-iri/lib/Validate.js
7
+ var require_Validate = __commonJS({
8
+ "node_modules/validate-iri/lib/Validate.js"(exports) {
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.validateIri = exports.IriValidationStrategy = void 0;
11
+ function buildAbsoluteIriRfc3987Regex() {
12
+ const sub_delims_raw = `!$&'()*+,;=`;
13
+ const sub_delims = `[${sub_delims_raw}]`;
14
+ const pct_encoded = `%[a-fA-F0-9]{2}`;
15
+ const dec_octet = "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
16
+ const ipv4address = `${dec_octet}\\.${dec_octet}\\.${dec_octet}\\.${dec_octet}`;
17
+ const h16 = `[a-fA-F0-9]{1,4}`;
18
+ const ls32 = `(${h16}:${h16}|${ipv4address})`;
19
+ const ipv6address = `((${h16}:){6}${ls32}|::(${h16}:){5}${ls32}|(${h16})?::(${h16}:){4}${ls32}|((${h16}:){0,1}${h16})?::(${h16}:){3}${ls32}|((${h16}:){0,2}${h16})?::(${h16}:){2}${ls32}|((${h16}:){0,3}${h16})?::${h16}:${ls32}|((${h16}:){0,4}${h16})?::${ls32}|((${h16}:){0,5}${h16})?::${h16}|((${h16}:){0,6}${h16})?::)`;
20
+ const ipvfuture = `v[a-fA-F0-9]+\\.(${sub_delims}|${sub_delims}|":)+`;
21
+ const ip_literal = `\\[(${ipv6address}|${ipvfuture})\\]`;
22
+ const port = `[0-9]*`;
23
+ const scheme = `[a-zA-Z][a-zA-Z0-9+\\-.]*`;
24
+ const iprivate_raw = `\uE000-\uF8FF\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}`;
25
+ const iprivate = `[${iprivate_raw}]`;
26
+ const ucschar_raw = `\xA0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}`;
27
+ const iunreserved_raw = `a-zA-Z0-9\\-._~${ucschar_raw}`;
28
+ const iunreserved = `[${iunreserved_raw}]`;
29
+ const ipchar = `(${iunreserved}|${pct_encoded}|${sub_delims}|[:@])*`;
30
+ const ifragment = `(${ipchar}|[\\/?])*`;
31
+ const iquery = `(${ipchar}|${iprivate}|[\\/?])*`;
32
+ const isegment_nz = `(${ipchar})+`;
33
+ const isegment = `(${ipchar})*`;
34
+ const ipath_empty = "";
35
+ const ipath_rootless = `${isegment_nz}(\\/${isegment})*`;
36
+ const ipath_absolute = `\\/(${isegment_nz}(\\/${isegment})*)?`;
37
+ const ipath_abempty = `(\\/${isegment})*`;
38
+ const ireg_name = `(${iunreserved}|${pct_encoded}|${sub_delims})*`;
39
+ const ihost = `(${ip_literal}|${ipv4address}|${ireg_name})`;
40
+ const iuserinfo = `(${iunreserved}|${pct_encoded}|${sub_delims}|:)*`;
41
+ const iauthority = `(${iuserinfo}@)?${ihost}(:${port})?`;
42
+ const ihier_part = `(\\/\\/${iauthority}${ipath_abempty}|${ipath_absolute}|${ipath_rootless}|${ipath_empty})`;
43
+ const iri = `^${scheme}:${ihier_part}(\\?${iquery})?(#${ifragment})?$`;
44
+ return new RegExp(iri, "u");
45
+ }
46
+ var STRICT_IRI_REGEX = buildAbsoluteIriRfc3987Regex();
47
+ var PRAGMATIC_IRI_REGEX = /^[A-Za-z][\d+-.A-Za-z]*:[^\u0000-\u0020"<>\\^`{|}]*$/u;
48
+ var IriValidationStrategy;
49
+ (function(IriValidationStrategy2) {
50
+ IriValidationStrategy2["Strict"] = "strict";
51
+ IriValidationStrategy2["Pragmatic"] = "pragmatic";
52
+ IriValidationStrategy2["None"] = "none";
53
+ })(IriValidationStrategy = exports.IriValidationStrategy || (exports.IriValidationStrategy = {}));
54
+ function validateIri(iri, strategy = IriValidationStrategy.Strict) {
55
+ switch (strategy) {
56
+ case IriValidationStrategy.Strict:
57
+ return STRICT_IRI_REGEX.test(iri) ? void 0 : new Error(`Invalid IRI according to RFC 3987: '${iri}'`);
58
+ case IriValidationStrategy.Pragmatic:
59
+ return PRAGMATIC_IRI_REGEX.test(iri) ? void 0 : new Error(`Invalid IRI according to RDF Turtle: '${iri}'`);
60
+ case IriValidationStrategy.None:
61
+ return void 0;
62
+ default:
63
+ return new Error(`Not supported validation strategy "${strategy}"`);
64
+ }
65
+ }
66
+ exports.validateIri = validateIri;
67
+ }
68
+ });
69
+ export default require_Validate();
@@ -0,0 +1,57 @@
1
+ export enum IriValidationStrategy {
2
+ Strict = 'strict',
3
+ Pragmatic = 'pragmatic',
4
+ None = 'none'
5
+ }
6
+
7
+ function buildAbsoluteIriRfc3987Regex(): RegExp {
8
+ const sub_delims_raw = `!$&'()*+,;=`;
9
+ const sub_delims = `[${sub_delims_raw}]`;
10
+ const pct_encoded = `%[a-fA-F0-9]{2}`;
11
+ const dec_octet = "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
12
+ const ipv4address = `${dec_octet}\\.${dec_octet}\\.${dec_octet}\\.${dec_octet}`;
13
+ const h16 = `[a-fA-F0-9]{1,4}`;
14
+ const ls32 = `(${h16}:${h16}|${ipv4address})`;
15
+ const ipv6address = `((${h16}:){6}${ls32}|::(${h16}:){5}${ls32}|(${h16})?::(${h16}:){4}${ls32}|((${h16}:){0,1}${h16})?::(${h16}:){3}${ls32}|((${h16}:){0,2}${h16})?::(${h16}:){2}${ls32}|((${h16}:){0,3}${h16})?::${h16}:${ls32}|((${h16}:){0,4}${h16})?::${ls32}|((${h16}:){0,5}${h16})?::${h16}|((${h16}:){0,6}${h16})?::)`;
16
+ const ipvfuture = `v[a-fA-F0-9]+\\.(${sub_delims}|${sub_delims}|":)+`;
17
+ const ip_literal = `\\[(${ipv6address}|${ipvfuture})\\]`;
18
+ const port = `[0-9]*`;
19
+ const scheme = `[a-zA-Z][a-zA-Z0-9+\\-.]*`;
20
+ const iprivate_raw = `\uE000-\uF8FF\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}`;
21
+ const iprivate = `[${iprivate_raw}]`;
22
+ const ucschar_raw = `\xA0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}`;
23
+ const iunreserved_raw = `a-zA-Z0-9\\-._~${ucschar_raw}`;
24
+ const iunreserved = `[${iunreserved_raw}]`;
25
+ const ipchar = `(${iunreserved}|${pct_encoded}|${sub_delims}|[:@])*`;
26
+ const ifragment = `(${ipchar}|[\\/?])*`;
27
+ const iquery = `(${ipchar}|${iprivate}|[\\/?])*`;
28
+ const isegment_nz = `(${ipchar})+`;
29
+ const isegment = `(${ipchar})*`;
30
+ const ipath_empty = "";
31
+ const ipath_rootless = `${isegment_nz}(\\/${isegment})*`;
32
+ const ipath_absolute = `\\/(${isegment_nz}(\\/${isegment})*)?`;
33
+ const ipath_abempty = `(\\/${isegment})*`;
34
+ const ireg_name = `(${iunreserved}|${pct_encoded}|${sub_delims})*`;
35
+ const ihost = `(${ip_literal}|${ipv4address}|${ireg_name})`;
36
+ const iuserinfo = `(${iunreserved}|${pct_encoded}|${sub_delims}|:)*`;
37
+ const iauthority = `(${iuserinfo}@)?${ihost}(:${port})?`;
38
+ const ihier_part = `(\\/\\/${iauthority}${ipath_abempty}|${ipath_absolute}|${ipath_rootless}|${ipath_empty})`;
39
+ const iri = `^${scheme}:${ihier_part}(\\?${iquery})?(#${ifragment})?$`;
40
+ return new RegExp(iri, "u");
41
+ }
42
+
43
+ const STRICT_IRI_REGEX = buildAbsoluteIriRfc3987Regex();
44
+ const PRAGMATIC_IRI_REGEX = /^[A-Za-z][\d+-.A-Za-z]*:[^\u0000-\u0020"<>\\^`{|}]*$/;
45
+
46
+ export function validateIri(iri: string, strategy: IriValidationStrategy = IriValidationStrategy.Strict): Error | undefined {
47
+ switch (strategy) {
48
+ case IriValidationStrategy.Strict:
49
+ return STRICT_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RFC 3987: '${iri}'`);
50
+ case IriValidationStrategy.Pragmatic:
51
+ return PRAGMATIC_IRI_REGEX.test(iri) ? undefined : new Error(`Invalid IRI according to RDF Turtle: '${iri}'`);
52
+ case IriValidationStrategy.None:
53
+ return undefined;
54
+ default:
55
+ return new Error(`Not supported validation strategy "${strategy}"`);
56
+ }
57
+ }
@@ -0,0 +1,149 @@
1
+ const en = {
2
+ translation: {
3
+ hello_one: "hello world",
4
+ hello_other: "hello worlds",
5
+
6
+ // RenderControls.component.vue
7
+ root_dataset_label: "Root dataset",
8
+ add_label: "Add",
9
+ edit_context_label: "Edit context",
10
+ preview_label: "Preview",
11
+ browse_entities_label: "Browse entities",
12
+ save_crate_as_template_label: "Save Crate as Template",
13
+ save_entity_template_label: "Save Entity Template",
14
+ delete_entity_label: "Delete Entity",
15
+ are_you_sure_to_delete: "Are you sure you want to delete this entity?",
16
+ are_you_sure_to_delete_yes: "Yes",
17
+ are_you_sure_to_delete_no: "No",
18
+ add_properties_to_this_entity: "Add properties to this entity",
19
+ edit_context: "Edit Context",
20
+ preview_crate: "Preview Crate",
21
+ browse_entities: "Browse entities",
22
+
23
+ // DialogAddProperty.component.vue
24
+ filter_attribute_set: "Filter the attribute set",
25
+
26
+ // DialogEditContext.component.vue
27
+ save_label: "Save",
28
+
29
+ // DialogPreviewCrate.component.vue
30
+ preview_loading: "loading ...",
31
+
32
+ // DialogBrowseEntities.component.vue
33
+ search_for_connection: "Search for a connection",
34
+ filter_by_type: "Filter by type",
35
+
36
+ // DialogSaveCrateAsTemplate.component.vue
37
+ save_template_prompt: "Save this crate as a template for re-use",
38
+ provide_name_for_template: "provide a name for the crate template",
39
+
40
+ // RenderEntityName.component.vue
41
+ name_field_label: "Name",
42
+ name_field_help: "A short, descriptive name for this item.",
43
+
44
+ // Add.component.vue
45
+ associate_existing_prompt:
46
+ "Associate an existing '{{addType}}' (lookup by identifier or name) or create a new '{{addType}}' by typing a name for it.",
47
+ associate_any_prompt: "Associate any entity (lookup by identifier or name).",
48
+ add_text: "Add text",
49
+
50
+ // Text.component.vue
51
+ invalid_type_for_text:
52
+ "The type '{{type}}' is not valid for this component. It can only be 'text' or 'textarea'",
53
+ text_constraints_error_message:
54
+ "The specified value does not meet the following constraints: {{- value}}, or it is considered invalid.",
55
+
56
+ // Date.component.vue
57
+ pick_a_date: "Pick a date",
58
+ invalid_date_value:
59
+ "The supplied date '{{value}}' is invalid. Date format is: YYYY-MM-DD or an ISO String. e.g. 2021-03-22 or 2022-09-28T02:20:56.521Z.",
60
+
61
+ // DateTime.component.vue
62
+ pick_a_datetime: "Pick a date and time",
63
+ invalid_datetime_value:
64
+ "The supplied date/time '{{value}}' is invalid. Date/Time format is: YYYY-MM-DD HH:mm:ss or an ISO String. e.g. 2021-03-22 03:23:00 or 2022-09-28T02:20:56.521Z.",
65
+
66
+ // Time.component.vue
67
+ provide_time: "Please provide a time.",
68
+ invalid_time_value:
69
+ "The supplied time '{{value}}' is invalid. Time format is: HH:mm::ss. e.g. 09:03:59",
70
+
71
+ // Number.component.vue
72
+ invalid_number_value:
73
+ "The supplied number '{{value}}' is invalid. The value must be a valid number passed in as a String or a Number.",
74
+ number_constraints_error_message:
75
+ "The specified number does not meet the following constraints: {{value}}",
76
+
77
+ // Select.component.vue
78
+ select: "Select",
79
+ invalid_select_value:
80
+ "The definition provided to this component has values of the wrong from. It can only be an array of strings",
81
+
82
+ // Url.component.vue
83
+ invalid_url_value:
84
+ "The entry needs to be a valid url. The accepted protocols are: http, https, ftp, ftps and arcp.",
85
+
86
+ // Boolean.component.vue
87
+ true_label: "True",
88
+ false_label: "False",
89
+
90
+ // SelectUrl.component.vue
91
+ // select: as above
92
+ invalid_selecturl_value:
93
+ "The value '{{value}}' provided to this component is of the wrong from. It can only be a valid URL.",
94
+ invalid_selecturl_values:
95
+ "The definition provided to this component has values of the wrong from. It can only be an array of strings which are each valid URLs.",
96
+
97
+ // SelectObject.component.vue
98
+ // select: as above
99
+ invalid_selectobject_values:
100
+ "The definition provided to this component has values of the wrong from. It can only be an array of JSON-LD objects and each object, at a minimum, must have '@id', '@type' and 'name' defined.",
101
+
102
+ // Geo.component.vue
103
+ define_location: "Define a location by selecting on the map",
104
+ center_map: "center map",
105
+ select_region: "select region",
106
+ select_point: "select point",
107
+ press_shift_drag_to_select: "Press the shift key and drag the mouse to select an area",
108
+ click_on_map_to_select_point: "Click on the map to select a point",
109
+ location_name: "Location Name",
110
+ provide_name_for_location: "Please provide a name for this location - optional",
111
+ provide_name_for_location_error: "You need to provide a name for this location",
112
+ select_existing_location: "Select a location that has already been defined",
113
+
114
+ // Value.component.vue
115
+ invalid_value_value: "The supplied value '{{value}}' is invalid. It can only be a string.",
116
+
117
+ // AutoComplete.component.vue
118
+ select_existing_or_create_new: "select an existing entity or create a new one",
119
+ create_new_of_type: "Create new {{type}}",
120
+ external_lookup_timeout_error: "External Lookup Timeout",
121
+ ror_lookup_timeout_error: "ROR Lookup Timeout",
122
+ associate_existing_entity: "Associate an entity already defined in this crate",
123
+ associate_entity_from_template: "Associate an entity from saved templates",
124
+ associate_organization_from_ror:
125
+ "Associate an Organization defined in the Research Organization Registry",
126
+ associate_user_created_entity: "Associate a user created entity",
127
+ associate_from_datapack: "Associate a verified entity from a datapack",
128
+ create_new_entity: "Create new entity",
129
+
130
+ // AddControl.component.vue
131
+ select_a_type_to_add: "Select a type to add",
132
+
133
+ // EntityType.tsx
134
+ select_a_class_to_add: "Select a class to add",
135
+
136
+ // PaginateLinkedEntities.component.vue
137
+ filter_the_entities: "Filter the entities",
138
+ pagination_total: "Total: {{total}}",
139
+
140
+ // RenderEntityProperty.component.vue
141
+ not_defined_in_profile: "not defined in profile",
142
+
143
+ // RenderReverseConnections.component.vue
144
+ // search_for_connection: defined before
145
+ links_to_this_entity: "Links to this entity:",
146
+ },
147
+ };
148
+
149
+ export default en;
@@ -0,0 +1,147 @@
1
+ const hu = {
2
+ translation: {
3
+ hello_one: "szia világ",
4
+ hello_other: "sziasztok világok",
5
+
6
+ // RenderControls.component.vue
7
+ root_dataset_label: "Gyökér adatcsomag",
8
+ add_label: "Új elem",
9
+ edit_context_label: "Kontextus szerkesztése",
10
+ preview_label: "Előnézet",
11
+ browse_entities_label: "Entitás böngésző",
12
+ save_crate_as_template_label: "Mentés csomag mintaként",
13
+ save_entity_template_label: "Mentés entitás mintaként",
14
+ delete_entity_label: "Entitás törlése",
15
+ are_you_sure_to_delete: "Biztosan törölni akarja az entitást?",
16
+ are_you_sure_to_delete_yes: "Igen",
17
+ are_you_sure_to_delete_no: "Nem",
18
+ add_properties_to_this_entity: "Új adat hozzáadása az entitáshoz",
19
+ edit_context: "Kontextus szerkesztése",
20
+ preview_crate: "Csomag előnézete",
21
+ browse_entities: "Entitások böngészése",
22
+
23
+ // DialogAddProperty.component.vue
24
+ filter_attribute_set: "Attribútumok szűrése",
25
+
26
+ // DialogEditContext.component.vue
27
+ save_label: "Mentés",
28
+
29
+ // DialogPreviewCrate.component.vue
30
+ preview_loading: "betöltés ...",
31
+
32
+ // DialogBrowseEntities.component.vue
33
+ search_for_connection: "Kapcsolt entitás keresése",
34
+ filter_by_type: "Típus szerinti szűrés",
35
+ // DialogSaveCrateAsTemplate.component.vue
36
+ save_template_prompt: "Csomag mentése mintaként",
37
+ provide_name_for_template: "minta neve",
38
+
39
+ // RenderEntityName.component.vue
40
+ name_field_label: "Név",
41
+ name_field_help: "Az entitás rövid, leíró neve",
42
+
43
+ // Add.component.vue
44
+ associate_existing_prompt:
45
+ "Egy létező '{{addType}}' társítása (név vagy azonosító alapú kereséssel) vagy egy új '{{addType}}' létrehozása a név megadásával",
46
+ associate_any_prompt: "Bármely entitás hozzárendelése (azonosító vagy név alapján)",
47
+ add_text: "Szöveg hozzáadása",
48
+
49
+ // Text.component.vue
50
+ invalid_type_for_text:
51
+ "'{{type}}' típus nem használható ezzel a komponenssel. A típus csak 'text' vagy 'textarea' lehet",
52
+ text_constraints_error_message: "A megadott érték nem felel meg a következő megszorításoknak: {{- value}}, vagy érvénytelen.",
53
+
54
+ // Date.component.vue
55
+ pick_a_date: "Válassz dátumot!",
56
+ invalid_date_value:
57
+ "A megadott dátum '{{value}}' nem megfelelő. Az elvárt dátum formátum: YYYY-MM-DD vagy egy ISO dátum, pl. 2021-03-22 or 2022-09-28T02:20:56.521Z.",
58
+
59
+ // DateTime.component.vue
60
+ pick_a_datetime: "Válassz dátumot és időt!",
61
+ invalid_datetime_value:
62
+ "A megadott dátum/idő '{{value}}' nem megfelelő. Az elvárt dátum/idő formátum: YYYY-MM-DD HH:mm:ss vagy egy ISO dátum, pl. 2021-03-22 03:23:00 or 2022-09-28T02:20:56.521Z.",
63
+
64
+ // Time.component.vue
65
+ provide_time: "Add meg az időt!",
66
+ invalid_time_value:
67
+ "A megadott érték '{{value}}' nem megfelelő. Az elvárt idő formátum: HH:mm::ss. pl. 09:03:59",
68
+
69
+ // Number.component.vue
70
+ invalid_number_value:
71
+ "A megadott érték '{{value}}' nem megfelelő. Az értéket String vagy Number típusként kell megadni",
72
+ number_constraints_error_message: "A megadott szám nem felel meg a következő megszorításoknak: {{value}}",
73
+
74
+ // Select.component.vue
75
+ select: "Válassz!",
76
+ invalid_select_value:
77
+ "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak karakterláncokból álló tömb lehet.",
78
+
79
+ // Url.component.vue
80
+ invalid_url_value:
81
+ "A bejegyzésnek érvényes URL-nek kell lennie. Az elfogadott protokollok: http, https, ftp, ftps és arcp.",
82
+
83
+ // Boolean.component.vue
84
+ true_label: "Igaz",
85
+ false_label: "Hamis",
86
+
87
+ // SelectUrl.component.vue
88
+ // select: as above
89
+ invalid_selecturl_value:
90
+ "A megadott '{{value}}' érték nem megfelelő formátumú. Csak érvényes URL lehet.",
91
+ invalid_selecturl_values:
92
+ "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak olyan karakterláncokból álló tömb lehet, amelyek mindegyike érvényes URL.",
93
+
94
+ // SelectObject.component.vue
95
+ // select: as above
96
+ invalid_selectobject_values:
97
+ "A komponensnek adott definíció értékei nem megfelelő formátumban vannak. Csak JSON-LD objektumokból álló tömb lehet, és minden objektumnak legalább '@id', '@type' és 'name' meghatározással kell rendelkeznie.",
98
+
99
+ // Geo.component.vue
100
+ define_location: "Határozz meg egy helyet a térképen történő kiválasztással!",
101
+ center_map: "térkép középre állítása",
102
+ select_region: "régió kiválasztása",
103
+ select_point: "pont kiválasztása",
104
+ press_shift_drag_to_select:
105
+ "Nyomd le a shift billentyűt és húzd az egérrel, hogy kijelölj egy területet",
106
+ click_on_map_to_select_point: "Kattints a térképre, hogy kiválaszthass egy pontot",
107
+ location_name: "Hely neve",
108
+ provide_name_for_location: "Adj nevet ennek a helynek!",
109
+ provide_name_for_location_error: "A hely nevének megadása kötelező!",
110
+ select_existing_location: "Válassz egy már meghatározott helyet a csomagban!",
111
+
112
+ // Value.component.vue
113
+ invalid_value_value: "A megadott '{{value}}' érték érvénytelen. Csak karakterlánc lehet.",
114
+
115
+ // AutoComplete.component.vue
116
+ select_existing_or_create_new: "válassz egy meglévő entitást vagy hozz létre egy újat",
117
+ create_new_of_type: "Új {{type}} létrehozása",
118
+ external_lookup_timeout_error: "Külső lekérdezési időtúllépés",
119
+ ror_lookup_timeout_error: "ROR lekérdezési időtúllépés",
120
+ associate_existing_entity: "Kapcsolj egy már ebben a csomagban definiált entitást",
121
+ associate_entity_from_template: "Kapcsolj egy mentett sablonból származó entitást",
122
+ associate_organization_from_ror:
123
+ "Kapcsolj egy a Research Organization Registryben definiált szervezetet",
124
+ associate_user_created_entity: "Kapcsolj egy felhasználó által létrehozott entitást",
125
+ associate_from_datapack: "Kapcsolj egy ellenőrzött entitást egy adatcsomagból",
126
+ create_new_entity: "Új entitás létrehozása",
127
+
128
+ // AddControl.component.vue
129
+ select_a_type_to_add: "Válassz hozzáadandó típust",
130
+
131
+ // EntityType.tsx
132
+ select_a_class_to_add: "Válassz hozzáadandó osztályt",
133
+
134
+ // PaginateLinkedEntities.component.vue
135
+ filter_the_entities: "Entitások szűrése",
136
+ pagination_total: "Összesen: {{total}}",
137
+
138
+ // RenderEntityProperty.component.vue
139
+ not_defined_in_profile: "nincs definiálva a profilban",
140
+
141
+ // RenderReverseConnections.component.vue
142
+ // search_for_connection: defined before
143
+ links_to_this_entity: "Entitásra mutató hivatkozások:",
144
+ },
145
+ };
146
+
147
+ export default hu;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+ import Boolean from './Boolean';
4
+
5
+ const meta: Meta<typeof Boolean> = {
6
+ component: Boolean,
7
+ title: 'Primitives/Boolean',
8
+ argTypes: {
9
+ value: {
10
+ options: [true, false],
11
+ control: { type: 'radio' }
12
+ },
13
+ onSaveProperty: { action: 'saveProperty' }
14
+ }
15
+ };
16
+
17
+ export default meta;
18
+
19
+ type Story = StoryObj<typeof Boolean>;
20
+
21
+ export const Default: Story = {
22
+ args: {
23
+ property: 'boolean',
24
+ value: false
25
+ }
26
+ };
27
+
28
+ export const Checked: Story = {
29
+ args: {
30
+ property: 'boolean',
31
+ value: true
32
+ }
33
+ };
@@ -0,0 +1,67 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Switch, Form} from 'antd'
3
+ import { useTranslation } from 'react-i18next';
4
+ import { debounce } from 'lodash';
5
+
6
+ export interface BooleanProps {
7
+ property: string;
8
+ value?: boolean;
9
+ onSaveProperty: (data: { property: string; value: boolean }) => void;
10
+ }
11
+
12
+ const Boolean: React.FC<BooleanProps> = ({ property, value = false, onSaveProperty }) => {
13
+ // Add try-catch to handle the case when i18n is not available (like in Storybook)
14
+ let t: (key: string) => string;
15
+ try {
16
+ const i18n = useTranslation();
17
+ t = i18n.t;
18
+ } catch (e) {
19
+ // Fallback translation function if i18n is not available
20
+ t = (key: string) => key === 'true_label' ? 'True' : 'False';
21
+ }
22
+
23
+ const [internalValue, setInternalValue] = useState<boolean>(value);
24
+
25
+ // Update internal value when prop value changes
26
+ useEffect(() => {
27
+ setInternalValue(value);
28
+ }, [value]);
29
+
30
+ // Create debounced save function
31
+ const debouncedSave = React.useCallback(
32
+ debounce((newValue: boolean) => {
33
+ onSaveProperty({
34
+ property,
35
+ value: newValue
36
+ });
37
+ }, 200),
38
+ [property, onSaveProperty]
39
+ );
40
+
41
+ // Handle change
42
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
43
+ const newValue = event.target.checked;
44
+ setInternalValue(newValue);
45
+ debouncedSave(newValue);
46
+ };
47
+
48
+ return (
49
+ <div className="flex flex-col describo-property-type-boolean">
50
+ <div className="flex flex-row space-x-2">
51
+ <Form.Item
52
+ label={internalValue ? t('true_label') : t('false_label')}
53
+ >
54
+ <Switch
55
+ checked={internalValue}
56
+ onChange={(checked: boolean) => {
57
+ handleChange({ target: { checked } } as React.ChangeEvent<HTMLInputElement>);
58
+ }}
59
+ size="default"
60
+ />
61
+ </Form.Item>
62
+ </div>
63
+ </div>
64
+ );
65
+ };
66
+
67
+ export default Boolean;