@tesouro/embedded-components-react 0.2.264 → 0.2.267

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 (60) hide show
  1. package/README.md +8 -6
  2. package/dist/experimental/WidgetSuite.d.ts +93 -2
  3. package/dist/experimental/WidgetSuite.js +5 -5
  4. package/dist/experimental/index.d.ts +93 -2
  5. package/dist/experimental/index.js +5 -5
  6. package/dist/index.css +45 -9
  7. package/dist/index.d.ts +29 -9
  8. package/dist/index.js +2 -2
  9. package/dist/lib/AcceptDisclosuresWidget.d.ts +17 -5
  10. package/dist/lib/AcceptDisclosuresWidget.js +1 -1
  11. package/dist/lib/BillPayWidget.js +1 -1
  12. package/dist/lib/WidgetProvider.d.ts +12 -4
  13. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/data-access/dist/index2.js +3 -3
  14. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/feature/dist/index3.js +1 -1
  15. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/feature/dist/index4.js +36 -34
  16. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/index.js +2 -2
  17. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/{index3.js → lib/AcceptDisclosuresWidget/AcceptDisclosuresWidget.js} +3 -3
  18. package/dist/libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/{index2.js → lib/AcceptDisclosuresWidget/labels.js} +1 -1
  19. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index.js +6 -6
  20. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index10.js +99 -7
  21. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index11.js +7 -97
  22. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index12.js +99 -4
  23. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index13.js +4 -4
  24. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index14.js +2 -41
  25. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index15.js +43 -1
  26. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index16.js +1 -50
  27. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index17.js +48 -6
  28. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index18.js +9 -5
  29. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index19.js +8 -91
  30. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index2.js +6 -2
  31. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index20.js +7 -3
  32. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index21.js +100 -6
  33. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index22.js +3 -9
  34. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index23.js +6 -83
  35. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index24.js +9 -3
  36. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index25.js +83 -6
  37. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index26.js +2 -111
  38. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index27.js +8 -1
  39. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index28.js +103 -16
  40. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index29.js +1 -0
  41. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index30.js +25 -0
  42. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index6.js +37 -27
  43. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index7.js +15 -116
  44. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index8.js +126 -31
  45. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index9.js +32 -69
  46. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index12.js +0 -3
  47. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index13.js +34 -69
  48. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index15.js +4 -0
  49. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index16.js +261 -181
  50. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index28.js +32 -33
  51. package/dist/libs/tesouro-embedded-components-react/bill-pay-widget/ui/dist/index7.js +2 -2
  52. package/dist/libs/tesouro-embedded-components-react/shared/feature/dist/lib/analytics/build-info.js +1 -1
  53. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index.js +5 -5
  54. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index3.js +4 -15
  55. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js +26 -91
  56. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index5.js +87 -74
  57. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index6.js +142 -0
  58. package/dist/libs/tesouro-embedded-components-react/widget-suite/ui/dist/index2.js +1 -0
  59. package/dist/libs/tesouro-embedded-components-react/widget-suite/ui/dist/index3.js +49 -33
  60. package/package.json +1 -1
package/README.md CHANGED
@@ -183,9 +183,11 @@ listed here.
183
183
 
184
184
  ### AcceptDisclosuresWidget
185
185
 
186
- A self-contained widget for reviewing and accepting required banking disclosures during the **pre-auth invite flow**. Renders an inline bordered card with disclosure links, an agreement checkbox, and an Accept action. You supply the four bank-issued document URLs via `disclosureLinks`; the provider attribution and agreement copy come from the widget init tenant identity.
186
+ A self-contained widget for reviewing and accepting required banking disclosures. Renders an inline bordered card with disclosure links, an agreement checkbox, and an Accept action. You supply the four bank-issued document URLs via `disclosureLinks`; the provider attribution and agreement copy come from the widget init tenant identity.
187
187
 
188
- Accept posts `POST /api/widget-gateway/disclosure-acceptance` after reading the disclosure version in force from `GET /identity/v1/disclosures` (hosts rewrite that onto `/api/widget-gateway/proxy/identity/v1/disclosures` the same way as other identity calls — do not call the generated catch-all proxy helper, which percent-encodes path slashes and surfaces as a browser CORS error). `version` may be `null` when the org's requirement is `NOT_REQUIRED`; that value is posted through and ignored by the gateway so invitees in those orgs can still activate. Pass `invitationToken` and `userId` so the disclosures lookup can reject a revoked/expired invite before activation. The accept is one transaction: it activates the invitee and records disclosure acceptance together, so a failed second hop cannot leave an `ACTIVE` user with no acceptance on record. After accept succeeds, the widget awaits any async `onAccepted` continuation, then kicks a widget-init refresh so host gates keyed on `INVITED` can clear. Accept and `onAccepted` failures are handled separately — a rejected host continuation does not look like (or re-run) a failed gateway accept. The refresh is fire-and-forget and runs only after `onAccepted` settles — hosts that unmount this widget when status leaves `INVITED` would otherwise hide a rejected continuation. Auth uses the normal `widgetToken` provider contract — **never** pass an application (APP) / M2M bearer as `widgetToken`. The host must pass `invitationToken` and `userId` from the invite link — this widget does not read URL search params.
188
+ **Two flows, one surface.** In the **pre-auth invite flow**, pass `invitationToken` and `userId` from the invite link. For an **already-active user who owes a re-acceptance** — a new disclosure version was published, so widget init reports `disclosuresRequired: 'REQUIRED'` with `disclosuresAccepted: false` — pass neither: they hold no invite, and the widget token identifies them on both calls. Read those two init fields rather than `status` to decide whether to mount this widget, because an active user can owe an acceptance while never being invited again.
189
+
190
+ Accept posts `POST /api/widget-gateway/disclosure-acceptance` after reading the disclosure version in force from `GET /identity/v1/disclosures` (hosts rewrite that onto `/api/widget-gateway/proxy/identity/v1/disclosures` the same way as other identity calls — do not call the generated catch-all proxy helper, which percent-encodes path slashes and surfaces as a browser CORS error). `version` may be `null` when the org's requirement is `NOT_REQUIRED`; that value is posted through and ignored by the gateway so invitees in those orgs can still activate. When you pass the invite credential, the disclosures lookup can reject a revoked/expired invite before activation. The accept is one transaction: it activates the invitee and records disclosure acceptance together, so a failed second hop cannot leave an `ACTIVE` user with no acceptance on record. After accept succeeds, the widget awaits any async `onAccepted` continuation, then kicks a widget-init refresh so host gates keyed on `INVITED` — or on the disclosure flags — can clear. Accept and `onAccepted` failures are handled separately — a rejected host continuation does not look like (or re-run) a failed gateway accept. The refresh is fire-and-forget and runs only after `onAccepted` settles — hosts that unmount this widget when status leaves `INVITED` would otherwise hide a rejected continuation. Auth uses the normal `widgetToken` provider contract — **never** pass an application (APP) / M2M bearer as `widgetToken`. In the invite flow, the host passes `invitationToken` and `userId` from the invite link; this widget does not read URL search params.
189
191
 
