@medplum/react 0.9.25 → 0.9.26

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.js.map +1 -1
  2. package/dist/cjs/index.min.js.map +1 -1
  3. package/dist/{types → esm}/AddressDisplay.d.ts +0 -0
  4. package/dist/esm/AddressDisplay.js +13 -0
  5. package/dist/esm/AddressDisplay.js.map +1 -0
  6. package/dist/{types → esm}/AddressInput.d.ts +0 -0
  7. package/dist/esm/AddressInput.js +69 -0
  8. package/dist/esm/AddressInput.js.map +1 -0
  9. package/dist/{types → esm}/AnnotationInput.d.ts +0 -0
  10. package/dist/esm/AnnotationInput.js +28 -0
  11. package/dist/esm/AnnotationInput.js.map +1 -0
  12. package/dist/{types → esm}/AttachmentArrayDisplay.d.ts +0 -0
  13. package/dist/esm/AttachmentArrayDisplay.js +11 -0
  14. package/dist/esm/AttachmentArrayDisplay.js.map +1 -0
  15. package/dist/{types → esm}/AttachmentArrayInput.d.ts +0 -0
  16. package/dist/esm/AttachmentArrayInput.js +42 -0
  17. package/dist/esm/AttachmentArrayInput.js.map +1 -0
  18. package/dist/{types → esm}/AttachmentDisplay.d.ts +0 -0
  19. package/dist/esm/AttachmentDisplay.js +20 -0
  20. package/dist/esm/AttachmentDisplay.js.map +1 -0
  21. package/dist/{types → esm}/AttachmentInput.d.ts +0 -0
  22. package/dist/esm/AttachmentInput.js +27 -0
  23. package/dist/esm/AttachmentInput.js.map +1 -0
  24. package/dist/{types → esm}/Autocomplete.d.ts +0 -0
  25. package/dist/esm/Autocomplete.js +284 -0
  26. package/dist/esm/Autocomplete.js.map +1 -0
  27. package/dist/{types → esm}/Avatar.d.ts +0 -0
  28. package/dist/esm/Avatar.js +24 -0
  29. package/dist/esm/Avatar.js.map +1 -0
  30. package/dist/{types → esm}/BackboneElementDisplay.d.ts +0 -0
  31. package/dist/esm/BackboneElementDisplay.js +43 -0
  32. package/dist/esm/BackboneElementDisplay.js.map +1 -0
  33. package/dist/{types → esm}/BackboneElementInput.d.ts +0 -0
  34. package/dist/esm/BackboneElementInput.js +51 -0
  35. package/dist/esm/BackboneElementInput.js.map +1 -0
  36. package/dist/{types → esm}/Button.d.ts +0 -0
  37. package/dist/esm/Button.js +13 -0
  38. package/dist/esm/Button.js.map +1 -0
  39. package/dist/{types → esm}/CalendarInput.d.ts +0 -0
  40. package/dist/esm/CalendarInput.js +96 -0
  41. package/dist/esm/CalendarInput.js.map +1 -0
  42. package/dist/{types → esm}/Checkbox.d.ts +0 -0
  43. package/dist/esm/Checkbox.js +13 -0
  44. package/dist/esm/Checkbox.js.map +1 -0
  45. package/dist/{types → esm}/CheckboxFormSection.d.ts +0 -0
  46. package/dist/esm/CheckboxFormSection.js +12 -0
  47. package/dist/esm/CheckboxFormSection.js.map +1 -0
  48. package/dist/{types → esm}/CodeInput.d.ts +0 -0
  49. package/dist/esm/CodeInput.js +28 -0
  50. package/dist/esm/CodeInput.js.map +1 -0
  51. package/dist/{types → esm}/CodeableConceptDisplay.d.ts +0 -0
  52. package/dist/esm/CodeableConceptDisplay.js +19 -0
  53. package/dist/esm/CodeableConceptDisplay.js.map +1 -0
  54. package/dist/{types → esm}/CodeableConceptInput.d.ts +0 -0
  55. package/dist/esm/CodeableConceptInput.js +52 -0
  56. package/dist/esm/CodeableConceptInput.js.map +1 -0
  57. package/dist/{types → esm}/CodingDisplay.d.ts +0 -0
  58. package/dist/esm/CodingDisplay.js +9 -0
  59. package/dist/esm/CodingDisplay.js.map +1 -0
  60. package/dist/{types → esm}/CodingInput.d.ts +0 -0
  61. package/dist/esm/CodingInput.js +30 -0
  62. package/dist/esm/CodingInput.js.map +1 -0
  63. package/dist/{types → esm}/ContactDetailDisplay.d.ts +0 -0
  64. package/dist/esm/ContactDetailDisplay.js +17 -0
  65. package/dist/esm/ContactDetailDisplay.js.map +1 -0
  66. package/dist/{types → esm}/ContactDetailInput.d.ts +0 -0
  67. package/dist/esm/ContactDetailInput.js +37 -0
  68. package/dist/esm/ContactDetailInput.js.map +1 -0
  69. package/dist/{types → esm}/ContactPointDisplay.d.ts +0 -0
  70. package/dist/esm/ContactPointDisplay.js +29 -0
  71. package/dist/esm/ContactPointDisplay.js.map +1 -0
  72. package/dist/{types → esm}/ContactPointInput.d.ts +0 -0
  73. package/dist/esm/ContactPointInput.js +60 -0
  74. package/dist/esm/ContactPointInput.js.map +1 -0
  75. package/dist/{types → esm}/DateTimeDisplay.d.ts +0 -0
  76. package/dist/esm/DateTimeDisplay.js +11 -0
  77. package/dist/esm/DateTimeDisplay.js.map +1 -0
  78. package/dist/{types → esm}/DateTimeInput.d.ts +0 -0
  79. package/dist/esm/DateTimeInput.js +62 -0
  80. package/dist/esm/DateTimeInput.js.map +1 -0
  81. package/dist/{types → esm}/DefaultResourceTimeline.d.ts +0 -0
  82. package/dist/esm/DefaultResourceTimeline.js +27 -0
  83. package/dist/esm/DefaultResourceTimeline.js.map +1 -0
  84. package/dist/{types → esm}/DescriptionList.d.ts +0 -0
  85. package/dist/esm/DescriptionList.js +13 -0
  86. package/dist/esm/DescriptionList.js.map +1 -0
  87. package/dist/{types → esm}/DiagnosticReportDisplay.d.ts +0 -0
  88. package/dist/esm/DiagnosticReportDisplay.js +103 -0
  89. package/dist/esm/DiagnosticReportDisplay.js.map +1 -0
  90. package/dist/{types → esm}/Dialog.d.ts +0 -0
  91. package/dist/esm/Dialog.js +43 -0
  92. package/dist/esm/Dialog.js.map +1 -0
  93. package/dist/{types → esm}/Document.d.ts +0 -0
  94. package/dist/esm/Document.js +9 -0
  95. package/dist/esm/Document.js.map +1 -0
  96. package/dist/{types → esm}/EncounterTimeline.d.ts +0 -0
  97. package/dist/esm/EncounterTimeline.js +47 -0
  98. package/dist/esm/EncounterTimeline.js.map +1 -0
  99. package/dist/{types → esm}/ErrorBoundary.d.ts +0 -0
  100. package/dist/esm/ErrorBoundary.js +27 -0
  101. package/dist/esm/ErrorBoundary.js.map +1 -0
  102. package/dist/{types → esm}/ExtensionInput.d.ts +0 -0
  103. package/dist/esm/ExtensionInput.js +14 -0
  104. package/dist/esm/ExtensionInput.js.map +1 -0
  105. package/dist/{types → esm}/FhirPathDisplay.d.ts +0 -0
  106. package/dist/esm/FhirPathDisplay.js +23 -0
  107. package/dist/esm/FhirPathDisplay.js.map +1 -0
  108. package/dist/{types → esm}/FhirPathTable.d.ts +0 -0
  109. package/dist/esm/FhirPathTable.js +117 -0
  110. package/dist/esm/FhirPathTable.js.map +1 -0
  111. package/dist/{types → esm}/FooterLinks.d.ts +0 -0
  112. package/dist/esm/FooterLinks.js +8 -0
  113. package/dist/esm/FooterLinks.js.map +1 -0
  114. package/dist/{types → esm}/Form.d.ts +0 -0
  115. package/dist/esm/Form.js +15 -0
  116. package/dist/esm/Form.js.map +1 -0
  117. package/dist/{types → esm}/FormSection.d.ts +0 -0
  118. package/dist/esm/FormSection.js +18 -0
  119. package/dist/esm/FormSection.js.map +1 -0
  120. package/dist/{types → esm}/FormUtils.d.ts +0 -0
  121. package/dist/esm/FormUtils.js +49 -0
  122. package/dist/esm/FormUtils.js.map +1 -0
  123. package/dist/{types → esm}/GoogleButton.d.ts +0 -0
  124. package/dist/esm/GoogleButton.js +48 -0
  125. package/dist/esm/GoogleButton.js.map +1 -0
  126. package/dist/{types → esm}/Header.d.ts +0 -0
  127. package/dist/esm/Header.js +95 -0
  128. package/dist/esm/Header.js.map +1 -0
  129. package/dist/{types → esm}/HeaderSearchInput.d.ts +0 -0
  130. package/dist/esm/HeaderSearchInput.js +181 -0
  131. package/dist/esm/HeaderSearchInput.js.map +1 -0
  132. package/dist/{types → esm}/HumanNameDisplay.d.ts +0 -0
  133. package/dist/esm/HumanNameDisplay.js +13 -0
  134. package/dist/esm/HumanNameDisplay.js.map +1 -0
  135. package/dist/{types → esm}/HumanNameInput.d.ts +0 -0
  136. package/dist/esm/HumanNameInput.js +49 -0
  137. package/dist/esm/HumanNameInput.js.map +1 -0
  138. package/dist/{types → esm}/IdentifierDisplay.d.ts +0 -0
  139. package/dist/esm/IdentifierDisplay.js +12 -0
  140. package/dist/esm/IdentifierDisplay.js.map +1 -0
  141. package/dist/{types → esm}/IdentifierInput.d.ts +0 -0
  142. package/dist/esm/IdentifierInput.js +19 -0
  143. package/dist/esm/IdentifierInput.js.map +1 -0
  144. package/dist/{types → esm}/Input.d.ts +0 -0
  145. package/dist/esm/Input.js +26 -0
  146. package/dist/esm/Input.js.map +1 -0
  147. package/dist/{types → esm}/InputRow.d.ts +0 -0
  148. package/dist/esm/InputRow.js +8 -0
  149. package/dist/esm/InputRow.js.map +1 -0
  150. package/dist/{types → esm}/Loading.d.ts +0 -0
  151. package/dist/esm/Loading.js +11 -0
  152. package/dist/esm/Loading.js.map +1 -0
  153. package/dist/{types → esm}/Logo.d.ts +0 -0
  154. package/dist/esm/Logo.js +14 -0
  155. package/dist/esm/Logo.js.map +1 -0
  156. package/dist/{types → esm}/MedplumLink.d.ts +0 -0
  157. package/dist/esm/MedplumLink.js +34 -0
  158. package/dist/esm/MedplumLink.js.map +1 -0
  159. package/dist/{types → esm}/MedplumProvider.d.ts +0 -0
  160. package/dist/esm/MedplumProvider.js +50 -0
  161. package/dist/esm/MedplumProvider.js.map +1 -0
  162. package/dist/{types → esm}/MenuItem.d.ts +0 -0
  163. package/dist/esm/MenuItem.js +8 -0
  164. package/dist/esm/MenuItem.js.map +1 -0
  165. package/dist/{types → esm}/MenuSeparator.d.ts +0 -0
  166. package/dist/esm/MenuSeparator.js +8 -0
  167. package/dist/esm/MenuSeparator.js.map +1 -0
  168. package/dist/{types → esm}/PatientTimeline.d.ts +0 -0
  169. package/dist/esm/PatientTimeline.js +40 -0
  170. package/dist/esm/PatientTimeline.js.map +1 -0
  171. package/dist/{types → esm}/PeriodDisplay.d.ts +0 -0
  172. package/dist/esm/PeriodDisplay.js +16 -0
  173. package/dist/esm/PeriodDisplay.js.map +1 -0
  174. package/dist/{types → esm}/PeriodInput.d.ts +0 -0
  175. package/dist/esm/PeriodInput.js +19 -0
  176. package/dist/esm/PeriodInput.js.map +1 -0
  177. package/dist/{types → esm}/PlanDefinitionBuilder.d.ts +0 -0
  178. package/dist/esm/PlanDefinitionBuilder.js +155 -0
  179. package/dist/esm/PlanDefinitionBuilder.js.map +1 -0
  180. package/dist/{types → esm}/Popup.d.ts +0 -0
  181. package/dist/esm/Popup.js +64 -0
  182. package/dist/esm/Popup.js.map +1 -0
  183. package/dist/{types → esm}/QuantityDisplay.d.ts +0 -0
  184. package/dist/esm/QuantityDisplay.js +28 -0
  185. package/dist/esm/QuantityDisplay.js.map +1 -0
  186. package/dist/{types → esm}/QuantityInput.d.ts +0 -0
  187. package/dist/esm/QuantityInput.js +33 -0
  188. package/dist/esm/QuantityInput.js.map +1 -0
  189. package/dist/{types → esm}/QuestionnaireBuilder.d.ts +0 -0
  190. package/dist/esm/QuestionnaireBuilder.js +217 -0
  191. package/dist/esm/QuestionnaireBuilder.js.map +1 -0
  192. package/dist/{types → esm}/QuestionnaireForm.d.ts +0 -0
  193. package/dist/esm/QuestionnaireForm.js +215 -0
  194. package/dist/esm/QuestionnaireForm.js.map +1 -0
  195. package/dist/{types → esm}/QuestionnaireUtils.d.ts +0 -0
  196. package/dist/esm/QuestionnaireUtils.js +103 -0
  197. package/dist/esm/QuestionnaireUtils.js.map +1 -0
  198. package/dist/{types → esm}/RangeDisplay.d.ts +0 -0
  199. package/dist/esm/RangeDisplay.js +21 -0
  200. package/dist/esm/RangeDisplay.js.map +1 -0
  201. package/dist/{types → esm}/RangeInput.d.ts +0 -0
  202. package/dist/esm/RangeInput.js +25 -0
  203. package/dist/esm/RangeInput.js.map +1 -0
  204. package/dist/{types → esm}/RatioDisplay.d.ts +0 -0
  205. package/dist/esm/RatioDisplay.js +16 -0
  206. package/dist/esm/RatioDisplay.js.map +1 -0
  207. package/dist/{types → esm}/RatioInput.d.ts +0 -0
  208. package/dist/esm/RatioInput.js +25 -0
  209. package/dist/esm/RatioInput.js.map +1 -0
  210. package/dist/{types → esm}/ReferenceDisplay.d.ts +0 -0
  211. package/dist/esm/ReferenceDisplay.js +21 -0
  212. package/dist/esm/ReferenceDisplay.js.map +1 -0
  213. package/dist/{types → esm}/ReferenceInput.d.ts +0 -0
  214. package/dist/esm/ReferenceInput.js +42 -0
  215. package/dist/esm/ReferenceInput.js.map +1 -0
  216. package/dist/{types → esm}/RegisterForm.d.ts +0 -0
  217. package/dist/esm/RegisterForm.js +110 -0
  218. package/dist/esm/RegisterForm.js.map +1 -0
  219. package/dist/{types → esm}/RequestGroupDisplay.d.ts +0 -0
  220. package/dist/esm/RequestGroupDisplay.js +73 -0
  221. package/dist/esm/RequestGroupDisplay.js.map +1 -0
  222. package/dist/{types → esm}/ResourceArrayDisplay.d.ts +0 -0
  223. package/dist/esm/ResourceArrayDisplay.js +14 -0
  224. package/dist/esm/ResourceArrayDisplay.js.map +1 -0
  225. package/dist/{types → esm}/ResourceArrayInput.d.ts +0 -0
  226. package/dist/esm/ResourceArrayInput.js +48 -0
  227. package/dist/esm/ResourceArrayInput.js.map +1 -0
  228. package/dist/{types → esm}/ResourceBadge.d.ts +0 -0
  229. package/dist/esm/ResourceBadge.js +13 -0
  230. package/dist/esm/ResourceBadge.js.map +1 -0
  231. package/dist/{types → esm}/ResourceBlame.d.ts +0 -0
  232. package/dist/esm/ResourceBlame.js +65 -0
  233. package/dist/esm/ResourceBlame.js.map +1 -0
  234. package/dist/{types → esm}/ResourceDiff.d.ts +0 -0
  235. package/dist/esm/ResourceDiff.js +28 -0
  236. package/dist/esm/ResourceDiff.js.map +1 -0
  237. package/dist/{types → esm}/ResourceDiffTable.d.ts +0 -0
  238. package/dist/esm/ResourceDiffTable.js +58 -0
  239. package/dist/esm/ResourceDiffTable.js.map +1 -0
  240. package/dist/{types → esm}/ResourceForm.d.ts +0 -0
  241. package/dist/esm/ResourceForm.js +55 -0
  242. package/dist/esm/ResourceForm.js.map +1 -0
  243. package/dist/{types → esm}/ResourceHistoryTable.d.ts +0 -0
  244. package/dist/esm/ResourceHistoryTable.js +46 -0
  245. package/dist/esm/ResourceHistoryTable.js.map +1 -0
  246. package/dist/{types → esm}/ResourceInput.d.ts +0 -0
  247. package/dist/esm/ResourceInput.js +40 -0
  248. package/dist/esm/ResourceInput.js.map +1 -0
  249. package/dist/{types → esm}/ResourceName.d.ts +0 -0
  250. package/dist/esm/ResourceName.js +16 -0
  251. package/dist/esm/ResourceName.js.map +1 -0
  252. package/dist/{types → esm}/ResourcePropertyDisplay.d.ts +0 -0
  253. package/dist/esm/ResourcePropertyDisplay.js +107 -0
  254. package/dist/esm/ResourcePropertyDisplay.js.map +1 -0
  255. package/dist/{types → esm}/ResourcePropertyInput.d.ts +0 -0
  256. package/dist/esm/ResourcePropertyInput.js +151 -0
  257. package/dist/esm/ResourcePropertyInput.js.map +1 -0
  258. package/dist/{types → esm}/ResourceTable.d.ts +0 -0
  259. package/dist/esm/ResourceTable.js +22 -0
  260. package/dist/esm/ResourceTable.js.map +1 -0
  261. package/dist/{types → esm}/ResourceTimeline.d.ts +0 -0
  262. package/dist/esm/ResourceTimeline.js +221 -0
  263. package/dist/esm/ResourceTimeline.js.map +1 -0
  264. package/dist/{types → esm}/Scheduler.d.ts +0 -0
  265. package/dist/esm/Scheduler.js +82 -0
  266. package/dist/esm/Scheduler.js.map +1 -0
  267. package/dist/{types → esm}/Scrollable.d.ts +0 -0
  268. package/dist/esm/Scrollable.js +12 -0
  269. package/dist/esm/Scrollable.js.map +1 -0
  270. package/dist/{types → esm}/SearchControl.d.ts +0 -0
  271. package/dist/esm/SearchControl.js +268 -0
  272. package/dist/esm/SearchControl.js.map +1 -0
  273. package/dist/{types → esm}/SearchControlField.d.ts +0 -0
  274. package/dist/esm/SearchControlField.js +98 -0
  275. package/dist/esm/SearchControlField.js.map +1 -0
  276. package/dist/{types → esm}/SearchFieldEditor.d.ts +0 -0
  277. package/dist/esm/SearchFieldEditor.js +192 -0
  278. package/dist/esm/SearchFieldEditor.js.map +1 -0
  279. package/dist/{types → esm}/SearchFilterEditor.d.ts +0 -0
  280. package/dist/esm/SearchFilterEditor.js +103 -0
  281. package/dist/esm/SearchFilterEditor.js.map +1 -0
  282. package/dist/{types → esm}/SearchFilterValueDialog.d.ts +0 -0
  283. package/dist/esm/SearchFilterValueDialog.js +22 -0
  284. package/dist/esm/SearchFilterValueDialog.js.map +1 -0
  285. package/dist/{types → esm}/SearchFilterValueDisplay.d.ts +0 -0
  286. package/dist/esm/SearchFilterValueDisplay.js +22 -0
  287. package/dist/esm/SearchFilterValueDisplay.js.map +1 -0
  288. package/dist/{types → esm}/SearchFilterValueInput.d.ts +0 -0
  289. package/dist/esm/SearchFilterValueInput.js +59 -0
  290. package/dist/esm/SearchFilterValueInput.js.map +1 -0
  291. package/dist/{types → esm}/SearchPopupMenu.d.ts +0 -0
  292. package/dist/esm/SearchPopupMenu.js +135 -0
  293. package/dist/esm/SearchPopupMenu.js.map +1 -0
  294. package/dist/{types → esm}/SearchUtils.d.ts +0 -0
  295. package/dist/esm/SearchUtils.js +488 -0
  296. package/dist/esm/SearchUtils.js.map +1 -0
  297. package/dist/{types → esm}/Select.d.ts +0 -0
  298. package/dist/esm/Select.js +16 -0
  299. package/dist/esm/Select.js.map +1 -0
  300. package/dist/{types → esm}/ServiceRequestTimeline.d.ts +0 -0
  301. package/dist/esm/ServiceRequestTimeline.js +53 -0
  302. package/dist/esm/ServiceRequestTimeline.js.map +1 -0
  303. package/dist/{types → esm}/SignInForm.d.ts +0 -0
  304. package/dist/esm/SignInForm.js +130 -0
  305. package/dist/esm/SignInForm.js.map +1 -0
  306. package/dist/{types → esm}/StatusBadge.d.ts +0 -0
  307. package/dist/esm/StatusBadge.js +8 -0
  308. package/dist/esm/StatusBadge.js.map +1 -0
  309. package/dist/{types → esm}/SubMenu.d.ts +0 -0
  310. package/dist/esm/SubMenu.js +38 -0
  311. package/dist/esm/SubMenu.js.map +1 -0
  312. package/dist/{types → esm}/Tab.d.ts +0 -0
  313. package/dist/esm/Tab.js +19 -0
  314. package/dist/esm/Tab.js.map +1 -0
  315. package/dist/{types → esm}/TabList.d.ts +0 -0
  316. package/dist/esm/TabList.js +23 -0
  317. package/dist/esm/TabList.js.map +1 -0
  318. package/dist/{types → esm}/TabPanel.d.ts +0 -0
  319. package/dist/esm/TabPanel.js +8 -0
  320. package/dist/esm/TabPanel.js.map +1 -0
  321. package/dist/{types → esm}/TabSwitch.d.ts +0 -0
  322. package/dist/esm/TabSwitch.js +16 -0
  323. package/dist/esm/TabSwitch.js.map +1 -0
  324. package/dist/{types → esm}/TextArea.d.ts +0 -0
  325. package/dist/esm/TextArea.js +16 -0
  326. package/dist/esm/TextArea.js.map +1 -0
  327. package/dist/{types → esm}/Timeline.d.ts +0 -0
  328. package/dist/esm/Timeline.js +50 -0
  329. package/dist/esm/Timeline.js.map +1 -0
  330. package/dist/{types → esm}/TitleBar.d.ts +0 -0
  331. package/dist/esm/TitleBar.js +8 -0
  332. package/dist/esm/TitleBar.js.map +1 -0
  333. package/dist/{types → esm}/UploadButton.d.ts +0 -0
  334. package/dist/esm/UploadButton.js +55 -0
  335. package/dist/esm/UploadButton.js.map +1 -0
  336. package/dist/{types → esm}/constants.d.ts +0 -0
  337. package/dist/esm/constants.js +12 -0
  338. package/dist/esm/constants.js.map +1 -0
  339. package/dist/{types → esm}/index.d.ts +0 -0
  340. package/dist/esm/index.js +87 -5814
  341. package/dist/esm/index.js.map +1 -1
  342. package/dist/esm/index.min.js.map +1 -1
  343. package/dist/esm/node_modules/tslib/tslib.es6.js +27 -0
  344. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  345. package/dist/{types → esm}/stories/AddressInput.stories.d.ts +0 -0
  346. package/dist/{types → esm}/stories/AttachmentArrayInput.stories.d.ts +0 -0
  347. package/dist/{types → esm}/stories/AttachmentInput.stories.d.ts +0 -0
  348. package/dist/{types → esm}/stories/Autocomplete.stories.d.ts +0 -0
  349. package/dist/{types → esm}/stories/Avatar.stories.d.ts +0 -0
  350. package/dist/{types → esm}/stories/Button.stories.d.ts +0 -0
  351. package/dist/{types → esm}/stories/DiagnosticReportDisplay.stories.d.ts +0 -0
  352. package/dist/{types → esm}/stories/Dialog.stories.d.ts +0 -0
  353. package/dist/{types → esm}/stories/EncounterTimeline.stories.d.ts +0 -0
  354. package/dist/{types → esm}/stories/FhirPathDisplay.stories.d.ts +0 -0
  355. package/dist/{types → esm}/stories/FormSection.stories.d.ts +0 -0
  356. package/dist/{types → esm}/stories/Header.stories.d.ts +0 -0
  357. package/dist/{types → esm}/stories/Input.stories.d.ts +0 -0
  358. package/dist/{types → esm}/stories/Loading.stories.d.ts +0 -0
  359. package/dist/{types → esm}/stories/Logo.stories.d.ts +0 -0
  360. package/dist/{types → esm}/stories/PatientTimeline.stories.d.ts +0 -0
  361. package/dist/{types → esm}/stories/PlanDefinitionBuilder.stories.d.ts +0 -0
  362. package/dist/{types → esm}/stories/QuestionnaireBuilder.stories.d.ts +0 -0
  363. package/dist/{types → esm}/stories/QuestionnaireForm.stories.d.ts +0 -0
  364. package/dist/{types → esm}/stories/ReferenceInput.stories.d.ts +0 -0
  365. package/dist/{types → esm}/stories/RegisterForm.stories.d.ts +0 -0
  366. package/dist/{types → esm}/stories/RequestGroupDisplay.stories.d.ts +0 -0
  367. package/dist/{types → esm}/stories/ResourceBlame.stories.d.ts +0 -0
  368. package/dist/{types → esm}/stories/ResourceForm.stories.d.ts +0 -0
  369. package/dist/{types → esm}/stories/ResourceHistoryTable.stories.d.ts +0 -0
  370. package/dist/{types → esm}/stories/ResourceTable.stories.d.ts +0 -0
  371. package/dist/{types → esm}/stories/Scheduler.stories.d.ts +0 -0
  372. package/dist/{types → esm}/stories/SearchControl.stories.d.ts +0 -0
  373. package/dist/{types → esm}/stories/Select.stories.d.ts +0 -0
  374. package/dist/{types → esm}/stories/SignInForm.stories.d.ts +0 -0
  375. package/dist/{types → esm}/stories/StatusBadge.stories.d.ts +0 -0
  376. package/dist/{types → esm}/stories/Tabs.stories.d.ts +0 -0
  377. package/dist/{types → esm}/stories/Timeline.stories.d.ts +0 -0
  378. package/dist/{types → esm}/stories/UploadButton.stories.d.ts +0 -0
  379. package/dist/{types → esm}/test.setup.d.ts +0 -0
  380. package/dist/{types → esm}/useResource.d.ts +0 -0
  381. package/dist/esm/useResource.js +65 -0
  382. package/dist/esm/useResource.js.map +1 -0
  383. package/dist/{types → esm}/utils/blame.d.ts +0 -0
  384. package/dist/esm/utils/blame.js +74 -0
  385. package/dist/esm/utils/blame.js.map +1 -0
  386. package/dist/{types → esm}/utils/date.d.ts +0 -0
  387. package/dist/esm/utils/date.js +48 -0
  388. package/dist/esm/utils/date.js.map +1 -0
  389. package/dist/{types → esm}/utils/diff.d.ts +0 -0
  390. package/dist/esm/utils/diff.js +118 -0
  391. package/dist/esm/utils/diff.js.map +1 -0
  392. package/dist/{types → esm}/utils/dom.d.ts +0 -0
  393. package/dist/esm/utils/dom.js +34 -0
  394. package/dist/esm/utils/dom.js.map +1 -0
  395. package/dist/{types → esm}/utils/outcomes.d.ts +0 -0
  396. package/dist/esm/utils/outcomes.js +7 -0
  397. package/dist/esm/utils/outcomes.js.map +1 -0
  398. package/dist/{types → esm}/utils/recaptcha.d.ts +0 -0
  399. package/dist/esm/utils/recaptcha.js +27 -0
  400. package/dist/esm/utils/recaptcha.js.map +1 -0
  401. package/dist/{types → esm}/utils.d.ts +0 -0
  402. package/dist/esm/utils.js +15 -0
  403. package/dist/esm/utils.js.map +1 -0
  404. package/package.json +7 -7
  405. package/stats.html +4034 -0
  406. package/tsconfig.cjs.json +7 -0
  407. package/tsconfig.esm.json +7 -0
