@kenyaemr/esm-version-app 5.4.3 → 5.4.4-pre.12

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 (44) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/dist/127.js +1 -1
  3. package/dist/267.js +1 -1
  4. package/dist/267.js.map +1 -1
  5. package/dist/339.js +1 -0
  6. package/dist/339.js.map +1 -0
  7. package/dist/40.js +1 -1
  8. package/dist/562.js +1 -0
  9. package/dist/562.js.map +1 -0
  10. package/dist/809.js +1 -0
  11. package/dist/809.js.map +1 -0
  12. package/dist/855.js +1 -0
  13. package/dist/855.js.map +1 -0
  14. package/dist/{501.js → 882.js} +1 -1
  15. package/dist/913.js +15 -0
  16. package/dist/913.js.map +1 -0
  17. package/dist/916.js +1 -1
  18. package/dist/990.js +1 -0
  19. package/dist/990.js.map +1 -0
  20. package/dist/main.js +5 -5
  21. package/dist/main.js.map +1 -1
  22. package/dist/openmrs-esm-patient-verification-app.js +3 -3
  23. package/dist/openmrs-esm-patient-verification-app.js.buildmanifest.json +124 -92
  24. package/dist/openmrs-esm-patient-verification-app.js.map +1 -1
  25. package/dist/routes.json +1 -1
  26. package/package.json +3 -2
  27. package/src/about/about.component.tsx +194 -27
  28. package/src/about/about.scss +57 -9
  29. package/src/config-schema.ts +10 -1
  30. package/src/frontend-modules/frontend-modules.component.tsx +47 -24
  31. package/src/hooks/useModules.tsx +9 -0
  32. package/src/release-version.js +8 -8
  33. package/src/types/index.ts +15 -0
  34. package/translations/am.json +11 -1
  35. package/translations/en.json +11 -1
  36. package/translations/sw.json +11 -1
  37. package/dist/286.js +0 -1
  38. package/dist/286.js.map +0 -1
  39. package/dist/478.js +0 -1
  40. package/dist/478.js.map +0 -1
  41. package/dist/675.js +0 -1
  42. package/dist/675.js.map +0 -1
  43. package/dist/94.js +0 -15
  44. package/dist/94.js.map +0 -1
@@ -1,45 +1,212 @@
1
- import React, { useEffect } from 'react';
1
+ import React, { useMemo } from 'react';
2
+ import { useTranslation, type TFunction } from 'react-i18next';
3
+ import { formatDatetime, useConfig } from '@openmrs/esm-framework';
4
+ import { InlineLoading } from '@carbon/react';
5
+ import { Phone, Email, Location, Globe, WarningAlt } from '@carbon/react/icons';
6
+
2
7
  import styles from './about.scss';
3
- import { useModules } from '../hooks/useModules';
4
- import { formatDate, formatDatetime, showNotification } from '@openmrs/esm-framework';
8
+ import { useModules, useGlobalProperty } from '../hooks/useModules';
5
9
  import FrontendModule from '../frontend-modules/frontend-modules.component';
10
+ import type { FacilityContacts, FacilityInformation } from '../types';
11
+
6
12
  const packageInfo = require('../release-version.js');
7
13
 
