@gusto/embedded-react-sdk 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/dist/assets/icons/icon-file-jpg.svg.js +10 -0
  3. package/dist/assets/icons/icon-file-jpg.svg.js.map +1 -0
  4. package/dist/assets/icons/icon-file-pdf.svg.js +10 -0
  5. package/dist/assets/icons/icon-file-pdf.svg.js.map +1 -0
  6. package/dist/assets/icons/icon-file-png.svg.js +10 -0
  7. package/dist/assets/icons/icon-file-png.svg.js.map +1 -0
  8. package/dist/assets/icons/icon-trashcan.svg.js +10 -0
  9. package/dist/assets/icons/icon-trashcan.svg.js.map +1 -0
  10. package/dist/assets/icons/plus-circle.svg.js +5 -5
  11. package/dist/assets/icons/plus-circle.svg.js.map +1 -1
  12. package/dist/components/Common/DocumentList/DocumentList.js +23 -23
  13. package/dist/components/Common/DocumentList/DocumentList.js.map +1 -1
  14. package/dist/components/Common/DocumentList/DocumentList.module.scss.js +6 -10
  15. package/dist/components/Common/DocumentList/DocumentList.module.scss.js.map +1 -1
  16. package/dist/components/Common/DocumentViewer/DocumentViewer.module.scss.js +12 -12
  17. package/dist/components/Common/InlineSpinner/InlineSpinner.module.scss.js +1 -1
  18. package/dist/components/Common/InternalError/InternalError.module.scss.js +4 -4
  19. package/dist/components/Common/ReorderableList/ReorderableList.module.scss.js +8 -8
  20. package/dist/components/Common/RequirementsList/RequirementsList.module.scss.js +1 -1
  21. package/dist/components/Common/SignatureForm/SignatureFormActions.js +1 -1
  22. package/dist/components/Common/SignatureForm/SignatureFormFields.js +1 -1
  23. package/dist/components/Common/UI/Alert/Alert.js +10 -10
  24. package/dist/components/Common/UI/Alert/Alert.js.map +1 -1
  25. package/dist/components/Common/UI/Alert/Alert.module.scss.js +10 -10
  26. package/dist/components/Common/UI/Badge/Badge.module.scss.js +1 -1
  27. package/dist/components/Common/UI/Banner/Banner.module.scss.js +4 -4
  28. package/dist/components/Common/UI/Button/Button.module.scss.js +1 -1
  29. package/dist/components/Common/UI/CalendarPreview/CalendarPreview.module.scss.js +4 -4
  30. package/dist/components/Common/UI/Card/Card.module.scss.js +1 -1
  31. package/dist/components/Common/UI/Checkbox/Checkbox.module.scss.js +1 -1
  32. package/dist/components/Common/UI/ComboBox/ComboBox.module.scss.js +6 -6
  33. package/dist/components/Common/UI/DatePicker/DatePicker.module.scss.js +4 -4
  34. package/dist/components/Common/UI/DescriptionList/DescriptionList.module.scss.js +1 -1
  35. package/dist/components/Common/UI/Dialog/Dialog.module.scss.js +2 -2
  36. package/dist/components/Common/UI/FileInput/FileInput.js +105 -106
  37. package/dist/components/Common/UI/FileInput/FileInput.js.map +1 -1
  38. package/dist/components/Common/UI/FileInput/FileInput.module.scss.js +27 -25
  39. package/dist/components/Common/UI/FileInput/FileInput.module.scss.js.map +1 -1
  40. package/dist/components/Common/UI/Input/Input.module.scss.js +8 -8
  41. package/dist/components/Common/UI/List/List.module.scss.js +1 -1
  42. package/dist/components/Common/UI/Modal/Modal.js +41 -40
  43. package/dist/components/Common/UI/Modal/Modal.js.map +1 -1
  44. package/dist/components/Common/UI/Modal/Modal.module.scss.js +12 -12
  45. package/dist/components/Common/UI/Radio/Radio.module.scss.js +6 -6
  46. package/dist/components/Common/UI/Select/Select.module.scss.js +5 -5
  47. package/dist/components/Common/UI/Table/Table.js +1 -1
  48. package/dist/components/Common/UI/Table/Table.js.map +1 -1
  49. package/dist/components/Common/UI/Table/Table.module.scss.js +1 -1
  50. package/dist/components/Common/UI/Tabs/Tabs.module.scss.js +1 -1
  51. package/dist/components/Common/UI/Text/Text.module.scss.js +17 -15
  52. package/dist/components/Common/UI/Text/Text.module.scss.js.map +1 -1
  53. package/dist/components/Common/UI/TextArea/TextArea.module.scss.js +1 -1
  54. package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js +1 -1
  55. package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatoryForm.js +16 -17
  56. package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatoryForm.js.map +1 -1
  57. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +4 -3
  58. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  59. package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatoryForm.js +5 -6
  60. package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatoryForm.js.map +1 -1
  61. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +4 -3
  62. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  63. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +6 -5
  64. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  65. package/dist/components/Company/BankAccount/BankAccountForm/Form.js +1 -1
  66. package/dist/components/Company/BankAccount/BankAccountForm/context.js +4 -3
  67. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  68. package/dist/components/Company/BankAccount/BankAccountVerify/Form.js +1 -1
  69. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +4 -3
  70. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  71. package/dist/components/Company/DocumentSigner/SignatureForm/useSignatureForm.js +4 -3
  72. package/dist/components/Company/DocumentSigner/SignatureForm/useSignatureForm.js.map +1 -1
  73. package/dist/components/Company/FederalTaxes/Form.js +1 -1
  74. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +6 -5
  75. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  76. package/dist/components/Company/Industry/Context.js +7 -6
  77. package/dist/components/Company/Industry/Context.js.map +1 -1
  78. package/dist/components/Company/Locations/LocationForm/Form.js +5 -6
  79. package/dist/components/Company/Locations/LocationForm/Form.js.map +1 -1
  80. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +4 -3
  81. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  82. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +4 -3
  83. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  84. package/dist/components/Company/OnboardingOverview/context.js +4 -3
  85. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  86. package/dist/components/Company/PaySchedule/_parts/Edit.js +23 -24
  87. package/dist/components/Company/PaySchedule/_parts/Edit.js.map +1 -1
  88. package/dist/components/Company/PaySchedule/usePaySchedule.js +6 -5
  89. package/dist/components/Company/PaySchedule/usePaySchedule.js.map +1 -1
  90. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +4 -3
  91. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  92. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +4 -3
  93. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  94. package/dist/components/Contractor/Address/Form.js +7 -8
  95. package/dist/components/Contractor/Address/Form.js.map +1 -1
  96. package/dist/components/Contractor/Address/useAddress.js +6 -5
  97. package/dist/components/Contractor/Address/useAddress.js.map +1 -1
  98. package/dist/components/Contractor/PaymentMethod/BankAccountForm.js +2 -2
  99. package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.js +1 -1
  100. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +102 -88
  101. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
  102. package/dist/components/Contractor/Payments/CreatePayment/EditContractorPaymentPresentation.js +22 -23
  103. package/dist/components/Contractor/Payments/CreatePayment/EditContractorPaymentPresentation.js.map +1 -1
  104. package/dist/components/Contractor/Payments/CreatePayment/FastAchSubmissionBlockerBanner.d.ts +8 -0
  105. package/dist/components/Contractor/Payments/CreatePayment/FastAchSubmissionBlockerBanner.js +60 -0
  106. package/dist/components/Contractor/Payments/CreatePayment/FastAchSubmissionBlockerBanner.js.map +1 -0
  107. package/dist/components/Contractor/Payments/CreatePayment/GenericBlocker.d.ts +6 -0
  108. package/dist/components/Contractor/Payments/CreatePayment/GenericBlocker.js +18 -0
  109. package/dist/components/Contractor/Payments/CreatePayment/GenericBlocker.js.map +1 -0
  110. package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.d.ts +3 -1
  111. package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.js +86 -55
  112. package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.js.map +1 -1
  113. package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.d.ts +2 -0
  114. package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js +35 -22
  115. package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js.map +1 -1
  116. package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.d.ts +1 -0
  117. package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.js +82 -65
  118. package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.js.map +1 -1
  119. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.module.scss.js +14 -14
  120. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.d.ts +8 -0
  121. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js +45 -0
  122. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js.map +1 -0
  123. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.d.ts +15 -0
  124. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.js +127 -0
  125. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.js.map +1 -0
  126. package/dist/components/Contractor/Payments/PaymentSummary/index.d.ts +3 -0
  127. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +37 -28
  128. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
  129. package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.d.ts +5 -1
  130. package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js +52 -47
  131. package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js.map +1 -1
  132. package/dist/components/Contractor/Profile/ContractorProfileForm.js +15 -15
  133. package/dist/components/Contractor/Profile/ContractorProfileForm.module.scss.js +1 -1
  134. package/dist/components/Employee/Compensation/Edit.js +14 -14
  135. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.d.ts +3 -1
  136. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js +145 -137
  137. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js.map +1 -1
  138. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.d.ts +2 -1
  139. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js +106 -101
  140. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js.map +1 -1
  141. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.js +90 -87
  142. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.js.map +1 -1
  143. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.d.ts +2 -1
  144. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js +110 -104
  145. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js.map +1 -1
  146. package/dist/components/Employee/Deductions/DeductionsList/DeductionsList.js +50 -45
  147. package/dist/components/Employee/Deductions/DeductionsList/DeductionsList.js.map +1 -1
  148. package/dist/components/Employee/Deductions/IncludeDeductions/IncludeDeductions.js +30 -30
  149. package/dist/components/Employee/Deductions/IncludeDeductions/IncludeDeductions.js.map +1 -1
  150. package/dist/components/Employee/Deductions/IncludeDeductions/IncludeDeductions.module.scss.js +4 -8
  151. package/dist/components/Employee/Deductions/IncludeDeductions/IncludeDeductions.module.scss.js.map +1 -1
  152. package/dist/components/Employee/DocumentSigner/DocumentList/useDocumentList.js +4 -3
  153. package/dist/components/Employee/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  154. package/dist/components/Employee/DocumentSigner/SignatureForm/useSignatureForm.js +4 -3
  155. package/dist/components/Employee/DocumentSigner/SignatureForm/useSignatureForm.js.map +1 -1
  156. package/dist/components/Employee/EmployeeList/useEmployeeList.js +4 -3
  157. package/dist/components/Employee/EmployeeList/useEmployeeList.js.map +1 -1
  158. package/dist/components/Employee/EmploymentEligibility/EmploymentEligibility.d.ts +3 -0
  159. package/dist/components/Employee/EmploymentEligibility/EmploymentEligibilityPresentation.d.ts +37 -0
  160. package/dist/components/Employee/EmploymentEligibility/index.d.ts +4 -0
  161. package/dist/components/Employee/FederalTaxes/FederalForm.js +7 -7
  162. package/dist/components/Employee/FederalTaxes/useFederalTaxes.js +4 -3
  163. package/dist/components/Employee/FederalTaxes/useFederalTaxes.js.map +1 -1
  164. package/dist/components/Employee/PaymentMethod/BankAccountEdit.js +2 -2
  165. package/dist/components/Employee/PaymentMethod/PaymentTypeForm.js +1 -1
  166. package/dist/components/Employee/PaymentMethod/Split.js +8 -8
  167. package/dist/components/Employee/PaymentMethod/usePaymentMethod.js +6 -5
  168. package/dist/components/Employee/PaymentMethod/usePaymentMethod.js.map +1 -1
  169. package/dist/components/Employee/Profile/AdminPersonalDetails.js +1 -1
  170. package/dist/components/Employee/Profile/AdminPersonalDetails.module.scss.js +1 -1
  171. package/dist/components/Employee/Profile/HomeAddress.js +9 -10
  172. package/dist/components/Employee/Profile/HomeAddress.js.map +1 -1
  173. package/dist/components/Employee/Profile/PersonalDetailsInputs.js +10 -11
  174. package/dist/components/Employee/Profile/PersonalDetailsInputs.js.map +1 -1
  175. package/dist/components/Employee/Profile/useProfile.js +4 -3
  176. package/dist/components/Employee/Profile/useProfile.js.map +1 -1
  177. package/dist/components/Employee/StateTaxes/useStateTaxes.js +4 -3
  178. package/dist/components/Employee/StateTaxes/useStateTaxes.js.map +1 -1
  179. package/dist/components/Employee/Taxes/FederalForm.js +7 -7
  180. package/dist/components/Employee/Taxes/useTaxes.js +4 -3
  181. package/dist/components/Employee/Taxes/useTaxes.js.map +1 -1
  182. package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestForm/InformationRequestForm.d.ts +4 -4
  183. package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js +163 -0
  184. package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js.map +1 -0
  185. package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.module.scss.js +20 -0
  186. package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestForm/InformationRequestForm.module.scss.js.map +1 -1
  187. package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestList/InformationRequestList.d.ts +3 -2
  188. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +98 -0
  189. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -0
  190. package/dist/components/InformationRequests/InformationRequests.d.ts +12 -0
  191. package/dist/components/InformationRequests/InformationRequests.js +101 -0
  192. package/dist/components/InformationRequests/InformationRequests.js.map +1 -0
  193. package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestsComponents.d.ts +4 -4
  194. package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestsComponents.js +2 -2
  195. package/dist/components/InformationRequests/InformationRequestsComponents.js.map +1 -0
  196. package/dist/components/InformationRequests/index.d.ts +4 -0
  197. package/dist/components/InformationRequests/index.js +9 -0
  198. package/dist/components/InformationRequests/index.js.map +1 -0
  199. package/dist/components/{Payroll/InformationRequests → InformationRequests}/informationRequestsStateMachine.d.ts +1 -1
  200. package/dist/components/{Payroll/InformationRequests → InformationRequests}/informationRequestsStateMachine.js +1 -1
  201. package/dist/components/InformationRequests/informationRequestsStateMachine.js.map +1 -0
  202. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +69 -59
  203. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
  204. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +9 -9
  205. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js +61 -52
  206. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js.map +1 -1
  207. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.module.scss.js +10 -10
  208. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.d.ts +2 -0
  209. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.js +33 -0
  210. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.js.map +1 -0
  211. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.d.ts +7 -0
  212. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js +39 -0
  213. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js.map +1 -0
  214. package/dist/components/Payroll/OffCycleReasonSelection/index.d.ts +5 -0
  215. package/dist/components/Payroll/OffCycleReasonSelection/types.d.ts +15 -0
  216. package/dist/components/Payroll/OffCycleReasonSelection/types.js +14 -0
  217. package/dist/components/Payroll/OffCycleReasonSelection/types.js.map +1 -0
  218. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateForm.d.ts +2 -0
  219. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateForm.js +35 -0
  220. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateForm.js.map +1 -0
  221. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormPresentation.d.ts +2 -0
  222. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormPresentation.js +65 -0
  223. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormPresentation.js.map +1 -0
  224. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormPresentation.module.scss.js +18 -0
  225. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormPresentation.module.scss.js.map +1 -0
  226. package/dist/components/Payroll/PayPeriodDateForm/PayPeriodDateFormTypes.d.ts +53 -0
  227. package/dist/components/Payroll/PayPeriodDateForm/index.d.ts +3 -0
  228. package/dist/components/Payroll/PayPeriodDateForm/usePayPeriodDateValidation.d.ts +5 -0
  229. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js +22 -22
  230. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js.map +1 -1
  231. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.d.ts +5 -13
  232. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +103 -28
  233. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
  234. package/dist/components/Payroll/PayrollBlocker/index.d.ts +0 -1
  235. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +14 -14
  236. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
  237. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +1 -1
  238. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +132 -131
  239. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  240. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +1 -1
  241. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
  242. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +38 -39
  243. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  244. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js +5 -5
  245. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +6 -6
  246. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +1 -0
  247. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +45 -38
  248. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
  249. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +54 -40
  250. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
  251. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +29 -29
  252. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
  253. package/dist/components/Payroll/PayrollLanding/PayrollLanding.d.ts +2 -1
  254. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js +26 -24
  255. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
  256. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.d.ts +2 -0
  257. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +70 -48
  258. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  259. package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js +72 -36
  260. package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js.map +1 -1
  261. package/dist/components/Payroll/PayrollList/PayrollList.js +14 -17
  262. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  263. package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +1 -2
  264. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +93 -98
  265. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  266. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  267. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +3 -3
  268. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +242 -243
  269. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  270. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.d.ts +2 -2
  271. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.js.map +1 -1
  272. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.d.ts +2 -2
  273. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.js.map +1 -1
  274. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.module.scss.js +18 -18
  275. package/dist/components/Payroll/RecoveryCases/RecoveryCaseErrorCode.module.scss.js +8 -0
  276. package/dist/components/Payroll/RecoveryCases/RecoveryCaseErrorCode.module.scss.js.map +1 -0
  277. package/dist/components/Payroll/RecoveryCases/RecoveryCases.d.ts +4 -1
  278. package/dist/components/Payroll/RecoveryCases/RecoveryCases.js +34 -28
  279. package/dist/components/Payroll/RecoveryCases/RecoveryCases.js.map +1 -1
  280. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js +82 -51
  281. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js.map +1 -1
  282. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.module.scss.js +2 -4
  283. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.module.scss.js.map +1 -1
  284. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js +59 -35
  285. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js.map +1 -1
  286. package/dist/components/Payroll/RecoveryCases/useRecoveryCaseErrorCode.d.ts +7 -0
  287. package/dist/components/Payroll/RecoveryCases/useRecoveryCaseErrorCode.js +67 -0
  288. package/dist/components/Payroll/RecoveryCases/useRecoveryCaseErrorCode.js.map +1 -0
  289. package/dist/components/Payroll/UNSTABLE_PayrollHooks/PayrollConfiguration/PayrollConfigurationContext.d.ts +1 -1
  290. package/dist/components/Payroll/UNSTABLE_PayrollHooks/PayrollConfiguration/PayrollConfigurationContext.js.map +1 -1
  291. package/dist/components/Payroll/helpers.js.map +1 -1
  292. package/dist/components/Payroll/index.d.ts +5 -2
  293. package/dist/components/Payroll/index.js +16 -14
  294. package/dist/components/Payroll/index.js.map +1 -1
  295. package/dist/components/Payroll/usePreparedPayrollData.d.ts +1 -1
  296. package/dist/components/Payroll/usePreparedPayrollData.js +3 -2
  297. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  298. package/dist/components/index.d.ts +1 -0
  299. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +3 -2
  300. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
  301. package/dist/contexts/ThemeProvider/theme.d.ts +8 -3
  302. package/dist/contexts/ThemeProvider/theme.js +27 -22
  303. package/dist/contexts/ThemeProvider/theme.js.map +1 -1
  304. package/dist/helpers/dateFormatting.d.ts +3 -0
  305. package/dist/helpers/dateFormatting.js.map +1 -1
  306. package/dist/helpers/formattedStrings.js +12 -11
  307. package/dist/helpers/formattedStrings.js.map +1 -1
  308. package/dist/i18n/I18n.js +8 -8
  309. package/dist/i18n/I18n.js.map +1 -1
  310. package/dist/i18n/en/Contractor.Payments.CreatePayment.json.js +30 -26
  311. package/dist/i18n/en/Contractor.Payments.CreatePayment.json.js.map +1 -1
  312. package/dist/i18n/en/Contractor.Payments.PaymentSummary.json.js +58 -0
  313. package/dist/i18n/en/Contractor.Payments.PaymentSummary.json.js.map +1 -0
  314. package/dist/i18n/en/Employee.Deductions.json.js +157 -161
  315. package/dist/i18n/en/Employee.Deductions.json.js.map +1 -1
  316. package/dist/i18n/en/Employee.EmploymentEligibility.json.js +28 -0
  317. package/dist/i18n/en/Employee.EmploymentEligibility.json.js.map +1 -0
  318. package/dist/i18n/en/InformationRequests.InformationRequestForm.json.js +20 -0
  319. package/dist/i18n/en/InformationRequests.InformationRequestForm.json.js.map +1 -0
  320. package/dist/i18n/en/InformationRequests.InformationRequestList.json.js +20 -0
  321. package/dist/i18n/en/InformationRequests.InformationRequestList.json.js.map +1 -0
  322. package/dist/i18n/en/InformationRequests.json.js +8 -0
  323. package/dist/i18n/en/InformationRequests.json.js.map +1 -0
  324. package/dist/i18n/en/Payroll.ConfirmWireDetailsBanner.json.js +1 -1
  325. package/dist/i18n/en/Payroll.OffCycleReasonSelection.json.js +12 -0
  326. package/dist/i18n/en/Payroll.OffCycleReasonSelection.json.js.map +1 -0
  327. package/dist/i18n/en/Payroll.PayPeriodDateForm.json.js +32 -0
  328. package/dist/i18n/en/Payroll.PayPeriodDateForm.json.js.map +1 -0
  329. package/dist/i18n/en/Payroll.PayrollBlocker.json.js +24 -20
  330. package/dist/i18n/en/Payroll.PayrollBlocker.json.js.map +1 -1
  331. package/dist/i18n/en/Payroll.PayrollLanding.json.js +5 -3
  332. package/dist/i18n/en/Payroll.PayrollLanding.json.js.map +1 -1
  333. package/dist/i18n/en/Payroll.RecoveryCasesList.json.js +14 -10
  334. package/dist/i18n/en/Payroll.RecoveryCasesList.json.js.map +1 -1
  335. package/dist/i18n/en/Payroll.RecoveryCasesResubmit.json.js +5 -3
  336. package/dist/i18n/en/Payroll.RecoveryCasesResubmit.json.js.map +1 -1
  337. package/dist/i18n/en/Payroll.WireInstructions.json.js +20 -16
  338. package/dist/i18n/en/Payroll.WireInstructions.json.js.map +1 -1
  339. package/dist/index.js +10 -8
  340. package/dist/index.js.map +1 -1
  341. package/dist/shared/constants.d.ts +10 -0
  342. package/dist/shared/constants.js +22 -17
  343. package/dist/shared/constants.js.map +1 -1
  344. package/dist/style.css +1 -1
  345. package/dist/types/i18next.d.ts +290 -40
  346. package/package.json +17 -17
  347. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.module.scss.js +0 -8
  348. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.module.scss.js.map +0 -1
  349. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.module.scss.js +0 -14
  350. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.module.scss.js.map +0 -1
  351. package/dist/components/Payroll/InformationRequests/InformationRequestForm/InformationRequestForm.js +0 -142
  352. package/dist/components/Payroll/InformationRequests/InformationRequestForm/InformationRequestForm.js.map +0 -1
  353. package/dist/components/Payroll/InformationRequests/InformationRequestForm/InformationRequestForm.module.scss.js +0 -18
  354. package/dist/components/Payroll/InformationRequests/InformationRequestList/InformationRequestList.js +0 -88
  355. package/dist/components/Payroll/InformationRequests/InformationRequestList/InformationRequestList.js.map +0 -1
  356. package/dist/components/Payroll/InformationRequests/InformationRequests.d.ts +0 -6
  357. package/dist/components/Payroll/InformationRequests/InformationRequests.js +0 -55
  358. package/dist/components/Payroll/InformationRequests/InformationRequests.js.map +0 -1
  359. package/dist/components/Payroll/InformationRequests/InformationRequestsComponents.js.map +0 -1
  360. package/dist/components/Payroll/InformationRequests/index.d.ts +0 -3
  361. package/dist/components/Payroll/InformationRequests/informationRequestsStateMachine.js.map +0 -1
  362. package/dist/components/Payroll/PayrollBlocker/PayrollBlocker.d.ts +0 -6
  363. package/dist/components/Payroll/PayrollBlocker/PayrollBlocker.js +0 -32
  364. package/dist/components/Payroll/PayrollBlocker/PayrollBlocker.js.map +0 -1
  365. package/dist/i18n/en/Payroll.InformationRequestForm.json.js +0 -18
  366. package/dist/i18n/en/Payroll.InformationRequestForm.json.js.map +0 -1
  367. package/dist/i18n/en/Payroll.InformationRequestList.json.js +0 -18
  368. package/dist/i18n/en/Payroll.InformationRequestList.json.js.map +0 -1
  369. /package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestForm/index.d.ts +0 -0
  370. /package/dist/components/{Payroll/InformationRequests → InformationRequests}/InformationRequestList/index.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/components/Payroll/helpers.ts"],"sourcesContent":["import type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollShowFixedCompensations } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { FixedCompensations } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport { useCallback } from 'react'\nimport type { TFunction } from 'i18next'\nimport { useTranslation } from 'react-i18next'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { Compensation, MinimumWages } from '@gusto/embedded-api/models/components/compensation'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollType } from './PayrollList/types'\nimport { formatPayRate } from '@/helpers/formattedStrings'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { COMPENSATION_NAME_REIMBURSEMENT, FlsaStatus } from '@/shared/constants'\nimport { MS_PER_HOUR } from '@/helpers/dateFormatting'\nconst REGULAR_HOURS_NAME = 'regular hours'\n\n// Utility to get the primary job from an employee\nexport const getPrimaryJob = (employee: Employee) => {\n return employee.jobs?.find(job => job.primary) || employee.jobs?.[0] || null\n}\n\nconst roundToSixDecimals = (value: number): number => {\n return Math.round(value * 1_000_000) / 1_000_000\n}\n\nconst roundToTwoDecimals = (value: number): number => {\n return Math.round(value * 100) / 100\n}\n\nconst isRegularHours = (compensationName: string): boolean => {\n return compensationName.toLowerCase() === REGULAR_HOURS_NAME\n}\n\nconst PAY_PERIOD_HOURS_MAPPINGS: Record<string, number> = {\n Daily: 8.0,\n 'Every week': 40.0,\n 'Every other week': 80.0,\n 'Twice per month': 86.666667,\n Monthly: 173.333333,\n Quarterly: 520.0,\n Semiannually: 1040.0,\n Annually: 2080.0,\n}\n\nexport const formatEmployeePayRate = ({\n employee,\n t,\n locale = 'en-US',\n}: {\n employee?: Employee\n t: TFunction\n locale?: string\n}) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return formatPayRate({ rate, paymentUnit, t, locale })\n}\n\nexport const useFormatEmployeePayRate = () => {\n const { t } = useTranslation('common')\n const { locale } = useLocale()\n\n return useCallback(\n (employee?: Employee) => {\n return formatEmployeePayRate({ employee, t, locale })\n },\n [t, locale],\n )\n}\n\nexport const getEmployeePayRateInfo = (employee: Employee | undefined) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return { rate, paymentUnit }\n}\n\nexport const getRegularHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.hourlyCompensations) return 0\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => hourlyCompensation.name?.toLowerCase() === 'regular hours')\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport function getOvertimeHours(compensation: PayrollEmployeeCompensationsType) {\n if (!compensation.hourlyCompensations || compensation.excluded) {\n return 0\n }\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => Number(hourlyCompensation.compensationMultiplier) > 1)\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport const getTotalPtoHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n return compensation.paidTimeOff.reduce((sum, pto) => sum + parseFloat(pto.hours || '0'), 0)\n}\n\nexport const getAdditionalEarnings = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n return compensation.fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase() || ''\n const amount = parseFloat(fixedCompensation.amount || '0')\n return name !== 'reimbursement' && name !== 'minimum wage adjustment' && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nexport const getReimbursements = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n const reimbursementComp = compensation.fixedCompensations.find(\n fixedCompensation => fixedCompensation.name?.toLowerCase() === 'reimbursement',\n )\n return reimbursementComp ? parseFloat(reimbursementComp.amount || '0') : 0\n}\n\nexport const formatHoursDisplay = (hours: number): string => {\n const rounded = roundToTwoDecimals(hours)\n\n if (rounded % 1 === 0) {\n return `${rounded}.0`\n }\n\n return rounded.toString()\n}\n\nconst getHoursInPayPeriod = (paySchedule: PayScheduleObject): number => {\n if (!paySchedule.frequency) {\n return 0\n }\n\n return PAY_PERIOD_HOURS_MAPPINGS[paySchedule.frequency] || 0\n}\n\nconst getEffectiveCompensation = (\n compensations: Compensation[],\n effectiveDate: Date,\n): Compensation | null => {\n if (!compensations.length) return null\n\n const sorted = [...compensations].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst getEffectiveMinimumWage = (\n minimumWages: MinimumWages[],\n effectiveDate: Date,\n): MinimumWages | null => {\n if (!minimumWages.length) return null\n\n const sorted = [...minimumWages].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst isSalaried = (compensation: Compensation): boolean => {\n return compensation.flsaStatus === 'Exempt' || compensation.flsaStatus === 'Salaried Nonexempt'\n}\n\nconst getTotalTipCompensations = (fixedCompensations: PayrollShowFixedCompensations[]): number => {\n if (!fixedCompensations.length) return 0\n\n return fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase()\n const amount = parseFloat(fixedCompensation.amount || '0')\n return (name === 'paycheck tips' || name === 'cash tips') && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nconst calculateHourlyRate = (compensation: Compensation): number => {\n const rate = parseFloat(compensation.rate || '0')\n const paymentUnit = compensation.paymentUnit || 'Hour'\n\n switch (paymentUnit) {\n case 'Hour':\n return rate\n case 'Year':\n return rate / 2080 // 52 weeks * 40 hours\n case 'Month':\n return rate / 173.333333\n case 'Week':\n return rate / 40\n case 'Paycheck':\n return 0 // Paycheck rate is 0 for hourly calculation\n default:\n return rate\n }\n}\n\nconst getHourlyRateForJob = (employee: Employee, jobUuid: string, effectiveDate: Date): number => {\n const job = employee.jobs?.find(j => j.uuid === jobUuid)\n if (!job?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(job.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getPrimaryHourlyRate = (employee: Employee, effectiveDate: Date): number => {\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(primaryJob.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getTotalOutstandingPtoHours = (compensation: PayrollEmployeeCompensationsType): number => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n\n return compensation.paidTimeOff.reduce(\n (sum, paidTimeOff) => sum + parseFloat(paidTimeOff.finalPayoutUnusedHoursInput || '0'),\n 0,\n )\n}\n\nconst getPtoHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const regularPtoHours = getTotalPtoHours(compensation)\n\n if (offCycle) {\n const outstandingPtoHours = getTotalOutstandingPtoHours(compensation)\n return regularPtoHours + outstandingPtoHours\n }\n\n if (isSalariedWithExpectedHours) {\n return Math.min(hoursInPayPeriod, regularPtoHours)\n }\n\n return regularPtoHours\n}\n\nconst calculateMinimumWageAdjustment = (\n primaryCompensation: Compensation,\n compensation: PayrollEmployeeCompensationsType,\n effectiveDate: Date,\n): number => {\n if (!primaryCompensation.adjustForMinimumWage) return 0\n\n const effectiveMinWage = getEffectiveMinimumWage(\n primaryCompensation.minimumWages || [],\n effectiveDate,\n )\n if (!effectiveMinWage) {\n return 0\n }\n\n const totalHours =\n compensation.hourlyCompensations?.reduce(\n (sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'),\n 0,\n ) || 0\n\n const hourlyRate = calculateHourlyRate(primaryCompensation)\n\n const totalTipCredit = (parseFloat(effectiveMinWage.wage || '0') - hourlyRate) * totalHours\n const totalTips = getTotalTipCompensations(compensation.fixedCompensations || [])\n\n return Math.max(0, totalTipCredit - totalTips)\n}\n\nconst calculateRegularPlusOvertimePay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n ptoHours: number,\n isOffCycle: boolean,\n): number => {\n if (!isOffCycle && isSalariedWithExpectedHours) {\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return primaryHourlyRate * (hoursInPayPeriod - ptoHours)\n }\n\n if (!compensation.hourlyCompensations || !employee.jobs) {\n return 0\n }\n\n const regularRatePay = compensation.hourlyCompensations.reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const hourlyRate = getHourlyRateForJob(employee, hc.jobUuid || '', effectiveDate)\n return sum + hours * hourlyRate\n }, 0)\n\n const totalHours = compensation.hourlyCompensations.reduce((sum, hc) => {\n return sum + parseFloat(hc.hours || '0')\n }, 0)\n\n if (totalHours === 0) return regularRatePay\n\n const overtimeWeightedRate = roundToSixDecimals(regularRatePay / totalHours)\n\n // Calculate overtime pay for non-regular hours\n const overtimePay = compensation.hourlyCompensations\n .filter(hc => !isRegularHours(hc.name || ''))\n .reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const multiplier = hc.compensationMultiplier || 1\n return sum + hours * overtimeWeightedRate * (multiplier - 1)\n }, 0)\n\n return regularRatePay + overtimePay\n}\n\nconst calculatePtoPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return ptoHours * primaryHourlyRate\n}\n\nconst isSalariedWithPayPeriodExpectedHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalaried: boolean,\n hoursInPayPeriod: number,\n): boolean => {\n if (!isSalaried) return false\n\n const regularHourlyCompensation = compensation.hourlyCompensations?.find(hourlyCompensation =>\n isRegularHours(hourlyCompensation.name || ''),\n )\n\n if (!regularHourlyCompensation) return false\n\n const regularHours = parseFloat(regularHourlyCompensation.hours || '0')\n return regularHours === hoursInPayPeriod\n}\n\nexport const calculateGrossPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n compensationEffectiveDateString?: string,\n paySchedule?: PayScheduleObject,\n isOffCycle: boolean = false,\n): number => {\n if (compensation.excluded) {\n return 0\n }\n\n const compensationEffectiveDate = compensationEffectiveDateString\n ? new Date(compensationEffectiveDateString)\n : new Date()\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const primaryCompensation = getEffectiveCompensation(\n primaryJob.compensations,\n compensationEffectiveDate,\n )\n\n if (!primaryCompensation) {\n return 0\n }\n\n const salaried = isSalaried(primaryCompensation)\n const hoursInPayPeriod = paySchedule ? getHoursInPayPeriod(paySchedule) : 0\n\n const isSalariedWithExpectedHours = isSalariedWithPayPeriodExpectedHours(\n compensation,\n salaried,\n hoursInPayPeriod,\n )\n\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n isOffCycle,\n )\n\n const regularPlusOvertimePay = calculateRegularPlusOvertimePay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n ptoHours,\n isOffCycle,\n )\n\n const fixedPay = getAdditionalEarnings(compensation)\n const ptoPay = calculatePtoPay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n isOffCycle,\n )\n const minimumWageAdjustment = calculateMinimumWageAdjustment(\n primaryCompensation,\n compensation,\n compensationEffectiveDate,\n )\n\n const total = regularPlusOvertimePay + fixedPay + ptoPay + minimumWageAdjustment\n return roundToTwoDecimals(total)\n}\n\n// Payroll type and status utilities\nexport const getPayrollType = (payroll: {\n external?: boolean\n offCycle?: boolean\n}): PayrollType => {\n if (payroll.external) return 'External'\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const getAdditionalEarningsCompensations = ({\n flsaStatus,\n existingFixedCompensations = [],\n primaryJobUuid,\n fixedCompensationTypes = [],\n excludedTypes = [],\n}: {\n flsaStatus: string | undefined\n existingFixedCompensations?: FixedCompensations[]\n primaryJobUuid?: string\n fixedCompensationTypes?: PayrollFixedCompensationTypesType[]\n excludedTypes?: string[]\n}): FixedCompensations[] => {\n const allFixedCompensations = [...existingFixedCompensations]\n\n if (flsaStatus !== FlsaStatus.OWNER && primaryJobUuid && fixedCompensationTypes.length > 0) {\n const compensationTypeNames = fixedCompensationTypes\n .map(type => type.name)\n .filter(Boolean) as string[]\n\n compensationTypeNames.forEach(compensationName => {\n const exists = allFixedCompensations.some(\n comp => comp.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n\n if (!exists) {\n allFixedCompensations.push({\n name: compensationName,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n })\n }\n })\n }\n\n // Filter and sort additional earnings (exclude specified types)\n return allFixedCompensations\n .filter(comp => comp.name && !excludedTypes.includes(comp.name))\n .sort((a, b) => (a.name || '').localeCompare(b.name || ''))\n}\n\nexport const getReimbursementCompensation = (\n fixedCompensations: FixedCompensations[],\n fixedCompensationTypes: PayrollFixedCompensationTypesType[],\n primaryJobUuid?: string,\n) => {\n const reimbursementCompensation = fixedCompensations.find(\n comp => comp.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n\n if (reimbursementCompensation) {\n return reimbursementCompensation\n }\n\n if (\n primaryJobUuid &&\n fixedCompensationTypes.some(\n type => type.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n ) {\n return {\n name: COMPENSATION_NAME_REIMBURSEMENT,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n }\n }\n\n return null\n}\n\n// Total Payroll = Gross Pay + Employer Taxes + Reimbursements + Benefits\nexport const calculateTotalPayroll = (payrollData: Payroll) => {\n const totalPayroll = payrollData.totals\n ? Number(payrollData.totals.grossPay ?? 0) +\n Number(payrollData.totals.employerTaxes ?? 0) +\n Number(payrollData.totals.reimbursements ?? 0) +\n Number(payrollData.totals.benefits ?? 0)\n : 0\n\n return totalPayroll\n}\n\n/**\n * Converts a Date to Pacific Time considering Daylight Saving Time.\n * Returns the UTC offset in hours (e.g., -7 for PDT, -8 for PST).\n *\n * DST rules for Pacific Time:\n * - Starts: Second Sunday in March at 2:00 AM\n * - Ends: First Sunday in November at 2:00 AM\n */\nconst getPacificTimeOffset = (date: Date): number => {\n const year = date.getFullYear()\n\n const secondSundayMarch = new Date(year, 2, 1)\n secondSundayMarch.setDate(1 + (7 - secondSundayMarch.getDay()) + 7)\n\n const firstSundayNovember = new Date(year, 10, 1)\n firstSundayNovember.setDate(1 + ((7 - firstSundayNovember.getDay()) % 7))\n\n const isDST = date >= secondSundayMarch && date < firstSundayNovember\n return isDST ? -7 : -8\n}\n\n/**\n * Determines if a payroll can be cancelled based on business rules.\n *\n * A payroll can be cancelled if all of the following conditions are met:\n * - The payroll has been processed (processed === true)\n * - Current time is before 4:00 PM PT on the payroll deadline\n * - The payrollStatusMeta.cancellable flag is not explicitly false\n *\n * This check enforces the business rule that payrolls can only be cancelled\n * before the 4:00 PM PT cutoff time on their deadline date.\n */\nexport const canCancelPayroll = (payroll: Payroll): boolean => {\n if (payroll.payrollStatusMeta?.cancellable === false) {\n return false\n }\n\n if (!payroll.processed) {\n return false\n }\n\n if (!payroll.payrollDeadline) {\n return false\n }\n\n const now = new Date()\n const deadline = new Date(payroll.payrollDeadline)\n\n const nowInPT = new Date(now.getTime() + getPacificTimeOffset(now) * MS_PER_HOUR)\n const deadlineInPT = new Date(deadline.getTime() + getPacificTimeOffset(deadline) * MS_PER_HOUR)\n\n const cutoffTime = new Date(deadlineInPT)\n cutoffTime.setUTCHours(16, 0, 0, 0)\n\n if (nowInPT >= cutoffTime) {\n return false\n }\n\n return true\n}\n"],"names":["REGULAR_HOURS_NAME","getPrimaryJob","employee","job","roundToSixDecimals","value","roundToTwoDecimals","isRegularHours","compensationName","PAY_PERIOD_HOURS_MAPPINGS","formatEmployeePayRate","locale","primaryJob","jobCompensation","rate","paymentUnit","formatPayRate","useFormatEmployeePayRate","t","useTranslation","useLocale","useCallback","getRegularHours","compensation","hourlyCompensation","sum","getOvertimeHours","getTotalPtoHours","pto","getAdditionalEarnings","fixedCompensation","name","amount","getReimbursements","reimbursementComp","formatHoursDisplay","hours","rounded","getHoursInPayPeriod","paySchedule","getEffectiveCompensation","compensations","effectiveDate","sorted","a","b","i","currentDateString","currentDate","getEffectiveMinimumWage","minimumWages","isSalaried","getTotalTipCompensations","fixedCompensations","calculateHourlyRate","getHourlyRateForJob","jobUuid","j","getPrimaryHourlyRate","getTotalOutstandingPtoHours","paidTimeOff","getPtoHours","isSalariedWithExpectedHours","hoursInPayPeriod","offCycle","regularPtoHours","outstandingPtoHours","calculateMinimumWageAdjustment","primaryCompensation","effectiveMinWage","totalHours","hourlyRate","totalTipCredit","totalTips","calculateRegularPlusOvertimePay","ptoHours","isOffCycle","regularRatePay","hc","overtimeWeightedRate","overtimePay","multiplier","calculatePtoPay","primaryHourlyRate","isSalariedWithPayPeriodExpectedHours","regularHourlyCompensation","calculateGrossPay","compensationEffectiveDateString","compensationEffectiveDate","salaried","regularPlusOvertimePay","fixedPay","ptoPay","minimumWageAdjustment","total","getPayrollType","payroll","getAdditionalEarningsCompensations","flsaStatus","existingFixedCompensations","primaryJobUuid","fixedCompensationTypes","excludedTypes","allFixedCompensations","FlsaStatus","type","comp","getReimbursementCompensation","reimbursementCompensation","COMPENSATION_NAME_REIMBURSEMENT","calculateTotalPayroll","payrollData","getPacificTimeOffset","date","year","secondSundayMarch","firstSundayNovember","canCancelPayroll","now","deadline","nowInPT","MS_PER_HOUR","deadlineInPT","cutoffTime"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/components/Payroll/helpers.ts"],"sourcesContent":["import type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollShowFixedCompensations } from '@gusto/embedded-api/models/components/payroll'\nimport type { FixedCompensations } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport { useCallback } from 'react'\nimport type { TFunction } from 'i18next'\nimport { useTranslation } from 'react-i18next'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { Compensation, MinimumWages } from '@gusto/embedded-api/models/components/compensation'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollType } from './PayrollList/types'\nimport { formatPayRate } from '@/helpers/formattedStrings'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { COMPENSATION_NAME_REIMBURSEMENT, FlsaStatus } from '@/shared/constants'\nimport { MS_PER_HOUR } from '@/helpers/dateFormatting'\nconst REGULAR_HOURS_NAME = 'regular hours'\n\n// Utility to get the primary job from an employee\nexport const getPrimaryJob = (employee: Employee) => {\n return employee.jobs?.find(job => job.primary) || employee.jobs?.[0] || null\n}\n\nconst roundToSixDecimals = (value: number): number => {\n return Math.round(value * 1_000_000) / 1_000_000\n}\n\nconst roundToTwoDecimals = (value: number): number => {\n return Math.round(value * 100) / 100\n}\n\nconst isRegularHours = (compensationName: string): boolean => {\n return compensationName.toLowerCase() === REGULAR_HOURS_NAME\n}\n\nconst PAY_PERIOD_HOURS_MAPPINGS: Record<string, number> = {\n Daily: 8.0,\n 'Every week': 40.0,\n 'Every other week': 80.0,\n 'Twice per month': 86.666667,\n Monthly: 173.333333,\n Quarterly: 520.0,\n Semiannually: 1040.0,\n Annually: 2080.0,\n}\n\nexport const formatEmployeePayRate = ({\n employee,\n t,\n locale = 'en-US',\n}: {\n employee?: Employee\n t: TFunction\n locale?: string\n}) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return formatPayRate({ rate, paymentUnit, t, locale })\n}\n\nexport const useFormatEmployeePayRate = () => {\n const { t } = useTranslation('common')\n const { locale } = useLocale()\n\n return useCallback(\n (employee?: Employee) => {\n return formatEmployeePayRate({ employee, t, locale })\n },\n [t, locale],\n )\n}\n\nexport const getEmployeePayRateInfo = (employee: Employee | undefined) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return { rate, paymentUnit }\n}\n\nexport const getRegularHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.hourlyCompensations) return 0\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => hourlyCompensation.name?.toLowerCase() === 'regular hours')\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport function getOvertimeHours(compensation: PayrollEmployeeCompensationsType) {\n if (!compensation.hourlyCompensations || compensation.excluded) {\n return 0\n }\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => Number(hourlyCompensation.compensationMultiplier) > 1)\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport const getTotalPtoHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n return compensation.paidTimeOff.reduce((sum, pto) => sum + parseFloat(pto.hours || '0'), 0)\n}\n\nexport const getAdditionalEarnings = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n return compensation.fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase() || ''\n const amount = parseFloat(fixedCompensation.amount || '0')\n return name !== 'reimbursement' && name !== 'minimum wage adjustment' && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nexport const getReimbursements = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n const reimbursementComp = compensation.fixedCompensations.find(\n fixedCompensation => fixedCompensation.name?.toLowerCase() === 'reimbursement',\n )\n return reimbursementComp ? parseFloat(reimbursementComp.amount || '0') : 0\n}\n\nexport const formatHoursDisplay = (hours: number): string => {\n const rounded = roundToTwoDecimals(hours)\n\n if (rounded % 1 === 0) {\n return `${rounded}.0`\n }\n\n return rounded.toString()\n}\n\nconst getHoursInPayPeriod = (paySchedule: PayScheduleObject): number => {\n if (!paySchedule.frequency) {\n return 0\n }\n\n return PAY_PERIOD_HOURS_MAPPINGS[paySchedule.frequency] || 0\n}\n\nconst getEffectiveCompensation = (\n compensations: Compensation[],\n effectiveDate: Date,\n): Compensation | null => {\n if (!compensations.length) return null\n\n const sorted = [...compensations].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst getEffectiveMinimumWage = (\n minimumWages: MinimumWages[],\n effectiveDate: Date,\n): MinimumWages | null => {\n if (!minimumWages.length) return null\n\n const sorted = [...minimumWages].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst isSalaried = (compensation: Compensation): boolean => {\n return compensation.flsaStatus === 'Exempt' || compensation.flsaStatus === 'Salaried Nonexempt'\n}\n\nconst getTotalTipCompensations = (fixedCompensations: PayrollShowFixedCompensations[]): number => {\n if (!fixedCompensations.length) return 0\n\n return fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase()\n const amount = parseFloat(fixedCompensation.amount || '0')\n return (name === 'paycheck tips' || name === 'cash tips') && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nconst calculateHourlyRate = (compensation: Compensation): number => {\n const rate = parseFloat(compensation.rate || '0')\n const paymentUnit = compensation.paymentUnit || 'Hour'\n\n switch (paymentUnit) {\n case 'Hour':\n return rate\n case 'Year':\n return rate / 2080 // 52 weeks * 40 hours\n case 'Month':\n return rate / 173.333333\n case 'Week':\n return rate / 40\n case 'Paycheck':\n return 0 // Paycheck rate is 0 for hourly calculation\n default:\n return rate\n }\n}\n\nconst getHourlyRateForJob = (employee: Employee, jobUuid: string, effectiveDate: Date): number => {\n const job = employee.jobs?.find(j => j.uuid === jobUuid)\n if (!job?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(job.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getPrimaryHourlyRate = (employee: Employee, effectiveDate: Date): number => {\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(primaryJob.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getTotalOutstandingPtoHours = (compensation: PayrollEmployeeCompensationsType): number => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n\n return compensation.paidTimeOff.reduce(\n (sum, paidTimeOff) => sum + parseFloat(paidTimeOff.finalPayoutUnusedHoursInput || '0'),\n 0,\n )\n}\n\nconst getPtoHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const regularPtoHours = getTotalPtoHours(compensation)\n\n if (offCycle) {\n const outstandingPtoHours = getTotalOutstandingPtoHours(compensation)\n return regularPtoHours + outstandingPtoHours\n }\n\n if (isSalariedWithExpectedHours) {\n return Math.min(hoursInPayPeriod, regularPtoHours)\n }\n\n return regularPtoHours\n}\n\nconst calculateMinimumWageAdjustment = (\n primaryCompensation: Compensation,\n compensation: PayrollEmployeeCompensationsType,\n effectiveDate: Date,\n): number => {\n if (!primaryCompensation.adjustForMinimumWage) return 0\n\n const effectiveMinWage = getEffectiveMinimumWage(\n primaryCompensation.minimumWages || [],\n effectiveDate,\n )\n if (!effectiveMinWage) {\n return 0\n }\n\n const totalHours =\n compensation.hourlyCompensations?.reduce(\n (sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'),\n 0,\n ) || 0\n\n const hourlyRate = calculateHourlyRate(primaryCompensation)\n\n const totalTipCredit = (parseFloat(effectiveMinWage.wage || '0') - hourlyRate) * totalHours\n const totalTips = getTotalTipCompensations(compensation.fixedCompensations || [])\n\n return Math.max(0, totalTipCredit - totalTips)\n}\n\nconst calculateRegularPlusOvertimePay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n ptoHours: number,\n isOffCycle: boolean,\n): number => {\n if (!isOffCycle && isSalariedWithExpectedHours) {\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return primaryHourlyRate * (hoursInPayPeriod - ptoHours)\n }\n\n if (!compensation.hourlyCompensations || !employee.jobs) {\n return 0\n }\n\n const regularRatePay = compensation.hourlyCompensations.reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const hourlyRate = getHourlyRateForJob(employee, hc.jobUuid || '', effectiveDate)\n return sum + hours * hourlyRate\n }, 0)\n\n const totalHours = compensation.hourlyCompensations.reduce((sum, hc) => {\n return sum + parseFloat(hc.hours || '0')\n }, 0)\n\n if (totalHours === 0) return regularRatePay\n\n const overtimeWeightedRate = roundToSixDecimals(regularRatePay / totalHours)\n\n // Calculate overtime pay for non-regular hours\n const overtimePay = compensation.hourlyCompensations\n .filter(hc => !isRegularHours(hc.name || ''))\n .reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const multiplier = hc.compensationMultiplier || 1\n return sum + hours * overtimeWeightedRate * (multiplier - 1)\n }, 0)\n\n return regularRatePay + overtimePay\n}\n\nconst calculatePtoPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return ptoHours * primaryHourlyRate\n}\n\nconst isSalariedWithPayPeriodExpectedHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalaried: boolean,\n hoursInPayPeriod: number,\n): boolean => {\n if (!isSalaried) return false\n\n const regularHourlyCompensation = compensation.hourlyCompensations?.find(hourlyCompensation =>\n isRegularHours(hourlyCompensation.name || ''),\n )\n\n if (!regularHourlyCompensation) return false\n\n const regularHours = parseFloat(regularHourlyCompensation.hours || '0')\n return regularHours === hoursInPayPeriod\n}\n\nexport const calculateGrossPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n compensationEffectiveDateString?: string,\n paySchedule?: PayScheduleObject,\n isOffCycle: boolean = false,\n): number => {\n if (compensation.excluded) {\n return 0\n }\n\n const compensationEffectiveDate = compensationEffectiveDateString\n ? new Date(compensationEffectiveDateString)\n : new Date()\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const primaryCompensation = getEffectiveCompensation(\n primaryJob.compensations,\n compensationEffectiveDate,\n )\n\n if (!primaryCompensation) {\n return 0\n }\n\n const salaried = isSalaried(primaryCompensation)\n const hoursInPayPeriod = paySchedule ? getHoursInPayPeriod(paySchedule) : 0\n\n const isSalariedWithExpectedHours = isSalariedWithPayPeriodExpectedHours(\n compensation,\n salaried,\n hoursInPayPeriod,\n )\n\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n isOffCycle,\n )\n\n const regularPlusOvertimePay = calculateRegularPlusOvertimePay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n ptoHours,\n isOffCycle,\n )\n\n const fixedPay = getAdditionalEarnings(compensation)\n const ptoPay = calculatePtoPay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n isOffCycle,\n )\n const minimumWageAdjustment = calculateMinimumWageAdjustment(\n primaryCompensation,\n compensation,\n compensationEffectiveDate,\n )\n\n const total = regularPlusOvertimePay + fixedPay + ptoPay + minimumWageAdjustment\n return roundToTwoDecimals(total)\n}\n\n// Payroll type and status utilities\nexport const getPayrollType = (payroll: {\n external?: boolean\n offCycle?: boolean\n}): PayrollType => {\n if (payroll.external) return 'External'\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const getAdditionalEarningsCompensations = ({\n flsaStatus,\n existingFixedCompensations = [],\n primaryJobUuid,\n fixedCompensationTypes = [],\n excludedTypes = [],\n}: {\n flsaStatus: string | undefined\n existingFixedCompensations?: FixedCompensations[]\n primaryJobUuid?: string\n fixedCompensationTypes?: PayrollFixedCompensationTypesType[]\n excludedTypes?: string[]\n}): FixedCompensations[] => {\n const allFixedCompensations = [...existingFixedCompensations]\n\n if (flsaStatus !== FlsaStatus.OWNER && primaryJobUuid && fixedCompensationTypes.length > 0) {\n const compensationTypeNames = fixedCompensationTypes\n .map(type => type.name)\n .filter(Boolean) as string[]\n\n compensationTypeNames.forEach(compensationName => {\n const exists = allFixedCompensations.some(\n comp => comp.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n\n if (!exists) {\n allFixedCompensations.push({\n name: compensationName,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n })\n }\n })\n }\n\n // Filter and sort additional earnings (exclude specified types)\n return allFixedCompensations\n .filter(comp => comp.name && !excludedTypes.includes(comp.name))\n .sort((a, b) => (a.name || '').localeCompare(b.name || ''))\n}\n\nexport const getReimbursementCompensation = (\n fixedCompensations: FixedCompensations[],\n fixedCompensationTypes: PayrollFixedCompensationTypesType[],\n primaryJobUuid?: string,\n) => {\n const reimbursementCompensation = fixedCompensations.find(\n comp => comp.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n\n if (reimbursementCompensation) {\n return reimbursementCompensation\n }\n\n if (\n primaryJobUuid &&\n fixedCompensationTypes.some(\n type => type.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n ) {\n return {\n name: COMPENSATION_NAME_REIMBURSEMENT,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n }\n }\n\n return null\n}\n\n// Total Payroll = Gross Pay + Employer Taxes + Reimbursements + Benefits\nexport const calculateTotalPayroll = (payrollData: Payroll) => {\n const totalPayroll = payrollData.totals\n ? Number(payrollData.totals.grossPay ?? 0) +\n Number(payrollData.totals.employerTaxes ?? 0) +\n Number(payrollData.totals.reimbursements ?? 0) +\n Number(payrollData.totals.benefits ?? 0)\n : 0\n\n return totalPayroll\n}\n\n/**\n * Converts a Date to Pacific Time considering Daylight Saving Time.\n * Returns the UTC offset in hours (e.g., -7 for PDT, -8 for PST).\n *\n * DST rules for Pacific Time:\n * - Starts: Second Sunday in March at 2:00 AM\n * - Ends: First Sunday in November at 2:00 AM\n */\nconst getPacificTimeOffset = (date: Date): number => {\n const year = date.getFullYear()\n\n const secondSundayMarch = new Date(year, 2, 1)\n secondSundayMarch.setDate(1 + (7 - secondSundayMarch.getDay()) + 7)\n\n const firstSundayNovember = new Date(year, 10, 1)\n firstSundayNovember.setDate(1 + ((7 - firstSundayNovember.getDay()) % 7))\n\n const isDST = date >= secondSundayMarch && date < firstSundayNovember\n return isDST ? -7 : -8\n}\n\n/**\n * Determines if a payroll can be cancelled based on business rules.\n *\n * A payroll can be cancelled if all of the following conditions are met:\n * - The payroll has been processed (processed === true)\n * - Current time is before 4:00 PM PT on the payroll deadline\n * - The payrollStatusMeta.cancellable flag is not explicitly false\n *\n * This check enforces the business rule that payrolls can only be cancelled\n * before the 4:00 PM PT cutoff time on their deadline date.\n */\nexport const canCancelPayroll = (payroll: Payroll): boolean => {\n if (payroll.payrollStatusMeta?.cancellable === false) {\n return false\n }\n\n if (!payroll.processed) {\n return false\n }\n\n if (!payroll.payrollDeadline) {\n return false\n }\n\n const now = new Date()\n const deadline = new Date(payroll.payrollDeadline)\n\n const nowInPT = new Date(now.getTime() + getPacificTimeOffset(now) * MS_PER_HOUR)\n const deadlineInPT = new Date(deadline.getTime() + getPacificTimeOffset(deadline) * MS_PER_HOUR)\n\n const cutoffTime = new Date(deadlineInPT)\n cutoffTime.setUTCHours(16, 0, 0, 0)\n\n if (nowInPT >= cutoffTime) {\n return false\n }\n\n return true\n}\n"],"names":["REGULAR_HOURS_NAME","getPrimaryJob","employee","job","roundToSixDecimals","value","roundToTwoDecimals","isRegularHours","compensationName","PAY_PERIOD_HOURS_MAPPINGS","formatEmployeePayRate","locale","primaryJob","jobCompensation","rate","paymentUnit","formatPayRate","useFormatEmployeePayRate","t","useTranslation","useLocale","useCallback","getRegularHours","compensation","hourlyCompensation","sum","getOvertimeHours","getTotalPtoHours","pto","getAdditionalEarnings","fixedCompensation","name","amount","getReimbursements","reimbursementComp","formatHoursDisplay","hours","rounded","getHoursInPayPeriod","paySchedule","getEffectiveCompensation","compensations","effectiveDate","sorted","a","b","i","currentDateString","currentDate","getEffectiveMinimumWage","minimumWages","isSalaried","getTotalTipCompensations","fixedCompensations","calculateHourlyRate","getHourlyRateForJob","jobUuid","j","getPrimaryHourlyRate","getTotalOutstandingPtoHours","paidTimeOff","getPtoHours","isSalariedWithExpectedHours","hoursInPayPeriod","offCycle","regularPtoHours","outstandingPtoHours","calculateMinimumWageAdjustment","primaryCompensation","effectiveMinWage","totalHours","hourlyRate","totalTipCredit","totalTips","calculateRegularPlusOvertimePay","ptoHours","isOffCycle","regularRatePay","hc","overtimeWeightedRate","overtimePay","multiplier","calculatePtoPay","primaryHourlyRate","isSalariedWithPayPeriodExpectedHours","regularHourlyCompensation","calculateGrossPay","compensationEffectiveDateString","compensationEffectiveDate","salaried","regularPlusOvertimePay","fixedPay","ptoPay","minimumWageAdjustment","total","getPayrollType","payroll","getAdditionalEarningsCompensations","flsaStatus","existingFixedCompensations","primaryJobUuid","fixedCompensationTypes","excludedTypes","allFixedCompensations","FlsaStatus","type","comp","getReimbursementCompensation","reimbursementCompensation","COMPENSATION_NAME_REIMBURSEMENT","calculateTotalPayroll","payrollData","getPacificTimeOffset","date","year","secondSundayMarch","firstSundayNovember","canCancelPayroll","now","deadline","nowInPT","MS_PER_HOUR","deadlineInPT","cutoffTime"],"mappings":"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"}
