@gusto/embedded-react-sdk 0.57.0 → 0.57.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 (165) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/components/Common/DataView/DataCards/DataCards.js +44 -42
  3. package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
  4. package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +17 -15
  5. package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
  6. package/dist/components/Common/UI/Input/Input.js +35 -32
  7. package/dist/components/Common/UI/Input/Input.js.map +1 -1
  8. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +4 -5
  9. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  10. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +4 -5
  11. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  12. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +6 -7
  13. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  14. package/dist/components/Company/BankAccount/BankAccountForm/context.js +4 -5
  15. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  16. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +4 -5
  17. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  18. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +9 -10
  19. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  20. package/dist/components/Company/Industry/Context.js +7 -8
  21. package/dist/components/Company/Industry/Context.js.map +1 -1
  22. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +4 -5
  23. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  24. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +4 -5
  25. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  26. package/dist/components/Company/OnboardingOverview/context.js +4 -5
  27. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  28. package/dist/components/Company/PaySchedule/PayScheduleForm.js +66 -62
  29. package/dist/components/Company/PaySchedule/PayScheduleForm.js.map +1 -1
  30. package/dist/components/Company/PaySchedule/PayScheduleForm.module.scss.js +2 -2
  31. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js +80 -68
  32. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js.map +1 -1
  33. package/dist/components/Company/PaySchedule/management/PayScheduleManagementComponents.js +49 -44
  34. package/dist/components/Company/PaySchedule/management/PayScheduleManagementComponents.js.map +1 -1
  35. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +96 -69
  36. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
  37. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +4 -5
  38. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  39. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +4 -5
  40. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  41. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +4 -5
  42. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  43. package/dist/components/Company/StateTaxes/shared/requirementSetError.js +27 -10
  44. package/dist/components/Company/StateTaxes/shared/requirementSetError.js.map +1 -1
  45. package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js +77 -0
  46. package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js.map +1 -0
  47. package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js +94 -0
  48. package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js.map +1 -0
  49. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js +26 -0
  50. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js.map +1 -0
  51. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js +25 -0
  52. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js.map +1 -0
  53. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js +33 -0
  54. package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js.map +1 -0
  55. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js +55 -0
  56. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js.map +1 -0
  57. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js +153 -0
  58. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js.map +1 -0
  59. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js +14 -0
  60. package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js.map +1 -0
  61. package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js +16 -0
  62. package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js.map +1 -0
  63. package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js +34 -0
  64. package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js.map +1 -0
  65. package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js +30 -0
  66. package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js.map +1 -0
  67. package/dist/components/Company/exports/companyManagement.js +10 -4
  68. package/dist/components/Company/exports/companyManagement.js.map +1 -1
  69. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +4 -5
  70. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  71. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +24 -23
  72. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
  73. package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js +42 -34
  74. package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js.map +1 -1
  75. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +3 -2
  76. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  77. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +56 -54
  78. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  79. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
  80. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +60 -52
  81. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
  82. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +74 -88
  83. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
  84. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
  85. package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js +23 -18
  86. package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js.map +1 -1
  87. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +204 -179
  88. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  89. package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js +8 -0
  90. package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js.map +1 -0
  91. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +44 -46
  92. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  93. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +4 -4
  94. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
  95. package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +50 -41
  96. package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
  97. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +63 -61
  98. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +1 -1
  99. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +14 -13
  100. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +1 -1
  101. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +164 -154
  102. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -1
  103. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js +9 -5
  104. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +1 -1
  105. package/dist/components/Payroll/helpers.js +103 -92
  106. package/dist/components/Payroll/helpers.js.map +1 -1
  107. package/dist/components/Payroll/usePreparedPayrollData.js +3 -4
  108. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  109. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js +2 -2
  110. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
  111. package/dist/contexts/ApiProvider/ApiProvider.js +19 -18
  112. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  113. package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js +36 -0
  114. package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js.map +1 -0
  115. package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
  116. package/dist/helpers/dateFormatting.js +47 -40
  117. package/dist/helpers/dateFormatting.js.map +1 -1
  118. package/dist/i18n/I18n.js +2 -0
  119. package/dist/i18n/I18n.js.map +1 -1
  120. package/dist/i18n/en/Company.Management.PaySchedule.json.js +20 -18
  121. package/dist/i18n/en/Company.Management.PaySchedule.json.js.map +1 -1
  122. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js +6 -4
  123. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js.map +1 -1
  124. package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js +26 -0
  125. package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js.map +1 -0
  126. package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js +48 -0
  127. package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js.map +1 -0
  128. package/dist/i18n/en/Company.StateTaxes.json.js +1 -1
  129. package/dist/i18n/en/Payroll.PayrollHistory.json.js +5 -5
  130. package/dist/i18n/en/Payroll.PayrollOverview.json.js +42 -36
  131. package/dist/i18n/en/Payroll.PayrollOverview.json.js.map +1 -1
  132. package/dist/package.json.js +1 -1
  133. package/dist/shared/constants.js +62 -56
  134. package/dist/shared/constants.js.map +1 -1
  135. package/dist/src/components/Company/PaySchedule/PayScheduleForm.d.ts +6 -0
  136. package/dist/src/components/Company/StateTaxes/shared/requirementSetError.d.ts +18 -5
  137. package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.d.ts +31 -0
  138. package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.d.ts +19 -0
  139. package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.d.ts +42 -0
  140. package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.d.ts +20 -0
  141. package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.d.ts +10 -0
  142. package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.d.ts +28 -0
  143. package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.d.ts +33 -0
  144. package/dist/src/components/Company/TaxPayments/index.d.ts +6 -0
  145. package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.d.ts +29 -0
  146. package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.test.d.ts +1 -0
  147. package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.d.ts +62 -0
  148. package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.test.d.ts +1 -0
  149. package/dist/src/components/Company/TaxPayments/shared/useAllTaxPayments.d.ts +30 -0
  150. package/dist/src/components/Company/exports/companyManagement.d.ts +2 -0
  151. package/dist/src/components/Payroll/PayrollConfiguration/__fixtures__/payrollConfigurationMocks.d.ts +6 -1
  152. package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -0
  153. package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +1 -0
  154. package/dist/src/components/Payroll/PayrollOverview/PayrollOverview.d.ts +9 -3
  155. package/dist/src/components/Payroll/helpers.d.ts +34 -18
  156. package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.d.ts +14 -0
  157. package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.test.d.ts +1 -0
  158. package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +2 -0
  159. package/dist/src/helpers/dateFormatting.d.ts +13 -0
  160. package/dist/src/i18n/types.d.ts +168 -4
  161. package/dist/src/models/external.d.ts +2 -0
  162. package/dist/src/shared/constants.d.ts +18 -0
  163. package/dist/style.css +1 -1
  164. package/docs/guides/endpoint-inventory.json +33 -0
  165. package/package.json +30 -27
