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.
Files changed (168) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/README.md +22 -0
  3. package/dist/PortalCurrentSubject.d.ts +29 -0
  4. package/dist/PortalCurrentSubject.d.ts.map +1 -0
  5. package/dist/PortalCurrentSubject.js +62 -0
  6. package/dist/PortalCurrentSubject.js.map +1 -0
  7. package/dist/PortalHeader.d.ts +10 -0
  8. package/dist/PortalHeader.d.ts.map +1 -0
  9. package/dist/PortalHeader.js +11 -0
  10. package/dist/PortalHeader.js.map +1 -0
  11. package/dist/PortalSettingsPanel.d.ts +8 -0
  12. package/dist/PortalSettingsPanel.d.ts.map +1 -0
  13. package/dist/PortalSettingsPanel.js +10 -0
  14. package/dist/PortalSettingsPanel.js.map +1 -0
  15. package/dist/care/AnimalCardArtifact.d.ts +42 -0
  16. package/dist/care/AnimalCardArtifact.d.ts.map +1 -0
  17. package/dist/care/AnimalCardArtifact.js +32 -0
  18. package/dist/care/AnimalCardArtifact.js.map +1 -0
  19. package/dist/care/BrowserRealtimeCallPanel.d.ts +39 -0
  20. package/dist/care/BrowserRealtimeCallPanel.d.ts.map +1 -0
  21. package/dist/care/BrowserRealtimeCallPanel.js +43 -0
  22. package/dist/care/BrowserRealtimeCallPanel.js.map +1 -0
  23. package/dist/care/CardPreview.d.ts +6 -0
  24. package/dist/care/CardPreview.d.ts.map +1 -0
  25. package/dist/care/CardPreview.js +6 -0
  26. package/dist/care/CardPreview.js.map +1 -0
  27. package/dist/care/CommunicationsWorkspace.d.ts +18 -0
  28. package/dist/care/CommunicationsWorkspace.d.ts.map +1 -0
  29. package/dist/care/CommunicationsWorkspace.js +13 -0
  30. package/dist/care/CommunicationsWorkspace.js.map +1 -0
  31. package/dist/care/EmergencyTaskHub.d.ts +27 -0
  32. package/dist/care/EmergencyTaskHub.d.ts.map +1 -0
  33. package/dist/care/EmergencyTaskHub.js +25 -0
  34. package/dist/care/EmergencyTaskHub.js.map +1 -0
  35. package/dist/care/LegalMarkdownDocument.d.ts +6 -0
  36. package/dist/care/LegalMarkdownDocument.d.ts.map +1 -0
  37. package/dist/care/LegalMarkdownDocument.js +57 -0
  38. package/dist/care/LegalMarkdownDocument.js.map +1 -0
  39. package/dist/care/NotificationComposer.d.ts +49 -0
  40. package/dist/care/NotificationComposer.d.ts.map +1 -0
  41. package/dist/care/NotificationComposer.js +83 -0
  42. package/dist/care/NotificationComposer.js.map +1 -0
  43. package/dist/care/ProtectedIndexEmergencyData.d.ts +32 -0
  44. package/dist/care/ProtectedIndexEmergencyData.d.ts.map +1 -0
  45. package/dist/care/ProtectedIndexEmergencyData.js +13 -0
  46. package/dist/care/ProtectedIndexEmergencyData.js.map +1 -0
  47. package/dist/care/SelectedSubjectWorkspace.d.ts +32 -0
  48. package/dist/care/SelectedSubjectWorkspace.d.ts.map +1 -0
  49. package/dist/care/SelectedSubjectWorkspace.js +32 -0
  50. package/dist/care/SelectedSubjectWorkspace.js.map +1 -0
  51. package/dist/care/SoschainWorkspace.d.ts +119 -0
  52. package/dist/care/SoschainWorkspace.d.ts.map +1 -0
  53. package/dist/care/SoschainWorkspace.js +61 -0
  54. package/dist/care/SoschainWorkspace.js.map +1 -0
  55. package/dist/care/SubjectCommunicationCenter.d.ts +45 -0
  56. package/dist/care/SubjectCommunicationCenter.d.ts.map +1 -0
  57. package/dist/care/SubjectCommunicationCenter.js +40 -0
  58. package/dist/care/SubjectCommunicationCenter.js.map +1 -0
  59. package/dist/care/SubjectDemographicsFields.d.ts +42 -0
  60. package/dist/care/SubjectDemographicsFields.d.ts.map +1 -0
  61. package/dist/care/SubjectDemographicsFields.js +71 -0
  62. package/dist/care/SubjectDemographicsFields.js.map +1 -0
  63. package/dist/care/SubjectSectionIndex.d.ts +22 -0
  64. package/dist/care/SubjectSectionIndex.d.ts.map +1 -0
  65. package/dist/care/SubjectSectionIndex.js +34 -0
  66. package/dist/care/SubjectSectionIndex.js.map +1 -0
  67. package/dist/care/SubjectWorkspace.d.ts +29 -0
  68. package/dist/care/SubjectWorkspace.d.ts.map +1 -0
  69. package/dist/care/SubjectWorkspace.js +59 -0
  70. package/dist/care/SubjectWorkspace.js.map +1 -0
  71. package/dist/care/care.css +215 -0
  72. package/dist/care/index.d.ts +16 -0
  73. package/dist/care/index.d.ts.map +1 -0
  74. package/dist/care/index.js +16 -0
  75. package/dist/care/index.js.map +1 -0
  76. package/dist/care/notification-bff-client.d.ts +44 -0
  77. package/dist/care/notification-bff-client.d.ts.map +1 -0
  78. package/dist/care/notification-bff-client.js +89 -0
  79. package/dist/care/notification-bff-client.js.map +1 -0
  80. package/dist/clinical/BrowserClinicalSpeechInput.d.ts +25 -0
  81. package/dist/clinical/BrowserClinicalSpeechInput.d.ts.map +1 -0
  82. package/dist/clinical/BrowserClinicalSpeechInput.js +32 -0
  83. package/dist/clinical/BrowserClinicalSpeechInput.js.map +1 -0
  84. package/dist/clinical/ClinicalActionButton.d.ts +9 -0
  85. package/dist/clinical/ClinicalActionButton.d.ts.map +1 -0
  86. package/dist/clinical/ClinicalActionButton.js +13 -0
  87. package/dist/clinical/ClinicalActionButton.js.map +1 -0
  88. package/dist/clinical/ClinicalArtifactEditor.d.ts +147 -0
  89. package/dist/clinical/ClinicalArtifactEditor.d.ts.map +1 -0
  90. package/dist/clinical/ClinicalArtifactEditor.js +382 -0
  91. package/dist/clinical/ClinicalArtifactEditor.js.map +1 -0
  92. package/dist/clinical/ClinicalArtifactEditorV2.d.ts +77 -0
  93. package/dist/clinical/ClinicalArtifactEditorV2.d.ts.map +1 -0
  94. package/dist/clinical/ClinicalArtifactEditorV2.js +89 -0
  95. package/dist/clinical/ClinicalArtifactEditorV2.js.map +1 -0
  96. package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts +83 -0
  97. package/dist/clinical/ClinicalArtifactPropertiesV2.d.ts.map +1 -0
  98. package/dist/clinical/ClinicalArtifactPropertiesV2.js +46 -0
  99. package/dist/clinical/ClinicalArtifactPropertiesV2.js.map +1 -0
  100. package/dist/clinical/ClinicalBundleDraftEditor.d.ts +99 -0
  101. package/dist/clinical/ClinicalBundleDraftEditor.d.ts.map +1 -0
  102. package/dist/clinical/ClinicalBundleDraftEditor.js +225 -0
  103. package/dist/clinical/ClinicalBundleDraftEditor.js.map +1 -0
  104. package/dist/clinical/ClinicalEditorLayer.d.ts +8 -0
  105. package/dist/clinical/ClinicalEditorLayer.d.ts.map +1 -0
  106. package/dist/clinical/ClinicalEditorLayer.js +12 -0
  107. package/dist/clinical/ClinicalEditorLayer.js.map +1 -0
  108. package/dist/clinical/ClinicalSectionSummary.d.ts +36 -0
  109. package/dist/clinical/ClinicalSectionSummary.d.ts.map +1 -0
  110. package/dist/clinical/ClinicalSectionSummary.js +24 -0
  111. package/dist/clinical/ClinicalSectionSummary.js.map +1 -0
  112. package/dist/clinical/ClinicalSpeechInput.d.ts +58 -0
  113. package/dist/clinical/ClinicalSpeechInput.d.ts.map +1 -0
  114. package/dist/clinical/ClinicalSpeechInput.js +84 -0
  115. package/dist/clinical/ClinicalSpeechInput.js.map +1 -0
  116. package/dist/clinical/ClinicalTimeline.d.ts +52 -0
  117. package/dist/clinical/ClinicalTimeline.d.ts.map +1 -0
  118. package/dist/clinical/ClinicalTimeline.js +48 -0
  119. package/dist/clinical/ClinicalTimeline.js.map +1 -0
  120. package/dist/clinical/ImmunizationArtifactEditorV2.d.ts +15 -0
  121. package/dist/clinical/ImmunizationArtifactEditorV2.d.ts.map +1 -0
  122. package/dist/clinical/ImmunizationArtifactEditorV2.js +62 -0
  123. package/dist/clinical/ImmunizationArtifactEditorV2.js.map +1 -0
  124. package/dist/clinical/IpsBundleSummary.d.ts +34 -0
  125. package/dist/clinical/IpsBundleSummary.d.ts.map +1 -0
  126. package/dist/clinical/IpsBundleSummary.js +75 -0
  127. package/dist/clinical/IpsBundleSummary.js.map +1 -0
  128. package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts +11 -0
  129. package/dist/clinical/SchemaClinicalArtifactEditorV2.d.ts.map +1 -0
  130. package/dist/clinical/SchemaClinicalArtifactEditorV2.js +62 -0
  131. package/dist/clinical/SchemaClinicalArtifactEditorV2.js.map +1 -0
  132. package/dist/clinical/clinical.css +148 -0
  133. package/dist/clinical/index.d.ts +14 -0
  134. package/dist/clinical/index.d.ts.map +1 -0
  135. package/dist/clinical/index.js +14 -0
  136. package/dist/clinical/index.js.map +1 -0
  137. package/dist/identity/AnimalIdentityDetailsV2.d.ts +43 -0
  138. package/dist/identity/AnimalIdentityDetailsV2.d.ts.map +1 -0
  139. package/dist/identity/AnimalIdentityDetailsV2.js +9 -0
  140. package/dist/identity/AnimalIdentityDetailsV2.js.map +1 -0
  141. package/dist/identity/AnimalIdentityOnboarding.d.ts +91 -0
  142. package/dist/identity/AnimalIdentityOnboarding.d.ts.map +1 -0
  143. package/dist/identity/AnimalIdentityOnboarding.js +73 -0
  144. package/dist/identity/AnimalIdentityOnboarding.js.map +1 -0
  145. package/dist/identity/AnimalIdentityOnboardingV2.d.ts +56 -0
  146. package/dist/identity/AnimalIdentityOnboardingV2.d.ts.map +1 -0
  147. package/dist/identity/AnimalIdentityOnboardingV2.js +174 -0
  148. package/dist/identity/AnimalIdentityOnboardingV2.js.map +1 -0
  149. package/dist/identity/current-subject.css +11 -0
  150. package/dist/identity/identity.css +64 -0
  151. package/dist/identity/index.d.ts +9 -0
  152. package/dist/identity/index.d.ts.map +1 -0
  153. package/dist/identity/index.js +10 -0
  154. package/dist/identity/index.js.map +1 -0
  155. package/dist/index.d.ts +8 -0
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +8 -0
  158. package/dist/index.js.map +1 -1
  159. package/dist/preferences.d.ts +12 -0
  160. package/dist/preferences.d.ts.map +1 -0
  161. package/dist/preferences.js +57 -0
  162. package/dist/preferences.js.map +1 -0
  163. package/dist/styles.css +24 -0
  164. package/dist/usePortalUiPreferences.d.ts +9 -0
  165. package/dist/usePortalUiPreferences.d.ts.map +1 -0
  166. package/dist/usePortalUiPreferences.js +39 -0
  167. package/dist/usePortalUiPreferences.js.map +1 -0
  168. package/package.json +20 -4