@@ -4,11 +4,14 @@ export { PayrollEditEmployee } from './PayrollEditEmployee/PayrollEditEmployee';
4
4
  export { PayrollHistory } from './PayrollHistory/PayrollHistory';
5
5
  export { PayrollLanding } from './PayrollLanding/PayrollLanding';
6
6
  export { PayrollList } from './PayrollList/PayrollList';
7
+ export { OffCycleReasonSelection } from './OffCycleReasonSelection';
8
+ export type { OffCycleReason, OffCycleReasonDefaults, OffCycleReasonSelectionProps, SelectReasonPayload, } from './OffCycleReasonSelection';
7
9
  export { PayrollOverview } from './PayrollOverview/PayrollOverview';
8
10
  export { PayrollFlow } from './PayrollFlow/PayrollFlow';
9
11
  export { PayrollReceipts } from './PayrollReceipts/PayrollReceipts';
10
12
  export { ConfirmWireDetails } from './ConfirmWireDetails/ConfirmWireDetails';
11
13
  export type { ConfirmWireDetailsProps, ConfirmWireDetailsComponentType } from './ConfirmWireDetails';
12
- export { PayrollBlocker, type ApiPayrollBlocker } from './PayrollBlocker';
13
- export { InformationRequests } from './InformationRequests';
14
+ export { PayrollBlockerList, type ApiPayrollBlocker } from './PayrollBlocker';
14
15
  export { RecoveryCases } from './RecoveryCases/RecoveryCases';