@@ -0,0 +1,62 @@
1
+ import { TaxPayment } from '@gusto/embedded-api/models/components/taxpayment';
2
+ /** @internal */
3
+ export type TaxPaymentStatus = 'paid' | 'scheduled' | 'overdue' | 'refund';
4
+ /** @internal */
5
+ export declare const TAX_PAYMENT_STATUSES: readonly TaxPaymentStatus[];
6
+ /**
7
+ * Value of the "show everything" entry in the jurisdiction and status filters.
8
+ *
9
+ * @remarks
10
+ * A non-empty sentinel rather than `''` so the filter has a real selected key — an empty key reads
11
+ * as "no selection" to the underlying select, which renders the placeholder instead of the option
12
+ * and cannot be distinguished from being cleared.
13
+ *
14
+ * @internal
15
+ */
16
+ export declare const ALL_FILTER_VALUE = "all";
17
+ /** @internal */
18
+ export declare const FEDERAL_JURISDICTION = "US";
19
+ /** @internal */
20
+ export declare const TAX_PAYMENT_STATUS_BADGES: Record<TaxPaymentStatus, 'info' | 'success' | 'warning' | 'error'>;
21
+ /** @internal */
22
+ export declare function isFederalTaxPayment(payment: Pick<TaxPayment, 'jurisdiction'>): boolean;
23
+ /**
24
+ * Resolves the translation key and interpolation values for a tax payment's jurisdiction label.
25
+ *
26
+ * @remarks
27
+ * Returns a key rather than a string because `Company.Management.TaxPaymentsList` and
28
+ * `Company.Management.TaxPaymentDetail` each own their own i18n namespace and must translate from it. This
29
+ * keeps the federal/state branching in one place while leaving the lookup to the caller.
30
+ *
31
+ * @param payment - The tax payment to label.
32
+ * @returns The translation key and its interpolation values.
33
+ * @internal
34
+ */
35
+ export declare function getJurisdictionLabel(payment: Pick<TaxPayment, 'jurisdiction'>): {
36
+ key: 'federal' | 'state';
37
+ values: {
38
+ jurisdiction: string;
39
+ };
40
+ };
41
+ /**
42
+ * Derives a display status for a tax payment.
43
+ *
44
+ * @remarks
45
+ * The API has no status field, so status is derived from the amounts and dates. The API sends
46
+ * `payment_sent_on: null` for both never-sent and returned/cancelled payments, so a
47
+ * returned/cancelled state cannot be distinguished here.
48
+ *
49
+ * Settlement is checked before the amount's sign, so a refund that has already been sent or
50
+ * reimbursed reads as `paid` rather than staying `refund` forever.
51
+ *
52
+ * A zero-amount payment owes nothing and will never be sent, so it reads as `paid` rather than
53
+ * sitting in `scheduled` indefinitely. The list endpoint does return zero-amount payments — it
54
+ * applies `.for_taxes.non_penalty` but not `.with_amounts` — so this is a real case, not a
55
+ * theoretical one.
56
+ *
57
+ * @param payment - The tax payment to classify.
58
+ * @param today - Today's date as a `YYYY-MM-DD` string in the user's local timezone.
59
+ * @returns The derived status.
60
+ * @internal
61
+ */
62
+ export declare function deriveTaxPaymentStatus(payment: Pick<TaxPayment, 'amount' | 'amountPaid' | 'dueDate' | 'paymentSentOn'>, today: string): TaxPaymentStatus;
@@ -0,0 +1,30 @@
1
+ import { TaxPayment } from '@gusto/embedded-api/models/components/taxpayment';
2
+ /**
3
+ * Result of {@link useAllTaxPayments}.
4
+ *
5
+ * @internal
6
+ */
7
+ export interface AllTaxPaymentsResult {
8
+ /** Every tax payment fetched, newest due date first. */
9
+ taxPayments: TaxPayment[];
10
+ /** Whether the server reported more pages than {@link MAX_PAGES} and the list was truncated. */
11
+ isTruncated: boolean;
12
+ }
13
+ /**
14
+ * Fetches a company's tax payments so filtering, search, and pagination can be applied client-side.
15
+ *
16
+ * @remarks
17
+ * Suspends until every fetched page resolves. Filtering and search stay client-side deliberately:
18
+ * the derived `Overdue` and `Scheduled` statuses depend on "not yet sent", which the API exposes no
19
+ * filter for, the `jurisdiction` filter would silently drop local/city agencies that still report a
20
+ * state code, and there is no text-search parameter at all.
21
+ *
22
+ * Fetching is capped at {@link MAX_PAGES} pages because the endpoint paginates an in-memory array —
23
+ * each page request reloads the company's full payment history server-side, so an uncapped fan-out
24
+ * multiplies that cost rather than amortizing it.
25
+ *
26
+ * @param companyId - The company whose tax payments are fetched.
27
+ * @returns The fetched tax payments and whether the list was truncated.
28
+ * @internal
29
+ */
30
+ export declare function useAllTaxPayments(companyId: string): AllTaxPaymentsResult;
@@ -1,2 +1,4 @@
1
1
  export { PaySchedule, type PayScheduleProps, type PayScheduleDictionary, } from '../PaySchedule/management';
