synapse-react-client 4.0.41 → 4.0.42

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 (313) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
  3. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
  4. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
  5. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
  6. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +138 -244
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +179 -63
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +2 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +13 -13
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts +3 -2
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +1 -1
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +112 -143
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +4 -2
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +8 -7
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +79 -47
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
  46. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
  47. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
  48. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
  49. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
  50. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +11 -0
  51. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
  52. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
  53. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
  54. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
  55. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
  56. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
  57. package/dist/components/AclEditor/AclEditor.js +20 -20
  58. package/dist/components/Authentication/TwoFactorBackupCodes.js +1 -1
  59. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  60. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  61. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +79 -69
  62. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  63. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  64. package/dist/components/DataGrid/SynapseGrid.js +244 -246
  65. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  66. package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
  67. package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
  68. package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
  69. package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
  70. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  71. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +30 -29
  72. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  73. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
  74. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  75. package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
  76. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  77. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
  78. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
  79. package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
  80. package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
  81. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
  82. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
  83. package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
  84. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  85. package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
  86. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  87. package/dist/components/FilePreview/PdfPreview.js +15 -16
  88. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  89. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  90. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +71 -68
  91. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  92. package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
  93. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
  94. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
  95. package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
  96. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
  97. package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
  98. package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
  99. package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
  100. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
  101. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
  102. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
  103. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
  104. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
  105. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
  106. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
  107. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
  108. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
  109. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
  110. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
  111. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
  112. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
  113. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
  114. package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
  115. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
  116. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
  117. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
  118. package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
  119. package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
  120. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
  121. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
  122. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
  123. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
  124. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -1
  125. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +1 -12
  126. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -1
  127. package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
  128. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
  129. package/dist/components/FormTemplateEditor/StepCard.js +203 -0
  130. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
  131. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
  132. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
  133. package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
  134. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
  135. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
  136. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
  137. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
  138. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
  139. package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
  140. package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
  141. package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
  142. package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
  143. package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
  144. package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
  145. package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
  146. package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
  147. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
  148. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
  149. package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
  150. package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
  151. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
  152. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
  153. package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
  154. package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
  155. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +3 -1
  156. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -1
  157. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +26 -8
  158. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
  159. package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
  160. package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
  161. package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
  162. package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
  163. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
  164. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
  165. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
  166. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
  167. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
  168. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
  169. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
  170. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
  171. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
  172. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +34 -19
  173. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
  174. package/dist/components/FormTemplateEditor/utils.d.ts +2 -2
  175. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -1
  176. package/dist/components/FormTemplateEditor/utils.js +7 -10
  177. package/dist/components/FormTemplateEditor/utils.js.map +1 -1
  178. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
  179. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
  180. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
  181. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  182. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +1 -0
  183. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  184. package/dist/components/QueryBuilder/FilterConditionRow.js +102 -105
  185. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  186. package/dist/components/QueryBuilder/FilterGroupNode.js +6 -6
  187. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  188. package/dist/components/QueryBuilder/QueryBuilderControls.js +88 -81
  189. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  190. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
  191. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  192. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  193. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
  194. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
  195. package/dist/components/QueryBuilder/qbTreeToReadable.js +24 -20
  196. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
  197. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -1
  198. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +2 -2
  199. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -1
  200. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +1 -1
  201. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
  202. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  203. package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
  204. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  205. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
  206. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
  207. package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
  208. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
  209. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
  210. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
  211. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
  212. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
  213. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  214. package/dist/components/SynapseTable/SearchV2.js +4 -4
  215. package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
  216. package/dist/components/ToastMessage/ToastMessage.js +25 -22
  217. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  218. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
  219. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
  220. package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
  221. package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
  222. package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
  223. package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
  224. package/dist/components/dataaccess/FormTemplateTable.js +124 -0
  225. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
  226. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  227. package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
  228. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  229. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  230. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -0
  231. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  232. package/dist/components/widgets/FileHandleLink.d.ts +12 -2
  233. package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
  234. package/dist/components/widgets/FileHandleLink.js +25 -29
  235. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  236. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +2 -0
  237. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
  238. package/dist/mocks/accessRequirement/mockFormTemplates.js +8 -2
  239. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
  240. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
  241. package/dist/mocks/accessRequirement/mockJsonSchemas.js +17 -31
  242. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
  243. package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
  244. package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
  245. package/dist/mocks/msw/handlers/authHandlers.js +6 -2
  246. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  247. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
  248. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  249. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +52 -46
  250. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  251. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  252. package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
  253. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  254. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
  255. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
  256. package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
  257. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
  258. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +8 -0
  259. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  260. package/dist/mocks/msw/handlers/schemaHandlers.js +20 -3
  261. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  262. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
  263. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
  264. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
  265. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
  266. package/dist/style/abstracts/_cssVariables.scss +13 -0
  267. package/dist/style/components/_toasts.scss +10 -1
  268. package/dist/style/main.css +1 -1
  269. package/dist/synapse-queries/KeyFactory.d.ts +8 -1
  270. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  271. package/dist/synapse-queries/KeyFactory.js +17 -4
  272. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  273. package/dist/synapse-queries/auth/index.d.ts +1 -0
  274. package/dist/synapse-queries/auth/index.d.ts.map +1 -1
  275. package/dist/synapse-queries/auth/index.js +2 -1
  276. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
  277. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
  278. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
  279. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
  280. package/dist/synapse-queries/dataaccess/index.js +5 -5
  281. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
  282. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  283. package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
  284. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  285. package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
  286. package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
  287. package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
  288. package/dist/synapse-queries/file/useFileHandle.js +15 -6
  289. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  290. package/dist/synapse-queries/index.js +260 -253
  291. package/dist/synapse-queries/jsonschema/index.js +2 -2
  292. package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
  293. package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
  294. package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
  295. package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
  296. package/dist/tsconfig.build.tsbuildinfo +1 -1
  297. package/dist/utils/APIConstants.d.ts +1 -0
  298. package/dist/utils/APIConstants.d.ts.map +1 -1
  299. package/dist/utils/APIConstants.js +2 -2
  300. package/dist/utils/APIConstants.js.map +1 -1
  301. package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
  302. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  303. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  304. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  305. package/dist/utils/functions/toPascalCase.d.ts +6 -0
  306. package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
  307. package/dist/utils/functions/toPascalCase.js +8 -0
  308. package/dist/utils/functions/toPascalCase.js.map +1 -0
  309. package/dist/utils/jsonschema/submissionContext.d.ts +5 -0
  310. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -1
  311. package/dist/utils/jsonschema/submissionContext.js +22 -30
  312. package/dist/utils/jsonschema/submissionContext.js.map +1 -1
  313. package/package.json +10 -9
