@kenyaemr/esm-bed-management-app 1.0.1-pre.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc +37 -0
  4. package/.husky/pre-commit +4 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/.prettierignore +14 -0
  9. package/.turbo.json +18 -0
  10. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  11. package/.yarn/plugins/@yarnpkg/plugin-version.cjs +550 -0
  12. package/.yarn/versions/3d353a50.yml +0 -0
  13. package/LICENSE +373 -0
  14. package/README.md +40 -0
  15. package/dist/207.js +1 -0
  16. package/dist/207.js.map +1 -0
  17. package/dist/26.js +2 -0
  18. package/dist/26.js.LICENSE.txt +32 -0
  19. package/dist/26.js.map +1 -0
  20. package/dist/283.js +1 -0
  21. package/dist/283.js.map +1 -0
  22. package/dist/294.js +2 -0
  23. package/dist/294.js.LICENSE.txt +9 -0
  24. package/dist/294.js.map +1 -0
  25. package/dist/330.js +2 -0
  26. package/dist/330.js.LICENSE.txt +44 -0
  27. package/dist/330.js.map +1 -0
  28. package/dist/404.js +1 -0
  29. package/dist/404.js.map +1 -0
  30. package/dist/455.js +2 -0
  31. package/dist/455.js.LICENSE.txt +9 -0
  32. package/dist/455.js.map +1 -0
  33. package/dist/558.js +2 -0
  34. package/dist/558.js.LICENSE.txt +14 -0
  35. package/dist/558.js.map +1 -0
  36. package/dist/574.js +1 -0
  37. package/dist/629.js +1 -0
  38. package/dist/629.js.map +1 -0
  39. package/dist/637.js +1 -0
  40. package/dist/637.js.map +1 -0
  41. package/dist/707.js +1 -0
  42. package/dist/707.js.map +1 -0
  43. package/dist/800.js +2 -0
  44. package/dist/800.js.LICENSE.txt +3 -0
  45. package/dist/800.js.map +1 -0
  46. package/dist/850.js +1 -0
  47. package/dist/850.js.map +1 -0
  48. package/dist/884.js +1 -0
  49. package/dist/884.js.map +1 -0
  50. package/dist/933.js +1 -0
  51. package/dist/933.js.map +1 -0
  52. package/dist/esm-kenyaemr-bed-management-app.js +1 -0
  53. package/dist/esm-kenyaemr-bed-management-app.js.buildmanifest.json +506 -0
  54. package/dist/esm-kenyaemr-bed-management-app.js.map +1 -0
  55. package/dist/main.js +1 -0
  56. package/dist/main.js.map +1 -0
  57. package/dist/routes.json +1 -0
  58. package/i18next-parser.config.js +89 -0
  59. package/jest.config.js +0 -0
  60. package/package.json +112 -0
  61. package/src/__mocks__/react-i18next.js +55 -0
  62. package/src/admin-card-link.component.tsx +27 -0
  63. package/src/assets/landing-page.png +0 -0
  64. package/src/assets/logo.svg +1 -0
  65. package/src/bed-administration/bed-administration-form.component.tsx +326 -0
  66. package/src/bed-administration/bed-administration-form.scss +0 -0
  67. package/src/bed-administration/bed-administration-table.component.tsx +317 -0
  68. package/src/bed-administration/bed-administration-table.scss +112 -0
  69. package/src/bed-administration/bed-administration-types.ts +20 -0
  70. package/src/bed-administration/bed-administration.resource.ts +59 -0
  71. package/src/bed-administration/edit-bed-form.component.tsx +100 -0
  72. package/src/bed-administration/new-bed-form.component.tsx +112 -0
  73. package/src/bed-admission/active-patients/active-patients-table.component.tsx +299 -0
  74. package/src/bed-admission/active-patients/active-visits.resource.ts +171 -0
  75. package/src/bed-admission/active-patients/admission-action-button-styles.scss +0 -0
  76. package/src/bed-admission/active-patients/admission-action-button.component.tsx +26 -0
  77. package/src/bed-admission/active-patients/index.tsx +15 -0
  78. package/src/bed-admission/active-patients/patient-queues.resource.ts +136 -0
  79. package/src/bed-admission/active-patients/styles.scss +284 -0
  80. package/src/bed-admission/active-patients/view-action-menu.component.tsx +33 -0
  81. package/src/bed-admission/admitted-patients/active-admissions.resource.ts +125 -0
  82. package/src/bed-admission/admitted-patients/admitted-patients-table.component.tsx +280 -0
  83. package/src/bed-admission/admitted-patients/admitted-patients.component.tsx +22 -0
  84. package/src/bed-admission/admitted-patients/location-combo-box.component.tsx +55 -0
  85. package/src/bed-admission/admitted-patients/styles.scss +284 -0
  86. package/src/bed-admission/bed-admission-tabs-styles.scss +30 -0
  87. package/src/bed-admission/bed-admission-tabs.component.tsx +69 -0
  88. package/src/bed-admission/bed-admission.component.tsx +15 -0
  89. package/src/bed-admission/bed-admission.resource.ts +52 -0
  90. package/src/bed-admission/bed-layout/bed-layout-list.component.tsx +101 -0
  91. package/src/bed-admission/bed-layout/bed-layout.component.tsx +64 -0
  92. package/src/bed-admission/bed-layout/bed-layout.scss +118 -0
  93. package/src/bed-admission/bed-layout/min-bed-layout.component.tsx +26 -0
  94. package/src/bed-admission/bed-tag/bed-tag-administration-table.component.tsx +217 -0
  95. package/src/bed-admission/bed-tag/bed-tags-admin-form.component.tsx +131 -0
  96. package/src/bed-admission/bed-tag/edit-tag-form.component.tsx +80 -0
  97. package/src/bed-admission/bed-tag/new-tag-form.component.tsx +83 -0
  98. package/src/bed-admission/bed-type/bed-type-admin-form.component.tsx +173 -0
  99. package/src/bed-admission/bed-type/bed-type-administration-table.component.tsx +222 -0
  100. package/src/bed-admission/bed-type/edit-bed-type.component.tsx +80 -0
  101. package/src/bed-admission/bed-type/new-bed-type-form.component.tsx +87 -0
  102. package/src/bed-admission/createDashboardLink.tsx +47 -0
  103. package/src/bed-admission/discharged-patients/discharged-patients.componet.tsx +19 -0
  104. package/src/bed-admission/helpers/functions.ts +102 -0
  105. package/src/bed-admission/types.ts +133 -0
  106. package/src/config-schema.ts +31 -0
  107. package/src/declarations.d.ts +7 -0
  108. package/src/empty-state/empty-state.component.tsx +69 -0
  109. package/src/empty-state/empty-state.scss +62 -0
  110. package/src/header/header.component.tsx +51 -0
  111. package/src/header/header.scss +72 -0
  112. package/src/header/illustration.component.tsx +13 -0
  113. package/src/home.component.tsx +15 -0
  114. package/src/home.scss +5 -0
  115. package/src/index.ts +78 -0
  116. package/src/left-panel/left-panel.component.tsx +33 -0
  117. package/src/left-panel/left-panel.scss +41 -0
  118. package/src/left-panel-link.component.tsx +49 -0
  119. package/src/root.component.tsx +39 -0
  120. package/src/root.scss +11 -0
  121. package/src/routes.json +56 -0
  122. package/src/setup-tests.ts +1 -0
  123. package/src/summary/summary.component.tsx +74 -0
  124. package/src/summary/summary.resource.ts +211 -0
  125. package/src/summary/summary.scss +72 -0
  126. package/src/types.ts +163 -0
  127. package/src/ward-card/ward-card.component.tsx +41 -0
  128. package/src/ward-card/ward-card.scss +51 -0
  129. package/src/ward-with-beds/ward-with-beds.component.tsx +186 -0
  130. package/src/ward-with-beds/ward-with-beds.scss +27 -0
  131. package/src/workspace/allocate-bed-workspace.component.tsx +188 -0
  132. package/src/workspace/allocate-bed.scss +124 -0
  133. package/src/workspace/overlay.component.tsx +55 -0
  134. package/src/workspace/overlay.scss +96 -0
  135. package/translations/en.json +7 -0
  136. package/tsconfig.json +23 -0
  137. package/webpack.config.js +1 -0
