@npm-zenwork/tax-remittance-ui 0.5.0 → 0.5.2

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 (36) hide show
  1. package/dist/api/entities.d.ts +8 -0
  2. package/dist/components/dashboard/useSetupProgress.d.ts +13 -1
  3. package/dist/components/forms/CustomSelect.d.ts +40 -0
  4. package/dist/components/forms/FormField.d.ts +1 -8
  5. package/dist/components/forms/PhoneNumberInput.d.ts +27 -0
  6. package/dist/components/onboarding/EntityAddressFields.d.ts +3 -2
  7. package/dist/components/onboarding/EntityBusinessFields.d.ts +3 -2
  8. package/dist/components/onboarding/SecondaryTaxpayerSection.d.ts +3 -1
  9. package/dist/components/onboarding/entityHelpContent.d.ts +1 -1
  10. package/dist/components/onboarding/useEntityForm.d.ts +2 -0
  11. package/dist/components/payments/PaymentActionsFooter.d.ts +6 -0
  12. package/dist/components/payments/PaymentRowMenu.d.ts +1 -1
  13. package/dist/components/payments/RecurringPaymentToggle.d.ts +1 -1
  14. package/dist/components/payments/SignatureFieldGroup.d.ts +6 -1
  15. package/dist/components/payments/federalSubcategoryRules.d.ts +7 -0
  16. package/dist/components/payments/federalTaxPeriodRules.d.ts +7 -0
  17. package/dist/components/payments/remittancePaymentMappers.d.ts +5 -1
  18. package/dist/components/payments/statePaymentAuthorizationConfig.d.ts +1 -1
  19. package/dist/components/settings/EditEntityForm.d.ts +1 -1
  20. package/dist/components/ui/useAnchoredLayer.d.ts +35 -0
  21. package/dist/embedded/EmbeddedLayout.d.ts +2 -4
  22. package/dist/index.cjs +20 -20
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.mjs +8887 -8724
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/lib/entityFormUtils.d.ts +12 -4
  28. package/dist/lib/entityStatus.d.ts +12 -0
  29. package/dist/lib/fieldRules.d.ts +24 -6
  30. package/dist/styles.css +1 -1
  31. package/dist/types/entity.d.ts +2 -2
  32. package/dist/types/statePayment.d.ts +4 -4
  33. package/package.json +1 -1
  34. package/dist/components/forms/PhoneInputGroup.d.ts +0 -14
  35. package/dist/components/onboarding/EntityPhoneField.d.ts +0 -9
  36. package/dist/components/payments/CustomSelect.d.ts +0 -25