@@ -0,0 +1,43 @@
1
+ import type { ReactNode } from 'react';
2
+ export type AnimalIdentityDetailsV2Copy = Readonly<{
3
+ animalStep: string;
4
+ controllerStep: string;
5
+ animalName: string;
6
+ species: string;
7
+ identifierType: string;
8
+ identifierValue: string;
9
+ controllerName: string;
10
+ relationship: string;
11
+ edit?: string;
12
+ jurisdiction?: string;
13
+ legalIdentifier?: string;
14
+ officialAddress?: string;
15
+ telephone?: string;
16
+ email?: string;
17
+ source?: string;
18
+ }>;
19
+ export type AnimalIdentityDetailsV2Value = Readonly<{
20
+ animalName: string;
21
+ species: string;
22
+ identifierType: string;
23
+ identifierValue: string;
24
+ animalPhotoUrl?: string;
25
+ animalPhotoAlt?: string;
26
+ controllerName: string;
27
+ relationship: string;
28
+ controllerKind?: 'person' | 'organization';
29
+ controllerJurisdiction?: string;
30
+ controllerIdentifier?: string;
31
+ controllerOfficialAddress?: string;
32
+ controllerTelephone?: string;
33
+ controllerEmail?: string;
34
+ controllerSource?: string;
35
+ }>;
36
+ /** Read-only counterpart of AnimalIdentityOnboardingV2 using the same progressive sections. */
37
+ export declare function AnimalIdentityDetailsV2({ copy, value, onEdit, actions }: Readonly<{
38
+ copy: AnimalIdentityDetailsV2Copy;
39
+ value: AnimalIdentityDetailsV2Value;
40
+ onEdit?: () => void;
41
+ actions?: ReactNode;
42
+ }>): import("react").JSX.Element;
43
+ //# sourceMappingURL=AnimalIdentityDetailsV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityDetailsV2.d.ts","sourceRoot":"","sources":["../../src/identity/AnimalIdentityDetailsV2.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,UAAU,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,UAAU,EAAC,MAAM,CAAC;IAAC,OAAO,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,YAAY,EAAC,MAAM,CAAC;IAAC,IAAI,CAAC,EAAC,MAAM,CAAA;IACpL,YAAY,CAAC,EAAC,MAAM,CAAC;IAAC,eAAe,CAAC,EAAC,MAAM,CAAC;IAAC,eAAe,CAAC,EAAC,MAAM,CAAC;IAAC,SAAS,CAAC,EAAC,MAAM,CAAC;IAAC,KAAK,CAAC,EAAC,MAAM,CAAC;IAAC,MAAM,CAAC,EAAC,MAAM,CAAA;CACzH,CAAC,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,UAAU,EAAC,MAAM,CAAC;IAAC,OAAO,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,CAAC,EAAC,MAAM,CAAC;IAAC,cAAc,CAAC,EAAC,MAAM,CAAA;IAChI,cAAc,EAAC,MAAM,CAAC;IAAC,YAAY,EAAC,MAAM,CAAC;IAAC,cAAc,CAAC,EAAC,QAAQ,GAAC,cAAc,CAAC;IAAC,sBAAsB,CAAC,EAAC,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAC,MAAM,CAAA;IACjJ,yBAAyB,CAAC,EAAC,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAC,MAAM,CAAC;IAAC,eAAe,CAAC,EAAC,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAC,MAAM,CAAA;CAClH,CAAC,CAAA;AAEF,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC;IAAE,IAAI,EAAC,2BAA2B,CAAC;IAAC,KAAK,EAAC,4BAA4B,CAAC;IAAC,MAAM,CAAC,EAAC,MAAI,IAAI,CAAC;IAAC,OAAO,CAAC,EAAC,SAAS,CAAA;CAAE,CAAC,+BAMjM"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /** Read-only counterpart of AnimalIdentityOnboardingV2 using the same progressive sections. */
3
+ export function AnimalIdentityDetailsV2({ copy, value, onEdit, actions }) {
4
+ return _jsxs("section", { className: "uhcp-animal-onboarding uhcp-animal-onboarding-v2 uhcp-animal-identity-details-v2", children: [_jsxs("details", { children: [_jsxs("summary", { children: [_jsx(StepNumber, { value: 1 }), " ", copy.animalStep] }), _jsxs("div", { className: "uhcp-animal-identity-readonly", children: [_jsx(_Fragment, { children: value.animalPhotoUrl ? _jsx("img", { className: "uhcp-animal-identity-photo", src: value.animalPhotoUrl, alt: value.animalPhotoAlt ?? value.animalName }) : null }), _jsxs("dl", { className: "uhcp-animal-identity-readonly-grid", children: [_jsx(Fact, { label: copy.animalName, value: value.animalName }), _jsx(Fact, { label: copy.species, value: value.species }), _jsx(Fact, { label: copy.identifierType, value: value.identifierType }), _jsx(Fact, { label: copy.identifierValue, value: value.identifierValue })] })] })] }), _jsxs("details", { children: [_jsxs("summary", { children: [_jsx(StepNumber, { value: 2 }), " ", copy.controllerStep] }), _jsxs("dl", { className: "uhcp-animal-identity-readonly-grid", children: [_jsx(Fact, { label: copy.controllerName, value: value.controllerName }), _jsx(Fact, { label: copy.relationship, value: value.relationship }), _jsx(OptionalFact, { label: copy.jurisdiction, value: value.controllerJurisdiction }), _jsx(OptionalFact, { label: copy.legalIdentifier, value: value.controllerIdentifier }), _jsx(OptionalFact, { label: copy.officialAddress, value: value.controllerOfficialAddress }), _jsx(OptionalFact, { label: copy.telephone, value: value.controllerTelephone }), _jsx(OptionalFact, { label: copy.email, value: value.controllerEmail }), _jsx(OptionalFact, { label: copy.source, value: value.controllerSource })] })] }), onEdit || actions ? _jsxs("div", { className: "uhcp-animal-onboarding-actions", children: [actions, onEdit ? _jsx("button", { type: "button", onClick: onEdit, "aria-label": copy.edit, title: copy.edit, children: copy.edit }) : null] }) : null] });
5
+ }
6
+ function StepNumber({ value }) { return _jsx("span", { className: "uhcp-identity-step-number", "aria-hidden": "true", children: value }); }
7
+ function Fact({ label, value }) { return _jsxs("div", { children: [_jsx("dt", { children: label }), _jsx("dd", { children: value })] }); }
8
+ function OptionalFact({ label, value }) { return label && value ? _jsx(Fact, { label: label, value: value }) : null; }
9
+ //# sourceMappingURL=AnimalIdentityDetailsV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityDetailsV2.js","sourceRoot":"","sources":["../../src/identity/AnimalIdentityDetailsV2.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { IdentityEvidenceStatus } from 'antifraud-portal-components-react/identity-evidence-workspace';
2
+ export type AnimalControllerRelationship = 'owner' | 'caregiver';
3
+ export type AnimalIdentityOnboardingInput = Readonly<{
4
+ animalName: string;
5
+ taxonomyId: string;
6
+ birthDate?: string | undefined;
7
+ sex: 'female' | 'male' | 'other' | 'unknown';
8
+ identifierSystem: string;
9
+ identifierValue: string;
10
+ controllerLegalName: string;
11
+ controllerIdentifierType: string;
12
+ controllerIdentifierValue: string;
13
+ controllerCountry: string;
14
+ controllerKind?: 'person' | 'organization';
15
+ controllerRegion?: string | undefined;
16
+ controllerEmail?: string | undefined;
17
+ controllerTelephone?: string | undefined;
18
+ verificationMethod?: 'pipp' | 'sripp' | 'eid' | 'uripp';
19
+ relationship: AnimalControllerRelationship;
20
+ ownerDocument?: File | undefined;
21
+ animalDocument: File;
22
+ relationshipDocument?: File | undefined;
23
+ controllerPin?: string;
24
+ }>;
25
+ export type AnimalIdentityOnboardingCopy = Readonly<{
26
+ title: string;
27
+ intro: string;
28
+ animalStep: string;
29
+ controllerStep: string;
30
+ evidenceStep: string;
31
+ animalName: string;
32
+ taxonomyId: string;
33
+ birthDate: string;
34
+ sex: string;
35
+ sexUnknown: string;
36
+ sexFemale: string;
37
+ sexMale: string;
38
+ sexOther: string;
39
+ identifierSystem: string;
40
+ identifierValue: string;
41
+ controllerLegalName: string;
42
+ controllerIdentifierType: string;
43
+ controllerIdentifierValue: string;
44
+ controllerCountry: string;
45
+ relationship: string;
46
+ owner: string;
47
+ caregiver: string;
48
+ ownerDocument: string;
49
+ animalDocument: string;
50
+ relationshipDocument: string;
51
+ controllerPin?: string;
52
+ submit: string;
53
+ }>;
54
+ /**
55
+ * Brand-neutral animal identity and controller-evidence editor recovered from
56
+ * the progressive VetChain Expo journey. The host persists and verifies the
57
+ * result; this component never grants authority or marks evidence verified.
58
+ */
59
+ export declare function AnimalIdentityOnboarding({ copy, onSubmit, submitAction, speciesOptions, busy }: Readonly<{
60
+ copy: AnimalIdentityOnboardingCopy;
61
+ onSubmit: (input: AnimalIdentityOnboardingInput) => Promise<void> | void;
62
+ submitAction?: string;
63
+ speciesOptions?: readonly Readonly<{
64
+ taxonomyId: string;
65
+ label: string;
66
+ }>[];
67
+ busy?: boolean;
68
+ }>): import("react").JSX.Element;
69
+ export type SubjectIdentityCardSubject = Readonly<{
70
+ displayName: string;
71
+ kind: 'person' | 'animal';
72
+ imageUrl?: string;
73
+ facts: readonly Readonly<{
74
+ label: string;
75
+ value: string;
76
+ }>[];
77
+ }>;
78
+ /** Capability-aware readback. Values and status must come from the provider. */
79
+ export declare function SubjectIdentityCard({ subject, relationship, statusLabels, editLabel, canEdit, onEdit }: Readonly<{
80
+ subject: SubjectIdentityCardSubject;
81
+ relationship?: Readonly<{
82
+ label: string;
83
+ displayName: string;
84
+ status: IdentityEvidenceStatus;
85
+ }>;
86
+ statusLabels: Readonly<Record<IdentityEvidenceStatus, string>>;
87
+ editLabel?: string;
88
+ canEdit?: boolean;
89
+ onEdit?: () => void;
90
+ }>): import("react").JSX.Element;
91
+ //# sourceMappingURL=AnimalIdentityOnboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityOnboarding.d.ts","sourceRoot":"","sources":["../../src/identity/AnimalIdentityOnboarding.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ /**
4
+ * Brand-neutral animal identity and controller-evidence editor recovered from
5
+ * the progressive VetChain Expo journey. The host persists and verifies the
6
+ * result; this component never grants authority or marks evidence verified.
7
+ */
8
+ export function AnimalIdentityOnboarding({ copy, onSubmit, submitAction, speciesOptions = [], busy = false }) {
9
+ const [submitting, setSubmitting] = useState(false);
10
+ async function submit(event) {
11
+ event.preventDefault();
12
+ const formElement = event.currentTarget;
13
+ const form = new FormData(formElement);
14
+ const ownerDocument = requiredFile(formElement, 'ownerDocument');
15
+ const animalDocument = requiredFile(formElement, 'animalDocument');
16
+ const relationshipDocument = requiredFile(formElement, 'relationshipDocument');
17
+ setSubmitting(true);
18
+ try {
19
+ await onSubmit({
20
+ animalName: requiredText(form, 'animalName'),
21
+ taxonomyId: requiredText(form, 'taxonomyId'),
22
+ birthDate: optionalText(form, 'birthDate'),
23
+ sex: requiredText(form, 'sex'),
24
+ identifierSystem: requiredText(form, 'identifierSystem'),
25
+ identifierValue: requiredText(form, 'identifierValue'),
26
+ controllerLegalName: requiredText(form, 'controllerLegalName'),
27
+ controllerIdentifierType: requiredText(form, 'controllerIdentifierType'),
28
+ controllerIdentifierValue: requiredText(form, 'controllerIdentifierValue'),
29
+ controllerCountry: requiredText(form, 'controllerCountry').toUpperCase(),
30
+ relationship: requiredText(form, 'relationship'),
31
+ ownerDocument,
32
+ animalDocument,
33
+ relationshipDocument,
34
+ controllerPin: requiredText(form, 'controllerPin'),
35
+ });
36
+ }
37
+ finally {
38
+ setSubmitting(false);
39
+ }
40
+ }
41
+ const disabled = busy || submitting;
42
+ return _jsxs("section", { className: "uhcp-animal-onboarding", "aria-labelledby": "animal-identity-onboarding-title", children: [_jsxs("header", { children: [_jsx("h2", { id: "animal-identity-onboarding-title", children: copy.title }), _jsx("p", { children: copy.intro })] }), _jsxs("form", { onSubmit: submit, children: [_jsxs("fieldset", { children: [_jsxs("legend", { children: [_jsx(StepNumber, { value: 1 }), " ", copy.animalStep] }), _jsxs("div", { className: "uhcp-animal-onboarding-fields", children: [_jsxs("label", { children: [copy.animalName, _jsx("input", { name: "animalName", required: true, maxLength: 80 })] }), _jsxs("label", { children: [copy.taxonomyId, speciesOptions.length > 0
43
+ ? _jsx("select", { name: "taxonomyId", required: true, defaultValue: speciesOptions[0]?.taxonomyId, children: speciesOptions.map(option => _jsx("option", { value: option.taxonomyId, children: option.label }, option.taxonomyId)) })
44
+ : _jsx("input", { name: "taxonomyId", required: true, inputMode: "numeric", pattern: "[1-9][0-9]{0,6}", defaultValue: "9615" })] }), _jsxs("label", { children: [copy.birthDate, _jsx("input", { name: "birthDate", type: "date" })] }), _jsxs("label", { children: [copy.sex, _jsxs("select", { name: "sex", defaultValue: "unknown", children: [_jsx("option", { value: "unknown", children: copy.sexUnknown }), _jsx("option", { value: "female", children: copy.sexFemale }), _jsx("option", { value: "male", children: copy.sexMale }), _jsx("option", { value: "other", children: copy.sexOther })] })] }), _jsxs("label", { children: [copy.identifierSystem, _jsxs("select", { name: "identifierSystem", defaultValue: "urn:iso:std:iso:11784:11785", children: [_jsx("option", { value: "urn:iso:std:iso:11784:11785", children: "Microchip (ISO 11784/11785)" }), _jsx("option", { value: "https://europa.eu/pet-passport", children: "EU pet passport" }), _jsx("option", { value: "https://vetchain.app/identifier/tattoo", children: "Tattoo" })] })] }), _jsxs("label", { children: [copy.identifierValue, _jsx("input", { name: "identifierValue", required: true, maxLength: 80, autoComplete: "off" })] })] })] }), _jsxs("fieldset", { children: [_jsxs("legend", { children: [_jsx(StepNumber, { value: 2 }), " ", copy.controllerStep] }), _jsxs("div", { className: "uhcp-animal-onboarding-fields", children: [_jsxs("label", { children: [copy.controllerLegalName, _jsx("input", { name: "controllerLegalName", required: true, maxLength: 160, autoComplete: "name" })] }), _jsxs("label", { children: [copy.controllerIdentifierType, _jsx("input", { name: "controllerIdentifierType", required: true, defaultValue: "national_identity_card", maxLength: 80 })] }), _jsxs("label", { children: [copy.controllerIdentifierValue, _jsx("input", { name: "controllerIdentifierValue", required: true, maxLength: 120, autoComplete: "off" })] }), _jsxs("label", { children: [copy.controllerCountry, _jsx("input", { name: "controllerCountry", required: true, pattern: "[A-Za-z]{2}", maxLength: 2, autoComplete: "country" })] }), _jsxs("label", { children: [copy.relationship, _jsxs("select", { name: "relationship", defaultValue: "owner", children: [_jsx("option", { value: "owner", children: copy.owner }), _jsx("option", { value: "caregiver", children: copy.caregiver })] })] })] })] }), _jsxs("fieldset", { children: [_jsxs("legend", { children: [_jsx(StepNumber, { value: 3 }), " ", copy.evidenceStep] }), _jsxs("div", { className: "uhcp-animal-onboarding-fields", children: [_jsxs("label", { children: [copy.ownerDocument, _jsx("input", { name: "ownerDocument", type: "file", accept: "application/pdf,image/jpeg,image/png", required: true })] }), _jsxs("label", { children: [copy.animalDocument, _jsx("input", { name: "animalDocument", type: "file", accept: "application/pdf,image/jpeg,image/png", required: true })] }), _jsxs("label", { children: [copy.relationshipDocument, _jsx("input", { name: "relationshipDocument", type: "file", accept: "application/pdf,image/jpeg,image/png", required: true })] }), _jsxs("label", { children: [copy.controllerPin, _jsx("input", { name: "controllerPin", type: "password", inputMode: "numeric", pattern: "[0-9]{6,12}", required: true, autoComplete: "new-password" })] })] })] }), _jsx("button", { type: "submit", className: "uhcp-animal-onboarding-submit", "data-portal-action": submitAction, disabled: disabled, children: copy.submit })] })] });
45
+ }
46
+ /** Capability-aware readback. Values and status must come from the provider. */
47
+ export function SubjectIdentityCard({ subject, relationship, statusLabels, editLabel, canEdit = false, onEdit }) {
48
+ const initial = subject.displayName.trim().slice(0, 1).toUpperCase() || '•';
49
+ return _jsxs("article", { className: "uhcp-subject-identity-card", children: [_jsxs("header", { children: [subject.imageUrl
50
+ ? _jsx("img", { src: subject.imageUrl, alt: "" })
51
+ : _jsx("span", { className: "uhcp-subject-identity-avatar", "aria-hidden": "true", children: initial }), _jsxs("div", { children: [_jsx("small", { children: subject.kind }), _jsx("h3", { children: subject.displayName })] }), canEdit && onEdit && editLabel ? _jsx("button", { className: "uhcp-subject-identity-edit", type: "button", "aria-label": editLabel, title: editLabel, onClick: onEdit, children: _jsx("span", { "aria-hidden": "true", children: "\u270E" }) }) : null] }), _jsx("dl", { children: subject.facts.map(fact => _jsxs("div", { children: [_jsx("dt", { children: fact.label }), _jsx("dd", { children: fact.value })] }, `${fact.label}:${fact.value}`)) }), relationship ? _jsxs("section", { className: "uhcp-subject-identity-relationship", children: [_jsx("span", { children: relationship.label }), _jsx("strong", { children: relationship.displayName }), _jsx("small", { className: `uhcp-identity-status uhcp-identity-status-${relationship.status}`, children: statusLabels[relationship.status] })] }) : null] });
52
+ }
53
+ function StepNumber({ value }) {
54
+ return _jsx("span", { className: "uhcp-identity-step-number", "aria-hidden": "true", children: value });
55
+ }
56
+ function requiredText(form, name) {
57
+ const value = form.get(name);
58
+ if (typeof value !== 'string' || !value.trim())
59
+ throw new Error(`animal_identity_${name}_required`);
60
+ return value.trim();
61
+ }
62
+ function optionalText(form, name) {
63
+ const value = form.get(name);
64
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
65
+ }
66
+ function requiredFile(form, name) {
67
+ const input = form.elements.namedItem(name);
68
+ const value = input instanceof HTMLInputElement ? input.files?.[0] : undefined;
69
+ if (!value || value.size < 1)
70
+ throw new Error(`animal_identity_${name}_required`);
71
+ return value;
72
+ }
73
+ //# sourceMappingURL=AnimalIdentityOnboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityOnboarding.js","sourceRoot":"","sources":["../../src/identity/AnimalIdentityOnboarding.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AA0DhD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,GAAG,EAAE,EAAE,IAAI,GAAG,KAAK,EAMxG;IACA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEnD,KAAK,UAAU,MAAM,CAAC,KAAiC;QACrD,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAA;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;QAChE,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;QAClE,MAAM,oBAAoB,GAAG,YAAY,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAA;QAC9E,aAAa,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC;gBACb,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC1C,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAyC;gBACtE,gBAAgB,EAAE,YAAY,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBACxD,eAAe,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBACtD,mBAAmB,EAAE,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC;gBAC9D,wBAAwB,EAAE,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC;gBACxE,yBAAyB,EAAE,YAAY,CAAC,IAAI,EAAE,2BAA2B,CAAC;gBAC1E,iBAAiB,EAAE,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,WAAW,EAAE;gBACxE,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,cAAc,CAAiC;gBAChF,aAAa;gBACb,cAAc;gBACd,oBAAoB;gBACpB,aAAa,EAAE,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC;aACnD,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,CAAA;IACnC,OAAO,mBAAS,SAAS,EAAC,wBAAwB,qBAAiB,kCAAkC,aACnG,6BACE,aAAI,EAAE,EAAC,kCAAkC,YAAE,IAAI,CAAC,KAAK,GAAM,EAC3D,sBAAI,IAAI,CAAC,KAAK,GAAK,IACZ,EACT,gBAAM,QAAQ,EAAE,MAAM,aACpB,+BACE,6BAAQ,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,GAAI,OAAE,IAAI,CAAC,UAAU,IAAU,EAC3D,eAAK,SAAS,EAAC,+BAA+B,aAC5C,4BAAQ,IAAI,CAAC,UAAU,EAAC,gBAAO,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,SAAS,EAAE,EAAE,GAAI,IAAQ,EACnF,4BAAQ,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;gDAChD,CAAC,CAAC,iBAAQ,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,YAC7E,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAgC,KAAK,EAAE,MAAM,CAAC,UAAU,YAAG,MAAM,CAAC,KAAK,IAA1D,MAAM,CAAC,UAAU,CAAmD,CAAC,GACzG;gDACT,CAAC,CAAC,gBAAO,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAC,iBAAiB,EAAC,YAAY,EAAC,MAAM,GAAG,IAAS,EACnH,4BAAQ,IAAI,CAAC,SAAS,EAAC,gBAAO,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,GAAG,IAAQ,EACrE,4BAAQ,IAAI,CAAC,GAAG,EAAC,kBAAQ,IAAI,EAAC,KAAK,EAAC,YAAY,EAAC,SAAS,aACxD,iBAAQ,KAAK,EAAC,SAAS,YAAE,IAAI,CAAC,UAAU,GAAU,EAClD,iBAAQ,KAAK,EAAC,QAAQ,YAAE,IAAI,CAAC,SAAS,GAAU,EAChD,iBAAQ,KAAK,EAAC,MAAM,YAAE,IAAI,CAAC,OAAO,GAAU,EAC5C,iBAAQ,KAAK,EAAC,OAAO,YAAE,IAAI,CAAC,QAAQ,GAAU,IACvC,IAAQ,EACjB,4BAAQ,IAAI,CAAC,gBAAgB,EAAC,kBAAQ,IAAI,EAAC,kBAAkB,EAAC,YAAY,EAAC,6BAA6B,aACtG,iBAAQ,KAAK,EAAC,6BAA6B,4CAAqC,EAChF,iBAAQ,KAAK,EAAC,gCAAgC,gCAAyB,EACvE,iBAAQ,KAAK,EAAC,wCAAwC,uBAAgB,IAC/D,IAAQ,EACjB,4BAAQ,IAAI,CAAC,eAAe,EAAC,gBAAO,IAAI,EAAC,iBAAiB,EAAC,QAAQ,QAAC,SAAS,EAAE,EAAE,EAAE,YAAY,EAAC,KAAK,GAAG,IAAQ,IAC5G,IACG,EACX,+BACE,6BAAQ,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,GAAI,OAAE,IAAI,CAAC,cAAc,IAAU,EAC/D,eAAK,SAAS,EAAC,+BAA+B,aAC5C,4BAAQ,IAAI,CAAC,mBAAmB,EAAC,gBAAO,IAAI,EAAC,qBAAqB,EAAC,QAAQ,QAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAC,MAAM,GAAG,IAAQ,EAC1H,4BAAQ,IAAI,CAAC,wBAAwB,EAAC,gBAAO,IAAI,EAAC,0BAA0B,EAAC,QAAQ,QAAC,YAAY,EAAC,wBAAwB,EAAC,SAAS,EAAE,EAAE,GAAI,IAAQ,EACrJ,4BAAQ,IAAI,CAAC,yBAAyB,EAAC,gBAAO,IAAI,EAAC,2BAA2B,EAAC,QAAQ,QAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAC,KAAK,GAAG,IAAQ,EACrI,4BAAQ,IAAI,CAAC,iBAAiB,EAAC,gBAAO,IAAI,EAAC,mBAAmB,EAAC,QAAQ,QAAC,OAAO,EAAC,aAAa,EAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAC,SAAS,GAAG,IAAQ,EAC7I,4BAAQ,IAAI,CAAC,YAAY,EAAC,kBAAQ,IAAI,EAAC,cAAc,EAAC,YAAY,EAAC,OAAO,aACxE,iBAAQ,KAAK,EAAC,OAAO,YAAE,IAAI,CAAC,KAAK,GAAU,EAC3C,iBAAQ,KAAK,EAAC,WAAW,YAAE,IAAI,CAAC,SAAS,GAAU,IAC5C,IAAQ,IACb,IACG,EACX,+BACE,6BAAQ,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,GAAI,OAAE,IAAI,CAAC,YAAY,IAAU,EAC7D,eAAK,SAAS,EAAC,+BAA+B,aAC5C,4BAAQ,IAAI,CAAC,aAAa,EAAC,gBAAO,IAAI,EAAC,eAAe,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,sCAAsC,EAAC,QAAQ,SAAG,IAAQ,EACpI,4BAAQ,IAAI,CAAC,cAAc,EAAC,gBAAO,IAAI,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,sCAAsC,EAAC,QAAQ,SAAG,IAAQ,EACtI,4BAAQ,IAAI,CAAC,oBAAoB,EAAC,gBAAO,IAAI,EAAC,sBAAsB,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,sCAAsC,EAAC,QAAQ,SAAG,IAAQ,EAClJ,4BAAQ,IAAI,CAAC,aAAa,EAAC,gBAAO,IAAI,EAAC,eAAe,EAAC,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,QAAC,YAAY,EAAC,cAAc,GAAG,IAAQ,IAC5J,IACG,EACX,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,wBAAqB,YAAY,EAAE,QAAQ,EAAE,QAAQ,YAAG,IAAI,CAAC,MAAM,GAAU,IACvI,IACC,CAAA;AACZ,CAAC;AASD,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,EAO3G;IACA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAA;IAC3E,OAAO,mBAAS,SAAS,EAAC,4BAA4B,aACpD,6BACG,OAAO,CAAC,QAAQ;wBACf,CAAC,CAAC,cAAK,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAC,EAAE,GAAG;wBACvC,CAAC,CAAC,eAAM,SAAS,EAAC,8BAA8B,iBAAa,MAAM,YAAE,OAAO,GAAQ,EACtF,0BAAK,0BAAQ,OAAO,CAAC,IAAI,GAAS,EAAA,uBAAK,OAAO,CAAC,WAAW,GAAM,IAAM,EACrE,OAAO,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAC,QAAQ,gBAAa,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAE,8BAAkB,MAAM,uBAAS,GAAS,CAAC,CAAC,CAAC,IAAI,IACnM,EACT,uBAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,0BAAyC,uBAAK,IAAI,CAAC,KAAK,GAAM,EAAA,uBAAK,IAAI,CAAC,KAAK,GAAM,KAAzE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAkD,CAAC,GAAM,EAC9H,YAAY,CAAC,CAAC,CAAC,mBAAS,SAAS,EAAC,oCAAoC,aACrE,yBAAO,YAAY,CAAC,KAAK,GAAQ,EAAA,2BAAS,YAAY,CAAC,WAAW,GAAU,EAC5E,gBAAO,SAAS,EAAE,6CAA6C,YAAY,CAAC,MAAM,EAAE,YAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,GAAS,IACzH,CAAC,CAAC,CAAC,IAAI,IACT,CAAA;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAA+B;IACxD,OAAO,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,YAAE,KAAK,GAAQ,CAAA;AACtF,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,WAAW,CAAC,CAAA;IACnG,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,WAAW,CAAC,CAAA;IACjF,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { AnimalIdentityOnboardingCopy, AnimalIdentityOnboardingInput } from './AnimalIdentityOnboarding.js';
3
+ export type AnimalIdentityOnboardingV2Copy = AnimalIdentityOnboardingCopy & Readonly<{
4
+ controllerIsLegalRepresentative: string;
5
+ animalPreview: string;
6
+ addAnimalPhoto: string;
7
+ removeAnimalPhoto: string;
8
+ photoHelp: string;
9
+ photoTooLarge: string;
10
+ photoDimensionsInvalid: string;
11
+ ownerKind: string;
12
+ responsibleParty?: string;
13
+ personOwner: string;
14
+ organizationOwner: string;
15
+ regionalIdentifier: string;
16
+ controllerRegion: string;
17
+ controllerEmail: string;
18
+ controllerTelephone: string;
19
+ contactRequired: string;
20
+ verificationMethod: string;
21
+ physicalInPerson: string;
22
+ supervisedRemote: string;
23
+ electronicId: string;
24
+ unsupervisedRemote: string;
25
+ countryPlaceholder?: string;
26
+ }>;
27
+ type SelectOption = Readonly<{
28
+ value: string;
29
+ label: string;
30
+ }>;
31
+ /**
32
+ * Progressive animal onboarding presentation. It preserves the V1 payload so
33
+ * hosts can adopt it without changing evidence, authorization or persistence.
34
+ */
35
+ export declare function AnimalIdentityOnboardingV2({ copy, onSubmit, submitAction, speciesOptions, countryOptions, regionOptionsByCountry, identifierTypeOptions, showHeader, requireEmail, requireTelephone, busy, footerActions }: Readonly<{
36
+ copy: AnimalIdentityOnboardingV2Copy;
37
+ onSubmit: (input: AnimalIdentityOnboardingInput) => Promise<void> | void;
38
+ submitAction?: string;
39
+ speciesOptions?: readonly Readonly<{
40
+ taxonomyId: string;
41
+ label: string;
42
+ }>[];
43
+ countryOptions?: readonly SelectOption[];
44
+ regionOptionsByCountry?: Readonly<Record<string, readonly SelectOption[]>>;
45
+ identifierTypeOptions?: Readonly<{
46
+ person: readonly SelectOption[];
47
+ organization: readonly SelectOption[];
48
+ }>;
49
+ showHeader?: boolean;
50
+ requireEmail?: boolean;
51
+ requireTelephone?: boolean;
52
+ busy?: boolean;
53
+ footerActions?: ReactNode;
54
+ }>): import("react").JSX.Element;
55
+ export {};
56
+ //# sourceMappingURL=AnimalIdentityOnboardingV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityOnboardingV2.d.ts","sourceRoot":"","sources":["../../src/identity/AnimalIdentityOnboardingV2.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACnF,OAAO,KAAK,EAEV,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,+BAA+B,CAAA;AAGtC,MAAM,MAAM,8BAA8B,GAAG,4BAA4B,GAAG,QAAQ,CAAC;IACnF,+BAA+B,EAAE,MAAM,CAAA;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAC,CAAA;AAEF,KAAK,YAAY,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAG9D;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAmB,EAAE,cAAmB,EAAE,sBAA2B,EAAE,qBAAqB,EAAE,UAAiB,EAAE,YAAoB,EAAE,gBAAwB,EAAE,IAAY,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC;IAClR,IAAI,EAAE,8BAA8B,CAAA;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,SAAS,QAAQ,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;IAC3E,cAAc,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IACxC,sBAAsB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC,CAAA;IAC1E,qBAAqB,CAAC,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;QAAC,YAAY,EAAE,SAAS,YAAY,EAAE,CAAA;KAAE,CAAC,CAAA;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,aAAa,CAAC,EAAE,SAAS,CAAA;CAC1B,CAAC,+BA4ID"}
@@ -0,0 +1,174 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Copyright 2026 Connecting Solution & Applications Ltd under the Apache License, Version 2.0.
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { IdentityEntityEditorV2 } from 'antifraud-portal-components-react/identity-entity-editor-v2';
5
+ const MAX_ANIMAL_PHOTO_BYTES = 2 * 1024 * 1024;
6
+ /**
7
+ * Progressive animal onboarding presentation. It preserves the V1 payload so
8
+ * hosts can adopt it without changing evidence, authorization or persistence.
9
+ */
10
+ export function AnimalIdentityOnboardingV2({ copy, onSubmit, submitAction, speciesOptions = [], countryOptions = [], regionOptionsByCountry = {}, identifierTypeOptions, showHeader = true, requireEmail = false, requireTelephone = false, busy = false, footerActions }) {
11
+ const formRef = useRef(null);
12
+ const [submitting, setSubmitting] = useState(false);
13
+ const [animalName, setAnimalName] = useState('');
14
+ const [previewUrl, setPreviewUrl] = useState('');
15
+ const [animalDocument, setAnimalDocument] = useState();
16
+ const [photoError, setPhotoError] = useState('');
17
+ const [contactError, setContactError] = useState('');
18
+ const [formReady, setFormReady] = useState(false);
19
+ function refreshFormReady(formElement = formRef.current) {
20
+ if (!formElement)
21
+ return setFormReady(false);
22
+ const form = new FormData(formElement);
23
+ const hasContact = Boolean(optionalText(form, 'controllerEmail') || optionalText(form, 'controllerTelephone'));
24
+ setFormReady(formElement.checkValidity() && hasContact && Boolean(animalDocument));
25
+ }
26
+ useEffect(() => { refreshFormReady(); }, [animalDocument]);
27
+ useEffect(() => () => {
28
+ if (previewUrl.startsWith('blob:'))
29
+ URL.revokeObjectURL(previewUrl);
30
+ }, [previewUrl]);
31
+ async function previewAnimal(file) {
32
+ if (previewUrl.startsWith('blob:'))
33
+ URL.revokeObjectURL(previewUrl);
34
+ setPhotoError('');
35
+ if (!file?.type.startsWith('image/')) {
36
+ setAnimalDocument(undefined);
37
+ return setPreviewUrl('');
38
+ }
39
+ if (file.size > MAX_ANIMAL_PHOTO_BYTES) {
40
+ setAnimalDocument(undefined);
41
+ setPreviewUrl('');
42
+ return setPhotoError(copy.photoTooLarge);
43
+ }
44
+ try {
45
+ const dimensions = await readImageDimensions(file);
46
+ if (!hasAcceptedPhotoDimensions(dimensions.width, dimensions.height)) {
47
+ setAnimalDocument(undefined);
48
+ setPreviewUrl('');
49
+ return setPhotoError(copy.photoDimensionsInvalid);
50
+ }
51
+ }
52
+ catch {
53
+ setAnimalDocument(undefined);
54
+ setPreviewUrl('');
55
+ return setPhotoError(copy.photoDimensionsInvalid);
56
+ }
57
+ setAnimalDocument(file);
58
+ if (typeof URL.createObjectURL === 'function')
59
+ return setPreviewUrl(URL.createObjectURL(file));
60
+ const reader = new FileReader();
61
+ reader.onload = () => setPreviewUrl(typeof reader.result === 'string' ? reader.result : '');
62
+ reader.readAsDataURL(file);
63
+ }
64
+ function removeAnimalPhoto() {
65
+ if (previewUrl.startsWith('blob:'))
66
+ URL.revokeObjectURL(previewUrl);
67
+ setAnimalDocument(undefined);
68
+ setPreviewUrl('');
69
+ setPhotoError('');
70
+ }
71
+ async function submit(event) {
72
+ event.preventDefault();
73
+ const formElement = event.currentTarget;
74
+ const form = new FormData(formElement);
75
+ const controllerEmail = optionalText(form, 'controllerEmail');
76
+ const controllerTelephone = optionalText(form, 'controllerTelephone');
77
+ if (!controllerEmail && !controllerTelephone) {
78
+ setContactError(copy.contactRequired);
79
+ return;
80
+ }
81
+ setContactError('');
82
+ setSubmitting(true);
83
+ try {
84
+ await onSubmit({
85
+ animalName: requiredText(form, 'animalName'),
86
+ taxonomyId: requiredText(form, 'taxonomyId'),
87
+ birthDate: optionalText(form, 'birthDate'),
88
+ sex: requiredText(form, 'sex'),
89
+ identifierSystem: requiredText(form, 'identifierSystem'),
90
+ identifierValue: requiredText(form, 'identifierValue'),
91
+ controllerLegalName: requiredText(form, 'controllerLegalName'),
92
+ controllerIdentifierType: requiredText(form, 'controllerIdentifierType'),
93
+ controllerIdentifierValue: requiredText(form, 'controllerIdentifierValue'),
94
+ controllerCountry: requiredText(form, 'controllerCountry').toUpperCase(),
95
+ controllerKind: requiredText(form, 'controllerKind'),
96
+ controllerRegion: optionalText(form, 'controllerRegion'),
97
+ controllerEmail,
98
+ controllerTelephone,
99
+ relationship: requiredText(form, 'relationship'),
100
+ ownerDocument: optionalFile(formElement, 'ownerDocument'),
101
+ animalDocument: animalDocument || requiredFile(formElement, 'animalDocument'),
102
+ relationshipDocument: optionalFile(formElement, 'relationshipDocument'),
103
+ });
104
+ }
105
+ finally {
106
+ setSubmitting(false);
107
+ }
108
+ }
109
+ const disabled = busy || submitting || !formReady;
110
+ return _jsxs("section", { className: "uhcp-animal-onboarding uhcp-animal-onboarding-v2", "aria-labelledby": showHeader ? 'animal-identity-onboarding-v2-title' : undefined, "aria-label": showHeader ? undefined : copy.title, children: [showHeader ? _jsxs("header", { children: [_jsx("h2", { id: "animal-identity-onboarding-v2-title", children: copy.title }), _jsx("p", { children: copy.intro })] }) : null, _jsxs("form", { ref: formRef, onInput: event => refreshFormReady(event.currentTarget), onChange: event => refreshFormReady(event.currentTarget), onSubmit: submit, children: [_jsxs("details", { "aria-labelledby": "animal-onboarding-v2-animal-step", children: [_jsxs("summary", { id: "animal-onboarding-v2-animal-step", children: [_jsx(StepNumber, { value: 1 }), " ", copy.animalStep] }), _jsxs("div", { className: "uhcp-animal-onboarding-primary", children: [_jsxs("div", { className: "uhcp-animal-photo", children: [_jsxs("label", { className: "uhcp-animal-photo-dropzone", role: "button", "aria-label": copy.addAnimalPhoto, onDragOver: event => event.preventDefault(), onDrop: event => { event.preventDefault(); void previewAnimal(event.dataTransfer.files?.[0]); }, children: [previewUrl
111
+ ? _jsx("img", { src: previewUrl, alt: copy.animalPreview.replace('{name}', animalName || copy.animalName) })
112
+ : _jsx("span", { "aria-hidden": "true", children: "\uFF0B" }), _jsx("input", { name: "animalDocument", type: "file", accept: "image/jpeg,image/png", required: !animalDocument, "aria-label": copy.addAnimalPhoto, onChange: event => void previewAnimal(event.currentTarget.files?.[0]) })] }), previewUrl ? _jsx("button", { type: "button", className: "uhcp-animal-photo-remove", "aria-label": copy.removeAnimalPhoto, title: copy.removeAnimalPhoto, onClick: removeAnimalPhoto, children: "\u00D7" }) : null, _jsx("small", { children: copy.photoHelp }), photoError ? _jsx("p", { role: "alert", children: photoError }) : null] }), _jsxs("div", { className: "uhcp-animal-onboarding-fields", children: [_jsxs("label", { children: [copy.animalName, _jsx("input", { name: "animalName", required: true, maxLength: 80, value: animalName, onChange: event => setAnimalName(event.currentTarget.value) })] }), _jsxs("label", { children: [copy.taxonomyId, speciesOptions.length > 0
113
+ ? _jsx("select", { name: "taxonomyId", required: true, defaultValue: speciesOptions[0]?.taxonomyId, children: speciesOptions.map(option => _jsx("option", { value: option.taxonomyId, children: option.label }, option.taxonomyId)) })
114
+ : _jsx("input", { name: "taxonomyId", required: true, inputMode: "numeric", pattern: "[1-9][0-9]{0,6}", defaultValue: "9615" })] }), _jsxs("label", { children: [copy.birthDate, _jsx("input", { name: "birthDate", type: "date" })] }), _jsxs("label", { children: [copy.sex, _jsxs("select", { name: "sex", defaultValue: "unknown", children: [_jsx("option", { value: "unknown", children: copy.sexUnknown }), _jsx("option", { value: "female", children: copy.sexFemale }), _jsx("option", { value: "male", children: copy.sexMale }), _jsx("option", { value: "other", children: copy.sexOther })] })] }), _jsxs("label", { children: [copy.identifierSystem, _jsxs("select", { name: "identifierSystem", defaultValue: "urn:iso:std:iso:11784:11785", children: [_jsx("option", { value: "urn:iso:std:iso:11784:11785", children: "Microchip (ISO 11784/11785)" }), _jsx("option", { value: "https://europa.eu/pet-passport", children: "EU pet passport" }), _jsx("option", { value: "https://vetchain.app/identifier/tattoo", children: "Tattoo" })] })] }), _jsxs("label", { children: [copy.identifierValue, _jsx("input", { name: "identifierValue", required: true, maxLength: 80, autoComplete: "off" })] })] })] })] }), _jsxs("details", { "aria-labelledby": "animal-onboarding-v2-controller-step", children: [_jsxs("summary", { id: "animal-onboarding-v2-controller-step", children: [_jsx(StepNumber, { value: 2 }), " ", copy.controllerStep] }), _jsx(IdentityEntityEditorV2, { mode: "controller", showEvidence: false, countryOptions: countryOptions, regionOptionsByCountry: regionOptionsByCountry, ...(identifierTypeOptions === undefined ? {} : { identifierTypeOptions }), contactError: contactError, requireEmail: requireEmail, requireTelephone: requireTelephone, copy: {
115
+ entityType: copy.ownerKind, personEntity: copy.personOwner, organizationEntity: copy.organizationOwner,
116
+ fullLegalName: copy.controllerLegalName, country: copy.controllerCountry, regionalIdentifier: copy.regionalIdentifier,
117
+ region: copy.controllerRegion, identifierType: copy.controllerIdentifierType, identifierValue: copy.controllerIdentifierValue,
118
+ email: copy.controllerEmail, telephone: copy.controllerTelephone, relationship: copy.relationship,
119
+ responsibleParty: copy.responsibleParty ?? copy.owner, evidence: copy.evidenceStep,
120
+ verificationMethod: copy.verificationMethod, physicalInPerson: copy.physicalInPerson,
121
+ supervisedRemote: copy.supervisedRemote, electronicId: copy.electronicId, unsupervisedRemote: copy.unsupervisedRemote,
122
+ identityDocument: copy.ownerDocument, relationshipDocument: copy.relationshipDocument,
123
+ ...(copy.countryPlaceholder === undefined ? {} : { countryPlaceholder: copy.countryPlaceholder }), controllerConfirmation: copy.controllerIsLegalRepresentative,
124
+ } })] }), _jsxs("div", { className: "uhcp-animal-onboarding-actions", children: [footerActions, _jsx("button", { type: "submit", className: "uhcp-animal-onboarding-submit", "data-portal-action": submitAction, disabled: disabled, children: copy.submit })] })] })] });
125
+ }
126
+ function StepNumber({ value }) {
127
+ return _jsx("span", { className: "uhcp-identity-step-number", "aria-hidden": "true", children: value });
128
+ }
129
+ function requiredText(form, name) {
130
+ const value = form.get(name);
131
+ if (typeof value !== 'string' || !value.trim())
132
+ throw new Error(`animal_identity_${name}_required`);
133
+ return value.trim();
134
+ }
135
+ function optionalText(form, name) {
136
+ const value = form.get(name);
137
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
138
+ }
139
+ function requiredFile(form, name) {
140
+ const input = form.elements.namedItem(name);
141
+ const value = input instanceof HTMLInputElement ? input.files?.[0] : undefined;
142
+ if (!value || value.size < 1)
143
+ throw new Error(`animal_identity_${name}_required`);
144
+ return value;
145
+ }
146
+ function optionalFile(form, name) {
147
+ const input = form.elements.namedItem(name);
148
+ const value = input instanceof HTMLInputElement ? input.files?.[0] : undefined;
149
+ return value && value.size > 0 ? value : undefined;
150
+ }
151
+ async function readImageDimensions(file) {
152
+ if (typeof createImageBitmap === 'function') {
153
+ const bitmap = await createImageBitmap(file);
154
+ const dimensions = { width: bitmap.width, height: bitmap.height };
155
+ bitmap.close();
156
+ return dimensions;
157
+ }
158
+ return new Promise((resolve, reject) => {
159
+ const reader = new FileReader();
160
+ reader.onerror = () => reject(new Error('animal_photo_unreadable'));
161
+ reader.onload = () => {
162
+ const image = new Image();
163
+ image.onerror = () => reject(new Error('animal_photo_unreadable'));
164
+ image.onload = () => resolve({ width: image.naturalWidth, height: image.naturalHeight });
165
+ image.src = String(reader.result || '');
166
+ };
167
+ reader.readAsDataURL(file);
168
+ });
169
+ }
170
+ function hasAcceptedPhotoDimensions(width, height) {
171
+ const ratio = width / height;
172
+ return width >= 300 && height >= 400 && Math.abs(ratio - 3 / 4) <= 0.06;
173
+ }
174
+ //# sourceMappingURL=AnimalIdentityOnboardingV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimalIdentityOnboardingV2.js","sourceRoot":"","sources":["../../src/identity/AnimalIdentityOnboardingV2.tsx"],"names":[],"mappings":";AAAA,+FAA+F;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAkC,MAAM,OAAO,CAAA;AAMnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAA;AA4BpG,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAE9C;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,GAAG,EAAE,EAAE,cAAc,GAAG,EAAE,EAAE,sBAAsB,GAAG,EAAE,EAAE,qBAAqB,EAAE,UAAU,GAAG,IAAI,EAAE,YAAY,GAAG,KAAK,EAAE,gBAAgB,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,aAAa,EAarQ;IACA,MAAM,OAAO,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAA;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAQ,CAAA;IAC5D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,SAAS,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QACrD,IAAI,CAAC,WAAW;YAAE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAC9G,YAAY,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA;IACpF,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IAEzD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACnB,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IACrE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,KAAK,UAAU,aAAa,CAAC,IAAW;QACtC,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QACnE,aAAa,CAAC,EAAE,CAAC,CAAA;QACjB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAAC,OAAO,aAAa,CAAC,EAAE,CAAC,CAAA;QAAC,CAAC;QAChG,IAAI,IAAI,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;YAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAAC,CAAC;QACrI,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAA;YAClD,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrE,iBAAiB,CAAC,SAAS,CAAC,CAAA;gBAC5B,aAAa,CAAC,EAAE,CAAC,CAAA;gBACjB,OAAO,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,CAAC,SAAS,CAAC,CAAA;YAC5B,aAAa,CAAC,EAAE,CAAC,CAAA;YACjB,OAAO,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACnD,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU;YAAE,OAAO,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9F,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;QAC/B,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC3F,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,SAAS,iBAAiB;QACxB,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QACnE,iBAAiB,CAAC,SAAS,CAAC,CAAA;QAC5B,aAAa,CAAC,EAAE,CAAC,CAAA;QACjB,aAAa,CAAC,EAAE,CAAC,CAAA;IACnB,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,KAAiC;QACrD,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAA;QACtC,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;QAC7D,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;QACrE,IAAI,CAAC,eAAe,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAC/F,eAAe,CAAC,EAAE,CAAC,CAAA;QACnB,aAAa,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC;gBACb,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC1C,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAyC;gBACtE,gBAAgB,EAAE,YAAY,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBACxD,eAAe,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBACtD,mBAAmB,EAAE,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC;gBAC9D,wBAAwB,EAAE,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC;gBACxE,yBAAyB,EAAE,YAAY,CAAC,IAAI,EAAE,2BAA2B,CAAC;gBAC1E,iBAAiB,EAAE,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,WAAW,EAAE;gBACxE,cAAc,EAAE,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAA8B;gBACjF,gBAAgB,EAAE,YAAY,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBACxD,eAAe;gBACf,mBAAmB;gBACnB,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,cAAc,CAAiC;gBAChF,aAAa,EAAE,YAAY,CAAC,WAAW,EAAE,eAAe,CAAC;gBACzD,cAAc,EAAE,cAAc,IAAI,YAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBAC7E,oBAAoB,EAAE,YAAY,CAAC,WAAW,EAAE,sBAAsB,CAAC;aACxE,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,IAAI,CAAC,SAAS,CAAA;IACjD,OAAO,mBAAS,SAAS,EAAC,kDAAkD,qBAAkB,UAAU,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,SAAS,gBAAc,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,aAC1M,UAAU,CAAC,CAAC,CAAC,6BACZ,aAAI,EAAE,EAAC,qCAAqC,YAAE,IAAI,CAAC,KAAK,GAAM,EAC9D,sBAAI,IAAI,CAAC,KAAK,GAAK,IACZ,CAAC,CAAC,CAAC,IAAI,EAChB,gBAAM,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,aACrJ,sCAAyB,kCAAkC,aACzD,mBAAS,EAAE,EAAC,kCAAkC,aAAC,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,GAAG,OAAE,IAAI,CAAC,UAAU,IAAW,EAClG,eAAK,SAAS,EAAC,gCAAgC,aAC7C,eAAK,SAAS,EAAC,mBAAmB,aAChC,iBAAO,SAAS,EAAC,4BAA4B,EAAC,IAAI,EAAC,QAAQ,gBAAa,IAAI,CAAC,cAAc,EACzF,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,aAC1I,UAAU;wDACT,CAAC,CAAC,cAAK,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG;wDACnG,CAAC,CAAC,8BAAkB,MAAM,uBAAS,EACrC,gBAAO,IAAI,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,sBAAsB,EAAC,QAAQ,EAAE,CAAC,cAAc,gBAAc,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IACrM,EACP,UAAU,CAAC,CAAC,CAAC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,0BAA0B,gBAAa,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,uBAAY,CAAC,CAAC,CAAC,IAAI,EACzL,0BAAQ,IAAI,CAAC,SAAS,GAAS,EAC9B,UAAU,CAAC,CAAC,CAAC,YAAG,IAAI,EAAC,OAAO,YAAE,UAAU,GAAK,CAAC,CAAC,CAAC,IAAI,IACjD,EACN,eAAK,SAAS,EAAC,+BAA+B,aAC5C,4BAAQ,IAAI,CAAC,UAAU,EAAC,gBAAO,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAQ,EAClK,4BAAQ,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;wDAChD,CAAC,CAAC,iBAAQ,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,YAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAgC,KAAK,EAAE,MAAM,CAAC,UAAU,YAAG,MAAM,CAAC,KAAK,IAA1D,MAAM,CAAC,UAAU,CAAmD,CAAC,GAAU;wDAC5M,CAAC,CAAC,gBAAO,IAAI,EAAC,YAAY,EAAC,QAAQ,QAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAC,iBAAiB,EAAC,YAAY,EAAC,MAAM,GAAE,IAAS,EAClH,4BAAQ,IAAI,CAAC,SAAS,EAAC,gBAAO,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,GAAE,IAAQ,EACpE,4BAAQ,IAAI,CAAC,GAAG,EAAC,kBAAQ,IAAI,EAAC,KAAK,EAAC,YAAY,EAAC,SAAS,aAAC,iBAAQ,KAAK,EAAC,SAAS,YAAE,IAAI,CAAC,UAAU,GAAU,EAAA,iBAAQ,KAAK,EAAC,QAAQ,YAAE,IAAI,CAAC,SAAS,GAAU,EAAA,iBAAQ,KAAK,EAAC,MAAM,YAAE,IAAI,CAAC,OAAO,GAAU,EAAA,iBAAQ,KAAK,EAAC,OAAO,YAAE,IAAI,CAAC,QAAQ,GAAU,IAAS,IAAQ,EACxQ,4BAAQ,IAAI,CAAC,gBAAgB,EAAC,kBAAQ,IAAI,EAAC,kBAAkB,EAAC,YAAY,EAAC,6BAA6B,aAAC,iBAAQ,KAAK,EAAC,6BAA6B,4CAAqC,EAAA,iBAAQ,KAAK,EAAC,gCAAgC,gCAAyB,EAAA,iBAAQ,KAAK,EAAC,wCAAwC,uBAAgB,IAAS,IAAQ,EACvV,4BAAQ,IAAI,CAAC,eAAe,EAAC,gBAAO,IAAI,EAAC,iBAAiB,EAAC,QAAQ,QAAC,SAAS,EAAE,EAAE,EAAE,YAAY,EAAC,KAAK,GAAE,IAAQ,IAC3G,IACF,IACE,EACV,sCAAyB,sCAAsC,aAC7D,mBAAS,EAAE,EAAC,sCAAsC,aAAC,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,GAAG,OAAE,IAAI,CAAC,cAAc,IAAW,EAC1G,KAAC,sBAAsB,IAAC,IAAI,EAAC,YAAY,EAAC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,sBAAsB,EAAE,sBAAsB,KAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE;oCAC3T,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;oCACtG,aAAa,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oCACrH,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,wBAAwB,EAAE,eAAe,EAAE,IAAI,CAAC,yBAAyB;oCAC7H,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY;oCACjG,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY;oCAClF,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oCACpF,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oCACrH,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;oCACrF,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,+BAA+B;iCAChK,GAAG,IACI,EACV,eAAK,SAAS,EAAC,gCAAgC,aAAE,aAAa,EAAC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,wBAAqB,YAAY,EAAE,QAAQ,EAAE,QAAQ,YAAG,IAAI,CAAC,MAAM,GAAU,IAAM,IAC5M,IACC,CAAA;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAA+B;IACxD,OAAO,eAAM,SAAS,EAAC,2BAA2B,iBAAa,MAAM,YAAE,KAAK,GAAQ,CAAA;AACtF,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,WAAW,CAAC,CAAA;IACnG,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,WAAW,CAAC,CAAA;IACjF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACpD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAU;IAC3C,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;QACjE,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;QAC/B,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;QACnE,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;YACzB,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;YAClE,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAA;YACxF,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QACzC,CAAC,CAAA;QACD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa,EAAE,MAAc;IAC/D,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;IAC5B,OAAO,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAA;AACzE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /* SOS current-subject presentation; host-authorized state and neutral theme tokens only. */
2
+ .uhcp-current-subject { margin-inline-start:auto; position:relative; }
3
+ .uhcp-current-subject-trigger { align-items:center; background:var(--uhcp-surface, #fff); border:1px solid var(--uhcp-border, #d8e0e8); border-radius:999px; color:inherit; cursor:pointer; display:flex; gap:.55rem; min-height:2.75rem; padding:.3rem .7rem .3rem .3rem; }
4
+ .uhcp-current-subject-avatar { align-items:center; aspect-ratio:1; background:var(--uhcp-accent-soft, #e9f3ff); border-radius:50%; display:flex; flex:0 0 auto; height:2.15rem; justify-content:center; object-fit:cover; width:2.15rem; }
5
+ .uhcp-current-subject-initial { font-size:.9rem; font-weight:850; }
6
+ .uhcp-current-subject-trigger > span:nth-child(2) { font-size:.88rem; font-weight:800; max-width:10rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
7
+ .uhcp-current-subject-menu { background:var(--uhcp-surface, #fff); border:1px solid var(--uhcp-border, #d8e0e8); border-radius:1rem; box-shadow:0 18px 50px rgb(20 42 66 / 18%); display:grid; gap:.75rem; inset-inline-end:0; min-width:17rem; padding:1rem; position:absolute; top:calc(100% + .55rem); z-index:60; }
8
+ .uhcp-current-subject-summary { align-items:center; display:flex; gap:.75rem; }
9
+ .uhcp-current-subject-summary > span { display:grid; min-width:0; }
10
+ .uhcp-current-subject-summary small,.uhcp-current-subject-summary span span { color:var(--uhcp-muted, #637083); }
11
+ .uhcp-current-subject-menu > button { background:transparent; border:1px solid var(--uhcp-border, #d8e0e8); border-radius:.75rem; color:inherit; cursor:pointer; font:inherit; font-weight:750; padding:.7rem .9rem; text-align:start; }
@@ -0,0 +1,64 @@
1
+ /* SOS-owned animal/subject identity composition. Host state and neutral compatibility tokens only. */
2
+ .uhcp-animal-identity-readonly { align-items:start; display:grid; gap:1rem; grid-template-columns:minmax(8rem,12rem) minmax(0,1fr); }
3
+ .uhcp-animal-identity-photo { aspect-ratio:3/4; border:1px solid var(--uhcp-border); border-radius:1rem; display:block; object-fit:cover; width:100%; }
4
+ @media (max-width:620px) { .uhcp-animal-identity-readonly { grid-template-columns:minmax(0,1fr); } .uhcp-animal-identity-photo { max-width:12rem; } }
5
+ .uhcp-identity-step-number {
6
+ align-items: center;
7
+ background: var(--uhcp-surface-accent);
8
+ border: 1px solid color-mix(in srgb, var(--uhcp-turquoise) 42%, var(--uhcp-border));
9
+ border-radius: 999px;
10
+ color: var(--uhcp-turquoise);
11
+ display: flex;
12
+ font-weight: 900;
13
+ height: 2.25rem;
14
+ justify-content: center;
15
+ position: relative;
16
+ width: 2.25rem;
17
+ z-index: 1;
18
+ }
19
+ .uhcp-identity-status { border-radius: 999px; font-size: .72rem; font-weight: 800; padding: .35rem .6rem; }
20
+ .uhcp-identity-status-verified { background: color-mix(in srgb, var(--uhcp-emerald) 15%, transparent); color: var(--uhcp-emerald); }
21
+ .uhcp-identity-status-pending { background: color-mix(in srgb, var(--uhcp-attention) 18%, transparent); color: color-mix(in srgb, var(--uhcp-attention) 72%, var(--uhcp-text)); }
22
+ .uhcp-identity-status-rejected { background: color-mix(in srgb, #c64747 14%, transparent); color: #c64747; }
23
+ .uhcp-animal-onboarding { display: grid; gap: 1.25rem; }
24
+ .uhcp-animal-onboarding > header p { color: var(--uhcp-muted, #5f6875); margin: .35rem 0 0; }
25
+ .uhcp-animal-onboarding form { display: grid; gap: 1rem; }
26
+ .uhcp-animal-onboarding fieldset { border: 1px solid var(--uhcp-border, #d9dee7); border-radius: 1rem; margin: 0; padding: 1rem; }
27
+ .uhcp-animal-onboarding legend { align-items: center; display: flex; font-weight: 800; gap: .55rem; padding: 0 .35rem; }
28
+ .uhcp-animal-onboarding-fields { display: grid; gap: .85rem; grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); }
29
+ .uhcp-animal-onboarding-fields label { display: grid; gap: .35rem; }
30
+ .uhcp-animal-onboarding-fields input, .uhcp-animal-onboarding-fields select { box-sizing: border-box; min-height: 2.8rem; width: 100%; }
31
+ .uhcp-animal-onboarding-submit { justify-self: start; }
32
+ .uhcp-animal-onboarding-v2 details { background:var(--uhcp-surface, #fff); border:1px solid var(--uhcp-border, #d9dee7); border-radius:1rem; overflow:hidden; }
33
+ .uhcp-animal-onboarding-v2 summary { align-items:center; cursor:pointer; display:flex; font-weight:850; gap:.55rem; list-style:none; padding:1rem; }
34
+ .uhcp-animal-onboarding-v2 summary::-webkit-details-marker { display:none; }
35
+ .uhcp-animal-onboarding-v2 summary::after { content:'⌄'; margin-inline-start:auto; transition:transform .18s ease; }
36
+ .uhcp-animal-onboarding-v2 details[open] summary::after { transform:rotate(180deg); }
37
+ .uhcp-animal-onboarding-v2 details > .uhcp-animal-onboarding-fields,
38
+ .uhcp-animal-onboarding-v2 details > .uhcp-animal-onboarding-primary,
39
+ .uhcp-animal-onboarding-v2 details > .uhcp-identity-entity-editor { border-top:1px solid var(--uhcp-border, #d9dee7); padding:1rem; }
40
+ .uhcp-animal-onboarding-primary { align-items:start; display:grid; gap:1rem; grid-template-columns:minmax(10rem, 14rem) minmax(0, 1fr); }
41
+ .uhcp-animal-photo { display:grid; gap:.45rem; position:relative; }
42
+ .uhcp-animal-photo-dropzone { align-items:center; aspect-ratio:1; background:var(--uhcp-accent-soft, #e9f3ff); border:2px dashed color-mix(in srgb, var(--uhcp-turquoise, #1597a6) 58%, var(--uhcp-border, #d9dee7)); border-radius:1.25rem; cursor:pointer; display:flex; font-size:4rem; font-weight:850; justify-content:center; overflow:hidden; width:100%; }
43
+ .uhcp-animal-photo-dropzone:hover,.uhcp-animal-photo-dropzone:focus-within { background:color-mix(in srgb, var(--uhcp-accent-soft, #e9f3ff) 70%, var(--uhcp-turquoise, #1597a6)); border-style:solid; }
44
+ .uhcp-animal-photo-dropzone img { height:100%; object-fit:cover; width:100%; }
45
+ .uhcp-animal-photo-dropzone input { height:1px; opacity:0; overflow:hidden; position:absolute; width:1px; }
46
+ .uhcp-animal-photo-remove { background:#b42318; border:2px solid #fff; border-radius:999px; block-size:2.25rem; color:#fff; cursor:pointer; font-size:1.45rem; inline-size:2.25rem; inset-block-start:.65rem; inset-inline-end:.65rem; line-height:1; position:absolute; }
47
+ .uhcp-animal-photo small { color:var(--uhcp-muted, #5f6875); }
48
+ @media (max-width: 42rem) { .uhcp-animal-onboarding-primary { grid-template-columns:1fr; } .uhcp-animal-photo { justify-self:center; max-width:15rem; width:100%; } }
49
+ .uhcp-subject-identity-card { border: 1px solid var(--uhcp-border, #d9dee7); border-radius: 1rem; display: grid; gap: 1rem; padding: 1rem; }
50
+ .uhcp-subject-identity-card > header { align-items: center; display: grid; gap: .8rem; grid-template-columns: auto 1fr auto; }
51
+ .uhcp-subject-identity-edit { align-items: center; background: var(--uhcp-action-soft, #e8f3ff); border: 1px solid var(--uhcp-action-end, #2563a9); border-radius: 50%; color: var(--uhcp-action-end, #2563a9); cursor: pointer; display: inline-flex; font: inherit; font-size: 1.25rem; height: 2.75rem; justify-content: center; width: 2.75rem; }
52
+ .uhcp-subject-identity-edit:hover, .uhcp-subject-identity-edit:focus-visible { background: var(--uhcp-action-end, #2563a9); color: #fff; }
53
+ .uhcp-subject-identity-card img, .uhcp-subject-identity-avatar { align-items: center; aspect-ratio: 1; border-radius: 50%; display: flex; height: 3.5rem; justify-content: center; object-fit: cover; width: 3.5rem; }
54
+ .uhcp-subject-identity-avatar { background: var(--uhcp-accent-soft, #e9f3ff); font-size: 1.4rem; font-weight: 850; }
55
+ .uhcp-subject-identity-card h3 { margin: .15rem 0 0; }
56
+ .uhcp-subject-identity-card dl { display: grid; gap: .65rem; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); margin: 0; }
57
+ .uhcp-subject-identity-card dt { color: var(--uhcp-muted, #5f6875); font-size: .8rem; }
58
+ .uhcp-subject-identity-card dd { font-weight: 700; margin: .15rem 0 0; overflow-wrap: anywhere; }
59
+ .uhcp-subject-identity-relationship { align-items: center; background: var(--uhcp-surface-soft, #f6f8fb); border-radius: .8rem; display: grid; gap: .25rem; padding: .8rem; }
60
+ .uhcp-animal-onboarding-actions { align-items:center; display:flex; flex-wrap:wrap; gap:.75rem; justify-content:flex-end; }
61
+ .uhcp-animal-identity-readonly-grid { display:grid; gap:1rem; grid-template-columns:repeat(2,minmax(0,1fr)); margin:0; padding:1rem; }
62
+ .uhcp-animal-identity-readonly-grid div { background:var(--uhcp-surface,#fff); border:1px solid var(--uhcp-border,#cbd5e1); border-radius:.8rem; padding:.8rem; }
63
+ .uhcp-animal-identity-readonly-grid dt { color:var(--uhcp-muted,#475569); font-size:.82rem; font-weight:700; }
64
+ .uhcp-animal-identity-readonly-grid dd { color:var(--uhcp-text,#0f172a); font-weight:750; margin:.25rem 0 0; overflow-wrap:anywhere; }