190
192
  The widget carries no document URLs of its own — disclosures are bank-issued legal instruments whose hosting is yours to control, and an embeddable library must not depend on infrastructure your content-security policy cannot see. It renders nothing until `disclosureLinks` is supplied and init resolves a `bankName`; it never substitutes another tenant's legal copy. If init omits `vspName`, provider attribution falls back to the bank name so the sentence remains complete.
191
193
 
@@ -193,10 +195,10 @@ Once the atomic accept _and_ any async `onAccepted` continuation succeed, the ch
193
195
 
194
196
  #### Props
195
197
 
196
- | Prop | Type | Default | Description |
197
- | ----------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------ |
198
- | `invitationToken` | `string` | — | **Required.** Invitation token from the invite link (`code` query param). Bound into the disclosures lookup before activation. |
199
- | `userId` | `string` | — | **Required.** Invited user id from the invite link (`userId` query param). Paired with `invitationToken`. |
198
+ | Prop | Type | Default | Description |
199
+ | ----------------- | -------- | ----------- | ---------------------------------------------------------------------------------------------------------------- |
200
+ | `invitationToken` | `string` | `undefined` | Invitation token from the invite link (`code` query param). Bound into the disclosures lookup before activation. |
201
+ | `userId` | `string` | `undefined` | Invited user id from the invite link (`userId` query param). Paired with `invitationToken`. |
200
202
 
201
203
  | Prop | Type | Default | Description |
202
204
  | ----------------- | ---------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -10,6 +10,11 @@ import { FallbackProps } from 'react-error-boundary';
