@medplum/react 2.0.24 → 2.0.25

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 (331) hide show
  1. package/dist/cjs/index.cjs +11 -7714
  2. package/dist/cjs/index.cjs.map +7 -1
  3. package/dist/esm/index.mjs +67 -92
  4. package/dist/esm/index.mjs.map +7 -1
  5. package/package.json +5 -8
  6. package/dist/cjs/index.min.cjs +0 -1
  7. package/dist/esm/AddressDisplay/AddressDisplay.mjs +0 -13
  8. package/dist/esm/AddressDisplay/AddressDisplay.mjs.map +0 -1
  9. package/dist/esm/AddressInput/AddressInput.mjs +0 -57
  10. package/dist/esm/AddressInput/AddressInput.mjs.map +0 -1
  11. package/dist/esm/AnnotationInput/AnnotationInput.mjs +0 -28
  12. package/dist/esm/AnnotationInput/AnnotationInput.mjs.map +0 -1
  13. package/dist/esm/AppShell/AppShell.mjs +0 -37
  14. package/dist/esm/AppShell/AppShell.mjs.map +0 -1
  15. package/dist/esm/AppShell/Header.mjs +0 -88
  16. package/dist/esm/AppShell/Header.mjs.map +0 -1
  17. package/dist/esm/AppShell/HeaderSearchInput.mjs +0 -230
  18. package/dist/esm/AppShell/HeaderSearchInput.mjs.map +0 -1
  19. package/dist/esm/AppShell/Navbar.mjs +0 -169
  20. package/dist/esm/AppShell/Navbar.mjs.map +0 -1
  21. package/dist/esm/AsyncAutocomplete/AsyncAutocomplete.mjs +0 -121
  22. package/dist/esm/AsyncAutocomplete/AsyncAutocomplete.mjs.map +0 -1
  23. package/dist/esm/AttachmentArrayDisplay/AttachmentArrayDisplay.mjs +0 -10
  24. package/dist/esm/AttachmentArrayDisplay/AttachmentArrayDisplay.mjs.map +0 -1
  25. package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.mjs +0 -45
  26. package/dist/esm/AttachmentArrayInput/AttachmentArrayInput.mjs.map +0 -1
  27. package/dist/esm/AttachmentButton/AttachmentButton.mjs +0 -55
  28. package/dist/esm/AttachmentButton/AttachmentButton.mjs.map +0 -1
  29. package/dist/esm/AttachmentDisplay/AttachmentDisplay.mjs +0 -21
  30. package/dist/esm/AttachmentDisplay/AttachmentDisplay.mjs.map +0 -1
  31. package/dist/esm/AttachmentInput/AttachmentInput.mjs +0 -27
  32. package/dist/esm/AttachmentInput/AttachmentInput.mjs.map +0 -1
  33. package/dist/esm/BackboneElementDisplay/BackboneElementDisplay.mjs +0 -49
  34. package/dist/esm/BackboneElementDisplay/BackboneElementDisplay.mjs.map +0 -1
  35. package/dist/esm/BackboneElementInput/BackboneElementInput.mjs +0 -52
  36. package/dist/esm/BackboneElementInput/BackboneElementInput.mjs.map +0 -1
  37. package/dist/esm/BookmarkDialog/BookmarkDialog.mjs +0 -47
  38. package/dist/esm/BookmarkDialog/BookmarkDialog.mjs.map +0 -1
  39. package/dist/esm/CalendarInput/CalendarInput.mjs +0 -133
  40. package/dist/esm/CalendarInput/CalendarInput.mjs.map +0 -1
  41. package/dist/esm/CheckboxFormSection/CheckboxFormSection.mjs +0 -12
  42. package/dist/esm/CheckboxFormSection/CheckboxFormSection.mjs.map +0 -1
  43. package/dist/esm/CodeInput/CodeInput.mjs +0 -24
  44. package/dist/esm/CodeInput/CodeInput.mjs.map +0 -1
  45. package/dist/esm/CodeableConceptDisplay/CodeableConceptDisplay.mjs +0 -9
  46. package/dist/esm/CodeableConceptDisplay/CodeableConceptDisplay.mjs.map +0 -1
  47. package/dist/esm/CodeableConceptInput/CodeableConceptInput.mjs +0 -36
  48. package/dist/esm/CodeableConceptInput/CodeableConceptInput.mjs.map +0 -1
  49. package/dist/esm/CodingDisplay/CodingDisplay.mjs +0 -9
  50. package/dist/esm/CodingDisplay/CodingDisplay.mjs.map +0 -1
  51. package/dist/esm/CodingInput/CodingInput.mjs +0 -32
  52. package/dist/esm/CodingInput/CodingInput.mjs.map +0 -1
  53. package/dist/esm/ContactDetailDisplay/ContactDetailDisplay.mjs +0 -16
  54. package/dist/esm/ContactDetailDisplay/ContactDetailDisplay.mjs.map +0 -1
  55. package/dist/esm/ContactDetailInput/ContactDetailInput.mjs +0 -35
  56. package/dist/esm/ContactDetailInput/ContactDetailInput.mjs.map +0 -1
  57. package/dist/esm/ContactPointDisplay/ContactPointDisplay.mjs +0 -29
  58. package/dist/esm/ContactPointDisplay/ContactPointDisplay.mjs.map +0 -1
  59. package/dist/esm/ContactPointInput/ContactPointInput.mjs +0 -45
  60. package/dist/esm/ContactPointInput/ContactPointInput.mjs.map +0 -1
  61. package/dist/esm/Container/Container.mjs +0 -19
  62. package/dist/esm/Container/Container.mjs.map +0 -1
  63. package/dist/esm/DateTimeInput/DateTimeInput.mjs +0 -71
  64. package/dist/esm/DateTimeInput/DateTimeInput.mjs.map +0 -1
  65. package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs +0 -16
  66. package/dist/esm/DefaultResourceTimeline/DefaultResourceTimeline.mjs.map +0 -1
  67. package/dist/esm/DescriptionList/DescriptionList.mjs +0 -35
  68. package/dist/esm/DescriptionList/DescriptionList.mjs.map +0 -1
  69. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs +0 -172
  70. package/dist/esm/DiagnosticReportDisplay/DiagnosticReportDisplay.mjs.map +0 -1
  71. package/dist/esm/Document/Document.mjs +0 -12
  72. package/dist/esm/Document/Document.mjs.map +0 -1
  73. package/dist/esm/EncounterTimeline/EncounterTimeline.mjs +0 -32
  74. package/dist/esm/EncounterTimeline/EncounterTimeline.mjs.map +0 -1
  75. package/dist/esm/ErrorBoundary/ErrorBoundary.mjs +0 -30
  76. package/dist/esm/ErrorBoundary/ErrorBoundary.mjs.map +0 -1
  77. package/dist/esm/ExtensionInput/ExtensionInput.mjs +0 -14
  78. package/dist/esm/ExtensionInput/ExtensionInput.mjs.map +0 -1
  79. package/dist/esm/FhirPathDisplay/FhirPathDisplay.mjs +0 -23
  80. package/dist/esm/FhirPathDisplay/FhirPathDisplay.mjs.map +0 -1
  81. package/dist/esm/FhirPathTable/FhirPathTable.mjs +0 -122
  82. package/dist/esm/FhirPathTable/FhirPathTable.mjs.map +0 -1
  83. package/dist/esm/Form/Form.mjs +0 -15
  84. package/dist/esm/Form/Form.mjs.map +0 -1
  85. package/dist/esm/Form/FormUtils.mjs +0 -50
  86. package/dist/esm/Form/FormUtils.mjs.map +0 -1
  87. package/dist/esm/FormSection/FormSection.mjs +0 -10
  88. package/dist/esm/FormSection/FormSection.mjs.map +0 -1
  89. package/dist/esm/GoogleButton/GoogleButton.mjs +0 -49
  90. package/dist/esm/GoogleButton/GoogleButton.mjs.map +0 -1
  91. package/dist/esm/HumanNameDisplay/HumanNameDisplay.mjs +0 -13
  92. package/dist/esm/HumanNameDisplay/HumanNameDisplay.mjs.map +0 -1
  93. package/dist/esm/HumanNameInput/HumanNameInput.mjs +0 -50
  94. package/dist/esm/HumanNameInput/HumanNameInput.mjs.map +0 -1
  95. package/dist/esm/IdentifierDisplay/IdentifierDisplay.mjs +0 -11
  96. package/dist/esm/IdentifierDisplay/IdentifierDisplay.mjs.map +0 -1
  97. package/dist/esm/IdentifierInput/IdentifierInput.mjs +0 -18
  98. package/dist/esm/IdentifierInput/IdentifierInput.mjs.map +0 -1
  99. package/dist/esm/Loading/Loading.mjs +0 -10
  100. package/dist/esm/Loading/Loading.mjs.map +0 -1
  101. package/dist/esm/Logo/Logo.mjs +0 -14
  102. package/dist/esm/Logo/Logo.mjs.map +0 -1
  103. package/dist/esm/MedplumLink/MedplumLink.mjs +0 -52
  104. package/dist/esm/MedplumLink/MedplumLink.mjs.map +0 -1
  105. package/dist/esm/MedplumProvider/MedplumProvider.mjs +0 -84
  106. package/dist/esm/MedplumProvider/MedplumProvider.mjs.map +0 -1
  107. package/dist/esm/MoneyDisplay/MoneyDisplay.mjs +0 -9
  108. package/dist/esm/MoneyDisplay/MoneyDisplay.mjs.map +0 -1
  109. package/dist/esm/MoneyInput/MoneyInput.mjs +0 -53
  110. package/dist/esm/MoneyInput/MoneyInput.mjs.map +0 -1
  111. package/dist/esm/NoteDisplay/NoteDisplay.mjs +0 -18
  112. package/dist/esm/NoteDisplay/NoteDisplay.mjs.map +0 -1
  113. package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.mjs +0 -14
  114. package/dist/esm/OperationOutcomeAlert/OperationOutcomeAlert.mjs.map +0 -1
  115. package/dist/esm/Panel/Panel.mjs +0 -34
  116. package/dist/esm/Panel/Panel.mjs.map +0 -1
  117. package/dist/esm/PatientTimeline/PatientTimeline.mjs +0 -38
  118. package/dist/esm/PatientTimeline/PatientTimeline.mjs.map +0 -1
  119. package/dist/esm/PeriodInput/PeriodInput.mjs +0 -19
  120. package/dist/esm/PeriodInput/PeriodInput.mjs.map +0 -1
  121. package/dist/esm/PlanDefinitionBuilder/PlanDefinitionBuilder.mjs +0 -258
  122. package/dist/esm/PlanDefinitionBuilder/PlanDefinitionBuilder.mjs.map +0 -1
  123. package/dist/esm/QuantityDisplay/QuantityDisplay.mjs +0 -9
  124. package/dist/esm/QuantityDisplay/QuantityDisplay.mjs.map +0 -1
  125. package/dist/esm/QuantityInput/QuantityInput.mjs +0 -40
  126. package/dist/esm/QuantityInput/QuantityInput.mjs.map +0 -1
  127. package/dist/esm/QuestionnaireBuilder/QuestionnaireBuilder.mjs +0 -288
  128. package/dist/esm/QuestionnaireBuilder/QuestionnaireBuilder.mjs.map +0 -1
  129. package/dist/esm/QuestionnaireForm/QuestionnaireForm.mjs +0 -276
  130. package/dist/esm/QuestionnaireForm/QuestionnaireForm.mjs.map +0 -1
  131. package/dist/esm/RangeDisplay/RangeDisplay.mjs +0 -9
  132. package/dist/esm/RangeDisplay/RangeDisplay.mjs.map +0 -1
  133. package/dist/esm/RangeInput/RangeInput.mjs +0 -31
  134. package/dist/esm/RangeInput/RangeInput.mjs.map +0 -1
  135. package/dist/esm/RatioDisplay/RatioDisplay.mjs +0 -16
  136. package/dist/esm/RatioDisplay/RatioDisplay.mjs.map +0 -1
  137. package/dist/esm/RatioInput/RatioInput.mjs +0 -31
  138. package/dist/esm/RatioInput/RatioInput.mjs.map +0 -1
  139. package/dist/esm/ReferenceDisplay/ReferenceDisplay.mjs +0 -21
  140. package/dist/esm/ReferenceDisplay/ReferenceDisplay.mjs.map +0 -1
  141. package/dist/esm/ReferenceInput/ReferenceInput.mjs +0 -45
  142. package/dist/esm/ReferenceInput/ReferenceInput.mjs.map +0 -1
  143. package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.mjs +0 -286
  144. package/dist/esm/ReferenceRangeEditor/ReferenceRangeEditor.mjs.map +0 -1
  145. package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.mjs +0 -72
  146. package/dist/esm/RequestGroupDisplay/RequestGroupDisplay.mjs.map +0 -1
  147. package/dist/esm/ResourceArrayDisplay/ResourceArrayDisplay.mjs +0 -13
  148. package/dist/esm/ResourceArrayDisplay/ResourceArrayDisplay.mjs.map +0 -1
  149. package/dist/esm/ResourceArrayInput/ResourceArrayInput.mjs +0 -51
  150. package/dist/esm/ResourceArrayInput/ResourceArrayInput.mjs.map +0 -1
  151. package/dist/esm/ResourceAvatar/ResourceAvatar.mjs +0 -23
  152. package/dist/esm/ResourceAvatar/ResourceAvatar.mjs.map +0 -1
  153. package/dist/esm/ResourceBadge/ResourceBadge.mjs +0 -13
  154. package/dist/esm/ResourceBadge/ResourceBadge.mjs.map +0 -1
  155. package/dist/esm/ResourceBlame/ResourceBlame.mjs +0 -113
  156. package/dist/esm/ResourceBlame/ResourceBlame.mjs.map +0 -1
  157. package/dist/esm/ResourceDiff/ResourceDiff.mjs +0 -39
  158. package/dist/esm/ResourceDiff/ResourceDiff.mjs.map +0 -1
  159. package/dist/esm/ResourceDiffTable/ResourceDiffTable.mjs +0 -80
  160. package/dist/esm/ResourceDiffTable/ResourceDiffTable.mjs.map +0 -1
  161. package/dist/esm/ResourceForm/ResourceForm.mjs +0 -56
  162. package/dist/esm/ResourceForm/ResourceForm.mjs.map +0 -1
  163. package/dist/esm/ResourceHistoryTable/ResourceHistoryTable.mjs +0 -50
  164. package/dist/esm/ResourceHistoryTable/ResourceHistoryTable.mjs.map +0 -1
  165. package/dist/esm/ResourceInput/ResourceInput.mjs +0 -70
  166. package/dist/esm/ResourceInput/ResourceInput.mjs.map +0 -1
  167. package/dist/esm/ResourceName/ResourceName.mjs +0 -25
  168. package/dist/esm/ResourceName/ResourceName.mjs.map +0 -1
  169. package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.mjs +0 -119
  170. package/dist/esm/ResourcePropertyDisplay/ResourcePropertyDisplay.mjs.map +0 -1
  171. package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.mjs +0 -171
  172. package/dist/esm/ResourcePropertyInput/ResourcePropertyInput.mjs.map +0 -1
  173. package/dist/esm/ResourceTable/ResourceTable.mjs +0 -25
  174. package/dist/esm/ResourceTable/ResourceTable.mjs.map +0 -1
  175. package/dist/esm/ResourceTimeline/ResourceTimeline.mjs +0 -309
  176. package/dist/esm/ResourceTimeline/ResourceTimeline.mjs.map +0 -1
  177. package/dist/esm/Scheduler/Scheduler.mjs +0 -98
  178. package/dist/esm/Scheduler/Scheduler.mjs.map +0 -1
  179. package/dist/esm/SearchControl/SearchControl.mjs +0 -337
  180. package/dist/esm/SearchControl/SearchControl.mjs.map +0 -1
  181. package/dist/esm/SearchControl/SearchControlField.mjs +0 -95
  182. package/dist/esm/SearchControl/SearchControlField.mjs.map +0 -1
  183. package/dist/esm/SearchControl/SearchUtils.mjs +0 -497
  184. package/dist/esm/SearchControl/SearchUtils.mjs.map +0 -1
  185. package/dist/esm/SearchExportDialog/SearchExportDialog.mjs +0 -19
  186. package/dist/esm/SearchExportDialog/SearchExportDialog.mjs.map +0 -1
  187. package/dist/esm/SearchFieldEditor/SearchFieldEditor.mjs +0 -196
  188. package/dist/esm/SearchFieldEditor/SearchFieldEditor.mjs.map +0 -1
  189. package/dist/esm/SearchFilterEditor/SearchFilterEditor.mjs +0 -97
  190. package/dist/esm/SearchFilterEditor/SearchFilterEditor.mjs.map +0 -1
  191. package/dist/esm/SearchFilterValueDialog/SearchFilterValueDialog.mjs +0 -22
  192. package/dist/esm/SearchFilterValueDialog/SearchFilterValueDialog.mjs.map +0 -1
  193. package/dist/esm/SearchFilterValueDisplay/SearchFilterValueDisplay.mjs +0 -22
  194. package/dist/esm/SearchFilterValueDisplay/SearchFilterValueDisplay.mjs.map +0 -1
  195. package/dist/esm/SearchFilterValueInput/SearchFilterValueInput.mjs +0 -57
  196. package/dist/esm/SearchFilterValueInput/SearchFilterValueInput.mjs.map +0 -1
  197. package/dist/esm/SearchPopupMenu/SearchPopupMenu.mjs +0 -134
  198. package/dist/esm/SearchPopupMenu/SearchPopupMenu.mjs.map +0 -1
  199. package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs +0 -36
  200. package/dist/esm/ServiceRequestTimeline/ServiceRequestTimeline.mjs.map +0 -1
  201. package/dist/esm/StatusBadge/StatusBadge.mjs +0 -63
  202. package/dist/esm/StatusBadge/StatusBadge.mjs.map +0 -1
  203. package/dist/esm/Timeline/Timeline.mjs +0 -40
  204. package/dist/esm/Timeline/Timeline.mjs.map +0 -1
  205. package/dist/esm/TimingInput/TimingInput.mjs +0 -76
  206. package/dist/esm/TimingInput/TimingInput.mjs.map +0 -1
  207. package/dist/esm/ValueSetAutocomplete/ValueSetAutocomplete.mjs +0 -58
  208. package/dist/esm/ValueSetAutocomplete/ValueSetAutocomplete.mjs.map +0 -1
  209. package/dist/esm/auth/AuthenticationForm.mjs +0 -89
  210. package/dist/esm/auth/AuthenticationForm.mjs.map +0 -1
  211. package/dist/esm/auth/ChooseProfileForm.mjs +0 -33
  212. package/dist/esm/auth/ChooseProfileForm.mjs.map +0 -1
  213. package/dist/esm/auth/ChooseScopeForm.mjs +0 -28
  214. package/dist/esm/auth/ChooseScopeForm.mjs.map +0 -1
  215. package/dist/esm/auth/MfaForm.mjs +0 -34
  216. package/dist/esm/auth/MfaForm.mjs.map +0 -1
  217. package/dist/esm/auth/NewProjectForm.mjs +0 -39
  218. package/dist/esm/auth/NewProjectForm.mjs.map +0 -1
  219. package/dist/esm/auth/NewUserForm.mjs +0 -84
  220. package/dist/esm/auth/NewUserForm.mjs.map +0 -1
  221. package/dist/esm/auth/RegisterForm.mjs +0 -39
  222. package/dist/esm/auth/RegisterForm.mjs.map +0 -1
  223. package/dist/esm/auth/SignInForm.mjs +0 -100
  224. package/dist/esm/auth/SignInForm.mjs.map +0 -1
  225. package/dist/esm/constants.mjs +0 -12
  226. package/dist/esm/constants.mjs.map +0 -1
  227. package/dist/esm/index.min.mjs +0 -1
  228. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs +0 -70
  229. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs.map +0 -1
  230. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs +0 -18
  231. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs.map +0 -1
  232. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs +0 -25
  233. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs.map +0 -1
  234. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs +0 -15
  235. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs.map +0 -1
  236. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs +0 -19
  237. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleach.mjs.map +0 -1
  238. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs +0 -20
  239. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBleachOff.mjs.map +0 -1
  240. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs +0 -26
  241. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs.map +0 -1
  242. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs +0 -17
  243. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs.map +0 -1
  244. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs +0 -20
  245. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucket.mjs.map +0 -1
  246. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs +0 -27
  247. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconBucketOff.mjs.map +0 -1
  248. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs +0 -24
  249. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCalendar.mjs.map +0 -1
  250. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs +0 -13
  251. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs.map +0 -1
  252. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs +0 -20
  253. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCheckbox.mjs.map +0 -1
  254. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs +0 -13
  255. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs.map +0 -1
  256. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs +0 -14
  257. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs.map +0 -1
  258. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs +0 -15
  259. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs.map +0 -1
  260. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs +0 -21
  261. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs.map +0 -1
  262. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs +0 -20
  263. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconColumns.mjs.map +0 -1
  264. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs +0 -20
  265. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs.map +0 -1
  266. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs +0 -15
  267. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.mjs.map +0 -1
  268. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs +0 -27
  269. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.mjs.map +0 -1
  270. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs +0 -14
  271. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqual.mjs.map +0 -1
  272. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs +0 -15
  273. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconEqualNot.mjs.map +0 -1
  274. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs +0 -22
  275. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFileAlert.mjs.map +0 -1
  276. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs +0 -22
  277. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilePlus.mjs.map +0 -1
  278. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs +0 -19
  279. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconFilter.mjs.map +0 -1
  280. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs +0 -30
  281. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconListDetails.mjs.map +0 -1
  282. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconLogout.mjs +0 -21
  283. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconLogout.mjs.map +0 -1
  284. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs +0 -13
  285. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathGreater.mjs.map +0 -1
  286. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs +0 -13
  287. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMathLower.mjs.map +0 -1
  288. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs +0 -21
  289. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconMessage.mjs.map +0 -1
  290. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs +0 -21
  291. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPin.mjs.map +0 -1
  292. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs +0 -22
  293. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs.map +0 -1
  294. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPlus.mjs +0 -14
  295. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconPlus.mjs.map +0 -1
  296. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.mjs +0 -14
  297. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.mjs.map +0 -1
  298. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs +0 -20
  299. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSettings.mjs.map +0 -1
  300. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs +0 -17
  301. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortAscending.mjs.map +0 -1
  302. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs +0 -17
  303. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSortDescending.mjs.map +0 -1
  304. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs +0 -19
  305. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs.map +0 -1
  306. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSwitchHorizontal.mjs +0 -20
  307. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconSwitchHorizontal.mjs.map +0 -1
  308. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs +0 -23
  309. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTableExport.mjs.map +0 -1
  310. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs +0 -20
  311. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.mjs.map +0 -1
  312. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs +0 -14
  313. package/dist/esm/node_modules/@tabler/icons-react/dist/esm/icons/IconX.mjs.map +0 -1
  314. package/dist/esm/useResource/useResource.mjs +0 -68
  315. package/dist/esm/useResource/useResource.mjs.map +0 -1
  316. package/dist/esm/utils/blame.mjs +0 -72
  317. package/dist/esm/utils/blame.mjs.map +0 -1
  318. package/dist/esm/utils/date.mjs +0 -56
  319. package/dist/esm/utils/date.mjs.map +0 -1
  320. package/dist/esm/utils/diff.mjs +0 -118
  321. package/dist/esm/utils/diff.mjs.map +0 -1
  322. package/dist/esm/utils/dom.mjs +0 -34
  323. package/dist/esm/utils/dom.mjs.map +0 -1
  324. package/dist/esm/utils/outcomes.mjs +0 -30
  325. package/dist/esm/utils/outcomes.mjs.map +0 -1
  326. package/dist/esm/utils/questionnaire.mjs +0 -26
  327. package/dist/esm/utils/questionnaire.mjs.map +0 -1
  328. package/dist/esm/utils/recaptcha.mjs +0 -32
  329. package/dist/esm/utils/recaptcha.mjs.map +0 -1
  330. package/dist/esm/utils/script.mjs +0 -16
  331. package/dist/esm/utils/script.mjs.map +0 -1