16
+ export { PayPeriodDateForm } from './PayPeriodDateForm';
17
+ export type { PayPeriodDateFormProps, PayPeriodDateFormData, PayrollDateType, } from './PayPeriodDateForm';
@@ -1,27 +1,29 @@
1
1
  import { PayrollConfiguration as e } from "./PayrollConfiguration/PayrollConfiguration.js";
2
2
  import { PayrollEditEmployee as t } from "./PayrollEditEmployee/PayrollEditEmployee.js";
3
- import { PayrollHistory as m } from "./PayrollHistory/PayrollHistory.js";
3
+ import { PayrollHistory as a } from "./PayrollHistory/PayrollHistory.js";
4
4
  import { PayrollLanding as p } from "./PayrollLanding/PayrollLanding.js";
5
- import { PayrollList as x } from "./PayrollList/PayrollList.js";
5
+ import { PayrollList as y } from "./PayrollList/PayrollList.js";
6
6
  import { PayrollOverview as P } from "./PayrollOverview/PayrollOverview.js";
7
7
  import { PayrollFlow as n } from "./PayrollFlow/PayrollFlow.js";
8
- import { PayrollReceipts as v } from "./PayrollReceipts/PayrollReceipts.js";
9
- import { ConfirmWireDetails as R } from "./ConfirmWireDetails/ConfirmWireDetails.js";
10
- import { RecoveryCases as g } from "./RecoveryCases/RecoveryCases.js";
11
- import { PayrollBlocker as w } from "./PayrollBlocker/PayrollBlocker.js";
12
- import { InformationRequests as L } from "./InformationRequests/InformationRequests.js";
8
+ import { PayrollReceipts as C } from "./PayrollReceipts/PayrollReceipts.js";
9
+ import { ConfirmWireDetails as v } from "./ConfirmWireDetails/ConfirmWireDetails.js";
10
+ import { RecoveryCases as R } from "./RecoveryCases/RecoveryCases.js";
11
+ import { OffCycleReasonSelection as w } from "./OffCycleReasonSelection/OffCycleReasonSelection.js";
12
+ import { PayrollBlockerList as E } from "./PayrollBlocker/components/PayrollBlockerList.js";
13
+ import { PayPeriodDateForm as O } from "./PayPeriodDateForm/PayPeriodDateForm.js";
13
14
  export {
14
- R as ConfirmWireDetails,
15
- L as InformationRequests,
16
- w as PayrollBlocker,
15
+ v as ConfirmWireDetails,
16
+ w as OffCycleReasonSelection,
17
+ O as PayPeriodDateForm,
18
+ E as PayrollBlockerList,
17
19
  e as PayrollConfiguration,
18
20
  t as PayrollEditEmployee,
19
21
  n as PayrollFlow,
20
- m as PayrollHistory,
22
+ a as PayrollHistory,
21
23
  p as PayrollLanding,
22
- x as PayrollList,
24
+ y as PayrollList,
23
25
  P as PayrollOverview,
24
- v as PayrollReceipts,
25
- g as RecoveryCases
26
+ C as PayrollReceipts,
27
+ R as RecoveryCases
26
28
  };
