UNPKG

@medplum/react

Version:

Medplum React Component Library

4 lines 1.1 MB
{ "version": 3, "sources": ["../../../../node_modules/rfc6902/pointer.js", "../../../../node_modules/rfc6902/util.js", "../../../../node_modules/rfc6902/diff.js", "../../../../node_modules/rfc6902/patch.js", "../../../../node_modules/rfc6902/index.js", "../../src/index.ts", "../../src/AddressDisplay/AddressDisplay.tsx", "../../src/AddressInput/AddressInput.tsx", "../../src/ElementsInput/ElementsInput.utils.ts", "../../src/constants.ts", "../../src/AnnotationInput/AnnotationInput.tsx", "../../src/AppShell/AppShell.tsx", "../../src/ErrorBoundary/ErrorBoundary.tsx", "../../../../node_modules/@tabler/icons-react/src/defaultAttributes.ts", "../../../../node_modules/@tabler/icons-react/src/createReactComponent.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconAdjustmentsHorizontal.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconAlertCircle.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconArrowDown.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconArrowRight.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconArrowUp.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBinaryTree.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBleachOff.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBleach.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBoxMultiple.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBracketsContain.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBucketOff.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconBucket.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCake.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCalendar.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCheck.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCheckbox.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconChevronDown.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconChevronRight.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconChevronUp.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCircleMinus.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCirclePlus.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCloudUpload.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconColumns.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCopy.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconCurrencyDollar.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconDots.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEdit.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEmpathize.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEqualNot.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEqual.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEyeOff.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconEye.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconFileAlert.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconFilePlus.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconFilter.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconLanguage.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconLogout.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconMapPin.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconMathGreater.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconMathLower.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconMessage.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconPlus.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconRefresh.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSearch.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSettings.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSortAscending.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSortDescending.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSquare.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconStethoscope.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconSwitchHorizontal.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconTableExport.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconTrash.ts", "../../../../node_modules/@tabler/icons-react/src/icons/IconX.ts", "../../src/Loading/Loading.tsx", "../../src/AppShell/AppShell.module.css", "../../src/AppShell/Header.tsx", "../../../../node_modules/clsx/dist/clsx.mjs", "../../src/ResourceAvatar/ResourceAvatar.tsx", "../../src/MedplumLink/MedplumLink.tsx", "../../src/utils/dom.ts", "../../src/ResourceAvatar/ResourceAvatar.utils.ts", "../../src/AppShell/Header.module.css", "../../src/AppShell/HeaderDropdown.tsx", "../../src/HumanNameDisplay/HumanNameDisplay.tsx", "../../src/AppShell/HeaderSearchInput.tsx", "../../src/AsyncAutocomplete/AsyncAutocomplete.tsx", "../../src/AsyncAutocomplete/AsyncAutocomplete.utils.ts", "../../src/AppShell/HeaderSearchInput.module.css", "../../src/AppShell/Navbar.tsx", "../../src/BookmarkDialog/BookmarkDialog.tsx", "../../src/Form/Form.tsx", "../../src/Form/Form.context.ts", "../../src/Form/FormUtils.ts", "../../src/Form/SubmitButton.tsx", "../../src/ResourceTypeInput/ResourceTypeInput.tsx", "../../src/CodeInput/CodeInput.tsx", "../../src/ValueSetAutocomplete/ValueSetAutocomplete.tsx", "../../src/AppShell/Navbar.module.css", "../../src/AttachmentArrayDisplay/AttachmentArrayDisplay.tsx", "../../src/AttachmentDisplay/AttachmentDisplay.tsx", "../../src/CcdaDisplay/CcdaDisplay.tsx", "../../src/DescriptionList/DescriptionList.module.css", "../../src/DescriptionList/DescriptionList.tsx", "../../src/AttachmentArrayInput/AttachmentArrayInput.tsx", "../../src/AttachmentButton/AttachmentButton.tsx", "../../src/AttachmentInput/AttachmentInput.tsx", "../../src/auth/MfaForm.tsx", "../../src/Logo/Logo.tsx", "../../src/auth/RegisterForm.tsx", "../../src/Container/Container.tsx", "../../src/Container/Container.module.css", "../../src/Panel/Panel.tsx", "../../src/Panel/Panel.module.css", "../../src/Document/Document.tsx", "../../src/auth/NewProjectForm.tsx", "../../src/utils/outcomes.ts", "../../src/auth/NewUserForm.tsx", "../../src/GoogleButton/GoogleButton.tsx", "../../src/utils/script.ts", "../../src/GoogleButton/GoogleButton.utils.ts", "../../src/OperationOutcomeAlert/OperationOutcomeAlert.tsx", "../../src/utils/recaptcha.ts", "../../src/auth/SignInForm.tsx", "../../src/auth/AuthenticationForm.tsx", "../../src/auth/ChooseProfileForm.tsx", "../../src/auth/ChooseScopeForm.tsx", "../../src/BackboneElementDisplay/BackboneElementDisplay.tsx", "../../src/ResourcePropertyDisplay/ResourcePropertyDisplay.tsx", "../../src/CodeableConceptDisplay/CodeableConceptDisplay.tsx", "../../src/CodingDisplay/CodingDisplay.tsx", "../../src/ContactPointDisplay/ContactPointDisplay.tsx", "../../src/ContactDetailDisplay/ContactDetailDisplay.tsx", "../../src/ExtensionDisplay/ExtensionDisplay.tsx", "../../src/ResourcePropertyDisplay/ResourcePropertyDisplay.utils.ts", "../../src/IdentifierDisplay/IdentifierDisplay.tsx", "../../src/MoneyDisplay/MoneyDisplay.tsx", "../../src/QuantityDisplay/QuantityDisplay.tsx", "../../src/RangeDisplay/RangeDisplay.tsx", "../../src/RatioDisplay/RatioDisplay.tsx", "../../src/ReferenceDisplay/ReferenceDisplay.tsx", "../../src/ResourceArrayDisplay/ResourceArrayDisplay.tsx", "../../src/ResourceArrayInput/ResourceArrayInput.utils.ts", "../../src/SliceDisplay/SliceDisplay.tsx", "../../src/utils/maybeWrapWithContext.tsx", "../../src/BackboneElementInput/BackboneElementInput.tsx", "../../src/ElementsInput/ElementsInput.tsx", "../../src/CheckboxFormSection/CheckboxFormSection.tsx", "../../src/FormSection/FormSection.module.css", "../../src/utils/maybeWrapWithTooltip.tsx", "../../src/FormSection/FormSection.tsx", "../../src/ResourceForm/ResourceForm.utils.ts", "../../src/ResourcePropertyInput/ResourcePropertyInput.tsx", "../../src/CodeableConceptInput/CodeableConceptInput.tsx", "../../src/CodingInput/CodingInput.tsx", "../../src/ContactDetailInput/ContactDetailInput.tsx", "../../src/ContactPointInput/ContactPointInput.tsx", "../../src/DateTimeInput/DateTimeInput.tsx", "../../src/DateTimeInput/DateTimeInput.utils.ts", "../../src/ExtensionInput/ExtensionInput.tsx", "../../src/HumanNameInput/HumanNameInput.tsx", "../../src/IdentifierInput/IdentifierInput.tsx", "../../src/MoneyInput/MoneyInput.tsx", "../../src/PeriodInput/PeriodInput.tsx", "../../src/QuantityInput/QuantityInput.tsx", "../../src/RangeInput/RangeInput.tsx", "../../src/RatioInput/RatioInput.tsx", "../../src/ReferenceInput/ReferenceInput.tsx", "../../src/ResourceInput/ResourceInput.tsx", "../../src/ResourceArrayInput/ResourceArrayInput.tsx", "../../src/ResourcePropertyInput/ResourcePropertyInput.utils.ts", "../../src/SliceInput/SliceInput.tsx", "../../src/ResourceArrayInput/ResourceArrayInput.module.css", "../../src/buttons/ArrayAddButton.tsx", "../../src/buttons/ArrayRemoveButton.tsx", "../../src/SensitiveTextarea/SensitiveTextarea.tsx", "../../src/TimingInput/TimingInput.tsx", "../../src/CalendarInput/CalendarInput.tsx", "../../src/CalendarInput/CalendarInput.module.css", "../../src/CalendarInput/CalendarInput.utils.ts", "../../src/chat/BaseChat/BaseChat.tsx", "../../src/chat/BaseChat/BaseChat.module.css", "../../src/chat/ChatModal/ChatModal.tsx", "../../src/chat/ChatModal/ChatModal.module.css", "../../src/chat/ThreadChat/ThreadChat.tsx", "../../src/ResourceTimeline/ResourceTimeline.tsx", "../../src/DiagnosticReportDisplay/DiagnosticReportDisplay.tsx", "../../src/NoteDisplay/NoteDisplay.tsx", "../../src/NoteDisplay/NoteDisplay.module.css", "../../src/ResourceBadge/ResourceBadge.tsx", "../../src/ResourceName/ResourceName.tsx", "../../src/StatusBadge/StatusBadge.tsx", "../../src/DiagnosticReportDisplay/DiagnosticReportDisplay.module.css", "../../src/ResourceDiffTable/ResourceDiffTable.tsx", "../../src/ResourceDiffRow/ResourceDiffRow.tsx", "../../src/ResourceDiffRow/ResourceDiffRow.module.css", "../../src/ResourceDiffTable/ResourceDiffTable.module.css", "../../src/ResourceTable/ResourceTable.tsx", "../../src/Timeline/Timeline.tsx", "../../src/Timeline/Timeline.module.css", "../../src/utils/date.ts", "../../src/ResourceTimeline/ResourceTimeline.module.css", "../../src/DefaultResourceTimeline/DefaultResourceTimeline.tsx", "../../src/EncounterTimeline/EncounterTimeline.tsx", "../../src/FhirPathTable/FhirPathTable.tsx", "../../src/FhirPathDisplay/FhirPathDisplay.tsx", "../../src/SearchControl/SearchControl.tsx", "../../src/SearchExportDialog/SearchExportDialog.tsx", "../../src/SearchFieldEditor/SearchFieldEditor.tsx", "../../src/SearchControl/SearchUtils.tsx", "../../src/SearchFilterEditor/SearchFilterEditor.tsx", "../../src/SearchFilterValueInput/SearchFilterValueInput.tsx", "../../src/SearchFilterValueDialog/SearchFilterValueDialog.tsx", "../../src/SearchFilterValueDisplay/SearchFilterValueDisplay.tsx", "../../src/SearchPopupMenu/SearchPopupMenu.tsx", "../../src/utils/pagination.ts", "../../src/SearchControl/SearchControl.module.css", "../../src/SearchControl/SearchControlField.ts", "../../src/InfoBar/InfoBar.tsx", "../../src/InfoBar/InfoBar.module.css", "../../src/MeasureReportDisplay/MeasureReportDisplay.tsx", "../../src/MeasureReportDisplay/MeasureReportGroupDisplay/MeasureReportGroupDisplay.tsx", "../../src/NotificationIcon/NotificationIcon.tsx", "../../src/PatientExportForm/PatientExportForm.tsx", "../../src/PatientHeader/PatientHeader.tsx", "../../src/PatientHeader/PatientHeader.utils.ts", "../../src/PatientSummary/PatientSummary.tsx", "../../src/PatientSummary/Allergies.tsx", "../../src/PatientSummary/AllergyDialog.tsx", "../../src/PatientSummary/CollapsibleSection.tsx", "../../src/PatientSummary/CollapsibleSection.module.css", "../../src/PatientSummary/SummaryItem.tsx", "../../src/PatientSummary/SummaryItem.module.css", "../../src/PatientSummary/Insurance.tsx", "../../src/PatientSummary/PatientSummary.module.css", "../../src/PatientSummary/Labs.tsx", "../../src/PatientSummary/Medications.tsx", "../../src/PatientSummary/MedicationDialog.tsx", "../../src/PatientSummary/PatientInfoItem.tsx", "../../src/PatientSummary/PatientSummary.utils.ts", "../../src/PatientSummary/ProblemList.tsx", "../../src/PatientSummary/ConditionDialog.tsx", "../../src/PatientSummary/SexualOrientation.tsx", "../../src/PatientSummary/SmokingStatus.tsx", "../../src/PatientSummary/Vitals.tsx", "../../src/PatientSummary/Vitals.utils.ts", "../../src/PatientTimeline/PatientTimeline.tsx", "../../src/PlanDefinitionBuilder/PlanDefinitionBuilder.tsx", "../../src/PlanDefinitionBuilder/PlanDefinitionBuilder.module.css", "../../src/QuestionnaireBuilder/QuestionnaireBuilder.tsx", "../../src/QuestionnaireForm/QuestionnaireFormItem.tsx", "../../src/QuestionnaireBuilder/QuestionnaireBuilder.module.css", "../../src/QuestionnaireForm/QuestionnaireForm.tsx", "../../src/SignatureInput/SignatureInput.tsx", "../../../../node_modules/signature_pad/src/point.ts", "../../../../node_modules/signature_pad/src/bezier.ts", "../../../../node_modules/signature_pad/src/signature_event_target.ts", "../../../../node_modules/signature_pad/src/throttle.ts", "../../../../node_modules/signature_pad/src/signature_pad.ts", "../../src/QuestionnaireForm/QuestionnaireFormItemArray.tsx", "../../src/QuestionnaireForm/QuestionnaireFormGroup.tsx", "../../src/QuestionnaireForm/QuestionnaireFormRepeatableGroup.tsx", "../../src/QuestionnaireForm/QuestionnaireFormRepeatableItem.tsx", "../../src/QuestionnaireForm/QuestionnaireFormStepper.tsx", "../../src/QuestionnaireResponseDisplay/QuestionnaireResponseDisplay.tsx", "../../src/QuestionnaireResponseDisplay/QuestionnaireResponseItemDisplay.tsx", "../../src/ReferenceRangeEditor/ReferenceRangeEditor.tsx", "../../src/ReferenceRangeEditor/ReferenceRangeEditor.module.css", "../../src/RequestGroupDisplay/RequestGroupDisplay.tsx", "../../src/ResourceBlame/ResourceBlame.tsx", "../../src/utils/blame.ts", "../../src/utils/diff.ts", "../../src/ResourceBlame/ResourceBlame.module.css", "../../src/ResourceBlame/ResourceBlame.utils.ts", "../../src/ResourceDiff/ResourceDiff.tsx", "../../src/ResourceDiff/ResourceDiff.module.css", "../../src/ResourceForm/ResourceForm.tsx", "../../src/ResourceForm/ResourceForm.module.css", "../../src/ResourceHistoryTable/ResourceHistoryTable.tsx", "../../src/Scheduler/Scheduler.tsx", "../../src/Scheduler/Scheduler.module.css", "../../src/ServiceRequestTimeline/ServiceRequestTimeline.tsx", "../../src/SmartAppLaunchLink/SmartAppLaunchLink.tsx"], "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Pointer = exports.escapeToken = exports.unescapeToken = void 0;\n/**\nUnescape token part of a JSON Pointer string\n\n`token` should *not* contain any '/' characters.\n\n> Evaluation of each reference token begins by decoding any escaped\n> character sequence. This is performed by first transforming any\n> occurrence of the sequence '~1' to '/', and then transforming any\n> occurrence of the sequence '~0' to '~'. By performing the\n> substitutions in this order, an implementation avoids the error of\n> turning '~01' first into '~1' and then into '/', which would be\n> incorrect (the string '~01' correctly becomes '~1' after\n> transformation).\n\nHere's my take:\n\n~1 is unescaped with higher priority than ~0 because it is a lower-order escape character.\nI say \"lower order\" because '/' needs escaping due to the JSON Pointer serialization technique.\nWhereas, '~' is escaped because escaping '/' uses the '~' character.\n*/\nfunction unescapeToken(token) {\n return token.replace(/~1/g, '/').replace(/~0/g, '~');\n}\nexports.unescapeToken = unescapeToken;\n/** Escape token part of a JSON Pointer string\n\n> '~' needs to be encoded as '~0' and '/'\n> needs to be encoded as '~1' when these characters appear in a\n> reference token.\n\nThis is the exact inverse of `unescapeToken()`, so the reverse replacements must take place in reverse order.\n*/\nfunction escapeToken(token) {\n return token.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\nexports.escapeToken = escapeToken;\n/**\nJSON Pointer representation\n*/\nvar Pointer = /** @class */ (function () {\n function Pointer(tokens) {\n if (tokens === void 0) { tokens = ['']; }\n this.tokens = tokens;\n }\n /**\n `path` *must* be a properly escaped string.\n */\n Pointer.fromJSON = function (path) {\n var tokens = path.split('/').map(unescapeToken);\n if (tokens[0] !== '')\n throw new Error(\"Invalid JSON Pointer: \".concat(path));\n return new Pointer(tokens);\n };\n Pointer.prototype.toString = function () {\n return this.tokens.map(escapeToken).join('/');\n };\n /**\n Returns an object with 'parent', 'key', and 'value' properties.\n In the special case that this Pointer's path == \"\",\n this object will be {parent: null, key: '', value: object}.\n Otherwise, parent and key will have the property such that parent[key] == value.\n */\n Pointer.prototype.evaluate = function (object) {\n var parent = null;\n var key = '';\n var value = object;\n for (var i = 1, l = this.tokens.length; i < l; i++) {\n parent = value;\n key = this.tokens[i];\n if (key == '__proto__' || key == 'constructor' || key == 'prototype') {\n continue;\n }\n // not sure if this the best way to handle non-existant paths...\n value = (parent || {})[key];\n }\n return { parent: parent, key: key, value: value };\n };\n Pointer.prototype.get = function (object) {\n return this.evaluate(object).value;\n };\n Pointer.prototype.set = function (object, value) {\n var endpoint = this.evaluate(object);\n if (endpoint.parent) {\n endpoint.parent[endpoint.key] = value;\n }\n };\n Pointer.prototype.push = function (token) {\n // mutable\n this.tokens.push(token);\n };\n /**\n `token` should be a String. It'll be coerced to one anyway.\n \n immutable (shallowly)\n */\n Pointer.prototype.add = function (token) {\n var tokens = this.tokens.concat(String(token));\n return new Pointer(tokens);\n };\n return Pointer;\n}());\nexports.Pointer = Pointer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clone = exports.objectType = exports.hasOwnProperty = void 0;\nexports.hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction objectType(object) {\n if (object === undefined) {\n return 'undefined';\n }\n if (object === null) {\n return 'null';\n }\n if (Array.isArray(object)) {\n return 'array';\n }\n return typeof object;\n}\nexports.objectType = objectType;\nfunction isNonPrimitive(value) {\n // loose-equality checking for null is faster than strict checking for each of null/undefined/true/false\n // checking null first, then calling typeof, is faster than vice-versa\n return value != null && typeof value == 'object';\n}\n/**\nRecursively copy a value.\n\n@param source - should be a JavaScript primitive, Array, Date, or (plain old) Object.\n@returns copy of source where every Array and Object have been recursively\n reconstructed from their constituent elements\n*/\nfunction clone(source) {\n if (!isNonPrimitive(source)) {\n // short-circuiting is faster than a single return\n return source;\n }\n // x.constructor == Array is the fastest way to check if x is an Array\n if (source.constructor == Array) {\n // construction via imperative for-loop is faster than source.map(arrayVsObject)\n var length_1 = source.length;\n // setting the Array length during construction is faster than just `[]` or `new Array()`\n var arrayTarget = new Array(length_1);\n for (var i = 0; i < length_1; i++) {\n arrayTarget[i] = clone(source[i]);\n }\n return arrayTarget;\n }\n // Date\n if (source.constructor == Date) {\n var dateTarget = new Date(+source);\n return dateTarget;\n }\n // Object\n var objectTarget = {};\n // declaring the variable (with const) inside the loop is faster\n for (var key in source) {\n // hasOwnProperty costs a bit of performance, but it's semantically necessary\n // using a global helper is MUCH faster than calling source.hasOwnProperty(key)\n if (exports.hasOwnProperty.call(source, key)) {\n objectTarget[key] = clone(source[key]);\n }\n }\n return objectTarget;\n}\nexports.clone = clone;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diffAny = exports.diffObjects = exports.diffArrays = exports.intersection = exports.subtract = exports.isDestructive = void 0;\nvar util_1 = require(\"./util\");\nfunction isDestructive(_a) {\n var op = _a.op;\n return op === 'remove' || op === 'replace' || op === 'copy' || op === 'move';\n}\nexports.isDestructive = isDestructive;\n/**\nList the keys in `minuend` that are not in `subtrahend`.\n\nA key is only considered if it is both 1) an own-property (o.hasOwnProperty(k))\nof the object, and 2) has a value that is not undefined. This is to match JSON\nsemantics, where JSON object serialization drops keys with undefined values.\n\n@param minuend Object of interest\n@param subtrahend Object of comparison\n@returns Array of keys that are in `minuend` but not in `subtrahend`.\n*/\nfunction subtract(minuend, subtrahend) {\n // initialize empty object; we only care about the keys, the values can be anything\n var obj = {};\n // build up obj with all the properties of minuend\n for (var add_key in minuend) {\n if (util_1.hasOwnProperty.call(minuend, add_key) && minuend[add_key] !== undefined) {\n obj[add_key] = 1;\n }\n }\n // now delete all the properties of subtrahend from obj\n // (deleting a missing key has no effect)\n for (var del_key in subtrahend) {\n if (util_1.hasOwnProperty.call(subtrahend, del_key) && subtrahend[del_key] !== undefined) {\n delete obj[del_key];\n }\n }\n // finally, extract whatever keys remain in obj\n return Object.keys(obj);\n}\nexports.subtract = subtract;\n/**\nList the keys that shared by all `objects`.\n\nThe semantics of what constitutes a \"key\" is described in {@link subtract}.\n\n@param objects Array of objects to compare\n@returns Array of keys that are in (\"own-properties\" of) every object in `objects`.\n*/\nfunction intersection(objects) {\n var length = objects.length;\n // prepare empty counter to keep track of how many objects each key occurred in\n var counter = {};\n // go through each object and increment the counter for each key in that object\n for (var i = 0; i < length; i++) {\n var object = objects[i];\n for (var key in object) {\n if (util_1.hasOwnProperty.call(object, key) && object[key] !== undefined) {\n counter[key] = (counter[key] || 0) + 1;\n }\n }\n }\n // now delete all keys from the counter that were not seen in every object\n for (var key in counter) {\n if (counter[key] < length) {\n delete counter[key];\n }\n }\n // finally, extract whatever keys remain in the counter\n return Object.keys(counter);\n}\nexports.intersection = intersection;\nfunction isArrayAdd(array_operation) {\n return array_operation.op === 'add';\n}\nfunction isArrayRemove(array_operation) {\n return array_operation.op === 'remove';\n}\nfunction appendArrayOperation(base, operation) {\n return {\n // the new operation must be pushed on the end\n operations: base.operations.concat(operation),\n cost: base.cost + 1,\n };\n}\n/**\nCalculate the shortest sequence of operations to get from `input` to `output`,\nusing a dynamic programming implementation of the Levenshtein distance algorithm.\n\nTo get from the input ABC to the output AZ we could just delete all the input\nand say \"insert A, insert Z\" and be done with it. That's what we do if the\ninput is empty. But we can be smarter.\n\n output\n A Z\n - -\n [0] 1 2\ninput A | 1 [0] 1\n B | 2 [1] 1\n C | 3 2 [2]\n\n1) start at 0,0 (+0)\n2) keep A (+0)\n3) remove B (+1)\n4) replace C with Z (+1)\n\nIf the `input` (source) is empty, they'll all be in the top row, resulting in an\narray of 'add' operations.\nIf the `output` (target) is empty, everything will be in the left column,\nresulting in an array of 'remove' operations.\n\n@returns A list of add/remove/replace operations.\n*/\nfunction diffArrays(input, output, ptr, diff) {\n if (diff === void 0) { diff = diffAny; }\n // set up cost matrix (very simple initialization: just a map)\n var memo = {\n '0,0': { operations: [], cost: 0 },\n };\n /**\n Calculate the cheapest sequence of operations required to get from\n input.slice(0, i) to output.slice(0, j).\n There may be other valid sequences with the same cost, but none cheaper.\n \n @param i The row in the layout above\n @param j The column in the layout above\n @returns An object containing a list of operations, along with the total cost\n of applying them (+1 for each add/remove/replace operation)\n */\n function dist(i, j) {\n // memoized\n var memo_key = \"\".concat(i, \",\").concat(j);\n var memoized = memo[memo_key];\n if (memoized === undefined) {\n // TODO: this !diff(...).length usage could/should be lazy\n if (i > 0 && j > 0 && !diff(input[i - 1], output[j - 1], ptr.add(String(i - 1))).length) {\n // equal (no operations => no cost)\n memoized = dist(i - 1, j - 1);\n }\n else {\n var alternatives = [];\n if (i > 0) {\n // NOT topmost row\n var remove_base = dist(i - 1, j);\n var remove_operation = {\n op: 'remove',\n index: i - 1,\n };\n alternatives.push(appendArrayOperation(remove_base, remove_operation));\n }\n if (j > 0) {\n // NOT leftmost column\n var add_base = dist(i, j - 1);\n var add_operation = {\n op: 'add',\n index: i - 1,\n value: output[j - 1],\n };\n alternatives.push(appendArrayOperation(add_base, add_operation));\n }\n if (i > 0 && j > 0) {\n // TABLE MIDDLE\n // supposing we replaced it, compute the rest of the costs:\n var replace_base = dist(i - 1, j - 1);\n // okay, the general plan is to replace it, but we can be smarter,\n // recursing into the structure and replacing only part of it if\n // possible, but to do so we'll need the original value\n var replace_operation = {\n op: 'replace',\n index: i - 1,\n original: input[i - 1],\n value: output[j - 1],\n };\n alternatives.push(appendArrayOperation(replace_base, replace_operation));\n }\n // the only other case, i === 0 && j === 0, has already been memoized\n // the meat of the algorithm:\n // sort by cost to find the lowest one (might be several ties for lowest)\n // [4, 6, 7, 1, 2].sort((a, b) => a - b) -> [ 1, 2, 4, 6, 7 ]\n var best = alternatives.sort(function (a, b) { return a.cost - b.cost; })[0];\n memoized = best;\n }\n memo[memo_key] = memoized;\n }\n return memoized;\n }\n // handle weird objects masquerading as Arrays that don't have proper length\n // properties by using 0 for everything but positive numbers\n var input_length = (isNaN(input.length) || input.length <= 0) ? 0 : input.length;\n var output_length = (isNaN(output.length) || output.length <= 0) ? 0 : output.length;\n var array_operations = dist(input_length, output_length).operations;\n var padded_operations = array_operations.reduce(function (_a, array_operation) {\n var operations = _a[0], padding = _a[1];\n if (isArrayAdd(array_operation)) {\n var padded_index = array_operation.index + 1 + padding;\n var index_token = padded_index < (input_length + padding) ? String(padded_index) : '-';\n var operation = {\n op: array_operation.op,\n path: ptr.add(index_token).toString(),\n value: array_operation.value,\n };\n // padding++ // maybe only if array_operation.index > -1 ?\n return [operations.concat(operation), padding + 1];\n }\n else if (isArrayRemove(array_operation)) {\n var operation = {\n op: array_operation.op,\n path: ptr.add(String(array_operation.index + padding)).toString(),\n };\n // padding--\n return [operations.concat(operation), padding - 1];\n }\n else { // replace\n var replace_ptr = ptr.add(String(array_operation.index + padding));\n var replace_operations = diff(array_operation.original, array_operation.value, replace_ptr);\n return [operations.concat.apply(operations, replace_operations), padding];\n }\n }, [[], 0])[0];\n return padded_operations;\n}\nexports.diffArrays = diffArrays;\nfunction diffObjects(input, output, ptr, diff) {\n if (diff === void 0) { diff = diffAny; }\n // if a key is in input but not output -> remove it\n var operations = [];\n subtract(input, output).forEach(function (key) {\n operations.push({ op: 'remove', path: ptr.add(key).toString() });\n });\n // if a key is in output but not input -> add it\n subtract(output, input).forEach(function (key) {\n operations.push({ op: 'add', path: ptr.add(key).toString(), value: output[key] });\n });\n // if a key is in both, diff it recursively\n intersection([input, output]).forEach(function (key) {\n operations.push.apply(operations, diff(input[key], output[key], ptr.add(key)));\n });\n return operations;\n}\nexports.diffObjects = diffObjects;\n/**\n`diffAny()` returns an empty array if `input` and `output` are materially equal\n(i.e., would produce equivalent JSON); otherwise it produces an array of patches\nthat would transform `input` into `output`.\n\n> Here, \"equal\" means that the value at the target location and the\n> value conveyed by \"value\" are of the same JSON type, and that they\n> are considered equal by the following rules for that type:\n> o strings: are considered equal if they contain the same number of\n> Unicode characters and their code points are byte-by-byte equal.\n> o numbers: are considered equal if their values are numerically\n> equal.\n> o arrays: are considered equal if they contain the same number of\n> values, and if each value can be considered equal to the value at\n> the corresponding position in the other array, using this list of\n> type-specific rules.\n> o objects: are considered equal if they contain the same number of\n> members, and if each member can be considered equal to a member in\n> the other object, by comparing their keys (as strings) and their\n> values (using this list of type-specific rules).\n> o literals (false, true, and null): are considered equal if they are\n> the same.\n*/\nfunction diffAny(input, output, ptr, diff) {\n if (diff === void 0) { diff = diffAny; }\n // strict equality handles literals, numbers, and strings (a sufficient but not necessary cause)\n if (input === output) {\n return [];\n }\n var input_type = (0, util_1.objectType)(input);\n var output_type = (0, util_1.objectType)(output);\n if (input_type == 'array' && output_type == 'array') {\n return diffArrays(input, output, ptr, diff);\n }\n if (input_type == 'object' && output_type == 'object') {\n return diffObjects(input, output, ptr, diff);\n }\n // at this point we know that input and output are materially different;\n // could be array -> object, object -> array, boolean -> undefined,\n // number -> string, or some other combination, but nothing that can be split\n // up into multiple patches: so `output` must replace `input` wholesale.\n return [{ op: 'replace', path: ptr.toString(), value: output }];\n}\nexports.diffAny = diffAny;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.apply = exports.InvalidOperationError = exports.test = exports.copy = exports.move = exports.replace = exports.remove = exports.add = exports.TestError = exports.MissingError = void 0;\nvar pointer_1 = require(\"./pointer\");\nvar util_1 = require(\"./util\");\nvar diff_1 = require(\"./diff\");\nvar MissingError = /** @class */ (function (_super) {\n __extends(MissingError, _super);\n function MissingError(path) {\n var _this = _super.call(this, \"Value required at path: \".concat(path)) || this;\n _this.path = path;\n _this.name = 'MissingError';\n return _this;\n }\n return MissingError;\n}(Error));\nexports.MissingError = MissingError;\nvar TestError = /** @class */ (function (_super) {\n __extends(TestError, _super);\n function TestError(actual, expected) {\n var _this = _super.call(this, \"Test failed: \".concat(actual, \" != \").concat(expected)) || this;\n _this.actual = actual;\n _this.expected = expected;\n _this.name = 'TestError';\n return _this;\n }\n return TestError;\n}(Error));\nexports.TestError = TestError;\nfunction _add(object, key, value) {\n if (Array.isArray(object)) {\n // `key` must be an index\n if (key == '-') {\n object.push(value);\n }\n else {\n var index = parseInt(key, 10);\n object.splice(index, 0, value);\n }\n }\n else {\n object[key] = value;\n }\n}\nfunction _remove(object, key) {\n if (Array.isArray(object)) {\n // '-' syntax doesn't make sense when removing\n var index = parseInt(key, 10);\n object.splice(index, 1);\n }\n else {\n // not sure what the proper behavior is when path = ''\n delete object[key];\n }\n}\n/**\n> o If the target location specifies an array index, a new value is\n> inserted into the array at the specified index.\n> o If the target location specifies an object member that does not\n> already exist, a new member is added to the object.\n> o If the target location specifies an object member that does exist,\n> that member's value is replaced.\n*/\nfunction add(object, operation) {\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n // it's not exactly a \"MissingError\" in the same way that `remove` is -- more like a MissingParent, or something\n if (endpoint.parent === undefined) {\n return new MissingError(operation.path);\n }\n _add(endpoint.parent, endpoint.key, (0, util_1.clone)(operation.value));\n return null;\n}\nexports.add = add;\n/**\n> The \"remove\" operation removes the value at the target location.\n> The target location MUST exist for the operation to be successful.\n*/\nfunction remove(object, operation) {\n // endpoint has parent, key, and value properties\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n if (endpoint.value === undefined) {\n return new MissingError(operation.path);\n }\n // not sure what the proper behavior is when path = ''\n _remove(endpoint.parent, endpoint.key);\n return null;\n}\nexports.remove = remove;\n/**\n> The \"replace\" operation replaces the value at the target location\n> with a new value. The operation object MUST contain a \"value\" member\n> whose content specifies the replacement value.\n> The target location MUST exist for the operation to be successful.\n\n> This operation is functionally identical to a \"remove\" operation for\n> a value, followed immediately by an \"add\" operation at the same\n> location with the replacement value.\n\nEven more simply, it's like the add operation with an existence check.\n*/\nfunction replace(object, operation) {\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n if (endpoint.parent === null) {\n return new MissingError(operation.path);\n }\n // this existence check treats arrays as a special case\n if (Array.isArray(endpoint.parent)) {\n if (parseInt(endpoint.key, 10) >= endpoint.parent.length) {\n return new MissingError(operation.path);\n }\n }\n else if (endpoint.value === undefined) {\n return new MissingError(operation.path);\n }\n endpoint.parent[endpoint.key] = (0, util_1.clone)(operation.value);\n return null;\n}\nexports.replace = replace;\n/**\n> The \"move\" operation removes the value at a specified location and\n> adds it to the target location.\n> The operation object MUST contain a \"from\" member, which is a string\n> containing a JSON Pointer value that references the location in the\n> target document to move the value from.\n> This operation is functionally identical to a \"remove\" operation on\n> the \"from\" location, followed immediately by an \"add\" operation at\n> the target location with the value that was just removed.\n\n> The \"from\" location MUST NOT be a proper prefix of the \"path\"\n> location; i.e., a location cannot be moved into one of its children.\n\nTODO: throw if the check described in the previous paragraph fails.\n*/\nfunction move(object, operation) {\n var from_endpoint = pointer_1.Pointer.fromJSON(operation.from).evaluate(object);\n if (from_endpoint.value === undefined) {\n return new MissingError(operation.from);\n }\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n if (endpoint.parent === undefined) {\n return new MissingError(operation.path);\n }\n _remove(from_endpoint.parent, from_endpoint.key);\n _add(endpoint.parent, endpoint.key, from_endpoint.value);\n return null;\n}\nexports.move = move;\n/**\n> The \"copy\" operation copies the value at a specified location to the\n> target location.\n> The operation object MUST contain a \"from\" member, which is a string\n> containing a JSON Pointer value that references the location in the\n> target document to copy the value from.\n> The \"from\" location MUST exist for the operation to be successful.\n\n> This operation is functionally identical to an \"add\" operation at the\n> target location using the value specified in the \"from\" member.\n\nAlternatively, it's like 'move' without the 'remove'.\n*/\nfunction copy(object, operation) {\n var from_endpoint = pointer_1.Pointer.fromJSON(operation.from).evaluate(object);\n if (from_endpoint.value === undefined) {\n return new MissingError(operation.from);\n }\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n if (endpoint.parent === undefined) {\n return new MissingError(operation.path);\n }\n _add(endpoint.parent, endpoint.key, (0, util_1.clone)(from_endpoint.value));\n return null;\n}\nexports.copy = copy;\n/**\n> The \"test\" operation tests that a value at the target location is\n> equal to a specified value.\n> The operation object MUST contain a \"value\" member that conveys the\n> value to be compared to the target location's value.\n> The target location MUST be equal to the \"value\" value for the\n> operation to be considered successful.\n*/\nfunction test(object, operation) {\n var endpoint = pointer_1.Pointer.fromJSON(operation.path).evaluate(object);\n // TODO: this diffAny(...).length usage could/should be lazy\n if ((0, diff_1.diffAny)(endpoint.value, operation.value, new pointer_1.Pointer()).length) {\n return new TestError(endpoint.value, operation.value);\n }\n return null;\n}\nexports.test = test;\nvar InvalidOperationError = /** @class */ (function (_super) {\n __extends(InvalidOperationError, _super);\n function InvalidOperationError(operation) {\n var _this = _super.call(this, \"Invalid operation: \".concat(operation.op)) || this;\n _this.operation = operation;\n _this.name = 'InvalidOperationError';\n return _this;\n }\n return InvalidOperationError;\n}(Error));\nexports.InvalidOperationError = InvalidOperationError;\n/**\nSwitch on `operation.op`, applying the corresponding patch function for each\ncase to `object`.\n*/\nfunction apply(object, operation) {\n // not sure why TypeScript can't infer typesafety of:\n // {add, remove, replace, move, copy, test}[operation.op](object, operation)\n // (seems like a bug)\n switch (operation.op) {\n case 'add': return add(object, operation);\n case 'remove': return remove(object, operation);\n case 'replace': return replace(object, operation);\n case 'move': return move(object, operation);\n case 'copy': return copy(object, operation);\n case 'test': return test(object, operation);\n }\n return new InvalidOperationError(operation);\n}\nexports.apply = apply;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createTests = exports.createPatch = exports.applyPatch = exports.Pointer = void 0;\nvar pointer_1 = require(\"./pointer\");\nObject.defineProperty(exports, \"Pointer\", { enumerable: true, get: function () { return pointer_1.Pointer; } });\nvar patch_1 = require(\"./patch\");\nvar diff_1 = require(\"./diff\");\n/**\nApply a 'application/json-patch+json'-type patch to an object.\n\n`patch` *must* be an array of operations.\n\n> Operation objects MUST have exactly one \"op\" member, whose value\n> indicates the operation to perform. Its value MUST be one of \"add\",\n> \"remove\", \"replace\", \"move\", \"copy\", or \"test\"; other values are\n> errors.\n\nThis method mutates the target object in-place.\n\n@returns list of results, one for each operation: `null` indicated success,\n otherwise, the result will be an instance of one of the Error classes:\n MissingError, InvalidOperationError, or TestError.\n*/\nfunction applyPatch(object, patch) {\n return patch.map(function (operation) { return (0, patch_1.apply)(object, operation); });\n}\nexports.applyPatch = applyPatch;\nfunction wrapVoidableDiff(diff) {\n function wrappedDiff(input, output, ptr) {\n var custom_patch = diff(input, output, ptr);\n // ensure an array is always returned\n return Array.isArray(custom_patch) ? custom_patch : (0, diff_1.diffAny)(input, output, ptr, wrappedDiff);\n }\n return wrappedDiff;\n}\n/**\nProduce a 'application/json-patch+json'-type patch to get from one object to\nanother.\n\nThis does not alter `input` or `output` unless they have a property getter with\nside-effects (which is not a good idea anyway).\n\n`diff` is called on each pair of comparable non-primitive nodes in the\n`input`/`output` object trees, producing nested patches. Return `undefined`\nto fall back to default behaviour.\n\nReturns list of operations to perform on `input` to produce `output`.\n*/\nfunction createPatch(input, output, diff) {\n var ptr = new pointer_1.Pointer();\n // a new Pointer gets a default path of [''] if not specified\n return (diff ? wrapVoidableDiff(diff) : diff_1.diffAny)(input, output, ptr);\n}\nexports.createPatch = createPatch;\n/**\nCreate a test operation based on `input`'s current evaluation of the JSON\nPointer `path`; if such a pointer cannot be resolved, returns undefined.\n*/\nfunction createTest(input, path) {\n var endpoint = pointer_1.Pointer.fromJSON(path).evaluate(input);\n if (endpoint !== undefined) {\n return { op: 'test', path: path, value: endpoint.value };\n }\n}\n/**\nProduce an 'application/json-patch+json'-type list of tests, to verify that\nexisting values in an object are identical to the those captured at some\ncheckpoint (whenever this function is called).\n\nThis does not alter `input` or `output` unless they have a property getter with\nside-effects (which is not a good idea anyway).\n\nReturns list of test operations.\n*/\nfunction createTests(input, patch) {\n var tests = new Array();\n patch.filter(diff_1.isDestructive).forEach(function (operation) {\n var pathTest = createTest(input, operation.path);\n if (pathTest)\n tests.push(pathTest);\n if ('from' in operation) {\n var fromTest = createTest(input, operation.from);\n if (fromTest)\n tests.push(fromTest);\n }\n });\n return tests;\n}\nexports.createTests = createTests;\n", "// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors\n// SPDX-License-Identifier: Apache-2.0\n\n// Re-export all hooks from @medplum/react-hooks\nexport * from '@medplum/react-hooks';\n\n// Export all components\nexport * from './AddressDisplay/AddressDisplay';\nexport * from './AddressInput/AddressInput';\nexport * from './AnnotationInput/AnnotationInput';\nexport * from './AppShell/AppShell';\nexport * from './AppShell/Header';\nexport * from './AppShell/Navbar';\nexport * from './AsyncAutocomplete/AsyncAutocomplete';\nexport * from './AttachmentArrayDisplay/AttachmentArrayDisplay';\nexport * from './AttachmentArrayInput/AttachmentArrayInput';\nexport * from './AttachmentButton/AttachmentButton';\nexport * from './AttachmentDisplay/AttachmentDisplay';\nexport * from './AttachmentInput/AttachmentInput';\nexport * from './auth/MfaForm';\nexport * from './auth/RegisterForm';\nexport * from './auth/SignInForm';\nexport * from './BackboneElementDisplay/BackboneElementDisplay';\nexport * from './BackboneElementInput/BackboneElementInput';\nexport * from './CalendarInput/CalendarInput';\nexport * from './chat/BaseChat/BaseChat';\nexport * from './chat/ChatModal/ChatModal';\nexport * from './chat/ThreadChat/ThreadChat';\nexport * from './CheckboxFormSection/CheckboxFormSection';\nexport * from './CodeableConceptDisplay/CodeableConceptDisplay';\nexport * from './CodeableConceptInput/CodeableConceptInput';\nexport * from './CodeInput/CodeInput';\nexport * from './CodingDisplay/CodingDisplay';\nexport * from './CodingInput/CodingInput';\nexport * from './ContactDetailDisplay/ContactDetailDisplay';\nexport * from './ContactDetailInput/ContactDetailInput';\nexport * from './ContactPointDisplay/ContactPointDisplay';\nexport * from './ContactPointInput/ContactPointInput';\nexport * from './Container/Container';\nexport * from './DateTimeInput/DateTimeInput';\nexport * from './DateTimeInput/DateTimeInput.utils';\nexport * from './DefaultResourceTimeline/DefaultResourceTimeline';\nexport * from './DescriptionList/DescriptionList';\nexport * from './DiagnosticReportDisplay/DiagnosticReportDisplay';\nexport * from './Document/Document';\nexport * from './EncounterTimeline/EncounterTimeline';\nexport * from './ErrorBoundary/ErrorBoundary';\nexport * from './FhirPathTable/FhirPathTable';\nexport * from './Form/Form';\nexport * from './Form/FormUtils';\nexport * from './Form/SubmitButton';\nexport * from './FormSection/FormSection';\nexport * from './HumanNameDisplay/HumanNameDisplay';\nexport * from './HumanNameInput/HumanNameInput';\nexport * from './IdentifierDisplay/IdentifierDisplay';\nexport * from './IdentifierInput/IdentifierInput';\nexport * from './InfoBar/InfoBar';\nexport * from './Loading/Loading';\nexport * from './Logo/Logo';\nexport * from './MeasureReportDisplay/MeasureReportDisplay';\nexport * from './MedplumLink/MedplumLink';\nexport * from './MoneyDisplay/MoneyDisplay';\nexport * from './MoneyInput/MoneyInput';\nexport * from './NoteDisplay/NoteDisplay';\nexport * from './NotificationIcon/NotificationIcon';\nexport * from './OperationOutcomeAlert/OperationOutcomeAlert';\nexport * from './Panel/Panel';\nexport * from './PatientExportForm/PatientExportForm';\nexport * from './PatientHeader/PatientHeader';\nexport * f