@@ -1,121 +0,0 @@
1
- import { MultiSelect, Loader } from '@mantine/core';
2
- import React, { useRef, useState, useCallback, useEffect } from 'react';
3
- import { showNotification } from '@mantine/notifications';
4
- import { normalizeErrorString } from '@medplum/core';
5
- import { killEvent } from '../utils/dom.mjs';
6
-
7
- function AsyncAutocomplete(props) {
8
- const { defaultValue, toKey, toOption, loadOptions, onChange, onCreate, creatable, ...rest } = props;
9
- const defaultItems = toDefaultItems(defaultValue);
10
- const inputRef = useRef(null);
11
- const [lastValue, setLastValue] = useState(undefined);
12
- const [timer, setTimer] = useState();
13
- const [abortController, setAbortController] = useState();
14
- const [autoSubmit, setAutoSubmit] = useState();
15
- const [options, setOptions] = useState(defaultItems.map(toOption));
16
- const lastValueRef = useRef();
17
- lastValueRef.current = lastValue;
18
- const timerRef = useRef();
19
- timerRef.current = timer;
20
- const abortControllerRef = useRef();
21
- abortControllerRef.current = abortController;
22
- const autoSubmitRef = useRef();
23
- autoSubmitRef.current = autoSubmit;
24
- const optionsRef = useRef();
25
- optionsRef.current = options;
26
- const handleTimer = useCallback(() => {
27
- setTimer(undefined);
28
- const value = inputRef.current?.value.trim() || '';
29
- if (value === lastValueRef.current) {
30
- // Nothing has changed, move on
31
- return;
32
- }
33
- setLastValue(value);
34
- const newAbortController = new AbortController();
35
- setAbortController(newAbortController);
36
- loadOptions(value, newAbortController.signal)
37
- .then((newValues) => {
38
- if (!newAbortController.signal.aborted) {
39
- setOptions(newValues.map(toOption));
40
- setAbortController(undefined);
41
- if (autoSubmitRef.current) {
42
- if (newValues.length > 0) {
43
- onChange(newValues.slice(0, 1));
44
- }
45
- setAutoSubmit(false);
46
- }
47
- }
48
- })
49
- .catch((err) => {
50
- if (!(newAbortController.signal.aborted || err.message.includes('aborted'))) {
51
- showNotification({ color: 'red', message: normalizeErrorString(err) });
52
- }
53
- });
54
- }, [loadOptions, onChange, toOption]);
55
- const handleSearchChange = useCallback(() => {
56
- if (abortControllerRef.current) {
57
- abortControllerRef.current.abort();
58
- setAbortController(undefined);
59
- }
60
- if (timerRef.current !== undefined) {
61
- window.clearTimeout(timerRef.current);
62
- }
63
- const newTimer = window.setTimeout(() => handleTimer(), 100);
64
- setTimer(newTimer);
65
- }, [handleTimer]);
66
- const handleChange = useCallback((values) => {
67
- const result = [];
68
- for (const value of values) {
69
- let item = optionsRef.current?.find((option) => option.value === value)?.resource;
70
- if (!item && creatable !== false) {
71
- item = onCreate(value);
72
- }
73
- if (item) {
74
- result.push(item);
75
- }
76
- }
77
- onChange(result);
78
- }, [creatable, onChange, onCreate]);
79
- const handleKeyDown = useCallback((e) => {
80
- if (e.key === 'Enter') {
81
- if (!timerRef.current && !abortControllerRef.current) {
82
- killEvent(e);
83
- if (optionsRef.current && optionsRef.current.length > 0) {
84
- setOptions(optionsRef.current.slice(0, 1));
85
- handleChange([optionsRef.current[0].value]);
86
- }
87
- }
88
- else {
89
- // The user pressed enter, but we don't have results yet.
90
- // We need to wait for the results to come in.
91
- setAutoSubmit(true);
92
- }
93
- }
94
- }, [handleChange]);
95
- const handleCreate = useCallback((input) => {
96
- const option = toOption(onCreate(input));
97
- setOptions([...optionsRef.current, option]);
98
- return option;
99
- }, [onCreate, setOptions, toOption]);
100
- const handleFilter = useCallback((_value, selected) => !selected, []);
101
- useEffect(() => {
102
- return () => {
103
- if (abortControllerRef.current) {
104
- abortControllerRef.current.abort();
105
- }
106
- };
107
- }, []);
108
- return (React.createElement(MultiSelect, { ...rest, ref: inputRef, defaultValue: defaultItems.map(toKey), searchable: true, onKeyDown: handleKeyDown, onSearchChange: handleSearchChange, data: options, onFocus: handleTimer, onChange: handleChange, onCreate: handleCreate, rightSectionWidth: 40, rightSection: abortController ? React.createElement(Loader, { size: 16 }) : null, filter: handleFilter, creatable: true }));
109
- }
110
- function toDefaultItems(defaultValue) {
111
- if (!defaultValue) {
112
- return [];
113
- }
114
- if (Array.isArray(defaultValue)) {
115
- return defaultValue;
116
- }
117
- return [defaultValue];
118
- }
119
-
120
- export { AsyncAutocomplete };
121
- //# sourceMappingURL=AsyncAutocomplete.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AsyncAutocomplete.mjs","sources":["../../../src/AsyncAutocomplete/AsyncAutocomplete.tsx"],"sourcesContent":["import { Loader, MultiSelect, MultiSelectProps, SelectItem } from '@mantine/core';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { showNotification } from '@mantine/notifications';\nimport { normalizeErrorString } from '@medplum/core';\nimport { killEvent } from '../utils/dom';\n\nexport interface AsyncAutocompleteOption<T> extends SelectItem {\n resource: T;\n}\n\nexport interface AsyncAutocompleteProps<T>\n extends Omit<MultiSelectProps, 'data' | 'defaultValue' | 'loadOptions' | 'onChange' | 'onCreate' | 'searchable'> {\n defaultValue?: T | T[];\n toKey: (item: T) => string;\n toOption: (item: T) => AsyncAutocompleteOption<T>;\n loadOptions: (input: string, signal: AbortSignal) => Promise<T[]>;\n onChange: (item: T[]) => void;\n onCreate?: (input: string) => T;\n creatable?: boolean;\n}\n\nexport function AsyncAutocomplete<T>(props: AsyncAutocompleteProps<T>): JSX.Element {\n const { defaultValue, toKey, toOption, loadOptions, onChange, onCreate, creatable, ...rest } = props;\n const defaultItems = toDefaultItems(defaultValue);\n const inputRef = useRef<HTMLInputElement>(null);\n const [lastValue, setLastValue] = useState<string | undefined>(undefined);\n const [timer, setTimer] = useState<number>();\n const [abortController, setAbortController] = useState<AbortController>();\n const [autoSubmit, setAutoSubmit] = useState<boolean>();\n const [options, setOptions] = useState<AsyncAutocompleteOption<T>[]>(defaultItems.map(toOption));\n\n const lastValueRef = useRef<string>();\n lastValueRef.current = lastValue;\n\n const timerRef = useRef<number>();\n timerRef.current = timer;\n\n const abortControllerRef = useRef<AbortController>();\n abortControllerRef.current = abortController;\n\n const autoSubmitRef = useRef<boolean>();\n autoSubmitRef.current = autoSubmit;\n\n const optionsRef = useRef<AsyncAutocompleteOption<T>[]>();\n optionsRef.current = options;\n\n const handleTimer = useCallback((): void => {\n setTimer(undefined);\n\n const value = inputRef.current?.value.trim() || '';\n if (value === lastValueRef.current) {\n // Nothing has changed, move on\n return;\n }\n\n setLastValue(value);\n\n const newAbortController = new AbortController();\n setAbortController(newAbortController);\n\n loadOptions(value, newAbortController.signal)\n .then((newValues: T[]) => {\n if (!newAbortController.signal.aborted) {\n setOptions(newValues.map(toOption));\n setAbortController(undefined);\n if (autoSubmitRef.current) {\n if (newValues.length > 0) {\n onChange(newValues.slice(0, 1));\n }\n setAutoSubmit(false);\n }\n }\n })\n .catch((err) => {\n if (!(newAbortController.signal.aborted || err.message.includes('aborted'))) {\n showNotification({ color: 'red', message: normalizeErrorString(err) });\n }\n });\n }, [loadOptions, onChange, toOption]);\n\n const handleSearchChange = useCallback((): void => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setAbortController(undefined);\n }\n\n if (timerRef.current !== undefined) {\n window.clearTimeout(timerRef.current);\n }\n\n const newTimer = window.setTimeout(() => handleTimer(), 100);\n setTimer(newTimer);\n }, [handleTimer]);\n\n const handleChange = useCallback(\n (values: string[]): void => {\n const result: T[] = [];\n for (const value of values) {\n let item = optionsRef.current?.find((option) => option.value === value)?.resource;\n if (!item && creatable !== false) {\n item = (onCreate as (input: string) => T)(value);\n }\n\n if (item) {\n result.push(item);\n }\n }\n onChange(result);\n },\n [creatable, onChange, onCreate]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent): void => {\n if (e.key === 'Enter') {\n if (!timerRef.current && !abortControllerRef.current) {\n killEvent(e);\n if (optionsRef.current && optionsRef.current.length > 0) {\n setOptions(optionsRef.current.slice(0, 1));\n handleChange([optionsRef.current[0].value]);\n }\n } else {\n // The user pressed enter, but we don't have results yet.\n // We need to wait for the results to come in.\n setAutoSubmit(true);\n }\n }\n },\n [handleChange]\n );\n\n const handleCreate = useCallback(\n (input: string): AsyncAutocompleteOption<T> => {\n const option = toOption((onCreate as (input: string) => T)(input));\n setOptions([...(optionsRef.current as AsyncAutocompleteOption<T>[]), option]);\n return option;\n },\n [onCreate, setOptions, toOption]\n );\n\n const handleFilter = useCallback((_value: string, selected: boolean) => !selected, []);\n\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n return (\n <MultiSelect\n {...rest}\n ref={inputRef}\n defaultValue={defaultItems.map(toKey)}\n searchable\n onKeyDown={handleKeyDown}\n onSearchChange={handleSearchChange}\n data={options}\n onFocus={handleTimer}\n onChange={handleChange}\n onCreate={handleCreate}\n rightSectionWidth={40}\n rightSection={abortController ? <Loader size={16} /> : null}\n filter={handleFilter}\n creatable\n />\n );\n}\n\nfunction toDefaultItems<T>(defaultValue: T | T[] | undefined): T[] {\n if (!defaultValue) {\n return [];\n }\n if (Array.isArray(defaultValue)) {\n return defaultValue;\n }\n return [defaultValue];\n}\n"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay.mjs';
3
-
4
- function AttachmentArrayDisplay(props) {
5
- return (React.createElement("div", null, props.values?.map((v, index) => (React.createElement("div", { key: 'attatchment-' + index },
6
- React.createElement(AttachmentDisplay, { value: v, maxWidth: props.maxWidth }))))));
7
- }
8
-
9
- export { AttachmentArrayDisplay };
10
- //# sourceMappingURL=AttachmentArrayDisplay.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentArrayDisplay.mjs","sources":["../../../src/AttachmentArrayDisplay/AttachmentArrayDisplay.tsx"],"sourcesContent":["import { Attachment } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay';\n\nexport interface AttachmentArrayDisplayProps {\n values?: Attachment[];\n maxWidth?: number;\n}\n\nexport function AttachmentArrayDisplay(props: AttachmentArrayDisplayProps): JSX.Element {\n return (\n <div>\n {props.values?.map((v, index) => (\n <div key={'attatchment-' + index}>\n <AttachmentDisplay value={v} maxWidth={props.maxWidth} />\n </div>\n ))}\n </div>\n );\n}\n"],"names":[],"mappings":";;;AASM,SAAU,sBAAsB,CAAC,KAAkC,EAAA;IACvE,QACE,iCACG,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MAC1B,6BAAK,GAAG,EAAE,cAAc,GAAG,KAAK,EAAA;AAC9B,QAAA,KAAA,CAAA,aAAA,CAAC,iBAAiB,EAAC,EAAA,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAI,CAAA,CACrD,CACP,CAAC,CACE,EACN;AACJ;;;;"}
@@ -1,45 +0,0 @@
1
- import { ActionIcon } from '@mantine/core';
2
- import React, { useState, useRef } from 'react';
3
- import { AttachmentButton } from '../AttachmentButton/AttachmentButton.mjs';
4
- import { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay.mjs';
5
- import { killEvent } from '../utils/dom.mjs';
6
- import IconCircleMinus from '../node_modules/@tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs';
7
- import IconCloudUpload from '../node_modules/@tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs';
8
-
9
- function AttachmentArrayInput(props) {
10
- const [values, setValues] = useState(props.defaultValue ?? []);
11
- const valuesRef = useRef();
12
- valuesRef.current = values;
13
- function setValuesWrapper(newValues) {
14
- setValues(newValues);
15
- if (props.onChange) {
16
- props.onChange(newValues);
17
- }
18
- }
19
- return (React.createElement("table", { style: { width: '100%' } },
20
- React.createElement("colgroup", null,
21
- React.createElement("col", { width: "97%" }),
22
- React.createElement("col", { width: "3%" })),
23
- React.createElement("tbody", null,
24
- values.map((v, index) => (React.createElement("tr", { key: `${index}-${values.length}` },
25
- React.createElement("td", null,
26
- React.createElement(AttachmentDisplay, { value: v, maxWidth: 200 })),
27
- React.createElement("td", null,
28
- React.createElement(ActionIcon, { title: "Remove", size: "sm", onClick: (e) => {
29
- killEvent(e);
30
- const copy = values.slice();
31
- copy.splice(index, 1);
32
- setValuesWrapper(copy);
33
- } },
34
- React.createElement(IconCircleMinus, null)))))),
35
- React.createElement("tr", null,
36
- React.createElement("td", null),
37
- React.createElement("td", null,
38
- React.createElement(AttachmentButton, { onUpload: (attachment) => {
39
- setValuesWrapper([...valuesRef.current, attachment]);
40
- } }, (props) => (React.createElement(ActionIcon, { ...props, title: "Add", size: "sm", color: "green" },
41
- React.createElement(IconCloudUpload, { size: 16 })))))))));
42
- }
43
-
44
- export { AttachmentArrayInput };
45
- //# sourceMappingURL=AttachmentArrayInput.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentArrayInput.mjs","sources":["../../../src/AttachmentArrayInput/AttachmentArrayInput.tsx"],"sourcesContent":["import { ActionIcon } from '@mantine/core';\nimport { Attachment } from '@medplum/fhirtypes';\nimport { IconCircleMinus, IconCloudUpload } from '@tabler/icons-react';\nimport React, { useRef, useState } from 'react';\nimport { AttachmentButton } from '../AttachmentButton/AttachmentButton';\nimport { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay';\nimport { killEvent } from '../utils/dom';\n\nexport interface AttachmentArrayInputProps {\n name: string;\n defaultValue?: Attachment[];\n arrayElement?: boolean;\n onChange?: (value: Attachment[]) => void;\n}\n\nexport function AttachmentArrayInput(props: AttachmentArrayInputProps): JSX.Element {\n const [values, setValues] = useState<Attachment[]>(props.defaultValue ?? []);\n\n const valuesRef = useRef<Attachment[]>();\n valuesRef.current = values;\n\n function setValuesWrapper(newValues: Attachment[]): void {\n setValues(newValues);\n if (props.onChange) {\n props.onChange(newValues);\n }\n }\n\n return (\n <table style={{ width: '100%' }}>\n <colgroup>\n <col width=\"97%\" />\n <col width=\"3%\" />\n </colgroup>\n <tbody>\n {values.map((v: Attachment, index: number) => (\n <tr key={`${index}-${values.length}`}>\n <td>\n <AttachmentDisplay value={v} maxWidth={200} />\n </td>\n <td>\n <ActionIcon\n title=\"Remove\"\n size=\"sm\"\n onClick={(e: React.MouseEvent) => {\n killEvent(e);\n const copy = values.slice();\n copy.splice(index, 1);\n setValuesWrapper(copy);\n }}\n >\n <IconCircleMinus />\n </ActionIcon>\n </td>\n </tr>\n ))}\n <tr>\n <td></td>\n <td>\n <AttachmentButton\n onUpload={(attachment: Attachment) => {\n setValuesWrapper([...(valuesRef.current as Attachment[]), attachment]);\n }}\n >\n {(props) => (\n <ActionIcon {...props} title=\"Add\" size=\"sm\" color=\"green\">\n <IconCloudUpload size={16} />\n </ActionIcon>\n )}\n </AttachmentButton>\n </td>\n </tr>\n </tbody>\n </table>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAeM,SAAU,oBAAoB,CAAC,KAAgC,EAAA;AACnE,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAe,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AAE7E,IAAA,MAAM,SAAS,GAAG,MAAM,EAAgB,CAAC;AACzC,IAAA,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE3B,SAAS,gBAAgB,CAAC,SAAuB,EAAA;QAC/C,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3B,SAAA;KACF;IAED,QACE,+BAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA;AAC7B,QAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,IAAA;YACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,KAAK,EAAG,CAAA;AACnB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAA,CAAG,CACT;AACX,QAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA;YACG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAa,EAAE,KAAa,MACvC,KAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,GAAG,EAAE,CAAG,EAAA,KAAK,IAAI,MAAM,CAAC,MAAM,CAAE,CAAA,EAAA;AAClC,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;oBACE,KAAC,CAAA,aAAA,CAAA,iBAAiB,EAAC,EAAA,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAA,CAAI,CAC3C;AACL,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EACT,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,CAAC,CAAmB,KAAI;4BAC/B,SAAS,CAAC,CAAC,CAAC,CAAC;AACb,4BAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC5B,4BAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BACtB,gBAAgB,CAAC,IAAI,CAAC,CAAC;yBACxB,EAAA;AAED,wBAAA,KAAA,CAAA,aAAA,CAAC,eAAe,EAAG,IAAA,CAAA,CACR,CACV,CACF,CACN,CAAC;AACF,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;gBACE,KAAS,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAgB,EACf,EAAA,QAAQ,EAAE,CAAC,UAAsB,KAAI;4BACnC,gBAAgB,CAAC,CAAC,GAAI,SAAS,CAAC,OAAwB,EAAE,UAAU,CAAC,CAAC,CAAC;yBACxE,EAAA,EAEA,CAAC,KAAK,MACL,KAAC,CAAA,aAAA,CAAA,UAAU,EAAK,EAAA,GAAA,KAAK,EAAE,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,OAAO,EAAA;AACxD,wBAAA,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,EAAC,IAAI,EAAE,EAAE,EAAI,CAAA,CAClB,CACd,CACgB,CAChB,CACF,CACC,CACF,EACR;AACJ;;;;"}
@@ -1,55 +0,0 @@
1
- import React, { useRef } from 'react';
2
- import { useMedplum } from '../MedplumProvider/MedplumProvider.mjs';
3
- import { killEvent } from '../utils/dom.mjs';
4
-
5
- function AttachmentButton(props) {
6
- const medplum = useMedplum();
7
- const fileInputRef = useRef(null);
8
- function onClick(e) {
9
- killEvent(e);
10
- fileInputRef.current?.click();
11
- }
12
- function onFileChange(e) {
13
- killEvent(e);
14
- const files = e.target.files;
15
- if (files) {
16
- Array.from(files).forEach(processFile);
17
- }
18
- }
19
- /**
20
- * Processes a single file.
21
- * @param file The file descriptor.
22
- */
23
- function processFile(file) {
24
- if (!file) {
25
- return;
26
- }
27
- const fileName = file.name;
28
- if (!fileName) {
29
- return;
30
- }
31
- if (props.onUploadStart) {
32
- props.onUploadStart();
33
- }
34
- const filename = file.name;
35
- const contentType = file.type || 'application/octet-stream';
36
- medplum
37
- .createBinary(file, filename, contentType, props.onUploadProgress)
38
- .then((binary) => {
39
- props.onUpload({
40
- contentType: binary.contentType,
41
- url: binary.url,
42
- title: filename,
43
- });
44
- })
45
- .catch((outcome) => {
46
- alert(outcome.issue?.[0]?.details?.text);
47
- });
48
- }
49
- return (React.createElement(React.Fragment, null,
50
- React.createElement("input", { type: "file", "data-testid": "upload-file-input", style: { display: 'none' }, ref: fileInputRef, onChange: (e) => onFileChange(e) }),
51
- props.children({ onClick })));
52
- }
53
-
54
- export { AttachmentButton };
55
- //# sourceMappingURL=AttachmentButton.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentButton.mjs","sources":["../../../src/AttachmentButton/AttachmentButton.tsx"],"sourcesContent":["import { Attachment, Binary, OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useRef } from 'react';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\nimport { killEvent } from '../utils/dom';\n\nexport interface AttachmentButtonProps {\n onUpload: (attachment: Attachment) => void;\n onUploadStart?: () => void;\n onUploadProgress?: (e: ProgressEvent) => void;\n children(props: { onClick(e: React.MouseEvent): void }): React.ReactNode;\n}\n\nexport function AttachmentButton(props: AttachmentButtonProps): JSX.Element {\n const medplum = useMedplum();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n function onClick(e: React.MouseEvent): void {\n killEvent(e);\n fileInputRef.current?.click();\n }\n\n function onFileChange(e: React.ChangeEvent): void {\n killEvent(e);\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n Array.from(files).forEach(processFile);\n }\n }\n\n /**\n * Processes a single file.\n * @param file The file descriptor.\n */\n function processFile(file: File): void {\n if (!file) {\n return;\n }\n\n const fileName = file.name;\n if (!fileName) {\n return;\n }\n\n if (props.onUploadStart) {\n props.onUploadStart();\n }\n\n const filename = file.name;\n const contentType = file.type || 'application/octet-stream';\n medplum\n .createBinary(file, filename, contentType, props.onUploadProgress)\n .then((binary: Binary) => {\n props.onUpload({\n contentType: binary.contentType,\n url: binary.url,\n title: filename,\n });\n })\n .catch((outcome: OperationOutcome) => {\n alert(outcome.issue?.[0]?.details?.text);\n });\n }\n\n return (\n <>\n <input\n type=\"file\"\n data-testid=\"upload-file-input\"\n style={{ display: 'none' }}\n ref={fileInputRef}\n onChange={(e) => onFileChange(e)}\n />\n {props.children({ onClick })}\n </>\n );\n}\n"],"names":[],"mappings":";;;;AAYM,SAAU,gBAAgB,CAAC,KAA4B,EAAA;AAC3D,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAC7B,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEpD,SAAS,OAAO,CAAC,CAAmB,EAAA;QAClC,SAAS,CAAC,CAAC,CAAC,CAAC;AACb,QAAA,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;KAC/B;IAED,SAAS,YAAY,CAAC,CAAoB,EAAA;QACxC,SAAS,CAAC,CAAC,CAAC,CAAC;AACb,QAAA,MAAM,KAAK,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACxC,SAAA;KACF;AAED;;;AAGG;IACH,SAAS,WAAW,CAAC,IAAU,EAAA;QAC7B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACR,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;AACR,SAAA;QAED,IAAI,KAAK,CAAC,aAAa,EAAE;YACvB,KAAK,CAAC,aAAa,EAAE,CAAC;AACvB,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,0BAA0B,CAAC;QAC5D,OAAO;aACJ,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC;AACjE,aAAA,IAAI,CAAC,CAAC,MAAc,KAAI;YACvB,KAAK,CAAC,QAAQ,CAAC;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,OAAyB,KAAI;AACnC,YAAA,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;KACN;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,QAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EAAA,aAAA,EACC,mBAAmB,EAC/B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAC1B,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAChC,CAAA;QACD,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAC3B,EACH;AACJ;;;;"}
@@ -1,21 +0,0 @@
1
- import { Anchor } from '@mantine/core';
2
- import React from 'react';
3
-
4
- function AttachmentDisplay(props) {
5
- const value = props.value;
6
- const { contentType, url, title } = value ?? {};
7
- if (!url) {
8
- return null;
9
- }
10
- return (React.createElement("div", { "data-testid": "attachment-display" },
11
- contentType?.startsWith('image/') && (React.createElement("img", { "data-testid": "attachment-image", style: { maxWidth: props.maxWidth }, src: url, alt: value?.title })),
12
- contentType?.startsWith('video/') && (React.createElement("video", { "data-testid": "attachment-video", style: { maxWidth: props.maxWidth }, controls: true },
13
- React.createElement("source", { type: contentType, src: url }))),
14
- contentType === 'application/pdf' && !title?.endsWith('.pdf') && (React.createElement("div", { "data-testid": "attachment-pdf", style: { maxWidth: props.maxWidth, minHeight: 400 } },
15
- React.createElement("iframe", { width: "100%", height: "400", src: url + '#navpanes=0', allowFullScreen: true, frameBorder: 0, seamless: true }))),
16
- React.createElement("div", { "data-testid": "download-link", style: { padding: '2px 16px 16px 16px' } },
17
- React.createElement(Anchor, { href: value?.url, "data-testid": "attachment-details", target: "_blank", rel: "noopener noreferrer" }, value?.title || 'Download'))));
18
- }
19
-
20
- export { AttachmentDisplay };
21
- //# sourceMappingURL=AttachmentDisplay.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentDisplay.mjs","sources":["../../../src/AttachmentDisplay/AttachmentDisplay.tsx"],"sourcesContent":["import { Anchor } from '@mantine/core';\nimport { Attachment } from '@medplum/fhirtypes';\nimport React from 'react';\n\nexport interface AttachmentDisplayProps {\n value?: Attachment;\n maxWidth?: number;\n}\n\nexport function AttachmentDisplay(props: AttachmentDisplayProps): JSX.Element | null {\n const value = props.value;\n const { contentType, url, title } = value ?? {};\n\n if (!url) {\n return null;\n }\n\n return (\n <div data-testid=\"attachment-display\">\n {contentType?.startsWith('image/') && (\n <img data-testid=\"attachment-image\" style={{ maxWidth: props.maxWidth }} src={url} alt={value?.title} />\n )}\n {contentType?.startsWith('video/') && (\n <video data-testid=\"attachment-video\" style={{ maxWidth: props.maxWidth }} controls={true}>\n <source type={contentType} src={url} />\n </video>\n )}\n {contentType === 'application/pdf' && !title?.endsWith('.pdf') && (\n <div data-testid=\"attachment-pdf\" style={{ maxWidth: props.maxWidth, minHeight: 400 }}>\n <iframe\n width=\"100%\"\n height=\"400\"\n src={url + '#navpanes=0'}\n allowFullScreen={true}\n frameBorder={0}\n seamless={true}\n />\n </div>\n )}\n <div data-testid=\"download-link\" style={{ padding: '2px 16px 16px 16px' }}>\n <Anchor href={value?.url} data-testid=\"attachment-details\" target=\"_blank\" rel=\"noopener noreferrer\">\n {value?.title || 'Download'}\n </Anchor>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AASM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;AAC7D,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;IAEhD,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IAED,QACE,4CAAiB,oBAAoB,EAAA;AAClC,QAAA,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,KAChC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EAAiB,kBAAkB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CACzG;QACA,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,KAChC,KAAmB,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,aAAA,EAAA,kBAAkB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAA;YACvF,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAI,CAAA,CACjC,CACT;QACA,WAAW,KAAK,iBAAiB,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAC5D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EAAiB,gBAAgB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAA;YACnF,KACE,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,KAAK,EACZ,GAAG,EAAE,GAAG,GAAG,aAAa,EACxB,eAAe,EAAE,IAAI,EACrB,WAAW,EAAE,CAAC,EACd,QAAQ,EAAE,IAAI,EACd,CAAA,CACE,CACP;QACD,KAAiB,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EAAA,eAAe,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAA;YACvE,KAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAE,KAAK,EAAE,GAAG,EAAc,aAAA,EAAA,oBAAoB,EAAC,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EACjG,EAAA,KAAK,EAAE,KAAK,IAAI,UAAU,CACpB,CACL,CACF,EACN;AACJ;;;;"}
@@ -1,27 +0,0 @@
1
- import { Button } from '@mantine/core';
2
- import React, { useState } from 'react';
3
- import { AttachmentButton } from '../AttachmentButton/AttachmentButton.mjs';
4
- import { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay.mjs';
5
- import { killEvent } from '../utils/dom.mjs';
6
-
7
- function AttachmentInput(props) {
8
- const [value, setValue] = useState(props.defaultValue);
9
- function setValueWrapper(newValue) {
10
- setValue(newValue);
11
- if (props.onChange) {
12
- props.onChange(newValue);
13
- }
14
- }
15
- if (value) {
16
- return (React.createElement(React.Fragment, null,
17
- React.createElement(AttachmentDisplay, { value: value, maxWidth: 200 }),
18
- React.createElement(Button, { onClick: (e) => {
19
- killEvent(e);
20
- setValueWrapper(undefined);
21
- } }, "Remove")));
22
- }
23
- return (React.createElement(AttachmentButton, { onUpload: setValueWrapper }, (props) => React.createElement(Button, { ...props }, "Upload...")));
24
- }
25
-
26
- export { AttachmentInput };
27
- //# sourceMappingURL=AttachmentInput.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentInput.mjs","sources":["../../../src/AttachmentInput/AttachmentInput.tsx"],"sourcesContent":["import { Button } from '@mantine/core';\nimport { Attachment } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { AttachmentButton } from '../AttachmentButton/AttachmentButton';\nimport { AttachmentDisplay } from '../AttachmentDisplay/AttachmentDisplay';\nimport { killEvent } from '../utils/dom';\n\nexport interface AttachmentInputProps {\n name: string;\n defaultValue?: Attachment;\n arrayElement?: boolean;\n onChange?: (value: Attachment | undefined) => void;\n}\n\nexport function AttachmentInput(props: AttachmentInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Attachment | undefined): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n if (value) {\n return (\n <>\n <AttachmentDisplay value={value} maxWidth={200} />\n <Button\n onClick={(e: React.MouseEvent) => {\n killEvent(e);\n setValueWrapper(undefined);\n }}\n >\n Remove\n </Button>\n </>\n );\n }\n\n return (\n <AttachmentButton onUpload={setValueWrapper}>{(props) => <Button {...props}>Upload...</Button>}</AttachmentButton>\n );\n}\n"],"names":[],"mappings":";;;;;;AAcM,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAgC,EAAA;QACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;YACE,KAAC,CAAA,aAAA,CAAA,iBAAiB,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAI,CAAA;AAClD,YAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EACL,EAAA,OAAO,EAAE,CAAC,CAAmB,KAAI;oBAC/B,SAAS,CAAC,CAAC,CAAC,CAAC;oBACb,eAAe,CAAC,SAAS,CAAC,CAAC;iBAC5B,EAAA,EAAA,QAAA,CAGM,CACR,EACH;AACH,KAAA;IAED,QACE,oBAAC,gBAAgB,EAAA,EAAC,QAAQ,EAAE,eAAe,IAAG,CAAC,KAAK,KAAK,oBAAC,MAAM,EAAA,EAAA,GAAK,KAAK,EAAoB,EAAA,WAAA,CAAA,CAAoB,EAClH;AACJ;;;;"}
@@ -1,49 +0,0 @@
1
- import { globalSchema, getPropertyDisplayName } from '@medplum/core';
2
- import React from 'react';
3
- import { DEFAULT_IGNORED_PROPERTIES } from '../constants.mjs';
4
- import { DescriptionList, DescriptionListEntry } from '../DescriptionList/DescriptionList.mjs';
5
- import { getValueAndType, ResourcePropertyDisplay } from '../ResourcePropertyDisplay/ResourcePropertyDisplay.mjs';
6
-
7
- function BackboneElementDisplay(props) {
8
- const typedValue = props.value;
9
- const value = typedValue.value;
10
- if (!value) {
11
- return null;
12
- }
13
- const typeName = typedValue.type;
14
- const typeSchema = globalSchema.types[typeName];
15
- if (!typeSchema) {
16
- return React.createElement("div", null,
17
- typeName,
18
- "\u00A0not implemented");
19
- }
20
- if (typeof value === 'object' &&
21
- 'name' in value &&
22
- Object.keys(value).length === 1 &&
23
- typeof value.name === 'string') {
24
- // Special case for common BackboneElement pattern
25
- // Where there is an object with a single property 'name'
26
- // Just display the name value.
27
- return React.createElement("div", null, value.name);
28
- }
29
- return (React.createElement(DescriptionList, { compact: props.compact }, Object.entries(typeSchema.properties).map((entry) => {
30
- const key = entry[0];
31
- if (DEFAULT_IGNORED_PROPERTIES.includes(key)) {
32
- return null;
33
- }
34
- const property = entry[1];
35
- if (!property.path) {
36
- property.path = typeName + '.' + key;
37
- }
38
- const [propertyValue, propertyType] = getValueAndType(typedValue, key);
39
- if (props.ignoreMissingValues &&
40
- (!propertyValue || (Array.isArray(propertyValue) && propertyValue.length === 0))) {
41
- return null;
42
- }
43
- return (React.createElement(DescriptionListEntry, { key: key, term: getPropertyDisplayName(key) },
44
- React.createElement(ResourcePropertyDisplay, { property: property, propertyType: propertyType, value: propertyValue, ignoreMissingValues: props.ignoreMissingValues, link: props.link })));
45
- })));
46
- }
47
-
48
- export { BackboneElementDisplay };
49
- //# sourceMappingURL=BackboneElementDisplay.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackboneElementDisplay.mjs","sources":["../../../src/BackboneElementDisplay/BackboneElementDisplay.tsx"],"sourcesContent":["import { getPropertyDisplayName, globalSchema, TypedValue } from '@medplum/core';\nimport React from 'react';\nimport { DEFAULT_IGNORED_PROPERTIES } from '../constants';\nimport { DescriptionList, DescriptionListEntry } from '../DescriptionList/DescriptionList';\nimport { getValueAndType, ResourcePropertyDisplay } from '../ResourcePropertyDisplay/ResourcePropertyDisplay';\n\nexport interface BackboneElementDisplayProps {\n value: TypedValue;\n compact?: boolean;\n ignoreMissingValues?: boolean;\n link?: boolean;\n}\n\nexport function BackboneElementDisplay(props: BackboneElementDisplayProps): JSX.Element | null {\n const typedValue = props.value;\n const value = typedValue.value;\n if (!value) {\n return null;\n }\n\n const typeName = typedValue.type;\n const typeSchema = globalSchema.types[typeName];\n if (!typeSchema) {\n return <div>{typeName}&nbsp;not implemented</div>;\n }\n\n if (\n typeof value === 'object' &&\n 'name' in value &&\n Object.keys(value).length === 1 &&\n typeof value.name === 'string'\n ) {\n // Special case for common BackboneElement pattern\n // Where there is an object with a single property 'name'\n // Just display the name value.\n return <div>{value.name}</div>;\n }\n\n return (\n <DescriptionList compact={props.compact}>\n {Object.entries(typeSchema.properties).map((entry) => {\n const key = entry[0];\n if (DEFAULT_IGNORED_PROPERTIES.includes(key)) {\n return null;\n }\n const property = entry[1];\n if (!property.path) {\n property.path = typeName + '.' + key;\n }\n const [propertyValue, propertyType] = getValueAndType(typedValue, key);\n if (\n props.ignoreMissingValues &&\n (!propertyValue || (Array.isArray(propertyValue) && propertyValue.length === 0))\n ) {\n return null;\n }\n return (\n <DescriptionListEntry key={key} term={getPropertyDisplayName(key)}>\n <ResourcePropertyDisplay\n property={property}\n propertyType={propertyType}\n value={propertyValue}\n ignoreMissingValues={props.ignoreMissingValues}\n link={props.link}\n />\n </DescriptionListEntry>\n );\n })}\n </DescriptionList>\n );\n}\n"],"names":[],"mappings":";;;;;;AAaM,SAAU,sBAAsB,CAAC,KAAkC,EAAA;AACvE,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/B,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AAED,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;IACjC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;YAAM,QAAQ;oCAA4B,CAAC;AACnD,KAAA;IAED,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,MAAM,IAAI,KAAK;QACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAC9B;;;;AAIA,QAAA,OAAO,KAAM,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAA,KAAK,CAAC,IAAI,CAAO,CAAC;AAChC,KAAA;IAED,QACE,KAAC,CAAA,aAAA,CAAA,eAAe,EAAC,EAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAA,EACpC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACnD,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,0BAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClB,QAAQ,CAAC,IAAI,GAAG,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC,SAAA;AACD,QAAA,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvE,IACE,KAAK,CAAC,mBAAmB;AACzB,aAAC,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAChF;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,QACE,KAAA,CAAA,aAAA,CAAC,oBAAoB,EAAA,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAA;AAC/D,YAAA,KAAA,CAAA,aAAA,CAAC,uBAAuB,EAAA,EACtB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,IAAI,EAAE,KAAK,CAAC,IAAI,EAAA,CAChB,CACmB,EACvB;KACH,CAAC,CACc,EAClB;AACJ;;;;"}
@@ -1,52 +0,0 @@
1
- import { Stack } from '@mantine/core';
2
- import { globalSchema, getPropertyDisplayName } from '@medplum/core';
3
- import React, { useState } from 'react';
4
- import { CheckboxFormSection } from '../CheckboxFormSection/CheckboxFormSection.mjs';
5
- import { DEFAULT_IGNORED_PROPERTIES } from '../constants.mjs';
6
- import { FormSection } from '../FormSection/FormSection.mjs';
7
- import { setPropertyValue } from '../ResourceForm/ResourceForm.mjs';
8
- import { getValueAndType } from '../ResourcePropertyDisplay/ResourcePropertyDisplay.mjs';
9
- import { ResourcePropertyInput } from '../ResourcePropertyInput/ResourcePropertyInput.mjs';
10
-
11
- function BackboneElementInput(props) {
12
- const [value, setValue] = useState(props.defaultValue ?? {});
13
- function setValueWrapper(newValue) {
14
- setValue(newValue);
15
- if (props.onChange) {
16
- props.onChange(newValue);
17
- }
18
- }
19
- const typeName = props.typeName;
20
- const typeSchema = globalSchema.types[typeName];
21
- if (!typeSchema) {
22
- return React.createElement("div", null,
23
- typeName,
24
- "\u00A0not implemented");
25
- }
26
- const typedValue = { type: typeName, value };
27
- return (React.createElement(Stack, null, Object.entries(typeSchema.properties).map((entry) => {
28
- const key = entry[0];
29
- if (key === 'id' || DEFAULT_IGNORED_PROPERTIES.includes(key)) {
30
- return null;
31
- }
32
- const property = entry[1];
33
- if (!property.type) {
34
- return null;
35
- }
36
- const [propertyValue, propertyType] = getValueAndType(typedValue, key);
37
- const required = property.min !== undefined && property.min > 0;
38
- if (property.type.length === 1 && property.type[0].code === 'boolean') {
39
- return (React.createElement(CheckboxFormSection, { key: key, title: getPropertyDisplayName(key), description: property.definition, htmlFor: key },
40
- React.createElement(ResourcePropertyInput, { property: property, name: key, defaultValue: propertyValue, defaultPropertyType: propertyType, outcome: props.outcome, onChange: (newValue, propName) => {
41
- setValueWrapper(setPropertyValue(value, key, propName ?? key, entry[1], newValue));
42
- } })));
43
- }
44
- return (React.createElement(FormSection, { key: key, title: getPropertyDisplayName(key), description: property.definition, withAsterisk: required, htmlFor: key, outcome: props.outcome },
45
- React.createElement(ResourcePropertyInput, { property: property, name: key, defaultValue: propertyValue, defaultPropertyType: propertyType, onChange: (newValue, propName) => {
46
- setValueWrapper(setPropertyValue(value, key, propName ?? key, entry[1], newValue));
47
- } })));
48
- })));
49
- }
50
-
51
- export { BackboneElementInput };
52
- //# sourceMappingURL=BackboneElementInput.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackboneElementInput.mjs","sources":["../../../src/BackboneElementInput/BackboneElementInput.tsx"],"sourcesContent":["import { Stack } from '@mantine/core';\nimport { getPropertyDisplayName, globalSchema } from '@medplum/core';\nimport { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { CheckboxFormSection } from '../CheckboxFormSection/CheckboxFormSection';\nimport { DEFAULT_IGNORED_PROPERTIES } from '../constants';\nimport { FormSection } from '../FormSection/FormSection';\nimport { setPropertyValue } from '../ResourceForm/ResourceForm';\nimport { getValueAndType } from '../ResourcePropertyDisplay/ResourcePropertyDisplay';\nimport { ResourcePropertyInput } from '../ResourcePropertyInput/ResourcePropertyInput';\n\nexport interface BackboneElementInputProps {\n typeName: string;\n defaultValue?: any;\n outcome?: OperationOutcome;\n onChange?: (value: any) => void;\n}\n\nexport function BackboneElementInput(props: BackboneElementInputProps): JSX.Element {\n const [value, setValue] = useState<any>(props.defaultValue ?? {});\n\n function setValueWrapper(newValue: any): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n const typeName = props.typeName;\n const typeSchema = globalSchema.types[typeName];\n if (!typeSchema) {\n return <div>{typeName}&nbsp;not implemented</div>;\n }\n\n const typedValue = { type: typeName, value };\n\n return (\n <Stack>\n {Object.entries(typeSchema.properties).map((entry) => {\n const key = entry[0];\n if (key === 'id' || DEFAULT_IGNORED_PROPERTIES.includes(key)) {\n return null;\n }\n const property = entry[1];\n if (!property.type) {\n return null;\n }\n\n const [propertyValue, propertyType] = getValueAndType(typedValue, key);\n const required = property.min !== undefined && property.min > 0;\n\n if (property.type.length === 1 && property.type[0].code === 'boolean') {\n return (\n <CheckboxFormSection\n key={key}\n title={getPropertyDisplayName(key)}\n description={property.definition}\n htmlFor={key}\n >\n <ResourcePropertyInput\n property={property}\n name={key}\n defaultValue={propertyValue}\n defaultPropertyType={propertyType}\n outcome={props.outcome}\n onChange={(newValue: any, propName?: string) => {\n setValueWrapper(setPropertyValue(value, key, propName ?? key, entry[1], newValue));\n }}\n />\n </CheckboxFormSection>\n );\n }\n\n return (\n <FormSection\n key={key}\n title={getPropertyDisplayName(key)}\n description={property.definition}\n withAsterisk={required}\n htmlFor={key}\n outcome={props.outcome}\n >\n <ResourcePropertyInput\n property={property}\n name={key}\n defaultValue={propertyValue}\n defaultPropertyType={propertyType}\n onChange={(newValue: any, propName?: string) => {\n setValueWrapper(setPropertyValue(value, key, propName ?? key, entry[1], newValue));\n }}\n />\n </FormSection>\n );\n })}\n </Stack>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { Modal, Stack, TextInput, Group, Button, NativeSelect } from '@mantine/core';
2
- import { showNotification } from '@mantine/notifications';
3
- import { deepClone, normalizeErrorString } from '@medplum/core';
4
- import React from 'react';
5
- import { Form } from '../Form/Form.mjs';
6
- import { useMedplum } from '../MedplumProvider/MedplumProvider.mjs';
7
-
8
- function BookmarkDialog(props) {
9
- const medplum = useMedplum();
10
- const config = medplum.getUserConfiguration();
11
- function submitHandler(formData) {
12
- const { menuname, bookmarkname: name } = formData;
13
- const target = `${props.pathname}?${props.searchParams.toString()}`;
14
- const newConfig = deepClone(config);
15
- const menu = newConfig.menu?.find(({ title }) => title === menuname);
16
- menu?.link?.push({ name, target });
17
- medplum
18
- .updateResource(newConfig)
19
- .then((res) => {
20
- // refresh current config menu
21
- config.menu = res.menu;
22
- medplum.dispatchEvent({ type: 'change' });
23
- showNotification({ color: 'green', message: 'Success' });
24
- props.onOk();
25
- })
26
- .catch((err) => {
27
- showNotification({ color: 'red', message: normalizeErrorString(err) });
28
- });
29
- }
30
- return (React.createElement(Modal, { title: "Add Bookmark", closeButtonProps: { 'aria-label': 'Close' }, opened: props.visible, onClose: props.onCancel },
31
- React.createElement(Form, { onSubmit: submitHandler },
32
- React.createElement(Stack, null,
33
- React.createElement(SelectMenu, { config: config }),
34
- React.createElement(TextInput, { label: "Bookmark Name", type: "text", name: "bookmarkname", placeholder: "bookmark name", withAsterisk: true }),
35
- React.createElement(Group, { position: "right" },
36
- React.createElement(Button, { mt: "sm", type: "submit" }, "OK"))))));
37
- }
38
- function SelectMenu(props) {
39
- function userConfigToMenu(config) {
40
- return config?.menu?.map((menu) => menu.title);
41
- }
42
- const menus = userConfigToMenu(props.config);
43
- return (React.createElement(NativeSelect, { name: "menuname", defaultValue: menus[0], label: "Select Menu Option", placeholder: "Menu", data: menus, withAsterisk: true }));
44
- }
45
-
46
- export { BookmarkDialog };
47
- //# sourceMappingURL=BookmarkDialog.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BookmarkDialog.mjs","sources":["../../../src/BookmarkDialog/BookmarkDialog.tsx"],"sourcesContent":["import { Button, Group, Modal, NativeSelect, Stack, TextInput } from '@mantine/core';\nimport { showNotification } from '@mantine/notifications';\nimport { deepClone, normalizeErrorString } from '@medplum/core';\nimport { UserConfiguration } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { Form } from '../Form/Form';\nimport { useMedplum } from '../MedplumProvider/MedplumProvider';\n\ninterface BookmarkDialogProps {\n pathname: string;\n searchParams: URLSearchParams;\n visible: boolean;\n onOk: () => void;\n onCancel: () => void;\n defaultValue?: string;\n}\nexport function BookmarkDialog(props: BookmarkDialogProps): JSX.Element | null {\n const medplum = useMedplum();\n const config = medplum.getUserConfiguration() as UserConfiguration;\n\n function submitHandler(formData: Record<string, string>): void {\n const { menuname, bookmarkname: name } = formData;\n const target = `${props.pathname}?${props.searchParams.toString()}`;\n const newConfig = deepClone(config) as UserConfiguration;\n const menu = newConfig.menu?.find(({ title }) => title === menuname);\n\n menu?.link?.push({ name, target });\n medplum\n .updateResource(newConfig)\n .then((res) => {\n // refresh current config menu\n config.menu = res.menu;\n medplum.dispatchEvent({ type: 'change' });\n showNotification({ color: 'green', message: 'Success' });\n props.onOk();\n })\n .catch((err: any) => {\n showNotification({ color: 'red', message: normalizeErrorString(err) });\n });\n }\n\n return (\n <Modal\n title=\"Add Bookmark\"\n closeButtonProps={{ 'aria-label': 'Close' }}\n opened={props.visible}\n onClose={props.onCancel}\n >\n <Form onSubmit={submitHandler}>\n <Stack>\n <SelectMenu config={config}></SelectMenu>\n <TextInput label=\"Bookmark Name\" type=\"text\" name=\"bookmarkname\" placeholder=\"bookmark name\" withAsterisk />\n <Group position=\"right\">\n <Button mt=\"sm\" type=\"submit\">\n OK\n </Button>\n </Group>\n </Stack>\n </Form>\n </Modal>\n );\n}\n\ninterface SelectMenuProps {\n config: UserConfiguration | undefined;\n}\n\nfunction SelectMenu(props: SelectMenuProps): JSX.Element {\n function userConfigToMenu(config: UserConfiguration | undefined): string[] {\n return config?.menu?.map((menu) => menu.title) as [];\n }\n const menus = userConfigToMenu(props.config);\n\n return (\n <NativeSelect\n name=\"menuname\"\n defaultValue={menus[0]}\n label=\"Select Menu Option\"\n placeholder=\"Menu\"\n data={menus}\n withAsterisk\n />\n );\n}\n"],"names":[],"mappings":"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"}