@@ -0,0 +1,280 @@
1
+ import {
2
+ DataTable,
3
+ DataTableSkeleton,
4
+ DefinitionTooltip,
5
+ Pagination,
6
+ Table,
7
+ TableBody,
8
+ TableCell,
9
+ TableContainer,
10
+ TableHead,
11
+ TableHeader,
12
+ TableRow,
13
+ Tag,
14
+ Layer,
15
+ TableToolbar,
16
+ TableToolbarContent,
17
+ TableToolbarSearch,
18
+ TableExpandedRow,
19
+ TableExpandHeader,
20
+ TableExpandRow,
21
+ } from "@carbon/react";
22
+
23
+ import {
24
+ isDesktop,
25
+ useConfig,
26
+ useLayoutType,
27
+ usePagination,
28
+ useSession,
29
+ } from "@openmrs/esm-framework";
30
+ import React, { useCallback, useMemo, useState } from "react";
31
+ import { useTranslation } from "react-i18next";
32
+ import { getOriginFromPathName } from "../helpers/functions";
33
+ import styles from "../active-patients/styles.scss";
34
+ import { useActiveAdmissions } from "./active-admissions.resource";
35
+ import EmptyState from "../../empty-state/empty-state.component";
36
+ import { patientDetailsProps } from "../types";
37
+
38
+ interface ActiveVisitsTableProps {
39
+ status: string;
40
+ setPatientCount?: (value: number) => void;
41
+ }
42
+
43
+ const AdmittedPatientsTable: React.FC<ActiveVisitsTableProps> = ({
44
+ status,
45
+ setPatientCount,
46
+ }) => {
47
+ const { t } = useTranslation();
48
+ const session = useSession();
49
+ const currentPathName: string = window.location.pathname;
50
+ const fromPage: string = getOriginFromPathName(currentPathName);
51
+ const pageSizes = [10, 20, 30, 40, 50];
52
+ const [currentPageSize, setPageSize] = useState(10);
53
+ const [showOverlay, setShowOverlay] = useState(false);
54
+ const [selectedPatientDetails, setSelectedPatientDetails] =
55
+ useState<patientDetailsProps>();
56
+
57
+ const layout = useLayoutType();
58
+
59
+ const { patientQueueEntries, isLoading } = useActiveAdmissions();
60
+ const { restrictWardAdministrationToLoginLocation } = useConfig();
61
+
62
+ const handleBedAssigmentModal = useCallback(
63
+ (entry) => {
64
+ setSelectedPatientDetails({
65
+ name: entry.name,
66
+ patientUuid: entry.patientUuid,
67
+ encounter: entry.encounter,
68
+ locationUuid: session?.sessionLocation?.uuid,
69
+ locationTo: entry.locationTo,
70
+ locationFrom: entry.locationFrom,
71
+ queueUuid: entry.uuid,
72
+ });
73
+ setShowOverlay(true);
74
+ },
75
+ [session?.sessionLocation?.uuid]
76
+ );
77
+
78
+ const renderActionButton = useCallback(
79
+ (entry) => {
80
+ const buttonTexts = {
81
+ pending: "Assign Bed",
82
+ completed: "Transfer",
83
+ };
84
+ const buttonText = buttonTexts[status] || "Un-assign";
85
+
86
+ // return (
87
+ // <AdmissionActionButton
88
+ // entry={entry}
89
+ // handleBedAssigmentModal={handleBedAssigmentModal}
90
+ // buttonText={buttonText}
91
+ // />
92
+ // );
93
+ },
94
+ [status]
95
+ );
96
+
97
+ const {
98
+ goTo,
99
+ results: paginatedQueueEntries,
100
+ currentPage,
101
+ } = usePagination(patientQueueEntries, currentPageSize);
102
+
103
+ const tableHeaders = useMemo(
104
+ () => [
105
+ {
106
+ id: 0,
107
+ header: t("name", "Name"),
108
+ key: "patientName",
109
+ },
110
+ {
111
+ id: 1,
112
+ header: t("age", "Age"),
113
+ key: "age",
114
+ },
115
+ {
116
+ id: 2,
117
+ header: t("gender", "Gender"),
118
+ key: "gender",
119
+ },
120
+ {
121
+ id: 3,
122
+ header: t("ward", "Ward"),
123
+ key: "ward",
124
+ },
125
+ {
126
+ id: 4,
127
+ header: t("bedNumber", "Bed Number"),
128
+ key: "bedNumber",
129
+ },
130
+ {
131
+ id: 5,
132
+ header: t("actions", "Action"),
133
+ key: "actions",
134
+ },
135
+ ],
136
+ [t]
137
+ );
138
+
139
+ const tableRows = useMemo(() => {
140
+ return paginatedQueueEntries?.map((entry: any, index) => ({
141
+ ...(entry as object),
142
+ id: `${entry?.patientUuid}`,
143
+ actions: {
144
+ content: (
145
+ <div className={styles.displayFlex}>
146
+ {/* {renderActionButton(entry)} */}
147
+ </div>
148
+ ),
149
+ },
150
+ }));
151
+ }, [paginatedQueueEntries]);
152
+
153
+ if (isLoading) {
154
+ return <DataTableSkeleton role="progressbar" />;
155
+ }
156
+
157
+ if (
158
+ (!isLoading && patientQueueEntries && status === "pending") ||
159
+ status === "completed" ||
160
+ status === ""
161
+ ) {
162
+ setPatientCount(patientQueueEntries.length);
163
+ }
164
+
165
+ if (patientQueueEntries?.length) {
166
+ return (
167
+ <div className={styles.container}>
168
+ <div className={styles.headerBtnContainer}></div>
169
+
170
+ <DataTable
171
+ data-floating-menu-container
172
+ headers={tableHeaders}
173
+ overflowMenuOnHover={isDesktop(layout) ? true : false}
174
+ rows={tableRows}
175
+ isSortable
176
+ size="xs"
177
+ useZebraStyles
178
+ >
179
+ {({ rows, headers, getTableProps, getRowProps, onInputChange }) => (
180
+ <TableContainer className={styles.tableContainer}>
181
+ <TableToolbar
182
+ style={{
183
+ position: "static",
184
+ height: "3rem",
185
+ overflow: "visible",
186
+ backgroundColor: "color",
187
+ }}
188
+ >
189
+ <TableToolbarContent className={styles.toolbarContent}>
190
+ <Layer>
191
+ <TableToolbarSearch
192
+ className={styles.search}
193
+ onChange={onInputChange}
194
+ placeholder={t("searchThisList", "Search this list")}
195
+ size="sm"
196
+ />
197
+ </Layer>
198
+ </TableToolbarContent>
199
+ </TableToolbar>
200
+ <Table {...getTableProps()} className={styles.activeVisitsTable}>
201
+ <TableHead>
202
+ <TableRow>
203
+ <TableExpandHeader />
204
+ {headers.map((header) => (
205
+ <TableHeader>
206
+ {header.header?.content ?? header.header}
207
+ </TableHeader>
208
+ ))}
209
+ </TableRow>
210
+ </TableHead>
211
+ <TableBody>
212
+ {rows.map((row, index) => {
213
+ return (
214
+ <>
215
+ <TableExpandRow {...getRowProps({ row })} key={row.id}>
216
+ {row.cells.map((cell) => (
217
+ <TableCell key={cell.id}>
218
+ {cell.value?.content ?? cell.value}
219
+ </TableCell>
220
+ ))}
221
+ </TableExpandRow>
222
+
223
+ {row.isExpanded ? (
224
+ <TableExpandedRow
225
+ className={styles.expandedLabQueueVisitRow}
226
+ colSpan={headers.length + 2}
227
+ ></TableExpandedRow>
228
+ ) : (
229
+ <TableExpandedRow
230
+ className={styles.hiddenRow}
231
+ colSpan={headers.length + 2}
232
+ />
233
+ )}
234
+ </>
235
+ );
236
+ })}
237
+ </TableBody>
238
+ </Table>
239
+ <Pagination
240
+ forwardText="Next page"
241
+ backwardText="Previous page"
242
+ page={currentPage}
243
+ pageSize={currentPageSize}
244
+ pageSizes={pageSizes}
245
+ totalItems={patientQueueEntries?.length}
246
+ className={styles.pagination}
247
+ onChange={({ pageSize, page }) => {
248
+ if (pageSize !== currentPageSize) {
249
+ setPageSize(pageSize);
250
+ }
251
+ if (page !== currentPage) {
252
+ goTo(page);
253
+ }
254
+ }}
255
+ />
256
+ </TableContainer>
257
+ )}
258
+ </DataTable>
259
+ {/* {showOverlay && (
260
+ <AssignBedWorkSpace
261
+ patientDetails={selectedPatientDetails}
262
+ closePanel={() => setShowOverlay(false)}
263
+ queueStatus={status}
264
+ headerTitle={t(
265
+ "assignBedToPatient",
266
+ restrictWardAdministrationToLoginLocation === true
267
+ ? `Assign Bed to Patient ${selectedPatientDetails.name} in the ${session?.sessionLocation?.display} Ward`
268
+ : `Assign Bed to Patient ${selectedPatientDetails.name}`
269
+ )}
270
+ />
271
+ )} */}
272
+ </div>
273
+ );
274
+ }
275
+
276
+ return (
277
+ <EmptyState msg={t("noQueueItems", "No admissions to display")} helper="" />
278
+ );
279
+ };
280
+ export default AdmittedPatientsTable;
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import AdmittedPatientsTable from "./admitted-patients-table.component";
3
+ interface AdmittedPatientsListProps {
4
+ status: string;
5
+ setPatientCount: (value: number) => void;
6
+ }
7
+
8
+ const AdmittedPatientsList: React.FC<AdmittedPatientsListProps> = ({
9
+ status,
10
+ setPatientCount,
11
+ }) => {
12
+ return (
13
+ <>
14
+ <AdmittedPatientsTable
15
+ status={status}
16
+ setPatientCount={setPatientCount}
17
+ />
18
+ </>
19
+ );
20
+ };
21
+
22
+ export default AdmittedPatientsList;
@@ -0,0 +1,55 @@
1
+ import React, { useState } from "react";
2
+ import { ComboBox, FormGroup } from "@carbon/react";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useLocationsByTag } from "../../summary/summary.resource";
5
+ import { useConfig, useSession } from "@openmrs/esm-framework";
6
+
7
+ const LocationComboBox = ({ setLocationUuid }) => {
8
+ const { t } = useTranslation();
9
+ const {
10
+ admissionLocationTagUuid,
11
+ restrictWardAdministrationToLoginLocation,
12
+ } = useConfig();
13
+ const session = useSession();
14
+ const [selectedLocationId] = useState("");
15
+
16
+ const { data: admissionLocations } = useLocationsByTag(
17
+ admissionLocationTagUuid
18
+ );
19
+
20
+ const filterLocationNames = (location) => {
21
+ return (
22
+ location.item.display
23
+ ?.toLowerCase()
24
+ .includes(location?.inputValue?.toLowerCase()) ?? []
25
+ );
26
+ };
27
+
28
+ return (
29
+ <FormGroup>
30
+ <ComboBox
31
+ aria-label={t("location", "Locations")}
32
+ id="location"
33
+ label={t("location", "Locations")}
34
+ shouldFilterItem={filterLocationNames}
35
+ items={admissionLocations}
36
+ onChange={({ selectedItem }) => {
37
+ setLocationUuid(selectedItem?.uuid ?? "");
38
+ }}
39
+ selectedItem={admissionLocations?.find(
40
+ (location) => location?.uuid === selectedLocationId
41
+ )}
42
+ itemToString={(location) => location?.display ?? ""}
43
+ placeholder={t("selectNewLocation", "Select an admission location")}
44
+ title={selectedLocationId}
45
+ initialSelectedItem={
46
+ restrictWardAdministrationToLoginLocation
47
+ ? session.sessionLocation
48
+ : ""
49
+ }
50
+ />
51
+ </FormGroup>
52
+ );
53
+ };
54
+
55
+ export default LocationComboBox;
@@ -0,0 +1,284 @@
1
+ @use '@carbon/type';
2
+ @use '@carbon/colors';
3
+ @use '@carbon/styles/scss/spacing';
4
+ @import '~@openmrs/esm-styleguide/src/vars';
5
+
6
+ .container {
7
+ background-color: $ui-01;
8
+ }
9
+
10
+ .displayFlex {
11
+ display: flex;
12
+ }
13
+
14
+ .section {
15
+ border-right: 1px solid colors.$gray-20;
16
+ }
17
+
18
+ .activePatientsTable tr:last-of-type {
19
+ td {
20
+ border-bottom: none;
21
+ }
22
+ }
23
+
24
+ .headerContainer {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: center;
28
+ background-color: $ui-background;
29
+ }
30
+
31
+ .headerButtons {
32
+ display: flex;
33
+ flex-flow: column;
34
+ }
35
+
36
+ .heading {
37
+ font-size: 20px;
38
+ font-weight: bold;
39
+ }
40
+
41
+ .filterContainer {
42
+ :global(.cds--dropdown__wrapper--inline) {
43
+ gap: 0;
44
+ }
45
+
46
+ :global(.cds--list-box__menu-icon) {
47
+ height: 1rem;
48
+ }
49
+
50
+ :global(.cds--dropdown--inline) :global(.cds--list-box__field) {
51
+ min-width: 12rem;
52
+ }
53
+ }
54
+
55
+ .tooltip :global(.cds--tooltip__trigger.cds--tooltip__trigger--definition) {
56
+ border-bottom: none;
57
+ }
58
+
59
+ .tag {
60
+ margin: 0.25rem 0;
61
+ }
62
+
63
+ .priorityTag {
64
+ @extend .tag;
65
+ @include type.type-style('label-01');
66
+ color: #943d00;
67
+ background-color: #ffc9a3;
68
+ }
69
+
70
+ .backgroundDataFetchingIndicator {
71
+ align-items: center;
72
+ display: flex;
73
+ flex: 1 1 0%;
74
+ justify-content: center;
75
+ }
76
+
77
+ .search {
78
+ max-width: 16rem;
79
+
80
+ input {
81
+ background-color: $ui-02 !important;
82
+ }
83
+ }
84
+
85
+ .tableContainer {
86
+ background-color: $ui-01;
87
+ margin: 0 spacing.$spacing-05;
88
+ padding: 0;
89
+
90
+ a {
91
+ text-decoration: none;
92
+ }
93
+
94
+ th {
95
+ color: $text-02;
96
+ }
97
+
98
+ :global(.cds--data-table) {
99
+ background-color: $ui-03;
100
+ }
101
+
102
+ :global(.cds--data-table-content) {
103
+ display: contents;
104
+ }
105
+
106
+ .toolbarContent {
107
+ height: spacing.$spacing-07;
108
+ margin-bottom: spacing.$spacing-02;
109
+ }
110
+ }
111
+
112
+ .emptyRow {
113
+ padding: 0 1rem;
114
+ display: flex;
115
+ align-items: center;
116
+ }
117
+
118
+ .activeVisitsTable tr:last-of-type {
119
+ td {
120
+ border-bottom: none;
121
+ }
122
+ }
123
+
124
+ .expandedActiveVisitRow {
125
+ :global(.cds--tab-content) {
126
+ padding: 0.5rem 0;
127
+ }
128
+
129
+ td {
130
+ padding: 0.5rem;
131
+
132
+ >div {
133
+ max-height: max-content !important;
134
+ background-color: $ui-02;
135
+ }
136
+ }
137
+
138
+ th[colspan] td[colspan]>div:first-child {
139
+ padding: 0 1rem;
140
+ }
141
+ }
142
+
143
+ .hiddenRow {
144
+ display: none;
145
+ }
146
+
147
+ .content {
148
+ @include type.type-style('heading-compact-02');
149
+ color: $text-02;
150
+ margin-bottom: 0.5rem;
151
+ }
152
+
153
+ .helper {
154
+ @include type.type-style('body-compact-01');
155
+ color: $text-02;
156
+ }
157
+
158
+ .separator {
159
+ @include type.type-style('body-compact-02');
160
+ color: $text-02;
161
+ width: 80%;
162
+ margin: 1.5rem auto;
163
+ overflow: hidden;
164
+ text-align: center;
165
+
166
+ &::before,
167
+ &::after {
168
+ background-color: $text-03;
169
+ content: '';
170
+ display: inline-block;
171
+ height: 1px;
172
+ position: relative;
173
+ vertical-align: middle;
174
+ width: 50%;
175
+ }
176
+
177
+ &::before {
178
+ right: 0.5rem;
179
+ margin-left: -50%;
180
+ }
181
+
182
+ &::after {
183
+ left: 0.5rem;
184
+ margin-right: -50%;
185
+ }
186
+ }
187
+
188
+ .tileContainer {
189
+ background-color: $ui-02;
190
+ border-top: 1px solid $ui-03;
191
+ padding: 5rem 0;
192
+ }
193
+
194
+ .tile {
195
+ margin: auto;
196
+ width: fit-content;
197
+ }
198
+
199
+ .tileContent {
200
+ display: flex;
201
+ flex-direction: column;
202
+ align-items: center;
203
+ }
204
+
205
+ .menuItem {
206
+ max-width: none;
207
+ }
208
+
209
+ .desktopHeading {
210
+ h4 {
211
+ @include type.type-style('heading-compact-02');
212
+ color: $text-02;
213
+ }
214
+ }
215
+
216
+ .tabletHeading {
217
+ h4 {
218
+ @include type.type-style('heading-03');
219
+ color: $text-02;
220
+ }
221
+ }
222
+
223
+ .desktopHeading,
224
+ .tabletHeading {
225
+ text-align: left;
226
+ text-transform: capitalize;
227
+ margin-bottom: spacing.$spacing-05;
228
+
229
+ h4:after {
230
+ content: '';
231
+ display: block;
232
+ width: 2rem;
233
+ padding-top: 3px;
234
+ border-bottom: 0.375rem solid var(--brand-03);
235
+ }
236
+ }
237
+
238
+ .statusContainer {
239
+ display: flex;
240
+ align-items: center;
241
+
242
+ svg {
243
+ margin-right: 0.5rem;
244
+ }
245
+ }
246
+
247
+ .visitType {
248
+ @include type.type-style('heading-compact-02');
249
+ }
250
+
251
+ .headerBtnContainer {
252
+ background-color: $ui-background;
253
+ text-align: right;
254
+ }
255
+
256
+ .addPatientToListBtn {
257
+ margin-left: spacing.$spacing-05;
258
+ height: spacing.$spacing-09;
259
+ }
260
+
261
+ .editIcon {
262
+ color: $interactive-01;
263
+ margin-top: 0.5rem;
264
+ cursor: pointer;
265
+ }
266
+
267
+ .expandedLabQueueVisitRow {
268
+ :global(.cds--tab-content) {
269
+ padding: 0.5rem 0;
270
+ }
271
+
272
+ td {
273
+ padding: 0.5rem;
274
+
275
+ >div {
276
+ max-height: max-content !important;
277
+ background-color: $ui-02;
278
+ }
279
+ }
280
+
281
+ th[colspan] td[colspan]>div:first-child {
282
+ padding: 0 1rem;
283
+ }
284
+ }
@@ -0,0 +1,30 @@
1
+ @import '~@openmrs/esm-styleguide/src/vars';
2
+
3
+ .tabsContainer {
4
+ :global(.cds--tabs__nav-item--selected) {
5
+ box-shadow: inset 0 2px 0 0 var(--brand-03) !important;
6
+
7
+ }
8
+ }
9
+
10
+ .tab {
11
+ min-width: 8rem;
12
+
13
+ &:active,
14
+ &:focus {
15
+ outline: none !important;
16
+ }
17
+
18
+ }
19
+
20
+ .container {
21
+ background-color: $ui-01;
22
+ }
23
+
24
+ .cardContainer {
25
+ background-color: $ui-02;
26
+ display: grid;
27
+ grid-template-columns: repeat(3, minmax(0, 1fr));
28
+ justify-content: space-between;
29
+ padding: 1rem;
30
+ }