27
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { PayrollPrepared } from '@gusto/embedded-api/models/components/payrollprepared';
1
+ import { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll';
2
2
  import { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject';
3
3
  import { PayrollPrepareSortBy } from '@gusto/embedded-api/models/components/payrollpreparesortby';
4
4
  interface UsePreparedPayrollDataParams {
@@ -13,7 +13,8 @@ import "classnames";
13
13
  import "../../contexts/ComponentAdapter/useComponentContext.js";
14
14
  import "../../contexts/LoadingIndicatorProvider/useLoadingIndicator.js";
15
15
  import "dompurify";
16
- const F = ({
16
+ import "../../contexts/LocaleProvider/useLocale.js";
17
+ const J = ({
17
18
  companyId: r,
18
19
  payrollId: s,
19
20
  employeeUuids: a,
@@ -65,6 +66,6 @@ const F = ({
65
66
  };
66
67
  };
67
68
  export {
68
- F as usePreparedPayrollData
69
+ J as usePreparedPayrollData
69
70
  };
70
71
  //# sourceMappingURL=usePreparedPayrollData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payrollprepared'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { PayrollPrepareSortBy } from '@gusto/embedded-api/models/components/payrollpreparesortby'\nimport { useBase } from '../Base'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: PayrollPrepareSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleObject | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n })\n }, [\n companyId,\n payrollId,\n preparePayroll,\n employeeUuidsKey,\n baseSubmitHandler,\n sortBy,\n onDataReady,\n ])\n\n useEffect(() => {\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleObject,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","handlePreparePayroll","useCallback","result","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;AAyBO,MAAMA,IAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChC,EAAE,mBAAAC,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMd,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMe,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAAnB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIY,IAAuBC,EAAY,YAAY;AACnD,UAAMR,EAAkB,MAAM,YAAY;AACxC,YAAMS,IAAS,MAAMjB,EAAe;AAAA,QAClC,SAAS;AAAA,UACP,WAAAL;AAAA,UACA,WAAAC;AAAA,UACA,QAAAE;AAAA,UACA,aAAa;AAAA,YACX,eAAAD;AAAA,UAAA;AAAA,QACF;AAAA,MACF,CACD;AACD,MAAAO,EAAmBa,EAAO,eAAe,GACrCA,EAAO,oBACTX,EAAkB,UAAU,IAC5BP,IAAckB,EAAO,eAAe;AAAA,IAExC,CAAC;AAAA,EACH,GAAG;AAAA,IACDtB;AAAA,IACAC;AAAA,IACAI;AAAA,IACAU;AAAA,IACAF;AAAA,IACAV;AAAA,IACAC;AAAA,EAAA,CACD;AAED,EAAAmB,EAAU,MAAM;AACd,IAAKH,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMI,IAAmBlB,KAA2B,CAACK,EAAkB,SACjEc,IAAenB,KAA2BK,EAAkB,SAC5De,IAAYF,KAAoBN;AAEtC,SAAO;AAAA,IACL,sBAAAE;AAAA,IACA,iBAAAZ;AAAA,IACA,aAAaS,GAAiB;AAAA,IAC9B,WAAAS;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBd,EAAkB;AAAA,EAAA;AAEtC;"}
1
+ {"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport type { PayrollPrepareSortBy } from '@gusto/embedded-api/models/components/payrollpreparesortby'\nimport { useBase } from '../Base'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: PayrollPrepareSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleObject | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n })\n }, [\n companyId,\n payrollId,\n preparePayroll,\n employeeUuidsKey,\n baseSubmitHandler,\n sortBy,\n onDataReady,\n ])\n\n useEffect(() => {\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleObject,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","handlePreparePayroll","useCallback","result","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;;AAyBO,MAAMA,IAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChC,EAAE,mBAAAC,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMd,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMe,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAAnB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIY,IAAuBC,EAAY,YAAY;AACnD,UAAMR,EAAkB,MAAM,YAAY;AACxC,YAAMS,IAAS,MAAMjB,EAAe;AAAA,QAClC,SAAS;AAAA,UACP,WAAAL;AAAA,UACA,WAAAC;AAAA,UACA,QAAAE;AAAA,UACA,aAAa;AAAA,YACX,eAAAD;AAAA,UAAA;AAAA,QACF;AAAA,MACF,CACD;AACD,MAAAO,EAAmBa,EAAO,eAAe,GACrCA,EAAO,oBACTX,EAAkB,UAAU,IAC5BP,IAAckB,EAAO,eAAe;AAAA,IAExC,CAAC;AAAA,EACH,GAAG;AAAA,IACDtB;AAAA,IACAC;AAAA,IACAI;AAAA,IACAU;AAAA,IACAF;AAAA,IACAV;AAAA,IACAC;AAAA,EAAA,CACD;AAED,EAAAmB,EAAU,MAAM;AACd,IAAKH,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMI,IAAmBlB,KAA2B,CAACK,EAAkB,SACjEc,IAAenB,KAA2BK,EAAkB,SAC5De,IAAYF,KAAoBN;AAEtC,SAAO;AAAA,IACL,sBAAAE;AAAA,IACA,iBAAAZ;AAAA,IACA,aAAaS,GAAiB;AAAA,IAC9B,WAAAS;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBd,EAAkB;AAAA,EAAA;AAEtC;"}
@@ -2,4 +2,5 @@ import "./types/i18next.d.ts"
2
2
  export * as Company from './Company';
3
3
  export * as Contractor from './Contractor';
4
4
  export * as Employee from './Employee';
5
+ export * as InformationRequests from './InformationRequests';
5
6
  export * as Payroll from './Payroll';
@@ -11,8 +11,9 @@ import "classnames";
11
11
  import { InternalError as x } from "../../components/Common/InternalError/InternalError.js";
12
12
  import "../ComponentAdapter/useComponentContext.js";
13
13
  import { LocaleProvider as L } from "../LocaleProvider/LocaleProvider.js";
14
+ import "../LocaleProvider/useLocale.js";
14
15
  import { ThemeProvider as U } from "../ThemeProvider/ThemeProvider.js";
15
- const T = (a) => {
16
+ const z = (a) => {
16
17
  const {
17
18
  children: d,
18
19
  config: e,
@@ -51,6 +52,6 @@ const T = (a) => {
51
52
  ) }, n) }) }) }) }) });