@@ -0,0 +1,181 @@
1
+ import { __awaiter } from './node_modules/tslib/tslib.es6.js';
2
+ import { isUUID, formatHumanName } from '@medplum/core';
3
+ import React from 'react';
4
+ import { Autocomplete } from './Autocomplete.js';
5
+ import { Avatar } from './Avatar.js';
6
+ import { useMedplum } from './MedplumProvider.js';
7
+ import { ResourceName } from './ResourceName.js';
8
+
9
+ function HeaderSearchInput(props) {
10
+ const medplum = useMedplum();
11
+ return (React.createElement(Autocomplete, { loadOptions: (input, signal) => __awaiter(this, void 0, void 0, function* () {
12
+ return getResourcesFromResponse((yield medplum.graphql(buildGraphQLQuery(input), undefined, undefined, { signal })), input);
13
+ }), getId: (item) => {
14
+ return item.id;
15
+ }, getIcon: (item) => React.createElement(Avatar, { value: item }), getDisplay: (item) => React.createElement(ResourceName, { value: item }), getHelpText: (item) => {
16
+ var _a;
17
+ if (item.resourceType === 'Patient' && item.birthDate) {
18
+ return 'DoB: ' + item.birthDate;
19
+ }
20
+ return (_a = item.subject) === null || _a === void 0 ? void 0 : _a.display;
21
+ }, name: props.name, className: props.className, placeholder: props.placeholder, onChange: (items) => props.onChange(items[0]) }));
22
+ }
23
+ function buildGraphQLQuery(input) {
24
+ const escaped = JSON.stringify(input);
25
+ if (isUUID(input)) {
26
+ return `{
27
+ Patients1: PatientList(_id: ${escaped}, _count: 1) {
28
+ resourceType
29
+ id
30
+ identifier {
31
+ system
32
+ value
33
+ }
34
+ name {
35
+ given
36
+ family
37
+ }
38
+ birthDate
39
+ }
40
+ ServiceRequestList(_id: ${escaped}, _count: 1) {
41
+ resourceType
42
+ id
43
+ identifier {
44
+ system
45
+ value
46
+ }
47
+ subject {
48
+ display
49
+ }
50
+ }
51
+ }`.replace(/\s+/g, ' ');
52
+ }
53
+ return `{
54
+ Patients1: PatientList(name: ${escaped}, _count: 5) {
55
+ resourceType
56
+ id
57
+ identifier {
58
+ system
59
+ value
60
+ }
61
+ name {
62
+ given
63
+ family
64
+ }
65
+ birthDate
66
+ }
67
+ Patients2: PatientList(identifier: ${escaped}, _count: 5) {
68
+ resourceType
69
+ id
70
+ identifier {
71
+ system
72
+ value
73
+ }
74
+ name {
75
+ given
76
+ family
77
+ }
78
+ birthDate
79
+ }
80
+ ServiceRequestList(identifier: ${escaped}, _count: 5) {
81
+ resourceType
82
+ id
83
+ identifier {
84
+ system
85
+ value
86
+ }
87
+ subject {
88
+ display
89
+ }
90
+ }
91
+ }`.replace(/\s+/g, ' ');
92
+ }
93
+ /**
94
+ * Returns a de-duped and sorted list of resources from the search response.
95
+ * The search request is actually 3+ separate searches, which can include duplicates.
96
+ * This function combines the results, de-dupes, and sorts by relevance.
97
+ * @param response The response from a search query.
98
+ * @param query The user entered search query.
99
+ * @returns The resources to display in the autocomplete.
100
+ */
101
+ function getResourcesFromResponse(response, query) {
102
+ const resources = [];
103
+ if (response.data.Patients1) {
104
+ resources.push(...response.data.Patients1);
105
+ }
106
+ if (response.data.Patients2) {
107
+ resources.push(...response.data.Patients2);
108
+ }
109
+ if (response.data.ServiceRequestList) {
110
+ resources.push(...response.data.ServiceRequestList);
111
+ }
112
+ return sortByRelevance(dedupeResources(resources), query).slice(0, 5);
113
+ }
114
+ /**
115
+ * Removes duplicate resources from an array by ID.
116
+ * @param resources The array of resources with possible duplicates.
117
+ * @returns The array of resources with no duplicates.
118
+ */
119
+ function dedupeResources(resources) {
120
+ const ids = new Set();
121
+ const result = [];
122
+ for (const resource of resources) {
123
+ if (!ids.has(resource.id)) {
124
+ ids.add(resource.id);
125
+ result.push(resource);
126
+ }
127
+ }
128
+ return result;
129
+ }
130
+ /**
131
+ * Sorts an array of resources by relevance.
132
+ * @param resources The candidate resources.
133
+ * @param query The user entered search string.
134
+ * @returns The sorted array of resources.
135
+ */
136
+ function sortByRelevance(resources, query) {
137
+ return resources.sort((a, b) => {
138
+ return getResourceScore(b, query) - getResourceScore(a, query);
139
+ });
140
+ }
141
+ /**
142
+ * Calculates a relevance score of a candidate resource.
143
+ * Higher scores are better.
144
+ * @param resource The candidate resource.
145
+ * @param query The user entered search string.
146
+ * @returns The relevance score of the candidate resource.
147
+ */
148
+ function getResourceScore(resource, query) {
149
+ let bestScore = 0;
150
+ if (resource.identifier) {
151
+ for (const identifier of resource.identifier) {
152
+ bestScore = Math.max(bestScore, getStringScore(identifier.value, query));
153
+ }
154
+ }
155
+ if (resource.resourceType === 'Patient' && resource.name) {
156
+ for (const name of resource.name) {
157
+ bestScore = Math.max(bestScore, getStringScore(formatHumanName(name), query));
158
+ }
159
+ }
160
+ return bestScore;
161
+ }
162
+ /**
163
+ * Calculates a relevance score of a candidate display string.
164
+ * Higher scores are better.
165
+ * @param str The candidate display string.
166
+ * @param query The user entered search string.
167
+ * @returns The relevance score of the candidate string.
168
+ */
169
+ function getStringScore(str, query) {
170
+ if (!str) {
171
+ return 0;
172
+ }
173
+ const index = str.toLowerCase().indexOf(query.toLowerCase());
174
+ if (index < 0) {
175
+ return 0;
176
+ }
177
+ return 100 - index;
178
+ }
179
+
180
+ export { HeaderSearchInput };
181
+ //# sourceMappingURL=HeaderSearchInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderSearchInput.js","sources":["../../src/HeaderSearchInput.tsx"],"sourcesContent":["import { formatHumanName, isUUID } from '@medplum/core';\nimport { Patient, ServiceRequest } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { Autocomplete } from './Autocomplete';\nimport { Avatar } from './Avatar';\nimport { useMedplum } from './MedplumProvider';\nimport { ResourceName } from './ResourceName';\n\nexport type HeaderSearchTypes = Patient | ServiceRequest;\n\nexport interface HeaderSearchInputProps {\n readonly name: string;\n readonly className?: string;\n readonly placeholder?: string;\n readonly onChange: (value: HeaderSearchTypes) => void;\n}\n\ninterface SearchGraphQLResponse {\n readonly data: {\n readonly Patients1: Patient[] | undefined;\n readonly Patients2: Patient[] | undefined;\n readonly ServiceRequestList: ServiceRequest[] | undefined;\n };\n}\n\nexport function HeaderSearchInput(props: HeaderSearchInputProps): JSX.Element {\n const medplum = useMedplum();\n return (\n <Autocomplete\n loadOptions={async (input: string, signal: AbortSignal): Promise<HeaderSearchTypes[]> => {\n return getResourcesFromResponse(\n (await medplum.graphql(buildGraphQLQuery(input), undefined, undefined, { signal })) as SearchGraphQLResponse,\n input\n );\n }}\n getId={(item: HeaderSearchTypes) => {\n return item.id as string;\n }}\n getIcon={(item: HeaderSearchTypes) => <Avatar value={item} />}\n getDisplay={(item: HeaderSearchTypes) => <ResourceName value={item} />}\n getHelpText={(item: HeaderSearchTypes) => {\n if (item.resourceType === 'Patient' && item.birthDate) {\n return 'DoB: ' + item.birthDate;\n }\n return (item as ServiceRequest).subject?.display;\n }}\n name={props.name}\n className={props.className}\n placeholder={props.placeholder}\n onChange={(items: HeaderSearchTypes[]) => props.onChange(items[0])}\n />\n );\n}\n\nfunction buildGraphQLQuery(input: string): string {\n const escaped = JSON.stringify(input);\n if (isUUID(input)) {\n return `{\n Patients1: PatientList(_id: ${escaped}, _count: 1) {\n resourceType\n id\n identifier {\n system\n value\n }\n name {\n given\n family\n }\n birthDate\n }\n ServiceRequestList(_id: ${escaped}, _count: 1) {\n resourceType\n id\n identifier {\n system\n value\n }\n subject {\n display\n }\n }\n }`.replace(/\\s+/g, ' ');\n }\n return `{\n Patients1: PatientList(name: ${escaped}, _count: 5) {\n resourceType\n id\n identifier {\n system\n value\n }\n name {\n given\n family\n }\n birthDate\n }\n Patients2: PatientList(identifier: ${escaped}, _count: 5) {\n resourceType\n id\n identifier {\n system\n value\n }\n name {\n given\n family\n }\n birthDate\n }\n ServiceRequestList(identifier: ${escaped}, _count: 5) {\n resourceType\n id\n identifier {\n system\n value\n }\n subject {\n display\n }\n }\n }`.replace(/\\s+/g, ' ');\n}\n\n/**\n * Returns a de-duped and sorted list of resources from the search response.\n * The search request is actually 3+ separate searches, which can include duplicates.\n * This function combines the results, de-dupes, and sorts by relevance.\n * @param response The response from a search query.\n * @param query The user entered search query.\n * @returns The resources to display in the autocomplete.\n */\nfunction getResourcesFromResponse(response: SearchGraphQLResponse, query: string): HeaderSearchTypes[] {\n const resources = [];\n if (response.data.Patients1) {\n resources.push(...response.data.Patients1);\n }\n if (response.data.Patients2) {\n resources.push(...response.data.Patients2);\n }\n if (response.data.ServiceRequestList) {\n resources.push(...response.data.ServiceRequestList);\n }\n return sortByRelevance(dedupeResources(resources), query).slice(0, 5);\n}\n\n/**\n * Removes duplicate resources from an array by ID.\n * @param resources The array of resources with possible duplicates.\n * @returns The array of resources with no duplicates.\n */\nfunction dedupeResources(resources: HeaderSearchTypes[]): HeaderSearchTypes[] {\n const ids = new Set<string>();\n const result = [];\n\n for (const resource of resources) {\n if (!ids.has(resource.id as string)) {\n ids.add(resource.id as string);\n result.push(resource);\n }\n }\n\n return result;\n}\n\n/**\n * Sorts an array of resources by relevance.\n * @param resources The candidate resources.\n * @param query The user entered search string.\n * @returns The sorted array of resources.\n */\nfunction sortByRelevance(resources: HeaderSearchTypes[], query: string): HeaderSearchTypes[] {\n return resources.sort((a: HeaderSearchTypes, b: HeaderSearchTypes) => {\n return getResourceScore(b, query) - getResourceScore(a, query);\n });\n}\n\n/**\n * Calculates a relevance score of a candidate resource.\n * Higher scores are better.\n * @param resource The candidate resource.\n * @param query The user entered search string.\n * @returns The relevance score of the candidate resource.\n */\nfunction getResourceScore(resource: HeaderSearchTypes, query: string): number {\n let bestScore = 0;\n\n if (resource.identifier) {\n for (const identifier of resource.identifier) {\n bestScore = Math.max(bestScore, getStringScore(identifier.value, query));\n }\n }\n\n if (resource.resourceType === 'Patient' && resource.name) {\n for (const name of resource.name) {\n bestScore = Math.max(bestScore, getStringScore(formatHumanName(name), query));\n }\n }\n\n return bestScore;\n}\n\n/**\n * Calculates a relevance score of a candidate display string.\n * Higher scores are better.\n * @param str The candidate display string.\n * @param query The user entered search string.\n * @returns The relevance score of the candidate string.\n */\nfunction getStringScore(str: string | undefined, query: string): number {\n if (!str) {\n return 0;\n }\n const index = str.toLowerCase().indexOf(query.toLowerCase());\n if (index < 0) {\n return 0;\n }\n return 100 - index;\n}\n"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,13 @@
1
+ import { formatHumanName } from '@medplum/core';
2
+ import React from 'react';
3
+
4
+ function HumanNameDisplay(props) {
5
+ const name = props.value;
6
+ if (!name) {
7
+ return null;
8
+ }
9
+ return React.createElement(React.Fragment, null, formatHumanName(name, props.options));
10
+ }
11
+
12
+ export { HumanNameDisplay };
13
+ //# sourceMappingURL=HumanNameDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumanNameDisplay.js","sources":["../../src/HumanNameDisplay.tsx"],"sourcesContent":["import { formatHumanName, HumanNameFormatOptions } from '@medplum/core';\nimport { HumanName } from '@medplum/fhirtypes';\nimport React from 'react';\n\nexport interface HumanNameDisplayProps {\n value?: HumanName;\n options?: HumanNameFormatOptions;\n}\n\nexport function HumanNameDisplay(props: HumanNameDisplayProps): JSX.Element | null {\n const name = props.value;\n if (!name) {\n return null;\n }\n\n return <>{formatHumanName(name, props.options)}</>;\n}\n"],"names":[],"mappings":";;;AASM,SAAU,gBAAgB,CAAC,KAA4B,EAAA;AAC3D,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;IAED,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAI,CAAC;AACrD;;;;"}
File without changes
@@ -0,0 +1,49 @@
1
+ import React, { useState, useRef } from 'react';
2
+ import { Input } from './Input.js';
3
+ import { InputRow } from './InputRow.js';
4
+ import { Select } from './Select.js';
5
+
6
+ function HumanNameInput(props) {
7
+ var _a, _b, _c;
8
+ const [value, setValue] = useState(props.defaultValue);
9
+ const valueRef = useRef();
10
+ valueRef.current = value;
11
+ function setValueWrapper(newValue) {
12
+ setValue(newValue);
13
+ if (props.onChange) {
14
+ props.onChange(newValue);
15
+ }
16
+ }
17
+ function setUse(use) {
18
+ setValueWrapper(Object.assign(Object.assign({}, valueRef.current), { use: use ? use : undefined }));
19
+ }
20
+ function setPrefix(prefix) {
21
+ setValueWrapper(Object.assign(Object.assign({}, valueRef.current), { prefix: prefix ? prefix.split(' ') : undefined }));
22
+ }
23
+ function setGiven(given) {
24
+ setValueWrapper(Object.assign(Object.assign({}, valueRef.current), { given: given ? given.split(' ') : undefined }));
25
+ }
26
+ function setFamily(family) {
27
+ setValueWrapper(Object.assign(Object.assign({}, valueRef.current), { family: family ? family : undefined }));
28
+ }
29
+ function setSuffix(suffix) {
30
+ setValueWrapper(Object.assign(Object.assign({}, valueRef.current), { suffix: suffix ? suffix.split(' ') : undefined }));
31
+ }
32
+ return (React.createElement(InputRow, null,
33
+ React.createElement(Select, { defaultValue: value === null || value === void 0 ? void 0 : value.use, onChange: setUse, testid: "use" },
34
+ React.createElement("option", null),
35
+ React.createElement("option", null, "usual"),
36
+ React.createElement("option", null, "official"),
37
+ React.createElement("option", null, "temp"),
38
+ React.createElement("option", null, "nickname"),
39
+ React.createElement("option", null, "anonymous"),
40
+ React.createElement("option", null, "old"),
41
+ React.createElement("option", null, "maiden")),
42
+ React.createElement(Input, { placeholder: "Prefix", defaultValue: (_a = value === null || value === void 0 ? void 0 : value.prefix) === null || _a === void 0 ? void 0 : _a.join(' '), onChange: setPrefix }),
43
+ React.createElement(Input, { placeholder: "Given", defaultValue: (_b = value === null || value === void 0 ? void 0 : value.given) === null || _b === void 0 ? void 0 : _b.join(' '), onChange: setGiven }),
44
+ React.createElement(Input, { placeholder: "Family", defaultValue: value === null || value === void 0 ? void 0 : value.family, onChange: setFamily }),
45
+ React.createElement(Input, { placeholder: "Suffix", defaultValue: (_c = value === null || value === void 0 ? void 0 : value.suffix) === null || _c === void 0 ? void 0 : _c.join(' '), onChange: setSuffix })));
46
+ }
47
+
48
+ export { HumanNameInput };
49
+ //# sourceMappingURL=HumanNameInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumanNameInput.js","sources":["../../src/HumanNameInput.tsx"],"sourcesContent":["import { HumanName } from '@medplum/fhirtypes';\nimport React, { useRef, useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\nimport { Select } from './Select';\n\nexport interface HumanNameInputProps {\n name: string;\n defaultValue?: HumanName;\n onChange?: (value: HumanName) => void;\n}\n\nexport function HumanNameInput(props: HumanNameInputProps): JSX.Element {\n const [value, setValue] = useState<HumanName | undefined>(props.defaultValue);\n\n const valueRef = useRef<HumanName>();\n valueRef.current = value;\n\n function setValueWrapper(newValue: HumanName): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n function setUse(use: string): void {\n setValueWrapper({ ...valueRef.current, use: use ? use : undefined });\n }\n\n function setPrefix(prefix: string): void {\n setValueWrapper({\n ...valueRef.current,\n prefix: prefix ? prefix.split(' ') : undefined,\n });\n }\n\n function setGiven(given: string): void {\n setValueWrapper({\n ...valueRef.current,\n given: given ? given.split(' ') : undefined,\n });\n }\n\n function setFamily(family: string): void {\n setValueWrapper({\n ...valueRef.current,\n family: family ? family : undefined,\n });\n }\n\n function setSuffix(suffix: string): void {\n setValueWrapper({\n ...valueRef.current,\n suffix: suffix ? suffix.split(' ') : undefined,\n });\n }\n\n return (\n <InputRow>\n <Select defaultValue={value?.use} onChange={setUse} testid=\"use\">\n <option></option>\n <option>usual</option>\n <option>official</option>\n <option>temp</option>\n <option>nickname</option>\n <option>anonymous</option>\n <option>old</option>\n <option>maiden</option>\n </Select>\n <Input placeholder=\"Prefix\" defaultValue={value?.prefix?.join(' ')} onChange={setPrefix} />\n <Input placeholder=\"Given\" defaultValue={value?.given?.join(' ')} onChange={setGiven} />\n <Input placeholder=\"Family\" defaultValue={value?.family} onChange={setFamily} />\n <Input placeholder=\"Suffix\" defaultValue={value?.suffix?.join(' ')} onChange={setSuffix} />\n </InputRow>\n );\n}\n"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+
3
+ function IdentifierDisplay(props) {
4
+ var _a, _b;
5
+ return (React.createElement("div", null, (_a = props.value) === null || _a === void 0 ? void 0 :
6
+ _a.system,
7
+ ": ", (_b = props.value) === null || _b === void 0 ? void 0 :
8
+ _b.value));
9
+ }
10
+
11
+ export { IdentifierDisplay };
12
+ //# sourceMappingURL=IdentifierDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifierDisplay.js","sources":["../../src/IdentifierDisplay.tsx"],"sourcesContent":["import { Identifier } from '@medplum/fhirtypes';\nimport React from 'react';\n\nexport interface IdentifierDisplayProps {\n value?: Identifier;\n}\n\nexport function IdentifierDisplay(props: IdentifierDisplayProps): JSX.Element {\n return (\n <div>\n {props.value?.system}: {props.value?.value}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAOM,SAAU,iBAAiB,CAAC,KAA6B,EAAA;;AAC7D,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EACG,CAAA,EAAA,GAAA,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA;WAAE,MAAM;cAAI,CAAA,EAAA,GAAA,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA;WAAE,KAAK,CACtC,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,19 @@
1
+ import React, { useState } from 'react';
2
+ import { Input } from './Input.js';
3
+ import { InputRow } from './InputRow.js';
4
+
5
+ function IdentifierInput(props) {
6
+ const [value, setValue] = useState(props.defaultValue);
7
+ function setValueWrapper(newValue) {
8
+ setValue(newValue);
9
+ if (props.onChange) {
10
+ props.onChange(newValue);
11
+ }
12
+ }
13
+ return (React.createElement(InputRow, null,
14
+ React.createElement(Input, { placeholder: "System", defaultValue: value === null || value === void 0 ? void 0 : value.system, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { system: newValue })) }),
15
+ React.createElement(Input, { placeholder: "Value", defaultValue: value === null || value === void 0 ? void 0 : value.value, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { value: newValue })) })));
16
+ }
17
+
18
+ export { IdentifierInput };
19
+ //# sourceMappingURL=IdentifierInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifierInput.js","sources":["../../src/IdentifierInput.tsx"],"sourcesContent":["import { Identifier } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\n\nexport interface IdentifierInputProps {\n name: string;\n defaultValue?: Identifier;\n onChange?: (value: Identifier) => void;\n}\n\nexport function IdentifierInput(props: IdentifierInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Identifier): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <InputRow>\n <Input\n placeholder=\"System\"\n defaultValue={value?.system}\n onChange={(newValue) => setValueWrapper({ ...value, system: newValue })}\n />\n <Input\n placeholder=\"Value\"\n defaultValue={value?.value}\n onChange={(newValue) => setValueWrapper({ ...value, value: newValue })}\n />\n </InputRow>\n );\n}\n"],"names":[],"mappings":";;;;AAWM,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,QAAoB,EAAA;QAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QACE,oBAAC,QAAQ,EAAA,IAAA;AACP,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,QAAQ,EACpB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,EAC3B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,MAAM,EAAE,QAAQ,IAAG,EACvE,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAM,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,KAAK,EAAE,QAAQ,EAAA,CAAA,CAAG,EACtE,CAAA,CACO,EACX;AACJ;;;;"}
File without changes
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { getIssuesForExpression } from './utils/outcomes.js';
3
+
4
+ function Input(props) {
5
+ const className = 'medplum-input';
6
+ const issues = getIssuesForExpression(props.outcome, props.name);
7
+ const invalid = issues && issues.length > 0;
8
+ return (React.createElement("input", { id: props.name, name: props.name, type: getInputType(props.type), size: props.size, step: props.step, className: className, style: props.style, defaultValue: props.defaultValue || '', required: props.required, autoCapitalize: props.autoCapitalize, autoComplete: props.autoComplete, autoFocus: props.autoFocus, ref: props.inputRef, "aria-invalid": invalid, "aria-describedby": invalid ? props.name + '-errors' : '', placeholder: props.placeholder, "data-testid": props.testid, disabled: props.disabled, onChange: (e) => {
9
+ if (props.onChange) {
10
+ props.onChange(e.currentTarget.value);
11
+ }
12
+ } }));
13
+ }
14
+ /**
15
+ * Returns the input type for the requested type.
16
+ * JSDOM does not support many of the valid <input> type attributes.
17
+ * For example, it won't fire change events for <input type="datetime-local">.
18
+ * @param requestedType The optional type as requested by the parent component.
19
+ */
20
+ function getInputType(requestedType) {
21
+ const result = requestedType || 'text';
22
+ return result;
23
+ }
24
+
25
+ export { Input };
26
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sources":["../../src/Input.tsx"],"sourcesContent":["import { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { RefObject } from 'react';\nimport { getIssuesForExpression } from './utils/outcomes';\nimport './Input.css';\n\nexport interface InputProps {\n name?: string;\n type?: string;\n size?: number;\n step?: number | 'any';\n style?: React.CSSProperties;\n defaultValue?: string | number;\n required?: boolean;\n autoCapitalize?: string;\n autoComplete?: string;\n autoFocus?: boolean;\n inputRef?: RefObject<HTMLInputElement>;\n outcome?: OperationOutcome;\n placeholder?: string;\n testid?: string;\n disabled?: boolean;\n onChange?: (newValue: string) => void;\n}\n\nexport function Input(props: InputProps): JSX.Element {\n const className = 'medplum-input';\n const issues = getIssuesForExpression(props.outcome, props.name);\n const invalid = issues && issues.length > 0;\n return (\n <input\n id={props.name}\n name={props.name}\n type={getInputType(props.type)}\n size={props.size}\n step={props.step}\n className={className}\n style={props.style}\n defaultValue={props.defaultValue || ''}\n required={props.required}\n autoCapitalize={props.autoCapitalize}\n autoComplete={props.autoComplete}\n autoFocus={props.autoFocus}\n ref={props.inputRef}\n aria-invalid={invalid}\n aria-describedby={invalid ? props.name + '-errors' : ''}\n placeholder={props.placeholder}\n data-testid={props.testid}\n disabled={props.disabled}\n onChange={(e) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.value);\n }\n }}\n />\n );\n}\n\n/**\n * Returns the input type for the requested type.\n * JSDOM does not support many of the valid <input> type attributes.\n * For example, it won't fire change events for <input type=\"datetime-local\">.\n * @param requestedType The optional type as requested by the parent component.\n */\nfunction getInputType(requestedType: string | undefined): string {\n const result = requestedType || 'text';\n return process.env.NODE_ENV === 'test' ? result.replace(/datetime-local|date/, 'text') : result;\n}\n"],"names":[],"mappings":";;;AAwBM,SAAU,KAAK,CAAC,KAAiB,EAAA;IACrC,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,IAAA,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C,QACE,KACE,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAA,cAAA,EACL,OAAO,EAAA,kBAAA,EACH,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,EAAE,EACvD,WAAW,EAAE,KAAK,CAAC,WAAW,EACjB,aAAA,EAAA,KAAK,CAAC,MAAM,EACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,CAAC,KAAI;YACd,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACvC,aAAA;SACF,EAAA,CACD,EACF;AACJ,CAAC;AAED;;;;;AAKG;AACH,SAAS,YAAY,CAAC,aAAiC,EAAA;AACrD,IAAA,MAAM,MAAM,GAAG,aAAa,IAAI,MAAM,CAAC;IACvC,OAAyF,MAAM,CAAC;AAClG;;;;"}
File without changes
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ function InputRow(props) {
4
+ return (React.createElement("div", { className: "medplum-input-row", style: { justifyContent: props.justifyContent } }, props.children));
5
+ }
6
+
7
+ export { InputRow };
8
+ //# sourceMappingURL=InputRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputRow.js","sources":["../../src/InputRow.tsx"],"sourcesContent":["import React from 'react';\nimport './InputRow.css';\n\nexport interface InputRowProps {\n justifyContent?: string;\n children: React.ReactNode;\n}\n\nexport function InputRow(props: InputRowProps): JSX.Element {\n return (\n <div className=\"medplum-input-row\" style={{ justifyContent: props.justifyContent }}>\n {props.children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAQM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,QACE,6BAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,EAAA,EAC/E,KAAK,CAAC,QAAQ,CACX,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+
3
+ function Loading() {
4
+ return (React.createElement("div", { role: "progressbar", "aria-busy": "true", className: "medplum-loading" },
5
+ React.createElement("div", { className: "medplum-loading-container" },
6
+ React.createElement("svg", { className: "medplum-loading-spinner", viewBox: "0 0 100 100" },
7
+ React.createElement("circle", { cx: "50", cy: "50", r: "40" })))));
8
+ }
9
+
10
+ export { Loading };
11
+ //# sourceMappingURL=Loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.js","sources":["../../src/Loading.tsx"],"sourcesContent":["import React from 'react';\nimport './Loading.css';\n\nexport function Loading(): JSX.Element {\n return (\n <div role=\"progressbar\" aria-busy=\"true\" className=\"medplum-loading\">\n <div className=\"medplum-loading-container\">\n <svg className=\"medplum-loading-spinner\" viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"40\" />\n </svg>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;SAGgB,OAAO,GAAA;IACrB,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,IAAI,EAAC,aAAa,eAAW,MAAM,EAAC,SAAS,EAAC,iBAAiB,EAAA;QAClE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,2BAA2B,EAAA;AACxC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAC,aAAa,EAAA;AAC5D,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAG,CAAA,CAC7B,CACF,CACF,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+
3
+ function Logo(props) {
4
+ return (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 491 491", style: { width: props.size, height: props.size } },
5
+ React.createElement("title", null, "Medplum Logo"),
6
+ React.createElement("path", { fill: props.fill || '#ad7136', d: "M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z" }),
7
+ React.createElement("path", { fill: props.fill || '#654b87', d: "M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z" }),
8
+ React.createElement("path", { fill: props.fill || '#463068', d: "M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z" }),
9
+ React.createElement("path", { fill: props.fill || '#70d65b', d: "M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z" }),
10
+ React.createElement("path", { fill: props.fill || '#58b741', d: "M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z" })));
11
+ }
12
+
13
+ export { Logo };
14
+ //# sourceMappingURL=Logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logo.js","sources":["../../src/Logo.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface LogoProps {\n size: number;\n fill?: string;\n}\n\nexport function Logo(props: LogoProps): JSX.Element {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 491 491\" style={{ width: props.size, height: props.size }}>\n <title>Medplum Logo</title>\n <path fill={props.fill || '#ad7136'} d=\"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z\" />\n <path\n fill={props.fill || '#654b87'}\n d=\"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z\"\n />\n <path\n fill={props.fill || '#463068'}\n d=\"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z\"\n />\n <path\n fill={props.fill || '#70d65b'}\n d=\"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z\"\n />\n <path fill={props.fill || '#58b741'} d=\"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z\" />\n </svg>\n );\n}\n"],"names":[],"mappings":";;AAOM,SAAU,IAAI,CAAC,KAAgB,EAAA;IACnC,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,4BAA4B,EAAC,OAAO,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAA;QAC5G,KAA2B,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAA,cAAA,CAAA;QAC3B,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,gEAAgE,EAAG,CAAA;QAC1G,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,kJAAkJ,EACpJ,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,4FAA4F,EAC9F,CAAA;QACF,KACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAC7B,CAAC,EAAC,yEAAyE,EAC3E,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,EAAC,0DAA0D,EAAG,CAAA,CAChG,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { useNavigate } from 'react-router-dom';
3
+ import { killEvent } from './utils/dom.js';
4
+
5
+ function MedplumLink(props) {
6
+ const navigate = useNavigate();
7
+ let href = '#';
8
+ if (props.to) {
9
+ if (typeof props.to === 'string') {
10
+ href = props.to;
11
+ }
12
+ else if ('resourceType' in props.to) {
13
+ href = `/${props.to.resourceType}/${props.to.id}`;
14
+ }
15
+ else if ('reference' in props.to) {
16
+ href = `/${props.to.reference}`;
17
+ }
18
+ if (props.suffix) {
19
+ href += '/' + props.suffix;
20
+ }
21
+ }
22
+ return (React.createElement("a", { href: href, id: props.id, "aria-label": props.label, "data-testid": props.testid || 'link', className: props.className, onClick: (e) => {
23
+ killEvent(e);
24
+ if (props.onClick) {
25
+ props.onClick();
26
+ }
27
+ else if (props.to) {
28
+ navigate(href);
29
+ }
30
+ } }, props.children));
31
+ }
32
+
33
+ export { MedplumLink };
34
+ //# sourceMappingURL=MedplumLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MedplumLink.js","sources":["../../src/MedplumLink.tsx"],"sourcesContent":["import { Reference, Resource } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { killEvent } from './utils/dom';\n\nexport interface MedplumLinkProps {\n to?: Resource | Reference | string;\n suffix?: string;\n label?: string;\n id?: string;\n testid?: string;\n className?: string;\n onClick?: () => void;\n children: React.ReactNode;\n}\n\nexport function MedplumLink(props: MedplumLinkProps): JSX.Element {\n const navigate = useNavigate();\n\n let href = '#';\n if (props.to) {\n if (typeof props.to === 'string') {\n href = props.to;\n } else if ('resourceType' in props.to) {\n href = `/${props.to.resourceType}/${props.to.id}`;\n } else if ('reference' in props.to) {\n href = `/${props.to.reference}`;\n }\n\n if (props.suffix) {\n href += '/' + props.suffix;\n }\n }\n\n return (\n <a\n href={href}\n id={props.id}\n aria-label={props.label}\n data-testid={props.testid || 'link'}\n className={props.className}\n onClick={(e: React.SyntheticEvent) => {\n killEvent(e);\n if (props.onClick) {\n props.onClick();\n } else if (props.to) {\n navigate(href);\n }\n }}\n >\n {props.children}\n </a>\n );\n}\n"],"names":[],"mappings":";;;;AAgBM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,KAAK,CAAC,EAAE,EAAE;AACZ,QAAA,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;AACjB,SAAA;AAAM,aAAA,IAAI,cAAc,IAAI,KAAK,CAAC,EAAE,EAAE;AACrC,YAAA,IAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,EAAE,CAAC,YAAY,CAAI,CAAA,EAAA,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACnD,SAAA;AAAM,aAAA,IAAI,WAAW,IAAI,KAAK,CAAC,EAAE,EAAE;YAClC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;AACjC,SAAA;QAED,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,SAAA;AACF,KAAA;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,KAAK,CAAC,EAAE,EACA,YAAA,EAAA,KAAK,CAAC,KAAK,EAAA,aAAA,EACV,KAAK,CAAC,MAAM,IAAI,MAAM,EACnC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,OAAO,EAAE,CAAC,CAAuB,KAAI;YACnC,SAAS,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,KAAK,CAAC,OAAO,EAAE,CAAC;AACjB,aAAA;iBAAM,IAAI,KAAK,CAAC,EAAE,EAAE;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChB,aAAA;AACH,SAAC,IAEA,KAAK,CAAC,QAAQ,CACb,EACJ;AACJ;;;;"}
File without changes
@@ -0,0 +1,50 @@
1
+ import React, { createContext, useState, useEffect, useContext } from 'react';
2
+
3
+ const reactContext = createContext(undefined);
4
+ /**
5
+ * The MedplumProvider component provides Medplum context state.
6
+ *
7
+ * Medplum context includes:
8
+ * 1) medplum - Medplum client library
9
+ * 2) profile - The current user profile (if signed in)
10
+ */
11
+ function MedplumProvider(props) {
12
+ const medplum = props.medplum;
13
+ const [state, setState] = useState({
14
+ profile: medplum.getProfile(),
15
+ loading: false,
16
+ });
17
+ useEffect(() => {
18
+ function eventListener() {
19
+ setState(Object.assign(Object.assign({}, state), { profile: medplum.getProfile() }));
20
+ }
21
+ medplum.addEventListener('change', eventListener);
22
+ return () => medplum.removeEventListeneer('change', eventListener);
23
+ }, [medplum, state]);
24
+ const medplumContext = Object.assign(Object.assign({}, state), { medplum });
25
+ return React.createElement(reactContext.Provider, { value: medplumContext }, props.children);
26
+ }
27
+ /**
28
+ * Returns the MedplumContext instance.
29
+ */
30
+ function useMedplumContext() {
31
+ return useContext(reactContext);
32
+ }
33
+ /**
34
+ * Returns the MedplumClient instance.
35
+ * This is a shortcut for useMedplumContext().medplum.
36
+ */
37
+ function useMedplum() {
38
+ return useMedplumContext().medplum;
39
+ }
40
+ /**
41
+ * Returns the current Medplum user profile (if signed in).
42
+ * This is a shortcut for useMedplumContext().profile.
43
+ * @returns The current user profile.
44
+ */
45
+ function useMedplumProfile() {
46
+ return useMedplumContext().profile;
47
+ }
48
+
49
+ export { MedplumProvider, useMedplum, useMedplumContext, useMedplumProfile };
50
+ //# sourceMappingURL=MedplumProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MedplumProvider.js","sources":["../../src/MedplumProvider.tsx"],"sourcesContent":["import { MedplumClient, ProfileResource } from '@medplum/core';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nconst reactContext = createContext(undefined as MedplumContext | undefined);\n\nexport interface MedplumProviderProps {\n medplum: MedplumClient;\n children: React.ReactNode;\n}\n\nexport interface MedplumContext {\n medplum: MedplumClient;\n profile?: ProfileResource;\n loading: boolean;\n}\n\n/**\n * The MedplumProvider component provides Medplum context state.\n *\n * Medplum context includes:\n * 1) medplum - Medplum client library\n * 2) profile - The current user profile (if signed in)\n */\nexport function MedplumProvider(props: MedplumProviderProps): JSX.Element {\n const medplum = props.medplum;\n\n const [state, setState] = useState({\n profile: medplum.getProfile(),\n loading: false,\n });\n\n useEffect(() => {\n function eventListener(): void {\n setState({\n ...state,\n profile: medplum.getProfile(),\n });\n }\n\n medplum.addEventListener('change', eventListener);\n return () => medplum.removeEventListeneer('change', eventListener);\n }, [medplum, state]);\n\n const medplumContext = {\n ...state,\n medplum,\n };\n\n return <reactContext.Provider value={medplumContext}>{props.children}</reactContext.Provider>;\n}\n\n/**\n * Returns the MedplumContext instance.\n */\nexport function useMedplumContext(): MedplumContext {\n return useContext(reactContext) as MedplumContext;\n}\n\n/**\n * Returns the MedplumClient instance.\n * This is a shortcut for useMedplumContext().medplum.\n */\nexport function useMedplum(): MedplumClient {\n return useMedplumContext().medplum;\n}\n\n/**\n * Returns the current Medplum user profile (if signed in).\n * This is a shortcut for useMedplumContext().profile.\n * @returns The current user profile.\n */\nexport function useMedplumProfile(): ProfileResource | undefined {\n return useMedplumContext().profile;\n}\n"],"names":[],"mappings":";;AAGA,MAAM,YAAY,GAAG,aAAa,CAAC,SAAuC,CAAC,CAAC;AAa5E;;;;;;AAMG;AACG,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACjC,QAAA,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK;AACf,KAAA,CAAC,CAAC;IAEH,SAAS,CAAC,MAAK;AACb,QAAA,SAAS,aAAa,GAAA;YACpB,QAAQ,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACH,KAAK,CAAA,EAAA,EACR,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAA,CAAA,CAC7B,CAAC;SACJ;AAED,QAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClD,OAAO,MAAM,OAAO,CAAC,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACrE,KAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAErB,IAAA,MAAM,cAAc,GACf,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CACR,EAAA,EAAA,OAAO,GACR,CAAC;AAEF,IAAA,OAAO,KAAC,CAAA,aAAA,CAAA,YAAY,CAAC,QAAQ,EAAC,EAAA,KAAK,EAAE,cAAc,EAAG,EAAA,KAAK,CAAC,QAAQ,CAAyB,CAAC;AAChG,CAAC;AAED;;AAEG;SACa,iBAAiB,GAAA;AAC/B,IAAA,OAAO,UAAU,CAAC,YAAY,CAAmB,CAAC;AACpD,CAAC;AAED;;;AAGG;SACa,UAAU,GAAA;AACxB,IAAA,OAAO,iBAAiB,EAAE,CAAC,OAAO,CAAC;AACrC,CAAC;AAED;;;;AAIG;SACa,iBAAiB,GAAA;AAC/B,IAAA,OAAO,iBAAiB,EAAE,CAAC,OAAO,CAAC;AACrC;;;;"}
File without changes
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ function MenuItem(props) {
4
+ return (React.createElement("div", { className: "medplum-menu-item", onClick: () => props.onClick(), "aria-label": props.label }, props.children));
5
+ }
6
+
7
+ export { MenuItem };
8
+ //# sourceMappingURL=MenuItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuItem.js","sources":["../../src/MenuItem.tsx"],"sourcesContent":["import React from 'react';\nimport './MenuItem.css';\n\ninterface MenuItemProps {\n onClick: () => void;\n label?: string;\n children: React.ReactNode;\n}\n\nexport function MenuItem(props: MenuItemProps): JSX.Element {\n return (\n <div className=\"medplum-menu-item\" onClick={() => props.onClick()} aria-label={props.label}>\n {props.children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AASM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAc,YAAA,EAAA,KAAK,CAAC,KAAK,EACvF,EAAA,KAAK,CAAC,QAAQ,CACX,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ function MenuSeparator() {
4
+ return React.createElement("div", { className: "medplum-menu-separator" });
5
+ }
6
+
7
+ export { MenuSeparator };
8
+ //# sourceMappingURL=MenuSeparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSeparator.js","sources":["../../src/MenuSeparator.tsx"],"sourcesContent":["import React from 'react';\nimport './MenuSeparator.css';\n\nexport function MenuSeparator(): JSX.Element {\n return <div className=\"medplum-menu-separator\" />;\n}\n"],"names":[],"mappings":";;SAGgB,aAAa,GAAA;AAC3B,IAAA,OAAO,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,wBAAwB,GAAG,CAAC;AACpD;;;;"}
File without changes
@@ -0,0 +1,40 @@
1
+ import { getReferenceString, createReference } from '@medplum/core';
2
+ import React from 'react';
3
+ import { ResourceTimeline } from './ResourceTimeline.js';
4
+
5
+ const searches = [
6
+ '$/_history',
7
+ 'Communication?subject=$',
8
+ 'Device?patient=$',
9
+ 'DeviceRequest?patient=$',
10
+ 'DiagnosticReport?subject=$',
11
+ 'Media?subject=$',
12
+ 'ServiceRequest?subject=$',
13
+ ];
14
+ function PatientTimeline(props) {
15
+ return (React.createElement(ResourceTimeline, { value: props.patient, buildSearchRequests: (resource) => ({
16
+ resourceType: 'Bundle',
17
+ type: 'batch',
18
+ entry: searches.map((search) => ({
19
+ request: {
20
+ method: 'GET',
21
+ url: search.replaceAll('$', getReferenceString(resource)),
22
+ },
23
+ })),
24
+ }), createCommunication: (resource, sender, text) => ({
25
+ resourceType: 'Communication',
26
+ subject: createReference(resource),
27
+ sender: createReference(sender),
28
+ sent: new Date().toISOString(),
29
+ payload: [{ contentString: text }],
30
+ }), createMedia: (resource, operator, content) => ({
31
+ resourceType: 'Media',
32
+ subject: createReference(resource),
33
+ operator: createReference(operator),
34
+ issued: new Date().toISOString(),
35
+ content,
36
+ }) }));
37
+ }
38
+
39
+ export { PatientTimeline };
40
+ //# sourceMappingURL=PatientTimeline.js.map