@medplum/react 0.9.38 → 0.10.1
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.
- package/dist/cjs/AttachmentButton.d.ts +9 -0
- package/dist/cjs/CodeInput.d.ts +2 -1
- package/dist/cjs/CodeableConceptInput.d.ts +2 -1
- package/dist/cjs/CodingInput.d.ts +2 -1
- package/dist/cjs/DateTimeInput.d.ts +9 -2
- package/dist/cjs/DiagnosticReportDisplay.d.ts +0 -1
- package/dist/cjs/ReferenceInput.d.ts +1 -0
- package/dist/cjs/ResourceAvatar.d.ts +8 -0
- package/dist/cjs/ResourceBadge.d.ts +0 -1
- package/dist/cjs/ResourceHistoryTable.d.ts +0 -1
- package/dist/cjs/ResourceInput.d.ts +2 -3
- package/dist/cjs/SearchPopupMenu.d.ts +0 -4
- package/dist/cjs/SearchUtils.d.ts +5 -5
- package/dist/cjs/StatusBadge.d.ts +0 -1
- package/dist/cjs/ValueSetAutocomplete.d.ts +10 -0
- package/dist/cjs/auth/RegisterForm.d.ts +0 -1
- package/dist/cjs/auth/SignInForm.d.ts +0 -1
- package/dist/cjs/defaulttheme.css +0 -51
- package/dist/cjs/index.d.ts +3 -21
- package/dist/cjs/index.js +859 -1560
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +1 -1
- package/dist/cjs/index.min.js.map +1 -1
- package/dist/cjs/stories/{UploadButton.stories.d.ts → AttachmentButton.stories.d.ts} +1 -0
- package/dist/cjs/stories/{FormSection.stories.d.ts → CodeInput.stories.d.ts} +0 -0
- package/dist/cjs/stories/{Input.stories.d.ts → CodeableConceptInput.stories.d.ts} +0 -0
- package/dist/cjs/stories/PeriodInput.stories.d.ts +6 -0
- package/dist/cjs/stories/{Avatar.stories.d.ts → ResourceAvatar.stories.d.ts} +0 -0
- package/dist/cjs/stories/ResourceForm.stories.d.ts +1 -0
- package/dist/cjs/stories/{Loading.stories.d.ts → ResourceInput.stories.d.ts} +2 -1
- package/dist/cjs/stories/SearchControl.stories.d.ts +1 -0
- package/dist/cjs/styles.css +35 -1206
- package/dist/cjs/utils/outcomes.d.ts +1 -0
- package/dist/esm/AddressInput.js +9 -21
- package/dist/esm/AddressInput.js.map +1 -1
- package/dist/esm/AnnotationInput.js +2 -2
- package/dist/esm/AnnotationInput.js.map +1 -1
- package/dist/esm/AttachmentArrayInput.js +11 -8
- package/dist/esm/AttachmentArrayInput.js.map +1 -1
- package/dist/esm/AttachmentButton.d.ts +9 -0
- package/dist/esm/{UploadButton.js → AttachmentButton.js} +9 -9
- package/dist/esm/AttachmentButton.js.map +1 -0
- package/dist/esm/AttachmentInput.js +3 -3
- package/dist/esm/AttachmentInput.js.map +1 -1
- package/dist/esm/CalendarInput.js +6 -7
- package/dist/esm/CalendarInput.js.map +1 -1
- package/dist/esm/CodeInput.d.ts +2 -1
- package/dist/esm/CodeInput.js +16 -21
- package/dist/esm/CodeInput.js.map +1 -1
- package/dist/esm/CodeableConceptInput.d.ts +2 -1
- package/dist/esm/CodeableConceptInput.js +18 -33
- package/dist/esm/CodeableConceptInput.js.map +1 -1
- package/dist/esm/CodingInput.d.ts +2 -1
- package/dist/esm/CodingInput.js +24 -23
- package/dist/esm/CodingInput.js.map +1 -1
- package/dist/esm/ContactDetailInput.js +3 -4
- package/dist/esm/ContactDetailInput.js.map +1 -1
- package/dist/esm/ContactPointInput.js +5 -21
- package/dist/esm/ContactPointInput.js.map +1 -1
- package/dist/esm/DateTimeInput.d.ts +9 -2
- package/dist/esm/DateTimeInput.js +13 -3
- package/dist/esm/DateTimeInput.js.map +1 -1
- package/dist/esm/DiagnosticReportDisplay.d.ts +0 -1
- package/dist/esm/DiagnosticReportDisplay.js +21 -2
- package/dist/esm/DiagnosticReportDisplay.js.map +1 -1
- package/dist/esm/EncounterTimeline.js +2 -0
- package/dist/esm/EncounterTimeline.js.map +1 -1
- package/dist/esm/ExtensionInput.js +2 -2
- package/dist/esm/ExtensionInput.js.map +1 -1
- package/dist/esm/FhirPathTable.js +4 -5
- package/dist/esm/FhirPathTable.js.map +1 -1
- package/dist/esm/HumanNameInput.js +7 -17
- package/dist/esm/HumanNameInput.js.map +1 -1
- package/dist/esm/IdentifierInput.js +4 -5
- package/dist/esm/IdentifierInput.js.map +1 -1
- package/dist/esm/Logo.js +4 -4
- package/dist/esm/Logo.js.map +1 -1
- package/dist/esm/PatientTimeline.js +2 -0
- package/dist/esm/PatientTimeline.js.map +1 -1
- package/dist/esm/PeriodInput.js +5 -5
- package/dist/esm/PeriodInput.js.map +1 -1
- package/dist/esm/PlanDefinitionBuilder.js +17 -29
- package/dist/esm/PlanDefinitionBuilder.js.map +1 -1
- package/dist/esm/QuantityInput.js +5 -12
- package/dist/esm/QuantityInput.js.map +1 -1
- package/dist/esm/QuestionnaireBuilder.js +22 -25
- package/dist/esm/QuestionnaireBuilder.js.map +1 -1
- package/dist/esm/QuestionnaireForm.js +35 -29
- package/dist/esm/QuestionnaireForm.js.map +1 -1
- package/dist/esm/RangeInput.js +2 -2
- package/dist/esm/RangeInput.js.map +1 -1
- package/dist/esm/RatioInput.js +2 -2
- package/dist/esm/RatioInput.js.map +1 -1
- package/dist/esm/ReferenceInput.d.ts +1 -0
- package/dist/esm/ReferenceInput.js +4 -6
- package/dist/esm/ReferenceInput.js.map +1 -1
- package/dist/esm/RequestGroupDisplay.js +1 -1
- package/dist/esm/RequestGroupDisplay.js.map +1 -1
- package/dist/esm/ResourceArrayInput.js +10 -7
- package/dist/esm/ResourceArrayInput.js.map +1 -1
- package/dist/esm/ResourceAvatar.d.ts +8 -0
- package/dist/esm/ResourceAvatar.js +24 -0
- package/dist/esm/ResourceAvatar.js.map +1 -0
- package/dist/esm/ResourceBadge.d.ts +0 -1
- package/dist/esm/ResourceBadge.js +2 -3
- package/dist/esm/ResourceBadge.js.map +1 -1
- package/dist/esm/ResourceBlame.js +3 -3
- package/dist/esm/ResourceBlame.js.map +1 -1
- package/dist/esm/ResourceForm.js +10 -10
- package/dist/esm/ResourceForm.js.map +1 -1
- package/dist/esm/ResourceHistoryTable.d.ts +0 -1
- package/dist/esm/ResourceHistoryTable.js +2 -1
- package/dist/esm/ResourceHistoryTable.js.map +1 -1
- package/dist/esm/ResourceInput.d.ts +2 -3
- package/dist/esm/ResourceInput.js +37 -29
- package/dist/esm/ResourceInput.js.map +1 -1
- package/dist/esm/ResourcePropertyInput.js +30 -18
- package/dist/esm/ResourcePropertyInput.js.map +1 -1
- package/dist/esm/ResourceTimeline.js +23 -17
- package/dist/esm/ResourceTimeline.js.map +1 -1
- package/dist/esm/Scheduler.js +7 -7
- package/dist/esm/Scheduler.js.map +1 -1
- package/dist/esm/SearchControl.js +76 -58
- package/dist/esm/SearchControl.js.map +1 -1
- package/dist/esm/SearchControlField.js.map +1 -1
- package/dist/esm/SearchFieldEditor.js +7 -7
- package/dist/esm/SearchFieldEditor.js.map +1 -1
- package/dist/esm/SearchFilterEditor.js +11 -15
- package/dist/esm/SearchFilterEditor.js.map +1 -1
- package/dist/esm/SearchFilterValueDialog.js +4 -3
- package/dist/esm/SearchFilterValueDialog.js.map +1 -1
- package/dist/esm/SearchFilterValueInput.js +6 -7
- package/dist/esm/SearchFilterValueInput.js.map +1 -1
- package/dist/esm/SearchPopupMenu.d.ts +0 -4
- package/dist/esm/SearchPopupMenu.js +59 -73
- package/dist/esm/SearchPopupMenu.js.map +1 -1
- package/dist/esm/SearchUtils.d.ts +5 -5
- package/dist/esm/SearchUtils.js +11 -12
- package/dist/esm/SearchUtils.js.map +1 -1
- package/dist/esm/ServiceRequestTimeline.js +2 -0
- package/dist/esm/ServiceRequestTimeline.js.map +1 -1
- package/dist/esm/StatusBadge.d.ts +0 -1
- package/dist/esm/StatusBadge.js +55 -1
- package/dist/esm/StatusBadge.js.map +1 -1
- package/dist/esm/Timeline.js +12 -20
- package/dist/esm/Timeline.js.map +1 -1
- package/dist/esm/TimingInput.js +14 -17
- package/dist/esm/TimingInput.js.map +1 -1
- package/dist/esm/ValueSetAutocomplete.d.ts +10 -0
- package/dist/esm/ValueSetAutocomplete.js +65 -0
- package/dist/esm/ValueSetAutocomplete.js.map +1 -0
- package/dist/esm/auth/AuthenticationForm.js +12 -20
- package/dist/esm/auth/AuthenticationForm.js.map +1 -1
- package/dist/esm/auth/ChooseProfileForm.js +10 -10
- package/dist/esm/auth/ChooseProfileForm.js.map +1 -1
- package/dist/esm/auth/NewProjectForm.js +12 -15
- package/dist/esm/auth/NewProjectForm.js.map +1 -1
- package/dist/esm/auth/NewUserForm.js +25 -33
- package/dist/esm/auth/NewUserForm.js.map +1 -1
- package/dist/esm/auth/RegisterForm.d.ts +0 -1
- package/dist/esm/auth/RegisterForm.js.map +1 -1
- package/dist/esm/auth/SignInForm.d.ts +0 -1
- package/dist/esm/auth/SignInForm.js.map +1 -1
- package/dist/esm/defaulttheme.css +0 -51
- package/dist/esm/index.d.ts +3 -21
- package/dist/esm/index.js +4 -22
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +1 -1
- package/dist/esm/index.min.js.map +1 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +13 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/esm/stories/{UploadButton.stories.d.ts → AttachmentButton.stories.d.ts} +1 -0
- package/dist/{cjs/stories/Select.stories.d.ts → esm/stories/CodeInput.stories.d.ts} +0 -0
- package/dist/esm/stories/{FormSection.stories.d.ts → CodeableConceptInput.stories.d.ts} +0 -0
- package/dist/esm/stories/PeriodInput.stories.d.ts +6 -0
- package/dist/esm/stories/{Avatar.stories.d.ts → ResourceAvatar.stories.d.ts} +0 -0
- package/dist/esm/stories/ResourceForm.stories.d.ts +1 -0
- package/dist/{cjs/stories/Dialog.stories.d.ts → esm/stories/ResourceInput.stories.d.ts} +2 -1
- package/dist/esm/stories/SearchControl.stories.d.ts +1 -0
- package/dist/esm/styles.css +35 -1206
- package/dist/esm/utils/outcomes.d.ts +1 -0
- package/dist/esm/utils/outcomes.js +5 -1
- package/dist/esm/utils/outcomes.js.map +1 -1
- package/package.json +27 -19
- package/dist/cjs/Autocomplete.d.ts +0 -20
- package/dist/cjs/Avatar.d.ts +0 -12
- package/dist/cjs/Button.d.ts +0 -15
- package/dist/cjs/Checkbox.d.ts +0 -12
- package/dist/cjs/Dialog.d.ts +0 -10
- package/dist/cjs/FooterLinks.d.ts +0 -6
- package/dist/cjs/Header.d.ts +0 -12
- package/dist/cjs/HeaderSearchInput.d.ts +0 -10
- package/dist/cjs/Input.d.ts +0 -22
- package/dist/cjs/InputRow.d.ts +0 -7
- package/dist/cjs/Loading.d.ts +0 -3
- package/dist/cjs/MenuItem.d.ts +0 -9
- package/dist/cjs/MenuSeparator.d.ts +0 -3
- package/dist/cjs/Popup.d.ts +0 -14
- package/dist/cjs/Scrollable.d.ts +0 -9
- package/dist/cjs/Select.d.ts +0 -16
- package/dist/cjs/SubMenu.d.ts +0 -7
- package/dist/cjs/Tab.d.ts +0 -12
- package/dist/cjs/TabList.d.ts +0 -10
- package/dist/cjs/TabPanel.d.ts +0 -6
- package/dist/cjs/TabSwitch.d.ts +0 -6
- package/dist/cjs/TextArea.d.ts +0 -18
- package/dist/cjs/TitleBar.d.ts +0 -6
- package/dist/cjs/UploadButton.d.ts +0 -7
- package/dist/cjs/stories/Autocomplete.stories.d.ts +0 -9
- package/dist/cjs/stories/Button.stories.d.ts +0 -9
- package/dist/cjs/stories/Header.stories.d.ts +0 -8
- package/dist/cjs/stories/Tabs.stories.d.ts +0 -6
- package/dist/esm/Autocomplete.d.ts +0 -20
- package/dist/esm/Autocomplete.js +0 -281
- package/dist/esm/Autocomplete.js.map +0 -1
- package/dist/esm/Avatar.d.ts +0 -12
- package/dist/esm/Avatar.js +0 -24
- package/dist/esm/Avatar.js.map +0 -1
- package/dist/esm/Button.d.ts +0 -15
- package/dist/esm/Button.js +0 -13
- package/dist/esm/Button.js.map +0 -1
- package/dist/esm/Checkbox.d.ts +0 -12
- package/dist/esm/Checkbox.js +0 -13
- package/dist/esm/Checkbox.js.map +0 -1
- package/dist/esm/Dialog.d.ts +0 -10
- package/dist/esm/Dialog.js +0 -43
- package/dist/esm/Dialog.js.map +0 -1
- package/dist/esm/FooterLinks.d.ts +0 -6
- package/dist/esm/FooterLinks.js +0 -8
- package/dist/esm/FooterLinks.js.map +0 -1
- package/dist/esm/Header.d.ts +0 -12
- package/dist/esm/Header.js +0 -99
- package/dist/esm/Header.js.map +0 -1
- package/dist/esm/HeaderSearchInput.d.ts +0 -10
- package/dist/esm/HeaderSearchInput.js +0 -181
- package/dist/esm/HeaderSearchInput.js.map +0 -1
- package/dist/esm/Input.d.ts +0 -22
- package/dist/esm/Input.js +0 -26
- package/dist/esm/Input.js.map +0 -1
- package/dist/esm/InputRow.d.ts +0 -7
- package/dist/esm/InputRow.js +0 -8
- package/dist/esm/InputRow.js.map +0 -1
- package/dist/esm/Loading.d.ts +0 -3
- package/dist/esm/Loading.js +0 -11
- package/dist/esm/Loading.js.map +0 -1
- package/dist/esm/MenuItem.d.ts +0 -9
- package/dist/esm/MenuItem.js +0 -8
- package/dist/esm/MenuItem.js.map +0 -1
- package/dist/esm/MenuSeparator.d.ts +0 -3
- package/dist/esm/MenuSeparator.js +0 -8
- package/dist/esm/MenuSeparator.js.map +0 -1
- package/dist/esm/Popup.d.ts +0 -14
- package/dist/esm/Popup.js +0 -78
- package/dist/esm/Popup.js.map +0 -1
- package/dist/esm/Scrollable.d.ts +0 -9
- package/dist/esm/Scrollable.js +0 -12
- package/dist/esm/Scrollable.js.map +0 -1
- package/dist/esm/Select.d.ts +0 -16
- package/dist/esm/Select.js +0 -16
- package/dist/esm/Select.js.map +0 -1
- package/dist/esm/SubMenu.d.ts +0 -7
- package/dist/esm/SubMenu.js +0 -38
- package/dist/esm/SubMenu.js.map +0 -1
- package/dist/esm/Tab.d.ts +0 -12
- package/dist/esm/Tab.js +0 -19
- package/dist/esm/Tab.js.map +0 -1
- package/dist/esm/TabList.d.ts +0 -10
- package/dist/esm/TabList.js +0 -23
- package/dist/esm/TabList.js.map +0 -1
- package/dist/esm/TabPanel.d.ts +0 -6
- package/dist/esm/TabPanel.js +0 -8
- package/dist/esm/TabPanel.js.map +0 -1
- package/dist/esm/TabSwitch.d.ts +0 -6
- package/dist/esm/TabSwitch.js +0 -16
- package/dist/esm/TabSwitch.js.map +0 -1
- package/dist/esm/TextArea.d.ts +0 -18
- package/dist/esm/TextArea.js +0 -16
- package/dist/esm/TextArea.js.map +0 -1
- package/dist/esm/TitleBar.d.ts +0 -6
- package/dist/esm/TitleBar.js +0 -8
- package/dist/esm/TitleBar.js.map +0 -1
- package/dist/esm/UploadButton.d.ts +0 -7
- package/dist/esm/UploadButton.js.map +0 -1
- package/dist/esm/stories/Autocomplete.stories.d.ts +0 -9
- package/dist/esm/stories/Button.stories.d.ts +0 -9
- package/dist/esm/stories/Dialog.stories.d.ts +0 -5
- package/dist/esm/stories/Header.stories.d.ts +0 -8
- package/dist/esm/stories/Input.stories.d.ts +0 -6
- package/dist/esm/stories/Loading.stories.d.ts +0 -5
- package/dist/esm/stories/Select.stories.d.ts +0 -6
- package/dist/esm/stories/Tabs.stories.d.ts +0 -6
package/dist/esm/Autocomplete.js
DELETED
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import React, { useRef, useState, useEffect } from 'react';
|
|
2
|
-
import { killEvent } from './utils/dom.js';
|
|
3
|
-
|
|
4
|
-
function Autocomplete(props) {
|
|
5
|
-
var _a, _b;
|
|
6
|
-
const inputRef = useRef(null);
|
|
7
|
-
const [focused, setFocused] = useState(false);
|
|
8
|
-
const [lastValue, setLastValue] = useState(undefined);
|
|
9
|
-
const [timer, setTimer] = useState();
|
|
10
|
-
const [dropDownVisible, setDropDownVisible] = useState(false);
|
|
11
|
-
const [values, setValues] = useState((_a = props.defaultValue) !== null && _a !== void 0 ? _a : []);
|
|
12
|
-
const [options, setOptions] = useState([]);
|
|
13
|
-
const [selectedIndex, setSelectedIndex] = useState(-1);
|
|
14
|
-
const [abortController, setAbortController] = useState();
|
|
15
|
-
const [autoSubmit, setAutoSubmit] = useState();
|
|
16
|
-
const lastValueRef = useRef();
|
|
17
|
-
lastValueRef.current = lastValue;
|
|
18
|
-
const timerRef = useRef();
|
|
19
|
-
timerRef.current = timer;
|
|
20
|
-
const abortControllerRef = useRef();
|
|
21
|
-
abortControllerRef.current = abortController;
|
|
22
|
-
const autoSubmitRef = useRef();
|
|
23
|
-
autoSubmitRef.current = autoSubmit;
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
return () => {
|
|
26
|
-
if (abortControllerRef.current) {
|
|
27
|
-
abortControllerRef.current.abort();
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}, []);
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
var _a;
|
|
33
|
-
setValues((_a = props.defaultValue) !== null && _a !== void 0 ? _a : []);
|
|
34
|
-
}, [props.defaultValue]);
|
|
35
|
-
function setValuesWrapper(newValues) {
|
|
36
|
-
setValues(newValues);
|
|
37
|
-
if (props.onChange) {
|
|
38
|
-
props.onChange(newValues);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Adds an option to the list of selected options.
|
|
43
|
-
* @param option The option.
|
|
44
|
-
*/
|
|
45
|
-
function addOption(option) {
|
|
46
|
-
const inputElement = inputRef.current;
|
|
47
|
-
inputElement.value = '';
|
|
48
|
-
const newValues = props.multiple ? [...values, option] : [option];
|
|
49
|
-
setFocused(true);
|
|
50
|
-
setDropDownVisible(false);
|
|
51
|
-
setLastValue('');
|
|
52
|
-
setOptions([]);
|
|
53
|
-
setSelectedIndex(-1);
|
|
54
|
-
setValuesWrapper(newValues);
|
|
55
|
-
}
|
|
56
|
-
function handleClick() {
|
|
57
|
-
var _a;
|
|
58
|
-
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
59
|
-
}
|
|
60
|
-
function handleFocus() {
|
|
61
|
-
setFocused(true);
|
|
62
|
-
if (props.loadOnFocus) {
|
|
63
|
-
handleInput();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
function handleBlur() {
|
|
67
|
-
tryAddOption();
|
|
68
|
-
setFocused(false);
|
|
69
|
-
dismissOnDelay();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Handles an input event.
|
|
73
|
-
* Clears existing timers.
|
|
74
|
-
* Schedules a timer to execute the search after a short delay.
|
|
75
|
-
*/
|
|
76
|
-
function handleInput() {
|
|
77
|
-
if (abortControllerRef.current) {
|
|
78
|
-
abortControllerRef.current.abort();
|
|
79
|
-
setAbortController(undefined);
|
|
80
|
-
}
|
|
81
|
-
if (timerRef.current !== undefined) {
|
|
82
|
-
window.clearTimeout(timerRef.current);
|
|
83
|
-
}
|
|
84
|
-
const newTimer = window.setTimeout(() => handleTimer(), 100);
|
|
85
|
-
setTimer(newTimer);
|
|
86
|
-
}
|
|
87
|
-
function handleKeyDown(e) {
|
|
88
|
-
switch (e.key) {
|
|
89
|
-
case 'Enter':
|
|
90
|
-
case 'Tab':
|
|
91
|
-
handleSelectKey(e);
|
|
92
|
-
break;
|
|
93
|
-
case 'ArrowUp':
|
|
94
|
-
moveSelection(-1);
|
|
95
|
-
killEvent(e);
|
|
96
|
-
break;
|
|
97
|
-
case 'ArrowDown':
|
|
98
|
-
moveSelection(1);
|
|
99
|
-
killEvent(e);
|
|
100
|
-
break;
|
|
101
|
-
case 'Backspace':
|
|
102
|
-
handleBackspaceKey(e);
|
|
103
|
-
break;
|
|
104
|
-
case ',':
|
|
105
|
-
case ';':
|
|
106
|
-
handleSeparatorKey(e);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Handles the "enter" or "tab" keys. The enter key logic is:
|
|
111
|
-
* Try to add an option with tryAddOption. On success, cancel event.
|
|
112
|
-
* Otherwise, let the browser handle the enter key normally.
|
|
113
|
-
*
|
|
114
|
-
* @param e The key down event.
|
|
115
|
-
*/
|
|
116
|
-
function handleSelectKey(e) {
|
|
117
|
-
var _a;
|
|
118
|
-
if (!timerRef.current && !abortControllerRef.current && tryAddOption()) {
|
|
119
|
-
killEvent(e);
|
|
120
|
-
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
// The user pressed enter, but we don't have results yet.
|
|
124
|
-
// We need to wait for the results to come in.
|
|
125
|
-
setAutoSubmit(true);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Handles the "backspace" key. The backspace key logic is:
|
|
130
|
-
* If the input is empty and there is at least one item, delete the last item.
|
|
131
|
-
* Otherwise, let the browser handle the backspace key normally.
|
|
132
|
-
*
|
|
133
|
-
* @param e The key down event.
|
|
134
|
-
*/
|
|
135
|
-
function handleBackspaceKey(e) {
|
|
136
|
-
var _a;
|
|
137
|
-
if ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.value) {
|
|
138
|
-
// If there is still text in the input,
|
|
139
|
-
// then handle backspace as normal.
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if (values.length > 0) {
|
|
143
|
-
// If there are selected items,
|
|
144
|
-
// then delete the last item.
|
|
145
|
-
killEvent(e);
|
|
146
|
-
setValuesWrapper(values.slice(0, values.length - 1));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Handles a "separator" key (comma, semicolon, others?).
|
|
151
|
-
*
|
|
152
|
-
* The separator key logic is:
|
|
153
|
-
* If the drop down is visible and something is selected, choose that.
|
|
154
|
-
* If the drop down is visible but nothing is selected, choose the first.
|
|
155
|
-
* If there is content in the input, use that as a "gray" option.
|
|
156
|
-
* Otherwise, ignore.
|
|
157
|
-
*
|
|
158
|
-
* @param e The key down event.
|
|
159
|
-
*/
|
|
160
|
-
function handleSeparatorKey(e) {
|
|
161
|
-
var _a;
|
|
162
|
-
tryAddOption();
|
|
163
|
-
killEvent(e);
|
|
164
|
-
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Tries to capture the existing input as an option.
|
|
168
|
-
*
|
|
169
|
-
* @return True if captured an option; false otherwise.
|
|
170
|
-
*/
|
|
171
|
-
function tryAddOption() {
|
|
172
|
-
var _a;
|
|
173
|
-
let option;
|
|
174
|
-
if (selectedIndex >= 0 && selectedIndex < options.length) {
|
|
175
|
-
// Currently highlighted row
|
|
176
|
-
option = options[selectedIndex];
|
|
177
|
-
}
|
|
178
|
-
else if (selectedIndex === -1 && options.length > 0) {
|
|
179
|
-
// Default to first row
|
|
180
|
-
option = options[0];
|
|
181
|
-
}
|
|
182
|
-
else if (props.buildUnstructured && ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.value)) {
|
|
183
|
-
// Build semi-structured item
|
|
184
|
-
option = props.buildUnstructured(inputRef.current.value);
|
|
185
|
-
}
|
|
186
|
-
if (!option) {
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
addOption(option);
|
|
190
|
-
return true;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Handles a timer tick event.
|
|
194
|
-
* If the contents of the input have changed, sends xhr to the server
|
|
195
|
-
* for updated contents.
|
|
196
|
-
*/
|
|
197
|
-
function handleTimer() {
|
|
198
|
-
var _a, _b;
|
|
199
|
-
setTimer(undefined);
|
|
200
|
-
const value = ((_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.trim()) || '';
|
|
201
|
-
if (value === lastValueRef.current) {
|
|
202
|
-
// Nothing has changed, move on
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
setLastValue(value);
|
|
206
|
-
const newAbortController = new AbortController();
|
|
207
|
-
setAbortController(newAbortController);
|
|
208
|
-
props
|
|
209
|
-
.loadOptions(value, newAbortController.signal)
|
|
210
|
-
.then((newOptions) => {
|
|
211
|
-
if (!newAbortController.signal.aborted) {
|
|
212
|
-
setDropDownVisible(newOptions.length > 0);
|
|
213
|
-
setOptions(newOptions);
|
|
214
|
-
setAbortController(undefined);
|
|
215
|
-
if (autoSubmitRef.current) {
|
|
216
|
-
addOption(newOptions[0]);
|
|
217
|
-
setAutoSubmit(false);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
})
|
|
221
|
-
.catch(console.log);
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Moves the selected row.
|
|
225
|
-
* @param delta The amount to move the selection, up is negative.
|
|
226
|
-
*/
|
|
227
|
-
function moveSelection(delta) {
|
|
228
|
-
let index = selectedIndex + delta;
|
|
229
|
-
if (index < 0) {
|
|
230
|
-
index = 0;
|
|
231
|
-
}
|
|
232
|
-
else if (index >= options.length) {
|
|
233
|
-
index = options.length - 1;
|
|
234
|
-
}
|
|
235
|
-
setSelectedIndex(index);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Handles a hover event.
|
|
239
|
-
* @param _e The mouse event.
|
|
240
|
-
* @param index The drop down option index.
|
|
241
|
-
*/
|
|
242
|
-
function handleDropDownHover(_e, index) {
|
|
243
|
-
setSelectedIndex(index);
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Handles a click event.
|
|
247
|
-
* @param e The mouse event.
|
|
248
|
-
* @param option The drop down option.
|
|
249
|
-
*/
|
|
250
|
-
function handleDropDownClick(e, option) {
|
|
251
|
-
killEvent(e);
|
|
252
|
-
addOption(option);
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Dismisses the drop down menu after a slight delay.
|
|
256
|
-
*/
|
|
257
|
-
function dismissOnDelay() {
|
|
258
|
-
window.setTimeout(() => {
|
|
259
|
-
setDropDownVisible(false);
|
|
260
|
-
}, 200);
|
|
261
|
-
}
|
|
262
|
-
const baseClassName = (_b = props.className) !== null && _b !== void 0 ? _b : 'medplum-autocomplete-container';
|
|
263
|
-
return (React.createElement("div", { "data-testid": "autocomplete", className: baseClassName + (focused ? ' focused' : ''), onClick: () => handleClick() },
|
|
264
|
-
React.createElement("ul", { onClick: () => handleClick() },
|
|
265
|
-
values.map((value) => (React.createElement("li", { key: props.getId(value), "data-testid": "selected", className: "medplum-autocomplete-item choice" }, props.getDisplay(value)))),
|
|
266
|
-
React.createElement("li", { className: "medplum-autocomplete-item" },
|
|
267
|
-
React.createElement("input", { type: "text", autoFocus: props.autofocus, placeholder: values.length === 0 ? props.placeholder : undefined, autoComplete: "off", autoCapitalize: "off", spellCheck: "true", onFocus: () => handleFocus(), onBlur: () => handleBlur(), onChange: () => handleInput(), onInput: () => handleInput(), onKeyDown: (e) => handleKeyDown(e), ref: inputRef, "data-testid": "input-element" }))),
|
|
268
|
-
dropDownVisible && (React.createElement("div", { className: "medplum-autocomplete", "data-testid": "dropdown" },
|
|
269
|
-
options.map((option, index) => (React.createElement("div", { key: props.getId(option), className: index === selectedIndex
|
|
270
|
-
? 'medplum-autocomplete-row medplum-autocomplete-active'
|
|
271
|
-
: 'medplum-autocomplete-row', onMouseOver: (e) => handleDropDownHover(e, index), onClick: (e) => handleDropDownClick(e, option) },
|
|
272
|
-
props.getIcon && React.createElement("div", { className: "medplum-autocomplete-icon" }, props.getIcon(option)),
|
|
273
|
-
React.createElement("div", { className: "medplum-autocomplete-label" },
|
|
274
|
-
props.getDisplay(option),
|
|
275
|
-
props.getHelpText && React.createElement("div", { className: "medplum-autocomplete-help-text" }, props.getHelpText(option)))))),
|
|
276
|
-
props.onCreateNew && (React.createElement("div", { className: "medplum-autocomplete-row", onClick: props.onCreateNew },
|
|
277
|
-
React.createElement("div", { className: "medplum-autocomplete-label" }, "Create new...")))))));
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
export { Autocomplete };
|
|
281
|
-
//# sourceMappingURL=Autocomplete.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.js","sources":["../../src/Autocomplete.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { killEvent } from './utils/dom';\nimport './Autocomplete.css';\n\nexport interface AutocompleteProps<T> {\n name: string;\n multiple?: boolean;\n autofocus?: boolean;\n defaultValue?: T[];\n className?: string;\n placeholder?: string;\n loadOnFocus?: boolean;\n loadOptions: (input: string, signal: AbortSignal) => Promise<T[]>;\n buildUnstructured?: (input: string) => T;\n getId: (item: T) => string;\n getIcon?: (item: T) => JSX.Element;\n getDisplay: (item: T) => JSX.Element;\n getHelpText?: (item: T) => string | undefined;\n onChange?: (values: T[]) => void;\n onCreateNew?: () => void;\n}\n\nexport function Autocomplete<T>(props: AutocompleteProps<T>): JSX.Element {\n const inputRef = useRef<HTMLInputElement>(null);\n const [focused, setFocused] = useState(false);\n const [lastValue, setLastValue] = useState<string | undefined>(undefined);\n const [timer, setTimer] = useState<number>();\n const [dropDownVisible, setDropDownVisible] = useState(false);\n const [values, setValues] = useState(props.defaultValue ?? []);\n const [options, setOptions] = useState<T[]>([]);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const [abortController, setAbortController] = useState<AbortController>();\n const [autoSubmit, setAutoSubmit] = useState<boolean>();\n\n const lastValueRef = useRef<string>();\n lastValueRef.current = lastValue;\n\n const timerRef = useRef<number>();\n timerRef.current = timer;\n\n const abortControllerRef = useRef<AbortController>();\n abortControllerRef.current = abortController;\n\n const autoSubmitRef = useRef<boolean>();\n autoSubmitRef.current = autoSubmit;\n\n useEffect(() => {\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n useEffect(() => {\n setValues(props.defaultValue ?? []);\n }, [props.defaultValue]);\n\n function setValuesWrapper(newValues: T[]): void {\n setValues(newValues);\n if (props.onChange) {\n props.onChange(newValues);\n }\n }\n\n /**\n * Adds an option to the list of selected options.\n * @param option The option.\n */\n function addOption(option: T): void {\n const inputElement = inputRef.current as HTMLInputElement;\n inputElement.value = '';\n\n const newValues = props.multiple ? [...values, option] : [option];\n setFocused(true);\n setDropDownVisible(false);\n setLastValue('');\n setOptions([]);\n setSelectedIndex(-1);\n setValuesWrapper(newValues);\n }\n\n function handleClick(): void {\n inputRef.current?.focus();\n }\n\n function handleFocus(): void {\n setFocused(true);\n if (props.loadOnFocus) {\n handleInput();\n }\n }\n\n function handleBlur(): void {\n tryAddOption();\n setFocused(false);\n dismissOnDelay();\n }\n\n /**\n * Handles an input event.\n * Clears existing timers.\n * Schedules a timer to execute the search after a short delay.\n */\n function handleInput(): void {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n setAbortController(undefined);\n }\n\n if (timerRef.current !== undefined) {\n window.clearTimeout(timerRef.current);\n }\n\n const newTimer = window.setTimeout(() => handleTimer(), 100);\n setTimer(newTimer);\n }\n\n function handleKeyDown(e: React.KeyboardEvent): void {\n switch (e.key) {\n case 'Enter':\n case 'Tab':\n handleSelectKey(e);\n break;\n\n case 'ArrowUp':\n moveSelection(-1);\n killEvent(e);\n break;\n\n case 'ArrowDown':\n moveSelection(1);\n killEvent(e);\n break;\n\n case 'Backspace':\n handleBackspaceKey(e);\n break;\n\n case ',':\n case ';':\n handleSeparatorKey(e);\n }\n }\n\n /**\n * Handles the \"enter\" or \"tab\" keys. The enter key logic is:\n * Try to add an option with tryAddOption. On success, cancel event.\n * Otherwise, let the browser handle the enter key normally.\n *\n * @param e The key down event.\n */\n function handleSelectKey(e: React.KeyboardEvent): void {\n if (!timerRef.current && !abortControllerRef.current && tryAddOption()) {\n killEvent(e);\n inputRef.current?.focus();\n } else {\n // The user pressed enter, but we don't have results yet.\n // We need to wait for the results to come in.\n setAutoSubmit(true);\n }\n }\n\n /**\n * Handles the \"backspace\" key. The backspace key logic is:\n * If the input is empty and there is at least one item, delete the last item.\n * Otherwise, let the browser handle the backspace key normally.\n *\n * @param e The key down event.\n */\n function handleBackspaceKey(e: React.KeyboardEvent): void {\n if (inputRef.current?.value) {\n // If there is still text in the input,\n // then handle backspace as normal.\n return;\n }\n\n if (values.length > 0) {\n // If there are selected items,\n // then delete the last item.\n killEvent(e);\n setValuesWrapper(values.slice(0, values.length - 1));\n }\n }\n\n /**\n * Handles a \"separator\" key (comma, semicolon, others?).\n *\n * The separator key logic is:\n * If the drop down is visible and something is selected, choose that.\n * If the drop down is visible but nothing is selected, choose the first.\n * If there is content in the input, use that as a \"gray\" option.\n * Otherwise, ignore.\n *\n * @param e The key down event.\n */\n function handleSeparatorKey(e: React.KeyboardEvent): void {\n tryAddOption();\n killEvent(e);\n inputRef.current?.focus();\n }\n\n /**\n * Tries to capture the existing input as an option.\n *\n * @return True if captured an option; false otherwise.\n */\n function tryAddOption(): boolean {\n let option: T | undefined;\n\n if (selectedIndex >= 0 && selectedIndex < options.length) {\n // Currently highlighted row\n option = options[selectedIndex];\n } else if (selectedIndex === -1 && options.length > 0) {\n // Default to first row\n option = options[0];\n } else if (props.buildUnstructured && inputRef.current?.value) {\n // Build semi-structured item\n option = props.buildUnstructured(inputRef.current.value);\n }\n\n if (!option) {\n return false;\n }\n\n addOption(option);\n return true;\n }\n\n /**\n * Handles a timer tick event.\n * If the contents of the input have changed, sends xhr to the server\n * for updated contents.\n */\n function handleTimer(): void {\n setTimer(undefined);\n\n const value = inputRef.current?.value?.trim() || '';\n if (value === lastValueRef.current) {\n // Nothing has changed, move on\n return;\n }\n\n setLastValue(value);\n\n const newAbortController = new AbortController();\n setAbortController(newAbortController);\n\n props\n .loadOptions(value, newAbortController.signal)\n .then((newOptions: T[]) => {\n if (!newAbortController.signal.aborted) {\n setDropDownVisible(newOptions.length > 0);\n setOptions(newOptions);\n setAbortController(undefined);\n if (autoSubmitRef.current) {\n addOption(newOptions[0]);\n setAutoSubmit(false);\n }\n }\n })\n .catch(console.log);\n }\n\n /**\n * Moves the selected row.\n * @param delta The amount to move the selection, up is negative.\n */\n function moveSelection(delta: number): void {\n let index = selectedIndex + delta;\n\n if (index < 0) {\n index = 0;\n } else if (index >= options.length) {\n index = options.length - 1;\n }\n\n setSelectedIndex(index);\n }\n\n /**\n * Handles a hover event.\n * @param _e The mouse event.\n * @param index The drop down option index.\n */\n function handleDropDownHover(_e: React.MouseEvent, index: number): void {\n setSelectedIndex(index);\n }\n\n /**\n * Handles a click event.\n * @param e The mouse event.\n * @param option The drop down option.\n */\n function handleDropDownClick(e: React.MouseEvent, option: T): void {\n killEvent(e);\n addOption(option);\n }\n\n /**\n * Dismisses the drop down menu after a slight delay.\n */\n function dismissOnDelay(): void {\n window.setTimeout(() => {\n setDropDownVisible(false);\n }, 200);\n }\n\n const baseClassName = props.className ?? 'medplum-autocomplete-container';\n\n return (\n <div\n data-testid=\"autocomplete\"\n className={baseClassName + (focused ? ' focused' : '')}\n onClick={() => handleClick()}\n >\n <ul onClick={() => handleClick()}>\n {values.map((value) => (\n <li key={props.getId(value)} data-testid=\"selected\" className=\"medplum-autocomplete-item choice\">\n {props.getDisplay(value)}\n </li>\n ))}\n <li className=\"medplum-autocomplete-item\">\n <input\n type=\"text\"\n autoFocus={props.autofocus}\n placeholder={values.length === 0 ? props.placeholder : undefined}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"true\"\n onFocus={() => handleFocus()}\n onBlur={() => handleBlur()}\n onChange={() => handleInput()}\n onInput={() => handleInput()}\n onKeyDown={(e: React.KeyboardEvent) => handleKeyDown(e)}\n ref={inputRef}\n data-testid=\"input-element\"\n />\n </li>\n </ul>\n {dropDownVisible && (\n <div className=\"medplum-autocomplete\" data-testid=\"dropdown\">\n {options.map((option, index) => (\n <div\n key={props.getId(option)}\n className={\n index === selectedIndex\n ? 'medplum-autocomplete-row medplum-autocomplete-active'\n : 'medplum-autocomplete-row'\n }\n onMouseOver={(e) => handleDropDownHover(e, index)}\n onClick={(e) => handleDropDownClick(e, option)}\n >\n {props.getIcon && <div className=\"medplum-autocomplete-icon\">{props.getIcon(option)}</div>}\n <div className=\"medplum-autocomplete-label\">\n {props.getDisplay(option)}\n {props.getHelpText && <div className=\"medplum-autocomplete-help-text\">{props.getHelpText(option)}</div>}\n </div>\n </div>\n ))}\n {props.onCreateNew && (\n <div className=\"medplum-autocomplete-row\" onClick={props.onCreateNew}>\n <div className=\"medplum-autocomplete-label\">Create new...</div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/Avatar.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { Reference, Resource } from '@medplum/fhirtypes';
|
|
3
|
-
import './Avatar.css';
|
|
4
|
-
export interface AvatarProps {
|
|
5
|
-
size?: 'xsmall' | 'small' | 'medium' | 'large';
|
|
6
|
-
value?: Reference | Resource;
|
|
7
|
-
src?: string;
|
|
8
|
-
alt?: string;
|
|
9
|
-
color?: string;
|
|
10
|
-
link?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function Avatar(props: AvatarProps): JSX.Element;
|
package/dist/esm/Avatar.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { getDisplayString, getImageSrc } from '@medplum/core';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { MedplumLink } from './MedplumLink.js';
|
|
4
|
-
import { useResource } from './useResource.js';
|
|
5
|
-
|
|
6
|
-
function Avatar(props) {
|
|
7
|
-
var _a, _b;
|
|
8
|
-
const resource = useResource(props.value);
|
|
9
|
-
const className = props.size ? 'medplum-avatar ' + props.size : 'medplum-avatar';
|
|
10
|
-
const text = resource ? getDisplayString(resource) : (_a = props.alt) !== null && _a !== void 0 ? _a : '';
|
|
11
|
-
const initials = text && getInitials(text);
|
|
12
|
-
const imageUrl = (_b = (resource && getImageSrc(resource))) !== null && _b !== void 0 ? _b : props.src;
|
|
13
|
-
const innerContent = imageUrl ? React.createElement("img", { src: imageUrl, alt: text }) : initials;
|
|
14
|
-
return (React.createElement("div", { className: className, style: { backgroundColor: props.color }, "data-testid": "avatar" }, props.link && resource ? React.createElement(MedplumLink, { to: resource }, innerContent) : innerContent));
|
|
15
|
-
}
|
|
16
|
-
function getInitials(text) {
|
|
17
|
-
return text
|
|
18
|
-
.split(' ')
|
|
19
|
-
.map((n) => n[0])
|
|
20
|
-
.join('');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export { Avatar };
|
|
24
|
-
//# sourceMappingURL=Avatar.js.map
|
package/dist/esm/Avatar.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../../src/Avatar.tsx"],"sourcesContent":["import { getDisplayString, getImageSrc } from '@medplum/core';\nimport { Reference, Resource } from '@medplum/fhirtypes';\nimport React from 'react';\nimport { MedplumLink } from './MedplumLink';\nimport { useResource } from './useResource';\nimport './Avatar.css';\n\nexport interface AvatarProps {\n size?: 'xsmall' | 'small' | 'medium' | 'large';\n value?: Reference | Resource;\n src?: string;\n alt?: string;\n color?: string;\n link?: boolean;\n}\n\nexport function Avatar(props: AvatarProps): JSX.Element {\n const resource = useResource(props.value);\n const className = props.size ? 'medplum-avatar ' + props.size : 'medplum-avatar';\n const text = resource ? getDisplayString(resource) : props.alt ?? '';\n const initials = text && getInitials(text);\n const imageUrl = (resource && getImageSrc(resource)) ?? props.src;\n const innerContent = imageUrl ? <img src={imageUrl} alt={text} /> : initials;\n return (\n <div className={className} style={{ backgroundColor: props.color }} data-testid=\"avatar\">\n {props.link && resource ? <MedplumLink to={resource}>{innerContent}</MedplumLink> : innerContent}\n </div>\n );\n}\n\nfunction getInitials(text: string): string {\n return text\n .split(' ')\n .map((n) => n[0])\n .join('');\n}\n"],"names":[],"mappings":";;;;;AAgBM,SAAU,MAAM,CAAC,KAAkB,EAAA;;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1C,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,iBAAiB,GAAG,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC;AACjF,IAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,IAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC,GAAG,CAAC;AAClE,IAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,6BAAK,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAA,CAAI,GAAG,QAAQ,CAAC;AAC7E,IAAA,QACE,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,EAAE,EAAc,aAAA,EAAA,QAAQ,IACrF,KAAK,CAAC,IAAI,IAAI,QAAQ,GAAG,KAAC,CAAA,aAAA,CAAA,WAAW,IAAC,EAAE,EAAE,QAAQ,EAAG,EAAA,YAAY,CAAe,GAAG,YAAY,CAC5F,EACN;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAA;AAC/B,IAAA,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd;;;;"}
|
package/dist/esm/Button.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import './Button.css';
|
|
3
|
-
export interface ButtonProps {
|
|
4
|
-
type?: 'button' | 'submit';
|
|
5
|
-
style?: React.CSSProperties;
|
|
6
|
-
primary?: boolean;
|
|
7
|
-
danger?: boolean;
|
|
8
|
-
borderless?: boolean;
|
|
9
|
-
size?: 'small' | 'medium' | 'large';
|
|
10
|
-
onClick?: (e: React.MouseEvent) => void;
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
label?: string;
|
|
13
|
-
testid?: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function Button(props: ButtonProps): JSX.Element;
|
package/dist/esm/Button.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
function Button(props) {
|
|
4
|
-
const className = 'medplum-button' +
|
|
5
|
-
(props.primary || props.type === 'submit' ? ' medplum-button-primary' : '') +
|
|
6
|
-
(props.danger ? ' medplum-button-danger' : '') +
|
|
7
|
-
(props.borderless ? ' medplum-button-borderless' : '') +
|
|
8
|
-
(props.size ? ' medplum-button-' + props.size : '');
|
|
9
|
-
return (React.createElement("button", { type: props.type || 'button', className: className, style: props.style, onClick: props.onClick, "aria-label": props.label, "data-testid": props.testid }, props.children));
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export { Button };
|
|
13
|
-
//# sourceMappingURL=Button.js.map
|
package/dist/esm/Button.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../src/Button.tsx"],"sourcesContent":["import React from 'react';\nimport './Button.css';\n\nexport interface ButtonProps {\n type?: 'button' | 'submit';\n style?: React.CSSProperties;\n primary?: boolean;\n danger?: boolean;\n borderless?: boolean;\n size?: 'small' | 'medium' | 'large';\n onClick?: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n label?: string;\n testid?: string;\n}\n\nexport function Button(props: ButtonProps): JSX.Element {\n const className =\n 'medplum-button' +\n (props.primary || props.type === 'submit' ? ' medplum-button-primary' : '') +\n (props.danger ? ' medplum-button-danger' : '') +\n (props.borderless ? ' medplum-button-borderless' : '') +\n (props.size ? ' medplum-button-' + props.size : '');\n return (\n <button\n type={props.type || 'button'}\n className={className}\n style={props.style}\n onClick={props.onClick}\n aria-label={props.label}\n data-testid={props.testid}\n >\n {props.children}\n </button>\n );\n}\n"],"names":[],"mappings":";;AAgBM,SAAU,MAAM,CAAC,KAAkB,EAAA;IACvC,MAAM,SAAS,GACb,gBAAgB;AAChB,SAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,GAAG,yBAAyB,GAAG,EAAE,CAAC;SAC1E,KAAK,CAAC,MAAM,GAAG,wBAAwB,GAAG,EAAE,CAAC;SAC7C,KAAK,CAAC,UAAU,GAAG,4BAA4B,GAAG,EAAE,CAAC;AACtD,SAAC,KAAK,CAAC,IAAI,GAAG,kBAAkB,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACtD,IAAA,QACE,KACE,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,EAC5B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACV,YAAA,EAAA,KAAK,CAAC,KAAK,EAAA,aAAA,EACV,KAAK,CAAC,MAAM,EAExB,EAAA,KAAK,CAAC,QAAQ,CACR,EACT;AACJ;;;;"}
|
package/dist/esm/Checkbox.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { RefObject } from 'react';
|
|
2
|
-
import './Checkbox.css';
|
|
3
|
-
export interface CheckboxProps {
|
|
4
|
-
name?: string;
|
|
5
|
-
defaultValue?: boolean | number;
|
|
6
|
-
required?: boolean;
|
|
7
|
-
inputRef?: RefObject<HTMLInputElement>;
|
|
8
|
-
testid?: string;
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
onChange?: (newValue: boolean) => void;
|
|
11
|
-
}
|
|
12
|
-
export declare function Checkbox(props: CheckboxProps): JSX.Element;
|
package/dist/esm/Checkbox.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
function Checkbox(props) {
|
|
4
|
-
const className = 'medplum-checkbox';
|
|
5
|
-
return (React.createElement("input", { id: props.name, name: props.name, className: className, type: "checkbox", value: "true", defaultChecked: !!props.defaultValue, required: props.required, ref: props.inputRef, "data-testid": props.testid, disabled: props.disabled, onChange: (e) => {
|
|
6
|
-
if (props.onChange) {
|
|
7
|
-
props.onChange(e.currentTarget.checked);
|
|
8
|
-
}
|
|
9
|
-
} }));
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export { Checkbox };
|
|
13
|
-
//# sourceMappingURL=Checkbox.js.map
|
package/dist/esm/Checkbox.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sources":["../../src/Checkbox.tsx"],"sourcesContent":["import React, { RefObject } from 'react';\nimport './Checkbox.css';\n\nexport interface CheckboxProps {\n name?: string;\n defaultValue?: boolean | number;\n required?: boolean;\n inputRef?: RefObject<HTMLInputElement>;\n testid?: string;\n disabled?: boolean;\n onChange?: (newValue: boolean) => void;\n}\n\nexport function Checkbox(props: CheckboxProps): JSX.Element {\n const className = 'medplum-checkbox';\n return (\n <input\n id={props.name}\n name={props.name}\n className={className}\n type=\"checkbox\"\n value=\"true\"\n defaultChecked={!!props.defaultValue}\n required={props.required}\n ref={props.inputRef}\n data-testid={props.testid}\n disabled={props.disabled}\n onChange={(e) => {\n if (props.onChange) {\n props.onChange(e.currentTarget.checked);\n }\n }}\n />\n );\n}\n"],"names":[],"mappings":";;AAaM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,MAAM,SAAS,GAAG,kBAAkB,CAAC;AACrC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,UAAU,EACf,KAAK,EAAC,MAAM,EACZ,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAA,aAAA,EACN,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,OAAO,CAAC,CAAC;AACzC,aAAA;SACF,EAAA,CACD,EACF;AACJ;;;;"}
|
package/dist/esm/Dialog.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import './Dialog.css';
|
|
3
|
-
export interface DialogProps {
|
|
4
|
-
visible: boolean;
|
|
5
|
-
title: string;
|
|
6
|
-
children?: React.ReactNode;
|
|
7
|
-
onOk: () => void;
|
|
8
|
-
onCancel: () => void;
|
|
9
|
-
}
|
|
10
|
-
export declare function Dialog(props: DialogProps): JSX.Element | null;
|
package/dist/esm/Dialog.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Button } from './Button.js';
|
|
3
|
-
import { killEvent } from './utils/dom.js';
|
|
4
|
-
|
|
5
|
-
function Dialog(props) {
|
|
6
|
-
const [x, setX] = useState(100);
|
|
7
|
-
const [y, setY] = useState(100);
|
|
8
|
-
if (!props.visible) {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
function handleMouseDown(downEvent) {
|
|
12
|
-
killEvent(downEvent);
|
|
13
|
-
const dragX = downEvent.clientX - x;
|
|
14
|
-
const dragY = downEvent.clientY - y;
|
|
15
|
-
function handleMouseMove(moveEvent) {
|
|
16
|
-
killEvent(moveEvent);
|
|
17
|
-
setX(moveEvent.clientX - dragX);
|
|
18
|
-
setY(moveEvent.clientY - dragY);
|
|
19
|
-
}
|
|
20
|
-
function handleMouseUp(upEvent) {
|
|
21
|
-
killEvent(upEvent);
|
|
22
|
-
document.removeEventListener('mouseup', handleMouseUp, true);
|
|
23
|
-
document.removeEventListener('mousemove', handleMouseMove, true);
|
|
24
|
-
}
|
|
25
|
-
document.addEventListener('mouseup', handleMouseUp, true);
|
|
26
|
-
document.addEventListener('mousemove', handleMouseMove, true);
|
|
27
|
-
}
|
|
28
|
-
return (React.createElement(React.Fragment, null,
|
|
29
|
-
React.createElement("div", { className: "modal-dialog-bg" }),
|
|
30
|
-
React.createElement("div", { className: "modal-dialog", "data-testid": "dialog", tabIndex: 0, style: { left: x + 'px', top: y + 'px' } },
|
|
31
|
-
React.createElement("div", { className: "modal-dialog-title", onMouseDown: (e) => handleMouseDown(e) },
|
|
32
|
-
React.createElement("span", { className: "modal-dialog-title-text" }, props.title),
|
|
33
|
-
React.createElement("span", { className: "modal-dialog-title-close", tabIndex: 0, onClick: props.onCancel },
|
|
34
|
-
React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" },
|
|
35
|
-
React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" })))),
|
|
36
|
-
React.createElement("div", { className: "modal-dialog-content" }, props.children),
|
|
37
|
-
React.createElement("div", { className: "modal-dialog-buttons" },
|
|
38
|
-
React.createElement(Button, { testid: "dialog-ok", onClick: props.onOk }, "OK"),
|
|
39
|
-
React.createElement(Button, { testid: "dialog-cancel", onClick: props.onCancel }, "Cancel")))));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export { Dialog };
|
|
43
|
-
//# sourceMappingURL=Dialog.js.map
|
package/dist/esm/Dialog.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["../../src/Dialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Button } from './Button';\nimport { killEvent } from './utils/dom';\nimport './Dialog.css';\n\nexport interface DialogProps {\n visible: boolean;\n title: string;\n children?: React.ReactNode;\n onOk: () => void;\n onCancel: () => void;\n}\n\nexport function Dialog(props: DialogProps): JSX.Element | null {\n const [x, setX] = useState(100);\n const [y, setY] = useState(100);\n\n if (!props.visible) {\n return null;\n }\n\n function handleMouseDown(downEvent: React.MouseEvent): void {\n killEvent(downEvent);\n\n const dragX = downEvent.clientX - x;\n const dragY = downEvent.clientY - y;\n\n function handleMouseMove(moveEvent: MouseEvent): void {\n killEvent(moveEvent);\n setX(moveEvent.clientX - dragX);\n setY(moveEvent.clientY - dragY);\n }\n\n function handleMouseUp(upEvent: MouseEvent): void {\n killEvent(upEvent);\n document.removeEventListener('mouseup', handleMouseUp, true);\n document.removeEventListener('mousemove', handleMouseMove, true);\n }\n\n document.addEventListener('mouseup', handleMouseUp, true);\n document.addEventListener('mousemove', handleMouseMove, true);\n }\n\n return (\n <>\n <div className=\"modal-dialog-bg\"></div>\n <div className=\"modal-dialog\" data-testid=\"dialog\" tabIndex={0} style={{ left: x + 'px', top: y + 'px' }}>\n <div className=\"modal-dialog-title\" onMouseDown={(e) => handleMouseDown(e)}>\n <span className=\"modal-dialog-title-text\">{props.title}</span>\n <span className=\"modal-dialog-title-close\" tabIndex={0} onClick={props.onCancel}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </span>\n </div>\n <div className=\"modal-dialog-content\">{props.children}</div>\n <div className=\"modal-dialog-buttons\">\n <Button testid=\"dialog-ok\" onClick={props.onOk}>\n OK\n </Button>\n <Button testid=\"dialog-cancel\" onClick={props.onCancel}>\n Cancel\n </Button>\n </div>\n </div>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/FooterLinks.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FooterLinks.js","sources":["../../src/FooterLinks.tsx"],"sourcesContent":["import React from 'react';\nimport './FooterLinks.css';\n\nexport interface FooterLinksProps {\n children?: React.ReactNode;\n}\n\nexport function FooterLinks(props: FooterLinksProps): JSX.Element {\n return <div className=\"medplum-footer\">{props.children}</div>;\n}\n"],"names":[],"mappings":";;AAOM,SAAU,WAAW,CAAC,KAAuB,EAAA;IACjD,OAAO,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,IAAE,KAAK,CAAC,QAAQ,CAAO,CAAC;AAChE;;;;"}
|
package/dist/esm/Header.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { UserConfiguration } from '@medplum/fhirtypes';
|
|
3
|
-
import './Header.css';
|
|
4
|
-
export interface HeaderProps {
|
|
5
|
-
readonly title?: string;
|
|
6
|
-
readonly bgColor?: string;
|
|
7
|
-
readonly onLogo?: () => void;
|
|
8
|
-
readonly onProfile?: () => void;
|
|
9
|
-
readonly onSignOut?: () => void;
|
|
10
|
-
readonly config?: UserConfiguration;
|
|
11
|
-
}
|
|
12
|
-
export declare function Header(props: HeaderProps): JSX.Element;
|