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,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ import { composeFhirDateTimeFromLocalParts, formatFhirTemporalForLocale, isFhirTemporalWithinRange, splitFhirDateTimeForInput, } from 'fhir-data-utils-ts/fhir-temporal-presentation';
4
+ export function ClinicalDateTimeFields({ value, onChange, labels, timeZone, now = new Date(), includeSeconds = true, }) {
5
+ const current = splitFhirDateTimeForInput(now, timeZone);
6
+ const time = includeSeconds ? current.time : current.time.slice(0, 5);
7
+ return (_jsxs("div", { className: "uhcp-clinical-date-time-fields", children: [_jsxs("label", { children: [labels.date, _jsx("input", { type: "date", value: value.date, onChange: (event) => onChange({ ...value, date: event.target.value }) })] }), _jsx("button", { type: "button", title: labels.useToday, "aria-label": labels.useToday, onClick: () => onChange({ ...value, date: current.date }), children: "\u25C9" }), _jsxs("label", { children: [labels.time, _jsx("input", { type: "time", step: includeSeconds ? 1 : 60, value: value.time, onChange: (event) => onChange({ ...value, time: event.target.value }) })] }), _jsx("button", { type: "button", title: labels.useCurrentTime, "aria-label": labels.useCurrentTime, onClick: () => onChange({ ...value, time }), children: "\u25F7" })] }));
8
+ }
9
+ export function ClinicalTimeline({ entries, facets = [], locale, timeZone, labels, now = new Date() }) {
10
+ const [selectedFacets, setSelectedFacets] = useState({});
11
+ const [from, setFrom] = useState({ date: '', time: '' });
12
+ const [to, setTo] = useState({ date: '', time: '' });
13
+ const [requestedIndex, setRequestedIndex] = useState(0);
14
+ const [showAll, setShowAll] = useState(false);
15
+ const current = splitFhirDateTimeForInput(now, timeZone);
16
+ const filtered = useMemo(() => [...entries]
17
+ .filter((entry) => matchesEverySelectedFacet(entry, selectedFacets))
18
+ .filter((entry) => {
19
+ const start = composeOptionalBoundary(from, timeZone, 'from');
20
+ const end = composeOptionalBoundary(to, timeZone, 'to');
21
+ return isFhirTemporalWithinRange(entry.dateTime, { ...(start === undefined ? {} : { from: start }), ...(end === undefined ? {} : { to: end }) }, now);
22
+ })
23
+ .sort((left, right) => new Date(right.dateTime).getTime() - new Date(left.dateTime).getTime()), [entries, from, now, selectedFacets, timeZone, to]);
24
+ const index = Math.min(requestedIndex, Math.max(filtered.length - 1, 0));
25
+ const selected = filtered[index];
26
+ return (_jsxs("section", { className: "uhcp-clinical-timeline", children: [_jsxs("div", { className: "uhcp-clinical-filters", children: [_jsxs("div", { className: "uhcp-clinical-range", children: [_jsx(DateTimeBoundary, { label: labels.from, labels: labels, current: current, value: from, onChange: (value) => { setFrom(value); setRequestedIndex(0); } }), _jsx(DateTimeBoundary, { label: labels.to, labels: labels, current: current, value: to, onChange: (value) => { setTo(value); setRequestedIndex(0); } })] }), facets.map((facet) => _jsxs("fieldset", { children: [_jsx("legend", { children: facet.label }), facet.options.map((option) => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: selectedFacets[facet.id]?.includes(option.id) ?? false, onChange: () => {
27
+ setSelectedFacets((current) => toggleFacet(current, facet.id, option.id));
28
+ setRequestedIndex(0);
29
+ } }), option.label] }, option.id))] }, facet.id))] }), selected ? _jsxs(_Fragment, { children: [_jsxs("article", { className: "uhcp-clinical-timeline-card", children: [_jsx("h4", { children: selected.title }), _jsx("time", { dateTime: selected.dateTime, children: formatFhirTemporalForLocale(selected.dateTime, locale, { timeZone, includeTime: true }) }), selected.content] }), _jsxs("nav", { className: "uhcp-clinical-timeline-navigation", "aria-label": `${selected.title} history`, children: [_jsx("button", { type: "button", disabled: index === 0, onClick: () => setRequestedIndex((value) => Math.max(0, value - 1)), children: labels.previous }), _jsxs("output", { "aria-live": "polite", children: [index + 1, " / ", filtered.length] }), _jsx("button", { type: "button", disabled: index >= filtered.length - 1, onClick: () => setRequestedIndex((value) => value + 1), children: labels.next }), _jsx("button", { type: "button", "aria-expanded": showAll, onClick: () => setShowAll((value) => !value), children: labels.showAll })] }), showAll ? _jsx("ol", { className: "uhcp-clinical-timeline-list", children: filtered.map((entry) => _jsxs("li", { children: [_jsx("strong", { children: entry.title }), _jsx("time", { dateTime: entry.dateTime, children: formatFhirTemporalForLocale(entry.dateTime, locale, { timeZone, includeTime: true }) })] }, entry.id)) }) : null] }) : _jsx("p", { className: "uhcp-clinical-empty", children: labels.empty })] }));
30
+ }
31
+ function DateTimeBoundary({ label, labels, current, value, onChange }) {
32
+ return _jsxs("fieldset", { children: [_jsx("legend", { children: label }), _jsxs("label", { children: [labels.date, _jsx("input", { "aria-label": `${label} ${labels.date}`, type: "date", value: value.date, onChange: (event) => onChange({ ...value, date: event.target.value }) })] }), _jsx("button", { type: "button", title: `${labels.useToday} (${label})`, "aria-label": `${labels.useToday} (${label})`, onClick: () => onChange({ ...value, date: current.date }), children: "\u25C9" }), _jsxs("label", { children: [labels.time, _jsx("input", { "aria-label": `${label} ${labels.time}`, type: "time", step: "1", value: value.time, onChange: (event) => onChange({ ...value, time: event.target.value }) })] }), _jsx("button", { type: "button", title: `${labels.useCurrentTime} (${label})`, "aria-label": `${labels.useCurrentTime} (${label})`, onClick: () => onChange({ ...value, time: current.time }), children: "\u25F7" })] });
33
+ }
34
+ function composeOptionalBoundary(parts, timeZone, edge) {
35
+ if (!parts.date)
36
+ return undefined;
37
+ const defaultTime = edge === 'from' ? '00:00:00' : '23:59:59';
38
+ return composeFhirDateTimeFromLocalParts({ date: parts.date, time: parts.time || defaultTime, timeZone });
39
+ }
40
+ function matchesEverySelectedFacet(entry, selected) {
41
+ return Object.entries(selected).every(([facetId, selectedOptions]) => selectedOptions.length === 0 || selectedOptions.some((option) => entry.facets?.[facetId]?.includes(option)));
42
+ }
43
+ function toggleFacet(current, facetId, optionId) {
44
+ const existing = current[facetId] ?? [];
45
+ const next = existing.includes(optionId) ? existing.filter((id) => id !== optionId) : [...existing, optionId];
46
+ return { ...current, [facetId]: next };
47
+ }
48
+ //# sourceMappingURL=ClinicalTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClinicalTimeline.js","sourceRoot":"","sources":["../../src/clinical/ClinicalTimeline.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ClinicalArtifactEditorCopyV2, type ClinicalArtifactEditorV2Props } from './ClinicalArtifactEditorV2.js';
2
+ export declare const ImmunizationArtifactEditorV2Claim: Readonly<{
3
+ readonly NextDoseDate: "Immunization.next-dose-date";
4
+ }>;
5
+ export type ImmunizationArtifactEditorCopyV2 = ClinicalArtifactEditorCopyV2 & Readonly<{
6
+ doseSequenceInvalid: string;
7
+ seriesDosesInvalid: string;
8
+ }>;
9
+ export type ImmunizationArtifactEditorV2Props = Omit<ClinicalArtifactEditorV2Props, 'fields' | 'initialVisibleClaims' | 'initialClaims' | 'validate' | 'buildRelatedEntries' | 'copy'> & Readonly<{
10
+ copy: ImmunizationArtifactEditorCopyV2;
11
+ }>;
12
+ /** Demo-first Immunization specialization over the reusable progressive V2 shell. */
13
+ /** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
14
+ export declare function ImmunizationArtifactEditorV2({ copy, locale, ...props }: ImmunizationArtifactEditorV2Props): import("react").JSX.Element;
15
+ //# sourceMappingURL=ImmunizationArtifactEditorV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImmunizationArtifactEditorV2.d.ts","sourceRoot":"","sources":["../../src/clinical/ImmunizationArtifactEditorV2.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAEnC,MAAM,+BAA+B,CAAA;AAEtC,eAAO,MAAM,iCAAiC;;EAEnC,CAAA;AAEX,MAAM,MAAM,gCAAgC,GAAG,4BAA4B,GAAG,QAAQ,CAAC;IACrF,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAC,CAAA;AAEF,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAAC,6BAA6B,EAAE,QAAQ,GAAG,sBAAsB,GAAG,eAAe,GAAG,UAAU,GAAG,qBAAqB,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC;IAChM,IAAI,EAAE,gCAAgC,CAAA;CACvC,CAAC,CAAA;AAEF,qFAAqF;AACrF,yFAAyF;AACzF,wBAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,MAAa,EAAE,GAAG,KAAK,EAAE,EAAE,iCAAiC,+BAsChH"}
@@ -0,0 +1,62 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ImmunizationClaim, buildImmunizationRecommendationFlatEntry, clinicalArtifactCodedOptionsForClaim, validateImmunizationDoseSeries, } from 'fhir-data-utils-ts';
4
+ import { ClinicalArtifactEditorV2, } from './ClinicalArtifactEditorV2.js';
5
+ export const ImmunizationArtifactEditorV2Claim = Object.freeze({
6
+ NextDoseDate: 'Immunization.next-dose-date',
7
+ });
8
+ /** Demo-first Immunization specialization over the reusable progressive V2 shell. */
9
+ /** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
10
+ export function ImmunizationArtifactEditorV2({ copy, locale = 'en', ...props }) {
11
+ const fields = immunizationFields(locale);
12
+ return _jsx(ClinicalArtifactEditorV2, { ...props, locale: locale, copy: copy, fields: fields, initialVisibleClaims: [ImmunizationClaim.Status, ImmunizationClaim.VaccineCodeText, ImmunizationClaim.Date], initialClaims: {
13
+ [ImmunizationClaim.Status]: 'completed',
14
+ [ImmunizationClaim.Patient]: props.authoringContext.subjectReference,
15
+ [ImmunizationClaim.Performer]: props.authoringContext.dataAuthorReference,
16
+ }, validate: claims => {
17
+ try {
18
+ validateImmunizationDoseSeries(claims[ImmunizationClaim.DoseSequence], claims[ImmunizationClaim.SeriesDoses]);
19
+ }
20
+ catch (reason) {
21
+ if (reason instanceof Error && reason.message === 'immunization_dose_sequence_invalid')
22
+ throw new TypeError(copy.doseSequenceInvalid);
23
+ throw new TypeError(copy.seriesDosesInvalid);
24
+ }
25
+ }, buildRelatedEntries: (claims, draftId) => {
26
+ const nextDoseDate = claims[ImmunizationArtifactEditorV2Claim.NextDoseDate];
27
+ const vaccineToken = claims[ImmunizationClaim.VaccineCode];
28
+ if (!nextDoseDate || !vaccineToken)
29
+ return [];
30
+ const separator = vaccineToken.indexOf('|');
31
+ if (separator <= 0 || separator === vaccineToken.length - 1)
32
+ return [];
33
+ const display = claims[ImmunizationClaim.VaccineCodeDisplay];
34
+ const text = claims[ImmunizationClaim.VaccineCodeText];
35
+ const recommendation = buildImmunizationRecommendationFlatEntry({
36
+ entryId: `${draftId}-recommendation`, immunizationEntryId: draftId,
37
+ subjectReference: props.authoringContext.subjectReference,
38
+ recommendationDate: props.authoringContext.createdAt,
39
+ nextDoseDate,
40
+ vaccineCode: { system: vaccineToken.slice(0, separator), code: vaccineToken.slice(separator + 1), ...(display === undefined ? {} : { display }), ...(text === undefined ? {} : { text }) },
41
+ });
42
+ return [recommendation];
43
+ } });
44
+ }
45
+ function immunizationFields(locale) {
46
+ return Object.freeze([
47
+ { claim: ImmunizationClaim.Status, kind: 'coded-select', required: true, options: clinicalArtifactCodedOptionsForClaim(ImmunizationClaim.Status, locale).map(option => ({ value: option.code, label: option.label })) },
48
+ { claim: ImmunizationClaim.VaccineCodeText, textClaim: ImmunizationClaim.VaccineCodeText, codeClaim: ImmunizationClaim.VaccineCode, displayClaim: ImmunizationClaim.VaccineCodeDisplay, kind: 'coded-concept', required: true },
49
+ { claim: ImmunizationClaim.Date, kind: 'date-time', required: true },
50
+ { claim: ImmunizationClaim.TargetDiseaseText, textClaim: ImmunizationClaim.TargetDiseaseText, codeClaim: ImmunizationClaim.TargetDisease, displayClaim: ImmunizationClaim.TargetDiseaseDisplay, kind: 'coded-concept' },
51
+ { claim: ImmunizationClaim.LotNumber, kind: 'text' },
52
+ { claim: ImmunizationClaim.DoseSequence, kind: 'positive-integer' },
53
+ { claim: ImmunizationClaim.SeriesDoses, kind: 'positive-integer' },
54
+ { claim: ImmunizationClaim.Series, kind: 'text' },
55
+ { claim: ImmunizationArtifactEditorV2Claim.NextDoseDate, kind: 'date', transient: true },
56
+ { claim: ImmunizationClaim.Route, codeClaim: ImmunizationClaim.Route, displayClaim: ImmunizationClaim.RouteDisplay, kind: 'coded-concept' },
57
+ { claim: ImmunizationClaim.Site, codeClaim: ImmunizationClaim.Site, displayClaim: ImmunizationClaim.SiteDisplay, kind: 'coded-concept' },
58
+ { claim: ImmunizationClaim.Note, kind: 'text' },
59
+ { claim: '__documents', kind: 'documents', transient: true },
60
+ ]);
61
+ }
62
+ //# sourceMappingURL=ImmunizationArtifactEditorV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImmunizationArtifactEditorV2.js","sourceRoot":"","sources":["../../src/clinical/ImmunizationArtifactEditorV2.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,iBAAiB,EACjB,wCAAwC,EACxC,oCAAoC,EACpC,8BAA8B,GAC/B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,wBAAwB,GAIzB,MAAM,+BAA+B,CAAA;AAEtC,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7D,YAAY,EAAE,6BAA6B;CACnC,CAAC,CAAA;AAWX,qFAAqF;AACrF,yFAAyF;AACzF,MAAM,UAAU,4BAA4B,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,EAAqC;IAC/G,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,KAAC,wBAAwB,OAC1B,KAAK,EACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAC3G,aAAa,EAAE;YACb,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,WAAW;YACvC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB;YACpE,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,mBAAmB;SAC1E,EACD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACjB,IAAI,CAAC;gBAAC,8BAA8B,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAA;YAAC,CAAC;YACrH,OAAO,MAAM,EAAE,CAAC;gBACd,IAAI,MAAM,YAAY,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,oCAAoC;oBAAE,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;gBACrI,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC,EACD,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACvC,MAAM,YAAY,GAAG,MAAM,CAAC,iCAAiC,CAAC,YAAY,CAAC,CAAA;YAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC1D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY;gBAAE,OAAO,EAAE,CAAA;YAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAA;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAA;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAA;YACtD,MAAM,cAAc,GAAG,wCAAwC,CAAC;gBAC9D,OAAO,EAAE,GAAG,OAAO,iBAAiB,EAAE,mBAAmB,EAAE,OAAO;gBAClE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB;gBACzD,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,CAAC,SAAS;gBACpD,YAAY;gBACZ,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;aAC3L,CAAC,CAAA;YACF,OAAO,CAAC,cAAc,CAAC,CAAA;QACzB,CAAC,GACD,CAAA;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,oCAAoC,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;QACvN,EAAE,KAAK,EAAE,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE,YAAY,EAAE,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/N,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpE,EAAE,KAAK,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE;QACvN,EAAE,KAAK,EAAE,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;QACpD,EAAE,KAAK,EAAE,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;QACnE,EAAE,KAAK,EAAE,iBAAiB,CAAC,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE;QAClE,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;QACjD,EAAE,KAAK,EAAE,iCAAiC,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACxF,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;QAC3I,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE;QACxI,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QAC/C,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE;KAChB,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type ClinicalResourceBundleLike, type ClinicalSectionView, type ClinicalTerminologyTranslationInput } from 'fhir-data-utils-ts/clinical-resource-view';
3
+ import { type ClinicalTimelineLabels } from './ClinicalTimeline.js';
4
+ export type IpsBundleSummaryProps = Readonly<{
5
+ bundle: ClinicalResourceBundleLike;
6
+ locale?: string;
7
+ timeZone?: string;
8
+ translateCode?: (input: ClinicalTerminologyTranslationInput) => string | undefined;
9
+ emptyLabel: string;
10
+ noSectionsLabel?: string;
11
+ /** Omits Composition sections that resolve to no resources. */
12
+ hideEmptySections?: boolean;
13
+ sectionTitle?: (section: ClinicalSectionView) => string;
14
+ resourceTypeLabel?: (resourceType: string) => string;
15
+ sectionActions?: (section: ClinicalSectionView) => ReactNode;
16
+ /** Resource-owned actions such as edit or delete, rendered inside that resource card. */
17
+ resourceActions?: (section: ClinicalSectionView, resource: ClinicalSectionView['resources'][number]) => ReactNode;
18
+ timeline?: Readonly<{
19
+ labels: ClinicalTimelineLabels;
20
+ sectionFacetLabel: string;
21
+ resourceTypeFacetLabel: string;
22
+ }>;
23
+ }>;
24
+ /**
25
+ * Renders every section declared by an IPS Composition and the cards referenced
26
+ * by each section.
27
+ *
28
+ * The shared clinical reader owns Bundle traversal, section placement and card
29
+ * projection. `Composition.section.entry` is authoritative for placement;
30
+ * native FHIR fields or canonical `resource.meta.claims` provide card content.
31
+ * This component performs no ingestion, persistence or GW call.
32
+ */
33
+ export declare function IpsBundleSummary({ bundle, locale, timeZone, translateCode, emptyLabel, noSectionsLabel, hideEmptySections, sectionTitle, resourceTypeLabel, sectionActions, resourceActions, timeline, }: IpsBundleSummaryProps): import("react").JSX.Element;
34
+ //# sourceMappingURL=IpsBundleSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpsBundleSummary.d.ts","sourceRoot":"","sources":["../../src/clinical/IpsBundleSummary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mCAAmC,EACzC,MAAM,2CAA2C,CAAA;AAElD,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEjH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,MAAM,EAAE,0BAA0B,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,mCAAmC,KAAK,MAAM,GAAG,SAAS,CAAA;IAClF,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,MAAM,CAAA;IACvD,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,SAAS,CAAA;IAC5D,yFAAyF;IACzF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAA;IACjH,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAClB,MAAM,EAAE,sBAAsB,CAAA;QAC9B,iBAAiB,EAAE,MAAM,CAAA;QACzB,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAC,CAAA;CACH,CAAC,CAAA;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,QAAQ,EACR,aAAa,EACb,UAAU,EACV,eAA4B,EAC5B,iBAAyB,EACzB,YAAyC,EACzC,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,QAAQ,GACT,EAAE,qBAAqB,+BAwEvB"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { toClinicalSectionViews, } from 'fhir-data-utils-ts/clinical-resource-view';
3
+ import { ClinicalSectionSummary } from './ClinicalSectionSummary.js';
4
+ import { ClinicalTimeline } from './ClinicalTimeline.js';
5
+ /**
6
+ * Renders every section declared by an IPS Composition and the cards referenced
7
+ * by each section.
8
+ *
9
+ * The shared clinical reader owns Bundle traversal, section placement and card
10
+ * projection. `Composition.section.entry` is authoritative for placement;
11
+ * native FHIR fields or canonical `resource.meta.claims` provide card content.
12
+ * This component performs no ingestion, persistence or GW call.
13
+ */
14
+ export function IpsBundleSummary({ bundle, locale, timeZone, translateCode, emptyLabel, noSectionsLabel = emptyLabel, hideEmptySections = false, sectionTitle = (section) => section.title, resourceTypeLabel, sectionActions, resourceActions, timeline, }) {
15
+ const sections = toClinicalSectionViews(bundle, { ...(locale === undefined ? {} : { locale }), ...(translateCode === undefined ? {} : { translateCode }) })
16
+ .filter(section => !hideEmptySections || section.resources.length > 0);
17
+ const nativeResources = new Map((bundle.entry ?? bundle.data ?? []).flatMap((entry) => entry.fullUrl && entry.resource ? [[entry.fullUrl, entry.resource]] : []));
18
+ if (sections.length === 0) {
19
+ return _jsx("p", { className: "uhcp-clinical-empty", "data-ips-summary-empty": true, children: noSectionsLabel });
20
+ }
21
+ const timelineEntries = sections.flatMap((section, sectionIndex) => section.resources.flatMap((resource, resourceIndex) => resource.date ? [{
22
+ id: resource.fullUrl ?? `${sectionIndex}:${resourceIndex}:${resource.resourceType}`,
23
+ title: resource.title,
24
+ dateTime: resource.date,
25
+ facets: {
26
+ section: [section.code ?? section.title],
27
+ resourceType: [resource.resourceType],
28
+ },
29
+ content: _jsx("small", { children: resourceTypeLabel?.(resource.resourceType) ?? resource.resourceType }),
30
+ }] : []));
31
+ const timelineFacets = timeline ? [
32
+ {
33
+ id: 'section',
34
+ label: timeline.sectionFacetLabel,
35
+ options: uniqueOptions(sections.map((section) => ({ id: section.code ?? section.title, label: sectionTitle(section) }))),
36
+ },
37
+ {
38
+ id: 'resourceType',
39
+ label: timeline.resourceTypeFacetLabel,
40
+ options: uniqueOptions(sections.flatMap((section) => section.resources.map((resource) => ({
41
+ id: resource.resourceType,
42
+ label: resourceTypeLabel?.(resource.resourceType) ?? resource.resourceType,
43
+ })))),
44
+ },
45
+ ] : [];
46
+ return (_jsxs("div", { className: "uhcp-clinical-summary", "data-ips-summary": true, children: [timeline && timeZone && timelineEntries.length ? _jsx(ClinicalTimeline, { entries: timelineEntries, facets: timelineFacets, locale: locale ?? 'en', timeZone: timeZone, labels: timeline.labels }) : null, sections.map((section, sectionIndex) => (_jsx(ClinicalSectionSummary, { code: section.code ?? '', title: sectionTitle(section), resources: section.resources.map((resource, resourceIndex) => {
47
+ const details = observationComponentDetails(nativeResources.get(resource.fullUrl ?? ''));
48
+ return {
49
+ key: resource.fullUrl ?? `${resource.resourceType}:${resourceIndex}:${resource.title}`,
50
+ title: resource.title,
51
+ resourceType: resource.resourceType,
52
+ ...(resource.date === undefined ? {} : { date: resource.date }),
53
+ ...(details === undefined ? {} : { details }),
54
+ actions: resourceActions?.(section, resource),
55
+ };
56
+ }), emptyLabel: emptyLabel, ...(resourceTypeLabel === undefined ? {} : { resourceTypeLabel }), actions: sectionActions?.(section), ...(locale === undefined ? {} : { locale }), ...(timeZone === undefined ? {} : { timeZone }) }, section.code ?? `${section.title}:${sectionIndex}`)))] }));
57
+ }
58
+ function uniqueOptions(options) {
59
+ return [...new Map(options.map((option) => [option.id, option])).values()];
60
+ }
61
+ function observationComponentDetails(resource) {
62
+ const candidate = resource;
63
+ if (candidate?.resourceType !== 'Observation' || !Array.isArray(candidate.component))
64
+ return undefined;
65
+ const details = candidate.component.flatMap((value) => {
66
+ const component = value;
67
+ const label = component.code?.text ?? component.code?.coding?.find((coding) => coding.display)?.display;
68
+ const quantity = component.valueQuantity;
69
+ if (!label || !Number.isFinite(quantity?.value))
70
+ return [];
71
+ return [{ label, value: String(quantity.value), ...(quantity?.unit ? { unit: quantity.unit } : {}) }];
72
+ });
73
+ return details.length ? details : undefined;
74
+ }
75
+ //# sourceMappingURL=IpsBundleSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpsBundleSummary.js","sourceRoot":"","sources":["../../src/clinical/IpsBundleSummary.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type ClinicalArtifactEditorV2Props, type ClinicalArtifactFieldV2 } from './ClinicalArtifactEditorV2.js';
2
+ import type { ClinicalArtifactSchema } from './ClinicalArtifactEditor.js';
3
+ export type SchemaClinicalArtifactEditorV2Props = Omit<ClinicalArtifactEditorV2Props, 'fields' | 'initialVisibleClaims' | 'initialClaims'> & Readonly<{
4
+ schema: ClinicalArtifactSchema;
5
+ }>;
6
+ /** Adapts every schema-backed IPS resource to the same progressive V2 editor. */
7
+ /** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
8
+ export declare function SchemaClinicalArtifactEditorV2({ schema, locale, ...props }: SchemaClinicalArtifactEditorV2Props): import("react").JSX.Element;
9
+ /** Keeps form control selection deterministic and owned by the canonical schema/catalog. */
10
+ export declare function clinicalArtifactFieldsV2FromSchema(schema: ClinicalArtifactSchema, locale?: string): readonly ClinicalArtifactFieldV2[];
11
+ //# sourceMappingURL=SchemaClinicalArtifactEditorV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaClinicalArtifactEditorV2.d.ts","sourceRoot":"","sources":["../../src/clinical/SchemaClinicalArtifactEditorV2.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEzE,MAAM,MAAM,mCAAmC,GAAG,IAAI,CAAC,6BAA6B,EAAE,QAAQ,GAAG,sBAAsB,GAAG,eAAe,CAAC,GAAG,QAAQ,CAAC;IACpJ,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAC,CAAA;AAEF,iFAAiF;AACjF,yFAAyF;AACzF,wBAAgB,8BAA8B,CAAC,EAAE,MAAM,EAAE,MAAa,EAAE,GAAG,KAAK,EAAE,EAAE,mCAAmC,+BAQtH;AAED,4FAA4F;AAC5F,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,SAAO,GAAG,SAAS,uBAAuB,EAAE,CA8BpI"}
@@ -0,0 +1,62 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { clinicalArtifactCodedOptionsForClaim } from 'fhir-data-utils-ts';
4
+ import { ClinicalArtifactEditorV2, } from './ClinicalArtifactEditorV2.js';
5
+ /** Adapts every schema-backed IPS resource to the same progressive V2 editor. */
6
+ /** @deprecated Use ClinicalBundleDraftEditorV2 for every new clinical authoring flow. */
7
+ export function SchemaClinicalArtifactEditorV2({ schema, locale = 'en', ...props }) {
8
+ return _jsx(ClinicalArtifactEditorV2, { ...props, locale: locale, fields: clinicalArtifactFieldsV2FromSchema(schema, locale), initialVisibleClaims: schema.requiredClaims, ...(schema.initialClaims === undefined ? {} : { initialClaims: schema.initialClaims }) });
9
+ }
10
+ /** Keeps form control selection deterministic and owned by the canonical schema/catalog. */
11
+ export function clinicalArtifactFieldsV2FromSchema(schema, locale = 'en') {
12
+ const required = new Set(schema.requiredClaims);
13
+ const terminologyText = new Set(schema.terminologyTextClaims ?? []);
14
+ const pairedClaims = new Set();
15
+ const fields = [];
16
+ for (const textClaim of terminologyText) {
17
+ const pair = codedClaimPair(textClaim);
18
+ pairedClaims.add(pair.codeClaim);
19
+ pairedClaims.add(pair.displayClaim);
20
+ }
21
+ for (const claim of [...schema.requiredClaims, ...schema.optionalClaims]) {
22
+ if (pairedClaims.has(claim))
23
+ continue;
24
+ const options = clinicalArtifactCodedOptionsForClaim(claim, locale);
25
+ if (terminologyText.has(claim)) {
26
+ const pair = codedClaimPair(claim);
27
+ fields.push({ claim, textClaim: claim, codeClaim: pair.codeClaim, displayClaim: pair.displayClaim, kind: 'coded-concept', required: required.has(claim) });
28
+ }
29
+ else if (options.length) {
30
+ fields.push({ claim, kind: 'coded-select', required: required.has(claim), options: options.map(option => ({ value: option.code, label: option.label })) });
31
+ }
32
+ else if (isDateTimeClaim(claim)) {
33
+ fields.push({ claim, kind: 'date-time', required: required.has(claim) });
34
+ }
35
+ else if (isPositiveIntegerClaim(claim)) {
36
+ fields.push({ claim, kind: 'positive-integer', required: required.has(claim) });
37
+ }
38
+ else {
39
+ fields.push({ claim, kind: 'text', required: required.has(claim) });
40
+ }
41
+ }
42
+ fields.push({ claim: '__documents', kind: 'documents', transient: true });
43
+ return Object.freeze(fields);
44
+ }
45
+ function codedClaimPair(textClaim) {
46
+ if (textClaim.endsWith('-text')) {
47
+ const base = textClaim.slice(0, -'-text'.length);
48
+ return { codeClaim: base, displayClaim: `${base}-display` };
49
+ }
50
+ if (textClaim.endsWith('.code-text')) {
51
+ const base = textClaim.slice(0, -'-text'.length);
52
+ return { codeClaim: base, displayClaim: `${base}-display` };
53
+ }
54
+ return { codeClaim: `${textClaim}-code`, displayClaim: `${textClaim}-display` };
55
+ }
56
+ function isDateTimeClaim(claim) {
57
+ return /(?:^|[-.])(date|datetime|effective|onset)(?:$|[-.])/.test(claim);
58
+ }
59
+ function isPositiveIntegerClaim(claim) {
60
+ return /(?:dose-sequence|series-doses|timing-frequency)$/.test(claim);
61
+ }
62
+ //# sourceMappingURL=SchemaClinicalArtifactEditorV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaClinicalArtifactEditorV2.js","sourceRoot":"","sources":["../../src/clinical/SchemaClinicalArtifactEditorV2.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /* SOS-owned clinical rendering. Host theme supplies neutral --uhcp-* compatibility tokens; no product branding or assets. */
2
+ .uhcp-clinical-section {
3
+ background: var(--uhcp-panel);
4
+ border: 1px solid var(--uhcp-border);
5
+ border-radius: 2rem;
6
+ color: var(--uhcp-text);
7
+ padding: 1.25rem;
8
+ }
9
+ .uhcp-clinical-editor-backdrop { align-items:center; background:rgb(15 23 42 / 42%); display:flex; inset:0; justify-content:center; padding:1rem; position:fixed; z-index:1000; }
10
+ .uhcp-clinical-editor { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:1.5rem; box-shadow:0 20px 60px rgb(15 23 42 / 22%); color:var(--uhcp-text); display:flex; flex-direction:column; max-height:calc(100dvh - 2rem); max-width:48rem; min-width:0; overflow:hidden; padding:1.5rem; width:100%; }
11
+ .uhcp-clinical-editor>header { align-items:flex-start; display:flex; gap:1rem; justify-content:space-between; }
12
+ .uhcp-clinical-editor h2,.uhcp-clinical-editor p { margin:.2rem 0; }
13
+ .uhcp-clinical-editor>header>button { background:transparent; border:1px solid var(--uhcp-border); border-radius:50%; color:inherit; cursor:pointer; font-size:1.4rem; height:2.5rem; width:2.5rem; }
14
+ .uhcp-clinical-editor form { display:grid; gap:1rem; grid-template-columns:repeat(2,minmax(0,1fr)); margin-top:1.25rem; min-width:0; overflow:auto; }
15
+ .uhcp-clinical-editor label { color:var(--uhcp-text); font-weight:700; }
16
+ .uhcp-clinical-editor label,.uhcp-clinical-editor fieldset,.uhcp-clinical-editor-field { min-width:0; }
17
+ .uhcp-clinical-editor-field { display:grid; gap:.35rem; }
18
+ .uhcp-clinical-editor-field-heading { align-items:center; display:flex; gap:.5rem; justify-content:space-between; }
19
+ .uhcp-clinical-speech-control { align-items:center; display:flex; gap:.4rem; }
20
+ .uhcp-clinical-speech-button { align-items:center; background:transparent; border:1px solid var(--uhcp-border); border-radius:50%; color:inherit; cursor:pointer; display:inline-flex; height:2.25rem; justify-content:center; padding:.45rem; width:2.25rem; }
21
+ .uhcp-clinical-speech-button:disabled { cursor:not-allowed; opacity:.45; }
22
+ .uhcp-clinical-speech-button svg { fill:currentColor; height:1.15rem; width:1.15rem; }
23
+ .uhcp-clinical-editor input,.uhcp-clinical-editor select,.uhcp-clinical-editor textarea { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.7rem; color:inherit; font:inherit; min-width:0; padding:.75rem; width:100%; }
24
+ .uhcp-clinical-editor-date-time { grid-column:1/-1; }
25
+ .uhcp-clinical-editor-wide,.uhcp-clinical-editor-error,.uhcp-clinical-editor footer { grid-column:1/-1; }
26
+ .uhcp-clinical-editor footer { background:var(--uhcp-panel); bottom:0; display:flex; gap:.75rem; justify-content:flex-end; padding:.75rem 0; position:sticky; z-index:2; }
27
+ .uhcp-clinical-editor footer button,.uhcp-terminology-results button { border:1px solid var(--uhcp-border); border-radius:.7rem; cursor:pointer; font:inherit; padding:.7rem 1rem; }
28
+ .uhcp-clinical-editor footer .uhcp-clinical-editor-submit { background:linear-gradient(135deg,color-mix(in srgb,var(--uhcp-emerald) 90%,#fff),var(--uhcp-emerald)); border-color:var(--uhcp-emerald); color:#fff; font-weight:800; }
29
+ .uhcp-clinical-editor footer .uhcp-clinical-editor-cancel { background:color-mix(in srgb,#b42318 12%,var(--uhcp-panel)); border-color:color-mix(in srgb,#b42318 52%,var(--uhcp-border)); color:color-mix(in srgb,#b42318 84%,var(--uhcp-text)); }
30
+ .uhcp-clinical-entry-credential-panel { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.85rem; grid-column:1/-1; margin-top:.75rem; padding:1rem; width:100%; }
31
+ .uhcp-clinical-editor-error { color:#b42318; font-weight:700; }
32
+ .uhcp-terminology-results ul { display:grid; gap:.35rem; list-style:none; margin:.25rem 0 0; padding:0; }
33
+ .uhcp-terminology-results button { background:var(--uhcp-surface-muted); color:inherit; display:grid; text-align:start; width:100%; }
34
+ .uhcp-terminology-results small { color:var(--uhcp-muted); display:block; font-weight:400; }
35
+ .uhcp-terminology-source-picker { border:1px solid var(--uhcp-border); border-radius:.7rem; margin:.25rem 0; position:relative; }
36
+ .uhcp-terminology-source-picker summary { cursor:pointer; font-weight:750; list-style:none; padding:.7rem .8rem; }
37
+ .uhcp-terminology-source-picker summary::-webkit-details-marker { display:none; }
38
+ .uhcp-terminology-source-picker summary::after { content:'▾'; float:inline-end; }
39
+ .uhcp-terminology-source-picker[open] summary::after { content:'▴'; }
40
+ .uhcp-terminology-source-picker fieldset { background:var(--uhcp-panel); border:0; border-top:1px solid var(--uhcp-border); display:grid; gap:.45rem; margin:0; padding:.7rem .8rem; }
41
+ .uhcp-terminology-source-picker label { align-items:center; display:flex; gap:.55rem; }
42
+ .uhcp-terminology-source-picker input { margin:0; width:auto; }
43
+ .uhcp-sr-only { clip:rect(0,0,0,0); clip-path:inset(50%); height:1px; overflow:hidden; position:absolute; white-space:nowrap; width:1px; }
44
+ .uhcp-clinical-editor-v2 { max-width:44rem; }
45
+ .uhcp-clinical-editor-v2 form { grid-template-columns:1fr; }
46
+ .uhcp-progressive-field-v2 { background:var(--uhcp-surface-muted); border:1px solid var(--uhcp-border); border-radius:1rem; display:grid; gap:.45rem; padding:.85rem; position:relative; }
47
+ .uhcp-progressive-field-v2>.uhcp-remove-field-v2 { align-items:center; background:#fff1f0; border:1px solid #fda29b; border-radius:50%; color:#b42318; cursor:pointer; display:flex; font-size:1.1rem; height:1.8rem; justify-content:center; position:absolute; right:.55rem; top:.55rem; width:1.8rem; z-index:1; }
48
+ .uhcp-clinical-property-v2 { display:grid; gap:.45rem; min-width:0; }
49
+ .uhcp-clinical-property-v2 input,.uhcp-clinical-property-v2 select { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.7rem; color:inherit; font:inherit; min-width:0; padding:.7rem; width:100%; }
50
+ .uhcp-date-time-property-v2 { align-items:end; border:0; grid-template-columns:minmax(9rem,1fr) auto minmax(7rem,.65fr) auto; margin:0; padding:0; }
51
+ .uhcp-date-time-property-v2 legend { font-weight:800; margin-bottom:.35rem; }
52
+ .uhcp-date-time-property-v2 label { display:grid; gap:.3rem; }
53
+ .uhcp-date-time-property-v2 button,.uhcp-optional-fields-v2 button { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.7rem; color:inherit; cursor:pointer; font:inherit; min-height:2.7rem; padding:.55rem .75rem; }
54
+ .uhcp-coded-concept-query-v2 { display:grid; gap:.4rem; grid-template-columns:minmax(0,1fr) auto auto; }
55
+ .uhcp-icon-button-v2,.uhcp-clear-code-v2 { align-items:center; background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:50%; color:inherit; cursor:pointer; display:flex; height:2.75rem; justify-content:center; padding:.65rem; width:2.75rem; }
56
+ .uhcp-icon-button-v2 svg { fill:none; height:1.2rem; stroke:currentColor; stroke-linecap:round; stroke-width:2; width:1.2rem; }
57
+ .uhcp-clear-code-v2 { background:#fff1f0; border-color:#fda29b; color:#b42318; font-size:1.15rem; }
58
+ .uhcp-coding-sources-v2 { border:0; display:flex; flex-wrap:wrap; gap:.45rem .8rem; margin:0; padding:.2rem 0; }
59
+ .uhcp-coding-sources-v2 legend { color:var(--uhcp-muted); font-size:.8rem; width:100%; }
60
+ .uhcp-coding-sources-v2 label { align-items:center; display:flex; font-size:.85rem; gap:.3rem; }
61
+ .uhcp-coding-sources-v2 input { width:auto; }
62
+ .uhcp-selected-code-v2 { display:grid; gap:.6rem; grid-template-columns:1fr 1fr; }
63
+ .uhcp-selected-code-v2 input[readonly] { background:var(--uhcp-panel-muted); color:var(--uhcp-muted); }
64
+ .uhcp-optional-fields-v2 { align-items:end; border:1px dashed var(--uhcp-border); border-radius:1rem; display:grid; gap:.6rem; grid-template-columns:minmax(0,1fr) auto; margin:0; padding:.8rem; }
65
+ .uhcp-optional-fields-v2 legend { font-weight:800; padding:0 .35rem; }
66
+ .uhcp-optional-fields-v2 select { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.7rem; color:inherit; font:inherit; padding:.7rem; }
67
+ .uhcp-document-references-property-v2 ul { display:grid; gap:.4rem; list-style:none; margin:.2rem 0 0; padding:0; }
68
+ .uhcp-document-references-property-v2 li { align-items:center; display:flex; justify-content:space-between; }
69
+ .uhcp-document-references-property-v2 li button { background:#fff1f0; border:1px solid #fda29b; border-radius:50%; color:#b42318; cursor:pointer; height:1.8rem; width:1.8rem; }
70
+ @media (max-width:620px) { .uhcp-date-time-property-v2,.uhcp-selected-code-v2 { grid-template-columns:minmax(0,1fr) auto; } .uhcp-date-time-property-v2 legend,.uhcp-selected-code-v2 label { grid-column:1/-1; } .uhcp-optional-fields-v2 { grid-template-columns:1fr; } }
71
+ @media (max-width:44rem) { .uhcp-clinical-editor form { grid-template-columns:1fr; } }
72
+
73
+ .uhcp-clinical-summary {
74
+ display: grid;
75
+ gap: 1rem;
76
+ }
77
+ .uhcp-clinical-section > header { align-items: center; display: flex; gap: 1rem; justify-content: space-between; }
78
+ .uhcp-clinical-section h3 { font-size: 1.125rem; margin: 0; }
79
+ .uhcp-clinical-section h3 span { color: var(--uhcp-muted); }
80
+ .uhcp-clinical-grid { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); margin-top: 1rem; }
81
+ .uhcp-clinical-card { background: var(--uhcp-panel-muted); border-radius: 1rem; display: flex; flex-direction: column; min-width: 0; padding: 1rem; }
82
+ .uhcp-clinical-card-actions { align-items: center; display: flex; gap: .4rem; justify-content: flex-end; margin-top: .75rem; }
83
+ .uhcp-clinical-icon-action { align-items:center; background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.65rem; color:var(--uhcp-text); cursor:pointer; display:inline-flex; height:2.5rem; justify-content:center; padding:0; width:2.5rem; }
84
+ .uhcp-clinical-icon-action:hover { border-color:var(--uhcp-turquoise); color:var(--uhcp-turquoise); }
85
+ .uhcp-clinical-icon-action:focus-visible { outline:3px solid var(--uhcp-turquoise); outline-offset:2px; }
86
+ .uhcp-clinical-icon-action:disabled { cursor:not-allowed; opacity:.42; }
87
+ .uhcp-clinical-icon-action svg { fill:none; height:1.2rem; stroke:currentColor; stroke-linecap:round; stroke-linejoin:round; stroke-width:1.8; width:1.2rem; }
88
+ .uhcp-clinical-icon-action-delete:hover { border-color:var(--uhcp-attention); color:var(--uhcp-attention); }
89
+ .uhcp-clinical-bundle-draft { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:1.5rem; color:var(--uhcp-text); display:grid; gap:1rem; padding:1.25rem; }
90
+ .uhcp-clinical-bundle-draft>header h2,.uhcp-clinical-bundle-draft>header p { margin:.15rem 0; }
91
+ .uhcp-clinical-bundle-draft>header p,.uhcp-clinical-bundle-draft details>p { color:var(--uhcp-muted); }
92
+ .uhcp-clinical-bundle-draft details { background:var(--uhcp-panel-muted); border:1px solid var(--uhcp-border); border-radius:1rem; padding:.85rem 1rem; position:relative; }
93
+ .uhcp-clinical-bundle-draft summary { cursor:pointer; font-weight:800; }
94
+ .uhcp-clinical-bundle-draft-create { align-items:end; background:var(--uhcp-panel-muted); border:1px solid var(--uhcp-border); border-radius:1rem; display:grid; gap:.8rem; grid-template-columns:minmax(10rem,1fr) minmax(10rem,1fr) auto; padding:1rem; }
95
+ .uhcp-clinical-bundle-draft-create label { display:grid; gap:.35rem; font-weight:700; }
96
+ .uhcp-clinical-bundle-draft-create select { background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.7rem; color:var(--uhcp-text); font:inherit; min-height:2.75rem; padding:.55rem .7rem; }
97
+ .uhcp-clinical-bundle-draft-create button.uhcp-add-section-button { background:color-mix(in srgb,var(--uhcp-turquoise) 13%,var(--uhcp-panel)); border:1px solid color-mix(in srgb,var(--uhcp-turquoise) 45%,var(--uhcp-border)); border-radius:.75rem; color:var(--uhcp-text); cursor:pointer; font:inherit; font-weight:800; min-height:2.75rem; padding:.65rem 1rem; }
98
+ .uhcp-clinical-bundle-draft-create button:disabled { cursor:not-allowed; opacity:.5; }
99
+ .uhcp-clinical-bundle-draft .uhcp-add-entry-button { background:var(--uhcp-emerald); border:0; border-radius:.65rem; color:#fff; cursor:pointer; font-size:1.3rem; font-weight:900; height:2.5rem; margin-top:.65rem; width:2.5rem; }
100
+ .uhcp-clinical-bundle-draft .uhcp-remove-section-button { background:color-mix(in srgb,#c64747 12%,var(--uhcp-panel)); border:1px solid color-mix(in srgb,#c64747 42%,var(--uhcp-border)); border-radius:.6rem; color:#a72f2f; cursor:pointer; font-size:1.25rem; font-weight:900; height:2.25rem; position:absolute; right:.7rem; top:.55rem; width:2.25rem; }
101
+ .uhcp-clinical-bundle-draft ul { display:grid; gap:.55rem; list-style:none; margin:.8rem 0 0; padding:0; }
102
+ .uhcp-clinical-bundle-draft li { align-items:center; background:var(--uhcp-panel); border:1px solid var(--uhcp-border); border-radius:.8rem; display:grid; gap:1rem; grid-template-columns:minmax(0,1fr) auto; justify-content:space-between; padding:.7rem; }
103
+ .uhcp-clinical-bundle-draft li>span { display:flex; gap:.45rem; }
104
+ .uhcp-clinical-bundle-draft li>span:first-child { align-items:flex-start; flex-direction:column; min-width:0; }
105
+ .uhcp-clinical-bundle-draft li strong { overflow-wrap:anywhere; }
106
+ .uhcp-clinical-bundle-draft li small { color:var(--uhcp-muted); }
107
+ .uhcp-clinical-bundle-draft>footer { align-items:center; background:var(--uhcp-panel-muted); border:1px solid var(--uhcp-border); border-radius:1rem; display:flex; gap:.75rem; justify-content:space-between; padding:.7rem .8rem; }
108
+ .uhcp-clinical-document-secondary-actions { align-items:center; display:flex; flex:1; flex-wrap:wrap; gap:.65rem; min-width:0; }
109
+ .uhcp-clinical-bundle-draft>footer .uhcp-clinical-document-submit { background:var(--uhcp-emerald); border:0; border-radius:.75rem; color:#fff; cursor:pointer; flex:0 0 auto; font:inherit; font-weight:800; padding:.75rem 1rem; }
110
+ .uhcp-clinical-bundle-draft>footer .uhcp-clinical-document-submit:disabled { cursor:not-allowed; opacity:.5; }
111
+ .uhcp-clinical-bundle-draft .uhcp-clinical-entry-credential-action { background:color-mix(in srgb,var(--uhcp-attention) 24%,var(--uhcp-panel)); border:1px solid color-mix(in srgb,var(--uhcp-attention) 58%,var(--uhcp-border)); color:var(--uhcp-text); }
112
+ .uhcp-clinical-bundle-draft button[data-tooltip]:not(.uhcp-remove-section-button),.uhcp-clinical-icon-action[data-tooltip] { position:relative; }
113
+ .uhcp-clinical-bundle-draft button[data-tooltip]:is(:hover,:focus-visible)::after,.uhcp-clinical-icon-action[data-tooltip]:is(:hover,:focus-visible)::after { background:var(--uhcp-text); border-radius:.45rem; bottom:calc(100% + .45rem); color:var(--uhcp-panel); content:attr(data-tooltip); font-size:.78rem; font-weight:700; left:50%; max-width:16rem; padding:.35rem .5rem; pointer-events:none; position:absolute; transform:translateX(-50%); white-space:nowrap; z-index:50; }
114
+ .uhcp-clinical-editor-attachments { border:1px solid var(--uhcp-border); border-radius:.85rem; display:grid; gap:.65rem; grid-column:1/-1; padding:.85rem; }
115
+ .uhcp-clinical-editor-attachments label { display:grid; gap:.35rem; }
116
+ .uhcp-clinical-editor-attachments input[type=file] { border:1px dashed var(--uhcp-border); border-radius:.7rem; padding:.65rem; }
117
+ .uhcp-clinical-editor-attachments ul { display:grid; gap:.4rem; list-style:none; margin:0; padding:0; }
118
+ .uhcp-clinical-editor-attachments li { align-items:center; background:var(--uhcp-panel-muted); border-radius:.65rem; display:flex; justify-content:space-between; padding:.5rem .65rem; }
119
+ .uhcp-clinical-editor-attachments li button { background:transparent; border:0; color:var(--uhcp-text); cursor:pointer; font-size:1.2rem; }
120
+ @media (max-width:720px) { .uhcp-clinical-bundle-draft-create { grid-template-columns:1fr; } .uhcp-clinical-bundle-draft>footer { align-items:stretch; flex-direction:column; } .uhcp-clinical-bundle-draft>footer .uhcp-clinical-document-submit { align-self:flex-end; } }
121
+ .uhcp-clinical-title { font-weight: 800; margin: 0; }
122
+ .uhcp-clinical-type { color: var(--uhcp-muted); font-size: .72rem; font-weight: 800; letter-spacing: .06em; margin: .35rem 0 0; text-transform: uppercase; }
123
+ .uhcp-clinical-date, .uhcp-clinical-empty { color: var(--uhcp-muted); margin: .35rem 0 0; }
124
+ .uhcp-clinical-timeline { display: grid; gap: 1rem; }
125
+ .uhcp-clinical-filters, .uhcp-clinical-range { display: grid; gap: .75rem; }
126
+ .uhcp-clinical-range { grid-template-columns: repeat(2, minmax(0, 1fr)); }
127
+ .uhcp-clinical-filters fieldset { border: 1px solid var(--uhcp-border); border-radius: 1rem; display: flex; flex-wrap: wrap; gap: .75rem; margin: 0; padding: .75rem; }
128
+ .uhcp-clinical-filters legend { font-weight: 800; padding: 0 .35rem; }
129
+ .uhcp-clinical-filters label { display: grid; gap: .3rem; }
130
+ .uhcp-clinical-filters label:has(input[type='checkbox']) { align-items: center; display: flex; }
131
+ .uhcp-clinical-filters input { background: var(--uhcp-panel); border: 1px solid var(--uhcp-border); border-radius: .65rem; color: var(--uhcp-text); font: inherit; padding: .55rem; }
132
+ .uhcp-clinical-timeline-card { background: var(--uhcp-panel-muted); border-radius: 1rem; display: grid; gap: .4rem; padding: 1rem; }
133
+ .uhcp-clinical-timeline-card h4 { margin: 0; }
134
+ .uhcp-clinical-timeline-card time, .uhcp-clinical-timeline-list time { color: var(--uhcp-muted); }
135
+ .uhcp-clinical-timeline-navigation { align-items: center; display: flex; flex-wrap: wrap; gap: .6rem; }
136
+ .uhcp-clinical-timeline button, .uhcp-clinical-date-time-fields button { background: var(--uhcp-panel); border: 1px solid var(--uhcp-border); border-radius: .7rem; color: var(--uhcp-text); cursor: pointer; font: inherit; min-height: 2.5rem; padding: .55rem .75rem; }
137
+ .uhcp-clinical-timeline button:disabled { cursor: not-allowed; opacity: .45; }
138
+ .uhcp-clinical-timeline-list { display: grid; gap: .5rem; margin: 0; padding-left: 1.5rem; }
139
+ .uhcp-clinical-timeline-list li { padding: .5rem; }
140
+ .uhcp-clinical-timeline-list time { display: block; margin-top: .2rem; }
141
+ .uhcp-clinical-date-time-fields { align-items: end; display: grid; gap: .5rem; grid-template-columns: minmax(0, 1fr) auto minmax(0, .7fr) auto; min-width: 0; }
142
+ .uhcp-clinical-date-time-fields label { display: grid; font-weight: 800; gap: .35rem; }
143
+ .uhcp-clinical-date-time-fields input { border: 1px solid var(--uhcp-border); border-radius: .7rem; color: var(--uhcp-text); font: inherit; min-width: 0; padding: .65rem; width: 100%; }
144
+ @media (max-width: 620px) { .uhcp-clinical-range, .uhcp-clinical-date-time-fields { grid-template-columns: minmax(0, 1fr) auto; } .uhcp-clinical-editor form { grid-template-columns:minmax(0,1fr); } .uhcp-clinical-editor-date-time,.uhcp-clinical-editor-wide,.uhcp-clinical-editor-error,.uhcp-clinical-editor footer { grid-column:1; } }
145
+ .uhcp-clinical-details { display: grid; gap: .3rem; margin: .6rem 0 0; }
146
+ .uhcp-clinical-details div { align-items: baseline; display: flex; gap: .75rem; justify-content: space-between; }
147
+ .uhcp-clinical-details dt { color: var(--uhcp-muted); font-size: .78rem; }
148
+ .uhcp-clinical-details dd { font-size: .9rem; font-weight: 800; margin: 0; }
@@ -0,0 +1,14 @@
1
+ export * from './ClinicalArtifactEditor.js';
2
+ export * from './ClinicalArtifactEditorV2.js';
3
+ export * from './ClinicalArtifactPropertiesV2.js';
4
+ export * from './ClinicalEditorLayer.js';
5
+ export * from './ClinicalSpeechInput.js';
6
+ export * from './BrowserClinicalSpeechInput.js';
7
+ export * from './ClinicalTimeline.js';
8
+ export * from './ClinicalSectionSummary.js';
9
+ export * from './IpsBundleSummary.js';
10
+ export * from './ClinicalActionButton.js';
11
+ export * from './ClinicalBundleDraftEditor.js';
12
+ export * from './ImmunizationArtifactEditorV2.js';
13
+ export * from './SchemaClinicalArtifactEditorV2.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clinical/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,qCAAqC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export * from './ClinicalArtifactEditor.js';
2
+ export * from './ClinicalArtifactEditorV2.js';
3
+ export * from './ClinicalArtifactPropertiesV2.js';
4
+ export * from './ClinicalEditorLayer.js';
5
+ export * from './ClinicalSpeechInput.js';
6
+ export * from './BrowserClinicalSpeechInput.js';
7
+ export * from './ClinicalTimeline.js';
8
+ export * from './ClinicalSectionSummary.js';
9
+ export * from './IpsBundleSummary.js';
10
+ export * from './ClinicalActionButton.js';
11
+ export * from './ClinicalBundleDraftEditor.js';
12
+ export * from './ImmunizationArtifactEditorV2.js';
13
+ export * from './SchemaClinicalArtifactEditorV2.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clinical/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,qCAAqC,CAAA"}