synapse-react-client 4.0.40 → 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 (438) 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/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
  6. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
  7. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
  8. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +138 -244
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +179 -63
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +2 -0
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +13 -13
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts +3 -2
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +1 -1
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +112 -143
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +4 -2
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +8 -7
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
  46. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  47. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +79 -47
  48. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  49. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
  50. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
  51. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
  52. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
  53. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
  54. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
  55. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
  56. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
  57. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +11 -0
  58. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
  59. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
  60. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
  61. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
  62. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
  63. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
  64. package/dist/components/AclEditor/AclEditor.js +20 -20
  65. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  66. package/dist/components/Aridhia/AridhiaAccessStatus.js +51 -48
  67. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  68. package/dist/components/Authentication/Constants.d.ts +4 -0
  69. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  70. package/dist/components/Authentication/Constants.js +5 -2
  71. package/dist/components/Authentication/Constants.js.map +1 -1
  72. package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
  73. package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
  74. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  75. package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
  76. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  77. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  78. package/dist/components/Authentication/TOTPForm.js +20 -18
  79. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  80. package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
  81. package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
  82. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  83. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  84. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +90 -77
  85. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  86. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  87. package/dist/components/DataGrid/SynapseGrid.js +244 -246
  88. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  89. package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
  90. package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
  91. package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
  92. package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
  93. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  94. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +52 -54
  95. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  96. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
  97. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  98. package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
  99. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  100. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
  101. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
  102. package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
  103. package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
  104. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
  105. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
  106. package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
  107. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  108. package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
  109. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  110. package/dist/components/FilePreview/PdfPreview.js +15 -16
  111. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  112. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
  113. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
  114. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
  115. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
  116. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
  117. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
  118. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +190 -0
  119. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
  120. package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
  121. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
  122. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
  123. package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
  124. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
  125. package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
  126. package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
  127. package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
  128. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
  129. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
  130. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
  131. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
  132. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
  133. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
  134. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
  135. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
  136. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
  137. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
  138. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
  139. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
  140. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
  141. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
  142. package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
  143. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
  144. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
  145. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
  146. package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
  147. package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
  148. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
  149. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
  150. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
  151. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
  152. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
  153. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
  154. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +72 -0
  155. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
  156. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
  157. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
  158. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
  159. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
  160. package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
  161. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
  162. package/dist/components/FormTemplateEditor/StepCard.js +203 -0
  163. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
  164. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
  165. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
  166. package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
  167. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
  168. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
  169. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
  170. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
  171. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
  172. package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
  173. package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
  174. package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
  175. package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
  176. package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
  177. package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
  178. package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
  179. package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
  180. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
  181. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
  182. package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
  183. package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
  184. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
  185. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
  186. package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
  187. package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
  188. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
  189. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
  190. package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
  191. package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
  192. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +27 -0
  193. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
  194. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +84 -0
  195. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
  196. package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
  197. package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
  198. package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
  199. package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
  200. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
  201. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
  202. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
  203. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
  204. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
  205. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
  206. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
  207. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
  208. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
  209. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
  210. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +54 -0
  211. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
  212. package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
  213. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
  214. package/dist/components/FormTemplateEditor/utils.js +24 -0
  215. package/dist/components/FormTemplateEditor/utils.js.map +1 -0
  216. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
  217. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  218. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
  219. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
  220. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
  221. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
  222. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  223. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
  224. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  225. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
  226. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
  227. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
  228. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  229. package/dist/components/QueryBuilder/FilterConditionRow.css +1 -1
  230. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +3 -0
  231. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  232. package/dist/components/QueryBuilder/FilterConditionRow.js +123 -123
  233. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  234. package/dist/components/QueryBuilder/FilterConditionRow.module.js +10 -11
  235. package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -1
  236. package/dist/components/QueryBuilder/FilterConditionRow.module.scss +0 -5
  237. package/dist/components/QueryBuilder/FilterGroupNode.css +1 -1
  238. package/dist/components/QueryBuilder/FilterGroupNode.d.ts +4 -0
  239. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
  240. package/dist/components/QueryBuilder/FilterGroupNode.js +85 -51
  241. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
  242. package/dist/components/QueryBuilder/FilterGroupNode.module.js +10 -9
  243. package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -1
  244. package/dist/components/QueryBuilder/FilterGroupNode.module.scss +9 -0
  245. package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
  246. package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
  247. package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
  248. package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
  249. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  250. package/dist/components/QueryBuilder/QueryBuilderControls.js +120 -108
  251. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  252. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
  253. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  254. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  255. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
  256. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
  257. package/dist/components/QueryBuilder/qbTreeToReadable.js +25 -21
  258. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
  259. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
  260. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
  261. package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
  262. package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
  263. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
  264. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
  265. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
  266. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
  267. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
  268. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  269. package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
  270. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  271. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +13 -0
  272. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -1
  273. package/dist/components/QueryBuilder/queryBuilderOperations.js +39 -36
  274. package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -1
  275. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
  276. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
  277. package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
  278. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
  279. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  280. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +46 -47
  281. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  282. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
  283. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
  284. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
  285. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
  286. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  287. package/dist/components/SynapseTable/SearchV2.js +4 -4
  288. package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
  289. package/dist/components/ToastMessage/ToastMessage.js +25 -22
  290. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  291. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
  292. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
  293. package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
  294. package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
  295. package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
  296. package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
  297. package/dist/components/dataaccess/FormTemplateTable.js +124 -0
  298. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
  299. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  300. package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
  301. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  302. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  303. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -0
  304. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  305. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
  306. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  307. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +35 -36
  308. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  309. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  310. package/dist/components/styled/LeftRightPanel.js +19 -2
  311. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  312. package/dist/components/widgets/FileHandleLink.d.ts +12 -2
  313. package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
  314. package/dist/components/widgets/FileHandleLink.js +25 -29
  315. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  316. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +4 -2
  317. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
  318. package/dist/mocks/accessRequirement/mockFormTemplates.js +13 -14
  319. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
  320. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +4 -1
  321. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
  322. package/dist/mocks/accessRequirement/mockJsonSchemas.js +24 -17
  323. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
  324. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
  325. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  326. package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
  327. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  328. package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
  329. package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
  330. package/dist/mocks/msw/handlers/authHandlers.js +6 -2
  331. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  332. package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
  333. package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
  334. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  335. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
  336. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  337. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +52 -46
  338. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  339. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  340. package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
  341. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  342. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
  343. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
  344. package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
  345. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
  346. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +10 -1
  347. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  348. package/dist/mocks/msw/handlers/schemaHandlers.js +30 -7
  349. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  350. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  351. package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
  352. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  353. package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
  354. package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
  355. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  356. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
  357. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
  358. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
  359. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
  360. package/dist/style/abstracts/_cssVariables.scss +13 -0
  361. package/dist/style/components/_toasts.scss +10 -1
  362. package/dist/style/main.css +1 -1
  363. package/dist/synapse-queries/KeyFactory.d.ts +9 -3
  364. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  365. package/dist/synapse-queries/KeyFactory.js +17 -7
  366. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  367. package/dist/synapse-queries/auth/index.d.ts +1 -0
  368. package/dist/synapse-queries/auth/index.d.ts.map +1 -1
  369. package/dist/synapse-queries/auth/index.js +2 -1
  370. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
  371. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
  372. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
  373. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
  374. package/dist/synapse-queries/dataaccess/index.d.ts +0 -1
  375. package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
  376. package/dist/synapse-queries/dataaccess/index.js +3 -4
  377. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
  378. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  379. package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
  380. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  381. package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
  382. package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
  383. package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
  384. package/dist/synapse-queries/file/useFileHandle.js +15 -6
  385. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  386. package/dist/synapse-queries/index.js +260 -257
  387. package/dist/synapse-queries/jsonschema/index.js +2 -2
  388. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
  389. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
  390. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
  391. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
  392. package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
  393. package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
  394. package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
  395. package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
  396. package/dist/testutils/vitest.setup.js +18 -9
  397. package/dist/testutils/vitest.setup.js.map +1 -1
  398. package/dist/tsconfig.build.tsbuildinfo +1 -1
  399. package/dist/utils/APIConstants.d.ts +2 -0
  400. package/dist/utils/APIConstants.d.ts.map +1 -1
  401. package/dist/utils/APIConstants.js +2 -2
  402. package/dist/utils/APIConstants.js.map +1 -1
  403. package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
  404. package/dist/utils/appendFinalQueryParamKey.js +4 -1
  405. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  406. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -0
  407. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  408. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  409. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  410. package/dist/utils/functions/ArrayUtils.d.ts +3 -0
  411. package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
  412. package/dist/utils/functions/ArrayUtils.js +7 -1
  413. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  414. package/dist/utils/functions/toPascalCase.d.ts +6 -0
  415. package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
  416. package/dist/utils/functions/toPascalCase.js +8 -0
  417. package/dist/utils/functions/toPascalCase.js.map +1 -0
  418. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
  419. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
  420. package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
  421. package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
  422. package/dist/utils/jsonschema/submissionContext.d.ts +91 -0
  423. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
  424. package/dist/utils/jsonschema/submissionContext.js +178 -0
  425. package/dist/utils/jsonschema/submissionContext.js.map +1 -0
  426. package/package.json +13 -10
  427. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
  428. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
  429. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
  430. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
  431. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
  432. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
  433. package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
  434. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
  435. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts +0 -21
  436. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts.map +0 -1
  437. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js +0 -34
  438. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js.map +0 -1
