@digihmis/esm-patient-registration-app 1.0.0

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 (146) hide show
  1. package/README.md +4 -0
  2. package/dist/117.js +1 -0
  3. package/dist/117.js.map +1 -0
  4. package/dist/131.js +1 -0
  5. package/dist/131.js.map +1 -0
  6. package/dist/132.js +1 -0
  7. package/dist/132.js.map +1 -0
  8. package/dist/152.js +1 -0
  9. package/dist/152.js.map +1 -0
  10. package/dist/209.js +1 -0
  11. package/dist/209.js.map +1 -0
  12. package/dist/247.js +1 -0
  13. package/dist/247.js.map +1 -0
  14. package/dist/28.js +1 -0
  15. package/dist/28.js.map +1 -0
  16. package/dist/317.js +1 -0
  17. package/dist/317.js.map +1 -0
  18. package/dist/349.js +1 -0
  19. package/dist/349.js.map +1 -0
  20. package/dist/371.js +1 -0
  21. package/dist/371.js.map +1 -0
  22. package/dist/378.js +1 -0
  23. package/dist/378.js.map +1 -0
  24. package/dist/442.js +1 -0
  25. package/dist/442.js.map +1 -0
  26. package/dist/45.js +1 -0
  27. package/dist/45.js.map +1 -0
  28. package/dist/459.js +12 -0
  29. package/dist/459.js.map +1 -0
  30. package/dist/466.js +1 -0
  31. package/dist/466.js.map +1 -0
  32. package/dist/508.js +1 -0
  33. package/dist/508.js.map +1 -0
  34. package/dist/61.js +1 -0
  35. package/dist/61.js.map +1 -0
  36. package/dist/640.js +1 -0
  37. package/dist/640.js.map +1 -0
  38. package/dist/689.js +1 -0
  39. package/dist/689.js.map +1 -0
  40. package/dist/709.js +1 -0
  41. package/dist/709.js.map +1 -0
  42. package/dist/712.js +1 -0
  43. package/dist/712.js.map +1 -0
  44. package/dist/720.js +1 -0
  45. package/dist/720.js.map +1 -0
  46. package/dist/742.js +1 -0
  47. package/dist/742.js.map +1 -0
  48. package/dist/771.js +1 -0
  49. package/dist/771.js.map +1 -0
  50. package/dist/806.js +1 -0
  51. package/dist/806.js.map +1 -0
  52. package/dist/912.js +1 -0
  53. package/dist/912.js.map +1 -0
  54. package/dist/913.js +1 -0
  55. package/dist/913.js.map +1 -0
  56. package/dist/940.js +1 -0
  57. package/dist/940.js.map +1 -0
  58. package/dist/957.js +15 -0
  59. package/dist/957.js.map +1 -0
  60. package/dist/digihmis-esm-patient-registration-app.js +6 -0
  61. package/dist/digihmis-esm-patient-registration-app.js.buildmanifest.json +827 -0
  62. package/dist/digihmis-esm-patient-registration-app.js.map +1 -0
  63. package/dist/main.js +17 -0
  64. package/dist/main.js.map +1 -0
  65. package/dist/routes.json +1 -0
  66. package/jest.config.js +26 -0
  67. package/package.json +51 -0
  68. package/rspack.config.js +1 -0
  69. package/src/active-visit-table/active-visit-table.component.tsx +240 -0
  70. package/src/active-visit-table/active-visits.resource.ts +338 -0
  71. package/src/active-visit-table/active-visits.scss +211 -0
  72. package/src/active-visit-table/empty-data-illustration.component.tsx +39 -0
  73. package/src/checkin-form/base-visit-type.component.tsx +102 -0
  74. package/src/checkin-form/base-visit-type.scss +75 -0
  75. package/src/checkin-form/checkin-form.scss +167 -0
  76. package/src/checkin-form/checkin-form.workspace.tsx +703 -0
  77. package/src/checkin-form/hooks/useDefaultFacilityLocation.ts +15 -0
  78. package/src/checkin-form/hooks/useDefaultVisitLocation.ts +24 -0
  79. package/src/checkin-form/hooks/useOfflineVisitType.ts +18 -0
  80. package/src/checkin-form/hooks/usePatientHistory.ts +40 -0
  81. package/src/checkin-form/hooks/useRecommendedVisitTypes.ts +34 -0
  82. package/src/checkin-form/hooks/useVisitAttributeType.ts +102 -0
  83. package/src/checkin-form/location-selector.component.tsx +86 -0
  84. package/src/checkin-form/recommended-visit-type.component.tsx +32 -0
  85. package/src/checkin-form/visit-attribute-type.component.tsx +256 -0
  86. package/src/checkin-form/visit-attribute-type.scss +5 -0
  87. package/src/checkin-form/visit-date-time.component.tsx +201 -0
  88. package/src/checkin-form/visit-form.resource.ts +308 -0
  89. package/src/components/custom-card/compact-patient-banner.component.tsx +70 -0
  90. package/src/components/custom-card/compact-patient-banner.scss +34 -0
  91. package/src/components/custom-card/custom-loader.component.tsx +22 -0
  92. package/src/components/custom-card/patient-search-context.ts +30 -0
  93. package/src/components/custom-input/autosuggest/autosuggest.component.tsx +213 -0
  94. package/src/components/custom-input/autosuggest/autosuggest.scss +158 -0
  95. package/src/components/custom-input/autosuggest/autosuggest.test.tsx +168 -0
  96. package/src/components/custom-patient-banner/custom-patient-banner.component.tsx +39 -0
  97. package/src/components/custom-patient-banner/custom-patient-banner.resource.ts +32 -0
  98. package/src/components/custom-patient-banner/custom-patient-banner.scss +26 -0
  99. package/src/config-schema.ts +511 -0
  100. package/src/constant.ts +6 -0
  101. package/src/constants/index.ts +1 -0
  102. package/src/dashboard.meta.ts +8 -0
  103. package/src/declarations.d.ts +6 -0
  104. package/src/empty-svg/empty-svg.component.tsx +565 -0
  105. package/src/icon-wrapper/icon-wrapper.extension.tsx +17 -0
  106. package/src/identifier-workspace/identifier-configure-form.workspace.tsx +278 -0
  107. package/src/identifier-workspace/identifier-configure.scss +106 -0
  108. package/src/identifier-workspace/identifier.resource.ts +90 -0
  109. package/src/index.ts +33 -0
  110. package/src/left-panel/left-panel.component.tsx +54 -0
  111. package/src/left-panel/left-panel.scss +13 -0
  112. package/src/page-header/page-header.component.tsx +35 -0
  113. package/src/page-header/page-header.scss +76 -0
  114. package/src/patient-tags/deceased-patient-tag.extension.tsx +41 -0
  115. package/src/patient-tags/deceased-patient-tag.scss +15 -0
  116. package/src/patient-tags/patient-tags.resource.ts +30 -0
  117. package/src/patient-tags/visit-tag.extension.tsx +43 -0
  118. package/src/patient-tags/visit-tag.scss +19 -0
  119. package/src/registration-form/form-manager.ts +449 -0
  120. package/src/registration-form/registration-form.component.tsx +1565 -0
  121. package/src/registration-form/registration-form.resource.ts +264 -0
  122. package/src/registration-form/registration-form.scss +282 -0
  123. package/src/routes.json +62 -0
  124. package/src/search-bar/search-bar.component.tsx +285 -0
  125. package/src/search-bar/search-bar.resource.ts +274 -0
  126. package/src/search-bar/search-bar.scss +427 -0
  127. package/src/search-dashboard/search-dashboard.component.tsx +17 -0
  128. package/src/search-dashboard/search-dashboard.scss +13 -0
  129. package/src/setup-tests.ts +1 -0
  130. package/src/type/index.ts +463 -0
  131. package/src/utils/fhir-mapper.ts +73 -0
  132. package/src/visit-summary/visit-summary.component.tsx +32 -0
  133. package/src/visit-summary/visit-summary.resource.ts +56 -0
  134. package/src/visit-summary/visit-summary.scss +74 -0
  135. package/translations/am.json +112 -0
  136. package/translations/ar.json +120 -0
  137. package/translations/en.json +112 -0
  138. package/translations/es.json +114 -0
  139. package/translations/fr.json +114 -0
  140. package/translations/he.json +114 -0
  141. package/translations/km.json +111 -0
  142. package/translations/pt.json +114 -0
  143. package/translations/sw.json +112 -0
  144. package/translations/vi.json +111 -0
  145. package/translations/zh.json +111 -0
  146. package/tsconfig.json +5 -0
