@gusto/embedded-react-sdk 0.45.0 → 0.46.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/dist/components/Common/DataView/DataCards/DataCards.d.ts +2 -1
- package/dist/components/Common/DataView/DataCards/DataCards.js +14 -13
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.d.ts +2 -1
- package/dist/components/Common/DataView/DataTable/DataTable.js +51 -50
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/DataView/DataView.d.ts +1 -0
- package/dist/components/Common/DataView/DataView.js.map +1 -1
- package/dist/components/Common/DataView/useDataView.d.ts +8 -1
- package/dist/components/Common/DataView/useDataView.js +20 -17
- package/dist/components/Common/DataView/useDataView.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +20 -4
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +20 -4
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +22 -6
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +20 -4
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +20 -4
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/fields.js +4 -4
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +28 -12
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +23 -7
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +20 -4
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +20 -4
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +20 -4
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js +5 -5
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +20 -4
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +20 -4
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Contractor/Address/useAddress.js +22 -6
- package/dist/components/Contractor/Address/useAddress.js.map +1 -1
- package/dist/components/Contractor/Profile/useContractorProfile.js +52 -42
- package/dist/components/Contractor/Profile/useContractorProfile.js.map +1 -1
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.d.ts +9 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js +76 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js.map +1 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js +8 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.d.ts +11 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js +85 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.module.scss.js +8 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.module.scss.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/index.d.ts +3 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.d.ts +25 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js +81 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js +8 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js.map +1 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.d.ts +18 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js +171 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -0
- package/dist/components/Employee/Compensation/management/index.d.ts +6 -0
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.d.ts +6 -1
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js +67 -209
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.d.ts +18 -0
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js +169 -0
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js.map +1 -0
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.d.ts +16 -0
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js +36 -30
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.d.ts +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js +4 -4
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +212 -187
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/fields.js +6 -6
- package/dist/components/Employee/Compensation/shared/useJobForm/jobSchema.d.ts +8 -0
- package/dist/components/Employee/Compensation/shared/useJobForm/jobSchema.js +22 -17
- package/dist/components/Employee/Compensation/shared/useJobForm/jobSchema.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.d.ts +12 -2
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +115 -110
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
- package/dist/components/Employee/Dashboard/BasicDetailsView.d.ts +8 -3
- package/dist/components/Employee/Dashboard/BasicDetailsView.js +108 -84
- package/dist/components/Employee/Dashboard/BasicDetailsView.js.map +1 -1
- package/dist/components/Employee/Dashboard/Dashboard.d.ts +2 -0
- package/dist/components/Employee/Dashboard/Dashboard.js +86 -68
- package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
- package/dist/components/Employee/Dashboard/DashboardComponents.d.ts +8 -4
- package/dist/components/Employee/Dashboard/DashboardComponents.js +147 -93
- package/dist/components/Employee/Dashboard/DashboardComponents.js.map +1 -1
- package/dist/components/Employee/Dashboard/DocumentsView.js +18 -11
- package/dist/components/Employee/Dashboard/DocumentsView.js.map +1 -1
- package/dist/components/Employee/Dashboard/JobAndPayView.js +304 -264
- package/dist/components/Employee/Dashboard/JobAndPayView.js.map +1 -1
- package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js +10 -0
- package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js.map +1 -0
- package/dist/components/Employee/Dashboard/TaxesView.d.ts +7 -2
- package/dist/components/Employee/Dashboard/TaxesView.js +68 -54
- package/dist/components/Employee/Dashboard/TaxesView.js.map +1 -1
- package/dist/components/Employee/Dashboard/dashboardStateMachine.js +152 -142
- package/dist/components/Employee/Dashboard/dashboardStateMachine.js.map +1 -1
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.d.ts +6 -0
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js +13 -12
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js.map +1 -1
- package/dist/components/Employee/Dashboard/hooks/useEmployeeBasicDetails.d.ts +12 -5
- package/dist/components/Employee/Dashboard/hooks/useEmployeeBasicDetails.js +21 -21
- package/dist/components/Employee/Dashboard/hooks/useEmployeeBasicDetails.js.map +1 -1
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.d.ts +13 -3
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js +53 -55
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js.map +1 -1
- package/dist/components/Employee/Dashboard/hooks/useEmployeeForms.d.ts +10 -4
- package/dist/components/Employee/Dashboard/hooks/useEmployeeForms.js +10 -12
- package/dist/components/Employee/Dashboard/hooks/useEmployeeForms.js.map +1 -1
- package/dist/components/Employee/Dashboard/hooks/useEmployeeTaxes.d.ts +10 -3
- package/dist/components/Employee/Dashboard/hooks/useEmployeeTaxes.js +19 -14
- package/dist/components/Employee/Dashboard/hooks/useEmployeeTaxes.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/fields.js +8 -8
- package/dist/components/Employee/Deductions/shared/useDeductionForm/fields.js +4 -4
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +20 -4
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/fields.js +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js +37 -40
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js.map +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.d.ts +1 -2
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +64 -71
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.d.ts +2 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js +25 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.d.ts +13 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js +37 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.d.ts +6 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +69 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/index.d.ts +3 -0
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/fields.js +4 -4
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js +15 -12
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.d.ts +2 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +86 -83
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/fields.js +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js +4 -4
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/fields.js +8 -8
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/fields.js +5 -5
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/fields.js +4 -4
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldComponents.js +8 -8
- package/dist/components/Employee/Taxes/useTaxes.js +20 -4
- package/dist/components/Employee/Taxes/useTaxes.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js +14 -11
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.d.ts +2 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +92 -89
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/Employee/exports/employeeManagement.d.ts +2 -0
- package/dist/components/Employee/exports/employeeManagement.js +18 -16
- package/dist/components/Employee/exports/employeeManagement.js.map +1 -1
- package/dist/components/Employee/index.d.ts +2 -0
- package/dist/components/Employee/index.js +32 -30
- package/dist/components/Employee/index.js.map +1 -1
- package/dist/components/Flow/FlowHeader.js +34 -31
- package/dist/components/Flow/FlowHeader.js.map +1 -1
- package/dist/components/Flow/useFlow.d.ts +12 -0
- package/dist/components/Flow/useFlow.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +34 -26
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +36 -22
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyList.js +92 -69
- package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js +23 -23
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js.map +1 -1
- package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.js +52 -40
- package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js +73 -56
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js +58 -58
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js +91 -87
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormTypes.d.ts +2 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +91 -124
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +72 -87
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +1 -6
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +160 -220
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts +7 -3
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +77 -54
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.test.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js +12 -11
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js +177 -147
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.d.ts +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +38 -36
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTableTypes.d.ts +2 -0
- package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js +10 -10
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js +17 -15
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js.map +1 -1
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicyDetails.json.js +9 -9
- package/dist/i18n/en/Employee.Compensation.json.js +68 -56
- package/dist/i18n/en/Employee.Compensation.json.js.map +1 -1
- package/dist/i18n/en/Employee.Dashboard.json.js +26 -24
- package/dist/i18n/en/Employee.Dashboard.json.js.map +1 -1
- package/dist/i18n/en/Employee.DocumentManager.json.js +1 -1
- package/dist/i18n/en/Employee.HomeAddress.Management.json.js +12 -10
- package/dist/i18n/en/Employee.HomeAddress.Management.json.js.map +1 -1
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +32 -30
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
- package/dist/i18n/en/Employee.WorkAddress.Management.json.js +16 -14
- package/dist/i18n/en/Employee.WorkAddress.Management.json.js.map +1 -1
- package/dist/i18n/en/common.json.d.ts +21 -0
- package/dist/partner-hook-utils/form/fields/DatePickerHookField.js +33 -32
- package/dist/partner-hook-utils/form/fields/DatePickerHookField.js.map +1 -1
- package/dist/partner-hook-utils/types.d.ts +4 -0
- package/dist/shared/constants.d.ts +4 -0
- package/dist/shared/constants.js +20 -18
- package/dist/shared/constants.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/i18next.d.ts +45 -11
- package/docs/reference/endpoint-inventory.json +24 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.46.2](https://github.com/Gusto/embedded-react-sdk/compare/v0.46.0...v0.46.2) (2026-05-22)
|
|
4
|
+
|
|
5
|
+
### Features & Enhancements
|
|
6
|
+
|
|
7
|
+
- **compensation:** enforce effectiveDate floor via Zod schema with distinct error messages ([#1919](https://github.com/Gusto/embedded-react-sdk/issues/1919)) ([c1bfb2c](https://github.com/Gusto/embedded-react-sdk/commit/c1bfb2c796eb05d8ef70c75426dd80ad016b1e6c))
|
|
8
|
+
- **Dashboard:** fix pending compensation edit — route date field by job type ([#1909](https://github.com/Gusto/embedded-react-sdk/issues/1909)) ([362d94f](https://github.com/Gusto/embedded-react-sdk/commit/362d94f9d27e260f4492f1ea1241be31ceda8b04))
|
|
9
|
+
- **dashboard:** show Pending badge for future-dated compensations on job card and table ([#1897](https://github.com/Gusto/embedded-react-sdk/issues/1897)) ([41031b4](https://github.com/Gusto/embedded-react-sdk/commit/41031b48e45b4bf03ea69d0df51c6b59e29230f3))
|
|
10
|
+
- **Dashboard:** wire add-job and add-another-job compensation forms ([#1898](https://github.com/Gusto/embedded-react-sdk/issues/1898)) ([bd0ecff](https://github.com/Gusto/embedded-react-sdk/commit/bd0ecff3b3752b2ce6fd1780df55976f31d24cff))
|
|
11
|
+
- **SDK-517:** add EmployeeListFlow for management employee navigation ([#1921](https://github.com/Gusto/embedded-react-sdk/issues/1921)) ([3304000](https://github.com/Gusto/embedded-react-sdk/commit/330400023966c5b4b641f1d2a65b043acf6f123e))
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
- always show Create Policy button in page header ([#1905](https://github.com/Gusto/embedded-react-sdk/issues/1905)) ([962b8a4](https://github.com/Gusto/embedded-react-sdk/commit/962b8a4a88f31d087fd48e0c9a4b341c8c316b03))
|
|
16
|
+
- block switching between unlimited and accrual-based time off policy types ([#1900](https://github.com/Gusto/embedded-react-sdk/issues/1900)) ([b3e737b](https://github.com/Gusto/embedded-react-sdk/commit/b3e737b08a700fdb9426b7b33577fd98b69a6f8a))
|
|
17
|
+
- clarify policy deletion error when pending requests exist ([#1906](https://github.com/Gusto/embedded-react-sdk/issues/1906)) ([d4cdb8a](https://github.com/Gusto/embedded-react-sdk/commit/d4cdb8ac81cb23f9141a60e7b0d531c74b2d2693))
|
|
18
|
+
- close remove-employee modal on error and clear stale errors in balance modal ([#1899](https://github.com/Gusto/embedded-react-sdk/issues/1899)) ([0987443](https://github.com/Gusto/embedded-react-sdk/commit/0987443147881b074a2c224e150e0bbeaf364e21))
|
|
19
|
+
- **Dashboard:** show pending compensation changes including title ([#1908](https://github.com/Gusto/embedded-react-sdk/issues/1908)) ([420e8e3](https://github.com/Gusto/embedded-react-sdk/commit/420e8e3956a50aedc1fa039284b3594525368c8a))
|
|
20
|
+
- **Dashboard:** unblock paystub download — drop noopener and defer blob URL revoke ([#1915](https://github.com/Gusto/embedded-react-sdk/issues/1915)) ([507bb47](https://github.com/Gusto/embedded-react-sdk/commit/507bb47812d915c19fe5163746d9e05af15ff0c2))
|
|
21
|
+
- **Deductions:** await column header render before asserting in DeductionsList test ([#1910](https://github.com/Gusto/embedded-react-sdk/issues/1910)) ([3f005ad](https://github.com/Gusto/embedded-react-sdk/commit/3f005adb802af1b73b8e7c33b8a4d1756d823706))
|
|
22
|
+
- fall back to first job title when no primary job is flagged ([#1902](https://github.com/Gusto/embedded-react-sdk/issues/1902)) ([729dbdb](https://github.com/Gusto/embedded-react-sdk/commit/729dbdb214020fdaba0b94f6f4e6f729e4e11e70))
|
|
23
|
+
- hide assigned employees from time-off add list (SDK-894) ([#1843](https://github.com/Gusto/embedded-react-sdk/issues/1843)) ([acb6194](https://github.com/Gusto/embedded-react-sdk/commit/acb6194e164df578bd23e946b7ccb58c92080134)), closes [#1887](https://github.com/Gusto/embedded-react-sdk/issues/1887) [#1849](https://github.com/Gusto/embedded-react-sdk/issues/1849)
|
|
24
|
+
- preserve carry-over balances when adding employees to policy ([#1907](https://github.com/Gusto/embedded-react-sdk/issues/1907)) ([094a9fc](https://github.com/Gusto/embedded-react-sdk/commit/094a9fc587716efb09a4ec8ed42e4275eb060f9a))
|
|
25
|
+
- preserve date picker state when switching back from unlimited ([#1904](https://github.com/Gusto/embedded-react-sdk/issues/1904)) ([fa9e0b0](https://github.com/Gusto/embedded-react-sdk/commit/fa9e0b08cc978da58357a699ef38cf46ce152ac1))
|
|
26
|
+
- provide descriptive error when balance update exceeds policy max ([#1903](https://github.com/Gusto/embedded-react-sdk/issues/1903)) ([88af535](https://github.com/Gusto/embedded-react-sdk/commit/88af535ff68c613301f0afb0aa1db66889f08db9))
|
|
27
|
+
- route holiday Add Employees back button to policy detail ([#1918](https://github.com/Gusto/embedded-react-sdk/issues/1918)) ([1db88fd](https://github.com/Gusto/embedded-react-sdk/commit/1db88fd17f0d272f0aa45d179ddab166df7cd29a))
|
|
28
|
+
- use fresh compensation version from job PUT response in EditPendingCompensation ([#1920](https://github.com/Gusto/embedded-react-sdk/issues/1920)) ([9de8a5b](https://github.com/Gusto/embedded-react-sdk/commit/9de8a5bb403ecefbe585f62ea61f89209cd0186e))
|
|
29
|
+
|
|
30
|
+
### Chores & Maintenance
|
|
31
|
+
|
|
32
|
+
- release 0.46.1 ([#1916](https://github.com/Gusto/embedded-react-sdk/issues/1916)) ([3acabc3](https://github.com/Gusto/embedded-react-sdk/commit/3acabc3bcbae06c36fdd38a36bd6a675c7967c77))
|
|
33
|
+
|
|
34
|
+
## [0.46.1](https://github.com/Gusto/embedded-react-sdk/compare/v0.46.0...v0.46.1) (2026-05-22)
|
|
35
|
+
|
|
36
|
+
### Features & Enhancements
|
|
37
|
+
|
|
38
|
+
- Route the date field by job type when editing a pending compensation on the Employee Dashboard ([#1909](https://github.com/Gusto/embedded-react-sdk/issues/1909))
|
|
39
|
+
- Show a "Pending" badge on the Employee Dashboard job card and jobs table for compensations with a future effective date ([#1897](https://github.com/Gusto/embedded-react-sdk/issues/1897))
|
|
40
|
+
- Wire up the add-job and add-another-job compensation forms in the Employee Dashboard ([#1898](https://github.com/Gusto/embedded-react-sdk/issues/1898))
|
|
41
|
+
|
|
42
|
+
### Fixes
|
|
43
|
+
|
|
44
|
+
- Fix paystub download from the Employee Dashboard Job and Pay tab — the new tab no longer stays blank ([#1915](https://github.com/Gusto/embedded-react-sdk/issues/1915))
|
|
45
|
+
- Show the job title in pending compensation change alerts on the Employee Dashboard ([#1908](https://github.com/Gusto/embedded-react-sdk/issues/1908))
|
|
46
|
+
- Fall back to the first job's title when no primary job is flagged ([#1902](https://github.com/Gusto/embedded-react-sdk/issues/1902))
|
|
47
|
+
- Always show the Create Policy button in the time-off policy page header ([#1905](https://github.com/Gusto/embedded-react-sdk/issues/1905))
|
|
48
|
+
- Hide already-assigned employees from the time-off policy add-employees list ([#1843](https://github.com/Gusto/embedded-react-sdk/issues/1843))
|
|
49
|
+
- Preserve the date picker selection when switching the time-off policy balance back from unlimited ([#1904](https://github.com/Gusto/embedded-react-sdk/issues/1904))
|
|
50
|
+
- Show a descriptive error when a time-off balance update exceeds the policy maximum ([#1903](https://github.com/Gusto/embedded-react-sdk/issues/1903))
|
|
51
|
+
- Close the remove-employee modal on error and clear stale errors in the balance modal ([#1899](https://github.com/Gusto/embedded-react-sdk/issues/1899))
|
|
52
|
+
|
|
53
|
+
## [0.46.0](https://github.com/Gusto/embedded-react-sdk/compare/v0.45.0...v0.46.0) (2026-05-21)
|
|
54
|
+
|
|
55
|
+
### Features & Enhancements
|
|
56
|
+
|
|
57
|
+
- Add `EditCompensation` block for steady-state compensation edits from the Employee Dashboard ([#1861](https://github.com/Gusto/embedded-react-sdk/issues/1861))
|
|
58
|
+
|
|
59
|
+
### Fixes
|
|
60
|
+
|
|
61
|
+
- Fix React hydration error in the Employee Dashboard document viewer caused by the "download this document" link rendering as two nested `<a>` elements ([#1893](https://github.com/Gusto/embedded-react-sdk/issues/1893))
|
|
62
|
+
- Preserve the selected `DashboardFlow` tab when entering and leaving a sub-flow (Add bank account, Add deduction, Edit Federal/State taxes, View document); Cancel/Back now returns to the originating tab instead of resetting to Basic details ([#1893](https://github.com/Gusto/embedded-react-sdk/issues/1893))
|
|
63
|
+
- Show the compensation effective date instead of the hire date on the Employee Dashboard Job and Pay tab ([#1896](https://github.com/Gusto/embedded-react-sdk/issues/1896))
|
|
64
|
+
- Validate the time-off policy waiting period as an integer; reject decimal and non-numeric values ([#1863](https://github.com/Gusto/embedded-react-sdk/issues/1863))
|
|
65
|
+
- Replace Suspense-blocking queries on the Employee Dashboard with per-section skeleton states for faster perceived loading ([#1892](https://github.com/Gusto/embedded-react-sdk/issues/1892))
|
|
66
|
+
|
|
3
67
|
## [0.45.0](https://github.com/Gusto/embedded-react-sdk/compare/v0.44.2...v0.45.0) (2026-05-21)
|
|
4
68
|
|
|
5
69
|
### Features & Enhancements
|
|
@@ -8,9 +8,10 @@ export type DataCardsProps<T> = {
|
|
|
8
8
|
onSelect?: (item: T, checked: boolean) => void;
|
|
9
9
|
onSelectAll?: (checked: boolean, visibleData: T[]) => void;
|
|
10
10
|
getIsItemSelected?: (item: T) => boolean;
|
|
11
|
+
hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll'];
|
|
11
12
|
emptyState?: useDataViewPropReturn<T>['emptyState'];
|
|
12
13
|
footer?: useDataViewPropReturn<T>['footer'];
|
|
13
14
|
selectionMode?: SelectionMode;
|
|
14
15
|
isWithinBox?: TableProps['isWithinBox'];
|
|
15
16
|
};
|
|
16
|
-
export declare const DataCards: <T>({ label, data, columns, itemMenu, onSelect, onSelectAll, getIsItemSelected, emptyState, footer, selectionMode, isWithinBox, }: DataCardsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare const DataCards: <T>({ label, data, columns, itemMenu, onSelect, onSelectAll, getIsItemSelected, hideSelectAll, emptyState, footer, selectionMode, isWithinBox, }: DataCardsProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsxs as t, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { useId as
|
|
3
|
-
import
|
|
4
|
-
import { useTranslation as
|
|
2
|
+
import { useId as T } from "react";
|
|
3
|
+
import j from "classnames";
|
|
4
|
+
import { useTranslation as A } from "react-i18next";
|
|
5
5
|
import a from "./DataCards.module.scss.js";
|
|
6
|
-
import { useSelectionState as
|
|
6
|
+
import { useSelectionState as H } from "../useSelectionState.js";
|
|
7
7
|
import { Flex as N } from "../../Flex/Flex.js";
|
|
8
|
-
import { useComponentContext as
|
|
9
|
-
const
|
|
8
|
+
import { useComponentContext as V } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
9
|
+
const I = ({
|
|
10
10
|
label: x,
|
|
11
11
|
data: s,
|
|
12
12
|
columns: h,
|
|
@@ -14,18 +14,19 @@ const E = ({
|
|
|
14
14
|
onSelect: c,
|
|
15
15
|
onSelectAll: g,
|
|
16
16
|
getIsItemSelected: m,
|
|
17
|
+
hideSelectAll: w,
|
|
17
18
|
emptyState: f,
|
|
18
19
|
footer: v,
|
|
19
20
|
selectionMode: C = "multiple",
|
|
20
21
|
isWithinBox: d
|
|
21
22
|
}) => {
|
|
22
|
-
const o =
|
|
23
|
+
const o = V(), { t: u } = A("common"), L = T(), { allSelected: R } = H(s, m), D = (l, n) => {
|
|
23
24
|
if (!c) return;
|
|
24
25
|
const r = m?.(l) ?? !1;
|
|
25
26
|
return C === "single" ? /* @__PURE__ */ e(
|
|
26
27
|
o.Radio,
|
|
27
28
|
{
|
|
28
|
-
name:
|
|
29
|
+
name: L,
|
|
29
30
|
value: r,
|
|
30
31
|
onChange: () => {
|
|
31
32
|
c(l, !0);
|
|
@@ -45,11 +46,11 @@ const E = ({
|
|
|
45
46
|
}
|
|
46
47
|
);
|
|
47
48
|
};
|
|
48
|
-
return /* @__PURE__ */ t("div", { className:
|
|
49
|
-
c && m && C === "multiple" && s.length > 0 && /* @__PURE__ */ e("div", { className: a.selectAllRow, children: /* @__PURE__ */ e(
|
|
49
|
+
return /* @__PURE__ */ t("div", { className: j(a.root, d && a.withinBox), "data-testid": "data-cards", children: [
|
|
50
|
+
c && m && C === "multiple" && !w && s.length > 0 && /* @__PURE__ */ e("div", { className: a.selectAllRow, children: /* @__PURE__ */ e(
|
|
50
51
|
o.Checkbox,
|
|
51
52
|
{
|
|
52
|
-
value:
|
|
53
|
+
value: R,
|
|
53
54
|
onChange: (l) => g?.(l, s),
|
|
54
55
|
label: u("card.selectAllRowsLabel")
|
|
55
56
|
}
|
|
@@ -60,7 +61,7 @@ const E = ({
|
|
|
60
61
|
o.Card,
|
|
61
62
|
{
|
|
62
63
|
menu: p && p(l),
|
|
63
|
-
action:
|
|
64
|
+
action: D(l),
|
|
64
65
|
className: d ? a.flushCard : void 0,
|
|
65
66
|
children: h.map((r, i) => /* @__PURE__ */ t(N, { flexDirection: "column", gap: 0, children: [
|
|
66
67
|
r.title && /* @__PURE__ */ e("h5", { className: a.columnTitle, children: r.title }),
|
|
@@ -85,6 +86,6 @@ const E = ({
|
|
|
85
86
|
] });
|
|
86
87
|
};
|
|
87
88
|
export {
|
|
88
|
-
|
|
89
|
+
I as DataCards
|
|
89
90
|
};
|
|
90
91
|
//# sourceMappingURL=DataCards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataCards.js","sources":["../../../../../src/components/Common/DataView/DataCards/DataCards.tsx"],"sourcesContent":["import { useId } from 'react'\nimport cn from 'classnames'\nimport { useTranslation } from 'react-i18next'\nimport styles from './DataCards.module.scss'\nimport type { useDataViewPropReturn, SelectionMode } from '@/components/Common/DataView/useDataView'\nimport type { TableProps } from '@/components/Common/UI/Table/TableTypes'\nimport { useSelectionState } from '@/components/Common/DataView/useSelectionState'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\n\nexport type DataCardsProps<T> = {\n label: string\n columns: useDataViewPropReturn<T>['columns']\n data: useDataViewPropReturn<T>['data']\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: (item: T, checked: boolean) => void\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n emptyState?: useDataViewPropReturn<T>['emptyState']\n footer?: useDataViewPropReturn<T>['footer']\n selectionMode?: SelectionMode\n isWithinBox?: TableProps['isWithinBox']\n}\n\nexport const DataCards = <T,>({\n label,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n emptyState,\n footer,\n selectionMode = 'multiple',\n isWithinBox,\n}: DataCardsProps<T>) => {\n const Components = useComponentContext()\n const { t } = useTranslation('common')\n const radioGroupName = useId()\n const { allSelected } = useSelectionState(data, getIsItemSelected)\n\n const renderAction = (item: T, index: number) => {\n if (!onSelect) return undefined\n\n const isSelected = getIsItemSelected?.(item) ?? false\n\n if (selectionMode === 'single') {\n return (\n <Components.Radio\n name={radioGroupName}\n value={isSelected}\n onChange={() => {\n onSelect(item, true)\n }}\n label={t('card.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n return (\n <Components.Checkbox\n value={isSelected}\n onChange={(checked: boolean) => {\n onSelect(item, checked)\n }}\n label={t('card.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n return (\n <div className={cn(styles.root, isWithinBox && styles.withinBox)} data-testid=\"data-cards\">\n {onSelect
|
|
1
|
+
{"version":3,"file":"DataCards.js","sources":["../../../../../src/components/Common/DataView/DataCards/DataCards.tsx"],"sourcesContent":["import { useId } from 'react'\nimport cn from 'classnames'\nimport { useTranslation } from 'react-i18next'\nimport styles from './DataCards.module.scss'\nimport type { useDataViewPropReturn, SelectionMode } from '@/components/Common/DataView/useDataView'\nimport type { TableProps } from '@/components/Common/UI/Table/TableTypes'\nimport { useSelectionState } from '@/components/Common/DataView/useSelectionState'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\n\nexport type DataCardsProps<T> = {\n label: string\n columns: useDataViewPropReturn<T>['columns']\n data: useDataViewPropReturn<T>['data']\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: (item: T, checked: boolean) => void\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll']\n emptyState?: useDataViewPropReturn<T>['emptyState']\n footer?: useDataViewPropReturn<T>['footer']\n selectionMode?: SelectionMode\n isWithinBox?: TableProps['isWithinBox']\n}\n\nexport const DataCards = <T,>({\n label,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n hideSelectAll,\n emptyState,\n footer,\n selectionMode = 'multiple',\n isWithinBox,\n}: DataCardsProps<T>) => {\n const Components = useComponentContext()\n const { t } = useTranslation('common')\n const radioGroupName = useId()\n const { allSelected } = useSelectionState(data, getIsItemSelected)\n\n const renderAction = (item: T, index: number) => {\n if (!onSelect) return undefined\n\n const isSelected = getIsItemSelected?.(item) ?? false\n\n if (selectionMode === 'single') {\n return (\n <Components.Radio\n name={radioGroupName}\n value={isSelected}\n onChange={() => {\n onSelect(item, true)\n }}\n label={t('card.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n return (\n <Components.Checkbox\n value={isSelected}\n onChange={(checked: boolean) => {\n onSelect(item, checked)\n }}\n label={t('card.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n return (\n <div className={cn(styles.root, isWithinBox && styles.withinBox)} data-testid=\"data-cards\">\n {onSelect &&\n getIsItemSelected &&\n selectionMode === 'multiple' &&\n !hideSelectAll &&\n data.length > 0 && (\n <div className={styles.selectAllRow}>\n <Components.Checkbox\n value={allSelected}\n onChange={(checked: boolean) => onSelectAll?.(checked, data)}\n label={t('card.selectAllRowsLabel')}\n />\n </div>\n )}\n <div role=\"list\" aria-label={label}>\n {data.length === 0 && emptyState && (\n <div role=\"listitem\">\n <Components.Card className={isWithinBox ? styles.flushCard : undefined}>\n {emptyState()}\n </Components.Card>\n </div>\n )}\n {data.map((item, index) => (\n <div role=\"listitem\" key={index}>\n <Components.Card\n menu={itemMenu && itemMenu(item)}\n action={renderAction(item, index)}\n className={isWithinBox ? styles.flushCard : undefined}\n >\n {columns.map((column, colIndex) => (\n <Flex key={colIndex} flexDirection=\"column\" gap={0}>\n {column.title && <h5 className={styles.columnTitle}>{column.title}</h5>}\n <div className={styles.columnData}>\n {' '}\n {column.render ? column.render(item) : String(item[column.key as keyof T])}\n </div>\n </Flex>\n ))}\n </Components.Card>\n </div>\n ))}\n {footer && (\n <div role=\"listitem\">\n <Components.Card className={isWithinBox ? styles.flushCard : undefined}>\n {(() => {\n const footerContent = footer()\n\n return Object.entries(footerContent).map(([key, content]) => {\n const columnIndex = key.startsWith('column-')\n ? parseInt(key.replace('column-', ''), 10)\n : -1\n const columnTitle = columnIndex >= 0 ? columns[columnIndex]?.title : undefined\n\n return (\n <Flex key={key} flexDirection=\"column\" gap={0}>\n {columnTitle && <h5 className={styles.columnTitle}>{columnTitle}</h5>}\n <div className={styles.footerItem}>{content}</div>\n </Flex>\n )\n })\n })()}\n </Components.Card>\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"names":["DataCards","label","data","columns","itemMenu","onSelect","onSelectAll","getIsItemSelected","hideSelectAll","emptyState","footer","selectionMode","isWithinBox","Components","useComponentContext","t","useTranslation","radioGroupName","useId","allSelected","useSelectionState","renderAction","item","index","isSelected","jsx","checked","jsxs","cn","styles","column","colIndex","Flex","footerContent","key","content","columnIndex","columnTitle"],"mappings":";;;;;;;;AAyBO,MAAMA,IAAY,CAAK;AAAA,EAC5B,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,aAAAC;AACF,MAAyB;AACvB,QAAMC,IAAaC,EAAA,GACb,EAAE,GAAAC,EAAA,IAAMC,EAAe,QAAQ,GAC/BC,IAAiBC,EAAA,GACjB,EAAE,aAAAC,EAAA,IAAgBC,EAAkBlB,GAAMK,CAAiB,GAE3Dc,IAAe,CAACC,GAASC,MAAkB;AAC/C,QAAI,CAAClB,EAAU;AAEf,UAAMmB,IAAajB,IAAoBe,CAAI,KAAK;AAEhD,WAAIX,MAAkB,WAElB,gBAAAc;AAAA,MAACZ,EAAW;AAAA,MAAX;AAAA,QACC,MAAMI;AAAA,QACN,OAAOO;AAAA,QACP,UAAU,MAAM;AACd,UAAAnB,EAASiB,GAAM,EAAI;AAAA,QACrB;AAAA,QACA,OAAOP,EAAE,qBAAqB;AAAA,QAC9B,yBAAuB;AAAA,MAAA;AAAA,IAAA,IAM3B,gBAAAU;AAAA,MAACZ,EAAW;AAAA,MAAX;AAAA,QACC,OAAOW;AAAA,QACP,UAAU,CAACE,MAAqB;AAC9B,UAAArB,EAASiB,GAAMI,CAAO;AAAA,QACxB;AAAA,QACA,OAAOX,EAAE,qBAAqB;AAAA,QAC9B,yBAAuB;AAAA,MAAA;AAAA,IAAA;AAAA,EAG7B;AAEA,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAGC,EAAO,MAAMjB,KAAeiB,EAAO,SAAS,GAAG,eAAY,cAC3E,UAAA;AAAA,IAAAxB,KACCE,KACAI,MAAkB,cAClB,CAACH,KACDN,EAAK,SAAS,KACZ,gBAAAuB,EAAC,OAAA,EAAI,WAAWI,EAAO,cACrB,UAAA,gBAAAJ;AAAA,MAACZ,EAAW;AAAA,MAAX;AAAA,QACC,OAAOM;AAAA,QACP,UAAU,CAACO,MAAqBpB,IAAcoB,GAASxB,CAAI;AAAA,QAC3D,OAAOa,EAAE,yBAAyB;AAAA,MAAA;AAAA,IAAA,GAEtC;AAAA,IAEJ,gBAAAY,EAAC,OAAA,EAAI,MAAK,QAAO,cAAY1B,GAC1B,UAAA;AAAA,MAAAC,EAAK,WAAW,KAAKO,uBACnB,OAAA,EAAI,MAAK,YACR,UAAA,gBAAAgB,EAACZ,EAAW,MAAX,EAAgB,WAAWD,IAAciB,EAAO,YAAY,QAC1D,UAAApB,KACH,GACF;AAAA,MAEDP,EAAK,IAAI,CAACoB,GAAMC,MACf,gBAAAE,EAAC,OAAA,EAAI,MAAK,YACR,UAAA,gBAAAA;AAAA,QAACZ,EAAW;AAAA,QAAX;AAAA,UACC,MAAMT,KAAYA,EAASkB,CAAI;AAAA,UAC/B,QAAQD,EAAaC,CAAW;AAAA,UAChC,WAAWV,IAAciB,EAAO,YAAY;AAAA,UAE3C,UAAA1B,EAAQ,IAAI,CAAC2B,GAAQC,wBACnBC,GAAA,EAAoB,eAAc,UAAS,KAAK,GAC9C,UAAA;AAAA,YAAAF,EAAO,SAAS,gBAAAL,EAAC,MAAA,EAAG,WAAWI,EAAO,aAAc,YAAO,MAAA,CAAM;AAAA,YAClE,gBAAAF,EAAC,OAAA,EAAI,WAAWE,EAAO,YACpB,UAAA;AAAA,cAAA;AAAA,cACAC,EAAO,SAASA,EAAO,OAAOR,CAAI,IAAI,OAAOA,EAAKQ,EAAO,GAAc,CAAC;AAAA,YAAA,EAAA,CAC3E;AAAA,UAAA,EAAA,GALSC,CAMX,CACD;AAAA,QAAA;AAAA,MAAA,EACH,GAfwBR,CAgB1B,CACD;AAAA,MACAb,KACC,gBAAAe,EAAC,OAAA,EAAI,MAAK,YACR,UAAA,gBAAAA,EAACZ,EAAW,MAAX,EAAgB,WAAWD,IAAciB,EAAO,YAAY,QACzD,WAAA,MAAM;AACN,cAAMI,IAAgBvB,EAAA;AAEtB,eAAO,OAAO,QAAQuB,CAAa,EAAE,IAAI,CAAC,CAACC,GAAKC,CAAO,MAAM;AAC3D,gBAAMC,IAAcF,EAAI,WAAW,SAAS,IACxC,SAASA,EAAI,QAAQ,WAAW,EAAE,GAAG,EAAE,IACvC,IACEG,IAAcD,KAAe,IAAIjC,EAAQiC,CAAW,GAAG,QAAQ;AAErE,iBACE,gBAAAT,EAACK,GAAA,EAAe,eAAc,UAAS,KAAK,GACzC,UAAA;AAAA,YAAAK,KAAe,gBAAAZ,EAAC,MAAA,EAAG,WAAWI,EAAO,aAAc,UAAAQ,GAAY;AAAA,YAChE,gBAAAZ,EAAC,OAAA,EAAI,WAAWI,EAAO,YAAa,UAAAM,EAAA,CAAQ;AAAA,UAAA,EAAA,GAFnCD,CAGX;AAAA,QAEJ,CAAC;AAAA,MACH,GAAA,GACF,EAAA,CACF;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -8,9 +8,10 @@ export type DataTableProps<T> = {
|
|
|
8
8
|
onSelect?: useDataViewPropReturn<T>['onSelect'];
|
|
9
9
|
onSelectAll?: (checked: boolean, visibleData: T[]) => void;
|
|
10
10
|
getIsItemSelected?: (item: T) => boolean;
|
|
11
|
+
hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll'];
|
|
11
12
|
emptyState?: useDataViewPropReturn<T>['emptyState'];
|
|
12
13
|
footer?: useDataViewPropReturn<T>['footer'];
|
|
13
14
|
isWithinBox?: TableProps['isWithinBox'];
|
|
14
15
|
selectionMode?: SelectionMode;
|
|
15
16
|
};
|
|
16
|
-
export declare const DataTable: <T>({ label, data, columns, itemMenu, onSelect, onSelectAll, getIsItemSelected, emptyState, footer, isWithinBox, selectionMode, }: DataTableProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare const DataTable: <T>({ label, data, columns, itemMenu, onSelect, onSelectAll, getIsItemSelected, hideSelectAll, emptyState, footer, isWithinBox, selectionMode, }: DataTableProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import { useId as
|
|
3
|
-
import { useTranslation as
|
|
4
|
-
import { useSelectionState as
|
|
5
|
-
import { useComponentContext as
|
|
6
|
-
import { VisuallyHidden as
|
|
7
|
-
function
|
|
8
|
-
if (
|
|
9
|
-
return
|
|
10
|
-
if (
|
|
11
|
-
const s =
|
|
2
|
+
import { useId as V, useState as T } from "react";
|
|
3
|
+
import { useTranslation as F } from "react-i18next";
|
|
4
|
+
import { useSelectionState as S } from "../useSelectionState.js";
|
|
5
|
+
import { useComponentContext as j } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
6
|
+
import { VisuallyHidden as k } from "../../VisuallyHidden/VisuallyHidden.js";
|
|
7
|
+
function A(c, o) {
|
|
8
|
+
if (o.render)
|
|
9
|
+
return o.render(c);
|
|
10
|
+
if (o.key) {
|
|
11
|
+
const s = o.key;
|
|
12
12
|
return String(c[s] ?? "");
|
|
13
13
|
}
|
|
14
14
|
return "";
|
|
15
15
|
}
|
|
16
|
-
const
|
|
16
|
+
const J = ({
|
|
17
17
|
label: c,
|
|
18
|
-
data:
|
|
18
|
+
data: o,
|
|
19
19
|
columns: s,
|
|
20
|
-
itemMenu:
|
|
20
|
+
itemMenu: u,
|
|
21
21
|
onSelect: r,
|
|
22
22
|
onSelectAll: C,
|
|
23
|
-
getIsItemSelected:
|
|
23
|
+
getIsItemSelected: d,
|
|
24
|
+
hideSelectAll: g,
|
|
24
25
|
emptyState: f,
|
|
25
26
|
footer: b,
|
|
26
|
-
isWithinBox:
|
|
27
|
-
selectionMode:
|
|
27
|
+
isWithinBox: R,
|
|
28
|
+
selectionMode: h = "multiple"
|
|
28
29
|
}) => {
|
|
29
|
-
const p =
|
|
30
|
+
const p = j(), { t: i } = F("common"), D = V(), [$, m] = T(null), { allSelected: H } = S(o, d), L = [
|
|
30
31
|
...r ? [
|
|
31
32
|
{
|
|
32
33
|
key: "select-header",
|
|
33
|
-
content:
|
|
34
|
+
content: h === "multiple" && d && !g && o.length > 0 ? (
|
|
34
35
|
// Stop propagation so the surrounding react-aria-components
|
|
35
36
|
// <Column> press handler doesn't intercept the checkbox click
|
|
36
37
|
// and desync the controlled DOM state. The inner <input> is
|
|
@@ -52,73 +53,73 @@ const B = ({
|
|
|
52
53
|
children: /* @__PURE__ */ a(
|
|
53
54
|
p.Checkbox,
|
|
54
55
|
{
|
|
55
|
-
value:
|
|
56
|
-
onChange: (e) => C?.(e,
|
|
56
|
+
value: H,
|
|
57
|
+
onChange: (e) => C?.(e, o),
|
|
57
58
|
label: i("table.selectAllRowsLabel"),
|
|
58
59
|
shouldVisuallyHideLabel: !0
|
|
59
60
|
}
|
|
60
61
|
)
|
|
61
62
|
}
|
|
62
63
|
)
|
|
63
|
-
) : /* @__PURE__ */ a(
|
|
64
|
+
) : /* @__PURE__ */ a(k, { children: i("table.selectRowHeader") })
|
|
64
65
|
}
|
|
65
66
|
] : [],
|
|
66
67
|
...s.map((e, t) => ({
|
|
67
68
|
key: typeof e.key == "string" ? e.key : `header-${t}`,
|
|
68
69
|
content: e.title
|
|
69
70
|
})),
|
|
70
|
-
...
|
|
71
|
+
...u ? [
|
|
71
72
|
{
|
|
72
73
|
key: "actions-header",
|
|
73
|
-
content: /* @__PURE__ */ a(
|
|
74
|
+
content: /* @__PURE__ */ a(k, { children: i("table.actionsColumnHeader") })
|
|
74
75
|
}
|
|
75
76
|
] : []
|
|
76
|
-
],
|
|
77
|
-
|
|
78
|
-
},
|
|
79
|
-
if (
|
|
80
|
-
const
|
|
77
|
+
], v = (e, t) => {
|
|
78
|
+
m(t), r?.(e, !0);
|
|
79
|
+
}, w = (e, t) => {
|
|
80
|
+
if (h === "single") {
|
|
81
|
+
const n = d?.(e) ?? $ === t;
|
|
81
82
|
return /* @__PURE__ */ a(
|
|
82
83
|
p.Radio,
|
|
83
84
|
{
|
|
84
|
-
name:
|
|
85
|
-
value:
|
|
85
|
+
name: D,
|
|
86
|
+
value: n,
|
|
86
87
|
onChange: () => {
|
|
87
|
-
|
|
88
|
+
v(e, t);
|
|
88
89
|
},
|
|
89
90
|
label: i("table.selectRowLabel"),
|
|
90
91
|
shouldVisuallyHideLabel: !0
|
|
91
92
|
}
|
|
92
93
|
);
|
|
93
94
|
}
|
|
94
|
-
const l =
|
|
95
|
+
const l = d?.(e) ?? !1;
|
|
95
96
|
return /* @__PURE__ */ a(
|
|
96
97
|
p.Checkbox,
|
|
97
98
|
{
|
|
98
99
|
value: l,
|
|
99
|
-
onChange: (
|
|
100
|
-
r?.(e,
|
|
100
|
+
onChange: (n) => {
|
|
101
|
+
r?.(e, n);
|
|
101
102
|
},
|
|
102
103
|
label: i("table.selectRowLabel"),
|
|
103
104
|
shouldVisuallyHideLabel: !0
|
|
104
105
|
}
|
|
105
106
|
);
|
|
106
|
-
},
|
|
107
|
+
}, x = o.map((e, t) => {
|
|
107
108
|
const l = [
|
|
108
109
|
...r ? [
|
|
109
110
|
{
|
|
110
111
|
key: `select-${t}`,
|
|
111
|
-
content:
|
|
112
|
+
content: w(e, t)
|
|
112
113
|
}
|
|
113
114
|
] : [],
|
|
114
|
-
...s.map((
|
|
115
|
-
key: typeof
|
|
116
|
-
content:
|
|
115
|
+
...s.map((n, y) => ({
|
|
116
|
+
key: typeof n.key == "string" ? n.key : `cell-${y}`,
|
|
117
|
+
content: A(e, n)
|
|
117
118
|
})),
|
|
118
|
-
...
|
|
119
|
+
...u ? [
|
|
119
120
|
{
|
|
120
121
|
key: `menu-${t}`,
|
|
121
|
-
content:
|
|
122
|
+
content: u(e)
|
|
122
123
|
}
|
|
123
124
|
] : []
|
|
124
125
|
];
|
|
@@ -126,19 +127,19 @@ const B = ({
|
|
|
126
127
|
key: `row-${t}`,
|
|
127
128
|
data: l
|
|
128
129
|
};
|
|
129
|
-
}),
|
|
130
|
+
}), P = (() => {
|
|
130
131
|
if (!b) return;
|
|
131
132
|
const e = b(), t = [];
|
|
132
133
|
return r && t.push({
|
|
133
134
|
key: "footer-select",
|
|
134
135
|
content: ""
|
|
135
|
-
}), s.forEach((l,
|
|
136
|
-
const y = typeof l.key == "string" ? l.key : `column-${
|
|
136
|
+
}), s.forEach((l, n) => {
|
|
137
|
+
const y = typeof l.key == "string" ? l.key : `column-${n}`;
|
|
137
138
|
t.push({
|
|
138
139
|
key: `footer-${y}`,
|
|
139
140
|
content: e[y] || ""
|
|
140
141
|
});
|
|
141
|
-
}),
|
|
142
|
+
}), u && t.push({
|
|
142
143
|
key: "footer-actions",
|
|
143
144
|
content: ""
|
|
144
145
|
}), t;
|
|
@@ -148,16 +149,16 @@ const B = ({
|
|
|
148
149
|
{
|
|
149
150
|
"aria-label": c,
|
|
150
151
|
"data-testid": "data-table",
|
|
151
|
-
headers:
|
|
152
|
-
rows:
|
|
153
|
-
footer:
|
|
152
|
+
headers: L,
|
|
153
|
+
rows: x,
|
|
154
|
+
footer: P,
|
|
154
155
|
emptyState: f ? f() : void 0,
|
|
155
|
-
isWithinBox:
|
|
156
|
+
isWithinBox: R,
|
|
156
157
|
hasCheckboxColumn: !!r
|
|
157
158
|
}
|
|
158
159
|
);
|
|
159
160
|
};
|
|
160
161
|
export {
|
|
161
|
-
|
|
162
|
+
J as DataTable
|
|
162
163
|
};
|
|
163
164
|
//# sourceMappingURL=DataTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sources":["../../../../../src/components/Common/DataView/DataTable/DataTable.tsx"],"sourcesContent":["import { useId, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { useDataViewPropReturn, SelectionMode } from '../useDataView'\nimport { useSelectionState } from '../useSelectionState'\nimport type { TableData, TableRow, TableProps } from '../../UI/Table/TableTypes'\nimport { VisuallyHidden } from '../../VisuallyHidden'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\n\nexport type DataTableProps<T> = {\n label: string\n columns: useDataViewPropReturn<T>['columns']\n data: useDataViewPropReturn<T>['data']\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: useDataViewPropReturn<T>['onSelect']\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n emptyState?: useDataViewPropReturn<T>['emptyState']\n footer?: useDataViewPropReturn<T>['footer']\n isWithinBox?: TableProps['isWithinBox']\n selectionMode?: SelectionMode\n}\n\nfunction getCellContent<T>(\n item: T,\n column: { key?: string | keyof T; render?: (item: T) => React.ReactNode },\n) {\n if (column.render) {\n return column.render(item)\n }\n\n if (column.key) {\n const key = column.key as keyof T\n return String(item[key] ?? '')\n }\n\n return ''\n}\n\nexport const DataTable = <T,>({\n label,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n emptyState,\n footer,\n isWithinBox,\n selectionMode = 'multiple',\n}: DataTableProps<T>) => {\n const Components = useComponentContext()\n const { t } = useTranslation('common')\n const radioGroupName = useId()\n const [selectedRadioIndex, setSelectedRadioIndex] = useState<number | null>(null)\n const { allSelected } = useSelectionState(data, getIsItemSelected)\n\n const headers: TableData[] = [\n ...(onSelect\n ? [\n {\n key: 'select-header',\n content:\n selectionMode === 'multiple' && getIsItemSelected ? (\n // Stop propagation so the surrounding react-aria-components\n // <Column> press handler doesn't intercept the checkbox click\n // and desync the controlled DOM state. The inner <input> is\n // the actual interactive element; this span is a propagation\n // shield, not a click target itself.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span\n onClick={e => {\n e.stopPropagation()\n }}\n onPointerDown={e => {\n e.stopPropagation()\n }}\n onMouseDown={e => {\n e.stopPropagation()\n }}\n >\n <Components.Checkbox\n value={allSelected}\n onChange={(checked: boolean) => onSelectAll?.(checked, data)}\n label={t('table.selectAllRowsLabel')}\n shouldVisuallyHideLabel\n />\n </span>\n ) : (\n <VisuallyHidden>{t('table.selectRowHeader')}</VisuallyHidden>\n ),\n },\n ]\n : []),\n ...columns.map((column, index) => ({\n key: typeof column.key === 'string' ? column.key : `header-${index}`,\n content: column.title,\n })),\n ...(itemMenu\n ? [\n {\n key: 'actions-header',\n content: <VisuallyHidden>{t('table.actionsColumnHeader')}</VisuallyHidden>,\n },\n ]\n : []),\n ]\n\n const handleRadioSelect = (item: T, rowIndex: number) => {\n setSelectedRadioIndex(rowIndex)\n onSelect?.(item, true)\n }\n\n const renderSelectionControl = (item: T, rowIndex: number) => {\n if (selectionMode === 'single') {\n const isSelected = getIsItemSelected?.(item) ?? selectedRadioIndex === rowIndex\n return (\n <Components.Radio\n name={radioGroupName}\n value={isSelected}\n onChange={() => {\n handleRadioSelect(item, rowIndex)\n }}\n label={t('table.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n const isSelected = getIsItemSelected?.(item) ?? false\n return (\n <Components.Checkbox\n value={isSelected}\n onChange={(checked: boolean) => {\n onSelect?.(item, checked)\n }}\n label={t('table.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n const rows: TableRow[] = data.map((item, rowIndex) => {\n const rowData: TableData[] = [\n ...(onSelect\n ? [\n {\n key: `select-${rowIndex}`,\n content: renderSelectionControl(item, rowIndex),\n },\n ]\n : []),\n ...columns.map((column, colIndex) => {\n return {\n key: typeof column.key === 'string' ? column.key : `cell-${colIndex}`,\n content: getCellContent(item, column),\n }\n }),\n ...(itemMenu\n ? [\n {\n key: `menu-${rowIndex}`,\n content: itemMenu(item),\n },\n ]\n : []),\n ]\n\n return {\n key: `row-${rowIndex}`,\n data: rowData,\n }\n })\n\n const buildFooterData = () => {\n if (!footer) return undefined\n\n const footerContent = footer()\n const footerCells: TableData[] = []\n\n // Add select column footer (empty)\n if (onSelect) {\n footerCells.push({\n key: 'footer-select',\n content: '',\n })\n }\n\n // Add data column footers\n columns.forEach((column, index) => {\n const columnKey = typeof column.key === 'string' ? column.key : `column-${index}`\n footerCells.push({\n key: `footer-${columnKey}`,\n content: footerContent[columnKey] || '',\n })\n })\n\n // Add actions column footer (empty)\n if (itemMenu) {\n footerCells.push({\n key: 'footer-actions',\n content: '',\n })\n }\n\n return footerCells\n }\n\n const footerData = buildFooterData()\n\n return (\n <Components.Table\n aria-label={label}\n data-testid=\"data-table\"\n headers={headers}\n rows={rows}\n footer={footerData}\n emptyState={emptyState ? emptyState() : undefined}\n isWithinBox={isWithinBox}\n hasCheckboxColumn={!!onSelect}\n />\n )\n}\n"],"names":["getCellContent","item","column","key","DataTable","label","data","columns","itemMenu","onSelect","onSelectAll","getIsItemSelected","emptyState","footer","isWithinBox","selectionMode","Components","useComponentContext","t","useTranslation","radioGroupName","useId","selectedRadioIndex","setSelectedRadioIndex","useState","allSelected","useSelectionState","headers","jsx","checked","VisuallyHidden","index","handleRadioSelect","rowIndex","renderSelectionControl","isSelected","rows","rowData","colIndex","footerData","footerContent","footerCells","columnKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataTable.js","sources":["../../../../../src/components/Common/DataView/DataTable/DataTable.tsx"],"sourcesContent":["import { useId, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { useDataViewPropReturn, SelectionMode } from '../useDataView'\nimport { useSelectionState } from '../useSelectionState'\nimport type { TableData, TableRow, TableProps } from '../../UI/Table/TableTypes'\nimport { VisuallyHidden } from '../../VisuallyHidden'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\n\nexport type DataTableProps<T> = {\n label: string\n columns: useDataViewPropReturn<T>['columns']\n data: useDataViewPropReturn<T>['data']\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: useDataViewPropReturn<T>['onSelect']\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll']\n emptyState?: useDataViewPropReturn<T>['emptyState']\n footer?: useDataViewPropReturn<T>['footer']\n isWithinBox?: TableProps['isWithinBox']\n selectionMode?: SelectionMode\n}\n\nfunction getCellContent<T>(\n item: T,\n column: { key?: string | keyof T; render?: (item: T) => React.ReactNode },\n) {\n if (column.render) {\n return column.render(item)\n }\n\n if (column.key) {\n const key = column.key as keyof T\n return String(item[key] ?? '')\n }\n\n return ''\n}\n\nexport const DataTable = <T,>({\n label,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n hideSelectAll,\n emptyState,\n footer,\n isWithinBox,\n selectionMode = 'multiple',\n}: DataTableProps<T>) => {\n const Components = useComponentContext()\n const { t } = useTranslation('common')\n const radioGroupName = useId()\n const [selectedRadioIndex, setSelectedRadioIndex] = useState<number | null>(null)\n const { allSelected } = useSelectionState(data, getIsItemSelected)\n\n const headers: TableData[] = [\n ...(onSelect\n ? [\n {\n key: 'select-header',\n content:\n selectionMode === 'multiple' &&\n getIsItemSelected &&\n !hideSelectAll &&\n data.length > 0 ? (\n // Stop propagation so the surrounding react-aria-components\n // <Column> press handler doesn't intercept the checkbox click\n // and desync the controlled DOM state. The inner <input> is\n // the actual interactive element; this span is a propagation\n // shield, not a click target itself.\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <span\n onClick={e => {\n e.stopPropagation()\n }}\n onPointerDown={e => {\n e.stopPropagation()\n }}\n onMouseDown={e => {\n e.stopPropagation()\n }}\n >\n <Components.Checkbox\n value={allSelected}\n onChange={(checked: boolean) => onSelectAll?.(checked, data)}\n label={t('table.selectAllRowsLabel')}\n shouldVisuallyHideLabel\n />\n </span>\n ) : (\n <VisuallyHidden>{t('table.selectRowHeader')}</VisuallyHidden>\n ),\n },\n ]\n : []),\n ...columns.map((column, index) => ({\n key: typeof column.key === 'string' ? column.key : `header-${index}`,\n content: column.title,\n })),\n ...(itemMenu\n ? [\n {\n key: 'actions-header',\n content: <VisuallyHidden>{t('table.actionsColumnHeader')}</VisuallyHidden>,\n },\n ]\n : []),\n ]\n\n const handleRadioSelect = (item: T, rowIndex: number) => {\n setSelectedRadioIndex(rowIndex)\n onSelect?.(item, true)\n }\n\n const renderSelectionControl = (item: T, rowIndex: number) => {\n if (selectionMode === 'single') {\n const isSelected = getIsItemSelected?.(item) ?? selectedRadioIndex === rowIndex\n return (\n <Components.Radio\n name={radioGroupName}\n value={isSelected}\n onChange={() => {\n handleRadioSelect(item, rowIndex)\n }}\n label={t('table.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n const isSelected = getIsItemSelected?.(item) ?? false\n return (\n <Components.Checkbox\n value={isSelected}\n onChange={(checked: boolean) => {\n onSelect?.(item, checked)\n }}\n label={t('table.selectRowLabel')}\n shouldVisuallyHideLabel\n />\n )\n }\n\n const rows: TableRow[] = data.map((item, rowIndex) => {\n const rowData: TableData[] = [\n ...(onSelect\n ? [\n {\n key: `select-${rowIndex}`,\n content: renderSelectionControl(item, rowIndex),\n },\n ]\n : []),\n ...columns.map((column, colIndex) => {\n return {\n key: typeof column.key === 'string' ? column.key : `cell-${colIndex}`,\n content: getCellContent(item, column),\n }\n }),\n ...(itemMenu\n ? [\n {\n key: `menu-${rowIndex}`,\n content: itemMenu(item),\n },\n ]\n : []),\n ]\n\n return {\n key: `row-${rowIndex}`,\n data: rowData,\n }\n })\n\n const buildFooterData = () => {\n if (!footer) return undefined\n\n const footerContent = footer()\n const footerCells: TableData[] = []\n\n // Add select column footer (empty)\n if (onSelect) {\n footerCells.push({\n key: 'footer-select',\n content: '',\n })\n }\n\n // Add data column footers\n columns.forEach((column, index) => {\n const columnKey = typeof column.key === 'string' ? column.key : `column-${index}`\n footerCells.push({\n key: `footer-${columnKey}`,\n content: footerContent[columnKey] || '',\n })\n })\n\n // Add actions column footer (empty)\n if (itemMenu) {\n footerCells.push({\n key: 'footer-actions',\n content: '',\n })\n }\n\n return footerCells\n }\n\n const footerData = buildFooterData()\n\n return (\n <Components.Table\n aria-label={label}\n data-testid=\"data-table\"\n headers={headers}\n rows={rows}\n footer={footerData}\n emptyState={emptyState ? emptyState() : undefined}\n isWithinBox={isWithinBox}\n hasCheckboxColumn={!!onSelect}\n />\n )\n}\n"],"names":["getCellContent","item","column","key","DataTable","label","data","columns","itemMenu","onSelect","onSelectAll","getIsItemSelected","hideSelectAll","emptyState","footer","isWithinBox","selectionMode","Components","useComponentContext","t","useTranslation","radioGroupName","useId","selectedRadioIndex","setSelectedRadioIndex","useState","allSelected","useSelectionState","headers","jsx","checked","VisuallyHidden","index","handleRadioSelect","rowIndex","renderSelectionControl","isSelected","rows","rowData","colIndex","footerData","footerContent","footerCells","columnKey"],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export type DataViewProps<T> = {
|
|
|
10
10
|
onSelect?: useDataViewPropReturn<T>['onSelect'];
|
|
11
11
|
onSelectAll?: useDataViewPropReturn<T>['onSelectAll'];
|
|
12
12
|
getIsItemSelected?: (item: T) => boolean;
|
|
13
|
+
hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll'];
|
|
13
14
|
breakAt?: string;
|
|
14
15
|
breakpoints?: useContainerBreakpointsProps['breakpoints'];
|
|
15
16
|
footer?: useDataViewPropReturn<T>['footer'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataView.js","sources":["../../../../src/components/Common/DataView/DataView.tsx"],"sourcesContent":["import { useMemo, useRef } from 'react'\nimport { PaginationControl } from '../PaginationControl/PaginationControl'\nimport type { TableProps } from '../UI/Table/TableTypes'\nimport styles from './DataView.module.scss'\nimport { DataTable } from './DataTable/DataTable'\nimport type { useDataViewPropReturn, SelectionMode } from './useDataView'\nimport { DataCards } from './DataCards/DataCards'\nimport type { useContainerBreakpointsProps } from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\n\nexport type DataViewProps<T> = {\n columns: useDataViewPropReturn<T>['columns']\n data: T[]\n pagination?: useDataViewPropReturn<T>['pagination']\n label: string\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: useDataViewPropReturn<T>['onSelect']\n onSelectAll?: useDataViewPropReturn<T>['onSelectAll']\n getIsItemSelected?: (item: T) => boolean\n breakAt?: string\n breakpoints?: useContainerBreakpointsProps['breakpoints']\n footer?: useDataViewPropReturn<T>['footer']\n isFetching?: boolean\n isWithinBox?: TableProps['isWithinBox']\n emptyState?: useDataViewPropReturn<T>['emptyState']\n selectionMode?: SelectionMode\n}\n\nexport const DataView = <T,>({\n pagination,\n isFetching,\n breakAt = 'small',\n breakpoints: customBreakpoints,\n footer,\n isWithinBox,\n emptyState,\n selectionMode,\n onSelectAll,\n ...dataViewProps\n}: DataViewProps<T>) => {\n const containerRef = useRef<HTMLElement | null>(null)\n const breakpoints = useContainerBreakpoints({\n ref: containerRef,\n breakpoints: customBreakpoints,\n })\n\n // Wait for breakpoints to be detected before rendering\n const isBreakpointsDetected = breakpoints.length > 0\n const isMobile = !breakpoints.includes(breakAt)\n\n const Component = useMemo(() => {\n return isMobile ? DataCards : DataTable\n }, [isMobile])\n\n return (\n <div\n data-testid=\"data-view\"\n className={styles.dataViewContainer}\n ref={ref => {\n containerRef.current = ref\n }}\n >\n {isBreakpointsDetected && (\n <Component\n {...dataViewProps}\n onSelectAll={onSelectAll}\n footer={footer}\n isWithinBox={isWithinBox}\n emptyState={emptyState}\n selectionMode={selectionMode}\n />\n )}\n {pagination && <PaginationControl {...pagination} isFetching={isFetching} />}\n </div>\n )\n}\n"],"names":["DataView","pagination","isFetching","breakAt","customBreakpoints","footer","isWithinBox","emptyState","selectionMode","onSelectAll","dataViewProps","containerRef","useRef","breakpoints","useContainerBreakpoints","isBreakpointsDetected","isMobile","Component","useMemo","DataCards","DataTable","jsxs","styles","ref","jsx","PaginationControl"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"DataView.js","sources":["../../../../src/components/Common/DataView/DataView.tsx"],"sourcesContent":["import { useMemo, useRef } from 'react'\nimport { PaginationControl } from '../PaginationControl/PaginationControl'\nimport type { TableProps } from '../UI/Table/TableTypes'\nimport styles from './DataView.module.scss'\nimport { DataTable } from './DataTable/DataTable'\nimport type { useDataViewPropReturn, SelectionMode } from './useDataView'\nimport { DataCards } from './DataCards/DataCards'\nimport type { useContainerBreakpointsProps } from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\n\nexport type DataViewProps<T> = {\n columns: useDataViewPropReturn<T>['columns']\n data: T[]\n pagination?: useDataViewPropReturn<T>['pagination']\n label: string\n itemMenu?: useDataViewPropReturn<T>['itemMenu']\n onSelect?: useDataViewPropReturn<T>['onSelect']\n onSelectAll?: useDataViewPropReturn<T>['onSelectAll']\n getIsItemSelected?: (item: T) => boolean\n hideSelectAll?: useDataViewPropReturn<T>['hideSelectAll']\n breakAt?: string\n breakpoints?: useContainerBreakpointsProps['breakpoints']\n footer?: useDataViewPropReturn<T>['footer']\n isFetching?: boolean\n isWithinBox?: TableProps['isWithinBox']\n emptyState?: useDataViewPropReturn<T>['emptyState']\n selectionMode?: SelectionMode\n}\n\nexport const DataView = <T,>({\n pagination,\n isFetching,\n breakAt = 'small',\n breakpoints: customBreakpoints,\n footer,\n isWithinBox,\n emptyState,\n selectionMode,\n onSelectAll,\n ...dataViewProps\n}: DataViewProps<T>) => {\n const containerRef = useRef<HTMLElement | null>(null)\n const breakpoints = useContainerBreakpoints({\n ref: containerRef,\n breakpoints: customBreakpoints,\n })\n\n // Wait for breakpoints to be detected before rendering\n const isBreakpointsDetected = breakpoints.length > 0\n const isMobile = !breakpoints.includes(breakAt)\n\n const Component = useMemo(() => {\n return isMobile ? DataCards : DataTable\n }, [isMobile])\n\n return (\n <div\n data-testid=\"data-view\"\n className={styles.dataViewContainer}\n ref={ref => {\n containerRef.current = ref\n }}\n >\n {isBreakpointsDetected && (\n <Component\n {...dataViewProps}\n onSelectAll={onSelectAll}\n footer={footer}\n isWithinBox={isWithinBox}\n emptyState={emptyState}\n selectionMode={selectionMode}\n />\n )}\n {pagination && <PaginationControl {...pagination} isFetching={isFetching} />}\n </div>\n )\n}\n"],"names":["DataView","pagination","isFetching","breakAt","customBreakpoints","footer","isWithinBox","emptyState","selectionMode","onSelectAll","dataViewProps","containerRef","useRef","breakpoints","useContainerBreakpoints","isBreakpointsDetected","isMobile","Component","useMemo","DataCards","DataTable","jsxs","styles","ref","jsx","PaginationControl"],"mappings":";;;;;;;AA6BO,MAAMA,IAAW,CAAK;AAAA,EAC3B,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,aAAaC;AAAA,EACb,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,GAAGC;AACL,MAAwB;AACtB,QAAMC,IAAeC,EAA2B,IAAI,GAC9CC,IAAcC,EAAwB;AAAA,IAC1C,KAAKH;AAAA,IACL,aAAaP;AAAA,EAAA,CACd,GAGKW,IAAwBF,EAAY,SAAS,GAC7CG,IAAW,CAACH,EAAY,SAASV,CAAO,GAExCc,IAAYC,EAAQ,MACjBF,IAAWG,IAAYC,GAC7B,CAACJ,CAAQ,CAAC;AAEb,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAWC,EAAO;AAAA,MAClB,KAAK,CAAAC,MAAO;AACV,QAAAZ,EAAa,UAAUY;AAAA,MACzB;AAAA,MAEC,UAAA;AAAA,QAAAR,KACC,gBAAAS;AAAA,UAACP;AAAA,UAAA;AAAA,YACE,GAAGP;AAAA,YACJ,aAAAD;AAAA,YACA,QAAAJ;AAAA,YACA,aAAAC;AAAA,YACA,YAAAC;AAAA,YACA,eAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGHP,KAAc,gBAAAuB,EAACC,GAAA,EAAmB,GAAGxB,GAAY,YAAAC,EAAA,CAAwB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhF;"}
|
|
@@ -18,6 +18,12 @@ type BaseDataViewProps<T> = {
|
|
|
18
18
|
emptyState?: () => React.ReactNode;
|
|
19
19
|
footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>;
|
|
20
20
|
isFetching?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* When true, hides the select-all header checkbox (DataTable) and the
|
|
23
|
+
* select-all row (DataCards). Only meaningful with `selectionMode: 'multiple'`.
|
|
24
|
+
* Per-row checkboxes are unaffected.
|
|
25
|
+
*/
|
|
26
|
+
hideSelectAll?: boolean;
|
|
21
27
|
};
|
|
22
28
|
type NoSelectionProps = {
|
|
23
29
|
onSelect?: undefined;
|
|
@@ -56,10 +62,11 @@ export type useDataViewPropReturn<T> = {
|
|
|
56
62
|
onSelect?: (item: T, checked: boolean) => void;
|
|
57
63
|
onSelectAll?: (checked: boolean, visibleData: T[]) => void;
|
|
58
64
|
getIsItemSelected?: (item: T) => boolean;
|
|
65
|
+
hideSelectAll?: boolean;
|
|
59
66
|
emptyState?: () => React.ReactNode;
|
|
60
67
|
footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>;
|
|
61
68
|
isFetching?: boolean;
|
|
62
69
|
selectionMode?: SelectionMode;
|
|
63
70
|
};
|
|
64
|
-
export declare const useDataView: <T>({ columns, data, itemMenu, onSelect, onSelectAll, getIsItemSelected, pagination, emptyState, footer, isFetching, selectionMode, }: useDataViewProp<T>) => useDataViewPropReturn<T>;
|
|
71
|
+
export declare const useDataView: <T>({ columns, data, itemMenu, onSelect, onSelectAll, getIsItemSelected, hideSelectAll, pagination, emptyState, footer, isFetching, selectionMode, }: useDataViewProp<T>) => useDataViewPropReturn<T>;
|
|
65
72
|
export {};
|
|
@@ -1,42 +1,45 @@
|
|
|
1
|
-
import { useMemo as
|
|
2
|
-
const
|
|
1
|
+
import { useMemo as j } from "react";
|
|
2
|
+
const q = ({
|
|
3
3
|
columns: r,
|
|
4
4
|
data: w,
|
|
5
5
|
itemMenu: V,
|
|
6
6
|
onSelect: p,
|
|
7
7
|
onSelectAll: s,
|
|
8
8
|
getIsItemSelected: u,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
hideSelectAll: P,
|
|
10
|
+
pagination: a,
|
|
11
|
+
emptyState: x,
|
|
12
|
+
footer: D,
|
|
13
|
+
isFetching: b,
|
|
14
|
+
selectionMode: f
|
|
15
|
+
}) => j(() => ({
|
|
16
|
+
pagination: a,
|
|
16
17
|
data: w,
|
|
17
18
|
columns: r,
|
|
18
19
|
itemMenu: V,
|
|
19
20
|
onSelect: p,
|
|
20
21
|
onSelectAll: s,
|
|
21
22
|
getIsItemSelected: u,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
hideSelectAll: P,
|
|
24
|
+
emptyState: x,
|
|
25
|
+
footer: D,
|
|
26
|
+
isFetching: b,
|
|
27
|
+
selectionMode: f
|
|
26
28
|
}), [
|
|
27
|
-
|
|
29
|
+
a,
|
|
28
30
|
w,
|
|
29
31
|
r,
|
|
30
32
|
V,
|
|
31
33
|
p,
|
|
32
34
|
s,
|
|
33
35
|
u,
|
|
34
|
-
|
|
36
|
+
P,
|
|
35
37
|
x,
|
|
36
38
|
D,
|
|
37
|
-
b
|
|
39
|
+
b,
|
|
40
|
+
f
|
|
38
41
|
]);
|
|
39
42
|
export {
|
|
40
|
-
|
|
43
|
+
q as useDataView
|
|
41
44
|
};
|
|
42
45
|
//# sourceMappingURL=useDataView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataView.js","sources":["../../../../src/components/Common/DataView/useDataView.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\n\nexport type SelectionMode = 'multiple' | 'single'\n\ntype DataViewColumn<T> =\n | {\n key: keyof T\n title: string | React.ReactNode\n render?: (item: T) => React.ReactNode\n }\n | {\n key?: string\n title: string | React.ReactNode\n render: (item: T) => React.ReactNode\n }\n\ntype FooterKeys<T> = keyof T | string\n\ntype BaseDataViewProps<T> = {\n columns: DataViewColumn<T>[]\n data: T[]\n pagination?: PaginationControlProps\n itemMenu?: (item: T) => React.ReactNode\n emptyState?: () => React.ReactNode\n footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>\n isFetching?: boolean\n}\n\ntype NoSelectionProps = {\n onSelect?: undefined\n onSelectAll?: undefined\n getIsItemSelected?: undefined\n selectionMode?: undefined\n}\n\ntype SingleSelectionProps<T> = {\n selectionMode: 'single'\n onSelect: (item: T, checked: boolean) => void\n onSelectAll?: undefined\n getIsItemSelected?: (item: T) => boolean\n}\n\ntype MultipleSelectionProps<T> = {\n selectionMode?: 'multiple'\n onSelect: (item: T, checked: boolean) => void\n /**\n * Called when the select-all checkbox is toggled.\n * The header checkbox state reflects only the currently visible `data` array.\n * With pagination, consumers decide whether to select all data or only the visible page.\n * `visibleData` is the current page's data array for reference.\n */\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n /**\n * Required for multi-select. Returns whether a given item is currently selected.\n * Use a stable identifier from the item (e.g. item.id) rather than array index.\n */\n getIsItemSelected: (item: T) => boolean\n}\n\nexport type useDataViewProp<T> = BaseDataViewProps<T> &\n (NoSelectionProps | SingleSelectionProps<T> | MultipleSelectionProps<T>)\n\nexport type useDataViewPropReturn<T> = {\n pagination?: PaginationControlProps\n data: T[]\n columns: DataViewColumn<T>[]\n itemMenu?: (item: T) => React.ReactNode\n onSelect?: (item: T, checked: boolean) => void\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n emptyState?: () => React.ReactNode\n footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>\n isFetching?: boolean\n selectionMode?: SelectionMode\n}\n\nexport const useDataView = <T>({\n columns,\n data,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n pagination,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n}: useDataViewProp<T>): useDataViewPropReturn<T> => {\n const dataViewProps = useMemo(() => {\n return {\n pagination,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n }\n }, [\n pagination,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n ])\n\n return dataViewProps\n}\n"],"names":["useDataView","columns","data","itemMenu","onSelect","onSelectAll","getIsItemSelected","pagination","emptyState","footer","isFetching","selectionMode","useMemo"],"mappings":";
|
|
1
|
+
{"version":3,"file":"useDataView.js","sources":["../../../../src/components/Common/DataView/useDataView.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\n\nexport type SelectionMode = 'multiple' | 'single'\n\ntype DataViewColumn<T> =\n | {\n key: keyof T\n title: string | React.ReactNode\n render?: (item: T) => React.ReactNode\n }\n | {\n key?: string\n title: string | React.ReactNode\n render: (item: T) => React.ReactNode\n }\n\ntype FooterKeys<T> = keyof T | string\n\ntype BaseDataViewProps<T> = {\n columns: DataViewColumn<T>[]\n data: T[]\n pagination?: PaginationControlProps\n itemMenu?: (item: T) => React.ReactNode\n emptyState?: () => React.ReactNode\n footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>\n isFetching?: boolean\n /**\n * When true, hides the select-all header checkbox (DataTable) and the\n * select-all row (DataCards). Only meaningful with `selectionMode: 'multiple'`.\n * Per-row checkboxes are unaffected.\n */\n hideSelectAll?: boolean\n}\n\ntype NoSelectionProps = {\n onSelect?: undefined\n onSelectAll?: undefined\n getIsItemSelected?: undefined\n selectionMode?: undefined\n}\n\ntype SingleSelectionProps<T> = {\n selectionMode: 'single'\n onSelect: (item: T, checked: boolean) => void\n onSelectAll?: undefined\n getIsItemSelected?: (item: T) => boolean\n}\n\ntype MultipleSelectionProps<T> = {\n selectionMode?: 'multiple'\n onSelect: (item: T, checked: boolean) => void\n /**\n * Called when the select-all checkbox is toggled.\n * The header checkbox state reflects only the currently visible `data` array.\n * With pagination, consumers decide whether to select all data or only the visible page.\n * `visibleData` is the current page's data array for reference.\n */\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n /**\n * Required for multi-select. Returns whether a given item is currently selected.\n * Use a stable identifier from the item (e.g. item.id) rather than array index.\n */\n getIsItemSelected: (item: T) => boolean\n}\n\nexport type useDataViewProp<T> = BaseDataViewProps<T> &\n (NoSelectionProps | SingleSelectionProps<T> | MultipleSelectionProps<T>)\n\nexport type useDataViewPropReturn<T> = {\n pagination?: PaginationControlProps\n data: T[]\n columns: DataViewColumn<T>[]\n itemMenu?: (item: T) => React.ReactNode\n onSelect?: (item: T, checked: boolean) => void\n onSelectAll?: (checked: boolean, visibleData: T[]) => void\n getIsItemSelected?: (item: T) => boolean\n hideSelectAll?: boolean\n emptyState?: () => React.ReactNode\n footer?: () => Partial<Record<FooterKeys<T>, React.ReactNode>>\n isFetching?: boolean\n selectionMode?: SelectionMode\n}\n\nexport const useDataView = <T>({\n columns,\n data,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n hideSelectAll,\n pagination,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n}: useDataViewProp<T>): useDataViewPropReturn<T> => {\n const dataViewProps = useMemo(() => {\n return {\n pagination,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n hideSelectAll,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n }\n }, [\n pagination,\n data,\n columns,\n itemMenu,\n onSelect,\n onSelectAll,\n getIsItemSelected,\n hideSelectAll,\n emptyState,\n footer,\n isFetching,\n selectionMode,\n ])\n\n return dataViewProps\n}\n"],"names":["useDataView","columns","data","itemMenu","onSelect","onSelectAll","getIsItemSelected","hideSelectAll","pagination","emptyState","footer","isFetching","selectionMode","useMemo"],"mappings":";AAoFO,MAAMA,IAAc,CAAI;AAAA,EAC7B,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AACF,MACwBC,EAAQ,OACrB;AAAA,EACL,YAAAL;AAAA,EACA,MAAAN;AAAA,EACA,SAAAD;AAAA,EACA,UAAAE;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAE;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAC;AAAA,IAED;AAAA,EACDJ;AAAA,EACAN;AAAA,EACAD;AAAA,EACAE;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAE;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,CACD;"}
|