sos-portal-components-react 0.4.0 → 0.5.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.
- package/CHANGELOG.md +18 -1
- package/README.md +22 -0
- package/dist/PortalCurrentSubject.d.ts +29 -0
- package/dist/PortalCurrentSubject.d.ts.map +1 -0
- package/dist/PortalCurrentSubject.js +62 -0
- package/dist/PortalCurrentSubject.js.map +1 -0
- package/dist/PortalHeader.d.ts +10 -0
- package/dist/PortalHeader.d.ts.map +1 -0
- package/dist/PortalHeader.js +11 -0
- package/dist/PortalHeader.js.map +1 -0
- package/dist/PortalSettingsPanel.d.ts +8 -0
- package/dist/PortalSettingsPanel.d.ts.map +1 -0
- package/dist/PortalSettingsPanel.js +10 -0
- package/dist/PortalSettingsPanel.js.map +1 -0
- package/dist/care/AnimalCardArtifact.d.ts +42 -0
- package/dist/care/AnimalCardArtifact.d.ts.map +1 -0
- package/dist/care/AnimalCardArtifact.js +32 -0
- package/dist/care/AnimalCardArtifact.js.map +1 -0
- package/dist/care/BrowserRealtimeCallPanel.d.ts +39 -0
- package/dist/care/BrowserRealtimeCallPanel.d.ts.map +1 -0
- package/dist/care/BrowserRealtimeCallPanel.js +43 -0
- package/dist/care/BrowserRealtimeCallPanel.js.map +1 -0
- package/dist/care/CardPreview.d.ts +6 -0
- package/dist/care/CardPreview.d.ts.map +1 -0
- package/dist/care/CardPreview.js +6 -0
- package/dist/care/CardPreview.js.map +1 -0
- package/dist/care/CommunicationsWorkspace.d.ts +18 -0
- package/dist/care/CommunicationsWorkspace.d.ts.map +1 -0
- package/dist/care/CommunicationsWorkspace.js +13 -0
- package/dist/care/CommunicationsWorkspace.js.map +1 -0
- package/dist/care/EmergencyTaskHub.d.ts +27 -0
- package/dist/care/EmergencyTaskHub.d.ts.map +1 -0
- package/dist/care/EmergencyTaskHub.js +25 -0
- package/dist/care/EmergencyTaskHub.js.map +1 -0
- package/dist/care/LegalMarkdownDocument.d.ts +6 -0
- package/dist/care/LegalMarkdownDocument.d.ts.map +1 -0
- package/dist/care/LegalMarkdownDocument.js +57 -0
- package/dist/care/LegalMarkdownDocument.js.map +1 -0
- package/dist/care/NotificationComposer.d.ts +49 -0
- package/dist/care/NotificationComposer.d.ts.map +1 -0
- package/dist/care/NotificationComposer.js +83 -0
- package/dist/care/NotificationComposer.js.map +1 -0
- package/dist/care/ProtectedIndexEmergencyData.d.ts +32 -0
- package/dist/care/ProtectedIndexEmergencyData.d.ts.map +1 -0
- package/dist/care/ProtectedIndexEmergencyData.js +13 -0
- package/dist/care/ProtectedIndexEmergencyData.js.map +1 -0
- package/dist/care/SelectedSubjectWorkspace.d.ts +32 -0
- package/dist/care/SelectedSubjectWorkspace.d.ts.map +1 -0
- package/dist/care/SelectedSubjectWorkspace.js +32 -0
- package/dist/care/SelectedSubjectWorkspace.js.map +1 -0
- package/dist/care/SoschainWorkspace.d.ts +119 -0
- package/dist/care/SoschainWorkspace.d.ts.map +1 -0
- package/dist/care/SoschainWorkspace.js +61 -0
- package/dist/care/SoschainWorkspace.js.map +1 -0
- package/dist/care/SubjectCommunicationCenter.d.ts +45 -0
- package/dist/care/SubjectCommunicationCenter.d.ts.map +1 -0
- package/dist/care/SubjectCommunicationCenter.js +40 -0
- package/dist/care/SubjectCommunicationCenter.js.map +1 -0
- package/dist/care/SubjectDemographicsFields.d.ts +42 -0
- package/dist/care/SubjectDemographicsFields.d.ts.map +1 -0
- package/dist/care/SubjectDemographicsFields.js +71 -0
- package/dist/care/SubjectDemographicsFields.js.map +1 -0
- package/dist/care/SubjectSectionIndex.d.ts +22 -0
- package/dist/care/SubjectSectionIndex.d.ts.map +1 -0
- package/dist/care/SubjectSectionIndex.js +34 -0
- package/dist/care/SubjectSectionIndex.js.map +1 -0
- package/dist/care/SubjectWorkspace.d.ts +29 -0
- package/dist/care/SubjectWorkspace.d.ts.map +1 -0
- package/dist/care/SubjectWorkspace.js +59 -0
- package/dist/care/SubjectWorkspace.js.map +1 -0
- package/dist/care/care.css +215 -0
- package/dist/care/index.d.ts +16 -0
- package/dist/care/index.d.ts.map +1 -0
- package/dist/care/index.js +16 -0
- package/dist/care/index.js.map +1 -0
- package/dist/care/notification-bff-client.d.ts +44 -0
- package/dist/care/notification-bff-client.d.ts.map +1 -0
- package/dist/care/notification-bff-client.js +89 -0
- package/dist/care/notification-bff-client.js.map +1 -0
- package/dist/clinical/BrowserClinicalSpeechInput.d.ts +25 -0
- package/dist/clinical/BrowserClinicalSpeechInput.d.ts.map +1 -0
- package/dist/clinical/BrowserClinicalSpeechInput.js +32 -0
- package/dist/clinical/BrowserClinicalSpeechInput.js.map +1 -0
- package/dist/clinical/ClinicalActionButton.d.ts +9 -0
- package/dist/clinical/ClinicalActionButton.d.ts.map +1 -0
- package/dist/clinical/ClinicalActionButton.js +13 -0
- package/dist/clinical/ClinicalActionButton.js.map +1 -0
- package/dist/clinical/ClinicalArtifactEditor.d.ts +147 -0
- package/dist/clinical/ClinicalArtifactEditor.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactEditor.js +382 -0
- package/dist/clinical/ClinicalArtifactEditor.js.map +1 -0
- package/dist/clinical/ClinicalArtifactEditorV2.d.ts +77 -0
- package/dist/clinical/ClinicalArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactEditorV2.js +89 -0
- package/dist/clinical/ClinicalArtifactEditorV2.js.map +1 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts +83 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts.map +1 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.js +46 -0
- package/dist/clinical/ClinicalArtifactPropertiesV2.js.map +1 -0
- package/dist/clinical/ClinicalBundleDraftEditor.d.ts +99 -0
- package/dist/clinical/ClinicalBundleDraftEditor.d.ts.map +1 -0
- package/dist/clinical/ClinicalBundleDraftEditor.js +225 -0
- package/dist/clinical/ClinicalBundleDraftEditor.js.map +1 -0
- package/dist/clinical/ClinicalEditorLayer.d.ts +8 -0
- package/dist/clinical/ClinicalEditorLayer.d.ts.map +1 -0
- package/dist/clinical/ClinicalEditorLayer.js +12 -0
- package/dist/clinical/ClinicalEditorLayer.js.map +1 -0
- package/dist/clinical/ClinicalSectionSummary.d.ts +36 -0
- package/dist/clinical/ClinicalSectionSummary.d.ts.map +1 -0
- package/dist/clinical/ClinicalSectionSummary.js +24 -0
- package/dist/clinical/ClinicalSectionSummary.js.map +1 -0
- package/dist/clinical/ClinicalSpeechInput.d.ts +58 -0
- package/dist/clinical/ClinicalSpeechInput.d.ts.map +1 -0
- package/dist/clinical/ClinicalSpeechInput.js +84 -0
- package/dist/clinical/ClinicalSpeechInput.js.map +1 -0
- package/dist/clinical/ClinicalTimeline.d.ts +52 -0
- package/dist/clinical/ClinicalTimeline.d.ts.map +1 -0
- package/dist/clinical/ClinicalTimeline.js +48 -0
- package/dist/clinical/ClinicalTimeline.js.map +1 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.d.ts +15 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.js +62 -0
- package/dist/clinical/ImmunizationArtifactEditorV2.js.map +1 -0
- package/dist/clinical/IpsBundleSummary.d.ts +34 -0
- package/dist/clinical/IpsBundleSummary.d.ts.map +1 -0
- package/dist/clinical/IpsBundleSummary.js +75 -0
- package/dist/clinical/IpsBundleSummary.js.map +1 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts +11 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts.map +1 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.js +62 -0
- package/dist/clinical/SchemaClinicalArtifactEditorV2.js.map +1 -0
- package/dist/clinical/clinical.css +148 -0
- package/dist/clinical/index.d.ts +14 -0
- package/dist/clinical/index.d.ts.map +1 -0
- package/dist/clinical/index.js +14 -0
- package/dist/clinical/index.js.map +1 -0
- package/dist/identity/AnimalIdentityDetailsV2.d.ts +43 -0
- package/dist/identity/AnimalIdentityDetailsV2.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityDetailsV2.js +9 -0
- package/dist/identity/AnimalIdentityDetailsV2.js.map +1 -0
- package/dist/identity/AnimalIdentityOnboarding.d.ts +91 -0
- package/dist/identity/AnimalIdentityOnboarding.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityOnboarding.js +73 -0
- package/dist/identity/AnimalIdentityOnboarding.js.map +1 -0
- package/dist/identity/AnimalIdentityOnboardingV2.d.ts +56 -0
- package/dist/identity/AnimalIdentityOnboardingV2.d.ts.map +1 -0
- package/dist/identity/AnimalIdentityOnboardingV2.js +174 -0
- package/dist/identity/AnimalIdentityOnboardingV2.js.map +1 -0
- package/dist/identity/current-subject.css +11 -0
- package/dist/identity/identity.css +64 -0
- package/dist/identity/index.d.ts +9 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +10 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/preferences.d.ts +12 -0
- package/dist/preferences.d.ts.map +1 -0
- package/dist/preferences.js +57 -0
- package/dist/preferences.js.map +1 -0
- package/dist/styles.css +24 -0
- package/dist/usePortalUiPreferences.d.ts +9 -0
- package/dist/usePortalUiPreferences.d.ts.map +1 -0
- package/dist/usePortalUiPreferences.js +39 -0
- package/dist/usePortalUiPreferences.js.map +1 -0
- package/package.json +20 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 0.5.0 - 2026-11-15
|
|
4
|
+
|
|
5
|
+
- Pin the published Antifraud Common Components 1.3.0 and Antifraud Portal
|
|
6
|
+
Components 0.4.0 releases for the shared shell and controlled identity panels.
|
|
7
|
+
|
|
8
|
+
- Own shared clinical editors, document drafts, IPS summary/timeline, card and
|
|
9
|
+
subject workspaces, communications, emergency-task and notification presentation
|
|
10
|
+
using existing FHIR/SOS Data contracts and host-authorized callbacks.
|
|
11
|
+
- Compose neutral Antifraud identity/evidence entry, recipient activation and
|
|
12
|
+
access-request renderers. Own animal/controller forms and read-only details
|
|
13
|
+
without a UHC runtime dependency. Preserve pending evidence and responsibility.
|
|
14
|
+
- Compose the controlled Antifraud shell with SOS current-subject context and
|
|
15
|
+
browser UI preferences; include responsive styles and host-branded card fallback.
|
|
16
|
+
- Validate the published dependency cohort: strict types, 45 suites/178
|
|
17
|
+
component cases, build, three source/emitted/registry-lock independence checks,
|
|
18
|
+
and all 83 required consumer exports (46 runtime, 36 types and stylesheet).
|
|
19
|
+
Governed fixture corrections retain 17 affected cases. These are component
|
|
20
|
+
assertions, not new user journeys or Test Network/blockchain acceptance.
|
|
4
21
|
|
|
5
22
|
## 0.4.0 - 2026-11-14
|
|
6
23
|
|
package/README.md
CHANGED
|
@@ -63,6 +63,28 @@ boundary is deliberately chosen.
|
|
|
63
63
|
|
|
64
64
|
## Ownership boundaries
|
|
65
65
|
|
|
66
|
+
The root, `clinical`, `care` and `identity` exports compose shared clinical
|
|
67
|
+
authoring, IPS summaries, cards, communications, emergency tasks, notifications
|
|
68
|
+
and human/animal identity entry. FHIR utilities own clinical projections and
|
|
69
|
+
document builders; SOS Data owns operation and notification contracts. Neutral
|
|
70
|
+
identity/evidence, recipient activation and access-request renderers are owned
|
|
71
|
+
by Antifraud components. This package has no UHC or GDC dependency.
|
|
72
|
+
|
|
73
|
+
Import `sos-portal-components-react/styles.css` once at the application root.
|
|
74
|
+
Hosts supply branding, authorized subjects, capabilities, persistence callbacks
|
|
75
|
+
and speech/RTC providers. Selecting an evidence file or submitting an intent
|
|
76
|
+
does not upload, verify identity, grant access or confirm recipient acceptance.
|
|
77
|
+
The same renderers serve Demo and Test Network; the host selects their transport.
|
|
78
|
+
|
|
79
|
+
The shell composes controlled Antifraud renderers. SOS owns the explicit browser
|
|
80
|
+
theme/density preference adapter and current-subject context. Its storage namespace
|
|
81
|
+
holds UI preferences only; applications supply their own namespace. The relocated
|
|
82
|
+
DOM forms and shell are web components, not evidence of native Expo compatibility.
|
|
83
|
+
|
|
84
|
+
The controlled Antifraud renderers are provided by the published
|
|
85
|
+
`antifraud-common-components-react@1.3.0` and
|
|
86
|
+
`antifraud-portal-components-react@0.4.0` packages.
|
|
87
|
+
|
|
66
88
|
- This package owns reusable portal presentation and controlled user intents.
|
|
67
89
|
- Applications own branding, routes, environment selection, BFF calls and
|
|
68
90
|
server-resolved sector/role policy.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type PortalCurrentSubject = Readonly<{
|
|
3
|
+
id: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
photoUrl?: string;
|
|
6
|
+
secondaryLabel?: string;
|
|
7
|
+
}>;
|
|
8
|
+
export type PortalCurrentSubjectLabels = Readonly<{
|
|
9
|
+
current: string;
|
|
10
|
+
change: string;
|
|
11
|
+
}>;
|
|
12
|
+
export type PortalCurrentSubjectRegistration = Readonly<{
|
|
13
|
+
subject?: PortalCurrentSubject;
|
|
14
|
+
labels: PortalCurrentSubjectLabels;
|
|
15
|
+
canChange: boolean;
|
|
16
|
+
onChange?: () => void;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function PortalCurrentSubjectProvider({ children }: Readonly<{
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}>): import("react").JSX.Element;
|
|
21
|
+
export declare function usePortalCurrentSubjectRegistration(registration?: PortalCurrentSubjectRegistration): void;
|
|
22
|
+
export declare function PortalCurrentSubjectSlot(): import("react").JSX.Element | null;
|
|
23
|
+
export declare function PortalCurrentSubjectControl({ subject, labels, canChange, onChange, }: Readonly<{
|
|
24
|
+
subject?: PortalCurrentSubject;
|
|
25
|
+
labels: PortalCurrentSubjectLabels;
|
|
26
|
+
canChange: boolean;
|
|
27
|
+
onChange?: () => void;
|
|
28
|
+
}>): import("react").JSX.Element | null;
|
|
29
|
+
//# sourceMappingURL=PortalCurrentSubject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalCurrentSubject.d.ts","sourceRoot":"","sources":["../src/PortalCurrentSubject.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEvG,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAC,CAAA;AAEF,MAAM,MAAM,gCAAgC,GAAG,QAAQ,CAAC;IACtD,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,MAAM,EAAE,0BAA0B,CAAA;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAC,CAAA;AASF,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC,+BAI3F;AAED,wBAAgB,mCAAmC,CAAC,YAAY,CAAC,EAAE,gCAAgC,QAkBlG;AAED,wBAAgB,wBAAwB,uCAGvC;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE,QAAQ,CAAC;IACV,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,MAAM,EAAE,0BAA0B,CAAA;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB,CAAC,sCAyCD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
const PortalCurrentSubjectContext = createContext(undefined);
|
|
5
|
+
export function PortalCurrentSubjectProvider({ children }) {
|
|
6
|
+
const [registration, setRegistration] = useState();
|
|
7
|
+
const value = useMemo(() => ({ registration, setRegistration }), [registration]);
|
|
8
|
+
return _jsx(PortalCurrentSubjectContext.Provider, { value: value, children: children });
|
|
9
|
+
}
|
|
10
|
+
export function usePortalCurrentSubjectRegistration(registration) {
|
|
11
|
+
const context = useContext(PortalCurrentSubjectContext);
|
|
12
|
+
const setRegistration = context?.setRegistration;
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!setRegistration)
|
|
15
|
+
return;
|
|
16
|
+
setRegistration(registration);
|
|
17
|
+
return () => setRegistration(undefined);
|
|
18
|
+
}, [
|
|
19
|
+
setRegistration,
|
|
20
|
+
registration?.subject?.id,
|
|
21
|
+
registration?.subject?.displayName,
|
|
22
|
+
registration?.subject?.photoUrl,
|
|
23
|
+
registration?.subject?.secondaryLabel,
|
|
24
|
+
registration?.labels.current,
|
|
25
|
+
registration?.labels.change,
|
|
26
|
+
registration?.canChange,
|
|
27
|
+
registration?.onChange,
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
export function PortalCurrentSubjectSlot() {
|
|
31
|
+
const registration = useContext(PortalCurrentSubjectContext)?.registration;
|
|
32
|
+
return registration ? _jsx(PortalCurrentSubjectControl, { ...registration }) : null;
|
|
33
|
+
}
|
|
34
|
+
export function PortalCurrentSubjectControl({ subject, labels, canChange, onChange, }) {
|
|
35
|
+
const [open, setOpen] = useState(false);
|
|
36
|
+
const container = useRef(null);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const closeOutside = (event) => {
|
|
39
|
+
if (!container.current?.contains(event.target))
|
|
40
|
+
setOpen(false);
|
|
41
|
+
};
|
|
42
|
+
const closeEscape = (event) => {
|
|
43
|
+
if (event.key === 'Escape')
|
|
44
|
+
setOpen(false);
|
|
45
|
+
};
|
|
46
|
+
document.addEventListener('mousedown', closeOutside);
|
|
47
|
+
window.addEventListener('keydown', closeEscape);
|
|
48
|
+
return () => {
|
|
49
|
+
document.removeEventListener('mousedown', closeOutside);
|
|
50
|
+
window.removeEventListener('keydown', closeEscape);
|
|
51
|
+
};
|
|
52
|
+
}, []);
|
|
53
|
+
if (!subject)
|
|
54
|
+
return null;
|
|
55
|
+
return _jsxs("div", { className: "uhcp-current-subject", ref: container, children: [_jsxs("button", { type: "button", className: "uhcp-current-subject-trigger", "aria-label": `${labels.current}: ${subject.displayName}`, "aria-expanded": open, onClick: () => setOpen((value) => !value), children: [_jsx(SubjectAvatar, { subject: subject }), _jsx("span", { children: subject.displayName }), _jsx("span", { "aria-hidden": "true", children: "\u2304" })] }), open ? _jsxs("section", { className: "uhcp-current-subject-menu", "aria-label": labels.current, children: [_jsxs("div", { className: "uhcp-current-subject-summary", children: [_jsx(SubjectAvatar, { subject: subject }), _jsxs("span", { children: [_jsx("small", { children: labels.current }), _jsx("strong", { children: subject.displayName }), subject.secondaryLabel ? _jsx("span", { children: subject.secondaryLabel }) : null] })] }), canChange && onChange ? _jsx("button", { type: "button", onClick: () => { setOpen(false); onChange(); }, children: labels.change }) : null] }) : null] });
|
|
56
|
+
}
|
|
57
|
+
function SubjectAvatar({ subject }) {
|
|
58
|
+
if (subject.photoUrl)
|
|
59
|
+
return _jsx("img", { className: "uhcp-current-subject-avatar", src: subject.photoUrl, alt: "" });
|
|
60
|
+
return _jsx("span", { className: "uhcp-current-subject-avatar uhcp-current-subject-initial", "aria-hidden": "true", children: subject.displayName.trim().slice(0, 1).toLocaleUpperCase() || '•' });
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=PortalCurrentSubject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalCurrentSubject.js","sourceRoot":"","sources":["../src/PortalCurrentSubject.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AA0BvG,MAAM,2BAA2B,GAAG,aAAa,CAA+C,SAAS,CAAC,CAAA;AAE1G,MAAM,UAAU,4BAA4B,CAAC,EAAE,QAAQ,EAAqC;IAC1F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAoC,CAAA;IACpF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAChF,OAAO,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAwC,CAAA;AAC9G,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,YAA+C;IACjG,MAAM,OAAO,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAA;IACvD,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,CAAA;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe;YAAE,OAAM;QAC5B,eAAe,CAAC,YAAY,CAAC,CAAA;QAC7B,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC,EAAE;QACD,eAAe;QACf,YAAY,EAAE,OAAO,EAAE,EAAE;QACzB,YAAY,EAAE,OAAO,EAAE,WAAW;QAClC,YAAY,EAAE,OAAO,EAAE,QAAQ;QAC/B,YAAY,EAAE,OAAO,EAAE,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC,OAAO;QAC5B,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,YAAY,EAAE,SAAS;QACvB,YAAY,EAAE,QAAQ;KACvB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,YAAY,GAAG,UAAU,CAAC,2BAA2B,CAAC,EAAE,YAAY,CAAA;IAC1E,OAAO,YAAY,CAAC,CAAC,CAAC,KAAC,2BAA2B,OAAK,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,EAC1C,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,GAMR;IACA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAE9C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;YACzC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACxE,CAAC,CAAA;QACD,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC3C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC,CAAA;QACD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QACpD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAC/C,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;YACvD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACpD,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,OAAO,eAAK,SAAS,EAAC,sBAAsB,EAAC,GAAG,EAAE,SAAS,aACzD,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8BAA8B,gBAC5B,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,mBACxC,IAAI,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,aAEzC,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAG,EAClC,yBAAO,OAAO,CAAC,WAAW,GAAQ,EAClC,8BAAkB,MAAM,uBAAS,IAC1B,EACR,IAAI,CAAC,CAAC,CAAC,mBAAS,SAAS,EAAC,2BAA2B,gBAAa,MAAM,CAAC,OAAO,aAC/E,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAG,EAClC,2BAAM,0BAAQ,MAAM,CAAC,OAAO,GAAS,EAAA,2BAAS,OAAO,CAAC,WAAW,GAAU,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAO,OAAO,CAAC,cAAc,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAQ,IACrJ,EACL,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,YAAG,MAAM,CAAC,MAAM,GAAU,CAAC,CAAC,CAAC,IAAI,IACrH,CAAC,CAAC,CAAC,IAAI,IACb,CAAA;AACR,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,OAAO,EAA+C;IAC7E,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,cAAK,SAAS,EAAC,6BAA6B,EAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAC,EAAE,GAAE,CAAA;IACzG,OAAO,eAAM,SAAS,EAAC,0DAA0D,iBAAa,MAAM,YAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,GAAG,GAAQ,CAAA;AACjL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type PortalHeaderProps as ControlledPortalHeaderProps, type PortalUiTheme } from 'antifraud-common-components-react';
|
|
2
|
+
import { type PortalCurrentSubjectRegistration } from './PortalCurrentSubject.js';
|
|
3
|
+
export type PortalHeaderProps = Omit<ControlledPortalHeaderProps, 'theme' | 'density' | 'onThemeChange' | 'onDensityChange' | 'currentSubject' | 'onLanguageSelect'> & Readonly<{
|
|
4
|
+
storageNamespace?: string;
|
|
5
|
+
currentSubject?: PortalCurrentSubjectRegistration;
|
|
6
|
+
onThemeChange?: (theme: PortalUiTheme) => void;
|
|
7
|
+
}>;
|
|
8
|
+
/** SOS composition supplies the subject slot and explicit browser presentation adapter. */
|
|
9
|
+
export declare function PortalHeader({ storageNamespace, currentSubject, onThemeChange, ...props }: PortalHeaderProps): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=PortalHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalHeader.d.ts","sourceRoot":"","sources":["../src/PortalHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA0C,KAAK,iBAAiB,IAAI,2BAA2B,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACrK,OAAO,EAAyD,KAAK,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAGxI,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,QAAQ,CAAC;IAC9K,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,gCAAgC,CAAA;IACjD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;CAC/C,CAAC,CAAA;AAEF,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,EAAE,gBAA+B,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAK3H"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { PortalHeader as ControlledPortalHeader } from 'antifraud-common-components-react';
|
|
4
|
+
import { PortalCurrentSubjectControl, PortalCurrentSubjectSlot } from './PortalCurrentSubject.js';
|
|
5
|
+
import { usePortalUiPreferences } from './usePortalUiPreferences.js';
|
|
6
|
+
/** SOS composition supplies the subject slot and explicit browser presentation adapter. */
|
|
7
|
+
export function PortalHeader({ storageNamespace = 'sos-portal', currentSubject, onThemeChange, ...props }) {
|
|
8
|
+
const { theme, density, changeTheme, changeDensity } = usePortalUiPreferences(storageNamespace, onThemeChange);
|
|
9
|
+
return _jsx(ControlledPortalHeader, { ...props, theme: theme, density: density, onThemeChange: changeTheme, onDensityChange: changeDensity, onLanguageSelect: href => window.location.assign(href), currentSubject: currentSubject ? _jsx(PortalCurrentSubjectControl, { ...currentSubject }) : _jsx(PortalCurrentSubjectSlot, {}) });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PortalHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalHeader.js","sourceRoot":"","sources":["../src/PortalHeader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,YAAY,IAAI,sBAAsB,EAA6E,MAAM,mCAAmC,CAAA;AACrK,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAyC,MAAM,2BAA2B,CAAA;AACxI,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAQpE,2FAA2F;AAC3F,MAAM,UAAU,YAAY,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,KAAK,EAAqB;IAC1H,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;IAC9G,OAAO,KAAC,sBAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAClI,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EACtD,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,KAAC,2BAA2B,OAAK,cAAc,GAAG,CAAC,CAAC,CAAC,KAAC,wBAAwB,KAAE,GAAG,CAAA;AACxH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type PortalSettingsPanelProps as ControlledPortalSettingsPanelProps } from 'antifraud-common-components-react';
|
|
2
|
+
export type { PortalSettingsCopy, PortalSettingsLink } from 'antifraud-common-components-react';
|
|
3
|
+
export type PortalSettingsPanelProps = Omit<ControlledPortalSettingsPanelProps, 'theme' | 'density' | 'onThemeChange' | 'onDensityChange'> & Readonly<{
|
|
4
|
+
storageNamespace: string;
|
|
5
|
+
}>;
|
|
6
|
+
/** Same controlled renderer as the header; storage remains in the SOS browser adapter. */
|
|
7
|
+
export declare function PortalSettingsPanel({ storageNamespace, ...props }: PortalSettingsPanelProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=PortalSettingsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalSettingsPanel.d.ts","sourceRoot":"","sources":["../src/PortalSettingsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwD,KAAK,wBAAwB,IAAI,kCAAkC,EAAE,MAAM,mCAAmC,CAAA;AAG7K,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAC/F,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,kCAAkC,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,iBAAiB,CAAC,GAAG,QAAQ,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEnL,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,+BAG3F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { PortalSettingsPanel as ControlledPortalSettingsPanel } from 'antifraud-common-components-react';
|
|
4
|
+
import { usePortalUiPreferences } from './usePortalUiPreferences.js';
|
|
5
|
+
/** Same controlled renderer as the header; storage remains in the SOS browser adapter. */
|
|
6
|
+
export function PortalSettingsPanel({ storageNamespace, ...props }) {
|
|
7
|
+
const { theme, density, changeTheme, changeDensity } = usePortalUiPreferences(storageNamespace);
|
|
8
|
+
return _jsx(ControlledPortalSettingsPanel, { ...props, theme: theme, density: density, onThemeChange: changeTheme, onDensityChange: changeDensity });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=PortalSettingsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalSettingsPanel.js","sourceRoot":"","sources":["../src/PortalSettingsPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,mBAAmB,IAAI,6BAA6B,EAAuE,MAAM,mCAAmC,CAAA;AAC7K,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAKpE,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAA4B;IAC1F,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;IAC/F,OAAO,KAAC,6BAA6B,OAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,GAAG,CAAA;AAChJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export type AnimalCardArtifactProps = Readonly<{
|
|
3
|
+
brand: string;
|
|
4
|
+
title: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
subject: string;
|
|
7
|
+
species: string;
|
|
8
|
+
cardNumber: string;
|
|
9
|
+
cardDid: string;
|
|
10
|
+
qrImageUrl: string;
|
|
11
|
+
logoUrl?: string;
|
|
12
|
+
}>;
|
|
13
|
+
/**
|
|
14
|
+
* Printable presentation of an animal card. The host owns the canonical card
|
|
15
|
+
* identifiers and QR payload; this component neither issues nor verifies them.
|
|
16
|
+
*/
|
|
17
|
+
export declare function AnimalCardArtifact({ brand, title, provider, subject, species, cardNumber, cardDid, qrImageUrl, logoUrl, }: AnimalCardArtifactProps): import("react").JSX.Element;
|
|
18
|
+
export type SoschainSmartIdentityCardArtifactProps = Readonly<{
|
|
19
|
+
/** Human cards use the fixed public label `Personal`; animal cards use the supplied localized species label. */
|
|
20
|
+
subjectKind?: 'animal' | 'personal';
|
|
21
|
+
subjectLabel?: string;
|
|
22
|
+
cardDid: string;
|
|
23
|
+
/** Nine-digit public provider code printed for manual recovery when the DID QR cannot be read. */
|
|
24
|
+
providerCode?: string;
|
|
25
|
+
speciesId7?: string;
|
|
26
|
+
cardNumber21?: string;
|
|
27
|
+
/** Host-rendered QR whose exact payload is `cardDid`. */
|
|
28
|
+
didQr: ReactNode;
|
|
29
|
+
/** Host-rendered QR from a provider-issued, signed SHC-like identity credential. */
|
|
30
|
+
identityQr?: ReactNode;
|
|
31
|
+
logoUrl: string;
|
|
32
|
+
signedIdentityUnavailableLabel?: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Formats the canonical 21 digits for visual and telephone readback only. */
|
|
35
|
+
export declare function formatSoschainCardNumber21(value: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Two-sided physical identity artifact shared by SOSChain, PetChain and
|
|
38
|
+
* VetChain. The host owns both QR payloads. Face A is deliberately DID-only;
|
|
39
|
+
* face B never invents or signs a credential in presentation code.
|
|
40
|
+
*/
|
|
41
|
+
export declare function SoschainSmartIdentityCardArtifact({ subjectKind, subjectLabel, cardDid, providerCode, speciesId7, cardNumber21, didQr, identityQr, logoUrl, signedIdentityUnavailableLabel, }: SoschainSmartIdentityCardArtifactProps): import("react").JSX.Element;
|
|
42
|
+
//# sourceMappingURL=AnimalCardArtifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimalCardArtifact.d.ts","sourceRoot":"","sources":["../../src/care/AnimalCardArtifact.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAC,CAAA;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,uBAAuB,+BAsBzB;AAED,MAAM,MAAM,sCAAsC,GAAG,QAAQ,CAAC;IAC5D,gHAAgH;IAChH,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yDAAyD;IACzD,KAAK,EAAE,SAAS,CAAA;IAChB,oFAAoF;IACpF,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,8BAA8B,CAAC,EAAE,MAAM,CAAA;CACxC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,EAChD,WAAsB,EACtB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,KAAK,EACL,UAAU,EACV,OAAO,EACP,8BAA8D,GAC/D,EAAE,sCAAsC,+BAsCxC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Printable presentation of an animal card. The host owns the canonical card
|
|
4
|
+
* identifiers and QR payload; this component neither issues nor verifies them.
|
|
5
|
+
*/
|
|
6
|
+
export function AnimalCardArtifact({ brand, title, provider, subject, species, cardNumber, cardDid, qrImageUrl, logoUrl, }) {
|
|
7
|
+
return _jsxs("article", { className: "uhcp-animal-card", "aria-label": `${title}: ${subject}`, children: [_jsxs("header", { className: "uhcp-animal-card-header", children: [_jsxs("div", { className: "uhcp-animal-card-brand", children: [logoUrl ? _jsx("img", { src: logoUrl, alt: "" }) : _jsx("span", { "aria-hidden": "true", children: brand.trim().slice(0, 1) }), _jsxs("div", { children: [_jsx("strong", { children: brand }), _jsx("small", { children: title })] })] }), _jsx("span", { className: "uhcp-animal-card-chip", "aria-hidden": "true" })] }), _jsxs("div", { className: "uhcp-animal-card-body", children: [_jsxs("section", { children: [_jsx("span", { children: species }), _jsx("h3", { children: subject }), _jsxs("dl", { children: [_jsxs("div", { children: [_jsx("dt", { children: "Card" }), _jsx("dd", { children: cardNumber })] }), _jsxs("div", { children: [_jsx("dt", { children: "Provider" }), _jsx("dd", { children: provider })] })] })] }), _jsx("img", { className: "uhcp-animal-card-qr", src: qrImageUrl, alt: `${title} QR` })] }), _jsx("footer", { children: _jsx("code", { children: cardDid }) })] });
|
|
8
|
+
}
|
|
9
|
+
/** Formats the canonical 21 digits for visual and telephone readback only. */
|
|
10
|
+
export function formatSoschainCardNumber21(value) {
|
|
11
|
+
const digits = String(value || '').replace(/[ -]/g, '');
|
|
12
|
+
if (!/^\d{21}$/.test(digits))
|
|
13
|
+
throw new TypeError('cardNumber21 must contain exactly 21 digits.');
|
|
14
|
+
return `${digits.slice(0, 4)} ${digits.slice(4, 8)} ${digits.slice(8, 12)} ${digits.slice(12, 16)} ${digits.slice(16)}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Two-sided physical identity artifact shared by SOSChain, PetChain and
|
|
18
|
+
* VetChain. The host owns both QR payloads. Face A is deliberately DID-only;
|
|
19
|
+
* face B never invents or signs a credential in presentation code.
|
|
20
|
+
*/
|
|
21
|
+
export function SoschainSmartIdentityCardArtifact({ subjectKind = 'animal', subjectLabel, cardDid, providerCode, speciesId7, cardNumber21, didQr, identityQr, logoUrl, signedIdentityUnavailableLabel = 'Signed identity unavailable', }) {
|
|
22
|
+
const publicLabel = subjectKind === 'personal' ? 'Personal' : String(subjectLabel || 'Animal').trim();
|
|
23
|
+
const formattedCardNumber = cardNumber21 ? formatSoschainCardNumber21(cardNumber21) : undefined;
|
|
24
|
+
const normalizedProviderCode = providerCode ? String(providerCode).replace(/[ -]/g, '') : undefined;
|
|
25
|
+
if (normalizedProviderCode && !/^\d{9}$/.test(normalizedProviderCode)) {
|
|
26
|
+
throw new TypeError('providerCode must contain exactly 9 digits.');
|
|
27
|
+
}
|
|
28
|
+
return _jsxs("div", { className: "uhcp-smart-id-card-set", "aria-label": `SOSCHAIN Smart Identity Card: ${publicLabel}`, children: [_jsxs("article", { className: "uhcp-smart-id-card uhcp-smart-id-card-front", "data-card-face": "front", children: [_jsx("header", { className: "uhcp-smart-id-brand", children: _jsx("img", { src: logoUrl, alt: "SOSCHAIN" }) }), _jsxs("div", { className: "uhcp-smart-id-front-body", children: [_jsx("div", { className: "uhcp-smart-id-front-qr", "aria-label": "DID QR code", children: didQr }), _jsx("p", { className: "uhcp-smart-id-subject-label", children: publicLabel })] }), normalizedProviderCode ? _jsxs("footer", { children: [_jsx("span", { children: "Provider" }), _jsx("p", { className: "uhcp-smart-id-provider-code", children: normalizedProviderCode })] }) : null] }), _jsxs("article", { className: "uhcp-smart-id-card uhcp-smart-id-card-back", "data-card-face": "back", children: [_jsx("header", { children: _jsx("strong", { children: "SOSCHAIN SMART IDENTITY CARD" }) }), _jsxs("div", { className: "uhcp-smart-id-back-body", children: [_jsxs("dl", { children: [speciesId7 ? _jsxs("div", { children: [_jsx("dt", { children: "Species" }), _jsx("dd", { children: speciesId7 })] }) : null, formattedCardNumber ? _jsxs("div", { children: [_jsx("dt", { children: "Card" }), _jsx("dd", { children: formattedCardNumber })] }) : null] }), identityQr
|
|
29
|
+
? _jsx("div", { className: "uhcp-smart-id-identity-qr", "aria-label": "Signed identity QR code", children: identityQr })
|
|
30
|
+
: _jsx("p", { className: "uhcp-smart-id-unavailable", role: "status", children: signedIdentityUnavailableLabel })] })] })] });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=AnimalCardArtifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimalCardArtifact.js","sourceRoot":"","sources":["../../src/care/AnimalCardArtifact.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RealtimeCallMedia } from '../LiveKitRealtimeCallClient.js';
|
|
2
|
+
/** Minimal host-injected session contract; no signaling or persistence implementation. */
|
|
3
|
+
export type BrowserRealtimeCallSession = Readonly<{
|
|
4
|
+
callId: string;
|
|
5
|
+
localStream: MediaStream;
|
|
6
|
+
remoteStream: MediaStream;
|
|
7
|
+
end(): Promise<void>;
|
|
8
|
+
}>;
|
|
9
|
+
export type BrowserRealtimeCallPanelClient<Conversation> = Readonly<{
|
|
10
|
+
start(input: Readonly<{
|
|
11
|
+
conversation: Conversation;
|
|
12
|
+
media: readonly RealtimeCallMedia[];
|
|
13
|
+
}>): Promise<BrowserRealtimeCallSession>;
|
|
14
|
+
accept(input: Readonly<{
|
|
15
|
+
conversation: Conversation;
|
|
16
|
+
callId: string;
|
|
17
|
+
media: readonly RealtimeCallMedia[];
|
|
18
|
+
}>): Promise<BrowserRealtimeCallSession>;
|
|
19
|
+
}>;
|
|
20
|
+
export type BrowserRealtimeCallPanelLabels = Readonly<{
|
|
21
|
+
title: string;
|
|
22
|
+
start: string;
|
|
23
|
+
accept: string;
|
|
24
|
+
end: string;
|
|
25
|
+
connecting?: string;
|
|
26
|
+
connected?: string;
|
|
27
|
+
ended?: string;
|
|
28
|
+
failed?: string;
|
|
29
|
+
}>;
|
|
30
|
+
/** Product-neutral, two-sided browser call screen; authority remains in the supplied BFF client. */
|
|
31
|
+
export declare function BrowserRealtimeCallPanel<Conversation>({ conversation, client, incomingCallId, labels, media, onFailure, }: Readonly<{
|
|
32
|
+
conversation: Conversation;
|
|
33
|
+
client: BrowserRealtimeCallPanelClient<Conversation>;
|
|
34
|
+
incomingCallId?: string;
|
|
35
|
+
labels: BrowserRealtimeCallPanelLabels;
|
|
36
|
+
media?: readonly RealtimeCallMedia[];
|
|
37
|
+
onFailure?: (error: unknown) => void;
|
|
38
|
+
}>): import("react").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=BrowserRealtimeCallPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserRealtimeCallPanel.d.ts","sourceRoot":"","sources":["../../src/care/BrowserRealtimeCallPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,0FAA0F;AAC1F,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC;IAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAAA;AAEhJ,MAAM,MAAM,8BAA8B,CAAC,YAAY,IAAI,QAAQ,CAAC;IAClE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAChI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;CAClJ,CAAC,CAAA;AAEF,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC,CAAA;AAEF,oGAAoG;AACpG,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,EACrD,YAAY,EACZ,MAAM,EACN,cAAc,EACd,MAAM,EACN,KAA0B,EAC1B,SAAS,GACV,EAAE,QAAQ,CAAC;IACV,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,8BAA8B,CAAC,YAAY,CAAC,CAAA;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,8BAA8B,CAAA;IACtC,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACrC,CAAC,+BAiDD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
/** Product-neutral, two-sided browser call screen; authority remains in the supplied BFF client. */
|
|
5
|
+
export function BrowserRealtimeCallPanel({ conversation, client, incomingCallId, labels, media = ['audio', 'video'], onFailure, }) {
|
|
6
|
+
const [session, setSession] = useState();
|
|
7
|
+
const [status, setStatus] = useState('idle');
|
|
8
|
+
const localVideo = useRef(null);
|
|
9
|
+
const remoteVideo = useRef(null);
|
|
10
|
+
const activeSession = useRef(undefined);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
activeSession.current = session;
|
|
13
|
+
if (localVideo.current)
|
|
14
|
+
localVideo.current.srcObject = session?.localStream ?? null;
|
|
15
|
+
if (remoteVideo.current)
|
|
16
|
+
remoteVideo.current.srcObject = session?.remoteStream ?? null;
|
|
17
|
+
}, [session]);
|
|
18
|
+
useEffect(() => () => {
|
|
19
|
+
if (activeSession.current)
|
|
20
|
+
void activeSession.current.end().catch(() => undefined);
|
|
21
|
+
}, []);
|
|
22
|
+
async function open() {
|
|
23
|
+
setStatus('connecting');
|
|
24
|
+
try {
|
|
25
|
+
setSession(incomingCallId
|
|
26
|
+
? await client.accept({ conversation, callId: incomingCallId, media })
|
|
27
|
+
: await client.start({ conversation, media }));
|
|
28
|
+
setStatus('connected');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
onFailure?.(error);
|
|
32
|
+
setStatus('failed');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function end() {
|
|
36
|
+
const active = session;
|
|
37
|
+
setSession(undefined);
|
|
38
|
+
setStatus('ended');
|
|
39
|
+
await active?.end();
|
|
40
|
+
}
|
|
41
|
+
return _jsxs("section", { className: "uhcp-realtime-call-panel", "aria-label": labels.title, children: [_jsx("h3", { children: labels.title }), !session ? _jsx("button", { type: "button", onClick: () => void open(), disabled: status === 'connecting', children: incomingCallId ? labels.accept : labels.start }) : null, _jsx("p", { role: "status", children: labels[status] || status }), session ? _jsxs("div", { className: "uhcp-realtime-call-media", children: [_jsx("video", { ref: localVideo, "data-testid": "realtime-call-local-video", autoPlay: true, muted: true, playsInline: true }), _jsx("video", { ref: remoteVideo, "data-testid": "realtime-call-remote-video", autoPlay: true, playsInline: true }), _jsx("button", { type: "button", onClick: () => void end(), children: labels.end })] }) : null] });
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=BrowserRealtimeCallPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserRealtimeCallPanel.js","sourceRoot":"","sources":["../../src/care/BrowserRealtimeCallPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/** Keeps the canonical physical-card aspect ratio inside a responsive preview shell. */
|
|
3
|
+
export declare function CardPreview({ children }: Readonly<{
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
}>): import("react").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=CardPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardPreview.d.ts","sourceRoot":"","sources":["../../src/care/CardPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC,+BAI1E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** Keeps the canonical physical-card aspect ratio inside a responsive preview shell. */
|
|
3
|
+
export function CardPreview({ children }) {
|
|
4
|
+
return _jsx("div", { className: "uhc-card-preview-shell", "data-testid": "card-preview", children: _jsx("div", { className: "uhc-card-preview", children: children }) });
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=CardPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardPreview.js","sourceRoot":"","sources":["../../src/care/CardPreview.tsx"],"names":[],"mappings":";AAEA,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAqC;IACzE,OAAO,cAAK,SAAS,EAAC,wBAAwB,iBAAa,cAAc,YACvE,cAAK,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAO,GAC9C,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type CommunicationsWorkspaceTopic = Readonly<{
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
content?: ReactNode;
|
|
7
|
+
}>;
|
|
8
|
+
/** Shared personal-portal navigation; hosts provide channel and topic data through their own BFF adapters. */
|
|
9
|
+
export declare function CommunicationsWorkspace(input: Readonly<{
|
|
10
|
+
copy: Readonly<{
|
|
11
|
+
communicationsLabel: string;
|
|
12
|
+
channels: string;
|
|
13
|
+
infoAndAlerts: string;
|
|
14
|
+
}>;
|
|
15
|
+
channels: ReactNode;
|
|
16
|
+
alertTopics: readonly CommunicationsWorkspaceTopic[];
|
|
17
|
+
}>): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=CommunicationsWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommunicationsWorkspace.d.ts","sourceRoot":"","sources":["../../src/care/CommunicationsWorkspace.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEvD,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB,CAAC,CAAA;AAEF,8GAA8G;AAC9G,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtD,IAAI,EAAE,QAAQ,CAAC;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,SAAS,4BAA4B,EAAE,CAAA;CACrD,CAAC,+BAmBD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useState } from 'react';
|
|
4
|
+
/** Shared personal-portal navigation; hosts provide channel and topic data through their own BFF adapters. */
|
|
5
|
+
export function CommunicationsWorkspace(input) {
|
|
6
|
+
const id = useId();
|
|
7
|
+
const [section, setSection] = useState('channels');
|
|
8
|
+
const firstEnabledTopic = input.alertTopics.find((topic) => !topic.disabled);
|
|
9
|
+
const [topicId, setTopicId] = useState(firstEnabledTopic?.id ?? '');
|
|
10
|
+
const activeTopic = input.alertTopics.find((topic) => topic.id === topicId && !topic.disabled);
|
|
11
|
+
return _jsxs("section", { className: "uhcp-communications-workspace", children: [_jsxs("div", { role: "tablist", "aria-label": input.copy.communicationsLabel, className: "uhcp-communications-tabs", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": section === 'channels', "aria-controls": `${id}-channels`, onClick: () => setSection('channels'), children: input.copy.channels }), _jsx("button", { type: "button", role: "tab", "aria-selected": section === 'alerts', "aria-controls": `${id}-alerts`, onClick: () => setSection('alerts'), children: input.copy.infoAndAlerts })] }), section === 'channels' ? _jsx("div", { id: `${id}-channels`, role: "tabpanel", children: input.channels }) : _jsxs("div", { id: `${id}-alerts`, role: "tabpanel", children: [_jsx("div", { role: "tablist", "aria-label": input.copy.infoAndAlerts, className: "uhcp-communications-topic-tabs", children: input.alertTopics.map((topic) => _jsx("button", { type: "button", role: "tab", disabled: topic.disabled, "aria-selected": activeTopic?.id === topic.id, onClick: () => setTopicId(topic.id), children: topic.label }, topic.id)) }), activeTopic?.content ? _jsx("div", { role: "tabpanel", children: activeTopic.content }) : null] })] });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=CommunicationsWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommunicationsWorkspace.js","sourceRoot":"","sources":["../../src/care/CommunicationsWorkspace.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AASvD,8GAA8G;AAC9G,MAAM,UAAU,uBAAuB,CAAC,KAItC;IACA,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,UAAU,CAAC,CAAA;IACzE,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE9F,OAAO,mBAAS,SAAS,EAAC,+BAA+B,aACvD,eAAK,IAAI,EAAC,SAAS,gBAAa,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAC,0BAA0B,aAClG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,mBAAgB,OAAO,KAAK,UAAU,mBAAiB,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,YAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAU,EAC9K,iBAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,mBAAgB,OAAO,KAAK,QAAQ,mBAAiB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAG,KAAK,CAAC,IAAI,CAAC,aAAa,GAAU,IACzK,EACL,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,cAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAC,UAAU,YAAE,KAAK,CAAC,QAAQ,GAAO,CAAC,CAAC,CAAC,eAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAC,UAAU,aACpI,cAAK,IAAI,EAAC,SAAS,gBAAa,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAC,gCAAgC,YACjG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAuB,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,mBAAiB,WAAW,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,YAAG,KAAK,CAAC,KAAK,IAA3J,KAAK,CAAC,EAAE,CAA6J,CAAC,GACjN,EACL,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,cAAK,IAAI,EAAC,UAAU,YAAE,WAAW,CAAC,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,IAC3E,IACE,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type EmergencyTaskIcon = 'contact' | 'journey' | 'health' | 'scan';
|
|
2
|
+
export type EmergencyTaskItem = Readonly<{
|
|
3
|
+
id: string;
|
|
4
|
+
icon: EmergencyTaskIcon;
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
actionLabel: string;
|
|
8
|
+
href?: string;
|
|
9
|
+
status?: string;
|
|
10
|
+
}>;
|
|
11
|
+
export type EmergencyTaskHubCopy = Readonly<{
|
|
12
|
+
title: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
unavailable: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Brand-neutral, task-first entry to the three SOSChain emergency workflows.
|
|
18
|
+
* Hosts resolve every href and status from server-authorized capabilities.
|
|
19
|
+
* Rendering an action never grants subject, clinical or communication access.
|
|
20
|
+
*/
|
|
21
|
+
export declare function EmergencyTaskHub({ copy, tasks, layout, headingLevel }: Readonly<{
|
|
22
|
+
copy: EmergencyTaskHubCopy;
|
|
23
|
+
tasks: readonly EmergencyTaskItem[];
|
|
24
|
+
layout?: 'list' | 'grid';
|
|
25
|
+
headingLevel?: 1 | 2;
|
|
26
|
+
}>): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=EmergencyTaskHub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmergencyTaskHub.d.ts","sourceRoot":"","sources":["../../src/care/EmergencyTaskHub.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEzE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,iBAAiB,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAe,EAAE,YAAgB,EAAE,EAAE,QAAQ,CAAC;IAC5F,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;CACrB,CAAC,+BAqBD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Brand-neutral, task-first entry to the three SOSChain emergency workflows.
|
|
4
|
+
* Hosts resolve every href and status from server-authorized capabilities.
|
|
5
|
+
* Rendering an action never grants subject, clinical or communication access.
|
|
6
|
+
*/
|
|
7
|
+
export function EmergencyTaskHub({ copy, tasks, layout = 'list', headingLevel = 2 }) {
|
|
8
|
+
const Heading = headingLevel === 1 ? 'h1' : 'h2';
|
|
9
|
+
return _jsxs("section", { className: `uhcp-emergency-task-hub${layout === 'grid' ? ' uhcp-emergency-task-hub-grid' : ''}`, "aria-labelledby": "emergency-task-hub-title", children: [_jsxs("header", { children: [_jsx(Heading, { id: "emergency-task-hub-title", children: copy.title }), copy.description ? _jsx("p", { children: copy.description }) : null] }), _jsx("div", { className: "uhcp-emergency-task-list", children: tasks.map((task) => _jsxs("article", { "data-emergency-task": task.id, children: [_jsx("span", { className: `uhcp-emergency-task-icon uhcp-emergency-task-icon-${task.icon}`, "aria-hidden": "true", children: _jsx(TaskIcon, { icon: task.icon }) }), _jsxs("div", { className: "uhcp-emergency-task-copy", children: [_jsx("h3", { children: task.title }), _jsx("p", { children: task.description }), task.status ? _jsx("small", { children: task.status }) : null] }), task.href
|
|
10
|
+
? _jsxs("a", { href: task.href, children: [task.actionLabel, _jsx(ArrowIcon, {})] })
|
|
11
|
+
: _jsx("span", { className: "uhcp-emergency-task-unavailable", children: copy.unavailable })] }, task.id)) })] });
|
|
12
|
+
}
|
|
13
|
+
function TaskIcon({ icon }) {
|
|
14
|
+
if (icon === 'contact')
|
|
15
|
+
return _jsx("svg", { viewBox: "0 0 24 24", children: _jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8-1 2 2 3-4" }) });
|
|
16
|
+
if (icon === 'journey')
|
|
17
|
+
return _jsxs("svg", { viewBox: "0 0 24 24", children: [_jsx("circle", { cx: "6", cy: "18", r: "2" }), _jsx("circle", { cx: "18", cy: "6", r: "2" }), _jsx("path", { d: "M8 18h3a3 3 0 0 0 3-3v-6a3 3 0 0 1 3-3" })] });
|
|
18
|
+
if (icon === 'scan')
|
|
19
|
+
return _jsx("svg", { viewBox: "0 0 24 24", children: _jsx("path", { d: "M8 3H5a2 2 0 0 0-2 2v3m13-5h3a2 2 0 0 1 2 2v3M8 21H5a2 2 0 0 1-2-2v-3m13 5h3a2 2 0 0 0 2-2v-3M7 12h10" }) });
|
|
20
|
+
return _jsx("svg", { viewBox: "0 0 24 24", children: _jsx("path", { d: "M9 3h6v3h3v15H6V6h3V3Zm0 8h6m-6 4h6" }) });
|
|
21
|
+
}
|
|
22
|
+
function ArrowIcon() {
|
|
23
|
+
return _jsx("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: _jsx("path", { d: "m9 5 7 7-7 7" }) });
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=EmergencyTaskHub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmergencyTaskHub.js","sourceRoot":"","sources":["../../src/care/EmergencyTaskHub.tsx"],"names":[],"mappings":";AAkBA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,GAAG,CAAC,EAK/E;IACA,MAAM,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,OAAO,mBAAS,SAAS,EAAE,0BAA0B,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,qBAAkB,0BAA0B,aACzJ,6BACE,KAAC,OAAO,IAAC,EAAE,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAW,EAC5D,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAI,IAAI,CAAC,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IAC7C,EACT,cAAK,SAAS,EAAC,0BAA0B,YACtC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0CAA8B,IAAI,CAAC,EAAE,aACxD,eAAM,SAAS,EAAE,qDAAqD,IAAI,CAAC,IAAI,EAAE,iBAAc,MAAM,YAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,GAAO,EACzI,eAAK,SAAS,EAAC,0BAA0B,aACvC,uBAAK,IAAI,CAAC,KAAK,GAAM,EACrB,sBAAI,IAAI,CAAC,WAAW,GAAK,EACxB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,0BAAQ,IAAI,CAAC,MAAM,GAAS,CAAC,CAAC,CAAC,IAAI,IAC9C,EACL,IAAI,CAAC,IAAI;4BACR,CAAC,CAAC,aAAG,IAAI,EAAE,IAAI,CAAC,IAAI,aAAG,IAAI,CAAC,WAAW,EAAC,KAAC,SAAS,KAAE,IAAI;4BACxD,CAAC,CAAC,eAAM,SAAS,EAAC,iCAAiC,YAAE,IAAI,CAAC,WAAW,GAAQ,KAThB,IAAI,CAAC,EAAE,CAU9D,CAAC,GACP,IACE,CAAA;AACZ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAyC;IAC/D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,cAAK,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,yFAAyF,GAAE,GAAM,CAAA;IACjK,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,eAAK,OAAO,EAAC,WAAW,aAAC,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAE,EAAA,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,GAAE,EAAA,eAAM,CAAC,EAAC,wCAAwC,GAAE,IAAM,CAAA;IAC5K,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,cAAK,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,uGAAuG,GAAE,GAAM,CAAA;IAC5K,OAAO,cAAK,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,qCAAqC,GAAE,GAAM,CAAA;AACvF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,cAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,YAAC,eAAM,CAAC,EAAC,cAAc,GAAE,GAAM,CAAA;AACnF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type JSX } from 'react';
|
|
2
|
+
/** Renders the deliberately small Markdown subset used by versioned legal notices. */
|
|
3
|
+
export declare function LegalMarkdownDocument({ source }: Readonly<{
|
|
4
|
+
source: string;
|
|
5
|
+
}>): JSX.Element;
|
|
6
|
+
//# sourceMappingURL=LegalMarkdownDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegalMarkdownDocument.d.ts","sourceRoot":"","sources":["../../src/care/LegalMarkdownDocument.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAkB,MAAM,OAAO,CAAA;AAa1D,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,eAmC7E"}
|