uhc-portal-components-react 0.2.35 → 0.2.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.36 - 2026-11-03
4
+
5
+ - Add an accessible shared card-provider selector that returns only the opaque
6
+ provider identity selected by the user and keeps unavailable choices visible
7
+ without granting browser-side authority.
8
+
3
9
  ## 0.2.35 - 2026-11-02
4
10
 
5
11
  - Let a portal send its compact official mark to the product website while the
@@ -0,0 +1,19 @@
1
+ import type { SubjectCardProviderDescriptor } from 'sos-data-utils-ts/subject-card-directory';
2
+ export type CardProviderChoice = Pick<SubjectCardProviderDescriptor, 'providerId' | 'displayName'> & Readonly<{
3
+ available?: boolean;
4
+ }>;
5
+ export type CardProviderSelectorCopy = Readonly<{
6
+ legend: string;
7
+ description: string;
8
+ unavailable: string;
9
+ }>;
10
+ export type CardProviderSelectorProps = Readonly<{
11
+ providers: readonly CardProviderChoice[];
12
+ value: string;
13
+ onChange: (providerId: string) => void;
14
+ copy: CardProviderSelectorCopy;
15
+ disabled?: boolean;
16
+ }>;
17
+ /** Shared presentational selector; the host BFF remains provider authority. */
18
+ export declare function CardProviderSelector({ providers, value, onChange, copy, disabled, }: CardProviderSelectorProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=CardProviderSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardProviderSelector.d.ts","sourceRoot":"","sources":["../src/CardProviderSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAA;AAE7F,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,6BAA6B,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,QAAQ,CAAC;IAC5G,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,IAAI,EAAE,wBAAwB,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAC,CAAA;AAEF,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAgB,GACjB,EAAE,yBAAyB,+BAwB3B"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Shared presentational selector; the host BFF remains provider authority. */
3
+ export function CardProviderSelector({ providers, value, onChange, copy, disabled = false, }) {
4
+ return _jsxs("fieldset", { className: "uhcp-card-provider-selector", disabled: disabled, children: [_jsx("legend", { children: copy.legend }), _jsx("p", { children: copy.description }), _jsx("div", { className: "uhcp-card-provider-options", children: providers.map(provider => {
5
+ const unavailable = provider.available === false;
6
+ return _jsxs("label", { className: "uhcp-card-provider-option", children: [_jsx("input", { type: "radio", name: "card-provider", value: provider.providerId, checked: value === provider.providerId, disabled: unavailable, onChange: () => onChange(provider.providerId) }), _jsxs("span", { children: [_jsx("strong", { children: provider.displayName }), unavailable ? _jsxs(_Fragment, { children: [" ", _jsx("small", { children: copy.unavailable })] }) : null] })] }, provider.providerId);
7
+ }) })] });
8
+ }
package/dist/index.d.ts CHANGED
@@ -61,4 +61,5 @@ export * from './ExistingProfessionalProfilePanel.js';
61
61
  export * from './BrowserRealtimeCallClient.js';
62
62
  export * from './BrowserRealtimeCallPanel.js';
63
63
  export * from './passkey-policy.js';
64
+ export * from './CardProviderSelector.js';
64
65
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wCAAwC,CAAA;AACtD,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mCAAmC,CAAA;AACjD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qCAAqC,CAAA;AACnD,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oCAAoC,CAAA;AAClD,cAAc,sCAAsC,CAAA;AACpD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uCAAuC,CAAA;AACrD,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,yCAAyC,CAAA;AACvD,cAAc,uCAAuC,CAAA;AACrD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wCAAwC,CAAA;AACtD,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mCAAmC,CAAA;AACjD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qCAAqC,CAAA;AACnD,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,0CAA0C,CAAA;AACxD,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oCAAoC,CAAA;AAClD,cAAc,sCAAsC,CAAA;AACpD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uCAAuC,CAAA;AACrD,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kBAAkB,CAAA;AAChC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,yCAAyC,CAAA;AACvD,cAAc,uCAAuC,CAAA;AACrD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA"}
package/dist/index.js CHANGED
@@ -61,3 +61,4 @@ export * from './ExistingProfessionalProfilePanel.js';
61
61
  export * from './BrowserRealtimeCallClient.js';
62
62
  export * from './BrowserRealtimeCallPanel.js';
63
63
  export * from './passkey-policy.js';
64
+ export * from './CardProviderSelector.js';
package/dist/styles.css CHANGED
@@ -866,6 +866,15 @@ html[data-theme='dark'] .uhcp-brand-artwork-dark { display: block !important; }
866
866
  .uhcp-smart-id-card-front > footer { border-top: 1px solid #dbe3eb; display: grid; gap: .12rem; padding-top: .55rem; }
867
867
  .uhcp-smart-id-card-front > footer span { color: #526174; font-size: .58rem; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
868
868
  .uhcp-smart-id-provider-code { font-size: .82rem; font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: .04em; line-height: 1; margin: 0; white-space: nowrap; }
869
+
870
+ .uhcp-card-provider-selector { border: 0; margin: 0; padding: 0; }
871
+ .uhcp-card-provider-selector > legend { font-size: 1rem; font-weight: 800; }
872
+ .uhcp-card-provider-selector > p { color: var(--uhcp-muted, #64748b); margin: .35rem 0 .75rem; }
873
+ .uhcp-card-provider-options { display: grid; gap: .65rem; }
874
+ .uhcp-card-provider-option { align-items: center; border: 1px solid var(--uhcp-border, #cbd5e1); border-radius: .9rem; cursor: pointer; display: flex; gap: .75rem; padding: .85rem 1rem; }
875
+ .uhcp-card-provider-option:has(input:checked) { border-color: var(--uhcp-accent, #2563eb); box-shadow: 0 0 0 2px color-mix(in srgb, var(--uhcp-accent, #2563eb) 22%, transparent); }
876
+ .uhcp-card-provider-option:has(input:disabled) { cursor: not-allowed; opacity: .62; }
877
+ .uhcp-card-provider-option span { display: flex; flex: 1; justify-content: space-between; }
869
878
  .uhcp-smart-id-card-back { background: #fff; color: #0f2942; display: grid; gap: .5rem; grid-template-rows: auto 1fr; }
870
879
  .uhcp-smart-id-card-back > header { border-bottom: 2px solid #0f9ca8; padding-bottom: .45rem; }
871
880
  .uhcp-smart-id-card-back > header strong { font-size: .68rem; letter-spacing: .07em; line-height: 1.15; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uhc-portal-components-react",
3
- "version": "0.2.35",
3
+ "version": "0.2.36",
4
4
  "description": "Brand-neutral React portal screens, account preferences and protected-profile UI.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",