@arpproject/recrate 0.1.7-test3 → 0.1.7-test6

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 (276) hide show
  1. package/dist/app/App.d.ts +2 -0
  2. package/dist/app/EmbeddedComponent.d.ts +3 -0
  3. package/dist/app/index.d.ts +0 -0
  4. package/dist/app/lookup.d.ts +82 -0
  5. package/dist/crate-builder/CrateManager/contexts.d.ts +6 -0
  6. package/dist/crate-builder/CrateManager/crate-manager-benchmarking.spec.d.ts +1 -0
  7. package/dist/crate-builder/CrateManager/crate-manager-loading-exporting.spec.d.ts +1 -0
  8. package/dist/crate-builder/CrateManager/crate-manager-operations.spec.d.ts +0 -0
  9. package/dist/crate-builder/CrateManager/crate-manager.d.ts +641 -0
  10. package/dist/crate-builder/CrateManager/crate-manager.spec.d.ts +1 -0
  11. package/dist/crate-builder/CrateManager/lib.d.ts +26 -0
  12. package/dist/crate-builder/CrateManager/lib.spec.d.ts +1 -0
  13. package/dist/crate-builder/CrateManager/profile-manager.d.ts +143 -0
  14. package/dist/crate-builder/CrateManager/profile-manager.spec.d.ts +1 -0
  15. package/{src/crate-builder/CrateManager/schema-type-definitions.json → dist/crate-builder/CrateManager/schema-type-definitions.json.d.ts} +4 -1
  16. package/dist/crate-builder/CrateManager/validate-identifier.d.ts +10 -0
  17. package/dist/crate-builder/CrateManager/validate-identifier.spec.d.ts +1 -0
  18. package/dist/crate-builder/RenderEntity/Add.d.ts +26 -0
  19. package/dist/crate-builder/RenderEntity/AddControl.d.ts +14 -0
  20. package/dist/crate-builder/RenderEntity/AddControl.stories.d.ts +29 -0
  21. package/dist/crate-builder/RenderEntity/AutoComplete.d.ts +12 -0
  22. package/dist/crate-builder/RenderEntity/BulkAdd.d.ts +10 -0
  23. package/dist/crate-builder/RenderEntity/DeleteProperty.d.ts +8 -0
  24. package/dist/crate-builder/RenderEntity/DialogAddProperty.d.ts +9 -0
  25. package/dist/crate-builder/RenderEntity/DialogBrowseEntities.d.ts +8 -0
  26. package/dist/crate-builder/RenderEntity/DialogEditContext.d.ts +8 -0
  27. package/dist/crate-builder/RenderEntity/DialogPreviewCrate.d.ts +7 -0
  28. package/dist/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.d.ts +13 -0
  29. package/dist/crate-builder/RenderEntity/DialogSaveEntityTemplate.d.ts +14 -0
  30. package/dist/crate-builder/RenderEntity/DisplayPropertyName.d.ts +8 -0
  31. package/dist/crate-builder/RenderEntity/DisplayPropertyName.stories.d.ts +6 -0
  32. package/dist/crate-builder/RenderEntity/EntityId.d.ts +13 -0
  33. package/dist/crate-builder/RenderEntity/EntityName.d.ts +13 -0
  34. package/dist/crate-builder/RenderEntity/EntityProperty.d.ts +19 -0
  35. package/dist/crate-builder/RenderEntity/EntityPropertyInstance.d.ts +25 -0
  36. package/dist/crate-builder/RenderEntity/EntityType.d.ts +12 -0
  37. package/dist/crate-builder/RenderEntity/ItemLink.d.ts +14 -0
  38. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.d.ts +23 -0
  39. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.stories.d.ts +7 -0
  40. package/dist/crate-builder/RenderEntity/PropertyHelp.d.ts +6 -0
  41. package/dist/crate-builder/RenderEntity/RenderControls.d.ts +22 -0
  42. package/dist/crate-builder/RenderEntity/RenderLinkedItem.d.ts +20 -0
  43. package/dist/crate-builder/RenderEntity/RenderPropertyHelp.d.ts +6 -0
  44. package/dist/crate-builder/RenderEntity/RenderReverseConnections.d.ts +16 -0
  45. package/dist/crate-builder/RenderEntity/RenderTypes.d.ts +6 -0
  46. package/dist/crate-builder/RenderEntity/Shell2.d.ts +14 -0
  47. package/dist/crate-builder/RenderEntity/UnlinkEntity.d.ts +14 -0
  48. package/dist/crate-builder/RenderEntity/auto-complete.lib.d.ts +25 -0
  49. package/dist/crate-builder/RenderEntity/keys.d.ts +4 -0
  50. package/dist/crate-builder/RenderEntity/layout.d.ts +14 -0
  51. package/dist/crate-builder/RenderEntity/layout.spec.d.ts +1 -0
  52. package/dist/crate-builder/Shell.d.ts +40 -0
  53. package/dist/crate-builder/editor-state.d.ts +72 -0
  54. package/dist/crate-builder/emotionCache.d.ts +1 -0
  55. package/dist/crate-builder/helpers.d.ts +9 -0
  56. package/dist/crate-builder/i18n.d.ts +2 -0
  57. package/dist/crate-builder/lib/validate-iri.d.ts +6 -0
  58. package/dist/crate-builder/locales/en.d.ts +79 -0
  59. package/dist/crate-builder/locales/hu.d.ts +79 -0
  60. package/dist/crate-builder/primitives/Boolean.d.ts +11 -0
  61. package/dist/crate-builder/primitives/Boolean.stories.d.ts +7 -0
  62. package/dist/crate-builder/primitives/Date.d.ts +11 -0
  63. package/dist/crate-builder/primitives/Date.stories.d.ts +5 -0
  64. package/dist/crate-builder/primitives/DateTime.d.ts +11 -0
  65. package/dist/crate-builder/primitives/DateTime.stories.d.ts +5 -0
  66. package/dist/crate-builder/primitives/Geo.d.ts +12 -0
  67. package/dist/crate-builder/primitives/Geo.stories.d.ts +26 -0
  68. package/dist/crate-builder/primitives/Map.SelectArea.d.ts +9 -0
  69. package/dist/crate-builder/primitives/Map.d.ts +15 -0
  70. package/dist/crate-builder/primitives/Map.stories.d.ts +6 -0
  71. package/dist/crate-builder/primitives/Number.d.ts +16 -0
  72. package/dist/crate-builder/primitives/Number.stories.d.ts +10 -0
  73. package/dist/crate-builder/primitives/Select.d.ts +15 -0
  74. package/dist/crate-builder/primitives/Select.stories.d.ts +9 -0
  75. package/dist/crate-builder/primitives/SelectObject.d.ts +13 -0
  76. package/dist/crate-builder/primitives/SelectObject.stories.d.ts +5 -0
  77. package/dist/crate-builder/primitives/SelectUrl.d.ts +14 -0
  78. package/dist/crate-builder/primitives/SelectUrl.stories.d.ts +7 -0
  79. package/dist/crate-builder/primitives/Text.d.ts +19 -0
  80. package/dist/crate-builder/primitives/Text.stories.d.ts +13 -0
  81. package/dist/crate-builder/primitives/Time.d.ts +11 -0
  82. package/dist/crate-builder/primitives/Time.stories.d.ts +7 -0
  83. package/dist/crate-builder/primitives/Url.d.ts +11 -0
  84. package/dist/crate-builder/primitives/Url.stories.d.ts +7 -0
  85. package/dist/crate-builder/primitives/Value.d.ts +7 -0
  86. package/dist/crate-builder/primitives/Value.stories.d.ts +7 -0
  87. package/dist/crate-builder/primitives/date-libs.d.ts +1 -0
  88. package/dist/crate-builder/property-definitions.d.ts +78 -0
  89. package/dist/crate-builder/store.d.ts +8 -0
  90. package/dist/index.d.ts +5 -0
  91. package/dist/recrate.css +1896 -0
  92. package/dist/recrate.es.js +38508 -0
  93. package/dist/types.d.ts +42 -0
  94. package/package.json +31 -28
  95. package/.eslintrc.json +0 -37
  96. package/.storybook/main.ts +0 -40
  97. package/.storybook/preview.tsx +0 -46
  98. package/babel.config.json +0 -5
  99. package/docker-compose.yml +0 -30
  100. package/docs/.nojekyll +0 -1
  101. package/docs/assets/highlight.css +0 -99
  102. package/docs/assets/icons.js +0 -18
  103. package/docs/assets/icons.svg +0 -1
  104. package/docs/assets/main.js +0 -60
  105. package/docs/assets/navigation.js +0 -1
  106. package/docs/assets/search.js +0 -1
  107. package/docs/assets/style.css +0 -1448
  108. package/docs/classes/src_crate_builder_CrateManager_crate_manager.CrateManager.html +0 -240
  109. package/docs/classes/src_crate_builder_CrateManager_profile_manager.ProfileManager.html +0 -42
  110. package/docs/classes/src_crate_builder_editor_state.EditorState.html +0 -28
  111. package/docs/classes/src_crate_builder_types.CrateManagerType.html +0 -57
  112. package/docs/classes/src_crate_builder_types.ProfileManagerType.html +0 -13
  113. package/docs/functions/src_crate_builder_CrateManager_lib.isURL.html +0 -2
  114. package/docs/functions/src_crate_builder_CrateManager_lib.mintNewCrate.html +0 -3
  115. package/docs/functions/src_crate_builder_CrateManager_lib.normalise.html +0 -5
  116. package/docs/functions/src_crate_builder_CrateManager_lib.normaliseEntityType.html +0 -1
  117. package/docs/index.html +0 -58
  118. package/docs/interfaces/src_crate_builder_types.NormalisedCrate.html +0 -3
  119. package/docs/interfaces/src_crate_builder_types.NormalisedEntityDefinition.html +0 -4
  120. package/docs/interfaces/src_crate_builder_types.NormalisedProfile.html +0 -9
  121. package/docs/interfaces/src_crate_builder_types.ProfileLayout.html +0 -2
  122. package/docs/interfaces/src_crate_builder_types.ProfileLayoutGroup.html +0 -9
  123. package/docs/interfaces/src_crate_builder_types.UnverifiedCrate.html +0 -3
  124. package/docs/interfaces/src_crate_builder_types.UnverifiedEntityDefinition.html +0 -4
  125. package/docs/modules/src_crate_builder_CrateManager_crate_manager.html +0 -2
  126. package/docs/modules/src_crate_builder_CrateManager_lib.html +0 -6
  127. package/docs/modules/src_crate_builder_CrateManager_profile_manager.html +0 -2
  128. package/docs/modules/src_crate_builder_editor_state.html +0 -2
  129. package/docs/modules/src_crate_builder_types.html +0 -16
  130. package/docs/types/src_crate_builder_types.EntityReference.html +0 -1
  131. package/docs/types/src_crate_builder_types.NormalisedContext.html +0 -1
  132. package/docs/types/src_crate_builder_types.PrimitiveType.html +0 -1
  133. package/docs/types/src_crate_builder_types.ProfileAssociation.html +0 -1
  134. package/docs/types/src_crate_builder_types.ProfileInput.html +0 -1
  135. package/docs/types/src_crate_builder_types.UnverifiedContext.html +0 -1
  136. package/docs/variables/src_crate_builder_CrateManager_lib.urlProtocols.html +0 -1
  137. package/index.html +0 -13
  138. package/load-data-packs.cjs +0 -38
  139. package/postcss.config.cjs +0 -6
  140. package/react-app-env.d.ts +0 -1
  141. package/rollup.config.js +0 -26
  142. package/src/app/App.tsx +0 -13
  143. package/src/app/EmbeddedComponent.tsx +0 -432
  144. package/src/app/index.html +0 -20
  145. package/src/app/index.tsx +0 -19
  146. package/src/app/lookup.ts +0 -141
  147. package/src/app/override-styles.css +0 -96
  148. package/src/crate-builder/CrateManager/contexts/1.1-context.jsonld +0 -2660
  149. package/src/crate-builder/CrateManager/contexts/1.2-DRAFT-context.jsonld +0 -2918
  150. package/src/crate-builder/CrateManager/contexts.ts +0 -42
  151. package/src/crate-builder/CrateManager/crate-manager-benchmarking.spec.ts +0 -31
  152. package/src/crate-builder/CrateManager/crate-manager-loading-exporting.spec.ts +0 -431
  153. package/src/crate-builder/CrateManager/crate-manager-operations.spec.ts +0 -298
  154. package/src/crate-builder/CrateManager/crate-manager.spec.ts +0 -2336
  155. package/src/crate-builder/CrateManager/crate-manager.ts +0 -2111
  156. package/src/crate-builder/CrateManager/lib.spec.ts +0 -133
  157. package/src/crate-builder/CrateManager/lib.ts +0 -170
  158. package/src/crate-builder/CrateManager/profile-manager.spec.ts +0 -593
  159. package/src/crate-builder/CrateManager/profile-manager.ts +0 -367
  160. package/src/crate-builder/CrateManager/validate-identifier.spec.ts +0 -82
  161. package/src/crate-builder/CrateManager/validate-identifier.ts +0 -65
  162. package/src/crate-builder/RenderEntity/Add.tsx +0 -249
  163. package/src/crate-builder/RenderEntity/AddControl.stories.tsx +0 -126
  164. package/src/crate-builder/RenderEntity/AddControl.tsx +0 -84
  165. package/src/crate-builder/RenderEntity/AutoComplete.tsx +0 -215
  166. package/src/crate-builder/RenderEntity/BulkAdd.tsx +0 -136
  167. package/src/crate-builder/RenderEntity/DeleteProperty.tsx +0 -33
  168. package/src/crate-builder/RenderEntity/DialogAddProperty.tsx +0 -83
  169. package/src/crate-builder/RenderEntity/DialogBrowseEntities.tsx +0 -136
  170. package/src/crate-builder/RenderEntity/DialogEditContext.tsx +0 -107
  171. package/src/crate-builder/RenderEntity/DialogPreviewCrate.tsx +0 -54
  172. package/src/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.tsx +0 -65
  173. package/src/crate-builder/RenderEntity/DialogSaveEntityTemplate.tsx +0 -87
  174. package/src/crate-builder/RenderEntity/DisplayPropertyName.stories.tsx +0 -30
  175. package/src/crate-builder/RenderEntity/DisplayPropertyName.tsx +0 -21
  176. package/src/crate-builder/RenderEntity/EntityId.tsx +0 -75
  177. package/src/crate-builder/RenderEntity/EntityName.tsx +0 -49
  178. package/src/crate-builder/RenderEntity/EntityProperty.tsx +0 -188
  179. package/src/crate-builder/RenderEntity/EntityPropertyInstance.tsx +0 -255
  180. package/src/crate-builder/RenderEntity/EntityType.tsx +0 -95
  181. package/src/crate-builder/RenderEntity/ItemLink.tsx +0 -37
  182. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.stories.tsx +0 -43
  183. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.tsx +0 -141
  184. package/src/crate-builder/RenderEntity/PropertyHelp.tsx +0 -39
  185. package/src/crate-builder/RenderEntity/RenderControls.tsx +0 -278
  186. package/src/crate-builder/RenderEntity/RenderLinkedItem.tsx +0 -139
  187. package/src/crate-builder/RenderEntity/RenderPropertyHelp.tsx +0 -41
  188. package/src/crate-builder/RenderEntity/RenderReverseConnections.tsx +0 -150
  189. package/src/crate-builder/RenderEntity/RenderTypes.tsx +0 -102
  190. package/src/crate-builder/RenderEntity/Shell2.tsx +0 -576
  191. package/src/crate-builder/RenderEntity/UnlinkEntity.tsx +0 -30
  192. package/src/crate-builder/RenderEntity/auto-complete.lib.ts +0 -184
  193. package/src/crate-builder/RenderEntity/keys.ts +0 -4
  194. package/src/crate-builder/RenderEntity/layout.spec.js +0 -593
  195. package/src/crate-builder/RenderEntity/layout.ts +0 -220
  196. package/src/crate-builder/Shell.tsx +0 -337
  197. package/src/crate-builder/component.css +0 -65
  198. package/src/crate-builder/editor-state.ts +0 -114
  199. package/src/crate-builder/emotionCache.ts +0 -8
  200. package/src/crate-builder/helpers.ts +0 -16
  201. package/src/crate-builder/i18n.ts +0 -22
  202. package/src/crate-builder/lib/validate-iri.ts +0 -57
  203. package/src/crate-builder/locales/en.js +0 -149
  204. package/src/crate-builder/locales/hu.js +0 -147
  205. package/src/crate-builder/primitives/Boolean.stories.tsx +0 -33
  206. package/src/crate-builder/primitives/Boolean.tsx +0 -67
  207. package/src/crate-builder/primitives/Date.stories.tsx +0 -32
  208. package/src/crate-builder/primitives/Date.tsx +0 -58
  209. package/src/crate-builder/primitives/DateTime.stories.tsx +0 -32
  210. package/src/crate-builder/primitives/DateTime.tsx +0 -64
  211. package/src/crate-builder/primitives/Geo.stories.tsx +0 -57
  212. package/src/crate-builder/primitives/Geo.tsx +0 -225
  213. package/src/crate-builder/primitives/Map.SelectArea.js +0 -359
  214. package/src/crate-builder/primitives/Map.stories.tsx +0 -61
  215. package/src/crate-builder/primitives/Map.tsx +0 -124
  216. package/src/crate-builder/primitives/Number.stories.tsx +0 -74
  217. package/src/crate-builder/primitives/Number.tsx +0 -166
  218. package/src/crate-builder/primitives/Select.stories.tsx +0 -66
  219. package/src/crate-builder/primitives/Select.tsx +0 -121
  220. package/src/crate-builder/primitives/SelectObject.stories.tsx +0 -29
  221. package/src/crate-builder/primitives/SelectObject.tsx +0 -105
  222. package/src/crate-builder/primitives/SelectUrl.stories.tsx +0 -42
  223. package/src/crate-builder/primitives/SelectUrl.tsx +0 -110
  224. package/src/crate-builder/primitives/Text.stories.tsx +0 -106
  225. package/src/crate-builder/primitives/Text.tsx +0 -197
  226. package/src/crate-builder/primitives/Time.stories.tsx +0 -38
  227. package/src/crate-builder/primitives/Time.tsx +0 -71
  228. package/src/crate-builder/primitives/Url.stories.tsx +0 -43
  229. package/src/crate-builder/primitives/Url.tsx +0 -75
  230. package/src/crate-builder/primitives/Value.stories.tsx +0 -37
  231. package/src/crate-builder/primitives/Value.tsx +0 -30
  232. package/src/crate-builder/primitives/date-libs.ts +0 -12
  233. package/src/crate-builder/profile-schema.json +0 -145
  234. package/src/crate-builder/property-definitions.ts +0 -78
  235. package/src/crate-builder/recrate.css +0 -3
  236. package/src/crate-builder/store.ts +0 -14
  237. package/src/crate-builder/tailwind.css +0 -5
  238. package/src/crate-builder/types.d.ts +0 -318
  239. package/src/examples/collection/collections-entity-example.json +0 -131
  240. package/src/examples/collection/crate-builder-entity-example.json +0 -33
  241. package/src/examples/item/complex-collection/ro-crate-metadata.json +0 -174
  242. package/src/examples/item/complex-item/ro-crate-metadata.json +0 -769
  243. package/src/examples/item/crate-with-language.json +0 -38
  244. package/src/examples/item/empty/ro-crate-metadata.json +0 -20
  245. package/src/examples/item/item-with-relationship-and-action/ro-crate-metadata.json +0 -66
  246. package/src/examples/item/large-crate/ro-crate-metadata.json +0 -5762
  247. package/src/examples/item/multiple-types/ro-crate-metadata.json +0 -20
  248. package/src/examples/item/ridiculously-big-collection/ro-crate-metadata.json +0 -162977
  249. package/src/examples/profile/aroma.complex.profile.json +0 -11098
  250. package/src/examples/profile/aroma.profile.json +0 -9158
  251. package/src/examples/profile/nyingarn-item-profile.json +0 -426
  252. package/src/examples/profile/profile-to-test-inverse-associations.json +0 -73
  253. package/src/examples/profile/profile-to-test-multiple-types.json +0 -31
  254. package/src/examples/profile/profile-with-all-primitives-and-groups.json +0 -207
  255. package/src/examples/profile/profile-with-all-primitives.json +0 -244
  256. package/src/examples/profile/profile-with-constraints.json +0 -446
  257. package/src/examples/profile/profile-with-resolve.json +0 -57
  258. package/src/examples/profile/vocabulary-creation-profile.json +0 -231
  259. package/src/images.d.ts +0 -5
  260. package/src/index.ts +0 -12
  261. package/src/types.ts +0 -104
  262. package/tailwind.config.js +0 -21
  263. package/tsconfig.app.json +0 -31
  264. package/tsconfig.json +0 -26
  265. package/typedoc.json +0 -11
  266. package/update-deps.sh +0 -4
  267. package/vite-env.d.ts +0 -1
  268. package/vite.config.ts +0 -104
  269. /package/{public → dist}/favicon.ico +0 -0
  270. /package/{public → dist}/index.html +0 -0
  271. /package/{public → dist}/logo192.png +0 -0
  272. /package/{public → dist}/logo512.png +0 -0
  273. /package/{public → dist}/manifest.json +0 -0
  274. /package/{public → dist}/marker-icon.png +0 -0
  275. /package/{public → dist}/marker-shadow.png +0 -0
  276. /package/{public → dist}/robots.txt +0 -0