@@ -0,0 +1,211 @@
1
+ @use '@carbon/layout';
2
+ @use '@carbon/type';
3
+ @use '@carbon/colors';
4
+ @use '@openmrs/esm-styleguide/src/vars' as *;
5
+
6
+ .container {
7
+ margin: 0 layout.$spacing-05;
8
+ }
9
+
10
+ .activeVisitsContainer {
11
+ background-color: $ui-02;
12
+ border: 1px solid $ui-03;
13
+ width: 100%;
14
+ margin: 1rem auto;
15
+ max-width: 95vw;
16
+ padding-bottom: 0;
17
+ }
18
+
19
+ .activeVisitsDetailHeaderContainer {
20
+ display: flex;
21
+ justify-content: space-between;
22
+ align-items: center;
23
+ padding: layout.$spacing-04 0 layout.$spacing-04 layout.$spacing-05;
24
+ background-color: $ui-02;
25
+ }
26
+
27
+ .activeVisitsTable {
28
+ width: 100%;
29
+
30
+ th,
31
+ td {
32
+ white-space: nowrap;
33
+ text-align: left;
34
+ }
35
+
36
+ tbody tr[data-parent-row] {
37
+ // Don't show a bottom border on the last row so we don't end up with a double border from the activeVisitContainer
38
+ &:nth-last-of-type(2) > td {
39
+ border-bottom: none;
40
+ }
41
+ }
42
+ }
43
+
44
+ .backgroundDataFetchingIndicator {
45
+ align-items: center;
46
+ display: flex;
47
+ flex: 1 1 0%;
48
+ justify-content: center;
49
+ }
50
+
51
+ .tableContainer section {
52
+ position: relative;
53
+ }
54
+
55
+ .tableContainer a {
56
+ text-decoration: none;
57
+ }
58
+
59
+ .pagination {
60
+ overflow: hidden;
61
+
62
+ &:global(.cds--pagination) {
63
+ border-top: 1px solid $ui-03;
64
+ }
65
+ }
66
+
67
+ .hiddenRow {
68
+ display: none;
69
+ }
70
+
71
+ .emptyRow {
72
+ padding: 0 layout.$spacing-05;
73
+ display: flex;
74
+ align-items: center;
75
+ }
76
+
77
+ .visitSummaryContainer {
78
+ width: 100%;
79
+ max-width: 48rem;
80
+ margin: layout.$spacing-05 auto;
81
+ }
82
+
83
+ .expandedActiveVisitRow {
84
+ td {
85
+ padding: 0 layout.$spacing-07;
86
+
87
+ > div {
88
+ max-height: max-content !important;
89
+ }
90
+ }
91
+
92
+ th[colspan] td[colspan] > div:first-child {
93
+ padding: 0 layout.$spacing-05;
94
+ }
95
+
96
+ &:last-of-type th[colspan]:last-child {
97
+ border-bottom: none;
98
+ }
99
+ }
100
+
101
+ .action {
102
+ margin-bottom: layout.$spacing-03;
103
+ }
104
+
105
+ .content {
106
+ @include type.type-style('heading-compact-01');
107
+ color: $text-02;
108
+ margin-top: layout.$spacing-05;
109
+ margin-bottom: layout.$spacing-03;
110
+ }
111
+
112
+ .desktopHeading,
113
+ .tabletHeading {
114
+ text-align: left;
115
+ text-transform: capitalize;
116
+
117
+ h4 {
118
+ @include type.type-style('heading-compact-02');
119
+ color: $text-02;
120
+
121
+ &:after {
122
+ content: '';
123
+ display: block;
124
+ width: layout.$spacing-07;
125
+ padding-top: 3px;
126
+ border-bottom: 0.375rem solid;
127
+ @include brand-03(border-bottom-color);
128
+ }
129
+ }
130
+ }
131
+
132
+ .tile {
133
+ text-align: center;
134
+ }
135
+
136
+ .filterEmptyState {
137
+ display: flex;
138
+ justify-content: center;
139
+ align-items: center;
140
+ padding: layout.$spacing-05;
141
+ margin: layout.$spacing-11;
142
+ text-align: center;
143
+ }
144
+
145
+ .filterEmptyStateTile {
146
+ margin: auto;
147
+ }
148
+
149
+ .filterEmptyStateContent {
150
+ @include type.type-style('heading-compact-02');
151
+ color: $text-02;
152
+ margin-bottom: layout.$spacing-03;
153
+ }
154
+
155
+ .filterEmptyStateHelper {
156
+ @include type.type-style('body-compact-01');
157
+ color: $text-02;
158
+ }
159
+
160
+ // Overriding styles for RTL support
161
+ html[dir='rtl'] {
162
+ .activeVisitsContainer {
163
+ .activeVisitsDetailHeaderContainer {
164
+ padding: layout.$spacing-04 layout.$spacing-05 layout.$spacing-04 0;
165
+ background-color: colors.$gray-10;
166
+ }
167
+
168
+ .desktopHeading,
169
+ .tabletHeading {
170
+ h4 {
171
+ text-align: right;
172
+ }
173
+ }
174
+
175
+ div[role='search'] {
176
+ & :first-child {
177
+ svg {
178
+ left: unset;
179
+ right: layout.$spacing-03;
180
+ }
181
+ }
182
+
183
+ & :last-child {
184
+ right: unset;
185
+ left: 0;
186
+ }
187
+ }
188
+
189
+ .tableContainer {
190
+ overflow-x: auto;
191
+ text-wrap: nowrap;
192
+
193
+ th > div {
194
+ text-align: right;
195
+ }
196
+
197
+ td {
198
+ text-align: right;
199
+
200
+ .serviceColor {
201
+ margin-right: 0;
202
+ margin-left: layout.$spacing-03;
203
+ }
204
+
205
+ button {
206
+ text-align: right;
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+
3
+ export const EmptyDataIllustration = ({ width = '64', height = '64' }) => {
4
+ return (
5
+ <svg width={width} height={height} viewBox="0 0 64 64">
6
+ <title>Empty data illustration</title>
7
+ <g fill="none" fillRule="evenodd">
8
+ <path
9
+ d="M38.133 13.186H21.947c-.768.001-1.39.623-1.39 1.391V50.55l-.186.057-3.97 1.216a.743.743 0 01-.927-.493L3.664 12.751a.742.742 0 01.492-.926l6.118-1.874 17.738-5.43 6.119-1.873a.741.741 0 01.926.492L38.076 13l.057.186z"
10
+ fill="#F4F4F4"
11
+ />
12
+ <path
13
+ d="M41.664 13L38.026 1.117A1.576 1.576 0 0036.056.07l-8.601 2.633-17.737 5.43-8.603 2.634a1.578 1.578 0 00-1.046 1.97l12.436 40.616a1.58 1.58 0 001.969 1.046l5.897-1.805.185-.057v-.194l-.185.057-5.952 1.822a1.393 1.393 0 01-1.737-.923L.247 12.682a1.39 1.39 0 01.923-1.738L9.772 8.31 27.51 2.881 36.112.247a1.393 1.393 0 011.737.923L41.47 13l.057.186h.193l-.057-.185z"
14
+ fill="#8D8D8D"
15
+ />
16
+ <path
17
+ d="M11.378 11.855a.836.836 0 01-.798-.59L9.385 7.361a.835.835 0 01.554-1.042l16.318-4.996a.836.836 0 011.042.554l1.195 3.902a.836.836 0 01-.554 1.043l-16.318 4.995a.831.831 0 01-.244.037z"
18
+ fill="#C6C6C6"
19
+ />
20
+ <circle fill="#C6C6C6" cx={17.636} cy={2.314} r={1.855} />
21
+ <circle fill="#FFF" fillRule="nonzero" cx={17.636} cy={2.314} r={1.175} />
22
+ <path
23
+ d="M55.893 53.995H24.544a.79.79 0 01-.788-.789V15.644a.79.79 0 01.788-.788h31.349a.79.79 0 01.788.788v37.562a.79.79 0 01-.788.789z"
24
+ fill="#F4F4F4"
25
+ />
26
+ <path
27
+ d="M41.47 13H21.948a1.579 1.579 0 00-1.576 1.577V52.4l.185-.057V14.577c.001-.768.623-1.39 1.391-1.39h19.581L41.471 13zm17.02 0H21.947a1.579 1.579 0 00-1.576 1.577v42.478c0 .87.706 1.576 1.576 1.577H58.49a1.579 1.579 0 001.576-1.577V14.577a1.579 1.579 0 00-1.576-1.576zm1.39 44.055c0 .768-.622 1.39-1.39 1.392H21.947c-.768-.001-1.39-.624-1.39-1.392V14.577c0-.768.622-1.39 1.39-1.39H58.49c.768 0 1.39.622 1.39 1.39v42.478z"
28
+ fill="#8D8D8D"
29
+ />
30
+ <path
31
+ d="M48.751 17.082H31.686a.836.836 0 01-.835-.835v-4.081c0-.46.374-.834.835-.835H48.75c.461 0 .834.374.835.835v4.08c0 .462-.374.835-.835.836z"
32
+ fill="#C6C6C6"
33
+ />
34
+ <circle fill="#C6C6C6" cx={40.218} cy={9.755} r={1.855} />
35
+ <circle fill="#FFF" fillRule="nonzero" cx={40.218} cy={9.755} r={1.13} />
36
+ </g>
37
+ </svg>
38
+ );
39
+ };
@@ -0,0 +1,102 @@
1
+ import React, { useState, useMemo, useCallback, type ChangeEvent } from 'react';
2
+ import classNames from 'classnames';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { useFormContext, Controller } from 'react-hook-form';
5
+ import { Layer, RadioButton, RadioButtonGroup, Search, StructuredListSkeleton, Tile } from '@carbon/react';
6
+ import { PatientChartPagination } from '@openmrs/esm-patient-common-lib';
7
+ import { useDebounce, useLayoutType, usePagination, useConfig, type VisitType } from '@openmrs/esm-framework';
8
+ import styles from './base-visit-type.scss';
9
+ import { type VisitFormData } from './visit-form.resource';
10
+ import { RegistrationConfig } from '../config-schema';
11
+
12
+ interface BaseVisitTypeProps {
13
+ visitTypes: Array<VisitType>;
14
+ }
15
+
16
+ // TODO: Replace with actual default visit type UUID from your OpenMRS instance
17
+ const DEFAULT_VISIT_TYPE_UUID = '3371a4d4-f66f-4454-a86d-92c7b3da990c'; // Replace with actual UUID
18
+
19
+ const BaseVisitType: React.FC<BaseVisitTypeProps> = ({ visitTypes }) => {
20
+ const { t } = useTranslation();
21
+ const { control } = useFormContext<VisitFormData>();
22
+ const config = useConfig<RegistrationConfig>();
23
+ const isTablet = useLayoutType() === 'tablet';
24
+ const [searchTerm, setSearchTerm] = useState<string>('');
25
+ const debouncedSearchTerm = useDebounce(searchTerm, 300);
26
+
27
+ const filteredVisitTypes = useMemo(() => {
28
+ if (!config?.allowedVisitTypeUuids || config.allowedVisitTypeUuids.length === 0) {
29
+ return visitTypes;
30
+ }
31
+ return visitTypes.filter((visitType) => config.allowedVisitTypeUuids.includes(visitType.uuid));
32
+ }, [visitTypes, config?.allowedVisitTypeUuids]);
33
+
34
+ const searchResults = useMemo(() => {
35
+ if (!debouncedSearchTerm.trim()) {
36
+ return filteredVisitTypes;
37
+ }
38
+ const lowercasedTerm = debouncedSearchTerm.toLowerCase();
39
+ return filteredVisitTypes.filter((visitType) => visitType.display.toLowerCase().includes(lowercasedTerm));
40
+ }, [debouncedSearchTerm, filteredVisitTypes]);
41
+
42
+ const { results, currentPage, goTo } = usePagination(searchResults, 5);
43
+ const hasNoMatchingSearchResults = debouncedSearchTerm.trim() !== '' && searchResults.length === 0;
44
+
45
+ // Determine default value: use the specified default if it exists in filtered results,
46
+ // otherwise fall back to single result logic
47
+ const defaultValue = useMemo(() => {
48
+ const defaultExists = filteredVisitTypes.some((vt) => vt.uuid === DEFAULT_VISIT_TYPE_UUID);
49
+ if (defaultExists) {
50
+ return DEFAULT_VISIT_TYPE_UUID;
51
+ }
52
+ return results?.length === 1 ? results[0].uuid : null;
53
+ }, [filteredVisitTypes, results]);
54
+
55
+ return (
56
+ <div className={classNames(styles.visitTypeOverviewWrapper, isTablet ? styles.tablet : styles.desktop)}>
57
+ {filteredVisitTypes.length ? (
58
+ <>
59
+ <Controller
60
+ name="visitType"
61
+ control={control}
62
+ defaultValue={defaultValue}
63
+ render={({ field: { onChange, value } }) => (
64
+ <RadioButtonGroup
65
+ className={styles.radioButtonGroup}
66
+ name="visit-types"
67
+ onChange={onChange}
68
+ orientation="vertical"
69
+ valueSelected={value}>
70
+ {results.map(({ uuid, display, name }) => (
71
+ <RadioButton
72
+ className={styles.radioButton}
73
+ id={`visit-type-${uuid}`}
74
+ key={uuid}
75
+ labelText={display}
76
+ value={uuid}
77
+ />
78
+ ))}
79
+ </RadioButtonGroup>
80
+ )}
81
+ />
82
+
83
+ {!hasNoMatchingSearchResults && (
84
+ <div className={styles.paginationContainer}>
85
+ <PatientChartPagination
86
+ currentItems={results.length}
87
+ onPageNumberChange={({ page }) => goTo(page)}
88
+ pageNumber={currentPage}
89
+ pageSize={5}
90
+ totalItems={filteredVisitTypes?.length}
91
+ />
92
+ </div>
93
+ )}
94
+ </>
95
+ ) : (
96
+ <StructuredListSkeleton className={styles.skeleton} />
97
+ )}
98
+ </div>
99
+ );
100
+ };
101
+
102
+ export default BaseVisitType;
@@ -0,0 +1,75 @@
1
+ @use '@carbon/colors';
2
+ @use '@carbon/layout';
3
+ @use '@carbon/type';
4
+ @use '@openmrs/esm-styleguide/src/vars' as *;
5
+
6
+ .tablet {
7
+ background-color: $ui-02;
8
+ }
9
+
10
+ .desktop {
11
+ background-color: $ui-01;
12
+
13
+ .paginationContainer div {
14
+ background-color: $ui-01;
15
+ }
16
+ }
17
+
18
+ .visitTypeOverviewWrapper {
19
+ margin: layout.$spacing-03 0;
20
+ border: 0.0625rem solid $grey-2;
21
+
22
+ &:has(.skeleton) {
23
+ border-bottom: none !important;
24
+ }
25
+ }
26
+
27
+ .visitTypeOverviewWrapper div:nth-child(3) > div:nth-child(2) {
28
+ position: relative;
29
+ }
30
+
31
+ .visitTypeOverviewWrapper div:nth-child(3) span * {
32
+ display: none;
33
+ }
34
+
35
+ .radioButtonGroup {
36
+ display: flex;
37
+ flex-direction: column;
38
+ align-items: flex-start;
39
+ margin-top: layout.$spacing-03;
40
+ min-height: layout.$spacing-10;
41
+ width: 100%;
42
+ @include type.type-style('body-compact-01');
43
+ }
44
+
45
+ .radioButton {
46
+ padding: layout.$spacing-02 layout.$spacing-05;
47
+ margin: layout.$spacing-03 0;
48
+ }
49
+
50
+ .tileContainer {
51
+ background-color: $ui-02;
52
+ padding: layout.$spacing-09 0;
53
+ }
54
+
55
+ .tile {
56
+ margin: auto;
57
+ width: fit-content;
58
+ }
59
+
60
+ .tileContent {
61
+ display: flex;
62
+ flex-direction: column;
63
+ align-items: center;
64
+ }
65
+
66
+ .content {
67
+ @include type.type-style('heading-compact-02');
68
+ color: $text-02;
69
+ margin-bottom: layout.$spacing-03;
70
+ }
71
+
72
+ .helper {
73
+ @include type.type-style('body-compact-01');
74
+ color: $text-02;
75
+ }
@@ -0,0 +1,167 @@
1
+ @use '@carbon/colors';
2
+ @use '@carbon/layout';
3
+ @use '@carbon/type';
4
+
5
+ .container {
6
+ margin: layout.$spacing-05;
7
+
8
+ & section {
9
+ margin: layout.$spacing-05 0 layout.$spacing-03;
10
+
11
+ &:first-of-type {
12
+ margin-top: 0;
13
+ }
14
+
15
+ &:last-of-type {
16
+ margin-bottom: 0;
17
+ }
18
+ }
19
+ }
20
+
21
+ .heading {
22
+ @include type.type-style('heading-03');
23
+ margin: layout.$spacing-05;
24
+ }
25
+
26
+ .sectionTitle {
27
+ @include type.type-style('heading-compact-02');
28
+ color: colors.$gray-70;
29
+ margin: 0 0 layout.$spacing-03 0;
30
+ }
31
+
32
+ .dateTimeSection {
33
+ display: flex;
34
+ margin: layout.$spacing-05 0;
35
+ align-items: center;
36
+ }
37
+
38
+ .radioButton {
39
+ margin: layout.$spacing-05 0;
40
+ }
41
+
42
+ .headerGridRow {
43
+ border-bottom: 0.0625rem solid colors.$gray-20;
44
+ margin: 0;
45
+ }
46
+
47
+ .dataGridRow {
48
+ display: grid;
49
+ grid-template-columns: 50% 10% 1fr;
50
+ margin: layout.$spacing-03 layout.$spacing-05;
51
+ }
52
+
53
+ .form {
54
+ display: flex;
55
+ flex-direction: column;
56
+ justify-content: start;
57
+ height: 100%;
58
+ }
59
+
60
+ .buttonSet {
61
+ margin-top: auto;
62
+ justify-self: end;
63
+ }
64
+
65
+ .button {
66
+ height: layout.$spacing-10;
67
+ display: flex;
68
+ align-content: flex-start;
69
+ align-items: baseline;
70
+ min-width: 50%;
71
+ }
72
+
73
+ .tablet {
74
+ padding: layout.$spacing-06 layout.$spacing-05;
75
+ background-color: white;
76
+ }
77
+
78
+ .desktop {
79
+ padding: 0;
80
+ }
81
+
82
+ @media screen and (max-width: 600px) {
83
+ .dateTimeSection {
84
+ flex-direction: column;
85
+ }
86
+ }
87
+
88
+ .inlineNotification {
89
+ width: 100%;
90
+ max-width: unset;
91
+ padding: '0';
92
+ }
93
+
94
+ .label {
95
+ @include type.type-style('label-01');
96
+ color: colors.$gray-70;
97
+ }
98
+
99
+ // :global(.omrs-breakpoint-lt-desktop) {
100
+ // .container {
101
+ // & section {
102
+ // display: flex;
103
+ // gap: layout.$spacing-10;
104
+
105
+ // .sectionTitle {
106
+ // flex-basis: 30%;
107
+ // min-width: 8rem;
108
+ // text-align: left;
109
+ // }
110
+
111
+ // .sectionField {
112
+ // flex-basis: 70%;
113
+ // }
114
+ // }
115
+ // }
116
+
117
+ // .form {
118
+ // height: 100%;
119
+ // }
120
+ // }
121
+
122
+ .spinner {
123
+ &:global(.cds--inline-loading) {
124
+ min-height: layout.$spacing-05 !important;
125
+ }
126
+ }
127
+
128
+ .bodyShort02 {
129
+ @include type.type-style('body-compact-02');
130
+ }
131
+
132
+ .timePicker {
133
+ display: flex;
134
+ align-items: baseline;
135
+
136
+ :global(.cds--form-requirement) {
137
+ max-width: layout.$spacing-12;
138
+ max-height: 0 !important;
139
+ }
140
+ }
141
+
142
+ .timePickerSelectError {
143
+ outline: 2px solid colors.$red-50;
144
+ outline-offset: -2px;
145
+ }
146
+
147
+ .timerPickerError {
148
+ color: colors.$red-60;
149
+ display: flex;
150
+ align-self: flex-end;
151
+ max-width: layout.$spacing-11;
152
+ font-size: layout.$spacing-04;
153
+ margin: 0;
154
+ letter-spacing: 0.02rem;
155
+ line-height: 1.33333;
156
+ }
157
+
158
+ .timePickerContainer {
159
+ display: flex;
160
+ flex-direction: column;
161
+ }
162
+
163
+ .datePicker {
164
+ :global(.cds--date-picker-input__wrapper) {
165
+ inline-size: layout.$spacing-13;
166
+ }
167
+ }