@@ -0,0 +1,9 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { FormTemplateFieldValidationError } from './formTemplateValidation';
3
+ type FieldValidationErrorAlertProps = PropsWithChildren<{
4
+ errors: FormTemplateFieldValidationError[];
5
+ }>;
6
+ /** Lists template field validation errors, after an optional lead-in passed as children. */
7
+ export declare function FieldValidationErrorAlert({ errors, children, }: FieldValidationErrorAlertProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=FieldValidationErrorAlert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValidationErrorAlert.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FieldValidationErrorAlert.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAA;AAG3E,KAAK,8BAA8B,GAAG,iBAAiB,CAAC;IACtD,MAAM,EAAE,gCAAgC,EAAE,CAAA;CAC3C,CAAC,CAAA;AAEF,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,QAAQ,GACT,EAAE,8BAA8B,2CAWhC"}
@@ -0,0 +1,18 @@
1
+ import e from "./FieldValidationErrorAlert.module.js";
2
+ import { Alert as t } from "@mui/material";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region src/components/FormTemplateEditor/FieldValidationErrorAlert.tsx
5
+ function i({ errors: i, children: a }) {
6
+ return /* @__PURE__ */ r(t, {
7
+ severity: "error",
8
+ sx: { mt: 2 },
9
+ children: [a, /* @__PURE__ */ n("ul", {
10
+ className: e.errorList,
11
+ children: i.map((e, t) => /* @__PURE__ */ n("li", { children: e.message }, t))
12
+ })]
13
+ });
14
+ }
15
+ //#endregion
16
+ export { i as FieldValidationErrorAlert };
17
+
18
+ //# sourceMappingURL=FieldValidationErrorAlert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValidationErrorAlert.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldValidationErrorAlert.tsx"],"sourcesContent":["import { Alert } from '@mui/material'\nimport { PropsWithChildren } from 'react'\nimport { FormTemplateFieldValidationError } from './formTemplateValidation'\nimport styles from './FieldValidationErrorAlert.module.scss'\n\ntype FieldValidationErrorAlertProps = PropsWithChildren<{\n errors: FormTemplateFieldValidationError[]\n}>\n\n/** Lists template field validation errors, after an optional lead-in passed as children. */\nexport function FieldValidationErrorAlert({\n errors,\n children,\n}: FieldValidationErrorAlertProps) {\n return (\n <Alert severity=\"error\" sx={{ mt: 2 }}>\n {children}\n <ul className={styles.errorList}>\n {errors.map((e, i) => (\n <li key={i}>{e.message}</li>\n ))}\n </ul>\n </Alert>\n )\n}\n"],"mappings":";;;;AAUA,SAAgB,EAA0B,EACxC,WACA,eACiC;CACjC,OACE,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,IAAI,EAAE;YAApC,CACG,GACD,kBAAC,MAAD;GAAI,WAAW,EAAO;aACnB,EAAO,KAAK,GAAG,MACd,kBAAC,MAAD,EAAA,UAAa,EAAE,QAAY,GAAlB,CAAkB,CAC5B;EACC,CAAA,CACC;;AAEX"}
@@ -0,0 +1,5 @@
1
+ import './FieldValidationErrorAlert.css';var e = { errorList: "_errorList_705k9_1" };
2
+ //#endregion
3
+ export { e as default };
4
+
5
+ //# sourceMappingURL=FieldValidationErrorAlert.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValidationErrorAlert.module.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss"],"sourcesContent":[".errorList {\n margin: 0;\n padding-left: 1.25em;\n}\n"],"mappings":""}
@@ -0,0 +1,4 @@
1
+ .errorList {
2
+ margin: 0;
3
+ padding-left: 1.25em;
4
+ }
@@ -0,0 +1,21 @@
1
+ import { RJSFSchema } from '@rjsf/utils';
2
+ import { ResolvedSchemaProperty } from '@/utils/jsonschema/submissionContext';
3
+ import { EditableFormTemplateStep } from './utils';
4
+ export type FormStructurePanelProps = {
5
+ steps: EditableFormTemplateStep[];
6
+ jsonSchema: RJSFSchema;
7
+ /** Properties not yet bound to any step in the template. */
8
+ unboundProperties: ResolvedSchemaProperty[];
9
+ /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */
10
+ formTemplateId: string | undefined;
11
+ onStepsChange: (next: EditableFormTemplateStep[]) => void;
12
+ onBindField: (propertyKey: string, stepKey: string) => void;
13
+ };
14
+ /**
15
+ * Right pane: the multi-step form structure. Steps are collapsible cards;
16
+ * each step contains a list of field slots (with inline-expand for slot config)
17
+ * and a "Bind field" dropdown listing any library fields not yet bound to a
18
+ * step.
19
+ */
20
+ export declare function FormStructurePanel({ steps, jsonSchema, unboundProperties, formTemplateId, onStepsChange, onBindField, }: FormStructurePanelProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=FormStructurePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormStructurePanel.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FormStructurePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAEL,sBAAsB,EACvB,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAGL,wBAAwB,EAEzB,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,wBAAwB,EAAE,CAAA;IACjC,UAAU,EAAE,UAAU,CAAA;IACtB,4DAA4D;IAC5D,iBAAiB,EAAE,sBAAsB,EAAE,CAAA;IAC3C,iGAAiG;IACjG,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,aAAa,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,KAAK,IAAI,CAAA;IACzD,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5D,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,WAAW,GACZ,EAAE,uBAAuB,2CAgGzB"}
@@ -0,0 +1,108 @@
1
+ import { moveItem as e } from "../../utils/functions/ArrayUtils.js";
2
+ import { propertyKeyToPointer as t } from "../../utils/jsonschema/submissionContext.js";
3
+ import { createEditableStep as n } from "./utils.js";
4
+ import { StepCard as r } from "./StepCard.js";
5
+ import { Alert as i, Box as a, Button as o, Paper as s, Stack as c, Typography as l } from "@mui/material";
6
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
7
+ import { Add as f } from "@mui/icons-material";
8
+ import p from "pluralize";
9
+ //#region src/components/FormTemplateEditor/FormStructurePanel.tsx
10
+ function m({ steps: m, jsonSchema: h, unboundProperties: g, formTemplateId: _, onStepsChange: v, onBindField: y }) {
11
+ let b = (e, t) => {
12
+ v(m.map((n, r) => r === e ? {
13
+ ...n,
14
+ ...t
15
+ } : n));
16
+ }, x = () => {
17
+ v([...m, n()]);
18
+ }, S = (e) => {
19
+ v(m.filter((t, n) => n !== e));
20
+ }, C = (t, n) => {
21
+ v(e(m, t, n));
22
+ }, w = g.filter((e) => e.isRequired), T = g.filter((e) => !e.isRequired);
23
+ return /* @__PURE__ */ d(s, {
24
+ variant: "outlined",
25
+ sx: {
26
+ p: 2,
27
+ height: "100%"
28
+ },
29
+ children: [
30
+ /* @__PURE__ */ d(a, {
31
+ sx: {
32
+ mb: 1.5,
33
+ display: "flex",
34
+ justifyContent: "space-between",
35
+ alignItems: "flex-start",
36
+ gap: 1
37
+ },
38
+ children: [/* @__PURE__ */ d(a, { children: [/* @__PURE__ */ u(l, {
39
+ variant: "subtitle2",
40
+ children: "Steps"
41
+ }), /* @__PURE__ */ u(l, {
42
+ variant: "caption",
43
+ color: "text.secondary",
44
+ children: "Arrange fields into pages requesters will fill out in order."
45
+ })] }), /* @__PURE__ */ u(o, {
46
+ size: "small",
47
+ variant: "outlined",
48
+ startIcon: /* @__PURE__ */ u(f, {}),
49
+ onClick: x,
50
+ children: "Add step"
51
+ })]
52
+ }),
53
+ w.length > 0 && /* @__PURE__ */ d(i, {
54
+ severity: "error",
55
+ sx: { mb: 1.5 },
56
+ children: [
57
+ p("required field", w.length, !0),
58
+ " ",
59
+ p("is", w.length),
60
+ " not bound to a step and must be bound before saving:",
61
+ " ",
62
+ w.map((e) => e.subSchema.title ?? t(e.propertyKey)).join(", "),
63
+ "."
64
+ ]
65
+ }),
66
+ T.length > 0 && /* @__PURE__ */ d(i, {
67
+ severity: "warning",
68
+ sx: { mb: 1.5 },
69
+ children: [
70
+ p("field", T.length, !0),
71
+ " ",
72
+ p("is", T.length),
73
+ " not yet bound to a step. Use a step's \"",
74
+ "Bind field",
75
+ "\" dropdown to add",
76
+ " ",
77
+ T.length === 1 ? "it" : "them",
78
+ "."
79
+ ]
80
+ }),
81
+ /* @__PURE__ */ u(c, {
82
+ spacing: 1.5,
83
+ children: m.length === 0 ? /* @__PURE__ */ u(i, {
84
+ severity: "info",
85
+ children: "No steps yet. Click \"Add step\" to create the first one."
86
+ }) : m.map((e, t) => /* @__PURE__ */ u(r, {
87
+ step: e,
88
+ stepIndex: t,
89
+ isFirst: t === 0,
90
+ isLast: t === m.length - 1,
91
+ unboundProperties: g,
92
+ jsonSchema: h,
93
+ formTemplateId: _,
94
+ defaultExpanded: t === 0,
95
+ onChange: (e) => b(t, e),
96
+ onBindField: (t) => y(t, e.uiKey),
97
+ onMoveUp: () => C(t, -1),
98
+ onMoveDown: () => C(t, 1),
99
+ onRemove: () => S(t)
100
+ }, e.uiKey))
101
+ })
102
+ ]
103
+ });
104
+ }
105
+ //#endregion
106
+ export { m as FormStructurePanel };
107
+
108
+ //# sourceMappingURL=FormStructurePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormStructurePanel.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormStructurePanel.tsx"],"sourcesContent":["import { FormTemplateStep } from '@sage-bionetworks/synapse-client'\nimport { Alert, Box, Button, Paper, Stack, Typography } from '@mui/material'\nimport { Add as AddIcon } from '@mui/icons-material'\nimport pluralize from 'pluralize'\nimport { RJSFSchema } from '@rjsf/utils'\nimport {\n propertyKeyToPointer,\n ResolvedSchemaProperty,\n} from '@/utils/jsonschema/submissionContext'\nimport { StepCard } from './StepCard'\nimport {\n BIND_FIELD_LABEL,\n createEditableStep,\n EditableFormTemplateStep,\n moveItem,\n} from './utils'\n\nexport type FormStructurePanelProps = {\n steps: EditableFormTemplateStep[]\n jsonSchema: RJSFSchema\n /** Properties not yet bound to any step in the template. */\n unboundProperties: ResolvedSchemaProperty[]\n /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */\n formTemplateId: string | undefined\n onStepsChange: (next: EditableFormTemplateStep[]) => void\n onBindField: (propertyKey: string, stepKey: string) => void\n}\n\n/**\n * Right pane: the multi-step form structure. Steps are collapsible cards;\n * each step contains a list of field slots (with inline-expand for slot config)\n * and a \"Bind field\" dropdown listing any library fields not yet bound to a\n * step.\n */\nexport function FormStructurePanel({\n steps,\n jsonSchema,\n unboundProperties,\n formTemplateId,\n onStepsChange,\n onBindField,\n}: FormStructurePanelProps) {\n const handleStepChange = (idx: number, patch: Partial<FormTemplateStep>) => {\n onStepsChange(steps.map((s, i) => (i === idx ? { ...s, ...patch } : s)))\n }\n\n const handleAddStep = () => {\n onStepsChange([...steps, createEditableStep()])\n }\n\n const handleRemoveStep = (idx: number) => {\n onStepsChange(steps.filter((_, i) => i !== idx))\n }\n\n const handleMoveStep = (idx: number, direction: -1 | 1) => {\n onStepsChange(moveItem(steps, idx, direction))\n }\n\n const requiredUnbound = unboundProperties.filter(p => p.isRequired)\n const optionalUnbound = unboundProperties.filter(p => !p.isRequired)\n\n return (\n <Paper variant=\"outlined\" sx={{ p: 2, height: '100%' }}>\n <Box\n sx={{\n mb: 1.5,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: 1,\n }}\n >\n <Box>\n <Typography variant=\"subtitle2\">Steps</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n Arrange fields into pages requesters will fill out in order.\n </Typography>\n </Box>\n <Button\n size=\"small\"\n variant=\"outlined\"\n startIcon={<AddIcon />}\n onClick={handleAddStep}\n >\n Add step\n </Button>\n </Box>\n\n {requiredUnbound.length > 0 && (\n <Alert severity=\"error\" sx={{ mb: 1.5 }}>\n {pluralize('required field', requiredUnbound.length, true)}{' '}\n {pluralize('is', requiredUnbound.length)} not bound to a step and must\n be bound before saving:{' '}\n {requiredUnbound\n .map(p => p.subSchema.title ?? propertyKeyToPointer(p.propertyKey))\n .join(', ')}\n .\n </Alert>\n )}\n\n {optionalUnbound.length > 0 && (\n <Alert severity=\"warning\" sx={{ mb: 1.5 }}>\n {pluralize('field', optionalUnbound.length, true)}{' '}\n {pluralize('is', optionalUnbound.length)} not yet bound to a step. Use\n a step's \"{BIND_FIELD_LABEL}\" dropdown to add{' '}\n {optionalUnbound.length === 1 ? 'it' : 'them'}.\n </Alert>\n )}\n\n <Stack spacing={1.5}>\n {steps.length === 0 ? (\n <Alert severity=\"info\">\n No steps yet. Click \"Add step\" to create the first one.\n </Alert>\n ) : (\n steps.map((step, stepIdx) => (\n <StepCard\n key={step.uiKey}\n step={step}\n stepIndex={stepIdx}\n isFirst={stepIdx === 0}\n isLast={stepIdx === steps.length - 1}\n unboundProperties={unboundProperties}\n jsonSchema={jsonSchema}\n formTemplateId={formTemplateId}\n defaultExpanded={stepIdx === 0}\n onChange={patch => handleStepChange(stepIdx, patch)}\n onBindField={propertyKey => onBindField(propertyKey, step.uiKey)}\n onMoveUp={() => handleMoveStep(stepIdx, -1)}\n onMoveDown={() => handleMoveStep(stepIdx, 1)}\n onRemove={() => handleRemoveStep(stepIdx)}\n />\n ))\n )}\n </Stack>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;;;AAkCA,SAAgB,EAAmB,EACjC,UACA,eACA,sBACA,mBACA,kBACA,kBAC0B;CAC1B,IAAM,KAAoB,GAAa,MAAqC;EAC1E,EAAc,EAAM,KAAK,GAAG,MAAO,MAAM,IAAM;GAAE,GAAG;GAAG,GAAG;EAAM,IAAI,CAAE,CAAC;CACzE,GAEM,UAAsB;EAC1B,EAAc,CAAC,GAAG,GAAO,EAAmB,CAAC,CAAC;CAChD,GAEM,KAAoB,MAAgB;EACxC,EAAc,EAAM,QAAQ,GAAG,MAAM,MAAM,CAAG,CAAC;CACjD,GAEM,KAAkB,GAAa,MAAsB;EACzD,EAAc,EAAS,GAAO,GAAK,CAAS,CAAC;CAC/C,GAEM,IAAkB,EAAkB,QAAO,MAAK,EAAE,UAAU,GAC5D,IAAkB,EAAkB,QAAO,MAAK,CAAC,EAAE,UAAU;CAEnE,OACE,kBAAC,GAAD;EAAO,SAAQ;EAAW,IAAI;GAAE,GAAG;GAAG,QAAQ;EAAO;YAArD;GACE,kBAAC,GAAD;IACE,IAAI;KACF,IAAI;KACJ,SAAS;KACT,gBAAgB;KAChB,YAAY;KACZ,KAAK;IACP;cAPF,CASE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAY,SAAQ;eAAY;IAAiB,CAAA,GACjD,kBAAC,GAAD;KAAY,SAAQ;KAAU,OAAM;eAAiB;IAEzC,CAAA,CACT,EAAA,CAAA,GACL,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACR,WAAW,kBAAC,GAAD,CAAU,CAAA;KACrB,SAAS;eACV;IAEO,CAAA,CACL;;GAEJ,EAAgB,SAAS,KACxB,kBAAC,GAAD;IAAO,UAAS;IAAQ,IAAI,EAAE,IAAI,IAAI;cAAtC;KACG,EAAU,kBAAkB,EAAgB,QAAQ,EAAI;KAAG;KAC3D,EAAU,MAAM,EAAgB,MAAM;KAAE;KACjB;KACvB,EACE,KAAI,MAAK,EAAE,UAAU,SAAS,EAAqB,EAAE,WAAW,CAAC,EACjE,KAAK,IAAI;KAAE;IAET;;GAGR,EAAgB,SAAS,KACxB,kBAAC,GAAD;IAAO,UAAS;IAAU,IAAI,EAAE,IAAI,IAAI;cAAxC;KACG,EAAU,SAAS,EAAgB,QAAQ,EAAI;KAAG;KAClD,EAAU,MAAM,EAAgB,MAAM;KAAE;;KACb;KAAkB;KAC7C,EAAgB,WAAW,IAAI,OAAO;KAAO;IACzC;;GAGT,kBAAC,GAAD;IAAO,SAAS;cACb,EAAM,WAAW,IAChB,kBAAC,GAAD;KAAO,UAAS;eAAO;IAEhB,CAAA,IAEP,EAAM,KAAK,GAAM,MACf,kBAAC,GAAD;KAEQ;KACN,WAAW;KACX,SAAS,MAAY;KACrB,QAAQ,MAAY,EAAM,SAAS;KAChB;KACP;KACI;KAChB,iBAAiB,MAAY;KAC7B,WAAU,MAAS,EAAiB,GAAS,CAAK;KAClD,cAAa,MAAe,EAAY,GAAa,EAAK,KAAK;KAC/D,gBAAgB,EAAe,GAAS,EAAE;KAC1C,kBAAkB,EAAe,GAAS,CAAC;KAC3C,gBAAgB,EAAiB,CAAO;IACzC,GAdM,EAAK,KAcX,CACF;GAEE,CAAA;EACF;;AAEX"}
@@ -0,0 +1,10 @@
1
+ import { FormTemplate } from '@sage-bionetworks/synapse-client';
2
+ export type FormTemplateEditorProps = {
3
+ /** Existing template to open for editing, or undefined to create a new one. */
4
+ templateId?: string;
5
+ /** Called after the template is successfully created or a new version is saved. */
6
+ onSaved?: (template: FormTemplate) => void;
7
+ onCancel?: () => void;
8
+ };
9
+ export declare function FormTemplateEditor({ templateId, onSaved, onCancel, }: FormTemplateEditorProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=FormTemplateEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditor.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FormTemplateEditor.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAG/D,MAAM,MAAM,uBAAuB,GAAG;IACpC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,OAAO,EACP,QAAQ,GACT,EAAE,uBAAuB,2CA0CzB"}
@@ -0,0 +1,31 @@
1
+ import { SynapseSpinner as e } from "../LoadingScreen/LoadingScreen.js";
2
+ import { useGetFormTemplate as t } from "../../synapse-queries/dataaccess/useFormTemplate.js";
3
+ import { useGetRegisteredSchema as n } from "../../synapse-queries/jsonschema/useSchema.js";
4
+ import { FormTemplateEditorForm as r } from "./FormTemplateEditorForm.js";
5
+ import { Alert as i, Paper as a } from "@mui/material";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ //#region src/components/FormTemplateEditor/FormTemplateEditor.tsx
8
+ function c({ templateId: c, onSaved: l, onCancel: u }) {
9
+ let { data: d, isLoading: f, error: p } = t(c), { data: m, isLoading: h, error: g } = n(d?.schema$id ?? "", { enabled: !!d?.schema$id });
10
+ if (c && (f || d && h)) return /* @__PURE__ */ o(a, {
11
+ sx: { p: 3 },
12
+ children: /* @__PURE__ */ o(e, { size: 40 })
13
+ });
14
+ let _ = p ?? g;
15
+ return _ ? /* @__PURE__ */ o(a, {
16
+ sx: { p: 3 },
17
+ children: /* @__PURE__ */ s(i, {
18
+ severity: "error",
19
+ children: ["Could not load the form template: ", _.reason ?? _.message]
20
+ })
21
+ }) : /* @__PURE__ */ o(r, {
22
+ initialTemplate: d,
23
+ initialJsonSchema: m,
24
+ onSaved: l,
25
+ onCancel: u
26
+ });
27
+ }
28
+ //#endregion
29
+ export { c as FormTemplateEditor };
30
+
31
+ //# sourceMappingURL=FormTemplateEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditor.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormTemplateEditor.tsx"],"sourcesContent":["/*\n * Data-fetching shell for the FormTemplate authoring experience. Resolves an existing template\n * and the JSON Schema it references (when `templateId` is given), then hands the resolved data\n * to `FormTemplateEditorForm`, which owns the actual editing state and save orchestration.\n * Passing no `templateId` opens a blank editor for creating a new template.\n *\n * The schema is loaded as registered, with its `$ref`s intact, so that saving a new version\n * preserves the reference to the base schema rather than inlining it.\n */\nimport { SynapseSpinner } from '@/components/LoadingScreen/LoadingScreen'\nimport { useGetFormTemplate } from '@/synapse-queries/dataaccess/useFormTemplate'\nimport { useGetRegisteredSchema } from '@/synapse-queries/jsonschema/useSchema'\nimport { Alert, Paper } from '@mui/material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { FormTemplate } from '@sage-bionetworks/synapse-client'\nimport { FormTemplateEditorForm } from './FormTemplateEditorForm'\n\nexport type FormTemplateEditorProps = {\n /** Existing template to open for editing, or undefined to create a new one. */\n templateId?: string\n /** Called after the template is successfully created or a new version is saved. */\n onSaved?: (template: FormTemplate) => void\n onCancel?: () => void\n}\n\nexport function FormTemplateEditor({\n templateId,\n onSaved,\n onCancel,\n}: FormTemplateEditorProps) {\n const {\n data: template,\n isLoading: isLoadingTemplate,\n error: templateError,\n } = useGetFormTemplate(templateId)\n\n const {\n data: jsonSchema,\n isLoading: isLoadingSchema,\n error: schemaError,\n } = useGetRegisteredSchema(template?.schema$id ?? '', {\n enabled: !!template?.schema$id,\n })\n\n if (templateId && (isLoadingTemplate || (template && isLoadingSchema))) {\n return (\n <Paper sx={{ p: 3 }}>\n <SynapseSpinner size={40} />\n </Paper>\n )\n }\n\n const error = templateError ?? schemaError\n if (error) {\n return (\n <Paper sx={{ p: 3 }}>\n <Alert severity=\"error\">\n Could not load the form template: {error.reason ?? error.message}\n </Alert>\n </Paper>\n )\n }\n\n return (\n <FormTemplateEditorForm\n initialTemplate={template}\n initialJsonSchema={jsonSchema as RJSFSchema | undefined}\n onSaved={onSaved}\n onCancel={onCancel}\n />\n )\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,EAAmB,EACjC,eACA,YACA,eAC0B;CAC1B,IAAM,EACJ,MAAM,GACN,WAAW,GACX,OAAO,MACL,EAAmB,CAAU,GAE3B,EACJ,MAAM,GACN,WAAW,GACX,OAAO,MACL,EAAuB,GAAU,aAAa,IAAI,EACpD,SAAS,CAAC,CAAC,GAAU,UACvB,CAAC;CAED,IAAI,MAAe,KAAsB,KAAY,IACnD,OACE,kBAAC,GAAD;EAAO,IAAI,EAAE,GAAG,EAAE;YAChB,kBAAC,GAAD,EAAgB,MAAM,GAAK,CAAA;CACtB,CAAA;CAIX,IAAM,IAAQ,KAAiB;CAW/B,OAVI,IAEA,kBAAC,GAAD;EAAO,IAAI,EAAE,GAAG,EAAE;YAChB,kBAAC,GAAD;GAAO,UAAS;aAAhB,CAAwB,sCACa,EAAM,UAAU,EAAM,OACpD;;CACF,CAAA,IAKT,kBAAC,GAAD;EACE,iBAAiB;EACjB,mBAAmB;EACV;EACC;CACX,CAAA;AAEL"}
@@ -0,0 +1,15 @@
1
+ import { FormTemplate } from '@sage-bionetworks/synapse-client';
2
+ import { RJSFSchema } from '@rjsf/utils';
3
+ export type FormTemplateEditorFormProps = {
4
+ /** Existing template to edit, or undefined for creating a new one. */
5
+ initialTemplate?: FormTemplate;
6
+ /**
7
+ * The JSON Schema body the template's `schema$id` resolves to. Required when editing an
8
+ * existing template.
9
+ */
10
+ initialJsonSchema?: RJSFSchema;
11
+ onSaved?: (template: FormTemplate) => void;
12
+ onCancel?: () => void;
13
+ };
14
+ export declare function FormTemplateEditorForm({ initialTemplate, initialJsonSchema, onSaved, onCancel, }: FormTemplateEditorFormProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=FormTemplateEditorForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditorForm.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FormTemplateEditorForm.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAgB/D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA4BxC,MAAM,MAAM,2BAA2B,GAAG;IACxC,sEAAsE;IACtE,eAAe,CAAC,EAAE,YAAY,CAAA;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;IAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAA;AAED,wBAAgB,sBAAsB,CAAC,EACrC,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,QAAQ,GACT,EAAE,2BAA2B,2CAiR7B"}
@@ -0,0 +1,234 @@
1
+ import { displayToast as e } from "../ToastMessage/ToastMessage.js";
2
+ import "../ToastMessage/index.js";
3
+ import { propertyKeyToPointer as t, resolveSchemaPropertyAtPointer as n } from "../../utils/jsonschema/submissionContext.js";
4
+ import { formatSchema$id as r, resolveFormTemplateSchemaName as i } from "./formTemplateSchema.js";
5
+ import { detectFieldType as ee, fieldTypeLabel as te } from "./schemaFieldUtils.js";
6
+ import { FieldDefinitionDrawer as ne } from "./FieldDefinitionDrawer.js";
7
+ import { FieldValidationErrorAlert as a } from "./FieldValidationErrorAlert.js";
8
+ import { readFieldDragData as re } from "./sortableIds.js";
9
+ import { FieldLibrary as ie } from "./FieldLibrary.js";
10
+ import { toFormTemplateSteps as o } from "./utils.js";
11
+ import { FormStructurePanel as s } from "./FormStructurePanel.js";
12
+ import { FormTemplatePreview as c } from "./FormTemplatePreview.js";
13
+ import { JsonSchemaBodyEditor as l } from "./JsonSchemaBodyEditor.js";
14
+ import { validateFormTemplateFields as u } from "./formTemplateValidation.js";
15
+ import { useFormTemplateDraft as d } from "./useFormTemplateDraft.js";
16
+ import { useFormTemplateDrag as f } from "./useFormTemplateDrag.js";
17
+ import { useSaveFormTemplate as p } from "./useSaveFormTemplate.js";
18
+ import { useMemo as m, useState as h } from "react";
19
+ import { Accordion as g, AccordionDetails as _, AccordionSummary as ae, Alert as oe, Box as v, Button as y, Divider as b, Grid as x, Paper as S, TextField as C, Typography as w } from "@mui/material";
20
+ import { jsx as T, jsxs as E } from "react/jsx-runtime";
21
+ import { ExpandMore as D } from "@mui/icons-material";
22
+ import { DragDropProvider as O, DragOverlay as k } from "@dnd-kit/react";
23
+ //#region src/components/FormTemplateEditor/FormTemplateEditorForm.tsx
24
+ function A({ initialTemplate: A, initialJsonSchema: j, onSaved: M, onCancel: N }) {
25
+ let P = d(A, j), { name: F, setName: I, jsonSchema: L, setJsonSchema: R, steps: z, setSteps: B, editingPropertyKey: V, setEditingPropertyKey: H, usedPaths: U, existingPropertyKeys: W, unboundProperties: G, handleCreateField: K, renamePropertyKey: q, handleUpdateProperty: se, handleReplaceProperty: ce, handleChangeRequired: le, handleChangeContext: ue, handleRemoveProperty: de, bindField: fe, previewTemplate: pe } = P, me = f(P), { mutateAsync: he, isPending: J } = p(), [Y, X] = h(null), Z = m(() => u(o(z), L), [z, L]), ge = async () => {
26
+ X(null);
27
+ try {
28
+ let t = await he({
29
+ initialTemplate: A,
30
+ initialJsonSchema: j,
31
+ name: F,
32
+ jsonSchema: L,
33
+ steps: z
34
+ });
35
+ if (!t.ok) {
36
+ X(t.validationErrors);
37
+ return;
38
+ }
39
+ e(A ? "Your changes were saved as a new version." : "The form template was created.", "success", { title: "Template saved" }), M?.(t.template);
40
+ } catch (t) {
41
+ let n = t;
42
+ n.status === 412 ? e("This template was changed by someone else since you opened it. Reload it to see the latest version, then reapply your changes.", "warning", { title: "Template updated since you started editing" }) : e(n.reason ?? "An error occurred while saving.", "danger", { title: "Could not save template" });
43
+ }
44
+ }, Q = V === null ? void 0 : n(L, t(V)), $ = Q?.subSchema ?? null, _e = Q?.isRequired ?? !1, ve = Q?.context ?? "ALWAYS", ye = V !== null && U.has(t(V)), be = i(F, A?.schema$id);
45
+ return /* @__PURE__ */ E(O, {
46
+ ...me,
47
+ children: [/* @__PURE__ */ E(S, {
48
+ sx: { p: 3 },
49
+ children: [
50
+ /* @__PURE__ */ T(w, {
51
+ variant: "h6",
52
+ gutterBottom: !0,
53
+ children: A ? "Edit Form Template" : "Create Form Template"
54
+ }),
55
+ /* @__PURE__ */ T(b, { sx: { mb: 2 } }),
56
+ /* @__PURE__ */ T(C, {
57
+ label: "Internal Name",
58
+ value: F,
59
+ onChange: (e) => I(e.target.value),
60
+ size: "small",
61
+ fullWidth: !0,
62
+ helperText: "Used by ACT to identify and find this template. Not shown to requesters.",
63
+ sx: { mb: 1 }
64
+ }),
65
+ /* @__PURE__ */ E(w, {
66
+ variant: "caption",
67
+ color: "text.secondary",
68
+ component: "p",
69
+ sx: { mb: 3 },
70
+ children: [
71
+ "JSON Schema:",
72
+ " ",
73
+ A?.schema$id ?? r(be),
74
+ !A && " (a new version is registered when saved)"
75
+ ]
76
+ }),
77
+ /* @__PURE__ */ E(x, {
78
+ container: !0,
79
+ spacing: 2,
80
+ alignItems: "stretch",
81
+ children: [
82
+ /* @__PURE__ */ T(x, {
83
+ size: {
84
+ xs: 12,
85
+ md: 4
86
+ },
87
+ children: /* @__PURE__ */ T(ie, {
88
+ jsonSchema: L,
89
+ usedPaths: U,
90
+ selectedPropertyKey: V,
91
+ onSelectField: H,
92
+ onCreateField: K
93
+ })
94
+ }),
95
+ /* @__PURE__ */ T(x, {
96
+ size: {
97
+ xs: 12,
98
+ md: 4
99
+ },
100
+ children: /* @__PURE__ */ T(s, {
101
+ steps: z,
102
+ jsonSchema: L,
103
+ unboundProperties: G,
104
+ formTemplateId: A?.id,
105
+ onStepsChange: B,
106
+ onBindField: fe
107
+ })
108
+ }),
109
+ /* @__PURE__ */ T(x, {
110
+ size: {
111
+ xs: 12,
112
+ md: 4
113
+ },
114
+ children: /* @__PURE__ */ E(v, {
115
+ sx: {
116
+ position: "sticky",
117
+ top: 16
118
+ },
119
+ children: [/* @__PURE__ */ T(w, {
120
+ variant: "subtitle2",
121
+ color: "text.secondary",
122
+ gutterBottom: !0,
123
+ children: "Live Preview"
124
+ }), /* @__PURE__ */ T(c, {
125
+ template: pe,
126
+ jsonSchema: L
127
+ })]
128
+ })
129
+ })
130
+ ]
131
+ }),
132
+ /* @__PURE__ */ E(g, {
133
+ sx: { mt: 3 },
134
+ disableGutters: !0,
135
+ elevation: 0,
136
+ variant: "outlined",
137
+ children: [/* @__PURE__ */ T(ae, {
138
+ expandIcon: /* @__PURE__ */ T(D, {}),
139
+ children: /* @__PURE__ */ T(w, {
140
+ variant: "subtitle2",
141
+ children: "Advanced: Edit raw JSON Schema"
142
+ })
143
+ }), /* @__PURE__ */ E(_, { children: [/* @__PURE__ */ T(oe, {
144
+ severity: "info",
145
+ variant: "outlined",
146
+ sx: { mb: 2 },
147
+ children: "Direct access to the JSON Schema body. Most editing happens in the Fields panel above — use this view for features the simple editor doesn't support (nested objects, advanced validation, etc.)."
148
+ }), /* @__PURE__ */ T(l, {
149
+ value: L,
150
+ onChange: R
151
+ })] })]
152
+ }),
153
+ Z.length > 0 && /* @__PURE__ */ T(a, {
154
+ errors: Z,
155
+ children: "Fix the following before saving:"
156
+ }),
157
+ Y && /* @__PURE__ */ T(a, { errors: Y }),
158
+ /* @__PURE__ */ T(b, { sx: { my: 2 } }),
159
+ /* @__PURE__ */ E(v, {
160
+ sx: {
161
+ display: "flex",
162
+ justifyContent: "flex-end",
163
+ gap: 1
164
+ },
165
+ children: [N && /* @__PURE__ */ T(y, {
166
+ variant: "outlined",
167
+ onClick: N,
168
+ disabled: J,
169
+ children: "Cancel"
170
+ }), /* @__PURE__ */ T(y, {
171
+ variant: "contained",
172
+ onClick: () => void ge(),
173
+ disabled: !F || J || Z.length > 0,
174
+ children: J ? "Saving…" : A ? "Save Changes" : "Create Template"
175
+ })]
176
+ }),
177
+ /* @__PURE__ */ T(ne, {
178
+ open: V !== null,
179
+ propertyKey: V,
180
+ existingKeys: W,
181
+ property: $,
182
+ isRequired: _e,
183
+ context: ve,
184
+ isUsedInSteps: ye,
185
+ onClose: () => H(null),
186
+ onUpdate: (e) => {
187
+ V && se(V, e);
188
+ },
189
+ onRenameKey: (e) => {
190
+ V && q(V, e);
191
+ },
192
+ onReplace: (e) => {
193
+ V && ce(V, e);
194
+ },
195
+ onChangeRequired: (e) => {
196
+ V && le(V, e);
197
+ },
198
+ onChangeContext: (e) => {
199
+ V && ue(V, e);
200
+ },
201
+ onRemove: () => {
202
+ V && de(V);
203
+ }
204
+ })
205
+ ]
206
+ }), /* @__PURE__ */ T(k, { children: (e) => {
207
+ if (e.type !== "field") return null;
208
+ let r = re(e.data);
209
+ if (!r) return null;
210
+ let i = n(L, t(r))?.subSchema;
211
+ return i ? /* @__PURE__ */ E(S, {
212
+ elevation: 6,
213
+ sx: {
214
+ p: 1.25,
215
+ cursor: "grabbing",
216
+ opacity: .95
217
+ },
218
+ children: [/* @__PURE__ */ T(w, {
219
+ variant: "body2",
220
+ fontWeight: 500,
221
+ children: i.title || r
222
+ }), /* @__PURE__ */ T(w, {
223
+ variant: "caption",
224
+ color: "text.secondary",
225
+ children: te(ee(i))
226
+ })]
227
+ }) : null;
228
+ } })]
229
+ });
230
+ }
231
+ //#endregion
232
+ export { A as FormTemplateEditorForm };
233
+
234
+ //# sourceMappingURL=FormTemplateEditorForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditorForm.js","names":[],"sources":["../../../src/components/FormTemplateEditor/FormTemplateEditorForm.tsx"],"sourcesContent":["/*\n * Editing UI for a FormTemplate draft: composes the pure `useFormTemplateDraft` state with save\n * orchestration (`useSaveFormTemplate`) and client-side validation. Receives already-resolved\n * initial data — the caller (`FormTemplateEditor`)\n * owns fetching, so this component never renders a loading state.\n */\nimport { DragDropProvider, DragOverlay } from '@dnd-kit/react'\nimport { FormTemplate } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Alert,\n Box,\n Button,\n Divider,\n Grid,\n Paper,\n TextField,\n Typography,\n} from '@mui/material'\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport { useMemo, useState } from 'react'\nimport { displayToast } from '@/components/ToastMessage'\nimport {\n propertyKeyToPointer,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport { FieldDefinitionDrawer } from './FieldDefinitionDrawer'\nimport { FieldValidationErrorAlert } from './FieldValidationErrorAlert'\nimport { FieldLibrary } from './FieldLibrary'\nimport { FIELD_DRAG_TYPE, readFieldDragData } from './sortableIds'\nimport { FormStructurePanel } from './FormStructurePanel'\nimport { FormTemplatePreview } from './FormTemplatePreview'\nimport { JsonSchemaBodyEditor } from './JsonSchemaBodyEditor'\nimport { detectFieldType, fieldTypeLabel } from './schemaFieldUtils'\nimport {\n formatSchema$id,\n resolveFormTemplateSchemaName,\n} from './formTemplateSchema'\nimport { toFormTemplateSteps } from './utils'\nimport {\n FormTemplateFieldValidationError,\n validateFormTemplateFields,\n} from './formTemplateValidation'\nimport { useFormTemplateDraft } from './useFormTemplateDraft'\nimport { useFormTemplateDrag } from './useFormTemplateDrag'\nimport { useSaveFormTemplate } from './useSaveFormTemplate'\n\nexport type FormTemplateEditorFormProps = {\n /** Existing template to edit, or undefined for creating a new one. */\n initialTemplate?: FormTemplate\n /**\n * The JSON Schema body the template's `schema$id` resolves to. Required when editing an\n * existing template.\n */\n initialJsonSchema?: RJSFSchema\n onSaved?: (template: FormTemplate) => void\n onCancel?: () => void\n}\n\nexport function FormTemplateEditorForm({\n initialTemplate,\n initialJsonSchema,\n onSaved,\n onCancel,\n}: FormTemplateEditorFormProps) {\n const draft = useFormTemplateDraft(initialTemplate, initialJsonSchema)\n const {\n name,\n setName,\n jsonSchema,\n setJsonSchema,\n steps,\n setSteps,\n editingPropertyKey,\n setEditingPropertyKey,\n usedPaths,\n existingPropertyKeys,\n unboundProperties,\n handleCreateField,\n renamePropertyKey,\n handleUpdateProperty,\n handleReplaceProperty,\n handleChangeRequired,\n handleChangeContext,\n handleRemoveProperty,\n bindField,\n previewTemplate,\n } = draft\n const dragHandlers = useFormTemplateDrag(draft)\n\n const { mutateAsync: save, isPending: isSaving } = useSaveFormTemplate()\n const [saveError, setSaveError] = useState<\n FormTemplateFieldValidationError[] | null\n >(null)\n\n const validationErrors = useMemo(\n () => validateFormTemplateFields(toFormTemplateSteps(steps), jsonSchema),\n [steps, jsonSchema],\n )\n\n const handleSave = async () => {\n setSaveError(null)\n try {\n const result = await save({\n initialTemplate,\n initialJsonSchema,\n name,\n jsonSchema,\n steps,\n })\n if (!result.ok) {\n setSaveError(result.validationErrors)\n return\n }\n displayToast(\n initialTemplate\n ? 'Your changes were saved as a new version.'\n : 'The form template was created.',\n 'success',\n { title: 'Template saved' },\n )\n onSaved?.(result.template)\n } catch (error) {\n const clientError = error as SynapseClientError\n if (clientError.status === 412) {\n displayToast(\n 'This template was changed by someone else since you opened it. Reload it to see the latest version, then reapply your changes.',\n 'warning',\n { title: 'Template updated since you started editing' },\n )\n } else {\n displayToast(\n clientError.reason ?? 'An error occurred while saving.',\n 'danger',\n { title: 'Could not save template' },\n )\n }\n }\n }\n\n const editingResolved =\n editingPropertyKey !== null\n ? resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(editingPropertyKey),\n )\n : undefined\n const editingProperty: RJSFSchema | null = editingResolved?.subSchema ?? null\n const editingIsRequired = editingResolved?.isRequired ?? false\n const editingContext = editingResolved?.context ?? 'ALWAYS'\n const editingIsUsedInSteps =\n editingPropertyKey !== null &&\n usedPaths.has(propertyKeyToPointer(editingPropertyKey))\n\n const templateSchemaName = resolveFormTemplateSchemaName(\n name,\n initialTemplate?.schema$id,\n )\n\n return (\n <DragDropProvider {...dragHandlers}>\n <Paper sx={{ p: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n {initialTemplate ? 'Edit Form Template' : 'Create Form Template'}\n </Typography>\n\n <Divider sx={{ mb: 2 }} />\n\n <TextField\n label=\"Internal Name\"\n value={name}\n onChange={e => setName(e.target.value)}\n size=\"small\"\n fullWidth\n helperText=\"Used by ACT to identify and find this template. Not shown to requesters.\"\n sx={{ mb: 1 }}\n />\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n component=\"p\"\n sx={{ mb: 3 }}\n >\n JSON Schema:{' '}\n {initialTemplate?.schema$id ?? formatSchema$id(templateSchemaName)}\n {!initialTemplate && ' (a new version is registered when saved)'}\n </Typography>\n\n <Grid container spacing={2} alignItems=\"stretch\">\n <Grid size={{ xs: 12, md: 4 }}>\n <FieldLibrary\n jsonSchema={jsonSchema}\n usedPaths={usedPaths}\n selectedPropertyKey={editingPropertyKey}\n onSelectField={setEditingPropertyKey}\n onCreateField={handleCreateField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <FormStructurePanel\n steps={steps}\n jsonSchema={jsonSchema}\n unboundProperties={unboundProperties}\n formTemplateId={initialTemplate?.id}\n onStepsChange={setSteps}\n onBindField={bindField}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <Box sx={{ position: 'sticky', top: 16 }}>\n <Typography\n variant=\"subtitle2\"\n color=\"text.secondary\"\n gutterBottom\n >\n Live Preview\n </Typography>\n <FormTemplatePreview\n template={previewTemplate}\n jsonSchema={jsonSchema}\n />\n </Box>\n </Grid>\n </Grid>\n\n <Accordion\n sx={{ mt: 3 }}\n disableGutters\n elevation={0}\n variant=\"outlined\"\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"subtitle2\">\n Advanced: Edit raw JSON Schema\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Alert severity=\"info\" variant=\"outlined\" sx={{ mb: 2 }}>\n Direct access to the JSON Schema body. Most editing happens in the\n Fields panel above — use this view for features the simple editor\n doesn't support (nested objects, advanced validation, etc.).\n </Alert>\n <JsonSchemaBodyEditor value={jsonSchema} onChange={setJsonSchema} />\n </AccordionDetails>\n </Accordion>\n\n {validationErrors.length > 0 && (\n <FieldValidationErrorAlert errors={validationErrors}>\n Fix the following before saving:\n </FieldValidationErrorAlert>\n )}\n\n {saveError && <FieldValidationErrorAlert errors={saveError} />}\n\n <Divider sx={{ my: 2 }} />\n\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 1 }}>\n {onCancel && (\n <Button variant=\"outlined\" onClick={onCancel} disabled={isSaving}>\n Cancel\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={() => void handleSave()}\n disabled={!name || isSaving || validationErrors.length > 0}\n >\n {isSaving\n ? 'Saving…'\n : initialTemplate\n ? 'Save Changes'\n : 'Create Template'}\n </Button>\n </Box>\n\n <FieldDefinitionDrawer\n open={editingPropertyKey !== null}\n propertyKey={editingPropertyKey}\n existingKeys={existingPropertyKeys}\n property={editingProperty}\n isRequired={editingIsRequired}\n context={editingContext}\n isUsedInSteps={editingIsUsedInSteps}\n onClose={() => setEditingPropertyKey(null)}\n onUpdate={patch => {\n if (editingPropertyKey)\n handleUpdateProperty(editingPropertyKey, patch)\n }}\n onRenameKey={newKey => {\n if (editingPropertyKey)\n renamePropertyKey(editingPropertyKey, newKey)\n }}\n onReplace={next => {\n if (editingPropertyKey)\n handleReplaceProperty(editingPropertyKey, next)\n }}\n onChangeRequired={isReq => {\n if (editingPropertyKey)\n handleChangeRequired(editingPropertyKey, isReq)\n }}\n onChangeContext={context => {\n if (editingPropertyKey)\n handleChangeContext(editingPropertyKey, context)\n }}\n onRemove={() => {\n if (editingPropertyKey) handleRemoveProperty(editingPropertyKey)\n }}\n />\n </Paper>\n\n <DragOverlay>\n {source => {\n if (source.type !== FIELD_DRAG_TYPE) return null\n const propertyKey = readFieldDragData(source.data)\n if (!propertyKey) return null\n const property = resolveSchemaPropertyAtPointer(\n jsonSchema,\n propertyKeyToPointer(propertyKey),\n )?.subSchema\n if (!property) return null\n return (\n <Paper\n elevation={6}\n sx={{ p: 1.25, cursor: 'grabbing', opacity: 0.95 }}\n >\n <Typography variant=\"body2\" fontWeight={500}>\n {property.title || propertyKey}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldTypeLabel(detectFieldType(property))}\n </Typography>\n </Paper>\n )\n }}\n </DragOverlay>\n </DragDropProvider>\n )\n}\n"],"mappings":"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"}
@@ -1 +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"}
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,2CAkE1B"}
@@ -26,7 +26,7 @@ function g({ template: g, jsonSchema: _ }) {
26
26
  })
27
27
  })
28
28
  });