@@ -1,166 +0,0 @@
1
- import React, { useState, useEffect, useCallback } from 'react';
2
- import { InputNumber, Button, Typography, Input } from 'antd';
3
- import { CheckOutlined } from '@ant-design/icons';
4
- import { useTranslation } from 'react-i18next';
5
- import { debounce } from 'lodash';
6
-
7
- export interface NumberProps {
8
- property: string;
9
- definition?: {
10
- minValue?: number;
11
- maxValue?: number;
12
- numberType?: string[];
13
- };
14
- value?: string | number;
15
- onSaveProperty: (data: { property: string; value: number }) => void;
16
- }
17
-
18
- const NumberComponent: React.FC<NumberProps> = ({
19
- property,
20
- definition,
21
- value,
22
- onSaveProperty
23
- }) => {
24
- const { t } = useTranslation();
25
- const [internalValue, setInternalValue] = useState<string>(value?.toString() || '');
26
- const [isValidNumber, setIsValidNumber] = useState<boolean>(checkIsNumeric(value));
27
- const [isDeleting, setIsDeleting] = useState(false);
28
-
29
- // Constraints from definition
30
- const constraints = {
31
- minValue: definition?.minValue,
32
- maxValue: definition?.maxValue,
33
- numberType: definition?.numberType,
34
- };
35
-
36
- // Update when props change
37
- useEffect(() => {
38
- if (!isDeleting) {
39
- setInternalValue(value?.toString() || '');
40
- setIsValidNumber(checkIsNumeric(value));
41
- }
42
- }, [value, isDeleting]);
43
-
44
- function save(): void {
45
- if (isDeleting) return;
46
-
47
- const isValid = checkIsNumeric(internalValue);
48
- setIsValidNumber(isValid);
49
-
50
- if (isValid) {
51
- const normalizedValue = internalValue.replace(',', '.');
52
- const numValue = parseFloat(normalizedValue);
53
- if (validateNumberConstraints(numValue)) {
54
- onSaveProperty({
55
- property,
56
- value: numValue
57
- });
58
- }
59
- }
60
- }
61
-
62
- function handleDelete(): void {
63
- setIsDeleting(true);
64
- // Your delete logic here
65
- }
66
-
67
- // Create debounced save function
68
- const debouncedSave = useCallback(
69
- debounce(() => {
70
- save();
71
- }, 200),
72
- [internalValue, property]
73
- );
74
-
75
- function checkIsNumeric(value?: string | number): boolean {
76
- if (value === undefined || value === null) return false;
77
- const stringValue = String(value);
78
- // Simple numeric check: matches integers and decimals (with either . or ,), positive and negative
79
- return /^-?\d+([.,]\d+)?$/.test(stringValue);
80
- }
81
-
82
- function isNumberType(value: number, numberTypes: string[]): boolean {
83
- const stringValue = String(value).toLowerCase();
84
-
85
- const typeMap: Record<string, boolean> = {
86
- any: true,
87
- long: Number.isSafeInteger(value),
88
- int: Number.isInteger(value),
89
- float: stringValue.includes(".") && !Number.isNaN(parseFloat(stringValue)),
90
- double: !Number.isNaN(parseFloat(stringValue)),
91
- };
92
-
93
- return Array.isArray(numberTypes) &&
94
- numberTypes.some((type) => typeMap[type.toLowerCase()]);
95
- }
96
-
97
- function validateNumberConstraints(value: number): boolean {
98
- if (constraints.minValue !== undefined && constraints.minValue > value) return false;
99
- if (constraints.maxValue !== undefined && constraints.maxValue < value) return false;
100
- if (constraints.numberType && !isNumberType(value, constraints.numberType)) return false;
101
- return true;
102
- }
103
-
104
- function getConstraintsString(): string {
105
- const message: string[] = [];
106
-
107
- Object.entries(constraints).forEach(([name, value]) => {
108
- if (name && value) {
109
- message.push(`${name}: ${value}`);
110
- }
111
- });
112
-
113
- return message.join(', ');
114
- }
115
-
116
- function handleChange(e: React.ChangeEvent<HTMLInputElement>): void {
117
- const newValue = e.target.value;
118
- setInternalValue(newValue);
119
- setIsValidNumber(checkIsNumeric(newValue));
120
- }
121
-
122
- const isValidConstraints = isValidNumber &&
123
- validateNumberConstraints(parseFloat(internalValue));
124
-
125
- return (
126
- <div className="flex flex-col w-full describo-property-type-number">
127
- <div className="flex flex-row gap-x-2">
128
- <Input
129
- size='middle'
130
- type="number"
131
- value={internalValue}
132
- onChange={handleChange}
133
- onBlur={debouncedSave}
134
- style={{ width: '100%' }}
135
- status={(!isValidNumber || !isValidConstraints) ? 'error' : ''}
136
- />
137
- <Button
138
- onClick={() => {
139
- // Cancel any pending debounced save
140
- debouncedSave.cancel();
141
- save();
142
- }}
143
- variant='solid'
144
- color="green"
145
- size="middle"
146
- disabled={!isValidNumber || !isValidConstraints}
147
- icon={<CheckOutlined />}
148
- />
149
- </div>
150
-
151
- {!isValidNumber && internalValue && (
152
- <Typography.Text type="danger">
153
- {t('invalid_number_value', { value: internalValue })}
154
- </Typography.Text>
155
- )}
156
-
157
- {isValidNumber && !isValidConstraints && getConstraintsString() && (
158
- <Typography.Text type="danger">
159
- {t('number_constraints_error_message', { value: getConstraintsString() })}
160
- </Typography.Text>
161
- )}
162
- </div>
163
- );
164
- };
165
-
166
- export default NumberComponent;
@@ -1,66 +0,0 @@
1
- import React from 'react';
2
- import { StoryFn, Meta } from '@storybook/react';
3
- import Select from './Select';
4
-
5
- export default {
6
- title: 'Primitives/Select',
7
- component: Select,
8
- argTypes: {
9
- value: {
10
- options: ['a', 'b', 'c'],
11
- control: { type: 'select' }
12
- },
13
- onSaveProperty: { action: 'saveProperty' }
14
- }
15
- } as Meta<typeof Select>;
16
-
17
- const Template: StoryFn<typeof Select> = (args) => <Select {...args} />;
18
-
19
- export const DefaultSelect = Template.bind({});
20
- DefaultSelect.args = {
21
- property: 'select',
22
- value: 'a',
23
- definition: {
24
- values: ['a', 'b', 'c']
25
- // no style, defaults to dropdown
26
- }
27
- };
28
-
29
- export const DropdownSelect = Template.bind({});
30
- DropdownSelect.args = {
31
- property: 'select',
32
- value: 'a',
33
- definition: {
34
- values: ['a', 'b', 'c'],
35
- style: 'dropdown'
36
- }
37
- };
38
-
39
- export const RadioSelect = Template.bind({});
40
- RadioSelect.args = {
41
- property: 'select',
42
- value: 'a',
43
- definition: {
44
- values: ['a', 'b', 'c'],
45
- style: 'radio'
46
- }
47
- };
48
-
49
- export const CheckboxSelect = Template.bind({});
50
- CheckboxSelect.args = {
51
- property: 'select',
52
- value: ['a'],
53
- definition: {
54
- values: ['a', 'b', 'c'],
55
- style: 'checkbox'
56
- }
57
- };
58
-
59
- export const InvalidSelect = Template.bind({});
60
- InvalidSelect.args = {
61
- property: 'select',
62
- value: 'a',
63
- definition: {
64
- values: ['a', 'b', 'c']
65
- }
66
- };
@@ -1,121 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Select, Radio, Checkbox, Form } from 'antd';
3
- import { useTranslation } from 'react-i18next';
4
- import { isArray, isString, uniq } from 'lodash';
5
-
6
- export interface SelectProps {
7
- property: string;
8
- value?: string | string[];
9
- definition: {
10
- values: string[];
11
- style?: 'dropdown' | 'radio' | 'checkbox';
12
- };
13
- onSaveProperty: (data: { property: string; value: string | string[] }) => void;
14
- }
15
-
16
- const SelectComponent: React.FC<SelectProps> = ({
17
- property,
18
- value,
19
- definition,
20
- onSaveProperty
21
- }) => {
22
- const { t } = useTranslation();
23
- const [internalValue, setInternalValue] = useState<string | string[] | undefined>(value === '' ? undefined : value);
24
- const [hasValidValues, setHasValidValues] = useState<boolean>(false);
25
-
26
- useEffect(() => {
27
- // setInternalValue(value);
28
- setHasValidValues(verifySelectValuesAreStrings(definition.values));
29
- }, [value]);
30
-
31
- useEffect(() => {
32
- setHasValidValues(verifySelectValuesAreStrings(definition.values));
33
- }, [definition.values]);
34
-
35
- const save = (newValue: string | string[]) => {
36
- let valueToSave = newValue;
37
- if (definition.style === 'checkbox' && !isArray(valueToSave)) {
38
- valueToSave = [valueToSave as string];
39
- }
40
- setInternalValue(valueToSave);
41
- onSaveProperty({
42
- property,
43
- value: valueToSave
44
- });
45
- };
46
-
47
- const verifySelectValuesAreStrings = (values: any[]): boolean => {
48
- if (!isArray(values)) return false;
49
- const stringChecks = values.map(v => isString(v));
50
- const uniqueChecks = uniq(stringChecks);
51
- return uniqueChecks.length === 1 && uniqueChecks[0] === true;
52
- };
53
-
54
- if (!hasValidValues) {
55
- return (
56
- <div className="text-xs text-gray-700">
57
- {t('invalid_select_value')}
58
- </div>
59
- );
60
- }
61
-
62
- if (definition.style === 'radio') {
63
- return (
64
- <div className="flex flex-col w-full describo-property-type-select">
65
- <Radio.Group
66
- value={internalValue as string}
67
- onChange={(e) => save(e.target.value)}
68
- >
69
- {definition.values.map((value, idx) => (
70
- <div key={idx} className="flex flex-col">
71
- <Radio value={value}>
72
- {value}
73
- </Radio>
74
- </div>
75
- ))}
76
- </Radio.Group>
77
- </div>
78
- );
79
- }
80
-
81
- if (definition.style === 'checkbox') {
82
- return (
83
- <div className="flex flex-col w-full describo-property-type-select">
84
- <Checkbox.Group
85
- className="flex flex-col gap-1"
86
- value={isArray(internalValue) ? internalValue : []}
87
- onChange={(checkedValues) => save(checkedValues as string[])}
88
- >
89
- {definition.values.map((value, idx) => (
90
- <Checkbox key={idx} value={value} className="block">
91
- {value}
92
- </Checkbox>
93
- ))}
94
- </Checkbox.Group>
95
- </div>
96
-
97
- );
98
- }
99
-
100
- // Default dropdown style
101
- return (
102
- <div className="flex flex-col w-full describo-property-type-select">
103
- <Form.Item>
104
- <Select
105
- value={internalValue}
106
- onChange={(value) => save(value as string | string[])}
107
- style={{ width: '100%' }}
108
- placeholder={t('select')}
109
- >
110
- {definition.values.map((value, idx) => (
111
- <Select.Option key={idx} value={value}>
112
- {value}
113
- </Select.Option>
114
- ))}
115
- </Select>
116
- </Form.Item>
117
- </div>
118
- );
119
- };
120
-
121
- export default SelectComponent;
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import { StoryFn, Meta } from '@storybook/react';
3
- import SelectObject from './SelectObject';
4
-
5
- export default {
6
- title: 'Primitives/SelectObject',
7
- component: SelectObject,
8
- argTypes: {
9
- property: {
10
- control: { type: 'text' }
11
- },
12
- onCreateEntity: { action: 'createEntity' }
13
- }
14
- } as Meta<typeof SelectObject>;
15
-
16
- const Template: StoryFn<typeof SelectObject> = (args) => <SelectObject {...args} />;
17
-
18
- export const Default = Template.bind({});
19
- Default.args = {
20
- property: 'select',
21
- definition: {
22
- values: [
23
- { '@id': '#a', '@type': 'Thing', name: 'a' },
24
- { '@id': '#b', '@type': 'Thing', name: 'b' },
25
- { '@id': '#c', '@type': 'Thing', name: 'c' },
26
- { '@id': '#d', '@type': 'Thing', name: 'd' }
27
- ]
28
- }
29
- };
@@ -1,105 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Select, Form } from 'antd';
3
- import { useTranslation } from 'react-i18next';
4
- import { isPlainObject } from 'lodash';
5
- import { validateId } from '../CrateManager/validate-identifier';
6
-
7
- export interface SelectObjectProps {
8
- property: string;
9
- definition: {
10
- values: any[];
11
- };
12
- onCreateEntity: (data: { property: string; json: any }) => void;
13
- }
14
-
15
- const SelectObject: React.FC<SelectObjectProps> = ({
16
- property,
17
- definition,
18
- onCreateEntity
19
- }) => {
20
- const { t } = useTranslation();
21
- const [items, setItems] = useState(definition.values);
22
- const [internalValue, setInternalValue] = useState<any | undefined>(undefined);
23
- const [hasValidValues, setHasValidValues] = useState(verifySelectValuesAreValidPlainObjects(definition.values));
24
-
25
- useEffect(() => {
26
- setItems(definition.values);
27
- setHasValidValues(verifySelectValuesAreValidPlainObjects(definition.values));
28
- }, [definition.values]);
29
-
30
- const save = (selectedItem: any) => {
31
- setInternalValue(selectedItem);
32
- onCreateEntity({ property, json: selectedItem });
33
- };
34
-
35
- const filter = (searchText: string) => {
36
- const filteredItems = definition.values.filter((v) => {
37
- const re = new RegExp(searchText, 'i');
38
- const data = `${v['@id']} ${v['@type']} ${v.name}`;
39
- return data.match(re);
40
- });
41
- setItems(filteredItems);
42
- };
43
-
44
- const reset = () => {
45
- setItems(definition.values);
46
- };
47
-
48
- function verifySelectValuesAreValidPlainObjects(values: any[]) {
49
- let valid = true;
50
- if (!Array.isArray(values)) return false;
51
-
52
- values.forEach((v) => {
53
- if (!isPlainObject(v)) {
54
- valid = false;
55
- return;
56
- }
57
- if (!('@id' in v) || !('@type' in v) || !('name' in v)) {
58
- valid = false;
59
- return;
60
- }
61
- const { isValid } = validateId({ id: v['@id'], type: v['@type'] });
62
- if (!isValid) valid = false;
63
- });
64
- return valid;
65
- }
66
-
67
- if (!hasValidValues) {
68
- return (
69
- <div className="text-xs text-gray-700">
70
- {t('invalid_selectobject_values')}
71
- </div>
72
- );
73
- }
74
-
75
- return (
76
- <div className="flex flex-col">
77
- <Form.Item>
78
- <Select
79
- size='middle'
80
- showSearch
81
- placeholder={t('select')}
82
- value={internalValue ? internalValue['@id'] : undefined}
83
- onChange={(value: string) => {
84
- const selectedItem = items.find(item => item['@id'] === value);
85
- if (selectedItem) {
86
- save(selectedItem);
87
- }
88
- }}
89
- onSearch={filter}
90
- onBlur={reset}
91
- filterOption={false}
92
- notFoundContent={t('no_data')}
93
- >
94
- {items.map((item, idx) => (
95
- <Select.Option key={idx} value={item['@id']}>
96
- {item.name} ({item['@id']})
97
- </Select.Option>
98
- ))}
99
- </Select>
100
- </Form.Item>
101
- </div>
102
- );
103
- };
104
-
105
- export default SelectObject;
@@ -1,42 +0,0 @@
1
- import React from 'react';
2
- import { StoryFn, Meta } from '@storybook/react';
3
- import SelectUrl from './SelectUrl';
4
-
5
- export default {
6
- title: 'Primitives/SelectUrl',
7
- component: SelectUrl,
8
- argTypes: {
9
- property: {
10
- control: { type: 'text' }
11
- },
12
- onCreateEntity: { action: 'createEntity' }
13
- }
14
- } as Meta<typeof SelectUrl>;
15
-
16
- const Template: StoryFn<typeof SelectUrl> = (args) => <SelectUrl {...args} />;
17
-
18
- export const Default = Template.bind({});
19
- Default.args = {
20
- property: 'select',
21
- value: 'http://schema.org/name',
22
- definition: {
23
- values: ['http://schema.org/name', 'https://schema.org/Country']
24
- }
25
- };
26
-
27
- export const InvalidValue = Template.bind({});
28
- InvalidValue.args = {
29
- property: 'select',
30
- value: 'not-a-url',
31
- definition: {
32
- values: ['http://schema.org/name', 'https://schema.org/Country']
33
- }
34
- };
35
-
36
- export const InvalidValues = Template.bind({});
37
- InvalidValues.args = {
38
- property: 'select',
39
- definition: {
40
- values: ['not-a-url', 'also-not-a-url']
41
- }
42
- };
@@ -1,110 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Select, Form } from 'antd';
3
- import { useTranslation } from 'react-i18next';
4
- import { isArray, isString, uniq } from 'lodash';
5
- import { isURL } from '../CrateManager/lib';
6
-
7
- export interface SelectUrlProps {
8
- property: string;
9
- value?: string;
10
- definition: {
11
- values: string[];
12
- };
13
- onCreateEntity: (data: { property: string; json: any }) => void;
14
- }
15
-
16
- const SelectUrl: React.FC<SelectUrlProps> = ({
17
- property,
18
- value,
19
- definition,
20
- onCreateEntity
21
- }) => {
22
- const { t } = useTranslation();
23
- const [items, setItems] = useState(definition.values);
24
- const [internalValue, setInternalValue] = useState<string | undefined>(value);
25
- const [isValidValue, setIsValidValue] = useState(value ? isURL(value) : true);
26
- const [hasValidValues, setHasValidValues] = useState(verifySelectValuesAreUrls(definition.values));
27
-
28
- useEffect(() => {
29
- setInternalValue(value);
30
- setIsValidValue(value ? isURL(value) : true);
31
- }, [value]);
32
-
33
- useEffect(() => {
34
- setItems(definition.values);
35
- setHasValidValues(verifySelectValuesAreUrls(definition.values));
36
- }, [definition.values]);
37
-
38
- const save = (selectedValue: string) => {
39
- setInternalValue(selectedValue);
40
- onCreateEntity({
41
- property,
42
- json: {
43
- '@id': selectedValue,
44
- '@type': 'URL',
45
- name: selectedValue,
46
- },
47
- });
48
- };
49
-
50
- const filter = (searchText: string) => {
51
- const filteredItems = definition.values.filter((v) => {
52
- const re = new RegExp(searchText, 'i');
53
- return v.toLowerCase().match(re);
54
- });
55
- setItems(filteredItems);
56
- };
57
-
58
- const reset = () => {
59
- setItems(definition.values);
60
- };
61
-
62
- function verifySelectValuesAreUrls(values: any[]): boolean {
63
- if (!isArray(values)) return false;
64
- const validatedValues = values.map((v) => isString(v) && isURL(v));
65
- const uniqueValues = uniq(validatedValues);
66
- return uniqueValues.length === 1 && uniqueValues[0] === true;
67
- }
68
-
69
- if (!isValidValue) {
70
- return (
71
- <div className="text-xs text-gray-700">
72
- {t('invalid_selecturl_value', { value })}
73
- </div>
74
- );
75
- }
76
-
77
- if (!hasValidValues) {
78
- return (
79
- <div className="text-xs text-gray-700">
80
- {t('invalid_selecturl_values')}
81
- </div>
82
- );
83
- }
84
-
85
- return (
86
- <div>
87
- <Form.Item>
88
- <Select
89
- size='middle'
90
- showSearch
91
- placeholder={t('select')}
92
- value={internalValue || undefined}
93
- onChange={(value: string) => save(value)}
94
- onSearch={filter}
95
- onBlur={reset}
96
- filterOption={false}
97
- notFoundContent={t('no_data')}
98
- >
99
- {items.map((item, idx) => (
100
- <Select.Option key={idx} value={item}>
101
- {item}
102
- </Select.Option>
103
- ))}
104
- </Select>
105
- </Form.Item>
106
- </div>
107
- );
108
- };
109
-
110
- export default SelectUrl;