@medplum/react 0.9.25 → 0.9.28

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 (411) hide show
  1. package/dist/cjs/index.js +282 -152
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/index.min.js +1 -1
  4. package/dist/cjs/index.min.js.map +1 -1
  5. package/dist/cjs/styles.css +83 -79
  6. package/dist/{types → esm}/AddressDisplay.d.ts +0 -0
  7. package/dist/esm/AddressDisplay.js +13 -0
  8. package/dist/esm/AddressDisplay.js.map +1 -0
  9. package/dist/{types → esm}/AddressInput.d.ts +0 -0
  10. package/dist/esm/AddressInput.js +69 -0
  11. package/dist/esm/AddressInput.js.map +1 -0
  12. package/dist/{types → esm}/AnnotationInput.d.ts +0 -0
  13. package/dist/esm/AnnotationInput.js +28 -0
  14. package/dist/esm/AnnotationInput.js.map +1 -0
  15. package/dist/{types → esm}/AttachmentArrayDisplay.d.ts +0 -0
  16. package/dist/esm/AttachmentArrayDisplay.js +11 -0
  17. package/dist/esm/AttachmentArrayDisplay.js.map +1 -0
  18. package/dist/{types → esm}/AttachmentArrayInput.d.ts +0 -0
  19. package/dist/esm/AttachmentArrayInput.js +42 -0
  20. package/dist/esm/AttachmentArrayInput.js.map +1 -0
  21. package/dist/{types → esm}/AttachmentDisplay.d.ts +0 -0
  22. package/dist/esm/AttachmentDisplay.js +20 -0
  23. package/dist/esm/AttachmentDisplay.js.map +1 -0
  24. package/dist/{types → esm}/AttachmentInput.d.ts +0 -0
  25. package/dist/esm/AttachmentInput.js +27 -0
  26. package/dist/esm/AttachmentInput.js.map +1 -0
  27. package/dist/{types → esm}/Autocomplete.d.ts +1 -0
  28. package/dist/esm/Autocomplete.js +280 -0
  29. package/dist/esm/Autocomplete.js.map +1 -0
  30. package/dist/{types → esm}/Avatar.d.ts +0 -0
  31. package/dist/esm/Avatar.js +24 -0
  32. package/dist/esm/Avatar.js.map +1 -0
  33. package/dist/{types → esm}/BackboneElementDisplay.d.ts +0 -0
  34. package/dist/esm/BackboneElementDisplay.js +43 -0
  35. package/dist/esm/BackboneElementDisplay.js.map +1 -0
  36. package/dist/{types → esm}/BackboneElementInput.d.ts +0 -0
  37. package/dist/esm/BackboneElementInput.js +51 -0
  38. package/dist/esm/BackboneElementInput.js.map +1 -0
  39. package/dist/{types → esm}/Button.d.ts +0 -0
  40. package/dist/esm/Button.js +13 -0
  41. package/dist/esm/Button.js.map +1 -0
  42. package/dist/{types → esm}/CalendarInput.d.ts +0 -0
  43. package/dist/esm/CalendarInput.js +96 -0
  44. package/dist/esm/CalendarInput.js.map +1 -0
  45. package/dist/{types → esm}/Checkbox.d.ts +0 -0
  46. package/dist/esm/Checkbox.js +13 -0
  47. package/dist/esm/Checkbox.js.map +1 -0
  48. package/dist/{types → esm}/CheckboxFormSection.d.ts +0 -0
  49. package/dist/esm/CheckboxFormSection.js +12 -0
  50. package/dist/esm/CheckboxFormSection.js.map +1 -0
  51. package/dist/{types → esm}/CodeInput.d.ts +0 -0
  52. package/dist/esm/CodeInput.js +28 -0
  53. package/dist/esm/CodeInput.js.map +1 -0
  54. package/dist/{types → esm}/CodeableConceptDisplay.d.ts +0 -0
  55. package/dist/esm/CodeableConceptDisplay.js +21 -0
  56. package/dist/esm/CodeableConceptDisplay.js.map +1 -0
  57. package/dist/{types → esm}/CodeableConceptInput.d.ts +0 -0
  58. package/dist/esm/CodeableConceptInput.js +52 -0
  59. package/dist/esm/CodeableConceptInput.js.map +1 -0
  60. package/dist/{types → esm}/CodingDisplay.d.ts +0 -0
  61. package/dist/esm/CodingDisplay.js +9 -0
  62. package/dist/esm/CodingDisplay.js.map +1 -0
  63. package/dist/{types → esm}/CodingInput.d.ts +0 -0
  64. package/dist/esm/CodingInput.js +30 -0
  65. package/dist/esm/CodingInput.js.map +1 -0
  66. package/dist/{types → esm}/ContactDetailDisplay.d.ts +0 -0
  67. package/dist/esm/ContactDetailDisplay.js +17 -0
  68. package/dist/esm/ContactDetailDisplay.js.map +1 -0
  69. package/dist/{types → esm}/ContactDetailInput.d.ts +0 -0
  70. package/dist/esm/ContactDetailInput.js +37 -0
  71. package/dist/esm/ContactDetailInput.js.map +1 -0
  72. package/dist/{types → esm}/ContactPointDisplay.d.ts +0 -0
  73. package/dist/esm/ContactPointDisplay.js +29 -0
  74. package/dist/esm/ContactPointDisplay.js.map +1 -0
  75. package/dist/{types → esm}/ContactPointInput.d.ts +0 -0
  76. package/dist/esm/ContactPointInput.js +60 -0
  77. package/dist/esm/ContactPointInput.js.map +1 -0
  78. package/dist/{types → esm}/DateTimeInput.d.ts +0 -0
  79. package/dist/esm/DateTimeInput.js +60 -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 +101 -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}/PeriodInput.d.ts +0 -0
  172. package/dist/esm/PeriodInput.js +19 -0
  173. package/dist/esm/PeriodInput.js.map +1 -0
  174. package/dist/{types → esm}/PlanDefinitionBuilder.d.ts +0 -0
  175. package/dist/esm/PlanDefinitionBuilder.js +224 -0
  176. package/dist/esm/PlanDefinitionBuilder.js.map +1 -0
  177. package/dist/{types → esm}/Popup.d.ts +0 -0
  178. package/dist/esm/Popup.js +64 -0
  179. package/dist/esm/Popup.js.map +1 -0
  180. package/dist/{types → esm}/QuantityDisplay.d.ts +0 -0
  181. package/dist/esm/QuantityDisplay.js +28 -0
  182. package/dist/esm/QuantityDisplay.js.map +1 -0
  183. package/dist/{types → esm}/QuantityInput.d.ts +0 -0
  184. package/dist/esm/QuantityInput.js +33 -0
  185. package/dist/esm/QuantityInput.js.map +1 -0
  186. package/dist/{types → esm}/QuestionnaireBuilder.d.ts +0 -0
  187. package/dist/esm/QuestionnaireBuilder.js +217 -0
  188. package/dist/esm/QuestionnaireBuilder.js.map +1 -0
  189. package/dist/{types → esm}/QuestionnaireForm.d.ts +0 -0
  190. package/dist/esm/QuestionnaireForm.js +218 -0
  191. package/dist/esm/QuestionnaireForm.js.map +1 -0
  192. package/dist/{types → esm}/QuestionnaireUtils.d.ts +0 -0
  193. package/dist/esm/QuestionnaireUtils.js +103 -0
  194. package/dist/esm/QuestionnaireUtils.js.map +1 -0
  195. package/dist/{types → esm}/RangeDisplay.d.ts +0 -0
  196. package/dist/esm/RangeDisplay.js +21 -0
  197. package/dist/esm/RangeDisplay.js.map +1 -0
  198. package/dist/{types → esm}/RangeInput.d.ts +0 -0
  199. package/dist/esm/RangeInput.js +25 -0
  200. package/dist/esm/RangeInput.js.map +1 -0
  201. package/dist/{types → esm}/RatioDisplay.d.ts +0 -0
  202. package/dist/esm/RatioDisplay.js +16 -0
  203. package/dist/esm/RatioDisplay.js.map +1 -0
  204. package/dist/{types → esm}/RatioInput.d.ts +0 -0
  205. package/dist/esm/RatioInput.js +25 -0
  206. package/dist/esm/RatioInput.js.map +1 -0
  207. package/dist/{types → esm}/ReferenceDisplay.d.ts +0 -0
  208. package/dist/esm/ReferenceDisplay.js +21 -0
  209. package/dist/esm/ReferenceDisplay.js.map +1 -0
  210. package/dist/{types → esm}/ReferenceInput.d.ts +0 -0
  211. package/dist/esm/ReferenceInput.js +42 -0
  212. package/dist/esm/ReferenceInput.js.map +1 -0
  213. package/dist/{types → esm}/RegisterForm.d.ts +0 -0
  214. package/dist/esm/RegisterForm.js +121 -0
  215. package/dist/esm/RegisterForm.js.map +1 -0
  216. package/dist/{types → esm}/RequestGroupDisplay.d.ts +0 -0
  217. package/dist/esm/RequestGroupDisplay.js +72 -0
  218. package/dist/esm/RequestGroupDisplay.js.map +1 -0
  219. package/dist/{types → esm}/ResourceArrayDisplay.d.ts +0 -0
  220. package/dist/esm/ResourceArrayDisplay.js +14 -0
  221. package/dist/esm/ResourceArrayDisplay.js.map +1 -0
  222. package/dist/{types → esm}/ResourceArrayInput.d.ts +0 -0
  223. package/dist/esm/ResourceArrayInput.js +47 -0
  224. package/dist/esm/ResourceArrayInput.js.map +1 -0
  225. package/dist/{types → esm}/ResourceBadge.d.ts +0 -0
  226. package/dist/esm/ResourceBadge.js +13 -0
  227. package/dist/esm/ResourceBadge.js.map +1 -0
  228. package/dist/{types → esm}/ResourceBlame.d.ts +0 -0
  229. package/dist/esm/ResourceBlame.js +65 -0
  230. package/dist/esm/ResourceBlame.js.map +1 -0
  231. package/dist/{types → esm}/ResourceDiff.d.ts +0 -0
  232. package/dist/esm/ResourceDiff.js +28 -0
  233. package/dist/esm/ResourceDiff.js.map +1 -0
  234. package/dist/{types → esm}/ResourceDiffTable.d.ts +0 -0
  235. package/dist/esm/ResourceDiffTable.js +58 -0
  236. package/dist/esm/ResourceDiffTable.js.map +1 -0
  237. package/dist/{types → esm}/ResourceForm.d.ts +0 -0
  238. package/dist/esm/ResourceForm.js +55 -0
  239. package/dist/esm/ResourceForm.js.map +1 -0
  240. package/dist/{types → esm}/ResourceHistoryTable.d.ts +0 -0
  241. package/dist/esm/ResourceHistoryTable.js +45 -0
  242. package/dist/esm/ResourceHistoryTable.js.map +1 -0
  243. package/dist/{types → esm}/ResourceInput.d.ts +1 -0
  244. package/dist/esm/ResourceInput.js +41 -0
  245. package/dist/esm/ResourceInput.js.map +1 -0
  246. package/dist/{types → esm}/ResourceName.d.ts +0 -0
  247. package/dist/esm/ResourceName.js +16 -0
  248. package/dist/esm/ResourceName.js.map +1 -0
  249. package/dist/{types → esm}/ResourcePropertyDisplay.d.ts +0 -0
  250. package/dist/esm/ResourcePropertyDisplay.js +107 -0
  251. package/dist/esm/ResourcePropertyDisplay.js.map +1 -0
  252. package/dist/{types → esm}/ResourcePropertyInput.d.ts +0 -0
  253. package/dist/esm/ResourcePropertyInput.js +154 -0
  254. package/dist/esm/ResourcePropertyInput.js.map +1 -0
  255. package/dist/{types → esm}/ResourceTable.d.ts +0 -0
  256. package/dist/esm/ResourceTable.js +22 -0
  257. package/dist/esm/ResourceTable.js.map +1 -0
  258. package/dist/{types → esm}/ResourceTimeline.d.ts +0 -0
  259. package/dist/esm/ResourceTimeline.js +221 -0
  260. package/dist/esm/ResourceTimeline.js.map +1 -0
  261. package/dist/{types → esm}/Scheduler.d.ts +0 -0
  262. package/dist/esm/Scheduler.js +82 -0
  263. package/dist/esm/Scheduler.js.map +1 -0
  264. package/dist/{types → esm}/Scrollable.d.ts +0 -0
  265. package/dist/esm/Scrollable.js +12 -0
  266. package/dist/esm/Scrollable.js.map +1 -0
  267. package/dist/{types → esm}/SearchControl.d.ts +0 -0
  268. package/dist/esm/SearchControl.js +268 -0
  269. package/dist/esm/SearchControl.js.map +1 -0
  270. package/dist/{types → esm}/SearchControlField.d.ts +0 -0
  271. package/dist/esm/SearchControlField.js +98 -0
  272. package/dist/esm/SearchControlField.js.map +1 -0
  273. package/dist/{types → esm}/SearchFieldEditor.d.ts +0 -0
  274. package/dist/esm/SearchFieldEditor.js +192 -0
  275. package/dist/esm/SearchFieldEditor.js.map +1 -0
  276. package/dist/{types → esm}/SearchFilterEditor.d.ts +0 -0
  277. package/dist/esm/SearchFilterEditor.js +103 -0
  278. package/dist/esm/SearchFilterEditor.js.map +1 -0
  279. package/dist/{types → esm}/SearchFilterValueDialog.d.ts +0 -0
  280. package/dist/esm/SearchFilterValueDialog.js +22 -0
  281. package/dist/esm/SearchFilterValueDialog.js.map +1 -0
  282. package/dist/{types → esm}/SearchFilterValueDisplay.d.ts +0 -0
  283. package/dist/esm/SearchFilterValueDisplay.js +22 -0
  284. package/dist/esm/SearchFilterValueDisplay.js.map +1 -0
  285. package/dist/{types → esm}/SearchFilterValueInput.d.ts +0 -0
  286. package/dist/esm/SearchFilterValueInput.js +59 -0
  287. package/dist/esm/SearchFilterValueInput.js.map +1 -0
  288. package/dist/{types → esm}/SearchPopupMenu.d.ts +0 -0
  289. package/dist/esm/SearchPopupMenu.js +135 -0
  290. package/dist/esm/SearchPopupMenu.js.map +1 -0
  291. package/dist/{types → esm}/SearchUtils.d.ts +0 -0
  292. package/dist/esm/SearchUtils.js +487 -0
  293. package/dist/esm/SearchUtils.js.map +1 -0
  294. package/dist/{types → esm}/Select.d.ts +0 -0
  295. package/dist/esm/Select.js +16 -0
  296. package/dist/esm/Select.js.map +1 -0
  297. package/dist/{types → esm}/ServiceRequestTimeline.d.ts +0 -0
  298. package/dist/esm/ServiceRequestTimeline.js +53 -0
  299. package/dist/esm/ServiceRequestTimeline.js.map +1 -0
  300. package/dist/{types → esm}/SignInForm.d.ts +0 -0
  301. package/dist/esm/SignInForm.js +130 -0
  302. package/dist/esm/SignInForm.js.map +1 -0
  303. package/dist/{types → esm}/StatusBadge.d.ts +0 -0
  304. package/dist/esm/StatusBadge.js +8 -0
  305. package/dist/esm/StatusBadge.js.map +1 -0
  306. package/dist/{types → esm}/SubMenu.d.ts +0 -0
  307. package/dist/esm/SubMenu.js +38 -0
  308. package/dist/esm/SubMenu.js.map +1 -0
  309. package/dist/{types → esm}/Tab.d.ts +0 -0
  310. package/dist/esm/Tab.js +19 -0
  311. package/dist/esm/Tab.js.map +1 -0
  312. package/dist/{types → esm}/TabList.d.ts +0 -0
  313. package/dist/esm/TabList.js +23 -0
  314. package/dist/esm/TabList.js.map +1 -0
  315. package/dist/{types → esm}/TabPanel.d.ts +0 -0
  316. package/dist/esm/TabPanel.js +8 -0
  317. package/dist/esm/TabPanel.js.map +1 -0
  318. package/dist/{types → esm}/TabSwitch.d.ts +0 -0
  319. package/dist/esm/TabSwitch.js +16 -0
  320. package/dist/esm/TabSwitch.js.map +1 -0
  321. package/dist/{types → esm}/TextArea.d.ts +0 -0
  322. package/dist/esm/TextArea.js +16 -0
  323. package/dist/esm/TextArea.js.map +1 -0
  324. package/dist/{types → esm}/Timeline.d.ts +0 -0
  325. package/dist/esm/Timeline.js +48 -0
  326. package/dist/esm/Timeline.js.map +1 -0
  327. package/dist/esm/TimingInput.d.ts +8 -0
  328. package/dist/esm/TimingInput.js +90 -0
  329. package/dist/esm/TimingInput.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 -1
  340. package/dist/esm/index.js +86 -5814
  341. package/dist/esm/index.js.map +1 -1
  342. package/dist/esm/index.min.js +1 -1
  343. package/dist/esm/index.min.js.map +1 -1
  344. package/dist/esm/node_modules/tslib/tslib.es6.js +27 -0
  345. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  346. package/dist/{types → esm}/stories/AddressInput.stories.d.ts +0 -0
  347. package/dist/{types → esm}/stories/AttachmentArrayInput.stories.d.ts +0 -0
  348. package/dist/{types → esm}/stories/AttachmentInput.stories.d.ts +0 -0
  349. package/dist/{types → esm}/stories/Autocomplete.stories.d.ts +1 -0
  350. package/dist/{types → esm}/stories/Avatar.stories.d.ts +0 -0
  351. package/dist/{types → esm}/stories/Button.stories.d.ts +0 -0
  352. package/dist/esm/stories/CodeableConceptDisplay.stories.d.ts +8 -0
  353. package/dist/{types → esm}/stories/DiagnosticReportDisplay.stories.d.ts +0 -0
  354. package/dist/{types → esm}/stories/Dialog.stories.d.ts +0 -0
  355. package/dist/{types → esm}/stories/EncounterTimeline.stories.d.ts +0 -0
  356. package/dist/{types → esm}/stories/FhirPathDisplay.stories.d.ts +0 -0
  357. package/dist/{types → esm}/stories/FormSection.stories.d.ts +0 -0
  358. package/dist/{types → esm}/stories/Header.stories.d.ts +0 -0
  359. package/dist/{types → esm}/stories/Input.stories.d.ts +0 -0
  360. package/dist/{types → esm}/stories/Loading.stories.d.ts +0 -0
  361. package/dist/{types → esm}/stories/Logo.stories.d.ts +0 -0
  362. package/dist/{types → esm}/stories/PatientTimeline.stories.d.ts +0 -0
  363. package/dist/{types → esm}/stories/PlanDefinitionBuilder.stories.d.ts +0 -0
  364. package/dist/{types → esm}/stories/QuestionnaireBuilder.stories.d.ts +0 -0
  365. package/dist/{types → esm}/stories/QuestionnaireForm.stories.d.ts +0 -0
  366. package/dist/{types → esm}/stories/ReferenceInput.stories.d.ts +0 -0
  367. package/dist/{types → esm}/stories/RegisterForm.stories.d.ts +0 -0
  368. package/dist/{types → esm}/stories/RequestGroupDisplay.stories.d.ts +0 -0
  369. package/dist/{types → esm}/stories/ResourceBlame.stories.d.ts +0 -0
  370. package/dist/{types → esm}/stories/ResourceForm.stories.d.ts +0 -0
  371. package/dist/{types → esm}/stories/ResourceHistoryTable.stories.d.ts +0 -0
  372. package/dist/{types → esm}/stories/ResourceTable.stories.d.ts +0 -0
  373. package/dist/{types → esm}/stories/Scheduler.stories.d.ts +0 -0
  374. package/dist/{types → esm}/stories/SearchControl.stories.d.ts +0 -0
  375. package/dist/{types → esm}/stories/Select.stories.d.ts +0 -0
  376. package/dist/{types → esm}/stories/SignInForm.stories.d.ts +0 -0
  377. package/dist/{types → esm}/stories/StatusBadge.stories.d.ts +0 -0
  378. package/dist/{types → esm}/stories/Tabs.stories.d.ts +0 -0
  379. package/dist/{types → esm}/stories/Timeline.stories.d.ts +0 -0
  380. package/dist/esm/stories/TimingInput.stories.d.ts +6 -0
  381. package/dist/{types → esm}/stories/UploadButton.stories.d.ts +0 -0
  382. package/dist/esm/styles.css +83 -79
  383. package/dist/{types → esm}/test.setup.d.ts +0 -0
  384. package/dist/{types → esm}/useResource.d.ts +0 -0
  385. package/dist/esm/useResource.js +65 -0
  386. package/dist/esm/useResource.js.map +1 -0
  387. package/dist/{types → esm}/utils/blame.d.ts +0 -0
  388. package/dist/esm/utils/blame.js +74 -0
  389. package/dist/esm/utils/blame.js.map +1 -0
  390. package/dist/{types → esm}/utils/date.d.ts +0 -0
  391. package/dist/esm/utils/date.js +48 -0
  392. package/dist/esm/utils/date.js.map +1 -0
  393. package/dist/{types → esm}/utils/diff.d.ts +0 -0
  394. package/dist/esm/utils/diff.js +118 -0
  395. package/dist/esm/utils/diff.js.map +1 -0
  396. package/dist/{types → esm}/utils/dom.d.ts +0 -0
  397. package/dist/esm/utils/dom.js +34 -0
  398. package/dist/esm/utils/dom.js.map +1 -0
  399. package/dist/{types → esm}/utils/outcomes.d.ts +0 -0
  400. package/dist/esm/utils/outcomes.js +7 -0
  401. package/dist/esm/utils/outcomes.js.map +1 -0
  402. package/dist/{types → esm}/utils/recaptcha.d.ts +0 -0
  403. package/dist/esm/utils/recaptcha.js +27 -0
  404. package/dist/esm/utils/recaptcha.js.map +1 -0
  405. package/dist/{types → esm}/utils.d.ts +0 -0
  406. package/dist/esm/utils.js +15 -0
  407. package/dist/esm/utils.js.map +1 -0
  408. package/package.json +7 -7
  409. package/stats.html +4034 -0
  410. package/dist/types/DateTimeDisplay.d.ts +0 -5
  411. package/dist/types/PeriodDisplay.d.ts +0 -6
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatientTimeline.js","sources":["../../src/PatientTimeline.tsx"],"sourcesContent":["import { createReference, getReferenceString, ProfileResource } from '@medplum/core';\nimport { Attachment, Patient, Reference, Resource } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { ResourceTimeline } from './ResourceTimeline';\n\nexport interface PatientTimelineProps {\n patient: Patient | Reference<Patient>;\n}\n\nconst searches = [\n '$/_history',\n 'Communication?subject=$',\n 'Device?patient=$',\n 'DeviceRequest?patient=$',\n 'DiagnosticReport?subject=$',\n 'Media?subject=$',\n 'ServiceRequest?subject=$',\n];\n\nexport function PatientTimeline(props: PatientTimelineProps): JSX.Element {\n return (\n <ResourceTimeline\n value={props.patient}\n buildSearchRequests={(resource: Resource) => ({\n resourceType: 'Bundle',\n type: 'batch',\n entry: searches.map((search) => ({\n request: {\n method: 'GET',\n url: search.replaceAll('$', getReferenceString(resource)),\n },\n })),\n })}\n createCommunication={(resource: Patient, sender: ProfileResource, text: string) => ({\n resourceType: 'Communication',\n subject: createReference(resource),\n sender: createReference(sender),\n sent: new Date().toISOString(),\n payload: [{ contentString: text }],\n })}\n createMedia={(resource: Patient, operator: ProfileResource, content: Attachment) => ({\n resourceType: 'Media',\n subject: createReference(resource),\n operator: createReference(operator),\n issued: new Date().toISOString(),\n content,\n })}\n />\n );\n}\n"],"names":[],"mappings":";;;;AASA,MAAM,QAAQ,GAAG;IACf,YAAY;IACZ,yBAAyB;IACzB,kBAAkB;IAClB,yBAAyB;IACzB,4BAA4B;IAC5B,iBAAiB;IACjB,0BAA0B;CAC3B,CAAC;AAEI,SAAU,eAAe,CAAC,KAA2B,EAAA;AACzD,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,gBAAgB,EACf,EAAA,KAAK,EAAE,KAAK,CAAC,OAAO,EACpB,mBAAmB,EAAE,CAAC,QAAkB,MAAM;AAC5C,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC/B,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC1D,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC,EACF,mBAAmB,EAAE,CAAC,QAAiB,EAAE,MAAuB,EAAE,IAAY,MAAM;AAClF,YAAA,YAAY,EAAE,eAAe;AAC7B,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,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,QAAiB,EAAE,QAAyB,EAAE,OAAmB,MAAM;AACnF,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;AAClC,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,19 @@
1
+ import React, { useState } from 'react';
2
+ import { Input } from './Input.js';
3
+ import { InputRow } from './InputRow.js';
4
+
5
+ function PeriodInput(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, { type: "datetime-local", placeholder: "Start", defaultValue: value === null || value === void 0 ? void 0 : value.start, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { start: newValue })) }),
15
+ React.createElement(Input, { type: "datetime-local", placeholder: "End", defaultValue: value === null || value === void 0 ? void 0 : value.end, onChange: (newValue) => setValueWrapper(Object.assign(Object.assign({}, value), { end: newValue })) })));
16
+ }
17
+
18
+ export { PeriodInput };
19
+ //# sourceMappingURL=PeriodInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeriodInput.js","sources":["../../src/PeriodInput.tsx"],"sourcesContent":["import { Period } from '@medplum/fhirtypes';\nimport React, { useState } from 'react';\nimport { Input } from './Input';\nimport { InputRow } from './InputRow';\n\nexport interface PeriodInputProps {\n name: string;\n defaultValue?: Period;\n onChange?: (value: Period) => void;\n}\n\nexport function PeriodInput(props: PeriodInputProps): JSX.Element {\n const [value, setValue] = useState(props.defaultValue);\n\n function setValueWrapper(newValue: Period): void {\n setValue(newValue);\n if (props.onChange) {\n props.onChange(newValue);\n }\n }\n\n return (\n <InputRow>\n <Input\n type=\"datetime-local\"\n placeholder=\"Start\"\n defaultValue={value?.start}\n onChange={(newValue) => setValueWrapper({ ...value, start: newValue })}\n />\n <Input\n type=\"datetime-local\"\n placeholder=\"End\"\n defaultValue={value?.end}\n onChange={(newValue) => setValueWrapper({ ...value, end: newValue })}\n />\n </InputRow>\n );\n}\n"],"names":[],"mappings":";;;;AAWM,SAAU,WAAW,CAAC,KAAuB,EAAA;AACjD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEvD,SAAS,eAAe,CAAC,QAAgB,EAAA;QACvC,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,IAAI,EAAC,gBAAgB,EACrB,WAAW,EAAC,OAAO,EACnB,YAAY,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,KAAK,EAC1B,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,CAAE,EAAA,EAAA,KAAK,EAAE,QAAQ,IAAG,EACtE,CAAA;AACF,QAAA,KAAA,CAAA,aAAA,CAAC,KAAK,EACJ,EAAA,IAAI,EAAC,gBAAgB,EACrB,WAAW,EAAC,KAAK,EACjB,YAAY,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,GAAG,EACxB,QAAQ,EAAE,CAAC,QAAQ,KAAK,eAAe,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,CAAA,EAAA,EAAE,GAAG,EAAE,QAAQ,IAAG,EACpE,CAAA,CACO,EACX;AACJ;;;;"}
File without changes
@@ -0,0 +1,224 @@
1
+ import { getReferenceString } from '@medplum/core';
2
+ import React, { useState, useRef, useEffect } from 'react';
3
+ import { Button } from './Button.js';
4
+ import { Form } from './Form.js';
5
+ import { FormSection } from './FormSection.js';
6
+ import { Input } from './Input.js';
7
+ import { useMedplum } from './MedplumProvider.js';
8
+ import { ReferenceDisplay } from './ReferenceDisplay.js';
9
+ import { setPropertyValue } from './ResourceForm.js';
10
+ import { ResourceInput } from './ResourceInput.js';
11
+ import { ResourcePropertyDisplay, getValueAndType } from './ResourcePropertyDisplay.js';
12
+ import { ResourcePropertyInput } from './ResourcePropertyInput.js';
13
+ import { Select } from './Select.js';
14
+ import { useResource } from './useResource.js';
15
+ import { killEvent } from './utils/dom.js';
16
+
17
+ function PlanDefinitionBuilder(props) {
18
+ const medplum = useMedplum();
19
+ const defaultValue = useResource(props.value);
20
+ const [schema, setSchema] = useState(undefined);
21
+ const [selectedKey, setSelectedKey] = useState();
22
+ const [hoverKey, setHoverKey] = useState();
23
+ const [value, setValue] = useState();
24
+ function handleDocumentMouseOver() {
25
+ setHoverKey(undefined);
26
+ }
27
+ function handleDocumentClick() {
28
+ setSelectedKey(undefined);
29
+ }
30
+ const valueRef = useRef();
31
+ valueRef.current = value;
32
+ useEffect(() => {
33
+ medplum.requestSchema('PlanDefinition').then(setSchema);
34
+ }, [medplum]);
35
+ useEffect(() => {
36
+ setValue(ensurePlanDefinitionKeys(defaultValue !== null && defaultValue !== void 0 ? defaultValue : { resourceType: 'PlanDefinition' }));
37
+ document.addEventListener('mouseover', handleDocumentMouseOver);
38
+ document.addEventListener('click', handleDocumentClick);
39
+ return () => {
40
+ document.removeEventListener('mouseover', handleDocumentMouseOver);
41
+ document.removeEventListener('click', handleDocumentClick);
42
+ };
43
+ }, [defaultValue]);
44
+ if (!schema || !value) {
45
+ return null;
46
+ }
47
+ function changeProperty(property, newValue) {
48
+ setValue(Object.assign(Object.assign({}, valueRef.current), { [property]: newValue }));
49
+ }
50
+ return (React.createElement("div", { className: "medplum-questionnaire-builder" },
51
+ React.createElement(Form, { testid: "questionnaire-form", onSubmit: () => props.onSubmit(value) },
52
+ React.createElement(FormSection, { title: "Plan Title", htmlFor: "title" },
53
+ React.createElement(Input, { defaultValue: value.title, onChange: (newValue) => changeProperty('title', newValue) })),
54
+ React.createElement(ActionArrayBuilder, { actions: value.action || [], selectedKey: selectedKey, setSelectedKey: setSelectedKey, hoverKey: hoverKey, setHoverKey: setHoverKey, onChange: (x) => changeProperty('action', x) }),
55
+ React.createElement(Button, { type: "submit", size: "large" }, "Save"))));
56
+ }
57
+ function ActionArrayBuilder(props) {
58
+ const actionsRef = useRef();
59
+ actionsRef.current = props.actions;
60
+ function changeAction(changedAction) {
61
+ props.onChange(actionsRef.current.map((i) => (i.id === changedAction.id ? changedAction : i)));
62
+ }
63
+ function addAction(addedAction) {
64
+ props.onChange([...actionsRef.current, addedAction]);
65
+ props.setSelectedKey(addedAction.id);
66
+ }
67
+ function removeAction(removedAction) {
68
+ props.onChange(actionsRef.current.filter((i) => i !== removedAction));
69
+ }
70
+ return (React.createElement("div", { className: "section" },
71
+ props.actions.map((action) => (React.createElement("div", { key: action.id },
72
+ React.createElement(ActionBuilder, { action: action, selectedKey: props.selectedKey, setSelectedKey: props.setSelectedKey, hoverKey: props.hoverKey, setHoverKey: props.setHoverKey, onChange: changeAction, onRemove: () => removeAction(action) })))),
73
+ React.createElement("div", { className: "bottom-actions" },
74
+ React.createElement("a", { href: "#", onClick: (e) => {
75
+ killEvent(e);
76
+ addAction({ id: generateId() });
77
+ } }, "Add action"))));
78
+ }
79
+ function ActionBuilder(props) {
80
+ const { action } = props;
81
+ const actionType = getInitialActionType(action);
82
+ const editing = props.selectedKey === props.action.id;
83
+ const hovering = props.hoverKey === props.action.id;
84
+ function onClick(e) {
85
+ e.stopPropagation();
86
+ props.setSelectedKey(props.action.id);
87
+ }
88
+ function onHover(e) {
89
+ killEvent(e);
90
+ props.setHoverKey(props.action.id);
91
+ }
92
+ const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';
93
+ return (React.createElement("div", { "data-testid": action.id, className: className, onClick: onClick, onMouseOver: onHover },
94
+ editing ? (React.createElement(ActionEditor, { action: action, actionType: actionType, onChange: props.onChange, selectedKey: props.selectedKey, setSelectedKey: props.setSelectedKey, hoverKey: props.hoverKey, setHoverKey: props.setHoverKey, onRemove: props.onRemove })) : (React.createElement(ActionDisplay, { action: action, actionType: actionType })),
95
+ React.createElement("div", { className: "bottom-actions" },
96
+ React.createElement("a", { href: "#", onClick: (e) => {
97
+ e.preventDefault();
98
+ props.onRemove();
99
+ } }, "Remove"))));
100
+ }
101
+ const timingProperty = {
102
+ path: 'PlanDefinition.action.timing[x]',
103
+ min: 0,
104
+ max: '1',
105
+ type: [{ code: 'dateTime' }, { code: 'Period' }, { code: 'Range' }, { code: 'Timing' }],
106
+ };
107
+ function ActionDisplay(props) {
108
+ const { action, actionType } = props;
109
+ const [propertyValue, propertyType] = getActionTiming(action);
110
+ return (React.createElement("div", null,
111
+ React.createElement("div", null,
112
+ action.title || 'Untitled',
113
+ " ",
114
+ actionType && `(${actionType})`),
115
+ action.definitionCanonical && (React.createElement("div", null,
116
+ React.createElement(ReferenceDisplay, { value: { reference: action.definitionCanonical } }))),
117
+ propertyValue && (React.createElement("div", null,
118
+ React.createElement(ResourcePropertyDisplay, { property: timingProperty, propertyType: propertyType, value: propertyValue })))));
119
+ }
120
+ function ActionEditor(props) {
121
+ const { action } = props;
122
+ const [actionType, setActionType] = useState(props.actionType);
123
+ function changeProperty(property, value) {
124
+ props.onChange(Object.assign(Object.assign({}, action), { [property]: value }));
125
+ }
126
+ return (React.createElement(React.Fragment, null,
127
+ React.createElement(FormSection, { title: "Title", htmlFor: `actionTitle-${action.id}` },
128
+ React.createElement(Input, { name: `actionTitle-${action.id}`, defaultValue: action.title, onChange: (newValue) => changeProperty('title', newValue) })),
129
+ React.createElement(FormSection, { title: "Type of Action", description: "The type of the action to be performed.", htmlFor: `actionType-${action.id}` },
130
+ React.createElement(Select, { name: `actionType-${action.id}`, defaultValue: actionType, onChange: setActionType },
131
+ React.createElement("option", null),
132
+ React.createElement("option", { value: "appointment" }, "Appointment"),
133
+ React.createElement("option", { value: "lab" }, "Lab"),
134
+ React.createElement("option", { value: "questionnaire" }, "Questionnaire"),
135
+ React.createElement("option", { value: "task" }, "Task"))),
136
+ action.action && action.action.length > 0 && (React.createElement(ActionArrayBuilder, { actions: action.action, selectedKey: props.selectedKey, setSelectedKey: props.setSelectedKey, hoverKey: props.hoverKey, setHoverKey: props.setHoverKey, onChange: (x) => changeProperty('action', x) })),
137
+ (() => {
138
+ switch (actionType) {
139
+ case 'appointment':
140
+ return (React.createElement(ActionResourceTypeBuilder, { title: "Appointment", description: "The subject must schedule an appointment from the schedule.", resourceType: "Schedule", action: action, onChange: props.onChange }));
141
+ case 'lab':
142
+ return (React.createElement(ActionResourceTypeBuilder, { title: "Lab", description: "The subject must complete the following lab panel.", resourceType: "ActivityDefinition", action: action, onChange: props.onChange }));
143
+ case 'questionnaire':
144
+ return (React.createElement(ActionResourceTypeBuilder, { title: "Questionnaire", description: "The subject must complete the selected questionnaire.", resourceType: "Questionnaire", action: action, onChange: props.onChange }));
145
+ case 'task':
146
+ return (React.createElement(ActionResourceTypeBuilder, { title: "Task", description: "The subject must complete the following task.", resourceType: "ActivityDefinition", action: action, onChange: props.onChange }));
147
+ default:
148
+ return null;
149
+ }
150
+ })(),
151
+ React.createElement(FormSection, { title: "Timing", description: "When the action should take place.", htmlFor: 'timing-' + action.id },
152
+ React.createElement(ActionTimingInput, { name: 'timing-' + action.id, action: action, onChange: props.onChange }))));
153
+ }
154
+ function ActionResourceTypeBuilder(props) {
155
+ const { id, definitionCanonical } = props.action;
156
+ const reference = (definitionCanonical === null || definitionCanonical === void 0 ? void 0 : definitionCanonical.startsWith(props.resourceType + '/'))
157
+ ? { reference: definitionCanonical }
158
+ : undefined;
159
+ return (React.createElement(FormSection, { title: props.title, description: props.description, htmlFor: id },
160
+ React.createElement(ResourceInput, { name: id, resourceType: props.resourceType, defaultValue: reference, loadOnFocus: true, onChange: (newValue) => {
161
+ if (newValue) {
162
+ props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: getReferenceString(newValue) }));
163
+ }
164
+ else {
165
+ props.onChange(Object.assign(Object.assign({}, props.action), { definitionCanonical: undefined }));
166
+ }
167
+ } })));
168
+ }
169
+ function ActionTimingInput(props) {
170
+ const value = props.action;
171
+ const key = 'timing';
172
+ const [propertyValue, propertyType] = getActionTiming(value);
173
+ return (React.createElement(ResourcePropertyInput, { property: timingProperty, name: "timing[x]", defaultValue: propertyValue, defaultPropertyType: propertyType, onChange: (newValue, propName) => {
174
+ props.onChange(setPropertyValue(value, key, propName !== null && propName !== void 0 ? propName : key, timingProperty, newValue));
175
+ } }));
176
+ }
177
+ function getInitialActionType(action) {
178
+ var _a, _b, _c;
179
+ if ((_a = action.definitionCanonical) === null || _a === void 0 ? void 0 : _a.startsWith('Schedule')) {
180
+ return 'appointment';
181
+ }
182
+ if ((_b = action.definitionCanonical) === null || _b === void 0 ? void 0 : _b.startsWith('Questionnaire/')) {
183
+ return 'questionnaire';
184
+ }
185
+ if ((_c = action.definitionCanonical) === null || _c === void 0 ? void 0 : _c.startsWith('ActivityDefinition/')) {
186
+ return 'task';
187
+ }
188
+ return undefined;
189
+ }
190
+ function getActionTiming(action) {
191
+ return getValueAndType({ type: 'PlanDefinitionAction', value: action }, 'timing');
192
+ }
193
+ let nextId = 1;
194
+ /**
195
+ * Generates a unique ID.
196
+ * React needs unique IDs for components for rendering performance.
197
+ * All of the important components in the questionnaire builder have id properties for this:
198
+ * Questionnaire, QuestionnaireItem, and QuestionnaireItemAnswerOption.
199
+ * @return A unique key.
200
+ */
201
+ function generateId(existing) {
202
+ if (existing) {
203
+ if (existing.startsWith('id-')) {
204
+ const existingNum = parseInt(existing.substring(3));
205
+ if (!isNaN(existingNum)) {
206
+ nextId = Math.max(nextId, existingNum + 1);
207
+ }
208
+ }
209
+ return existing;
210
+ }
211
+ return 'id-' + nextId++;
212
+ }
213
+ function ensurePlanDefinitionKeys(planDefinition) {
214
+ return Object.assign(Object.assign({}, planDefinition), { action: ensurePlanDefinitionActionKeys(planDefinition.action) });
215
+ }
216
+ function ensurePlanDefinitionActionKeys(actions) {
217
+ if (!actions) {
218
+ return undefined;
219
+ }
220
+ return actions.map((action) => (Object.assign(Object.assign({}, action), { id: generateId(action.id), action: ensurePlanDefinitionActionKeys(action.action) })));
221
+ }
222
+
223
+ export { PlanDefinitionBuilder };
224
+ //# sourceMappingURL=PlanDefinitionBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanDefinitionBuilder.js","sources":["../../src/PlanDefinitionBuilder.tsx"],"sourcesContent":["import { getReferenceString, IndexedStructureDefinition, PropertyType } from '@medplum/core';\nimport { ElementDefinition, PlanDefinition, PlanDefinitionAction, Reference } from '@medplum/fhirtypes';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Button } from './Button';\nimport { Form } from './Form';\nimport { FormSection } from './FormSection';\nimport { Input } from './Input';\nimport { useMedplum } from './MedplumProvider';\nimport { ReferenceDisplay } from './ReferenceDisplay';\nimport { setPropertyValue } from './ResourceForm';\nimport { ResourceInput } from './ResourceInput';\nimport { getValueAndType, ResourcePropertyDisplay } from './ResourcePropertyDisplay';\nimport { ResourcePropertyInput } from './ResourcePropertyInput';\nimport { Select } from './Select';\nimport { useResource } from './useResource';\nimport { killEvent } from './utils/dom';\n\nexport interface PlanDefinitionBuilderProps {\n value: PlanDefinition | Reference<PlanDefinition>;\n onSubmit: (result: PlanDefinition) => void;\n}\n\nexport function PlanDefinitionBuilder(props: PlanDefinitionBuilderProps): JSX.Element | null {\n const medplum = useMedplum();\n const defaultValue = useResource(props.value);\n const [schema, setSchema] = useState<IndexedStructureDefinition | undefined>(undefined);\n const [selectedKey, setSelectedKey] = useState<string>();\n const [hoverKey, setHoverKey] = useState<string>();\n const [value, setValue] = useState<PlanDefinition>();\n\n function handleDocumentMouseOver(): void {\n setHoverKey(undefined);\n }\n\n function handleDocumentClick(): void {\n setSelectedKey(undefined);\n }\n\n const valueRef = useRef<PlanDefinition>();\n valueRef.current = value;\n\n useEffect(() => {\n medplum.requestSchema('PlanDefinition').then(setSchema);\n }, [medplum]);\n\n useEffect(() => {\n setValue(ensurePlanDefinitionKeys(defaultValue ?? { resourceType: 'PlanDefinition' }));\n document.addEventListener('mouseover', handleDocumentMouseOver);\n document.addEventListener('click', handleDocumentClick);\n return () => {\n document.removeEventListener('mouseover', handleDocumentMouseOver);\n document.removeEventListener('click', handleDocumentClick);\n };\n }, [defaultValue]);\n\n if (!schema || !value) {\n return null;\n }\n\n function changeProperty(property: string, newValue: any): void {\n setValue({\n ...valueRef.current,\n [property]: newValue,\n } as PlanDefinition);\n }\n\n return (\n <div className=\"medplum-questionnaire-builder\">\n <Form testid=\"questionnaire-form\" onSubmit={() => props.onSubmit(value)}>\n <FormSection title=\"Plan Title\" htmlFor=\"title\">\n <Input defaultValue={value.title} onChange={(newValue) => changeProperty('title', newValue)} />\n </FormSection>\n <ActionArrayBuilder\n actions={value.action || []}\n selectedKey={selectedKey}\n setSelectedKey={setSelectedKey}\n hoverKey={hoverKey}\n setHoverKey={setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n <Button type=\"submit\" size=\"large\">\n Save\n </Button>\n </Form>\n </div>\n );\n}\n\ninterface ActionArrayBuilderProps {\n actions: PlanDefinitionAction[];\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (actions: PlanDefinitionAction[]) => void;\n}\n\nfunction ActionArrayBuilder(props: ActionArrayBuilderProps): JSX.Element {\n const actionsRef = useRef<PlanDefinitionAction[]>();\n actionsRef.current = props.actions;\n\n function changeAction(changedAction: PlanDefinitionAction): void {\n props.onChange(\n (actionsRef.current as PlanDefinition[]).map((i) => (i.id === changedAction.id ? changedAction : i))\n );\n }\n\n function addAction(addedAction: PlanDefinitionAction): void {\n props.onChange([...(actionsRef.current as PlanDefinition[]), addedAction]);\n props.setSelectedKey(addedAction.id);\n }\n\n function removeAction(removedAction: PlanDefinitionAction): void {\n props.onChange((actionsRef.current as PlanDefinition[]).filter((i) => i !== removedAction));\n }\n\n return (\n <div className=\"section\">\n {props.actions.map((action) => (\n <div key={action.id}>\n <ActionBuilder\n action={action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={changeAction}\n onRemove={() => removeAction(action)}\n />\n </div>\n ))}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n killEvent(e);\n addAction({ id: generateId() });\n }}\n >\n Add action\n </a>\n </div>\n </div>\n );\n}\n\ninterface ActionBuilderProps {\n action: PlanDefinitionAction;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionBuilder(props: ActionBuilderProps): JSX.Element {\n const { action } = props;\n const actionType = getInitialActionType(action);\n const editing = props.selectedKey === props.action.id;\n const hovering = props.hoverKey === props.action.id;\n\n function onClick(e: React.SyntheticEvent): void {\n e.stopPropagation();\n props.setSelectedKey(props.action.id);\n }\n\n function onHover(e: React.SyntheticEvent): void {\n killEvent(e);\n props.setHoverKey(props.action.id);\n }\n\n const className = editing ? 'section editing' : hovering ? 'section hovering' : 'section';\n return (\n <div data-testid={action.id} className={className} onClick={onClick} onMouseOver={onHover}>\n {editing ? (\n <ActionEditor\n action={action}\n actionType={actionType}\n onChange={props.onChange}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onRemove={props.onRemove}\n />\n ) : (\n <ActionDisplay action={action} actionType={actionType} />\n )}\n <div className=\"bottom-actions\">\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n props.onRemove();\n }}\n >\n Remove\n </a>\n </div>\n </div>\n );\n}\n\nconst timingProperty: ElementDefinition = {\n path: 'PlanDefinition.action.timing[x]',\n min: 0,\n max: '1',\n type: [{ code: 'dateTime' }, { code: 'Period' }, { code: 'Range' }, { code: 'Timing' }],\n};\n\ninterface ActionDisplayProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n}\n\nfunction ActionDisplay(props: ActionDisplayProps): JSX.Element {\n const { action, actionType } = props;\n const [propertyValue, propertyType] = getActionTiming(action);\n return (\n <div>\n <div>\n {action.title || 'Untitled'} {actionType && `(${actionType})`}\n </div>\n {action.definitionCanonical && (\n <div>\n <ReferenceDisplay value={{ reference: action.definitionCanonical }} />\n </div>\n )}\n {propertyValue && (\n <div>\n <ResourcePropertyDisplay property={timingProperty} propertyType={propertyType} value={propertyValue} />\n </div>\n )}\n </div>\n );\n}\n\ninterface ActionEditorProps {\n action: PlanDefinitionAction;\n actionType: string | undefined;\n selectedKey: string | undefined;\n setSelectedKey: (key: string | undefined) => void;\n hoverKey: string | undefined;\n setHoverKey: (key: string | undefined) => void;\n onChange: (action: PlanDefinitionAction) => void;\n onRemove: () => void;\n}\n\nfunction ActionEditor(props: ActionEditorProps): JSX.Element {\n const { action } = props;\n const [actionType, setActionType] = useState<string | undefined>(props.actionType);\n\n function changeProperty(property: string, value: any): void {\n props.onChange({\n ...action,\n [property]: value,\n } as PlanDefinitionAction);\n }\n\n return (\n <>\n <FormSection title=\"Title\" htmlFor={`actionTitle-${action.id}`}>\n <Input\n name={`actionTitle-${action.id}`}\n defaultValue={action.title}\n onChange={(newValue) => changeProperty('title', newValue)}\n />\n </FormSection>\n <FormSection\n title=\"Type of Action\"\n description=\"The type of the action to be performed.\"\n htmlFor={`actionType-${action.id}`}\n >\n <Select name={`actionType-${action.id}`} defaultValue={actionType} onChange={setActionType}>\n <option></option>\n <option value=\"appointment\">Appointment</option>\n <option value=\"lab\">Lab</option>\n <option value=\"questionnaire\">Questionnaire</option>\n <option value=\"task\">Task</option>\n </Select>\n </FormSection>\n {action.action && action.action.length > 0 && (\n <ActionArrayBuilder\n actions={action.action}\n selectedKey={props.selectedKey}\n setSelectedKey={props.setSelectedKey}\n hoverKey={props.hoverKey}\n setHoverKey={props.setHoverKey}\n onChange={(x) => changeProperty('action', x)}\n />\n )}\n {(() => {\n switch (actionType) {\n case 'appointment':\n return (\n <ActionResourceTypeBuilder\n title=\"Appointment\"\n description=\"The subject must schedule an appointment from the schedule.\"\n resourceType=\"Schedule\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'lab':\n return (\n <ActionResourceTypeBuilder\n title=\"Lab\"\n description=\"The subject must complete the following lab panel.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'questionnaire':\n return (\n <ActionResourceTypeBuilder\n title=\"Questionnaire\"\n description=\"The subject must complete the selected questionnaire.\"\n resourceType=\"Questionnaire\"\n action={action}\n onChange={props.onChange}\n />\n );\n case 'task':\n return (\n <ActionResourceTypeBuilder\n title=\"Task\"\n description=\"The subject must complete the following task.\"\n resourceType=\"ActivityDefinition\"\n action={action}\n onChange={props.onChange}\n />\n );\n default:\n return null;\n }\n })()}\n <FormSection title=\"Timing\" description=\"When the action should take place.\" htmlFor={'timing-' + action.id}>\n <ActionTimingInput name={'timing-' + action.id} action={action} onChange={props.onChange} />\n </FormSection>\n </>\n );\n}\n\ninterface ActionResourceTypeBuilderProps {\n action: PlanDefinitionAction;\n title: string;\n description: string;\n resourceType: string;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionResourceTypeBuilder(props: ActionResourceTypeBuilderProps): JSX.Element {\n const { id, definitionCanonical } = props.action;\n const reference = definitionCanonical?.startsWith(props.resourceType + '/')\n ? { reference: definitionCanonical }\n : undefined;\n return (\n <FormSection title={props.title} description={props.description} htmlFor={id}>\n <ResourceInput\n name={id as string}\n resourceType={props.resourceType}\n defaultValue={reference}\n loadOnFocus={true}\n onChange={(newValue) => {\n if (newValue) {\n props.onChange({ ...props.action, definitionCanonical: getReferenceString(newValue) });\n } else {\n props.onChange({ ...props.action, definitionCanonical: undefined });\n }\n }}\n />\n </FormSection>\n );\n}\n\ninterface ActionTimingInputProps {\n name: string;\n action: PlanDefinitionAction;\n onChange: (action: PlanDefinitionAction) => void;\n}\n\nfunction ActionTimingInput(props: ActionTimingInputProps): JSX.Element {\n const value = props.action;\n const key = 'timing';\n const [propertyValue, propertyType] = getActionTiming(value);\n return (\n <ResourcePropertyInput\n property={timingProperty}\n name=\"timing[x]\"\n defaultValue={propertyValue}\n defaultPropertyType={propertyType}\n onChange={(newValue: any, propName?: string) => {\n props.onChange(setPropertyValue(value, key, propName ?? key, timingProperty, newValue));\n }}\n />\n );\n}\n\nfunction getInitialActionType(action: PlanDefinitionAction): string | undefined {\n if (action.definitionCanonical?.startsWith('Schedule')) {\n return 'appointment';\n }\n\n if (action.definitionCanonical?.startsWith('Questionnaire/')) {\n return 'questionnaire';\n }\n\n if (action.definitionCanonical?.startsWith('ActivityDefinition/')) {\n return 'task';\n }\n\n return undefined;\n}\n\nfunction getActionTiming(action: PlanDefinitionAction): [any, PropertyType] {\n return getValueAndType({ type: 'PlanDefinitionAction', value: action }, 'timing');\n}\n\nlet nextId = 1;\n\n/**\n * Generates a unique ID.\n * React needs unique IDs for components for rendering performance.\n * All of the important components in the questionnaire builder have id properties for this:\n * Questionnaire, QuestionnaireItem, and QuestionnaireItemAnswerOption.\n * @return A unique key.\n */\nfunction generateId(existing?: string): string {\n if (existing) {\n if (existing.startsWith('id-')) {\n const existingNum = parseInt(existing.substring(3));\n if (!isNaN(existingNum)) {\n nextId = Math.max(nextId, existingNum + 1);\n }\n }\n return existing;\n }\n return 'id-' + nextId++;\n}\n\nfunction ensurePlanDefinitionKeys(planDefinition: PlanDefinition): PlanDefinition {\n return {\n ...planDefinition,\n action: ensurePlanDefinitionActionKeys(planDefinition.action),\n } as PlanDefinition;\n}\n\nfunction ensurePlanDefinitionActionKeys(\n actions: PlanDefinitionAction[] | undefined\n): PlanDefinitionAction[] | undefined {\n if (!actions) {\n return undefined;\n }\n return actions.map((action) => ({\n ...action,\n id: generateId(action.id),\n action: ensurePlanDefinitionActionKeys(action.action),\n }));\n}\n"],"names":[],"mappings":"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"}
File without changes