14
+ function parseFacilityInformation(value: unknown): FacilityInformation | null {
15
+ if (value == null) {
16
+ return null;
17
+ }
18
+
19
+ if (typeof value === 'object' && !Array.isArray(value)) {
20
+ return value as FacilityInformation;
21
+ }
22
+
23
+ if (typeof value === 'string') {
24
+ try {
25
+ return JSON.parse(value) as FacilityInformation;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ return null;
32
+ }
33
+
34
+ interface FacilityHeaderProps {
35
+ facilityName: string;
36
+ taglineText?: string;
37
+ logoSrc: string;
38
+ titleClassName: string;
39
+ taglineClassName: string;
40
+ logoAlt: string;
41
+ }
42
+
43
+ const FacilityHeader: React.FC<FacilityHeaderProps> = ({
44
+ facilityName,
45
+ taglineText,
46
+ logoSrc,
47
+ titleClassName,
48
+ taglineClassName,
49
+ logoAlt,
50
+ }) => (
51
+ <div className={titleClassName}>
52
+ <img src={logoSrc} alt={logoAlt} width="300" height="100" />
53
+ <div>
54
+ <h3>{facilityName}</h3>
55
+ {taglineText ? <p className={taglineClassName}>{taglineText}</p> : null}
56
+ </div>
57
+ </div>
58
+ );
59
+
60
+ interface FacilityContactsProps {
61
+ contacts?: FacilityContacts;
62
+ contactsClassName: string;
63
+ contactItemClassName: string;
64
+ t: TFunction;
65
+ }
66
+
67
+ const FacilityContactsSection: React.FC<FacilityContactsProps> = ({
68
+ contacts,
69
+ contactsClassName,
70
+ contactItemClassName,
71
+ t,
72
+ }) => {
73
+ if (
74
+ !contacts ||
75
+ (!contacts.tel && !contacts.email && !contacts.emergency && !contacts.address && !contacts.website)
76
+ ) {
77
+ return null;
78
+ }
79
+
80
+ return (
81
+ <div className={contactsClassName}>
82
+ {contacts.tel && (
83
+ <div className={contactItemClassName}>
84
+ <Phone size={16} />
85
+ <span>{contacts.tel}</span>
86
+ </div>
87
+ )}
88
+ {contacts.email && (
89
+ <div className={contactItemClassName}>
90
+ <Email size={16} />
91
+ <a href={`mailto:${contacts.email}`}>{contacts.email}</a>
92
+ </div>
93
+ )}
94
+ {contacts.emergency && (
95
+ <div className={contactItemClassName}>
96
+ <WarningAlt size={16} />
97
+ <span>
98
+ {t('emergency', 'Emergency')}: {contacts.emergency}
99
+ </span>
100
+ </div>
101
+ )}
102
+ {contacts.address && (
103
+ <div className={contactItemClassName}>
104
+ <Location size={16} />
105
+ <span>{contacts.address}</span>
106
+ </div>
107
+ )}
108
+ {contacts.website && (
109
+ <div className={contactItemClassName}>
110
+ <Globe size={16} />
111
+ <a
112
+ href={contacts.website.startsWith('http') ? contacts.website : `https://${contacts.website}`}
113
+ target="_blank"
114
+ rel="noopener noreferrer">
115
+ {contacts.website}
116
+ </a>
117
+ </div>
118
+ )}
119
+ </div>
120
+ );
121
+ };
122
+
123
+ interface VersionDetailsProps {
124
+ kenyaEmrVersion?: string;
125
+ spaVersion: string;
126
+ buildDate: Date;
127
+ aboutBodyClassName: string;
128
+ t: TFunction;
129
+ }
130
+
131
+ const VersionDetails: React.FC<VersionDetailsProps> = ({
132
+ kenyaEmrVersion,
133
+ spaVersion,
134
+ buildDate,
135
+ aboutBodyClassName,
136
+ t,
137
+ }) => (
138
+ <div className={aboutBodyClassName}>
139
+ <p>{t('mainModuleVersion', 'Main Module Version')}</p>
140
+ <p>{`v${kenyaEmrVersion ?? '—'}`}</p>
141
+ <p>{t('spaVersion', 'SPA Version')}</p>
142
+ <p>{`v${spaVersion}`}</p>
143
+ <p>{t('buildDateTime', 'Build date time')}</p>
144
+ <p>{formatDatetime(buildDate, { mode: 'standard' })}</p>
145
+ </div>
146
+ );
147
+
8
148
  interface AboutProps {}
9
149
 
10
150
  const About: React.FC<AboutProps> = () => {
11
- const { modules, isLoading } = useModules();
12
- const kenyaEMR = modules.find(({ uuid }) => uuid === 'kenyaemr');
13
- const { title, container, aboutBody, aboutPage } = styles;
151
+ const { t } = useTranslation();
152
+ const { modules } = useModules();
153
+ const { defaultLogoPath } = useConfig();
154
+ const { data: facilityInformation, isLoading: isFacilityInformationLoading } = useGlobalProperty(
155
+ 'kenyaemr.cashier.receipt.facilityInformation',
156
+ );
157
+
158
+ const kenyaEmrModule = modules.find(({ uuid }) => uuid === 'kenyaemr');
159
+ const { title, container, aboutBody, aboutPage, tagline, contacts, contactItem } = styles;
14
160
  const { VERSION } = packageInfo;
15
161
 
162
+ const facility = useMemo(() => parseFacilityInformation(facilityInformation?.['value']), [facilityInformation]);
163
+
164
+ if (isFacilityInformationLoading) {
165
+ return <InlineLoading description={t('loadingFacilityInformation', 'Loading facility information...')} />;
166
+ }
167
+
168
+ const contactsData = facility?.contacts;
169
+
170
+ const facilityName = facility?.facilityName ?? 'Ministry of Health';
171
+ const facilityTagline = facility?.tagline;
172
+ const logoAlt = facility?.facilityName ?? t('facilityLogo', 'Facility logo');
173
+
174
+ const spaVersion = VERSION.version;
175
+ const buildDate = new Date(VERSION.buildDate);
176
+ const kenyaEmrVersion = kenyaEmrModule?.version;
177
+
16
178
  return (
17
179
  <div className={styles.main}>
18
180
  <div className={aboutPage}>
19
181
  <div className={container}>
20
- <div className={title}>
21
- <div>
22
- <h3>Government of Kenya</h3>
23
- <h4>Ministry of Health</h4>
24
- </div>
25
- <img
26
- src="/openmrs/ms/uiframework/resource/kenyaemr/images/logos/moh.png"
27
- alt="court_of_arms"
28
- width="50"
29
- height="50"
30
- />
31
- </div>
32
- <div className={aboutBody}>
33
- <p>KenyaEMR Version</p>
34
- <p>{`v${kenyaEMR?.version}`}</p>
35
- <p>SPA Version</p>
36
- <p>{`v${VERSION.version}`}</p>
37
- <p>Build date time</p>
38
- <p>{formatDatetime(new Date(VERSION.buildDate), { mode: 'standard' })}</p>
39
- </div>
182
+ <FacilityHeader
183
+ facilityName={facilityName}
184
+ taglineText={facilityTagline}
185
+ logoSrc={defaultLogoPath}
186
+ titleClassName={title}
187
+ taglineClassName={tagline}
188
+ logoAlt={logoAlt}
189
+ />
190
+
191
+ <FacilityContactsSection
192
+ contacts={contactsData}
193
+ contactsClassName={contacts}
194
+ contactItemClassName={contactItem}
195
+ t={t}
196
+ />
197
+
198
+ <VersionDetails
199
+ kenyaEmrVersion={kenyaEmrVersion}
200
+ spaVersion={spaVersion}
201
+ buildDate={buildDate}
202
+ aboutBodyClassName={aboutBody}
203
+ t={t}
204
+ />
40
205
  </div>
41
206
  </div>
42
- <FrontendModule />
207
+ <div className={styles.frontendModules}>
208
+ <FrontendModule />
209
+ </div>
43
210
  </div>
44
211
  );
45
212
  };
@@ -1,6 +1,7 @@
1
1
  @use '@carbon/styles/scss/spacing';
2
2
  @use '@carbon/styles/scss/type';
3
3
  @use '@carbon/styles/scss/colors';
4
+ @use '@carbon/layout';
4
5
 
5
6
  .main {
6
7
  display: flex;
@@ -12,6 +13,7 @@
12
13
  display: flex;
13
14
  justify-content: center;
14
15
  align-items: center;
16
+ width: 100%;
15
17
  }
16
18
 
17
19
  .container {
@@ -21,28 +23,69 @@
21
23
  flex-direction: column;
22
24
  align-items: center;
23
25
  border: 0.5px solid colors.$gray-30;
24
- width: 23rem;
26
+ width: 60rem;
27
+ padding: layout.$spacing-05;
25
28
  }
26
29
 
27
30
  .title {
28
31
  display: flex;
29
- align-items: center;
30
- padding-bottom: 0.25rem;
31
- margin-bottom: 0.25rem;
32
+ padding-bottom: layout.$spacing-03;
33
+ margin-bottom: layout.$spacing-03;
32
34
  border-bottom: 0.5px solid colors.$gray-30;
33
35
  width: 100%;
34
36
  justify-content: center;
37
+ flex-direction: column;
38
+ align-items: center;
35
39
 
36
40
  h3 {
37
- @include type.type-style('body-compact-02');
41
+ @include type.type-style('heading-compact-01');
42
+ text-align: center;
43
+ margin: 0 0 layout.$spacing-02;
38
44
  }
39
45
 
40
- h4 {
41
- @include type.type-style('body-compact-01');
46
+ img {
47
+ margin-bottom: layout.$spacing-03;
48
+ object-fit: contain;
42
49
  }
50
+ }
43
51
 
44
- img {
45
- margin-left: 0.25rem;
52
+ .tagline {
53
+ @include type.type-style('body-compact-01');
54
+ text-align: center;
55
+ color: colors.$gray-70;
56
+ margin: 0;
57
+ max-width: 28rem;
58
+ }
59
+
60
+ .contacts {
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: layout.$spacing-02;
64
+ width: 100%;
65
+ padding: layout.$spacing-03 0;
66
+ margin-bottom: layout.$spacing-03;
67
+ border-bottom: 0.5px solid colors.$gray-30;
68
+ align-items: center;
69
+
70
+ a {
71
+ color: colors.$blue-60;
72
+ text-decoration: none;
73
+
74
+ &:hover {
75
+ text-decoration: underline;
76
+ }
77
+ }
78
+ }
79
+
80
+ .contactItem {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: layout.$spacing-02;
84
+ @include type.type-style('body-compact-01');
85
+
86
+ svg {
87
+ flex-shrink: 0;
88
+ color: colors.$gray-70;
46
89
  }
47
90
  }
48
91
 
@@ -56,3 +99,8 @@
56
99
  margin-bottom: 0.25rem;
57
100
  }
58
101
  }
102
+
103
+ .frontendModules {
104
+ width: 100%;
105
+ padding: layout.$spacing-05;
106
+ }
@@ -1 +1,10 @@
1
- export const configSchema = {};
1
+ import { Type } from '@openmrs/esm-framework';
2
+
3
+ export const configSchema = {
4
+ defaultLogoPath: {
5
+ _type: Type.String,
6
+ _default: '/openmrs/spa/kenyaemr-login-logo_poweredby_kenyaemr.png',
7
+ _description:
8
+ 'Path to the default facility logo (relative to SPA base), used when facility information has no logo.',
9
+ },
10
+ };
@@ -1,32 +1,55 @@
1
- import React from 'react';
1
+ import React, { useMemo } from 'react';
2
+ import { DataTable, Table, TableHead, TableRow, TableHeader, TableBody, TableCell } from '@carbon/react';
3
+ import { useTranslation } from 'react-i18next';
4
+
2
5
  import { useFrontendModules } from '../hooks/useFrontendModules';
3
- import {
4
- StructuredListWrapper,
5
- StructuredListHead,
6
- StructuredListRow,
7
- StructuredListCell,
8
- StructuredListBody,
9
- } from '@carbon/react';
10
6
 
11
7
  const FrontendModule: React.FC = () => {
8
+ const { t } = useTranslation();
12
9
  const installedModules = useFrontendModules();
10
+
11
+ const headers = [
12
+ { key: 'name', header: t('moduleName', 'Module name') },
13
+ { key: 'version', header: t('version', 'Version') },
14
+ ];
15
+ const rows = useMemo(
16
+ () =>
17
+ installedModules.map((module, index) => ({
18
+ id: `module-${index}`,
19
+ name: module.name,
20
+ version: module.version ?? t('noVersionFound', 'No version found'),
21
+ })),
22
+ [installedModules, t],
23
+ );
24
+
13
25
  return (
14
- <StructuredListWrapper ariaLabel="Structured list">
15
- <StructuredListHead>
16
- <StructuredListRow head tabIndex={0}>
17
- <StructuredListCell head>Module name</StructuredListCell>
18
- <StructuredListCell head>Version</StructuredListCell>
19
- </StructuredListRow>
20
- </StructuredListHead>
21
- <StructuredListBody>
22
- {installedModules.map((module) => (
23
- <StructuredListRow tabIndex={0}>
24
- <StructuredListCell>{module.name}</StructuredListCell>
25
- <StructuredListCell>{module.version ?? 'No version found'} </StructuredListCell>
26
- </StructuredListRow>
27
- ))}
28
- </StructuredListBody>
29
- </StructuredListWrapper>
26
+ <DataTable
27
+ rows={rows}
28
+ headers={headers}
29
+ size="sm"
30
+ useZebraStyles
31
+ aria-label={t('frontendModules', 'Frontend modules')}>
32
+ {({ rows, headers, getTableProps, getHeaderProps, getRowProps }) => (
33
+ <Table {...getTableProps()}>
34
+ <TableHead>
35
+ <TableRow>
36
+ {headers.map((header) => (
37
+ <TableHeader {...getHeaderProps({ header })}>{header.header}</TableHeader>
38
+ ))}
39
+ </TableRow>
40
+ </TableHead>
41
+ <TableBody>
42
+ {rows.map((row) => (
43
+ <TableRow {...getRowProps({ row })}>
44
+ {row.cells.map((cell) => (
45
+ <TableCell key={cell.id}>{cell.value}</TableCell>
46
+ ))}
47
+ </TableRow>
48
+ ))}
49
+ </TableBody>
50
+ </Table>
51
+ )}
52
+ </DataTable>
30
53
  );
31
54
  };
32
55
 
@@ -14,3 +14,12 @@ export function useModules() {
14
14
 
15
15
  return { modules: data?.data?.results ?? [], isLoading };
16
16
  }
17
+
18
+ export function useGlobalProperty(property: string) {
19
+ const { data, isLoading } = useSWRImmutable<{ data: { results: Array<OpenmrsResource> } }>(
20
+ `/ws/rest/v1/systemsetting?q=${property}&v=full`,
21
+ openmrsFetch,
22
+ );
23
+
24
+ return { data: data?.data?.results?.[0] ?? [], isLoading };
25
+ }
@@ -2,10 +2,10 @@
2
2
  // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
3
3
  /* tslint:disable */
4
4
  export const VERSION = {
5
- "dirty": false,
6
- "raw": "v5.4.3-0-gbde73da",
7
- "hash": "gbde73da",
8
- "distance": 0,
5
+ "dirty": true,
6
+ "raw": "v5.4.3-13-gff9885f-dirty",
7
+ "hash": "gff9885f",
8
+ "distance": 13,
9
9
  "tag": "v5.4.3",
10
10
  "semver": {
11
11
  "options": {
@@ -21,9 +21,9 @@ export const VERSION = {
21
21
  "build": [],
22
22
  "version": "5.4.3"
23
23
  },
24
- "suffix": "0-gbde73da",
25
- "semverString": "5.4.3",
26
- "version": "5.4.3",
27
- "buildDate": "2026-02-02T07:55:57.637Z"
24
+ "suffix": "13-gff9885f-dirty",
25
+ "semverString": "5.4.3+13.gff9885f",
26
+ "version": "5.4.4-pre.12",
27
+ "buildDate": "2026-02-18T05:57:26.877Z"
28
28
  };
29
29
  /* tslint:enable */
@@ -11,3 +11,18 @@ export interface DefaultFacility {
11
11
  shaContracted: string;
12
12
  shaFacilityExpiryDate: string;
13
13
  }
14
+
15
+ export interface FacilityContacts {
16
+ tel?: string;
17
+ email?: string;
18
+ emergency?: string;
19
+ address?: string;
20
+ website?: string;
21
+ }
22
+
23
+ export interface FacilityInformation {
24
+ facilityName?: string;
25
+ tagline?: string;
26
+ logoPath?: string;
27
+ contacts?: FacilityContacts;
28
+ }
@@ -1,3 +1,13 @@
1
1
  {
2
- "systemInfo": "System Info"
2
+ "buildDateTime": "Build date time",
3
+ "emergency": "Emergency",
4
+ "facilityLogo": "Facility logo",
5
+ "frontendModules": "Frontend modules",
6
+ "loadingFacilityInformation": "Loading facility information...",
7
+ "mainModuleVersion": "Main Module Version",
8
+ "moduleName": "Module name",
9
+ "noVersionFound": "No version found",
10
+ "spaVersion": "SPA Version",
11
+ "systemInfo": "System Info",
12
+ "version": "Version"
3
13
  }
@@ -1,3 +1,13 @@
1
1
  {
2
- "systemInfo": "System Info"
2
+ "buildDateTime": "Build date time",
3
+ "emergency": "Emergency",
4
+ "facilityLogo": "Facility logo",
5
+ "frontendModules": "Frontend modules",
6
+ "loadingFacilityInformation": "Loading facility information...",
7
+ "mainModuleVersion": "Main Module Version",
8
+ "moduleName": "Module name",
9
+ "noVersionFound": "No version found",
10
+ "spaVersion": "SPA Version",
11
+ "systemInfo": "System Info",
12
+ "version": "Version"
3
13
  }
@@ -1,3 +1,13 @@
1
1
  {
2
- "systemInfo": "System Info"
2
+ "buildDateTime": "Build date time",
3
+ "emergency": "Emergency",
4
+ "facilityLogo": "Facility logo",
5
+ "frontendModules": "Frontend modules",
6
+ "loadingFacilityInformation": "Loading facility information...",
7
+ "mainModuleVersion": "Main Module Version",
8
+ "moduleName": "Module name",
9
+ "noVersionFound": "No version found",
10
+ "spaVersion": "SPA Version",
11
+ "systemInfo": "System Info",
12
+ "version": "Version"
3
13
  }
package/dist/286.js DELETED
@@ -1 +0,0 @@
1
- (globalThis.webpackChunk_kenyaemr_esm_version_app=globalThis.webpackChunk_kenyaemr_esm_version_app||[]).push([["286"],{3946:function(e,n,t){"use strict";t.d(n,{A:()=>l});var a=t(1452),i=t.n(a),s=t(4567),o=t.n(s)()(i());o.push([e.id,".-esm-version__about__main___ygFSI{display:flex;justify-items:center;flex-direction:column}.-esm-version__about__aboutPage___sinxi{display:flex;justify-content:center;align-items:center}.-esm-version__about__container___Q7mqH{display:flex;justify-content:center;margin:1rem;flex-direction:column;align-items:center;border:.5px solid #c6c6c6;width:23rem}.-esm-version__about__title___LYoZH{display:flex;align-items:center;padding-bottom:.25rem;margin-bottom:.25rem;border-bottom:.5px solid #c6c6c6;width:100%;justify-content:center}.-esm-version__about__title___LYoZH h3{font-size:var(--cds-body-compact-02-font-size, 1rem);font-weight:var(--cds-body-compact-02-font-weight, 400);line-height:var(--cds-body-compact-02-line-height, 1.375);letter-spacing:var(--cds-body-compact-02-letter-spacing, 0)}.-esm-version__about__title___LYoZH h4{font-size:var(--cds-body-compact-01-font-size, 0.875rem);font-weight:var(--cds-body-compact-01-font-weight, 400);line-height:var(--cds-body-compact-01-line-height, 1.28572);letter-spacing:var(--cds-body-compact-01-letter-spacing, 0.16px)}.-esm-version__about__title___LYoZH img{margin-left:.25rem}.-esm-version__about__aboutBody___Pv2r4{display:grid;grid-template-columns:1fr 1fr;column-gap:.25rem}.-esm-version__about__aboutBody___Pv2r4 p{font-size:var(--cds-label-01-font-size, 0.75rem);font-weight:var(--cds-label-01-font-weight, 400);line-height:var(--cds-label-01-line-height, 1.33333);letter-spacing:var(--cds-label-01-letter-spacing, 0.32px);margin-bottom:.25rem}","",{version:3,sources:["webpack://./src/about/about.scss","webpack://./../../node_modules/@carbon/type/scss/_styles.scss"],names:[],mappings:"AAIA,mCACE,YAAA,CACA,oBAAA,CACA,qBAAA,CAGF,wCACE,YAAA,CACA,sBAAA,CACA,kBAAA,CAGF,wCACE,YAAA,CACA,sBAAA,CACA,WAAA,CACA,qBAAA,CACA,kBAAA,CACA,yBAAA,CACA,WAAA,CAGF,oCACE,YAAA,CACA,kBAAA,CACA,qBAAA,CACA,oBAAA,CACA,gCAAA,CACA,UAAA,CACA,sBAAA,CAEA,uCC+zBE,oDAAA,CAAA,uDAAA,CAAA,yDAAA,CAAA,2DAAA,CD3zBF,uCC2zBE,wDAAA,CAAA,uDAAA,CAAA,2DAAA,CAAA,gEAAA,CDvzBF,wCACE,kBAAA,CAIJ,wCACE,YAAA,CACA,6BAAA,CACA,iBAAA,CAEA,0CC6yBE,gDAAA,CAAA,gDAAA,CAAA,oDAAA,CAAA,yDAAA,CD3yBA,oBAAA",sourcesContent:["@use '@carbon/styles/scss/spacing';\n@use '@carbon/styles/scss/type';\n@use '@carbon/styles/scss/colors';\n\n.main {\n display: flex;\n justify-items: center;\n flex-direction: column;\n}\n\n.aboutPage {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.container {\n display: flex;\n justify-content: center;\n margin: 1rem;\n flex-direction: column;\n align-items: center;\n border: 0.5px solid colors.$gray-30;\n width: 23rem;\n}\n\n.title {\n display: flex;\n align-items: center;\n padding-bottom: 0.25rem;\n margin-bottom: 0.25rem;\n border-bottom: 0.5px solid colors.$gray-30;\n width: 100%;\n justify-content: center;\n\n h3 {\n @include type.type-style('body-compact-02');\n }\n\n h4 {\n @include type.type-style('body-compact-01');\n }\n\n img {\n margin-left: 0.25rem;\n }\n}\n\n.aboutBody {\n display: grid;\n grid-template-columns: 1fr 1fr;\n column-gap: 0.25rem;\n\n & p {\n @include type.type-style('label-01');\n margin-bottom: 0.25rem;\n }\n}\n","//\n// Copyright IBM Corp. 2018, 2023\n//\n// This source code is licensed under the Apache-2.0 license found in the\n// LICENSE file in the root directory of this source tree.\n//\n\n// stylelint-disable number-max-precision\n\n@use 'sass:map';\n@use 'sass:math';\n@use '@carbon/grid/scss/config' as gridconfig;\n@use '@carbon/grid/scss/breakpoint' as grid;\n@use 'prefix' as *;\n@use 'font-family';\n@use 'scale';\n\n/// @type Map\n/// @access public\n/// @deprecated\n/// @group @carbon/type\n$caption-01: (\n font-size: scale.type-scale(1),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.33333,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @deprecated\n/// @group @carbon/type\n$caption-02: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$label-01: (\n font-size: scale.type-scale(1),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.33333,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$label-02: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$legal-01: (\n font-size: scale.type-scale(1),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.33333,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$legal-02: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @deprecated\n/// @group @carbon/type\n$helper-text-01: (\n font-size: scale.type-scale(1),\n line-height: 1.33333,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @deprecated\n/// @group @carbon/type\n$helper-text-02: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-short-01: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-compact-01: $body-short-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-long-01: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.42857,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-01: $body-long-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-short-02: (\n font-size: scale.type-scale(3),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.375,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-compact-02: $body-short-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-long-02: (\n font-size: scale.type-scale(3),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.5,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$body-02: $body-long-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$code-01: (\n font-family: font-family.font-family('mono'),\n font-size: scale.type-scale(1),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.33333,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$code-02: (\n font-family: font-family.font-family('mono'),\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.42857,\n letter-spacing: 0.32px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-01: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.42857,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-01: (\n font-size: scale.type-scale(2),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.28572,\n letter-spacing: 0.16px,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-compact-01: $productive-heading-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-02: (\n font-size: scale.type-scale(3),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.5,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-02: (\n font-size: scale.type-scale(3),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.375,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-compact-02: $productive-heading-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-03: (\n font-size: scale.type-scale(5),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.4,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-03: $productive-heading-03 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-04: (\n font-size: scale.type-scale(7),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-04: $productive-heading-04 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-05: (\n font-size: scale.type-scale(8),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.25,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-05: $productive-heading-05 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-06: (\n font-size: scale.type-scale(10),\n font-weight: font-family.font-weight('light'),\n // Extra digit needed for precision in Chrome\n line-height: 1.199,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-06: $productive-heading-06 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$productive-heading-07: (\n font-size: scale.type-scale(12),\n font-weight: font-family.font-weight('light'),\n line-height: 1.19,\n letter-spacing: 0,\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$heading-07: $productive-heading-07 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-01: $heading-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-02: $heading-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-03: (\n font-size: scale.type-scale(5),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.4,\n letter-spacing: 0,\n breakpoints: (\n xlg: (\n font-size: scale.type-scale(5),\n line-height: 1.4,\n ),\n max: (\n font-size: scale.type-scale(6),\n line-height: 1.334,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-heading-03: $expressive-heading-03 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-04: (\n font-size: scale.type-scale(7),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.28572,\n letter-spacing: 0,\n breakpoints: (\n xlg: (\n font-size: scale.type-scale(8),\n line-height: 1.25,\n font-weight: font-family.font-weight('regular'),\n ),\n max: (\n font-size: scale.type-scale(8),\n font-weight: font-family.font-weight('regular'),\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-heading-04: $expressive-heading-04 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-05: (\n font-size: scale.type-scale(8),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.25,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(9),\n font-weight: font-family.font-weight('light'),\n line-height: 1.22,\n ),\n lg: (\n font-size: scale.type-scale(10),\n line-height: 1.19,\n ),\n xlg: (\n font-size: scale.type-scale(11),\n line-height: 1.17,\n ),\n max: (\n font-size: scale.type-scale(13),\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-heading-05: $expressive-heading-05 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-heading-06: (\n font-size: scale.type-scale(8),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.25,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(9),\n line-height: 1.22,\n ),\n lg: (\n font-size: scale.type-scale(10),\n line-height: 1.19,\n ),\n xlg: (\n font-size: scale.type-scale(11),\n line-height: 1.17,\n ),\n max: (\n font-size: scale.type-scale(13),\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-heading-06: $expressive-heading-06 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$expressive-paragraph-01: (\n font-size: scale.type-scale(6),\n font-weight: font-family.font-weight('light'),\n line-height: 1.334,\n letter-spacing: 0,\n breakpoints: (\n lg: (\n font-size: scale.type-scale(7),\n line-height: 1.28572,\n ),\n max: (\n font-size: scale.type-scale(8),\n line-height: 1.25,\n ),\n ),\n);\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-paragraph-01: $expressive-paragraph-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$quotation-01: (\n font-family: font-family.font-family('serif'),\n font-size: scale.type-scale(5),\n font-weight: font-family.font-weight('regular'),\n line-height: 1.3,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(5),\n ),\n lg: (\n font-size: scale.type-scale(6),\n line-height: 1.334,\n ),\n xlg: (\n font-size: scale.type-scale(7),\n line-height: 1.28572,\n ),\n max: (\n font-size: scale.type-scale(8),\n line-height: 1.25,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-quotation-01: $quotation-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$quotation-02: (\n font-family: font-family.font-family('serif'),\n font-size: scale.type-scale(8),\n font-weight: font-family.font-weight('light'),\n line-height: 1.25,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(9),\n line-height: 1.22,\n ),\n lg: (\n font-size: scale.type-scale(10),\n line-height: 1.19,\n ),\n xlg: (\n font-size: scale.type-scale(11),\n line-height: 1.17,\n ),\n max: (\n font-size: scale.type-scale(13),\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-quotation-02: $quotation-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$display-01: (\n font-size: scale.type-scale(10),\n font-weight: font-family.font-weight('light'),\n line-height: 1.19,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(10),\n ),\n lg: (\n font-size: scale.type-scale(12),\n ),\n xlg: (\n font-size: scale.type-scale(13),\n line-height: 1.17,\n ),\n max: (\n font-size: scale.type-scale(15),\n line-height: 1.13,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-display-01: $display-01 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$display-02: (\n font-size: scale.type-scale(10),\n font-weight: font-family.font-weight('semibold'),\n line-height: 1.19,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(10),\n ),\n lg: (\n font-size: scale.type-scale(12),\n ),\n xlg: (\n font-size: scale.type-scale(13),\n line-height: 1.16,\n ),\n max: (\n font-size: scale.type-scale(15),\n line-height: 1.13,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-display-02: $display-02 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$display-03: (\n font-size: scale.type-scale(10),\n font-weight: font-family.font-weight('light'),\n line-height: 1.19,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(12),\n line-height: 1.18,\n ),\n lg: (\n font-size: scale.type-scale(13),\n line-height: 1.16,\n letter-spacing: -0.64px,\n ),\n xlg: (\n font-size: scale.type-scale(15),\n line-height: 1.13,\n letter-spacing: -0.64px,\n ),\n max: (\n font-size: scale.type-scale(16),\n line-height: 1.11,\n letter-spacing: -0.96px,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-display-03: $display-03 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$display-04: (\n font-size: scale.type-scale(10),\n font-weight: font-family.font-weight('light'),\n line-height: 1.19,\n letter-spacing: 0,\n breakpoints: (\n md: (\n font-size: scale.type-scale(14),\n line-height: 1.15,\n ),\n lg: (\n font-size: scale.type-scale(17),\n line-height: 1.11,\n letter-spacing: -0.64px,\n ),\n xlg: (\n font-size: scale.type-scale(20),\n line-height: 1.07,\n letter-spacing: -0.64px,\n ),\n max: (\n font-size: scale.type-scale(23),\n line-height: 1.05,\n letter-spacing: -0.96px,\n ),\n ),\n) !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$fluid-display-04: $display-04 !default;\n\n/// @type Map\n/// @access public\n/// @group @carbon/type\n$tokens: (\n caption-01: $caption-01,\n caption-02: $caption-02,\n label-01: $label-01,\n label-02: $label-02,\n helper-text-01: $helper-text-01,\n helper-text-02: $helper-text-02,\n body-short-01: $body-short-01,\n body-short-02: $body-short-02,\n body-long-01: $body-long-01,\n body-long-02: $body-long-02,\n code-01: $code-01,\n code-02: $code-02,\n heading-01: $heading-01,\n heading-02: $heading-02,\n productive-heading-01: $productive-heading-01,\n productive-heading-02: $productive-heading-02,\n productive-heading-03: $productive-heading-03,\n productive-heading-04: $productive-heading-04,\n productive-heading-05: $productive-heading-05,\n productive-heading-06: $productive-heading-06,\n productive-heading-07: $productive-heading-07,\n expressive-paragraph-01: $expressive-paragraph-01,\n expressive-heading-01: $expressive-heading-01,\n expressive-heading-02: $expressive-heading-02,\n expressive-heading-03: $expressive-heading-03,\n expressive-heading-04: $expressive-heading-04,\n expressive-heading-05: $expressive-heading-05,\n expressive-heading-06: $expressive-heading-06,\n quotation-01: $quotation-01,\n quotation-02: $quotation-02,\n display-01: $display-01,\n display-02: $display-02,\n display-03: $display-03,\n display-04: $display-04,\n // V11 Tokens\n legal-01: $legal-01,\n legal-02: $legal-02,\n body-compact-01: $body-compact-01,\n body-compact-02: $body-compact-02,\n heading-compact-01: $heading-compact-01,\n heading-compact-02: $heading-compact-02,\n body-01: $body-01,\n body-02: $body-02,\n heading-03: $heading-03,\n heading-04: $heading-04,\n heading-05: $heading-05,\n heading-06: $heading-06,\n heading-07: $heading-07,\n fluid-heading-03: $fluid-heading-03,\n fluid-heading-04: $fluid-heading-04,\n fluid-heading-05: $fluid-heading-05,\n fluid-heading-06: $fluid-heading-06,\n fluid-paragraph-01: $fluid-paragraph-01,\n fluid-quotation-01: $fluid-quotation-01,\n fluid-quotation-02: $fluid-quotation-02,\n fluid-display-01: $fluid-display-01,\n fluid-display-02: $fluid-display-02,\n fluid-display-03: $fluid-display-03,\n fluid-display-04: $fluid-display-04,\n) !default;\n\n/// @param {Map} $map\n/// @access public\n/// @group @carbon/type\n@mixin properties($map) {\n @each $name, $value in $map {\n #{$name}: $value;\n }\n}\n\n/// @param {Number} $value - Number with units\n/// @return {Number} Without units\n/// @access public\n/// @group @carbon/type\n@function strip-unit($value) {\n @return math.div($value, $value * 0 + 1);\n}\n\n/// This helper includes fluid type styles for the given token value. Fluid type\n/// means that the `font-size` is computed using `calc()` in order to be\n/// determined by the screen size instead of a breakpoint. As a result, fluid\n/// styles should be used with caution in fixed width contexts.\n///\n/// In addition, we make use of %-based line-heights so that the line-height of\n/// each type style is computed correctly due to the dynamic nature of the\n/// `font-size`.\n///\n/// Most of the logic for this work comes from CSS Tricks:\n/// https://css-tricks.com/snippets/css/fluid-typography/\n///\n/// @param {Map} $type-styles - The value of a given type token\n/// @param {Map} $breakpoints [$grid-breakpoints] - Custom breakpoints to use\n/// @access public\n/// @group @carbon/type\n@mixin fluid-type($type-styles, $breakpoints: gridconfig.$grid-breakpoints) {\n // Include the initial styles for the given token by default without any\n // media query guard. This includes `font-size` as a fallback in the case\n // that a browser does not support `calc()`\n @include properties(map.remove($type-styles, breakpoints));\n // We also need to include the `sm` styles by default since they don't\n // appear in the fluid styles for tokens\n @include fluid-type-size($type-styles, sm, $breakpoints);\n\n // Finally, we need to go through all the breakpoints defined in the type\n // token and apply the properties and fluid type size for that given\n // breakpoint\n @each $name, $values in map.get($type-styles, breakpoints) {\n @include grid.breakpoint($name) {\n @include properties($values);\n @include fluid-type-size($type-styles, $name, $breakpoints);\n }\n }\n}\n\n/// Computes the fluid `font-size` for a given type style and breakpoint\n/// @param {Map} $type-styles - The styles for a given token\n/// @param {String} $name - The name of the breakpoint to which we apply the fluid\n/// @param {Map} $breakpoints [$grid-breakpoints] - The breakpoints for the grid system\n/// @access public\n/// @group @carbon/type\n@mixin fluid-type-size(\n $type-styles,\n $name,\n $breakpoints: gridconfig.$grid-breakpoints\n) {\n // Get the information about the breakpoint we're currently working in. Useful\n // for getting initial width information\n $breakpoint: map.get($breakpoints, $name);\n\n // Our fluid styles are captured under the 'breakpoints' property in our type\n // styles map. These define what values to treat as `max-` variables below\n $fluid-sizes: map.get($type-styles, breakpoints);\n $fluid-breakpoint: ();\n // Special case for `sm` because the styles for small are on the type style\n // directly\n @if $name == sm {\n $fluid-breakpoint: map.remove($type-styles, breakpoints);\n } @else {\n $fluid-breakpoint: map.get($fluid-sizes, $name);\n }\n\n // Initialize our font-sizes to the default size for the type style\n $max-font-size: map.get($type-styles, font-size);\n $min-font-size: map.get($type-styles, font-size);\n @if map.has-key($fluid-breakpoint, font-size) {\n $min-font-size: map.get($fluid-breakpoint, font-size);\n }\n\n // Initialize our min and max width to the width of the current breakpoint\n $max-vw: map.get($breakpoint, width);\n $min-vw: map.get($breakpoint, width);\n\n // We can use `breakpoint-next` to see if there is another breakpoint we can\n // use to update `max-font-size` and `max-vw` with larger values\n $next-breakpoint-available: grid.breakpoint-next($name, $breakpoints);\n $next-fluid-breakpoint-name: null;\n\n // We need to figure out what the next available fluid breakpoint is for our\n // given $type-styles. In this loop we try and iterate through breakpoints\n // until we either manually set $next-breakpoint-available to null or\n // `breakpoint-next` returns null.\n @while $next-breakpoint-available {\n @if map.has-key($fluid-sizes, $next-breakpoint-available) {\n $next-fluid-breakpoint-name: $next-breakpoint-available;\n $next-breakpoint-available: null;\n } @else {\n $next-breakpoint-available: grid.breakpoint-next(\n $next-breakpoint-available,\n $breakpoints\n );\n }\n }\n\n // If we have found the next available fluid breakpoint name, then we know\n // that we have values that we can use to set max-font-size and max-vw as both\n // values derive from the next breakpoint\n @if $next-fluid-breakpoint-name {\n $next-fluid-breakpoint: map.get($breakpoints, $next-fluid-breakpoint-name);\n $max-font-size: map.get(\n map.get($fluid-sizes, $next-fluid-breakpoint-name),\n font-size\n );\n $max-vw: map.get($next-fluid-breakpoint, width);\n\n // prettier-ignore\n font-size: calc(#{$min-font-size} +\n #{strip-unit($max-font-size - $min-font-size)} *\n ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)})\n );\n } @else {\n // Otherwise, just default to setting the font size found from the type\n // style or the given fluid breakpoint in the type style\n font-size: $min-font-size;\n }\n}\n\n// TODO move following variable and `custom-property` mixin into shared file for\n// both `@carbon/type` and `@carbon/themes`\n\n/// @access private\n/// @group @carbon/type\n@mixin custom-properties($name, $value) {\n @each $property, $value in $value {\n #{$property}: var(\n --#{$custom-property-prefix}-#{$name}-#{$property},\n #{$value}\n );\n }\n}\n\n/// Helper mixin to include the styles for a given token in any selector in your\n/// project. Also includes an optional fluid option that will enable fluid\n/// styles for the token if they are defined. Fluid styles will cause the\n/// token's font-size to be computed based on the viewport size. As a result, use\n/// with caution in fixed contexts.\n/// @param {String} $name - The name of the token to get the styles for\n/// @param {Boolean} $fluid [false] - Specify whether to include fluid styles for the\n/// @param {Map} $breakpoints [$grid-breakpoints] - Provide a custom breakpoint map to use\n/// @access public\n/// @group @carbon/type\n@mixin type-style(\n $name,\n $fluid: false,\n $breakpoints: gridconfig.$grid-breakpoints\n) {\n @if not map.has-key($tokens, $name) {\n @error 'Unable to find a token with the name: `#{$name}`';\n }\n\n $token: map.get($tokens, $name);\n\n // If $fluid is set to true and the token has breakpoints defined for fluid\n // styles, delegate to the fluid-type helper for the given token\n @if $fluid == true and map.has-key($token, 'breakpoints') {\n @include fluid-type($token, $breakpoints);\n } @else {\n @include custom-properties($name, $token);\n }\n}\n"],sourceRoot:""}]),o.locals={main:"-esm-version__about__main___ygFSI",aboutPage:"-esm-version__about__aboutPage___sinxi",container:"-esm-version__about__container___Q7mqH",title:"-esm-version__about__title___LYoZH",aboutBody:"-esm-version__about__aboutBody___Pv2r4"};let l=o},5830:function(e,n,t){"use strict";t.d(n,{Q:()=>a});var a={}},9101:function(e,n,t){"use strict";t.r(n),t.d(n,{about:()=>S,startupApp:()=>D,importTranslations:()=>B});var a=t(2722),i=t(5830),s=t(5400),o=t.n(s),l=t(5721),p=t(2591),r=t.n(p),c=t(1740),u=t.n(c),d=t(8128),f=t.n(d),g=t(855),h=t.n(g),y=t(3051),m=t.n(y),b=t(3656),$=t.n(b),A=t(3946),v={};v.styleTagTransform=$(),v.setAttributes=h(),v.insert=f().bind(null,"head"),v.domAPI=u(),v.insertStyleElement=m(),r()(A.A,v);let w=A.A&&A.A.locals?A.A.locals:void 0;var x=t(4924),k=t(438);let z=function(){var e=(0,s.useMemo)(function(){var e;return(null!=(e=window.installedModules)?e:[]).filter(function(e){return!!e&&!!e[1]}).map(function(e){return{version:e[1].version,name:e[0].substring(e[0].indexOf("/")+1)}})},[]);return o().createElement(k.StructuredListWrapper,{ariaLabel:"Structured list"},o().createElement(k.StructuredListHead,null,o().createElement(k.StructuredListRow,{head:!0,tabIndex:0},o().createElement(k.StructuredListCell,{head:!0},"Module name"),o().createElement(k.StructuredListCell,{head:!0},"Version"))),o().createElement(k.StructuredListBody,null,e.map(function(e){var n;return o().createElement(k.StructuredListRow,{tabIndex:0},o().createElement(k.StructuredListCell,null,e.name),o().createElement(k.StructuredListCell,null,null!=(n=e.version)?n:"No version found"," "))})))};var _=t(8766);let C=function(){var e,n,t,i,s,l=(i=(t=(0,x.A)("ws/rest/v1/module?v=custom:(uuid,name,version)",a.openmrsFetch)).data,s=t.isLoading,{modules:null!=(n=null==i||null==(e=i.data)?void 0:e.results)?n:[],isLoading:s}),p=l.modules;l.isLoading;var r=p.find(function(e){return"kenyaemr"===e.uuid}),c=w.title,u=w.container,d=w.aboutBody,f=w.aboutPage,g=_.VERSION;return o().createElement("div",{className:w.main},o().createElement("div",{className:f},o().createElement("div",{className:u},o().createElement("div",{className:c},o().createElement("div",null,o().createElement("h3",null,"Government of Kenya"),o().createElement("h4",null,"Ministry of Health")),o().createElement("img",{src:"/openmrs/ms/uiframework/resource/kenyaemr/images/logos/moh.png",alt:"court_of_arms",width:"50",height:"50"})),o().createElement("div",{className:d},o().createElement("p",null,"KenyaEMR Version"),o().createElement("p",null,"v".concat(null==r?void 0:r.version)),o().createElement("p",null,"SPA Version"),o().createElement("p",null,"v".concat(g.version)),o().createElement("p",null,"Build date time"),o().createElement("p",null,(0,a.formatDatetime)(new Date(g.buildDate),{mode:"standard"}))))),o().createElement(z,null))};var M=window.getOpenmrsSpaBase(),E="@kenyaemr/esm-version-app",B=t(1437),S=(0,a.getSyncLifecycle)(function(){return o().createElement(l.BrowserRouter,{basename:M},o().createElement(C,null))},{featureName:"esm-version-app",moduleName:E});function D(){(0,a.defineConfigSchema)(E,i.Q)}},8766:function(e,n,t){"use strict";t.r(n),t.d(n,{VERSION:()=>a});var a={dirty:!1,raw:"v5.4.3-0-gbde73da",hash:"gbde73da",distance:0,tag:"v5.4.3",semver:{options:{loose:!1,includePrerelease:!1},loose:!1,raw:"v5.4.3",major:5,minor:4,patch:3,prerelease:[],build:[],version:"5.4.3"},suffix:"0-gbde73da",semverString:"5.4.3",version:"5.4.3",buildDate:"2026-02-02T07:55:57.637Z"}},1437:function(e,n,t){var a={"./en.json":["1066","127"],"./sw.json":["3987","40"],"./am.json":["2735","916"],"./fr.json":["8961","501"]};function i(e){if(!t.o(a,e))return Promise.resolve().then(function(){var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n});var n=a[e],i=n[0];return t.e(n[1]).then(function(){return t(i)})}i.keys=()=>Object.keys(a),i.id=1437,e.exports=i}}]);
package/dist/286.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"286.js","sources":["webpack://@kenyaemr/esm-version-app/./src/about/about.scss","webpack://@kenyaemr/esm-version-app/./src/config-schema.ts","webpack://@kenyaemr/esm-version-app/./src/about/about.scss?58a4","webpack://@kenyaemr/esm-version-app/./src/frontend-modules/frontend-modules.component.tsx","webpack://@kenyaemr/esm-version-app/./src/hooks/useFrontendModules.tsx","webpack://@kenyaemr/esm-version-app/./src/about/about.component.tsx","webpack://@kenyaemr/esm-version-app/./src/hooks/useModules.tsx","webpack://@kenyaemr/esm-version-app/./src/root.component.tsx","webpack://@kenyaemr/esm-version-app/./src/index.ts","webpack://@kenyaemr/esm-version-app/./src/release-version.js","webpack://@kenyaemr/esm-version-app//home/runner/work/kenyaemr-esm-3.x/kenyaemr-esm-3.x/packages/esm-version-app/translationslazynonrecursive/.json$/"],"names":["configSchema","installedModules","useMemo","window","filter","module","Boolean","map","version","name","substring","indexOf","StructuredListWrapper","ariaLabel","StructuredListHead","StructuredListRow","head","tabIndex","StructuredListCell","StructuredListBody","packageInfo","require","data","useSWRImmutable","isLoading","useModules","openmrsFetch","modules","results","kenyaEMR","find","uuid","title","styles","container","aboutBody","aboutPage","VERSION","div","className","h3","h4","img","src","alt","width","height","p","formatDatetime","Date","buildDate","mode","FrontendModule","spaRoot","moduleName","importTranslations","about","getSyncLifecycle","BrowserRouter","basename","About","featureName","startupApp","defineConfigSchema","Promise","Error","i","Object"],"mappings":"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"}