2
2
  export { PayScheduleAssignment, type PayScheduleAssignmentProps, } from '../PaySchedule/management/PayScheduleAssignment';
3
+ export { TaxPaymentsFlow, TaxPaymentsList, TaxPaymentDetail } from '../TaxPayments';
4
+ export type { TaxPaymentsFlowProps, TaxPaymentsListProps, TaxPaymentDetailProps, } from '../TaxPayments';
@@ -261,6 +261,11 @@ interface PayrollHandlersOptions {
261
261
  getPayrollData: () => ReturnType<typeof buildPayrollData>;
262
262
  /** Employees returned by the paginated list endpoint. Defaults to all 27. */
263
263
  employees?: Array<ReturnType<typeof createEmployee>>;
264
+ /**
265
+ * Employees per page returned by the list endpoint, overriding the requested `per`.
266
+ * Lets pagination tests page through a few rows instead of rendering 25 per page.
267
+ */
268
+ pageSize?: number;
264
269
  /** Pay schedule returned by the pay-schedule endpoint. */
265
270
  paySchedule?: typeof mockPaySchedule;
266
271
  /** Blockers returned by the blockers endpoint. Defaults to none. */
@@ -272,5 +277,5 @@ interface PayrollHandlersOptions {
272
277
  * and pay schedule. Tests spread these into `server.use(...)` and add/override
273
278
  * endpoint handlers (e.g. `calculate`) as needed.
274
279
  */
275
- export declare const buildPayrollConfigurationHandlers: ({ getPayrollData, employees, paySchedule, blockers, }: PayrollHandlersOptions) => HttpHandler[];
280
+ export declare const buildPayrollConfigurationHandlers: ({ getPayrollData, employees, paySchedule, blockers, pageSize, }: PayrollHandlersOptions) => HttpHandler[];
276
281
  export {};
@@ -19,6 +19,7 @@ import { PayrollFlowProps } from './PayrollFlowComponents';
19
19
  * | `runPayroll/processed` | Payroll processing completes | — |
20
20
  * | `runPayroll/processingFailed` | Payroll processing fails | Error details |
21
21
  * | `runPayroll/cancelled` | A submitted payroll is cancelled | `{ payrollId: string, result: object }` |
22
+ * | `runPayroll/notCalculated/backToList` | User returns to the payroll list from a payroll that is no longer calculated | — |
22
23
  * | `runPayroll/summary/viewed` | The summary screen is opened | `{ payrollId: string }` |
23
24
  * | `runPayroll/receipt/viewed` | The receipt screen is opened | `{ payrollId: string }` |
24
25
  * | `runPayroll/offCycle/start` | The user starts an off-cycle payroll | — |
@@ -35,6 +35,7 @@ export interface PayrollLandingProps extends BaseComponentInterface<'Payroll.Pay
35
35
  * | `runPayroll/receipt/viewed` | User opened a payroll's receipt view | `{ payrollId: string }` |
36
36
  * | `runPayroll/blockers/viewAll` | User opened the full list of payroll blockers | — |
37
37
  * | `runPayroll/cancelled` | A payroll was cancelled | `{ payrollId: string, result: object }` |
38
+ * | `runPayroll/notCalculated/backToList` | User returns to the payroll list from a payroll that is no longer calculated | — |
38
39
  * | `runPayroll/cancelled/alertDismissed` | User dismissed the payroll-cancelled success alert | — |
39
40
  *
40
41
  * When unprocessed transition pay periods exist, the landing surface renders a Transition
@@ -9,7 +9,10 @@ import { BaseComponentInterface } from '../../Base';
9
9
  export interface PayrollOverviewProps extends BaseComponentInterface<'Payroll.PayrollOverview'> {
10
10
  /** Identifier of the company that owns the payroll. */
11
11
  companyId: string;
12
- /** Identifier of the payroll being reviewed. The payroll must already be calculated. */
12
+ /**
13
+ * Identifier of the payroll being reviewed. An unprocessed payroll must already be calculated;
14
+ * a processed payroll renders as a summary whether or not it has a calculation.
15
+ */
13
16
  payrollId: string;
14
17
  /** Alert banners to display above the payroll summary. */
15
18
  alerts?: PayrollFlowAlert[];
@@ -30,8 +33,10 @@ export interface PayrollOverviewProps extends BaseComponentInterface<'Payroll.Pa
30
33
  * and per-employee paystub downloads once complete.
31
34
  *
32
35
  * @remarks
33
- * The payroll referenced by `payrollId` must already be calculated; rendering with an
34
- * uncalculated payroll throws. Unresolved submission blockers (e.g. fast-ACH threshold,
36
+ * An unprocessed payroll referenced by `payrollId` must already be calculated; rendering an
37
+ * unprocessed, uncalculated payroll throws. Processed payrolls render as a summary even without a
38
+ * calculation (for example tax reconciliation, reversal, wage correction, or external payrolls).
39
+ * Unresolved submission blockers (e.g. fast-ACH threshold,
35
40
  * wire-in funding) are surfaced inline and the submit action stays disabled until each
36
41
  * blocker has a selected unblock option. While the payroll is processing, the component
37
42
  * polls until success or failure and emits the corresponding event. Pass `readOnly` to hide
@@ -46,6 +51,7 @@ export interface PayrollOverviewProps extends BaseComponentInterface<'Payroll.Pa
46
51
  * | `runPayroll/processed` | Payroll finished processing successfully | `{ payPeriod, payrollUuid }` |
47
52
  * | `runPayroll/processingFailed` | Payroll processing failed | — |
48
53
  * | `runPayroll/cancelled` | Payroll was cancelled | Cancel payroll response |
54
+ * | `runPayroll/notCalculated/backToList` | User chose to return to the payroll list after the payroll was found to be no longer calculated (e.g. cancelled in another session) | — |
49
55
  * | `runPayroll/receipt/get` | User requested the payroll receipt | `{ payrollId }` |
50
56
  * | `runPayroll/pdfPaystub/viewed` | User opened an employee's paystub PDF | `{ employeeId }` |
51
57
  * | `payroll/wire/form/done` | Wire-in details were confirmed via the embedded wire form | Submit wire-in response |
@@ -169,19 +169,6 @@ export declare const getPayrollType: (payroll: {
169
169
  * @internal
170
170
  */
171
171
  export declare const isDismissalPayroll: (offCycleReason?: string | null) => boolean;
172
- /**
173
- * Returns whether an off-cycle reason indicates a tax reconciliation payroll.
174
- *
175
- * @remarks
176
- * Tax reconciliation payrolls are created by Gusto rather than run by the partner. They come
177
- * back processed with no pay period and no `calculatedAt`, so callers use this to grant them a
178
- * targeted exception from checks that otherwise assume every payroll has both.
179
- *
180
- * @param offCycleReason - The payroll's off-cycle reason string.
181
- * @returns `true` when the reason matches the tax reconciliation reason.
182
- * @internal
183
- */
184
- export declare const isTaxReconciliationPayroll: (offCycleReason?: string | null) => boolean;
185
172
  /**
186
173
  * Returns a formatted pay-period range, falling back to the formatted check date when the
187
174
  * payroll has no pay period.
@@ -243,14 +230,43 @@ export declare const getAdditionalEarningsCompensations: ({ flsaStatus, existing
243
230
  */
244
231
  export declare const calculateTotalPayroll: (payrollData: Payroll) => number;
245
232
  /**
246
- * Determines whether a payroll can be cancelled based on its status, deadline, and the 4:00 PM PT cutoff.
233
+ * Returns the interpolation values for the cancel dialog's deadline sentence.
234
+ *
235
+ * @remarks
236
+ * Translations place `time` and `date` themselves, so word order and the joining word stay
237
+ * localizable. `deadline` is the legacy pre-joined English string, kept so existing
238
+ * translations and partner overrides that use `{{deadline}}` keep rendering.
239
+ *
240
+ * @param payroll - The payroll whose `payrollDeadline` is shown.
241
+ * @param dateFormatter - The date formatter returned by {@link useDateFormatter}.
242
+ * @returns The `time`, `date`, and legacy `deadline` values in the user's local time zone.
243
+ * @internal
244
+ */
245
+ export declare const getCancelDeadlineValues: (payroll: {
246
+ payrollDeadline?: string | Date | null;
247
+ }, dateFormatter: ReturnType<typeof useDateFormatter>) => {
248
+ time: string;
249
+ date: string;
250
+ deadline: string;
251
+ };
252
+ /**
253
+ * Returns whether to show the cancel action for a payroll.
247
254
  *
248
255
  * @remarks
249
- * Returns `true` only when the payroll has been processed, `payrollStatusMeta.cancellable` is not explicitly `false`,
250
- * the payroll has a `payrollDeadline`, and the current time is before 4:00 PM Pacific Time on that deadline date.
256
+ * Shows cancel only when the API will accept it:
257
+ *
258
+ * - `payrollStatusMeta.cancellable` is `true`. A missing flag hides cancel, so fetch the payroll
259
+ * with `payroll_status_meta`.
260
+ * - The payroll is processed and not external.
261
+ * - It is a regular payroll, or an off-cycle payroll with one of the reasons listed above. The
262
+ * `cancellable` flag does not check the payroll type yet, so this helper does.
263
+ * - It is before 4:00 PM PT on the `payrollDeadline` date, so a page left open past the cutoff
264
+ * stops offering cancel.
265
+ *
266
+ * The API can still refuse if a tax filing was already sent. The payroll data doesn't show that.
251
267
  *
252
- * @param payroll - The payroll to evaluate.
253
- * @returns `true` if the payroll is still cancellable, `false` otherwise.
268
+ * @param payroll - The payroll to check, fetched with `payroll_status_meta`.
269
+ * @returns `true` if cancel should be shown.
254
270
  * @internal
255
271
  */
256
272
  export declare const canCancelPayroll: (payroll: Payroll) => boolean;
@@ -0,0 +1,14 @@
1
+ import { AfterSuccessHook } from '../../types/hooks';
2
+ /**
3
+ * Temporary workaround for a Gusto-Partner-API spec gap: `off_cycle_reason` on payroll responses
4
+ * is generated as a closed enum (`z.nativeEnum(OffCycleReasonType)`) in `@gusto/embedded-api`, but
5
+ * the API also emits reasons the published OAS doesn't list (e.g. `Max out 401k`, `Other`). A
6
+ * single such payroll makes the whole `GetV1CompaniesCompanyIdPayrolls` response throw an
7
+ * `SDKValidationError`, taking down Payroll History and every other payroll list for the company.
8
+ * This afterSuccess hook nulls out any reason outside the closed enum before the SDK's zod parse,
9
+ * so the response still validates and the payroll renders as a generic off-cycle payroll. Remove
10
+ * once the client supports lax/open enum parsing for this field.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare const payrollOffCycleReasonEnumHook: AfterSuccessHook;
@@ -21,6 +21,8 @@ export interface UnstableFeatures {
21
21
  payrollRegularRateOfPay?: boolean;
22
22
  /** Enables the in-development `CompanyManagement.PaySchedule` flow for managing pay schedules and their assignments after onboarding. */
23
23
  managePaySchedules?: boolean;
24
+ /** Enables the in-development `CompanyManagement.TaxPaymentsFlow` for reviewing a company's tax payments and their liabilities. */
25
+ taxPayments?: boolean;
24
26
  }
25
27
  /**
26
28
  * React context backing {@link useUnstableFeature}.
@@ -1,3 +1,4 @@
1
+ import { RFCDate } from '@gusto/embedded-api/types/rfcdate';
1
2
  /**
2
3
  * Normalizes any date input (string, Date, or undefined) to a Date object.
3
4
  *
@@ -99,6 +100,18 @@ export declare const formatPayPeriodRange: (startDateInput?: string | Date | nul
99
100
  * @internal
100
101
  */
101
102
  export declare const formatDateToStringDate: (date: Date) => string | null;
103
+ /**
104
+ * Converts a `Date` into an `RFCDate` for the same local calendar day.
105
+ *
106
+ * @remarks Use this instead of `new RFCDate(date)`, which serializes through
107
+ * `toISOString()` and shifts the day back by one in timezones ahead of UTC.
108
+ *
109
+ * @param date - The date to convert.
110
+ * @returns An `RFCDate` carrying the local year, month, and day of `date`.
111
+ * @throws RangeError when `date` is an invalid date.
112
+ * @internal
113
+ */
114
+ export declare const toRFCDate: (date: Date) => RFCDate;
102
115
  /**
103
116
  * Converts any parseable date string to a `YYYY-MM-DD` ISO string using local time.
104
117
  *
@@ -35,6 +35,10 @@ export interface Resources {
35
35
  /** */
36
36
  'Company.Management.PayScheduleAssignment': Translations.CompanyManagementPayScheduleAssignment
37
37
  /** */
38
+ 'Company.Management.TaxPaymentDetail': Translations.CompanyManagementTaxPaymentDetail
39
+ /** */
40
+ 'Company.Management.TaxPaymentsList': Translations.CompanyManagementTaxPaymentsList
41
+ /** */
38
42
  'Company.OnboardingOverview': Translations.CompanyOnboardingOverview
39
43
  /** */
40
44
  'Company.PaySchedule': Translations.CompanyPaySchedule
@@ -1071,6 +1075,12 @@ export namespace Translations {
1071
1075
  /** @defaultValue `"Pay schedule assignment updated."` */
1072
1076
  assignmentUpdated: string
1073
1077
  }
1078
+ scheduleForm: {
1079
+ /** @defaultValue `"The last date of the first pay period; can be the same as the first pay date."` */
1080
+ anchorEndOfPayPeriodDescription: string
1081
+ /** @defaultValue `"Run payroll by"` */
1082
+ payrollDeadline: string
1083
+ }
1074
1084
  }
1075
1085
  /** Translation keys for the `Company.Management.PayScheduleAssignment` i18n namespace. */
1076
1086
  export interface CompanyManagementPayScheduleAssignment {
@@ -1144,6 +1154,154 @@ export namespace Translations {
1144
1154
  continueCta: string
1145
1155
  /** @defaultValue `"Submit"` */
1146
1156
  submitCta: string
1157
+ scheduleForm: {
1158
+ /** @defaultValue `"The last date of the first pay period; can be the same as the first pay date."` */
1159
+ anchorEndOfPayPeriodDescription: string
1160
+ /** @defaultValue `"Run payroll by"` */
1161
+ payrollDeadline: string
1162
+ }
1163
+ }
1164
+ /** Translation keys for the `Company.Management.TaxPaymentDetail` i18n namespace. */
1165
+ export interface CompanyManagementTaxPaymentDetail {
1166
+ /** @defaultValue `"Back to tax payments"` */
1167
+ backCta: string
1168
+ /** @defaultValue `"Unknown agency"` */
1169
+ unknownAgency: string
1170
+ /** @defaultValue `"Federal"` */
1171
+ federal: string
1172
+ /** @defaultValue `"State · {{jurisdiction}}"` */
1173
+ state: string
1174
+ /** @defaultValue `"—"` */
1175
+ notAvailable: string
1176
+ status: {
1177
+ /** @defaultValue `"Paid"` */
1178
+ paid: string
1179
+ /** @defaultValue `"Scheduled"` */
1180
+ scheduled: string
1181
+ /** @defaultValue `"Overdue"` */
1182
+ overdue: string
1183
+ /** @defaultValue `"Refund / Credit"` */
1184
+ refund: string
1185
+ }
1186
+ overdueAlert: {
1187
+ /** @defaultValue `"Payment overdue"` */
1188
+ label: string
1189
+ /** @defaultValue `"This payment was due on {{dueDate}} and has not been sent. Take action to avoid penalties."` */
1190
+ description: string
1191
+ }
1192
+ details: {
1193
+ /** @defaultValue `"Payment details"` */
1194
+ title: string
1195
+ /** @defaultValue `"Jurisdiction"` */
1196
+ jurisdiction: string
1197
+ /** @defaultValue `"Period"` */
1198
+ period: string
1199
+ /** @defaultValue `"Due date"` */
1200
+ dueDate: string
1201
+ /** @defaultValue `"Payment sent on"` */
1202
+ paymentSentOn: string
1203
+ /** @defaultValue `"Amount"` */
1204
+ amount: string
1205
+ /** @defaultValue `"Amount paid"` */
1206
+ amountPaid: string
1207
+ }
1208
+ liabilities: {
1209
+ /** @defaultValue `"Tax liabilities"` */
1210
+ title: string
1211
+ /** @defaultValue `"Tax liabilities"` */
1212
+ tableLabel: string
1213
+ /** @defaultValue `"Tax ID"` */
1214
+ taxIdColumn: string
1215
+ /** @defaultValue `"Payroll"` */
1216
+ payrollColumn: string
1217
+ /** @defaultValue `"Amount"` */
1218
+ amountColumn: string
1219
+ /** @defaultValue `"No tax liabilities."` */
1220
+ emptyState: string
1221
+ }
1222
+ errors: {
1223
+ /** @defaultValue `"Tax payment not found"` */
1224
+ taxPaymentNotFound: string
1225
+ }
1226
+ }
1227
+ /** Translation keys for the `Company.Management.TaxPaymentsList` i18n namespace. */
1228
+ export interface CompanyManagementTaxPaymentsList {
1229
+ /** @defaultValue `"Tax payments"` */
1230
+ title: string
1231
+ /** @defaultValue `"Tax payments"` */
1232
+ tableLabel: string
1233
+ /** @defaultValue `"Search tax payments"` */
1234
+ searchLabel: string
1235
+ /** @defaultValue `"Search by agency..."` */
1236
+ searchPlaceholder: string
1237
+ /** @defaultValue `"Jurisdiction"` */
1238
+ jurisdictionFilterLabel: string
1239
+ /** @defaultValue `"All jurisdictions"` */
1240
+ allJurisdictions: string
1241
+ /** @defaultValue `"Federal (US)"` */
1242
+ federalJurisdictionOption: string
1243
+ /** @defaultValue `"Status"` */
1244
+ statusFilterLabel: string
1245
+ /** @defaultValue `"All statuses"` */
1246
+ allStatuses: string
1247
+ columns: {
1248
+ /** @defaultValue `"Agency"` */
1249
+ agency: string
1250
+ /** @defaultValue `"Jurisdiction"` */
1251
+ jurisdiction: string
1252
+ /** @defaultValue `"Period"` */
1253
+ period: string
1254
+ /** @defaultValue `"Due date"` */
1255
+ dueDate: string
1256
+ /** @defaultValue `"Amount"` */
1257
+ amount: string
1258
+ /** @defaultValue `"Status"` */
1259
+ status: string
1260
+ }
1261
+ /** @defaultValue `"Federal"` */
1262
+ federal: string
1263
+ /** @defaultValue `"State · {{jurisdiction}}"` */
1264
+ state: string
1265
+ /** @defaultValue `"Unknown agency"` */
1266
+ unknownAgency: string
1267
+ /** @defaultValue `"—"` */
1268
+ notAvailable: string
1269
+ /** @defaultValue `"View"` */
1270
+ viewCta: string
1271
+ /** @defaultValue `"View {{agency}} tax payment"` */
1272
+ viewPaymentLabel: string
1273
+ status: {
1274
+ /** @defaultValue `"Paid"` */
1275
+ paid: string
1276
+ /** @defaultValue `"Scheduled"` */
1277
+ scheduled: string
1278
+ /** @defaultValue `"Overdue"` */
1279
+ overdue: string
1280
+ /** @defaultValue `"Refund / Credit"` */
1281
+ refund: string
1282
+ }
1283
+ overdueAlert: {
1284
+ /** @defaultValue `"{{count}} tax payment is overdue and may require immediate attention."` */
1285
+ label_one: string
1286
+ /** @defaultValue `"{{count}} tax payments are overdue and may require immediate attention."` */
1287
+ label_other: string
1288
+ }
1289
+ emptyState: {
1290
+ /** @defaultValue `"No tax payments yet"` */
1291
+ title: string
1292
+ /** @defaultValue `"Tax payments appear here after payroll is processed."` */
1293
+ description: string
1294
+ }
1295
+ noResults: {
1296
+ /** @defaultValue `"No matching tax payments"` */
1297
+ title: string
1298
+ /** @defaultValue `"Try a different search or adjust the filters."` */
1299
+ description: string
1300
+ }
1301
+ truncatedAlert: {
1302
+ /** @defaultValue `"Showing the most recent tax payments. Older payments are not included."` */
1303
+ label: string
1304
+ }
1147
1305
  }
1148
1306
  /** Translation keys for the `Company.OnboardingOverview` i18n namespace. */
1149
1307
  export interface CompanyOnboardingOverview {
@@ -1444,6 +1602,8 @@ export namespace Translations {
1444
1602
  errors: {
1445
1603
  /** @defaultValue `"{{section}} for {{state}} is incomplete. Complete all required fields and try again."` */
1446
1604
  incompleteRequirementSet: string
1605
+ /** @defaultValue `"Some values in {{section}} for {{state}} are invalid. Correct the highlighted fields and try again."` */
1606
+ invalidRequirementSet: string
1447
1607
  }
1448
1608
  validations: {
1449
1609
  /** @defaultValue `"Minimum value is {{min}}%"` */
@@ -7981,7 +8141,7 @@ export namespace Translations {
7981
8141
  title: string
7982
8142
  /** @defaultValue `"You may cancel this payroll and run it again later. Your changes will be saved."` */
7983
8143
  body: string
7984
- /** @defaultValue `"Run this payroll by {{deadline}} to pay your employees on time."` */
8144
+ /** @defaultValue `"Run this payroll by {{time}} on {{date}} to pay your employees on time."` */
7985
8145
  deadline: string
7986
8146
  /** @defaultValue `"Yes, cancel payroll"` */
7987
8147
  primaryAction: string
@@ -8143,7 +8303,7 @@ export namespace Translations {
8143
8303
  cancelDialogTitleDismissal: string
8144
8304
  /** @defaultValue `"You may cancel this payroll and run it again later. Your changes will be saved."` */
8145
8305
  cancelDialogDescription: string
8146
- /** @defaultValue `"Run this payroll by {{deadline}} to pay your employees on time."` */
8306
+ /** @defaultValue `"Run this payroll by {{time}} on {{date}} to pay your employees on time."` */
8147
8307
  cancelDialogDescriptionDeadline: string
8148
8308
  /** @defaultValue `"Yes, cancel payroll"` */
8149
8309
  confirmCancelCta: string
@@ -8165,11 +8325,15 @@ export namespace Translations {
8165
8325
  cancellingTitle: string
8166
8326
  /** @defaultValue `"This payroll has been cancelled."` */
8167
8327
  cancelledEmptyState: string
8328
+ /** @defaultValue `"This payroll has changed"` */
8329
+ notCalculatedErrorTitle: string
8330
+ /** @defaultValue `"Refresh or return to your payrolls to continue."` */
8331
+ notCalculatedErrorDescription: string
8332
+ /** @defaultValue `"Back to payrolls"` */
8333
+ notCalculatedErrorCta: string
8168
8334
  /** @defaultValue `"Skipped"` */
8169
8335
  skippedBadge: string
8170
8336
  alerts: {
8171
- /** @defaultValue `"Payroll is not calculated"` */
8172
- payrollNotCalculated: string
8173
8337
  /** @defaultValue `"There was an issue loading this payroll. Please try again."` */
8174
8338
  payrollLoadFailed: string
8175
8339
  /** @defaultValue `"To pay your employees with direct deposit by {{payDate}}, you'll need to run payroll by {{time}} on {{date}}."` */
@@ -335,6 +335,8 @@ export { IdentityVerificationStatus } from '@gusto/embedded-api/models/component
335
335
  /** `SignatoryHomeAddress` entity from the Gusto Embedded API. */
336
336
  export type { SignatoryHomeAddress } from '@gusto/embedded-api/models/components/signatory';
337
337
  export type { Signatory } from '@gusto/embedded-api/models/components/signatory';
338
+ export type { TaxPayment } from '@gusto/embedded-api/models/components/taxpayment';
339
+ export type { TaxPaymentLineItem } from '@gusto/embedded-api/models/components/taxpaymentlineitem';
338
340
  /** `ApplicableIf` entity from the Gusto Embedded API. */
339
341
  export type { ApplicableIf } from '@gusto/embedded-api/models/components/taxrequirement';
340
342
  /** `TaxRequirement` entity from the Gusto Embedded API. */
@@ -349,6 +349,7 @@ export declare const runPayrollEvents: {
349
349
  readonly RUN_PAYROLL_ALREADY_PROCESSED: "runPayroll/alreadyProcessed";
350
350
  readonly RUN_PAYROLL_CANCELLED: "runPayroll/cancelled";
351
351
  readonly RUN_PAYROLL_CANCELLED_ALERT_DISMISSED: "runPayroll/cancelled/alertDismissed";
352
+ readonly RUN_PAYROLL_NOT_CALCULATED_BACK_TO_LIST: "runPayroll/notCalculated/backToList";
352
353
  readonly RUN_PAYROLL_EDIT: "runPayroll/edit";
353
354
  readonly RUN_PAYROLL_EMPLOYEE_EDIT: "runPayroll/employee/edit";
354
355
  readonly RUN_PAYROLL_EMPLOYEE_SKIP: "runPayroll/employee/skip";
@@ -446,6 +447,20 @@ export declare const printChecksEvents: {
446
447
  readonly PRINT_CHECKS_CANCEL: "payroll/printChecks/cancel";
447
448
  readonly PRINT_CHECKS_CLOSE: "payroll/printChecks/close";
448
449
  };
450
+ /**
451
+ * Event keys emitted by the tax payments components.
452
+ *
453
+ * @remarks
454
+ * These keys are merged into {@link componentEvents}. Consume them through the
455
+ * `onEvent` handler of a tax payments component and compare against the
456
+ * value of an entry on this object.
457
+ *
458
+ * @alpha
459
+ */
460
+ export declare const taxPaymentEvents: {
461
+ readonly TAX_PAYMENT_VIEW: "company/taxPayments/view";
462
+ readonly TAX_PAYMENT_BACK: "company/taxPayments/back";
463
+ };
449
464
  /**
450
465
  * Event keys emitted by off-cycle payroll and transition components.
451
466
  *
@@ -596,6 +611,8 @@ export declare const componentEvents: {
596
611
  readonly CONTRACTOR_PAYMENT_CANCEL: "contractor/payments/cancel";
597
612
  readonly CONTRACTOR_PAYMENT_EXIT: "contractor/payments/exit";
598
613
  readonly CONTRACTOR_PAYMENT_RFI_RESPOND: "contractor/payments/rfi/respond";
614
+ readonly TAX_PAYMENT_VIEW: "company/taxPayments/view";
615
+ readonly TAX_PAYMENT_BACK: "company/taxPayments/back";
599
616
  readonly PRINT_CHECKS_START: "payroll/printChecks/start";
600
617
  readonly PRINT_CHECKS_GENERATE_START: "payroll/printChecks/generate/start";
601
618
  readonly PRINT_CHECKS_GENERATE_SUCCEEDED: "payroll/printChecks/generate/succeeded";
@@ -622,6 +639,7 @@ export declare const componentEvents: {
622
639
  readonly RUN_PAYROLL_ALREADY_PROCESSED: "runPayroll/alreadyProcessed";
623
640
  readonly RUN_PAYROLL_CANCELLED: "runPayroll/cancelled";
624
641
  readonly RUN_PAYROLL_CANCELLED_ALERT_DISMISSED: "runPayroll/cancelled/alertDismissed";
642
+ readonly RUN_PAYROLL_NOT_CALCULATED_BACK_TO_LIST: "runPayroll/notCalculated/backToList";
625
643
  readonly RUN_PAYROLL_EDIT: "runPayroll/edit";
626
644
  readonly RUN_PAYROLL_EMPLOYEE_EDIT: "runPayroll/employee/edit";
627
645
  readonly RUN_PAYROLL_EMPLOYEE_SKIP: "runPayroll/employee/skip";