52
53
  };
53
54
  export {
54
- T as GustoProviderCustomUIAdapter
55
+ z as GustoProviderCustomUIAdapter
55
56
  };
56
57
  //# sourceMappingURL=GustoProviderCustomUIAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GustoProviderCustomUIAdapter.js","sources":["../../../src/contexts/GustoProvider/GustoProviderCustomUIAdapter.tsx"],"sourcesContent":["import type React from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { I18nextProvider } from 'react-i18next'\nimport type { QueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { ComponentsProvider } from '../ComponentAdapter/ComponentsProvider'\nimport type { ComponentsContextType } from '../ComponentAdapter/useComponentContext'\nimport { ApiProvider } from '../ApiProvider/ApiProvider'\nimport { LoadingIndicatorProvider } from '../LoadingIndicatorProvider/LoadingIndicatorProvider'\nimport type { LoadingIndicatorContextProps } from '../LoadingIndicatorProvider/useLoadingIndicator'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { ResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\n\nexport interface APIConfig {\n baseUrl: string\n headers?: HeadersInit\n hooks?: SDKHooks\n}\n\nexport interface GustoProviderProps {\n config: APIConfig\n dictionary?: ResourceDictionary\n lng?: string\n locale?: string\n currency?: string\n theme?: GustoSDKTheme\n queryClient?: QueryClient\n components: ComponentsContextType\n LoaderComponent?: LoadingIndicatorContextProps['LoadingIndicator']\n}\n\nexport interface GustoProviderCustomUIAdapterProps extends GustoProviderProps {\n children?: React.ReactNode\n}\n\n/**\n * A provider that accepts UI component adapters through the components prop\n */\nconst GustoProviderCustomUIAdapter: React.FC<GustoProviderCustomUIAdapterProps> = props => {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n components,\n LoaderComponent,\n queryClient,\n } = props\n\n // Handle dictionary resources\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\n // Adding resources overrides to i18next instance - initial load will override common namespace and add component specific dictionaries provided by partners\n SDKI18next.addResourceBundle(\n lang,\n ns,\n (dictionary[lang] as Record<string, unknown>)[ns],\n true,\n true,\n )\n }\n }\n }\n\n // Handle language change\n useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\n return (\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ErrorBoundary FallbackComponent={InternalError}>\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={locale} currency={currency}>\n <I18nextProvider i18n={SDKI18next} key={lng}>\n <ApiProvider\n url={config.baseUrl}\n headers={config.headers}\n hooks={config.hooks}\n queryClient={queryClient}\n >\n {children}\n </ApiProvider>\n </I18nextProvider>\n </LocaleProvider>\n </ThemeProvider>\n </ErrorBoundary>\n </LoadingIndicatorProvider>\n </ComponentsProvider>\n )\n}\n\nexport { GustoProviderCustomUIAdapter }\n"],"names":["GustoProviderCustomUIAdapter","props","children","config","dictionary","lng","locale","currency","theme","components","LoaderComponent","queryClient","language","lang","ns","SDKI18next","useEffect","jsx","ComponentsProvider","LoadingIndicatorProvider","ErrorBoundary","InternalError","ThemeProvider","LocaleProvider","I18nextProvider","ApiProvider"],"mappings":";;;;;;;;;;;;;;AA2CA,MAAMA,IAA4E,CAAAC,MAAS;AACzF,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,KAAAC,IAAM;AAAA,IACN,QAAAC,IAAS;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEV;AAGJ,MAAIG;AACF,eAAWQ,KAAYR,GAAY;AACjC,YAAMS,IAAOD;AACb,iBAAWE,KAAMV,EAAWS,CAAI;AAE9B,QAAAE,EAAW;AAAA,UACTF;AAAA,UACAC;AAAA,UACCV,EAAWS,CAAI,EAA8BC,CAAE;AAAA,UAChD;AAAA,UACA;AAAA,QAAA;AAAA,IAGN;AAIF,SAAAE,EAAU,MAAM;AACd,KAAM,YACJ,MAAMD,EAAW,eAAeV,CAAG;AAAA,EAEvC,GAAG,CAACA,CAAG,CAAC,GAGN,gBAAAY,EAACC,KAAmB,OAAOT,GACzB,4BAACU,GAAA,EAAyB,OAAOT,GAC/B,UAAA,gBAAAO,EAACG,GAAA,EAAc,mBAAmBC,GAChC,UAAA,gBAAAJ,EAACK,GAAA,EAAc,OAAAd,GACb,UAAA,gBAAAS,EAACM,GAAA,EAAe,QAAAjB,GAAgB,UAAAC,GAC9B,UAAA,gBAAAU,EAACO,GAAA,EAAgB,MAAMT,GACrB,UAAA,gBAAAE;AAAA,IAACQ;AAAA,IAAA;AAAA,MACC,KAAKtB,EAAO;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,OAAOA,EAAO;AAAA,MACd,aAAAQ;AAAA,MAEC,UAAAT;AAAA,IAAA;AAAA,EAAA,KAPmCG,CASxC,EAAA,CACF,EAAA,CACF,EAAA,CACF,GACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"GustoProviderCustomUIAdapter.js","sources":["../../../src/contexts/GustoProvider/GustoProviderCustomUIAdapter.tsx"],"sourcesContent":["import type React from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport { I18nextProvider } from 'react-i18next'\nimport type { QueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { ComponentsProvider } from '../ComponentAdapter/ComponentsProvider'\nimport type { ComponentsContextType } from '../ComponentAdapter/useComponentContext'\nimport { ApiProvider } from '../ApiProvider/ApiProvider'\nimport { LoadingIndicatorProvider } from '../LoadingIndicatorProvider/LoadingIndicatorProvider'\nimport type { LoadingIndicatorContextProps } from '../LoadingIndicatorProvider/useLoadingIndicator'\nimport { SDKI18next } from './SDKI18next'\nimport { InternalError } from '@/components/Common'\nimport { LocaleProvider } from '@/contexts/LocaleProvider'\nimport { ThemeProvider } from '@/contexts/ThemeProvider'\nimport type { GustoSDKTheme } from '@/contexts/ThemeProvider/theme'\nimport type { ResourceDictionary, SupportedLanguages } from '@/types/Helpers'\nimport type { SDKHooks } from '@/types/hooks'\n\nexport interface APIConfig {\n baseUrl: string\n headers?: HeadersInit\n hooks?: SDKHooks\n}\n\nexport interface GustoProviderProps {\n config: APIConfig\n dictionary?: ResourceDictionary\n lng?: string\n locale?: string\n currency?: string\n theme?: GustoSDKTheme\n queryClient?: QueryClient\n components: ComponentsContextType\n LoaderComponent?: LoadingIndicatorContextProps['LoadingIndicator']\n}\n\nexport interface GustoProviderCustomUIAdapterProps extends GustoProviderProps {\n children?: React.ReactNode\n}\n\n/**\n * A provider that accepts UI component adapters through the components prop\n */\nconst GustoProviderCustomUIAdapter: React.FC<GustoProviderCustomUIAdapterProps> = props => {\n const {\n children,\n config,\n dictionary,\n lng = 'en',\n locale = 'en-US',\n currency = 'USD',\n theme,\n components,\n LoaderComponent,\n queryClient,\n } = props\n\n // Handle dictionary resources\n if (dictionary) {\n for (const language in dictionary) {\n const lang = language as SupportedLanguages\n for (const ns in dictionary[lang]) {\n // Adding resources overrides to i18next instance - initial load will override common namespace and add component specific dictionaries provided by partners\n SDKI18next.addResourceBundle(\n lang,\n ns,\n (dictionary[lang] as Record<string, unknown>)[ns],\n true,\n true,\n )\n }\n }\n }\n\n // Handle language change\n useEffect(() => {\n void (async () => {\n await SDKI18next.changeLanguage(lng)\n })()\n }, [lng])\n\n return (\n <ComponentsProvider value={components}>\n <LoadingIndicatorProvider value={LoaderComponent}>\n <ErrorBoundary FallbackComponent={InternalError}>\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={locale} currency={currency}>\n <I18nextProvider i18n={SDKI18next} key={lng}>\n <ApiProvider\n url={config.baseUrl}\n headers={config.headers}\n hooks={config.hooks}\n queryClient={queryClient}\n >\n {children}\n </ApiProvider>\n </I18nextProvider>\n </LocaleProvider>\n </ThemeProvider>\n </ErrorBoundary>\n </LoadingIndicatorProvider>\n </ComponentsProvider>\n )\n}\n\nexport { GustoProviderCustomUIAdapter }\n"],"names":["GustoProviderCustomUIAdapter","props","children","config","dictionary","lng","locale","currency","theme","components","LoaderComponent","queryClient","language","lang","ns","SDKI18next","useEffect","jsx","ComponentsProvider","LoadingIndicatorProvider","ErrorBoundary","InternalError","ThemeProvider","LocaleProvider","I18nextProvider","ApiProvider"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAMA,IAA4E,CAAAC,MAAS;AACzF,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,KAAAC,IAAM;AAAA,IACN,QAAAC,IAAS;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,IACEV;AAGJ,MAAIG;AACF,eAAWQ,KAAYR,GAAY;AACjC,YAAMS,IAAOD;AACb,iBAAWE,KAAMV,EAAWS,CAAI;AAE9B,QAAAE,EAAW;AAAA,UACTF;AAAA,UACAC;AAAA,UACCV,EAAWS,CAAI,EAA8BC,CAAE;AAAA,UAChD;AAAA,UACA;AAAA,QAAA;AAAA,IAGN;AAIF,SAAAE,EAAU,MAAM;AACd,KAAM,YACJ,MAAMD,EAAW,eAAeV,CAAG;AAAA,EAEvC,GAAG,CAACA,CAAG,CAAC,GAGN,gBAAAY,EAACC,KAAmB,OAAOT,GACzB,4BAACU,GAAA,EAAyB,OAAOT,GAC/B,UAAA,gBAAAO,EAACG,GAAA,EAAc,mBAAmBC,GAChC,UAAA,gBAAAJ,EAACK,GAAA,EAAc,OAAAd,GACb,UAAA,gBAAAS,EAACM,GAAA,EAAe,QAAAjB,GAAgB,UAAAC,GAC9B,UAAA,gBAAAU,EAACO,GAAA,EAAgB,MAAMT,GACrB,UAAA,gBAAAE;AAAA,IAACQ;AAAA,IAAA;AAAA,MACC,KAAKtB,EAAO;AAAA,MACZ,SAASA,EAAO;AAAA,MAChB,OAAOA,EAAO;AAAA,MACd,aAAAQ;AAAA,MAEC,UAAAT;AAAA,IAAA;AAAA,EAAA,KAPmCG,CASxC,EAAA,CACF,EAAA,CACF,EAAA,CACF,GACF,GACF;AAEJ;"}