@@ -17,4 +17,12 @@ interface CreateEntityDetailsResponse {
17
17
  export declare function getAllMyEntities(): Promise<EntityDetailsResponse[]>;
18
18
  export declare function createEntity(request: CreateEntityDetailsRequest): Promise<CreateEntityDetailsResponse>;
19
19
  export declare function updateEntity(entityId: number, request: UpdateEntityDetailsRequest): Promise<EntityDetailsResponse>;
20
+ /**
21
+ * Activates / deactivates an entity.
22
+ *
23
+ * The same PATCH endpoint as updateEntity — it merges only the fields present
24
+ * in the body (EntitiesController.Update), so status travels on its own rather
25
+ * than round-tripping the whole profile.
26
+ */
27
+ export declare function updateEntityStatus(entityId: number, status: string): Promise<EntityDetailsResponse>;
20
28
  export {};
@@ -2,7 +2,11 @@ import { DashboardResponse } from '../../types/dashboard';
2
2
  interface UseSetupProgressArgs {
3
3
  entityId: number | null;
4
4
  entityCount: number;
5
+ /** True while the entities list itself is still loading. */
6
+ entitiesLoading: boolean;
5
7
  dashboard: DashboardResponse | undefined;
8
+ /** True while the selected entity's dashboard summary is still loading. */
9
+ dashboardLoading: boolean;
6
10
  /**
7
11
  * Full name of the signed-in user, when the host app supplies one. Embedded
8
12
  * hosts own the session, so the widget's own storage is empty there.
@@ -15,6 +19,14 @@ export interface SetupProgress {
15
19
  hasBankAccount: boolean;
16
20
  hasAuthorizedPayment: boolean;
17
21
  isComplete: boolean;
22
+ /**
23
+ * True until every signal `isComplete` depends on — entities, and (once an
24
+ * entity is selected) its dashboard summary and bank accounts — has loaded
25
+ * at least once. Callers must wait for this before branching on
26
+ * `isComplete`, otherwise the checklist flashes true/false/true as each
27
+ * query resolves at a different time (e.g. right after login).
28
+ */
29
+ isLoading: boolean;
18
30
  /** First name of the signed-in user, when the session carries one. */
19
31
  userName?: string;
20
32
  }
@@ -26,5 +38,5 @@ export interface SetupProgress {
26
38
  * are filled in, and scheduling happens later from the drafts tab. The API has
27
39
  * no separate authorization flag to read.
28
40
  */
29
- export declare function useSetupProgress({ entityId, entityCount, dashboard, userName, }: UseSetupProgressArgs): SetupProgress;
41
+ export declare function useSetupProgress({ entityId, entityCount, entitiesLoading, dashboard, dashboardLoading, userName, }: UseSetupProgressArgs): SetupProgress;
30
42
  export {};
@@ -0,0 +1,40 @@
1
+ import { ReactNode } from 'react';
2
+ export interface CustomSelectOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ /** Small pill shown to the right of the label (e.g. "Coming Soon") — plain text, no markup. */
7
+ badge?: string;
8
+ }
9
+ interface CustomSelectProps {
10
+ value: string;
11
+ onChange: (value: string) => void;
12
+ options: CustomSelectOption[];
13
+ placeholder: string;
14
+ disabled?: boolean;
15
+ hasError?: boolean;
16
+ loading?: boolean;
17
+ loadingLabel?: string;
18
+ /**
19
+ * Renders the control with its own label and error line. Omit it when the
20
+ * caller already provides those — inside a `PaymentField`, say.
21
+ */
22
+ label?: string;
23
+ required?: boolean;
24
+ error?: string;
25
+ id?: string;
26
+ ariaLabel?: string;
27
+ /** `sm` is the compact inline control toolbars use (pagination, chart headers). */
28
+ size?: 'md' | 'sm';
29
+ /** Icon pinned inside the control's left edge, as on the tax-year picker. */
30
+ leadingIcon?: ReactNode;
31
+ }
32
+ /**
33
+ * The one dropdown in the app. Every select goes through it so hover/focus/selected
34
+ * styling stays identical everywhere (border-gov-400 / bg-gov-50, matching the app's
35
+ * focus-ring accent) — a native <select>'s option list is OS-rendered chrome the page
36
+ * can't restyle, and can't show a badge (see the Reason for Payment "Coming Soon"
37
+ * case) at all. Change it here and every dropdown changes with it.
38
+ */
39
+ export declare function CustomSelect({ value, onChange, options, placeholder, disabled, hasError, loading, loadingLabel, label, required, error, id, ariaLabel, size, leadingIcon, }: CustomSelectProps): import("react").JSX.Element;
40
+ export {};
@@ -1,4 +1,4 @@
1
- import { InputHTMLAttributes, ReactNode, SelectHTMLAttributes } from 'react';
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
2
  export interface FormLabelProps {
3
3
  label: string;
4
4
  required?: boolean;
@@ -13,13 +13,6 @@ interface FormInputProps extends InputHTMLAttributes<HTMLInputElement> {
13
13
  tooltip?: string;
14
14
  }
15
15
  export declare const FormInput: import('react').ForwardRefExoticComponent<FormInputProps & import('react').RefAttributes<HTMLInputElement>>;
16
- interface FormSelectProps extends SelectHTMLAttributes<HTMLSelectElement> {
17
- label: string;
18
- required?: boolean;
19
- error?: string;
20
- children: ReactNode;
21
- }
22
- export declare const FormSelect: import('react').ForwardRefExoticComponent<FormSelectProps & import('react').RefAttributes<HTMLSelectElement>>;
23
16
  interface FormSectionProps {
24
17
  step?: number;
25
18
  title: string;
@@ -0,0 +1,27 @@
1
+ import { ChangeEvent, FocusEventHandler } from 'react';
2
+ import { UseFormRegisterReturn } from 'react-hook-form';
3
+ interface PhoneNumberInputProps {
4
+ label?: string;
5
+ required?: boolean;
6
+ error?: string;
7
+ /** Chrome only: `payment` matches the IRS-form fields, everything else uses `default`. */
8
+ variant?: 'default' | 'payment';
9
+ placeholder?: string;
10
+ id?: string;
11
+ name?: string;
12
+ readOnly?: boolean;
13
+ disabled?: boolean;
14
+ onFocus?: FocusEventHandler<HTMLInputElement>;
15
+ /** react-hook-form registration — omit for a controlled field. */
16
+ register?: UseFormRegisterReturn;
17
+ /** Controlled value/handler — omit when `register` is given. */
18
+ value?: string;
19
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
20
+ }
21
+ /**
22
+ * The only phone number input in the app. Every phone field goes through it so
23
+ * they all mask alike (`+1 (479) 555-0123`), cap at the same length and accept
24
+ * digits only — change it here and every form changes with it.
25
+ */
26
+ export declare function PhoneNumberInput({ label, required, error, variant, placeholder, id, name, readOnly, disabled, onFocus, register, value, onChange, }: PhoneNumberInputProps): import("react").JSX.Element;
27
+ export {};
@@ -1,9 +1,10 @@
1
- import { FieldErrors, UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
1
+ import { Control, FieldErrors, UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
2
2
  import { StateOption } from '../../lib/useAddressReference';
3
3
  import { EntityFormValues } from '../../types/entity';
4
4
  import { HelpKey } from './entityHelpContent';
5
5
  interface EntityAddressFieldsProps {
6
6
  register: UseFormRegister<EntityFormValues>;
7
+ control: Control<EntityFormValues>;
7
8
  errors: FieldErrors<EntityFormValues>;
8
9
  zipRegister: UseFormRegisterReturn;
9
10
  isUS: boolean;
@@ -13,5 +14,5 @@ interface EntityAddressFieldsProps {
13
14
  focusHelp: (key: HelpKey) => () => void;
14
15
  }
15
16
  /** Registered address for the entity — labels and formatting follow the country. */
16
- export declare function EntityAddressFields({ register, errors, zipRegister, isUS, state, stateOptions, zipStateMismatch, focusHelp, }: EntityAddressFieldsProps): import("react").JSX.Element;
17
+ export declare function EntityAddressFields({ register, control, errors, zipRegister, isUS, state, stateOptions, zipStateMismatch, focusHelp, }: EntityAddressFieldsProps): import("react").JSX.Element;
17
18
  export {};
@@ -1,8 +1,9 @@
1
- import { FieldErrors, UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
1
+ import { Control, FieldErrors, UseFormRegister, UseFormRegisterReturn } from 'react-hook-form';
2
2
  import { EntityFormValues } from '../../types/entity';
3
3
  import { HelpKey } from './entityHelpContent';
4
4
  interface EntityBusinessFieldsProps {
5
5
  register: UseFormRegister<EntityFormValues>;
6
+ control: Control<EntityFormValues>;
6
7
  errors: FieldErrors<EntityFormValues>;
7
8
  einRegister: UseFormRegisterReturn;
8
9
  phoneRegister: UseFormRegisterReturn;
@@ -13,5 +14,5 @@ interface EntityBusinessFieldsProps {
13
14
  focusHelp: (key: HelpKey) => () => void;
14
15
  }
15
16
  /** Business account fields: names, contact details, entity type and EIN. */
16
- export declare function EntityBusinessFields({ register, errors, einRegister, phoneRegister, accountType, idLabel, idPlaceholder, idMaxLength, focusHelp, }: EntityBusinessFieldsProps): import("react").JSX.Element;
17
+ export declare function EntityBusinessFields({ register, control, errors, einRegister, phoneRegister, accountType, idLabel, idPlaceholder, idMaxLength, focusHelp, }: EntityBusinessFieldsProps): import("react").JSX.Element;
17
18
  export {};
@@ -12,6 +12,8 @@ interface SecondaryTaxpayerSectionProps {
12
12
  /** Per-field messages, populated on submit. */
13
13
  errors: SecondaryTaxpayerErrors;
14
14
  onFieldChange: (field: SecondaryField) => (event: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
15
+ /** Value-based counterpart, for controls that report a value rather than an event. */
16
+ onFieldValueChange: (field: SecondaryField, value: string) => void;
15
17
  onSsnChange: (value: string) => void;
16
18
  onSameAsPrimaryChange: (checked: boolean) => void;
17
19
  }
@@ -19,5 +21,5 @@ interface SecondaryTaxpayerSectionProps {
19
21
  * Joint-filer details, shown for Individual + "Married Filing Jointly".
20
22
  * UI-only — nothing here is submitted yet (see SecondaryTaxpayer).
21
23
  */
22
- export declare function SecondaryTaxpayerSection({ values, address, stateOptions, errors, onFieldChange, onSsnChange, onSameAsPrimaryChange, }: SecondaryTaxpayerSectionProps): import("react").JSX.Element;
24
+ export declare function SecondaryTaxpayerSection({ values, address, stateOptions, errors, onFieldChange, onFieldValueChange, onSsnChange, onSameAsPrimaryChange, }: SecondaryTaxpayerSectionProps): import("react").JSX.Element;
23
25
  export {};
@@ -9,7 +9,7 @@ export interface FieldHelp {
9
9
  mistake?: string;
10
10
  }
11
11
  /**
12
- * Per-field copy for the "How to fill this" side panel — keyed by a help key
12
+ * Per-field copy for the "How to fill this" side panel - keyed by a help key
13
13
  * set on each input's onFocus. Fields without an entry here fall back to the
14
14
  * panel's generic copy.
15
15
  */
@@ -13,6 +13,7 @@ export interface CreatedEntitySnapshot {
13
13
  */
14
14
  export declare function useEntityForm(): {
15
15
  register: import('react-hook-form').UseFormRegister<EntityFormValues>;
16
+ control: import('react-hook-form').Control<EntityFormValues, any, EntityFormValues>;
16
17
  errors: import('react-hook-form').FieldErrors<EntityFormValues>;
17
18
  onSubmit: (e?: React.BaseSyntheticEvent) => Promise<void>;
18
19
  error: string | null;
@@ -71,6 +72,7 @@ export declare function useEntityForm(): {
71
72
  };
72
73
  secondaryStateOptions: import('../../lib/useAddressReference').StateOption[];
73
74
  updateSecondaryField: <K extends keyof Omit<SecondaryTaxpayer, "sameAsPrimaryAddress">>(field: K) => (event: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
75
+ setSecondaryField: <K extends keyof Omit<SecondaryTaxpayer, "sameAsPrimaryAddress">>(field: K, value: string) => void;
74
76
  setSecondarySsn: (value: string) => void;
75
77
  setSecondarySameAsPrimary: (checked: boolean) => void;
76
78
  createdEntity: CreatedEntitySnapshot | null;
@@ -26,6 +26,12 @@ interface SubmitAction {
26
26
  label: string;
27
27
  disabled?: boolean;
28
28
  isSubmitting?: boolean;
29
+ /**
30
+ * Set false where the submit is blocked by something that does not make the
31
+ * step unsaveable — an unticked consent box, say: the payment is filled in
32
+ * and worth keeping as a draft, the taxpayer just has not agreed yet.
33
+ */
34
+ blocksDraft?: boolean;
29
35
  /**
30
36
  * Steps that are a `<form>` leave this off and let the button submit. The
31
37
  * federal review step is a plain `<div>`, so it passes its handler here.
@@ -9,6 +9,6 @@ interface PaymentRowMenuProps {
9
9
  isSubmitting?: boolean;
10
10
  isViewPdfLoading?: boolean;
11
11
  }
12
- /** Vertical-dots row menu — holds the actions available for the row's status. */
12
+ /** Vertical-dots row menu - holds the actions available for the row's status. */
13
13
  export declare function PaymentRowMenu(props: PaymentRowMenuProps): import("react").JSX.Element;
14
14
  export {};
@@ -6,7 +6,7 @@ interface RecurringPaymentToggleProps {
6
6
  }
7
7
  /**
8
8
  * "Make This a Recurring Payment" panel. When enabled, the caller adds each occurrence
9
- * explicitly ("+ Add New" in the Tax Periods & Amounts section below) — every occurrence keeps
9
+ * explicitly ("+ Add New" in the Tax Periods & Amounts section below) - every occurrence keeps
10
10
  * its own Tax Period, Tax Amount, and Payment Date, submitted together as one series.
11
11
  */
12
12
  export declare function RecurringPaymentToggle({ enabled, onChange, disabled, helperText, }: RecurringPaymentToggleProps): import("react").JSX.Element;
@@ -5,15 +5,20 @@ interface SignatureFieldGroupProps {
5
5
  signature: UseFormRegisterReturn;
6
6
  title: UseFormRegisterReturn;
7
7
  date: UseFormRegisterReturn;
8
+ /** Adds a signer-name cell between the signature and the title — state authorizations ask for it. */
9
+ signerName?: UseFormRegisterReturn;
10
+ signerNameCaption?: string;
11
+ signerNamePlaceholder?: string;
8
12
  signatureValue: string;
9
13
  dateValue?: string;
10
14
  dateReadOnly?: boolean;
11
15
  errors?: {
12
16
  signature?: string;
17
+ signerName?: string;
13
18
  title?: string;
14
19
  date?: string;
15
20
  };
16
21
  signatureCaption?: string;
17
22
  }
18
- export declare function SignatureFieldGroup({ label, required, signature, title, date, signatureValue, dateValue, dateReadOnly, errors, signatureCaption, }: SignatureFieldGroupProps): import("react").JSX.Element;
23
+ export declare function SignatureFieldGroup({ label, required, signature, title, date, signerName, signerNameCaption, signerNamePlaceholder, signatureValue, dateValue, dateReadOnly, errors, signatureCaption, }: SignatureFieldGroupProps): import("react").JSX.Element;
19
24
  export {};
@@ -26,6 +26,13 @@ export declare function getSubcategoryCodeLabels(taxFormType: string): {
26
26
  export declare function isValidAmountField(value: string): boolean;
27
27
  export declare function sanitizeFederalAmountInput(raw: string): string;
28
28
  export declare function parseAmountField(value: string): number | null;
29
+ /**
30
+ * Settle a half-typed amount when the field loses focus: `123` becomes
31
+ * `123.00`, `123.4` becomes `123.40`, `12.` becomes `12.00`. An empty field is
32
+ * left empty — a blank is "not filled in yet", not zero — and anything that
33
+ * isn't a number is returned untouched so validation can report it as typed.
34
+ */
35
+ export declare function formatAmountFieldOnBlur(value: string): string;
29
36
  export declare function sumSubcategoryAmounts(amount1: string, amount2: string, amount3: string, includeAmount3: boolean): number;
30
37
  export declare function amountsEqual(left: number, right: number): boolean;
31
38
  /** Maps subcategory amounts to IRS API codes ("1", "2", "3") per Tax1099 backend. */
@@ -9,3 +9,10 @@ export declare function getTaxPeriodYearBounds(): {
9
9
  minYear: number;
10
10
  maxYear: number;
11
11
  };
12
+ /**
13
+ * How a federal form's tax period should be read back. The form dictates the cadence:
14
+ * only 720/941 file per quarter, the annual forms (940, 943, 945, CT-1, …) file once for
15
+ * the whole tax year even though their period code carries the filing month.
16
+ */
17
+ export type FederalTaxPeriodKind = 'quarterly' | 'annual' | 'monthly';
18
+ export declare function getTaxPeriodKindForTaxForm(taxFormType: string | null | undefined): FederalTaxPeriodKind;
@@ -18,7 +18,11 @@ export interface RemittancePaymentRow {
18
18
  * gates whether the list's row-level "Submit & Pay" may submit directly (see PaymentsPage). */
19
19
  isAuthorized: boolean;
20
20
  }
21
- export declare function formatTaxPeriod(taxPeriod: string | null | undefined): string;
21
+ /**
22
+ * `taxFormType` is what makes a `YYYYMM` period readable: 202612 is Q4 on a 941 but the whole
23
+ * 2026 tax year on a 940. Without it the month is shown as-is rather than guessed at.
24
+ */
25
+ export declare function formatTaxPeriod(taxPeriod: string | null | undefined, taxFormType?: string | null): string;
22
26
  export declare function mapRemittancePaymentToRow(payment: {
23
27
  id: number;
24
28
  category: 'federal' | 'state';
@@ -1,3 +1,3 @@
1
- export declare const statePaymentAuthorizationIntro = "By signing below, you authorize Zenwork Payments to initiate this tax payment using the payment details you provided.";
1
+ export declare const statePaymentAuthorizationIntro = "By signing below, you authorize Govpay Payments to initiate this tax payment using the payment details you provided.";
2
2
  export declare const statePaymentAuthorizationAcknowledgements: string[];
3
3
  export declare const statePaymentAuthorizationClosing = "By signing, you confirm that you are authorized to act on behalf of the taxpayer or business listed above.";
@@ -6,7 +6,7 @@ interface EditEntityFormProps {
6
6
  }
7
7
  /**
8
8
  * Edit Entity form — same composition as the Add Entity form (EntityForm), with
9
- * the identifier locked and no filing status, which the update payload omits.
9
+ * the identifier locked. Filing Status is editable here too, same as at creation.
10
10
  */
11
11
  export declare function EditEntityForm({ entity, onCancel, onSaved }: EditEntityFormProps): import("react").JSX.Element;
12
12
  export {};
@@ -0,0 +1,35 @@
1
+ import { CSSProperties, RefObject } from 'react';
2
+ interface AnchoredLayerOptions {
3
+ open: boolean;
4
+ /** The trigger the layer hangs off. */
5
+ anchorRef: RefObject<HTMLElement | null>;
6
+ /** The floating element itself — needed so a click inside it is not "outside". */
7
+ layerRef: RefObject<HTMLElement | null>;
8
+ onDismiss: () => void;
9
+ /** `anchor` matches the trigger's width (dropdowns); a number pins it (menus). */
10
+ width?: number | 'anchor';
11
+ /** `end` right-aligns the layer with the trigger, as row menus do. */
12
+ align?: 'start' | 'end';
13
+ gap?: number;
14
+ /** Caps a scrolling list; omit for menus, which are measured instead. */
15
+ maxHeight?: number;
16
+ }
17
+ /**
18
+ * Positions a floating layer against its trigger in viewport coordinates, for
19
+ * use with a portal. Anything rendered this way is immune to the two things
20
+ * that break an `absolute` popup: an ancestor's `overflow` clipping it (the
21
+ * payments table scroller) and a later sibling's stacking context painting over
22
+ * it. Repositions while the page or a drawer scrolls, and handles dismissal on
23
+ * outside click and Escape.
24
+ *
25
+ * Returns `null` until the first measurement, so callers render nothing yet.
26
+ */
27
+ export declare function useAnchoredLayer({ open, anchorRef, layerRef, onDismiss, width, align, gap, maxHeight, }: AnchoredLayerOptions): CSSProperties | null;
28
+ /**
29
+ * Where a floating layer is mounted. The widget's own root rather than
30
+ * `document.body`: the `--embedded-*` tokens the gov-* palette reads are scoped
31
+ * to `.tax-remittance-embedded`, and outside it those colours fall back to the
32
+ * unthemed defaults.
33
+ */
34
+ export declare function getLayerHost(anchor: HTMLElement | null): HTMLElement | null;
35
+ export {};
@@ -10,9 +10,7 @@ export interface PortalOutletContext {
10
10
  setSelectedEntityId: (entityId: number) => void;
11
11
  }
12
12
  /**
13
- * Minimal shell for the embedded widget — no sidebar, no header branding.
14
- * Renders a compact top bar with:
15
- * - Entity selector (dropdown) when multiple entities exist
16
- * - Back button when on a sub-page
13
+ * Minimal shell for the embedded widget — no sidebar, no header branding, no
14
+ * top bar. Each page carries its own heading and back affordance.
17
15
  */
18
16
  export declare function EmbeddedLayout(): import("react").JSX.Element;