synapse-react-client 4.0.38 → 4.0.41

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 (350) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/useAridhiaQuery.d.ts +6 -2
  6. package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -1
  7. package/dist/aridhia-queries/useAridhiaQuery.js +3 -0
  8. package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -1
  9. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
  10. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
  11. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
  12. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  13. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts +2 -1
  14. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  15. package/dist/components/Aridhia/AridhiaAccessStatus.js +57 -31
  16. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  17. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +12 -0
  18. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -0
  19. package/dist/components/Aridhia/AridhiaDarStatusPopover.js +56 -0
  20. package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -0
  21. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -1
  22. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +38 -30
  23. package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -1
  24. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +15 -14
  25. package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
  26. package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts +11 -0
  27. package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts.map +1 -0
  28. package/dist/components/Aridhia/RdcaDapEligibilityDialog.js +37 -0
  29. package/dist/components/Aridhia/RdcaDapEligibilityDialog.js.map +1 -0
  30. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +2 -2
  31. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  32. package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts +10 -0
  33. package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts.map +1 -0
  34. package/dist/components/Aridhia/aridhiaFairPortalUrls.js +11 -0
  35. package/dist/components/Aridhia/aridhiaFairPortalUrls.js.map +1 -0
  36. package/dist/components/Aridhia/rdcaDapConstants.d.ts +3 -0
  37. package/dist/components/Aridhia/rdcaDapConstants.d.ts.map +1 -0
  38. package/dist/components/Aridhia/rdcaDapConstants.js +6 -0
  39. package/dist/components/Aridhia/rdcaDapConstants.js.map +1 -0
  40. package/dist/components/Authentication/Constants.d.ts +4 -0
  41. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  42. package/dist/components/Authentication/Constants.js +5 -2
  43. package/dist/components/Authentication/Constants.js.map +1 -1
  44. package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
  45. package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
  46. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  47. package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
  48. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  49. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  50. package/dist/components/Authentication/TOTPForm.js +20 -18
  51. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  52. package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
  53. package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
  54. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  55. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  56. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +74 -71
  57. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  58. package/dist/components/DataExplorer/DataExplorer.css +1 -1
  59. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
  60. package/dist/components/DataExplorer/DataExplorer.js +50 -50
  61. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  62. package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
  63. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
  64. package/dist/components/DataExplorer/DataExplorer.module.scss +29 -6
  65. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +16 -7
  66. package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
  67. package/dist/components/DataGrid/columns/DateTimeColumn.js +79 -57
  68. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  69. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  70. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +43 -46
  71. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  72. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  73. package/dist/components/DataGrid/utils/columnFactory.js +11 -8
  74. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  75. package/dist/components/DatePicker/DatePicker.d.ts +10 -0
  76. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  77. package/dist/components/DatePicker/DatePicker.js +18 -0
  78. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  79. package/dist/components/EntityCitation/EntityCitation.d.ts.map +1 -1
  80. package/dist/components/EntityCitation/EntityCitation.js +8 -5
  81. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  82. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
  83. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
  84. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
  85. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
  86. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
  87. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
  88. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +187 -0
  89. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
  90. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
  91. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
  92. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +83 -0
  93. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
  94. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
  95. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
  96. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
  97. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
  98. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
  99. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
  100. package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
  101. package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
  102. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +25 -0
  103. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
  104. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +66 -0
  105. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
  106. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
  107. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
  108. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +39 -0
  109. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
  110. package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
  111. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
  112. package/dist/components/FormTemplateEditor/utils.js +27 -0
  113. package/dist/components/FormTemplateEditor/utils.js.map +1 -0
  114. package/dist/components/HasAccess/AccessIcon.d.ts +3 -1
  115. package/dist/components/HasAccess/AccessIcon.d.ts.map +1 -1
  116. package/dist/components/HasAccess/AccessIcon.js +11 -1
  117. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  118. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
  119. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  120. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
  121. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
  122. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
  123. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
  124. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  125. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
  126. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  127. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts +2 -1
  128. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts.map +1 -1
  129. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js +81 -53
  130. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  131. package/dist/components/ProjectInfo/ProjectInfo.d.ts.map +1 -1
  132. package/dist/components/ProjectInfo/ProjectInfo.js +3 -2
  133. package/dist/components/ProjectInfo/ProjectInfo.js.map +1 -1
  134. package/dist/components/QueryBuilder/FilterConditionRow.css +1 -0
  135. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +8 -0
  136. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -0
  137. package/dist/components/QueryBuilder/FilterConditionRow.js +260 -0
  138. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -0
  139. package/dist/components/QueryBuilder/FilterConditionRow.module.js +16 -0
  140. package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -0
  141. package/dist/components/QueryBuilder/FilterConditionRow.module.scss +101 -0
  142. package/dist/components/QueryBuilder/FilterGroupNode.css +1 -0
  143. package/dist/components/QueryBuilder/FilterGroupNode.d.ts +11 -0
  144. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -0
  145. package/dist/components/QueryBuilder/FilterGroupNode.js +134 -0
  146. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -0
  147. package/dist/components/QueryBuilder/FilterGroupNode.module.js +16 -0
  148. package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -0
  149. package/dist/components/QueryBuilder/FilterGroupNode.module.scss +92 -0
  150. package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
  151. package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
  152. package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
  153. package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
  154. package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -0
  155. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts +21 -0
  156. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -0
  157. package/dist/components/QueryBuilder/QueryBuilderControls.js +143 -0
  158. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -0
  159. package/dist/components/QueryBuilder/QueryBuilderControls.module.js +17 -0
  160. package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -0
  161. package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +79 -0
  162. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +39 -0
  163. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -0
  164. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js +19 -0
  165. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -0
  166. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +14 -0
  167. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -0
  168. package/dist/components/QueryBuilder/qbTreeToReadable.js +89 -0
  169. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -0
  170. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
  171. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
  172. package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
  173. package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
  174. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
  175. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
  176. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
  177. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
  178. package/dist/components/QueryBuilder/queryBuilderId.d.ts +2 -0
  179. package/dist/components/QueryBuilder/queryBuilderId.d.ts.map +1 -0
  180. package/dist/components/QueryBuilder/queryBuilderId.js +9 -0
  181. package/dist/components/QueryBuilder/queryBuilderId.js.map +1 -0
  182. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +24 -0
  183. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -0
  184. package/dist/components/QueryBuilder/queryBuilderMetadata.js +91 -0
  185. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -0
  186. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +71 -0
  187. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -0
  188. package/dist/components/QueryBuilder/queryBuilderOperations.js +203 -0
  189. package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -0
  190. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +3 -2
  191. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
  192. package/dist/components/QueryBuilder/queryBuilderTranslation.js +82 -84
  193. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
  194. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts +11 -0
  195. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -0
  196. package/dist/components/QueryBuilder/useQBCombinedSql.js +29 -0
  197. package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -0
  198. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts +18 -0
  199. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts.map +1 -0
  200. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js +27 -0
  201. package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js.map +1 -0
  202. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +14 -1
  203. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  204. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +183 -119
  205. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  206. package/dist/components/RssFeedCards/RssFeedCards.d.ts +1 -0
  207. package/dist/components/RssFeedCards/RssFeedCards.d.ts.map +1 -1
  208. package/dist/components/RssFeedCards/RssFeedCards.js +11 -11
  209. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  210. package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
  211. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  212. package/dist/components/SynapseChat/SynapseChat.js +76 -71
  213. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  214. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +3 -1
  215. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
  216. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +24 -13
  217. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  218. package/dist/components/SynapseChat/portalChatSessionStorage.d.ts +23 -0
  219. package/dist/components/SynapseChat/portalChatSessionStorage.d.ts.map +1 -0
  220. package/dist/components/SynapseChat/portalChatSessionStorage.js +29 -0
  221. package/dist/components/SynapseChat/portalChatSessionStorage.js.map +1 -0
  222. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +6 -0
  223. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  224. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +92 -79
  225. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  226. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +3 -4
  227. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  228. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -2
  229. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  230. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +1 -1
  231. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  232. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  233. package/dist/components/entity/page/action_menu/EntityActionMenu.js +9 -2
  234. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  235. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
  236. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  237. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +36 -37
  238. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  239. package/dist/components/menu/ComplexMenu.js +1 -1
  240. package/dist/components/menu/ComplexMenu.js.map +1 -1
  241. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  242. package/dist/components/menu/DropdownMenu.js +4 -0
  243. package/dist/components/menu/DropdownMenu.js.map +1 -1
  244. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  245. package/dist/components/styled/LeftRightPanel.js +19 -2
  246. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  247. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts +10 -0
  248. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts.map +1 -0
  249. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js +20 -0
  250. package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js.map +1 -0
  251. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
  252. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +29 -20
  253. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  254. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +16 -0
  255. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -0
  256. package/dist/mocks/accessRequirement/mockFormTemplates.js +63 -0
  257. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -0
  258. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +7 -0
  259. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -0
  260. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +47 -0
  261. package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -0
  262. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +27 -0
  263. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -0
  264. package/dist/mocks/accessRequirement/mockJsonSchemas.js +83 -0
  265. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -0
  266. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +18 -1
  267. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  268. package/dist/mocks/msw/handlers/aridhiaHandlers.js +39 -33
  269. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  270. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
  271. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  272. package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
  273. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  274. package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
  275. package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
  276. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  277. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +5 -0
  278. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -0
  279. package/dist/mocks/msw/handlers/formTemplateHandlers.js +65 -0
  280. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -0
  281. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +2 -1
  282. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  283. package/dist/mocks/msw/handlers/schemaHandlers.js +13 -7
  284. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  285. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  286. package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
  287. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  288. package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
  289. package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
  290. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  291. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  292. package/dist/mocks/msw/handlers.js +49 -47
  293. package/dist/mocks/msw/handlers.js.map +1 -1
  294. package/dist/style/abstracts/_cssVariables.scss +7 -0
  295. package/dist/style/components/_query-wrapper-plot-nav.scss +9 -0
  296. package/dist/style/main.css +1 -1
  297. package/dist/synapse-queries/KeyFactory.d.ts +5 -1
  298. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  299. package/dist/synapse-queries/KeyFactory.js +14 -2
  300. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  301. package/dist/synapse-queries/chat/useChat.d.ts.map +1 -1
  302. package/dist/synapse-queries/chat/useChat.js +2 -4
  303. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  304. package/dist/synapse-queries/dataaccess/index.d.ts +1 -0
  305. package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
  306. package/dist/synapse-queries/dataaccess/index.js +4 -3
  307. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +41 -0
  308. package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -0
  309. package/dist/synapse-queries/dataaccess/useFormTemplate.js +63 -0
  310. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -0
  311. package/dist/synapse-queries/index.js +186 -180
  312. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
  313. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
  314. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
  315. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
  316. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  317. package/dist/testutils/vitest.setup.js +18 -9
  318. package/dist/testutils/vitest.setup.js.map +1 -1
  319. package/dist/tsconfig.build.tsbuildinfo +1 -1
  320. package/dist/utils/APIConstants.d.ts +1 -0
  321. package/dist/utils/APIConstants.d.ts.map +1 -1
  322. package/dist/utils/APIConstants.js +2 -2
  323. package/dist/utils/APIConstants.js.map +1 -1
  324. package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
  325. package/dist/utils/appendFinalQueryParamKey.js +4 -1
  326. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  327. package/dist/utils/functions/ArrayUtils.d.ts +3 -0
  328. package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
  329. package/dist/utils/functions/ArrayUtils.js +7 -1
  330. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  331. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
  332. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
  333. package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
  334. package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
  335. package/dist/utils/jsonschema/getType.d.ts.map +1 -1
  336. package/dist/utils/jsonschema/getType.js +4 -1
  337. package/dist/utils/jsonschema/getType.js.map +1 -1
  338. package/dist/utils/jsonschema/submissionContext.d.ts +86 -0
  339. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
  340. package/dist/utils/jsonschema/submissionContext.js +186 -0
  341. package/dist/utils/jsonschema/submissionContext.js.map +1 -0
  342. package/package.json +10 -8
  343. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
  344. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
  345. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
  346. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
  347. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
  348. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
  349. package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
  350. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ import { Box as e, Button as t, IconButton as n, Stack as r, TextField as i, Typography as a } from "@mui/material";