29
- let C = Math.min(v, S.length - 1), w = S[C], T = w.jsonSchema.title ?? "", E = w.jsonSchema.description ?? "";
29
+ let C = Math.min(v, S.length - 1), w = S[C];
30
30
  return /* @__PURE__ */ m(a, {
31
31
  variant: "outlined",
32
32
  sx: { p: 2 },
@@ -56,17 +56,6 @@ function g({ template: g, jsonSchema: _ }) {
56
56
  children: e.jsonSchema.title ?? `Step ${t + 1}`
57
57
  }) }, t))
58
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
59
  /* @__PURE__ */ p(e, {
71
60
  schema: w.jsonSchema,
72
61
  uiSchema: w.uiSchema,
@@ -1 +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"}
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\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 <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;CAE1B,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;GAGX,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,25 @@
1
+ import { FormTemplateStep } from '@sage-bionetworks/synapse-client';
2
+ import { RJSFSchema } from '@rjsf/utils';
3
+ import { ResolvedSchemaProperty } from '@/utils/jsonschema/submissionContext';
4
+ import { EditableFormTemplateStep } from './utils';
5
+ export type StepCardProps = {
6
+ step: EditableFormTemplateStep;
7
+ stepIndex: number;
8
+ isFirst: boolean;
9
+ isLast: boolean;
10
+ /** Properties not yet bound to any step in the template. */
11
+ unboundProperties: ResolvedSchemaProperty[];
12
+ /** The full JSON Schema, used to resolve display labels for slot rows. */
13
+ jsonSchema: RJSFSchema;
14
+ /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */
15
+ formTemplateId: string | undefined;
16
+ /** If true, render expanded by default (first step). */
17
+ defaultExpanded: boolean;
18
+ onChange: (patch: Partial<FormTemplateStep>) => void;
19
+ onBindField: (propertyKey: string) => void;
20
+ onMoveUp: () => void;
21
+ onMoveDown: () => void;
22
+ onRemove: () => void;
23
+ };
24
+ export declare function StepCard({ step, stepIndex, isFirst, isLast, unboundProperties, jsonSchema, formTemplateId, defaultExpanded, onChange, onBindField, onMoveUp, onMoveDown, onRemove, }: StepCardProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=StepCard.d.ts.map