@@ -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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"}
@@ -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,2CAkE1B"}
@@ -0,0 +1,72 @@
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];
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
+ /* @__PURE__ */ p(e, {
60
+ schema: w.jsonSchema,
61
+ uiSchema: w.uiSchema,
62
+ formContext: { descriptionVariant: "inline" },
63
+ children: /* @__PURE__ */ p(f, {}),
64
+ liveValidate: !1
65
+ })
66
+ ]
67
+ });
68
+ }
69
+ //#endregion
70
+ export { g as FormTemplatePreview };
71
+
72
+ //# 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\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,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,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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepCard.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EACjB,MAAM,kCAAkC,CAAA;AAmBzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAGL,sBAAsB,EAEvB,MAAM,sCAAsC,CAAA;AAa7C,OAAO,EAAoB,wBAAwB,EAAY,MAAM,SAAS,CAAA;AAS9E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,wBAAwB,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,4DAA4D;IAC5D,iBAAiB,EAAE,sBAAsB,EAAE,CAAA;IAC3C,0EAA0E;IAC1E,UAAU,EAAE,UAAU,CAAA;IACtB,iGAAiG;IACjG,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAA;IACpD,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,OAAO,EACP,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,aAAa,2CAoNf"}
@@ -0,0 +1,203 @@
1
+ import { moveItem as e } from "../../utils/functions/ArrayUtils.js";
2
+ import { pointerToPropertyKey as t, propertyKeyToPointer as n, resolveSchemaPropertyAtPointer as r } from "../../utils/jsonschema/submissionContext.js";
3
+ import i from "./dragHandle.module.js";
4
+ import { FIELD_DRAG_TYPE as a, SLOT_SORTABLE_TYPE as o, STEP_SORTABLE_GROUP as s, STEP_SORTABLE_TYPE as c, slotGroupId as l, slotSortableId as u, stepSortableId as d } from "./sortableIds.js";
5
+ import f from "./dropTarget.module.js";
6
+ import { StepFieldRow as p } from "./StepFieldRow.js";
7
+ import { BIND_FIELD_LABEL as m } from "./utils.js";
8
+ import { useState as h } from "react";
9
+ import { Box as g, Collapse as _, IconButton as v, MenuItem as y, Paper as b, Stack as ee, TextField as x, Typography as S } from "@mui/material";
10
+ import { jsx as C, jsxs as w } from "react/jsx-runtime";
11
+ import { ArrowDownward as T, ArrowUpward as E, Delete as D, DragIndicator as O, ExpandLess as k, ExpandMore as A } from "@mui/icons-material";
12
+ import j from "pluralize";
13
+ import { useDroppable as M } from "@dnd-kit/react";
14
+ import { useSortable as N } from "@dnd-kit/react/sortable";
15
+ //#region src/components/FormTemplateEditor/StepCard.tsx
16
+ var P = 1;
17
+ function F({ step: F, stepIndex: I, isFirst: te, isLast: L, unboundProperties: R, jsonSchema: z, formTemplateId: B, defaultExpanded: V, onChange: H, onBindField: U, onMoveUp: W, onMoveDown: G, onRemove: K }) {
18
+ let [q, J] = h(V), { ref: Y, handleRef: X, isDragging: Z, isDropTarget: Q } = N({
19
+ id: d(F),
20
+ index: I,
21
+ group: s,
22
+ type: c,
23
+ accept: [c, a]
24
+ }), { ref: ne, isDropTarget: re } = M({
25
+ id: l(F),
26
+ accept: o,
27
+ collisionPriority: P
28
+ }), ie = (e, t) => {
29
+ H({ fields: F.fields.map((n, r) => r === e ? {
30
+ ...n,
31
+ ...t
32
+ } : n) });
33
+ }, $ = (t, n) => {
34
+ H({ fields: e(F.fields, t, n) });
35
+ }, ae = (e) => {
36
+ H({ fields: F.fields.filter((t, n) => n !== e) });
37
+ }, oe = j("field", F.fields.length, !0);
38
+ return /* @__PURE__ */ w(b, {
39
+ ref: Y,
40
+ variant: "outlined",
41
+ className: `${f.dropTarget} ${i.dragSource}`,
42
+ "data-drop-target": Q,
43
+ "data-dragging": Z,
44
+ sx: { p: 1.5 },
45
+ children: [/* @__PURE__ */ w(g, {
46
+ sx: {
47
+ display: "flex",
48
+ alignItems: "center",
49
+ gap: .5
50
+ },
51
+ children: [
52
+ /* @__PURE__ */ C(g, {
53
+ ref: X,
54
+ role: "button",
55
+ tabIndex: 0,
56
+ "aria-label": "Drag to reorder step",
57
+ className: i.dragHandle,
58
+ sx: { color: "text.secondary" },
59
+ children: /* @__PURE__ */ C(O, { fontSize: "small" })
60
+ }),
61
+ /* @__PURE__ */ C(v, {
62
+ size: "small",
63
+ onClick: () => J((e) => !e),
64
+ "aria-label": q ? "Collapse step" : "Expand step",
65
+ children: C(q ? k : A, { fontSize: "small" })
66
+ }),
67
+ /* @__PURE__ */ w(g, {
68
+ sx: {
69
+ flexGrow: 1,
70
+ minWidth: 0
71
+ },
72
+ children: [/* @__PURE__ */ w(S, {
73
+ variant: "body2",
74
+ fontWeight: 500,
75
+ noWrap: !0,
76
+ children: [
77
+ "Step ",
78
+ I + 1,
79
+ ": ",
80
+ F.title || "(untitled)"
81
+ ]
82
+ }), /* @__PURE__ */ C(S, {
83
+ variant: "caption",
84
+ color: "text.secondary",
85
+ children: oe
86
+ })]
87
+ }),
88
+ /* @__PURE__ */ C(v, {
89
+ size: "small",
90
+ disabled: te,
91
+ onClick: W,
92
+ "aria-label": "Move step up",
93
+ children: /* @__PURE__ */ C(E, { fontSize: "small" })
94
+ }),
95
+ /* @__PURE__ */ C(v, {
96
+ size: "small",
97
+ disabled: L,
98
+ onClick: G,
99
+ "aria-label": "Move step down",
100
+ children: /* @__PURE__ */ C(T, { fontSize: "small" })
101
+ }),
102
+ /* @__PURE__ */ C(v, {
103
+ size: "small",
104
+ onClick: K,
105
+ "aria-label": "Remove step",
106
+ children: /* @__PURE__ */ C(D, { fontSize: "small" })
107
+ })
108
+ ]
109
+ }), /* @__PURE__ */ C(_, {
110
+ in: q,
111
+ unmountOnExit: !0,
112
+ children: /* @__PURE__ */ w(g, {
113
+ sx: { pt: 1.5 },
114
+ children: [
115
+ /* @__PURE__ */ C(x, {
116
+ label: "Title",
117
+ value: F.title,
118
+ onChange: (e) => H({ title: e.target.value }),
119
+ size: "small",
120
+ fullWidth: !0,
121
+ sx: { mb: 1 }
122
+ }),
123
+ /* @__PURE__ */ C(x, {
124
+ label: "Description",
125
+ value: F.description ?? "",
126
+ onChange: (e) => H({ description: e.target.value }),
127
+ size: "small",
128
+ multiline: !0,
129
+ rows: 2,
130
+ fullWidth: !0,
131
+ sx: { mb: 1.5 }
132
+ }),
133
+ /* @__PURE__ */ C(g, {
134
+ ref: ne,
135
+ className: f.dropTarget,
136
+ "data-drop-target": re,
137
+ sx: {
138
+ display: "flex",
139
+ flexDirection: "column",
140
+ gap: 1,
141
+ mb: 1,
142
+ p: .5,
143
+ borderRadius: 1
144
+ },
145
+ children: F.fields.length === 0 ? /* @__PURE__ */ C(S, {
146
+ variant: "caption",
147
+ color: "text.secondary",
148
+ sx: { p: 1 },
149
+ children: "Drag a field here, or bind one below."
150
+ }) : F.fields.map((e, n) => {
151
+ let i = r(z, e.schemaPath);
152
+ return /* @__PURE__ */ C(p, {
153
+ sortableId: u(e),
154
+ sortableIndex: n,
155
+ sortableGroup: l(F),
156
+ field: e,
157
+ resolvedProperty: i?.subSchema,
158
+ context: i?.context ?? "ALWAYS",
159
+ propertyKey: t(e.schemaPath) ?? e.schemaPath,
160
+ isFirst: n === 0,
161
+ isLast: n === F.fields.length - 1,
162
+ formTemplateId: B,
163
+ onChange: (e) => ie(n, e),
164
+ onMoveUp: () => $(n, -1),
165
+ onMoveDown: () => $(n, 1),
166
+ onRemove: () => ae(n)
167
+ }, e.schemaPath);
168
+ })
169
+ }),
170
+ /* @__PURE__ */ C(ee, {
171
+ spacing: 1,
172
+ children: /* @__PURE__ */ C(x, {
173
+ select: !0,
174
+ size: "small",
175
+ label: m,
176
+ value: "",
177
+ onChange: (e) => {
178
+ e.target.value && U(e.target.value);
179
+ },
180
+ disabled: R.length === 0,
181
+ helperText: R.length === 0 ? "All fields are bound to a step." : "Add a field from the library to this step.",
182
+ children: R.length === 0 ? /* @__PURE__ */ C(y, {
183
+ value: "",
184
+ disabled: !0,
185
+ children: "All fields bound"
186
+ }) : R.map((e) => {
187
+ let t = n(e.propertyKey);
188
+ return /* @__PURE__ */ C(y, {
189
+ value: e.propertyKey,
190
+ children: e.subSchema.title ? `${e.subSchema.title} (${t})` : t
191
+ }, e.propertyKey);
192
+ })
193
+ })
194
+ })
195
+ ]
196
+ })
197
+ })]
198
+ });
199
+ }
200
+ //#endregion
201
+ export { F as StepCard };
202
+
203
+ //# sourceMappingURL=StepCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepCard.js","names":[],"sources":["../../../src/components/FormTemplateEditor/StepCard.tsx"],"sourcesContent":["import { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport {\n FormTemplateField,\n FormTemplateStep,\n} from '@sage-bionetworks/synapse-client'\nimport {\n Box,\n Collapse,\n IconButton,\n MenuItem,\n Paper,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ArrowDownward as DownIcon,\n Delete as DeleteIcon,\n DragIndicator as DragHandleIcon,\n ExpandLess as ExpandLessIcon,\n ExpandMore as ExpandMoreIcon,\n ArrowUpward as UpIcon,\n} from '@mui/icons-material'\nimport { RJSFSchema } from '@rjsf/utils'\nimport pluralize from 'pluralize'\nimport { useState } from 'react'\nimport {\n pointerToPropertyKey,\n propertyKeyToPointer,\n ResolvedSchemaProperty,\n resolveSchemaPropertyAtPointer,\n} from '@/utils/jsonschema/submissionContext'\nimport dragHandleStyles from './dragHandle.module.scss'\nimport dropTargetStyles from './dropTarget.module.scss'\nimport { StepFieldRow } from './StepFieldRow'\nimport {\n FIELD_DRAG_TYPE,\n slotGroupId,\n SLOT_SORTABLE_TYPE,\n slotSortableId,\n stepSortableId,\n STEP_SORTABLE_GROUP,\n STEP_SORTABLE_TYPE,\n} from './sortableIds'\nimport { BIND_FIELD_LABEL, EditableFormTemplateStep, moveItem } from './utils'\n\n/**\n * The slot list must lose to the slot rows inside it so that dragging over a populated step\n * targets a row (which resolves to a precise insertion index) and only an empty or below-the-last-\n * row region falls through to the list itself.\n */\nconst SLOT_LIST_COLLISION_PRIORITY = 1\n\nexport type StepCardProps = {\n step: EditableFormTemplateStep\n stepIndex: number\n isFirst: boolean\n isLast: boolean\n /** Properties not yet bound to any step in the template. */\n unboundProperties: ResolvedSchemaProperty[]\n /** The full JSON Schema, used to resolve display labels for slot rows. */\n jsonSchema: RJSFSchema\n /** The FormTemplate's id, if it has been saved. Threaded down to file-field template uploads. */\n formTemplateId: string | undefined\n /** If true, render expanded by default (first step). */\n defaultExpanded: boolean\n onChange: (patch: Partial<FormTemplateStep>) => void\n onBindField: (propertyKey: string) => void\n onMoveUp: () => void\n onMoveDown: () => void\n onRemove: () => void\n}\n\nexport function StepCard({\n step,\n stepIndex,\n isFirst,\n isLast,\n unboundProperties,\n jsonSchema,\n formTemplateId,\n defaultExpanded,\n onChange,\n onBindField,\n onMoveUp,\n onMoveDown,\n onRemove,\n}: StepCardProps) {\n const [expanded, setExpanded] = useState(defaultExpanded)\n\n // Step is sortable within its group, and also accepts field drops to bind.\n const { ref, handleRef, isDragging, isDropTarget } = useSortable({\n id: stepSortableId(step),\n index: stepIndex,\n group: STEP_SORTABLE_GROUP,\n type: STEP_SORTABLE_TYPE,\n accept: [STEP_SORTABLE_TYPE, FIELD_DRAG_TYPE],\n })\n\n // The slot list is the drop target for slots dragged in from another step, which is the only\n // way to reach a step whose list is empty and therefore has no slot rows to target.\n const { ref: slotListRef, isDropTarget: isSlotDropTarget } = useDroppable({\n id: slotGroupId(step),\n accept: SLOT_SORTABLE_TYPE,\n collisionPriority: SLOT_LIST_COLLISION_PRIORITY,\n })\n\n const handleFieldChange = (\n fieldIdx: number,\n patch: Partial<FormTemplateField>,\n ) => {\n onChange({\n fields: step.fields.map((f, i) =>\n i === fieldIdx ? { ...f, ...patch } : f,\n ),\n })\n }\n\n const handleFieldMove = (fieldIdx: number, direction: -1 | 1) => {\n onChange({ fields: moveItem(step.fields, fieldIdx, direction) })\n }\n\n const handleFieldRemove = (fieldIdx: number) => {\n onChange({ fields: step.fields.filter((_, i) => i !== fieldIdx) })\n }\n\n const fieldCountLabel = pluralize('field', step.fields.length, true)\n\n return (\n <Paper\n ref={ref}\n variant=\"outlined\"\n className={`${dropTargetStyles.dropTarget} ${dragHandleStyles.dragSource}`}\n data-drop-target={isDropTarget}\n data-dragging={isDragging}\n sx={{ p: 1.5 }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Box\n ref={handleRef}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Drag to reorder step\"\n className={dragHandleStyles.dragHandle}\n sx={{ color: 'text.secondary' }}\n >\n <DragHandleIcon fontSize=\"small\" />\n </Box>\n <IconButton\n size=\"small\"\n onClick={() => setExpanded(prev => !prev)}\n aria-label={expanded ? 'Collapse step' : 'Expand step'}\n >\n {expanded ? (\n <ExpandLessIcon fontSize=\"small\" />\n ) : (\n <ExpandMoreIcon fontSize=\"small\" />\n )}\n </IconButton>\n <Box sx={{ flexGrow: 1, minWidth: 0 }}>\n <Typography variant=\"body2\" fontWeight={500} noWrap>\n Step {stepIndex + 1}: {step.title || '(untitled)'}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {fieldCountLabel}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n disabled={isFirst}\n onClick={onMoveUp}\n aria-label=\"Move step up\"\n >\n <UpIcon fontSize=\"small\" />\n </IconButton>\n <IconButton\n size=\"small\"\n disabled={isLast}\n onClick={onMoveDown}\n aria-label=\"Move step down\"\n >\n <DownIcon fontSize=\"small\" />\n </IconButton>\n <IconButton size=\"small\" onClick={onRemove} aria-label=\"Remove step\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n\n <Collapse in={expanded} unmountOnExit>\n <Box sx={{ pt: 1.5 }}>\n <TextField\n label=\"Title\"\n value={step.title}\n onChange={e => onChange({ title: e.target.value })}\n size=\"small\"\n fullWidth\n sx={{ mb: 1 }}\n />\n <TextField\n label=\"Description\"\n value={step.description ?? ''}\n onChange={e => onChange({ description: e.target.value })}\n size=\"small\"\n multiline\n rows={2}\n fullWidth\n sx={{ mb: 1.5 }}\n />\n\n <Box\n ref={slotListRef}\n className={dropTargetStyles.dropTarget}\n data-drop-target={isSlotDropTarget}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n mb: 1,\n p: 0.5,\n borderRadius: 1,\n }}\n >\n {step.fields.length === 0 ? (\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{ p: 1 }}\n >\n Drag a field here, or bind one below.\n </Typography>\n ) : (\n step.fields.map((field, fieldIdx) => {\n const resolved = resolveSchemaPropertyAtPointer(\n jsonSchema,\n field.schemaPath,\n )\n return (\n <StepFieldRow\n key={field.schemaPath}\n sortableId={slotSortableId(field)}\n sortableIndex={fieldIdx}\n sortableGroup={slotGroupId(step)}\n field={field}\n resolvedProperty={resolved?.subSchema}\n context={resolved?.context ?? 'ALWAYS'}\n propertyKey={\n pointerToPropertyKey(field.schemaPath) ?? field.schemaPath\n }\n isFirst={fieldIdx === 0}\n isLast={fieldIdx === step.fields.length - 1}\n formTemplateId={formTemplateId}\n onChange={patch => handleFieldChange(fieldIdx, patch)}\n onMoveUp={() => handleFieldMove(fieldIdx, -1)}\n onMoveDown={() => handleFieldMove(fieldIdx, 1)}\n onRemove={() => handleFieldRemove(fieldIdx)}\n />\n )\n })\n )}\n </Box>\n\n <Stack spacing={1}>\n <TextField\n select\n size=\"small\"\n label={BIND_FIELD_LABEL}\n value=\"\"\n onChange={e => {\n if (e.target.value) onBindField(e.target.value)\n }}\n disabled={unboundProperties.length === 0}\n helperText={\n unboundProperties.length === 0\n ? 'All fields are bound to a step.'\n : 'Add a field from the library to this step.'\n }\n >\n {unboundProperties.length === 0 ? (\n <MenuItem value=\"\" disabled>\n All fields bound\n </MenuItem>\n ) : (\n unboundProperties.map(p => {\n const pointer = propertyKeyToPointer(p.propertyKey)\n return (\n <MenuItem key={p.propertyKey} value={p.propertyKey}>\n {p.subSchema.title\n ? `${p.subSchema.title} (${pointer})`\n : pointer}\n </MenuItem>\n )\n })\n )}\n </TextField>\n </Stack>\n </Box>\n </Collapse>\n </Paper>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { FormTemplateField } from '@sage-bionetworks/synapse-client';
2
+ import { RJSFSchema } from '@rjsf/utils';
3
+ import { SchemaPropertyContext } from '@/utils/jsonschema/submissionContext';
4
+ export type StepFieldRowProps = {
5
+ /** Sortable id assigned by parent: `slot:{stepIndex}:{fieldIndex}`. */
6
+ sortableId: string;
7
+ /** Position within its step's fields array. */
8
+ sortableIndex: number;
9
+ /** Sortable group; slots only reorder within the same step. */
10
+ sortableGroup: string;
11
+ field: FormTemplateField;
12
+ /** The schema property this slot resolves to, if it still exists. */
13
+ resolvedProperty: RJSFSchema | undefined;
14
+ /** Which submission context (per the schema's `x-synapse-submissionContext` convention)
15
+ * gates this field, derived from `resolvedProperty`. */
16
+ context: SchemaPropertyContext;
17
+ /** Underlying property key (the segment after `/` in `schemaPath`). */
18
+ propertyKey: string;
19
+ isFirst: boolean;
20
+ isLast: boolean;
21
+ /** The FormTemplate's id, if it has been saved. Used to build the template file download. */
22
+ formTemplateId: string | undefined;
23
+ onChange: (patch: Partial<FormTemplateField>) => void;
24
+ onMoveUp: () => void;
25
+ onMoveDown: () => void;
26
+ onRemove: () => void;
27
+ };
28
+ /**
29
+ * A slot row inside a step. Compact by default — shows the field's display
30
+ * name. Expand to reveal slot-specific config: (for file fields) an
31
+ * optional template file handle. Sortable within its parent step.
32
+ */
33
+ export declare function StepFieldRow({ sortableId, sortableIndex, sortableGroup, field, resolvedProperty, context, propertyKey, isFirst, isLast, formTemplateId, onChange, onMoveUp, onMoveDown, onRemove, }: StepFieldRowProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=StepFieldRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepFieldRow.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/StepFieldRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAmBpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EACL,qBAAqB,EAEtB,MAAM,sCAAsC,CAAA;AAM7C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,CAAA;IACxB,qEAAqE;IACrE,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;IACxC;4DACwD;IACxD,OAAO,EAAE,qBAAqB,CAAA;IAC9B,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,6FAA6F;IAC7F,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACrD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,EACL,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EACN,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,2CA4HnB"}
@@ -0,0 +1,128 @@
1
+ import { submissionContextLabel as e } from "../../utils/jsonschema/submissionContext.js";
2
+ import { detectFieldType as t, fieldTypeLabel as n } from "./schemaFieldUtils.js";
3
+ import r from "./dragHandle.module.js";
4
+ import { SLOT_SORTABLE_TYPE as i } from "./sortableIds.js";
5
+ import { TemplateFileHandleField as a } from "./TemplateFileHandleField.js";
6
+ import { useState as o } from "react";
7
+ import { Box as s, Checkbox as c, Collapse as l, FormControlLabel as u, IconButton as d, Paper as f, Stack as p, Typography as m } from "@mui/material";
8
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
+ import { ArrowDownward as _, ArrowUpward as v, Delete as y, DragIndicator as b, ExpandLess as x, ExpandMore as S } from "@mui/icons-material";
10
+ import { useSortable as C } from "@dnd-kit/react/sortable";
11
+ //#region src/components/FormTemplateEditor/StepFieldRow.tsx
12
+ function w({ sortableId: w, sortableIndex: T, sortableGroup: E, field: D, resolvedProperty: O, context: k, propertyKey: A, isFirst: j, isLast: M, formTemplateId: N, onChange: P, onMoveUp: F, onMoveDown: I, onRemove: L }) {
13
+ let [R, z] = o(!1), { ref: B, handleRef: V, isDragging: H } = C({
14
+ id: w,
15
+ index: T,
16
+ group: E,
17
+ type: i,
18
+ accept: i
19
+ }), U = O ? t(O) : null, W = O?.title || A, G = U === "file", K = !O, q = `Missing field: ${D.schemaPath}`;
20
+ if (!K) {
21
+ let t = [n(U)];
22
+ k !== "ALWAYS" && t.push(e(k)), D.isPublic && t.push("Public"), q = t.join(" · ");
23
+ }
24
+ return /* @__PURE__ */ g(f, {
25
+ ref: B,
26
+ variant: "outlined",
27
+ className: r.dragSource,
28
+ "data-dragging": H,
29
+ sx: {
30
+ p: 1,
31
+ backgroundColor: "action.hover",
32
+ borderColor: K ? "error.main" : void 0
33
+ },
34
+ children: [/* @__PURE__ */ g(s, {
35
+ sx: {
36
+ display: "flex",
37
+ alignItems: "center",
38
+ gap: .5
39
+ },
40
+ children: [
41
+ /* @__PURE__ */ h(s, {
42
+ ref: V,
43
+ role: "button",
44
+ tabIndex: 0,
45
+ "aria-label": "Drag to reorder field",
46
+ className: r.dragHandle,
47
+ sx: { color: "text.secondary" },
48
+ children: /* @__PURE__ */ h(b, { fontSize: "small" })
49
+ }),
50
+ /* @__PURE__ */ h(d, {
51
+ size: "small",
52
+ onClick: () => z((e) => !e),
53
+ "aria-label": R ? "Collapse field" : "Expand field",
54
+ children: h(R ? x : S, { fontSize: "small" })
55
+ }),
56
+ /* @__PURE__ */ g(s, {
57
+ sx: {
58
+ flexGrow: 1,
59
+ minWidth: 0
60
+ },
61
+ children: [/* @__PURE__ */ h(m, {
62
+ variant: "body2",
63
+ noWrap: !0,
64
+ title: W,
65
+ children: W
66
+ }), /* @__PURE__ */ h(m, {
67
+ variant: "caption",
68
+ color: K ? "error" : "text.secondary",
69
+ children: q
70
+ })]
71
+ }),
72
+ /* @__PURE__ */ h(d, {
73
+ size: "small",
74
+ disabled: j,
75
+ onClick: F,
76
+ "aria-label": "Move field up",
77
+ children: /* @__PURE__ */ h(v, { fontSize: "small" })
78
+ }),
79
+ /* @__PURE__ */ h(d, {
80
+ size: "small",
81
+ disabled: M,
82
+ onClick: I,
83
+ "aria-label": "Move field down",
84
+ children: /* @__PURE__ */ h(_, { fontSize: "small" })
85
+ }),
86
+ /* @__PURE__ */ h(d, {
87
+ size: "small",
88
+ onClick: L,
89
+ "aria-label": "Remove field from step",
90
+ children: /* @__PURE__ */ h(y, { fontSize: "small" })
91
+ })
92
+ ]
93
+ }), /* @__PURE__ */ h(l, {
94
+ in: R,
95
+ unmountOnExit: !0,
96
+ children: /* @__PURE__ */ g(p, {
97
+ spacing: 1,
98
+ sx: {
99
+ pt: 1,
100
+ pl: 4
101
+ },
102
+ children: [
103
+ G && /* @__PURE__ */ h(a, {
104
+ fileHandleId: D.templateFileHandleId,
105
+ formTemplateId: N,
106
+ onChange: (e) => P({ templateFileHandleId: e })
107
+ }),
108
+ /* @__PURE__ */ h(u, {
109
+ control: /* @__PURE__ */ h(c, {
110
+ checked: D.isPublic ?? !1,
111
+ onChange: (e) => P({ isPublic: e.target.checked })
112
+ }),
113
+ label: "Publicly viewable after approval"
114
+ }),
115
+ /* @__PURE__ */ h(m, {
116
+ variant: "caption",
117
+ color: "text.secondary",
118
+ children: "Answers appear in this AR's public submission info once a submission is approved. Snapshotted at submit time."
119
+ })
120
+ ]
121
+ })
122
+ })]
123
+ });
124
+ }
125
+ //#endregion
126
+ export { w as StepFieldRow };
127
+
128
+ //# sourceMappingURL=StepFieldRow.js.map