2
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
3
+ import { Add as c, Delete as l } from "@mui/icons-material";
4
+ //#region src/components/FormTemplateEditor/ChoiceOptionsEditor.tsx
5
+ function u({ options: u, onChange: d }) {
6
+ let f = (e, t) => {
7
+ d(u.map((n, r) => r === e ? t : n));
8
+ }, p = (e) => {
9
+ d(u.filter((t, n) => n !== e));
10
+ };
11
+ return /* @__PURE__ */ s(e, {
12
+ sx: {
13
+ pl: 1,
14
+ borderLeft: 2,
15
+ borderColor: "divider"
16
+ },
17
+ children: [/* @__PURE__ */ o(a, {
18
+ variant: "caption",
19
+ color: "text.secondary",
20
+ sx: {
21
+ display: "block",
22
+ mb: .5
23
+ },
24
+ children: "Choices"
25
+ }), /* @__PURE__ */ s(r, {
26
+ spacing: 1,
27
+ children: [u.map((t, r) => /* @__PURE__ */ s(e, {
28
+ sx: {
29
+ display: "flex",
30
+ alignItems: "center",
31
+ gap: 1
32
+ },
33
+ children: [/* @__PURE__ */ o(i, {
34
+ value: t,
35
+ onChange: (e) => f(r, e.target.value),
36
+ size: "small",
37
+ fullWidth: !0
38
+ }), /* @__PURE__ */ o(n, {
39
+ size: "small",
40
+ "aria-label": "Delete choice",
41
+ onClick: () => p(r),
42
+ disabled: u.length <= 1,
43
+ children: /* @__PURE__ */ o(l, { fontSize: "small" })
44
+ })]
45
+ }, r)), /* @__PURE__ */ o(e, { children: /* @__PURE__ */ o(t, {
46
+ size: "small",
47
+ startIcon: /* @__PURE__ */ o(c, {}),
48
+ onClick: () => {
49
+ let e = u.length + 1;
50
+ for (; u.includes(`Option ${e}`);) e++;
51
+ d([...u, `Option ${e}`]);
52
+ },
53
+ children: "Add choice"
54
+ }) })]
55
+ })]
56
+ });
57
+ }
58
+ //#endregion
59
+ export { u as ChoiceOptionsEditor };
60
+
61
+ //# sourceMappingURL=ChoiceOptionsEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChoiceOptionsEditor.js","names":[],"sources":["../../../src/components/FormTemplateEditor/ChoiceOptionsEditor.tsx"],"sourcesContent":["import {\n Box,\n Button,\n IconButton,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { Add as AddIcon, Delete as DeleteIcon } from '@mui/icons-material'\n\ntype ChoiceOptionsEditorProps = {\n options: string[]\n onChange: (next: string[]) => void\n}\n\n/**\n * Edits a choice field's options. At least one option is always kept, and added options get a\n * unique `Option N` label.\n */\nexport function ChoiceOptionsEditor({\n options,\n onChange,\n}: ChoiceOptionsEditorProps) {\n const update = (idx: number, next: string) => {\n onChange(options.map((o, i) => (i === idx ? next : o)))\n }\n const remove = (idx: number) => {\n onChange(options.filter((_, i) => i !== idx))\n }\n const add = () => {\n let n = options.length + 1\n while (options.includes(`Option ${n}`)) n++\n onChange([...options, `Option ${n}`])\n }\n\n return (\n <Box sx={{ pl: 1, borderLeft: 2, borderColor: 'divider' }}>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ display: 'block', mb: 0.5 }}\n >\n Choices\n </Typography>\n <Stack spacing={1}>\n {/* Index keys are safe: rows are fully controlled and hold no local state. */}\n {options.map((opt, idx) => (\n <Box key={idx} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <TextField\n value={opt}\n onChange={e => update(idx, e.target.value)}\n size=\"small\"\n fullWidth\n />\n <IconButton\n size=\"small\"\n aria-label=\"Delete choice\"\n onClick={() => remove(idx)}\n disabled={options.length <= 1}\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n ))}\n <Box>\n <Button size=\"small\" startIcon={<AddIcon />} onClick={add}>\n Add choice\n </Button>\n </Box>\n </Stack>\n </Box>\n )\n}\n"],"mappings":";;;;AAmBA,SAAgB,EAAoB,EAClC,YACA,eAC2B;CAC3B,IAAM,KAAU,GAAa,MAAiB;EAC5C,EAAS,EAAQ,KAAK,GAAG,MAAO,MAAM,IAAM,IAAO,CAAE,CAAC;CACxD,GACM,KAAU,MAAgB;EAC9B,EAAS,EAAQ,QAAQ,GAAG,MAAM,MAAM,CAAG,CAAC;CAC9C;CAOA,OACE,kBAAC,GAAD;EAAK,IAAI;GAAE,IAAI;GAAG,YAAY;GAAG,aAAa;EAAU;YAAxD,CACE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,IAAI;IAAE,SAAS;IAAS,IAAI;GAAI;aACjC;EAEW,CAAA,GACZ,kBAAC,GAAD;GAAO,SAAS;aAAhB,CAEG,EAAQ,KAAK,GAAK,MACjB,kBAAC,GAAD;IAAe,IAAI;KAAE,SAAS;KAAQ,YAAY;KAAU,KAAK;IAAE;cAAnE,CACE,kBAAC,GAAD;KACE,OAAO;KACP,WAAU,MAAK,EAAO,GAAK,EAAE,OAAO,KAAK;KACzC,MAAK;KACL,WAAA;IACD,CAAA,GACD,kBAAC,GAAD;KACE,MAAK;KACL,cAAW;KACX,eAAe,EAAO,CAAG;KACzB,UAAU,EAAQ,UAAU;eAE5B,kBAAC,GAAD,EAAY,UAAS,QAAS,CAAA;IACpB,CAAA,CACT;MAfK,CAeL,CACN,GACD,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAQ,MAAK;IAAQ,WAAW,kBAAC,GAAD,CAAU,CAAA;IAAG,eApCnC;KAChB,IAAI,IAAI,EAAQ,SAAS;KACzB,OAAO,EAAQ,SAAS,UAAU,GAAG,IAAG;KACxC,EAAS,CAAC,GAAG,GAAS,UAAU,GAAG,CAAC;IACtC;cAgCmE;GAEnD,CAAA,EACL,CAAA,CACA;IACJ;;AAET"}
@@ -0,0 +1,33 @@
1
+ import { RJSFSchema } from '@rjsf/utils';
2
+ import { SchemaPropertyContext } from '@/utils/jsonschema/submissionContext';
3
+ export type FieldDefinitionDrawerProps = {
4
+ open: boolean;
5
+ propertyKey: string | null;
6
+ /** All property keys currently defined in the schema, including this one. */
7
+ existingKeys: Set<string>;
8
+ property: RJSFSchema | null;
9
+ isRequired: boolean;
10
+ /**
11
+ * Which submission context this property applies to (per the schema's
12
+ * `x-synapse-submissionContext` `allOf` convention). Editable here via a guided select box.
13
+ * This component only calls `onChangeContext`; a container elsewhere in the authoring flow is
14
+ * responsible for moving the property's definition between the schema's top-level `properties`
15
+ * and the matching `allOf` branch so ACT never has to hand-edit `allOf` for the common case.
16
+ */
17
+ context: SchemaPropertyContext;
18
+ /** True when this field is bound to one or more steps. Affects delete affordance. */
19
+ isUsedInSteps: boolean;
20
+ onClose: () => void;
21
+ onUpdate: (patch: Partial<RJSFSchema>) => void;
22
+ onRenameKey: (newKey: string) => void;
23
+ onReplace: (next: RJSFSchema) => void;
24
+ onChangeRequired: (isRequired: boolean) => void;
25
+ onChangeContext: (context: SchemaPropertyContext) => void;
26
+ onRemove: () => void;
27
+ };
28
+ /**
29
+ * Slide-in drawer for editing a single field's JSON Schema definition (label, help text, type,
30
+ * required, submission context, choice options, file format).
31
+ */
32
+ export declare function FieldDefinitionDrawer({ open, propertyKey, existingKeys, property, isRequired, context, isUsedInSteps, onClose, onUpdate, onRenameKey, onReplace, onChangeRequired, onChangeContext, onRemove, }: FieldDefinitionDrawerProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=FieldDefinitionDrawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDefinitionDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FieldDefinitionDrawer.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAmB5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,OAAO,EAAE,qBAAqB,CAAA;IAC9B,qFAAqF;IACrF,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,eAAe,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACzD,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,aAAa,EACb,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,QAAQ,GACT,EAAE,0BAA0B,2CAqM5B"}
@@ -0,0 +1,187 @@
1
+ import { FIELD_TYPE_OPTIONS as e, applyFieldType as t, detectFieldType as n, sanitizePropertyKey as r } from "./schemaFieldUtils.js";
2
+ import { ChoiceOptionsEditor as i } from "./ChoiceOptionsEditor.js";
3
+ import { useState as a } from "react";
4
+ import { Alert as o, Box as s, Button as c, Drawer as l, FormControlLabel as u, IconButton as d, MenuItem as f, Stack as p, Switch as m, TextField as h, Typography as g } from "@mui/material";
5
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
6
+ import { Close as y, Delete as b } from "@mui/icons-material";
7
+ //#region src/components/FormTemplateEditor/FieldDefinitionDrawer.tsx
8
+ var x = [
9
+ {
10
+ value: "ALWAYS",
11
+ label: "Always"
12
+ },
13
+ {
14
+ value: "REQUEST_ONLY",
15
+ label: "Initial request only"
16
+ },
17
+ {
18
+ value: "RENEWAL_ONLY",
19
+ label: "Renewal only"
20
+ }
21
+ ];
22
+ function S({ open: S, propertyKey: C, existingKeys: w, property: T, isRequired: E, context: D, isUsedInSteps: O, onClose: k, onUpdate: A, onRenameKey: j, onReplace: M, onChangeRequired: N, onChangeContext: P, onRemove: F }) {
23
+ let I = T ? n(T) : null, L = T !== null && I === null, [R, z] = a(null), B = R?.forKey === C ? R.value : C ?? "", V = null;
24
+ B.length === 0 ? V = "Required" : B !== C && w.has(B) && (V = "Already used by another field");
25
+ let H = () => {
26
+ C && !V && B !== C && j(B), z(null);
27
+ }, U = (e) => {
28
+ T && M(t(T, e));
29
+ };
30
+ return /* @__PURE__ */ _(l, {
31
+ open: S,
32
+ onClose: k,
33
+ anchor: "right",
34
+ slotProps: { paper: { sx: { width: {
35
+ xs: "100%",
36
+ sm: 480
37
+ } } } },
38
+ children: /* @__PURE__ */ v(s, {
39
+ sx: {
40
+ p: 3,
41
+ display: "flex",
42
+ flexDirection: "column",
43
+ height: "100%"
44
+ },
45
+ children: [
46
+ /* @__PURE__ */ v(s, {
47
+ sx: {
48
+ display: "flex",
49
+ alignItems: "center",
50
+ mb: 2
51
+ },
52
+ children: [/* @__PURE__ */ _(g, {
53
+ variant: "h6",
54
+ sx: { flexGrow: 1 },
55
+ children: "Edit field"
56
+ }), /* @__PURE__ */ _(d, {
57
+ onClick: k,
58
+ "aria-label": "Close field editor",
59
+ children: /* @__PURE__ */ _(y, {})
60
+ })]
61
+ }),
62
+ C && /* @__PURE__ */ _(h, {
63
+ label: "Property key",
64
+ value: B,
65
+ onChange: (e) => z({
66
+ forKey: C,
67
+ value: r(e.target.value)
68
+ }),
69
+ onBlur: H,
70
+ onKeyDown: (e) => {
71
+ e.key === "Enter" && (e.preventDefault(), H());
72
+ },
73
+ error: V !== null,
74
+ helperText: V ?? "Identifies this field in the JSON Schema and submitted requests.",
75
+ size: "small",
76
+ fullWidth: !0,
77
+ sx: { mb: 2 },
78
+ slotProps: { input: { sx: { fontFamily: "monospace" } } }
79
+ }),
80
+ T && /* @__PURE__ */ _(h, {
81
+ select: !0,
82
+ label: "Submission context",
83
+ value: D,
84
+ onChange: (e) => P(e.target.value),
85
+ size: "small",
86
+ fullWidth: !0,
87
+ sx: { mb: 2 },
88
+ helperText: "Controls whether requesters are asked this question on an initial request, a renewal, or both.",
89
+ children: x.map((e) => /* @__PURE__ */ _(f, {
90
+ value: e.value,
91
+ children: e.label
92
+ }, e.value))
93
+ }),
94
+ /* @__PURE__ */ _(s, {
95
+ sx: {
96
+ flexGrow: 1,
97
+ overflow: "auto"
98
+ },
99
+ children: T ? L ? /* @__PURE__ */ _(o, {
100
+ severity: "warning",
101
+ variant: "outlined",
102
+ children: "This field uses settings not supported by the simple editor. Edit it via the advanced raw JSON Schema view."
103
+ }) : /* @__PURE__ */ v(p, {
104
+ spacing: 2,
105
+ children: [
106
+ /* @__PURE__ */ _(h, {
107
+ label: "Question label",
108
+ value: T.title ?? "",
109
+ onChange: (e) => A({ title: e.target.value }),
110
+ size: "small",
111
+ fullWidth: !0
112
+ }),
113
+ /* @__PURE__ */ _(h, {
114
+ label: "Help text",
115
+ value: T.description ?? "",
116
+ onChange: (e) => A({ description: e.target.value }),
117
+ size: "small",
118
+ multiline: !0,
119
+ rows: 3,
120
+ fullWidth: !0,
121
+ helperText: "Shown to the requester below the question."
122
+ }),
123
+ /* @__PURE__ */ v(p, {
124
+ direction: "row",
125
+ spacing: 1,
126
+ alignItems: "center",
127
+ children: [/* @__PURE__ */ _(h, {
128
+ select: !0,
129
+ label: "Field type",
130
+ value: I,
131
+ onChange: (e) => U(e.target.value),
132
+ size: "small",
133
+ sx: { flexGrow: 1 },
134
+ children: e.map((e) => /* @__PURE__ */ _(f, {
135
+ value: e.value,
136
+ children: e.label
137
+ }, e.value))
138
+ }), /* @__PURE__ */ _(u, {
139
+ control: /* @__PURE__ */ _(m, {
140
+ checked: E,
141
+ onChange: (e) => N(e.target.checked)
142
+ }),
143
+ label: "Required"
144
+ })]
145
+ }),
146
+ I === "choice" && /* @__PURE__ */ _(i, {
147
+ options: T.enum ?? [],
148
+ onChange: (e) => A({ enum: e })
149
+ }),
150
+ I === "file" && /* @__PURE__ */ _(o, {
151
+ severity: "info",
152
+ variant: "outlined",
153
+ children: "Requesters will be prompted to upload a file. You can attach a downloadable template to this field on each step that uses it."
154
+ })
155
+ ]
156
+ }) : /* @__PURE__ */ _(o, {
157
+ severity: "info",
158
+ children: "No field selected."
159
+ })
160
+ }),
161
+ /* @__PURE__ */ v(s, {
162
+ sx: {
163
+ pt: 2,
164
+ display: "flex",
165
+ justifyContent: "space-between",
166
+ gap: 1
167
+ },
168
+ children: [/* @__PURE__ */ _(c, {
169
+ color: "error",
170
+ startIcon: /* @__PURE__ */ _(b, {}),
171
+ onClick: F,
172
+ disabled: !T,
173
+ children: O ? "Delete (will unbind from steps)" : "Delete field"
174
+ }), /* @__PURE__ */ _(c, {
175
+ variant: "contained",
176
+ onClick: k,
177
+ children: "Done"
178
+ })]
179
+ })
180
+ ]
181
+ })
182
+ });
183
+ }
184
+ //#endregion
185
+ export { S as FieldDefinitionDrawer };
186
+
187
+ //# sourceMappingURL=FieldDefinitionDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldDefinitionDrawer.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldDefinitionDrawer.tsx"],"sourcesContent":["import {\n Alert,\n Box,\n Button,\n Drawer,\n FormControlLabel,\n IconButton,\n MenuItem,\n Stack,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport { Close as CloseIcon, Delete as DeleteIcon } from '@mui/icons-material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useState } from 'react'\nimport { SchemaPropertyContext } from '@/utils/jsonschema/submissionContext'\nimport { ChoiceOptionsEditor } from './ChoiceOptionsEditor'\nimport {\n applyFieldType,\n detectFieldType,\n FIELD_TYPE_OPTIONS,\n sanitizePropertyKey,\n SimpleFieldType,\n} from './schemaFieldUtils'\n\nconst SUBMISSION_CONTEXT_OPTIONS: {\n value: SchemaPropertyContext\n label: string\n}[] = [\n { value: 'ALWAYS', label: 'Always' },\n { value: 'REQUEST_ONLY', label: 'Initial request only' },\n { value: 'RENEWAL_ONLY', label: 'Renewal only' },\n]\n\nexport type FieldDefinitionDrawerProps = {\n open: boolean\n propertyKey: string | null\n /** All property keys currently defined in the schema, including this one. */\n existingKeys: Set<string>\n property: RJSFSchema | null\n isRequired: boolean\n /**\n * Which submission context this property applies to (per the schema's\n * `x-synapse-submissionContext` `allOf` convention). Editable here via a guided select box.\n * This component only calls `onChangeContext`; a container elsewhere in the authoring flow is\n * responsible for moving the property's definition between the schema's top-level `properties`\n * and the matching `allOf` branch so ACT never has to hand-edit `allOf` for the common case.\n */\n context: SchemaPropertyContext\n /** True when this field is bound to one or more steps. Affects delete affordance. */\n isUsedInSteps: boolean\n onClose: () => void\n onUpdate: (patch: Partial<RJSFSchema>) => void\n onRenameKey: (newKey: string) => void\n onReplace: (next: RJSFSchema) => void\n onChangeRequired: (isRequired: boolean) => void\n onChangeContext: (context: SchemaPropertyContext) => void\n onRemove: () => void\n}\n\n/**\n * Slide-in drawer for editing a single field's JSON Schema definition (label, help text, type,\n * required, submission context, choice options, file format).\n */\nexport function FieldDefinitionDrawer({\n open,\n propertyKey,\n existingKeys,\n property,\n isRequired,\n context,\n isUsedInSteps,\n onClose,\n onUpdate,\n onRenameKey,\n onReplace,\n onChangeRequired,\n onChangeContext,\n onRemove,\n}: FieldDefinitionDrawerProps) {\n const type = property ? detectFieldType(property) : null\n const isAdvanced = property !== null && type === null\n\n // The draft exists only while the key is being edited, and is tagged with the key it was started\n // from. When `propertyKey` changes underneath it (switching fields, or the container re-slugging\n // the key from the label) the draft no longer applies and the prop is shown again.\n const [keyDraft, setKeyDraft] = useState<{\n forKey: string | null\n value: string\n } | null>(null)\n const displayedKey =\n keyDraft?.forKey === propertyKey ? keyDraft.value : (propertyKey ?? '')\n\n let keyError: string | null = null\n if (displayedKey.length === 0) {\n keyError = 'Required'\n } else if (displayedKey !== propertyKey && existingKeys.has(displayedKey)) {\n keyError = 'Already used by another field'\n }\n\n const commitKeyDraft = () => {\n if (propertyKey && !keyError && displayedKey !== propertyKey) {\n onRenameKey(displayedKey)\n }\n setKeyDraft(null)\n }\n\n const handleChangeType = (next: SimpleFieldType) => {\n if (!property) return\n onReplace(applyFieldType(property, next))\n }\n\n return (\n <Drawer\n open={open}\n onClose={onClose}\n anchor=\"right\"\n slotProps={{ paper: { sx: { width: { xs: '100%', sm: 480 } } } }}\n >\n <Box\n sx={{ p: 3, display: 'flex', flexDirection: 'column', height: '100%' }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>\n <Typography variant=\"h6\" sx={{ flexGrow: 1 }}>\n Edit field\n </Typography>\n <IconButton onClick={onClose} aria-label=\"Close field editor\">\n <CloseIcon />\n </IconButton>\n </Box>\n\n {propertyKey && (\n <TextField\n label=\"Property key\"\n value={displayedKey}\n onChange={e =>\n setKeyDraft({\n forKey: propertyKey,\n value: sanitizePropertyKey(e.target.value),\n })\n }\n onBlur={commitKeyDraft}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commitKeyDraft()\n }\n }}\n error={keyError !== null}\n helperText={\n keyError ??\n 'Identifies this field in the JSON Schema and submitted requests.'\n }\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n slotProps={{ input: { sx: { fontFamily: 'monospace' } } }}\n />\n )}\n\n {property && (\n <TextField\n select\n label=\"Submission context\"\n value={context}\n onChange={e =>\n onChangeContext(e.target.value as SchemaPropertyContext)\n }\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n helperText=\"Controls whether requesters are asked this question on an initial request, a renewal, or both.\"\n >\n {SUBMISSION_CONTEXT_OPTIONS.map(opt => (\n <MenuItem key={opt.value} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </TextField>\n )}\n\n <Box sx={{ flexGrow: 1, overflow: 'auto' }}>\n {!property ? (\n <Alert severity=\"info\">No field selected.</Alert>\n ) : isAdvanced ? (\n <Alert severity=\"warning\" variant=\"outlined\">\n This field uses settings not supported by the simple editor. Edit\n it via the advanced raw JSON Schema view.\n </Alert>\n ) : (\n <Stack spacing={2}>\n <TextField\n label=\"Question label\"\n value={property.title ?? ''}\n onChange={e => onUpdate({ title: e.target.value })}\n size=\"small\"\n fullWidth\n />\n <TextField\n label=\"Help text\"\n value={property.description ?? ''}\n onChange={e => onUpdate({ description: e.target.value })}\n size=\"small\"\n multiline\n rows={3}\n fullWidth\n helperText=\"Shown to the requester below the question.\"\n />\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <TextField\n select\n label=\"Field type\"\n value={type}\n onChange={e =>\n handleChangeType(e.target.value as SimpleFieldType)\n }\n size=\"small\"\n sx={{ flexGrow: 1 }}\n >\n {FIELD_TYPE_OPTIONS.map(opt => (\n <MenuItem key={opt.value} value={opt.value}>\n {opt.label}\n </MenuItem>\n ))}\n </TextField>\n <FormControlLabel\n control={\n <Switch\n checked={isRequired}\n onChange={e => onChangeRequired(e.target.checked)}\n />\n }\n label=\"Required\"\n />\n </Stack>\n\n {type === 'choice' && (\n <ChoiceOptionsEditor\n options={(property.enum as string[] | undefined) ?? []}\n onChange={next => onUpdate({ enum: next })}\n />\n )}\n\n {type === 'file' && (\n <Alert severity=\"info\" variant=\"outlined\">\n Requesters will be prompted to upload a file. You can attach a\n downloadable template to this field on each step that uses it.\n </Alert>\n )}\n </Stack>\n )}\n </Box>\n\n <Box\n sx={{\n pt: 2,\n display: 'flex',\n justifyContent: 'space-between',\n gap: 1,\n }}\n >\n <Button\n color=\"error\"\n startIcon={<DeleteIcon />}\n onClick={onRemove}\n disabled={!property}\n >\n {isUsedInSteps ? 'Delete (will unbind from steps)' : 'Delete field'}\n </Button>\n <Button variant=\"contained\" onClick={onClose}>\n Done\n </Button>\n </Box>\n </Box>\n </Drawer>\n )\n}\n"],"mappings":";;;;;;;AA0BA,IAAM,IAGA;CACJ;EAAE,OAAO;EAAU,OAAO;CAAS;CACnC;EAAE,OAAO;EAAgB,OAAO;CAAuB;CACvD;EAAE,OAAO;EAAgB,OAAO;CAAe;AACjD;AAgCA,SAAgB,EAAsB,EACpC,SACA,gBACA,iBACA,aACA,eACA,YACA,kBACA,YACA,aACA,gBACA,cACA,qBACA,oBACA,eAC6B;CAC7B,IAAM,IAAO,IAAW,EAAgB,CAAQ,IAAI,MAC9C,IAAa,MAAa,QAAQ,MAAS,MAK3C,CAAC,GAAU,KAAe,EAGtB,IAAI,GACR,IACJ,GAAU,WAAW,IAAc,EAAS,QAAS,KAAe,IAElE,IAA0B;CAC9B,AAAI,EAAa,WAAW,IAC1B,IAAW,aACF,MAAiB,KAAe,EAAa,IAAI,CAAY,MACtE,IAAW;CAGb,IAAM,UAAuB;EAI3B,AAHI,KAAe,CAAC,KAAY,MAAiB,KAC/C,EAAY,CAAY,GAE1B,EAAY,IAAI;CAClB,GAEM,KAAoB,MAA0B;EAC7C,KACL,EAAU,EAAe,GAAU,CAAI,CAAC;CAC1C;CAEA,OACE,kBAAC,GAAD;EACQ;EACG;EACT,QAAO;EACP,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;GAAE,IAAI;GAAQ,IAAI;EAAI,EAAE,EAAE,EAAE;YAE/D,kBAAC,GAAD;GACE,IAAI;IAAE,GAAG;IAAG,SAAS;IAAQ,eAAe;IAAU,QAAQ;GAAO;aADvE;IAGE,kBAAC,GAAD;KAAK,IAAI;MAAE,SAAS;MAAQ,YAAY;MAAU,IAAI;KAAE;eAAxD,CACE,kBAAC,GAAD;MAAY,SAAQ;MAAK,IAAI,EAAE,UAAU,EAAE;gBAAG;KAElC,CAAA,GACZ,kBAAC,GAAD;MAAY,SAAS;MAAS,cAAW;gBACvC,kBAAC,GAAD,CAAY,CAAA;KACF,CAAA,CACT;;IAEJ,KACC,kBAAC,GAAD;KACE,OAAM;KACN,OAAO;KACP,WAAU,MACR,EAAY;MACV,QAAQ;MACR,OAAO,EAAoB,EAAE,OAAO,KAAK;KAC3C,CAAC;KAEH,QAAQ;KACR,YAAW,MAAK;MACd,AAAI,EAAE,QAAQ,YACZ,EAAE,eAAe,GACjB,EAAe;KAEnB;KACA,OAAO,MAAa;KACpB,YACE,KACA;KAEF,MAAK;KACL,WAAA;KACA,IAAI,EAAE,IAAI,EAAE;KACZ,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,YAAY,EAAE,EAAE;IACzD,CAAA;IAGF,KACC,kBAAC,GAAD;KACE,QAAA;KACA,OAAM;KACN,OAAO;KACP,WAAU,MACR,EAAgB,EAAE,OAAO,KAA8B;KAEzD,MAAK;KACL,WAAA;KACA,IAAI,EAAE,IAAI,EAAE;KACZ,YAAW;eAEV,EAA2B,KAAI,MAC9B,kBAAC,GAAD;MAA0B,OAAO,EAAI;gBAClC,EAAI;KACG,GAFK,EAAI,KAET,CACX;IACQ,CAAA;IAGb,kBAAC,GAAD;KAAK,IAAI;MAAE,UAAU;MAAG,UAAU;KAAO;eACrC,IAEE,IACF,kBAAC,GAAD;MAAO,UAAS;MAAU,SAAQ;gBAAW;KAGtC,CAAA,IAEP,kBAAC,GAAD;MAAO,SAAS;gBAAhB;OACE,kBAAC,GAAD;QACE,OAAM;QACN,OAAO,EAAS,SAAS;QACzB,WAAU,MAAK,EAAS,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;QACjD,MAAK;QACL,WAAA;OACD,CAAA;OACD,kBAAC,GAAD;QACE,OAAM;QACN,OAAO,EAAS,eAAe;QAC/B,WAAU,MAAK,EAAS,EAAE,aAAa,EAAE,OAAO,MAAM,CAAC;QACvD,MAAK;QACL,WAAA;QACA,MAAM;QACN,WAAA;QACA,YAAW;OACZ,CAAA;OACD,kBAAC,GAAD;QAAO,WAAU;QAAM,SAAS;QAAG,YAAW;kBAA9C,CACE,kBAAC,GAAD;SACE,QAAA;SACA,OAAM;SACN,OAAO;SACP,WAAU,MACR,EAAiB,EAAE,OAAO,KAAwB;SAEpD,MAAK;SACL,IAAI,EAAE,UAAU,EAAE;mBAEjB,EAAmB,KAAI,MACtB,kBAAC,GAAD;UAA0B,OAAO,EAAI;oBAClC,EAAI;SACG,GAFK,EAAI,KAET,CACX;QACQ,CAAA,GACX,kBAAC,GAAD;SACE,SACE,kBAAC,GAAD;UACE,SAAS;UACT,WAAU,MAAK,EAAiB,EAAE,OAAO,OAAO;SACjD,CAAA;SAEH,OAAM;QACP,CAAA,CACI;;OAEN,MAAS,YACR,kBAAC,GAAD;QACE,SAAU,EAAS,QAAiC,CAAC;QACrD,WAAU,MAAQ,EAAS,EAAE,MAAM,EAAK,CAAC;OAC1C,CAAA;OAGF,MAAS,UACR,kBAAC,GAAD;QAAO,UAAS;QAAO,SAAQ;kBAAW;OAGnC,CAAA;MAEJ;UAlEP,kBAAC,GAAD;MAAO,UAAS;gBAAO;KAAyB,CAAA;IAoE/C,CAAA;IAEL,kBAAC,GAAD;KACE,IAAI;MACF,IAAI;MACJ,SAAS;MACT,gBAAgB;MAChB,KAAK;KACP;eANF,CAQE,kBAAC,GAAD;MACE,OAAM;MACN,WAAW,kBAAC,GAAD,CAAa,CAAA;MACxB,SAAS;MACT,UAAU,CAAC;gBAEV,IAAgB,oCAAoC;KAC/C,CAAA,GACR,kBAAC,GAAD;MAAQ,SAAQ;MAAY,SAAS;gBAAS;KAEtC,CAAA,CACL;;GACF;;CACC,CAAA;AAEZ"}
@@ -0,0 +1,14 @@
1
+ import { FormTemplate } from '@sage-bionetworks/synapse-client';
2
+ import { RJSFSchema } from '@rjsf/utils';
3
+ type FormTemplatePreviewProps = {
4
+ template: FormTemplate;
5
+ jsonSchema: RJSFSchema;
6
+ };
7
+ /**
8
+ * Renders a live preview of how a FormTemplate + its referenced JSON Schema will appear to a
9
+ * requester. Computed client-side against the unsaved draft, purely to give ACT instant feedback
10
+ * while editing.
11
+ */
12
+ export declare function FormTemplatePreview({ template, jsonSchema, }: FormTemplatePreviewProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=FormTemplatePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplatePreview.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FormTemplatePreview.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,YAAY,EACb,MAAM,kCAAkC,CAAA;AAWzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,UAAU,GACX,EAAE,wBAAwB,2CA8E1B"}
@@ -0,0 +1,83 @@
1
+ import { JsonSchemaForm as e } from "../JsonSchemaForm/JsonSchemaForm.js";
2
+ import { generateDataAccessSchema as t } from "../../utils/jsonschema/generateDataAccessSchema.js";
3
+ import { useMemo as n, useState as r } from "react";
4
+ import { Box as i, Paper as a, Step as o, StepButton as s, Stepper as c, ToggleButton as l, ToggleButtonGroup as u, Typography as d } from "@mui/material";
5
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
6
+ import { DataAccessRequestType as h } from "@sage-bionetworks/synapse-client";
7
+ //#region src/components/FormTemplateEditor/FormTemplatePreview.tsx
8
+ function g({ template: g, jsonSchema: _ }) {
9
+ let [v, y] = r(0), [b, x] = r(h.REQUEST), { steps: S } = n(() => t(g, _, b), [
10
+ g,
11
+ _,
12
+ b
13
+ ]);
14
+ if (S.length === 0) return /* @__PURE__ */ p(a, {
15
+ variant: "outlined",
16
+ sx: { p: 2 },
17
+ children: /* @__PURE__ */ p(i, {
18
+ sx: {
19
+ py: 4,
20
+ textAlign: "center"
21
+ },
22
+ children: /* @__PURE__ */ p(d, {
23
+ variant: "body2",
24
+ color: "text.secondary",
25
+ children: "Add at least one step with a bound field to preview the form."
26
+ })
27
+ })
28
+ });
29
+ let C = Math.min(v, S.length - 1), w = S[C], T = w.jsonSchema.title ?? "", E = w.jsonSchema.description ?? "";
30
+ return /* @__PURE__ */ m(a, {
31
+ variant: "outlined",
32
+ sx: { p: 2 },
33
+ children: [
34
+ /* @__PURE__ */ m(u, {
35
+ value: b,
36
+ exclusive: !0,
37
+ size: "small",
38
+ onChange: (e, t) => {
39
+ t && x(t);
40
+ },
41
+ sx: { mb: 2 },
42
+ children: [/* @__PURE__ */ p(l, {
43
+ value: h.REQUEST,
44
+ children: "Request"
45
+ }), /* @__PURE__ */ p(l, {
46
+ value: h.RENEWAL,
47
+ children: "Renewal"
48
+ })]
49
+ }),
50
+ S.length > 1 && /* @__PURE__ */ p(c, {
51
+ activeStep: C,
52
+ nonLinear: !0,
53
+ sx: { mb: 2 },
54
+ children: S.map((e, t) => /* @__PURE__ */ p(o, { children: /* @__PURE__ */ p(s, {
55
+ onClick: () => y(t),
56
+ children: e.jsonSchema.title ?? `Step ${t + 1}`
57
+ }) }, t))
58
+ }),
59
+ T && /* @__PURE__ */ p(d, {
60
+ variant: "h6",
61
+ gutterBottom: !0,
62
+ children: T
63
+ }),
64
+ E && /* @__PURE__ */ p(d, {
65
+ variant: "body2",
66
+ color: "text.secondary",
67
+ sx: { mb: 2 },
68
+ children: E
69
+ }),
70
+ /* @__PURE__ */ p(e, {
71
+ schema: w.jsonSchema,
72
+ uiSchema: w.uiSchema,
73
+ formContext: { descriptionVariant: "inline" },
74
+ children: /* @__PURE__ */ p(f, {}),
75
+ liveValidate: !1
76
+ })
77
+ ]
78
+ });
79
+ }
80
+ //#endregion
81
+ export { g as FormTemplatePreview };
82
+
83
+ //# sourceMappingURL=FormTemplatePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplatePreview.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormTemplatePreview.tsx"],"sourcesContent":["import { JsonSchemaForm } from '@/components/JsonSchemaForm/JsonSchemaForm'\nimport { generateDataAccessSchema } from '@/utils/jsonschema/generateDataAccessSchema'\nimport {\n DataAccessRequestType,\n FormTemplate,\n} from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Paper,\n Step,\n StepButton,\n Stepper,\n ToggleButton,\n ToggleButtonGroup,\n Typography,\n} from '@mui/material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useMemo, useState } from 'react'\n\ntype FormTemplatePreviewProps = {\n template: FormTemplate\n jsonSchema: RJSFSchema\n}\n\n/**\n * Renders a live preview of how a FormTemplate + its referenced JSON Schema will appear to a\n * requester. Computed client-side against the unsaved draft, purely to give ACT instant feedback\n * while editing.\n */\nexport function FormTemplatePreview({\n template,\n jsonSchema,\n}: FormTemplatePreviewProps) {\n const [activeStep, setActiveStep] = useState(0)\n const [requestType, setRequestType] = useState<DataAccessRequestType>(\n DataAccessRequestType.REQUEST,\n )\n\n const { steps } = useMemo(\n () => generateDataAccessSchema(template, jsonSchema, requestType),\n [template, jsonSchema, requestType],\n )\n\n if (steps.length === 0) {\n return (\n <Paper variant=\"outlined\" sx={{ p: 2 }}>\n <Box sx={{ py: 4, textAlign: 'center' }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Add at least one step with a bound field to preview the form.\n </Typography>\n </Box>\n </Paper>\n )\n }\n\n const safeIndex = Math.min(activeStep, steps.length - 1)\n const currentStep = steps[safeIndex]\n const title = (currentStep.jsonSchema.title as string) ?? ''\n const description = (currentStep.jsonSchema.description as string) ?? ''\n\n return (\n <Paper variant=\"outlined\" sx={{ p: 2 }}>\n <ToggleButtonGroup\n value={requestType}\n exclusive\n size=\"small\"\n onChange={(_, next: DataAccessRequestType | null) => {\n if (next) setRequestType(next)\n }}\n sx={{ mb: 2 }}\n >\n <ToggleButton value={DataAccessRequestType.REQUEST}>\n Request\n </ToggleButton>\n <ToggleButton value={DataAccessRequestType.RENEWAL}>\n Renewal\n </ToggleButton>\n </ToggleButtonGroup>\n\n {steps.length > 1 && (\n <Stepper activeStep={safeIndex} nonLinear sx={{ mb: 2 }}>\n {steps.map((step, index) => (\n <Step key={index}>\n <StepButton onClick={() => setActiveStep(index)}>\n {(step.jsonSchema.title as string) ?? `Step ${index + 1}`}\n </StepButton>\n </Step>\n ))}\n </Stepper>\n )}\n\n {title && (\n <Typography variant=\"h6\" gutterBottom>\n {title}\n </Typography>\n )}\n {description && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 2 }}>\n {description}\n </Typography>\n )}\n <JsonSchemaForm\n schema={currentStep.jsonSchema}\n uiSchema={currentStep.uiSchema}\n formContext={{ descriptionVariant: 'inline' }}\n children={<></>}\n liveValidate={false}\n />\n </Paper>\n )\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,EAAoB,EAClC,aACA,iBAC2B;CAC3B,IAAM,CAAC,GAAY,KAAiB,EAAS,CAAC,GACxC,CAAC,GAAa,KAAkB,EACpC,EAAsB,OACxB,GAEM,EAAE,aAAU,QACV,EAAyB,GAAU,GAAY,CAAW,GAChE;EAAC;EAAU;EAAY;CAAW,CACpC;CAEA,IAAI,EAAM,WAAW,GACnB,OACE,kBAAC,GAAD;EAAO,SAAQ;EAAW,IAAI,EAAE,GAAG,EAAE;YACnC,kBAAC,GAAD;GAAK,IAAI;IAAE,IAAI;IAAG,WAAW;GAAS;aACpC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAAiB;GAEvC,CAAA;EACT,CAAA;CACA,CAAA;CAIX,IAAM,IAAY,KAAK,IAAI,GAAY,EAAM,SAAS,CAAC,GACjD,IAAc,EAAM,IACpB,IAAS,EAAY,WAAW,SAAoB,IACpD,IAAe,EAAY,WAAW,eAA0B;CAEtE,OACE,kBAAC,GAAD;EAAO,SAAQ;EAAW,IAAI,EAAE,GAAG,EAAE;YAArC;GACE,kBAAC,GAAD;IACE,OAAO;IACP,WAAA;IACA,MAAK;IACL,WAAW,GAAG,MAAuC;KACnD,AAAI,KAAM,EAAe,CAAI;IAC/B;IACA,IAAI,EAAE,IAAI,EAAE;cAPd,CASE,kBAAC,GAAD;KAAc,OAAO,EAAsB;eAAS;IAEtC,CAAA,GACd,kBAAC,GAAD;KAAc,OAAO,EAAsB;eAAS;IAEtC,CAAA,CACG;;GAElB,EAAM,SAAS,KACd,kBAAC,GAAD;IAAS,YAAY;IAAW,WAAA;IAAU,IAAI,EAAE,IAAI,EAAE;cACnD,EAAM,KAAK,GAAM,MAChB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAY,eAAe,EAAc,CAAK;eAC1C,EAAK,WAAW,SAAoB,QAAQ,IAAQ;IAC5C,CAAA,EACR,GAJK,CAIL,CACP;GACM,CAAA;GAGV,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAK,cAAA;cACtB;GACS,CAAA;GAEb,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;IAAiB,IAAI,EAAE,IAAI,EAAE;cAC5D;GACS,CAAA;GAEd,kBAAC,GAAD;IACE,QAAQ,EAAY;IACpB,UAAU,EAAY;IACtB,aAAa,EAAE,oBAAoB,SAAS;IAC5C,UAAU,kBAAA,GAAA,CAAI,CAAA;IACd,cAAc;GACf,CAAA;EACI;;AAEX"}
@@ -0,0 +1,13 @@
1
+ import { RJSFSchema } from '@rjsf/utils';
2
+ type JsonSchemaBodyEditorProps = {
3
+ value: RJSFSchema;
4
+ onChange: (next: RJSFSchema) => void;
5
+ };
6
+ /**
7
+ * Edits a JSON Schema as raw JSON. Calls `onChange` only when the text parses; otherwise shows
8
+ * the parse error. `value` is read only on mount, so remount with a new `key` to load a
9
+ * different schema.
10
+ */
11
+ export declare function JsonSchemaBodyEditor({ value, onChange, }: JsonSchemaBodyEditorProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=JsonSchemaBodyEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSchemaBodyEditor.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/JsonSchemaBodyEditor.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,KAAK,yBAAyB,GAAG;IAC/B,KAAK,EAAE,UAAU,CAAA;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;CACrC,CAAA;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,GACT,EAAE,yBAAyB,2CAgC3B"}
@@ -0,0 +1,33 @@
1
+ import { useState as e } from "react";
2
+ import { TextField as t } from "@mui/material";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/components/FormTemplateEditor/JsonSchemaBodyEditor.tsx
5
+ function r({ value: r, onChange: i }) {
6
+ let [a, o] = e(() => JSON.stringify(r, null, 2)), [s, c] = e(null), l = (e) => {
7
+ o(e);
8
+ try {
9
+ let t = JSON.parse(e);
10
+ c(null), i(t);
11
+ } catch (e) {
12
+ c(e instanceof Error ? e.message : "Invalid JSON");
13
+ }
14
+ };
15
+ return /* @__PURE__ */ n(t, {
16
+ label: "Raw JSON Schema",
17
+ value: a,
18
+ onChange: (e) => l(e.target.value),
19
+ error: !!s,
20
+ helperText: s ?? " ",
21
+ multiline: !0,
22
+ rows: 14,
23
+ fullWidth: !0,
24
+ slotProps: { input: { sx: {
25
+ fontFamily: "monospace",
26
+ fontSize: "0.85rem"
27
+ } } }
28
+ });
29
+ }
30
+ //#endregion
31
+ export { r as JsonSchemaBodyEditor };
32
+
33
+ //# sourceMappingURL=JsonSchemaBodyEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSchemaBodyEditor.js","names":[],"sources":["../../../src/components/FormTemplateEditor/JsonSchemaBodyEditor.tsx"],"sourcesContent":["import { TextField } from '@mui/material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useState } from 'react'\n\ntype JsonSchemaBodyEditorProps = {\n value: RJSFSchema\n onChange: (next: RJSFSchema) => void\n}\n\n/**\n * Edits a JSON Schema as raw JSON. Calls `onChange` only when the text parses; otherwise shows\n * the parse error. `value` is read only on mount, so remount with a new `key` to load a\n * different schema.\n */\nexport function JsonSchemaBodyEditor({\n value,\n onChange,\n}: JsonSchemaBodyEditorProps) {\n const [text, setText] = useState(() => JSON.stringify(value, null, 2))\n const [error, setError] = useState<string | null>(null)\n\n const handleChange = (next: string) => {\n setText(next)\n try {\n const parsed = JSON.parse(next)\n setError(null)\n onChange(parsed)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Invalid JSON')\n }\n }\n\n return (\n <TextField\n label=\"Raw JSON Schema\"\n value={text}\n onChange={e => handleChange(e.target.value)}\n error={!!error}\n helperText={error ?? ' '}\n multiline\n rows={14}\n fullWidth\n slotProps={{\n input: {\n sx: { fontFamily: 'monospace', fontSize: '0.85rem' },\n },\n }}\n />\n )\n}\n"],"mappings":";;;;AAcA,SAAgB,EAAqB,EACnC,UACA,eAC4B;CAC5B,IAAM,CAAC,GAAM,KAAW,QAAe,KAAK,UAAU,GAAO,MAAM,CAAC,CAAC,GAC/D,CAAC,GAAO,KAAY,EAAwB,IAAI,GAEhD,KAAgB,MAAiB;EACrC,EAAQ,CAAI;EACZ,IAAI;GACF,IAAM,IAAS,KAAK,MAAM,CAAI;GAE9B,AADA,EAAS,IAAI,GACb,EAAS,CAAM;EACjB,SAAS,GAAG;GACV,EAAS,aAAa,QAAQ,EAAE,UAAU,cAAc;EAC1D;CACF;CAEA,OACE,kBAAC,GAAD;EACE,OAAM;EACN,OAAO;EACP,WAAU,MAAK,EAAa,EAAE,OAAO,KAAK;EAC1C,OAAO,CAAC,CAAC;EACT,YAAY,KAAS;EACrB,WAAA;EACA,MAAM;EACN,WAAA;EACA,WAAW,EACT,OAAO,EACL,IAAI;GAAE,YAAY;GAAa,UAAU;EAAU,EACrD,EACF;CACD,CAAA;AAEL"}
@@ -0,0 +1,32 @@
1
+ import { RJSFSchema } from '@rjsf/utils';
2
+ import { FormTemplateStep } from '@sage-bionetworks/synapse-client';
3
+ /**
4
+ * A property is a "leaf" — the only kind a `FormTemplateField.schemaPath` may address — when it
5
+ * is not itself a nested object schema with its own `properties`. The simple editor only ever
6
+ * authors leaves, but the raw JSON Schema escape hatch can produce a nested object.
7
+ */
8
+ export declare function isLeafSchemaProperty(subSchema: RJSFSchema): boolean;
9
+ /**
10
+ * Whether a field's `uiDefinition` (an RJSF `UiSchema` fragment) declares a `ui:widget`
11
+ * incompatible with the resolved property's type/format. An empty or widget-less `uiDefinition`
12
+ * is always compatible — there is nothing to conflict with.
13
+ */
14
+ export declare function isUiHintCompatible(subSchema: RJSFSchema, uiDefinition: unknown): boolean;
15
+ export type FormTemplateFieldValidationError = {
16
+ /** Index of the step/field slot this error is anchored to. Omitted for an error against a
17
+ * schema-required property that isn't bound to any field -- there is no slot to anchor it to. */
18
+ stepIndex?: number;
19
+ fieldIndex?: number;
20
+ schemaPath: string;
21
+ message: string;
22
+ };
23
+ /**
24
+ * Replicates the three rules the server enforces on `FormTemplateField` at create/update time
25
+ * (see the `FormTemplateField` doc comment), so the editor can block save and point the error at
26
+ * the offending field before ever reaching the server: the server only returns a flat,
27
+ * concatenated message, not per-field errors. Also flags a schema property the server will
28
+ * require (per its resolved submission context) that no field in the template binds to -- the
29
+ * server accepts this silently, but the requester would then be unable to satisfy it.
30
+ */
31
+ export declare function validateFormTemplateFields(steps: FormTemplateStep[], jsonSchema: RJSFSchema): FormTemplateFieldValidationError[];
32
+ //# sourceMappingURL=formTemplateValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formTemplateValidation.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/formTemplateValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAEL,gBAAgB,EACjB,MAAM,kCAAkC,CAAA;AAQzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAEnE;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,OAAO,GACpB,OAAO,CAOT;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C;qGACiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,gBAAgB,EAAE,EACzB,UAAU,EAAE,UAAU,GACrB,gCAAgC,EAAE,CAoEpC"}
@@ -0,0 +1,75 @@
1
+ import { listResolvedSchemaProperties as e, pointerToPropertyKey as t, propertyKeyToPointer as n, resolveSchemaPropertyAtPointer as r } from "../../utils/jsonschema/submissionContext.js";
2
+ //#region src/components/FormTemplateEditor/formTemplateValidation.ts
3
+ function i(e) {
4
+ return !(e.type === "object" && e.properties != null);
5
+ }
6
+ var a = {
7
+ textarea: (e) => e.type === "string" && !e.enum,
8
+ password: (e) => e.type === "string" && !e.enum,
9
+ radio: (e) => (e.type === "string" || e.type === "boolean") && !!e.enum || e.type === "boolean",
10
+ select: (e) => e.type === "string" && !!e.enum,
11
+ checkboxes: (e) => e.type === "array",
12
+ checkbox: (e) => e.type === "boolean",
13
+ updown: (e) => e.type === "number" || e.type === "integer",
14
+ range: (e) => e.type === "number" || e.type === "integer"
15
+ };
16
+ function o(e, t) {
17
+ let n = t?.["ui:widget"];
18
+ if (typeof n != "string") return !0;
19
+ let r = a[n];
20
+ return r ? r(e) : !0;
21
+ }
22
+ function s(a, s) {
23
+ let c = [], l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set();
24
+ a.forEach((e, n) => {
25
+ e.fields.forEach((e, a) => {
26
+ let { schemaPath: d } = e;
27
+ if (l.has(d)) {
28
+ c.push({
29
+ stepIndex: n,
30
+ fieldIndex: a,
31
+ schemaPath: d,
32
+ message: `"${d}" is already bound to another field in this template.`
33
+ });
34
+ return;
35
+ }
36
+ l.add(d);
37
+ let f = t(d);
38
+ f && u.add(f);
39
+ let p = r(s, d)?.subSchema;
40
+ if (!p) {
41
+ c.push({
42
+ stepIndex: n,
43
+ fieldIndex: a,
44
+ schemaPath: d,
45
+ message: `"${d}" does not resolve to a property in the schema.`
46
+ });
47
+ return;
48
+ }
49
+ if (!i(p)) {
50
+ c.push({
51
+ stepIndex: n,
52
+ fieldIndex: a,
53
+ schemaPath: d,
54
+ message: `"${d}" is a nested object, not a single field.`
55
+ });
56
+ return;
57
+ }
58
+ o(p, e.uiDefinition) || c.push({
59
+ stepIndex: n,
60
+ fieldIndex: a,
61
+ schemaPath: d,
62
+ message: `The UI hint for "${d}" is incompatible with its property type.`
63
+ });
64
+ });
65
+ });
66
+ for (let t of e(s)) t.isRequired && !u.has(t.propertyKey) && c.push({
67
+ schemaPath: n(t.propertyKey),
68
+ message: `"${t.propertyKey}" is required by the schema but is not bound to any field in this template.`
69
+ });
70
+ return c;
71
+ }
72
+ //#endregion
73
+ export { i as isLeafSchemaProperty, o as isUiHintCompatible, s as validateFormTemplateFields };
74
+
75
+ //# sourceMappingURL=formTemplateValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formTemplateValidation.js","names":[],"sources":["../../../src/components/FormTemplateEditor/formTemplateValidation.ts"],"sourcesContent":["import { RJSFSchema } from '@rjsf/utils'\nimport {\n FormTemplateField,\n FormTemplateStep,\n} from '@sage-bionetworks/synapse-client'\nimport {\n listResolvedSchemaProperties,\n pointerToPropertyKey,\n propertyKeyToPointer,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\n\n/**\n * A property is a \"leaf\" — the only kind a `FormTemplateField.schemaPath` may address — when it\n * is not itself a nested object schema with its own `properties`. The simple editor only ever\n * authors leaves, but the raw JSON Schema escape hatch can produce a nested object.\n */\nexport function isLeafSchemaProperty(subSchema: RJSFSchema): boolean {\n return !(subSchema.type === 'object' && subSchema.properties != null)\n}\n\n/** RJSF `ui:widget` names compatible with each JSON Schema property shape. */\nconst WIDGET_COMPATIBILITY: Record<string, (subSchema: RJSFSchema) => boolean> =\n {\n textarea: s => s.type === 'string' && !s.enum,\n password: s => s.type === 'string' && !s.enum,\n radio: s =>\n ((s.type === 'string' || s.type === 'boolean') && !!s.enum) ||\n s.type === 'boolean',\n select: s => s.type === 'string' && !!s.enum,\n checkboxes: s => s.type === 'array',\n checkbox: s => s.type === 'boolean',\n updown: s => s.type === 'number' || s.type === 'integer',\n range: s => s.type === 'number' || s.type === 'integer',\n }\n\n/**\n * Whether a field's `uiDefinition` (an RJSF `UiSchema` fragment) declares a `ui:widget`\n * incompatible with the resolved property's type/format. An empty or widget-less `uiDefinition`\n * is always compatible — there is nothing to conflict with.\n */\nexport function isUiHintCompatible(\n subSchema: RJSFSchema,\n uiDefinition: unknown,\n): boolean {\n const widget = (uiDefinition as Record<string, unknown> | undefined)?.[\n 'ui:widget'\n ]\n if (typeof widget !== 'string') return true\n const isCompatible = WIDGET_COMPATIBILITY[widget]\n return isCompatible ? isCompatible(subSchema) : true\n}\n\nexport type FormTemplateFieldValidationError = {\n /** Index of the step/field slot this error is anchored to. Omitted for an error against a\n * schema-required property that isn't bound to any field -- there is no slot to anchor it to. */\n stepIndex?: number\n fieldIndex?: number\n schemaPath: string\n message: string\n}\n\n/**\n * Replicates the three rules the server enforces on `FormTemplateField` at create/update time\n * (see the `FormTemplateField` doc comment), so the editor can block save and point the error at\n * the offending field before ever reaching the server: the server only returns a flat,\n * concatenated message, not per-field errors. Also flags a schema property the server will\n * require (per its resolved submission context) that no field in the template binds to -- the\n * server accepts this silently, but the requester would then be unable to satisfy it.\n */\nexport function validateFormTemplateFields(\n steps: FormTemplateStep[],\n jsonSchema: RJSFSchema,\n): FormTemplateFieldValidationError[] {\n const errors: FormTemplateFieldValidationError[] = []\n const seenSchemaPaths = new Set<string>()\n const boundPropertyKeys = new Set<string>()\n\n steps.forEach((step, stepIndex) => {\n step.fields.forEach((field: FormTemplateField, fieldIndex: number) => {\n const { schemaPath } = field\n\n if (seenSchemaPaths.has(schemaPath)) {\n errors.push({\n stepIndex,\n fieldIndex,\n schemaPath,\n message: `\"${schemaPath}\" is already bound to another field in this template.`,\n })\n return\n }\n seenSchemaPaths.add(schemaPath)\n\n const propertyKey = pointerToPropertyKey(schemaPath)\n if (propertyKey) boundPropertyKeys.add(propertyKey)\n\n const subSchema = resolveSchemaPropertyAtPointer(\n jsonSchema,\n schemaPath,\n )?.subSchema\n if (!subSchema) {\n errors.push({\n stepIndex,\n fieldIndex,\n schemaPath,\n message: `\"${schemaPath}\" does not resolve to a property in the schema.`,\n })\n return\n }\n\n if (!isLeafSchemaProperty(subSchema)) {\n errors.push({\n stepIndex,\n fieldIndex,\n schemaPath,\n message: `\"${schemaPath}\" is a nested object, not a single field.`,\n })\n return\n }\n\n if (!isUiHintCompatible(subSchema, field.uiDefinition)) {\n errors.push({\n stepIndex,\n fieldIndex,\n schemaPath,\n message: `The UI hint for \"${schemaPath}\" is incompatible with its property type.`,\n })\n }\n })\n })\n\n for (const property of listResolvedSchemaProperties(jsonSchema)) {\n if (property.isRequired && !boundPropertyKeys.has(property.propertyKey)) {\n errors.push({\n schemaPath: propertyKeyToPointer(property.propertyKey),\n message: `\"${property.propertyKey}\" is required by the schema but is not bound to any field in this template.`,\n })\n }\n }\n\n return errors\n}\n"],"mappings":";;AAiBA,SAAgB,EAAqB,GAAgC;CACnE,OAAO,EAAE,EAAU,SAAS,YAAY,EAAU,cAAc;AAClE;AAGA,IAAM,IACJ;CACE,WAAU,MAAK,EAAE,SAAS,YAAY,CAAC,EAAE;CACzC,WAAU,MAAK,EAAE,SAAS,YAAY,CAAC,EAAE;CACzC,QAAO,OACH,EAAE,SAAS,YAAY,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE,QACtD,EAAE,SAAS;CACb,SAAQ,MAAK,EAAE,SAAS,YAAY,CAAC,CAAC,EAAE;CACxC,aAAY,MAAK,EAAE,SAAS;CAC5B,WAAU,MAAK,EAAE,SAAS;CAC1B,SAAQ,MAAK,EAAE,SAAS,YAAY,EAAE,SAAS;CAC/C,QAAO,MAAK,EAAE,SAAS,YAAY,EAAE,SAAS;AAChD;AAOF,SAAgB,EACd,GACA,GACS;CACT,IAAM,IAAU,IACd;CAEF,IAAI,OAAO,KAAW,UAAU,OAAO;CACvC,IAAM,IAAe,EAAqB;CAC1C,OAAO,IAAe,EAAa,CAAS,IAAI;AAClD;AAmBA,SAAgB,EACd,GACA,GACoC;CACpC,IAAM,IAA6C,CAAC,GAC9C,oBAAkB,IAAI,IAAY,GAClC,oBAAoB,IAAI,IAAY;CAE1C,EAAM,SAAS,GAAM,MAAc;EACjC,EAAK,OAAO,SAAS,GAA0B,MAAuB;GACpE,IAAM,EAAE,kBAAe;GAEvB,IAAI,EAAgB,IAAI,CAAU,GAAG;IACnC,EAAO,KAAK;KACV;KACA;KACA;KACA,SAAS,IAAI,EAAW;IAC1B,CAAC;IACD;GACF;GACA,EAAgB,IAAI,CAAU;GAE9B,IAAM,IAAc,EAAqB,CAAU;GACnD,AAAI,KAAa,EAAkB,IAAI,CAAW;GAElD,IAAM,IAAY,EAChB,GACA,CACF,GAAG;GACH,IAAI,CAAC,GAAW;IACd,EAAO,KAAK;KACV;KACA;KACA;KACA,SAAS,IAAI,EAAW;IAC1B,CAAC;IACD;GACF;GAEA,IAAI,CAAC,EAAqB,CAAS,GAAG;IACpC,EAAO,KAAK;KACV;KACA;KACA;KACA,SAAS,IAAI,EAAW;IAC1B,CAAC;IACD;GACF;GAEA,AAAK,EAAmB,GAAW,EAAM,YAAY,KACnD,EAAO,KAAK;IACV;IACA;IACA;IACA,SAAS,oBAAoB,EAAW;GAC1C,CAAC;EAEL,CAAC;CACH,CAAC;CAED,KAAK,IAAM,KAAY,EAA6B,CAAU,GAC5D,AAAI,EAAS,cAAc,CAAC,EAAkB,IAAI,EAAS,WAAW,KACpE,EAAO,KAAK;EACV,YAAY,EAAqB,EAAS,WAAW;EACrD,SAAS,IAAI,EAAS,YAAY;CACpC,CAAC;CAIL,OAAO;AACT"}