@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 @@
1
+ {"version":3,"file":"SearchUtils.js","sources":["../../src/SearchUtils.tsx"],"sourcesContent":["import { capitalize, evalFhirPathTyped, Filter, Operator, PropertyType, SearchRequest } from '@medplum/core';\nimport { ElementDefinition, Resource, SearchParameter } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { DateTimeDisplay } from './DateTimeDisplay';\nimport { getValueAndType, ResourcePropertyDisplay } from './ResourcePropertyDisplay';\nimport { SearchControlField } from './SearchControlField';\n\nconst searchParamToOperators: Record<string, Operator[]> = {\n string: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],\n fulltext: [Operator.EQUALS, Operator.NOT, Operator.CONTAINS, Operator.EXACT],\n token: [Operator.EQUALS, Operator.NOT],\n reference: [Operator.EQUALS, Operator.NOT],\n numeric: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n ],\n quantity: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n ],\n date: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n Operator.STARTS_AFTER,\n Operator.ENDS_BEFORE,\n Operator.APPROXIMATELY,\n ],\n datetime: [\n Operator.EQUALS,\n Operator.NOT_EQUALS,\n Operator.GREATER_THAN,\n Operator.LESS_THAN,\n Operator.GREATER_THAN_OR_EQUALS,\n Operator.LESS_THAN_OR_EQUALS,\n Operator.STARTS_AFTER,\n Operator.ENDS_BEFORE,\n Operator.APPROXIMATELY,\n ],\n};\n\nconst operatorNames: Record<Operator, string> = {\n eq: 'equals',\n ne: 'not equals',\n gt: 'greater than',\n lt: 'less than',\n ge: 'greater than or equals',\n le: 'less than or equals',\n sa: 'starts after',\n eb: 'ends before',\n ap: 'approximately',\n contains: 'contains',\n exact: 'exact',\n text: 'text',\n not: 'not',\n above: 'above',\n below: 'below',\n in: 'in',\n 'not-in': 'not in',\n 'of-type': 'of type',\n missing: 'missing',\n};\n\n/**\n * Sets the array of filters.\n *\n * @param {Array} filters The new filters.\n */\nexport function setFilters(definition: SearchRequest, filters: Filter[]): SearchRequest {\n return {\n ...definition,\n filters: filters,\n offset: 0,\n name: undefined,\n };\n}\n\n/**\n * Clears all of the filters.\n */\nexport function clearFilters(definition: SearchRequest): SearchRequest {\n return setFilters(definition, []);\n}\n\n/**\n * Clears all of the filters on a certain field.\n *\n * @param {string} code The field key name to clear filters.\n */\nexport function clearFiltersOnField(definition: SearchRequest, code: string): SearchRequest {\n return setFilters(\n definition,\n (definition.filters || []).filter((f) => f.code !== code)\n );\n}\n\n/**\n * Adds a filter.\n *\n * @param {string} field The field key name.\n * @param {Operator} op The operation key name.\n * @param {?string} value The filter value.\n * @param {boolean=} opt_clear Optional flag to clear filters on the field.\n */\nexport function addFilter(\n definition: SearchRequest,\n field: string,\n op: Operator,\n value?: string,\n opt_clear?: boolean\n): SearchRequest {\n if (opt_clear) {\n definition = clearFiltersOnField(definition, field);\n }\n\n const nextFilters: Filter[] = [];\n if (definition.filters) {\n nextFilters.push(...definition.filters);\n }\n nextFilters.push({ code: field, operator: op, value: value || '' });\n\n return setFilters(definition, nextFilters);\n}\n\n/**\n * Adds a field.\n *\n * @param {string} field The field key name.\n */\nexport function addField(definition: SearchRequest, field: string): SearchRequest {\n if (definition.fields && definition.fields.includes(field)) {\n return definition;\n }\n const newFields = [];\n if (definition.fields) {\n newFields.push(...definition.fields);\n }\n newFields.push(field);\n return {\n ...definition,\n fields: newFields,\n name: undefined,\n };\n}\n\n/**\n * Deletes a filter at the specified index.\n *\n * @param {number} index The filter index.\n */\nexport function deleteFilter(definition: SearchRequest, index: number): SearchRequest {\n if (!definition.filters) {\n return definition;\n }\n const newFilters = [...definition.filters];\n newFilters.splice(index, 1);\n return {\n ...definition,\n filters: newFilters,\n name: undefined,\n };\n}\n\n/**\n * Adds a filter that constrains the specified field to \"yesterday\".\n *\n * @param {string} field The field key name.\n */\nexport function addYesterdayFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, -1);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"today\".\n *\n * @param {string} field The field key name.\n */\nexport function addTodayFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, 0);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"tomorrow\".\n *\n * @param {string} field The field key name.\n */\nexport function addTomorrowFilter(definition: SearchRequest, field: string): SearchRequest {\n return addDayFilter(definition, field, 1);\n}\n\n/**\n * Adds a filter that constrains the specified field to a day.\n * The day is specified as a delta from the current day.\n * \"Today\" would be 0.\n * \"Yesterday\" would be -1.\n * \"Tomorrow\" would be 1.\n *\n * @param {string} field The field key name.\n * @param {number} delta The number of days from this day.\n */\nfunction addDayFilter(definition: SearchRequest, field: string, delta: number): SearchRequest {\n const startTime = new Date();\n startTime.setDate(startTime.getDate() + delta);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date(startTime.getTime());\n endTime.setDate(endTime.getDate() + 1);\n endTime.setTime(endTime.getTime() - 1);\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"last month\".\n *\n * @param {string} field The field key name.\n */\nexport function addLastMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, -1);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"this month\".\n *\n * @param {string} field The field key name.\n */\nexport function addThisMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, 0);\n}\n\n/**\n * Adds a filter that constrains the specified field to \"next month\".\n *\n * @param {string} field The field key name.\n */\nexport function addNextMonthFilter(definition: SearchRequest, field: string): SearchRequest {\n return addMonthFilter(definition, field, 1);\n}\n\n/**\n * Adds a filter that constrains the specified field to a month.\n * The month is specified as a delta from the current month.\n * \"This month\" would be 0.\n * \"Last month\" would be -1.\n * \"Next month\" would be 1.\n *\n * @param {string} field The field key name.\n * @param {number} delta The number of months from this month.\n */\nfunction addMonthFilter(definition: SearchRequest, field: string, delta: number): SearchRequest {\n const startTime = new Date();\n startTime.setMonth(startTime.getMonth() + delta);\n startTime.setDate(1);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date(startTime.getTime());\n endTime.setMonth(endTime.getMonth() + 1);\n endTime.setDate(1);\n endTime.setHours(0, 0, 0, 0);\n endTime.setTime(endTime.getTime() - 1);\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter that constrains the specified field to the year to date.\n *\n * @param {string} field The field key name.\n */\nexport function addYearToDateFilter(definition: SearchRequest, field: string): SearchRequest {\n const startTime = new Date();\n startTime.setMonth(0);\n startTime.setDate(1);\n startTime.setHours(0, 0, 0, 0);\n\n const endTime = new Date();\n\n return addDateFilterBetween(definition, field, startTime, endTime);\n}\n\n/**\n * Adds a filter for a field equaling a specified date.\n *\n * @param {string} field The field key name.\n * @param {Date} value The date.\n */\nexport function addDateEqualsFilter(definition: SearchRequest, field: string, value: Date): SearchRequest {\n return addDateFilterBetween(definition, field, value, value);\n}\n\n/**\n * Adds a filter for a date before a certain date/time.\n *\n * @param {string} field The field key name.\n * @param {Operator} op The date/time operation.\n * @param {Date} value The date.\n */\nexport function addDateFilter(definition: SearchRequest, field: string, op: Operator, value: Date): SearchRequest {\n definition = clearFiltersOnField(definition, field);\n return addDateFilterImpl(definition, field, op, value);\n}\n\n/**\n * Adds a filter for a date between two dates (inclusive of both dates).\n *\n * @param {string} field The field key name.\n * @param {Date} d1 The start date.\n * @param {Date} d2 The end date.\n */\nexport function addDateFilterBetween(definition: SearchRequest, field: string, d1: Date, d2: Date): SearchRequest {\n definition = clearFiltersOnField(definition, field);\n definition = addDateFilterImpl(definition, field, Operator.GREATER_THAN_OR_EQUALS, d1);\n definition = addDateFilterImpl(definition, field, Operator.LESS_THAN_OR_EQUALS, d2);\n return definition;\n}\n\n/**\n * Adds a filter for a date before a certain date/time.\n *\n * @param {string} field The field key name.\n * @param {Operator} op The date/time operation.\n * @param {Date} value The date.\n */\nfunction addDateFilterImpl(definition: SearchRequest, field: string, op: Operator, value: Date): SearchRequest {\n return addFilter(definition, field, op, value.toISOString());\n}\n\n/**\n * Adds a filter that constrains the specified field to \"missing\".\n *\n * @param {string} field The field key name.\n */\nexport function addMissingFilter(definition: SearchRequest, field: string, value = true): SearchRequest {\n return addFilter(definition, field, Operator.MISSING, value.toString());\n}\n\n/**\n * Returns true if the search has any filters on the specified field.\n *\n * @param {string} code The field key name.\n */\nexport function hasFilterOnField(definition: SearchRequest, code: string): boolean {\n if (!definition.filters) {\n return false;\n }\n return definition.filters.find((f) => f.code === code) !== undefined;\n}\n\n/**\n * Sets the offset (starting at zero).\n *\n * @param {number} offset The offset number.\n */\nexport function setOffset(definition: SearchRequest, offset: number): SearchRequest {\n if (definition.offset === offset) {\n return definition;\n }\n return {\n ...definition,\n offset,\n name: undefined,\n };\n}\n\n/**\n * Moves the page forward or backward.\n *\n * @param {number} delta The delta to the page number.\n * @return {boolean} True if the page actually moved; false otherwise.\n */\nexport function movePage(definition: SearchRequest, delta: number): SearchRequest {\n const count = definition.count ?? 20;\n const currOffset = definition.offset ?? 0;\n const newOffset = currOffset + delta * count;\n return setOffset(definition, Math.max(newOffset, 0));\n}\n\n/**\n * Sorts the search by the specified key, and optional direction.\n * Direction defaults to ascending ('asc') if not specified.\n *\n * @param {string} sortField The sort key.\n */\nexport function setSort(definition: SearchRequest, sort: string, desc?: boolean): SearchRequest {\n if (sort === getSortField(definition) && desc !== undefined && desc === isSortDescending(definition)) {\n return definition;\n }\n return {\n ...definition,\n sortRules: [\n {\n code: sort,\n descending: !!desc,\n },\n ],\n name: undefined,\n };\n}\n\n/**\n * Toggles the sort of the search by key.\n * If the search is already sorted by the key, reverses the direction.\n * If the search is not sorted by the key, sort in ascending order.\n *\n * @param {string} key The field key name.\n */\nexport function toggleSort(definition: SearchRequest, key: string): SearchRequest {\n let desc = false;\n if (getSortField(definition) === key) {\n desc = !isSortDescending(definition);\n }\n return setSort(definition, key, desc);\n}\n\nexport function getSortField(definition: SearchRequest): string | undefined {\n const sortRules = definition.sortRules;\n if (!sortRules || sortRules.length === 0) {\n return undefined;\n }\n const field = sortRules[0].code;\n return field.startsWith('-') ? field.substr(1) : field;\n}\n\nexport function isSortDescending(definition: SearchRequest): boolean {\n const sortRules = definition.sortRules;\n if (!sortRules || sortRules.length === 0) {\n return false;\n }\n return !!sortRules[0].descending;\n}\n\n/**\n * Returns a list of operators for a search parameter.\n * @param searchParam The search parameter.\n * @returns The list of operators that can be used for the search parameter.\n */\nexport function getSearchOperators(searchParam: SearchParameter): Operator[] | undefined {\n return searchParamToOperators[searchParam.type as string];\n}\n\n/**\n * Returns a string representing the operation.\n *\n * @param {string} op The operation code.\n * @return {string} A display string for the operation.\n */\nexport function getOpString(op: Operator): string {\n return operatorNames[op] ?? '';\n}\n\n/**\n * Returns a field display name.\n * @param key The field key.\n * @returns The field display name.\n */\nexport function buildFieldNameString(key: string): string {\n let tmp = key;\n\n // If dot separated, only the last part\n if (tmp.includes('.')) {\n tmp = tmp.split('.').pop() as string;\n }\n\n // Special case for ID\n if (tmp === 'id') {\n return 'ID';\n }\n\n // Special case for Version ID\n if (tmp === 'versionId') {\n return 'Version ID';\n }\n\n // Remove choice of type\n tmp = tmp.replace('[x]', '');\n\n // Convert camel case to space separated\n tmp = tmp.replace(/([A-Z])/g, ' $1');\n\n // Convert dashes and underscores to spaces\n tmp = tmp.replace(/[-_]/g, ' ');\n\n // Normalize whitespace to single space character\n tmp = tmp.replace(/\\s+/g, ' ');\n\n // Trim\n tmp = tmp.trim();\n\n // Capitalize the first letter of each word\n return tmp.split(/\\s/).map(capitalize).join(' ');\n}\n\n/**\n * Returns a fragment to be displayed in the search table for the value.\n * @param resource The parent resource.\n * @param key The search code or FHIRPath expression.\n * @returns The fragment to display.\n */\nexport function renderValue(resource: Resource, field: SearchControlField): string | JSX.Element | null | undefined {\n const key = field.name;\n if (key === 'id') {\n return resource.id;\n }\n\n if (key === 'meta.versionId') {\n return resource.meta?.versionId;\n }\n\n if (key === '_lastUpdated') {\n return <DateTimeDisplay value={resource.meta?.lastUpdated} />;\n }\n\n // Priority 1: ElementDefinition by exact match\n if (field.elementDefinition && `${resource.resourceType}.${field.name}` === field.elementDefinition.path) {\n return renderPropertyValue(resource, field.elementDefinition);\n }\n\n // Priority 2: SearchParameter by exact match\n if (field.searchParams && field.searchParams.length === 1 && field.name === field.searchParams[0].code) {\n return renderSearchParameterValue(resource, field.searchParams[0], field.elementDefinition);\n }\n\n // We don't know how to render this field definition\n return null;\n}\n\n/**\n * Returns a fragment to be displayed in the search table for a resource property.\n * @param resource The parent resource.\n * @param elementDefinition The property element definition.\n * @returns A React element or null.\n */\nfunction renderPropertyValue(resource: Resource, elementDefinition: ElementDefinition): JSX.Element | null {\n const path = elementDefinition.path?.split('.')?.pop()?.replaceAll('[x]', '') || '';\n const [value, propertyType] = getValueAndType({ type: resource.resourceType, value: resource }, path);\n if (!value) {\n return null;\n }\n\n return (\n <ResourcePropertyDisplay\n property={elementDefinition}\n propertyType={propertyType}\n value={value}\n maxWidth={200}\n ignoreMissingValues={true}\n link={false}\n />\n );\n}\n\n/**\n * Returns a fragment to be displayed in the search table for a search parameter.\n * @param resource The parent resource.\n * @param searchParam The search parameter.\n * @param elementDefinition Optional element definition.\n * @returns A React element or null.\n */\nfunction renderSearchParameterValue(\n resource: Resource,\n searchParam: SearchParameter,\n elementDefinition: ElementDefinition | undefined\n): JSX.Element | null {\n const value = evalFhirPathTyped(searchParam.expression as string, [{ type: resource.resourceType, value: resource }]);\n if (!value || value.length === 0) {\n return null;\n }\n\n if (elementDefinition) {\n return (\n <ResourcePropertyDisplay\n propertyType={value[0].type as PropertyType}\n value={value[0].value}\n maxWidth={200}\n ignoreMissingValues={true}\n link={false}\n />\n );\n }\n\n return (\n <>\n {value.map((v, index) => (\n <span key={`${index}-${value.length}`}>\n {typeof v === 'object' ? JSON.stringify(v) : (v as string | number)}\n </span>\n ))}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { getIssuesForExpression } from './utils/outcomes.js';
3
+
4
+ function Select(props) {
5
+ const className = 'medplum-select';
6
+ const issues = getIssuesForExpression(props.outcome, props.name);
7
+ const invalid = issues && issues.length > 0;
8
+ return (React.createElement("select", { id: props.name, name: props.name, className: className, defaultValue: props.defaultValue || '', required: props.required, autoFocus: props.autoFocus, ref: props.inputRef, style: props.style, "aria-invalid": invalid, "aria-describedby": invalid ? props.name + '-errors' : '', "data-testid": props.testid, onChange: (e) => {
9
+ if (props.onChange) {
10
+ props.onChange(e.currentTarget.value);
11
+ }
12
+ } }, props.children));
13
+ }
14
+
15
+ export { Select };
16
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sources":["../../src/Select.tsx"],"sourcesContent":["import { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { RefObject } from 'react';\nimport { getIssuesForExpression } from './utils/outcomes';\nimport './Select.css';\n\nexport interface SelectProps {\n name?: string;\n defaultValue?: string;\n required?: boolean;\n autoFocus?: boolean;\n inputRef?: RefObject<HTMLSelectElement>;\n children: React.ReactNode;\n outcome?: OperationOutcome;\n testid?: string;\n style?: React.CSSProperties;\n onChange?: (newValue: string) => void;\n}\n\nexport function Select(props: SelectProps): JSX.Element {\n const className = 'medplum-select';\n const issues = getIssuesForExpression(props.outcome, props.name);\n const invalid = issues && issues.length > 0;\n return (\n <select\n id={props.name}\n name={props.name}\n className={className}\n defaultValue={props.defaultValue || ''}\n required={props.required}\n autoFocus={props.autoFocus}\n ref={props.inputRef}\n style={props.style}\n aria-invalid={invalid}\n aria-describedby={invalid ? props.name + '-errors' : ''}\n data-testid={props.testid}\n onChange={(e) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.value);\n }\n }}\n >\n {props.children}\n </select>\n );\n}\n"],"names":[],"mappings":";;;AAkBM,SAAU,MAAM,CAAC,KAAkB,EAAA;IACvC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,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;AAC5C,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,GAAG,EAAE,KAAK,CAAC,QAAQ,EACnB,KAAK,EAAE,KAAK,CAAC,KAAK,kBACJ,OAAO,EAAA,kBAAA,EACH,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,EAAE,EAC1C,aAAA,EAAA,KAAK,CAAC,MAAM,EACzB,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;AACH,SAAC,IAEA,KAAK,CAAC,QAAQ,CACR,EACT;AACJ;;;;"}
File without changes
@@ -0,0 +1,53 @@
1
+ import { getReferenceString, createReference } from '@medplum/core';
2
+ import React from 'react';
3
+ import { ResourceTimeline } from './ResourceTimeline.js';
4
+
5
+ function ServiceRequestTimeline(props) {
6
+ return (React.createElement(ResourceTimeline, { value: props.serviceRequest, buildSearchRequests: (resource) => ({
7
+ resourceType: 'Bundle',
8
+ type: 'batch',
9
+ entry: [
10
+ {
11
+ request: {
12
+ method: 'GET',
13
+ url: `${getReferenceString(resource)}/_history`,
14
+ },
15
+ },
16
+ {
17
+ request: {
18
+ method: 'GET',
19
+ url: `Communication?based-on=${getReferenceString(resource)}`,
20
+ },
21
+ },
22
+ {
23
+ request: {
24
+ method: 'GET',
25
+ url: `Media?_count=100&based-on=${getReferenceString(resource)}`,
26
+ },
27
+ },
28
+ {
29
+ request: {
30
+ method: 'GET',
31
+ url: `DiagnosticReport?based-on=${getReferenceString(resource)}`,
32
+ },
33
+ },
34
+ ],
35
+ }), createCommunication: (resource, sender, text) => ({
36
+ resourceType: 'Communication',
37
+ basedOn: [createReference(resource)],
38
+ subject: resource.subject,
39
+ sender: createReference(sender),
40
+ sent: new Date().toISOString(),
41
+ payload: [{ contentString: text }],
42
+ }), createMedia: (resource, operator, content) => ({
43
+ resourceType: 'Media',
44
+ basedOn: [createReference(resource)],
45
+ subject: resource.subject,
46
+ operator: createReference(operator),
47
+ issued: new Date().toISOString(),
48
+ content,
49
+ }) }));
50
+ }
51
+
52
+ export { ServiceRequestTimeline };
53
+ //# sourceMappingURL=ServiceRequestTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceRequestTimeline.js","sources":["../../src/ServiceRequestTimeline.tsx"],"sourcesContent":["import { createReference, getReferenceString, ProfileResource } from '@medplum/core';\nimport { Attachment, Group, Patient, Reference, Resource, ServiceRequest } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { ResourceTimeline } from './ResourceTimeline';\n\nexport interface ServiceRequestTimelineProps {\n serviceRequest: ServiceRequest | Reference<ServiceRequest>;\n}\n\nexport function ServiceRequestTimeline(props: ServiceRequestTimelineProps): JSX.Element {\n return (\n <ResourceTimeline\n value={props.serviceRequest}\n buildSearchRequests={(resource: Resource) => ({\n resourceType: 'Bundle',\n type: 'batch',\n entry: [\n {\n request: {\n method: 'GET',\n url: `${getReferenceString(resource)}/_history`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `Communication?based-on=${getReferenceString(resource)}`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `Media?_count=100&based-on=${getReferenceString(resource)}`,\n },\n },\n {\n request: {\n method: 'GET',\n url: `DiagnosticReport?based-on=${getReferenceString(resource)}`,\n },\n },\n ],\n })}\n createCommunication={(resource: ServiceRequest, sender: ProfileResource, text: string) => ({\n resourceType: 'Communication',\n basedOn: [createReference(resource)],\n subject: resource.subject as Reference<Group | Patient>,\n sender: createReference(sender),\n sent: new Date().toISOString(),\n payload: [{ contentString: text }],\n })}\n createMedia={(resource: ServiceRequest, operator: ProfileResource, content: Attachment) => ({\n resourceType: 'Media',\n basedOn: [createReference(resource)],\n subject: resource.subject,\n operator: createReference(operator),\n issued: new Date().toISOString(),\n content,\n })}\n />\n );\n}\n"],"names":[],"mappings":";;;;AASM,SAAU,sBAAsB,CAAC,KAAkC,EAAA;AACvE,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,gBAAgB,EACf,EAAA,KAAK,EAAE,KAAK,CAAC,cAAc,EAC3B,mBAAmB,EAAE,CAAC,QAAkB,MAAM;AAC5C,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE;AACL,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAAG,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAW,SAAA,CAAA;AAChD,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA0B,uBAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAE,CAAA;AAC9D,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA6B,0BAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAE,CAAA;AACjE,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,KAAK;AACb,wBAAA,GAAG,EAAE,CAA6B,0BAAA,EAAA,kBAAkB,CAAC,QAAQ,CAAC,CAAE,CAAA;AACjE,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,EACF,mBAAmB,EAAE,CAAC,QAAwB,EAAE,MAAuB,EAAE,IAAY,MAAM;AACzF,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,OAAqC;AACvD,YAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,YAAA,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC9B,YAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA,CAAC,EACF,WAAW,EAAE,CAAC,QAAwB,EAAE,QAAyB,EAAE,OAAmB,MAAM;AAC1F,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,YAAA,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAChC,OAAO;SACR,CAAC,EAAA,CACF,EACF;AACJ;;;;"}
File without changes
@@ -0,0 +1,130 @@
1
+ import React, { useState } from 'react';
2
+ import { Avatar } from './Avatar.js';
3
+ import { Button } from './Button.js';
4
+ import { Document } from './Document.js';
5
+ import { Form } from './Form.js';
6
+ import { FormSection } from './FormSection.js';
7
+ import { getGoogleClientId, GoogleButton } from './GoogleButton.js';
8
+ import { Input } from './Input.js';
9
+ import { Logo } from './Logo.js';
10
+ import { MedplumLink } from './MedplumLink.js';
11
+ import { useMedplum } from './MedplumProvider.js';
12
+ import { getIssuesForExpression } from './utils/outcomes.js';
13
+
14
+ function SignInForm(props) {
15
+ const medplum = useMedplum();
16
+ const [login, setLogin] = useState(undefined);
17
+ const [memberships, setMemberships] = useState(undefined);
18
+ function handleAuthResponse(response) {
19
+ if (response.login) {
20
+ setLogin(response.login);
21
+ }
22
+ if (response.memberships) {
23
+ setMemberships(response.memberships);
24
+ }
25
+ if (response.code) {
26
+ if (props.onCode) {
27
+ props.onCode(response.code);
28
+ }
29
+ else {
30
+ medplum
31
+ .processCode(response.code)
32
+ .then(() => {
33
+ if (props.onSuccess) {
34
+ props.onSuccess();
35
+ }
36
+ })
37
+ .catch(console.log);
38
+ }
39
+ }
40
+ }
41
+ return (React.createElement(Document, { width: 450 }, (() => {
42
+ if (!login) {
43
+ return (React.createElement(AuthenticationForm, { clientId: props.clientId, scope: props.scope, nonce: props.nonce, googleClientId: props.googleClientId, onForgotPassword: props.onForgotPassword, onRegister: props.onRegister, handleAuthResponse: handleAuthResponse }, props.children));
44
+ }
45
+ else if (memberships) {
46
+ return React.createElement(ProfileForm, { login: login, memberships: memberships, handleAuthResponse: handleAuthResponse });
47
+ }
48
+ else {
49
+ return React.createElement("div", null, "Success");
50
+ }
51
+ })()));
52
+ }
53
+ function AuthenticationForm(props) {
54
+ const medplum = useMedplum();
55
+ const googleClientId = getGoogleClientId(props.googleClientId);
56
+ const [outcome, setOutcome] = useState();
57
+ const issues = getIssuesForExpression(outcome, undefined);
58
+ return (React.createElement(Form, { style: { maxWidth: 400 }, onSubmit: (formData) => {
59
+ medplum
60
+ .startLogin({
61
+ clientId: props.clientId,
62
+ scope: props.scope,
63
+ nonce: props.nonce,
64
+ email: formData.email,
65
+ password: formData.password,
66
+ remember: formData.remember === 'true',
67
+ })
68
+ .then(props.handleAuthResponse)
69
+ .catch(setOutcome);
70
+ } },
71
+ React.createElement("div", { className: "medplum-center" }, props.children),
72
+ issues && (React.createElement("div", { className: "medplum-input-error" }, issues.map((issue) => {
73
+ var _a, _b;
74
+ return (React.createElement("div", { "data-testid": "text-field-error", key: (_a = issue.details) === null || _a === void 0 ? void 0 : _a.text }, (_b = issue.details) === null || _b === void 0 ? void 0 : _b.text));
75
+ }))),
76
+ googleClientId && (React.createElement(React.Fragment, null,
77
+ React.createElement("div", { className: "medplum-signin-google-container" },
78
+ React.createElement(GoogleButton, { googleClientId: googleClientId, handleGoogleCredential: (response) => {
79
+ medplum
80
+ .startGoogleLogin({
81
+ clientId: props.clientId,
82
+ scope: props.scope,
83
+ nonce: props.nonce,
84
+ googleClientId: response.clientId,
85
+ googleCredential: response.credential,
86
+ })
87
+ .then(props.handleAuthResponse)
88
+ .catch(setOutcome);
89
+ } })),
90
+ React.createElement("div", { className: "medplum-signin-separator" }, "or"))),
91
+ React.createElement(FormSection, { title: "Email", htmlFor: "email", outcome: outcome },
92
+ React.createElement(Input, { name: "email", type: "email", testid: "email", required: true, autoFocus: true, outcome: outcome })),
93
+ React.createElement(FormSection, { title: "Password", htmlFor: "password", outcome: outcome },
94
+ React.createElement(Input, { name: "password", type: "password", testid: "password", autoComplete: "off", required: true, outcome: outcome })),
95
+ React.createElement("div", { className: "medplum-signin-buttons" },
96
+ (props.onForgotPassword || props.onRegister) && (React.createElement("div", null,
97
+ props.onForgotPassword && (React.createElement(MedplumLink, { testid: "forgotpassword", onClick: props.onForgotPassword }, "Forgot password")),
98
+ props.onRegister && (React.createElement(MedplumLink, { testid: "register", onClick: props.onRegister }, "Register")))),
99
+ React.createElement("div", null,
100
+ React.createElement("input", { type: "checkbox", id: "remember", name: "remember", value: "true" }),
101
+ React.createElement("label", { htmlFor: "remember" }, "Remember me")),
102
+ React.createElement("div", null,
103
+ React.createElement(Button, { type: "submit", testid: "submit" }, "Sign in")))));
104
+ }
105
+ function ProfileForm(props) {
106
+ const medplum = useMedplum();
107
+ return (React.createElement("div", null,
108
+ React.createElement("div", { className: "medplum-center" },
109
+ React.createElement(Logo, { size: 32 }),
110
+ React.createElement("h1", null, "Choose profile")),
111
+ props.memberships.map((membership) => {
112
+ var _a, _b, _c;
113
+ return (React.createElement("div", { className: "medplum-nav-menu-profile", key: membership.id, onClick: () => {
114
+ medplum
115
+ .post('auth/profile', {
116
+ login: props.login,
117
+ profile: membership.id,
118
+ })
119
+ .then(props.handleAuthResponse);
120
+ } },
121
+ React.createElement("div", { className: "medplum-nav-menu-profile-icon" },
122
+ React.createElement(Avatar, { alt: (_a = membership.profile) === null || _a === void 0 ? void 0 : _a.display })),
123
+ React.createElement("div", { className: "medplum-nav-menu-profile-label" }, (_b = membership.profile) === null || _b === void 0 ? void 0 :
124
+ _b.display,
125
+ React.createElement("div", { className: "medplum-nav-menu-profile-help-text" }, (_c = membership.project) === null || _c === void 0 ? void 0 : _c.display))));
126
+ })));
127
+ }
128
+
129
+ export { SignInForm };
130
+ //# sourceMappingURL=SignInForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInForm.js","sources":["../../src/SignInForm.tsx"],"sourcesContent":["import { GoogleCredentialResponse, LoginAuthenticationResponse } from '@medplum/core';\nimport { OperationOutcome, ProjectMembership } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Avatar } from './Avatar';\nimport { Button } from './Button';\nimport { Document } from './Document';\nimport { Form } from './Form';\nimport { FormSection } from './FormSection';\nimport { getGoogleClientId, GoogleButton } from './GoogleButton';\nimport { Input } from './Input';\nimport { Logo } from './Logo';\nimport { MedplumLink } from './MedplumLink';\nimport { useMedplum } from './MedplumProvider';\nimport './SignInForm.css';\nimport './util.css';\nimport { getIssuesForExpression } from './utils/outcomes';\n\nexport interface SignInFormProps {\n readonly remember?: boolean;\n readonly projectId?: string;\n readonly googleClientId?: string;\n readonly clientId?: string;\n readonly scope?: string;\n readonly nonce?: string;\n readonly onSuccess?: () => void;\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly onCode?: (code: string) => void;\n readonly children?: React.ReactNode;\n}\n\nexport function SignInForm(props: SignInFormProps): JSX.Element {\n const medplum = useMedplum();\n const [login, setLogin] = useState<string | undefined>(undefined);\n const [memberships, setMemberships] = useState<ProjectMembership[] | undefined>(undefined);\n\n function handleAuthResponse(response: LoginAuthenticationResponse): void {\n if (response.login) {\n setLogin(response.login);\n }\n\n if (response.memberships) {\n setMemberships(response.memberships);\n }\n\n if (response.code) {\n if (props.onCode) {\n props.onCode(response.code);\n } else {\n medplum\n .processCode(response.code)\n .then(() => {\n if (props.onSuccess) {\n props.onSuccess();\n }\n })\n .catch(console.log);\n }\n }\n }\n\n return (\n <Document width={450}>\n {(() => {\n if (!login) {\n return (\n <AuthenticationForm\n clientId={props.clientId}\n scope={props.scope}\n nonce={props.nonce}\n googleClientId={props.googleClientId}\n onForgotPassword={props.onForgotPassword}\n onRegister={props.onRegister}\n handleAuthResponse={handleAuthResponse}\n >\n {props.children}\n </AuthenticationForm>\n );\n } else if (memberships) {\n return <ProfileForm login={login} memberships={memberships} handleAuthResponse={handleAuthResponse} />;\n } else {\n return <div>Success</div>;\n }\n })()}\n </Document>\n );\n}\n\ninterface AuthenticationFormProps {\n readonly projectId?: string;\n readonly clientId?: string;\n readonly scope?: string;\n readonly nonce?: string;\n readonly googleClientId?: string;\n readonly onForgotPassword?: () => void;\n readonly onRegister?: () => void;\n readonly handleAuthResponse: (response: LoginAuthenticationResponse) => void;\n readonly children?: React.ReactNode;\n}\n\nfunction AuthenticationForm(props: AuthenticationFormProps): JSX.Element {\n const medplum = useMedplum();\n const googleClientId = getGoogleClientId(props.googleClientId);\n const [outcome, setOutcome] = useState<OperationOutcome>();\n const issues = getIssuesForExpression(outcome, undefined);\n\n return (\n <Form\n style={{ maxWidth: 400 }}\n onSubmit={(formData: Record<string, string>) => {\n medplum\n .startLogin({\n clientId: props.clientId,\n scope: props.scope,\n nonce: props.nonce,\n email: formData.email,\n password: formData.password,\n remember: formData.remember === 'true',\n })\n .then(props.handleAuthResponse)\n .catch(setOutcome);\n }}\n >\n <div className=\"medplum-center\">{props.children}</div>\n {issues && (\n <div className=\"medplum-input-error\">\n {issues.map((issue) => (\n <div data-testid=\"text-field-error\" key={issue.details?.text}>\n {issue.details?.text}\n </div>\n ))}\n </div>\n )}\n {googleClientId && (\n <>\n <div className=\"medplum-signin-google-container\">\n <GoogleButton\n googleClientId={googleClientId}\n handleGoogleCredential={(response: GoogleCredentialResponse) => {\n medplum\n .startGoogleLogin({\n clientId: props.clientId,\n scope: props.scope,\n nonce: props.nonce,\n googleClientId: response.clientId,\n googleCredential: response.credential,\n })\n .then(props.handleAuthResponse)\n .catch(setOutcome);\n }}\n />\n </div>\n <div className=\"medplum-signin-separator\">or</div>\n </>\n )}\n <FormSection title=\"Email\" htmlFor=\"email\" outcome={outcome}>\n <Input name=\"email\" type=\"email\" testid=\"email\" required={true} autoFocus={true} outcome={outcome} />\n </FormSection>\n <FormSection title=\"Password\" htmlFor=\"password\" outcome={outcome}>\n <Input name=\"password\" type=\"password\" testid=\"password\" autoComplete=\"off\" required={true} outcome={outcome} />\n </FormSection>\n <div className=\"medplum-signin-buttons\">\n {(props.onForgotPassword || props.onRegister) && (\n <div>\n {props.onForgotPassword && (\n <MedplumLink testid=\"forgotpassword\" onClick={props.onForgotPassword}>\n Forgot password\n </MedplumLink>\n )}\n {props.onRegister && (\n <MedplumLink testid=\"register\" onClick={props.onRegister}>\n Register\n </MedplumLink>\n )}\n </div>\n )}\n <div>\n <input type=\"checkbox\" id=\"remember\" name=\"remember\" value=\"true\" />\n <label htmlFor=\"remember\">Remember me</label>\n </div>\n <div>\n <Button type=\"submit\" testid=\"submit\">\n Sign in\n </Button>\n </div>\n </div>\n </Form>\n );\n}\n\ninterface ProfileFormProps {\n login: string;\n memberships: ProjectMembership[];\n handleAuthResponse: (response: any) => void;\n}\n\nfunction ProfileForm(props: ProfileFormProps): JSX.Element {\n const medplum = useMedplum();\n return (\n <div>\n <div className=\"medplum-center\">\n <Logo size={32} />\n <h1>Choose profile</h1>\n </div>\n {props.memberships.map((membership: ProjectMembership) => (\n <div\n className=\"medplum-nav-menu-profile\"\n key={membership.id}\n onClick={() => {\n medplum\n .post('auth/profile', {\n login: props.login,\n profile: membership.id,\n })\n .then(props.handleAuthResponse);\n }}\n >\n <div className=\"medplum-nav-menu-profile-icon\">\n <Avatar alt={membership.profile?.display} />\n </div>\n <div className=\"medplum-nav-menu-profile-label\">\n {membership.profile?.display}\n <div className=\"medplum-nav-menu-profile-help-text\">{membership.project?.display}</div>\n </div>\n </div>\n ))}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ function StatusBadge(props) {
4
+ return React.createElement("span", { className: `medplum-status medplum-status-${props.status}` }, props.status);
5
+ }
6
+
7
+ export { StatusBadge };
8
+ //# sourceMappingURL=StatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBadge.js","sources":["../../src/StatusBadge.tsx"],"sourcesContent":["import React from 'react';\nimport './StatusBadge.css';\n\nexport interface StatusBadgeProps {\n readonly status: string;\n}\n\nexport function StatusBadge(props: StatusBadgeProps): JSX.Element {\n return <span className={`medplum-status medplum-status-${props.status}`}>{props.status}</span>;\n}\n"],"names":[],"mappings":";;AAOM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,OAAO,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAE,CAAA,8BAAA,EAAiC,KAAK,CAAC,MAAM,CAAA,CAAE,EAAG,EAAA,KAAK,CAAC,MAAM,CAAQ,CAAC;AACjG;;;;"}
File without changes
@@ -0,0 +1,38 @@
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+ import { Popup } from './Popup.js';
3
+
4
+ function SubMenu(props) {
5
+ const [hover, setHover] = useState(false);
6
+ const [visible, setVisible] = useState(false);
7
+ const [anchor, setAnchor] = useState(undefined);
8
+ const menuItemRef = useRef(null);
9
+ const hoverRef = useRef(false);
10
+ hoverRef.current = hover;
11
+ const visibleRef = useRef(false);
12
+ visibleRef.current = visible;
13
+ function show() {
14
+ const el = menuItemRef.current;
15
+ if (el) {
16
+ setAnchor(el.getBoundingClientRect());
17
+ setVisible(true);
18
+ }
19
+ }
20
+ useEffect(() => {
21
+ const timerId = window.setInterval(() => {
22
+ if (!visibleRef.current && hoverRef.current) {
23
+ show();
24
+ }
25
+ else if (visibleRef.current && !hoverRef.current) {
26
+ setVisible(false);
27
+ }
28
+ }, 150);
29
+ return () => window.clearInterval(timerId);
30
+ }, []);
31
+ return (React.createElement("div", { ref: menuItemRef, className: "medplum-menu-item medplum-submenu-item", onClick: () => show(), onMouseOver: () => setHover(true), onMouseLeave: () => setHover(false) },
32
+ props.title,
33
+ React.createElement("span", { className: "medplum-submenu-arrow" }, '\u25BA'),
34
+ React.createElement(Popup, { visible: visible, anchor: anchor, autoClose: true, onClose: () => setVisible(false) }, props.children)));
35
+ }
36
+
37
+ export { SubMenu };
38
+ //# sourceMappingURL=SubMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubMenu.js","sources":["../../src/SubMenu.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Popup } from './Popup';\nimport './SubMenu.css';\n\nexport interface SubMenuProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport function SubMenu(props: SubMenuProps): JSX.Element {\n const [hover, setHover] = useState(false);\n const [visible, setVisible] = useState(false);\n const [anchor, setAnchor] = useState<DOMRectReadOnly | undefined>(undefined);\n const menuItemRef = useRef<HTMLDivElement>(null);\n\n const hoverRef = useRef<boolean>(false);\n hoverRef.current = hover;\n\n const visibleRef = useRef<boolean>(false);\n visibleRef.current = visible;\n\n function show(): void {\n const el = menuItemRef.current;\n if (el) {\n setAnchor(el.getBoundingClientRect());\n setVisible(true);\n }\n }\n\n useEffect(() => {\n const timerId = window.setInterval(() => {\n if (!visibleRef.current && hoverRef.current) {\n show();\n } else if (visibleRef.current && !hoverRef.current) {\n setVisible(false);\n }\n }, 150);\n return () => window.clearInterval(timerId);\n }, []);\n\n return (\n <div\n ref={menuItemRef}\n className=\"medplum-menu-item medplum-submenu-item\"\n onClick={() => show()}\n onMouseOver={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n >\n {props.title}\n <span className=\"medplum-submenu-arrow\">{'\\u25BA'}</span>\n <Popup visible={visible} anchor={anchor} autoClose={true} onClose={() => setVisible(false)}>\n {props.children}\n </Popup>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AASM,SAAU,OAAO,CAAC,KAAmB,EAAA;IACzC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA8B,SAAS,CAAC,CAAC;AAC7E,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;AAEjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;AACxC,IAAA,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;AAEzB,IAAA,MAAM,UAAU,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;AAC1C,IAAA,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;AAE7B,IAAA,SAAS,IAAI,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,SAAS,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClB,SAAA;KACF;IAED,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAK;YACtC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,EAAE,CAAC;AACR,aAAA;iBAAM,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAClD,UAAU,CAAC,KAAK,CAAC,CAAC;AACnB,aAAA;SACF,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC5C,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,QACE,KACE,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,GAAG,EAAE,WAAW,EAChB,SAAS,EAAC,wCAAwC,EAClD,OAAO,EAAE,MAAM,IAAI,EAAE,EACrB,WAAW,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EACjC,YAAY,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAA;AAElC,QAAA,KAAK,CAAC,KAAK;AACZ,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,EAAE,QAAQ,CAAQ;AACzD,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,CAAC,EACvF,EAAA,KAAK,CAAC,QAAQ,CACT,CACJ,EACN;AACJ;;;;"}
File without changes
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { killEvent } from './utils/dom.js';
3
+
4
+ function Tab(props) {
5
+ let className = 'medplum-tab';
6
+ if (props.selected) {
7
+ className += ' selected';
8
+ }
9
+ function clickHandler(e) {
10
+ killEvent(e);
11
+ // The onClick prop is set by TabBar as parent component.
12
+ // Using Tab outside of a TabBar is unsupported.
13
+ props.onClick(props.name, e.button);
14
+ }
15
+ return (React.createElement("a", { href: `#${props.name}`, role: "tab", "aria-selected": props.selected, className: className, onClick: clickHandler, onAuxClick: clickHandler }, props.label));
16
+ }
17
+
18
+ export { Tab };
19
+ //# sourceMappingURL=Tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.js","sources":["../../src/Tab.tsx"],"sourcesContent":["import React from 'react';\nimport './Tab.css';\nimport { killEvent } from './utils/dom';\n\nexport interface TabClickHandler {\n (name: string, button: number): void;\n}\n\nexport interface TabProps {\n name: string;\n label: string;\n selected?: boolean;\n onClick?: TabClickHandler;\n}\n\nexport function Tab(props: TabProps): JSX.Element {\n let className = 'medplum-tab';\n if (props.selected) {\n className += ' selected';\n }\n\n function clickHandler(e: React.MouseEvent): void {\n killEvent(e);\n\n // The onClick prop is set by TabBar as parent component.\n // Using Tab outside of a TabBar is unsupported.\n (props.onClick as TabClickHandler)(props.name, e.button);\n }\n\n return (\n <a\n href={`#${props.name}`}\n role=\"tab\"\n aria-selected={props.selected}\n className={className}\n onClick={clickHandler}\n onAuxClick={clickHandler}\n >\n {props.label}\n </a>\n );\n}\n"],"names":[],"mappings":";;;AAeM,SAAU,GAAG,CAAC,KAAe,EAAA;IACjC,IAAI,SAAS,GAAG,aAAa,CAAC;IAC9B,IAAI,KAAK,CAAC,QAAQ,EAAE;QAClB,SAAS,IAAI,WAAW,CAAC;AAC1B,KAAA;IAED,SAAS,YAAY,CAAC,CAAmB,EAAA;QACvC,SAAS,CAAC,CAAC,CAAC,CAAC;;;QAIZ,KAAK,CAAC,OAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;KAC1D;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAA,CAAE,EACtB,IAAI,EAAC,KAAK,EAAA,eAAA,EACK,KAAK,CAAC,QAAQ,EAC7B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,YAAY,IAEvB,KAAK,CAAC,KAAK,CACV,EACJ;AACJ;;;;"}
File without changes
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { Scrollable } from './Scrollable.js';
3
+ import { Tab } from './Tab.js';
4
+
5
+ function TabList(props) {
6
+ return (React.createElement(Scrollable, { className: "medplum-surface", height: 50 },
7
+ React.createElement("div", { role: "tablist", className: "medplum-tablist" },
8
+ React.createElement("div", { className: "medplum-tablist-foreground" }, React.Children.map(props.children, (child, tabIndex) => {
9
+ if (React.isValidElement(child) && child.type === Tab) {
10
+ return React.cloneElement(child, {
11
+ selected: child.props.name === props.value,
12
+ onClick: props.onChange,
13
+ tabIndex,
14
+ });
15
+ }
16
+ else {
17
+ return null;
18
+ }
19
+ })))));
20
+ }
21
+
22
+ export { TabList };
23
+ //# sourceMappingURL=TabList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabList.js","sources":["../../src/TabList.tsx"],"sourcesContent":["import React from 'react';\nimport { Scrollable } from './Scrollable';\nimport { Tab, TabClickHandler } from './Tab';\nimport './Surface.css';\nimport './TabList.css';\n\nexport interface TabListProps {\n value?: string;\n onChange: TabClickHandler;\n children: React.ReactNode;\n}\n\nexport function TabList(props: TabListProps): JSX.Element {\n return (\n <Scrollable className=\"medplum-surface\" height={50}>\n <div role=\"tablist\" className=\"medplum-tablist\">\n <div className=\"medplum-tablist-foreground\">\n {React.Children.map(props.children, (child, tabIndex) => {\n if (React.isValidElement(child) && child.type === Tab) {\n return React.cloneElement(child as React.ReactElement<any>, {\n selected: child.props.name === props.value,\n onClick: props.onChange,\n tabIndex,\n });\n } else {\n return null;\n }\n })}\n </div>\n </div>\n </Scrollable>\n );\n}\n"],"names":[],"mappings":";;;;AAYM,SAAU,OAAO,CAAC,KAAmB,EAAA;IACzC,QACE,KAAC,CAAA,aAAA,CAAA,UAAU,EAAC,EAAA,SAAS,EAAC,iBAAiB,EAAC,MAAM,EAAE,EAAE,EAAA;AAChD,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,iBAAiB,EAAA;AAC7C,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,IACxC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAI;AACtD,gBAAA,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;AACrD,oBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,KAAgC,EAAE;wBAC1D,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK;wBAC1C,OAAO,EAAE,KAAK,CAAC,QAAQ;wBACvB,QAAQ;AACT,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACH,aAAC,CAAC,CACE,CACF,CACK,EACb;AACJ;;;;"}
File without changes
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ function TabPanel(props) {
4
+ return React.createElement("div", { role: "tabpanel" }, props.children);
5
+ }
6
+
7
+ export { TabPanel };
8
+ //# sourceMappingURL=TabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabPanel.js","sources":["../../src/TabPanel.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface TabPanelProps {\n name: string;\n children: React.ReactNode;\n}\n\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n return <div role=\"tabpanel\">{props.children}</div>;\n}\n"],"names":[],"mappings":";;AAOM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,IAAI,EAAC,UAAU,IAAE,KAAK,CAAC,QAAQ,CAAO,CAAC;AACrD;;;;"}
File without changes
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { TabPanel } from './TabPanel.js';
3
+
4
+ function TabSwitch(props) {
5
+ return (React.createElement(React.Fragment, null, React.Children.map(props.children, (child) => {
6
+ if (React.isValidElement(child) && child.type === TabPanel && child.props.name === props.value) {
7
+ return child;
8
+ }
9
+ else {
10
+ return null;
11
+ }
12
+ })));
13
+ }
14
+
15
+ export { TabSwitch };
16
+ //# sourceMappingURL=TabSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabSwitch.js","sources":["../../src/TabSwitch.tsx"],"sourcesContent":["import React from 'react';\nimport { TabPanel } from './TabPanel';\n\nexport interface TabSwitchProps {\n value?: string;\n children: React.ReactNode;\n}\n\nexport function TabSwitch(props: TabSwitchProps): JSX.Element {\n return (\n <>\n {React.Children.map(props.children, (child) => {\n if (React.isValidElement(child) && child.type === TabPanel && child.props.name === props.value) {\n return child;\n } else {\n return null;\n }\n })}\n </>\n );\n}\n"],"names":[],"mappings":";;;AAQM,SAAU,SAAS,CAAC,KAAqB,EAAA;AAC7C,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;QAC5C,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE;AAC9F,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF,CAAC,CACD,EACH;AACJ;;;;"}
File without changes
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { getIssuesForExpression } from './utils/outcomes.js';
3
+
4
+ function TextArea(props) {
5
+ const className = 'medplum-textarea' + (props.monospace ? ' monospace' : '');
6
+ const issues = getIssuesForExpression(props.outcome, props.name);
7
+ const invalid = issues && issues.length > 0;
8
+ return (React.createElement("textarea", { id: props.name, name: props.name, className: className, defaultValue: props.defaultValue || '', required: props.required, 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, style: props.style, onChange: (e) => {
9
+ if (props.onChange) {
10
+ props.onChange(e.currentTarget.value);
11
+ }
12
+ } }));
13
+ }
14
+
15
+ export { TextArea };
16
+ //# sourceMappingURL=TextArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.js","sources":["../../src/TextArea.tsx"],"sourcesContent":["import { OperationOutcome } from '@medplum/fhirtypes';\nimport React, { RefObject } from 'react';\nimport { getIssuesForExpression } from './utils/outcomes';\nimport './TextArea.css';\n\nexport interface TextAreaProps {\n name?: string;\n defaultValue?: string;\n required?: boolean;\n autoComplete?: string;\n autoFocus?: boolean;\n inputRef?: RefObject<HTMLTextAreaElement>;\n outcome?: OperationOutcome;\n placeholder?: string;\n testid?: string;\n monospace?: boolean;\n style?: React.CSSProperties;\n onChange?: (newValue: string) => void;\n}\n\nexport function TextArea(props: TextAreaProps): JSX.Element {\n const className = 'medplum-textarea' + (props.monospace ? ' monospace' : '');\n const issues = getIssuesForExpression(props.outcome, props.name);\n const invalid = issues && issues.length > 0;\n return (\n <textarea\n id={props.name}\n name={props.name}\n className={className}\n defaultValue={props.defaultValue || ''}\n required={props.required}\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 style={props.style}\n onChange={(e) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.value);\n }\n }}\n />\n );\n}\n"],"names":[],"mappings":";;;AAoBM,SAAU,QAAQ,CAAC,KAAoB,EAAA;AAC3C,IAAA,MAAM,SAAS,GAAG,kBAAkB,IAAI,KAAK,CAAC,SAAS,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC;AAC7E,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;AAC5C,IAAA,QACE,KACE,CAAA,aAAA,CAAA,UAAA,EAAA,EAAA,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,GAAG,EAAE,KAAK,CAAC,QAAQ,EACL,cAAA,EAAA,OAAO,sBACH,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,EAAE,EACvD,WAAW,EAAE,KAAK,CAAC,WAAW,iBACjB,KAAK,CAAC,MAAM,EACzB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,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;;;;"}
File without changes
@@ -0,0 +1,50 @@
1
+ import { getReferenceString } from '@medplum/core';
2
+ import React, { useState } from 'react';
3
+ import { Avatar } from './Avatar.js';
4
+ import { Button } from './Button.js';
5
+ import { DateTimeDisplay } from './DateTimeDisplay.js';
6
+ import { ErrorBoundary } from './ErrorBoundary.js';
7
+ import { MedplumLink } from './MedplumLink.js';
8
+ import { Popup } from './Popup.js';
9
+ import { ResourceName } from './ResourceName.js';
10
+ import { killEvent } from './utils/dom.js';
11
+
12
+ function Timeline(props) {
13
+ return React.createElement("main", { className: "medplum-document medplum-timeline" }, props.children);
14
+ }
15
+ function TimelineItem(props) {
16
+ var _a, _b, _c;
17
+ const [popupAnchor, setPopupAnchor] = useState();
18
+ const author = (_a = props.profile) !== null && _a !== void 0 ? _a : (_b = props.resource.meta) === null || _b === void 0 ? void 0 : _b.author;
19
+ return (React.createElement("article", { className: props.className || 'medplum-timeline-item', "data-testid": "timeline-item" },
20
+ React.createElement("div", { className: "medplum-timeline-item-header" },
21
+ React.createElement("div", { className: "medplum-timeline-item-avatar" },
22
+ React.createElement(Avatar, { value: author, link: true, size: "medium" })),
23
+ React.createElement("div", { className: "medplum-timeline-item-title" },
24
+ React.createElement(ResourceName, { value: author, link: true }),
25
+ React.createElement("div", { className: "medplum-timeline-item-subtitle" },
26
+ React.createElement(MedplumLink, { to: props.resource },
27
+ React.createElement(DateTimeDisplay, { value: (_c = props.resource.meta) === null || _c === void 0 ? void 0 : _c.lastUpdated })),
28
+ React.createElement("span", null, "\u00B7"),
29
+ React.createElement(MedplumLink, { to: props.resource }, props.resource.resourceType))),
30
+ props.popupMenuItems && (React.createElement("div", { className: "medplum-timeline-item-actions" },
31
+ React.createElement("a", { href: "#", "aria-label": `Actions for ${getReferenceString(props.resource)}`, onClick: (e) => {
32
+ killEvent(e);
33
+ const el = e.currentTarget;
34
+ const rect = el.getBoundingClientRect();
35
+ setPopupAnchor(rect);
36
+ } },
37
+ React.createElement("svg", { fill: "currentColor", viewBox: "0 0 20 20" },
38
+ React.createElement("g", { transform: "translate(-446 -350)" },
39
+ React.createElement("path", { d: "M458 360a2 2 0 1 1-4 0 2 2 0 0 1 4 0m6 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0m-12 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0" }))))))),
40
+ React.createElement(ErrorBoundary, null,
41
+ props.padding && React.createElement("div", { style: { padding: '2px 16px 16px 16px' } }, props.children),
42
+ !props.padding && React.createElement(React.Fragment, null, props.children)),
43
+ props.socialEnabled && (React.createElement("div", { className: "medplum-timeline-item-footer" },
44
+ React.createElement(Button, { borderless: true }, "Like"),
45
+ React.createElement(Button, { borderless: true }, "Comment"))),
46
+ props.popupMenuItems && (React.createElement(Popup, { visible: !!popupAnchor, anchor: popupAnchor, autoClose: true, onClose: () => setPopupAnchor(undefined) }, props.popupMenuItems))));
47
+ }
48
+
49
+ export { Timeline, TimelineItem };
50
+ //# sourceMappingURL=Timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timeline.js","sources":["../../src/Timeline.tsx"],"sourcesContent":["import { getReferenceString } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Avatar } from './Avatar';\nimport { Button } from './Button';\nimport { DateTimeDisplay } from './DateTimeDisplay';\nimport { ErrorBoundary } from './ErrorBoundary';\nimport { MedplumLink } from './MedplumLink';\nimport { Popup } from './Popup';\nimport { ResourceName } from './ResourceName';\nimport { killEvent } from './utils/dom';\nimport './Timeline.css';\n\nexport interface TimelineProps {\n children?: React.ReactNode;\n}\n\nexport function Timeline(props: TimelineProps): JSX.Element {\n return <main className=\"medplum-document medplum-timeline\">{props.children}</main>;\n}\n\nexport interface TimelineItemProps {\n resource: Resource;\n profile?: Reference;\n socialEnabled?: boolean;\n children?: React.ReactNode;\n padding?: boolean;\n className?: string;\n popupMenuItems?: React.ReactNode;\n}\n\nexport function TimelineItem(props: TimelineItemProps): JSX.Element {\n const [popupAnchor, setPopupAnchor] = useState<DOMRect | undefined>();\n const author = props.profile ?? props.resource.meta?.author;\n return (\n <article className={props.className || 'medplum-timeline-item'} data-testid=\"timeline-item\">\n <div className=\"medplum-timeline-item-header\">\n <div className=\"medplum-timeline-item-avatar\">\n <Avatar value={author} link={true} size=\"medium\" />\n </div>\n <div className=\"medplum-timeline-item-title\">\n <ResourceName value={author} link={true} />\n <div className=\"medplum-timeline-item-subtitle\">\n <MedplumLink to={props.resource}>\n <DateTimeDisplay value={props.resource.meta?.lastUpdated} />\n </MedplumLink>\n <span>&middot;</span>\n <MedplumLink to={props.resource}>{props.resource.resourceType}</MedplumLink>\n </div>\n </div>\n {props.popupMenuItems && (\n <div className=\"medplum-timeline-item-actions\">\n <a\n href=\"#\"\n aria-label={`Actions for ${getReferenceString(props.resource)}`}\n onClick={(e) => {\n killEvent(e);\n const el = e.currentTarget;\n const rect = el.getBoundingClientRect();\n setPopupAnchor(rect);\n }}\n >\n <svg fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <g transform=\"translate(-446 -350)\">\n <path d=\"M458 360a2 2 0 1 1-4 0 2 2 0 0 1 4 0m6 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0m-12 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0\"></path>\n </g>\n </svg>\n </a>\n </div>\n )}\n </div>\n <ErrorBoundary>\n {props.padding && <div style={{ padding: '2px 16px 16px 16px' }}>{props.children}</div>}\n {!props.padding && <>{props.children}</>}\n </ErrorBoundary>\n {props.socialEnabled && (\n <div className=\"medplum-timeline-item-footer\">\n <Button borderless={true}>Like</Button>\n <Button borderless={true}>Comment</Button>\n </div>\n )}\n {props.popupMenuItems && (\n <Popup visible={!!popupAnchor} anchor={popupAnchor} autoClose={true} onClose={() => setPopupAnchor(undefined)}>\n {props.popupMenuItems}\n </Popup>\n )}\n </article>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAiBM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,OAAO,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,mCAAmC,IAAE,KAAK,CAAC,QAAQ,CAAQ,CAAC;AACrF,CAAC;AAYK,SAAU,YAAY,CAAC,KAAwB,EAAA;;IACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,EAAuB,CAAC;AACtE,IAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC;IAC5D,QACE,KAAS,CAAA,aAAA,CAAA,SAAA,EAAA,EAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,uBAAuB,EAAA,aAAA,EAAc,eAAe,EAAA;QACzF,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,8BAA8B,EAAA;YAC3C,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,8BAA8B,EAAA;AAC3C,gBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,QAAQ,GAAG,CAC/C;YACN,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,6BAA6B,EAAA;gBAC1C,KAAC,CAAA,aAAA,CAAA,YAAY,IAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAI,CAAA;gBAC3C,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,gCAAgC,EAAA;AAC7C,oBAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EAAC,EAAA,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAA;AAC7B,wBAAA,KAAA,CAAA,aAAA,CAAC,eAAe,EAAA,EAAC,KAAK,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,GAAI,CAChD;oBACd,KAAqB,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,QAAA,CAAA;AACrB,oBAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,EAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAG,EAAA,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAe,CACxE,CACF;AACL,YAAA,KAAK,CAAC,cAAc,KACnB,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,+BAA+B,EAAA;AAC5C,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAC,GAAG,gBACI,CAAe,YAAA,EAAA,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAC/D,OAAO,EAAE,CAAC,CAAC,KAAI;wBACb,SAAS,CAAC,CAAC,CAAC,CAAC;AACb,wBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC;AAC3B,wBAAA,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBACxC,cAAc,CAAC,IAAI,CAAC,CAAC;qBACtB,EAAA;AAED,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,IAAI,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAA;wBAC1C,KAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA;4BACjC,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,CAAC,EAAC,wGAAwG,EAAA,CAAQ,CACtH,CACA,CACJ,CACA,CACP,CACG;AACN,QAAA,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,IAAA;AACX,YAAA,KAAK,CAAC,OAAO,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAA,EAAG,KAAK,CAAC,QAAQ,CAAO;YACtF,CAAC,KAAK,CAAC,OAAO,IAAI,0CAAG,KAAK,CAAC,QAAQ,CAAI,CAC1B;AACf,QAAA,KAAK,CAAC,aAAa,KAClB,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,8BAA8B,EAAA;AAC3C,YAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EAAC,UAAU,EAAE,IAAI,EAAe,EAAA,MAAA,CAAA;AACvC,YAAA,KAAA,CAAA,aAAA,CAAC,MAAM,EAAC,EAAA,UAAU,EAAE,IAAI,EAAA,EAAA,SAAA,CAAkB,CACtC,CACP;AACA,QAAA,KAAK,CAAC,cAAc,KACnB,KAAA,CAAA,aAAA,CAAC,KAAK,EAAC,EAAA,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAAA,EAC1G,KAAK,CAAC,cAAc,CACf,CACT,CACO,EACV;AACJ;;;;"}
File without changes