@@ -22,7 +22,8 @@ declare const defaultThemeColors: {
22
22
  colorSuccess: string;
23
23
  colorSuccessAccent: string;
24
24
  colorSuccessContent: string;
25
- colorBorder: string;
25
+ colorBorderPrimary: string;
26
+ colorBorderSecondary: string;
26
27
  };
27
28
  export type GustoSDKThemeColors = Partial<typeof defaultThemeColors>;
28
29
  export declare const createTheme: (colors?: GustoSDKThemeColors) => {
@@ -45,7 +46,10 @@ export declare const createTheme: (colors?: GustoSDKThemeColors) => {
45
46
  bannerRadius: string;
46
47
  fontSizeRoot: string;
47
48
  fontFamily: string;
48
- fontLineHeight: string;
49
+ fontLineHeightLarge: string;
50
+ fontLineHeightRegular: string;
51
+ fontLineHeightSmall: string;
52
+ fontLineHeightExtraSmall: string;
49
53
  fontSizeExtraSmall: string;
50
54
  fontSizeSmall: string;
51
55
  fontSizeRegular: string;
@@ -87,7 +91,8 @@ export declare const createTheme: (colors?: GustoSDKThemeColors) => {
87
91
  colorSuccess: string;
88
92
  colorSuccessAccent: string;
89
93
  colorSuccessContent: string;
90
- colorBorder: string;
94
+ colorBorderPrimary: string;
95
+ colorBorderSecondary: string;
91
96
  };
92
97
  export type GustoSDKTheme = Partial<ReturnType<typeof createTheme>>;
93
98
  export declare const mergePartnerTheme: (partnerTheme: GustoSDKTheme) => GustoSDKTheme;
@@ -1,13 +1,14 @@
1
1
  import { toRem as n, getRootFontSize as l } from "../../helpers/rem.js";
2
2
  const o = {
3
3
  neutral: {
4
- 100: "#FFFFFF",
5
- 300: "#F4F4F3",
6
- 400: "#EAEAEA",
7
- 500: "#DCDCDC",
8
- 800: "#414651",
9
- 900: "#525257",
10
- 1e3: "#1C1C1C"
4
+ 25: "#FFFFFF",
5
+ 100: "#F5F5F5",
6
+ 200: "#E9EAEB",
7
+ 300: "#D5D7DA",
8
+ 600: "#535862",
9
+ 700: "#414651",
10
+ 900: "#181D27",
11
+ 1e3: "#0A0D12"
11
12
  },
12
13
  error: {
13
14
  100: "#FEF3F2",
@@ -30,16 +31,16 @@ const o = {
30
31
  800: "#1C1C1C"
31
32
  }
32
33
  }, u = 200, i = {
33
- colorBody: o.neutral[100],
34
- colorBodyAccent: o.neutral[300],
34
+ colorBody: o.neutral[25],
35
+ colorBodyAccent: o.neutral[100],
35
36
  colorBodyContent: o.neutral[1e3],
36
- colorBodySubContent: o.neutral[800],
37
+ colorBodySubContent: o.neutral[700],
37
38
  colorPrimary: o.neutral[1e3],
38
39
  colorPrimaryAccent: o.neutral[900],
39
40
  colorPrimaryContent: o.neutral[100],
40
- colorSecondary: o.neutral[100],
41
- colorSecondaryAccent: o.neutral[400],
42
- colorSecondaryContent: o.neutral[1e3],
41
+ colorSecondary: o.neutral[25],
42
+ colorSecondaryAccent: o.neutral[100],
43
+ colorSecondaryContent: o.neutral[600],
43
44
  colorInfo: o.info[100],
44
45
  colorInfoAccent: o.info[500],
45
46
  colorInfoContent: o.info[800],
@@ -52,14 +53,15 @@ const o = {
52
53
  colorSuccess: o.success[100],
53
54
  colorSuccessAccent: o.success[500],
54
55
  colorSuccessContent: o.success[800],
55
- colorBorder: o.neutral[400]
56
+ colorBorderPrimary: o.neutral[300],
57
+ colorBorderSecondary: o.neutral[200]
56
58
  }, d = (r = {}) => ({
57
59
  // Colors
58
60
  ...i,
59
61
  ...r,
60
62
  // Input Colors
61
63
  inputBackgroundColor: r.colorBody,
62
- inputBorderColor: o.neutral[500],
64
+ inputBorderColor: o.neutral[300],
63
65
  inputContentColor: r.colorBodyContent,
64
66
  inputBorderWidth: "1px",
65
67
  inputPlaceholderColor: r.colorBodySubContent,
@@ -79,8 +81,11 @@ const o = {
79
81
  bannerRadius: n(8),
80
82
  // Font
81
83
  fontSizeRoot: l(),
82
- fontFamily: "Geist",
83
- fontLineHeight: n(24),
84
+ fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
85
+ fontLineHeightLarge: n(28),
86
+ fontLineHeightRegular: n(24),
87
+ fontLineHeightSmall: n(20),
88
+ fontLineHeightExtraSmall: n(18),
84
89
  fontSizeExtraSmall: n(12),
85
90
  fontSizeSmall: n(14),
86
91
  fontSizeRegular: n(16),
@@ -103,19 +108,19 @@ const o = {
103
108
  // Focus
104
109
  focusRingColor: r.colorPrimary,
105
110
  focusRingWidth: "2px"
106
- }), g = (r) => {
107
- const c = Object.entries(i).reduce(
108
- (t, [e, a]) => (t[e] = r[e] || a, t),
111
+ }), C = (r) => {
112
+ const a = Object.entries(i).reduce(
113
+ (e, [t, c]) => (e[t] = r[t] || c, e),
109
114
  {}
110
115
  );
111
116
  return {
112
- ...d(c),
117
+ ...d(a),
113
118
  ...r
114
119
  };
115
120
  };
116
121
  export {
117
122
  d as createTheme,
118
- g as mergePartnerTheme,
123
+ C as mergePartnerTheme,
119
124
  u as transitionDuration
120
125
  };
121
126
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sources":["../../../src/contexts/ThemeProvider/theme.ts"],"sourcesContent":["import { getRootFontSize, toRem } from '@/helpers/rem'\n\n// Colors are for internal use in our theme currently\n// We don't export them for partner use or overrides\nconst baseColors = {\n neutral: {\n 100: '#FFFFFF',\n 200: '#FBFAFA',\n 300: '#F4F4F3',\n 400: '#EAEAEA',\n 500: '#DCDCDC',\n 600: '#BABABC',\n 700: '#919197',\n 800: '#414651',\n 900: '#525257',\n 1000: '#1C1C1C',\n },\n error: {\n 100: '#FEF3F2',\n 500: '#C5271C',\n 800: '#D92D20',\n },\n warning: {\n 100: '#FFFAF2',\n 500: '#E9B550',\n 700: '#B88023',\n 800: '#B88023',\n },\n success: {\n 100: '#F3FAFB',\n 400: '#2BABAD',\n 500: '#0A8080',\n 800: '#005961',\n },\n info: {\n 100: '#F4F4F3',\n 500: '#DCDCDC',\n 800: '#1C1C1C',\n },\n}\n\nexport const transitionDuration = 200\n\nconst defaultThemeColors = {\n colorBody: baseColors.neutral[100],\n colorBodyAccent: baseColors.neutral[300],\n colorBodyContent: baseColors.neutral[1000],\n colorBodySubContent: baseColors.neutral[800],\n colorPrimary: baseColors.neutral[1000],\n colorPrimaryAccent: baseColors.neutral[900],\n colorPrimaryContent: baseColors.neutral[100],\n colorSecondary: baseColors.neutral[100],\n colorSecondaryAccent: baseColors.neutral[400],\n colorSecondaryContent: baseColors.neutral[1000],\n colorInfo: baseColors.info[100],\n colorInfoAccent: baseColors.info[500],\n colorInfoContent: baseColors.info[800],\n colorWarning: baseColors.warning[100],\n colorWarningAccent: baseColors.warning[500],\n colorWarningContent: baseColors.warning[800],\n colorError: baseColors.error[100],\n colorErrorAccent: baseColors.error[500],\n colorErrorContent: baseColors.error[800],\n colorSuccess: baseColors.success[100],\n colorSuccessAccent: baseColors.success[500],\n colorSuccessContent: baseColors.success[800],\n colorBorder: baseColors.neutral[400],\n}\n\nexport type GustoSDKThemeColors = Partial<typeof defaultThemeColors>\n\nexport const createTheme = (colors: GustoSDKThemeColors = {}) => {\n return {\n // Colors\n ...defaultThemeColors,\n ...colors,\n // Input Colors\n inputBackgroundColor: colors.colorBody,\n inputBorderColor: baseColors.neutral[500],\n inputContentColor: colors.colorBodyContent,\n inputBorderWidth: '1px',\n inputPlaceholderColor: colors.colorBodySubContent,\n inputAdornmentColor: colors.colorBodySubContent,\n inputDisabledBackgroundColor: colors.colorBodyAccent,\n // Field Colors\n inputLabelColor: colors.colorBodyContent,\n inputLabelFontSize: toRem(16),\n inputLabelFontWeight: '500',\n inputDescriptionColor: colors.colorBodySubContent,\n inputErrorColor: colors.colorErrorAccent,\n // Radius\n inputRadius: toRem(8),\n buttonRadius: toRem(8),\n cardRadius: toRem(8),\n badgeRadius: toRem(6),\n bannerRadius: toRem(8),\n // Font\n fontSizeRoot: getRootFontSize(),\n fontFamily: 'Geist',\n fontLineHeight: toRem(24),\n fontSizeExtraSmall: toRem(12),\n fontSizeSmall: toRem(14),\n fontSizeRegular: toRem(16),\n fontSizeLarge: toRem(18),\n fontSizeHeading1: toRem(32),\n fontSizeHeading2: toRem(24),\n fontSizeHeading3: toRem(20),\n fontSizeHeading4: toRem(18),\n fontSizeHeading5: toRem(16),\n fontSizeHeading6: toRem(14),\n fontWeightRegular: '400',\n fontWeightMedium: '500',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n // Transitions\n transitionDuration: `${transitionDuration}ms`,\n // Shadows\n shadowResting: '0px 1px 2px 0px rgba(10, 13, 18, 0.05)',\n shadowTopmost:\n '0px 4px 6px 0px rgba(28, 28, 28, 0.05), 0px 10px 15px 0px rgba(28, 28, 28, 0.10)',\n // Focus\n focusRingColor: colors.colorPrimary,\n focusRingWidth: '2px',\n }\n}\n\nexport type GustoSDKTheme = Partial<ReturnType<typeof createTheme>>\n\nexport const mergePartnerTheme = (partnerTheme: GustoSDKTheme): GustoSDKTheme => {\n const colors = Object.entries(defaultThemeColors).reduce(\n (acc: GustoSDKThemeColors, [key, value]) => {\n acc[key as keyof typeof defaultThemeColors] =\n partnerTheme[key as keyof typeof defaultThemeColors] || value\n return acc\n },\n {},\n )\n\n const theme = createTheme(colors)\n\n return {\n ...theme,\n ...partnerTheme,\n }\n}\n"],"names":["baseColors","transitionDuration","defaultThemeColors","createTheme","colors","toRem","getRootFontSize","mergePartnerTheme","partnerTheme","acc","key","value"],"mappings":"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"}
1
+ {"version":3,"file":"theme.js","sources":["../../../src/contexts/ThemeProvider/theme.ts"],"sourcesContent":["import { getRootFontSize, toRem } from '@/helpers/rem'\n\n// Colors are for internal use in our theme currently\n// We don't export them for partner use or overrides\nconst baseColors = {\n neutral: {\n 25: '#FFFFFF',\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#E9EAEB',\n 300: '#D5D7DA',\n 400: '#A4A7AE',\n 500: '#717680',\n 600: '#535862',\n 700: '#414651',\n 800: '#252B37',\n 900: '#181D27',\n 1000: '#0A0D12',\n },\n error: {\n 100: '#FEF3F2',\n 500: '#C5271C',\n 800: '#D92D20',\n },\n warning: {\n 100: '#FFFAF2',\n 500: '#E9B550',\n 700: '#B88023',\n 800: '#B88023',\n },\n success: {\n 100: '#F3FAFB',\n 400: '#2BABAD',\n 500: '#0A8080',\n 800: '#005961',\n },\n info: {\n 100: '#F4F4F3',\n 500: '#DCDCDC',\n 800: '#1C1C1C',\n },\n}\n\nexport const transitionDuration = 200\n\nconst defaultThemeColors = {\n colorBody: baseColors.neutral[25],\n colorBodyAccent: baseColors.neutral[100],\n colorBodyContent: baseColors.neutral[1000],\n colorBodySubContent: baseColors.neutral[700],\n colorPrimary: baseColors.neutral[1000],\n colorPrimaryAccent: baseColors.neutral[900],\n colorPrimaryContent: baseColors.neutral[100],\n colorSecondary: baseColors.neutral[25],\n colorSecondaryAccent: baseColors.neutral[100],\n colorSecondaryContent: baseColors.neutral[600],\n colorInfo: baseColors.info[100],\n colorInfoAccent: baseColors.info[500],\n colorInfoContent: baseColors.info[800],\n colorWarning: baseColors.warning[100],\n colorWarningAccent: baseColors.warning[500],\n colorWarningContent: baseColors.warning[800],\n colorError: baseColors.error[100],\n colorErrorAccent: baseColors.error[500],\n colorErrorContent: baseColors.error[800],\n colorSuccess: baseColors.success[100],\n colorSuccessAccent: baseColors.success[500],\n colorSuccessContent: baseColors.success[800],\n colorBorderPrimary: baseColors.neutral[300],\n colorBorderSecondary: baseColors.neutral[200],\n}\n\nexport type GustoSDKThemeColors = Partial<typeof defaultThemeColors>\n\nexport const createTheme = (colors: GustoSDKThemeColors = {}) => {\n return {\n // Colors\n ...defaultThemeColors,\n ...colors,\n // Input Colors\n inputBackgroundColor: colors.colorBody,\n inputBorderColor: baseColors.neutral[300],\n inputContentColor: colors.colorBodyContent,\n inputBorderWidth: '1px',\n inputPlaceholderColor: colors.colorBodySubContent,\n inputAdornmentColor: colors.colorBodySubContent,\n inputDisabledBackgroundColor: colors.colorBodyAccent,\n // Field Colors\n inputLabelColor: colors.colorBodyContent,\n inputLabelFontSize: toRem(16),\n inputLabelFontWeight: '500',\n inputDescriptionColor: colors.colorBodySubContent,\n inputErrorColor: colors.colorErrorAccent,\n // Radius\n inputRadius: toRem(8),\n buttonRadius: toRem(8),\n cardRadius: toRem(8),\n badgeRadius: toRem(6),\n bannerRadius: toRem(8),\n // Font\n fontSizeRoot: getRootFontSize(),\n fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontLineHeightLarge: toRem(28),\n fontLineHeightRegular: toRem(24),\n fontLineHeightSmall: toRem(20),\n fontLineHeightExtraSmall: toRem(18),\n fontSizeExtraSmall: toRem(12),\n fontSizeSmall: toRem(14),\n fontSizeRegular: toRem(16),\n fontSizeLarge: toRem(18),\n fontSizeHeading1: toRem(32),\n fontSizeHeading2: toRem(24),\n fontSizeHeading3: toRem(20),\n fontSizeHeading4: toRem(18),\n fontSizeHeading5: toRem(16),\n fontSizeHeading6: toRem(14),\n fontWeightRegular: '400',\n fontWeightMedium: '500',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n // Transitions\n transitionDuration: `${transitionDuration}ms`,\n // Shadows\n shadowResting: '0px 1px 2px 0px rgba(10, 13, 18, 0.05)',\n shadowTopmost:\n '0px 4px 6px 0px rgba(28, 28, 28, 0.05), 0px 10px 15px 0px rgba(28, 28, 28, 0.10)',\n // Focus\n focusRingColor: colors.colorPrimary,\n focusRingWidth: '2px',\n }\n}\n\nexport type GustoSDKTheme = Partial<ReturnType<typeof createTheme>>\n\nexport const mergePartnerTheme = (partnerTheme: GustoSDKTheme): GustoSDKTheme => {\n const colors = Object.entries(defaultThemeColors).reduce(\n (acc: GustoSDKThemeColors, [key, value]) => {\n acc[key as keyof typeof defaultThemeColors] =\n partnerTheme[key as keyof typeof defaultThemeColors] || value\n return acc\n },\n {},\n )\n\n const theme = createTheme(colors)\n\n return {\n ...theme,\n ...partnerTheme,\n }\n}\n"],"names":["baseColors","transitionDuration","defaultThemeColors","createTheme","colors","toRem","getRootFontSize","mergePartnerTheme","partnerTheme","acc","key","value"],"mappings":"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"}
@@ -30,3 +30,6 @@ export declare const normalizeDateToLocal: (date: Date | null) => Date | null;
30
30
  export declare const MS_PER_HOUR: number;
31
31
  export declare const getHoursUntil: (deadline?: Date | string | null) => number | null;
32
32
  export declare const getDaysUntil: (deadline?: Date | string | null) => number | null;
33
+ export declare const isWeekend: (date: Date) => boolean;
34
+ export declare const addDays: (date: Date, days: number) => Date;
35
+ export declare const addBusinessDays: (startDate: Date, businessDays: number) => Date;
@@ -1 +1 @@
1
- {"version":3,"file":"dateFormatting.js","sources":["../../src/helpers/dateFormatting.ts"],"sourcesContent":["/**\n * Normalizes any date input (string, Date, or undefined) to a Date object.\n * Handles YYYY-MM-DD strings by parsing them in local timezone to avoid timezone issues.\n * Also handles ISO timestamp strings for compatibility.\n * Returns null for invalid inputs.\n */\nexport const normalizeToDate = (dateInput?: string | Date | null): Date | null => {\n if (!dateInput) return null\n\n if (typeof dateInput === 'string') {\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(dateInput)) {\n const parts = dateInput.split('-')\n if (parts.length !== 3) return null\n\n const numbers = parts.map(Number)\n const year = numbers[0]\n const month = numbers[1]\n const day = numbers[2]\n if (year === undefined || month === undefined || day === undefined) {\n return null\n }\n\n if (\n isNaN(year) ||\n isNaN(month) ||\n isNaN(day) ||\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > 31\n ) {\n return null\n }\n\n return new Date(year, month - 1, day)\n }\n\n const parsedDate = new Date(dateInput)\n return isNaN(parsedDate.getTime()) ? null : parsedDate\n }\n\n if (dateInput instanceof Date) {\n return isNaN(dateInput.getTime()) ? null : dateInput\n }\n\n return null\n}\n\n/**\n * Creates a date formatter function that handles both string and Date inputs.\n */\nconst createDateFormatter =\n (options: Intl.DateTimeFormatOptions) =>\n (dateInput?: string | Date | null, locale?: string): string => {\n const date = normalizeToDate(dateInput)\n if (!date) return ''\n return date.toLocaleDateString(locale, options)\n }\n\nexport const formatDateShortWithWeekday = createDateFormatter({\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n})\n\nexport const formatDateShortWithWeekdayAndYear = createDateFormatter({\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateShort = createDateFormatter({\n month: 'short',\n day: 'numeric',\n})\n\nexport const formatDateShortWithYear = createDateFormatter({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateLong = createDateFormatter({\n month: 'long',\n day: 'numeric',\n})\n\nexport const formatDateLongWithYear = createDateFormatter({\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateWithTime = (\n dateInput?: string | Date | null,\n locale?: string,\n): { time: string; date: string } => {\n const date = normalizeToDate(dateInput)\n if (!date) return { time: '', date: '' }\n\n const time = date.toLocaleTimeString(locale, {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n timeZoneName: 'short',\n })\n\n const dateString = date.toLocaleDateString(locale, {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })\n\n return { time, date: dateString }\n}\n\nexport const formatPayPeriod = (\n startDateInput?: string | Date | null,\n endDateInput?: string | Date | null,\n locale?: string,\n): { startDate: string; endDate: string } => {\n const startDate = normalizeToDate(startDateInput)\n const endDate = normalizeToDate(endDateInput)\n\n if (!startDate || !endDate) {\n return { startDate: '', endDate: '' }\n }\n\n const startFormatted = startDate.toLocaleDateString(locale, {\n month: 'long',\n day: 'numeric',\n })\n\n const endFormatted = endDate.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return { startDate: startFormatted, endDate: endFormatted }\n}\n\nexport const formatPayPeriodRange = (\n startDateInput?: string | Date | null,\n endDateInput?: string | Date | null,\n locale?: string,\n options?: { useShortMonth?: boolean },\n): string => {\n const startDate = normalizeToDate(startDateInput)\n const endDate = normalizeToDate(endDateInput)\n\n if (!startDate || !endDate) return ''\n\n const monthFormat = options?.useShortMonth ? 'short' : 'long'\n\n const startFormatted = startDate.toLocaleDateString(locale, {\n month: monthFormat,\n day: 'numeric',\n })\n\n const endFormatted = endDate.toLocaleDateString(locale, {\n month: monthFormat,\n day: 'numeric',\n year: 'numeric',\n })\n\n return `${startFormatted}–${endFormatted}`\n}\n\nexport const formatDateToStringDate = (date: Date): string | null => {\n if (isNaN(date.getTime())) {\n return null\n }\n return date.toISOString().split('T')[0] || null\n}\n\n/**\n * Normalizes Date to local midnight, handling timezone issues from any adapter.\n */\nexport const normalizeDateToLocal = (date: Date | null): Date | null => {\n if (!date || isNaN(date.getTime())) {\n return null\n }\n\n const isoString = date.toISOString()\n const [datePart] = isoString.split('T')\n if (!datePart) return null\n\n const parts = datePart.split('-')\n if (parts.length !== 3) return null\n const numbers = parts.map(Number)\n const year = numbers[0]!\n const month = numbers[1]!\n const day = numbers[2]!\n if (isNaN(year) || isNaN(month) || isNaN(day) || month < 1 || month > 12 || day < 1 || day > 31) {\n return null\n }\n\n return new Date(year, month - 1, day)\n}\n\nexport const MS_PER_HOUR = 1000 * 60 * 60\nconst MS_PER_DAY = MS_PER_HOUR * 24\n\nexport const getHoursUntil = (deadline?: Date | string | null): number | null => {\n const deadlineDate = normalizeToDate(deadline)\n if (!deadlineDate) return null\n\n const now = new Date()\n const timeDiffMs = deadlineDate.getTime() - now.getTime()\n return timeDiffMs / MS_PER_HOUR\n}\n\nexport const getDaysUntil = (deadline?: Date | string | null): number | null => {\n const deadlineDate = normalizeToDate(deadline)\n if (!deadlineDate) return null\n\n const now = new Date()\n const timeDiffMs = deadlineDate.getTime() - now.getTime()\n return timeDiffMs / MS_PER_DAY\n}\n"],"names":["normalizeToDate","dateInput","parts","numbers","year","month","day","parsedDate","createDateFormatter","options","locale","date","formatDateShortWithWeekday","formatDateShortWithWeekdayAndYear","formatDateShort","formatDateShortWithYear","formatDateLong","formatDateLongWithYear","formatDateWithTime","time","dateString","formatPayPeriod","startDateInput","endDateInput","startDate","endDate","startFormatted","endFormatted","formatPayPeriodRange","monthFormat","formatDateToStringDate","normalizeDateToLocal","isoString","datePart","MS_PER_HOUR","MS_PER_DAY","getHoursUntil","deadline","deadlineDate","now","getDaysUntil"],"mappings":"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"}
1
+ {"version":3,"file":"dateFormatting.js","sources":["../../src/helpers/dateFormatting.ts"],"sourcesContent":["/**\n * Normalizes any date input (string, Date, or undefined) to a Date object.\n * Handles YYYY-MM-DD strings by parsing them in local timezone to avoid timezone issues.\n * Also handles ISO timestamp strings for compatibility.\n * Returns null for invalid inputs.\n */\nexport const normalizeToDate = (dateInput?: string | Date | null): Date | null => {\n if (!dateInput) return null\n\n if (typeof dateInput === 'string') {\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(dateInput)) {\n const parts = dateInput.split('-')\n if (parts.length !== 3) return null\n\n const numbers = parts.map(Number)\n const year = numbers[0]\n const month = numbers[1]\n const day = numbers[2]\n if (year === undefined || month === undefined || day === undefined) {\n return null\n }\n\n if (\n isNaN(year) ||\n isNaN(month) ||\n isNaN(day) ||\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > 31\n ) {\n return null\n }\n\n return new Date(year, month - 1, day)\n }\n\n const parsedDate = new Date(dateInput)\n return isNaN(parsedDate.getTime()) ? null : parsedDate\n }\n\n if (dateInput instanceof Date) {\n return isNaN(dateInput.getTime()) ? null : dateInput\n }\n\n return null\n}\n\n/**\n * Creates a date formatter function that handles both string and Date inputs.\n */\nconst createDateFormatter =\n (options: Intl.DateTimeFormatOptions) =>\n (dateInput?: string | Date | null, locale?: string): string => {\n const date = normalizeToDate(dateInput)\n if (!date) return ''\n return date.toLocaleDateString(locale, options)\n }\n\nexport const formatDateShortWithWeekday = createDateFormatter({\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n})\n\nexport const formatDateShortWithWeekdayAndYear = createDateFormatter({\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateShort = createDateFormatter({\n month: 'short',\n day: 'numeric',\n})\n\nexport const formatDateShortWithYear = createDateFormatter({\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateLong = createDateFormatter({\n month: 'long',\n day: 'numeric',\n})\n\nexport const formatDateLongWithYear = createDateFormatter({\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n})\n\nexport const formatDateWithTime = (\n dateInput?: string | Date | null,\n locale?: string,\n): { time: string; date: string } => {\n const date = normalizeToDate(dateInput)\n if (!date) return { time: '', date: '' }\n\n const time = date.toLocaleTimeString(locale, {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n timeZoneName: 'short',\n })\n\n const dateString = date.toLocaleDateString(locale, {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n })\n\n return { time, date: dateString }\n}\n\nexport const formatPayPeriod = (\n startDateInput?: string | Date | null,\n endDateInput?: string | Date | null,\n locale?: string,\n): { startDate: string; endDate: string } => {\n const startDate = normalizeToDate(startDateInput)\n const endDate = normalizeToDate(endDateInput)\n\n if (!startDate || !endDate) {\n return { startDate: '', endDate: '' }\n }\n\n const startFormatted = startDate.toLocaleDateString(locale, {\n month: 'long',\n day: 'numeric',\n })\n\n const endFormatted = endDate.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return { startDate: startFormatted, endDate: endFormatted }\n}\n\nexport const formatPayPeriodRange = (\n startDateInput?: string | Date | null,\n endDateInput?: string | Date | null,\n locale?: string,\n options?: { useShortMonth?: boolean },\n): string => {\n const startDate = normalizeToDate(startDateInput)\n const endDate = normalizeToDate(endDateInput)\n\n if (!startDate || !endDate) return ''\n\n const monthFormat = options?.useShortMonth ? 'short' : 'long'\n\n const startFormatted = startDate.toLocaleDateString(locale, {\n month: monthFormat,\n day: 'numeric',\n })\n\n const endFormatted = endDate.toLocaleDateString(locale, {\n month: monthFormat,\n day: 'numeric',\n year: 'numeric',\n })\n\n return `${startFormatted}–${endFormatted}`\n}\n\nexport const formatDateToStringDate = (date: Date): string | null => {\n if (isNaN(date.getTime())) {\n return null\n }\n return date.toISOString().split('T')[0] || null\n}\n\n/**\n * Normalizes Date to local midnight, handling timezone issues from any adapter.\n */\nexport const normalizeDateToLocal = (date: Date | null): Date | null => {\n if (!date || isNaN(date.getTime())) {\n return null\n }\n\n const isoString = date.toISOString()\n const [datePart] = isoString.split('T')\n if (!datePart) return null\n\n const parts = datePart.split('-')\n if (parts.length !== 3) return null\n const numbers = parts.map(Number)\n const year = numbers[0]!\n const month = numbers[1]!\n const day = numbers[2]!\n if (isNaN(year) || isNaN(month) || isNaN(day) || month < 1 || month > 12 || day < 1 || day > 31) {\n return null\n }\n\n return new Date(year, month - 1, day)\n}\n\nexport const MS_PER_HOUR = 1000 * 60 * 60\nconst MS_PER_DAY = MS_PER_HOUR * 24\n\nexport const getHoursUntil = (deadline?: Date | string | null): number | null => {\n const deadlineDate = normalizeToDate(deadline)\n if (!deadlineDate) return null\n\n const now = new Date()\n const timeDiffMs = deadlineDate.getTime() - now.getTime()\n return timeDiffMs / MS_PER_HOUR\n}\n\nexport const getDaysUntil = (deadline?: Date | string | null): number | null => {\n const deadlineDate = normalizeToDate(deadline)\n if (!deadlineDate) return null\n\n const now = new Date()\n const timeDiffMs = deadlineDate.getTime() - now.getTime()\n return timeDiffMs / MS_PER_DAY\n}\n\nexport const isWeekend = (date: Date): boolean => {\n const day = date.getDay()\n return day === 0 || day === 6\n}\n\nexport const addDays = (date: Date, days: number): Date => {\n const result = new Date(date)\n result.setDate(result.getDate() + days)\n return result\n}\n\nexport const addBusinessDays = (startDate: Date, businessDays: number): Date => {\n let currentDate = new Date(startDate)\n currentDate.setHours(0, 0, 0, 0)\n let daysAdded = 0\n\n while (daysAdded < businessDays) {\n currentDate = addDays(currentDate, 1)\n if (!isWeekend(currentDate)) {\n daysAdded++\n }\n }\n\n return currentDate\n}\n"],"names":["normalizeToDate","dateInput","parts","numbers","year","month","day","parsedDate","createDateFormatter","options","locale","date","formatDateShortWithWeekday","formatDateShortWithWeekdayAndYear","formatDateShort","formatDateShortWithYear","formatDateLong","formatDateLongWithYear","formatDateWithTime","time","dateString","formatPayPeriod","startDateInput","endDateInput","startDate","endDate","startFormatted","endFormatted","formatPayPeriodRange","monthFormat","formatDateToStringDate","normalizeDateToLocal","isoString","datePart","MS_PER_HOUR","MS_PER_DAY","getHoursUntil","deadline","deadlineDate","now","getDaysUntil"],"mappings":"AAMO,MAAMA,IAAkB,CAACC,MAAkD;AAChF,MAAI,CAACA,EAAW,QAAO;AAEvB,MAAI,OAAOA,KAAc,UAAU;AACjC,QAAI,sBAAsB,KAAKA,CAAS,GAAG;AACzC,YAAMC,IAAQD,EAAU,MAAM,GAAG;AACjC,UAAIC,EAAM,WAAW,EAAG,QAAO;AAE/B,YAAMC,IAAUD,EAAM,IAAI,MAAM,GAC1BE,IAAOD,EAAQ,CAAC,GAChBE,IAAQF,EAAQ,CAAC,GACjBG,IAAMH,EAAQ,CAAC;AAKrB,aAJIC,MAAS,UAAaC,MAAU,UAAaC,MAAQ,UAKvD,MAAMF,CAAI,KACV,MAAMC,CAAK,KACX,MAAMC,CAAG,KACTD,IAAQ,KACRA,IAAQ,MACRC,IAAM,KACNA,IAAM,KAEC,OAGF,IAAI,KAAKF,GAAMC,IAAQ,GAAGC,CAAG;AAAA,IACtC;AAEA,UAAMC,IAAa,IAAI,KAAKN,CAAS;AACrC,WAAO,MAAMM,EAAW,QAAA,CAAS,IAAI,OAAOA;AAAA,EAC9C;AAEA,SAAIN,aAAqB,OAChB,MAAMA,EAAU,QAAA,CAAS,IAAI,OAAOA,IAGtC;AACT,GAKMO,IACJ,CAACC,MACD,CAACR,GAAkCS,MAA4B;AAC7D,QAAMC,IAAOX,EAAgBC,CAAS;AACtC,SAAKU,IACEA,EAAK,mBAAmBD,GAAQD,CAAO,IAD5B;AAEpB,GAEWG,IAA6BJ,EAAoB;AAAA,EAC5D,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AACP,CAAC,GAEYK,IAAoCL,EAAoB;AAAA,EACnE,SAAS;AAAA,EACT,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR,CAAC,GAEYM,IAAkBN,EAAoB;AAAA,EACjD,OAAO;AAAA,EACP,KAAK;AACP,CAAC,GAEYO,IAA0BP,EAAoB;AAAA,EACzD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR,CAAC,GAEYQ,IAAiBR,EAAoB;AAAA,EAChD,OAAO;AAAA,EACP,KAAK;AACP,CAAC,GAEYS,IAAyBT,EAAoB;AAAA,EACxD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR,CAAC,GAEYU,IAAqB,CAChCjB,GACAS,MACmC;AACnC,QAAMC,IAAOX,EAAgBC,CAAS;AACtC,MAAI,CAACU,EAAM,QAAO,EAAE,MAAM,IAAI,MAAM,GAAA;AAEpC,QAAMQ,IAAOR,EAAK,mBAAmBD,GAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,EAAA,CACf,GAEKU,IAAaT,EAAK,mBAAmBD,GAAQ;AAAA,IACjD,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,EAAA,CACN;AAED,SAAO,EAAE,MAAAS,GAAM,MAAMC,EAAA;AACvB,GAEaC,IAAkB,CAC7BC,GACAC,GACAb,MAC2C;AAC3C,QAAMc,IAAYxB,EAAgBsB,CAAc,GAC1CG,IAAUzB,EAAgBuB,CAAY;AAE5C,MAAI,CAACC,KAAa,CAACC;AACjB,WAAO,EAAE,WAAW,IAAI,SAAS,GAAA;AAGnC,QAAMC,IAAiBF,EAAU,mBAAmBd,GAAQ;AAAA,IAC1D,OAAO;AAAA,IACP,KAAK;AAAA,EAAA,CACN,GAEKiB,IAAeF,EAAQ,mBAAmBf,GAAQ;AAAA,IACtD,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA,CACP;AAED,SAAO,EAAE,WAAWgB,GAAgB,SAASC,EAAA;AAC/C,GAEaC,IAAuB,CAClCN,GACAC,GACAb,GACAD,MACW;AACX,QAAMe,IAAYxB,EAAgBsB,CAAc,GAC1CG,IAAUzB,EAAgBuB,CAAY;AAE5C,MAAI,CAACC,KAAa,CAACC,EAAS,QAAO;AAEnC,QAAMI,IAAcpB,GAAS,gBAAgB,UAAU,QAEjDiB,IAAiBF,EAAU,mBAAmBd,GAAQ;AAAA,IAC1D,OAAOmB;AAAA,IACP,KAAK;AAAA,EAAA,CACN,GAEKF,IAAeF,EAAQ,mBAAmBf,GAAQ;AAAA,IACtD,OAAOmB;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EAAA,CACP;AAED,SAAO,GAAGH,CAAc,IAAIC,CAAY;AAC1C,GAEaG,IAAyB,CAACnB,MACjC,MAAMA,EAAK,QAAA,CAAS,IACf,OAEFA,EAAK,cAAc,MAAM,GAAG,EAAE,CAAC,KAAK,MAMhCoB,IAAuB,CAACpB,MAAmC;AACtE,MAAI,CAACA,KAAQ,MAAMA,EAAK,QAAA,CAAS;AAC/B,WAAO;AAGT,QAAMqB,IAAYrB,EAAK,YAAA,GACjB,CAACsB,CAAQ,IAAID,EAAU,MAAM,GAAG;AACtC,MAAI,CAACC,EAAU,QAAO;AAEtB,QAAM/B,IAAQ+B,EAAS,MAAM,GAAG;AAChC,MAAI/B,EAAM,WAAW,EAAG,QAAO;AAC/B,QAAMC,IAAUD,EAAM,IAAI,MAAM,GAC1BE,IAAOD,EAAQ,CAAC,GAChBE,IAAQF,EAAQ,CAAC,GACjBG,IAAMH,EAAQ,CAAC;AACrB,SAAI,MAAMC,CAAI,KAAK,MAAMC,CAAK,KAAK,MAAMC,CAAG,KAAKD,IAAQ,KAAKA,IAAQ,MAAMC,IAAM,KAAKA,IAAM,KACpF,OAGF,IAAI,KAAKF,GAAMC,IAAQ,GAAGC,CAAG;AACtC,GAEa4B,IAAc,MAAO,KAAK,IACjCC,IAAaD,IAAc,IAEpBE,IAAgB,CAACC,MAAmD;AAC/E,QAAMC,IAAetC,EAAgBqC,CAAQ;AAC7C,MAAI,CAACC,EAAc,QAAO;AAE1B,QAAMC,wBAAU,KAAA;AAEhB,UADmBD,EAAa,QAAA,IAAYC,EAAI,QAAA,KAC5BL;AACtB,GAEaM,IAAe,CAACH,MAAmD;AAC9E,QAAMC,IAAetC,EAAgBqC,CAAQ;AAC7C,MAAI,CAACC,EAAc,QAAO;AAE1B,QAAMC,wBAAU,KAAA;AAEhB,UADmBD,EAAa,QAAA,IAAYC,EAAI,QAAA,KAC5BJ;AACtB;"}