@medplum/react 2.0.3 → 2.0.5

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 (407) hide show
  1. package/dist/cjs/index.cjs +125 -71
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.min.cjs +1 -1
  4. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs +64 -22
  5. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs.map +1 -1
  6. package/dist/esm/FhirPathTable/FhirPathTable.mjs +5 -1
  7. package/dist/esm/FhirPathTable/FhirPathTable.mjs.map +1 -1
  8. package/dist/esm/ResourceName/ResourceName.mjs +13 -6
  9. package/dist/esm/ResourceName/ResourceName.mjs.map +1 -1
  10. package/dist/esm/SearchControl/SearchControl.mjs +1 -1
  11. package/dist/esm/SearchControl/SearchControl.mjs.map +1 -1
  12. package/dist/esm/auth/AuthenticationForm.mjs +3 -2
  13. package/dist/esm/auth/AuthenticationForm.mjs.map +1 -1
  14. package/dist/esm/auth/ChooseProfileForm.mjs +7 -3
  15. package/dist/esm/auth/ChooseProfileForm.mjs.map +1 -1
  16. package/dist/esm/auth/SignInForm.mjs +1 -1
  17. package/dist/esm/auth/SignInForm.mjs.map +1 -1
  18. package/dist/esm/index.min.mjs +1 -1
  19. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs +1 -1
  20. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs.map +1 -1
  21. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs +1 -1
  22. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs.map +1 -1
  23. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs +1 -1
  24. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs.map +1 -1
  25. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs +1 -1
  26. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs.map +1 -1
  27. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs +1 -1
  28. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs.map +1 -1
  29. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs +1 -1
  30. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs.map +1 -1
  31. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs +1 -1
  32. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs.map +1 -1
  33. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs +1 -1
  34. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs.map +1 -1
  35. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs +1 -1
  36. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs.map +1 -1
  37. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs +1 -1
  38. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs.map +1 -1
  39. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs +1 -1
  40. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs.map +1 -1
  41. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs +1 -1
  42. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs.map +1 -1
  43. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs +1 -1
  44. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs.map +1 -1
  45. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs +1 -1
  46. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs.map +1 -1
  47. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs +1 -1
  48. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs.map +1 -1
  49. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs +1 -1
  50. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs.map +1 -1
  51. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs +1 -1
  52. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs.map +1 -1
  53. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs +1 -1
  54. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs.map +1 -1
  55. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs +1 -1
  56. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs.map +1 -1
  57. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs +1 -1
  58. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs.map +1 -1
  59. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs +1 -1
  60. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs.map +1 -1
  61. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs +1 -1
  62. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs.map +1 -1
  63. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs +1 -1
  64. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs.map +1 -1
  65. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs +1 -1
  66. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs.map +1 -1
  67. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs +1 -1
  68. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs.map +1 -1
  69. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs +1 -1
  70. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs.map +1 -1
  71. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs +1 -1
  72. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs.map +1 -1
  73. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs +1 -1
  74. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs.map +1 -1
  75. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs +1 -1
  76. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs.map +1 -1
  77. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs +1 -1
  78. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs.map +1 -1
  79. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs +1 -1
  80. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs.map +1 -1
  81. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs +1 -1
  82. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs.map +1 -1
  83. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs +1 -1
  84. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs.map +1 -1
  85. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs +1 -1
  86. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs.map +1 -1
  87. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs +1 -1
  88. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs.map +1 -1
  89. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs +1 -1
  90. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs.map +1 -1
  91. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs +1 -1
  92. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs.map +1 -1
  93. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs +1 -1
  94. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs.map +1 -1
  95. package/dist/esm/useResource/useResource.mjs +5 -3
  96. package/dist/esm/useResource/useResource.mjs.map +1 -1
  97. package/dist/{cjs → types}/DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts +4 -0
  98. package/dist/{esm → types}/auth/AuthenticationForm.d.ts +2 -1
  99. package/dist/{cjs → types}/auth/SignInForm.d.ts +1 -0
  100. package/dist/types/icons/IconAdjustmentsHorizontal.d.ts +0 -0
  101. package/package.json +17 -19
  102. package/tsconfig.build.json +9 -0
  103. package/dist/cjs/AddressInput/AddressInput.stories.d.ts +0 -6
  104. package/dist/cjs/AttachmentArrayInput/AttachmentArrayInput.stories.d.ts +0 -6
  105. package/dist/cjs/AttachmentButton/AttachmentButton.stories.d.ts +0 -7
  106. package/dist/cjs/AttachmentInput/AttachmentInput.stories.d.ts +0 -6
  107. package/dist/cjs/CodeInput/CodeInput.stories.d.ts +0 -6
  108. package/dist/cjs/CodeableConceptDisplay/CodeableConceptDisplay.stories.d.ts +0 -8
  109. package/dist/cjs/CodeableConceptInput/CodeableConceptInput.stories.d.ts +0 -6
  110. package/dist/cjs/DescriptionList/DescriptionList.stories.d.ts +0 -5
  111. package/dist/cjs/DiagnosticReportDisplay/DiagnosticReportDisplay.stories.d.ts +0 -7
  112. package/dist/cjs/EncounterTimeline/EncounterTimeline.stories.d.ts +0 -5
  113. package/dist/cjs/FhirPathDisplay/FhirPathDisplay.stories.d.ts +0 -7
  114. package/dist/cjs/Logo/Logo.stories.d.ts +0 -5
  115. package/dist/cjs/MoneyInput/MoneyInput.stories.d.ts +0 -6
  116. package/dist/cjs/NoteDisplay/NoteDisplay.stories.d.ts +0 -7
  117. package/dist/cjs/PatientTimeline/PatientTimeline.stories.d.ts +0 -5
  118. package/dist/cjs/PeriodInput/PeriodInput.stories.d.ts +0 -6
  119. package/dist/cjs/PlanDefinitionBuilder/PlanDefinitionBuilder.stories.d.ts +0 -7
  120. package/dist/cjs/QuantityInput/QuantityInput.stories.d.ts +0 -7
  121. package/dist/cjs/QuestionnaireBuilder/QuestionnaireBuilder.stories.d.ts +0 -7
  122. package/dist/cjs/QuestionnaireForm/QuestionnaireForm.stories.d.ts +0 -12
  123. package/dist/cjs/ReferenceInput/ReferenceInput.stories.d.ts +0 -6
  124. package/dist/cjs/ReferenceRangeEditor/ReferenceRangeEditor.stories.d.ts +0 -7
  125. package/dist/cjs/RequestGroupDisplay/RequestGroupDisplay.stories.d.ts +0 -6
  126. package/dist/cjs/ResourceAvatar/ResourceAvatar.stories.d.ts +0 -10
  127. package/dist/cjs/ResourceBlame/ResourceBlame.stories.d.ts +0 -5
  128. package/dist/cjs/ResourceDiffTable/ResourceDiffTable.stories.d.ts +0 -5
  129. package/dist/cjs/ResourceForm/ResourceForm.stories.d.ts +0 -13
  130. package/dist/cjs/ResourceHistoryTable/ResourceHistoryTable.stories.d.ts +0 -5
  131. package/dist/cjs/ResourceInput/ResourceInput.stories.d.ts +0 -6
  132. package/dist/cjs/ResourceTable/ResourceTable.stories.d.ts +0 -11
  133. package/dist/cjs/Scheduler/Scheduler.stories.d.ts +0 -5
  134. package/dist/cjs/SearchControl/SearchControl.stories.d.ts +0 -14
  135. package/dist/cjs/StatusBadge/StatusBadge.stories.d.ts +0 -5
  136. package/dist/cjs/Timeline/Timeline.stories.d.ts +0 -5
  137. package/dist/cjs/TimingInput/TimingInput.stories.d.ts +0 -6
  138. package/dist/cjs/auth/AuthenticationForm.d.ts +0 -24
  139. package/dist/cjs/auth/RegisterForm.stories.d.ts +0 -7
  140. package/dist/cjs/auth/SignInForm.stories.d.ts +0 -8
  141. package/dist/esm/AddressDisplay/AddressDisplay.d.ts +0 -6
  142. package/dist/esm/AddressInput/AddressInput.d.ts +0 -8
  143. package/dist/esm/AddressInput/AddressInput.stories.d.ts +0 -6
  144. package/dist/esm/AnnotationInput/AnnotationInput.d.ts +0 -8
  145. package/dist/esm/AsyncAutocomplete/AsyncAutocomplete.d.ts +0 -14
  146. package/dist/esm/AttachmentArrayDisplay/AttachmentArrayDisplay.d.ts +0 -7
  147. package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.d.ts +0 -9
  148. package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.stories.d.ts +0 -6
  149. package/dist/esm/AttachmentButton/AttachmentButton.d.ts +0 -11
  150. package/dist/esm/AttachmentButton/AttachmentButton.stories.d.ts +0 -7
  151. package/dist/esm/AttachmentDisplay/AttachmentDisplay.d.ts +0 -7
  152. package/dist/esm/AttachmentInput/AttachmentInput.d.ts +0 -9
  153. package/dist/esm/AttachmentInput/AttachmentInput.stories.d.ts +0 -6
  154. package/dist/esm/BackboneElementDisplay/BackboneElementDisplay.d.ts +0 -9
  155. package/dist/esm/BackboneElementInput/BackboneElementInput.d.ts +0 -9
  156. package/dist/esm/CalendarInput/CalendarInput.d.ts +0 -15
  157. package/dist/esm/CheckboxFormSection/CheckboxFormSection.d.ts +0 -8
  158. package/dist/esm/CodeInput/CodeInput.d.ts +0 -10
  159. package/dist/esm/CodeInput/CodeInput.stories.d.ts +0 -6
  160. package/dist/esm/CodeableConceptDisplay/CodeableConceptDisplay.d.ts +0 -6
  161. package/dist/esm/CodeableConceptDisplay/CodeableConceptDisplay.stories.d.ts +0 -8
  162. package/dist/esm/CodeableConceptInput/CodeableConceptInput.d.ts +0 -10
  163. package/dist/esm/CodeableConceptInput/CodeableConceptInput.stories.d.ts +0 -6
  164. package/dist/esm/CodingDisplay/CodingDisplay.d.ts +0 -6
  165. package/dist/esm/CodingInput/CodingInput.d.ts +0 -10
  166. package/dist/esm/ContactDetailDisplay/ContactDetailDisplay.d.ts +0 -6
  167. package/dist/esm/ContactDetailInput/ContactDetailInput.d.ts +0 -8
  168. package/dist/esm/ContactPointDisplay/ContactPointDisplay.d.ts +0 -6
  169. package/dist/esm/ContactPointInput/ContactPointInput.d.ts +0 -8
  170. package/dist/esm/Container/Container.d.ts +0 -3
  171. package/dist/esm/DateTimeInput/DateTimeInput.d.ts +0 -30
  172. package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.d.ts +0 -6
  173. package/dist/esm/DescriptionList/DescriptionList.d.ts +0 -11
  174. package/dist/esm/DescriptionList/DescriptionList.stories.d.ts +0 -5
  175. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.d.ts +0 -12
  176. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.stories.d.ts +0 -7
  177. package/dist/esm/Document/Document.d.ts +0 -3
  178. package/dist/esm/EncounterTimeline/EncounterTimeline.d.ts +0 -6
  179. package/dist/esm/EncounterTimeline/EncounterTimeline.stories.d.ts +0 -5
  180. package/dist/esm/ErrorBoundary/ErrorBoundary.d.ts +0 -18
  181. package/dist/esm/ExtensionInput/ExtensionInput.d.ts +0 -8
  182. package/dist/esm/FhirPathDisplay/FhirPathDisplay.d.ts +0 -9
  183. package/dist/esm/FhirPathDisplay/FhirPathDisplay.stories.d.ts +0 -7
  184. package/dist/esm/FhirPathTable/FhirPathTable.d.ts +0 -28
  185. package/dist/esm/Form/Form.d.ts +0 -8
  186. package/dist/esm/Form/FormUtils.d.ts +0 -5
  187. package/dist/esm/FormSection/FormSection.d.ts +0 -10
  188. package/dist/esm/GoogleButton/GoogleButton.d.ts +0 -8
  189. package/dist/esm/HumanNameDisplay/HumanNameDisplay.d.ts +0 -8
  190. package/dist/esm/HumanNameInput/HumanNameInput.d.ts +0 -8
  191. package/dist/esm/IdentifierDisplay/IdentifierDisplay.d.ts +0 -6
  192. package/dist/esm/IdentifierInput/IdentifierInput.d.ts +0 -8
  193. package/dist/esm/Logo/Logo.d.ts +0 -6
  194. package/dist/esm/Logo/Logo.stories.d.ts +0 -5
  195. package/dist/esm/MedplumLink/MedplumLink.d.ts +0 -11
  196. package/dist/esm/MedplumProvider/MedplumProvider.d.ts +0 -42
  197. package/dist/esm/MoneyDisplay/MoneyDisplay.d.ts +0 -6
  198. package/dist/esm/MoneyInput/MoneyInput.d.ts +0 -10
  199. package/dist/esm/MoneyInput/MoneyInput.stories.d.ts +0 -6
  200. package/dist/esm/NoteDisplay/NoteDisplay.d.ts +0 -6
  201. package/dist/esm/NoteDisplay/NoteDisplay.stories.d.ts +0 -7
  202. package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.d.ts +0 -7
  203. package/dist/esm/Panel/Panel.d.ts +0 -11
  204. package/dist/esm/PatientTimeline/PatientTimeline.d.ts +0 -6
  205. package/dist/esm/PatientTimeline/PatientTimeline.stories.d.ts +0 -5
  206. package/dist/esm/PeriodInput/PeriodInput.d.ts +0 -8
  207. package/dist/esm/PeriodInput/PeriodInput.stories.d.ts +0 -6
  208. package/dist/esm/PlanDefinitionBuilder/PlanDefinitionBuilder.d.ts +0 -7
  209. package/dist/esm/PlanDefinitionBuilder/PlanDefinitionBuilder.stories.d.ts +0 -7
  210. package/dist/esm/QuantityDisplay/QuantityDisplay.d.ts +0 -6
  211. package/dist/esm/QuantityInput/QuantityInput.d.ts +0 -9
  212. package/dist/esm/QuantityInput/QuantityInput.stories.d.ts +0 -7
  213. package/dist/esm/QuestionnaireBuilder/QuestionnaireBuilder.d.ts +0 -7
  214. package/dist/esm/QuestionnaireBuilder/QuestionnaireBuilder.stories.d.ts +0 -7
  215. package/dist/esm/QuestionnaireForm/QuestionnaireForm.d.ts +0 -16
  216. package/dist/esm/QuestionnaireForm/QuestionnaireForm.stories.d.ts +0 -12
  217. package/dist/esm/RangeDisplay/RangeDisplay.d.ts +0 -6
  218. package/dist/esm/RangeInput/RangeInput.d.ts +0 -14
  219. package/dist/esm/RatioDisplay/RatioDisplay.d.ts +0 -6
  220. package/dist/esm/RatioInput/RatioInput.d.ts +0 -14
  221. package/dist/esm/ReferenceDisplay/ReferenceDisplay.d.ts +0 -7
  222. package/dist/esm/ReferenceInput/ReferenceInput.d.ts +0 -10
  223. package/dist/esm/ReferenceInput/ReferenceInput.stories.d.ts +0 -6
  224. package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +0 -26
  225. package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.stories.d.ts +0 -7
  226. package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.d.ts +0 -8
  227. package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.stories.d.ts +0 -6
  228. package/dist/esm/ResourceArrayDisplay/ResourceArrayDisplay.d.ts +0 -11
  229. package/dist/esm/ResourceArrayInput/ResourceArrayInput.d.ts +0 -11
  230. package/dist/esm/ResourceAvatar/ResourceAvatar.d.ts +0 -8
  231. package/dist/esm/ResourceAvatar/ResourceAvatar.stories.d.ts +0 -10
  232. package/dist/esm/ResourceBadge/ResourceBadge.d.ts +0 -7
  233. package/dist/esm/ResourceBlame/ResourceBlame.d.ts +0 -9
  234. package/dist/esm/ResourceBlame/ResourceBlame.stories.d.ts +0 -5
  235. package/dist/esm/ResourceDiff/ResourceDiff.d.ts +0 -8
  236. package/dist/esm/ResourceDiffTable/ResourceDiffTable.d.ts +0 -7
  237. package/dist/esm/ResourceDiffTable/ResourceDiffTable.stories.d.ts +0 -5
  238. package/dist/esm/ResourceForm/ResourceForm.d.ts +0 -10
  239. package/dist/esm/ResourceForm/ResourceForm.stories.d.ts +0 -13
  240. package/dist/esm/ResourceHistoryTable/ResourceHistoryTable.d.ts +0 -8
  241. package/dist/esm/ResourceHistoryTable/ResourceHistoryTable.stories.d.ts +0 -5
  242. package/dist/esm/ResourceInput/ResourceInput.d.ts +0 -11
  243. package/dist/esm/ResourceInput/ResourceInput.stories.d.ts +0 -6
  244. package/dist/esm/ResourceName/ResourceName.d.ts +0 -8
  245. package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.d.ts +0 -24
  246. package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.d.ts +0 -21
  247. package/dist/esm/ResourceTable/ResourceTable.d.ts +0 -20
  248. package/dist/esm/ResourceTable/ResourceTable.stories.d.ts +0 -11
  249. package/dist/esm/ResourceTimeline/ResourceTimeline.d.ts +0 -10
  250. package/dist/esm/Scheduler/Scheduler.d.ts +0 -7
  251. package/dist/esm/Scheduler/Scheduler.stories.d.ts +0 -5
  252. package/dist/esm/SearchControl/SearchControl.d.ts +0 -39
  253. package/dist/esm/SearchControl/SearchControl.stories.d.ts +0 -14
  254. package/dist/esm/SearchControl/SearchControlField.d.ts +0 -40
  255. package/dist/esm/SearchControl/SearchUtils.d.ts +0 -153
  256. package/dist/esm/SearchFieldEditor/SearchFieldEditor.d.ts +0 -10
  257. package/dist/esm/SearchFilterEditor/SearchFilterEditor.d.ts +0 -9
  258. package/dist/esm/SearchFilterValueDialog/SearchFilterValueDialog.d.ts +0 -14
  259. package/dist/esm/SearchFilterValueDisplay/SearchFilterValueDisplay.d.ts +0 -7
  260. package/dist/esm/SearchFilterValueInput/SearchFilterValueInput.d.ts +0 -10
  261. package/dist/esm/SearchPopupMenu/SearchPopupMenu.d.ts +0 -10
  262. package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.d.ts +0 -6
  263. package/dist/esm/StatusBadge/StatusBadge.d.ts +0 -5
  264. package/dist/esm/StatusBadge/StatusBadge.stories.d.ts +0 -5
  265. package/dist/esm/Timeline/Timeline.d.ts +0 -14
  266. package/dist/esm/Timeline/Timeline.stories.d.ts +0 -5
  267. package/dist/esm/TimingInput/TimingInput.d.ts +0 -8
  268. package/dist/esm/TimingInput/TimingInput.stories.d.ts +0 -6
  269. package/dist/esm/ValueSetAutocomplete/ValueSetAutocomplete.d.ts +0 -7
  270. package/dist/esm/auth/ChooseProfileForm.d.ts +0 -9
  271. package/dist/esm/auth/ChooseScopeForm.d.ts +0 -8
  272. package/dist/esm/auth/MfaForm.d.ts +0 -7
  273. package/dist/esm/auth/NewProjectForm.d.ts +0 -7
  274. package/dist/esm/auth/NewUserForm.d.ts +0 -10
  275. package/dist/esm/auth/RegisterForm.d.ts +0 -10
  276. package/dist/esm/auth/RegisterForm.stories.d.ts +0 -7
  277. package/dist/esm/auth/SignInForm.d.ts +0 -22
  278. package/dist/esm/auth/SignInForm.stories.d.ts +0 -8
  279. package/dist/esm/constants.d.ts +0 -1
  280. package/dist/esm/index.d.ts +0 -88
  281. package/dist/esm/stories/covid19.d.ts +0 -15
  282. package/dist/esm/stories/referenceLab.d.ts +0 -5
  283. package/dist/esm/test.setup.d.ts +0 -1
  284. package/dist/esm/useResource/useResource.d.ts +0 -8
  285. package/dist/esm/utils/blame.d.ts +0 -8
  286. package/dist/esm/utils/date.d.ts +0 -7
  287. package/dist/esm/utils/diff.d.ts +0 -16
  288. package/dist/esm/utils/dom.d.ts +0 -15
  289. package/dist/esm/utils/outcomes.d.ts +0 -3
  290. package/dist/esm/utils/questionnaire.d.ts +0 -21
  291. package/dist/esm/utils/recaptcha.d.ts +0 -12
  292. package/dist/esm/utils/script.d.ts +0 -5
  293. package/icons-unique.txt +0 -36
  294. package/icons.txt +0 -44
  295. /package/dist/{cjs → types}/AddressDisplay/AddressDisplay.d.ts +0 -0
  296. /package/dist/{cjs → types}/AddressInput/AddressInput.d.ts +0 -0
  297. /package/dist/{cjs → types}/AnnotationInput/AnnotationInput.d.ts +0 -0
  298. /package/dist/{cjs → types}/AsyncAutocomplete/AsyncAutocomplete.d.ts +0 -0
  299. /package/dist/{cjs → types}/AttachmentArrayDisplay/AttachmentArrayDisplay.d.ts +0 -0
  300. /package/dist/{cjs → types}/AttachmentArrayInput/AttachmentArrayInput.d.ts +0 -0
  301. /package/dist/{cjs → types}/AttachmentButton/AttachmentButton.d.ts +0 -0
  302. /package/dist/{cjs → types}/AttachmentDisplay/AttachmentDisplay.d.ts +0 -0
  303. /package/dist/{cjs → types}/AttachmentInput/AttachmentInput.d.ts +0 -0
  304. /package/dist/{cjs → types}/BackboneElementDisplay/BackboneElementDisplay.d.ts +0 -0
  305. /package/dist/{cjs → types}/BackboneElementInput/BackboneElementInput.d.ts +0 -0
  306. /package/dist/{cjs → types}/CalendarInput/CalendarInput.d.ts +0 -0
  307. /package/dist/{cjs → types}/CheckboxFormSection/CheckboxFormSection.d.ts +0 -0
  308. /package/dist/{cjs → types}/CodeInput/CodeInput.d.ts +0 -0
  309. /package/dist/{cjs → types}/CodeableConceptDisplay/CodeableConceptDisplay.d.ts +0 -0
  310. /package/dist/{cjs → types}/CodeableConceptInput/CodeableConceptInput.d.ts +0 -0
  311. /package/dist/{cjs → types}/CodingDisplay/CodingDisplay.d.ts +0 -0
  312. /package/dist/{cjs → types}/CodingInput/CodingInput.d.ts +0 -0
  313. /package/dist/{cjs → types}/ContactDetailDisplay/ContactDetailDisplay.d.ts +0 -0
  314. /package/dist/{cjs → types}/ContactDetailInput/ContactDetailInput.d.ts +0 -0
  315. /package/dist/{cjs → types}/ContactPointDisplay/ContactPointDisplay.d.ts +0 -0
  316. /package/dist/{cjs → types}/ContactPointInput/ContactPointInput.d.ts +0 -0
  317. /package/dist/{cjs → types}/Container/Container.d.ts +0 -0
  318. /package/dist/{cjs → types}/DateTimeInput/DateTimeInput.d.ts +0 -0
  319. /package/dist/{cjs → types}/DefaultResourceTimeline/DefaultResourceTimeline.d.ts +0 -0
  320. /package/dist/{cjs → types}/DescriptionList/DescriptionList.d.ts +0 -0
  321. /package/dist/{cjs → types}/Document/Document.d.ts +0 -0
  322. /package/dist/{cjs → types}/EncounterTimeline/EncounterTimeline.d.ts +0 -0
  323. /package/dist/{cjs → types}/ErrorBoundary/ErrorBoundary.d.ts +0 -0
  324. /package/dist/{cjs → types}/ExtensionInput/ExtensionInput.d.ts +0 -0
  325. /package/dist/{cjs → types}/FhirPathDisplay/FhirPathDisplay.d.ts +0 -0
  326. /package/dist/{cjs → types}/FhirPathTable/FhirPathTable.d.ts +0 -0
  327. /package/dist/{cjs → types}/Form/Form.d.ts +0 -0
  328. /package/dist/{cjs → types}/Form/FormUtils.d.ts +0 -0
  329. /package/dist/{cjs → types}/FormSection/FormSection.d.ts +0 -0
  330. /package/dist/{cjs → types}/GoogleButton/GoogleButton.d.ts +0 -0
  331. /package/dist/{cjs → types}/HumanNameDisplay/HumanNameDisplay.d.ts +0 -0
  332. /package/dist/{cjs → types}/HumanNameInput/HumanNameInput.d.ts +0 -0
  333. /package/dist/{cjs → types}/IdentifierDisplay/IdentifierDisplay.d.ts +0 -0
  334. /package/dist/{cjs → types}/IdentifierInput/IdentifierInput.d.ts +0 -0
  335. /package/dist/{cjs → types}/Logo/Logo.d.ts +0 -0
  336. /package/dist/{cjs → types}/MedplumLink/MedplumLink.d.ts +0 -0
  337. /package/dist/{cjs → types}/MedplumProvider/MedplumProvider.d.ts +0 -0
  338. /package/dist/{cjs → types}/MoneyDisplay/MoneyDisplay.d.ts +0 -0
  339. /package/dist/{cjs → types}/MoneyInput/MoneyInput.d.ts +0 -0
  340. /package/dist/{cjs → types}/NoteDisplay/NoteDisplay.d.ts +0 -0
  341. /package/dist/{cjs → types}/OperationOutcomeAlert/OperationOutcomeAlert.d.ts +0 -0
  342. /package/dist/{cjs → types}/Panel/Panel.d.ts +0 -0
  343. /package/dist/{cjs → types}/PatientTimeline/PatientTimeline.d.ts +0 -0
  344. /package/dist/{cjs → types}/PeriodInput/PeriodInput.d.ts +0 -0
  345. /package/dist/{cjs → types}/PlanDefinitionBuilder/PlanDefinitionBuilder.d.ts +0 -0
  346. /package/dist/{cjs → types}/QuantityDisplay/QuantityDisplay.d.ts +0 -0
  347. /package/dist/{cjs → types}/QuantityInput/QuantityInput.d.ts +0 -0
  348. /package/dist/{cjs → types}/QuestionnaireBuilder/QuestionnaireBuilder.d.ts +0 -0
  349. /package/dist/{cjs → types}/QuestionnaireForm/QuestionnaireForm.d.ts +0 -0
  350. /package/dist/{cjs → types}/RangeDisplay/RangeDisplay.d.ts +0 -0
  351. /package/dist/{cjs → types}/RangeInput/RangeInput.d.ts +0 -0
  352. /package/dist/{cjs → types}/RatioDisplay/RatioDisplay.d.ts +0 -0
  353. /package/dist/{cjs → types}/RatioInput/RatioInput.d.ts +0 -0
  354. /package/dist/{cjs → types}/ReferenceDisplay/ReferenceDisplay.d.ts +0 -0
  355. /package/dist/{cjs → types}/ReferenceInput/ReferenceInput.d.ts +0 -0
  356. /package/dist/{cjs → types}/ReferenceRangeEditor/ReferenceRangeEditor.d.ts +0 -0
  357. /package/dist/{cjs → types}/RequestGroupDisplay/RequestGroupDisplay.d.ts +0 -0
  358. /package/dist/{cjs → types}/ResourceArrayDisplay/ResourceArrayDisplay.d.ts +0 -0
  359. /package/dist/{cjs → types}/ResourceArrayInput/ResourceArrayInput.d.ts +0 -0
  360. /package/dist/{cjs → types}/ResourceAvatar/ResourceAvatar.d.ts +0 -0
  361. /package/dist/{cjs → types}/ResourceBadge/ResourceBadge.d.ts +0 -0
  362. /package/dist/{cjs → types}/ResourceBlame/ResourceBlame.d.ts +0 -0
  363. /package/dist/{cjs → types}/ResourceDiff/ResourceDiff.d.ts +0 -0
  364. /package/dist/{cjs → types}/ResourceDiffTable/ResourceDiffTable.d.ts +0 -0
  365. /package/dist/{cjs → types}/ResourceForm/ResourceForm.d.ts +0 -0
  366. /package/dist/{cjs → types}/ResourceHistoryTable/ResourceHistoryTable.d.ts +0 -0
  367. /package/dist/{cjs → types}/ResourceInput/ResourceInput.d.ts +0 -0
  368. /package/dist/{cjs → types}/ResourceName/ResourceName.d.ts +0 -0
  369. /package/dist/{cjs → types}/ResourcePropertyDisplay/ResourcePropertyDisplay.d.ts +0 -0
  370. /package/dist/{cjs → types}/ResourcePropertyInput/ResourcePropertyInput.d.ts +0 -0
  371. /package/dist/{cjs → types}/ResourceTable/ResourceTable.d.ts +0 -0
  372. /package/dist/{cjs → types}/ResourceTimeline/ResourceTimeline.d.ts +0 -0
  373. /package/dist/{cjs → types}/Scheduler/Scheduler.d.ts +0 -0
  374. /package/dist/{cjs → types}/SearchControl/SearchControl.d.ts +0 -0
  375. /package/dist/{cjs → types}/SearchControl/SearchControlField.d.ts +0 -0
  376. /package/dist/{cjs → types}/SearchControl/SearchUtils.d.ts +0 -0
  377. /package/dist/{cjs → types}/SearchFieldEditor/SearchFieldEditor.d.ts +0 -0
  378. /package/dist/{cjs → types}/SearchFilterEditor/SearchFilterEditor.d.ts +0 -0
  379. /package/dist/{cjs → types}/SearchFilterValueDialog/SearchFilterValueDialog.d.ts +0 -0
  380. /package/dist/{cjs → types}/SearchFilterValueDisplay/SearchFilterValueDisplay.d.ts +0 -0
  381. /package/dist/{cjs → types}/SearchFilterValueInput/SearchFilterValueInput.d.ts +0 -0
  382. /package/dist/{cjs → types}/SearchPopupMenu/SearchPopupMenu.d.ts +0 -0
  383. /package/dist/{cjs → types}/ServiceRequestTimeline/ServiceRequestTimeline.d.ts +0 -0
  384. /package/dist/{cjs → types}/StatusBadge/StatusBadge.d.ts +0 -0
  385. /package/dist/{cjs → types}/Timeline/Timeline.d.ts +0 -0
  386. /package/dist/{cjs → types}/TimingInput/TimingInput.d.ts +0 -0
  387. /package/dist/{cjs → types}/ValueSetAutocomplete/ValueSetAutocomplete.d.ts +0 -0
  388. /package/dist/{cjs → types}/auth/ChooseProfileForm.d.ts +0 -0
  389. /package/dist/{cjs → types}/auth/ChooseScopeForm.d.ts +0 -0
  390. /package/dist/{cjs → types}/auth/MfaForm.d.ts +0 -0
  391. /package/dist/{cjs → types}/auth/NewProjectForm.d.ts +0 -0
  392. /package/dist/{cjs → types}/auth/NewUserForm.d.ts +0 -0
  393. /package/dist/{cjs → types}/auth/RegisterForm.d.ts +0 -0
  394. /package/dist/{cjs → types}/constants.d.ts +0 -0
  395. /package/dist/{cjs → types}/index.d.ts +0 -0
  396. /package/dist/{cjs → types}/stories/covid19.d.ts +0 -0
  397. /package/dist/{cjs → types}/stories/referenceLab.d.ts +0 -0
  398. /package/dist/{cjs → types}/test.setup.d.ts +0 -0
  399. /package/dist/{cjs → types}/useResource/useResource.d.ts +0 -0
  400. /package/dist/{cjs → types}/utils/blame.d.ts +0 -0
  401. /package/dist/{cjs → types}/utils/date.d.ts +0 -0
  402. /package/dist/{cjs → types}/utils/diff.d.ts +0 -0
  403. /package/dist/{cjs → types}/utils/dom.d.ts +0 -0
  404. /package/dist/{cjs → types}/utils/outcomes.d.ts +0 -0
  405. /package/dist/{cjs → types}/utils/questionnaire.d.ts +0 -0
  406. /package/dist/{cjs → types}/utils/recaptcha.d.ts +0 -0
  407. /package/dist/{cjs → types}/utils/script.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationForm.mjs","sources":["../../../src/auth/AuthenticationForm.tsx"],"sourcesContent":["import { Anchor, Button, Center, Checkbox, Divider, Group, PasswordInput, Stack, TextInput } from '@mantine/core';\nimport {\n BaseLoginRequest,\n GoogleCredentialResponse,\n GoogleLoginRequest,\n LoginAuthenticationResponse,\n} from '@medplum/core';\nimport { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useCallback, useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { getGoogleClientId, GoogleButton } from '../GoogleButton/GoogleButton';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert';\nimport { getErrorsForInput, getIssuesForExpression } from '../utils/outcomes';\n\nexport interface AuthenticationFormProps extends BaseLoginRequest {\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function AuthenticationForm(props: AuthenticationFormProps): JSX.Element {\n const [email, setEmail] = useState<string>();\n\n if (!email) {\n return <EmailForm setEmail={setEmail} {...props} />;\n } else {\n return <PasswordForm email={email} {...props} />;\n }\n}\n\nexport interface EmailFormProps extends BaseLoginRequest {\n readonly generatePkce?: boolean;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly setEmail: (email: string) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function EmailForm(props: EmailFormProps): JSX.Element {\n const { setEmail, onRegister, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const googleClientId = getGoogleClientId(props.googleClientId);\n\n const isExternalAuth = useCallback(\n async (authMethod: any): Promise<boolean> => {\n if (!authMethod.authorizeUrl) {\n return false;\n }\n\n const state = JSON.stringify({\n ...(await medplum.ensureCodeChallenge(baseLoginRequest)),\n domain: authMethod.domain,\n });\n const url = new URL(authMethod.authorizeUrl);\n url.searchParams.set('state', state);\n window.location.assign(url.toString());\n return true;\n },\n [medplum, baseLoginRequest]\n );\n\n const handleSubmit = useCallback(\n async (formData: Record<string, string>) => {\n const authMethod = await medplum.post('auth/method', { email: formData.email });\n if (!(await isExternalAuth(authMethod))) {\n setEmail(formData.email);\n }\n },\n [medplum, isExternalAuth, setEmail]\n );\n\n const handleGoogleCredential = useCallback(\n async (response: GoogleCredentialResponse) => {\n const authResponse = await medplum.startGoogleLogin({\n ...baseLoginRequest,\n googleCredential: response.credential,\n } as GoogleLoginRequest);\n if (!(await isExternalAuth(authResponse))) {\n handleAuthResponse(authResponse);\n }\n },\n [medplum, baseLoginRequest, isExternalAuth, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n {googleClientId && (\n <>\n <Group position=\"center\" p=\"xl\" style={{ height: 70 }}>\n <GoogleButton googleClientId={googleClientId} handleGoogleCredential={handleGoogleCredential} />\n </Group>\n <Divider label=\"or\" labelPosition=\"center\" my=\"lg\" />\n </>\n )}\n <TextInput\n name=\"email\"\n type=\"email\"\n label=\"Email\"\n placeholder=\"name@domain.com\"\n required={true}\n autoFocus={true}\n />\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onRegister && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onRegister} size=\"xs\">\n Register\n </Anchor>\n )}\n <Button type=\"submit\">Next</Button>\n </Group>\n </Form>\n );\n}\n\nexport interface PasswordFormProps extends BaseLoginRequest {\n readonly email: string;\n readonly onForgotPassword?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function PasswordForm(props: PasswordFormProps): JSX.Element {\n const { onForgotPassword, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [outcome, setOutcome] = useState<OperationOutcome>();\n const issues = getIssuesForExpression(outcome, undefined);\n\n const handleSubmit = useCallback(\n (formData: Record<string, string>) => {\n medplum\n .startLogin({\n ...baseLoginRequest,\n password: formData.password,\n remember: formData.remember === 'on',\n })\n .then(handleAuthResponse)\n .catch(setOutcome);\n },\n [medplum, baseLoginRequest, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n <OperationOutcomeAlert issues={issues} />\n <Stack spacing=\"xl\">\n <PasswordInput\n name=\"password\"\n label=\"Password\"\n autoComplete=\"off\"\n required={true}\n error={getErrorsForInput(outcome, 'password')}\n />\n </Stack>\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onForgotPassword && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onForgotPassword} size=\"xs\">\n Forgot password\n </Anchor>\n )}\n <Checkbox id=\"remember\" name=\"remember\" label=\"Remember me\" size=\"xs\" sx={{ lineHeight: 1 }} />\n <Button type=\"submit\">Sign in</Button>\n </Group>\n </Form>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthenticationForm.mjs","sources":["../../../src/auth/AuthenticationForm.tsx"],"sourcesContent":["import { Anchor, Button, Center, Checkbox, Divider, Group, PasswordInput, Stack, TextInput } from '@mantine/core';\nimport {\n BaseLoginRequest,\n GoogleCredentialResponse,\n GoogleLoginRequest,\n LoginAuthenticationResponse,\n normalizeOperationOutcome,\n} from '@medplum/core';\nimport { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useCallback, useState } from 'react';\nimport { Form } from '../Form/Form';\nimport { getGoogleClientId, GoogleButton } from '../GoogleButton/GoogleButton';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert';\nimport { getErrorsForInput, getIssuesForExpression } from '../utils/outcomes';\n\nexport interface AuthenticationFormProps extends BaseLoginRequest {\n readonly disableGoogleAuth?: boolean;\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function AuthenticationForm(props: AuthenticationFormProps): JSX.Element {\n const [email, setEmail] = useState<string>();\n\n if (!email) {\n return <EmailForm setEmail={setEmail} {...props} />;\n } else {\n return <PasswordForm email={email} {...props} />;\n }\n}\n\nexport interface EmailFormProps extends BaseLoginRequest {\n readonly disableGoogleAuth?: boolean;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly setEmail: (email: string) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function EmailForm(props: EmailFormProps): JSX.Element {\n const { setEmail, onRegister, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const googleClientId = !props.disableGoogleAuth && getGoogleClientId(props.googleClientId);\n\n const isExternalAuth = useCallback(\n async (authMethod: any): Promise<boolean> => {\n if (!authMethod.authorizeUrl) {\n return false;\n }\n\n const state = JSON.stringify({\n ...(await medplum.ensureCodeChallenge(baseLoginRequest)),\n domain: authMethod.domain,\n });\n const url = new URL(authMethod.authorizeUrl);\n url.searchParams.set('state', state);\n window.location.assign(url.toString());\n return true;\n },\n [medplum, baseLoginRequest]\n );\n\n const handleSubmit = useCallback(\n async (formData: Record<string, string>) => {\n const authMethod = await medplum.post('auth/method', { email: formData.email });\n if (!(await isExternalAuth(authMethod))) {\n setEmail(formData.email);\n }\n },\n [medplum, isExternalAuth, setEmail]\n );\n\n const handleGoogleCredential = useCallback(\n async (response: GoogleCredentialResponse) => {\n const authResponse = await medplum.startGoogleLogin({\n ...baseLoginRequest,\n googleCredential: response.credential,\n } as GoogleLoginRequest);\n if (!(await isExternalAuth(authResponse))) {\n handleAuthResponse(authResponse);\n }\n },\n [medplum, baseLoginRequest, isExternalAuth, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n {googleClientId && (\n <>\n <Group position=\"center\" p=\"xl\" style={{ height: 70 }}>\n <GoogleButton googleClientId={googleClientId} handleGoogleCredential={handleGoogleCredential} />\n </Group>\n <Divider label=\"or\" labelPosition=\"center\" my=\"lg\" />\n </>\n )}\n <TextInput\n name=\"email\"\n type=\"email\"\n label=\"Email\"\n placeholder=\"name@domain.com\"\n required={true}\n autoFocus={true}\n />\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onRegister && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onRegister} size=\"xs\">\n Register\n </Anchor>\n )}\n <Button type=\"submit\">Next</Button>\n </Group>\n </Form>\n );\n}\n\nexport interface PasswordFormProps extends BaseLoginRequest {\n readonly email: string;\n readonly onForgotPassword?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function PasswordForm(props: PasswordFormProps): JSX.Element {\n const { onForgotPassword, handleAuthResponse, children, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [outcome, setOutcome] = useState<OperationOutcome>();\n const issues = getIssuesForExpression(outcome, undefined);\n\n const handleSubmit = useCallback(\n (formData: Record<string, string>) => {\n medplum\n .startLogin({\n ...baseLoginRequest,\n password: formData.password,\n remember: formData.remember === 'on',\n })\n .then(handleAuthResponse)\n .catch((err) => setOutcome(normalizeOperationOutcome(err)));\n },\n [medplum, baseLoginRequest, handleAuthResponse]\n );\n\n return (\n <Form style={{ maxWidth: 400 }} onSubmit={handleSubmit}>\n <Center sx={{ flexDirection: 'column' }}>{children}</Center>\n <OperationOutcomeAlert issues={issues} />\n <Stack spacing=\"xl\">\n <PasswordInput\n name=\"password\"\n label=\"Password\"\n autoComplete=\"off\"\n required={true}\n error={getErrorsForInput(outcome, 'password')}\n />\n </Stack>\n <Group position=\"apart\" mt=\"xl\" spacing={0} noWrap>\n {onForgotPassword && (\n <Anchor component=\"button\" type=\"button\" color=\"dimmed\" onClick={onForgotPassword} size=\"xs\">\n Forgot password\n </Anchor>\n )}\n <Checkbox id=\"remember\" name=\"remember\" label=\"Remember me\" size=\"xs\" sx={{ lineHeight: 1 }} />\n <Button type=\"submit\">Sign in</Button>\n </Group>\n </Form>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
1
  import { Stack, Center, Title, UnstyledButton, Group, Avatar, Text } from '@mantine/core';
2
- import React from 'react';
2
+ import { normalizeOperationOutcome } from '@medplum/core';
3
+ import React, { useState } from 'react';
3
4
  import { Logo } from '../Logo/Logo.mjs';
4
5
  import { useMedplum } from '../MedplumProvider/MedplumProvider.mjs';
6
+ import { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert.mjs';
5
7
 
6
8
  function ChooseProfileForm(props) {
7
9
  const medplum = useMedplum();
10
+ const [outcome, setOutcome] = useState();
8
11
  return (React.createElement(Stack, null,
9
12
  React.createElement(Center, { sx: { flexDirection: 'column' } },
10
13
  React.createElement(Logo, { size: 32 }),
11
- React.createElement(Title, null, "Choose profile")),
14
+ React.createElement(Title, { order: 3 }, "Choose profile")),
15
+ React.createElement(OperationOutcomeAlert, { outcome: outcome }),
12
16
  props.memberships.map((membership) => (React.createElement(UnstyledButton, { key: membership.id, onClick: () => {
13
17
  medplum
14
18
  .post('auth/profile', {
@@ -16,7 +20,7 @@ function ChooseProfileForm(props) {
16
20
  profile: membership.id,
17
21
  })
18
22
  .then(props.handleAuthResponse)
19
- .catch(console.log);
23
+ .catch((err) => setOutcome(normalizeOperationOutcome(err)));
20
24
  } },
21
25
  React.createElement(Group, null,
22
26
  React.createElement(Avatar, { radius: "xl" }),
@@ -1 +1 @@
1
- {"version":3,"file":"ChooseProfileForm.mjs","sources":["../../../src/auth/ChooseProfileForm.tsx"],"sourcesContent":["import { Avatar, Center, Group, Stack, Text, Title, UnstyledButton } from '@mantine/core';\nimport { LoginAuthenticationResponse } from '@medplum/core';\nimport { ProjectMembership } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { Logo } from '../Logo/Logo';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\n\nexport interface ChooseProfileFormProps {\n login: string;\n memberships: ProjectMembership[];\n handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n}\n\nexport function ChooseProfileForm(props: ChooseProfileFormProps): JSX.Element {\n const medplum = useMedplum();\n return (\n <Stack>\n <Center sx={{ flexDirection: 'column' }}>\n <Logo size={32} />\n <Title>Choose profile</Title>\n </Center>\n {props.memberships.map((membership: ProjectMembership) => (\n <UnstyledButton\n key={membership.id}\n onClick={() => {\n medplum\n .post('auth/profile', {\n login: props.login,\n profile: membership.id,\n })\n .then(props.handleAuthResponse)\n .catch(console.log);\n }}\n >\n <Group>\n <Avatar radius=\"xl\" />\n <div style={{ flex: 1 }}>\n <Text size=\"sm\" weight={500}>\n {membership.profile?.display}\n </Text>\n <Text color=\"dimmed\" size=\"xs\">\n {membership.project?.display}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n ))}\n </Stack>\n );\n}\n"],"names":[],"mappings":";;;;;AAaM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;AAC7D,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,QACE,oBAAC,KAAK,EAAA,IAAA;QACJ,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA;AACrC,YAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA;YAClB,KAAC,CAAA,aAAA,CAAA,KAAK,yBAAuB,CACtB;QACR,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAA6B,MACnD,oBAAC,cAAc,EAAA,EACb,GAAG,EAAE,UAAU,CAAC,EAAE,EAClB,OAAO,EAAE,MAAK;gBACZ,OAAO;qBACJ,IAAI,CAAC,cAAc,EAAE;oBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,UAAU,CAAC,EAAE;iBACvB,CAAC;AACD,qBAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC9B,qBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aACvB,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;AACJ,gBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,MAAM,EAAC,IAAI,EAAG,CAAA;AACtB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAA;AACrB,oBAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAE,GAAG,IACxB,UAAU,CAAC,OAAO,EAAE,OAAO,CACvB;oBACP,KAAC,CAAA,aAAA,CAAA,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAC3B,EAAA,UAAU,CAAC,OAAO,EAAE,OAAO,CACvB,CACH,CACA,CACO,CAClB,CAAC,CACI,EACR;AACJ;;;;"}
1
+ {"version":3,"file":"ChooseProfileForm.mjs","sources":["../../../src/auth/ChooseProfileForm.tsx"],"sourcesContent":["import { Avatar, Center, Group, Stack, Text, Title, UnstyledButton } from '@mantine/core';\nimport { LoginAuthenticationResponse, normalizeOperationOutcome } from '@medplum/core';\nimport { OperationOutcome, ProjectMembership } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Logo } from '../Logo/Logo';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { OperationOutcomeAlert } from '../OperationOutcomeAlert/OperationOutcomeAlert';\n\nexport interface ChooseProfileFormProps {\n login: string;\n memberships: ProjectMembership[];\n handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n}\n\nexport function ChooseProfileForm(props: ChooseProfileFormProps): JSX.Element {\n const medplum = useMedplum();\n const [outcome, setOutcome] = useState<OperationOutcome>();\n return (\n <Stack>\n <Center sx={{ flexDirection: 'column' }}>\n <Logo size={32} />\n <Title order={3}>Choose profile</Title>\n </Center>\n <OperationOutcomeAlert outcome={outcome} />\n {props.memberships.map((membership: ProjectMembership) => (\n <UnstyledButton\n key={membership.id}\n onClick={() => {\n medplum\n .post('auth/profile', {\n login: props.login,\n profile: membership.id,\n })\n .then(props.handleAuthResponse)\n .catch((err) => setOutcome(normalizeOperationOutcome(err)));\n }}\n >\n <Group>\n <Avatar radius=\"xl\" />\n <div style={{ flex: 1 }}>\n <Text size=\"sm\" weight={500}>\n {membership.profile?.display}\n </Text>\n <Text color=\"dimmed\" size=\"xs\">\n {membership.project?.display}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n ))}\n </Stack>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAcM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;AAC7D,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAoB,CAAC;IAC3D,QACE,oBAAC,KAAK,EAAA,IAAA;QACJ,KAAC,CAAA,aAAA,CAAA,MAAM,IAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA;AACrC,YAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA;AAClB,YAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAC,EAAA,KAAK,EAAE,CAAC,qBAAwB,CAChC;AACT,QAAA,KAAA,CAAA,aAAA,CAAC,qBAAqB,EAAA,EAAC,OAAO,EAAE,OAAO,EAAI,CAAA;QAC1C,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAA6B,MACnD,oBAAC,cAAc,EAAA,EACb,GAAG,EAAE,UAAU,CAAC,EAAE,EAClB,OAAO,EAAE,MAAK;gBACZ,OAAO;qBACJ,IAAI,CAAC,cAAc,EAAE;oBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,OAAO,EAAE,UAAU,CAAC,EAAE;iBACvB,CAAC;AACD,qBAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC9B,qBAAA,KAAK,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC/D,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,IAAA;AACJ,gBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,MAAM,EAAC,IAAI,EAAG,CAAA;AACtB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAA;AACrB,oBAAA,KAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAE,GAAG,IACxB,UAAU,CAAC,OAAO,EAAE,OAAO,CACvB;oBACP,KAAC,CAAA,aAAA,CAAA,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,IAAI,EAC3B,EAAA,UAAU,CAAC,OAAO,EAAE,OAAO,CACvB,CACH,CACA,CACO,CAClB,CAAC,CACI,EACR;AACJ;;;;"}
@@ -68,7 +68,7 @@ function SignInForm(props) {
68
68
  }, [medplum, props, handleAuthResponse]);
69
69
  return (React.createElement(Document, { width: 450 }, (() => {
70
70
  if (!login) {
71
- return (React.createElement(AuthenticationForm, { onForgotPassword: onForgotPassword, onRegister: onRegister, handleAuthResponse: handleAuthResponse, ...baseLoginRequest }, props.children));
71
+ return (React.createElement(AuthenticationForm, { onForgotPassword: onForgotPassword, onRegister: onRegister, handleAuthResponse: handleAuthResponse, disableGoogleAuth: props.disableGoogleAuth, ...baseLoginRequest }, props.children));
72
72
  }
73
73
  else if (mfaRequired) {
74
74
  return React.createElement(MfaForm, { login: login, handleAuthResponse: handleAuthResponse });
@@ -1 +1 @@
1
- {"version":3,"file":"SignInForm.mjs","sources":["../../../src/auth/SignInForm.tsx"],"sourcesContent":["import { BaseLoginRequest, LoginAuthenticationResponse } from '@medplum/core';\nimport { ProjectMembership } from '@medplum/fhirtypes';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Document } from '../Document/Document';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { AuthenticationForm } from './AuthenticationForm';\nimport { ChooseProfileForm } from './ChooseProfileForm';\nimport { ChooseScopeForm } from './ChooseScopeForm';\nimport { MfaForm } from './MfaForm';\nimport { NewProjectForm } from './NewProjectForm';\n\nexport interface SignInFormProps extends BaseLoginRequest {\n readonly login?: string;\n readonly chooseScopes?: boolean;\n readonly onSuccess?: () => void;\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly onCode?: (code: string) => void;\n readonly children?: React.ReactNode;\n}\n\n/**\n * The SignInForm component allows users to sign in to Medplum.\n *\n * \"Signing in\" is a multi-step process:\n * 1) Authentication - identify the user\n * 2) MFA - If MFA is enabled, prompt for MFA code\n * 3) Choose profile - If the user has multiple profiles, prompt to choose one\n * 4) Choose scope - If the user has multiple scopes, prompt to choose one\n * 5) Success - Return to the caller with either a code or a redirect\n */\nexport function SignInForm(props: SignInFormProps): JSX.Element {\n const { chooseScopes, onSuccess, onForgotPassword, onRegister, onCode, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [login, setLogin] = useState<string | undefined>(undefined);\n const [mfaRequired, setAuthenticatorRequired] = useState<boolean>(false);\n const [memberships, setMemberships] = useState<ProjectMembership[] | undefined>(undefined);\n\n const handleCode = useCallback(\n (code: string): void => {\n if (onCode) {\n onCode(code);\n } else {\n medplum\n .processCode(code)\n .then(() => {\n if (onSuccess) {\n onSuccess();\n }\n })\n .catch(console.log);\n }\n },\n [medplum, onCode, onSuccess]\n );\n\n const handleAuthResponse = useCallback(\n (response: LoginAuthenticationResponse): void => {\n setAuthenticatorRequired(!!response.mfaRequired);\n\n if (response.login) {\n setLogin(response.login);\n }\n\n if (response.memberships) {\n setMemberships(response.memberships);\n }\n\n if (response.code) {\n if (chooseScopes) {\n setMemberships(undefined);\n } else {\n handleCode(response.code as string);\n }\n }\n },\n [chooseScopes, handleCode]\n );\n\n const handleScopeResponse = useCallback(\n (response: LoginAuthenticationResponse): void => {\n handleCode(response.code as string);\n },\n [handleCode]\n );\n\n useEffect(() => {\n if (props.login) {\n medplum\n .get('auth/login/' + props.login)\n .then(handleAuthResponse)\n .catch(console.error);\n }\n }, [medplum, props, handleAuthResponse]);\n\n return (\n <Document width={450}>\n {(() => {\n if (!login) {\n return (\n <AuthenticationForm\n onForgotPassword={onForgotPassword}\n onRegister={onRegister}\n handleAuthResponse={handleAuthResponse}\n {...baseLoginRequest}\n >\n {props.children}\n </AuthenticationForm>\n );\n } else if (mfaRequired) {\n return <MfaForm login={login} handleAuthResponse={handleAuthResponse} />;\n } else if (memberships) {\n return <ChooseProfileForm login={login} memberships={memberships} handleAuthResponse={handleAuthResponse} />;\n } else if (props.projectId === 'new') {\n return <NewProjectForm login={login} handleAuthResponse={handleAuthResponse} />;\n } else if (props.chooseScopes) {\n return <ChooseScopeForm login={login} scope={props.scope} handleAuthResponse={handleScopeResponse} />;\n } else {\n return <div>Success</div>;\n }\n })()}\n </Document>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAqBA;;;;;;;;;AASG;AACG,SAAU,UAAU,CAAC,KAAsB,EAAA;AAC/C,IAAA,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAC;AACrG,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAkC,SAAS,CAAC,CAAC;AAE3F,IAAA,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,IAAY,KAAU;AACrB,QAAA,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,IAAI,CAAC,CAAC;AACd,SAAA;AAAM,aAAA;YACL,OAAO;iBACJ,WAAW,CAAC,IAAI,CAAC;iBACjB,IAAI,CAAC,MAAK;AACT,gBAAA,IAAI,SAAS,EAAE;AACb,oBAAA,SAAS,EAAE,CAAC;AACb,iBAAA;AACH,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvB,SAAA;KACF,EACD,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAC7B,CAAC;AAEF,IAAA,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,QAAqC,KAAU;AAC9C,QAAA,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;QAED,IAAI,QAAQ,CAAC,WAAW,EAAE;AACxB,YAAA,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtC,SAAA;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,YAAA,IAAI,YAAY,EAAE;gBAChB,cAAc,CAAC,SAAS,CAAC,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACL,gBAAA,UAAU,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AACH,KAAC,EACD,CAAC,YAAY,EAAE,UAAU,CAAC,CAC3B,CAAC;AAEF,IAAA,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,QAAqC,KAAU;AAC9C,QAAA,UAAU,CAAC,QAAQ,CAAC,IAAc,CAAC,CAAC;AACtC,KAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,SAAS,CAAC,MAAK;QACb,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,OAAO;AACJ,iBAAA,GAAG,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;iBAChC,IAAI,CAAC,kBAAkB,CAAC;AACxB,iBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,SAAA;KACF,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEzC,QACE,KAAC,CAAA,aAAA,CAAA,QAAQ,EAAC,EAAA,KAAK,EAAE,GAAG,EAAA,EACjB,CAAC,MAAK;QACL,IAAI,CAAC,KAAK,EAAE;YACV,QACE,oBAAC,kBAAkB,EAAA,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EAAA,GAClC,gBAAgB,EAAA,EAEnB,KAAK,CAAC,QAAQ,CACI,EACrB;AACH,SAAA;AAAM,aAAA,IAAI,WAAW,EAAE;YACtB,OAAO,KAAA,CAAA,aAAA,CAAC,OAAO,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAA,CAAI,CAAC;AAC1E,SAAA;AAAM,aAAA,IAAI,WAAW,EAAE;AACtB,YAAA,OAAO,KAAC,CAAA,aAAA,CAAA,iBAAiB,EAAC,EAAA,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,GAAI,CAAC;AAC9G,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE;YACpC,OAAO,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAA,CAAI,CAAC;AACjF,SAAA;aAAM,IAAI,KAAK,CAAC,YAAY,EAAE;AAC7B,YAAA,OAAO,oBAAC,eAAe,EAAA,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,GAAI,CAAC;AACvG,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,2CAAkB,CAAC;AAC3B,SAAA;AACH,KAAC,GAAG,CACK,EACX;AACJ;;;;"}
1
+ {"version":3,"file":"SignInForm.mjs","sources":["../../../src/auth/SignInForm.tsx"],"sourcesContent":["import { BaseLoginRequest, LoginAuthenticationResponse } from '@medplum/core';\nimport { ProjectMembership } from '@medplum/fhirtypes';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { Document } from '../Document/Document';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { AuthenticationForm } from './AuthenticationForm';\nimport { ChooseProfileForm } from './ChooseProfileForm';\nimport { ChooseScopeForm } from './ChooseScopeForm';\nimport { MfaForm } from './MfaForm';\nimport { NewProjectForm } from './NewProjectForm';\n\nexport interface SignInFormProps extends BaseLoginRequest {\n readonly login?: string;\n readonly chooseScopes?: boolean;\n readonly disableGoogleAuth?: boolean;\n readonly onSuccess?: () => void;\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly onCode?: (code: string) => void;\n readonly children?: React.ReactNode;\n}\n\n/**\n * The SignInForm component allows users to sign in to Medplum.\n *\n * \"Signing in\" is a multi-step process:\n * 1) Authentication - identify the user\n * 2) MFA - If MFA is enabled, prompt for MFA code\n * 3) Choose profile - If the user has multiple profiles, prompt to choose one\n * 4) Choose scope - If the user has multiple scopes, prompt to choose one\n * 5) Success - Return to the caller with either a code or a redirect\n */\nexport function SignInForm(props: SignInFormProps): JSX.Element {\n const { chooseScopes, onSuccess, onForgotPassword, onRegister, onCode, ...baseLoginRequest } = props;\n const medplum = useMedplum();\n const [login, setLogin] = useState<string | undefined>(undefined);\n const [mfaRequired, setAuthenticatorRequired] = useState<boolean>(false);\n const [memberships, setMemberships] = useState<ProjectMembership[] | undefined>(undefined);\n\n const handleCode = useCallback(\n (code: string): void => {\n if (onCode) {\n onCode(code);\n } else {\n medplum\n .processCode(code)\n .then(() => {\n if (onSuccess) {\n onSuccess();\n }\n })\n .catch(console.log);\n }\n },\n [medplum, onCode, onSuccess]\n );\n\n const handleAuthResponse = useCallback(\n (response: LoginAuthenticationResponse): void => {\n setAuthenticatorRequired(!!response.mfaRequired);\n\n if (response.login) {\n setLogin(response.login);\n }\n\n if (response.memberships) {\n setMemberships(response.memberships);\n }\n\n if (response.code) {\n if (chooseScopes) {\n setMemberships(undefined);\n } else {\n handleCode(response.code as string);\n }\n }\n },\n [chooseScopes, handleCode]\n );\n\n const handleScopeResponse = useCallback(\n (response: LoginAuthenticationResponse): void => {\n handleCode(response.code as string);\n },\n [handleCode]\n );\n\n useEffect(() => {\n if (props.login) {\n medplum\n .get('auth/login/' + props.login)\n .then(handleAuthResponse)\n .catch(console.error);\n }\n }, [medplum, props, handleAuthResponse]);\n\n return (\n <Document width={450}>\n {(() => {\n if (!login) {\n return (\n <AuthenticationForm\n onForgotPassword={onForgotPassword}\n onRegister={onRegister}\n handleAuthResponse={handleAuthResponse}\n disableGoogleAuth={props.disableGoogleAuth}\n {...baseLoginRequest}\n >\n {props.children}\n </AuthenticationForm>\n );\n } else if (mfaRequired) {\n return <MfaForm login={login} handleAuthResponse={handleAuthResponse} />;\n } else if (memberships) {\n return <ChooseProfileForm login={login} memberships={memberships} handleAuthResponse={handleAuthResponse} />;\n } else if (props.projectId === 'new') {\n return <NewProjectForm login={login} handleAuthResponse={handleAuthResponse} />;\n } else if (props.chooseScopes) {\n return <ChooseScopeForm login={login} scope={props.scope} handleAuthResponse={handleScopeResponse} />;\n } else {\n return <div>Success</div>;\n }\n })()}\n </Document>\n );\n}\n"],"names":[],"mappings":"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"}