10
10
  interface WidgetSuiteShellLabels {
11
11
  /** Names the section menu for assistive technology. */
12
12
  navAriaLabel: string;
13
+ /**
14
+ * Announces the placeholder shell while the caller resolves which sections
15
+ * exist. Read out in place of the menu, which has no items yet to name.
16
+ */
17
+ loadingAriaLabel: string;
13
18
  /** Shown in place of the menu when the caller supplies no sections. */
14
19
  emptyState: {
15
20
  title: string;
@@ -590,6 +595,23 @@ interface WidgetProviderProps extends WidgetProviderBaseProps {
590
595
  onError?: (error: unknown, info: ErrorInfo) => void;
591
596
  }
592
597
 
598
+ /**
599
+ * The four disclosure documents a host supplies. Keyed rather than a free-form
600
+ * array because `agreementTextTemplate` names exactly these four instruments —
601
+ * an arbitrary-length list would let the rendered links and the text the user
602
+ * agrees to disagree with each other.
603
+ *
604
+ * URLs are host-supplied on purpose: they are bank-issued legal documents whose
605
+ * hosting is the integrator's concern, and a published package must not carry a
606
+ * Tesouro infrastructure URL a consumer's CSP can block (PLAT-1179).
607
+ */
608
+ interface AcceptDisclosuresLinks {
609
+ termsOfUseUrl: string;
610
+ privacyPolicyUrl: string;
611
+ electronicCommunicationsAgreementUrl: string;
612
+ usaPatriotActUrl: string;
613
+ }
614
+
593
615
  /**
594
616
  * The sections the suite can offer, declared in the default menu order
595
617
  * (EMBD-4875). Order here is documentation only — the suite renders whatever
@@ -663,10 +685,52 @@ interface WidgetSuiteContentLabels {
663
685
  expensesUnavailable: string;
664
686
  };
665
687
  }
688
+ /**
689
+ * Copy for the states where the suite cannot prove it may show normal content.
690
+ *
691
+ * Both are places the gate cannot proceed, and neither is reachable by a correct
692
+ * integration against a healthy API.
693
+ */
694
+ interface WidgetSuiteDisclosureLabels {
695
+ /**
696
+ * The first init fetch failed before the disclosure flags were known. The suite
697
+ * must fail closed here, because an unknown requirement is not permission to
698
+ * show ungated sections.
699
+ */
700
+ initFailedState: {
701
+ title: string;
702
+ body: string;
703
+ retryButton: string;
704
+ };
705
+ /**
706
+ * The acceptance was recorded and the init refresh that clears the gate
707
+ * failed, so only our view of it is stale.
708
+ *
709
+ * The failure is the title and the reassurance is the body, in that order on
710
+ * purpose: `ErrorState` puts a destructive-toned glyph above the title, so
711
+ * leading with "accepted" reads at a glance as the acceptance having failed —
712
+ * the one thing this state must not imply, since a user who believes that will
713
+ * try to accept again.
714
+ */
715
+ refreshFailedState: {
716
+ title: string;
717
+ body: string;
718
+ retryButton: string;
719
+ };
720
+ /**
721
+ * Acceptance is owed and the host supplied no documents to accept. A host
722
+ * misconfiguration, so it names no cause the user could act on.
723
+ */
724
+ unavailableState: {
725
+ title: string;
726
+ body: string;
727
+ };
728
+ }
666
729
  /** Named as the shipped white-label header names them. */
667
730
  declare const WIDGET_SUITE_SECTION_LABELS_EN: WidgetSuiteSectionLabels;
668
731
  declare const WIDGET_SUITE_SECTION_TITLE_LABELS_EN: WidgetSuiteSectionTitleLabels;
669
732
  declare const WIDGET_SUITE_CONTENT_LABELS_EN: WidgetSuiteContentLabels;
733
+ declare const WIDGET_SUITE_DISCLOSURE_LABELS_EN: WidgetSuiteDisclosureLabels;
670
734
 
671
735
  interface WidgetSuiteProps extends WidgetProviderProps {
672
736
  /**
@@ -682,6 +746,21 @@ interface WidgetSuiteProps extends WidgetProviderProps {
682
746
  * this is the host's ceiling rather than a promise of what renders.
683
747
  */
684
748
  sections: readonly WidgetSuiteSectionId[];
749
+ /**
750
+ * URLs of the bank-issued disclosure documents, for the acceptance state.
751
+ *
752
+ * Required only to *render* that state, and only reached when the session owes
753
+ * an acceptance — an organization whose requirement is `NOT_REQUIRED` never
754
+ * needs this. Host-supplied for the same reason `AcceptDisclosuresWidget` takes
755
+ * them: they are bank-issued legal instruments whose hosting is the
756
+ * integrator's to control, and a published package must not carry a URL a
757
+ * consumer's content-security policy can block (PLAT-1179).
758
+ *
759
+ * A session that owes an acceptance with none of these supplied gets the
760
+ * unavailable notice, not the suite — the gate is never dropped because the
761
+ * host under-configured it.
762
+ */
763
+ disclosureLinks?: AcceptDisclosuresLinks;
685
764
  /** Overrides for the shell's own copy — the nav landmark name, empty state. */
686
765
  labels?: PartialDeep<WidgetSuiteShellLabels>;
687
766
  /** Overrides for the section names in the menu. */
@@ -696,6 +775,11 @@ interface WidgetSuiteProps extends WidgetProviderProps {
696
775
  * and the Expenses placeholder.
697
776
  */
698
777
  contentLabels?: PartialDeep<WidgetSuiteContentLabels>;
778
+ /**
779
+ * Overrides for the copy the disclosure gate owns: its refresh-failure recovery
780
+ * and its unavailable notice. The acceptance surface carries its own labels.
781
+ */
782
+ disclosureLabels?: PartialDeep<WidgetSuiteDisclosureLabels>;
699
783
  /**
700
784
  * Shows a heading above each section, named as its menu item is.
701
785
  *
@@ -720,6 +804,13 @@ interface WidgetSuiteProps extends WidgetProviderProps {
720
804
  * pass-through mode. See `sections.tsx` for the two composition rules that
721
805
  * arrangement depends on.
722
806
  *
807
+ * That one response also decides which state the suite is in before the shell
808
+ * renders: placeholders while init has not settled, a closed retry state when
809
+ * init fails before answering the disclosure flags, the acceptance surface
810
+ * alone when the session owes the bank's disclosures, or the nav over its
811
+ * sections. States rather than an overlay over a mounted shell — see
812
+ * `WidgetSuiteInner` for why each boundary sits where it does.
813
+ *
723
814
  * The active section is held here rather than taken as a prop, matching
724
815
  * `BillPayWidgetNative` and `SettingsWidget`. A host-controlled
725
816
  * `selectedSectionId` / `onSectionChange` pair is the natural next step for
@@ -728,5 +819,5 @@ interface WidgetSuiteProps extends WidgetProviderProps {
728
819
  */
729
820
  declare function WidgetSuite({ baseUrl, widgetToken, organizationId, configClient, linkComponent, implementation, uiFramework, errorFallback, onError, analytics, ...innerProps }: WidgetSuiteProps): React.JSX.Element;
730
821
 
731
- export { WIDGET_SUITE_CONTENT_LABELS_EN, WIDGET_SUITE_DEFAULT_SECTIONS, WIDGET_SUITE_SECTION_LABELS_EN, WIDGET_SUITE_SECTION_TITLE_LABELS_EN, WIDGET_SUITE_SHELL_LABELS_EN, WidgetSuite, WidgetSuiteSectionId };
732
- export type { PartialDeep, WidgetSuiteContentLabels, WidgetSuiteProps, WidgetSuiteSectionLabels, WidgetSuiteSectionTitleLabels, WidgetSuiteShellLabels };
822
+ export { WIDGET_SUITE_CONTENT_LABELS_EN, WIDGET_SUITE_DEFAULT_SECTIONS, WIDGET_SUITE_DISCLOSURE_LABELS_EN, WIDGET_SUITE_SECTION_LABELS_EN, WIDGET_SUITE_SECTION_TITLE_LABELS_EN, WIDGET_SUITE_SHELL_LABELS_EN, WidgetSuite, WidgetSuiteSectionId };
823
+ export type { AcceptDisclosuresLinks, PartialDeep, WidgetSuiteContentLabels, WidgetSuiteDisclosureLabels, WidgetSuiteProps, WidgetSuiteSectionLabels, WidgetSuiteSectionTitleLabels, WidgetSuiteShellLabels };
@@ -1,6 +1,6 @@
1
- import { WIDGET_SUITE_CONTENT_LABELS_EN as e, WIDGET_SUITE_SECTION_LABELS_EN as t, WIDGET_SUITE_SECTION_TITLE_LABELS_EN as n } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index3.js";
2
- import { WIDGET_SUITE_DEFAULT_SECTIONS as r, WidgetSuiteSectionId as i } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js";
3
- import { WIDGET_SUITE_SHELL_LABELS_EN as a } from "../libs/tesouro-embedded-components-react/widget-suite/ui/dist/index2.js";
4
- import { WidgetSuite as o } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index5.js";
1
+ import { WIDGET_SUITE_CONTENT_LABELS_EN as e, WIDGET_SUITE_DISCLOSURE_LABELS_EN as t, WIDGET_SUITE_SECTION_LABELS_EN as n, WIDGET_SUITE_SECTION_TITLE_LABELS_EN as r } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js";
2
+ import { WIDGET_SUITE_DEFAULT_SECTIONS as i, WidgetSuiteSectionId as a } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index5.js";
3
+ import { WIDGET_SUITE_SHELL_LABELS_EN as o } from "../libs/tesouro-embedded-components-react/widget-suite/ui/dist/index2.js";
4
+ import { WidgetSuite as s } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index6.js";
5
5
  import "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index.js";
6
- export { e as WIDGET_SUITE_CONTENT_LABELS_EN, r as WIDGET_SUITE_DEFAULT_SECTIONS, t as WIDGET_SUITE_SECTION_LABELS_EN, n as WIDGET_SUITE_SECTION_TITLE_LABELS_EN, a as WIDGET_SUITE_SHELL_LABELS_EN, o as WidgetSuite, i as WidgetSuiteSectionId };
6
+ export { e as WIDGET_SUITE_CONTENT_LABELS_EN, i as WIDGET_SUITE_DEFAULT_SECTIONS, t as WIDGET_SUITE_DISCLOSURE_LABELS_EN, n as WIDGET_SUITE_SECTION_LABELS_EN, r as WIDGET_SUITE_SECTION_TITLE_LABELS_EN, o as WIDGET_SUITE_SHELL_LABELS_EN, s as WidgetSuite, a as WidgetSuiteSectionId };
@@ -10,6 +10,11 @@ import { FallbackProps } from 'react-error-boundary';
10
10
  interface WidgetSuiteShellLabels {
11
11
  /** Names the section menu for assistive technology. */
12
12
  navAriaLabel: string;
13
+ /**
14
+ * Announces the placeholder shell while the caller resolves which sections
15
+ * exist. Read out in place of the menu, which has no items yet to name.
16
+ */
17
+ loadingAriaLabel: string;
13
18
  /** Shown in place of the menu when the caller supplies no sections. */
14
19
  emptyState: {
15
20
  title: string;
@@ -590,6 +595,23 @@ interface WidgetProviderProps extends WidgetProviderBaseProps {
590
595
  onError?: (error: unknown, info: ErrorInfo) => void;
591
596
  }
592
597
 
598
+ /**
599
+ * The four disclosure documents a host supplies. Keyed rather than a free-form
600
+ * array because `agreementTextTemplate` names exactly these four instruments —
601
+ * an arbitrary-length list would let the rendered links and the text the user
602
+ * agrees to disagree with each other.
603
+ *
604
+ * URLs are host-supplied on purpose: they are bank-issued legal documents whose
605
+ * hosting is the integrator's concern, and a published package must not carry a
606
+ * Tesouro infrastructure URL a consumer's CSP can block (PLAT-1179).
607
+ */
608
+ interface AcceptDisclosuresLinks {
609
+ termsOfUseUrl: string;
610
+ privacyPolicyUrl: string;
611
+ electronicCommunicationsAgreementUrl: string;
612
+ usaPatriotActUrl: string;
613
+ }
614
+
593
615
  /**
594
616
  * The sections the suite can offer, declared in the default menu order
595
617
  * (EMBD-4875). Order here is documentation only — the suite renders whatever
@@ -663,10 +685,52 @@ interface WidgetSuiteContentLabels {
663
685
  expensesUnavailable: string;
664
686
  };
665
687
  }
688
+ /**
689
+ * Copy for the states where the suite cannot prove it may show normal content.
690
+ *
691
+ * Both are places the gate cannot proceed, and neither is reachable by a correct
692
+ * integration against a healthy API.
693
+ */
694
+ interface WidgetSuiteDisclosureLabels {
695
+ /**
696
+ * The first init fetch failed before the disclosure flags were known. The suite
697
+ * must fail closed here, because an unknown requirement is not permission to
698
+ * show ungated sections.
699
+ */
700
+ initFailedState: {
701
+ title: string;
702
+ body: string;
703
+ retryButton: string;
704
+ };
705
+ /**
706
+ * The acceptance was recorded and the init refresh that clears the gate
707
+ * failed, so only our view of it is stale.
708
+ *
709
+ * The failure is the title and the reassurance is the body, in that order on
710
+ * purpose: `ErrorState` puts a destructive-toned glyph above the title, so
711
+ * leading with "accepted" reads at a glance as the acceptance having failed —
712
+ * the one thing this state must not imply, since a user who believes that will
713
+ * try to accept again.
714
+ */
715
+ refreshFailedState: {
716
+ title: string;
717
+ body: string;
718
+ retryButton: string;
719
+ };
720
+ /**
721
+ * Acceptance is owed and the host supplied no documents to accept. A host
722
+ * misconfiguration, so it names no cause the user could act on.
723
+ */
724
+ unavailableState: {
725
+ title: string;
726
+ body: string;
727
+ };
728
+ }
666
729
  /** Named as the shipped white-label header names them. */
667
730
  declare const WIDGET_SUITE_SECTION_LABELS_EN: WidgetSuiteSectionLabels;
668
731
  declare const WIDGET_SUITE_SECTION_TITLE_LABELS_EN: WidgetSuiteSectionTitleLabels;
669
732
  declare const WIDGET_SUITE_CONTENT_LABELS_EN: WidgetSuiteContentLabels;
733
+ declare const WIDGET_SUITE_DISCLOSURE_LABELS_EN: WidgetSuiteDisclosureLabels;
670
734
 
671
735
  interface WidgetSuiteProps extends WidgetProviderProps {
672
736
  /**
@@ -682,6 +746,21 @@ interface WidgetSuiteProps extends WidgetProviderProps {
682
746
  * this is the host's ceiling rather than a promise of what renders.
683
747
  */
684
748
  sections: readonly WidgetSuiteSectionId[];
749
+ /**
750
+ * URLs of the bank-issued disclosure documents, for the acceptance state.
751
+ *
752
+ * Required only to *render* that state, and only reached when the session owes
753
+ * an acceptance — an organization whose requirement is `NOT_REQUIRED` never
754
+ * needs this. Host-supplied for the same reason `AcceptDisclosuresWidget` takes
755
+ * them: they are bank-issued legal instruments whose hosting is the
756
+ * integrator's to control, and a published package must not carry a URL a
757
+ * consumer's content-security policy can block (PLAT-1179).
758
+ *
759
+ * A session that owes an acceptance with none of these supplied gets the
760
+ * unavailable notice, not the suite — the gate is never dropped because the
761
+ * host under-configured it.
762
+ */
763
+ disclosureLinks?: AcceptDisclosuresLinks;
685
764
  /** Overrides for the shell's own copy — the nav landmark name, empty state. */
686
765
  labels?: PartialDeep<WidgetSuiteShellLabels>;
687
766
  /** Overrides for the section names in the menu. */
@@ -696,6 +775,11 @@ interface WidgetSuiteProps extends WidgetProviderProps {
696
775
  * and the Expenses placeholder.
697
776
  */
698
777
  contentLabels?: PartialDeep<WidgetSuiteContentLabels>;
778
+ /**
779
+ * Overrides for the copy the disclosure gate owns: its refresh-failure recovery
780
+ * and its unavailable notice. The acceptance surface carries its own labels.
781
+ */
782
+ disclosureLabels?: PartialDeep<WidgetSuiteDisclosureLabels>;
699
783
  /**
700
784
  * Shows a heading above each section, named as its menu item is.
701
785
  *
@@ -720,6 +804,13 @@ interface WidgetSuiteProps extends WidgetProviderProps {
720
804
  * pass-through mode. See `sections.tsx` for the two composition rules that
721
805
  * arrangement depends on.
722
806
  *
807
+ * That one response also decides which state the suite is in before the shell
808
+ * renders: placeholders while init has not settled, a closed retry state when
809
+ * init fails before answering the disclosure flags, the acceptance surface
810
+ * alone when the session owes the bank's disclosures, or the nav over its
811
+ * sections. States rather than an overlay over a mounted shell — see
812
+ * `WidgetSuiteInner` for why each boundary sits where it does.
813
+ *
723
814
  * The active section is held here rather than taken as a prop, matching
724
815
  * `BillPayWidgetNative` and `SettingsWidget`. A host-controlled
725
816
  * `selectedSectionId` / `onSectionChange` pair is the natural next step for
@@ -728,5 +819,5 @@ interface WidgetSuiteProps extends WidgetProviderProps {
728
819
  */
729
820
  declare function WidgetSuite({ baseUrl, widgetToken, organizationId, configClient, linkComponent, implementation, uiFramework, errorFallback, onError, analytics, ...innerProps }: WidgetSuiteProps): React.JSX.Element;
730
821
 
731
- export { WIDGET_SUITE_CONTENT_LABELS_EN, WIDGET_SUITE_DEFAULT_SECTIONS, WIDGET_SUITE_SECTION_LABELS_EN, WIDGET_SUITE_SECTION_TITLE_LABELS_EN, WIDGET_SUITE_SHELL_LABELS_EN, WidgetSuite, WidgetSuiteSectionId };
732
- export type { PartialDeep, WidgetSuiteContentLabels, WidgetSuiteProps, WidgetSuiteSectionLabels, WidgetSuiteSectionTitleLabels, WidgetSuiteShellLabels };
822
+ export { WIDGET_SUITE_CONTENT_LABELS_EN, WIDGET_SUITE_DEFAULT_SECTIONS, WIDGET_SUITE_DISCLOSURE_LABELS_EN, WIDGET_SUITE_SECTION_LABELS_EN, WIDGET_SUITE_SECTION_TITLE_LABELS_EN, WIDGET_SUITE_SHELL_LABELS_EN, WidgetSuite, WidgetSuiteSectionId };
823
+ export type { AcceptDisclosuresLinks, PartialDeep, WidgetSuiteContentLabels, WidgetSuiteDisclosureLabels, WidgetSuiteProps, WidgetSuiteSectionLabels, WidgetSuiteSectionTitleLabels, WidgetSuiteShellLabels };
@@ -1,6 +1,6 @@
1
- import { WIDGET_SUITE_CONTENT_LABELS_EN as e, WIDGET_SUITE_SECTION_LABELS_EN as t, WIDGET_SUITE_SECTION_TITLE_LABELS_EN as n } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index3.js";
2
- import { WIDGET_SUITE_DEFAULT_SECTIONS as r, WidgetSuiteSectionId as i } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js";
3
- import { WIDGET_SUITE_SHELL_LABELS_EN as a } from "../libs/tesouro-embedded-components-react/widget-suite/ui/dist/index2.js";
4
- import { WidgetSuite as o } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index5.js";
1
+ import { WIDGET_SUITE_CONTENT_LABELS_EN as e, WIDGET_SUITE_DISCLOSURE_LABELS_EN as t, WIDGET_SUITE_SECTION_LABELS_EN as n, WIDGET_SUITE_SECTION_TITLE_LABELS_EN as r } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js";
2
+ import { WIDGET_SUITE_DEFAULT_SECTIONS as i, WidgetSuiteSectionId as a } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index5.js";
3
+ import { WIDGET_SUITE_SHELL_LABELS_EN as o } from "../libs/tesouro-embedded-components-react/widget-suite/ui/dist/index2.js";
4
+ import { WidgetSuite as s } from "../libs/tesouro-embedded-components-react/widget-suite/feature/dist/index6.js";
5
5
  import "./WidgetSuite.js";
6
- export { e as WIDGET_SUITE_CONTENT_LABELS_EN, r as WIDGET_SUITE_DEFAULT_SECTIONS, t as WIDGET_SUITE_SECTION_LABELS_EN, n as WIDGET_SUITE_SECTION_TITLE_LABELS_EN, a as WIDGET_SUITE_SHELL_LABELS_EN, o as WidgetSuite, i as WidgetSuiteSectionId };
6
+ export { e as WIDGET_SUITE_CONTENT_LABELS_EN, i as WIDGET_SUITE_DEFAULT_SECTIONS, t as WIDGET_SUITE_DISCLOSURE_LABELS_EN, n as WIDGET_SUITE_SECTION_LABELS_EN, r as WIDGET_SUITE_SECTION_TITLE_LABELS_EN, o as WIDGET_SUITE_SHELL_LABELS_EN, s as WidgetSuite, a as WidgetSuiteSectionId };
package/dist/index.css CHANGED
@@ -155,6 +155,10 @@
155
155
  container-type: inline-size;
156
156
  container-name: field-group;
157
157
  }
158
+ .ttw\:\@container\/line-item {
159
+ container-type: inline-size;
160
+ container-name: line-item;
161
+ }
158
162
  .ttw\:\@container\/widget {
159
163
  container-type: inline-size;
160
164
  container-name: widget;
@@ -353,6 +357,12 @@
353
357
  .ttw\:order-last {
354
358
  order: 9999;
355
359
  }
360
+ .ttw\:col-span-1 {
361
+ grid-column: span 1 / span 1;
362
+ }
363
+ .ttw\:col-span-3 {
364
+ grid-column: span 3 / span 3;
365
+ }
356
366
  .ttw\:col-start-2 {
357
367
  grid-column-start: 2;
358
368
  }
@@ -1624,9 +1634,6 @@
1624
1634
  .ttw\:grid-cols-3 {
1625
1635
  grid-template-columns: repeat(3, minmax(0, 1fr));
1626
1636
  }
1627
- .ttw\:grid-cols-4 {
1628
- grid-template-columns: repeat(4, minmax(0, 1fr));
1629
- }
1630
1637
  .ttw\:grid-cols-\[0_1fr\] {
1631
1638
  grid-template-columns: 0 1fr;
1632
1639
  }
@@ -1958,6 +1965,10 @@
1958
1965
  border-top-left-radius: calc(var(--ttw-radius) - 2px);
1959
1966
  border-bottom-left-radius: calc(var(--ttw-radius) - 2px);
1960
1967
  }
1968
+ .ttw\:rounded-l-none {
1969
+ border-top-left-radius: 0;
1970
+ border-bottom-left-radius: 0;
1971
+ }
1961
1972
  .ttw\:rounded-tl-\[14px\] {
1962
1973
  border-top-left-radius: 14px;
1963
1974
  }
@@ -1968,6 +1979,10 @@
1968
1979
  border-top-right-radius: calc(var(--ttw-radius) - 2px);
1969
1980
  border-bottom-right-radius: calc(var(--ttw-radius) - 2px);
1970
1981
  }
1982
+ .ttw\:rounded-r-none {
1983
+ border-top-right-radius: 0;
1984
+ border-bottom-right-radius: 0;
1985
+ }
1971
1986
  .ttw\:rounded-tr-\[14px\] {
1972
1987
  border-top-right-radius: 14px;
1973
1988
  }
@@ -2817,9 +2832,6 @@
2817
2832
  .ttw\:pt-6 {
2818
2833
  padding-top: calc(var(--ttw-spacing) * 6);
2819
2834
  }
2820
- .ttw\:pt-7 {
2821
- padding-top: calc(var(--ttw-spacing) * 7);
2822
- }
2823
2835
  .ttw\:pt-8 {
2824
2836
  padding-top: calc(var(--ttw-spacing) * 8);
2825
2837
  }
@@ -2949,9 +2961,6 @@
2949
2961
  .ttw\:text-right {
2950
2962
  text-align: right;
2951
2963
  }
2952
- .ttw\:align-baseline {
2953
- vertical-align: baseline;
2954
- }
2955
2964
  .ttw\:align-middle {
2956
2965
  vertical-align: middle;
2957
2966
  }
@@ -4572,6 +4581,28 @@
4572
4581
  .ttw\:has-\[\:disabled\]\:opacity-60:has(:is(:disabled)) {
4573
4582
  opacity: 60%;
4574
4583
  }
4584
+ .ttw\:has-\[\:focus-visible\]\:border-ring:has(:is(:focus-visible)) {
4585
+ border-color: var(--ttw-ring);
4586
+ }
4587
+ .ttw\:has-\[\:focus-visible\]\:ring-\[3px\]:has(:is(:focus-visible)) {
4588
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
4589
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
4590
+ }
4591
+ .ttw\:has-\[\:focus-visible\]\:ring-ring\/50:has(:is(:focus-visible)) {
4592
+ --tw-ring-color: var(--ttw-ring);
4593
+ @supports (color: color-mix(in lab, red, red)) {
4594
+ --tw-ring-color: color-mix(in oklab, var(--ttw-ring) 50%, transparent);
4595
+ }
4596
+ }
4597
+ .ttw\:has-\[\[aria-invalid\=true\]\]\:border-destructive:has(:is([aria-invalid=true])) {
4598
+ border-color: var(--ttw-destructive);
4599
+ }
4600
+ .ttw\:has-\[\[aria-invalid\=true\]\]\:ring-destructive\/20:has(:is([aria-invalid=true])) {
4601
+ --tw-ring-color: var(--ttw-destructive);
4602
+ @supports (color: color-mix(in lab, red, red)) {
4603
+ --tw-ring-color: color-mix(in oklab, var(--ttw-destructive) 20%, transparent);
4604
+ }
4605
+ }
4575
4606
  .ttw\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has(:is([data-slot=input-group-control]:focus-visible)) {
4576
4607
  border-color: var(--ttw-ring);
4577
4608
  }
@@ -5453,6 +5484,11 @@
5453
5484
  align-items: flex-start;
5454
5485
  }
5455
5486
  }
5487
+ @container line-item (width >= 32rem) {
5488
+ .ttw\:\@lg\/line-item\:grid-cols-6 {
5489
+ grid-template-columns: repeat(6, minmax(0, 1fr));
5490
+ }
5491
+ }
5456
5492
  .ttw\:dark\:border-input:is(.dark *) {
5457
5493
  border-color: var(--ttw-input);
5458
5494
  }
package/dist/index.d.ts CHANGED
@@ -1186,10 +1186,18 @@ declare function useOwnWidgetConfig(): WidgetConfigInput | null;
1186
1186
  * the correct fetch-owning ancestor regardless of nesting depth.
1187
1187
  *
1188
1188
  * Re-fetching keeps the current `initResponse` visible while the request is in
1189
- * flight — the previous data is not cleared until the new response arrives (or the
1190
- * fetch fails). This prevents a blank/loading flash during background refreshes.
1191
- * If the re-fetch fails, `initResponse` is cleared and {@link useWidgetError}
1192
- * returns the error.
1189
+ * flight — the previous data is not cleared until the new response arrives. This
1190
+ * prevents a blank/loading flash during background refreshes.
1191
+ *
1192
+ * **A failed re-fetch keeps it visible too**, and only sets
1193
+ * {@link useWidgetError}. `useWidgetFetch` clears the retained response for a
1194
+ * *client* change, which is an auth boundary; a re-fetch is not one, so the
1195
+ * previous response is still valid for the active token. This line previously
1196
+ * said the opposite, which matters: a consumer branching on `!initResponse`
1197
+ * would conclude a failed refresh drops it back to its pre-init state, when in
1198
+ * fact it keeps rendering the response it already had. Verified against the
1199
+ * running provider (EMBD-4911) — a suite gating on a field of the init response
1200
+ * holds that gate closed after a failed refresh rather than falling open.
1193
1201
  *
1194
1202
  * @returns A stable `() => void` function. Calling it increments an internal counter
1195
1203
  * that re-triggers the fetch effect. Returns a no-op when called outside any provider.
@@ -1355,13 +1363,19 @@ type InnerProps = Omit<AcceptDisclosuresWidgetProps$1, UiOwnedProps> & {
1355
1363
  * Invitation token from the invite link. Bound into the disclosures lookup
1356
1364
  * before activation, and used to remount consent state when the invite
1357
1365
  * changes. This widget does not read URL search params.
1366
+ *
1367
+ * Supply it (with {@link userId}) for the invite flow. Omit both for an
1368
+ * already-active user re-accepting a newly published version — they hold no
1369
+ * invite, and the widget token identifies them on both calls. See
1370
+ * `useAcceptWidgetDisclosures`.
1358
1371
  */
1359
- invitationToken: string;
1372
+ invitationToken?: string;
1360
1373
  /**
1361
- * Invited user id from the invite link. Required with {@link invitationToken}
1362
- * for the disclosures lookup and remount identity.
1374
+ * Invited user id from the invite link. Paired with {@link invitationToken}
1375
+ * for the disclosures lookup and remount identity; omitted with it outside the
1376
+ * invite flow.
1363
1377
  */
1364
- userId: string;
1378
+ userId?: string;
1365
1379
  /**
1366
1380
  * URLs of the four bank-issued disclosure documents. Required to render along
1367
1381
  * with a bank name from widget init: the widget carries no document URLs of its
@@ -1379,13 +1393,19 @@ type InnerProps = Omit<AcceptDisclosuresWidgetProps$1, UiOwnedProps> & {
1379
1393
  };
1380
1394
  type AcceptDisclosuresWidgetProps = WidgetProviderProps & InnerProps;
1381
1395
  /**
1382
- * Self-contained AcceptDisclosures widget for the pre-auth invite flow.
1396
+ * Self-contained AcceptDisclosures widget.
1383
1397
  * Posts `POST /api/widget-gateway/disclosure-acceptance` (after reading the
1384
1398
  * disclosure version in force via the widget-gateway proxy), which activates
1385
1399
  * the invitee and records acceptance in one transaction, then awaits any
1386
1400
  * `onAccepted` continuation and kicks a widget-init refresh so host gates
1387
1401
  * keyed on `INVITED` can clear. Auth uses the normal WidgetToken provider
1388
1402
  * contract — never an APP/M2M bearer.
1403
+ *
1404
+ * Two flows, one surface: the pre-auth invite flow passes `invitationToken` +
1405
+ * `userId`; an already-active user who owes a re-acceptance (widget init reports
1406
+ * `disclosuresRequired: 'REQUIRED'` with `disclosuresAccepted: false`) passes
1407
+ * neither, and the same init refresh clears the gate that mounted this. See
1408
+ * `WidgetSuite`, which mounts it as its acceptance state.
1389
1409
  */
1390
1410
  declare function AcceptDisclosuresWidget({ baseUrl, widgetToken, organizationId, configClient, linkComponent, implementation, uiFramework, errorFallback, onError, analytics, ...innerProps }: AcceptDisclosuresWidgetProps): React.JSX.Element;
1391
1411
 
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ACCEPT_DISCLOSURES_WIDGET_LABELS_EN as e } from "./libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/index2.js";
1
+ import { ACCEPT_DISCLOSURES_WIDGET_LABELS_EN as e } from "./libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/lib/AcceptDisclosuresWidget/labels.js";
2
2
  import { cloneEmbeddedClient as t } from "./libs/tesouro-embedded-components-react/shared/data-access/dist/lib/createEmbeddedClient.js";
3
3
  import { Implementation as n } from "./libs/tesouro-embedded-components-react/shared/feature/dist/lib/WidgetProvider/types.js";
4
4
  import { getGlobalWidgetConfig as r, setGlobalWidgetConfig as i, updateGlobalWidgetConfig as a } from "./libs/tesouro-embedded-components-react/shared/feature/dist/lib/WidgetProvider/globalStore.js";
@@ -15,7 +15,7 @@ import "./lib/AcceptDisclosuresWidget.js";
15
15
  import { BankAccountsWidget as x } from "./libs/tesouro-embedded-components-react/bank-accounts-widget/feature/dist/index8.js";
16
16
  import "./lib/BankAccountsWidget.js";
17
17
  import { CounterpartsWidget as S } from "./libs/tesouro-embedded-components-react/counterparts-widget/feature/dist/index8.js";
18
- import { BillPayWidget as C } from "./libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index28.js";
18
+ import { BillPayWidget as C } from "./libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index30.js";
19
19
  import "./lib/BillPayWidget.js";
20
20
  import { CardDetailsWidget as w } from "./libs/tesouro-embedded-components-react/card-details-widget/feature/dist/index6.js";
21
21
  import { CardFormatValue as T } from "./libs/tesouro-embedded-components-react/create-card-widget/feature/dist/index3.js";
@@ -641,13 +641,19 @@ type InnerProps = Omit<AcceptDisclosuresWidgetProps$1, UiOwnedProps> & {
641
641
  * Invitation token from the invite link. Bound into the disclosures lookup
642
642
  * before activation, and used to remount consent state when the invite
643
643
  * changes. This widget does not read URL search params.
644
+ *
645
+ * Supply it (with {@link userId}) for the invite flow. Omit both for an
646
+ * already-active user re-accepting a newly published version — they hold no
647
+ * invite, and the widget token identifies them on both calls. See
648
+ * `useAcceptWidgetDisclosures`.
644
649
  */
645
- invitationToken: string;
650
+ invitationToken?: string;
646
651
  /**
647
- * Invited user id from the invite link. Required with {@link invitationToken}
648
- * for the disclosures lookup and remount identity.
652
+ * Invited user id from the invite link. Paired with {@link invitationToken}
653
+ * for the disclosures lookup and remount identity; omitted with it outside the
654
+ * invite flow.
649
655
  */
650
- userId: string;
656
+ userId?: string;
651
657
  /**
652
658
  * URLs of the four bank-issued disclosure documents. Required to render along
653
659
  * with a bank name from widget init: the widget carries no document URLs of its
@@ -665,13 +671,19 @@ type InnerProps = Omit<AcceptDisclosuresWidgetProps$1, UiOwnedProps> & {
665
671
  };
666
672
  type AcceptDisclosuresWidgetProps = WidgetProviderProps & InnerProps;
667
673
  /**
668
- * Self-contained AcceptDisclosures widget for the pre-auth invite flow.
674
+ * Self-contained AcceptDisclosures widget.
669
675
  * Posts `POST /api/widget-gateway/disclosure-acceptance` (after reading the
670
676
  * disclosure version in force via the widget-gateway proxy), which activates
671
677
  * the invitee and records acceptance in one transaction, then awaits any
672
678
  * `onAccepted` continuation and kicks a widget-init refresh so host gates
673
679
  * keyed on `INVITED` can clear. Auth uses the normal WidgetToken provider
674
680
  * contract — never an APP/M2M bearer.
681
+ *
682
+ * Two flows, one surface: the pre-auth invite flow passes `invitationToken` +
683
+ * `userId`; an already-active user who owes a re-acceptance (widget init reports
684
+ * `disclosuresRequired: 'REQUIRED'` with `disclosuresAccepted: false`) passes
685
+ * neither, and the same init refresh clears the gate that mounted this. See
686
+ * `WidgetSuite`, which mounts it as its acceptance state.
675
687
  */
676
688
  declare function AcceptDisclosuresWidget({ baseUrl, widgetToken, organizationId, configClient, linkComponent, implementation, uiFramework, errorFallback, onError, analytics, ...innerProps }: AcceptDisclosuresWidgetProps): React.JSX.Element;
677
689
 
@@ -1,4 +1,4 @@
1
- import { ACCEPT_DISCLOSURES_WIDGET_LABELS_EN as e } from "../libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/index2.js";
1
+ import { ACCEPT_DISCLOSURES_WIDGET_LABELS_EN as e } from "../libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/lib/AcceptDisclosuresWidget/labels.js";
2
2
  import "../libs/tesouro-embedded-components-react/accept-disclosures-widget/ui/dist/index.js";
3
3
  import { AcceptDisclosuresWidget as t } from "../libs/tesouro-embedded-components-react/accept-disclosures-widget/feature/dist/index4.js";
4
4
  import "../libs/tesouro-embedded-components-react/accept-disclosures-widget/feature/dist/index.js";
@@ -1,3 +1,3 @@
1
- import { BillPayWidget as e } from "../libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index28.js";
1
+ import { BillPayWidget as e } from "../libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index30.js";
2
2
  import "../libs/tesouro-embedded-components-react/bill-pay-widget/feature/dist/index.js";
3
3
  export { e as BillPayWidget };
@@ -1070,10 +1070,18 @@ declare function useOwnWidgetConfig(): WidgetConfigInput | null;
1070
1070
  * the correct fetch-owning ancestor regardless of nesting depth.
1071
1071
  *
1072
1072
  * Re-fetching keeps the current `initResponse` visible while the request is in
1073
- * flight — the previous data is not cleared until the new response arrives (or the
1074
- * fetch fails). This prevents a blank/loading flash during background refreshes.
1075
- * If the re-fetch fails, `initResponse` is cleared and {@link useWidgetError}
1076
- * returns the error.
1073
+ * flight — the previous data is not cleared until the new response arrives. This
1074
+ * prevents a blank/loading flash during background refreshes.
1075
+ *
1076
+ * **A failed re-fetch keeps it visible too**, and only sets
1077
+ * {@link useWidgetError}. `useWidgetFetch` clears the retained response for a
1078
+ * *client* change, which is an auth boundary; a re-fetch is not one, so the
1079
+ * previous response is still valid for the active token. This line previously
1080
+ * said the opposite, which matters: a consumer branching on `!initResponse`
1081
+ * would conclude a failed refresh drops it back to its pre-init state, when in
1082
+ * fact it keeps rendering the response it already had. Verified against the
1083
+ * running provider (EMBD-4911) — a suite gating on a field of the init response
1084
+ * holds that gate closed after a failed refresh rather than falling open.
1077
1085
  *
1078
1086
  * @returns A stable `() => void` function. Calling it increments an internal counter
1079
1087
  * that re-triggers the fetch effect. Returns a no-op when called outside any provider.